Add another scripts search path for Windows builds
authorFreddie Chopin <freddie.chopin@gmail.com>
Fri, 17 Aug 2012 09:54:24 +0000 (11:54 +0200)
committerFreddie Chopin <freddie.chopin@gmail.com>
Wed, 29 Aug 2012 06:26:21 +0000 (06:26 +0000)
Add single "scripts" folder to search path for Windows OpenOCD builds
that don't use cygwin
bin/openocd.exe
scripts/interface/dummy.cfg
scripts/target/at91eb40a.cfg

Do some refactoring of current code (thx to Andreas).

Change-Id: Idbb08d1368b06f25da44f4f9ab1511db992b1724
Signed-off-by: Freddie Chopin <freddie.chopin@gmail.com>
Signed-off-by: Andreas Fritiofson <andreas.fritiofson@gmail.com>
Reviewed-on: http://openocd.zylin.com/785
Tested-by: jenkins
src/helper/options.c

index 98cd634bc2cd3c4613c3dbfddcdede1b68451dc0..e6b0f64415884845b70110817e1912dbd3b0dbd2 100644 (file)
@@ -55,43 +55,52 @@ int configuration_output_handler(struct command_context *context, const char *li
 static void add_default_dirs(void)
 {
 #ifdef _WIN32
+       char strExePath[MAX_PATH];
+       char *path;
+       GetModuleFileName(NULL, strExePath, MAX_PATH);
+
+       /* Strip executable file name, leaving path */
+       *strrchr(strExePath, '\\') = '\0';
+
+       /* Convert path separators to UNIX style, should work on Windows also. */
+       for (char *p = strExePath; *p; p++) {
+               if (*p == '\\')
+                       *p = '/';
+       }
+
        /* Add the parent of the directory where openocd.exe resides to the
         * config script search path.
-        * Directory layout:
-        * bin\openocd.exe
-        * lib\openocd
+        *
+        * bin/openocd.exe
+        * interface/dummy.cfg
+        * target/at91eb40a.cfg
         */
-       {
-               char strExePath[MAX_PATH];
-               GetModuleFileName(NULL, strExePath, MAX_PATH);
-               /* Either this code will *always* work or it will SEGFAULT giving
-                * excellent information on the culprit.
-                */
-               *strrchr(strExePath, '\\') = 0;
-               strcat(strExePath, "\\..");
-               add_script_search_dir(strExePath);
+       path = alloc_printf("%s%s", strExePath, "/..");
+       if (path) {
+               add_script_search_dir(path);
+               free(path);
        }
-       /*
-        * Add support for the default (as of 20091118) layout when
-        * using autotools and cygwin/MinGW to build native binary.
-        * Path separator is converted to UNIX style so that MinGW is
-        * pleased.
+       /* Add support for the directory layout resulting from a 'make install'.
         *
         * bin/openocd.exe
         * share/openocd/scripts/interface/dummy.cfg
         * share/openocd/scripts/target/at91eb40a.cfg
         */
-       {
-               char strExePath[MAX_PATH];
-               char *p;
-               GetModuleFileName(NULL, strExePath, MAX_PATH);
-               *strrchr(strExePath, '\\') = 0;
-               strcat(strExePath, "/../share/"PACKAGE "/scripts");
-               for (p = strExePath; *p; p++) {
-                       if (*p == '\\')
-                               *p = '/';
-               }
-               add_script_search_dir(strExePath);
+       path = alloc_printf("%s%s", strExePath, "/../share/" PACKAGE "/scripts");
+       if (path) {
+               add_script_search_dir(path);
+               free(path);
+       }
+       /* Add single "scripts" folder to search path for Windows OpenOCD builds that don't use cygwin
+        *
+        * bin/openocd.exe
+        * scripts/interface/dummy.cfg
+        * scripts/target/at91eb40a.cfg
+        */
+       path = alloc_printf("%s%s", strExePath, "/../scripts");
+       if (path) {
+               add_script_search_dir(path);
+               free(path);
        }
 #else
        /*