Compare commits

..

55 commits

Author SHA1 Message Date
rfm
c7b5fa3a19 Portability tweak 2025-03-10 20:52:32 +00:00
rfm
0bda6500e8 Remove non-portable 's' suffix to sleep timeout. 2025-03-10 20:40:29 +00:00
Richard Frith-Macdonald
de77a9693f Fix result status when waiting for testcase 2025-03-09 17:32:21 +00:00
rfm
199b1eb071 Portability fix ... use internal bash features to implement timeout rather
that the external 'timeout' program which if not generally available.
2025-03-09 17:21:23 +00:00
rfm
96febdc8eb Fixup timestmap info 2025-03-09 16:20:50 +00:00
Richard Frith-Macdonald
8a2bc0b214 Changes for OSX 2025-03-09 16:11:28 +00:00
rfm
9eb9eba0d6 portability tweak 2025-03-09 15:21:17 +00:00
rfm
0cf679c1b6 More portable sed command 2025-03-09 15:18:13 +00:00
rfm
e3bbdd276b Improve test for working bash and allow path to be specified on command line 2025-03-09 15:09:05 +00:00
Richard Frith-Macdonald
4602023a70 Add ENTER_POOL and LEAVE_POOL 2025-03-09 10:47:03 +00:00
rfm
214a57eb7a New release 2025-02-10 15:22:04 +00:00
rfm
a613c2668c Report execution time for each test file 2025-01-17 11:48:49 +00:00
rfm
16148bc3d8 Documentation for new make option (and remove some obsolete documentation) 2025-01-13 15:45:39 +00:00
rfm
1493a378c7 Do not use zombies when using ASAN and leak checking 2025-01-09 11:37:21 +00:00
rfm
d739198f1d Add --asan and set leaked fiels to give a 23 exit code 2024-11-30 14:24:50 +00:00
rfm
2b67e39517 Update ASAN support 2024-11-30 14:09:20 +00:00
rfm
80c7154cd0 Add -DGS_WITH_ASAN=1 when building with asan 2024-11-20 14:26:20 +00:00
rfm
4074b9f8d3 Fix leaked exception 2024-11-18 19:19:47 +00:00
rfm
da6b90528e allow timeout to be set from environment 2024-11-18 12:45:11 +00:00
rfm
06496f69ac Fix typo in last change and add GS_WITH_ASAN environment variable 2024-11-15 11:10:40 +00:00
rfm
2ee48ebe21 Don't try to release object which may have been released already 2024-11-14 17:01:13 +00:00
rfm
27cbcbf6ca Release objects when we are done with them. 2024-11-14 16:17:32 +00:00
Hugo Melder
23485f8592 Initial address sanitization support 2024-11-14 12:28:43 +01:00
hmelder
c6a561d713 Add test timeouts 2024-09-09 19:46:07 +02:00
Wolfgang Lux
1d48b14ff3 Only return plain files when looking for test cases 2024-08-20 19:15:51 +02:00
rfm
95d706bdb8 Fixup for failure to detect failed builds 2024-07-31 10:55:54 +01:00
rfm
1fa879082c fix for savannah bug 65820 2024-05-31 17:41:43 +01:00
rfm
d0fae65d78 revert accidental update 2024-05-26 15:39:18 +01:00
rfm
ffe5f324e1 Changes for new release. 2024-05-26 11:32:19 +01:00
hmelder
554d207704 Update configure script 2024-04-18 11:11:04 +02:00
hmelder
7cfd293ad8 Fix installation command in INSTALL 2024-04-18 11:11:04 +02:00
hmelder
c2a7753ffc Bump Objective-C runtime version and add installation instructions 2024-04-18 11:11:04 +02:00
rfm
e480e8b3bc
Merge pull request #45 from qmfrederik/fixes/libdir
Allow users to override the /lib dir
2024-03-31 11:34:47 +01:00
rfm
0cf140efc0
Merge pull request #44 from qmfrederik/fix-library-typo
gs_library_combo.m4: Fix typo in 'library'
2024-03-31 11:34:06 +01:00
Frederik Carlier
adbab30895
Allow users to override the /lib dir
The [File Hierarchy Standard][1] allows for an alternative format for essential shared libraries, using `lib<qual>` instead of `lib`.

Some Linux distributions, like Enterprise Linux, adopt this, and on 64-bit systems the shared libraries would go into `lib64` instead of `lib`.

Currently the Fedora/EPEL packages [manually patch the fhs and fhs-system files][2].

This commit updates the `./configure` script so that the user can manually specify a `lib` folder, e.g. `--with-libdir=lib64`.

[1]: https://www.pathname.com/fhs/pub/fhs-2.3.html#LIBLTQUALGTALTERNATEFORMATESSENTIAL
[2] https://src.fedoraproject.org/rpms/gnustep-make/blob/rawhide/f/gnustep-make.spec#_64
2024-03-29 10:12:14 +00:00
Frederik Carlier
dc8387f6f9
gs_library_combo.m4: Fix typo in 'library' 2024-03-29 08:54:52 +00:00
rfm
77c46a1f0e regenerate configure for last update 2024-02-14 13:58:11 +00:00
rfm
6d6548bef9
Merge pull request #19 from gaelicWizard/GNUstep-reset
Generate GNUstep-reset.sh from GNUstep-reset.sh.in
2024-02-14 13:55:41 +00:00
rfm
fa9df0b6fd
Merge pull request #20 from gaelicWizard/TAR
Exclude .git and .hg from installed packages
2024-02-14 11:58:52 +00:00
rfm
9de817126c javac -h turns out to be much more complicated than javah :-( 2024-02-14 11:50:21 +00:00
rfm
76a1df3b61 Use javac -h if javah is not present 2024-02-11 13:34:31 +00:00
rfm
d5002f8405 Improve error message when bash is not available 2023-12-12 20:06:02 +00:00
rfm
2e99da71ef allow configure without bash ... abort tests at runtime 2023-12-12 19:58:02 +00:00
rfm
a95eb8e724 Require bash for test framework 2023-12-11 17:29:38 +00:00
rfm
6d6d77ce93 documentation update for new texi 2023-12-05 15:44:38 +00:00
Frederik Seiffert
ca20ad3cfd Ensure -gcodeview on Windows MSVC 2023-12-04 17:34:47 +01:00
hmelder
cd8d5259ee Remove redundant comment 2023-11-01 09:48:29 +01:00
hmelder
d1f1f672c7 Rebuild configure from configure.ac 2023-11-01 09:48:29 +01:00
hmelder
209af1c9e9 Rewrite linker check based on linker verbose output 2023-11-01 09:48:29 +01:00
hmelder
e5c3acf855 Detect ARC when using apple runtime 2023-11-01 09:47:46 +01:00
Hugo Melder
c1703a066a
Remove ancient GNUstep-HOWTO and references to it in README
* Remove GNUstep-HOWTO and reference to it in README

* Update README
2023-11-01 09:47:05 +01:00
John D Pell
30e6966ae5
Exclude .git and .hg from installed packages 2021-07-06 14:45:45 -07:00
John D Pell
ee5dc99e07 Ignore generated file 2021-07-04 18:11:50 -07:00
John D Pell
25ad1abc3e Use defined constants in GNUstep-reset.sh 2021-07-04 18:11:50 -07:00
John D Pell
8c45f895ee Generate GNUstep-reset.sh just like GNUstep.sh
so that different file system layouts can be accounted for. This does not solve the problem of removing /usr/bin from PATH…
2021-07-04 18:11:50 -07:00
33 changed files with 1264 additions and 1853 deletions

1
.gitignore vendored
View file

@ -4,6 +4,7 @@ config.cache
GNUmakefile
GNUstep.sh
GNUstep.csh
GNUstep-reset.sh
config.h
config.status
openapp

View file

@ -1,7 +1,7 @@
1 Announcement
**************
The GNUstep Makefile Package version 2.9.0 is now available.
The GNUstep Makefile Package version 2.9.3 is now available.
1.1 What is the GNUstep Makefile Package?
=========================================
@ -12,43 +12,24 @@ project without having to deal with the complex issues associated with
configuration, building, installation, and packaging. It also allows
the user to easily create cross-compiled binaries.
1.2 Changes in version '2.9.0'
1.2 Changes in version 2.9.3
==============================
* Better check for objc runtime on Windows.
• Added support for ASAN/LSAN builds
* Split linker flags to better support partial linking: 'ALL_LDFLAGS'
is now a combination of 'FINAL_LDFLAGS' and 'ALL_LDFLAGS'.
* Better support for newer gcc versions.
* Add support for storyboard files.
* Increase autoconf version to 2.65 and make autoconf handle
Objective-C++ and OBJCXX variables directly.
* Fix bug that prevented ARC from getting used.
* Link subproject object files directly instead of first merging them
into 'subproject.o'.
* Support building on Windows with Clang MSVC target.
* Improve mingw64 support: for instance, adopt the triplet used by
the mingw-w64 project rather than using the one returned by
autoconf. Fixes building Gorm.
• Various minor bugfixes.
1.3 Obtaining gnustep-make
==========================
You can get the gnustep-make-2.9.0.tar.gz distribution file at
You can get the gnustep-make-2.9.3.tar.gz distribution file at
<ftp://ftp.gnustep.org/pub/gnustep/core>
It is accompanied by gnustep-make-2.9.0.tar.gz.sig, a PGP signature
It is accompanied by gnustep-make-2.9.3.tar.gz.sig, a PGP signature
which you can validate by putting both files in the same directory and
using:
gpg --verify gnustep-make-2.9.0.tar.gz.sig
gpg --verify gnustep-make-2.9.3.tar.gz.sig
Signature has been created using the key with the following
fingerprint:

View file

@ -1,3 +1,78 @@
2025-01-10 Richard Frith-Macdonald <rfm@gnu.org>
* ANNOUNCE:
* NEWS:
* RELEASENOTES:
* Documentation/news.texi:
* Documentation/releasenotes.texi:
Update announcement and release notes for 2.9.3.
* Version: Bump version to 2.9.3.
2024-11-20 Richard Frith-Macdonald <rfm@gnu.org>
* common.make: when building with the address/leak sanitizer
(-asan=yes on command line or GNUSTEP_WITH_ASAN=1 in the environment)
we add -DGNUSTEP_WITH_ASAN=1 for the preprocessor so that compiled
code can take this into account.
2024-08-20 Wolfgang Lux <wolfgang.lux@gmail.com>
* TestFramework/gnustep-tests.in: Only return plain files when
looking for test cases.
2024-07-31 Richard Frith-Macdonald <rfm@gnu.org>
* TestFramework/gnustep-tests.in: Fix 'Failed build' detection in
Summary.sh by recording build failures in tests.sum and test.log
2024-05-31 Yavor Doganov <yavor@gnu.org>
* GNUmakefile.in (install): Remove $(srcdir) from GNUstep-reset.sh
since it is now a generated file. Fixes out-of-tree builds where
builddir != srcdir.
2024-05-26 Richard Frith-Macdonald <rfm@gnu.org>
* ANNOUNCE:
* NEWS:
* RELEASENOTES:
* Documentation/news.texi:
* Documentation/releasenotes.texi:
Update announcement and release notes for 2.9.2.
* Version: Bump version to 2.9.2.
2024-02-14 Richard Frith-Macdonald <rfm@gnu.org>
* common.make:
* rules.make:
Rewrite 'javac -h' code because its usage turns out to be quite
different from that of the javah command it is supposed to replace.
Possibly the header generation and class file generation could/should
be combined in a single pass, but we can't readily do that without
breakign compatibility with older versions of java.
2024-02-11 Richard Frith-Macdonald <rfm@gnu.org>
* Documentation/gnustep-make.texi:
* common.make:
* messages.make:
* rules.make:
* target.make:
Use 'javac -h' if 'javah' does not exist, since the separate tool was
removed after version 8. Update comments to match the change.
2023-12-12 Richard Frith-Macdonald <rfm@gnu.org>
* TestFramework/gnustep-tests.in: Exit if no bash available
* configure.ac: Require bash for test framework
* configure: Regenerate
2023-12-05 Yavor Doganov <yavor@gnu.org>
* Documentation/gnustep-make.texi: Fix PDF generation with
texinfo/7.1; reorder sectioning commands.
* Documentation/gnustep-filesystem.texi: Likewise.
2022-02-06 Richard Frith-Macdonald <rfm@gnu.org>
* Instance/Documentation/texi.make: for index.html specify explicit

View file

@ -52,11 +52,11 @@ it's not possible to have an application compiled for NeXT PDO that
runs with gnustep-base or vice-versa. To summarize, an application can
be compiled for these combinations:
Objective-C runtime: NeXT, GNU
Objective-C runtime: NeXT, GNU, GNUstep/Apple
Foundation library: NeXT, PDO, gnustep-base, libFoundation
GUI library: NeXT, gnustep-gui
Objective-C runtime: nx (for NeXT), gnu (for GNU)
Objective-C runtime: nx (for NeXT), gnu (for GNU), ng (for Next Generation (GNUstep or Apple for ObjC-2)
Foundation library: nx (for NeXT), pdo (for PDO), gnu (for gnustep-base),
fd (for libFoundation)
GUI library: nx (for NeXT), gnu (for gnustep-gui)
@ -80,6 +80,7 @@ ObjC runtime Foundation GUI
gnu gnu gnu
nx fd gnu
gnu fd gnu
ng gnu gnu
Note that one can choose his/her own packages to build; it is not
required to have all the packages installed on the system. Not having
@ -339,15 +340,20 @@ if the target needs to be built as a shared library. On systems that support
shared libraries this is the default; the user has to explicitly specify
shared=no in the command line.
* asan
When this variable is yes, an address and leak sanitized version of the target
is built. The default is no.
* profile
When this variable is yes, a profile version of the target is built. The
default is no.
For example if you want to build a shared library with debug information
enabled but no profile information, the command line would be:
and sanitization enabled but no profile information, the command line would be:
$ make shared=yes debug=yes profile=no
$ make shared=yes debug=yes asan=yes profile=no
The last argument is not necessary because the default is to build a version
without profile information.
@ -358,62 +364,6 @@ profile is turned on the output directory would be shared_profile_debug_obj.
Of course you also have to specify the library combo if it's different than the
default.
Naming conventions of the libraries
===================================
Sometimes you need to have different versions of a library compiled with
different options. Suppose you want to compile a library with profiling
information enabled so that you can profile your code. But you don't want to
overwrite your existing installed library so that only some of the applications
will work with the profile library, the rest will still use the normal library.
The makefile package supports such a schema by having different names for
different types of the same library. This works by appending an underscore
after the name of the library followed by a letter which indicates the type of
the library:
's' for a static library
'p' for a profile library
'd' for a debug library
So for example if you have the library 'example' compiled with debug
information as a shared library it would be named libexample_d.so. If the same
library is compiled as a static library its name would be named
libexample_sd.a. The reason why the 's' letter for the static library appears
in name of the library is for systems where the extensions of libraries don't
matter.
It is possible to compile a library with whatever combination of flags you
want. The letters are appended in the order specified above, so if you compile
the library as a static library, with profile and debug information enabled,
the library name will have the _spd suffix appended.
How a library is chosen
=======================
What happens if you compile an application with profile enabled and you don't
have a library compiled with profile info into it, but you do have a normal
library installed? It would be great if the normal library is chosen instead.
This is a problem because the library that should be chosen has a different
name than the profile library.
We do support this schema by requiring the libraries to be specified using the
short name, without any suffix appended to it. The `example' library in our
case should be passed to the linker using -lexample, and not using -lexample_p.
Based upon the shared, profile and debug variables, the makefile package will
identify which are the libraries that exist on the system and it will come with
the correct names when linking.
The search order of libraries depending on what type of library is required is
as follows. First of all an exact match is searched; if one is found it is
returned. If either debug or profile are required, a library that matches at
least one of these attributes is returned. For example if there is a
profile+debug version of a library but only debug is required this library will
match. If a static version is required but no static versions of the library
exist, then no library is chosen; in this case the system simply prints out the
name of the library, assuming a static library is somewhere else in the
libraries search path of the linker.
Building applications
=====================
@ -428,15 +378,7 @@ the application wrapper and it contains the binaries for various architectures
and resources needed by the application.
The name of the application wrapper is taken to be the name of the application
with the following extensions:
.profile - if the application has been built with profile enabled
.debug - if the application has been built with debug enabled
.app - if the application has been built without debug or profile enabled
If both debug and profile are enabled, the application extension will simply
have the .profile extension. This is different from libraries were both options
are reflected into the library's name.
with the .app extension.
The structure of makefiles
==========================
@ -483,4 +425,4 @@ The makefile package is installed under $(GNUSTEP_SYSTEM_ROOT)/Library/Makefiles
Ovidiu Predescu
Last updated: April, 2001
Last updated: Jan, 2025

View file

@ -26,10 +26,11 @@ any later version published by the Free Software Foundation.
@contents
@node Top, The System Domain, (dir), (dir)
@chapter GNUstep Filesystem Hierarchy
@node Top
@top GNUstep Filesystem Hierarchy
@menu
* Introduction::
* The System Domain::
* The Local Domain::
* The Network Domain::
@ -38,6 +39,9 @@ any later version published by the Free Software Foundation.
* Configuration::
@end menu
@node Introduction
@chapter Introduction
On GNUstep, there are four separate places where files related to
GNUstep are installed: these places are called "domains". These four
domains are the System domain, the Network domain, the Local domain,
@ -83,7 +87,7 @@ filesystem layout is now the FHS (Unix) layout rooted in
@file{/usr/local}.
@node The System Domain, The Local Domain, Top, Top
@section The System Domain
@chapter The System Domain
The System domain contains all files which were included in the
default GNUstep installation or distribution. These files are
@ -105,7 +109,7 @@ the @file{System} folder of the GNUstep installation.
@node The Local Domain, The Network Domain, The System Domain, Top
@section The Local Domain
@chapter The Local Domain
The Local domain is meant as the location for installing software
which was not included with your GNUstep distribution and which you or
@ -125,7 +129,7 @@ In the GNUstep filesystem layout the entire Local domain is installed
as the @file{Local} folder of your GNUstep installation.
@node The Network Domain, The Users Domain, The Local Domain, Top
@section The Network Domain
@chapter The Network Domain
The @file{Network} domain is optional and is usually coalesced with
the @file{Local} domain by default; this is particularly appropriate
@ -151,7 +155,7 @@ domain, in which case the entire Network domain is installed as the
@node The Users Domain, Structure of a Domain, The Network Domain, Top
@section The Users Domain
@chapter The Users Domain
The main purpose of the Users domain is to hold GNUstep related files
which shall not be available to other users on the system but only to
@ -167,7 +171,7 @@ User domain is completely contained in a subdirectory of the user's
home directory called @file{GNUstep}.
@node Structure of a Domain, Configuration, The Users Domain, Top
@section Structure of a Domain
@chapter Structure of a Domain
In this section we examine the interesting locations in a domain. We
will enumerate the locations, and discuss what should be installed in
@ -192,7 +196,7 @@ GNUstep filesystem layout and in a general filesystem layout.
@end menu
@node The GNUstep Filesystem Layout, Accessing Domain Locations, Structure of a Domain, Structure of a Domain
@subsection The GNUstep Filesystem Layout
@section The GNUstep Filesystem Layout
We quickly present the GNUstep filesystem layout for a domain first
because it is an essential reference for all discussions on the
@ -234,7 +238,7 @@ point for all discussions. For example, every domain must have a
'Library' location.
@node Accessing Domain Locations, Applications, The GNUstep Filesystem Layout, Structure of a Domain
@subsection Accessing Domain Locations
@section Accessing Domain Locations
In order to install and run software that uses some resources, you
need to be able to install the resources in the appropriate location,
@ -277,7 +281,7 @@ that can be used to access them.
@node Applications, Admin Applications , Accessing Domain Locations, Structure of a Domain
@subsection Applications
@section Applications
The @file{Applications} location contains applications. Applications
are programs that typically have a GUI interface and contain
@ -306,7 +310,7 @@ using the @code{NSApplicationDirectory} directory key for
@node Admin Applications, Web Applications, Applications, Structure of a Domain
@subsection Admin Applications
@section Admin Applications
The @file{Admin Applications} location contains applications that are
only useful to the system administrator. A normal user wouldn't have
@ -326,7 +330,7 @@ by using the @code{NSAdminApplicationDirectory} directory key for
@node Web Applications, Tools, Admin Applications, Structure of a Domain
@subsection Web Applications
@section Web Applications
The @file{Web Applications} location contains web applications that
were created using GSWeb or SOPE. These are programs contained with
@ -347,7 +351,7 @@ by using the @code{GSWebApplicationDirectory} directory key for
@node Tools, Admin Tools, Web Applications, Structure of a Domain
@subsection Tools
@section Tools
The @file{Tools} location contains tools and executable scripts. Tools
are programs which generally have a command-line interface. Most are
@ -376,7 +380,7 @@ In gnustep-base, the @file{Tools} locations are available by using the
@node Admin Tools, Library, Tools, Structure of a Domain
@subsection Admin Tools
@section Admin Tools
The @file{Admin Tools} location contains tools and executable scripts
that are only useful to the system administrator. A normal user
@ -397,7 +401,7 @@ using the @code{GSAdminToolsDirectory} directory key for
@node Library, Headers, Admin Tools, Structure of a Domain
@subsection Library
@section Library
The @file{Library} location contains most of the resources that are
located and loaded at runtime. These resources are organized in
@ -435,7 +439,7 @@ using the @code{NSLibraryDirectory} directory key for
@node Headers, Libraries, Library, Structure of a Domain
@subsection Headers
@section Headers
The @code{Headers} location contains header files associated with a
library located in @code{Libraries}.
@ -453,7 +457,7 @@ available.
@node Libraries, Documentation, Headers, Structure of a Domain
@subsection Libraries
@section Libraries
The @code{Libraries} location contains libraries (shared/static object
files that are linked into programs). (NOTE: In the GNUstep
@ -481,7 +485,7 @@ the @code{GSLibrariesDirectory} directory key for
@node Documentation, Documentation (Info), Libraries, Structure of a Domain
@subsection Documentation
@section Documentation
The @code{Documentation} location contains documentation for
libraries, applications, etc.
@ -499,7 +503,7 @@ using the @code{NSDocumentationDirectory} directory key for
@node Documentation (Info), Documentation (Man Pages), Documentation, Structure of a Domain
@subsection Documentation (Info)
@section Documentation (Info)
The @code{Documentation (Info)} location contains documentation in
info format.
@ -517,7 +521,7 @@ currently available.
@node Documentation (Man Pages), Folders inside Library, Documentation (Info), Structure of a Domain
@subsection Documentation (Man Pages)
@section Documentation (Man Pages)
The @code{Documentation (Man Pages)} location contains Unix man pages.
@ -535,7 +539,7 @@ currently available.
@node Folders inside Library, , Documentation (Man Pages), Structure of a Domain
@subsection Folders inside Library
@section Folders inside Library
In this section we discuss the standard folders that are available
inside the @code{Library} location. To find any of these folders,
@ -570,7 +574,7 @@ All such cases should be documented here.
@end menu
@node ApplicationSupport, Bundles, Folders inside Library, Folders inside Library
@subsubsection ApplicationSupport
@subsection ApplicationSupport
This directory contains bundles and other resources that are provided
for an application, but that are not specifically distributed with
@ -595,7 +599,7 @@ by using the @code{NSApplicationSupportDirectory} directory key for
@code{NSSearchPathForDirectoriesInDomains()}.
@node Bundles, ColorPickers, ApplicationSupport, Folders inside Library
@subsubsection Bundles
@subsection Bundles
This directory contains bundles. Bundles are collections of executable
code and associated resources that may be loaded at runtime by an
@ -615,7 +619,7 @@ folder inside the @code{Library} location.
@node ColorPickers, Colors, Bundles, Folders inside Library
@subsubsection ColorPickers
@subsection ColorPickers
This directory contains bundles that are used by the color picking
system. They may include code that implements picking colors from a
@ -625,7 +629,7 @@ This folder is accessed as the @code{ColorPickers} folder inside
@code{Library}.
@node Colors, DTDs, ColorPickers, Folders inside Library
@subsubsection Colors
@subsection Colors
This directory contains files that define specific color mappings for
use within libraries or applications that require color definitions.
@ -634,7 +638,7 @@ This folder is accessed as the @code{Colors} folder inside
@code{Library}.
@node DTDs, DocTemplates, Colors, Folders inside Library
@subsubsection DTDs
@subsection DTDs
This directory contains any Document Type Definitions
required for document parsing.
@ -643,7 +647,7 @@ This folder is accessed as the @code{DTDs} folder inside
@code{Library}.
@node DocTemplates, Fonts, DTDs, Folders inside Library
@subsubsection DocTemplates
@subsection DocTemplates
This directory contains text templates for automatic documentation, as
generated by autodoc. Any additional documentation template types
@ -657,7 +661,7 @@ This folder is accessed as the @code{DocTemplates} folder inside
@code{Library}.
@node Fonts, Frameworks, DocTemplates, Folders inside Library
@subsubsection Fonts
@subsection Fonts
This directory contains fonts and files for organizing font information.
@ -665,7 +669,7 @@ This folder is accessed as the @code{Fonts} folder inside
@code{Library}.
@node Frameworks, Images, Fonts, Folders inside Library
@subsubsection Frameworks
@subsection Frameworks
This directory contains frameworks. Frameworks are a type of bundle,
which include, within their directory structure, a shared library
@ -692,10 +696,10 @@ using the @code{GSFrameworksDirectory} directory key for
@code{NSSearchPathForDirectoriesInDomains()}.
@node Images, Libraries/Java, Frameworks, Folders inside Library
@subsubsection Images
@subsection Images
@node Libraries/Java, Libraries/Resources, Images, Folders inside Library
@subsubsection Libraries/Java
@subsection Libraries/Java
This directory contains Java classes. If you are using Java with
GNUstep, you probably want to make sure these directories are in your
@ -712,7 +716,7 @@ In gnustep-base, you can access the @code{Libraries/Java} location as
the @code{Libraries/Java} folder inside the @code{Library} location.
@node Libraries/Resources, KeyBindings, Libraries/Java, Folders inside Library
@subsubsection Libraries/Resources
@subsection Libraries/Resources
This directory contains resources used by shared libraries. In
GNUstep a shared library can have an associated resource bundle (a
@ -736,10 +740,10 @@ library by using the @code{[NSBundle +bundleForLibrary:]} method (it
is a GNUstep extension).
@node KeyBindings, PostScript, Libraries/Resources, Folders inside Library
@subsubsection KeyBindings
@subsection KeyBindings
@node PostScript, Services, KeyBindings, Folders inside Library
@subsubsection PostScript
@subsection PostScript
This directory contains directories for specific PostScript document
types and definitions, allowing applications written using the GNUstep
@ -750,7 +754,7 @@ This folder is accessed as the @code{PostScript} folder inside
@code{Library}.
@node Services, Sounds, PostScript, Folders inside Library
@subsubsection Services
@subsection Services
This directory contains bundles that are specifically built to provide
functionality between different programs (for example, spell checking,
@ -768,12 +772,12 @@ In gnustep-base, you can access the @code{Services} location as a
folder inside the @code{Library} location.
@node Sounds, Tools/Resources, Services, Folders inside Library
@subsubsection Sounds
@subsection Sounds
This directory contains sound files.
@node Tools/Resources, , Sounds, Folders inside Library
@subsubsection Tools/Resources
@subsection Tools/Resources
This directory contains resources used by tools. In GNUstep a tool
can have an associated resource bundle (a bundle only composed of
@ -796,7 +800,7 @@ semantic is a GNUstep extension).
@node Configuration, , Structure of a Domain, Top
@section Configuration
@chapter Configuration
GNUstep supports arbitrary filesystem layouts to map the locations in
the various domains to directories on the filesystem.
@ -841,7 +845,7 @@ them.
@end menu
@node File Format, Windows (MINGW), Configuration, Configuration
@subsection File Format
@section File Format
By default, the configuration file is called GNUstep.conf; it
typically exists in /etc/GNUstep or /usr/local/etc/GNUstep (depending
@ -865,7 +869,7 @@ up-to-date list of all the variables that you can change with
explanations of what they do.
@node Windows (MINGW), , File Format, Configuration
@subsection Windows (MINGW)
@section Windows (MINGW)
On ms-windows, for software development, you are likely to want to have an
extra configuration file. This is because of the limitations of the

View file

@ -44,7 +44,7 @@ any later version published by the Free Software Foundation.
@c Makefile Package Chapter
@node Top, Makefile Introduction, (dir), (dir)
@chapter Makefile Package
@top Makefile Package
@menu
* Makefile Introduction::
@ -58,7 +58,7 @@ any later version published by the Free Software Foundation.
@end menu
@node Makefile Introduction, Makefile Structure, Top, Top
@section Introduction
@chapter Introduction
The Makefile package is a system of make commands that is designed to
encapsulate all the complex details of building and installing various types
@ -68,7 +68,7 @@ a fairly simple main makefile need to be written which specifies the
type of project and files involved in the project.
@node Makefile Structure, Running Make, Makefile Introduction, Top
@section Structure of a Makefile
@chapter Structure of a Makefile
Here is an example makefile (named GNUmakefile to emphasis the fact that it relies on special features of the GNU make program).
@ -98,10 +98,11 @@ This is all that is necessary to define the project.
@node Running Make, Project Types, Makefile Structure, Top
@section Running Make
@chapter Running Make
@menu
* Debug Information::
* Profile Information::
* Memory Sanitisation::
* Library Types::
@end menu
@ -111,7 +112,7 @@ the package, and the package is compiled without any additional
interaction.
@node Debug Information, Profile Information, Running Make, Running Make
@subsection Debug Information
@section Debug Information
By default the Makefile Package tells the compiler to generate
debugging information when compiling Objective-C and C files. The
@ -123,8 +124,8 @@ not put into the binary files.
make debug=no
@end smallexample
@node Profile Information, Library Types, Debug Information, Running Make
@subsection Profile Information
@node Profile Information, Memory Sanitisation, Debug Information, Running Make
@section Profile Information
By default the Makefile Package does not tell the compiler to generate
profiling information when compiling Objective-C and C files. The
@ -136,8 +137,59 @@ put into the binary files.
make profile=yes
@end smallexample
@node Memory Sanitisation, Library Types, Profile Information, Running Make
@section Memory Sanitisation
Production code must not use memory sanitization tools, but during development
and debugging these can be extremely useful, so the Makefile Package provides
an option to tell the compiler to generate output for address and leak
sanitization using https://github.com/google/sanitizers/wiki/addresssanitizer
Unfortunately, AddressSanitizer/LeakSanitizer is not particularly portable and
is available on a limited selection of hardware and operating systems, so
turning it on in GNUstep-make may not actually work on your system. It is
however very good with modern GCC or Clang on the most popular platforms.
The following command illustrates how to tell the Makefile Package to pass
the appropriate flags to the compiler so that sanitization is put into the
binary and so that the preprocessor can be used to change code behaviour when
it is built for sanitization (-fsanitize=address and -DGNUSTEP_WITH_ASAN=1).
@smallexample
make asan=yes
@end smallexample
You can get the same effect by setting an environment variable as follows:
@smallexample
export GNUSTEP_WITH_ASAN=1
@end smallexample
When you build libraries, frameworks, or bundles with sanitization turned on,
you must also use ASAN to build any apps or tools which use them. This
is because the library/framework/bundle will have dependencies on the leak
sanitization shared library, and those dependencies must be fulfilled when
the app/tool is linked.
The basic effect of sanitization is that, in the event of an address error
(when the code attempts to access memory it shouldn't), the app/tool is
immediately terminated with details of the problem printed to stderr, and
in the event of memory leaks (detected at app/tool exit) a report of the
locations of the leaks is printed to stderr.
Beware that an app/tool built with ASAN maps a huge amount of virtual memory
to help it detect memory violations in the code, and while this virtual memory
usage does not require real memory, it does mean that processes monitoring the
memory usage of your app/tool will give completely meaningless results.
Beware also, that an app/tool built with ASAN does use considerably more real
memory than normal, and its usage of memory continually grows, because it is
keeping records of what the app/tool does with memory in order to be able to
perform leak analysis and reporting when the app/tool finishes.
If you have many apps/tools under test concurrently and for a long time, your
system may run out of memory.
@node Library Types, , Profile Information, Running Make
@subsection Static, Shared, and Dynamic Link Libraries
@section Static, Shared, and Dynamic Link Libraries
By default the Makefile Package will generate a shared library if it is
building a library project type, and it will link with shared libraries
@ -157,7 +209,7 @@ DLLs will be built by default unless the Makefile Package is told to
build using static libraries instead, as in the above command.
@node Project Types, GNUmakefile.preamble, Running Make, Top
@section Project Types
@chapter Project Types
@menu
* aggregate.make::
* application.make::
@ -200,7 +252,7 @@ types) is in resource-set.make.
@node aggregate.make, application.make, Project Types, Project Types
@subsection Aggregate (@file{aggregate.make})
@section Aggregate (@file{aggregate.make})
An Aggregate project is a project that consists of several
subprojects. Each subproject can be of any other valid project type
@ -213,46 +265,46 @@ that the Aggregate project should build.
@end defvr
@node application.make, bundle.make, aggregate.make, Project Types
@subsection Graphical Applications (@file{application.make})
@section Graphical Applications (@file{application.make})
An application is an Objective-C program that includes a GUI component,
and by default links in all the GNUstep libraries required for GUI
development, such as the Base and Gui libraries.
@node bundle.make, ctool.make, application.make, Project Types
@subsection Bundles (@file{bundle.make})
@section Bundles (@file{bundle.make})
A bundle is a collection of resources and code that can be used to
enhance an existing application or tool dynamically using the NSBundle
class from the GNUstep base library.
@node ctool.make, documentation.make, bundle.make, Project Types
@subsection Command Line C Tools (@file{ctool.make})
@section Command Line C Tools (@file{ctool.make})
A ctool is a project that only uses C language files.
Otherwise it is similar to the ObjC project type.
@node documentation.make, framework.make, ctool.make, Project Types
@subsection Documentation (@file{documentation.make})
@section Documentation (@file{documentation.make})
The Documentation project provides rules to use various types of
documentation such as texi and LaTeX documentation, and convert them
into finished documentation (info, PostScript, HTML, etc).
@node framework.make, java.make, documentation.make, Project Types
@subsection Frameworks (@file{framework.make})
@section Frameworks (@file{framework.make})
A Framework is a collection of resources and a library that provides
common code that can be linked into a Tool or Application. In many
respects it is similar to a Bundle.
@node java.make, library.make, framework.make, Project Types
@subsection Java (@file{java.make})
@section Java (@file{java.make})
This project provides rules for building java programs. It also makes it
easy to make java projects that interact with the GNUstep libraries.
@subsubsection Project Variables
@subsection Project Variables
@defvr {Java project} JAVA_PACKAGE_NAME
@code{JAVA_PACKAGE_NAME} is the reverse DNS style Java package name that
@ -268,7 +320,7 @@ specified in @code{JAVA_PACKAGE_NAME}.
@defvr {Java project} JAVA_JNI_FILES
@code{xxx_JAVA_JNI_FILES} is the list of Java source code files for
which @code{javah} should produce header files for integration with
which @code{JAVAH} should produce header files for integration with
Objective-C code.
@strong{xxx} should be replaced with the name of the Java package
specified in @code{JAVA_PACKAGE_NAME}.
@ -295,7 +347,7 @@ with all dots replaced by hyphens.
@end defvr
@node library.make, native-library.make, java.make, Project Types
@subsection Libraries (@file{library.make})
@section Libraries (@file{library.make})
@menu
* library.make variables::
* Example Library Makefile::
@ -308,7 +360,7 @@ Static libraries are supported on all platforms; while, shared libraries
and DLLs are only supported on some platforms.
@node library.make variables, Example Library Makefile, library.make, library.make
@subsubsection Project Variables
@subsection Project Variables
@defvr {Library project} LIBRARY_NAME
@code{LIBRARY_NAME} should be assigned the list of name of libraries to
@ -446,7 +498,7 @@ Replace the @strong{xxx} with the name of the library as listed by the
@end defvr
@node Example Library Makefile, , library.make variables, library.make
@subsubsection Example Makefile
@subsection Example Makefile
This example makefile illustrates two libraries, @file{libone} and
@file{libtwo}, that are to be generated.
@ -514,7 +566,7 @@ located, and the header files will be installed into the @file{two}
subdirectory within @code{GNUSTEP_HEADERS}.
@node native-library.make, nsis.make, library.make, Project Types
@subsection Native Library (@file{native-library.make})
@section Native Library (@file{native-library.make})
A "native library" is a project which is to be built as a shared
library on most targets and as a framework on Darwin. (Currently
@ -541,7 +593,7 @@ This will be converted into -L../MyPath/$(GNUSTEP_OBJ_DIR) flag
on for most targets and into -F../MyPath flag for apple-apple-apple.
@node nsis.make, objc.make, native-library.make, Project Types
@subsection NSIS Installer (@file{nsis.make})
@section NSIS Installer (@file{nsis.make})
The NSIS make project provides rules for automatically generating NSIS
installers for Windows operating systems. In order to get this functionality,
@ -592,7 +644,7 @@ If not set it defaults to @code{LOCAL}.
@end defvr
@node objc.make, palette.make, nsis.make, Project Types
@subsection Objective-C Programs (@file{objc.make})
@section Objective-C Programs (@file{objc.make})
@menu
* objc.make variables::
* Example ObjC Makefile::
@ -604,7 +656,7 @@ Objective-C programs which only use the Objective-C Runtime Library and
the classes it defines are candidates for this project type.
@node objc.make variables, Example ObjC Makefile, objc.make, objc.make
@subsubsection Project Variables
@subsection Project Variables
Most of the project variables work the same as in Library
projects (see @ref{library.make}).
@ -630,7 +682,7 @@ of the program as listed by the @code{OBJC_PROGRAM_NAME} variable.
@end defvr
@node Example ObjC Makefile, , objc.make variables, objc.make
@subsubsection Example Makefile
@subsection Example Makefile
This makefile illustrates two Objective-C programs, @file{simple} and
@file{list} that are to be generated.
@ -677,13 +729,13 @@ Runtime library; presumably @file{simple.m} has code which is dependent
upon the Objective-C Runtime.
@node palette.make, rpm.make, objc.make, Project Types
@subsection Palettes (@file{palette.make})
@section Palettes (@file{palette.make})
A palette is a Bundle that provides some kind of GUI functionality.
Otherwise it is similar to the Bundle project.
@node rpm.make, service.make, palette.make, Project Types
@subsection RPMs (@file{rpm.make})
@section RPMs (@file{rpm.make})
The RPM project provides rules for automatically generating RPM spec
files in order to make RPM distributions. Note that this project
@ -740,25 +792,25 @@ Library containing the Objective-C runtime.
@end example
@node service.make, subproject.make, rpm.make, Project Types
@subsection Services (@file{service.make})
@section Services (@file{service.make})
A Service is like a Tool that provides a service to a running GNUstep program.
@node subproject.make, tool.make, service.make, Project Types
@subsection Subprojects (@file{subproject.make})
@section Subprojects (@file{subproject.make})
A Subproject provides a way to organize code in a large application into
subunits. The code in the subproject is merged in with the main tool
or application.
@node tool.make, , subproject.make, Project Types
@subsection Command Line Tools (@file{tool.make})
@section Command Line Tools (@file{tool.make})
A tool is an ObjC project that by default links in the GNUstep base
library. Otherwise it is similar to the ObjC project type.
@node GNUmakefile.preamble, GNUmakefile.postamble, Project Types, Top
@section Global Variables (@file{GNUmakefile.preamble})
@chapter Global Variables (@file{GNUmakefile.preamble})
@file{GNUmakefile.preamble} is an optional file that may be put within the
package for declaring global makefile variables for the package. The
@ -977,7 +1029,7 @@ LIBRARIES_DEPEND_UPON = -lsimple $(FND_LIBS) $(OBJC_LIBS) $(SYSTEM_LIBS)
@node GNUmakefile.postamble, Common Variables, GNUmakefile.preamble, Top
@section Global Rules (@file{GNUmakefile.postamble})
@chapter Global Rules (@file{GNUmakefile.postamble})
The @file{GNUmakefile.postamble} file is an optional file you may
include in your package to define additional rules that should be
@ -993,7 +1045,7 @@ You can even define additional rules such as ones that a particular to
your specific package or that are to be used by developers only.
@node Common Variables, Other Variables, GNUmakefile.postamble, Top
@section Common Variables (@file{common.make})
@chapter Common Variables (@file{common.make})
@menu
* Directory Paths::
* Scripts::
@ -1013,7 +1065,7 @@ defined variables as the resultant behaviour of the Makefile Package is
undefined.
@node Directory Paths, Scripts, Common Variables, Common Variables
@subsection Directory Paths
@section Directory Paths
@defvar GNUSTEP_MAKEFILES
@code{GNUSTEP_MAKEFILES} is the absolute path to the directory where the
@ -1180,7 +1232,7 @@ where the binary file is located.
@end defvar
@node Scripts, Platform Information, Directory Paths, Common Variables
@subsection Scripts
@section Scripts
@defvar CONFIG_GUESS_SCRIPT
@code{CONFIG_GUESS_SCRIPT} is the absolute path to the
@ -1263,7 +1315,7 @@ script; it is used internally by the Makefile Package.
@end defvar
@node Platform Information, Library Combination, Scripts, Common Variables
@subsection Host and Target Platform Information
@section Host and Target Platform Information
@defvar GNUSTEP_HOST
@code{GNUSTEP_HOST} is the canonical host platform name; i.e. the name
@ -1340,7 +1392,7 @@ platform, see Cross Compiling.
@end defvar
@node Library Combination, Overridable Flags, Platform Information, Common Variables
@subsection Library Combination
@section Library Combination
@defvar OBJC_RUNTIME_LIB
@code{OBJC_RUNTIME_LIB} is assigned the code that indicates the
@ -1489,7 +1541,7 @@ there is not backend library; i.e. @code{GUI_BACKEND_LIB} is
@end defvar
@node Overridable Flags, , Library Combination, Common Variables
@subsection Overridable Flags
@section Overridable Flags
@defvar OBJCFLAGS
@code{OBJCFLAGS} are flags that are passed to the compiler when
@ -1576,7 +1628,7 @@ make documentation=no
@end smallexample
@node Other Variables, , Common Variables, Top
@section Other Variables
@chapter Other Variables
Since gnustep-make is a system of scripts rather than compiled code,
all the source is always present and available to read, so the main

View file

@ -9,6 +9,28 @@
The currently released version is @samp{@value{GNUSTEP-MAKE-VERSION}}.
@end ifclear
@section Changes in version @samp{2.9.3}
@itemize
@item Added support for ASAN/LSAN builds
@item Various minor bugfixes.
@end itemize
@ifclear ANNOUNCE-ONLY
@section Changes in version @samp{2.9.2}
@itemize
@item Update for newer versions of Java
@item Various minor bugfixes.
@end itemize
@section Changes in version @samp{2.9.1}
@itemize
@ -19,8 +41,6 @@ The currently released version is @samp{@value{GNUSTEP-MAKE-VERSION}}.
@end itemize
@ifclear ANNOUNCE-ONLY
@section Changes in version @samp{2.9.0}
@itemize

View file

@ -4,6 +4,24 @@ The release notes include descriptions of API changes, behavior
changes and other information that might help developers and users
migrate to using a newer version of the make system.
@section Version 2.9.3
Addition of the 'asan=yes' option when GNUstep-make is invoked and support
for the GNUSTEP_WITH_ASAN=1 environment setting to turn on address and leak
sanitisation.
Various minor fixes
@section Version 2.9.2
Changes to work around the removal of the javah tool after java version 8.
Changes to have the test framework require/use bash for consistent behavior.
Changes to fix PDF generation with texinfo/7.1 and later.
Changes to implement .dist-ignore support for the git-dist: make target.
@section Version 2.9.1
Test framework has workaround for clang issues when building with MSCV.

View file

@ -31,38 +31,38 @@ GNUSTEP_LOCAL_USERS_DIR=/home
# paths.
GNUSTEP_MAKEFILES=/share/GNUstep/Makefiles
GNUSTEP_SYSTEM_APPS=/lib/GNUstep/Applications
GNUSTEP_SYSTEM_ADMIN_APPS=/lib/GNUstep/Applications
GNUSTEP_SYSTEM_WEB_APPS=/lib/GNUstep/WebApplications
GNUSTEP_SYSTEM_APPS=/@libdir@/GNUstep/Applications
GNUSTEP_SYSTEM_ADMIN_APPS=/@libdir@/GNUstep/Applications
GNUSTEP_SYSTEM_WEB_APPS=/@libdir@/GNUstep/WebApplications
GNUSTEP_SYSTEM_TOOLS=/bin
GNUSTEP_SYSTEM_ADMIN_TOOLS=/sbin
GNUSTEP_SYSTEM_LIBRARY=/lib/GNUstep
GNUSTEP_SYSTEM_LIBRARY=/@libdir@/GNUstep
GNUSTEP_SYSTEM_HEADERS=/include
GNUSTEP_SYSTEM_LIBRARIES=/lib
GNUSTEP_SYSTEM_LIBRARIES=/@libdir@
GNUSTEP_SYSTEM_DOC=/share/GNUstep/Documentation
GNUSTEP_SYSTEM_DOC_MAN=/share/man
GNUSTEP_SYSTEM_DOC_INFO=/share/info
GNUSTEP_NETWORK_APPS=/lib/GNUstep/Applications
GNUSTEP_NETWORK_ADMIN_APPS=/lib/GNUstep/Applications
GNUSTEP_NETWORK_WEB_APPS=/lib/GNUstep/WebApplications
GNUSTEP_NETWORK_APPS=/@libdir@/GNUstep/Applications
GNUSTEP_NETWORK_ADMIN_APPS=/@libdir@/GNUstep/Applications
GNUSTEP_NETWORK_WEB_APPS=/@libdir@/GNUstep/WebApplications
GNUSTEP_NETWORK_TOOLS=/bin
GNUSTEP_NETWORK_ADMIN_TOOLS=/sbin
GNUSTEP_NETWORK_LIBRARY=/lib/GNUstep
GNUSTEP_NETWORK_LIBRARY=/@libdir@/GNUstep
GNUSTEP_NETWORK_HEADERS=/include
GNUSTEP_NETWORK_LIBRARIES=/lib
GNUSTEP_NETWORK_LIBRARIES=/@libdir@
GNUSTEP_NETWORK_DOC=/share/GNUstep/Documentation
GNUSTEP_NETWORK_DOC_MAN=/share/man
GNUSTEP_NETWORK_DOC_INFO=/share/info
GNUSTEP_LOCAL_APPS=/lib/GNUstep/Applications
GNUSTEP_LOCAL_ADMIN_APPS=/lib/GNUstep/Applications
GNUSTEP_LOCAL_WEB_APPS=/lib/GNUstep/WebApplications
GNUSTEP_LOCAL_APPS=/@libdir@/GNUstep/Applications
GNUSTEP_LOCAL_ADMIN_APPS=/@libdir@/GNUstep/Applications
GNUSTEP_LOCAL_WEB_APPS=/@libdir@/GNUstep/WebApplications
GNUSTEP_LOCAL_TOOLS=/bin
GNUSTEP_LOCAL_ADMIN_TOOLS=/sbin
GNUSTEP_LOCAL_LIBRARY=/lib/GNUstep
GNUSTEP_LOCAL_LIBRARY=/@libdir@/GNUstep
GNUSTEP_LOCAL_HEADERS=/include
GNUSTEP_LOCAL_LIBRARIES=/lib
GNUSTEP_LOCAL_LIBRARIES=/@libdir@
GNUSTEP_LOCAL_DOC=/share/GNUstep/Documentation
GNUSTEP_LOCAL_DOC_MAN=/share/man
GNUSTEP_LOCAL_DOC_INFO=/share/info

View file

@ -40,38 +40,38 @@ GNUSTEP_LOCAL_USERS_DIR=/home
# paths.
GNUSTEP_MAKEFILES=/share/GNUstep/Makefiles
GNUSTEP_SYSTEM_APPS=/lib/GNUstep/Applications
GNUSTEP_SYSTEM_ADMIN_APPS=/lib/GNUstep/Applications
GNUSTEP_SYSTEM_WEB_APPS=/lib/GNUstep/WebApplications
GNUSTEP_SYSTEM_APPS=/@libdir@/GNUstep/Applications
GNUSTEP_SYSTEM_ADMIN_APPS=/@libdir@/GNUstep/Applications
GNUSTEP_SYSTEM_WEB_APPS=/@libdir@/GNUstep/WebApplications
GNUSTEP_SYSTEM_TOOLS=/bin
GNUSTEP_SYSTEM_ADMIN_TOOLS=/sbin
GNUSTEP_SYSTEM_LIBRARY=/lib/GNUstep
GNUSTEP_SYSTEM_LIBRARY=/@libdir@/GNUstep
GNUSTEP_SYSTEM_HEADERS=/include
GNUSTEP_SYSTEM_LIBRARIES=/lib
GNUSTEP_SYSTEM_LIBRARIES=/@libdir@
GNUSTEP_SYSTEM_DOC=/share/GNUstep/Documentation
GNUSTEP_SYSTEM_DOC_MAN=/share/man
GNUSTEP_SYSTEM_DOC_INFO=/share/info
GNUSTEP_NETWORK_APPS=/local/lib/GNUstep/Applications
GNUSTEP_NETWORK_ADMIN_APPS=/local/lib/GNUstep/Applications
GNUSTEP_NETWORK_WEB_APPS=/lib/GNUstep/WebApplications
GNUSTEP_NETWORK_APPS=/local/@libdir@/GNUstep/Applications
GNUSTEP_NETWORK_ADMIN_APPS=/local/@libdir@/GNUstep/Applications
GNUSTEP_NETWORK_WEB_APPS=/@libdir@/GNUstep/WebApplications
GNUSTEP_NETWORK_TOOLS=/local/bin
GNUSTEP_NETWORK_ADMIN_TOOLS=/local/sbin
GNUSTEP_NETWORK_LIBRARY=/local/lib/GNUstep
GNUSTEP_NETWORK_LIBRARY=/local/@libdir@/GNUstep
GNUSTEP_NETWORK_HEADERS=/local/include
GNUSTEP_NETWORK_LIBRARIES=/local/lib
GNUSTEP_NETWORK_LIBRARIES=/local/@libdir@
GNUSTEP_NETWORK_DOC=/local/share/GNUstep/Documentation
GNUSTEP_NETWORK_DOC_MAN=/local/share/man
GNUSTEP_NETWORK_DOC_INFO=/local/share/info
GNUSTEP_LOCAL_APPS=/local/lib/GNUstep/Applications
GNUSTEP_LOCAL_ADMIN_APPS=/local/lib/GNUstep/Applications
GNUSTEP_LOCAL_WEB_APPS=/local/lib/GNUstep/WebApplications
GNUSTEP_LOCAL_APPS=/local/@libdir@/GNUstep/Applications
GNUSTEP_LOCAL_ADMIN_APPS=/local/@libdir@/GNUstep/Applications
GNUSTEP_LOCAL_WEB_APPS=/local/@libdir@/GNUstep/WebApplications
GNUSTEP_LOCAL_TOOLS=/local/bin
GNUSTEP_LOCAL_ADMIN_TOOLS=/local/sbin
GNUSTEP_LOCAL_LIBRARY=/local/lib/GNUstep
GNUSTEP_LOCAL_LIBRARY=/local/@libdir@/GNUstep
GNUSTEP_LOCAL_HEADERS=/local/include
GNUSTEP_LOCAL_LIBRARIES=/local/lib
GNUSTEP_LOCAL_LIBRARIES=/local/@libdir@
GNUSTEP_LOCAL_DOC=/local/share/GNUstep/Documentation
GNUSTEP_LOCAL_DOC_MAN=/local/share/man
GNUSTEP_LOCAL_DOC_INFO=/local/share/info

View file

@ -216,7 +216,7 @@ install: generated-files
$(INSTALL_DATA) GNUstep.csh "$(makedir)"; \
$(INSTALL_DATA) filesystem.sh "$(makedir)"; \
$(INSTALL_DATA) filesystem.csh "$(makedir)"; \
$(INSTALL_DATA) "$(srcdir)/GNUstep-reset.sh" "$(makedir)"; \
$(INSTALL_DATA) GNUstep-reset.sh "$(makedir)"; \
$(INSTALL_PROGRAM) -m 755 fixpath.sh "$(makedir)"; \
$(INSTALL_PROGRAM) -m 755 openapp "$(tooldir)"; \
$(INSTALL_PROGRAM) -m 755 "$(srcdir)/debugapp" "$(tooldir)"; \

File diff suppressed because it is too large Load diff

View file

@ -86,13 +86,13 @@ function reset_path
fi
}
reset_path INFOPATH /Library/Documentation/info
reset_path GUILE_LOAD_PATH /Library/Libraries/Guile
reset_path CLASSPATH /Library/Libraries/Java
reset_path LD_LIBRARY_PATH /Library/Libraries
reset_path DYLD_LIBRARY_PATH /Library/Libraries
reset_path DYLD_FRAMEWORK_PATH /Library/Frameworks
reset_path PATH /Tools
reset_path INFOPATH @GNUSTEP_LOCAL_DOC_INFO@
reset_path GUILE_LOAD_PATH @GNUSTEP_LOCAL_LIBRARIES@/Guile
reset_path CLASSPATH @GNUSTEP_LOCAL_LIBRARIES@/Java
reset_path LD_LIBRARY_PATH @GNUSTEP_LOCAL_LIBRARIES@
reset_path DYLD_LIBRARY_PATH @GNUSTEP_LOCAL_LIBRARIES@
reset_path DYLD_FRAMEWORK_PATH @GNUSTEP_LOCAL_LIBRARY@/Frameworks
reset_path PATH @GNUSTEP_LOCAL_TOOLS@
# Make sure we destroy the reset_path function after using it - we don't
# want to pollute the environment with it.

26
INSTALL
View file

@ -20,7 +20,10 @@ particular operating system and CPU. These instructions come with the
GNUstep-HOWTO and are also located at the GNUstep web site at
<http://www.gnustep.org>.
Quick installation instructions:
1.1.1 Quick Installation Instructions
---------------------
To build and install the GNUstep Makefiles, run the following commands:
./configure
make
@ -44,6 +47,27 @@ filesystem layout).
make
make install
1.1.2 Enabling Modern Objective-C Features
---------------------
GNUstep supports the legacy GCC runtime, and the modern libobjc2 runtime with
Objective-C 2.0 Features such as ARC, Blocks (closures), Synthesised property
accessors, Efficient support for @synchronized() and more.
libobjc2 requires building with clang. If you've installed both clang and libobjc2
you can configure GNUstep Make to use the newer runtime and features.
Here is an example with the runtime version set to 2.2.
(Set it to the last libobjc2 version to benefit from possible changes in Clang CodeGen).
Please note that we explicitly enable some features such as objc-arc that might
be infered from the runtime version.
./configure \
--enable-native-objc-exceptions \
--enable-objc-arc \
--with-runtime-abi=gnustep-2.2 \
--with-library-combo=ng-gnu-gnu \
CC="clang" CXX="clang++" CPP="clang -E" LDFLAGS="-fuse-ld=lld"
1.2 Configuration
=================

471
NEWS
View file

@ -1,54 +1,77 @@
1 NEWS
******
The currently released version is '2.9.0'.
The currently released version is 2.9.3.
1.1 Changes in version '2.9.0'
1.1 Changes in version 2.9.3
==============================
* Better check for objc runtime on Windows.
• Added support for ASAN/LSAN builds
* Split linker flags to better support partial linking: 'ALL_LDFLAGS'
is now a combination of 'FINAL_LDFLAGS' and 'ALL_LDFLAGS'.
• Various minor bugfixes.
* Better support for newer gcc versions.
1.2 Changes in version 2.9.2
==============================
* Add support for storyboard files.
• Update for newer versions of Java
* Increase autoconf version to 2.65 and make autoconf handle
• Various minor bugfixes.
1.3 Changes in version 2.9.1
==============================
• Add workaround for Clang bug on Windows MSVC when tests contain no
Objective-C constructs.
• Various fixes for minor issues introduced in the test framework by
parallelisation mof testcase execution.
1.4 Changes in version 2.9.0
==============================
• Better check for objc runtime on Windows.
• Split linker flags to better support partial linking: ALL_LDFLAGS
is now a combination of FINAL_LDFLAGS and ALL_LDFLAGS.
• Better support for newer gcc versions.
• Add support for storyboard files.
• Increase autoconf version to 2.65 and make autoconf handle
Objective-C++ and OBJCXX variables directly.
* Fix bug that prevented ARC from getting used.
Fix bug that prevented ARC from getting used.
* Link subproject object files directly instead of first merging them
into 'subproject.o'.
Link subproject object files directly instead of first merging them
into subproject.o.
* Support building on Windows with Clang MSVC target.
Support building on Windows with Clang MSVC target.
* Improve mingw64 support: for instance, adopt the triplet used by
Improve mingw64 support: for instance, adopt the triplet used by
the mingw-w64 project rather than using the one returned by
autoconf. Fixes building Gorm.
1.2 Changes in version '2.8.0'
1.5 Changes in version 2.8.0
==============================
* Better library combo and ABI detection: gnustep-make will now
Better library combo and ABI detection: gnustep-make will now
attempt to detect the optimal library combo and ABI supported by
the installed compiler and Objective-C runtime library. Explicit
selection of the runtime ABI is now possible using the
'--with-runtime-abi' configure option.
--with-runtime-abi configure option.
* Full support for the gnustep-2.0 Objective-C ABI.
Full support for the gnustep-2.0 Objective-C ABI.
* Support for creating a Git tag and creating a tarball from a git
tag using the 'git-tag' and 'git-dist' targets.
Support for creating a Git tag and creating a tarball from a git
tag using the git-tag and git-dist targets.
* Support for creating a Mercurial tag and creating a tarball from a
hg tag using the 'hg-tag' and 'hg-dist' targets.
Support for creating a Mercurial tag and creating a tarball from a
hg tag using the hg-tag and hg-dist targets.
* Dropped legacy Rhapsody and FreeBSD-out support.
Dropped legacy Rhapsody and FreeBSD-out support.
1.3 Changes in version '2.7.0'
1.6 Changes in version 2.7.0
==============================
Garbage collection support removed
@ -62,7 +85,7 @@ compatible
Various other minor bugfixes
1.4 Changes in version '2.6.8'
1.7 Changes in version 2.6.8
==============================
Configure option '-with-library-combo=ng-gnu-gnu' to use the 'Next
@ -90,7 +113,7 @@ you update any old gnustep-make version one makefiles.
Garbage collection support to be removed at the next release.
1.5 Changes in version '2.6.7'
1.8 Changes in version 2.6.7
==============================
Improved package building support
@ -101,15 +124,15 @@ Improved package building support
Various minor bugfixes, documentation spelling corrections etc.
1.6 Changes in version '2.6.6'
1.9 Changes in version 2.6.6
==============================
Debian packaging support
Minor bugfixes.
1.7 Changes in version '2.6.5'
==============================
1.10 Changes in version 2.6.5
===============================
Bugfix for non-fragile ABI test
@ -119,124 +142,124 @@ Bugfix for non-fragile ABI test
Added minimal test support for .c and .cc files.
1.8 Changes in version '2.6.4'
==============================
1.11 Changes in version 2.6.4
===============================
Test framework extended equality tests.
Android build target
1.9 Changes in version '2.6.3'
==============================
1.12 Changes in version 2.6.3
===============================
Minor bugfix release.
1.10 Changes in version '2.6.2'
1.13 Changes in version 2.6.2
===============================
Added standalone filesystem layout for putting everything in one
directory for easy deployment of relocatable. Other bug fixes.
1.11 Changes in version '2.6.1'
1.14 Changes in version 2.6.1
===============================
Bug fix release. Most notably to fix a problem compiling GNUstep with
clang.
1.12 Changes in version '2.6.0'
1.15 Changes in version 2.6.0
===============================
* The default filesystem layout is now the 'fhs' layout
* The default location of the configuration file changed when not
The default filesystem layout is now the 'fhs' layout
The default location of the configuration file changed when not
installing system-wide
* Removed the -with-system-root, -with-local-root and
Removed the -with-system-root, -with-local-root and
-with-network-root options
* Removed obsolete variables (deprecated 4 years ago).
* A new test framework is included in the pacakge
* objc.make deprecated. Use tool.make instead
* -enable-absolute-install-paths is now the default on Darwin
Removed obsolete variables (deprecated 4 years ago).
A new test framework is included in the pacakge
objc.make deprecated. Use tool.make instead
-enable-absolute-install-paths is now the default on Darwin
1.13 Changes in version '2.4.0'
1.16 Changes in version 2.4.0
===============================
* Add -enable-objc-nonfragile-abi flag
* New serial-subdirectories.make and parallel-subdirectories.make.
* Support for parallel building of subdirectories.
* Support for parallel building of different instances.
* Support source files in subdirectories without using a subproject.
* Support header files in sub-subdirectories.
* Batch-compile Java files (much faster).
* Changed default compilation flags to -O2 -g.
* Fixes for building documentation.
* Renamed info files to prevent conflicts.
* Updated cygwin support.
Add -enable-objc-nonfragile-abi flag
New serial-subdirectories.make and parallel-subdirectories.make.
Support for parallel building of subdirectories.
Support for parallel building of different instances.
Support source files in subdirectories without using a subproject.
Support header files in sub-subdirectories.
Batch-compile Java files (much faster).
Changed default compilation flags to -O2 -g.
Fixes for building documentation.
Renamed info files to prevent conflicts.
Updated cygwin support.
1.14 Changes in version '2.2.0'
1.17 Changes in version 2.2.0
===============================
* New -with-objc-lib-flag for specifying libobjc.
* Automatically uses -lobjc_gc with configured with garbage
New -with-objc-lib-flag for specifying libobjc.
Automatically uses -lobjc_gc with configured with garbage
collection
* Parallel building supported using e.g. make -j 2
* Use install -p if available.
* make uninstall works better now.
Parallel building supported using e.g. make -j 2
Use install -p if available.
make uninstall works better now.
1.15 Changes in version '2.0.8'
1.18 Changes in version 2.0.8
===============================
Minor bug fix to deal with installing in different domains
1.16 Changes in version '2.0.7'
1.19 Changes in version 2.0.7
===============================
* New configuration file to set default installation
* gnustep-make now uses the -no-print-directory flag when invoking
New configuration file to set default installation
gnustep-make now uses the -no-print-directory flag when invoking
make
* Files make have same name but different extensions (.c and .m)
* Change in path checking algorithm in GNUstep.sh and GNUstep.csh
* Test applications linked against gnustep-gui by default
Files make have same name but different extensions (.c and .m)
Change in path checking algorithm in GNUstep.sh and GNUstep.csh
Test applications linked against gnustep-gui by default
1.17 Changes in version '2.0.6'
1.20 Changes in version 2.0.6
===============================
* Fixed some spurious rebuilds of plists, and framework headers.
* Added the -enable-absolute-install-paths option for Darwin systems.
* Install GNUstep.conf in /etc/GNUstep/GNUstep.conf on all systems.
Fixed some spurious rebuilds of plists, and framework headers.
Added the -enable-absolute-install-paths option for Darwin systems.
Install GNUstep.conf in /etc/GNUstep/GNUstep.conf on all systems.
1.18 Changes in version '2.0.5'
1.21 Changes in version 2.0.5
===============================
* Update C++ and ObjC++ support so that g++ and proper flags are
Update C++ and ObjC++ support so that g++ and proper flags are
automatically used.
* Added a new filesystem layout for Apple Mac OS X and use this by
Added a new filesystem layout for Apple Mac OS X and use this by
default on this system.
* NEEDS_GUI variable added to determine linking behavior against gui
NEEDS_GUI variable added to determine linking behavior against gui
library.
* New option -enable-strict-v2-mode to test for obsolete variables.
* ~/GNUstep/GNUstep.sh is no longer sourced.
New option -enable-strict-v2-mode to test for obsolete variables.
~/GNUstep/GNUstep.sh is no longer sourced.
1.19 Changes in version '2.0.4'
1.22 Changes in version 2.0.4
===============================
Fixed a bug finding relative paths on Windows (during configuration).
1.20 Changes in version '2.0.3'
1.23 Changes in version 2.0.3
===============================
New man pages for tools. Better uninstallation of files Add Windows
installer makefile for Applications.
1.21 Changes in version '2.0.2'
1.24 Changes in version 2.0.2
===============================
Update license to GPLv3.
1.22 Changes in version '2.0.1'
1.25 Changes in version 2.0.1
===============================
Bug fixes in filesystem layout and framework installation.
1.23 Changes in version '2.0.0'
1.26 Changes in version 2.0.0
===============================
The Makefile package has had a major makover which befits a major
@ -248,50 +271,50 @@ traditional GNUstep layout.
Due to this change a number of variable names have been changed or
deprecated. If you are a developer maintaining makefiles, you should
check your makefiles for these variables. Most notibly, variables such
as 'GNUSTEP_SYSTEM_ROOT' no longer make any sense, as various
as GNUSTEP_SYSTEM_ROOT no longer make any sense, as various
directories that were previously in a traditional GNUstep system root
directory exist accross multiple directories in disparate places in
other filesystem layouts.
If you are a user or developer that is just installing GNUstep, read
the 'GNUstep-HOWTO' and 'INSTALL' documents to find out new information
the GNUstep-HOWTO and INSTALL documents to find out new information
about configuring and installing make.
If you are a developer, read the files 'filesystem' and 'make' for
information on new and changed variables. Read the 'RELEASENOTES' file
If you are a developer, read the files filesystem and make for
information on new and changed variables. Read the RELEASENOTES file
for specific changes in this release and updates you will need to make
with this version of make.
Various changes include (See 'RELEASENOTES' for more information):
Various changes include (See RELEASENOTES for more information):
* New configure option '--with-layout' to choose different filesystem
• New configure option --with-layout to choose different filesystem
layouts.
* All applications use the '.app' extension even when compiled with
• All applications use the .app extension even when compiled with
debugging or profiling.
* Precompiled header support added using
Precompiled header support added using
xxx_OBJC_PRECOMPILED_HEADERS.
* gnustep-config is a program which prints out information on the
gnustep-config is a program which prints out information on the
GNUstep filesystem and variables (Similar to programs like
pkg-config).
* Better inline messages/help, including printing the version of
Better inline messages/help, including printing the version of
gnustep-make that is being used
* Applications can be started now just using their name (by
Applications can be started now just using their name (by
installing a wrapper in the tools directory).
* Versioning of Microsoft Windows DLLs implemented.
* Use of 'GNUSTEP_SYSTEM_ROOT' and similar variables deprecated.
* Implement use of GNU standard 'DESTDIR' variable.
* Object files are now placed in the 'obj' directory.
* Static and profile libraries have the same name as normal
Versioning of Microsoft Windows DLLs implemented.
• Use of GNUSTEP_SYSTEM_ROOT and similar variables deprecated.
• Implement use of GNU standard DESTDIR variable.
• Object files are now placed in the obj directory.
Static and profile libraries have the same name as normal
libraries.
* Support for Admin Tools and Admin Apps directories
* RPM support rewritten
* Microsoft Windows support updated and extended
* Easy consistent way to link non-installed frameworks by using
Support for Admin Tools and Admin Apps directories
RPM support rewritten
Microsoft Windows support updated and extended
Easy consistent way to link non-installed frameworks by using
-Lpath_to_framework/xxx.framework/$GNUSTEP_TARGET_LDIR
* Versioning of library resources
* Fixed rebuilding .plist and .palette files
Versioning of library resources
Fixed rebuilding .plist and .palette files
1.24 Changes in version '1.13.0'
1.27 Changes in version 1.13.0
================================
Debug libraries now have the same name as normal libraries (i.e. no
@ -304,15 +327,15 @@ loaded into the same executable.
make package (e.g. with Windows OS). The libraries can still use native
paths.
1.25 Changes in version '1.12.0'
1.28 Changes in version 1.12.0
================================
Minor fixes.
1.26 Changes in version '1.11.2'
1.29 Changes in version 1.11.2
================================
The 'GNUstep.conf' file is now viewed as the essential determination of
The GNUstep.conf file is now viewed as the essential determination of
the install location for GNUstep libraries, tools and other files.
During configuration, this file is read, if it exists, to determine this
information. This can still be overriden with environment and command
@ -339,7 +362,7 @@ rules.
files in the xxx_OBJCC_FILES variable, and put extra ObjC++ flags in
xxx_OBJCCFLAGS or ADDITIONAL_OBJCCFLAGS.
1.27 Changes in version '1.11.1'
1.30 Changes in version 1.11.1
================================
Part of the previous change was reversed. Now libobjc is still linked
@ -350,7 +373,7 @@ there is no need to recompile all applications again.
Compilation of GNUstep on cygwin was revampled and fixed due to a lot
of work by Tom MacSween.
1.28 Changes in version '1.11.0'
1.31 Changes in version 1.11.0
================================
NOTE: The libobjc library is now linked in with the base library and NOT
@ -358,57 +381,57 @@ with individual applications or tools (except on MingW). This requires
that you do a complete rebuild of all libraries, tools and apps when
switching to this new version.
* New rules for building and using DLLs were implemented. Now gcc
New rules for building and using DLLs were implemented. Now gcc
and other tricks are used to properly export symbols, so no .def
file should be needed.
* The GNUsteprc file in $GNUSTEP_SYSTEM_ROOT is deprecated. See the
The GNUsteprc file in $GNUSTEP_SYSTEM_ROOT is deprecated. See the
new GNUstep.conf file (which is not installed by default).
* Psuedo-framwork support was implemented on MingW. This essentially
Psuedo-framwork support was implemented on MingW. This essentially
involves copying the framework to several places so it can be used
without links, which Windows does not really support. There's no
other clean way to do it.
* Support for xxx_WINDRES_FILES on MinGW was implemented.
Support for xxx_WINDRES_FILES on MinGW was implemented.
1.29 Changes in version '1.10.0'
1.32 Changes in version 1.10.0
================================
* a GNUsteprc file is now automatically created and installed in
a GNUsteprc file is now automatically created and installed in
$GNUSTEP_SYSTEM_ROOT, which sets the system-wide default for the
user root directory (default=~/GNUstep, which can be overriden with
the '--with-user-root' argument to configure, or by modifying
the --with-user-root argument to configure, or by modifying
GNUsteprc after configuration.)
* make_services is not run by GNUstep.sh anymore. You must run this
make_services is not run by GNUstep.sh anymore. You must run this
manually now (see the gnustep-gui documentation).
* Palettes use a plist instead of a strings format file now for the
Palettes use a plist instead of a strings format file now for the
palette.table file.
* You can use the '--enable-native-objc-exceptions' argument to
• You can use the --enable-native-objc-exceptions argument to
configure to enable use of built in objc exceptions with compilers
that support it.
1.30 Changes in version '1.9.2'
1.33 Changes in version 1.9.2
===============================
* Application and Bundles use the latest convention on Apple.
* Improve/Simplify dependency checking when making docs
Application and Bundles use the latest convention on Apple.
Improve/Simplify dependency checking when making docs
1.31 Changes in version '1.9.1'
1.34 Changes in version 1.9.1
===============================
* Remove '--disable-import' option
* README.Darwin for darwin/MacOSX install
* Framework version and naming clarified.
• Remove --disable-import option
README.Darwin for darwin/MacOSX install
Framework version and naming clarified.
1.32 Changes in version '1.9.0'
1.35 Changes in version 1.9.0
===============================
* Support for building in a separate build dir.
* Add '--enable-strip-makefiles' option to configure
* List of classes in a framework gets written to the plist file.
Support for building in a separate build dir.
• Add --enable-strip-makefiles option to configure
List of classes in a framework gets written to the plist file.
1.33 Changes in version '1.8.0'
1.36 Changes in version 1.8.0
===============================
Read the NEWS file for a complete list of changes since the last stable
@ -417,35 +440,35 @@ certain directories have changed. Generally this will not cause a
problem unless your GNUstep directory is shared by multiple machines
running this and earlier (1.6.x) versions of the software.
1.34 Changes in version '1.7.4'
1.37 Changes in version 1.7.4
===============================
Bug fixes.
1.35 Changes in version '1.7.3'
1.38 Changes in version 1.7.3
===============================
* Adds library combo to Headers directory if not flattened.
* Add Markup file (Renaissance) support.
Adds library combo to Headers directory if not flattened.
Add Markup file (Renaissance) support.
1.36 Changes in version '1.7.2'
1.39 Changes in version 1.7.2
===============================
-enable-flattened (Flat directory structure) is on by default.
* On WIN32 use HOMEPATH in preference to USERPROFILE
* netbsd and openbsd compile fixes.
On WIN32 use HOMEPATH in preference to USERPROFILE
netbsd and openbsd compile fixes.
1.37 Changes in version '1.7.1'
1.40 Changes in version 1.7.1
===============================
Bug fixes.
1.38 Changes in version '1.7.0'
1.41 Changes in version 1.7.0
===============================
This version contains a major change in the location of certain
directories and installed files as detailed in the 'filesystem.texi'
directories and installed files as detailed in the filesystem.texi
document. When installing this version for the first time, all old
directories and files in those directories will be moved to the new
locations automatically. However, you should update all GNUstep
@ -454,68 +477,68 @@ incompatibilities.
Other changes:
* Support for preprocessed Info.plists.
Support for preprocessed Info.plists.
1.39 Changes in version '1.6.0'
1.42 Changes in version 1.6.0
===============================
Make now configures by default for only one system. To compile and run
GNUstep for multiple platforms from the same directory, use the
configure argument -enable-multi-platform.
* Auto-build def file for DLLs
* Work natively on MacOSX systems. Now use apple-apple-apple instead
Auto-build def file for DLLs
Work natively on MacOSX systems. Now use apple-apple-apple instead
of nx-nx-nx on OSX systems.
* More efficient checks for re-making a project.
More efficient checks for re-making a project.
1.40 Changes in version '1.5.1'
1.43 Changes in version 1.5.1
===============================
* Framework support rewritten, also supports multiple names.
* API change: Replace frameowork's xxx_TOOLS by xxx_COPY_INTO_DIR.
* Unified link commands between libraries and frameworks
Framework support rewritten, also supports multiple names.
API change: Replace frameowork's xxx_TOOLS by xxx_COPY_INTO_DIR.
Unified link commands between libraries and frameworks
(LIB_LINK_*).
* New 'make strings' target for localization support.
* Speed improvements.
* Doesn't try to build OSX bundle on GNUstep and vice versa.
* API change: Tools/Subproj can have resources.
* API change: TOOL_INSTALL_DIR.
New 'make strings' target for localization support.
Speed improvements.
Doesn't try to build OSX bundle on GNUstep and vice versa.
API change: Tools/Subproj can have resources.
API change: TOOL_INSTALL_DIR.
1.41 Changes in version '1.5.0'
1.44 Changes in version 1.5.0
===============================
* Add NetBSD Elf support
Add NetBSD Elf support
1.42 Changes in version '1.4.0'
1.45 Changes in version 1.4.0
===============================
* Update Darwin/GNU gcc and Irix targets
Update Darwin/GNU gcc and Irix targets
1.43 Changes in version '1.3.4'
1.46 Changes in version 1.3.4
===============================
This is a first prerelease version for 1.4.
* Use gnugc-gnu-gnu library combo for garbage collecting version.
* Add support for -library-combo in opentool
* Change GNUSTEP_PATHPREFIX_LIST to GNUSTEP_PATHLIST
* Add verbosity levels. Use make messages=yes for full messages.
Use gnugc-gnu-gnu library combo for garbage collecting version.
Add support for -library-combo in opentool
Change GNUSTEP_PATHPREFIX_LIST to GNUSTEP_PATHLIST
Add verbosity levels. Use make messages=yes for full messages.
1.44 Changes in version '1.3.3'
1.47 Changes in version 1.3.3
===============================
* Recognizes XXX_STANDARD_INSTALL=no to not do installation.
* Updated instructions for MingW/MSYS installation.
Recognizes XXX_STANDARD_INSTALL=no to not do installation.
Updated instructions for MingW/MSYS installation.
1.45 Changes in version '1.3.2'
1.48 Changes in version 1.3.2
===============================
* Instructions for building on Windows with MSYS
* Resolve library dependencies better on Windows
* Fix frameworks in RPMs and DEBs
* Continued reorganization.
Instructions for building on Windows with MSYS
Resolve library dependencies better on Windows
Fix frameworks in RPMs and DEBs
Continued reorganization.
1.46 Changes in version '1.3.0'
1.49 Changes in version 1.3.0
===============================
The package has gone through an extensive reorganization to break up
@ -524,109 +547,109 @@ simplified code and lots of code sharing between components. As a side
effect, it also increased the speed of the code by at least a factor of
2.
* Force shared=yes for cygwin and mingw
* Bundles copy resources from subprojects.
* Better resource management. Resources handled accross all project
Force shared=yes for cygwin and mingw
Bundles copy resources from subprojects.
Better resource management. Resources handled accross all project
types.
* Simplified and fixed user root location between make and base
Simplified and fixed user root location between make and base
libraries.
* Changed Apps directory to Applications
* Fixes for MacOSX, MingW
Changed Apps directory to Applications
Fixes for MacOSX, MingW
1.47 Changes in version '1.2.1'
1.50 Changes in version 1.2.1
===============================
* the source distribution code has been rewritten to be more general
the source distribution code has been rewritten to be more general
and extended. Packages built using gnustep-make now automatically
have handy targets building tarballs from sources or from CVS
imports.
* implemented support for auto-dependencies, which means that any
implemented support for auto-dependencies, which means that any
object file automatically depends on all the header files which
were used to build it. Only works with newer compilers.
* implemented INSTALL_AS_USER and INSTALL_AS_GROUP.
* implemented a strip=yes option.
* various bug fixes and minor improvements.
implemented INSTALL_AS_USER and INSTALL_AS_GROUP.
implemented a strip=yes option.
various bug fixes and minor improvements.
1.48 Changes in version '1.2.0'
1.51 Changes in version 1.2.0
===============================
* The core rules and internals of gnustep-make have been
The core rules and internals of gnustep-make have been
fundamentally redesigned and rewritten. notably, gnustep-make now
works using only a single recursive sub-make invocation rather than
two, which makes it consistently faster and simpler in all
circumstances.
* The clean rules have been heavily optimized - they no longer use
The clean rules have been heavily optimized - they no longer use
recursive sub-make invocations at all and so they are really fast.
* Many improvements to java support. Optimized management of nested
Many improvements to java support. Optimized management of nested
classes
* Better conformance to make conventions.
* File specific compilation flags
* Fixed darwin support
* Support for C++ files.
* Made use of library installation dir consistent with other
Better conformance to make conventions.
File specific compilation flags
Fixed darwin support
Support for C++ files.
Made use of library installation dir consistent with other
installation.
* Much improved Windows path support
Much improved Windows path support
1.49 Changes in version '1.0.1'
1.52 Changes in version 1.0.1
===============================
* Support for Java tools.
* Build GUI backend as a bundle (default).
* Remove backend part of LIBRARY_COMBO.
* Fixes to run on FreeBSD, Solaris.
Support for Java tools.
Build GUI backend as a bundle (default).
Remove backend part of LIBRARY_COMBO.
Fixes to run on FreeBSD, Solaris.
1.50 Changes in version '1.0.0'
1.53 Changes in version 1.0.0
===============================
* Optimizations that in many cases more than double the speed.
* Added preliminary darwin support.
* rpm packeing improvements.
* Better checking for mingw and cygwin
Optimizations that in many cases more than double the speed.
Added preliminary darwin support.
rpm packeing improvements.
Better checking for mingw and cygwin
1.51 Changes in version '0.9.2'
1.54 Changes in version 0.9.2
===============================
* HOWTO and faq files moved from core package to here
* Configurable GNUSTEP_LOCAL_ROOT and GNUSTEP_NETWORK_ROOT
HOWTO and faq files moved from core package to here
Configurable GNUSTEP_LOCAL_ROOT and GNUSTEP_NETWORK_ROOT
1.52 Changes in version '0.9.1'
1.55 Changes in version 0.9.1
===============================
Make has been reoganized so that it only relies on libraries and other
things that are necessary for the Makefile package itself. Any
libraries wanting to add extra package information can do so by
installing a make stub in the 'Additional' directory. This greatly
installing a make stub in the Additional directory. This greatly
simplifies compilation and packaging.
* Javadoc support added.
* debian directory added for dpkg
* RPM support rewritten from scratch.
Javadoc support added.
debian directory added for dpkg
RPM support rewritten from scratch.
1.53 Changes in version '0.9.0'
1.56 Changes in version 0.9.0
===============================
ffcall library is highly recommended for use with the GNUstep base
library. You need to have installed it prior to configuring the
Makefile package. See the INSTALL file.
* Support for automatically generating RPM spec files.
* Build suitable files for MacOS bundles
* Add option for flattened directory structure.
* LaText documentation support.
* Added support for Frameworks
Support for automatically generating RPM spec files.
Build suitable files for MacOS bundles
Add option for flattened directory structure.
LaText documentation support.
Added support for Frameworks
1.54 Noteworthy changes in version '0.6.6'
1.57 Noteworthy changes in version 0.6.6
==========================================
The GNUstep system libraries are now installed in a separate system root
directory (default /usr/GNUstep/System) rather than the GNUstep root
directory (default /usr/GNUstep). You can revert to the old behavior
using a configure option '--without-system-root'. We also recommend
using a configure option --without-system-root. We also recommend
removing any previous GNUstep versions before installing the new one in
order to avoid problems with the system finding the correct binary
and/or library.
* Support for Windows compilation (cygwin and mingw) and DLL creation
Support for Windows compilation (cygwin and mingw) and DLL creation
and usage.
* Java support rewritten and extended.
Java support rewritten and extended.

6
README
View file

@ -17,9 +17,9 @@ the user to easily create cross-compiled binaries.
The file 'NEWS' has this packages feature history.
The files 'INSTALL' or 'GNUstep-HOWTO' give instructions for
installing the packages. Also see the 'machines' documentation and
various machine specific READMEs in the Documentation directory.
The file 'INSTALL' gives instructions for configuring and installing
gnustep-make. Also see the 'machines' documentation
and various machine specific READMEs in the Documentation directory.
Files in the 'Documentation' directory have information on the design
of the Makefile system and how to write your own makefiles that work

View file

@ -5,45 +5,83 @@ The release notes include descriptions of API changes, behavior changes
and other information that might help developers and users migrate to
using a newer version of the make system.
1.1 Version 2.9.0
1.1 Version 2.9.3
=================
Addition of the 'asan=yes' option when GNUstep-make is invoked and
support for the GNUSTEP_WITH_ASAN=1 environment setting to turn on
address and leak sanitisation.
Various minor fixes
1.2 Version 2.9.2
=================
Changes to work around the removal of the javah tool after java version
8.
Changes to have the test framework require/use bash for consistent
behavior.
Changes to fix PDF generation with texinfo/7.1 and later.
Changes to implement .dist-ignore support for the git-dist: make
target.
1.3 Version 2.9.1
=================
Test framework has workaround for clang issues when building with MSCV.
A few minor test framework issues inroduced by the parallelisation
rewrite are fixed.
A bug in the PASS_MATCH macro is fixed.
The test framework makefiles now automatically add the framework
header directory to the compiler flags, so testcases can be more
reliably built by invoking make directly (rather than via the
gnustep-tests script).
1.4 Version 2.9.0
=================
We have improved support for newer GCC versions (GCC9 and newer).
Building with ARC has been fixed.
We've added support for storyboard files in 'GNUmakefile's.
We've added support for storyboard files in GNUmakefiles.
On Windows, we now support building with MSVC's Clang toolchain.
Subprojects' object files are now linked individually in their parent
project, rather than being first linked into 'subproject.o'.
project, rather than being first linked into subproject.o.
We have also changed the way 'OBJCXX' flags are handled, and
We have also changed the way OBJCXX flags are handled, and
increased the minimum version of autoconf used to 2.65. (The
regenerated 'configure' file will not handle runstatedir anymore.)
regenerated configure file will not handle runstatedir anymore.)
1.2 Version 2.8.0
1.5 Version 2.8.0
=================
We now include better library combo and ABI detection: gnustep-make will
now attempt to detect the optimal library combo and ABI supported by the
installed compiler and Objective-C runtime library. Explicit selection
of the runtime ABI is now possible using the '--with-runtime-abi'
of the runtime ABI is now possible using the --with-runtime-abi
configure option.
There's now full support for the gnustep-2.0 Objective-C ABI.
This release includes support for creating a Git tag and creating a
tarball from a git tag using the 'git-tag' and 'git-dist' targets.
tarball from a git tag using the git-tag and git-dist targets.
This release includes support for creating a Mercurial tag and
creating a tarball from a hg tag using the 'hg-tag' and 'hg-dist'
creating a tarball from a hg tag using the hg-tag and hg-dist
targets.
We have dropped legacy Rhapsody and FreeBSD-out support.
1.3 Version 2.7.0
1.6 Version 2.7.0
=================
When building non-flattened, the subdirectory name for
@ -63,7 +101,7 @@ architecture specific subdirectory.
Various bugfixes and minor improvements.
1.4 Version 2.6.8
1.7 Version 2.6.8
=================
Configure option '-with-library-combo=ng-gnu-gnu' to use the 'Next
@ -91,7 +129,7 @@ you update any old gnustep-make version one makefiles.
Garbage collection support to be removed at the next release.
1.5 Version 2.6.7
1.8 Version 2.6.7
=================
Improved package building support
@ -102,15 +140,15 @@ Improved package building support
Various minor bugfixes, documentation spelling corrections etc.
1.6 Version 2.6.6
1.9 Version 2.6.6
=================
Debian packagge generation support added.
Bug fixes
1.7 Version 2.6.5
=================
1.10 Version 2.6.5
==================
Bugfix for non-fragile ABI test
@ -120,35 +158,35 @@ Bugfix for non-fragile ABI test
Added minimal test support for .c and .cc files.
1.8 Version 2.6.4
=================
1.11 Version 2.6.4
==================
Test framework enhancement (extended equality tests)
Android build target
1.9 Version 2.6.3
=================
1.12 Version 2.6.3
==================
Bug fixes
1.10 Version 2.6.2
1.13 Version 2.6.2
==================
'Added standalone filesystem layout for putting everything in'
Added standalone filesystem layout for putting everything in
one directory for easy deployment of relocatable
'Other bug fixes'
Other bug fixes
1.11 Version 2.6.1
1.14 Version 2.6.1
==================
Bug fixes
1.12 Version 2.6.0
1.15 Version 2.6.0
==================
'The default filesystem layout is now the 'fhs' layout'
The default filesystem layout is now the 'fhs' layout
Before version 2.6.0, the default filesystem layout was the
'gnustep' layout. Starting with 2.6.0, the default filesystem
layout has changed and is now the 'fhs' layout. To get the old
@ -170,7 +208,7 @@ Bug fixes
. /usr/local/share/GNUstep/Makefiles/GNUstep.sh
'The default location of the configuration file changed'
The default location of the configuration file changed
Before version 2.6.0, the configuration file was always by default
/etc/GNUstep/GNUstep.conf no matter what filesystem layout and
prefix were used. Starting with version 2.6.0, that is the default
@ -194,18 +232,18 @@ Bug fixes
file on Darwin has not changed and is still
/Library/GNUstep/GNUstep.conf regardless of the prefix selected.
'Removed the --with-system-root, --with-local-root and --with-network-root options'
Removed the --with-system-root, --with-local-root and --with-network-root options
These configure options were obsolete and are ignored by all
releases in the past 4 years and have now finally been removed.
'Removed obsolete variables'
Removed obsolete variables
Some very old variables that were deprecated 4 years ago have now
been removed. This includes xxx_RESOURCE_FILES_INSTALL_DIR in
resource-set.make (you should use xxx_INSTALL_DIR instead) and
GNUSTEP_GSWAPPS in gswapp.make (you should use GNUSTEP_WEB_APPS
instead).
'New Test Framework'
New Test Framework
GNUstep-make now includes a test framework that can be used to
easily write testcases for Objective-C software. The new releases
of GNUstep-base and GNUstep-gui include regression test suites that
@ -213,23 +251,23 @@ Bug fixes
TestFramework directory for more information on how it works or how
to use it.
'objc.make is deprecated'
objc.make is deprecated
The file objc.make, which is used to compile Objective-C
command-line tools without a Foundation library such as GNUstep
base, is now deprecated. Please use tool.make instead.
'--enable-absolute-install-paths is now the default on Darwin'
--enable-absolute-install-paths is now the default on Darwin
This makes it easier to use GNUstep with the gnu-gnu-gnu library
combo on Apple Mac OS X.
1.13 Version 2.4.0
1.16 Version 2.4.0
==================
'You can enable the use of the non-fragile ivar ABI'
You can enable the use of the non-fragile ivar ABI
The -enable-objc-nonfragile-abi flag can be used to enable the
non-fragile ivar ABI for compilers (such as clang) that support it.
'-Wall is now used by default unless 'make warn=no' is specified'
-Wall is now used by default unless 'make warn=no' is specified
Before version 2.4.0, 'make debug=yes' would not only build object
files particularly suited for debugging, but would also add the
-Wall flag on the compiler command line when compiling
@ -246,7 +284,7 @@ Bug fixes
default with the -deprecation flag. You can turn it off by
compiling with 'make warn=no'.
'PACKAGE_NEEDS_CONFIGURE and JAVADOC_BUILD_ALWAYS now support 'yes' and 'no''
PACKAGE_NEEDS_CONFIGURE and JAVADOC_BUILD_ALWAYS now support 'yes' and 'no'
gnustep-make boolean variables traditionally use the values 'yes'
and 'no', with the unfortunate exception of PACKAGE_NEEDS_CONFIGURE
and JAVADOC_BUILD_ALWAYS which used to only recognize the values
@ -254,7 +292,7 @@ Bug fixes
gnustep-make 2.4.0 these two variables recognize the values 'yes'
and 'no' too.
'Versions of GNU make older then 3.79.1 (June 2000) are no longer supported'
Versions of GNU make older then 3.79.1 (June 2000) are no longer supported
The .NOTPARALLEL pseudo-target is only available in GNU make 3.79
and is essential for parallel builds to work. Starting with
version 2.4.0, gnustep-make recommends using GNU make 3.79.1 or
@ -264,19 +302,19 @@ Bug fixes
3.79.1 was released about 10 years ago, this should not be a
particular problem.
'new internalmessages=yes option'
new internalmessages=yes option
Starting with version 2.4.0, gnustep-make recognized the new
internalmessages=yes option (separate from messages=yes) which
prints all the recursive make invocations that are used. This is
mostly useful to understand how gnustep-make internally works and
is not meant for end-users.
'javadoc is run in quiet mode'
javadoc is run in quiet mode
Starting with version 2.4.0, javadoc is by default executed with
the -quiet option (unless messages=yes is specified), and a
"Generating javadoc documentation..." is printed instead.
'new API to build subdirectories'
new API to build subdirectories
Before version 2.4.0, aggregate.make was used to step into
subdirectories and build them. It did not support parallel
building. Starting with version 2.4.0, two new makefile fragments
@ -305,7 +343,7 @@ Bug fixes
for the next couple of years it might be a good solution while you
wait for your users to upgrade their gnustep-make installations.
'each instance stores object files in its own subdirectory'
each instance stores object files in its own subdirectory
Before version 2.4.0, there was a single object directory where all
object files where stored. In the most common case, this directory
was simply ./obj, so if you compiled file source.m, you'd end up
@ -332,7 +370,7 @@ Bug fixes
their own private gnustep-make forks or advanced extensions might
be affected.
'the order in which instances are built is no longer guaranteed'
the order in which instances are built is no longer guaranteed
If you build more than one tool in the same GNUmakefile by listing
them all in TOOL_NAME as in "TOOL_NAME = ToolA ToolB', you need to
be aware that the way the instances are built changed in version
@ -374,7 +412,7 @@ Bug fixes
built before the tool (or tools). It is the order in which the
libraries (or tools) are built that is no longer guaranteed.
'support for having source files in subdirectories'
support for having source files in subdirectories
Starting with version 2.4.0, it is possible to put source files in
subdirectories by specifiying them as in xxx_OBJC_FILES =
Source/Beauty.m. This syntax does not work on versions before
@ -384,7 +422,7 @@ Bug fixes
You can now spread your source files in multiple subdirectories
without using subprojects.
'support for having header files in subdirectories'
support for having header files in subdirectories
Starting with version 2.4.0, it is possible to put header files in
subdirectories by specifiying them as in xxx_HEADER_FILES =
Beauty/Beauty.h. This syntax does not work on versions before
@ -397,7 +435,7 @@ Bug fixes
the same result in versions before 2.4.0 you would have had to
manually create the header installation subdirectories.
'support for HEADER_FILES_DIR in framework subproject'
support for HEADER_FILES_DIR in framework subproject
Before version 2.4.0, specifying xxx_HEADER_FILES_DIR in a
framework subproject would have no effect. Starting with version
2.4.0, the variable is now recognized and can be used to have the
@ -405,7 +443,7 @@ Bug fixes
framework subprojects if you want to support older versions of
gnustep-make.
'info files renamed adding a gnustep- prefix'
info files renamed adding a gnustep- prefix
To prevent conflicts with other documentation, all the gnustep-make
info files have been renamed adding a gnustep- prefix. For
example, to access the GNUstep faq using info, you now need to type
@ -414,13 +452,13 @@ Bug fixes
and at the moment is not automatically installed unless you
explicitly go in that subdirectory and install it.
'better cleaning for texinfo documentation'
better cleaning for texinfo documentation
When you build html documentation from texinfo files, the local
directory containing the html files was not being removed when
doing a 'make clean'. Starting with version 2.4.0, 'make clean'
removes the directory too.
'debug=no made the default'
debug=no made the default
gnustep-make now builds using debug=no by default. As a
consequence, on most platforms C/Objective-C/C++ code is now built
by default using -g -O2 instead of just -g. If you do not want the
@ -432,7 +470,7 @@ Bug fixes
option to have them stripped out from all object files when they
are installed.
'batch-compilation of Java files'
batch-compilation of Java files
gnustep-make used to compile Java files one by one. In most Java
compilers this is very suboptimal. Starting from release 2.4.0,
gnustep-make will compile all Java files in a Java project with a
@ -447,7 +485,7 @@ Bug fixes
then batch compilation is automatically disabled and all files are
compiled separately.
'library resources always installed in directory without 'lib''
library resources always installed in directory without 'lib'
This change only applies to libraries where LIBRARY_NAME starts
with 'lib' and that install resources. Due to a bug, versions of
gnustep-make before 2.4.0 would in this case install the resources
@ -468,19 +506,19 @@ Bug fixes
on all gnustep-make versions that support library resources (ie,
gnustep-make >= 2.0.x).
1.14 Version 2.2.0
1.17 Version 2.2.0
==================
'libobjc library'
libobjc library
You can now specify a particular libobjc library to use with the
-with-objc-lib-flag in configure. Make now also automatically uses
-lobjc_gc when using garbage collection.
'parallel building'
parallel building
Parallel building is supported now. You can build using the normal
make mechanism, e.g. 'make -j 2'.
'install -p'
install -p
gnustep-make now uses 'install -p' by default when installing
headers and other files. This preserves the file timestamps and
can in some cases reduce spurious rebuilds triggered by
@ -488,15 +526,15 @@ Bug fixes
gnustep-make configure option -disable-install-p to disable this
behaviour and go back to always using a standard 'install'.
'uninstallation of resources'
uninstallation of resources
gnustep-make now is more careful and accurate when uninstalling
resources, which means that 'make uninstall' will do a better job
at removing directories that were created during by 'make install'.
1.15 Version 2.0.7
1.18 Version 2.0.7
==================
'default installation'
default installation
New configuration file that allows hardcore developers building
everything from source to specify arbitrary default installation
domains for the software. You just need to copy the
@ -504,19 +542,19 @@ Bug fixes
GNUstep.conf file, and edit it to customize the default
installation domain (Thanks to Richard for the idea).
'--no-print-directory'
--no-print-directory
gnustep-make now uses the -no-print-directory flag when invoking
make recursively, so the output has changed - starting from 2.0.7
it should be shorter and more readable.
'change to intermediate object file names'
change to intermediate object file names
gnustep-make now supports having in the same project source files
with the same name, but a different extension - for example file.c
and file.m. The names of intermediate object files have been
internally changed (for example, from file.o to file.c.o) to
support this.
'change in path checking algorithm in GNUstep.sh and GNUstep.csh'
change in path checking algorithm in GNUstep.sh and GNUstep.csh
GNUstep.sh and GNUstep.csh perform more careful checks for
duplicate paths when adding paths to PATH and other path variables.
Now they check each path separately before adding it, which in some
@ -529,15 +567,15 @@ Bug fixes
INFOPATH, LD_LIBRARY_PATH and similar variables since they may be
different from the old ones.
'test applications linked against gnustep-gui by default'
test applications linked against gnustep-gui by default
Test applications (that is, applications created using
test-application.make) are now linked against gnustep-gui by
default.
1.16 Version 2.0.6
1.19 Version 2.0.6
==================
'GNUSTEP_ABSOLUTE_INSTALL_PATHS'
GNUSTEP_ABSOLUTE_INSTALL_PATHS
Added the -enable-absolute-install-paths option to configure on
Darwin. Enabling this option modifies the process for building
dynamic libraries so the install_name stored within a library is an
@ -545,14 +583,14 @@ Bug fixes
be placed in non-standard locations, but may not be moved from
their designated location.
'default location of GNUstep.conf on BSD systems'
default location of GNUstep.conf on BSD systems
This has been changed to /etc/GNUstep/GNUstep.conf to be consistent
across all Unix systems (except for Apple Mac OS X where it is
installed in /Library/GNUstep/GNUstep.conf). To install in a
different location, use the -with-config-file=PATH option, as in
-with-config-file=/usr/pkg/etc/GNUstep.conf.
'make.info renamed to gnustep-make.info'
make.info renamed to gnustep-make.info
To prevent conflicts with the standard GNU 'make' info
documentation, the gnustep-make one has been renamed. Now you can
access it as in 'info gnustep-make' instead of 'info make',
@ -561,10 +599,10 @@ Bug fixes
the moment is not automatically installed unless you explicitly go
in that subdirectory and install it.
1.17 Version 2.0.5
1.20 Version 2.0.5
==================
'default filesystem layout on apple-apple-apple'
default filesystem layout on apple-apple-apple
The default filesystem layout when using the apple-apple-apple
library-combo has been changed from 'gnustep' to the new 'apple'
filesystem layout, and on darwin the configuration file is by
@ -576,7 +614,7 @@ Bug fixes
layout to compile and install Apple native frameworks and
applications.
'~/GNUstep/GNUstep.sh'
~/GNUstep/GNUstep.sh
This script used to be automatically sourced whenever the main
GNUstep.sh file was sourced. In gnustep-make version 2 (starting
with 2.0.5) the file is no longer sourced. If you are sourcing
@ -585,7 +623,7 @@ Bug fixes
shell init script before or after sourcing GNUstep.sh. The same
applies to ~/GNUstep/GNUstep.csh.
'xxx_NEEDS_GUI'
xxx_NEEDS_GUI
This new variable can be used to specify that a project needs to be
linked against the gui library (or not). If set to yes, the gui
library will be linked; if set to no, the gui library will not be
@ -597,7 +635,7 @@ Bug fixes
xxx_NEEDS_GUI for all bundles, frameworks and libraries to clarify
how the linking should be done.
'NEEDS_GUI'
NEEDS_GUI
This new variable can be used to specify that all projects built by
this GNUmakefile need to be linked against the gui library (or
not). If set to yes, the gui library will be linked; if set to no,
@ -605,7 +643,7 @@ Bug fixes
overridden for specific project targets by using the xxx_NEEDS_GUI
variable (see above).
1.18 Version 2.0.0
1.21 Version 2.0.0
==================
Version 2.0.0 is a new major release of gnustep-make which includes a
@ -616,7 +654,7 @@ work with gnustep-make version 1 or 2 when used in the same conditions
updating to work with the new filesystem layout configurations that are
allowed by gnustep-make version 2.
'GNUSTEP_INSTALLATION_DIR'
GNUSTEP_INSTALLATION_DIR
This variable is deprecated in gnustep-make version 2; you should
never use it. gnustep-make version 2 supports installation domains
that are mapped to filesystem locations in arbitrary ways; for this
@ -640,10 +678,10 @@ allowed by gnustep-make version 2.
/usr/lib or /usr/local/lib or
/home/nicola/GNUstep/Library/Libraries depending on the
installation domain); in that case, gnustep-make will manage
GNUSTEP_LIBRARIES for you. Please check the file 'filesystem' for
GNUSTEP_LIBRARIES for you. Please check the file filesystem for
more information on the available variables.
'GNUSTEP_xxx_ROOT'
GNUSTEP_xxx_ROOT
The variables GNUSTEP_SYSTEM_ROOT, GNUSTEP_LOCAL_ROOT,
GNUSTEP_NETWORK_ROOT, GNUSTEP_USER_ROOT and GNUSTEP_ROOT are
deprecated in gnustep-make version 2 and you should never use them.
@ -656,10 +694,10 @@ allowed by gnustep-make version 2.
to the actual logical directory into which you want to install.
For example, if your GNUmakefile is trying to install something
into GNUSTEP_SYSTEM_ROOT/Library/Libraries, you need to replace it
with GNUSTEP_SYSTEM_LIBRARIES. Please check the file 'filesystem'
with GNUSTEP_SYSTEM_LIBRARIES. Please check the file filesystem
for more information on the available variables.
'gnustep-make ./configure and install options'
gnustep-make ./configure and install options
The options to configure (and make install), particularly the ones
to determine the filesystem layout, have been radically changed in
gnustep-make version 2. If you have a building or packaging script
@ -672,34 +710,34 @@ allowed by gnustep-make version 2.
pass all the options every time. 'make install special_prefix=xxx'
has been replaced by 'make install DESTDIR=xxx'.
'make debug=yes is now the default'
make debug=yes is now the default
The default used to be 'make debug=no'; this has now been changed
to be 'make debug=yes'. To get the traditional behaviour, please
use 'make debug=no'.
'RPM support rewritten'
RPM support rewritten
The RPM support has been rewritten so if you're using gnustep-make
to automatically generate RPM packages for your software, you may
want to review the process. In particular, there is no longer a
distinction between debug and non-debug packages.
'xxx_PREPROCESS_INFO_PLIST'
xxx_PREPROCESS_INFO_PLIST
This variable is now obsolete and can be removed; gnustep-make
version 2 can automatically detect plists that need preprocessing.
'Framework default version'
Framework default version
The default framework resource version changed from 'A' to
INTERFACE_VERSION (which is set, by default, to '0').
'Microsoft Windows updates'
Microsoft Windows updates
If you are using Microsoft Windows, you probably want to check the
new installation instructions and reinstall everything.
'Java tools location changed'
Java tools location changed
Java tools are now installed into GNUSTEP_JAVA rather than in a
subdirectory of GNUSTEP_TOOLS.
'resource-set.make install directory'
resource-set.make install directory
The variable xxx_RESOURCE_FILES_INSTALL_DIR for resource-set.make
has been deprecated in favour of xxx_INSTALL_DIR. For backwards
compatibility, you may want to set them both:
@ -708,26 +746,26 @@ allowed by gnustep-make version 2.
xxx_RESOURCE_FILES_INSTALL_DIR = /Library/Libraries/Resources/xxx
'INSTALL_ROOT_DIR'
INSTALL_ROOT_DIR
All instances of INSTALL_ROOT_DIR in user's makefiles should be
replaced with DESTDIR.
'GNUSTEP_FLATTENED'
GNUSTEP_FLATTENED
All checks for GNUSTEP_FLATTENED should be updated to check the new
variable GNUSTEP_IS_FLATTENED instead, and to compare it explicitly
to 'yes' and 'no', and assume that " means 'yes'.
'./shared_obj'
./shared_obj
The ./shared_obj, ./shared_debug_obj directories and similar are no
longer created. You can use ./obj instead.
'library names'
library names
All libraries now have the same name.
'application names'
application names
All applications now have the same name.
Copyright (C) 2007 Free Software Foundation
Copyright © 2007 Free Software Foundation
Copying and distribution of this file, with or without modification,
are permitted in any medium without royalty provided the copyright

View file

@ -51,14 +51,22 @@
PASS(obj0 != nil, "%s has working alloc", prefix); \
PASS([obj0 isKindOfClass: theClass], \
"%s alloc gives the correct class", prefix); \
DESTROY(obj0); \
\
obj0 = [[theClass alloc] init]; \
PASS([obj0 isKindOfClass: theClass], "%s has working init", prefix); \
DESTROY(obj0); \
\
obj0 = [theClass new]; \
PASS([obj0 isKindOfClass: theClass], "%s has working new", prefix); \
DESTROY(obj0); \
\
obj1 = [theClass allocWithZone: testZone]; \
PASS([obj1 isKindOfClass: theClass],"%s has working allocWithZone",prefix); \
PASS([obj1 isKindOfClass: theClass], \
"%s allocWithZone: gives the correct class", prefix); \
DESTROY(obj1); \
NSRecycleZone(testZone); \
}
static void test_alloc(NSString *CN) __attribute__ ((unused));
static void test_alloc(NSString *CN)
@ -86,16 +94,18 @@ static void test_alloc(NSString *CN)
PASS_EXCEPTION([obj0 description], NSInvalidArgumentException, \
"raises NSInvalidArgumentException in description") \
\
PASS_EXCEPTION(if([obj0 init]==nil)[NSException raise: NSInvalidArgumentException format: @""], \
PASS_EXCEPTION(if((obj0=[obj0 init])==nil)[NSException raise: NSInvalidArgumentException format: @""], \
NSInvalidArgumentException, \
"returns nil or raises NSInvalidArgumentException in init") \
\
PASS_EXCEPTION(if([theClass new]==nil)[NSException raise: NSInvalidArgumentException format: @""], \
PASS_EXCEPTION(if((obj0=[theClass new])==nil)[NSException raise: NSInvalidArgumentException format: @""], \
NSInvalidArgumentException, \
"returns nil or raises NSInvalidArgumentException in new") \
\
obj1 = [theClass allocWithZone: testZone]; \
PASS([obj1 isKindOfClass: theClass],"%s has working allocWithZone",prefix); \
DESTROY(obj1); \
NSRecycleZone(testZone); \
}
static void test_alloc_only(NSString *CN) __attribute__ ((unused));
static void test_alloc_only(NSString *CN)
@ -211,6 +221,7 @@ static void test_NSObject(NSString *CN, NSArray *OJS)
decoded = [NSUnarchiver unarchiveObjectWithData: data]; \
PASS(decoded != nil, "can be decoded"); \
PASS_EQUAL(decoded, obj, "decoded object equals the original"); \
DESTROY(archiver); \
END_SET(buf) \
} \
}
@ -347,6 +358,7 @@ static void test_keyed_NSCoding(NSArray *OJS)
"%s result of copy is not immutable", prefix); \
} \
\
DESTROY(theCopy); \
theCopy = [theObj copyWithZone: testZone]; \
PASS(theCopy != nil, "%s understands -copyWithZone", prefix); \
PASS([theCopy isKindOfClass: iClass], \
@ -369,6 +381,7 @@ static void test_keyed_NSCoding(NSArray *OJS)
if (theClass != iClass) \
PASS(![theCopy isKindOfClass: theClass], \
"%s result of copyWithZone: is not immutable", prefix); \
DESTROY(theCopy); \
END_SET(buf) \
} \
}
@ -447,6 +460,7 @@ static void test_NSCopying(
PASS(theCopy != theObj, \
"%s not retained by mutable copy in the same zone", \
[mClassName UTF8String]); \
DESTROY(theCopy); \
\
theCopy = [theObj mutableCopyWithZone: testZone]; \
PASS(theCopy != nil, \
@ -454,6 +468,7 @@ static void test_NSCopying(
PASS(theCopy != theObj, \
"%s not retained by mutable copy in other zone", \
[mClassName UTF8String]); \
DESTROY(theCopy); \
END_SET(buf) \
} \
}

View file

@ -25,13 +25,7 @@
#include <stdarg.h>
#include <string.h>
#import <Foundation/NSAutoreleasePool.h>
#import <Foundation/NSCalendarDate.h>
#import <Foundation/NSException.h>
#import <Foundation/NSObjCRuntime.h>
#import <Foundation/NSObject.h>
#import <Foundation/NSRegularExpression.h>
#import <Foundation/NSString.h>
#import <Foundation/Foundation.h>
#if defined(__OBJC__) && defined(__clang__) && defined(_MSC_VER)
/* Work around Clang bug on Windows MSVC when tests contain no
@ -97,7 +91,9 @@ static inline void testIndent(void)
/* A variable set whenever a test macro is executed. This contains
* the exception which terminated the test macro, or nil if no exception
* was raised.
* was raised. This is destroyed at the end of a set (to avoid leaking)
* but if you run tests outside sets you should explicitly destroy it
* when finished.
*/
static NSException *testRaised __attribute__((unused)) = nil;
@ -156,10 +152,12 @@ static void pass(int passed, const char *format, ...)
if (testTimestamps)
{
NSCalendarDate *d = [NSCalendarDate date];
[d setCalendarFormat: @"(%Y-%m-%d %H:%M:%S.%F %z) "];
ts = [[d description] cString];
NSDateFormatter *f = [[NSDateFormatter alloc] init];
[f setLocale: [NSLocale localeWithLocaleIdentifier: @"en_US_POSIX"]];
[f setDateFormat: @"(yyyy-MM-dd HH:mm:ss.SSS z) "];
[f setTimeZone: [NSTimeZone systemTimeZone]];
ts = [[f stringFromDate: [NSDate date]] UTF8String];
[f release];
}
if (passed)
{
@ -556,6 +554,7 @@ static void testStart()
fprintf(stderr, "%s:%d ... %s\n", __FILE__, __LINE__, _save_set); \
free(_save_set); \
testHopeful = _save_hopeful; \
DESTROY(testRaised); \
}
/* The NEED macro takes a test macro as an argument and breaks out of a set
@ -666,5 +665,7 @@ if (__value != __object) \
#define RECREATE_AUTORELEASE_POOL(X) \
if (X == nil) \
(X) = [NSAutoreleasePool new]
#define ENTER_POOL @autoreleasepool{
#define LEAVE_POOL }
#endif

View file

@ -29,6 +29,13 @@
# oldtests.log and oldtests.sum, available for comparison.
# The exit value of the script is 0 if there are no failures, 1 otherwise.
if test "@MISSINGBASH@" = "YES"; then
echo "gnustep-make was unable to find bash at configure time."
echo "The test framework cannot run without bash installed."
echo "Please install bash and reconfigure/reinstall gnustep-make."
exit 0
fi
if test -z "$GNUSTEP_MAKEFILES"; then
GNUSTEP_MAKEFILES=`gnustep-config --variable=GNUSTEP_MAKEFILES 2>/dev/null`
if test -z "$GNUSTEP_MAKEFILES"; then
@ -47,9 +54,18 @@ export GSTESTTOP
GSTESTDIR=`pwd`
export GSTESTDIR
GSTESTMODE=normal
GSMAKEOPTIONS="debug=yes"
if test x"$GSTESTMODE" = x
then
GSTESTMODE=normal
fi
if test x"$GSTESTTIMEOUT" = x
then
GSTESTTIMEOUT="300"
fi
if test x"$GSMAKEOPTIONS" = x
then
GSMAKEOPTIONS="debug=yes"
fi
GSVERBOSECFLAG=
# Argument checking
@ -57,9 +73,17 @@ while test $# != 0
do
gs_option=
case $1 in
--asan)
GNUSTEP_WITH_ASAN=1
export GNUSTEP_WITH_ASAN
;;
--clean)
GSTESTMODE=clean
;;
--timeout)
GSTESTTIMEOUT=$2
shift
;;
--debug)
GSTESTDBG="$GSTESTDIR/gdb.cmds"
;;
@ -104,7 +128,9 @@ do
echo "Runs the specified tests, or any in subdirectories of the"
echo "current directory if no arguments are given."
echo "Use 'gnustep-tests --documentation' for full details."
echo "Use 'gnustep-tests --asan' to build using GNUSTEP_WITH_ASAN=1 set."
echo "Use 'gnustep-tests --clean' to remove old logs and leftover files."
echo "Use 'gnustep-tests --timeout <VAL>' to change the default timeout ($GSTESTTIMEOUT)."
echo "Use 'gnustep-tests --failfast' to stop after the first failure."
echo "Use 'gnustep-tests --debug' to run gdb/lldb for any failed tests."
echo "Use 'gnustep-tests --make-debug' to enable make debug output."
@ -137,6 +163,21 @@ export GSTESTLOG
GSTESTSUM=$GSTESTDIR/tests.sum
export GSTESTSUM
if test x"$GNUSTEP_WITH_ASAN" = x1
then
# When testing with address sanitizer (and leak sanitizer) we normally
# want the option to have memory leaks be signalled by the test ending
# with a well known exit code.
if test x"$LSAN_OPTIONS" = x
then
LSAN_OPTIONS=exitcode=23
export LSAN_OPTIONS
fi
else
GNUSTEP_WITH_ASAN=0
fi
export GNUSTEP_WITH_ASAN
# We assume that the C compiler supports ObjC
if test x"$CC" = x
then
@ -392,7 +433,7 @@ build_test ()
if test $? != 0
then
rm -f ./obj/$TESTNAME
echo "Failed build: $1" >&2
echo "Failed build: $1" | tee -a $GSTESTSUM >> $GSTESTLOG
if test "$GSTESTMODE" = "failfast"
then
return 1
@ -401,6 +442,32 @@ build_test ()
return 0
}
# Function to run a test case with a timeout by starting it in the background
# and having a subshell monitor it and kill it if it runs too long.
# If the test completes before the timeout, the waiting subshell is killed.
# The result of the function is the exit status of the test case.
# To avoid dependency on the external command 'sleep' we use coproc with
# 'read -t' and 'wait' to implement a sleep for $timeout seconds.
with_timeout()
{
timeout="$1"; cmd="$2";
(
eval "$cmd" &
child=$!
trap -- "" SIGTERM
(
coproc read -t $timeout && wait "$!" || true
kill $child 2> /dev/null
) &
waiter=$!
wait $child
result=$?
kill -9 $waiter
(exit $result)
)
}
run_test ()
{
# Remove the extension, if there is one. If there is no extension, add
@ -414,17 +481,24 @@ run_test ()
if test -x $RUN_CMD
then
# We want aggressive memory checking.
# Tell glibc to check for malloc errors, and to crash if it detects
# any.
# Tell glibc to check for malloc errors, and to crash if it detects any.
MALLOC_CHECK_=2
export MALLOC_CHECK_
# Tell GNUstep-base to check for messages sent to deallocated objects
# and crash if it happens.
NSZombieEnabled=YES
CRASH_ON_ZOMBIE=YES
if test x"$GNUSTEP_WITH_ASAN" = x1
then
# With ASAN/LSAN keeping objects in existence as zombies may give us
# false negatives when looking for leaks.
# When running without ASAN leak checking we want basic memory checking.
NSZombieEnabled=NO
CRASH_ON_ZOMBIE=NO
else
# Tell GNUstep-base to check for messages sent to deallocated objects
# and crash if it happens.
NSZombieEnabled=YES
CRASH_ON_ZOMBIE=YES
fi
export NSZombieEnabled CRASH_ON_ZOMBIE
echo Running $dir/$TESTFILE...
@ -434,31 +508,40 @@ run_test ()
# Env.sh is deprecated ... we should only use TestInfo to setup for a test
if test -r ./Env.sh
then
( . ./Env.sh; $RUN_CMD )
( . ./Env.sh; time with_timeout $GSTESTTIMEOUT $RUN_CMD )
else
if test -r ./make-check.env
then
( . ./make-check.env; . ./TestInfo > /dev/null 2>&1; $RUN_CMD )
( . ./make-check.env; . ./TestInfo > /dev/null 2>&1; time with_timeout $GSTESTTIMEOUT $RUN_CMD )
else
( . ./TestInfo > /dev/null 2>&1; $RUN_CMD )
( . ./TestInfo > /dev/null 2>&1; time with_timeout $GSTESTTIMEOUT $RUN_CMD )
fi
fi
result=$?
if test $result != 0
then
if test -r $TESTFILE.abort
then
if test $result -eq 0; then
echo "Completed file: $TESTFILE" >&2
elif test $result -eq 23; then
# https://github.com/google/sanitizers/wiki/AddressSanitizerLeakSanitizer
echo "Failed file: $TESTFILE leaked memory!" >&2
if test "$GSTESTMODE" = "failfast"; then
return 1
fi
elif test $result -eq 124; then
now=`date`
echo "Failed file: $TESTFILE timed out at $now!" >&2
if test "$GSTESTMODE" = "failfast"; then
return 1
fi
else
if test -r $TESTFILE.abort; then
echo "Completed file: $TESTFILE" >&2
else
echo "Failed file: $TESTFILE aborted without running all tests!" >&2
if test "$GSTESTMODE" = "failfast"
then
echo "Failed file: $TESTFILE aborted without running all tests!" >&2
if test "$GSTESTMODE" = "failfast"; then
return 1
fi
fi
else
echo "Completed file: $TESTFILE" >&2
fi
else
echo "Skipped (not built) file: $TESTFILE" >&2
@ -564,10 +647,10 @@ do
if test x"$OBJCXX" = x
then
# Only Objective-C (and C)
SRCDIRS=`find $TESTDIR -name "*.m" -o -name "*.c" | sed -e 's;/[^/]*$;;' | sort -u | sed -e 's/\(^\| \)X[^ ]*//g'`
SRCDIRS=`find $TESTDIR -type f \( -name "*.m" -o -name "*.c" \) | sed -e 's;/[^/]*$;;' | sort -u | sed -e 's/\(^\| \)X[^ ]*//g'`
else
# Objective-C and Objective-C++ (implicitly C and C++ too)
SRCDIRS=`find $TESTDIR \( -name "*.m" -o -name "*.mm" -o -name "*.c" -o -name "*.cc" \) | sed -e 's;/[^/]*$;;' | sort -u | sed -e 's/\(^\| \)X[^ ]*//g'`
SRCDIRS=`find $TESTDIR -type f \( -name "*.m" -o -name "*.mm" -o -name "*.c" -o -name "*.cc" \) | sed -e 's;/[^/]*$;;' | sort -u | sed -e 's/\(^\| \)X[^ ]*//g'`
fi
else
SRCDIRS="$TESTDIRS"
@ -636,10 +719,10 @@ do
if test x"$OBJCXX" = x
then
# Only Objective-C (and C)
TESTS=`find . \( -name . -o -prune \) \( -name "*.m" -o -name "*.c" \) | sed -e 's;^.*/;;' | sort -u | sed -e 's/\(^\| \)X[^ ]*//g'`
TESTS=`find . \( -name . -o -prune \) -type f \( -name "*.m" -o -name "*.c" \) | sed -e 's;^.*/;;' | sort -u | sed -e 's/\(^\| \)X[^ ]*//g'`
else
# Objective-C and Objective-C++ (implicitly C and C++ too)
TESTS=`find . \( -name . -o -prune \) \( -name "*.m" -o -name "*.mm" -name "*.c" -o -name "*.cc" \) | sed -e 's;^.*/;;' | sort -u | sed -e 's/\(^\| \)X[^ ]*//g'`
TESTS=`find . \( -name . -o -prune \) -type f \( -name "*.m" -o -name "*.mm" -name "*.c" -o -name "*.cc" \) | sed -e 's;^.*/;;' | sort -u | sed -e 's/\(^\| \)X[^ ]*//g'`
fi
fi

View file

@ -4,6 +4,6 @@
# The version number of this release.
GNUSTEP_MAKE_MAJOR_VERSION=2
GNUSTEP_MAKE_MINOR_VERSION=9
GNUSTEP_MAKE_SUBMINOR_VERSION=1
GNUSTEP_MAKE_SUBMINOR_VERSION=3
GNUSTEP_MAKE_VERSION=${GNUSTEP_MAKE_MAJOR_VERSION}.${GNUSTEP_MAKE_MINOR_VERSION}.${GNUSTEP_MAKE_SUBMINOR_VERSION}

View file

@ -745,7 +745,7 @@ ifeq ($(debug), yes)
ADDITIONAL_FLAGS := $(filter-out -O%, $(ADDITIONAL_FLAGS))
# If OPTFLAG does not already include -g, add it here.
ifneq ($(filter -g, $(OPTFLAG)), -g)
ADDITIONAL_FLAGS += -g
OPTFLAG += -g
endif
# Add standard debug compiler flags.
ADDITIONAL_FLAGS += -DDEBUG -fno-omit-frame-pointer
@ -759,6 +759,41 @@ else
INTERNAL_JAVACFLAGS += -O
endif
# On Windows MSVC we also need -gcodeview to generate debug symbols, and since
# Autoconf does not add it we add it here.
ifeq ($(GNUSTEP_TARGET_OS), windows)
ifeq ($(filter -g, $(OPTFLAG)), -g)
ifneq ($(filter -gcodeview, $(OPTFLAG)), -gcodeview)
OPTFLAG += -gcodeview
endif
endif
endif
# Sanitization must be enabled explicitly and shall _not_ be used in
# production, as it may leak sensitive info or result in privilege
# escalation due to unchecked use of variables
# (https://www.openwall.com/lists/oss-security/2016/02/17/9).
# Enable using '-asan yes' in command line or GNUSTEP_WITH_ASAN=1 in
# in the environment.
ifeq ($(GNUSTEP_WITH_ASAN), 1)
asan = yes
endif
ifeq ($(asan), yes)
# We tell the complier to build with the sanitiser and define a preprocessor
# flag so that the compuked code can conditionally handle that specially.
ADDITIONAL_FLAGS += -fsanitize=address -DGNUSTEP_WITH_ASAN=1
# We use the clang or gcc to drive the linking process. The driver will
# add the required runtime libraries for address sanitizer.
INTERNAL_LDFLAGS += -fsanitize=address
# Not omitting the frame pointer results in more readable stack traces
ifneq ($(filter -fno-omit-frame-pointer, $(ADDITIONAL_FLAGS)), -fno-omit-frame-pointer)
ADDITIONAL_FLAGS += -fno-omit-frame-pointer
endif
endif
ifeq ($(warn), no)
ADDITIONAL_FLAGS += -UGSWARN
else
@ -844,7 +879,7 @@ ifeq ($(JAVAC),)
endif
#
# The java header compiler.
# The java header compiler (if any). We need to check later.
#
ifeq ($(JAVAH),)
JAVAH = $(JAVA_HOME)/bin/javah

324
configure vendored
View file

@ -617,8 +617,9 @@ ac_unique_file="application.make"
ac_default_prefix=NONE
ac_subst_vars='LTLIBOBJS
LIBOBJS
TESTPROG
MISSINGBASH
SHELLPROG
TESTPROG
LATEX2HTML
clean_target_vendor
clean_target_cpu
@ -810,6 +811,7 @@ enable_install_p
with_tar
enable_strict_v2_mode
with_layout
with_libdir
enable_absolute_install_paths
with_config_file
enable_importing_config_file
@ -828,6 +830,7 @@ enable_native_objc_exceptions
enable_debug_by_default
enable_strip_makefiles
enable_parallel_building
with_bash_path
'
ac_precious_vars='build_alias
host_alias
@ -1612,7 +1615,7 @@ Optional Features:
Optional Packages:
--with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
--without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
--with-libray-combo Define the default "library combo". The library
--with-library-combo Define the default "library combo". The library
combo is a string of the form aaa-bbb-ccc where
'aaa' is the Objective-C runtime library to use
(examples are 'gnu' and 'apple'), 'bbb' is the
@ -1654,6 +1657,13 @@ Optional Packages:
Example: --with-layout=fhs
--with-libdir=FILE
Set the variant of the /lib directory to use. This is useful on systems
which support more than one binary format requiring separate libraries.
The default is lib.
Example: --with-libdir=lib64
--with-config-file=PATH
Set the path of the system GNUstep config file. Use this option
if you want to have the GNUstep config file in a non-standard
@ -1710,6 +1720,12 @@ Optional Packages:
--with-runtime-abi When using the ng runtime library, allows control
over the -fobjc-runtime= flag passed to clang.
--with-bash-path=PATH
Set the path to the bash executable to use. This is useful on systems
which do not have a reasonably recent version of bash in their path.
Example: --with-bash-path=/opt/homebrew/bin/bash
Some influential environment variables:
CC C compiler command
CFLAGS C compiler flags
@ -4878,11 +4894,11 @@ if test x$ac_prog_cxx_stdcxx = xno
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++11 features" >&5
printf %s "checking for $CXX option to enable C++11 features... " >&6; }
if test ${ac_cv_prog_cxx_11+y}
if test ${ac_cv_prog_cxx_cxx11+y}
then :
printf %s "(cached) " >&6
else $as_nop
ac_cv_prog_cxx_11=no
ac_cv_prog_cxx_cxx11=no
ac_save_CXX=$CXX
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@ -4924,11 +4940,11 @@ if test x$ac_prog_cxx_stdcxx = xno
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $CXX option to enable C++98 features" >&5
printf %s "checking for $CXX option to enable C++98 features... " >&6; }
if test ${ac_cv_prog_cxx_98+y}
if test ${ac_cv_prog_cxx_cxx98+y}
then :
printf %s "(cached) " >&6
else $as_nop
ac_cv_prog_cxx_98=no
ac_cv_prog_cxx_cxx98=no
ac_save_CXX=$CXX
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@ -6434,6 +6450,18 @@ if test ! -f "$srcdir/FilesystemLayouts/$GNUSTEP_FILESYSTEM_LAYOUT_FILE" >&5 2>&
exit 1
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for architecture-specific lib path" >&5
printf %s "checking for architecture-specific lib path... " >&6; }
# Check whether --with-libdir was given.
if test ${with_libdir+y}
then :
withval=$with_libdir; LIBDIR="$withval"
else $as_nop
LIBDIR="lib"
fi
# Need to do some checks related to building dylibs on darwin.
GNUSTEP_ABSOLUTE_INSTALL_PATHS=;
@ -6552,38 +6580,38 @@ printf "%s\n" "$GNUSTEP_PREFIX" >&6; }
# '/home' - we never install anything in there).
GNUSTEP_MAKEFILES="$GNUSTEP_PREFIX$GNUSTEP_MAKEFILES"
GNUSTEP_SYSTEM_APPS="$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_APPS"
GNUSTEP_SYSTEM_ADMIN_APPS="$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_ADMIN_APPS"
GNUSTEP_SYSTEM_WEB_APPS="$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_WEB_APPS"
GNUSTEP_SYSTEM_APPS=$(echo "$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_APPS" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_SYSTEM_ADMIN_APPS=$(echo "$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_ADMIN_APPS" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_SYSTEM_WEB_APPS=$(echo "$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_WEB_APPS" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_SYSTEM_TOOLS="$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_TOOLS"
GNUSTEP_SYSTEM_ADMIN_TOOLS="$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_ADMIN_TOOLS"
GNUSTEP_SYSTEM_LIBRARY="$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_LIBRARY"
GNUSTEP_SYSTEM_LIBRARY=$(echo "$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_LIBRARY" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_SYSTEM_HEADERS="$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_HEADERS"
GNUSTEP_SYSTEM_LIBRARIES="$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_LIBRARIES"
GNUSTEP_SYSTEM_LIBRARIES=$(echo "$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_LIBRARIES" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_SYSTEM_DOC="$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_DOC"
GNUSTEP_SYSTEM_DOC_MAN="$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_DOC_MAN"
GNUSTEP_SYSTEM_DOC_INFO="$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_DOC_INFO"
GNUSTEP_NETWORK_APPS="$GNUSTEP_PREFIX$GNUSTEP_NETWORK_APPS"
GNUSTEP_NETWORK_ADMIN_APPS="$GNUSTEP_PREFIX$GNUSTEP_NETWORK_ADMIN_APPS"
GNUSTEP_NETWORK_WEB_APPS="$GNUSTEP_PREFIX$GNUSTEP_NETWORK_WEB_APPS"
GNUSTEP_NETWORK_APPS=$(echo "$GNUSTEP_PREFIX$GNUSTEP_NETWORK_APPS" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_NETWORK_ADMIN_APPS=$(echo "$GNUSTEP_PREFIX$GNUSTEP_NETWORK_ADMIN_APPS" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_NETWORK_WEB_APPS=$(echo "$GNUSTEP_PREFIX$GNUSTEP_NETWORK_WEB_APPS" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_NETWORK_TOOLS="$GNUSTEP_PREFIX$GNUSTEP_NETWORK_TOOLS"
GNUSTEP_NETWORK_ADMIN_TOOLS="$GNUSTEP_PREFIX$GNUSTEP_NETWORK_ADMIN_TOOLS"
GNUSTEP_NETWORK_LIBRARY="$GNUSTEP_PREFIX$GNUSTEP_NETWORK_LIBRARY"
GNUSTEP_NETWORK_LIBRARY=$(echo "$GNUSTEP_PREFIX$GNUSTEP_NETWORK_LIBRARY" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_NETWORK_HEADERS="$GNUSTEP_PREFIX$GNUSTEP_NETWORK_HEADERS"
GNUSTEP_NETWORK_LIBRARIES="$GNUSTEP_PREFIX$GNUSTEP_NETWORK_LIBRARIES"
GNUSTEP_NETWORK_LIBRARIES=$(echo "$GNUSTEP_PREFIX$GNUSTEP_NETWORK_LIBRARIES" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_NETWORK_DOC="$GNUSTEP_PREFIX$GNUSTEP_NETWORK_DOC"
GNUSTEP_NETWORK_DOC_MAN="$GNUSTEP_PREFIX$GNUSTEP_NETWORK_DOC_MAN"
GNUSTEP_NETWORK_DOC_INFO="$GNUSTEP_PREFIX$GNUSTEP_NETWORK_DOC_INFO"
GNUSTEP_LOCAL_APPS="$GNUSTEP_PREFIX$GNUSTEP_LOCAL_APPS"
GNUSTEP_LOCAL_ADMIN_APPS="$GNUSTEP_PREFIX$GNUSTEP_LOCAL_ADMIN_APPS"
GNUSTEP_LOCAL_WEB_APPS="$GNUSTEP_PREFIX$GNUSTEP_LOCAL_WEB_APPS"
GNUSTEP_LOCAL_APPS=$(echo "$GNUSTEP_PREFIX$GNUSTEP_LOCAL_APPS" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_LOCAL_ADMIN_APPS=$(echo "$GNUSTEP_PREFIX$GNUSTEP_LOCAL_ADMIN_APPS" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_LOCAL_WEB_APPS=$(echo "$GNUSTEP_PREFIX$GNUSTEP_LOCAL_WEB_APPS" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_LOCAL_TOOLS="$GNUSTEP_PREFIX$GNUSTEP_LOCAL_TOOLS"
GNUSTEP_LOCAL_ADMIN_TOOLS="$GNUSTEP_PREFIX$GNUSTEP_LOCAL_ADMIN_TOOLS"
GNUSTEP_LOCAL_LIBRARY="$GNUSTEP_PREFIX$GNUSTEP_LOCAL_LIBRARY"
GNUSTEP_LOCAL_LIBRARY=$(echo "$GNUSTEP_PREFIX$GNUSTEP_LOCAL_LIBRARY" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_LOCAL_HEADERS="$GNUSTEP_PREFIX$GNUSTEP_LOCAL_HEADERS"
GNUSTEP_LOCAL_LIBRARIES="$GNUSTEP_PREFIX$GNUSTEP_LOCAL_LIBRARIES"
GNUSTEP_LOCAL_LIBRARIES=$(echo "$GNUSTEP_PREFIX$GNUSTEP_LOCAL_LIBRARIES" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_LOCAL_DOC="$GNUSTEP_PREFIX$GNUSTEP_LOCAL_DOC"
GNUSTEP_LOCAL_DOC_MAN="$GNUSTEP_PREFIX$GNUSTEP_LOCAL_DOC_MAN"
GNUSTEP_LOCAL_DOC_INFO="$GNUSTEP_PREFIX$GNUSTEP_LOCAL_DOC_INFO"
@ -8782,6 +8810,47 @@ then :
else $as_nop
objc_threaded=""
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
fi
elif test "$host_os" = linux-musl; then
LIBS="$OBJCRT -lpthread"
if test "$cross_compiling" = yes
then :
objc_threaded="-lpthread"
else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include "config_thread.m"
_ACEOF
if ac_fn_c_try_run "$LINENO"
then :
objc_threaded="-lpthread"
else $as_nop
objc_threaded=""
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
if test x"$objc_threaded" = x""; then
LIBS="$OBJCRT"
if test "$cross_compiling" = yes
then :
objc_threaded="works"
else $as_nop
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
#include "config_thread.m"
_ACEOF
if ac_fn_c_try_run "$LINENO"
then :
objc_threaded="works"
else $as_nop
objc_threaded=""
fi
rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
conftest.$ac_objext conftest.beam conftest.$ac_ext
fi
@ -9131,7 +9200,7 @@ if test x"$USE_ARC" = x"yes"; then
# What we want to do: set USE_ARC to yes if we can compile
# something with -fobjc-arc.
CFLAGS_no_arc="$CFLAGS"
CFLAGS="$CFLAGS -fobjc-runtime=gnustep-1.8 -fobjc-arc"
CFLAGS="$CFLAGS -fobjc-runtime=gnustep-2.2 -fobjc-arc"
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */
@ -9302,8 +9371,8 @@ fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether runtime library supports the gnustep-2.0 ABI" >&5
printf %s "checking whether runtime library supports the gnustep-2.0 ABI... " >&6; }
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether runtime library supports the gnustep-2.x ABI" >&5
printf %s "checking whether runtime library supports the gnustep-2.x ABI... " >&6; }
if test ${gs_cv_libobjc_abi_20+y}
then :
printf %s "(cached) " >&6
@ -9326,13 +9395,13 @@ printf "%s\n" "$gs_cv_libobjc_abi_20" >&6; }
case "$OBJC_RUNTIME_LIB" in
gnu) default_runtime_abi=gcc ;;
ng) default_runtime_abi=gnustep-1.8 ;;
ng) default_runtime_abi=gnustep-2.2 ;;
*) default_runtime_abi="(unknown)" ;;
esac
if test ! x"" = x""; then
default_runtime_abi=""
elif test x"$OBJC_RUNTIME_LIB" = x"ng" -a x"$libobjc_SUPPORTS_ABI20" = x"yes" -a x"$CLANG_CC" = x"yes" -a "${gs_cv_gcc_major_version}" -ge "8"; then
default_runtime_abi=gnustep-2.0
default_runtime_abi=gnustep-2.2
fi
# Check whether --with-runtime-abi was given.
@ -9364,41 +9433,42 @@ fi
# If we determined that the user wants the gnustep-2.0 ABI, check for potential linker problems.
if test $gs_cv_runtime_abi = 'gnustep-2.0'; then
if test "$gs_cv_runtime_abi" = "gnustep-2.0"; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which linker is being used" >&5
printf %s "checking which linker is being used... " >&6; }
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for an gnustep-2.0 ABI compatible linker" >&5
printf %s "checking for an gnustep-2.0 ABI compatible linker... " >&6; }
if test ${gs_cv_abi20_linker+y}
then :
printf %s "(cached) " >&6
else $as_nop
gs_cv_abi20_linker="unkown"
echo 'int main() { return 0; }' > conftest.c
gs_cv_abi20_linker_prog=$($CC --print-prog-name=ld)
if $gs_cv_abi20_linker_prog --version | $GREP -q 'GNU ld'; then
gs_cv_abi20_linker="unlikely (GNU ld)"
elif $gs_cv_abi20_linker_prog --version | $GREP -q 'GNU gold'; then
gs_cv_abi20_linker="yes (GNU gold)"
elif $gs_cv_abi20_linker_prog --version | $GREP -q 'LLD'; then
gs_cv_abi20_linker="yes (LLD)"
fi
# Try compiling with verbose output to capture linker information.
$CC $CFLAGS $LDFLAGS -o conftest conftest.c -Wl,--verbose > compile.log 2>&1
# Determine which linker is being used based on the log.
linker="unknown" # Default to unknown.
if grep -q "GNU ld" compile.log; then
linker="GNU ld"
# GNU gold does not print a header line, so we just check for "gold".
elif grep -q "gold" compile.log; then
linker="GNU gold"
# LLD does not print a header line, so we just check for "lld".
elif grep -q "lld" compile.log; then
linker="lld"
fi
fi
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gs_cv_abi20_linker" >&5
printf "%s\n" "$gs_cv_abi20_linker" >&6; }
if echo "$gs_cv_abi20_linker" | $GREP -q '^yes'; then
_gs_abi20_linker=yes
else
_gs_abi20_linker=no
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: The detected linker might not produce working Objective-C binaries using the gnustep-2.0 ABI. Consider using gold or LLD." >&5
printf "%s\n" "$as_me: WARNING: The detected linker might not produce working Objective-C binaries using the gnustep-2.0 ABI. Consider using gold or LLD." >&2;}
fi
if test "x$_gs_abi20_linker" = x"yes"
then :
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $linker" >&5
printf "%s\n" "$linker" >&6; }
fi
# Clean up the test artifacts.
rm -f conftest.c conftest
# Based on the identified linker, we may want to display a warning or take other actions.
if test "x$linker" = "xGNU ld"; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: The detected linker (GNU ld) might not produce working Objective-C binaries using the gnustep-2.0 ABI. Consider using GNU gold or LLD." >&5
printf "%s\n" "$as_me: WARNING: The detected linker (GNU ld) might not produce working Objective-C binaries using the gnustep-2.0 ABI. Consider using GNU gold or LLD." >&2;}
elif test "x$linker" = "xunknown" && test -n "$explicit_linker_flag"; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Unable to confirm if the explicitly specified linker '$explicit_linker_flag' is compatible with the gnustep-2.0 ABI." >&5
printf "%s\n" "$as_me: WARNING: Unable to confirm if the explicitly specified linker '$explicit_linker_flag' is compatible with the gnustep-2.0 ABI." >&2;}
fi
fi
# Do not restore LIBS and CFLAGS yet as we need to test if the
@ -9912,52 +9982,6 @@ done
#--------------------------------------------------------------------
# For test framework
#--------------------------------------------------------------------
# Extract the first word of "bash", so it can be a program name with args.
set dummy bash; ac_word=$2
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_path_SHELLPROG+y}
then :
printf %s "(cached) " >&6
else $as_nop
case $SHELLPROG in
[\\/]* | ?:[\\/]*)
ac_cv_path_SHELLPROG="$SHELLPROG" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
case $as_dir in #(((
'') as_dir=./ ;;
*/) ;;
*) as_dir=$as_dir/ ;;
esac
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_path_SHELLPROG="$as_dir$ac_word$ac_exec_ext"
printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
test -z "$ac_cv_path_SHELLPROG" && ac_cv_path_SHELLPROG="/bin/sh"
;;
esac
fi
SHELLPROG=$ac_cv_path_SHELLPROG
if test -n "$SHELLPROG"; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $SHELLPROG" >&5
printf "%s\n" "$SHELLPROG" >&6; }
else
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
fi
# Extract the first word of "test", so it can be a program name with args.
set dummy test; ac_word=$2
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@ -10004,10 +10028,105 @@ fi
# Check whether --with-bash-path was given.
if test ${with_bash_path+y}
then :
withval=$with_bash_path; SHELLPROG="$withval"
else $as_nop
SHELLPROG=
fi
if test x"$SHELLPROG" = x""; then
# Extract the first word of "bash", so it can be a program name with args.
set dummy bash; ac_word=$2
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_path_SHELLPROG+y}
then :
printf %s "(cached) " >&6
else $as_nop
case $SHELLPROG in
[\\/]* | ?:[\\/]*)
ac_cv_path_SHELLPROG="$SHELLPROG" # Let the user override the test with a path.
;;
*)
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
case $as_dir in #(((
'') as_dir=./ ;;
*/) ;;
*) as_dir=$as_dir/ ;;
esac
for ac_exec_ext in '' $ac_executable_extensions; do
if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
ac_cv_path_SHELLPROG="$as_dir$ac_word$ac_exec_ext"
printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
;;
esac
fi
SHELLPROG=$ac_cv_path_SHELLPROG
if test -n "$SHELLPROG"; then
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $SHELLPROG" >&5
printf "%s\n" "$SHELLPROG" >&6; }
else
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
fi
else
if test ! -x $SHELLPROG
then
echo "Unable to find executable bash program at $SHELLPROG."
SHELLPROG=
fi
fi
if test x"$SHELLPROG" = x""; then
echo "Unable to find the bash program (needed for testsuite)."
SHELLPROG=/bin/sh
MISSINGBASH=YES
else
MISSINGBASH=NO
BVER=`$SHELLPROG -c 'echo $BASH_VERSION'`
BMAJ=`echo $BVER | sed -e 's/\..*//'`
BMIN=`echo $BVER | sed -e 's/^[0-9][0-9]*\.\([0-9][0-9]*\).*/\1/'`
if test ${BMAJ} -lt 4
then
MISSINGBASH=YES
else
if test ${BMAJ} -eq 4 -a ${BMIN} -lt 3
then
MISSINGBASH=YES
fi
fi
if test ${MISSINGBASH} = "YES"
then
echo "The bash progrem version is too old (needed for testsuite)."
SHELLPROG=/bin/sh
fi
fi
if test ${MISSINGBASH} = "YES"
then
echo "Please configure using --with-bash-path= to specify a modernish"
echo "bash program (version 4.3 or later)."
SHELLPROG=/bin/sh
fi
#--------------------------------------------------------------------
# Produce the output files
#--------------------------------------------------------------------
ac_config_files="$ac_config_files config-noarch.make config.make openapp opentool executable.template GNUmakefile GNUstep.conf GNUstep-strict-v2.conf GNUstep.sh GNUstep.csh fixpath.sh gnustep-make.spec gnustep-config TestFramework/gnustep-tests filesystem.make filesystem.sh filesystem.csh gnustep-make-ld.so.conf"
ac_config_files="$ac_config_files config-noarch.make config.make openapp opentool executable.template GNUmakefile GNUstep.conf GNUstep-strict-v2.conf GNUstep.sh GNUstep.csh fixpath.sh GNUstep-reset.sh gnustep-make.spec gnustep-config TestFramework/gnustep-tests filesystem.make filesystem.sh filesystem.csh gnustep-make-ld.so.conf"
ac_config_files="$ac_config_files runtime/$OBJC_RUNTIME_LIB.make:config.make.in"
@ -10735,6 +10854,7 @@ do
"GNUstep.sh") CONFIG_FILES="$CONFIG_FILES GNUstep.sh" ;;
"GNUstep.csh") CONFIG_FILES="$CONFIG_FILES GNUstep.csh" ;;
"fixpath.sh") CONFIG_FILES="$CONFIG_FILES fixpath.sh" ;;
"GNUstep-reset.sh") CONFIG_FILES="$CONFIG_FILES GNUstep-reset.sh" ;;
"gnustep-make.spec") CONFIG_FILES="$CONFIG_FILES gnustep-make.spec" ;;
"gnustep-config") CONFIG_FILES="$CONFIG_FILES gnustep-config" ;;
"TestFramework/gnustep-tests") CONFIG_FILES="$CONFIG_FILES TestFramework/gnustep-tests" ;;

View file

@ -393,6 +393,16 @@ if test ! -f "$srcdir/FilesystemLayouts/$GNUSTEP_FILESYSTEM_LAYOUT_FILE" >&5 2>&
exit 1
fi
AC_MSG_CHECKING([for architecture-specific lib path])
AC_ARG_WITH(libdir,[
--with-libdir=FILE
Set the variant of the /lib directory to use. This is useful on systems
which support more than one binary format requiring separate libraries.
The default is lib.
Example: --with-libdir=lib64
],
LIBDIR="$withval",LIBDIR="lib")
# Need to do some checks related to building dylibs on darwin.
GNUSTEP_ABSOLUTE_INSTALL_PATHS=;
@ -509,38 +519,38 @@ AC_SUBST(GNUSTEP_PREFIX)
# '/home' - we never install anything in there).
GNUSTEP_MAKEFILES="$GNUSTEP_PREFIX$GNUSTEP_MAKEFILES"
GNUSTEP_SYSTEM_APPS="$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_APPS"
GNUSTEP_SYSTEM_ADMIN_APPS="$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_ADMIN_APPS"
GNUSTEP_SYSTEM_WEB_APPS="$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_WEB_APPS"
GNUSTEP_SYSTEM_APPS=$(echo "$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_APPS" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_SYSTEM_ADMIN_APPS=$(echo "$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_ADMIN_APPS" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_SYSTEM_WEB_APPS=$(echo "$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_WEB_APPS" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_SYSTEM_TOOLS="$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_TOOLS"
GNUSTEP_SYSTEM_ADMIN_TOOLS="$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_ADMIN_TOOLS"
GNUSTEP_SYSTEM_LIBRARY="$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_LIBRARY"
GNUSTEP_SYSTEM_LIBRARY=$(echo "$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_LIBRARY" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_SYSTEM_HEADERS="$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_HEADERS"
GNUSTEP_SYSTEM_LIBRARIES="$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_LIBRARIES"
GNUSTEP_SYSTEM_LIBRARIES=$(echo "$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_LIBRARIES" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_SYSTEM_DOC="$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_DOC"
GNUSTEP_SYSTEM_DOC_MAN="$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_DOC_MAN"
GNUSTEP_SYSTEM_DOC_INFO="$GNUSTEP_PREFIX$GNUSTEP_SYSTEM_DOC_INFO"
GNUSTEP_NETWORK_APPS="$GNUSTEP_PREFIX$GNUSTEP_NETWORK_APPS"
GNUSTEP_NETWORK_ADMIN_APPS="$GNUSTEP_PREFIX$GNUSTEP_NETWORK_ADMIN_APPS"
GNUSTEP_NETWORK_WEB_APPS="$GNUSTEP_PREFIX$GNUSTEP_NETWORK_WEB_APPS"
GNUSTEP_NETWORK_APPS=$(echo "$GNUSTEP_PREFIX$GNUSTEP_NETWORK_APPS" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_NETWORK_ADMIN_APPS=$(echo "$GNUSTEP_PREFIX$GNUSTEP_NETWORK_ADMIN_APPS" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_NETWORK_WEB_APPS=$(echo "$GNUSTEP_PREFIX$GNUSTEP_NETWORK_WEB_APPS" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_NETWORK_TOOLS="$GNUSTEP_PREFIX$GNUSTEP_NETWORK_TOOLS"
GNUSTEP_NETWORK_ADMIN_TOOLS="$GNUSTEP_PREFIX$GNUSTEP_NETWORK_ADMIN_TOOLS"
GNUSTEP_NETWORK_LIBRARY="$GNUSTEP_PREFIX$GNUSTEP_NETWORK_LIBRARY"
GNUSTEP_NETWORK_LIBRARY=$(echo "$GNUSTEP_PREFIX$GNUSTEP_NETWORK_LIBRARY" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_NETWORK_HEADERS="$GNUSTEP_PREFIX$GNUSTEP_NETWORK_HEADERS"
GNUSTEP_NETWORK_LIBRARIES="$GNUSTEP_PREFIX$GNUSTEP_NETWORK_LIBRARIES"
GNUSTEP_NETWORK_LIBRARIES=$(echo "$GNUSTEP_PREFIX$GNUSTEP_NETWORK_LIBRARIES" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_NETWORK_DOC="$GNUSTEP_PREFIX$GNUSTEP_NETWORK_DOC"
GNUSTEP_NETWORK_DOC_MAN="$GNUSTEP_PREFIX$GNUSTEP_NETWORK_DOC_MAN"
GNUSTEP_NETWORK_DOC_INFO="$GNUSTEP_PREFIX$GNUSTEP_NETWORK_DOC_INFO"
GNUSTEP_LOCAL_APPS="$GNUSTEP_PREFIX$GNUSTEP_LOCAL_APPS"
GNUSTEP_LOCAL_ADMIN_APPS="$GNUSTEP_PREFIX$GNUSTEP_LOCAL_ADMIN_APPS"
GNUSTEP_LOCAL_WEB_APPS="$GNUSTEP_PREFIX$GNUSTEP_LOCAL_WEB_APPS"
GNUSTEP_LOCAL_APPS=$(echo "$GNUSTEP_PREFIX$GNUSTEP_LOCAL_APPS" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_LOCAL_ADMIN_APPS=$(echo "$GNUSTEP_PREFIX$GNUSTEP_LOCAL_ADMIN_APPS" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_LOCAL_WEB_APPS=$(echo "$GNUSTEP_PREFIX$GNUSTEP_LOCAL_WEB_APPS" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_LOCAL_TOOLS="$GNUSTEP_PREFIX$GNUSTEP_LOCAL_TOOLS"
GNUSTEP_LOCAL_ADMIN_TOOLS="$GNUSTEP_PREFIX$GNUSTEP_LOCAL_ADMIN_TOOLS"
GNUSTEP_LOCAL_LIBRARY="$GNUSTEP_PREFIX$GNUSTEP_LOCAL_LIBRARY"
GNUSTEP_LOCAL_LIBRARY=$(echo "$GNUSTEP_PREFIX$GNUSTEP_LOCAL_LIBRARY" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_LOCAL_HEADERS="$GNUSTEP_PREFIX$GNUSTEP_LOCAL_HEADERS"
GNUSTEP_LOCAL_LIBRARIES="$GNUSTEP_PREFIX$GNUSTEP_LOCAL_LIBRARIES"
GNUSTEP_LOCAL_LIBRARIES=$(echo "$GNUSTEP_PREFIX$GNUSTEP_LOCAL_LIBRARIES" | sed "s/@libdir@/$LIBDIR/g")
GNUSTEP_LOCAL_DOC="$GNUSTEP_PREFIX$GNUSTEP_LOCAL_DOC"
GNUSTEP_LOCAL_DOC_MAN="$GNUSTEP_PREFIX$GNUSTEP_LOCAL_DOC_MAN"
GNUSTEP_LOCAL_DOC_INFO="$GNUSTEP_PREFIX$GNUSTEP_LOCAL_DOC_INFO"
@ -1289,7 +1299,7 @@ if test x"$USE_ARC" = x"yes"; then
# What we want to do: set USE_ARC to yes if we can compile
# something with -fobjc-arc.
CFLAGS_no_arc="$CFLAGS"
CFLAGS="$CFLAGS -fobjc-runtime=gnustep-1.8 -fobjc-arc"
CFLAGS="$CFLAGS -fobjc-runtime=gnustep-2.2 -fobjc-arc"
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
/* Note that we never execute this code so it does not really matter
what it is. We are testing that the compiler accepts the
@ -1371,7 +1381,7 @@ GS_CHECK_GCC_VERSION()
GS_RUNTIME_ABI()
# If we determined that the user wants the gnustep-2.0 ABI, check for potential linker problems.
if test $gs_cv_runtime_abi = 'gnustep-2.0'; then
if test "$gs_cv_runtime_abi" = "gnustep-2.0"; then
GS_CHECK_ABI20_LINKER()
fi
# Do not restore LIBS and CFLAGS yet as we need to test if the
@ -1769,15 +1779,64 @@ AC_CHECK_PROGS(LATEX2HTML, latex2html)
#--------------------------------------------------------------------
# For test framework
#--------------------------------------------------------------------
AC_PATH_PROG(SHELLPROG,bash,/bin/sh)
AC_PATH_PROG(TESTPROG, test)
AC_ARG_WITH(bash-path,[
--with-bash-path=PATH
Set the path to the bash executable to use. This is useful on systems
which do not have a reasonably recent version of bash in their path.
Example: --with-bash-path=/opt/homebrew/bin/bash
],
SHELLPROG="$withval",SHELLPROG=)
if test x"$SHELLPROG" = x""; then
AC_PATH_PROG(SHELLPROG, bash)
else
if test ! -x $SHELLPROG
then
echo "Unable to find executable bash program at $SHELLPROG."
SHELLPROG=
fi
fi
if test x"$SHELLPROG" = x""; then
echo "Unable to find the bash program (needed for testsuite)."
SHELLPROG=/bin/sh
MISSINGBASH=YES
else
MISSINGBASH=NO
BVER=`$SHELLPROG -c 'echo $BASH_VERSION'`
BMAJ=`echo $BVER | sed -e 's/\..*//'`
BMIN=`echo $BVER | sed -e 's/^[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\).*/\1/'`
if test ${BMAJ} -lt 4
then
MISSINGBASH=YES
else
if test ${BMAJ} -eq 4 -a ${BMIN} -lt 3
then
MISSINGBASH=YES
fi
fi
if test ${MISSINGBASH} = "YES"
then
echo "The bash progrem version is too old (needed for testsuite)."
SHELLPROG=/bin/sh
fi
fi
if test ${MISSINGBASH} = "YES"
then
echo "Please configure using --with-bash-path= to specify a modernish"
echo "bash program (version 4.3 or later)."
SHELLPROG=/bin/sh
fi
AC_SUBST(MISSINGBASH)
#--------------------------------------------------------------------
# Produce the output files
#--------------------------------------------------------------------
AC_CONFIG_FILES([config-noarch.make config.make openapp opentool
executable.template GNUmakefile GNUstep.conf GNUstep-strict-v2.conf
GNUstep.sh GNUstep.csh fixpath.sh
GNUstep-reset.sh
gnustep-make.spec gnustep-config TestFramework/gnustep-tests
filesystem.make filesystem.sh filesystem.csh gnustep-make-ld.so.conf])
AC_CONFIG_FILES([runtime/$OBJC_RUNTIME_LIB.make:config.make.in])

View file

@ -47,7 +47,7 @@ ifeq ($(OBJC_RUNTIME_LIB), ng)
ifneq ($(DEFAULT_OBJC_RUNTIME_ABI),)
RUNTIME_VERSION=$(DEFAULT_OBJC_RUNTIME_ABI)
else
RUNTIME_VERSION=gnustep-1.8
RUNTIME_VERSION=gnustep-2.2
endif
endif
RUNTIME_FLAG = -fobjc-runtime=$(RUNTIME_VERSION) -fblocks

View file

@ -7,27 +7,35 @@
# This macro checks whether we are using a linker that has known problems with the gnustep-2.0 ABI.
# If so, we currently just print a warning because we don't have a 100% accurate way of checking yet.
#
AC_DEFUN([GS_CHECK_ABI20_LINKER], [dnl
AC_REQUIRE([AC_PROG_CC])
AC_REQUIRE([AC_PROG_GREP])
AC_CACHE_CHECK([for an gnustep-2.0 ABI compatible linker],[gs_cv_abi20_linker], [dnl
gs_cv_abi20_linker="unknown"
AS_VAR_PUSHDEF([LD], [gs_cv_abi20_linker_prog])
LD=$($CC --print-prog-name=ld)
if $LD --version | $GREP -q 'GNU ld'; then
gs_cv_abi20_linker="unlikely (GNU ld)"
elif $LD --version | $GREP -q 'GNU gold'; then
gs_cv_abi20_linker="yes (GNU gold)"
elif $LD --version | $GREP -q 'LLD'; then
gs_cv_abi20_linker="yes (LLD)"
fi
AS_VAR_POPDEF([LD])
])
if echo "$gs_cv_abi20_linker" | $GREP -q '^yes'; then
_gs_abi20_linker=yes
else
_gs_abi20_linker=no
AC_MSG_WARN([The detected linker might not produce working Objective-C binaries using the gnustep-2.0 ABI. Consider using gold or LLD.])
fi
AS_VAR_IF([_gs_abi20_linker], ["yes"], [$1], [$2])
AC_DEFUN([GS_CHECK_ABI20_LINKER], [
AC_MSG_CHECKING([which linker is being used])
echo 'int main() { return 0; }' > conftest.c
# Try compiling with verbose output to capture linker information.
$CC $CFLAGS $LDFLAGS -o conftest conftest.c -Wl,--verbose > compile.log 2>&1
# Determine which linker is being used based on the log.
linker="unknown" # Default to unknown.
if grep -q "GNU ld" compile.log; then
linker="GNU ld"
# GNU gold does not print a header line, so we just check for "gold".
elif grep -q "gold" compile.log; then
linker="GNU gold"
# LLD does not print a header line, so we just check for "lld".
elif grep -q "lld" compile.log; then
linker="lld"
fi
AC_MSG_RESULT([$linker])
# Clean up the test artifacts.
rm -f conftest.c conftest
# Based on the identified linker, we may want to display a warning or take other actions.
if test "x$linker" = "xGNU ld"; then
AC_MSG_WARN([The detected linker (GNU ld) might not produce working Objective-C binaries using the gnustep-2.0 ABI. Consider using GNU gold or LLD.])
elif test "x$linker" = "xunknown" && test -n "$explicit_linker_flag"; then
AC_MSG_WARN([Unable to confirm if the explicitly specified linker '$explicit_linker_flag' is compatible with the gnustep-2.0 ABI.])
fi
])

View file

@ -37,7 +37,7 @@ AC_DEFUN([GS_LIBRARY_COMBO],dnl
])
AC_ARG_WITH([library-combo],
[AS_HELP_STRING([--with-libray-combo], [
[AS_HELP_STRING([--with-library-combo], [
Define the default "library combo". The library combo is a string
of the form aaa-bbb-ccc where 'aaa' is the Objective-C runtime
library to use (examples are 'gnu' and 'apple'),

View file

@ -254,7 +254,7 @@ AC_DEFUN([GS_CHECK_OBJC_RUNTIME], [
])
# Helper macro for checking gnustep-2.0 ABI support in libobjc via the __objc_load macro
# Helper macro for checking gnustep-2.x ABI support in libobjc via the __objc_load macro
AC_DEFUN([_GS_HAVE_OBJC_LOAD], [
AC_REQUIRE([GS_CHECK_OBJC_RUNTIME])
AC_CHECK_FUNC([__objc_load])
@ -266,11 +266,11 @@ AC_DEFUN([_GS_HAVE_OBJC_LOAD], [
#
# DESCRIPTION
#
# Checks for support for the gnustep-2.0 ABI in the runtime library. Sets the `libobjc_SUPPORTS_ABI20' variable.
# Checks for support for the gnustep-2.x ABI in the runtime library. Sets the `libobjc_SUPPORTS_ABI20' variable.
AC_DEFUN([GS_CHECK_RUNTIME_ABI20_SUPPORT], [
AC_REQUIRE([GS_CHECK_OBJC_RUNTIME])
AC_REQUIRE([_GS_HAVE_OBJC_LOAD])
AC_CACHE_CHECK([whether runtime library supports the gnustep-2.0 ABI],
AC_CACHE_CHECK([whether runtime library supports the gnustep-2.x ABI],
[gs_cv_libobjc_abi_20], [
if test x"$libobjc_SUPPORTS_ABI20" = x""; then
gs_cv_libobjc_abi_20=$ac_cv_func___objc_load

View file

@ -13,13 +13,13 @@ AC_DEFUN([GS_RUNTIME_ABI],dnl
AC_REQUIRE([GS_CHECK_GCC_VERSION])
case "$OBJC_RUNTIME_LIB" in
gnu) default_runtime_abi=gcc ;;
ng) default_runtime_abi=gnustep-1.8 ;;
ng) default_runtime_abi=gnustep-2.2 ;;
*) default_runtime_abi="(unknown)" ;;
esac
if test ! x"$1" = x""; then
default_runtime_abi="$1"
elif test x"$OBJC_RUNTIME_LIB" = x"ng" -a x"$libobjc_SUPPORTS_ABI20" = x"yes" -a x"$CLANG_CC" = x"yes" -a "${gs_cv_gcc_major_version}" -ge "8"; then
default_runtime_abi=gnustep-2.0
default_runtime_abi=gnustep-2.2
fi
AC_ARG_WITH([runtime-abi],
[AS_HELP_STRING([--with-runtime-abi], [
@ -31,4 +31,4 @@ AC_DEFUN([GS_RUNTIME_ABI],dnl
])
AS_VAR_IF([_gs_cv_runtime_abi], ["(unknown)"], [AS_UNSET(gs_cv_runtime_abi)], [AS_VAR_SET([gs_cv_runtime_abi], [${_gs_cv_runtime_abi}])])
AC_SUBST([gs_cv_runtime_abi])
])
])

View file

@ -44,7 +44,7 @@ ifneq ($(messages),yes)
INSIDE_ECHO_JAVA_COMPILING = echo "Compiling file $< ...";
INSIDE_ECHO_JAVA_BATCH_COMPILING = echo " Compiling Java files for $(GNUSTEP_INSTANCE) ...";
ECHO_LINKING = @(echo " Linking $(GNUSTEP_TYPE) $(GNUSTEP_INSTANCE) ...";
ECHO_JAVAHING = @(echo " Running javah on $< ...";
ECHO_JAVAHING = @(echo " Running java header command on $< ...";
ECHO_INSTALLING = @(echo " Installing $(GNUSTEP_TYPE) $(GNUSTEP_INSTANCE)...";
ECHO_UNINSTALLING = @(echo " Uninstalling $(GNUSTEP_TYPE) $(GNUSTEP_INSTANCE)...";
ECHO_COPYING_INTO_DIR = @(echo " Copying $(GNUSTEP_TYPE) $(GNUSTEP_INSTANCE) into $(COPY_INTO_DIR)...";

View file

@ -204,7 +204,20 @@ ifeq ($(AUTO_DEPENDENCIES_FLAGS),)
endif
endif
#
# Detect ARC support
ifeq ($(OBJC_RUNTIME_LIB), ng)
GS_RUNTIME_HAS_ARC = 1
endif
ifeq ($(OBJC_RUNTIME_LIB), apple)
DARWIN_VERSION = $(patsubst darwin%,%,$(filter darwin%, $(GNUSTEP_TARGET_OS)))
# Initial release of ARC in darwin10
ifeq ($(shell echo "$(DARWIN_VERSION) >= 10" | bc), 1)
GS_RUNTIME_HAS_ARC = 1
endif
endif
ifneq ($(GS_RUNTIME_HAS_ARC),)
# Projects may control the use of ARC by defining GS_WITH_ARC=1
# or GS_WITH_ARC=0 in their GNUmakefile, or in the environment,
# or as an argument to the 'make' command.
@ -659,10 +672,28 @@ endif
# Example of how this rule will be applied:
# gnu/gnustep/base/NSObject.h : gnu/gnustep/base/NSObject.java
# javah -o gnu/gnustep/base/NSObject.h gnu.gnustep.base.NSObject
# or, on more recent releases than 8, we have to use javac and move the
# resulting header file around t the correct location as javac does not
# provide command line options to control the output file name.
# NB. javac also fails to produce a header file when a java file does
# not produce class information, so we catch that and generate an empty
# header where necessary.
%.h : %.java
$(ECHO_JAVAHING)$(JAVAH) \
$(filter-out $($<_FILE_FILTER_OUT_FLAGS),$(ALL_JAVAHFLAGS)) \
$($<_FILE_FLAGS) -o $@ $(subst /,.,$*)$(END_ECHO)
$(ECHO_NOTHING)if [ -x $(JAVAH) ]; then \
$(JAVAH) \
$(filter-out $($<_FILE_FILTER_OUT_FLAGS),$(ALL_JAVAHFLAGS)) \
$($<_FILE_FLAGS) -o $@ $(subst /,.,$*); \
else \
JAVA_DST_DIR=`dirname $@`; \
$(JAVAC) -h $$JAVA_DST_DIR -sourcepath `dirname $*` \
$(filter-out $($<_FILE_FILTER_OUT_FLAGS),$(ALL_JAVAHFLAGS)) \
$($<_FILE_FLAGS) $*.java; \
if [ -e $$JAVA_DST_DIR/$(subst /,_,$@) ]; then \
mv $$JAVA_DST_DIR/$(subst /,_,$@) $$JAVA_DST_DIR/`basename $@`; \
else \
touch $$JAVA_DST_DIR/`basename $@`; \
fi \
fi$(END_ECHO)
%.c : %.psw
pswrap -h $*.h -o $@ $<

View file

@ -1,2 +1,4 @@
CVS
*.svn
*.git
*.hg

View file

@ -1117,7 +1117,7 @@ SHARED_LIBEXT = .so
HAVE_BUNDLES = yes
BUNDLE_LD = $(LD)
#BUNDLE_LDFLAGS += -shared -mimpure-text
BUNDLE_LDFLAGS += -nodefaultlibs -Xlinker -Wl,-r
BUNDLE_LDFLAGS += -nodefaultlibs -Xlinker -Wl,-r -no-pie
endif
# end Unixware