]> git.sur5r.net Git - cc65/commitdiff
Added search path relative to running binary on Windows.
authorOliver Schmidt <ol.sc@web.de>
Mon, 6 May 2013 21:20:56 +0000 (23:20 +0200)
committerOliver Schmidt <ol.sc@web.de>
Mon, 6 May 2013 21:20:56 +0000 (23:20 +0200)
In contrast to *IX it doesn't make much sense to add compile time defined
search paths to Windows binaries: There's no standard path like /usr/local/bin
(and there are no symbolic links to link from there to another location).

On the other hand it's (again in contrast to *IX) easy for Windows binaries
to determine their own paths. Therefore it's appropriate to make use of that
to add run time defined default search paths.

src/ca65/incpath.c
src/cc65/incpath.c
src/common/searchpath.c
src/common/searchpath.h
src/ld65/filepath.c

index a5968cb57d724fd4d8e814e3d45a46e369c7d42a..88323dc5358b1cb34121119bcfbeb4269797a13b 100644 (file)
@@ -87,6 +87,9 @@ void FinishIncludePaths (void)
 #ifdef CA65_INC
     AddSearchPath (IncSearchPath, STRINGIZE (CA65_INC));
 #endif
+
+    /* Add paths relative to the parent directory of the Windows binary. */
+    AddSubSearchPathFromWinBin (IncSearchPath, "asminc");
 }
 
 
index 6e07f8f77f0f16ac08d21b5a6cdce2142f41307f..5f26eec575e611e158ae46151775d9a1eb44b83d 100644 (file)
@@ -88,6 +88,9 @@ void FinishIncludePaths (void)
 #ifdef CC65_INC
     AddSearchPath (SysIncSearchPath, STRINGIZE (CC65_INC));
 #endif
+
+    /* Add paths relative to the parent directory of the Windows binary. */
+    AddSubSearchPathFromWinBin (SysIncSearchPath, "include");
 }
 
 
index 78d2cce4c9e4a9bf349377312b2d3391a3b6ebf8..47dc3dfc952cdb169415e2d12a439879bd109a29 100644 (file)
@@ -157,6 +157,48 @@ void AddSubSearchPathFromEnv (SearchPath* P, const char* EnvVar, const char* Sub
 
 
 
+void AddSubSearchPathFromWinBin (SearchPath* 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)
+
+    char Dir[_MAX_PATH];
+    char* Ptr;
+
+    if (_get_pgmptr (&Ptr) != 0) {
+        return;
+    }
+    strcpy (Dir, Ptr);
+
+    /* Remove binary name */
+    Ptr = strrchr (Dir, '\\');
+    if (Ptr == 0) {
+        return;
+    }
+    *Ptr = '\0';
+
+    /* Check for 'bin' directory */
+    Ptr = strrchr (Dir, '\\');
+    if (Ptr == 0) {
+        return;
+    }
+    if (strcmp (Ptr++, "\\bin") != 0) {
+        return;
+    }
+
+    /* Append SubDir */
+    strcpy (Ptr, SubDir);
+
+    /* Add the search path */
+    AddSearchPath (P, Dir);
+
+#endif
+}
+
+
 int PushSearchPath (SearchPath* 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,
index f162b06eebbc9f89d05ac5051a0cf1c217eda122..8b7f23e3bcef91cf3357288566c6ce1228ed0885 100644 (file)
@@ -79,6 +79,12 @@ void AddSubSearchPathFromEnv (SearchPath* P, const char* EnvVar, const char* Sub
  * the environment variable value.
  */
 
+void AddSubSearchPathFromWinBin (SearchPath* 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);
 /* 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,
index d112c0733da14dfe7f09bddfffce70f0e5cc6c12..803efbf2dc16a30d476739cbf1547e9017b77e5b 100644 (file)
@@ -84,7 +84,7 @@ void InitSearchPaths (void)
 
     /* Add paths relative to a main directory defined in an env. var. */
     AddSubSearchPathFromEnv (LibDefaultPath, "CC65_HOME", "lib");
-    AddSubSearchPathFromEnv (ObjDefaultPath, "CC65_HOME", "obj");
+    AddSubSearchPathFromEnv (ObjDefaultPath, "CC65_HOME", "lib");
     AddSubSearchPathFromEnv (CfgDefaultPath, "CC65_HOME", "cfg");
 
     /* Add some compiled-in search paths if defined at compile time. */
@@ -97,6 +97,11 @@ void InitSearchPaths (void)
 #if defined(LD65_CFG)
     AddSearchPath (CfgDefaultPath, STRINGIZE (LD65_CFG));
 #endif
+
+    /* Add paths relative to the parent directory of the Windows binary. */
+    AddSubSearchPathFromWinBin (LibDefaultPath, "lib");
+    AddSubSearchPathFromWinBin (ObjDefaultPath, "lib");
+    AddSubSearchPathFromWinBin (CfgDefaultPath, "cfg");
 }