]> git.sur5r.net Git - cc65/commitdiff
Improve MinGW support.
authorOliver Schmidt <ol.sc@web.de>
Mon, 3 Mar 2014 21:12:14 +0000 (22:12 +0100)
committerOliver Schmidt <ol.sc@web.de>
Mon, 3 Mar 2014 21:12:14 +0000 (22:12 +0100)
- Code specific to Windows was #ifdef'ed with _MSC_VER so it wasn't included with MinGW. So _MSC_VER is replaced with _WIN32.
- MinGW doesn't support _get_pgmptr() so it is necessary to directly call the Win32 function GetModuleFileName(). This implies including windows.h which in turn causes a name clash with the Win32 function SearchPath(). So the cc65 type SearchPath is renamed to SearchPaths.

15 files changed:
src/ca65/incpath.c
src/ca65/incpath.h
src/cc65/incpath.c
src/cc65/incpath.h
src/cl65/main.c
src/common/filestat.c
src/common/filestat.h
src/common/filetime.c
src/common/filetime.h
src/common/searchpath.c
src/common/searchpath.h
src/common/xsprintf.h
src/ld65/filepath.c
src/ld65/filepath.h
src/sim65/paravirt.c

index 76ad3111af70377bd99d4ff931068672fe193447..81422b05923d04ce7a19dda26720d11fc9881109 100644 (file)
@@ -44,8 +44,8 @@
 
 
 
-SearchPath    IncSearchPath;          /* Standard include path */
-SearchPath    BinSearchPath;          /* Binary include path */
+SearchPaths*    IncSearchPath;          /* Standard include path */
+SearchPaths*    BinSearchPath;          /* Binary include path */
 
 
 
@@ -75,7 +75,7 @@ void FinishIncludePaths (void)
     AddSubSearchPathFromEnv (IncSearchPath, "CC65_HOME", "asminc");
 
     /* Add some compiled-in search paths if defined at compile time. */
-#ifdef CA65_INC
+#if defined(CA65_INC) && !defined(_WIN32)
     AddSearchPath (IncSearchPath, STRINGIZE (CA65_INC));
 #endif
 
index 841767e4bf4f2fe00aba3c4e9739c3ff638c40ad..5e23ebc72e73ff9eb2032c2aefaa02536ae1fc52 100644 (file)
@@ -49,8 +49,8 @@
 
 
 
-extern SearchPath     IncSearchPath;          /* Standard include path */
-extern SearchPath     BinSearchPath;          /* Binary include path */
+extern SearchPaths*     IncSearchPath;          /* Standard include path */
+extern SearchPaths*     BinSearchPath;          /* Binary include path */
 
 
 
index 7a4b31e941a012af419f490a8892d7f5b337864d..c74e167de32018ba51a055ec9973639c10b99bae 100644 (file)
@@ -44,8 +44,8 @@
 
 
 
-SearchPath    SysIncSearchPath;       /* System include path */
-SearchPath    UsrIncSearchPath;       /* User include path */
+SearchPaths*    SysIncSearchPath;       /* System include path */
+SearchPaths*    UsrIncSearchPath;       /* User include path */
 
 
 
@@ -76,7 +76,7 @@ void FinishIncludePaths (void)
     AddSubSearchPathFromEnv (SysIncSearchPath, "CC65_HOME", "include");
 
     /* Add some compiled-in search paths if defined at compile time. */
-#ifdef CC65_INC
+#if defined(CC65_INC) && !defined(_WIN32)
     AddSearchPath (SysIncSearchPath, STRINGIZE (CC65_INC));
 #endif
 
index ed8ba50ccac84bea29e55617b191646b3acec04a..4df8fca44a2f2735a660494eddad3fa3452d2a35 100644 (file)
@@ -49,8 +49,8 @@
 
 
 
-extern SearchPath     SysIncSearchPath;       /* System include path */
-extern SearchPath     UsrIncSearchPath;       /* User include path */
+extern SearchPaths*     SysIncSearchPath;       /* System include path */
+extern SearchPaths*     UsrIncSearchPath;       /* User include path */
 
 
 
index e704d985c16d78296248e8a61d185a48796eb4b5..d81a1bcc91740837f3283375420b643023e66650 100644 (file)
 /* Check out if we have a spawn() function on the system, or if we must use
  * our own.
  */
-#if defined(__WATCOMC__) || defined(_MSC_VER) || defined(__MINGW32__) || defined(__DJGPP__)
-#  define HAVE_SPAWN    1
+#if defined(_WIN32)
+#  define HAVE_SPAWN 1
 #else
-#  define NEED_SPAWN   1
+#  define NEED_SPAWN 1
 #endif
 #if defined(_MSC_VER)
 #  pragma warning(disable : 4996)
@@ -375,7 +375,7 @@ static void ExecProgram (CmdDesc* Cmd)
     }
 
     /* Call the program */
-    Status = spawnvp (P_WAIT, Cmd->Name, Cmd->Args);
+    Status = spawnvp (P_WAIT, Cmd->Name, (const char* const *) Cmd->Args);
 
     /* Check the result code */
     if (Status < 0) {
index 0f5f5cd11b3a2284eee74756c057db3963b2c43f..fd42c5ec0756bd3873780f6c53db23a914089b77 100644 (file)
@@ -2,7 +2,7 @@
 /*                                                                           */
 /*                                filestat.c                                 */
 /*                                                                           */
-/*                   Replacement for buggy Microsoft code                    */
+/*                       Replacement for Windows code                        */
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
@@ -46,8 +46,7 @@
 
 #include <sys/types.h>
 #include <sys/stat.h>
-#if defined(__WATCOMC__) && defined(__NT__)
-#define BUGGY_OS 1
+#if defined(_WIN32)
 #include <errno.h>
 #include <windows.h>
 #endif
@@ -63,7 +62,7 @@
 
 
 
-#if defined(BUGGY_OS)
+#if defined(_WIN32)
 
 
 
@@ -77,7 +76,7 @@ static time_t FileTimeToUnixTime (const FILETIME* T)
      * way to express a number > 32 bit (known to me) but is able to do
      * calculations with 64 bit integers, so we need to do it this way.
      */
-    static const ULARGE_INTEGER Offs = { 0xB6109100UL, 0x00000020UL };
+    static const ULARGE_INTEGER Offs = { { 0xB6109100UL, 0x00000020UL } };
     ULARGE_INTEGER V;
     V.LowPart  = T->dwLowDateTime;
     V.HighPart = T->dwHighDateTime;
index 50b7685efe39408965dcfad22fb57e84b3fb69df..56ce2e9e0363bc43bf6067b7f517425168817f00 100644 (file)
@@ -2,7 +2,7 @@
 /*                                                                           */
 /*                                filestat.h                                 */
 /*                                                                           */
-/*                   Replacement for buggy Microsoft code                    */
+/*                       Replacement for Windows code                        */
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
index 0253807591cd6142d3a25b0892ee88c0a0438800..88a79bf97fc79afc46e3c56c2c32b7cc711fbf83 100644 (file)
@@ -2,7 +2,7 @@
 /*                                                                           */
 /*                                filetime.c                                 */
 /*                                                                           */
-/*                   Replacement for buggy Microsoft code                    */
+/*                       Replacement for Windows code                        */
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
 
 
 
-#if defined(__WATCOMC__) && defined(__NT__)
-#define BUGGY_OS 1
+#if defined(_WIN32)
 #include <errno.h>
 #include <windows.h>
 #else
-#if defined(__WATCOMC__) || defined(_MSC_VER) || defined(__MINGW32__)
-/* The Windows compilers have the file in the wrong directory */
-#  include <sys/utime.h>
-#else
-#  include <sys/types.h>                /* FreeBSD needs this */
-#  include <utime.h>
-#endif
+#include <sys/types.h>                          /* FreeBSD needs this */
+#include <utime.h>
 #endif
 
 
@@ -68,7 +62,7 @@
 
 
 
-#if defined(BUGGY_OS)
+#if defined(_WIN32)
 
 
 
@@ -82,7 +76,7 @@ static FILETIME* UnixTimeToFileTime (time_t T, FILETIME* FT)
      * way to express a number > 32 bit (known to me) but is able to do
      * calculations with 64 bit integers, so we need to do it this way.
      */
-    static const ULARGE_INTEGER Offs = { 0xB6109100UL, 0x00000020UL };
+    static const ULARGE_INTEGER Offs = { { 0xB6109100UL, 0x00000020UL } };
     ULARGE_INTEGER V;
     V.QuadPart = ((unsigned __int64) T + Offs.QuadPart) * 10000000U;
     FT->dwLowDateTime  = V.LowPart;
@@ -150,6 +144,3 @@ int SetFileTimes (const char* Path, time_t T)
 
 
 #endif
-
-
-
index 8a27712d90b62a9231448eb97aa0b3509a78cf63..4d20c7d638b760c37cde0b850f73eb9c67462ca4 100644 (file)
@@ -2,7 +2,7 @@
 /*                                                                           */
 /*                                filetime.h                                 */
 /*                                                                           */
-/*                   Replacement for buggy Microsoft code                    */
+/*                       Replacement for Windows code                        */
 /*                                                                           */
 /*                                                                           */
 /*                                                                           */
index 16945f36d4ab344a2a57533286cc6de4561be477..009deadede3af197b0081ee0453480473d53993f 100644 (file)
@@ -35,6 +35,9 @@
 
 #include <stdlib.h>
 #include <string.h>
+#if defined(_WIN32)
+#  include <windows.h>
+#endif
 #if defined(_MSC_VER)
 /* Microsoft compiler */
 #  include <io.h>
@@ -83,7 +86,7 @@ static char* CleanupPath (const char* Path)
 
 
 
-static void Add (SearchPath* P, const char* New)
+static void Add (SearchPaths* P, const char* New)
 /* Cleanup a new search path and add it to the list */
 {
     /* Add a clean copy of the path to the collection */
@@ -92,7 +95,7 @@ static void Add (SearchPath* P, const char* New)
 
 
 
-SearchPath* NewSearchPath (void)
+SearchPaths* NewSearchPath (void)
 /* Create a new, empty search path list */
 {
     return NewCollection ();
@@ -100,7 +103,7 @@ SearchPath* NewSearchPath (void)
 
 
 
-void AddSearchPath (SearchPath* P, const char* NewPath)
+void AddSearchPath (SearchPaths* P, const char* NewPath)
 /* Add a new search path to the end of an existing list */
 {
     /* Allow a NULL path */
@@ -111,7 +114,7 @@ void AddSearchPath (SearchPath* P, const char* NewPath)
 
 
 
-void AddSearchPathFromEnv (SearchPath* P, const char* EnvVar)
+void AddSearchPathFromEnv (SearchPaths* P, const char* EnvVar)
 /* Add a search path from an environment variable to the end of an existing
  * list.
  */
@@ -121,7 +124,7 @@ void AddSearchPathFromEnv (SearchPath* P, const char* EnvVar)
 
 
 
-void AddSubSearchPathFromEnv (SearchPath* P, const char* EnvVar, const char* SubDir)
+void AddSubSearchPathFromEnv (SearchPaths* P, const char* EnvVar, const char* SubDir)
 /* Add a search path from an environment variable, adding a subdirectory to
  * the environment variable value.
  */
@@ -157,21 +160,20 @@ void AddSubSearchPathFromEnv (SearchPath* P, const char* EnvVar, const char* Sub
 
 
 
-void AddSubSearchPathFromWinBin (SearchPath* P, const char* SubDir)
+void AddSubSearchPathFromWinBin (SearchPaths* P, const char* SubDir)
 {
 /* Windows only:
  * Add a search path from the running binary, adding a subdirectory to
  * the parent directory of the directory containing the binary.
  */
-#if defined(_MSC_VER)
+#if defined(_WIN32)
 
     char Dir[_MAX_PATH];
     char* Ptr;
 
-    if (_get_pgmptr (&Ptr) != 0) {
+    if (GetModuleFileName (NULL, Dir, _MAX_PATH) == 0) {
         return;
     }
-    strcpy (Dir, Ptr);
 
     /* Remove binary name */
     Ptr = strrchr (Dir, '\\');
@@ -204,7 +206,7 @@ void AddSubSearchPathFromWinBin (SearchPath* P, const char* SubDir)
 }
 
 
-int PushSearchPath (SearchPath* P, const char* NewPath)
+int PushSearchPath (SearchPaths* P, const char* NewPath)
 /* Add a new search path to the head of an existing search path list, provided
  * that it's not already there. If the path is already at the first position,
  * return zero, otherwise return a non zero value.
@@ -227,7 +229,7 @@ int PushSearchPath (SearchPath* P, const char* NewPath)
 
 
 
-void PopSearchPath (SearchPath* P)
+void PopSearchPath (SearchPaths* P)
 /* Remove a search path from the head of an existing search path list */
 {
     /* Remove the path at position 0 */
@@ -237,7 +239,7 @@ void PopSearchPath (SearchPath* P)
 
 
 
-char* SearchFile (const SearchPath* P, const char* File)
+char* SearchFile (const SearchPaths* P, const char* File)
 /* Search for a file in a list of directories. Return a pointer to a malloced
  * area that contains the complete path, if found, return 0 otherwise.
  */
@@ -271,6 +273,3 @@ char* SearchFile (const SearchPath* P, const char* File)
     SB_Done (&PathName);
     return Name;
 }
-
-
-
index 555a0e18e4b0a33dde2e8c0becfeab7c37c5590f..33db0c779efd00cc50e3e08ab34cf464f78d9d0d 100644 (file)
@@ -53,7 +53,7 @@
 #define  STRINGIZE(arg) _STRINGIZE(arg)
 
 /* A search path is a pointer to the list */
-typedef struct Collection SearchPath;
+typedef struct Collection SearchPaths;
 
 
 
@@ -63,38 +63,38 @@ typedef struct Collection SearchPath;
 
 
 
-SearchPath* NewSearchPath (void);
+SearchPaths* NewSearchPath (void);
 /* Create a new, empty search path list */
 
-void AddSearchPath (SearchPath* P, const char* NewPath);
+void AddSearchPath (SearchPaths* P, const char* NewPath);
 /* Add a new search path to the end of an existing list */
 
-void AddSearchPathFromEnv (SearchPath* P, const char* EnvVar);
+void AddSearchPathFromEnv (SearchPaths* P, const char* EnvVar);
 /* Add a search path from an environment variable to the end of an existing
  * list.
  */
 
-void AddSubSearchPathFromEnv (SearchPath* P, const char* EnvVar, const char* SubDir);
+void AddSubSearchPathFromEnv (SearchPaths* P, const char* EnvVar, const char* SubDir);
 /* Add a search path from an environment variable, adding a subdirectory to
  * the environment variable value.
  */
 
-void AddSubSearchPathFromWinBin (SearchPath* P, const char* SubDir);
+void AddSubSearchPathFromWinBin (SearchPaths* P, const char* SubDir);
 /* Windows only:
  * Add a search path from the running binary, adding a subdirectory to
  * the parent directory of the directory containing the binary.
  */
 
-int PushSearchPath (SearchPath* P, const char* NewPath);
+int PushSearchPath (SearchPaths* P, const char* NewPath);
 /* Add a new search path to the head of an existing search path list, provided
  * that it's not already there. If the path is already at the first position,
  * return zero, otherwise return a non zero value.
  */
 
-void PopSearchPath (SearchPath* P);
+void PopSearchPath (SearchPaths* P);
 /* Remove a search path from the head of an existing search path list */
 
-char* SearchFile (const SearchPath* P, const char* File);
+char* SearchFile (const SearchPaths* P, const char* File);
 /* Search for a file in a list of directories. Return a pointer to a malloced
  * area that contains the complete path, if found, return 0 otherwise.
  */
index 07672c5c457f0b0553b53ffbc7f445174e925e9f..2758e5bc22a2523d76262a29e50953bf2fc2b587 100644 (file)
  * and precision to such a StrBuf, but *not* using %p would bring up a warning
  * about a wrong argument type each time. Maybe gcc will one day allow custom
  * format specifiers and we can change this ...
+ * However this cheat doesn't work with MinGW as there's no support for %m :-(
  */
+#if defined( __MINGW32__)
+#  pragma GCC diagnostic ignored "-Wformat"
+#endif
 
 
 
index 42357bb47d83aa9f335ad375d0d6a3dfad53ed3f..1010023f2ccf6c61cda788f4b4b10411ecbfb296 100644 (file)
 
 
 
-SearchPath     LibSearchPath;         /* Library path */
-SearchPath     ObjSearchPath;         /* Object file path */
-SearchPath     CfgSearchPath;         /* Config file path */
+SearchPaths*     LibSearchPath;         /* Library path */
+SearchPaths*     ObjSearchPath;         /* Object file path */
+SearchPaths*     CfgSearchPath;         /* Config file path */
 
-SearchPath     LibDefaultPath;        /* Default Library path */
-SearchPath     ObjDefaultPath;        /* Default Object file path */
-SearchPath     CfgDefaultPath;        /* Default Config file path */
+SearchPaths*     LibDefaultPath;        /* Default Library path */
+SearchPaths*     ObjDefaultPath;        /* Default Object file path */
+SearchPaths*     CfgDefaultPath;        /* Default Config file path */
 
 
 
@@ -88,13 +88,13 @@ void InitSearchPaths (void)
     AddSubSearchPathFromEnv (CfgDefaultPath, "CC65_HOME", "cfg");
 
     /* Add some compiled-in search paths if defined at compile time. */
-#if defined(LD65_LIB)
+#if defined(LD65_LIB) && !defined(_WIN32)
     AddSearchPath (LibDefaultPath, STRINGIZE (LD65_LIB));
 #endif
-#if defined(LD65_OBJ)
+#if defined(LD65_OBJ) && !defined(_WIN32)
     AddSearchPath (ObjDefaultPath, STRINGIZE (LD65_OBJ));
 #endif
-#if defined(LD65_CFG)
+#if defined(LD65_CFG) && !defined(_WIN32)
     AddSearchPath (CfgDefaultPath, STRINGIZE (LD65_CFG));
 #endif
 
index 97e77068bb579172ec739bf43b2d0fe9c8a67f65..12032b165ec5db4e72bb4ce48a83b8a92d202853 100644 (file)
 
 
 
-extern SearchPath     LibSearchPath;          /* Library path */
-extern SearchPath     ObjSearchPath;          /* Object file path */
-extern SearchPath     CfgSearchPath;          /* Config file path */
+extern SearchPaths*     LibSearchPath;          /* Library path */
+extern SearchPaths*     ObjSearchPath;          /* Object file path */
+extern SearchPaths*     CfgSearchPath;          /* Config file path */
 
-extern SearchPath     LibDefaultPath;         /* Default Library path */
-extern SearchPath     ObjDefaultPath;         /* Default Object file path */
-extern SearchPath     CfgDefaultPath;         /* Default Config file path */
+extern SearchPaths*     LibDefaultPath;         /* Default Library path */
+extern SearchPaths*     ObjDefaultPath;         /* Default Object file path */
+extern SearchPaths*     CfgDefaultPath;         /* Default Config file path */
 
 
 
index 29b8ea9307eb30d20f0ffe1752efe3b462200eb6..035bb1d8705f0fab6689e2151c4546f4a8380ed6 100644 (file)
 #include <string.h>
 #include <stdlib.h>
 #include <fcntl.h>
+#if defined(_WIN32)
+#  define O_INITIAL O_BINARY
+#else
+#  define O_INITIAL 0
+#endif
 #if defined(_MSC_VER)
 /* Microsoft compiler */
 #  include <io.h>
 #  pragma warning(disable : 4996)
-#  define O_INITIAL O_BINARY
 #else
 /* Anyone else */
 #  include <unistd.h>
-#  define O_INITIAL 0
 #endif
 
 /* common */