From orion@cora.nwra.com Fri Jan 24 22:01:05 2014 Received: (at submit) by bugs.x2go.org; 24 Jan 2014 21:01:07 +0000 X-Spam-Checker-Version: SpamAssassin 3.3.2 (2011-06-06) on ymir.das-netzwerkteam.de X-Spam-Level: X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,T_DKIM_INVALID autolearn=ham version=3.3.2 Received: from mail.cora.nwra.com (mercury.cora.nwra.com [4.28.99.165]) by ymir (Postfix) with ESMTPS id BDEFA5DA79 for ; Fri, 24 Jan 2014 22:01:04 +0100 (CET) Received: from [10.10.20.7] (barry.cora.nwra.com [10.10.20.7]) (authenticated bits=0) by mail.cora.nwra.com (8.14.4/8.14.4) with ESMTP id s0OL12wl025489 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES128-SHA bits=128 verify=NO) for ; Fri, 24 Jan 2014 14:01:02 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=cora.nwra.com; s=default; t=1390597262; bh=uEw0p33lrW2DXzgyJXb1UrFdq4FhrtxG+RiVEVFHvQQ=; h=Message-ID:Date:From:MIME-Version:To:Subject:Content-Type; b=EGabkfyl7LVptd/9TE0fTkCR5e6idNeVIGIZCMvzL/eqKtXPkUjopk/7hI+iiBJm/ CfZAqO/SgxXyp1jDtNDenZvEp92s3Z8UEAeIBSrCQZFbWxcpjcmmHApk1BcF9XccDY Zrg+s0xzDYm/5onVgjZud9raFfs0OJmczw6vII+w= Message-ID: <52E2D48E.2060603@cora.nwra.com> Date: Fri, 24 Jan 2014 14:01:02 -0700 From: Orion Poplawski User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Thunderbird/24.2.0 MIME-Version: 1.0 To: submit@bugs.x2go.org Subject: imake issues X-Enigmail-Version: 1.6 Content-Type: multipart/mixed; boundary="------------070503020006040608090505" This is a multi-part message in MIME format. --------------070503020006040608090505 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Package: nx-libs Version: 3.5.0.22 The imake in 3.5.0.22 does not compile in current Fedora rawhide due to the use of -Werror=format-security: make[4]: Entering directory `/builddir/build/BUILD/nx-libs-3.5.0.22/nx-X11/config/imake' gcc -O2 -g -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -march=armv7-a -mfpu=vfpv3-d16 -mfloat-abi=hard -I../../include -I../../exports/include/X11 -I../.. -I../../exports/include -Dlinux -D__arm__ -D__arm32__ -U__arm -Uarm -D_POSIX_C_SOURCE=199309L -D_POSIX_SOURCE -D_XOPEN_SOURCE -D_BSD_SOURCE -D_SVID_SOURCE -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -D_GNU_SOURCE -DFUNCPROTO=15 -DNARROWPROTO -DCPP_PROGRAM="\"cpp\"" -DHAS_MERGE_CONSTANTS=`if gcc -fmerge-constants -xc /dev/null -S -o /dev/null 2> /dev/null 1> /dev/null; then echo 1; else echo 0; fi` -DMONOLITH -c -o imake.o imake.c imake.c: In function 'get_libc_version': imake.c:1018:5: error: format not a string literal and no format arguments [-Werror=format-security] fprintf (inFile, command); ^ imake.c: In function 'get_ld_version': imake.c:1135:5: warning: ignoring return value of 'fscanf', declared with attribute warn_unused_result [-Wunused-result] (void) fscanf (ldprog, "%d.%d", &ldmajor, &ldminor); ^ imake.c: In function 'ReadLine': imake.c:1998:12: warning: ignoring return value of 'ftruncate', declared with attribute warn_unused_result [-Wunused-result] ftruncate(fileno(tmpfd), (off_t) 0); ^ cc1: some warnings being treated as errors make[4]: *** [imake.o] Error 1 Ideally, I would like to avoid building a local imake altogether and just use the system imake, but I have been unable to figure out how to do that yet. In the meantime, I'm patching imake.c as attached to bring it up to the version that is in Fedora Rawhide. -- Orion Poplawski Technical Manager 303-415-9701 x222 NWRA, Boulder/CoRA Office FAX: 303-415-9702 3380 Mitchell Lane orion@nwra.com Boulder, CO 80301 http://www.nwra.com --------------070503020006040608090505 Content-Type: text/x-patch; name="nx-libs-imake.patch" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="nx-libs-imake.patch" diff -up nx-libs-3.5.0.22/nx-X11/config/imake/imake.c.imake nx-libs-3.5.0.22/nx-X11/config/imake/imake.c --- nx-libs-3.5.0.22/nx-X11/config/imake/imake.c.imake 2014-01-04 13:39:35.000000000 -0700 +++ nx-libs-3.5.0.22/nx-X11/config/imake/imake.c 2014-01-24 13:55:53.940697330 -0700 @@ -7,8 +7,6 @@ * be passed to the template file. * * * ***************************************************************************/ -/* $XFree86: xc/config/imake/imake.c,v 3.63tsi Exp $ */ - /* * Copyright (c) 1985, 1986, 1987, 1998 The Open Group @@ -153,23 +151,14 @@ in this Software without prior written a #endif #include #include -#ifdef MONOLITH -# include "Xosdefs.h" -#else -# include -#endif +#include +#include +#include #include #include #ifdef WIN32 # include "Xw32defs.h" #endif -#if 0 -#ifndef X_NOT_POSIX -# ifndef _POSIX_SOURCE -# define _POSIX_SOURCE -# endif -#endif -#endif #include #include #ifdef X_NOT_POSIX @@ -231,22 +220,16 @@ typedef union wait waitType; # define WIFEXITED(w) waitCode(w) # endif #endif /* X_NOT_POSIX */ -# include -#if defined(macII) && !defined(__STDC__) /* stdlib.h fails to define these */ -char *malloc(), *realloc(); -#endif /* macII */ +#include #include #ifdef __minix_vmd -#define USE_FREOPEN 1 +# define USE_FREOPEN 1 #endif -#if !((defined(sun) && !defined(SVR4)) || defined(macII)) -#define USE_STRERROR 1 -#endif #ifndef WIN32 -#include +# include #else -#include +# include #endif #ifndef SYS_NMLN # ifdef _SYS_NMLN @@ -256,39 +239,22 @@ char *malloc(), *realloc(); # endif #endif #if defined(linux) || defined(__GNU__) || defined(__GLIBC__) -#include -#include +# include +# include #endif #ifdef __QNX__ -#include -#endif - -/* - * This define of strerror is copied from (and should be identical to) - * Xos.h, which we don't want to include here for bootstrapping reasons. - */ -#ifndef USE_STRERROR -# ifndef strerror -extern char *sys_errlist[]; -extern int sys_nerr; -# define strerror(n) \ - (((n) >= 0 && (n) < sys_nerr) ? sys_errlist[n] : "unknown error") -# endif +# include #endif #if defined(__NetBSD__) /* see code clock in init() below */ -#include -#endif - -#if !(defined(Lynx) || defined(__Lynx__) || (defined(SVR4) && !defined(sun))) && !defined (__CYGWIN__) -#define HAS_MKSTEMP +# include #endif typedef unsigned char boolean; #define TRUE 1 #define FALSE 0 -# include "imakemdep.h" +#include "imakemdep.h" #ifdef CROSSCOMPILE # include "imakemdep_cpp.h" #endif @@ -305,7 +271,7 @@ int xvariables[10]; #endif #ifndef PATH_MAX -#define PATH_MAX 1024 +# define PATH_MAX 1024 #endif /* @@ -331,11 +297,13 @@ void KludgeOutputLine(char **), KludgeRe # endif #endif -char *cpp = NULL; +const char *cpp = NULL; -char *tmpMakefile = "/tmp/Imf.XXXXXX"; -char *tmpImakefile = "/tmp/IIf.XXXXXX"; -char *make_argv[ ARGUMENTS ] = { +const char *tmpMakefile; +const char *tmpMakefileTemplate = "/tmp/Imf.XXXXXX"; +const char *tmpImakefile; +const char *tmpImakefileTemplate = "/tmp/IIf.XXXXXX"; +const char *make_argv[ ARGUMENTS ] = { #ifdef WIN32 "nmake" #else @@ -345,53 +313,53 @@ char *make_argv[ ARGUMENTS ] = { int make_argindex; int cpp_argindex; -char *Imakefile = NULL; -char *Makefile = "Makefile"; -char *Template = "Imake.tmpl"; -char *ImakefileC = "Imakefile.c"; +const char *Imakefile = NULL; +const char *Makefile = "Makefile"; +const char *Template = "Imake.tmpl"; +const char *ImakefileC = "Imakefile.c"; boolean haveImakefileC = FALSE; -char *cleanedImakefile = NULL; -char *program; -char *FindImakefile(char *Imakefile); -char *ReadLine(FILE *tmpfd, char *tmpfname); -char *CleanCppInput(char *imakefile); -char *Strdup(char *cp); +const char *cleanedImakefile = NULL; +const char *program; +const char *FindImakefile(const char *Imakefile); +char *ReadLine(FILE *tmpfd, const char *tmpfname); +const char *CleanCppInput(const char *imakefile); +char *Strdup(const char *cp); char *Emalloc(int size); -void LogFatalI(char *s, int i), LogFatal(char *x0, char *x1), - LogMsg(char *x0, char *x1); +void LogFatal(const char *x0, ...) _X_ATTRIBUTE_PRINTF(1, 2); +void LogMsg(const char *x0, ...) _X_ATTRIBUTE_PRINTF(1, 2); void showit(FILE *fd); void wrapup(void); void init(void); -void AddMakeArg(char *arg); -void AddCppArg(char *arg); +void AddMakeArg(const char *arg); +void AddCppArg(const char *arg); #ifdef CROSSCOMPILE char *CrossCompileCPP(void); #endif void SetOpts(int argc, char **argv); -void CheckImakefileC(char *masterc); -void cppit(char *imakefile, char *template, char *masterc, - FILE *outfd, char *outfname); +void CheckImakefileC(const char *masterc); +void cppit(const char *imakefile, const char *template, const char *masterc, + FILE *outfd, const char *outfname); void makeit(void); -void CleanCppOutput(FILE *tmpfd, char *tmpfname); +void CleanCppOutput(FILE *tmpfd, const char *tmpfname); boolean isempty(char *line); -void writetmpfile(FILE *fd, char *buf, int cnt, char *fname); +void writetmpfile(FILE *fd, const char *buf, int cnt, const char *fname); #ifdef SIGNALRETURNSINT int catch(int sig); #else void catch(int sig); #endif -void showargs(char **argv); -boolean optional_include(FILE *inFile, char *defsym, char *fname); -void doit(FILE *outfd, char *cmd, char **argv); +void showargs(const char **argv); +boolean optional_include(FILE *inFile, const char *defsym, const char *fname); +void doit(FILE *outfd, const char *cmd, const char **argv); boolean define_os_defaults(FILE *inFile); #ifdef CROSSCOMPILE static void get_cross_compile_dir(FILE *inFile); #endif #ifdef CROSSCOMPILEDIR -char *CrossCompileDir = CROSSCOMPILEDIR; +const char *CrossCompileDir = CROSSCOMPILEDIR; #else -char *CrossCompileDir = ""; +const char *CrossCompileDir = ""; #endif boolean CrossCompiling = FALSE; @@ -428,24 +396,25 @@ main(int argc, char *argv[]) if ((tmpfd = fopen(tmpMakefile, "w+")) == NULL) LogFatal("Cannot create temporary file %s.", tmpMakefile); } else { -#ifdef HAS_MKSTEMP +#ifdef HAVE_MKSTEMP int fd; #endif - tmpMakefile = Strdup(tmpMakefile); -#ifndef HAS_MKSTEMP - if (mktemp(tmpMakefile) == NULL || - (tmpfd = fopen(tmpMakefile, "w+")) == NULL) { - LogFatal("Cannot create temporary file %s.", tmpMakefile); + char *tmpMakefileName = Strdup(tmpMakefileTemplate); +#ifndef HAVE_MKSTEMP + if (mktemp(tmpMakefileName) == NULL || + (tmpfd = fopen(tmpMakefileName, "w+")) == NULL) { + LogFatal("Cannot create temporary file %s.", tmpMakefileName); } #else - fd = mkstemp(tmpMakefile); + fd = mkstemp(tmpMakefileName); if (fd == -1 || (tmpfd = fdopen(fd, "w+")) == NULL) { if (fd != -1) { - unlink(tmpMakefile); close(fd); + unlink(tmpMakefileName); close(fd); } - LogFatal("Cannot create temporary file %s.", tmpMakefile); + LogFatal("Cannot create temporary file %s.", tmpMakefileName); } #endif + tmpMakefile = tmpMakefileName; } AddMakeArg("-f"); AddMakeArg( tmpMakefile ); @@ -498,7 +467,7 @@ void catch(int sig) { errno = 0; - LogFatalI("Signal %d.", sig); + LogFatal("Signal %d.", sig); } /* @@ -572,21 +541,21 @@ init(void) } void -AddMakeArg(char *arg) +AddMakeArg(const char *arg) { errno = 0; if (make_argindex >= ARGUMENTS-1) - LogFatal("Out of internal storage.", ""); + LogFatal("Out of internal storage."); make_argv[ make_argindex++ ] = arg; make_argv[ make_argindex ] = NULL; } void -AddCppArg(char *arg) +AddCppArg(const char *arg) { errno = 0; if (cpp_argindex >= ARGUMENTS-1) - LogFatal("Out of internal storage.", ""); + LogFatal("Out of internal storage."); cpp_argv[ cpp_argindex++ ] = arg; cpp_argv[ cpp_argindex ] = NULL; } @@ -618,7 +587,7 @@ SetOpts(int argc, char **argv) else { argc--, argv++; if (! argc) - LogFatal("No description arg after -f flag", ""); + LogFatal("No description arg after -f flag"); Imakefile = argv[0]; } } else if (argv[0][1] == 's') { @@ -628,7 +597,7 @@ SetOpts(int argc, char **argv) else { argc--, argv++; if (!argc) - LogFatal("No description arg after -s flag", ""); + LogFatal("No description arg after -s flag"); Makefile = ((argv[0][0] == '-') && !argv[0][1]) ? NULL : argv[0]; } @@ -642,7 +611,7 @@ SetOpts(int argc, char **argv) else { argc--, argv++; if (! argc) - LogFatal("No description arg after -T flag", ""); + LogFatal("No description arg after -T flag"); Template = argv[0]; } } else if (argv[0][1] == 'C') { @@ -651,7 +620,7 @@ SetOpts(int argc, char **argv) else { argc--, argv++; if (! argc) - LogFatal("No imakeCfile arg after -C flag", ""); + LogFatal("No imakeCfile arg after -C flag"); ImakefileC = argv[0]; } } else if (argv[0][1] == 'v') { @@ -667,10 +636,10 @@ SetOpts(int argc, char **argv) if (!cpp) { AddCppArg("-E"); -#ifdef __GNUC__ +# ifdef __GNUC__ if (verbose) AddCppArg("-v"); -#endif +# endif cpp = DEFAULT_CC; } # else @@ -686,8 +655,8 @@ SetOpts(int argc, char **argv) AddCppArg(ImakefileC); } -char * -FindImakefile(char *Imakefile) +const char * +FindImakefile(const char *Imakefile) { if (Imakefile) { if (access(Imakefile, R_OK) < 0) @@ -695,7 +664,7 @@ FindImakefile(char *Imakefile) } else { if (access("Imakefile", R_OK) < 0) { if (access("imakefile", R_OK) < 0) - LogFatal("No description file.", ""); + LogFatal("No description file."); else Imakefile = "imakefile"; } else @@ -704,44 +673,50 @@ FindImakefile(char *Imakefile) return(Imakefile); } -void -LogFatalI(char *s, int i) +static void _X_ATTRIBUTE_PRINTF(1, 0) +vLogMsg(const char *fmt, va_list args) { - /*NOSTRICT*/ - LogFatal(s, (char *)(long)i); + int error_number = errno; + + if (error_number) { + fprintf(stderr, "%s: ", program); + fprintf(stderr, "%s\n", strerror(error_number)); + } + fprintf(stderr, "%s: ", program); + vfprintf(stderr, fmt, args); + fprintf(stderr, "\n"); } void -LogFatal(char *x0, char *x1) +LogFatal(const char *fmt, ...) { static boolean entered = FALSE; + va_list args; if (entered) return; entered = TRUE; - LogMsg(x0, x1); + va_start(args, fmt); + vLogMsg(fmt, args); + va_end(args); fprintf(stderr, " Stop.\n"); wrapup(); exit(1); } void -LogMsg(char *x0, char *x1) +LogMsg(const char *fmt, ...) { - int error_number = errno; + va_list args; - if (error_number) { - fprintf(stderr, "%s: ", program); - fprintf(stderr, "%s\n", strerror(error_number)); - } - fprintf(stderr, "%s: ", program); - fprintf(stderr, x0, x1); - fprintf(stderr, "\n"); + va_start(args, fmt); + vLogMsg(fmt, args); + va_end(args); } void -showargs(char **argv) +showargs(const char **argv) { for (; *argv; argv++) fprintf(stderr, "%s ", *argv); @@ -751,7 +726,7 @@ showargs(char **argv) #define ImakefileCHeader "/* imake - temporary file */" void -CheckImakefileC(char *masterc) +CheckImakefileC(const char *masterc) { char mkcbuf[1024]; FILE *inFile; @@ -767,7 +742,8 @@ CheckImakefileC(char *masterc) fclose(inFile); LogFatal("Refuse to overwrite: %s", masterc); } - fclose(inFile); + else + fclose(inFile); } } @@ -778,7 +754,7 @@ CheckImakefileC(char *masterc) #define OverrideWarning "Warning: local file \"%s\" overrides global macros." boolean -optional_include(FILE *inFile, char *defsym, char *fname) +optional_include(FILE *inFile, const char *defsym, const char *fname) { errno = 0; if (access(fname, R_OK) == 0) { @@ -790,7 +766,7 @@ optional_include(FILE *inFile, char *def } void -doit(FILE *outfd, char *cmd, char **argv) +doit(FILE *outfd, const char *cmd, const char **argv) { int pid; waitType status; @@ -805,18 +781,18 @@ doit(FILE *outfd, char *cmd, char **argv if (status < 0) LogFatal("Cannot spawn %s.", cmd); if (status > 0) - LogFatalI("Exit code %d.", status); + LogFatal("Exit code %d.", status); #else pid = fork(); if (pid < 0) - LogFatal("Cannot fork.", ""); + LogFatal("Cannot fork."); if (pid) { /* parent... simply wait */ while (wait(&status) > 0) { errno = 0; if (WIFSIGNALED(status)) - LogFatalI("Signal %d.", waitSig(status)); + LogFatal("Signal %d.", waitSig(status)); if (WIFEXITED(status) && waitCode(status)) - LogFatalI("Exit code %d.", waitCode(status)); + LogFatal("Exit code %d.", waitCode(status)); } } else { /* child... dup and exec cmd */ @@ -832,7 +808,7 @@ doit(FILE *outfd, char *cmd, char **argv #if !defined WIN32 static void -parse_utsname(struct utsname *name, char *fmt, char *result, char *msg) +parse_utsname(struct utsname *name, const char *fmt, char *result, const char *msg) { char buf[SYS_NMLN * 5 + 1]; char *ptr = buf; @@ -892,7 +868,7 @@ parse_utsname(struct utsname *name, char /* Just in case... */ if (strlen(buf) >= sizeof(buf)) - LogFatal("Buffer overflow parsing uname.", ""); + LogFatal("Buffer overflow parsing uname."); /* Parse the buffer. The sscanf() return value is rarely correct. */ *result = '\0'; @@ -978,13 +954,23 @@ const char *libc_c= static void get_libc_version(FILE *inFile) { - char aout[] = "/tmp/imakeXXXXXX"; + char aout[4096], *tmpdir; FILE *fp; const char *format = "%s -o %s -x c -"; char *cc; int len; char *command; + /* If $TMPDIR is defined and has an acceptable length, + * use that as tmp dir, else use /tmp. That fixes + * problems with /tmp mounted "noexec". + */ + if((tmpdir = getenv("TMPDIR")) != NULL && strlen(tmpdir) < (4096-13)) + strcpy(aout, tmpdir); + else + strcpy(aout, "/tmp"); + strcat(aout, "/imakeXXXXXX"); + /* Pre-create temp file safely */ { /* Linux + ELF has mkstemp() */ @@ -1000,7 +986,8 @@ get_libc_version(FILE *inFile) cc = "gcc"; len = strlen (aout) + strlen (format) + strlen (cc); if (len < 128) len = 128; - command = alloca (len); + if((command = alloca (len)) == NULL) + abort(); if (snprintf (command , len, format, cc, aout) == len) abort (); @@ -1015,12 +1002,16 @@ get_libc_version(FILE *inFile) abort (); while (fgets (command, len, fp)) - fprintf (inFile, command); + fputs (command, inFile); len = pclose (fp); remove (aout); - if (len) - abort (); + if (len) { + /* handwave furiously */ + printf("#define DefaultLinuxCLibMajorVersion 6\n"); + printf("#define DefaultLinuxCLibMinorVersion 12\n"); + printf("#define DefaultLinuxCLibTeenyVersion 0\n"); + } } #endif @@ -1031,14 +1022,14 @@ get_stackprotector(FILE *inFile) FILE *fp; char *cc; char command[1024], buf[1024]; - + cc = getenv("CC"); if (cc == NULL) { cc = "cc"; } snprintf(command, sizeof(command), "%s -v 2>&1", cc); fp = popen(command, "r"); - if (fp == NULL) + if (fp == NULL) abort(); while (fgets(buf, sizeof(buf), fp)) { if (strstr(buf, "propolice") != NULL) { @@ -1046,11 +1037,10 @@ get_stackprotector(FILE *inFile) break; } } - if (pclose(fp)) - abort(); + pclose(fp); } #endif - + #if defined CROSSCOMPILE || defined linux || defined(__GLIBC__) static void @@ -1058,9 +1048,9 @@ get_distrib(FILE *inFile) { struct stat sb; - static char* suse = "/etc/SuSE-release"; - static char* redhat = "/etc/redhat-release"; - static char* debian = "/etc/debian_version"; + static const char* suse = "/etc/SuSE-release"; + static const char* redhat = "/etc/redhat-release"; + static const char* debian = "/etc/debian_version"; fprintf (inFile, "%s\n", "#define LinuxUnknown 0"); fprintf (inFile, "%s\n", "#define LinuxSuSE 1"); @@ -1076,14 +1066,14 @@ get_distrib(FILE *inFile) fprintf (inFile, "%s\n", "#define LinuxWare 11"); fprintf (inFile, "%s\n", "#define LinuxYggdrasil 12"); -#ifdef CROSSCOMPILE +# ifdef CROSSCOMPILE if (CrossCompiling) { fprintf (inFile, "%s\n", "#define DefaultLinuxDistribution LinuxUnknown"); fprintf (inFile, "%s\n", "#define DefaultLinuxDistName Unknown"); return; } -#endif +# endif if (lstat (suse, &sb) == 0) { fprintf (inFile, "%s\n", "#define DefaultLinuxDistribution LinuxSuSE"); fprintf (inFile, "%s\n", "#define DefaultLinuxDistName SuSE"); @@ -1116,7 +1106,7 @@ get_ld_version(FILE *inFile) int ldmajor, ldminor; const char *ld = "ld -v"; -#ifdef CROSSCOMPILE +# ifdef CROSSCOMPILE if (CrossCompiling) { char cmd[PATH_MAX]; strcpy (cmd, CrossCompileDir); @@ -1124,7 +1114,7 @@ get_ld_version(FILE *inFile) strcat (cmd,ld); ldprog = popen (cmd, "r"); } else -#endif +# endif ldprog = popen (ld, "r"); if (ldprog) { @@ -1192,7 +1182,7 @@ get_binary_format(FILE *inFile) * Returns: 0 if successful, -1 if not. */ static int -ask_sun_compiler_for_versions(const char *cmd, const char *path, +ask_sun_compiler_for_versions(const char *cmd, const char *path, int *cmajor, int *cminor) { char buf[BUFSIZ]; @@ -1201,7 +1191,7 @@ ask_sun_compiler_for_versions(const char FILE* ccproc; const char vflag[] = " -V 2>&1"; int retval = -1; - + int len = strlen(cmd) + sizeof(vflag); if (path != NULL) { @@ -1229,7 +1219,7 @@ ask_sun_compiler_for_versions(const char } } if (retval != 0) { - fprintf(stderr, + fprintf(stderr, "warning: could not parse version number in output of:\n" " %s\n", cmdtorun); } @@ -1247,23 +1237,22 @@ get_sun_compiler_versions (FILE *inFile) { const char* sunpro_path = "/opt/SUNWspro/bin"; int cmajor, cminor, found = 0; - struct stat sb; /* If cross-compiling, only check CrossCompilerDir for compilers. - * If not cross-compiling, first check cc in users $PATH, + * If not cross-compiling, first check cc in users $PATH, * then try /opt/SUNWspro if not found in the users $PATH */ -#if defined CROSSCOMPILE +# if defined CROSSCOMPILE if (CrossCompiling) { if (ask_sun_compiler_for_versions("cc", CrossCompileDir, &cmajor, &cminor) == 0) { found = 1; } - } + } else -#endif - { +# endif + { if (ask_sun_compiler_for_versions("cc", NULL, &cmajor, &cminor) == 0) { found = 1; } else if (ask_sun_compiler_for_versions("cc", sunpro_path, @@ -1282,22 +1271,22 @@ get_sun_compiler_versions (FILE *inFile) /* Now do it again for C++ compiler (CC) */ found = 0; -#if defined CROSSCOMPILE +# if defined CROSSCOMPILE if (CrossCompiling) { if (ask_sun_compiler_for_versions("CC", CrossCompileDir, &cmajor, &cminor) == 0) { found = 1; } - } + } else -#endif - { +# endif + { if (ask_sun_compiler_for_versions("CC", NULL, &cmajor, &cminor) == 0) { found = 1; } else if (ask_sun_compiler_for_versions("CC", sunpro_path, &cmajor, &cminor) == 0) { found = 1; - fprintf(inFile, + fprintf(inFile, "#define DefaultSunProCplusplusCompilerDir %s", sunpro_path); } } @@ -1318,7 +1307,7 @@ static void get_gcc_version(FILE *inFile, char *name) { fprintf (inFile, "#define HasGcc 1\n"); -#ifdef CROSSCOMPILE +# ifdef CROSSCOMPILE if (CrossCompiling) { if (gnu_c > 1) { @@ -1329,20 +1318,20 @@ get_gcc_version(FILE *inFile, char *name fprintf (inFile, "#define GccMajorVersion %d\n", gnu_c); fprintf (inFile, "#define GccMinorVersion %d\n", gnu_c_minor); } else -#endif +# endif { -#if __GNUC__ > 1 +# if __GNUC__ > 1 fprintf (inFile, "#define HasGcc2 1\n"); -# if __GNUC__ > 2 +# if __GNUC__ > 2 fprintf (inFile, "#define HasGcc3 1\n"); +# endif # endif -#endif fprintf (inFile, "#define GccMajorVersion %d\n", __GNUC__); fprintf (inFile, "#define GccMinorVersion %d\n", __GNUC_MINOR__); } -#if defined(HAS_MERGE_CONSTANTS) +# if defined(HAS_MERGE_CONSTANTS) fprintf (inFile, "#define HasGccMergeConstants %d\n", HAS_MERGE_CONSTANTS); -#endif +# endif } #endif @@ -1350,8 +1339,8 @@ static boolean get_gcc(char *cmd) { struct stat sb; - static char* gcc_path[] = { -# if defined(linux) || \ + static const char* gcc_path[] = { +#if defined(linux) || \ defined(__NetBSD__) || \ defined(__OpenBSD__) || \ defined(__FreeBSD__) || \ @@ -1362,14 +1351,14 @@ get_gcc(char *cmd) defined(__GNU__) || \ defined(__GLIBC__) "/usr/bin/cc", /* for Linux PostIncDir */ -# endif +#endif "/usr/local/bin/gcc", "/opt/gnu/bin/gcc", "/usr/pkg/bin/gcc" }; #ifdef CROSSCOMPILE - static char* cross_cc_name[] = { + static const char* cross_cc_name[] = { "cc", "gcc" }; @@ -1399,7 +1388,7 @@ get_gcc(char *cmd) return FALSE; } -#if defined CROSSCOMPILE || !defined __UNIXOS2__ +#ifdef CROSSCOMPILE static void get_gcc_incdir(FILE *inFile, char* name) { @@ -1428,14 +1417,14 @@ get_gcc_incdir(FILE *inFile, char* name) boolean define_os_defaults(FILE *inFile) { -#if defined CROSSCOMPILE || ( !defined(WIN32) && !defined(__UNIXOS2__) ) -#ifdef CROSSCOMPILE -#ifdef __GNUC__ +#if defined CROSSCOMPILE || !defined(WIN32) +# ifdef CROSSCOMPILE +# ifdef __GNUC__ if (1) -#else +# else if ((sys != win32) && (sys != emx)) -#endif -#endif +# endif +# endif { # if (defined(DEFAULT_OS_NAME) || defined(DEFAULT_OS_MAJOR_REV) || \ defined(DEFAULT_OS_MINOR_REV) || defined(DEFAULT_OS_TEENY_REV)) @@ -1444,16 +1433,16 @@ define_os_defaults(FILE *inFile) char buf[SYS_NMLN * 5 + 1]; /* Obtain the system information. */ -#ifdef CROSSCOMPILE +# ifdef CROSSCOMPILE if (!CrossCompiling) -#endif +# endif { if (uname(&uts_name) < 0) - LogFatal("Cannot invoke uname", ""); + LogFatal("Cannot invoke uname"); else name = &uts_name; } -#if defined CROSSCOMPILE && (defined linux || defined(__GLIBC__)) +# if defined CROSSCOMPILE && (defined linux || defined(__GLIBC__)) else { strncpy(uts_name.sysname,cross_uts_sysname,SYS_NMLN); strncpy(uts_name.release,cross_uts_release,SYS_NMLN); @@ -1461,14 +1450,14 @@ define_os_defaults(FILE *inFile) strncpy(uts_name.machine,cross_uts_machine,SYS_NMLN); name = &uts_name; } -#endif -# ifdef __FreeBSD__ +# endif +# ifdef __FreeBSD__ /* Override for compiling in chroot of other OS version, such as * in the bento build cluster. */ { char *e; - if ((e = getenv("OSREL")) != NULL && + if ((e = getenv("OSREL")) != NULL && strlen(name->sysname) + strlen(e) + 1 < SYS_NMLN) { strcpy(name->release, e); strcpy(name->version, name->sysname); @@ -1476,7 +1465,7 @@ define_os_defaults(FILE *inFile) strcat(name->version, e); } } -# endif +# endif # if defined DEFAULT_OS_NAME # if defined CROSSCOMPILE @@ -1648,10 +1637,8 @@ define_os_defaults(FILE *inFile) char name[PATH_MAX]; if (get_gcc(name)) { get_gcc_version (inFile,name); -# if defined CROSSCOMPILE || !defined __UNIXOS2__ -# if defined CROSSCOMPILE +# if defined CROSSCOMPILE if (sys != emx) -# endif get_gcc_incdir(inFile,name); # endif } @@ -1664,7 +1651,7 @@ define_os_defaults(FILE *inFile) get_binary_format(inFile); # endif } -#endif /* !WIN32 && !__UNIXOS2__*/ +#endif /* !WIN32 */ #if defined WIN32 # ifdef CROSSCOMPILE else if (sys == win32 && !CrossCompiling) @@ -1688,8 +1675,6 @@ define_os_defaults(FILE *inFile) #endif /* WIN32 */ #ifdef CROSSCOMPILE else if (sys == emx) -#endif -#if defined CROSSCOMPILE || defined __UNIXOS2__ { fprintf(inFile, "#define DefaultOSMajorVersion 4\n"); fprintf(inFile, "#define DefaultOSMinorVersion 0\n"); @@ -1703,8 +1688,8 @@ define_os_defaults(FILE *inFile) } void -cppit(char *imakefile, char *template, char *masterc, - FILE *outfd, char *outfname) +cppit(const char *imakefile, const char *template, const char *masterc, + FILE *outfd, const char *outfname) { FILE *inFile; @@ -1721,8 +1706,11 @@ cppit(char *imakefile, char *template, c fprintf(inFile, IncludeFmt, ImakeTmplSym) < 0 || optional_include(inFile, "IMAKE_ADMIN_MACROS", "adminmacros") || optional_include(inFile, "IMAKE_LOCAL_MACROS", "localmacros") || - fflush(inFile) || - fclose(inFile)) + fflush(inFile)) { + fclose(inFile); + LogFatal("Cannot write to %s.", masterc); + } + else if (fclose(inFile)) LogFatal("Cannot write to %s.", masterc); /* * Fork and exec cpp @@ -1737,8 +1725,8 @@ makeit(void) doit(NULL, make_argv[0], make_argv); } -char * -CleanCppInput(char *imakefile) +const char * +CleanCppInput(const char *imakefile) { FILE *outFile = NULL; FILE *inFile; @@ -1792,28 +1780,29 @@ CleanCppInput(char *imakefile) strcmp(ptoken, "pragma") && strcmp(ptoken, "undef")) { if (outFile == NULL) { -#ifdef HAS_MKSTEMP +#ifdef HAVE_MKSTEMP int fd; #endif - tmpImakefile = Strdup(tmpImakefile); -#ifndef HAS_MKSTEMP - if (mktemp(tmpImakefile) == NULL || - (outFile = fopen(tmpImakefile, "w+")) == NULL) { + char *tmpImakefileName = Strdup(tmpImakefileTemplate); +#ifndef HAVE_MKSTEMP + if (mktemp(tmpImakefileName) == NULL || + (outFile = fopen(tmpImakefileName, "w+")) == NULL) { LogFatal("Cannot open %s for write.", - tmpImakefile); + tmpImakefileName); } #else - fd=mkstemp(tmpImakefile); + fd=mkstemp(tmpImakefileName); if (fd != -1) outFile = fdopen(fd, "w"); if (outFile == NULL) { if (fd != -1) { - unlink(tmpImakefile); close(fd); + unlink(tmpImakefileName); close(fd); } LogFatal("Cannot open %s for write.", - tmpImakefile); + tmpImakefileName); } #endif + tmpImakefile = tmpImakefileName; } writetmpfile(outFile, punwritten, pbuf-punwritten, tmpImakefile); @@ -1838,7 +1827,7 @@ CleanCppInput(char *imakefile) } void -CleanCppOutput(FILE *tmpfd, char *tmpfname) +CleanCppOutput(FILE *tmpfd, const char *tmpfname) { char *input; int blankline = 0; @@ -1960,7 +1949,7 @@ isempty(char *line) /*ARGSUSED*/ char * -ReadLine(FILE *tmpfd, char *tmpfname) +ReadLine(FILE *tmpfd, const char *tmpfname) { static boolean initialized = FALSE; static char *buf, *pline, *end; @@ -1988,10 +1977,10 @@ ReadLine(FILE *tmpfd, char *tmpfname) fseek(tmpfd, 0, 0); #if defined(SYSV) || defined(WIN32) || defined(USE_FREOPEN) tmpfd = freopen(tmpfname, "w+", tmpfd); -#ifdef WIN32 +# ifdef WIN32 if (! tmpfd) /* if failed try again */ tmpfd = freopen(tmpfname, "w+", fp); -#endif +# endif if (! tmpfd) LogFatal("cannot reopen %s\n", tmpfname); #else /* !SYSV */ @@ -1999,8 +1988,6 @@ ReadLine(FILE *tmpfd, char *tmpfname) #endif /* !SYSV */ initialized = TRUE; fprintf (tmpfd, "# Makefile generated by imake - do not edit!\n"); - fprintf (tmpfd, "# %s\n", - "$Xorg: imake.c,v 1.6 2001/02/09 02:03:15 xorgcvs Exp $"); } for (p1 = pline; p1 < end; p1++) { @@ -2036,7 +2023,7 @@ ReadLine(FILE *tmpfd, char *tmpfname) } void -writetmpfile(FILE *fd, char *buf, int cnt, char *fname) +writetmpfile(FILE *fd, const char *buf, int cnt, const char *fname) { if (fwrite(buf, sizeof(char), cnt, fd) == -1) LogFatal("Cannot write to %s.", fname); @@ -2048,7 +2035,7 @@ Emalloc(int size) char *p; if ((p = malloc(size)) == NULL) - LogFatalI("Cannot allocate %d bytes", size); + LogFatal("Cannot allocate %d bytes", size); return(p); } @@ -2066,10 +2053,10 @@ KludgeOutputLine(char **pline) break; case ' ': /*May need a tab*/ default: -#ifdef CROSSCOMPILE +# ifdef CROSSCOMPILE if (inline_syntax) -#endif -#if defined CROSSCOMPILE || defined INLINE_SYNTAX +# endif +# if defined CROSSCOMPILE || defined INLINE_SYNTAX { if (*p == '<' && p[1] == '<') { /* inline file close */ InInline--; @@ -2077,7 +2064,7 @@ KludgeOutputLine(char **pline) break; } } -#endif +# endif /* * The following cases should not be treated as beginning of * rules: @@ -2116,26 +2103,26 @@ KludgeOutputLine(char **pline) quotechar = ']'; break; case '=': -#ifdef CROSSCOMPILE +# ifdef CROSSCOMPILE if (remove_cpp_leadspace) -#endif -#if defined CROSSCOMPILE || defined REMOVE_CPP_LEADSPACE +# endif +# if defined CROSSCOMPILE || defined REMOVE_CPP_LEADSPACE { if (!InRule && **pline == ' ') { while (**pline == ' ') (*pline)++; } } -#endif +# endif goto breakfor; -#if defined CROSSCOMPILE || defined INLINE_SYNTAX +# if defined CROSSCOMPILE || defined INLINE_SYNTAX case '<': if (inline_syntax) { if (p[1] == '<') /* inline file start */ InInline++; } break; -#endif +# endif case ':': if (p[1] == '=') goto breakfor; @@ -2159,7 +2146,7 @@ KludgeResetRule(void) } #endif char * -Strdup(char *cp) +Strdup(const char *cp) { char *new = Emalloc(strlen(cp) + 1); --------------070503020006040608090505--