diff options
Diffstat (limited to 'vms/generate_config_vms_h_gawk.com')
-rw-r--r-- | vms/generate_config_vms_h_gawk.com | 290 |
1 files changed, 290 insertions, 0 deletions
diff --git a/vms/generate_config_vms_h_gawk.com b/vms/generate_config_vms_h_gawk.com new file mode 100644 index 00000000..11493e5d --- /dev/null +++ b/vms/generate_config_vms_h_gawk.com @@ -0,0 +1,290 @@ +$! File: GENERATE_CONFIG_H_VMS_GAWK.COM +$! +$! Gawk like most open source products uses a variant of a config.h file. +$! Depending on the curl version, this could be config.h or curl_config.h. +$! +$! For GNV based builds, the configure script is run and that produces +$! a [curl_]config.h file. Configure scripts on VMS generally do not +$! know how to do everything, so there is also a [-.lib]config-vms.h file +$! that has VMS specific code that compensates for bugs in some of the +$! VMS shared images. +$! +$! This generates a []config.h file and also a config_vms.h file, +$! which is used to supplement that file. +$! +$! +$! Copyright 2013, John Malmberg +$! +$! Permission to use, copy, modify, and/or distribute this software for any +$! purpose with or without fee is hereby granted, provided that the above +$! copyright notice and this permission notice appear in all copies. +$! +$! THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +$! WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +$! MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +$! ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +$! WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +$! ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT +$! OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +$! +$! +$! 28-Nov-2013 J. Malmberg +$! +$!========================================================================= +$! +$! Allow arguments to be grouped together with comma or separated by spaces +$! Do no know if we will need more than 8. +$ args = "," + p1 + "," + p2 + "," + p3 + "," + p4 + "," +$ args = args + p5 + "," + p6 + "," + p7 + "," + p8 + "," +$! +$! Provide lower case version to simplify parsing. +$ args_lower = f$edit(args, "LOWERCASE") +$! +$ args_len = f$length(args) +$! +$ if (f$getsyi("HW_MODEL") .lt. 1024) +$ then +$ arch_name = "VAX" +$ else +$ arch_name = "" +$ arch_name = arch_name + f$edit(f$getsyi("ARCH_NAME"), "UPCASE") +$ if (arch_name .eqs. "") then arch_name = "UNK" +$ endif +$! +$! +$! Start the configuration file. +$! Need to do a create and then an append to make the file have the +$! typical file attributes of a VMS text file. +$ create sys$disk:[]config_vms.h +$ open/append cvh sys$disk:[]config_vms.h +$! +$! Write the defines to prevent multiple includes. +$! These are probably not needed in this case, +$! but are best practice to put on all header files. +$ write cvh "#ifndef __CONFIG_VMS_H__" +$ write cvh "#define __CONFIG_VMS_H__" +$ write cvh "" +$! +$ write cvh "#if __CRTL_VER >= 70000000" +$ write cvh "#define VMS_V7" +$ write cvh "#else" +$ write cvh "#define HAVE_TZNAME 1 /* (faked in vms/vms_misc.c) */ +$ write cvh "#define HAVE_TZSET 1 /* (faked in vms/vms_misc.c) */ +$ write cvh "#endif" +$ write cvh "#if __CRTL_VER >= 70200000" +$ write cvh "#define DYNAMIC 1" +$ write cvh "#endif" +$ write cvh "" +$ write cvh "#define PRINTF_HAS_F_FORMAT 1" +$ write cvh "" +$ write cvh "/* The _Noreturn keyword of C11. */" +$ write cvh "#ifndef _Noreturn" +$ write cvh "# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \" +$ write cvh " || 0x5110 <= __SUNPRO_C)" +$ write cvh "# define _Noreturn __attribute__ ((__noreturn__))" +$ write cvh "# elif defined _MSC_VER && 1200 <= _MSC_VER" +$ write cvh "# define _Noreturn __declspec (noreturn)" +$ write cvh "# else" +$ write cvh "# define _Noreturn" +$ write cvh "# endif" +$ write cvh "#endif" +$ write cvh "" +$ write cvh "/*" +$ write cvh " * VAXCRTL is pre-ANSI and does some variations of numeric" +$ write cvh " * formatting differently than gawk expects." +$ write cvh " */" +$ write cvh "#if defined(VAX) && !defined(__DECC)" +$ write cvh - + "/* '0' format modifier for %e,%f,%g gives wrong results in many cases */" +$ write cvh "#define VAXCRTL" +$ write cvh "/* %g format chooses %e format when should use %f */" +$ write cvh "#define GFMT_WORKAROUND 1" +$ write cvh "#endif" +$ write cvh "" +$ write cvh "/*" +$ write cvh " * VAX C" +$ write cvh " *" +$ write cvh - + " * As of V3.2, VAX C is not yet ANSI-compliant. But it's close enough" +$ write cvh - + " * for GAWK's purposes. Comment this out for VAX C V2.4 and earlier." +$ write cvh - + " * YYDEBUG definition is needed for combination of VAX C V2.x and Bison." +$ write cvh " */" +$ write cvh "#if defined(VAXC) && !defined(__STDC__)" +$ write cvh "#define __STDC__ 0" +$ write cvh "#define NO_TOKEN_PASTING" +$ write cvh "#define signed /*empty*/" +$ write cvh "#define inline /*empty*/" +$ write cvh "#ifndef __DECC /* DEC C does not support #pragma builtins */" +$ write cvh "#define VAXC_BUILTINS" +$ write cvh "#endif" +$ write cvh "/* #define YYDEBUG 0 */" +$ write cvh - + "#define NO_MBSUPPORT /* VAX C's preprocessor can't handle mbsupport.h */" +$ write cvh "#endif" +$ write cvh "" +$ write cvh "" +$ write cvh "#if __DECC_VER >= 60400000 && !defined(DEBUG)" +$ write cvh "/* disable ""new feature in C99"" diagnostics (for regex code); " +$ write cvh " NEWC99 ought to suffice but doesn't (at least in V6.4) */" +$ write cvh "#pragma message disable (NEWC99,DESIGNATORUSE)" +$ write cvh "#ifdef __VAX +$ write cvh "#endif +$ write cvh "#pragma message disable (LONGDOUBLENYI)" +$ write cvh "#endif" +$! +$! This stuff seems needed for VMS 7.3 and earlier, but not VMS 8.2+ +$ write cvh "#if __VMS_VER <= 80200000" +$ write cvh "#ifdef HAVE_MKSTEMP" +$ write cvh "#undef HAVE_MKSTEMP" +$ write cvh "#endif" +$ write cvh "#endif" +$ write cvh "" +$! +$! VMS not legal for ANSI compiler to pre-define +$ write cvh "#ifndef VMS" +$ write cvh "#define VMS 1" +$ write cvh "#endif" +$ write cvh "" +$! +$! Need to temp hide stuff that gawk is replacing or redefining before +$! including the header. +$ write cvh "/* Need to hide some stuff */" +$ write cvh "#define getopt hide_getopt" +$ write cvh "#define optopt hide_optopt" +$ write cvh "#define optind hide_optind" +$ write cvh "#define optarg hide_optarg" +$ write cvh "#define opterr hide_opterr" +$ write cvh "#define getpgrp hide_getpgrp" +$ write cvh "#define unsetenv hide_unsetenv" +$ write cvh "#define read hide_read" +$ write cvh "#define delete hide_delete" +$ write cvh "#define getcwd hide_getcwd" +$ write cvh "#define getgid hide_getgid" +$ write cvh "#define getegid hide_getegid" +$ write cvh "#define setgid hide_setgid" +$ write cvh "#define exit hide_exit" +$ write cvh "#define _exit hide__exit" +$ write cvh "#include <unistd.h>" +$ write cvh "#include <stdlib.h>" +$ write cvh "#include <stdio.h>" +$ write cvh "#include <time.h>" +$ write cvh "#include <stsdef.h>" +$ write cvh "#include <string.h>" +$ write cvh "#undef getopt" +$ write cvh "#undef optopt" +$ write cvh "#undef optind" +$ write cvh "#undef optarg" +$ write cvh "#undef opterr" +$ write cvh "#undef getpgrp" +$ write cvh "#undef getcwd" +$ write cvh "#undef unsetenv" +$ write cvh "#undef read" +$ write cvh "#undef delete" +$ write cvh "#undef getgid" +$ write cvh "#undef getegid" +$ write cvh "#undef setgid" +$ write cvh "#undef exit" +$ write cvh "#undef _exit" +$! +$write cvh "#ifdef HAVE_STRNCASECMP" +$write cvh "#undef HAVE_STRNCASECMP" +$write cvh "#endif" +$! +$ write cvh "#define IN_CONFIG_H" +$ write cvh "#include ""redirect.h""" +$ write cvh "#undef IN_CONFIG_H" +$ write cvh "#define getpgrp gawk_vms_getpgrp" +$ write cvh "#ifdef HAVE_SETENV" +$ write cvh "#undef HAVE_SETENV" +$ write cvh "#endif" +$ write cvh "#ifdef HAVE_UNSETENV" +$ write cvh "#undef HAVE_UNSETENV" +$ write cvh "#endif" +$ write cvh "#ifdef HAVE_STRFTIME" +$ write cvh "#undef HAVE_STRFTIME" +$ write cvh "#define USE_INCLUDED_STRFTIME" +$ write cvh "#endif /* HAVE_STRFTIME */" +$ write cvh "" +$ write cvh "#include <bitypes.h>" +$ write cvh "#define INT32_MAX __INT32_MAX" +$ write cvh "#define INT32_MIN __INT32_MIN" +$ write cvh "" +$ write cvh "/*" +$ write cvh " * DEFPATH" +$ write cvh " * VMS: ""/AWK_LIBRARY"" => ""AWK_LIBRARY:""" +$ write cvh " * The default search path for the -f option of gawk. It is" +$ write cvh " * used if the AWKPATH environment variable is undefined." +$ write cvh " *" +$ write cvh " * Note: OK even if no AWK_LIBRARY logical name has been defined." +$ write cvh " */" +$ write cvh "" +$ write cvh "#define DEFPATH "".,/AWK_LIBRARY""" +$ write cvh "#define DEFLIBPATH "".,/AWK_LIBRARY""" +$ write cvh "#define ENVSEP ','" +$ write cvh "" +$ write cvh "/*" +$ write cvh " * Extended source file access." +$ write cvh " */" +$ write cvh "#define DEFAULT_FILETYPE "".awk""" +$ write cvh "" +$ write cvh "/*" +$ write cvh " * fork/Pipe handling." +$ write cvh " */" +$ write cvh "#define PIPES_SIMULATED 1" +$ write cvh "" +$ write cvh "/* Extension for shared libraries */" +$ write cvh "#define SHLIBEXT ""exe""" +$ write cvh "" +$! GAWK does not want to use ALLOCA +$ write cvh "#define NO_ALLOCA" +$ write cvh "#define STACK_DIRECTION (-1)" +$ write cvh "" +$ write cvh "void decc$exit(int status);" +$ write cvh "void __posix_exit(int status);" +$ write cvh "#define _exit(foo) vms_exit(foo)" +$ write cvh "#define exit(foo) vms_exit(foo)" +$ write cvh "" +$ write cvh "#define EXIT_FATAL (STS$M_INHIB_MSG | STS$K_SEVERE)" +$ write cvh "" +$ write cvh "#ifndef C_FACILITY_NO" +$ write cvh "#define C_FACILITY_NO 0x350000" +$ write cvh "#endif" +$ write cvh "" +$ write cvh "/* Use old exit codes for DCL, correct for other cases */ +$ write cvh "static void vms_exit(int status) {" +$ write cvh " char * shell;" +$ write cvh " int vms_status;" +$ write cvh " int use_old_exit = 0;" +$ write cvh " shell = getenv(""SHELL"");" +$ write cvh " if (shell != NULL) {" +$ write cvh " if (strcmp(shell, ""DCL"") == 0) {" +$ write cvh " use_old_exit = 1;" +$ write cvh " }" +$ write cvh " } else {" +$ write cvh " use_old_exit = 1;" +$ write cvh " }" +$ write cvh " if (use_old_exit == 1) {" +$ write cvh " decc$exit(status);" +$ write cvh " }" +$ write cvh " /* Fake the __posix_exit with severity added */" +$ write cvh " /* Undocumented correct way to do the above unless */" +$ write cvh " /* backwards compatibilty is needed */" +$ write cvh " vms_status = C_FACILITY_NO | 0xA000 | STS$M_INHIB_MSG;" +$ write cvh " if (status == EXIT_FAILURE) {" +$ write cvh " vms_status |= (1 << 3) | STS$K_ERROR;" +$ write cvh " } else if (status == EXIT_FATAL) {" +$ write cvh " vms_status |= (2 << 3) | STS$K_SEVERE;" +$ write cvh " }" +$ write cvh " decc$exit(vms_status);" +$ write cvh "}" +$! +$! Close out the file +$! +$ write cvh "" +$ write cvh "#endif /* __CONFIG_VMS_H__ */" +$ close cvh +$! +$all_exit: +$ exit |