]> git.sur5r.net Git - cc65/commitdiff
Support both MinGW and MinGW-w64.
authorOliver Schmidt <ol.sc@web.de>
Wed, 5 Mar 2014 21:28:38 +0000 (22:28 +0100)
committerOliver Schmidt <ol.sc@web.de>
Wed, 5 Mar 2014 21:28:38 +0000 (22:28 +0100)
src/cl65/main.c
src/cl65/spawn-amiga.inc
src/cl65/spawn-unix.inc

index 7c81496601d18e3811bae67796d9037290dd35d7..b9b191dcda0791952d2120ae30ef81fa3853348f 100644 (file)
 #else
 #  define NEED_SPAWN 1
 #endif
-#if defined(_MSC_VER)
-#  pragma warning(disable : 4996)
+
+/* GCC strictly follows http://c-faq.com/ansi/constmismatch.html and issues an
+ * 'incompatible pointer type' warning - that can't be suppressed via #pragma.
+ * The spawnvp() prototype of MinGW (http://www.mingw.org/) differs from the
+ * one of MinGW-w64 (http://mingw-w64.sourceforge.net/) regarding constness.
+ * So there's no alternative to actually distinguish these environments :-(
+ */
+#define SPAWN_ARGV_CONST_CAST
+#if defined(__MINGW32__)
+#  include <_mingw.h>
+#  if !defined(__MINGW64_VERSION_MAJOR)
+#    undef  SPAWN_ARGV_CONST_CAST
+#    define SPAWN_ARGV_CONST_CAST (const char* const *)
+#  endif
 #endif
 
 
@@ -375,7 +387,7 @@ static void ExecProgram (CmdDesc* Cmd)
     }
 
     /* Call the program */
-    Status = spawnvp (P_WAIT, Cmd->Name, (const char* const *) Cmd->Args);
+    Status = spawnvp (P_WAIT, Cmd->Name, SPAWN_ARGV_CONST_CAST Cmd->Args);
 
     /* Check the result code */
     if (Status < 0) {
index f8a230950c4f9dff4eccb9d0bd4d14b5571cf10d..5d1b60ea3ab0cae6da16d86d0c88e50d2d3f7d98 100644 (file)
@@ -54,7 +54,7 @@
 
 int spawnvp (int Mode attribute ((unused)),
              const char* File attribute ((unused)),
-             const char* const argv [])
+             char* const argv [])
 /* Execute the given program searching and wait til it terminates. The Mode
  * argument is ignored (compatibility only). The result of the function is
  * the return code of the program. The function will terminate the program
index 558f2428d5ed2092cf66c3a5c1ecb26449331b7a..fc5125c340529e5ba8a869e02b41055d598f0acb 100644 (file)
@@ -62,7 +62,7 @@
 
 
 
-int spawnvp (int Mode attribute ((unused)), const char* File, const char* const argv [])
+int spawnvp (int Mode attribute ((unused)), const char* File, char* const argv [])
 /* Execute the given program searching and wait til it terminates. The Mode
  * argument is ignored (compatibility only). The result of the function is
  * the return code of the program. The function will terminate the program
@@ -81,7 +81,7 @@ int spawnvp (int Mode attribute ((unused)), const char* File, const char* const
     } else if (pid == 0) {
 
         /* The son - exec the program */
-        if (execvp (File, (char* const *) argv) < 0) {
+        if (execvp (File, argv) < 0) {
             Error ("Cannot exec `%s': %s", File, strerror (errno));
         }