$v='f$verify(0)	!make-cccp.com
$!
$!	Build the GNU C preprocessor on VMS.
$!
$!	Usage:
$!	  $ @make-cccp.com [compiler] [link-only]
$!
$!	where [compiler] is one of "GNUC", "VAXC", "DECC";
$!	default when none specified is "GNUC",
$!	and where [link-only] is "LINK" or omitted.
$!	If both options are specified, the compiler must come first.
$!
$ if f$type(gcc_debug).eqs."INTEGER" then  if gcc_debug.and.1 then  set verify
$
$ p1 = f$edit(p1,"UPCASE,TRIM")
$ if p1.eqs."" then  p1 = "GNUC"
$!
$!	Compiler-specific setup (assume GNU C, then override as necessary):
$!
$ CC	 = "gcc"
$ CFLAGS = "/Opt=2/Debug/noVerbos"
$ LIBS	 = "gnu_cc:[000000]gcclib.olb/Libr,sys$library:vaxcrtl.olb/Libr"
$ if p1.nes."GNUC"
$ then
$   CC	   = "cc"
$   CFLAGS = "/noOpt"	!disable optimizer when bootstrapping with native cc
$   if p1.eqs."VAXC"
$   then
$     if f$trnlnm("DECC$CC_DEFAULT").nes."" then  CC = "cc/VAXC"
$     LIBS = "alloca.obj,sys$library:vaxcrtl.olb/Libr"
$     define/noLog SYS SYS$LIBRARY:
$   else
$     if p1.eqs."DECC"
$     then
$	if f$trnlnm("DECC$CC_DEFAULT").nes."" then  CC = "cc/DECC"
$	CC = CC + "/Prefix=All"
$	LIBS = "alloca.obj"	!DECC$SHR will be found implicitly by linker
$	define/noLog SYS DECC$LIBRARY_INCLUDE:
$     else
$	if p1.nes."LINK"
$	then
$	  type sys$input: /Output=sys$error:
$DECK
[compiler] argument should be one of "GNUC", "VAXC", or "DECC".

Usage:
$ @make-cccp.com [compiler] [link-only]

$EOD
$	  exit %x1000002C + 0*f$verify(v)	!%SYSTEM-F-ABORT
$	endif !!LINK
$     endif !DECC
$   endif !VAXC
$ endif !!GNUC
$
$!
$!	Other setup:
$!
$ LDFLAGS =	"/noMap"
$ PARSER  =	"bison"
$ RENAME  =	"rename/New_Version"
$ LINK	  =	"link"
$ echo	  =	"write sys$output"
$
$!!!!!!!
$!	Nothing beyond this point should need any local configuration changes.
$!!!!!!!
$
$! Set the default directory to the same place as this command procedure.
$ flnm = f$enviroment("PROCEDURE")	!get current procedure name
$ set default 'f$parse(flnm,,,"DEVICE")''f$parse(flnm,,,"DIRECTORY")'
$
$ if p1.eqs."LINK" .or. p2.eqs."LINK" then  goto Link
$ echo " Building the preprocessor."
$
$! Compile the simplest file first, to catch problem with compiler setup early.
$ set verify
$ 'CC''CFLAGS' version.c
$!'f$verify(0)
$
$ set verify
$ 'CC''CFLAGS' cccp.c
$!'f$verify(0)
$
$! Compile preprocessor's parser, possibly making it with yacc first.
$ if f$search("CEXP.C").nes."" then -
    if f$cvtime(f$file_attributes("CEXP.C","RDT")).ges.-
       f$cvtime(f$file_attributes("CEXP.Y","RDT")) then  goto skip_yacc
$ set verify
$ 'PARSER' cexp.y
$ 'RENAME' cexp_tab.c cexp.c
$!'f$verify(0)
$skip_yacc:
$ echo " (Ignore any warning about not finding file ""bison.simple"".)"
$ set verify
$ 'CC''CFLAGS' cexp.c
$ 'CC''CFLAGS'/Define="PREFIX=""_dummy_""" prefix.c
$!'f$verify(0)
$
$! In case there's no builtin alloca support, use the C simulation.
$ if f$locate("alloca.obj",f$edit(LIBS,"lowercase")).lt.f$length(LIBS)
$ then
$  set verify
$ 'CC''CFLAGS'/Incl=[]/Defi=("HAVE_CONFIG_H","STACK_DIRECTION=(-1)") alloca.c
$!'f$verify(0)
$ endif
$!
$
$Link:
$ echo " Linking the preprocessor."
$ set verify
$ 'LINK''LDFLAGS'/Exe=gcc-cpp.exe -
	  cccp.obj,cexp.obj,prefix.obj,version.obj,version.opt/Opt,-
	  'LIBS'
$!'f$verify(0)
$!
$!	Done
$!
$ exit 1+0*f$verify(v)
