Description: Fix FTBFS when compiled with -Werror=format-security
Author: Orion Poplawski <orion@cora.nwra.com>
diff -up a/nx-X11/config/imake/imake.c b/nx-X11/config/imake/imake.c
--- a/nx-X11/config/imake/imake.c	2014-01-04 13:39:35.000000000 -0700
+++ b/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 <stdlib.h>
 #include <stdio.h>
-#ifdef MONOLITH
-# include "Xosdefs.h"
-#else
-# include <X11/Xosdefs.h>
-#endif
+#include <stdarg.h>
+#include <X11/Xfuncproto.h>
+#include <X11/Xosdefs.h>
 #include <string.h>
 #include <ctype.h>
 #ifdef WIN32
 # include "Xw32defs.h"
 #endif
-#if 0
-#ifndef X_NOT_POSIX
-# ifndef _POSIX_SOURCE
-#  define _POSIX_SOURCE
-# endif
-#endif
-#endif
 #include <sys/types.h>
 #include <fcntl.h>
 #ifdef X_NOT_POSIX
@@ -231,22 +220,16 @@ typedef union wait	waitType;
 #  define WIFEXITED(w) waitCode(w)
 # endif
 #endif /* X_NOT_POSIX */
-# include <stdlib.h>
-#if defined(macII) && !defined(__STDC__)  /* stdlib.h fails to define these */
-char *malloc(), *realloc();
-#endif /* macII */
+#include <stdlib.h>
 #include <errno.h>
 #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 <sys/utsname.h>
+# include <sys/utsname.h>
 #else
-#include <windows.h>
+# include <windows.h>
 #endif
 #ifndef SYS_NMLN
 # ifdef _SYS_NMLN
@@ -256,39 +239,22 @@ char *malloc(), *realloc();
 # endif
 #endif
 #if defined(linux) || defined(__GNU__) || defined(__GLIBC__)
-#include <limits.h>
-#include <stdio.h>
+# include <limits.h>
+# include <stdio.h>
 #endif
 #ifdef __QNX__
-#include <unix.h>
-#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 <unix.h>
 #endif
 
 #if defined(__NetBSD__)		/* see code clock in init() below */
-#include <sys/utsname.h>
-#endif
-
-#if !(defined(Lynx) || defined(__Lynx__) || (defined(SVR4) && !defined(sun))) && !defined (__CYGWIN__)
-#define HAS_MKSTEMP
+# include <sys/utsname.h>
 #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);