mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-25 09:41:15 +00:00
mainBundle patch fix
git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@6482 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
parent
1d72e5e27d
commit
cd56717be2
6 changed files with 64 additions and 8 deletions
11
ChangeLog
11
ChangeLog
|
@ -1,3 +1,14 @@
|
||||||
|
2000-04-18 Adam Fedor <fedor@gnu.org>
|
||||||
|
|
||||||
|
* base/configure.in: add a test to see whether a symlink
|
||||||
|
'/proc/self/exe' exists
|
||||||
|
* base/Headers/gnustep/base/config.h.in: Add a definition for the
|
||||||
|
test result
|
||||||
|
* base/Source/NSBundle.m: Move the discovery of the process'
|
||||||
|
executable file to +initialize; add code to discover it from
|
||||||
|
/proc, if possible (patches from Jonathan Gapen
|
||||||
|
<jagapen@whitewater.chem.wisc.edu>)
|
||||||
|
|
||||||
2000-04-18 Richard Frith-Macdonald <rfm@gnu.org>
|
2000-04-18 Richard Frith-Macdonald <rfm@gnu.org>
|
||||||
|
|
||||||
* Documentation/gsdoc/NSCountedSet.gsdoc: Method descriptions fleshed
|
* Documentation/gsdoc/NSCountedSet.gsdoc: Method descriptions fleshed
|
||||||
|
|
|
@ -36,6 +36,9 @@
|
||||||
/* Define if your Lib C defines program_invocation_name */
|
/* Define if your Lib C defines program_invocation_name */
|
||||||
#undef HAVE_PROGRAM_INVOCATION_NAME
|
#undef HAVE_PROGRAM_INVOCATION_NAME
|
||||||
|
|
||||||
|
/* Define if your system has a /proc/self/exe symlink to the executable */
|
||||||
|
#undef HAVE_PROC_FS_EXE_LINK
|
||||||
|
|
||||||
/* The number of bytes in a double. */
|
/* The number of bytes in a double. */
|
||||||
#undef SIZEOF_DOUBLE
|
#undef SIZEOF_DOUBLE
|
||||||
|
|
||||||
|
|
|
@ -73,6 +73,9 @@ typedef enum {
|
||||||
static NSBundle* _mainBundle = nil;
|
static NSBundle* _mainBundle = nil;
|
||||||
static NSMapTable* _bundles = NULL;
|
static NSMapTable* _bundles = NULL;
|
||||||
|
|
||||||
|
/* Keep the path to the executable file for finding the main bundle. */
|
||||||
|
static NSString *_executable_path;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* An empty strings file table for use when localization files can't be found.
|
* An empty strings file table for use when localization files can't be found.
|
||||||
*/
|
*/
|
||||||
|
@ -252,6 +255,7 @@ _bundle_load_callback(Class theClass, Category *theCategory)
|
||||||
{
|
{
|
||||||
NSMutableString *system;
|
NSMutableString *system;
|
||||||
NSString *str;
|
NSString *str;
|
||||||
|
char *output;
|
||||||
|
|
||||||
if ((str = [env objectForKey: @"GNUSTEP_TARGET_DIR"]) != nil)
|
if ((str = [env objectForKey: @"GNUSTEP_TARGET_DIR"]) != nil)
|
||||||
gnustep_target_dir = RETAIN(str);
|
gnustep_target_dir = RETAIN(str);
|
||||||
|
@ -275,6 +279,18 @@ _bundle_load_callback(Class theClass, Category *theCategory)
|
||||||
mutableCopy]);
|
mutableCopy]);
|
||||||
[system appendString: @"/Libraries"];
|
[system appendString: @"/Libraries"];
|
||||||
|
|
||||||
|
#ifdef HAVE_PROC_FS_EXE_LINK
|
||||||
|
_executable_path = [[NSFileManager defaultManager]
|
||||||
|
pathContentOfSymbolicLinkAtPath: @"/proc/self/exe"];
|
||||||
|
#else
|
||||||
|
_executable_path =
|
||||||
|
[[[NSProcessInfo processInfo] arguments] objectAtIndex: 0];
|
||||||
|
output = objc_find_executable([_executable_path cString]);
|
||||||
|
NSAssert(output, NSInternalInconsistencyException);
|
||||||
|
_executable_path = [NSString stringWithCString: output];
|
||||||
|
OBJC_FREE(output);
|
||||||
|
#endif
|
||||||
|
|
||||||
_gnustep_bundle = RETAIN([NSBundle bundleWithPath: system]);
|
_gnustep_bundle = RETAIN([NSBundle bundleWithPath: system]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -309,17 +325,10 @@ _bundle_load_callback(Class theClass, Category *theCategory)
|
||||||
[load_lock lock];
|
[load_lock lock];
|
||||||
if ( !_mainBundle )
|
if ( !_mainBundle )
|
||||||
{
|
{
|
||||||
char *output;
|
|
||||||
NSString *path, *s;
|
NSString *path, *s;
|
||||||
|
|
||||||
path = [[[NSProcessInfo processInfo] arguments] objectAtIndex: 0];
|
|
||||||
output = objc_find_executable([path cString]);
|
|
||||||
NSAssert(output, NSInternalInconsistencyException);
|
|
||||||
path = [NSString stringWithCString: output];
|
|
||||||
OBJC_FREE(output);
|
|
||||||
|
|
||||||
/* Strip off the name of the program */
|
/* Strip off the name of the program */
|
||||||
path = [path stringByDeletingLastPathComponent];
|
path = [_executable_path stringByDeletingLastPathComponent];
|
||||||
|
|
||||||
/* The executable may not lie in the main bundle directory
|
/* The executable may not lie in the main bundle directory
|
||||||
so we need to chop off the extra subdirectories, the library
|
so we need to chop off the extra subdirectories, the library
|
||||||
|
|
|
@ -126,3 +126,6 @@
|
||||||
|
|
||||||
/* Define if your Lib C defines program_invocation_name */
|
/* Define if your Lib C defines program_invocation_name */
|
||||||
#undef HAVE_PROGRAM_INVOCATION_NAME
|
#undef HAVE_PROGRAM_INVOCATION_NAME
|
||||||
|
|
||||||
|
/* Define if your system has a /proc/self/exe symlink to the executable */
|
||||||
|
#undef HAVE_PROC_FS_EXE_LINK
|
||||||
|
|
17
configure
vendored
17
configure
vendored
|
@ -4163,6 +4163,23 @@ else
|
||||||
sys_proc_fs=no;
|
sys_proc_fs=no;
|
||||||
echo "$ac_t""no" 1>&6
|
echo "$ac_t""no" 1>&6
|
||||||
fi
|
fi
|
||||||
|
# Linux (and others?) /proc contains a symlink to the executable
|
||||||
|
# file from which the process loaded its code. This can be used
|
||||||
|
# by NSBundle.m to locate the main bundle.
|
||||||
|
if test $sys_proc_fs = yes; then
|
||||||
|
echo $ac_n "checking link to executable in /proc""... $ac_c" 1>&6
|
||||||
|
echo "configure:4172: checking link to executable in /proc" >&5
|
||||||
|
if test -L /proc/self/exe; then
|
||||||
|
cat >> confdefs.h <<\EOF
|
||||||
|
#define HAVE_PROC_FS_EXE_LINK 1
|
||||||
|
EOF
|
||||||
|
|
||||||
|
echo "$ac_t""yes" 1>&6
|
||||||
|
else
|
||||||
|
echo "$ac_t""no" 1>&6
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------
|
#--------------------------------------------------------------------
|
||||||
# Tools for making a DLL.
|
# Tools for making a DLL.
|
||||||
|
|
13
configure.in
13
configure.in
|
@ -652,6 +652,19 @@ else
|
||||||
sys_proc_fs=no;
|
sys_proc_fs=no;
|
||||||
AC_MSG_RESULT(no)
|
AC_MSG_RESULT(no)
|
||||||
fi
|
fi
|
||||||
|
# Linux (and others?) /proc contains a symlink to the executable
|
||||||
|
# file from which the process loaded its code. This can be used
|
||||||
|
# by NSBundle.m to locate the main bundle.
|
||||||
|
if test $sys_proc_fs = yes; then
|
||||||
|
AC_MSG_CHECKING(link to executable in /proc)
|
||||||
|
if test -L /proc/self/exe; then
|
||||||
|
AC_DEFINE(HAVE_PROC_FS_EXE_LINK)
|
||||||
|
AC_MSG_RESULT(yes)
|
||||||
|
else
|
||||||
|
AC_MSG_RESULT(no)
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
#--------------------------------------------------------------------
|
#--------------------------------------------------------------------
|
||||||
# Tools for making a DLL.
|
# Tools for making a DLL.
|
||||||
|
|
Loading…
Reference in a new issue