Skip to content
Snippets Groups Projects
Commit 619b8383 authored by Andreas Fritiofson's avatar Andreas Fritiofson Committed by Spencer Oliver
Browse files

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: default avatarAndreas Fritiofson <andreas.fritiofson@gmail.com>
Reviewed-on: http://openocd.zylin.com/1796


Tested-by: jenkins
Reviewed-by: default avatarJens Bauer <jens@gpio.dk>
Reviewed-by: default avatarSpencer Oliver <spen@spen-soft.co.uk>
parent 6018406c
No related branches found
No related tags found
No related merge requests found
......@@ -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 \
......
......@@ -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[])
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment