This is an automated email from Gerrit.

Andreas Fritiofson ([email protected]) just uploaded a new patch set 
to Gerrit, which you can find at http://openocd.zylin.com/1796

-- gerrit

commit 6a35b8d63054d65635800027f2c8f99a77bc759b
Author: Andreas Fritiofson <[email protected]>
Date:   Sat Jul 27 17:27:01 2013 +0200

    Remove special handling of script search path on Windows
    
    On all platforms, search for scripts in
    $HOME/.openocd
    ${run_prefix}${pkgdatadir}/site
    ${run_prefix}${pkgdatadir}/scripts
    
    On Windows, set run_prefix to the runtime path of the executable, minus
    ${bindir}. This is to enable the install dir to be moved anywhere, as long
    as the structure of the install dir is kept intact. On all other platforms,
    run_prefix is empty.
    
    The script paths can now be adjusted on Windows builds the normal way; by
    overriding pkgdatadir at build time. For example, to create a Windows
    package layout of
    
    bin/openocd.exe
    scripts/interface/...
    scripts/target/...
    
    you can do
    configure --prefix= --enable-... and then
    make pkgdatadir= DESTDIR=/some/path clean all install
    
    Also, remove the unused PKGLIBDIR define.
    
    Change-Id: If2c8228fc80c598d763efad21c5f51695ff9b6cf
    Signed-off-by: Andreas Fritiofson <[email protected]>

diff --git a/common.mk b/common.mk
index 1cb0743..f301c3a 100644
--- a/common.mk
+++ b/common.mk
@@ -4,7 +4,7 @@ AM_CPPFLAGS = -I$(top_srcdir)/src \
                          -I$(top_builddir)/src \
                          -I$(top_srcdir)/src/helper \
                          -DPKGDATADIR=\"$(pkgdatadir)\" \
-                         -DPKGLIBDIR=\"$(pkglibdir)\"
+                         -DBINDIR=\"$(bindir)\"
 
 if INTERNAL_JIMTCL
 AM_CPPFLAGS += -I$(top_srcdir)/jimtcl \
diff --git a/src/helper/options.c b/src/helper/options.c
index d0a4a70..00f1dbe 100644
--- a/src/helper/options.c
+++ b/src/helper/options.c
@@ -52,11 +52,29 @@ int configuration_output_handler(struct command_context 
*context, const char *li
        return ERROR_OK;
 }
 
+#ifdef _WIN32
+static char *find_suffix(const char *text, const char *suffix)
+{
+       size_t text_len = strlen(text);
+       size_t suffix_len = strlen(suffix);
+
+       if (suffix_len == 0)
+               return (char *)text + text_len;
+
+       if (suffix_len > text_len || strncmp(text + text_len - suffix_len, 
suffix, suffix_len) != 0)
+               return NULL; /* Not a suffix of text */
+
+       return (char *)text + text_len - suffix_len;
+}
+#endif
+
 static void add_default_dirs(void)
 {
+       const char *run_prefix;
+       char *path;
+
 #ifdef _WIN32
        char strExePath[MAX_PATH];
-       char *path;
        GetModuleFileName(NULL, strExePath, MAX_PATH);
 
        /* Strip executable file name, leaving path */
@@ -68,63 +86,45 @@ static void add_default_dirs(void)
                        *p = '/';
        }
 
-       /* Add the parent of the directory where openocd.exe resides to the
-        * config script search path.
-        *
-        * bin/openocd.exe
-        * interface/dummy.cfg
-        * target/at91eb40a.cfg
-        */
-       path = alloc_printf("%s%s", strExePath, "/..");
-       if (path) {
-               add_script_search_dir(path);
-               free(path);
-       }
-       /* 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
-        */
-       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);
-       }
+       char *end_of_prefix = find_suffix(strExePath, BINDIR);
+       if (end_of_prefix != NULL)
+               *end_of_prefix = '\0';
+
+       run_prefix = strExePath;
 #else
+       run_prefix = "";
+#endif
+
+       LOG_DEBUG("bindir=%s", BINDIR);
+       LOG_DEBUG("pkgdatadir=%s", PKGDATADIR);
+       LOG_DEBUG("run_prefix=%s", run_prefix);
+
        /*
         * The directory containing OpenOCD-supplied scripts should be
         * listed last in the built-in search order, so the user can
         * override these scripts with site-specific customizations.
         */
-
        const char *home = getenv("HOME");
 
        if (home) {
-               char *path;
-
                path = alloc_printf("%s/.openocd", home);
-
                if (path) {
                        add_script_search_dir(path);
                        free(path);
                }
        }
 
-       add_script_search_dir(PKGDATADIR "/site");
-       add_script_search_dir(PKGDATADIR "/scripts");
-#endif
+       path = alloc_printf("%s%s%s", run_prefix, PKGDATADIR, "/site");
+       if (path) {
+               add_script_search_dir(path);
+               free(path);
+       }
+
+       path = alloc_printf("%s%s%s", run_prefix, PKGDATADIR, "/scripts");
+       if (path) {
+               add_script_search_dir(path);
+               free(path);
+       }
 }
 
 int parse_cmdline_args(struct command_context *cmd_ctx, int argc, char *argv[])

-- 

------------------------------------------------------------------------------
November Webinars for C, C++, Fortran Developers
Accelerate application performance with scalable programming models. Explore
techniques for threading, error checking, porting, and tuning. Get the most 
from the latest Intel processors and coprocessors. See abstracts and register
http://pubads.g.doubleclick.net/gampad/clk?id=60136231&iu=/4140/ostg.clktrk
_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to