Fix getopt for AIX
authorMike Seplowitz <mseplowitz@bloomberg.net>
Tue, 13 Jan 2015 01:53:14 +0000 (20:53 -0500)
committerMike Seplowitz <mseplowitz@bloomberg.net>
Wed, 19 Aug 2015 12:43:59 +0000 (08:43 -0400)
AIX supplies getopt but not getopt_long.

We can't use the embedded getopt implementation, since the constness of its
arguments doesn't match the AIX system routine.

configure.py
src/getopt.c
src/getopt.h
src/ninja.cc
src/ninja_test.cc

index fcea72a..611030f 100755 (executable)
@@ -494,6 +494,8 @@ if platform.is_windows():
     objs += cc('getopt')
 else:
     objs += cxx('subprocess-posix')
+if platform.is_aix():
+    objs += cc('getopt')
 if platform.is_msvc():
     ninja_lib = n.build(built('ninja.lib'), 'ar', objs)
 else:
index 3350fb9..0c2ef35 100644 (file)
@@ -385,11 +385,13 @@ getopt_internal (int argc, char **argv, char *shortopts,
     return optopt;
 }
 
+#ifndef _AIX
 int
 getopt (int argc, char **argv, char *optstring)
 {
   return getopt_internal (argc, argv, optstring, NULL, NULL, 0);
 }
+#endif
 
 int
 getopt_long (int argc, char **argv, const char *shortopts,
index b4247fb..965dc29 100644 (file)
@@ -39,7 +39,9 @@ extern "C"
   extern int optopt;
 
   /* function prototypes */
+#ifndef _AIX
   int getopt (int argc, char **argv, char *optstring);
+#endif
   int getopt_long (int argc, char **argv, const char *shortopts,
                    const GETOPT_LONG_OPTION_T * longopts, int *longind);
   int getopt_long_only (int argc, char **argv, const char *shortopts,
index a3d963f..f71f6dc 100644 (file)
@@ -22,6 +22,9 @@
 #include "getopt.h"
 #include <direct.h>
 #include <windows.h>
+#elif defined(_AIX)
+#include "getopt.h"
+#include <unistd.h>
 #else
 #include <getopt.h>
 #include <unistd.h>
index 54d8784..11087b6 100644 (file)
@@ -17,6 +17,9 @@
 
 #ifdef _WIN32
 #include "getopt.h"
+#elif defined(_AIX)
+#include "getopt.h"
+#include <unistd.h>
 #else
 #include <getopt.h>
 #endif