From ecfbd24d8e73d421f881e24efb0fc9c7809537cc Mon Sep 17 00:00:00 2001
From: Richard Frith-MacDonald
Used in place of GNUSTEP_TARGET_CPU if the other is missing.
+ Please do not use this to locate resources; for architecture
+ dependent resources use GNUSTEP_TARGET_DIR.
Used in place of GNUSTEP_TARGET_OS if the other is missing.
+ Please do not use this to locate resources; for architecture
+ dependent resources use GNUSTEP_TARGET_DIR.
Overrides the default value of the machine (hardware)
name used on this system.
+ Please do not use this to locate resources; for architecture
+ dependent resources use GNUSTEP_TARGET_DIR.
Overrides the default path used to locate subdirectories
- for GNUstep binaries withing bundles and applications.
+ for GNUstep binaries within bundles and applications.
This is normally equivalent to a path made up of the
GNUSTEP_TARGET_CPU and GNUSTEP_TARGET_OS
Overrides the default value of the operating system
name used on this system.
+ Please do not use this to locate resources; for architecture
+ dependent resources use GNUSTEP_TARGET_DIR.
A new stable release.
+ Removes garbage collection support (though for now the
+ NSGarbageCollector class remains as a stub).
+ Changes multi-architecture support to match the scheme used by
+ Debian.
+ Improved support for 64bit little-endian systems.
+ As usual, this release also contains an update to include the
+ most recent international timezone data.
+
A new stable (bugfix) release.
diff --git a/Documentation/news.texi b/Documentation/news.texi
index 585affd96..6c0901636 100644
--- a/Documentation/news.texi
+++ b/Documentation/news.texi
@@ -11,6 +11,16 @@ The currently released version of the library is
See the @url{ReleaseNotes.html} document for more information.
@end ifclear
+@section Noteworthy changes in version @samp{1.25.0}
+@itemize @bullet
+@item Garbage collection support removed (NSGarbageCollector stub remains)
+@item Support for Debian style multi-architecture installations added
+@item As usual, this release also contains an update to include the
+most recent international timezone data.
+@end itemize
+
+@ifclear ANNOUNCE-ONLY
+
@section Noteworthy changes in version @samp{1.24.9}
@itemize @bullet
@item Niels added support for generics
@@ -21,8 +31,6 @@ See the @url{ReleaseNotes.html} document for more information.
most recent international timezone data.
@end itemize
-@ifclear ANNOUNCE-ONLY
-
@section Noteworthy changes in version @samp{1.24.8}
@itemize @bullet
@item Performance optimisations (particularly in the use of tiny string
diff --git a/Source/Makefile.postamble b/Source/Makefile.postamble
index 1166ead20..9d61760bb 100644
--- a/Source/Makefile.postamble
+++ b/Source/Makefile.postamble
@@ -109,10 +109,7 @@ after-clean::
# Things to do after distcleaning
after-distclean::
- rm -f $(GNUSTEP_TARGET_DIR)/dynamic-load.h
- rm -f $(GNUSTEP_TARGET_DIR)/config.h
- rm -rf $(GNUSTEP_TARGET_DIR)/GNUstepBase
- rm -rf $(GNUSTEP_TARGET_CPU)
+ rm -rf $(GNUSTEP_TARGET_DIR)
# Things to do before checking
# before-check::
diff --git a/Source/NSBundle.m b/Source/NSBundle.m
index 921b206e1..ad3ea9f5c 100644
--- a/Source/NSBundle.m
+++ b/Source/NSBundle.m
@@ -776,15 +776,9 @@ _find_main_bundle_for_tool(NSString *toolName)
{
bundlePath = [bundlePath stringByDeletingLastPathComponent];
}
- /* target os */
+ /* target directory */
pathComponent = [bundlePath lastPathComponent];
- if ([pathComponent isEqual: gnustep_target_os])
- {
- bundlePath = [bundlePath stringByDeletingLastPathComponent];
- }
- /* target cpu */
- pathComponent = [bundlePath lastPathComponent];
- if ([pathComponent isEqual: gnustep_target_cpu])
+ if ([pathComponent isEqual: gnustep_target_dir])
{
bundlePath = [bundlePath stringByDeletingLastPathComponent];
}
@@ -1179,6 +1173,9 @@ _bundle_load_callback(Class theClass, struct objc_category *theCategory)
gnustep_target_dir = RETAIN(str);
else if ((str = [env objectForKey: @"GNUSTEP_HOST_DIR"]) != nil)
gnustep_target_dir = RETAIN(str);
+ else if (gnustep_target_cpu != nil && gnustep_target_os != nil)
+ gnustep_target_dir = [[NSString alloc] initWithFormat: @"%@-%@",
+ gnustep_target_cpu, gnustep_target_os];
if ((str = [env objectForKey: @"LIBRARY_COMBO"]) != nil)
library_combo = RETAIN(str);
@@ -1356,7 +1353,7 @@ _bundle_load_callback(Class theClass, struct objc_category *theCategory)
path = [GSPrivateExecutablePath() stringByDeletingLastPathComponent];
/* We now need to chop off the extra subdirectories, the library
- combo and the target cpu/os if they exist. The executable
+ combo and the target directory if they exist. The executable
and this library should match so that is why we can use the
compiled-in settings. */
/* library combo */
@@ -1365,15 +1362,9 @@ _bundle_load_callback(Class theClass, struct objc_category *theCategory)
{
path = [path stringByDeletingLastPathComponent];
}
- /* target os */
+ /* target dir */
s = [path lastPathComponent];
- if ([s isEqual: gnustep_target_os])
- {
- path = [path stringByDeletingLastPathComponent];
- }
- /* target cpu */
- s = [path lastPathComponent];
- if ([s isEqual: gnustep_target_cpu])
+ if ([s isEqual: gnustep_target_dir])
{
path = [path stringByDeletingLastPathComponent];
}
diff --git a/Source/NSPathUtilities.m b/Source/NSPathUtilities.m
index 30a058d43..2b799137b 100644
--- a/Source/NSPathUtilities.m
+++ b/Source/NSPathUtilities.m
@@ -2521,8 +2521,8 @@ L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\GNUstep",
if ([gnustep_is_flattened boolValue] == NO
&& gnustep_target_cpu != nil && gnustep_target_os != nil)
{
- part = [gnustep_target_cpu stringByAppendingPathComponent:
- gnustep_target_os];
+ part = [NSString stringWithFormat: @"%@-%@",
+ gnustep_target_cpu, gnustep_target_os];
if (library_combo != nil)
{
full = [part stringByAppendingPathComponent: library_combo];
@@ -2563,8 +2563,8 @@ L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\GNUstep",
if ([gnustep_is_flattened boolValue] == NO
&& gnustep_target_cpu != nil && gnustep_target_os != nil)
{
- part = [gnustep_target_cpu stringByAppendingPathComponent:
- gnustep_target_os];
+ part = [NSString stringWithFormat: @"%@-%@",
+ gnustep_target_cpu, gnustep_target_os];
if (library_combo != nil)
{
full = [part stringByAppendingPathComponent: library_combo];
@@ -2605,8 +2605,8 @@ L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\App Paths\\GNUstep",
if ([gnustep_is_flattened boolValue] == NO
&& gnustep_target_cpu != nil && gnustep_target_os != nil)
{
- part = [gnustep_target_cpu stringByAppendingPathComponent:
- gnustep_target_os];
+ part = [NSString stringWithFormat: @"%@-%@",
+ gnustep_target_cpu, gnustep_target_os];
if (library_combo != nil)
{
full = [part stringByAppendingPathComponent: library_combo];
diff --git a/Source/NSTask.m b/Source/NSTask.m
index cc72e2972..759c33e9d 100644
--- a/Source/NSTask.m
+++ b/Source/NSTask.m
@@ -726,8 +726,7 @@ pty_slave(const char* name)
- (NSString*) validatedLaunchPath
{
NSString *libs;
- NSString *cpu;
- NSString *os;
+ NSString *target_dir;
NSString *prog;
NSString *lpath;
NSString *base_path;
@@ -740,8 +739,7 @@ pty_slave(const char* name)
}
libs = [NSBundle _library_combo];
- os = [NSBundle _gnustep_target_os];
- cpu = [NSBundle _gnustep_target_cpu];
+ target_dir = [NSBundle _gnustep_target_dir];
/*
* Set lpath to the actual path to use for the executable.
@@ -754,12 +752,14 @@ pty_slave(const char* name)
base_path = [_launchPath stringByDeletingLastPathComponent];
if ([[base_path lastPathComponent] isEqualToString: libs] == YES)
base_path = [base_path stringByDeletingLastPathComponent];
- if ([[base_path lastPathComponent] isEqualToString: os] == YES)
- base_path = [base_path stringByDeletingLastPathComponent];
- if ([[base_path lastPathComponent] isEqualToString: cpu] == YES)
- base_path = [base_path stringByDeletingLastPathComponent];
- arch_path = [base_path stringByAppendingPathComponent: cpu];
- arch_path = [arch_path stringByAppendingPathComponent: os];
+ if (nil == target_dir)
+ arch_path = base_path;
+ else
+ {
+ if ([[base_path lastPathComponent] isEqualToString: target_dir] == YES)
+ base_path = [base_path stringByDeletingLastPathComponent];
+ arch_path = [base_path stringByAppendingPathComponent: target_dir];
+ }
full_path = [arch_path stringByAppendingPathComponent: libs];
lpath = [full_path stringByAppendingPathComponent: prog];
diff --git a/Source/NSThread.m b/Source/NSThread.m
index 6502b47ac..2ffac0889 100644
--- a/Source/NSThread.m
+++ b/Source/NSThread.m
@@ -657,7 +657,7 @@ GSCurrentThreadDictionary(void)
}
/*
- * Callback function so send notifications on becoming multi-threaded.
+ * Callback function to send notifications on becoming multi-threaded.
*/
static void
gnustep_base_thread_callback(void)
diff --git a/configure b/configure
index 1208a5f44..29f841a3b 100755
--- a/configure
+++ b/configure
@@ -4012,31 +4012,48 @@ if test x"$GNUSTEP_LOCAL_LIBRARIES" = x""; then
GNUSTEP_LOCAL_LIBRARIES="$GNUSTEP_LOCAL_ROOT/Library/Libraries"
fi
-if test x"$GNUSTEP_IS_FLATTENED" = x"no"; then
- GNUSTEP_SYSTEM_HEADERS="$GNUSTEP_SYSTEM_HEADERS/$LIBRARY_COMBO"
- GNUSTEP_NETWORK_HEADERS="$GNUSTEP_NETWORK_HEADERS/$LIBRARY_COMBO"
- GNUSTEP_LOCAL_HEADERS="$GNUSTEP_LOCAL_HEADERS/$LIBRARY_COMBO"
- # FIXME: Cross-compiling should read the target from the configure
- # options and use it. GNUSTEP_TARGET_* variables do not exist in
- # this context (so "$GNUSTEP_TARGET_CPU" will always be "")
- if test x"$GNUSTEP_TARGET_CPU" = x""; then
- GNUSTEP_SYSTEM_LIBRARIES="$GNUSTEP_SYSTEM_LIBRARIES/$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS/$LIBRARY_COMBO"
- GNUSTEP_NETWORK_LIBRARIES="$GNUSTEP_NETWORK_LIBRARIES/$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS/$LIBRARY_COMBO"
- GNUSTEP_LOCAL_LIBRARIES="$GNUSTEP_LOCAL_LIBRARIES/$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS/$LIBRARY_COMBO"
- else
- GNUSTEP_SYSTEM_LIBRARIES="$GNUSTEP_SYSTEM_LIBRARIES/$GNUSTEP_TARGET_CPU/$GNUSTEP_TARGET_OS/$LIBRARY_COMBO"
- GNUSTEP_NETWORK_LIBRARIES="$GNUSTEP_NETWORK_LIBRARIES/$GNUSTEP_TARGET_CPU/$GNUSTEP_TARGET_OS/$LIBRARY_COMBO"
- GNUSTEP_LOCAL_LIBRARIES="$GNUSTEP_LOCAL_LIBRARIES/$GNUSTEP_TARGET_CPU/$GNUSTEP_TARGET_OS/$LIBRARY_COMBO"
- fi
-fi
-
#
# Add standard library and header directories for configure to use to locate
# plain C developer headers/libraries which have been installed in the
# GNUstep hierarchy. These take precedence
#
-CPPFLAGS="$CPPFLAGS -I$GNUSTEP_LOCAL_HEADERS -I$GNUSTEP_NETWORK_HEADERS -I$GNUSTEP_SYSTEM_HEADERS"
-LDFLAGS="$LDFLAGS -L$GNUSTEP_LOCAL_LIBRARIES -L$GNUSTEP_NETWORK_LIBRARIES -L$GNUSTEP_SYSTEM_LIBRARIES"
+if test x"$GNUSTEP_IS_FLATTENED" = x"yes"; then
+ CPPFLAGS="$CPPFLAGS -I$GNUSTEP_LOCAL_HEADERS"
+ CPPFLAGS="$CPPFLAGS -I$GNUSTEP_NETWORK_HEADERS"
+ CPPFLAGS="$CPPFLAGS -I$GNUSTEP_SYSTEM_HEADERS"
+ LDFLAGS="$LDFLAGS -L$GNUSTEP_LOCAL_LIBRARIES"
+ LDFLAGS="$LDFLAGS -L$GNUSTEP_NETWORK_LIBRARIES"
+ LDFLAGS="$LDFLAGS -L$GNUSTEP_SYSTEM_LIBRARIES"
+else
+ # FIXME: Cross-compiling should read the target from the configure
+ # options and use it. GNUSTEP_TARGET_* variables do not exist in
+ # this context (so "$GNUSTEP_TARGET_CPU" will always be "")
+ if test x"$GNUSTEP_TARGET_CPU" = x""; then
+ ARCH="$GNUSTEP_HOST_CPU-$GNUSTEP_HOST_OS"
+ else
+ ARCH=$GNUSTEP_TARGET_CPU-$GNUSTEP_TARGET_OS
+ fi
+ ALIB="$ARCH/$LIBRARY_COMBO"
+ CPPFLAGS="$CPPFLAGS -I$GNUSTEP_LOCAL_HEADERS/$ALIB"
+ CPPFLAGS="$CPPFLAGS -I$GNUSTEP_LOCAL_HEADERS/$ARCH"
+ CPPFLAGS="$CPPFLAGS -I$GNUSTEP_LOCAL_HEADERS"
+ CPPFLAGS="$CPPFLAGS -I$GNUSTEP_NETWORK_HEADERS/$ALIB"
+ CPPFLAGS="$CPPFLAGS -I$GNUSTEP_NETWORK_HEADERS/$ARCH"
+ CPPFLAGS="$CPPFLAGS -I$GNUSTEP_NETWORK_HEADERS"
+ CPPFLAGS="$CPPFLAGS -I$GNUSTEP_SYSTEM_HEADERS/$ALIB"
+ CPPFLAGS="$CPPFLAGS -I$GNUSTEP_SYSTEM_HEADERS/$ARCH"
+ CPPFLAGS="$CPPFLAGS -I$GNUSTEP_SYSTEM_HEADERS"
+ LDFLAGS="$LDFLAGS -L$GNUSTEP_LOCAL_LIBRARIES/$ALIB"
+ LDFLAGS="$LDFLAGS -L$GNUSTEP_LOCAL_LIBRARIES/$ARCH"
+ LDFLAGS="$LDFLAGS -L$GNUSTEP_LOCAL_LIBRARIES"
+ LDFLAGS="$LDFLAGS -L$GNUSTEP_NETWORK_LIBRARIES/$ALIB"
+ LDFLAGS="$LDFLAGS -L$GNUSTEP_NETWORK_LIBRARIES/$ARCH"
+ LDFLAGS="$LDFLAGS -L$GNUSTEP_NETWORK_LIBRARIES"
+ LDFLAGS="$LDFLAGS -L$GNUSTEP_SYSTEM_LIBRARIES/$ALIB"
+ LDFLAGS="$LDFLAGS -L$GNUSTEP_SYSTEM_LIBRARIES/$ARCH"
+ LDFLAGS="$LDFLAGS -L$GNUSTEP_SYSTEM_LIBRARIES"
+fi
+
#--------------------------------------------------------------------
# Find the compiler
diff --git a/configure.ac b/configure.ac
index eae6d7669..6d7fe5cfc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1044,31 +1044,48 @@ if test x"$GNUSTEP_LOCAL_LIBRARIES" = x""; then
GNUSTEP_LOCAL_LIBRARIES="$GNUSTEP_LOCAL_ROOT/Library/Libraries"
fi
-if test x"$GNUSTEP_IS_FLATTENED" = x"no"; then
- GNUSTEP_SYSTEM_HEADERS="$GNUSTEP_SYSTEM_HEADERS/$LIBRARY_COMBO"
- GNUSTEP_NETWORK_HEADERS="$GNUSTEP_NETWORK_HEADERS/$LIBRARY_COMBO"
- GNUSTEP_LOCAL_HEADERS="$GNUSTEP_LOCAL_HEADERS/$LIBRARY_COMBO"
- # FIXME: Cross-compiling should read the target from the configure
- # options and use it. GNUSTEP_TARGET_* variables do not exist in
- # this context (so "$GNUSTEP_TARGET_CPU" will always be "")
- if test x"$GNUSTEP_TARGET_CPU" = x""; then
- GNUSTEP_SYSTEM_LIBRARIES="$GNUSTEP_SYSTEM_LIBRARIES/$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS/$LIBRARY_COMBO"
- GNUSTEP_NETWORK_LIBRARIES="$GNUSTEP_NETWORK_LIBRARIES/$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS/$LIBRARY_COMBO"
- GNUSTEP_LOCAL_LIBRARIES="$GNUSTEP_LOCAL_LIBRARIES/$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS/$LIBRARY_COMBO"
- else
- GNUSTEP_SYSTEM_LIBRARIES="$GNUSTEP_SYSTEM_LIBRARIES/$GNUSTEP_TARGET_CPU/$GNUSTEP_TARGET_OS/$LIBRARY_COMBO"
- GNUSTEP_NETWORK_LIBRARIES="$GNUSTEP_NETWORK_LIBRARIES/$GNUSTEP_TARGET_CPU/$GNUSTEP_TARGET_OS/$LIBRARY_COMBO"
- GNUSTEP_LOCAL_LIBRARIES="$GNUSTEP_LOCAL_LIBRARIES/$GNUSTEP_TARGET_CPU/$GNUSTEP_TARGET_OS/$LIBRARY_COMBO"
- fi
-fi
-
#
# Add standard library and header directories for configure to use to locate
# plain C developer headers/libraries which have been installed in the
# GNUstep hierarchy. These take precedence
#
-CPPFLAGS="$CPPFLAGS -I$GNUSTEP_LOCAL_HEADERS -I$GNUSTEP_NETWORK_HEADERS -I$GNUSTEP_SYSTEM_HEADERS"
-LDFLAGS="$LDFLAGS -L$GNUSTEP_LOCAL_LIBRARIES -L$GNUSTEP_NETWORK_LIBRARIES -L$GNUSTEP_SYSTEM_LIBRARIES"
+if test x"$GNUSTEP_IS_FLATTENED" = x"yes"; then
+ CPPFLAGS="$CPPFLAGS -I$GNUSTEP_LOCAL_HEADERS"
+ CPPFLAGS="$CPPFLAGS -I$GNUSTEP_NETWORK_HEADERS"
+ CPPFLAGS="$CPPFLAGS -I$GNUSTEP_SYSTEM_HEADERS"
+ LDFLAGS="$LDFLAGS -L$GNUSTEP_LOCAL_LIBRARIES"
+ LDFLAGS="$LDFLAGS -L$GNUSTEP_NETWORK_LIBRARIES"
+ LDFLAGS="$LDFLAGS -L$GNUSTEP_SYSTEM_LIBRARIES"
+else
+ # FIXME: Cross-compiling should read the target from the configure
+ # options and use it. GNUSTEP_TARGET_* variables do not exist in
+ # this context (so "$GNUSTEP_TARGET_CPU" will always be "")
+ if test x"$GNUSTEP_TARGET_CPU" = x""; then
+ ARCH="$GNUSTEP_HOST_CPU-$GNUSTEP_HOST_OS"
+ else
+ ARCH=$GNUSTEP_TARGET_CPU-$GNUSTEP_TARGET_OS
+ fi
+ ALIB="$ARCH/$LIBRARY_COMBO"
+ CPPFLAGS="$CPPFLAGS -I$GNUSTEP_LOCAL_HEADERS/$ALIB"
+ CPPFLAGS="$CPPFLAGS -I$GNUSTEP_LOCAL_HEADERS/$ARCH"
+ CPPFLAGS="$CPPFLAGS -I$GNUSTEP_LOCAL_HEADERS"
+ CPPFLAGS="$CPPFLAGS -I$GNUSTEP_NETWORK_HEADERS/$ALIB"
+ CPPFLAGS="$CPPFLAGS -I$GNUSTEP_NETWORK_HEADERS/$ARCH"
+ CPPFLAGS="$CPPFLAGS -I$GNUSTEP_NETWORK_HEADERS"
+ CPPFLAGS="$CPPFLAGS -I$GNUSTEP_SYSTEM_HEADERS/$ALIB"
+ CPPFLAGS="$CPPFLAGS -I$GNUSTEP_SYSTEM_HEADERS/$ARCH"
+ CPPFLAGS="$CPPFLAGS -I$GNUSTEP_SYSTEM_HEADERS"
+ LDFLAGS="$LDFLAGS -L$GNUSTEP_LOCAL_LIBRARIES/$ALIB"
+ LDFLAGS="$LDFLAGS -L$GNUSTEP_LOCAL_LIBRARIES/$ARCH"
+ LDFLAGS="$LDFLAGS -L$GNUSTEP_LOCAL_LIBRARIES"
+ LDFLAGS="$LDFLAGS -L$GNUSTEP_NETWORK_LIBRARIES/$ALIB"
+ LDFLAGS="$LDFLAGS -L$GNUSTEP_NETWORK_LIBRARIES/$ARCH"
+ LDFLAGS="$LDFLAGS -L$GNUSTEP_NETWORK_LIBRARIES"
+ LDFLAGS="$LDFLAGS -L$GNUSTEP_SYSTEM_LIBRARIES/$ALIB"
+ LDFLAGS="$LDFLAGS -L$GNUSTEP_SYSTEM_LIBRARIES/$ARCH"
+ LDFLAGS="$LDFLAGS -L$GNUSTEP_SYSTEM_LIBRARIES"
+fi
+
#--------------------------------------------------------------------
# Find the compiler
@@ -2715,10 +2732,8 @@ fi
#--------------------------------------------------------------------
# Check for FFI interface libraries for invocations
-# We enable ffi by default now, as it's fixed for some previouly bad
-# platforms, and it has the advantage over ffcall that it does not
-# mess up the stack, so stacktraces and native exception handling
-# work better with it.
+# We enable ffi by default now, as it's the only well supported
+# library nowadays.
#--------------------------------------------------------------------
do_broken_libffi=no
do_broken_libffcall=no