diff --git a/ChangeLog b/ChangeLog index 5b6cc3a50..98888f07c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,25 @@ +2009-10-12 Richard Frith-Macdonald + + * Source/NSProcessInfo.m: + * Headers/Foundation/NSProcessInfo.h: + * Tools/gspath.m: + * Tools/plmerge.m: + * Tools/xmlparse.m: + * Tools/sfparse.m: + * Tools/plparse.m: + * Tools/pldes.m: + * Tools/defaults.m: + * Tools/plget.m: + * Tools/pl2link.m: + * Tools/gdnc.m: + * Tools/plser.m: + * Tools/autogsdoc.m: + * Tools/HTMLLinker.m: + * Tools/cvtenc.m: + Add function for easy process initialisation when the automatic + mechanisms don't work (eg calling ObjC code from within a C or C++ + application). + 2009-10-11 Eric Wasylishen * Source/NSKeyValueObserving.m: add setters for common structures. diff --git a/Headers/Foundation/NSProcessInfo.h b/Headers/Foundation/NSProcessInfo.h index 2c9568349..9284488d6 100644 --- a/Headers/Foundation/NSProcessInfo.h +++ b/Headers/Foundation/NSProcessInfo.h @@ -237,19 +237,25 @@ enum { */ - (BOOL) setLogFile: (NSString*)path; -/** - * Fallback/override method. The developer must call this method to initialize - * the NSProcessInfo system if none of the system-specific hacks to - * auto-initialize it are working.
- * It is also safe to call this method to override the effects - * of the automatic initialisation, which some applications may need - * to do when using GNUstep libraries embedded within other frameworks. +/** Obsolete ... the GSInitializeProcess() function has the same effect and + * can be called more easily from other languages (particularly C). */ + (void) initializeWithArguments: (char**)argv count: (int)argc environment: (char**)env; @end +/** + * Fallback/override function.
+ * The developer must call this method to initialize + * the NSProcessInfo system if none of the system-specific hacks to + * auto-initialize it are working.
+ * It is also safe to call this function to override the effects + * of the automatic initialisation, which some applications may need + * to do when using GNUstep libraries embedded within other frameworks. + */ +GS_EXPORT void GSInitializeProcess(int argc, char **argv, char **envp); + /** * Function for rapid testing to see if a debug level is set.
* This is used by the debugging macros.
diff --git a/Source/NSProcessInfo.m b/Source/NSProcessInfo.m index 5b3a34d59..08635e09f 100644 --- a/Source/NSProcessInfo.m +++ b/Source/NSProcessInfo.m @@ -1362,6 +1362,16 @@ static void determineOperatingSystem() @end +void +GSInitializeProcess(int argc, char **argv, char **envp) +{ + [NSProcessInfo class]; + [gnustep_global_lock lock]; + fallbackInitialisation = YES; + _gnu_process_args(argc, argv, envp); + [gnustep_global_lock unlock]; +} + @implementation NSProcessInfo (GNUstep) static BOOL debugTemporarilyDisabled = NO; @@ -1370,10 +1380,7 @@ static BOOL debugTemporarilyDisabled = NO; count: (int)argc environment: (char**)env { - [gnustep_global_lock lock]; - fallbackInitialisation = YES; - _gnu_process_args(argc, argv, env); - [gnustep_global_lock unlock]; + GSInitializeProcess(argc, argv, env); } - (BOOL) debugLoggingEnabled diff --git a/Tools/HTMLLinker.m b/Tools/HTMLLinker.m index a8705003b..4fe4c3dd8 100644 --- a/Tools/HTMLLinker.m +++ b/Tools/HTMLLinker.m @@ -1124,7 +1124,7 @@ int main (int argc, char** argv, char** env) CREATE_AUTORELEASE_POOL(pool); #ifdef GS_PASS_ARGUMENTS - [NSProcessInfo initializeWithArguments:argv count:argc environment:env]; + GSInitializeProcess(argc, argv, env); #endif /* Set up the cache. */ diff --git a/Tools/autogsdoc.m b/Tools/autogsdoc.m index 1a121aa32..ed9974a97 100644 --- a/Tools/autogsdoc.m +++ b/Tools/autogsdoc.m @@ -704,7 +704,7 @@ main(int argc, char **argv, char **env) */ #ifdef GS_PASS_ARGUMENTS - [NSProcessInfo initializeWithArguments: argv count: argc environment: env]; + GSInitializeProcess(argc, argv, env); #endif #if GS_WITH_GC == 0 diff --git a/Tools/cvtenc.m b/Tools/cvtenc.m index 05478815e..6795f7d41 100644 --- a/Tools/cvtenc.m +++ b/Tools/cvtenc.m @@ -64,7 +64,7 @@ main(int argc, char** argv, char **env) NSStringEncoding enc = 0; #ifdef GS_PASS_ARGUMENTS - [NSProcessInfo initializeWithArguments: argv count: argc environment: env]; + GSInitializeProcess(argc, argv, env); #endif pool = [NSAutoreleasePool new]; proc = [NSProcessInfo processInfo]; diff --git a/Tools/defaults.m b/Tools/defaults.m index fa2f5ac35..4617d0560 100644 --- a/Tools/defaults.m +++ b/Tools/defaults.m @@ -135,7 +135,7 @@ main(int argc, char** argv, char **env) int derror = 0; #ifdef GS_PASS_ARGUMENTS - [NSProcessInfo initializeWithArguments:argv count:argc environment:env]; + GSInitializeProcess(argc, argv, env); #endif [NSObject enableDoubleReleaseCheck: YES]; pool = [NSAutoreleasePool new]; diff --git a/Tools/gdnc.m b/Tools/gdnc.m index da35d0d1d..e25600005 100644 --- a/Tools/gdnc.m +++ b/Tools/gdnc.m @@ -1059,7 +1059,7 @@ main(int argc, char** argv, char** env) CREATE_AUTORELEASE_POOL(pool); #ifdef GS_PASS_ARGUMENTS - [NSProcessInfo initializeWithArguments: argv count: argc environment: env]; + GSInitializeProcess(argc, argv, env); #endif [NSObject enableDoubleReleaseCheck: YES]; pInfo = [NSProcessInfo processInfo]; diff --git a/Tools/gspath.m b/Tools/gspath.m index 571aa2c1e..91a4bdd9d 100644 --- a/Tools/gspath.m +++ b/Tools/gspath.m @@ -52,7 +52,7 @@ main(int argc, char** argv, char **env) NSArray *args; #ifdef GS_PASS_ARGUMENTS - [NSProcessInfo initializeWithArguments:argv count:argc environment:env]; + GSInitializeProcess(argc, argv, env); #endif pool = [NSAutoreleasePool new]; proc = [NSProcessInfo processInfo]; diff --git a/Tools/pl2link.m b/Tools/pl2link.m index 4437de777..89d890a0f 100644 --- a/Tools/pl2link.m +++ b/Tools/pl2link.m @@ -44,7 +44,7 @@ main(int argc, char** argv, char **env) NSString *entry; #ifdef GS_PASS_ARGUMENTS - [NSProcessInfo initializeWithArguments:argv count:argc environment:env]; + GSInitializeProcess(argc, argv, env); #endif pool = [NSAutoreleasePool new]; procinfo = [NSProcessInfo processInfo]; diff --git a/Tools/pldes.m b/Tools/pldes.m index ef2fa012c..6df1c3da0 100644 --- a/Tools/pldes.m +++ b/Tools/pldes.m @@ -43,7 +43,7 @@ main(int argc, char** argv, char **env) unsigned i; #ifdef GS_PASS_ARGUMENTS - [NSProcessInfo initializeWithArguments:argv count:argc environment:env]; + GSInitializeProcess(argc, argv, env); #endif pool = [NSAutoreleasePool new]; proc = [NSProcessInfo processInfo]; diff --git a/Tools/plget.m b/Tools/plget.m index 78b793855..90e08c60a 100644 --- a/Tools/plget.m +++ b/Tools/plget.m @@ -51,7 +51,7 @@ main(int argc, char** argv, char **env) int count; #ifdef GS_PASS_ARGUMENTS - [NSProcessInfo initializeWithArguments:argv count:argc environment:env]; + GSInitializeProcess(argc, argv, env); #endif proc = [NSProcessInfo processInfo]; if (proc == nil) diff --git a/Tools/plmerge.m b/Tools/plmerge.m index 3c7682ccc..234c4814f 100644 --- a/Tools/plmerge.m +++ b/Tools/plmerge.m @@ -48,7 +48,7 @@ main(int argc, char** argv, char **env) unsigned i; #ifdef GS_PASS_ARGUMENTS - [NSProcessInfo initializeWithArguments:argv count:argc environment:env]; + GSInitializeProcess(argc, argv, env); #endif pool = [NSAutoreleasePool new]; procinfo = [NSProcessInfo processInfo]; diff --git a/Tools/plparse.m b/Tools/plparse.m index edc6f8358..78767f394 100644 --- a/Tools/plparse.m +++ b/Tools/plparse.m @@ -80,7 +80,7 @@ main(int argc, char** argv, char **env) int retval = 0; #ifdef GS_PASS_ARGUMENTS - [NSProcessInfo initializeWithArguments:argv count:argc environment:env]; + GSInitializeProcess(argc, argv, env); #endif pool = [NSAutoreleasePool new]; proc = [NSProcessInfo processInfo]; diff --git a/Tools/plser.m b/Tools/plser.m index b73aa53e0..708304646 100644 --- a/Tools/plser.m +++ b/Tools/plser.m @@ -43,7 +43,7 @@ main(int argc, char** argv, char **env) unsigned i; #ifdef GS_PASS_ARGUMENTS - [NSProcessInfo initializeWithArguments:argv count:argc environment:env]; + GSInitializeProcess(argc, argv, env); #endif pool = [NSAutoreleasePool new]; proc = [NSProcessInfo processInfo]; diff --git a/Tools/sfparse.m b/Tools/sfparse.m index 14fc1e45d..a3c95c23d 100644 --- a/Tools/sfparse.m +++ b/Tools/sfparse.m @@ -120,7 +120,7 @@ main(int argc, char** argv, char **env) int retval = 0; #ifdef GS_PASS_ARGUMENTS - [NSProcessInfo initializeWithArguments:argv count:argc environment:env]; + GSInitializeProcess(argc, argv, env); #endif pool = [NSAutoreleasePool new]; proc = [NSProcessInfo processInfo]; diff --git a/Tools/xmlparse.m b/Tools/xmlparse.m index 31a61544d..1f8297ea1 100644 --- a/Tools/xmlparse.m +++ b/Tools/xmlparse.m @@ -73,7 +73,7 @@ main(int argc, char **argv, char **env) CREATE_AUTORELEASE_POOL(pool); #ifdef GS_PASS_ARGUMENTS - [NSProcessInfo initializeWithArguments: argv count: argc environment: env]; + GSInitializeProcess(argc, argv, env); #endif #ifndef HAVE_LIBXML