The following are changes Lincoln Baxter needed to make to get Gnu C 1.24 working on VMS. One presumes they may be needed on later GCC versions also. ---------------------- Changes to GNU GCC software for VAX: CONFIG-VMS.H **** changed: #ifndef __GNUC__ /* not present, at least in VAX-11 C (VMS) v2.2 */ #define R_OK 4 #define W_OK 2 #define X_OK 1 #define F_OK 0 #define unlink delete #endif **** to: /* not present, at least in VAX-11 C (VMS) v2.2 */ #define R_OK 4 #define W_OK 2 #define X_OK 1 #define F_OK 0 #define unlink delete **** Explanation: remove conditional define based on __GNUC__ These where undefined in GCC.C ... They could be made conditional on themselves... ******************************************************************** **** IN GCC.C: **** changed: #ifndef STANDARD_EXEC_PREFIX #define STANDARD_EXEC_PREFIX "/usr/local/lib/gcc-" #endif /* !defined STANDARD_EXEC_PREFIX */ char *standard_exec_prefix = STANDARD_EXEC_PREFIX; char *standard_exec_prefix_1 = "/usr/lib/gcc-"; char *standard_startfile_prefix = "/lib/"; char *standard_startfile_prefix_1 = "/usr/lib/"; **** to: /* Default prefixes to attach to command names. */ #ifndef STANDARD_EXEC_PREFIX #define STANDARD_EXEC_PREFIX "/usr/local/lib/gcc-" #endif /* !defined STANDARD_EXEC_PREFIX */ #ifndef STANDARD_EXEC_PREFIX_1 #define STANDARD_EXEC_PREFIX_1 "/usr/lib/gcc-" #endif /* !defined STANDARD_EXEC_PREFIX_1 */ #ifndef STANDARD_STARTFILE_PREFIX #define STANDARD_STARTFILE_PREFIX "/lib/" #endif /* !defined STANDARD_STARTFILE_PREFIX */ #ifndef STANDARD_STARTFILE_PREFIX #define STANDARD_STARTFILE_PREFIX "/lib/" #endif /* !defined STANDARD_STARTFILE_PREFIX */ #ifndef STANDARD_STARTFILE_PREFIX_1 #define STANDARD_STARTFILE_PREFIX_1 "/usr/lib/" #endif /* !defined STANDARD_STARTFILE_PREFIX_1 */ char *standard_exec_prefix = STANDARD_EXEC_PREFIX; char *standard_exec_prefix_1 = STANDARD_EXEC_PREFIX_1; char *standard_startfile_prefix = STANDARD_STARTFILE_PREFIX; char *standard_startfile_prefix_1 = STANDARD_STARTFILE_PREFIX_1; CHANGED CONFIG-VMS.H: #define STANDARD_EXEC_PREFIX "vax$exe:gcc-" /* local directory for images */ #define STANDARD_EXEC_PREFIX_1 "sys$system:gcc-" /* dec's directory for images */ #define STANDARD_STARTFILE_PREFIX "vax$sysroot:[sysexe.]" /* local directory for images */ #define STANDARD_STARTFILE_PREFIX_1 "sys$sysroot:[sysexe.]" /* dec's directory for images */ **** explanation: So these are NOT hard coded, and can be defined in config-MACHINE(OS).h or in the makefile **** in CCCP.C: modified the directory search list code as follows: /* GCC_INCLUDE_DIR is assumed to be defined (by makefile in UNIX), or by config-VMS in VMS */ #ifndef SYSTEM_INCLUDE_DIR #define SYSTEM_INCLUDE_DIR "/usr/include" #endif struct directory_stack include_defaults[] = { #ifndef VMS { &include_defaults[1], GCC_INCLUDE_DIR }, { 0, SYSTEM_INCLUDE_DIR } #else { &include_defaults[1], GCC_INCLUDE_DIR }, /* GNU GCC includes */ { &include_defaults[2], SYSTEM_INCLUDE_DIR }, /* VAX-11 "C" includes */ { 0, "" }, /* This makes normal VMS filespecs work OK */ #endif /* VMS */ }; /* These are used instead of the above, for C++. */ struct directory_stack cplusplus_include_defaults[] = { #ifndef VMS /* Pick up GNU C++ specific include files. */ { &cplusplus_include_defaults[1], GPLUSPLUS_INCLUDE_DIR }, /* Borrow AT&T C++ head files, if available. */ { &cplusplus_include_defaults[2], "/usr/include/CC" }, /* Use GNU CC specific header files. */ { &cplusplus_include_defaults[3], GCC_INCLUDE_DIR }, { 0, SYSTEM_INCLUDE_DIR } #else { &cplusplus_include_defaults[1], GPLUSPLUS_INCLUDE_DIR }, /* VAX-11 C includes */ { &cplusplus_include_defaults[2], SYSTEM_INCLUDE_DIR }, { 0, "" }, /* This makes normal VMS filespecs work OK */ #endif /* VMS */ }; **** made following additions to config-VMS.h to support this: /* defines for VMS include dirs: #define GCC_INCLUDE_DIR "GCC_INCLUDE_DIR:" /* define GPLUSPLUS_INCLUDE_DIR as search list on your VMS system which includes GCC_INCLUDE_DIR as it's SECOND element this gets VMS to look FIRST in GPP directories and if it fails to find the file it looks NEXT in the GCC directories. This effectively provides on VMS then equivalent of the UNIX multiple directory entries */ #define GPLUSPLUS_INCLUDE_DIR "GPLUSPLUS_INCLUDE_DIR:" #define SYSTEM_INCLUDE_DIR "SYS$SYSROOT:[SYSLIB.]" *************************************************************************** **** in gcc.c modified choose_temp_base as follows... Added ifndef and changed assignment of *foo to the MACRO: /* Compute a string to use as the base of all temporary file names. It is substituted for %g. */ #ifndef TEMP_FILE_PREFIX #define TEMP_FILE_PREFIX "/tmp/ccXXXXXX" #endif void choose_temp_base () { register char *foo = TEMP_FILE_PREFIX; temp_filename = (char *) xmalloc (strlen (foo) + 1); strcpy (temp_filename, foo); mktemp (temp_filename); temp_filename_length = strlen (temp_filename); } **** in config-VMS.h added to support VMS **** #define TEMP_FILE_PREFIX "ccXXXXXX"