ref: e62fdd771f01ef7b50fe3cb8f456eae5d7db3748
parent: 9ea3cb62c94b2f293cc5dbc95518b8312434e093
author: Simon Howard <[email protected]>
date: Thu Nov 19 16:07:31 EST 2009
Make chocolate-setup use its own location in the filesystem to find the location of the chocolate-doom executable. Remove INSTALL_DIR define. Subversion-branch: /trunk/chocolate-doom Subversion-revision: 1729
--- a/setup/Makefile.am
+++ b/setup/Makefile.am
@@ -1,7 +1,7 @@
gamesdir = $(prefix)/games
-AM_CFLAGS = -I../textscreen -I../src -DINSTALL_DIR="\"$(gamesdir)\""
+AM_CFLAGS = -I../textscreen -I../src
games_PROGRAMS = chocolate-setup
--- a/setup/execute.c
+++ b/setup/execute.c
@@ -55,7 +55,7 @@
#ifdef _WIN32
#define DOOM_BINARY PACKAGE_TARNAME ".exe"
#else
-#define DOOM_BINARY INSTALL_DIR "/" PACKAGE_TARNAME
+#define DOOM_BINARY PACKAGE_TARNAME
#endif
#ifdef _WIN32
@@ -269,11 +269,41 @@
#else
+// Given the specified program name, get the full path to the program,
+// assuming that it is in the same directory as this program is.
+
+static char *GetFullExePath(const char *program)
+{
+ char *result;
+ char *sep;
+ unsigned int path_len;
+
+ sep = strrchr(myargv[0], DIR_SEPARATOR);
+
+ if (sep == NULL)
+ {
+ result = strdup(program);
+ }
+ else
+ {
+ path_len = sep - myargv[0] + 1;
+
+ result = malloc(strlen(program) + path_len + 1);
+
+ strncpy(result, myargv[0], path_len);
+ result[path_len] = '\0';
+
+ strcat(result, program);
+ }
+
+ return result;
+}
+
static int ExecuteCommand(const char *program, const char *arg)
{
pid_t childpid;
int result;
- const char *argv[] = { program, arg, NULL };
+ const char *argv[3];
childpid = fork();
@@ -280,6 +310,10 @@
if (childpid == 0)
{
// This is the child. Execute the command.
+
+ argv[0] = GetFullExePath(program);
+ argv[1] = arg;
+ argv[2] = NULL;
execv(argv[0], (char **) argv);