mirror of
https://github.com/gnustep/tools-make.git
synced 2025-04-21 05:10:57 +00:00
Compare commits
200 commits
make-2_6_8
...
master
Author | SHA1 | Date | |
---|---|---|---|
|
c7b5fa3a19 | ||
|
0bda6500e8 | ||
|
de77a9693f | ||
|
199b1eb071 | ||
|
96febdc8eb | ||
|
8a2bc0b214 | ||
|
9eb9eba0d6 | ||
|
0cf679c1b6 | ||
|
e3bbdd276b | ||
|
4602023a70 | ||
|
214a57eb7a | ||
|
a613c2668c | ||
|
16148bc3d8 | ||
|
1493a378c7 | ||
|
d739198f1d | ||
|
2b67e39517 | ||
|
80c7154cd0 | ||
|
4074b9f8d3 | ||
|
da6b90528e | ||
|
06496f69ac | ||
|
2ee48ebe21 | ||
|
27cbcbf6ca | ||
|
23485f8592 | ||
|
c6a561d713 | ||
|
1d48b14ff3 | ||
|
95d706bdb8 | ||
|
1fa879082c | ||
|
d0fae65d78 | ||
|
ffe5f324e1 | ||
|
554d207704 | ||
|
7cfd293ad8 | ||
|
c2a7753ffc | ||
|
e480e8b3bc | ||
|
0cf140efc0 | ||
|
adbab30895 | ||
|
dc8387f6f9 | ||
|
77c46a1f0e | ||
|
6d6548bef9 | ||
|
fa9df0b6fd | ||
|
9de817126c | ||
|
76a1df3b61 | ||
|
d5002f8405 | ||
|
2e99da71ef | ||
|
a95eb8e724 | ||
|
6d6d77ce93 | ||
|
ca20ad3cfd | ||
|
cd8d5259ee | ||
|
d1f1f672c7 | ||
|
209af1c9e9 | ||
|
e5c3acf855 | ||
|
c1703a066a | ||
|
3ff4ee8a05 | ||
|
2ce2a05f45 | ||
|
5ee21206a8 | ||
|
f0e00360a2 | ||
|
6b6217fb14 | ||
|
626971095f | ||
|
3b1d8035b2 | ||
|
58d9d3a9e5 | ||
|
13db21b769 | ||
|
5d7d5838f8 | ||
|
323223cae6 | ||
|
5dd6aee069 | ||
|
c4eb5b1192 | ||
|
42fe78d730 | ||
|
0e1b7ea571 | ||
|
d46255b681 | ||
|
1b247a9b4c | ||
|
360ec400bc | ||
|
ea58b898e9 | ||
|
0dee926610 | ||
|
1e69012101 | ||
|
5e9818204b | ||
|
fd76f00ab8 | ||
|
0c837c086b | ||
|
d637bdbbb3 | ||
|
e0cd6bf36e | ||
|
f3df026023 | ||
|
d4e31a7b0a | ||
|
385ac92961 | ||
|
9129f9e786 | ||
|
bdd44812a1 | ||
|
d6f902228f | ||
|
25abed1a85 | ||
|
058a8344b9 | ||
|
f3645338b6 | ||
|
d71ed3371f | ||
|
00a4e989ae | ||
|
30e6966ae5 | ||
|
ee5dc99e07 | ||
|
25ad1abc3e | ||
|
8c45f895ee | ||
|
93c893bcde | ||
|
796aa5742e | ||
|
b262b4f5c9 | ||
|
f4ec7e8609 | ||
|
39e556b037 | ||
|
0ae54f11da | ||
|
1005016879 | ||
|
2270671e94 | ||
|
04ce555693 | ||
|
9115af78c6 | ||
|
5b47b25b28 | ||
|
e2df3f4a19 | ||
|
7ea6ab208d | ||
|
49fa0681af | ||
|
e9f89d5459 | ||
|
ce9d4f5526 | ||
|
a2737b35f3 | ||
|
58d2d577f7 | ||
|
528747eac1 | ||
|
ea63969d2b | ||
|
19c86e397c | ||
|
b9984cae70 | ||
|
8070ae6228 | ||
|
b20f8d7559 | ||
|
9a6f5d296c | ||
|
99fa14e6fa | ||
|
02e2ba42c1 | ||
|
5cdfca4345 | ||
|
eb7c5d8df3 | ||
|
96e81d23c6 | ||
|
2e41a77191 | ||
|
f785b7b772 | ||
|
95bd45fb7b | ||
|
c0d40bdf8a | ||
|
f2dca3bc06 | ||
|
d57b85cee2 | ||
|
e7b97a63fc | ||
|
bcb81bae6d | ||
|
808001278b | ||
|
62c7ae20e9 | ||
|
f55c3a95e9 | ||
|
d0973c2b9d | ||
|
a31f416727 | ||
|
7c3abdca4a | ||
|
de94ae6fec | ||
|
3af60d8cce | ||
|
a3bed018c1 | ||
|
0627fb4eb7 | ||
|
29d6accada | ||
|
77f7aed44c | ||
|
2e4a65737d | ||
|
46acbafc20 | ||
|
9b27e65659 | ||
|
02f47ebb01 | ||
|
29dbe2bc76 | ||
|
94b77396ce | ||
|
b458b0eb87 | ||
|
02e014a5f1 | ||
|
4536e16cc7 | ||
|
95c97b6690 | ||
|
98a6b0135d | ||
|
21c5b37cc9 | ||
|
114faf5cd8 | ||
|
ebd667fe16 | ||
|
14a1d33b46 | ||
|
789fa92246 | ||
|
4e4a202511 | ||
|
d13a709339 | ||
|
a0d45d5a17 | ||
|
c80f35fb7b | ||
|
fd12d1bc5d | ||
|
56f7fb1a06 | ||
|
11431df279 | ||
|
1ce6058205 | ||
|
ad4d7ca0cc | ||
|
88ea3f8589 | ||
|
50afbfa898 | ||
|
720df0d7cf | ||
|
bf725e8b0d | ||
|
06f4a8de1e | ||
|
9bc9df6167 | ||
|
3ef37322cb | ||
|
6a195e5ad0 | ||
|
e3cb78268d | ||
|
3b86acbe58 | ||
|
94a1c9acb3 | ||
|
16b7c94490 | ||
|
b678fa706b | ||
|
9adc48967f | ||
|
c02ec7f0ed | ||
|
ef75692d4c | ||
|
b3c4eb94ca | ||
|
0d321a188b | ||
|
4f1263e9be | ||
|
df93d6b541 | ||
|
e62c615757 | ||
|
d318deabb0 | ||
|
2bd49d1917 | ||
|
53158f361d | ||
|
6743fe4f95 | ||
|
309a862c23 | ||
|
d6911e7252 | ||
|
75f1c3a3fe | ||
|
c5a8a00a7a | ||
|
a21bdd4ae8 | ||
|
b3f07dcfe6 | ||
|
1a4df24526 | ||
|
4957ff5858 |
70 changed files with 12530 additions and 7229 deletions
43
.gitignore
vendored
Normal file
43
.gitignore
vendored
Normal file
|
@ -0,0 +1,43 @@
|
|||
config.make
|
||||
config-noarch.make
|
||||
config.cache
|
||||
GNUmakefile
|
||||
GNUstep.sh
|
||||
GNUstep.csh
|
||||
GNUstep-reset.sh
|
||||
config.h
|
||||
config.status
|
||||
openapp
|
||||
debugapp
|
||||
executable.template
|
||||
opentool
|
||||
gnustep-make.spec
|
||||
fixpath.sh
|
||||
GNUstep.conf
|
||||
config-install-p-test-file2
|
||||
*.log
|
||||
TestFramework/gnustep-tests
|
||||
runtime/
|
||||
autom4te.cache
|
||||
gnustep-config
|
||||
filesystem.make
|
||||
filesystem.csh
|
||||
filesystem.sh
|
||||
gnustep-make-ld.so.conf
|
||||
GNUstep-strict-v2.conf
|
||||
Documentation/*.aux
|
||||
Documentation/*.dvi
|
||||
Documentation/*.info
|
||||
Documentation/*.pdf
|
||||
Documentation/*.ps
|
||||
Documentation/*.ps.gz
|
||||
Documentation/*.toc
|
||||
Documentation/*.vr
|
||||
Documentation/*.vrs
|
||||
Documentation/ANNOUNCE
|
||||
Documentation/INSTALL
|
||||
Documentation/NEWS
|
||||
Documentation/README
|
||||
Documentation/RELEASENOTES
|
||||
Documentation/version.texi
|
||||
Documentation/**/*.html
|
44
ANNOUNCE
44
ANNOUNCE
|
@ -1,9 +1,9 @@
|
|||
1 Announcement
|
||||
**************
|
||||
|
||||
The GNUstep Makefile Package version 2.6.7 is now available.
|
||||
The GNUstep Makefile Package version 2.9.3 is now available.
|
||||
|
||||
1.1 What is the GNUstep makefile package?
|
||||
1.1 What is the GNUstep Makefile Package?
|
||||
=========================================
|
||||
|
||||
The makefile package is a simple, powerful and extensible way to write
|
||||
|
@ -12,24 +12,42 @@ 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.6.7'
|
||||
1.2 Changes in version ‘2.9.3’
|
||||
==============================
|
||||
|
||||
Improved package building support
|
||||
• Added support for ASAN/LSAN builds
|
||||
|
||||
Improved environment variable support
|
||||
|
||||
Improved Java support
|
||||
|
||||
Various minor bugfixes, documentation spelling corrections etc.
|
||||
• Various minor bugfixes.
|
||||
|
||||
1.3 Obtaining gnustep-make
|
||||
==========================
|
||||
|
||||
You can get the gstep-make-2.6.7.tar.gz distribution file at
|
||||
`ftp://ftp.gnustep.org/pub/gnustep/core'
|
||||
You can get the gnustep-make-2.9.3.tar.gz distribution file at
|
||||
<ftp://ftp.gnustep.org/pub/gnustep/core>
|
||||
|
||||
Please log bug reports on the GNUstep project page
|
||||
`http://savannah.gnu.org/bugs/?group=gnustep' or send bug reports to
|
||||
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.3.tar.gz.sig
|
||||
|
||||
Signature has been created using the key with the following
|
||||
fingerprint:
|
||||
|
||||
83AA E47C E829 A414 6EF8 3420 CA86 8D4C 9914 9679
|
||||
|
||||
Read the INSTALL file or the GNUstep-HOWTO for installation
|
||||
instructions.
|
||||
|
||||
1.4 Where do I send bug reports?
|
||||
================================
|
||||
|
||||
Please log bug reports on the GNUstep project page
|
||||
<http://savannah.gnu.org/bugs/?group=gnustep> or send bug reports to
|
||||
<bug-gnustep@gnu.org>.
|
||||
|
||||
1.5 Obtaining GNUstep Software
|
||||
==============================
|
||||
|
||||
Check out the GNUstep web site. (<http://www.gnustep.org/>) and the GNU
|
||||
web site. (<http://www.gnu.org/>)
|
||||
|
|
5
CODEOWNERS
Normal file
5
CODEOWNERS
Normal file
|
@ -0,0 +1,5 @@
|
|||
# These owners will be the default owners for everything in
|
||||
# the repo. Unless a later match takes precedence,
|
||||
# @global-owner1 and @global-owner2 will be requested for
|
||||
# review when someone opens a pull request.
|
||||
* @rfm
|
518
ChangeLog
518
ChangeLog
|
@ -1,3 +1,517 @@
|
|||
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
|
||||
output file for texi2html (Debian Bug#1030387)
|
||||
|
||||
2023-02-06 Riccard Mottola <rm@gnu.org>
|
||||
|
||||
* Master/source-distribution.make
|
||||
Try to implement .dist-ignore support for git-dist: after archive,
|
||||
export and recompress again by excluding .dist-ignore
|
||||
|
||||
2022-12-28 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* ANNOUNCE:
|
||||
* NEWS:
|
||||
* RELEASENOTES:
|
||||
* Documentation/news.texi:
|
||||
* Documentation/releasenotes.texi:
|
||||
Update announcement and release notes for 2.9.1.
|
||||
* Version: Bump version to 2.9.1.
|
||||
|
||||
2022-12-05 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* TestFramework/gnustep-tests.in: use the -a option to force grep
|
||||
to treat log files as text rather than binary. If treated as binary
|
||||
it would not extract the information we need.
|
||||
* TestFramework/Testing.h: fix uninitialised variable in the macro
|
||||
to test for a regexp match.
|
||||
|
||||
2022-03-01 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* TestFramework/gnustep-tests.in:
|
||||
When using TestInfo send stdout and stderr to /dev/null so that
|
||||
thy don't interfere with the test output.
|
||||
|
||||
2022-02-16 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* TestFramework/gnustep-tests.in:
|
||||
Fix bug introduced in rewrite for parallelisation: we were getting
|
||||
immediate end of testing when one file failed, but that behavior
|
||||
should only occur when --failfast is specified.
|
||||
|
||||
2022-01-26 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* TestFramework/README:
|
||||
* TestFramework/TestInfo:
|
||||
* TestFramework/gnustep-tests.in:
|
||||
Add support for controlling test execution using SEQUENCE and PARALLEL
|
||||
in TestInfo to control the order of seuntial tests and the running of
|
||||
concurrent tests.
|
||||
|
||||
2021-03-28 Frederik Seiffert <frederik@algoriddim.com>
|
||||
|
||||
* TestFramework/Testing.h:
|
||||
Add workaround for Clang bug on Windows MSVC when tests contain no
|
||||
Objective-C constructs.
|
||||
|
||||
2021-03-21 Ivan Vucica <ivan@vucica.net>
|
||||
|
||||
* ANNOUNCE:
|
||||
* NEWS:
|
||||
* RELEASENOTES:
|
||||
* Documentation/news.texi:
|
||||
* Documentation/releasenotes.texi:
|
||||
Update release notes for 2.9.0.
|
||||
* Version:
|
||||
Bump version to 2.9.0.
|
||||
|
||||
2021-03-09 Frederik Seiffert <frederik@algoriddim.com>
|
||||
|
||||
* target.make:
|
||||
Link against debug or release UCRT DLLs for Windows MSVC and remove
|
||||
unused -pthread flag.
|
||||
* configure:
|
||||
* configure.ac:
|
||||
Fix CFLAGS for Windows MSVC.
|
||||
|
||||
2021-03-06 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* Instance/application.make:
|
||||
* configure:
|
||||
* configure.ac:
|
||||
* jni.make:
|
||||
* rules.make:
|
||||
* target.make:
|
||||
Adopt the triplet used by the mingw-w64 project (where the OS is always
|
||||
mingw32 and we differentiate 64bit Windows using the vendor part),
|
||||
rather than the one returned by autoconf. Scrap most of the code to
|
||||
differentiate between the two systems.
|
||||
|
||||
2021-02-25 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* configure:
|
||||
* configure.ac:
|
||||
Convert mingw-w64's triplet (cpu-w64-mingw32) which looks like mingw32
|
||||
back to standard form.
|
||||
|
||||
|
||||
2021-02-12 Frederik Seiffert <frederik@algoriddim.com>
|
||||
|
||||
* common.make: Silence PATH warning on Windows MSVC.
|
||||
* config-noarch.make.in: Add workaround for GNUSTEP_MAKEFILES
|
||||
breaking when using Windows-native "make".
|
||||
|
||||
2021-01-29 Frederik Seiffert <frederik@algoriddim.com>
|
||||
|
||||
* common.make:
|
||||
* configure:
|
||||
* m4/gs_cc_is_clang.m4:
|
||||
* target.make:
|
||||
Added support for building on Windows with Clang MSVC target.
|
||||
Requires passing a host like --host=x86_64-pc-windows.
|
||||
Removes the check for $GCC in gs_cc_is_clang.m4 as it will be false
|
||||
when using the MSVC ABI due to __GNUC__ not being defined.
|
||||
|
||||
2021-01-29 Frederik Seiffert <frederik@algoriddim.com>
|
||||
|
||||
* common.make:
|
||||
* target.make:
|
||||
Check $CLANG_CC instead of comparing $CC with "clang". Fixes checks
|
||||
when $CC is set to something like /path/to/clang.
|
||||
|
||||
2021-01-29 Frederik Seiffert <frederik@algoriddim.com>
|
||||
|
||||
* Instance/rules.make:
|
||||
* Instance/subproject.make:
|
||||
* common.make:
|
||||
Link subproject object files directly. Instead of merging all
|
||||
subproject object files into subproject.o, we now create
|
||||
subproject.txt containing a list of all object files, and use these
|
||||
directly in SUBPROJECT_OBJ_FILES.
|
||||
This enables building on platforms like Windows MSVC where `ld -r` is
|
||||
not supported, and generally avoids issues with incremental linking
|
||||
that have historically existed in some linker versions.
|
||||
|
||||
2021-01-18 Fred Kiefer <FredKiefer@gmx.de>
|
||||
|
||||
* Documentation/news.texi: Update for upcoming release.
|
||||
|
||||
2020-11-26 Frederik Seiffert <frederik@algoriddim.com>
|
||||
|
||||
* configure
|
||||
* configure.ac:
|
||||
Check for objc.dll to support libobjc2 on Windows.
|
||||
|
||||
2020-11-26 Frederik Seiffert <frederik@algoriddim.com>
|
||||
|
||||
* configure
|
||||
* configure.ac:
|
||||
Enable checking for native Objective-C exception support on Windows
|
||||
if non-gnu runtime is used (i.e. ng runtime).
|
||||
|
||||
2020-11-14 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* rules.make:
|
||||
* target.make:
|
||||
New variables FINAL_LDFLAGS and CORE_LDFLAGS such that ALL_LDFLAGS is
|
||||
now a combination of the two, and is used for final linking of an
|
||||
executable re shared library/bundle, while CORE_LDFLAGS is used when
|
||||
performing a partial link in a subproject.
|
||||
|
||||
2020-10-31 Yavor Doganov <yavor@gnu.org>
|
||||
|
||||
* Instance/Documentation/texi.make: Honor @setfilename.
|
||||
|
||||
2020-08-30 Ladislav Michl <ladis@linux-mips.org>
|
||||
|
||||
* configure.ac: Increase AC version number and use OBJCXX directly.
|
||||
* configure: Regenerate.
|
||||
|
||||
2020-07-09 Wolfgang Lux <wolfgang.lux@gmail.com>
|
||||
|
||||
* rules.make: Fix variable name to make compiling for ARC actually
|
||||
work.
|
||||
|
||||
2020-06-07 Fred Kiefer <FredKiefer@gmx.de>
|
||||
|
||||
* gs_gcc_version.m4: Add -dumpfullversion to the version
|
||||
extraction. Versions of gcc > 7.0 require this parameter to output
|
||||
the full version number. Older versions should just ignore this option.
|
||||
* configure: Regenerate
|
||||
|
||||
2020-04-14 Yavor Doganov <yavor@gnu.org>
|
||||
|
||||
* config-precomp-test/run-test.sh: Put $LIBS at the end so that it
|
||||
works with GCC >= 9 (which implies -Wl,--as-needed).
|
||||
|
||||
2020-04-13 Ivan Vucica <ivan@vucica.net>
|
||||
|
||||
* Documentation/announce.texi:
|
||||
* ANNOUNCE:
|
||||
Normalize the accompanying text for the release announcement across
|
||||
core packages: standardize chapter name and GPG information.
|
||||
|
||||
2020-04-05 Ivan Vucica <ivan@vucica.net>
|
||||
|
||||
* ANNOUNCE:
|
||||
* NEWS:
|
||||
* RELEASENOTES:
|
||||
* Documentation/news.texi:
|
||||
* Documentation/releasenotes.texi:
|
||||
Update release notes for 2.8.0.
|
||||
* Version:
|
||||
Bump version to 2.8.0.
|
||||
|
||||
|
||||
2020-02-28 Patryk Laurent <plaurent@me.com>
|
||||
|
||||
* target.make: Unified cross-OS class name extraction and unified
|
||||
for other OSes (Darwin, OpenBSD, MinGW).
|
||||
|
||||
2020-02-22 Patryk Laurent <plaurent@me.com>
|
||||
|
||||
* target.make: Improved detection of runtime version. Fixed class
|
||||
name extraction for Darwin, OpenBSD and MinGW32/64.
|
||||
|
||||
2020-02-18 Patryk Laurent <plaurent@me.com>
|
||||
|
||||
* target.make: Fixed EXTRACT_CLASS_NAMES_COMMAND for runtime v2.
|
||||
|
||||
2020-02-17 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* library-combo.make: removed GS_WITH_ARC support
|
||||
* rules.make: added GS_WITH_ARC stuff
|
||||
* Documentation/gnustep-make.texi: Document the changes ...
|
||||
We can define GS_WITH_ARC more freely (it is no longer necessary to
|
||||
define it before common.make). The default compiler flags for ARC
|
||||
support now include -fobjc-arc-exceptions. We can now define
|
||||
ARC_CPPFLAGS and ARC_OBJCFLAGS to overide the flags sent to the
|
||||
preprocessor and compiler/linker when ARC is enabled using GS_WITH_ARC
|
||||
|
||||
2019-10-29 Wolfgang Lux <wolfgang.lux@gmail.com>
|
||||
|
||||
* GNUmakefile.in:
|
||||
* Master/source-distribution.make:
|
||||
Add support for creating Mercurial tags and creating tarballs from
|
||||
a Mercurial tag.
|
||||
|
||||
2018-07-10 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* config.make.in:
|
||||
* configure:
|
||||
* configure.ac:
|
||||
* library-combo.make:
|
||||
* target.make:
|
||||
Change to use -fobjc-runtime=gcc when building with clang but
|
||||
targetting the gnu/gcc runtime ABI. Suggested by David as the
|
||||
correct way to tell clang what runtime it should be targetting.
|
||||
|
||||
2018-07-09 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* Documentation/library-combo.7:
|
||||
* common.make:
|
||||
* config.make.in:
|
||||
* configure:
|
||||
* configure.ac:
|
||||
* library-combo.make:
|
||||
Changes removing nonfragile ABI settings I made over a year ago and
|
||||
somehow failed to commit. With the ng runtime we always use the
|
||||
nonfragile ABI (since it's required for ARC). With the gnu runtime
|
||||
we don't have it and can't use it. Anything else is for experts
|
||||
(and if we want to make that easier it's better done in gnustep-base).
|
||||
|
||||
2018-07-05 Wolfgang Lux <wolfgang.lux@gmail.com>
|
||||
|
||||
* Instance/framework.make:
|
||||
* Instance/library.make:
|
||||
Fix quotation errors in automatically generated testsuite flags.
|
||||
|
||||
2018-03-22 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* TestFramework/gnustep-tests.in: When invoked with --verbose
|
||||
it would be nice to build testscases using messages=yes
|
||||
|
||||
2018-03-21 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* Instance/framework.make:
|
||||
* Instance/library.make:
|
||||
When automatically invoking testsuite for 'make check', pass
|
||||
additional linker flags to use -rpath so built testcases can
|
||||
be executed standalone and still use the locally built
|
||||
library/framework. Idea by David
|
||||
|
||||
2018-03-05 Riccardo Mottola <rm@gnu.org>
|
||||
|
||||
* target.make
|
||||
Remove legacy Rhapsody and FreeBSD-out support
|
||||
|
||||
2018-03-05 Riccardo Mottola <rm@gnu.org>
|
||||
|
||||
* target.make
|
||||
netbsd: cleanup old X11R6 directories and generally
|
||||
remove additional dirs
|
||||
|
||||
2017-12-10 Ivan Vucica <ivan@vucica.net>
|
||||
|
||||
* Master/source-distribution.make
|
||||
* GNUmakefile.in:
|
||||
When adding an ANNOUNCE file to the annotated tag, added dependency
|
||||
on the passed ANNOUNCE file to ensure the temporary file which
|
||||
prepends 'Release x.yz' gets regenerated while tagging.
|
||||
|
||||
2017-12-07 Ivan Vucica <ivan@vucica.net>
|
||||
|
||||
* Master/source-distribution.make: Allow creating a Git tag and
|
||||
creating a tarball from a git tag.
|
||||
* GNUmakefile.in: Allow creating a Git tag and creating a tarball
|
||||
from a Git tag, for releasing gnustep-make itself.
|
||||
|
||||
2017-04-14 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* Version: 2.7.0 release
|
||||
* Documentation/news.texi: 2.7.0 release
|
||||
* Documentation/releasenotes.texi: 2.7.0 release
|
||||
* ANNOUNCE:
|
||||
* INSTALL:
|
||||
* NEWS:
|
||||
* README:
|
||||
* RELEASENOTES:
|
||||
Regenerate documentation
|
||||
|
||||
2017-04-07 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* common.make: correct earlier change ... error pointed out by
|
||||
Galen Rhodes as bug #50751
|
||||
|
||||
2016-11-22 Doug Simons <doug.simons@testplant.com>
|
||||
|
||||
* target.make: Fix EXTRACT_CLASS_NAMES_COMMAND for Mingw64.
|
||||
|
||||
2016-08-19 Giah de Barag <gdb@crelg.com>
|
||||
|
||||
* common.make: filter out optimisation flags when in debug mode.
|
||||
|
||||
2016-07-10 13:33-EDT Gregory John Casamento <greg.casamento@gmail.com>
|
||||
|
||||
* GNUmakefile.in: add pkgconfig.make to INSTANCE_SHARED_MAKE_FILES
|
||||
variable so it is copied properly.
|
||||
|
||||
2016-07-08 Niels Grewe <niels.grewe@halbordnung.de>
|
||||
|
||||
* GNUstep.conf.in
|
||||
* GNUstep.csh.in
|
||||
* GNUstep.sh.in
|
||||
* Instance/Shared/pkgconfig.make
|
||||
* Instance/framework.make
|
||||
* Instance/library.make
|
||||
* config-noarch.make.in
|
||||
* configure
|
||||
* configure.ac
|
||||
* messages.make
|
||||
|
||||
Preliminary support for pkg-config files. The GNUstep.sh scripts
|
||||
set the PKG_CONFIG_PATH and $(INSTANCE)_PKGCONFIG_FILES can be used
|
||||
to specify the files to install.
|
||||
|
||||
2016-06-29 Niels Grewe <niels.grewe@halbordnung.de>
|
||||
|
||||
* Instance/framework.make: Fix installation of Resources symlinks.
|
||||
|
||||
2016-06-25 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* Documentation/releasenotes.texi:
|
||||
* GNUmakefile.in:
|
||||
* GNUstep.csh.in:
|
||||
* GNUstep.sh.in:
|
||||
* Master/rules.make:
|
||||
* common.make:
|
||||
* config-noarch.make.in:
|
||||
* gnustep-config.in:
|
||||
* openapp.in:
|
||||
* opentool.in:
|
||||
* rules.make:
|
||||
When building non-flattened, the subdirectory name for
|
||||
libraries/binaries is changed for Debian compatibility (and simplicity)
|
||||
to use a directory whose name is of the form architecture/library-combo
|
||||
rather than nested directories of the form cpu/os-abi/library-combo.
|
||||
The architecture name format is a sanitised triplet cpu-os-abi (where
|
||||
previously we had cpu/os-abi).
|
||||
When building non-flattened, header files are now installed in an
|
||||
architecture and library-combo dependent subdirectory in the same way
|
||||
that binary libraries are installed. This removes an inconsistency and
|
||||
makes sense with Debian multiarch support which puts headers in an
|
||||
architecture specific subdirectory.
|
||||
These changes are the first step in making GNUstep work seamlessly
|
||||
with Debian multiarch. To use them you will need to rebuild your
|
||||
entire gnustep installation, and in particular build a version of
|
||||
gnustep-base which has correspoinding changes to know where to look
|
||||
up resources at runtime.
|
||||
However, the changes should have no effect on a flattened installation
|
||||
(currently the default).
|
||||
|
||||
2016-05-19 Seong Gu Lee <sgleehd@gmail.com>
|
||||
|
||||
* Instance/application.make:
|
||||
* config.guess:
|
||||
* config.sub:
|
||||
* jni.make:
|
||||
* rules.make:
|
||||
* target.make:
|
||||
mingw64 tweaks
|
||||
|
||||
2016-05-13 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* TestFramework/Summary.sh:
|
||||
* TestFramework/gnustep-tests.in:
|
||||
Avoid some pointless warnings when cleaning
|
||||
|
||||
2016-05-13 Yavor Doganov <yavor@gnu.org>
|
||||
|
||||
* Instance/framework.make:
|
||||
Forgotten patch to allow multiple versions of a framework to be
|
||||
installed.
|
||||
* Documentation/GNUmakefile:
|
||||
* Instance/Documentation/texi.make:
|
||||
Forgotten patch to update for newere makeinfo which produces html.
|
||||
|
||||
2016-05-13 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* GNUmakefile.in:
|
||||
* TestFramework/gnustep-tests.in:
|
||||
* config.make.in:
|
||||
* common.make:
|
||||
* library-combo.make:
|
||||
* configure.ac:
|
||||
* configure:
|
||||
Minor tweaks... use ARC by default if ng runtime is specified
|
||||
|
||||
2016-03-25 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* common.make:
|
||||
* config.make.in:
|
||||
* configure.ac:
|
||||
* library-combo.make:
|
||||
* Documentation/library-combo.7:
|
||||
* TestFramework/Testing.h:
|
||||
* configure:
|
||||
Remove garbage collection support
|
||||
|
||||
2016-03-04 Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
||||
* configure.ac: Enable strict v2 mode by default
|
||||
|
@ -154,14 +668,14 @@
|
|||
we refrain from attempting tests in a directory whose startup script
|
||||
has failed.
|
||||
|
||||
2014-12-21: Niels Grewe <niels.grewe@halbordnung.de>
|
||||
2014-12-21 Niels Grewe <niels.grewe@halbordnung.de>
|
||||
|
||||
* rules.make
|
||||
* Instance/Shared/java.make:
|
||||
Add as_jar option to install the jar file instead of the expanded
|
||||
class hierarchy.
|
||||
|
||||
2014-12-21: Niels Grewe <niels.grewe@halbordnung.de>
|
||||
2014-12-21 Niels Grewe <niels.grewe@halbordnung.de>
|
||||
|
||||
* Instance/Shared/java.make
|
||||
* Instance/java.make
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -83,7 +83,7 @@ else
|
|||
# normal gnustep-make GNUmakefile for documentation.
|
||||
|
||||
# We normally install into System
|
||||
GNUSTEP_INSTALLATION_DOMAIN = SYSTEM
|
||||
GNUSTEP_INSTALLATION_DOMAIN = LOCAL
|
||||
|
||||
include $(GNUSTEP_MAKEFILES)/common.make
|
||||
|
||||
|
@ -167,8 +167,6 @@ include $(GNUSTEP_MAKEFILES)/documentation.make
|
|||
|
||||
include ../Version
|
||||
|
||||
GNUSTEP_TEXI2HTML_FLAGS += -init_file gnustep.init
|
||||
|
||||
# Typing 'make regenerate' should build all, then install the files
|
||||
# top-level. This is mostly for making gnustep-make releases.
|
||||
regenerate: all
|
||||
|
|
|
@ -18,7 +18,7 @@ programs using other languages like JAVA or Ruby.
|
|||
|
||||
The
|
||||
.B GNUstep
|
||||
core system consists of the following parts, which are jointly refered to as
|
||||
core system consists of the following parts, which are jointly referred to as
|
||||
.I gnustep-core
|
||||
:
|
||||
.TP
|
||||
|
@ -104,7 +104,7 @@ tool makes sure the services are known to other applications when a application
|
|||
.SS BUNDLES
|
||||
A bundle is a collection of resources making up a discrete package for use. There are currently three types of bundles: applications, frameworks and loadable bundles.
|
||||
.P
|
||||
A loadable bundle is a kind of plug-in. There are two types of loadable bundles, namely plug-ins and palettes. The plug-in is noramlly refered to as a bundle, which can make it a bit confusing. A plug-in is a bundle that can be loaded by an application to provide additional functionality, while a palette is a plug-in for
|
||||
A loadable bundle is a kind of plug-in. There are two types of loadable bundles, namely plug-ins and palettes. The plug-in is normally referred to as a bundle, which can make it a bit confusing. A plug-in is a bundle that can be loaded by an application to provide additional functionality, while a palette is a plug-in for
|
||||
.BR GORM ,
|
||||
the interface builder. A palette is used to extend
|
||||
.B GORM
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
@c -*- texinfo -*-
|
||||
@chapter Announcement
|
||||
|
||||
@include version.texi
|
||||
|
||||
The GNUstep Makefile Package version @value{GNUSTEP-MAKE-VERSION} is now available.
|
||||
|
||||
@section What is the GNUstep makefile package?
|
||||
@section What is the GNUstep Makefile Package?
|
||||
|
||||
The makefile package is a simple, powerful and extensible way to
|
||||
write makefiles for a GNUstep-based project. It allows the user to
|
||||
|
@ -18,9 +19,32 @@ It also allows the user to easily create cross-compiled binaries.
|
|||
|
||||
@section Obtaining gnustep-make
|
||||
|
||||
You can get the gstep-make-@value{GNUSTEP-MAKE-VERSION}.tar.gz
|
||||
You can get the gnustep-make-@value{GNUSTEP-MAKE-VERSION}.tar.gz
|
||||
distribution file at @url{ftp://ftp.gnustep.org/pub/gnustep/core}
|
||||
|
||||
It is accompanied by gnustep-make-@value{GNUSTEP-MAKE-VERSION}.tar.gz.sig, a
|
||||
PGP signature which you can validate by putting both files in the same
|
||||
directory and using:
|
||||
|
||||
@example
|
||||
gpg --verify gnustep-make-@value{GNUSTEP-MAKE-VERSION}.tar.gz.sig
|
||||
@end example
|
||||
|
||||
Signature has been created using the key with the following fingerprint:
|
||||
|
||||
@example
|
||||
83AA E47C E829 A414 6EF8 3420 CA86 8D4C 9914 9679
|
||||
@end example
|
||||
|
||||
Read the INSTALL file or the GNUstep-HOWTO for installation instructions.
|
||||
|
||||
@section Where do I send bug reports?
|
||||
|
||||
Please log bug reports on the GNUstep project page
|
||||
@url{http://savannah.gnu.org/bugs/?group=gnustep} or send bug
|
||||
reports to @email{bug-gnustep@@gnu.org}.
|
||||
|
||||
@section Obtaining GNUstep Software
|
||||
|
||||
Check out the GNUstep web site. (@url{http://www.gnustep.org/}) and the
|
||||
GNU web site. (@url{http://www.gnu.org/})
|
||||
|
|
|
@ -10,7 +10,10 @@ gnustep-config \- prints information about the current gnustep installation.
|
|||
.RB | \-\-objc-flags | \-\-objc-libs | \-\-base-libs | \-\-gui-libs " ]"
|
||||
.SH DESCRIPTION
|
||||
.B gnustep-config
|
||||
can print information about the currently installed GNUstep system. It can output dependend on the options used the different flags used for compilation, but also the different internal variables used by the make system.
|
||||
can print information about the currently installed GNUstep system. Output
|
||||
is generated dynamically based on environment variables such as
|
||||
GNUSTEP_CONFIG_FILE and GNUSTEP_MAKEFILES,
|
||||
though default values for these are generated when the tool is configured/installed. Output is primarily the locations in which various GNUstep resources are installed, but also provide flags used to build different types of GNUstep project.
|
||||
.SH OPTIONS
|
||||
.TP
|
||||
.BI \-\-variable= variable
|
||||
|
|
|
@ -3,7 +3,6 @@
|
|||
@c %**start of header
|
||||
@settitle GNUstep Filesystem Hierarchy Document
|
||||
@c %**end of header
|
||||
@setcontentsaftertitlepage
|
||||
@smallbook
|
||||
|
||||
@titlepage
|
||||
|
@ -24,10 +23,14 @@ any later version published by the Free Software Foundation.
|
|||
|
||||
@end titlepage
|
||||
|
||||
@node Top, The System Domain, (dir), (dir)
|
||||
@chapter GNUstep Filesystem Hierarchy
|
||||
@contents
|
||||
|
||||
|
||||
@node Top
|
||||
@top GNUstep Filesystem Hierarchy
|
||||
|
||||
@menu
|
||||
* Introduction::
|
||||
* The System Domain::
|
||||
* The Local Domain::
|
||||
* The Network Domain::
|
||||
|
@ -36,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,
|
||||
|
@ -81,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
|
||||
|
@ -103,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
|
||||
|
@ -123,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
|
||||
|
@ -149,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
|
||||
|
@ -165,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
|
||||
|
@ -190,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
|
||||
|
@ -232,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,
|
||||
|
@ -275,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
|
||||
|
@ -304,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
|
||||
|
@ -324,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
|
||||
|
@ -345,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
|
||||
|
@ -374,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
|
||||
|
@ -395,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
|
||||
|
@ -433,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}.
|
||||
|
@ -451,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
|
||||
|
@ -479,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.
|
||||
|
@ -497,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.
|
||||
|
@ -515,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.
|
||||
|
@ -533,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,
|
||||
|
@ -568,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
|
||||
|
@ -593,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
|
||||
|
@ -613,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
|
||||
|
@ -623,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.
|
||||
|
@ -632,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.
|
||||
|
@ -641,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
|
||||
|
@ -655,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.
|
||||
|
||||
|
@ -663,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
|
||||
|
@ -690,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
|
||||
|
@ -710,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
|
||||
|
@ -734,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
|
||||
|
@ -748,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,
|
||||
|
@ -766,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
|
||||
|
@ -794,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.
|
||||
|
@ -839,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
|
||||
|
@ -863,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
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
@settitle GNUstep HOWTO
|
||||
@c %**end of header
|
||||
@set HOWTO
|
||||
@setcontentsaftertitlepage
|
||||
@smallbook
|
||||
|
||||
@titlepage
|
||||
|
@ -18,6 +17,7 @@ the GNUstep core libraries.}
|
|||
|
||||
Last Update: @today{}
|
||||
|
||||
|
||||
@page
|
||||
@vskip 0pt plus 1filll
|
||||
Copyright @copyright{} 1996 - 2007 Free Software Foundation, Inc.
|
||||
|
@ -28,6 +28,8 @@ any later version published by the Free Software Foundation.
|
|||
|
||||
@end titlepage
|
||||
|
||||
@contents
|
||||
|
||||
@ifinfo
|
||||
@format
|
||||
GNUstep HOWTO
|
||||
|
@ -58,7 +60,7 @@ any later version published by the Free Software Foundation.
|
|||
* Additional Installation::
|
||||
* Tools and Applications::
|
||||
* Machine Specific::
|
||||
* Source via SVN::
|
||||
* Source via git::
|
||||
@end menu
|
||||
|
||||
@node Introduction, Preliminaries, Top, Top
|
||||
|
@ -458,31 +460,24 @@ openapp application_name [additional arguments to app]
|
|||
|
||||
Good Luck!
|
||||
|
||||
@node Machine Specific, Source via SVN, Tools and Applications, Top
|
||||
@node Machine Specific, Source via git, Tools and Applications, Top
|
||||
@chapter Machine Specific Instructions
|
||||
|
||||
A list of machines that GNUstep works on can be found on the GNUstep
|
||||
Wiki @url{http://wiki.gnustep.org/index.php/Platform_compatibility}.
|
||||
|
||||
@node Source via SVN, , Machine Specific, Top
|
||||
@chapter Getting Libraries via SVN
|
||||
@node Source via git, , Machine Specific, Top
|
||||
@chapter Getting Libraries via git
|
||||
|
||||
If you didn't get one of the snapshots, or if you want to be sure to
|
||||
stay on the bleading edge, then you should get the libraries via SVN. Go
|
||||
stay on the bleeding edge, then you should get the libraries via git. Go
|
||||
to @url{http://www.gnustep.org/resources/sources.html} for information on how
|
||||
to get the sourcecode.
|
||||
|
||||
If you haven't already done so, change to the directory, where you
|
||||
want the source to reside. To checkout all of the GNUstep repository,
|
||||
type
|
||||
To fetch all the GNUstep core libraries, you can clone the covenient @file{core}
|
||||
repository:
|
||||
@example
|
||||
svn co http://svn.gna.org/svn/gnustep/modules
|
||||
@end example
|
||||
|
||||
To check out only the @file{core}, which contains all the GNUstep core
|
||||
libraries:
|
||||
@example
|
||||
svn co http://svn.gna.org/svn/gnustep/modules/core
|
||||
git clone --recurse-submodules https://github.com/gnustep/core.git
|
||||
@end example
|
||||
|
||||
After you have checked out the source you can compile it as
|
||||
|
@ -490,10 +485,10 @@ usual. To update the source, go into the directory of the source tree
|
|||
you want to update, for example, go into 'base', and type:
|
||||
|
||||
@example
|
||||
svn update
|
||||
git pull
|
||||
@end example
|
||||
|
||||
You don't have to re-checkout after you have the source, just update!
|
||||
You don't have to re-checkout after you have the source, just pull!
|
||||
|
||||
@bye
|
||||
\bye
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
@settitle GNUstep Makefile Package
|
||||
@c %**end of header
|
||||
|
||||
@setcontentsaftertitlepage
|
||||
@smallbook
|
||||
@setchapternewpage odd
|
||||
|
||||
|
@ -38,11 +37,14 @@ under the terms of the GNU Free Documentation License, Version 1.1 or
|
|||
any later version published by the Free Software Foundation.
|
||||
|
||||
@end titlepage
|
||||
|
||||
@contents
|
||||
|
||||
@page
|
||||
|
||||
@c Makefile Package Chapter
|
||||
@node Top, Makefile Introduction, (dir), (dir)
|
||||
@chapter Makefile Package
|
||||
@top Makefile Package
|
||||
|
||||
@menu
|
||||
* Makefile Introduction::
|
||||
|
@ -56,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
|
||||
|
@ -66,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).
|
||||
|
||||
|
@ -96,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
|
||||
|
||||
|
@ -109,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
|
||||
|
@ -121,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
|
||||
|
@ -134,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
|
||||
|
@ -155,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::
|
||||
|
@ -189,8 +243,16 @@ two different types of projects within the same directory (e.g. a tool
|
|||
and a java program), include both the desired makefiles in your main
|
||||
make file.
|
||||
|
||||
The documentation for variables used to control each project type is
|
||||
provided at the start of each individual makefile (common.make and rules.make
|
||||
document more general variables).
|
||||
|
||||
The documentation for installing resources (a feature shared by many project
|
||||
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
|
||||
|
@ -203,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
|
||||
|
@ -258,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}.
|
||||
|
@ -285,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::
|
||||
|
@ -298,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
|
||||
|
@ -436,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.
|
||||
|
@ -504,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
|
||||
|
@ -531,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,
|
||||
|
@ -582,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::
|
||||
|
@ -594,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}).
|
||||
|
@ -620,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.
|
||||
|
@ -667,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
|
||||
|
@ -730,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
|
||||
|
@ -922,13 +984,23 @@ linker as the following example illustrates.
|
|||
ADDITIONAL_GUI_LIBS = -lMiscGui
|
||||
@end smallexample
|
||||
|
||||
@defvar GS_WITH_ARC
|
||||
@code{GS_WITH_ARC} may be set to 1 to say that Objective-C source code
|
||||
is to be compiled for ARC memory management. This variable must be set
|
||||
before @file{common.make} is included, and only works if the library
|
||||
combo includes the 'ng' runtime specification.
|
||||
@defvar ADDITIONAL_INSTALL_DIRS
|
||||
@code{ADDITIONAL_INSTALL_DIRS} is the list of additional directories
|
||||
that should be created when the Makefile Package installs the file for
|
||||
the project. These directories are only one that the project needs to
|
||||
be created but that the Makefile Package does not automatically
|
||||
create. The directories should be absolute paths but use the
|
||||
@code{GNUSTEP_LIBRARY} variable and other Makefile Package define
|
||||
variables, see @ref{Directory Paths}, so that the directories get
|
||||
created in the appropriate place relative to the other file installed
|
||||
for the project. The following example illustrates how two additional
|
||||
directories can be created during installation.
|
||||
@end defvar
|
||||
|
||||
@smallexample
|
||||
ADDITIONAL_INSTALL_DIRS = $(GNUSTEP_RESOURCES)/MyProject
|
||||
@end smallexample
|
||||
|
||||
@defvar LIBRARIES_DEPEND_UPON
|
||||
@code{LIBRARIES_DEPEND_UPON} is the set of libraries that the shared
|
||||
library depends upon, see @ref{library.make} for more information about
|
||||
|
@ -955,25 +1027,9 @@ additional user library.
|
|||
LIBRARIES_DEPEND_UPON = -lsimple $(FND_LIBS) $(OBJC_LIBS) $(SYSTEM_LIBS)
|
||||
@end smallexample
|
||||
|
||||
@defvar ADDITIONAL_INSTALL_DIRS
|
||||
@code{ADDITIONAL_INSTALL_DIRS} is the list of additional directories
|
||||
that should be created when the Makefile Package installs the file for
|
||||
the project. These directories are only one that the project needs to
|
||||
be created but that the Makefile Package does not automatically
|
||||
create. The directories should be absolute paths but use the
|
||||
@code{GNUSTEP_LIBRARY} variable and other Makefile Package define
|
||||
variables, see @ref{Directory Paths}, so that the directories get
|
||||
created in the appropriate place relative to the other file installed
|
||||
for the project. The following example illustrates how two additional
|
||||
directories can be created during installation.
|
||||
@end defvar
|
||||
|
||||
@smallexample
|
||||
ADDITIONAL_INSTALL_DIRS = $(GNUSTEP_RESOURCES)/MyProject
|
||||
@end smallexample
|
||||
|
||||
@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
|
||||
|
@ -989,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::
|
||||
|
@ -1009,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
|
||||
|
@ -1176,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
|
||||
|
@ -1259,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
|
||||
|
@ -1336,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
|
||||
|
@ -1355,6 +1411,29 @@ perform specific operations dependent upon the Objective-C Runtime
|
|||
library then this variable is the one to check.
|
||||
@end defvar
|
||||
|
||||
@defvar RUNTIME_VERSION
|
||||
@code{RUNTIME_VERSION} is set to and allows you to override the Objective-C
|
||||
runtime ABI in use by the clang compiler. Generally, gnustep-make will provide
|
||||
a sane default for you.Please be aware that mixing different ABIs in the same
|
||||
binary is not generally supported. Possible values:
|
||||
|
||||
@table @samp
|
||||
@item gcc
|
||||
This is the classic ABI also implemented by GCC which does not support advanced
|
||||
features such as ARC or non-fragile instance variables.
|
||||
|
||||
@item gnustep-1.8
|
||||
This is the first iteration of the GNUstep Objective-C ABI, which supports the
|
||||
advanced features while remaining compatible with the GCC ABI. Requires the
|
||||
GNUstep Objective-C runtime (libobjc2) 1.8 or later.
|
||||
|
||||
@item gnustep-2.0
|
||||
This version breaks compatibility with the older runtime ABIs in order to
|
||||
provide better introspection metadata, reduced memory usage and smaller
|
||||
binaries. Requires the GNUstep Objective-C runtime (libobjc2) 2.0 or later.
|
||||
@end table
|
||||
@end defvar
|
||||
|
||||
@defvar RUNTIME_DEFINE
|
||||
@code{RUNTIME_DEFINE} is assigned a preprocessor flag that can be
|
||||
passed to the compiler which defines a macro based upon the
|
||||
|
@ -1462,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
|
||||
|
@ -1549,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
|
||||
|
@ -1565,15 +1644,23 @@ However, there are some variables which, while not in provided in
|
|||
be documented here:
|
||||
|
||||
@defvar GS_WITH_ARC
|
||||
@code{GS_WITH_ARC = 1} turns on ARC for the current build if using the
|
||||
Next Generation runtime setting.
|
||||
This variable may be defined as an environment variable, or on the make
|
||||
command line, or (usually) at the start of GNUmakefile.
|
||||
@code{GS_WITH_ARC} may be set to 1 to turns on ARC for the current build if using the Next Generation runtime setting. This variable may be defined as an environment variable, or on the make command line, or (usually) in the GNUmakefile. The library-combo needs to specify the next generation runtime (eg ng-gnu-gnu) for this variable to take effect. When the ng runtme is used, setting this variable causes the the flags specified in ARC_OBJCFLAGS to be used when compiling any Objective-C source files). If no value is defined for @code{ARC_OBJCFLAGS} it is assumed to be '-fobjc-arc -fobjc-arc-exceptions' so that code is built with ARC enabled and with support for exceptions (objects are not leaked when an exception occurs). Alternatively, to switch on ARC for individual files, you can have a makefile fragment like this:
|
||||
@end defvar
|
||||
@smallexample
|
||||
ifeq ($(OBJC_RUNTIME_LIB), ng)
|
||||
file1.m_FILE_FLAGS += -DGS_WITH_ARC=1 -fobjc-arc -fobjc-arc-exceptions
|
||||
file2.m_FILE_FLAGS += -DGS_WITH_ARC=1 -fobjc-arc -fobjc-arc-exceptions
|
||||
file9.m_FILE_FLAGS += -DGS_WITH_ARC=1 -fobjc-arc -fobjc-arc-exceptions
|
||||
endif
|
||||
@end smallexample
|
||||
|
||||
@defvar ARC_CPPFLAGS
|
||||
@code{ARC_CPPFLAGS} sets the flags to defien preprocessor values be used when building code for ARC. This variable is used only if ng runtime is used and the @code{GS_WITH_ARC} variable is set to say that ARC is used.
|
||||
@end defvar
|
||||
|
||||
@defvar ARC_OBJCFLAGS
|
||||
@code{ARC_OBJCFLAGS} sets the compiler/linker flags to be used when building code for ARC. This variable is used only if ng runtime is used and the 'GS_WITH_ARC' variable is set to say that ARC is used. The -fobjc-arc flag enables ARC, but by default ARC_OBJCFLAGS is assumed to be -fobjc-arc -fobjc-arc-exceptions, which adds support for exceptions (reducing performance, but preventing leaked memory when an exception occurs).
|
||||
@end defvar
|
||||
The variable needs to be defined before @file{common.make} is included,
|
||||
and the library-combo needs to be ng-gnu-gnu for it to take effect (in
|
||||
which case it causes the -fobjc-arc flag to be used when compiling any
|
||||
Objective-C source files).
|
||||
|
||||
@defvar xxx_FILE_FILTER_OUT_FLAGS
|
||||
@code{xxx_FILE_FILTER_OUT_FLAGS} (where xxx is the file name, such as mframe.m)
|
||||
|
|
|
@ -17,7 +17,7 @@ option. With library combinations we mean the Objective-C runtime, the Foundatio
|
|||
.PP
|
||||
If you installed your
|
||||
.B GNUstep
|
||||
system in a non-flattened way all system dependend binaries are installed in subdirectories with
|
||||
system in a non-flattened way all system dependent binaries are installed in subdirectories with
|
||||
.I cpu/os/library-combo
|
||||
information. That means for instance that the
|
||||
.I gnustep-base
|
||||
|
@ -52,7 +52,7 @@ Until now three libraries provide or try to provide OpenStep compliant systems:
|
|||
If a program wants to work with all the possible combinations it will have to provide different binaries for each combination because it's not possible to have a tool compiled for NeXT Foundation that runs with gnustep-base or vice-versa. To summarize, a program can be compiled for these combinations:
|
||||
.TP
|
||||
.B Objective-C runtime
|
||||
ng (for GNUstep Next Generation), gnu (for
|
||||
ng (for GNUstep Next Generation with nonfragile API and ARC support etc), gnu (for
|
||||
.SM GNU
|
||||
, or for GNUstep without latest language features), apple (for Apple), nx (for NeXT)
|
||||
.TP
|
||||
|
@ -82,10 +82,6 @@ under Unix will be denoted by gnu\-gnu\-gnu. Here is a list of some of the possi
|
|||
ng gnu gnu
|
||||
.RS 0
|
||||
gnu fd gnu
|
||||
.RS 0
|
||||
gnugc gnu gnu
|
||||
.RS 0
|
||||
gnugc fd gnu
|
||||
.RS 0
|
||||
apple apple apple
|
||||
.RS 0
|
||||
|
@ -194,12 +190,12 @@ to reset all shell variables, then to source
|
|||
.B GNUstep.sh
|
||||
again. Let's assume we use gnu-gnu-gnu as our current
|
||||
.B LIBRARY_COMBO
|
||||
and we want to switch to gnugc\-gnu\-gnu, then we would use:
|
||||
and we want to switch to ng\-gnu\-gnu, then we would use:
|
||||
.PP
|
||||
.RS 0
|
||||
. /usr/GNUstep/System/Library/Makefiles/GNUstep-reset.sh
|
||||
.RS 0
|
||||
export LIBRARY_COMBO=gnugc\-gnu\-gnu
|
||||
export LIBRARY_COMBO=ng\-gnu\-gnu
|
||||
.RS 0
|
||||
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh
|
||||
|
||||
|
|
|
@ -9,6 +9,100 @@
|
|||
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
|
||||
|
||||
@item Add workaround for Clang bug on Windows MSVC when tests contain no Objective-C constructs.
|
||||
|
||||
@item Various fixes for minor issues introduced in the test framework by parallelisation mof testcase execution.
|
||||
|
||||
@end itemize
|
||||
|
||||
@section Changes in version @samp{2.9.0}
|
||||
|
||||
@itemize
|
||||
|
||||
@item Better check for objc runtime on Windows.
|
||||
|
||||
@item Split linker flags to better support partial linking: @code{ALL_LDFLAGS}
|
||||
is now a combination of @code{FINAL_LDFLAGS} and @code{ALL_LDFLAGS}.
|
||||
|
||||
@item Better support for newer gcc versions.
|
||||
|
||||
@item Add support for storyboard files.
|
||||
|
||||
@item Increase autoconf version to 2.65 and make autoconf handle Objective-C++
|
||||
and OBJCXX variables directly.
|
||||
|
||||
@item Fix bug that prevented ARC from getting used.
|
||||
|
||||
@item Link subproject object files directly instead of first merging them into
|
||||
@code{subproject.o}.
|
||||
|
||||
@item Support building on Windows with Clang MSVC target.
|
||||
|
||||
@item 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.
|
||||
|
||||
@end itemize
|
||||
|
||||
@section Changes in version @samp{2.8.0}
|
||||
|
||||
@itemize
|
||||
|
||||
@item 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 @code{--with-runtime-abi} configure option.
|
||||
|
||||
@item Full support for the gnustep-2.0 Objective-C ABI.
|
||||
|
||||
@item Support for creating a Git tag and creating a tarball from a git tag
|
||||
using the @code{git-tag} and @code{git-dist} targets.
|
||||
|
||||
@item Support for creating a Mercurial tag and creating a tarball from a hg
|
||||
tag using the @code{hg-tag} and @code{hg-dist} targets.
|
||||
|
||||
@item Dropped legacy Rhapsody and FreeBSD-out support.
|
||||
|
||||
@end itemize
|
||||
|
||||
@section Changes in version @samp{2.7.0}
|
||||
|
||||
Garbage collection support removed
|
||||
|
||||
ARC enabled by default if the ng runtime is used
|
||||
|
||||
Multi-architecture directory layout adjusted to be more Debian compatible
|
||||
|
||||
Framework support fixes
|
||||
|
||||
Various other minor bugfixes
|
||||
|
||||
@section Changes in version @samp{2.6.8}
|
||||
|
||||
Configure option '--with-library-combo=ng-gnu-gnu' to use the 'Next Generation' setup of the latest ObjectiveC-2 runtime and compiler features rather than traditional runtime. Requires the new runtime and a recent clang compiler.
|
||||
|
@ -25,8 +119,6 @@ The '--enable-strict-v2-mode' option is now, after eight years, turned on by def
|
|||
|
||||
Garbage collection support to be removed at the next release.
|
||||
|
||||
@ifclear ANNOUNCE-ONLY
|
||||
|
||||
@section Changes in version @samp{2.6.7}
|
||||
|
||||
Improved package building support
|
||||
|
|
|
@ -4,6 +4,86 @@ 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.
|
||||
|
||||
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).
|
||||
|
||||
@section 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 @code{GNUmakefile}s.
|
||||
|
||||
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 @code{subproject.o}.
|
||||
|
||||
We have also changed the way @code{OBJCXX} flags are handled, and increased the
|
||||
minimum version of autoconf used to 2.65. (The regenerated @code{configure} file
|
||||
will not handle runstatedir anymore.)
|
||||
|
||||
@section 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 @code{--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 @code{git-tag} and @code{git-dist} targets.
|
||||
|
||||
This release includes support for creating a Mercurial tag and creating a
|
||||
tarball from a hg tag using the @code{hg-tag} and @code{hg-dist} targets.
|
||||
|
||||
We have dropped legacy Rhapsody and FreeBSD-out support.
|
||||
|
||||
@section Version 2.7.0
|
||||
|
||||
When building non-flattened, the subdirectory name for libraries/binaries
|
||||
is changed for Debian compatibility (and simplicity) to use a directory
|
||||
whose name is of the form architecture/library-combo rather than nested
|
||||
directories of the form cpu/os-abi/library-combo. The architecture name
|
||||
format is a sanitised triplet cpu-os-abi (where previously we had cpu/os-abi).
|
||||
|
||||
When building non-flattened, header files are now installed in an architecture
|
||||
and library-combo dependent subdirectory in the same way that binary libraries
|
||||
are installed. This removes an inconsistency and makes sense with Debian
|
||||
multiarch support which puts headers in an architecture specific subdirectory.
|
||||
|
||||
The long since deprecated GNUSTEP_INSTALLATION_DIR is removed.
|
||||
|
||||
Various bugfixes and minor improvements.
|
||||
|
||||
@section Version 2.6.8
|
||||
|
||||
Configure option '--with-library-combo=ng-gnu-gnu' to use the 'Next Generation' setup of the latest ObjectiveC-2 runtime and compiler features rather than traditional runtime. Requires the new runtime and a recent clang compiler.
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
# Use this if you want GNUstep to blend into a Debian based GNU/Linux
|
||||
# filesystem (including related distributions like Ubuntu) and you are
|
||||
# compiling gnustep-make so that it can be shipped as part of the
|
||||
# istribution/basic system installation.
|
||||
# distribution/basic system installation.
|
||||
#
|
||||
# We put SYSTEM into /usr, and LOCAL into /usr/local. This allows you
|
||||
# to make a distinction between stuff that you ship as part of your
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -85,13 +85,15 @@ override GNUSTEP_TARGET_OS = @clean_target_os@
|
|||
override GNUSTEP_LIB_COMBO = @ac_cv_library_combo@
|
||||
|
||||
ifeq ($(GNUSTEP_IS_FLATTENED), no)
|
||||
override GNUSTEP_TARGET_DIR = $(GNUSTEP_TARGET_CPU)/$(GNUSTEP_TARGET_OS)
|
||||
override GNUSTEP_TARGET_DIR = $(GNUSTEP_TARGET_CPU)-$(GNUSTEP_TARGET_OS)
|
||||
override GNUSTEP_TARGET_LDIR = $(GNUSTEP_TARGET_DIR)/$(GNUSTEP_LIB_COMBO)
|
||||
override MAYBE_LIBRARY_COMBO = $(GNUSTEP_LIB_COMBO)
|
||||
override MAKE_CONFIG_DIR = $(GNUSTEP_TARGET_LDIR)
|
||||
else
|
||||
override GNUSTEP_TARGET_DIR = .
|
||||
override GNUSTEP_TARGET_LDIR = .
|
||||
override MAYBE_LIBRARY_COMBO = .
|
||||
override MAKE_CONFIG_DIR = .
|
||||
endif
|
||||
|
||||
export GNUSTEP_TARGET_DIR
|
||||
|
@ -135,7 +137,7 @@ INSTANCE_MAKE_FILES = \
|
|||
test-library.make test-tool.make tool.make
|
||||
|
||||
INSTANCE_SHARED_MAKE_FILES = bundle.make headers.make java.make \
|
||||
stamp-string.make strings.make
|
||||
pkgconfig.make stamp-string.make strings.make
|
||||
|
||||
INSTANCE_DOC_MAKE_FILES = autogsdoc.make gsdoc.make install_files.make \
|
||||
javadoc.make latex.make texi.make
|
||||
|
@ -190,7 +192,6 @@ install: generated-files
|
|||
echo "Creating makefile directories in: $(makedir)"; \
|
||||
"$(srcdir)/mkinstalldirs" \
|
||||
"$(makedir)" \
|
||||
"$(makedir)/$(GNUSTEP_TARGET_CPU)" \
|
||||
"$(makedir)/$(GNUSTEP_TARGET_DIR)" \
|
||||
"$(makedir)/$(GNUSTEP_TARGET_LDIR)" \
|
||||
"$(makedir)/Additional" \
|
||||
|
@ -215,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)"; \
|
||||
|
@ -246,7 +247,7 @@ install: generated-files
|
|||
$(INSTALL_DATA) -m 755 "$(srcdir)/bake_debian_files.sh" "$(makedir)"; \
|
||||
$(INSTALL_DATA) config-noarch.make "$(makedir)"; \
|
||||
$(INSTALL_DATA) filesystem.make "$(makedir)"; \
|
||||
$(INSTALL_DATA) config.make "$(makedir)/$(GNUSTEP_TARGET_LDIR)")
|
||||
$(INSTALL_DATA) config.make "$(makedir)/$(MAKE_CONFIG_DIR)")
|
||||
$(EC)(echo "Installing Test Framework scripts"; \
|
||||
$(INSTALL_PROGRAM) -m 755 TestFramework/gnustep-tests "$(tooldir)"; \
|
||||
$(INSTALL_PROGRAM) -m 755 $(srcdir)/TestFramework/Summary.sh "$(testdir)")
|
||||
|
@ -258,19 +259,19 @@ install: generated-files
|
|||
"$(srcdir)/mkinstalldirs" "$(mandir)/man1" \
|
||||
"$(mandir)/man7"; \
|
||||
$(INSTALL_DATA) "$(srcdir)/Documentation/debugapp.1" "$(mandir)/man1"; \
|
||||
which gzip > /dev/null 2>&1 && rm -f "$(mandir)/man1/debugapp.1.gz" && gzip -9 "$(mandir)/man1/debugapp.1"; \
|
||||
which gzip > /dev/null 2>&1 && rm -f "$(mandir)/man1/debugapp.1.gz" && gzip -9 -n "$(mandir)/man1/debugapp.1"; \
|
||||
$(INSTALL_DATA) "$(srcdir)/Documentation/gnustep-config.1" "$(mandir)/man1"; \
|
||||
which gzip > /dev/null 2>&1 && rm -f "$(mandir)/man1/gnustep-config.1.gz" && gzip -9 "$(mandir)/man1/gnustep-config.1"; \
|
||||
which gzip > /dev/null 2>&1 && rm -f "$(mandir)/man1/gnustep-config.1.gz" && gzip -9 -n "$(mandir)/man1/gnustep-config.1"; \
|
||||
$(INSTALL_DATA) "$(srcdir)/Documentation/gnustep-tests.1" "$(mandir)/man1"; \
|
||||
which gzip > /dev/null 2>&1 && rm -f "$(mandir)/man1/gnustep-tests.1.gz" && gzip -9 "$(mandir)/man1/gnustep-tests.1"; \
|
||||
which gzip > /dev/null 2>&1 && rm -f "$(mandir)/man1/gnustep-tests.1.gz" && gzip -9 -n "$(mandir)/man1/gnustep-tests.1"; \
|
||||
$(INSTALL_DATA) "$(srcdir)/Documentation/openapp.1" "$(mandir)/man1"; \
|
||||
which gzip > /dev/null 2>&1 && rm -f "$(mandir)/man1/openapp.1.gz" && gzip -9 "$(mandir)/man1/openapp.1"; \
|
||||
which gzip > /dev/null 2>&1 && rm -f "$(mandir)/man1/openapp.1.gz" && gzip -9 -n "$(mandir)/man1/openapp.1"; \
|
||||
$(INSTALL_DATA) "$(srcdir)/Documentation/opentool.1" "$(mandir)/man1"; \
|
||||
which gzip > /dev/null 2>&1 && rm -f "$(mandir)/man1/opentool.1.gz" && gzip -9 "$(mandir)/man1/opentool.1"; \
|
||||
which gzip > /dev/null 2>&1 && rm -f "$(mandir)/man1/opentool.1.gz" && gzip -9 -n "$(mandir)/man1/opentool.1"; \
|
||||
$(INSTALL_DATA) "$(srcdir)/Documentation/GNUstep.7" "$(mandir)/man7"; \
|
||||
which gzip > /dev/null 2>&1 && rm -f "$(mandir)/man7/GNUstep.7.gz" && gzip -9 "$(mandir)/man7/GNUstep.7"; \
|
||||
which gzip > /dev/null 2>&1 && rm -f "$(mandir)/man7/GNUstep.7.gz" && gzip -9 -n "$(mandir)/man7/GNUstep.7"; \
|
||||
$(INSTALL_DATA) "$(srcdir)/Documentation/library-combo.7" "$(mandir)/man7"; \
|
||||
which gzip > /dev/null 2>&1 && rm -f "$(mandir)/man7/library-combo.7.gz" && gzip -9 "$(mandir)/man7/library-combo.7")
|
||||
which gzip > /dev/null 2>&1 && rm -f "$(mandir)/man7/library-combo.7.gz" && gzip -9 -n "$(mandir)/man7/library-combo.7")
|
||||
$(EC)(if [ "@GNUSTEP_STRIP_MAKEFILES@" = "strip" ]; then \
|
||||
echo "Stripping makefiles and shell scripts..."; \
|
||||
cd "$(makedir)"; ./strip_makefiles.sh; \
|
||||
|
@ -331,10 +332,9 @@ uninstall:
|
|||
rm -f "$(makedir)/java-executable.template"
|
||||
rm -f "$(makedir)/nsi-app.template"
|
||||
rm -f "$(makedir)/bake_debian_files.sh"
|
||||
rm -f "$(GNUSTEP_SYSTEM_ROOT)/share/config.site"
|
||||
rm -f "$(makedir)/config-noarch.make"
|
||||
rm -f "$(makedir)/filesystem.make"
|
||||
rm -f "$(makedir)/$(GNUSTEP_TARGET_LDIR)/config.make"
|
||||
rm -f "$(makedir)/$(MAKE_CONFIG_DIR)/config.make"
|
||||
rm -f "$(GNUSTEP_CONFIG_FILE)"
|
||||
-rmdir "$(GNUSTEP_CONFIG_FILE_DIR)"
|
||||
-rmdir "$(testdir)"
|
||||
|
@ -347,6 +347,7 @@ uninstall:
|
|||
-rmdir "$(makedir)/$(GNUSTEP_TARGET_LDIR)"
|
||||
-rmdir "$(makedir)/$(GNUSTEP_TARGET_DIR)"
|
||||
-rmdir "$(makedir)/$(GNUSTEP_TARGET_CPU)"
|
||||
-rmdir "$(makedir)/$(GNUSTEP_LIB_COMBO)"
|
||||
-rmdir "$(makedir)"
|
||||
-rmdir "$(tooldir)"
|
||||
|
||||
|
@ -417,6 +418,56 @@ cvs-snapshot:
|
|||
tar --gzip -cf gnustep-make-$(GNUSTEP_MAKE_VERSION).tar.gz gnustep-make-$(GNUSTEP_MAKE_VERSION)
|
||||
rm -rf gnustep-make-$(GNUSTEP_MAKE_VERSION)
|
||||
|
||||
ifeq ($(GIT_TAG_SIGN), )
|
||||
GIT_TAG_ANNOTATION_FLAGS = -a
|
||||
else
|
||||
ifeq ($(GIT_TAG_SIGN), yes)
|
||||
GIT_TAG_ANNOTATION_FLAGS = -s
|
||||
else
|
||||
GIT_TAG_ANNOTATION_FLAGS = -u $(GIT_TAG_SIGN)
|
||||
endif
|
||||
endif
|
||||
|
||||
git-tag-stable:
|
||||
echo "*Error* tagging stable branch in Git is not supported at this time." && exit 1
|
||||
|
||||
ifeq ($(GIT_TAG_ANNOUNCE_FILE),)
|
||||
git-tag:
|
||||
git tag \
|
||||
$(GIT_TAG_ANNOTATION_FLAGS) \
|
||||
make-$(VERTAG) \
|
||||
-m "Release $(GNUSTEP_MAKE_VERSION)."
|
||||
else
|
||||
ifneq ($(GIT_TAG_ANNOUNCE_OMIT_PREFACE),yes)
|
||||
.INTERMEDIATE += git-tag-announce-file_$(GNUSTEP_MAKE_VERSION).tmp
|
||||
git-tag-announce-file_$(GNUSTEP_MAKE_VERSION).tmp: $(GIT_TAG_ANNOUNCE_FILE)
|
||||
printf "Release $(GNUSTEP_MAKE_VERSION).\n\n" > $@
|
||||
cat $(GIT_TAG_ANNOUNCE_FILE) >> $@
|
||||
|
||||
git-tag: git-tag-announce-file_$(GNUSTEP_MAKE_VERSION).tmp
|
||||
git tag \
|
||||
$(GIT_TAG_ANNOTATION_FLAGS) \
|
||||
make-$(VERTAG) \
|
||||
-F $<
|
||||
else
|
||||
git-tag:
|
||||
git tag \
|
||||
$(GIT_TAG_ANNOTATION_FLAGS) \
|
||||
make-$(VERTAG) \
|
||||
-F $(GIT_TAG_ANNOUNCE_FILE)
|
||||
endif
|
||||
endif
|
||||
|
||||
git-dist:
|
||||
git archive --format=tar.gz make-$(VERTAG) -o gnustep-make-$(GNUSTEP_MAKE_VERSION).tar.gz --prefix=gnustep-make-$(GNUSTEP_MAKE_VERSION)/
|
||||
|
||||
hg-tag:
|
||||
hg tag -m "Release $(PACKAGE_VERSION)" make-$(VERTAG)
|
||||
|
||||
hg-dist:
|
||||
hg archive -r make-$(VERTAG) -p gnustep-make-$(GNUSTEP_MAKE_VERSION)/ \
|
||||
gnustep-make-$(GNUSTEP_MAKE_VERSION).tar.gz
|
||||
|
||||
test-RPM_TOPDIR:
|
||||
@(if [ -z "$(RPM_TOPDIR)" ]; then \
|
||||
echo "Error - RPM_TOPDIR variable not set."; \
|
||||
|
|
1121
GNUstep-HOWTO
1121
GNUstep-HOWTO
File diff suppressed because it is too large
Load diff
|
@ -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.
|
|
@ -1,3 +1,4 @@
|
|||
|
||||
# This file must be sourced inside csh using: source
|
||||
#
|
||||
# @configure_input@
|
||||
|
@ -17,7 +18,7 @@
|
|||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 3
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
#
|
||||
# You should have received a copy of the GNU General Public
|
||||
# License along with this library; see the file COPYING.
|
||||
# If not, write to the Free Software Foundation,
|
||||
|
@ -126,6 +127,8 @@ if ( ! ${?LIBRARY_COMBO} ) then
|
|||
setenv LIBRARY_COMBO "@ac_cv_library_combo@"
|
||||
endif
|
||||
|
||||
setenv GNUSTEP_HAS_PKGCONFIG "@GNUSTEP_HAS_PKGCONFIG@"
|
||||
|
||||
if ( ! ${?GNUSTEP_MAKEFILES} ) then
|
||||
setenv GNUSTEP_MAKEFILES "@GNUSTEP_MAKEFILES@"
|
||||
endif
|
||||
|
@ -220,7 +223,7 @@ end
|
|||
foreach dir ( `/bin/sh -c 'IFS=:; for i in '"${GNUSTEP_TOOLS_PATHLIST}"'; do echo $i; done'` )
|
||||
set path_fragment="${dir}"
|
||||
if ( "${GNUSTEP_IS_FLATTENED}" == "no" ) then
|
||||
set path_fragment="${dir}:${dir}/${GNUSTEP_HOST_CPU}/${GNUSTEP_HOST_OS}/${LIBRARY_COMBO}:${dir}/${GNUSTEP_HOST_CPU}/${GNUSTEP_HOST_OS}"
|
||||
set path_fragment="${dir}:${dir}/${GNUSTEP_HOST_CPU}-${GNUSTEP_HOST_OS}/${LIBRARY_COMBO}:${dir}/${GNUSTEP_HOST_CPU}-${GNUSTEP_HOST_OS}"
|
||||
endif
|
||||
|
||||
if ( ! ${?PATH} ) then
|
||||
|
@ -238,7 +241,7 @@ foreach dir ( `/bin/sh -c 'IFS=:; for i in '"${GNUSTEP_LIBRARIES_PATHLIST}"'; do
|
|||
if ( "$GNUSTEP_IS_FLATTENED" == "yes" ) then
|
||||
set path_fragment="$dir"
|
||||
else
|
||||
set path_fragment="$dir/$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS/$LIBRARY_COMBO:$dir/$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS"
|
||||
set path_fragment="$dir/$GNUSTEP_HOST_CPU-$GNUSTEP_HOST_OS/$LIBRARY_COMBO:$dir/$GNUSTEP_HOST_CPU-$GNUSTEP_HOST_OS"
|
||||
endif
|
||||
|
||||
switch ( "${GNUSTEP_HOST_OS}" )
|
||||
|
@ -342,6 +345,31 @@ end
|
|||
|
||||
unset dir
|
||||
|
||||
if ( "${GNUSTEP_HAS_PKGCONFIG}" == "yes" ) then
|
||||
set GNUSTEP_PKGCONFIG_FRAGMENT=pkgconfig
|
||||
set GNUSTEP_PKGCONFIG_PATHLIST=`$GNUSTEP_MAKEFILES/print_unique_pathlist.sh "$GNUSTEP_USER_LIBRARIES" "$GNUSTEP_LOCAL_LIBRARIES" "$GNUSTEP_NETWORK_LIBRARIES" "$GNUSTEP_SYSTEM_LIBRARIES" $fixup_paths`
|
||||
foreach dir ( `/bin/sh -c 'IFS=:; for i in '"${GNUSTEP_PKGCONFIG_PATHLIST}"'; do echo $i; done'` )
|
||||
if ( "$GNUSTEP_IS_FLATTENED" == "yes" ) then
|
||||
set path_fragment="$dir/$GNUSTEP_PKGCONFIG_FRAGMENT"
|
||||
else
|
||||
set path_fragment="$dir/$GNUSTEP_HOST_CPU-$GNUSTEP_HOST_OS/$LIBRARY_COMBO/$GNUSTEP_PKGCONFIG_FRAGMENT:$dir/$GNUSTEP_HOST_CPU-$GNUSTEP_HOST_OS/$GNUSTEP_PKGCONFIG_FRAGMENT"
|
||||
endif
|
||||
|
||||
|
||||
if ( $?PKG_CONFIG_PATH == 0 ) then
|
||||
setenv PKG_CONFIG_PATH "${path_fragment}"
|
||||
else if ( { (echo ":${PKG_CONFIG_PATH}:"\
|
||||
|grep -v ":${path_fragment}:" >/dev/null) } ) then
|
||||
setenv PKG_CONFIG_PATH "${path_fragment}:${PKG_CONFIG_PATH}"
|
||||
endif
|
||||
|
||||
end
|
||||
unset path_fragment dir
|
||||
unset GNUSTEP_PKGCONFIG_PATHLIST GNUSTEP_PKGCONFIG_FRAGMENT
|
||||
|
||||
endif
|
||||
|
||||
|
||||
if ( "${GNUSTEP_MAKE_STRICT_V2_MODE}" == "yes" ) then
|
||||
unsetenv GNUSTEP_IS_FLATTENED
|
||||
unsetenv LIBRARY_COMBO
|
||||
|
@ -365,55 +393,54 @@ unset GNUSTEP_KEEP_USER_CONFIG_FILE
|
|||
|
||||
unsetenv GNUSTEP_USER_DEFAULTS_DIR
|
||||
|
||||
unsetenv GNUSTEP_SYSTEM_APPS
|
||||
unsetenv GNUSTEP_SYSTEM_ADMIN_APPS
|
||||
unsetenv GNUSTEP_SYSTEM_WEB_APPS
|
||||
unsetenv GNUSTEP_SYSTEM_TOOLS
|
||||
unsetenv GNUSTEP_SYSTEM_ADMIN_TOOLS
|
||||
unsetenv GNUSTEP_SYSTEM_APPS
|
||||
unsetenv GNUSTEP_SYSTEM_ADMIN_APPS
|
||||
unsetenv GNUSTEP_SYSTEM_WEB_APPS
|
||||
unsetenv GNUSTEP_SYSTEM_TOOLS
|
||||
unsetenv GNUSTEP_SYSTEM_ADMIN_TOOLS
|
||||
unsetenv GNUSTEP_SYSTEM_LIBRARY
|
||||
unsetenv GNUSTEP_SYSTEM_HEADERS
|
||||
unsetenv GNUSTEP_SYSTEM_LIBRARIES
|
||||
unsetenv GNUSTEP_SYSTEM_DOC
|
||||
unsetenv GNUSTEP_SYSTEM_HEADERS
|
||||
unsetenv GNUSTEP_SYSTEM_LIBRARIES
|
||||
unsetenv GNUSTEP_SYSTEM_DOC
|
||||
unsetenv GNUSTEP_SYSTEM_DOC_MAN
|
||||
unsetenv GNUSTEP_SYSTEM_DOC_INFO
|
||||
|
||||
unsetenv GNUSTEP_NETWORK_APPS
|
||||
unsetenv GNUSTEP_NETWORK_ADMIN_APPS
|
||||
unsetenv GNUSTEP_NETWORK_WEB_APPS
|
||||
unsetenv GNUSTEP_NETWORK_TOOLS
|
||||
unsetenv GNUSTEP_NETWORK_APPS
|
||||
unsetenv GNUSTEP_NETWORK_ADMIN_APPS
|
||||
unsetenv GNUSTEP_NETWORK_WEB_APPS
|
||||
unsetenv GNUSTEP_NETWORK_TOOLS
|
||||
unsetenv GNUSTEP_NETWORK_ADMIN_TOOLS
|
||||
unsetenv GNUSTEP_NETWORK_LIBRARY
|
||||
unsetenv GNUSTEP_NETWORK_HEADERS
|
||||
unsetenv GNUSTEP_NETWORK_LIBRARIES
|
||||
unsetenv GNUSTEP_NETWORK_DOC
|
||||
unsetenv GNUSTEP_NETWORK_HEADERS
|
||||
unsetenv GNUSTEP_NETWORK_LIBRARIES
|
||||
unsetenv GNUSTEP_NETWORK_DOC
|
||||
unsetenv GNUSTEP_NETWORK_DOC_MAN
|
||||
unsetenv GNUSTEP_NETWORK_DOC_INFO
|
||||
|
||||
unsetenv GNUSTEP_LOCAL_APPS
|
||||
unsetenv GNUSTEP_LOCAL_ADMIN_APPS
|
||||
unsetenv GNUSTEP_LOCAL_WEB_APPS
|
||||
unsetenv GNUSTEP_LOCAL_TOOLS
|
||||
unsetenv GNUSTEP_LOCAL_APPS
|
||||
unsetenv GNUSTEP_LOCAL_ADMIN_APPS
|
||||
unsetenv GNUSTEP_LOCAL_WEB_APPS
|
||||
unsetenv GNUSTEP_LOCAL_TOOLS
|
||||
unsetenv GNUSTEP_LOCAL_ADMIN_TOOLS
|
||||
unsetenv GNUSTEP_LOCAL_LIBRARY
|
||||
unsetenv GNUSTEP_LOCAL_HEADERS
|
||||
unsetenv GNUSTEP_LOCAL_LIBRARIES
|
||||
unsetenv GNUSTEP_LOCAL_DOC
|
||||
unsetenv GNUSTEP_LOCAL_HEADERS
|
||||
unsetenv GNUSTEP_LOCAL_LIBRARIES
|
||||
unsetenv GNUSTEP_LOCAL_DOC
|
||||
unsetenv GNUSTEP_LOCAL_DOC_MAN
|
||||
unsetenv GNUSTEP_LOCAL_DOC_INFO
|
||||
|
||||
unsetenv GNUSTEP_USER_APPS
|
||||
unsetenv GNUSTEP_USER_APPS
|
||||
unsetenv GNUSTEP_USER_ADMIN_APPS
|
||||
unsetenv GNUSTEP_USER_WEB_APPS
|
||||
unsetenv GNUSTEP_USER_TOOLS
|
||||
unsetenv GNUSTEP_USER_ADMIN_TOOLS
|
||||
unsetenv GNUSTEP_USER_TOOLS
|
||||
unsetenv GNUSTEP_USER_ADMIN_TOOLS
|
||||
unsetenv GNUSTEP_USER_LIBRARY
|
||||
unsetenv GNUSTEP_USER_HEADERS
|
||||
unsetenv GNUSTEP_USER_LIBRARIES
|
||||
unsetenv GNUSTEP_USER_DOC
|
||||
unsetenv GNUSTEP_USER_HEADERS
|
||||
unsetenv GNUSTEP_USER_LIBRARIES
|
||||
unsetenv GNUSTEP_USER_DOC
|
||||
unsetenv GNUSTEP_USER_DOC_MAN
|
||||
unsetenv GNUSTEP_USER_DOC_INFO
|
||||
|
||||
unsetenv GNUSTEP_SYSTEM_USERS_DIR
|
||||
unsetenv GNUSTEP_LOCAL_USERS_DIR
|
||||
unsetenv GNUSTEP_NETWORK_USERS_DIR
|
||||
|
||||
|
|
132
GNUstep.sh.in
132
GNUstep.sh.in
|
@ -1,3 +1,4 @@
|
|||
|
||||
# This file must be sourced inside (ba)sh using: .
|
||||
#
|
||||
# @configure_input@
|
||||
|
@ -17,7 +18,7 @@
|
|||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 3
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
#
|
||||
# You should have received a copy of the GNU General Public
|
||||
# License along with this library; see the file COPYING.
|
||||
# If not, write to the Free Software Foundation,
|
||||
|
@ -104,7 +105,7 @@ GNUSTEP_HOME=~
|
|||
# Read the user configuration file ... unless it is disabled (ie, set
|
||||
# to an empty string)
|
||||
if [ -n "$GNUSTEP_USER_CONFIG_FILE" ]; then
|
||||
case "$GNUSTEP_USER_CONFIG_FILE" in
|
||||
case "$GNUSTEP_USER_CONFIG_FILE" in
|
||||
/*) # An absolute path
|
||||
if [ -f "$GNUSTEP_USER_CONFIG_FILE" ]; then
|
||||
. "$GNUSTEP_USER_CONFIG_FILE"
|
||||
|
@ -168,6 +169,9 @@ if [ ! "$GNUSTEP_MAKE_STRICT_V2_MODE" = "yes" ]; then
|
|||
# is defined - at the end of the script.
|
||||
fi
|
||||
|
||||
|
||||
GNUSTEP_HAS_PKGCONFIG=@GNUSTEP_HAS_PKGCONFIG@
|
||||
|
||||
if [ -z "$GNUSTEP_MAKEFILES" ]; then
|
||||
GNUSTEP_MAKEFILES=@GNUSTEP_MAKEFILES@
|
||||
fi
|
||||
|
@ -189,7 +193,7 @@ else
|
|||
# Set GNUSTEP_USER_ROOT which is the variable used in practice.
|
||||
# GNUSTEP_USER_ROOT is deprecated and will be removed
|
||||
#
|
||||
case "$GNUSTEP_USER_DIR" in
|
||||
case "$GNUSTEP_USER_DIR" in
|
||||
/*) # An absolute path
|
||||
GNUSTEP_USER_ROOT="$GNUSTEP_USER_DIR";;
|
||||
*) # Something else
|
||||
|
@ -243,7 +247,7 @@ if [ -z "$GNUSTEP_HOST_VENDOR" ]; then
|
|||
GNUSTEP_HOST_VENDOR=`$GNUSTEP_MAKEFILES/clean_vendor.sh $GNUSTEP_HOST_VENDOR`
|
||||
fi
|
||||
|
||||
if [ -z "$GNUSTEP_HOST_OS" ]; then
|
||||
if [ -z "$GNUSTEP_HOST_OS" ]; then
|
||||
GNUSTEP_HOST_OS=`$GNUSTEP_MAKEFILES/os.sh $GNUSTEP_HOST`
|
||||
GNUSTEP_HOST_OS=`$GNUSTEP_MAKEFILES/clean_os.sh $GNUSTEP_HOST_OS`
|
||||
fi
|
||||
|
@ -332,7 +336,7 @@ for dir in $GNUSTEP_TOOLS_PATHLIST; do
|
|||
|
||||
# Prepare the path_fragment
|
||||
if [ "$GNUSTEP_IS_FLATTENED" = "no" ]; then
|
||||
path_fragment="$dir:$dir/${GNUSTEP_HOST_CPU}/${GNUSTEP_HOST_OS}/${LIBRARY_COMBO}:$dir/${GNUSTEP_HOST_CPU}/${GNUSTEP_HOST_OS}"
|
||||
path_fragment="$dir:$dir/${GNUSTEP_HOST_CPU}-${GNUSTEP_HOST_OS}/${LIBRARY_COMBO}:$dir/${GNUSTEP_HOST_CPU}-${GNUSTEP_HOST_OS}"
|
||||
else
|
||||
path_fragment="$dir"
|
||||
fi
|
||||
|
@ -366,7 +370,7 @@ IFS=:
|
|||
if [ "$GNUSTEP_IS_FLATTENED" = "yes" ]; then
|
||||
path_fragment="$dir"
|
||||
else
|
||||
path_fragment="$dir/$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS/$LIBRARY_COMBO:$dir/$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS"
|
||||
path_fragment="$dir/$GNUSTEP_HOST_CPU-$GNUSTEP_HOST_OS/$LIBRARY_COMBO:$dir/$GNUSTEP_HOST_CPU-$GNUSTEP_HOST_OS"
|
||||
fi
|
||||
|
||||
# Append the path_fragment to lib_paths ... in a different way,
|
||||
|
@ -441,7 +445,7 @@ case "$GNUSTEP_HOST_OS" in
|
|||
|
||||
# The code below has been temporarily removed, because...
|
||||
# Frameworks in GNUstep-make are supported by creating a link like
|
||||
#
|
||||
#
|
||||
# Libraries/libMyFramework.dylib ->
|
||||
# Frameworks/MyFramework.framework/Versions/Current/libMyFramework.dylib,
|
||||
#
|
||||
|
@ -459,7 +463,7 @@ case "$GNUSTEP_HOST_OS" in
|
|||
#
|
||||
# if [ "$LIBRARY_COMBO" = "apple-apple-apple" -o \
|
||||
# "$LIBRARY_COMBO" = "apple" ]; then
|
||||
|
||||
|
||||
if [ -z "$DYLD_FRAMEWORK_PATH" ]; then
|
||||
DYLD_FRAMEWORK_PATH="$path_fragment"
|
||||
else
|
||||
|
@ -548,6 +552,44 @@ unset dir
|
|||
unset GNUSTEP_INFO_PATHLIST
|
||||
export INFOPATH
|
||||
|
||||
if [ "$GNUSTEP_HAS_PKGCONFIG" = "yes" ]; then
|
||||
# Determine the library paths
|
||||
GNUSTEP_PKGCONFIG_PATHLIST=`$GNUSTEP_MAKEFILES/print_unique_pathlist.sh "$GNUSTEP_USER_LIBRARIES" "$GNUSTEP_LOCAL_LIBRARIES" "$GNUSTEP_NETWORK_LIBRARIES" "$GNUSTEP_SYSTEM_LIBRARIES" $fixup_paths`
|
||||
|
||||
old_IFS="$IFS"
|
||||
IFS=:
|
||||
GNUSTEP_PKGCONFIG_FRAGMENT=pkgconfig
|
||||
|
||||
for dir in $GNUSTEP_PKGCONFIG_PATHLIST; do
|
||||
|
||||
# prepare the path_fragment for libraries and this dir
|
||||
if [ "$GNUSTEP_IS_FLATTENED" = "yes" ]; then
|
||||
path_fragment="$dir/$GNUSTEP_PKGCONFIG_FRAGMENT"
|
||||
else
|
||||
path_fragment="$dir/$GNUSTEP_HOST_CPU-$GNUSTEP_HOST_OS/$LIBRARY_COMBO/$GNUSTEP_PKGCONFIG_FRAGMENT:$dir/$GNUSTEP_HOST_CPU-$GNUSTEP_HOST_OS/$GNUSTEP_PKGCONFIG_FRAGMENT"
|
||||
fi
|
||||
|
||||
if [ -z "$PKG_CONFIG_PATH" ]; then
|
||||
PKG_CONFIG_PATH="$path_fragment"
|
||||
else
|
||||
if ( echo ":${PKG_CONFIG_PATH}:"\
|
||||
|grep -v ":${path_fragment}:" >/dev/null ); then
|
||||
PKG_CONFIG_PATH="$path_fragment:$PKG_CONFIG_PATH"
|
||||
fi
|
||||
fi
|
||||
export PKG_CONFIG_PATH
|
||||
|
||||
done
|
||||
IFS="$old_IFS"
|
||||
unset old_IFS
|
||||
unset dir
|
||||
unset path_fragment
|
||||
|
||||
unset GNUSTEP_PKGCONFIG_FRAGMENT
|
||||
unset GNUSTEP_PKGCONFIG_PATHLIST
|
||||
unset GNUSTEP_HAS_PKGCONFIG
|
||||
fi # [ "$GNUSTEP_HAS_PKGCONFIG" = "yes" ]
|
||||
|
||||
#
|
||||
# Clean up the environment by removing the filesystem variables. Do
|
||||
# it unless we were explicitly requested not to clean it up! Mostly
|
||||
|
@ -568,19 +610,19 @@ if [ -n "$GNUSTEP_SH_EXPORT_ALL_VARIABLES" ]; then
|
|||
export GNUSTEP_IS_FLATTENED LIBRARY_COMBO
|
||||
export GNUSTEP_HOST GNUSTEP_HOST_CPU GNUSTEP_HOST_VENDOR GNUSTEP_HOST_OS
|
||||
|
||||
export GNUSTEP_SYSTEM_APPS GNUSTEP_SYSTEM_ADMIN_APPS GNUSTEP_SYSTEM_WEB_APPS GNUSTEP_SYSTEM_TOOLS GNUSTEP_SYSTEM_ADMIN_TOOLS
|
||||
export GNUSTEP_SYSTEM_APPS GNUSTEP_SYSTEM_ADMIN_APPS GNUSTEP_SYSTEM_WEB_APPS GNUSTEP_SYSTEM_TOOLS GNUSTEP_SYSTEM_ADMIN_TOOLS
|
||||
export GNUSTEP_SYSTEM_LIBRARY GNUSTEP_SYSTEM_HEADERS GNUSTEP_SYSTEM_LIBRARIES
|
||||
export GNUSTEP_SYSTEM_DOC GNUSTEP_SYSTEM_DOC_MAN GNUSTEP_SYSTEM_DOC_INFO
|
||||
|
||||
export GNUSTEP_NETWORK_APPS GNUSTEP_NETWORK_ADMIN_APPS GNUSTEP_NETWORK_WEB_APPS GNUSTEP_NETWORK_TOOLS GNUSTEP_NETWORK_ADMIN_TOOLS
|
||||
export GNUSTEP_NETWORK_APPS GNUSTEP_NETWORK_ADMIN_APPS GNUSTEP_NETWORK_WEB_APPS GNUSTEP_NETWORK_TOOLS GNUSTEP_NETWORK_ADMIN_TOOLS
|
||||
export GNUSTEP_NETWORK_LIBRARY GNUSTEP_NETWORK_HEADERS GNUSTEP_NETWORK_LIBRARIES
|
||||
export GNUSTEP_NETWORK_DOC GNUSTEP_NETWORK_DOC_MAN GNUSTEP_NETWORK_DOC_INFO
|
||||
|
||||
export GNUSTEP_LOCAL_APPS GNUSTEP_LOCAL_ADMIN_APPS GNUSTEP_LOCAL_WEB_APPS GNUSTEP_LOCAL_TOOLS GNUSTEP_LOCAL_ADMIN_TOOLS
|
||||
export GNUSTEP_LOCAL_APPS GNUSTEP_LOCAL_ADMIN_APPS GNUSTEP_LOCAL_WEB_APPS GNUSTEP_LOCAL_TOOLS GNUSTEP_LOCAL_ADMIN_TOOLS
|
||||
export GNUSTEP_LOCAL_LIBRARY GNUSTEP_LOCAL_HEADERS GNUSTEP_LOCAL_LIBRARIES
|
||||
export GNUSTEP_LOCAL_DOC GNUSTEP_LOCAL_DOC_MAN GNUSTEP_LOCAL_DOC_INFO
|
||||
|
||||
export GNUSTEP_USER_APPS GNUSTEP_USER_ADMIN_APPS GNUSTEP_USER_WEB_APPS GNUSTEP_USER_TOOLS GNUSTEP_USER_ADMIN_TOOLS
|
||||
export GNUSTEP_USER_APPS GNUSTEP_USER_ADMIN_APPS GNUSTEP_USER_WEB_APPS GNUSTEP_USER_TOOLS GNUSTEP_USER_ADMIN_TOOLS
|
||||
export GNUSTEP_USER_LIBRARY GNUSTEP_USER_HEADERS GNUSTEP_USER_LIBRARIES
|
||||
export GNUSTEP_USER_DOC GNUSTEP_USER_DOC_MAN GNUSTEP_USER_DOC_INFO
|
||||
|
||||
|
@ -602,7 +644,7 @@ else
|
|||
if [ -z "$GNUSTEP_KEEP_CONFIG_FILE" ]; then
|
||||
unset GNUSTEP_CONFIG_FILE
|
||||
fi
|
||||
unset GNUSTEP_KEEP_CONFIG_FILE
|
||||
unset GNUSTEP_KEEP_CONFIG_FILE
|
||||
|
||||
if [ -z "$GNUSTEP_KEEP_USER_CONFIG_FILE" ]; then
|
||||
unset GNUSTEP_USER_CONFIG_FILE
|
||||
|
@ -612,51 +654,51 @@ else
|
|||
# Always unset these variables
|
||||
unset GNUSTEP_USER_DEFAULTS_DIR
|
||||
|
||||
unset GNUSTEP_SYSTEM_APPS
|
||||
unset GNUSTEP_SYSTEM_ADMIN_APPS
|
||||
unset GNUSTEP_SYSTEM_WEB_APPS
|
||||
unset GNUSTEP_SYSTEM_TOOLS
|
||||
unset GNUSTEP_SYSTEM_ADMIN_TOOLS
|
||||
unset GNUSTEP_SYSTEM_APPS
|
||||
unset GNUSTEP_SYSTEM_ADMIN_APPS
|
||||
unset GNUSTEP_SYSTEM_WEB_APPS
|
||||
unset GNUSTEP_SYSTEM_TOOLS
|
||||
unset GNUSTEP_SYSTEM_ADMIN_TOOLS
|
||||
unset GNUSTEP_SYSTEM_LIBRARY
|
||||
unset GNUSTEP_SYSTEM_HEADERS
|
||||
unset GNUSTEP_SYSTEM_LIBRARIES
|
||||
unset GNUSTEP_SYSTEM_DOC
|
||||
unset GNUSTEP_SYSTEM_HEADERS
|
||||
unset GNUSTEP_SYSTEM_LIBRARIES
|
||||
unset GNUSTEP_SYSTEM_DOC
|
||||
unset GNUSTEP_SYSTEM_DOC_MAN
|
||||
unset GNUSTEP_SYSTEM_DOC_INFO
|
||||
|
||||
unset GNUSTEP_NETWORK_APPS
|
||||
unset GNUSTEP_NETWORK_ADMIN_APPS
|
||||
unset GNUSTEP_NETWORK_WEB_APPS
|
||||
unset GNUSTEP_NETWORK_TOOLS
|
||||
unset GNUSTEP_NETWORK_ADMIN_TOOLS
|
||||
unset GNUSTEP_NETWORK_APPS
|
||||
unset GNUSTEP_NETWORK_ADMIN_APPS
|
||||
unset GNUSTEP_NETWORK_WEB_APPS
|
||||
unset GNUSTEP_NETWORK_TOOLS
|
||||
unset GNUSTEP_NETWORK_ADMIN_TOOLS
|
||||
unset GNUSTEP_NETWORK_LIBRARY
|
||||
unset GNUSTEP_NETWORK_HEADERS
|
||||
unset GNUSTEP_NETWORK_LIBRARIES
|
||||
unset GNUSTEP_NETWORK_DOC
|
||||
unset GNUSTEP_NETWORK_HEADERS
|
||||
unset GNUSTEP_NETWORK_LIBRARIES
|
||||
unset GNUSTEP_NETWORK_DOC
|
||||
unset GNUSTEP_NETWORK_DOC_MAN
|
||||
unset GNUSTEP_NETWORK_DOC_INFO
|
||||
|
||||
unset GNUSTEP_LOCAL_APPS
|
||||
unset GNUSTEP_LOCAL_ADMIN_APPS
|
||||
unset GNUSTEP_LOCAL_WEB_APPS
|
||||
unset GNUSTEP_LOCAL_TOOLS
|
||||
unset GNUSTEP_LOCAL_ADMIN_TOOLS
|
||||
unset GNUSTEP_LOCAL_APPS
|
||||
unset GNUSTEP_LOCAL_ADMIN_APPS
|
||||
unset GNUSTEP_LOCAL_WEB_APPS
|
||||
unset GNUSTEP_LOCAL_TOOLS
|
||||
unset GNUSTEP_LOCAL_ADMIN_TOOLS
|
||||
unset GNUSTEP_LOCAL_LIBRARY
|
||||
unset GNUSTEP_LOCAL_HEADERS
|
||||
unset GNUSTEP_LOCAL_LIBRARIES
|
||||
unset GNUSTEP_LOCAL_DOC
|
||||
unset GNUSTEP_LOCAL_HEADERS
|
||||
unset GNUSTEP_LOCAL_LIBRARIES
|
||||
unset GNUSTEP_LOCAL_DOC
|
||||
unset GNUSTEP_LOCAL_DOC_MAN
|
||||
unset GNUSTEP_LOCAL_DOC_INFO
|
||||
|
||||
unset GNUSTEP_USER_APPS
|
||||
unset GNUSTEP_USER_ADMIN_APPS
|
||||
unset GNUSTEP_USER_WEB_APPS
|
||||
unset GNUSTEP_USER_TOOLS
|
||||
unset GNUSTEP_USER_ADMIN_TOOLS
|
||||
unset GNUSTEP_USER_APPS
|
||||
unset GNUSTEP_USER_ADMIN_APPS
|
||||
unset GNUSTEP_USER_WEB_APPS
|
||||
unset GNUSTEP_USER_TOOLS
|
||||
unset GNUSTEP_USER_ADMIN_TOOLS
|
||||
unset GNUSTEP_USER_LIBRARY
|
||||
unset GNUSTEP_USER_HEADERS
|
||||
unset GNUSTEP_USER_LIBRARIES
|
||||
unset GNUSTEP_USER_DOC
|
||||
unset GNUSTEP_USER_HEADERS
|
||||
unset GNUSTEP_USER_LIBRARIES
|
||||
unset GNUSTEP_USER_DOC
|
||||
unset GNUSTEP_USER_DOC_MAN
|
||||
unset GNUSTEP_USER_DOC_INFO
|
||||
|
||||
|
|
138
INSTALL
138
INSTALL
|
@ -5,22 +5,25 @@
|
|||
================
|
||||
|
||||
If you are installing this package as part of the GNUstep core
|
||||
libraries, read the file GNUstep-HOWTO for more complete instructions
|
||||
on how to install the entire GNUstep package (including this package).
|
||||
libraries, read the file GNUstep-HOWTO for more complete instructions on
|
||||
how to install the entire GNUstep package (including this package).
|
||||
GNUstep-HOWTO comes with this distribution.
|
||||
|
||||
This should be the first GNUstep package you install. Before
|
||||
This should be the first GNUstep package you install. Before
|
||||
installing this package, install ffcall or libffi and any other
|
||||
libraries that GNUstep may need (see the GNUstep-HOWTO). Read and
|
||||
follow the instructions on setting up the GNUstep environement below.
|
||||
Then install gnustep-base.
|
||||
libraries that GNUstep may need (see the GNUstep-HOWTO). Read and follow
|
||||
the instructions on setting up the GNUstep environement below. Then
|
||||
install gnustep-base.
|
||||
|
||||
Make sure you've read the machine-specific instructions for your
|
||||
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'.
|
||||
<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,20 +47,41 @@ 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
|
||||
=================
|
||||
|
||||
The GNUstep packages uses the Autoconf mechanism for configuration; it
|
||||
checks some host capabilties which are used by all GNUstep software.
|
||||
To configure just type:
|
||||
checks some host capabilties which are used by all GNUstep software. To
|
||||
configure just type:
|
||||
|
||||
./configure
|
||||
|
||||
The GNUstep makefile package needs to know which filesystem layout to
|
||||
use when installing; this determines the way that various directories
|
||||
in the GNUstep domains (SYSTEM, NETWORK, LOCAL, USER) are mapped to
|
||||
local directories on disk. In the FilesystemLayouts/README file you
|
||||
can find detailed information on filesystem layouts.
|
||||
use when installing; this determines the way that various directories in
|
||||
the GNUstep domains (SYSTEM, NETWORK, LOCAL, USER) are mapped to local
|
||||
directories on disk. In the FilesystemLayouts/README file you can find
|
||||
detailed information on filesystem layouts.
|
||||
|
||||
To specify a filesystem layout, use the -with-layout=xxx option. The
|
||||
default is
|
||||
|
@ -66,9 +90,9 @@ default is
|
|||
|
||||
which installs GNUstep in /usr/local using the FHS layout (that is,
|
||||
/usr/local/bin, /usr/local/lib, etc). Another popular option is
|
||||
'-with-layout=gnustep' which installs gnustep-make into a GNUstep
|
||||
layout based on /usr/GNUstep (inside /usr/GNUstep/System,
|
||||
/usr/GNUstep/Local). Check the FilesystemLayouts for more options.
|
||||
'-with-layout=gnustep' which installs gnustep-make into a GNUstep layout
|
||||
based on /usr/GNUstep (inside /usr/GNUstep/System, /usr/GNUstep/Local).
|
||||
Check the FilesystemLayouts for more options.
|
||||
|
||||
If you want to install the same layout but in a different location
|
||||
(for example, /opt/gnustep), you can use -prefix=xxx,
|
||||
|
@ -76,9 +100,9 @@ layout based on /usr/GNUstep (inside /usr/GNUstep/System,
|
|||
./configure --prefix=/opt/gnustep
|
||||
|
||||
If you're confused and want to see exactly what directories will be
|
||||
used for a certain choice of ./configure flags, you can check the
|
||||
output of ./configure or even have a look at the GNUstep.conf file that
|
||||
is generated by ./configure. It will list the full paths to all the
|
||||
used for a certain choice of ./configure flags, you can check the output
|
||||
of ./configure or even have a look at the GNUstep.conf file that is
|
||||
generated by ./configure. It will list the full paths to all the
|
||||
relevant GNUstep directories that would be used if you install the
|
||||
software with that configuration.
|
||||
|
||||
|
@ -87,11 +111,11 @@ software with that configuration.
|
|||
./configure --help
|
||||
|
||||
Look particularly at the end of the list that configure gives, as
|
||||
these options are specific to GNUstep. Some of these are described
|
||||
these options are specific to GNUstep. Some of these are described
|
||||
below.
|
||||
|
||||
With the GNUstep packages you can use various switches, such as
|
||||
shared and debug, to control compilation. for example, "make shared=no
|
||||
shared and debug, to control compilation. for example, "make shared=no
|
||||
debug=yes" compiles using static libraries with debugging information.
|
||||
(Make sure you use the same switches for every package you compile, and
|
||||
also when you install).
|
||||
|
@ -100,10 +124,10 @@ also when you install).
|
|||
---------------------
|
||||
|
||||
By default, the gnustep-make package specifies that GUI backends are
|
||||
built as a bundle and loaded in at runtime. This allows one to switch
|
||||
backends by simply redefining a user default. If you do not want this
|
||||
behavior (for instance, if bundles do not work on your platform), it
|
||||
can be disabled using
|
||||
built as a bundle and loaded in at runtime. This allows one to switch
|
||||
backends by simply redefining a user default. If you do not want this
|
||||
behavior (for instance, if bundles do not work on your platform), it can
|
||||
be disabled using
|
||||
|
||||
--disable-backend-bundle
|
||||
|
||||
|
@ -117,7 +141,7 @@ with-library-combo option.
|
|||
|
||||
./configure --with-library-combo=apple-gnu-gnu
|
||||
|
||||
to compile with Apple's runtime on Darwin, for example. See the
|
||||
to compile with Apple's runtime on Darwin, for example. See the
|
||||
DESIGN document for more examples of the variety of library combos.
|
||||
|
||||
1.2.3 Alternate Thread Library
|
||||
|
@ -129,11 +153,11 @@ library is) with the with-thread-lib option.
|
|||
|
||||
./configure --with-thread-lib="-L/usr/local/lib -lgthread -lglib"
|
||||
|
||||
to use libgthread as your threading library. Note that the
|
||||
to use libgthread as your threading library. Note that the
|
||||
Objective-C runtime (libobjc) must have a compatible threading backend
|
||||
in order to use this threading library and you must set the appropriate
|
||||
threading backend by hand in the GNUmakefile if you are using
|
||||
gnustep-objc. If you also need to set compiler flags, use the CPPFLAGS
|
||||
gnustep-objc. If you also need to set compiler flags, use the CPPFLAGS
|
||||
variable when calling configure:
|
||||
|
||||
CPPFLAGS="-I/usr/local/include" ./configure --with-thread-lib="-L/usr/local/lib -lgthread -lglib"
|
||||
|
@ -141,15 +165,15 @@ variable when calling configure:
|
|||
1.2.4 Configuring for a non-flattened structure
|
||||
-----------------------------------------------
|
||||
|
||||
GNUstep is normally configured to support a single target/combo. If you
|
||||
GNUstep is normally configured to support a single target/combo. If you
|
||||
are interested in supporting more than one target and/or combo, it's
|
||||
possible to configure GNUstep to use a non-'flattened' directory
|
||||
structure. You do this by supplying the `--disable-flattened' argument
|
||||
structure. You do this by supplying the '--disable-flattened' argument
|
||||
to configure. You might also want to supply the
|
||||
`--enable-multi-platform' option.
|
||||
'--enable-multi-platform' option.
|
||||
|
||||
In a flattened structure, files are stored at the top-level rather
|
||||
than in a `$(GNUSTEP_CPU)/$(GNUSTEP_OS)/$(LIBRARY_COMBO)' subdirectory.
|
||||
than in a '$(GNUSTEP_CPU)/$(GNUSTEP_OS)/$(LIBRARY_COMBO)' subdirectory.
|
||||
|
||||
1.2.5 Configuring for a cross-compile target
|
||||
--------------------------------------------
|
||||
|
@ -159,18 +183,18 @@ executables for the same host that you are compiling on; however, the
|
|||
GNUstep makefile package has been designed to support cross-compiling
|
||||
just as easily as normal compiling. In order to add a cross-compile
|
||||
target to the GNUstep makefile package, you must rerun configure for
|
||||
that target and reinstall the makefile package. By rerunning
|
||||
configure, the appropriate target settings are determined, and
|
||||
reinstalling the makefile package installs the appropriate files for
|
||||
that target. The target parameter is used to specify the target
|
||||
platform for cross-compiling:
|
||||
that target and reinstall the makefile package. By rerunning configure,
|
||||
the appropriate target settings are determined, and reinstalling the
|
||||
makefile package installs the appropriate files for that target. The
|
||||
target parameter is used to specify the target platform for
|
||||
cross-compiling:
|
||||
|
||||
./configure --target=i386-mingw32
|
||||
make install
|
||||
|
||||
GNUstep normally is configured to work with only one target. To work
|
||||
with multiple targets, you'll need to add `--disable-flattened' and
|
||||
`--enable-multi-platform' to the configure flags. Files for the
|
||||
GNUstep normally is configured to work with only one target. To work
|
||||
with multiple targets, you'll need to add '--disable-flattened' and
|
||||
'--enable-multi-platform' to the configure flags. Files for the
|
||||
different targets will not be overwritten when you configure and install
|
||||
the make package several times.
|
||||
|
||||
|
@ -219,8 +243,8 @@ shell/linker.
|
|||
precise simplified instructions for your layout.
|
||||
|
||||
In general, you need to your GNUSTEP_SYSTEM_TOOLS,
|
||||
GNUSTEP_NETWORK_TOOLS and GNUSTEP_LOCAL_TOOLS to your PATH, and add
|
||||
your GNUSTEP_SYSTEM_LIBRARIES, GNUSTEP_NETWORK_LIBRARIES and
|
||||
GNUSTEP_NETWORK_TOOLS and GNUSTEP_LOCAL_TOOLS to your PATH, and add your
|
||||
GNUSTEP_SYSTEM_LIBRARIES, GNUSTEP_NETWORK_LIBRARIES and
|
||||
GNUSTEP_LOCAL_LIBRARIES to your linker paths (which is /etc/ld.so.conf
|
||||
on GNU/Linux).
|
||||
|
||||
|
@ -245,13 +269,13 @@ sourcing the GNUstep.sh file.
|
|||
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh
|
||||
|
||||
(change the path to be the path to your GNUstep.sh file on disk.
|
||||
Common cases include /usr/GNUstep/System/Library/Libraries/Makefiles
|
||||
and /usr/local/share/GNUstep/Makefiles)
|
||||
Common cases include /usr/GNUstep/System/Library/Libraries/Makefiles and
|
||||
/usr/local/share/GNUstep/Makefiles)
|
||||
|
||||
You can run this command in your shell every time, or you may want to
|
||||
add the command to your shell startup scripts - either the ones for
|
||||
your own user (for example, `.bash_profile' for Bash) or the ones for
|
||||
the whole system (for example, `/etc/profile' on GNU/Linux).
|
||||
add the command to your shell startup scripts - either the ones for your
|
||||
own user (for example, '.bash_profile' for Bash) or the ones for the
|
||||
whole system (for example, '/etc/profile' on GNU/Linux).
|
||||
|
||||
Please note that you need to execute this command both to build
|
||||
software using gnustep-make and to run software installed by
|
||||
|
@ -289,25 +313,25 @@ instead of ~/GNUstep:
|
|||
(Advanced configuration)
|
||||
|
||||
You can install gnustep-make multiple times in different directories
|
||||
by using a different config file for each. But if you do, then you
|
||||
must make sure that you can easily switch the operating system paths
|
||||
from one installation to the other. An easy way to do this is to
|
||||
configure your GNUstep by using GNUstep.sh as explained in the
|
||||
non-flattened instructions.
|
||||
by using a different config file for each. But if you do, then you must
|
||||
make sure that you can easily switch the operating system paths from one
|
||||
installation to the other. An easy way to do this is to configure your
|
||||
GNUstep by using GNUstep.sh as explained in the non-flattened
|
||||
instructions.
|
||||
|
||||
Your default gnustep-make installation is the one described in the
|
||||
default GNUstep.conf file for the system; on GNU/Linux this is
|
||||
`/etc/GNUstep/GNUstep.conf'. You can create a second one that uses a
|
||||
'/etc/GNUstep/GNUstep.conf'. You can create a second one that uses a
|
||||
different config file; for example:
|
||||
|
||||
./configure --prefix=/opt/mytest --with-config-file=/etc/GNUstep-mytest.conf --with-layout=gnustep
|
||||
|
||||
When you install, this second instance of gnustep-make will reside in
|
||||
`/opt/mytest', and have `/etc/GNUstep-mytest.conf' as config file.
|
||||
'/opt/mytest', and have '/etc/GNUstep-mytest.conf' as config file.
|
||||
|
||||
To use this second installation instead of the first one, you only
|
||||
need to set the GNUSTEP_CONFIG_FILE variable to point to the next
|
||||
config file and source GNUstep.sh:
|
||||
need to set the GNUSTEP_CONFIG_FILE variable to point to the next config
|
||||
file and source GNUstep.sh:
|
||||
|
||||
export GNUSTEP_CONFIG_FILE=/etc/GNUstep-mytest.conf
|
||||
. /opt/mytest/System/Library/Makefies/GNUstep.sh
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# -*-makefile-*-
|
||||
# -*-makefile-gmake*-
|
||||
# Instance/Documentation/texi.make
|
||||
#
|
||||
# Instance Makefile rules to build Texinfo documentation.
|
||||
|
@ -55,15 +55,29 @@ ifeq ($(GNUSTEP_TEXI2PDF_FLAGS),)
|
|||
endif
|
||||
|
||||
ifeq ($(GNUSTEP_TEXI2HTML),)
|
||||
GNUSTEP_TEXI2HTML = texi2html
|
||||
GNUSTEP_TEXI2HTML = makeinfo --html
|
||||
endif
|
||||
ifeq ($(GNUSTEP_TEXI2HTML_FLAGS),)
|
||||
GNUSTEP_TEXI2HTML_FLAGS = -split_chapter -expandinfo
|
||||
GNUSTEP_TEXI2HTML_FLAGS =
|
||||
endif
|
||||
|
||||
internal-doc-all_:: $(GNUSTEP_INSTANCE).info \
|
||||
$(GNUSTEP_INSTANCE).pdf \
|
||||
$(GNUSTEP_INSTANCE).html
|
||||
# Extract @setfilename value from the .texi file, if available, and
|
||||
# set OUTFILE accordingly. Ignore textdoc targets.
|
||||
# The @setfilename command may appear more than once in a Texinfo
|
||||
# file; we only need the first occurrence. It may have ".info" suffix
|
||||
# or may be followed by a Texinfo comment.
|
||||
ifeq ($(TEXT_MAIN),)
|
||||
SETFILENAME := $(shell grep ^@setfilename $(GNUSTEP_INSTANCE).texi)
|
||||
ifneq ($(SETFILENAME),)
|
||||
OUTFILE := $(subst .info,,$(word 2, $(SETFILENAME)))
|
||||
else
|
||||
OUTFILE := $(GNUSTEP_INSTANCE)
|
||||
endif
|
||||
endif
|
||||
|
||||
internal-doc-all_:: $(OUTFILE).info \
|
||||
$(OUTFILE).pdf \
|
||||
$(OUTFILE)/index.html
|
||||
|
||||
internal-textdoc-all_:: $(GNUSTEP_INSTANCE)
|
||||
|
||||
|
@ -72,7 +86,7 @@ internal-textdoc-all_:: $(GNUSTEP_INSTANCE)
|
|||
# without worring that the build will crash if the user doesn't have the
|
||||
# doc programs. Also don't install them if they haven't been generated.
|
||||
|
||||
$(GNUSTEP_INSTANCE).info: $(TEXI_FILES)
|
||||
$(OUTFILE).info: $(TEXI_FILES)
|
||||
-$(GNUSTEP_MAKEINFO) $(GNUSTEP_MAKEINFO_FLAGS) $(ADDITIONAL_MAKEINFO_FLAGS) \
|
||||
-o $@ $(GNUSTEP_INSTANCE).texi
|
||||
|
||||
|
@ -84,22 +98,22 @@ $(GNUSTEP_INSTANCE).ps: $(GNUSTEP_INSTANCE).dvi
|
|||
-$(GNUSTEP_DVIPS) $(GNUSTEP_DVIPS_FLAGS) $(ADDITIONAL_DVIPS_FLAGS) \
|
||||
$(GNUSTEP_INSTANCE).dvi -o $@
|
||||
|
||||
$(GNUSTEP_INSTANCE).pdf: $(TEXI_FILES)
|
||||
$(OUTFILE).pdf: $(TEXI_FILES)
|
||||
-$(GNUSTEP_TEXI2PDF) $(GNUSTEP_TEXI2PDF_FLAGS) $(ADDITIONAL_TEXI2PDF_FLAGS) \
|
||||
$(GNUSTEP_INSTANCE).texi -o $@
|
||||
|
||||
# Some versions of texi2html placed the html files in a subdirectory,
|
||||
# so after running it we try to move any from the subdirectory to
|
||||
# where they are expected.
|
||||
$(GNUSTEP_INSTANCE).html: $(TEXI_FILES)
|
||||
-$(GNUSTEP_TEXI2HTML) \
|
||||
$(OUTFILE)/index.html: $(TEXI_FILES)
|
||||
-$(GNUSTEP_TEXI2HTML) --output=$(OUTFILE) \
|
||||
$(GNUSTEP_TEXI2HTML_FLAGS) $(ADDITIONAL_TEXI2HTML_FLAGS) \
|
||||
$(GNUSTEP_INSTANCE).texi; \
|
||||
if [ -f $(GNUSTEP_INSTANCE)/$(GNUSTEP_INSTANCE)_toc.html ]; \
|
||||
if [ -f $(OUTFILE)/$(OUTFILE)_toc.html ]; \
|
||||
then \
|
||||
mv $(GNUSTEP_INSTANCE)/$(GNUSTEP_INSTANCE).html .; \
|
||||
mv $(GNUSTEP_INSTANCE)/$(GNUSTEP_INSTANCE)_*.html .; \
|
||||
rmdir $(GNUSTEP_INSTANCE)/$(GNUSTEP_INSTANCE); \
|
||||
mv $(OUTFILE)/$(OUTFILE).html .; \
|
||||
mv $(OUTFILE)/$(OUTFILE)_*.html .; \
|
||||
rmdir $(OUTFILE)/$(OUTFILE); \
|
||||
fi
|
||||
|
||||
$(GNUSTEP_INSTANCE): $(TEXI_FILES) $(TEXT_MAIN)
|
||||
|
@ -111,13 +125,13 @@ internal-doc-clean::
|
|||
$(GNUSTEP_INSTANCE).cp \
|
||||
$(GNUSTEP_INSTANCE).cps \
|
||||
$(GNUSTEP_INSTANCE).dvi \
|
||||
$(GNUSTEP_INSTANCE).fn \
|
||||
$(GNUSTEP_INSTANCE).info* \
|
||||
$(GNUSTEP_INSTANCE).fn* \
|
||||
$(OUTFILE).info* \
|
||||
$(GNUSTEP_INSTANCE).ky \
|
||||
$(GNUSTEP_INSTANCE).log \
|
||||
$(GNUSTEP_INSTANCE).pg \
|
||||
$(GNUSTEP_INSTANCE).ps \
|
||||
$(GNUSTEP_INSTANCE).pdf \
|
||||
$(OUTFILE).pdf \
|
||||
$(GNUSTEP_INSTANCE).toc \
|
||||
$(GNUSTEP_INSTANCE).tp \
|
||||
$(GNUSTEP_INSTANCE).vr \
|
||||
|
@ -126,8 +140,8 @@ internal-doc-clean::
|
|||
$(GNUSTEP_INSTANCE)_*.html \
|
||||
$(GNUSTEP_INSTANCE).ps.gz \
|
||||
$(GNUSTEP_INSTANCE).tar.gz \
|
||||
$(GNUSTEP_INSTANCE)/*$(END_ECHO)
|
||||
-$(ECHO_NOTHING) rmdir $(GNUSTEP_INSTANCE) $(END_ECHO)
|
||||
$(OUTFILE)/*$(END_ECHO)
|
||||
-$(ECHO_NOTHING) rmdir $(OUTFILE) $(END_ECHO)
|
||||
|
||||
# NB: Only install doc files if they have been generated
|
||||
|
||||
|
@ -136,22 +150,21 @@ internal-doc-clean::
|
|||
# install-info too - to keep up-to-date the dir index in that
|
||||
# directory.
|
||||
internal-doc-install_:: $(GNUSTEP_DOC_INFO)
|
||||
if [ -f $(GNUSTEP_INSTANCE).pdf ]; then \
|
||||
$(INSTALL_DATA) $(GNUSTEP_INSTANCE).pdf \
|
||||
if [ -f $(OUTFILE).pdf ]; then \
|
||||
$(INSTALL_DATA) $(OUTFILE).pdf \
|
||||
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR); \
|
||||
fi
|
||||
if [ -f $(GNUSTEP_INSTANCE).info ]; then \
|
||||
$(INSTALL_DATA) $(GNUSTEP_INSTANCE).info* $(GNUSTEP_DOC_INFO); \
|
||||
if [ -f $(OUTFILE).info ]; then \
|
||||
$(INSTALL_DATA) $(OUTFILE).info* $(GNUSTEP_DOC_INFO); \
|
||||
fi
|
||||
if [ -f i$(GNUSTEP_INSTANCE)_toc.html ]; then \
|
||||
$(INSTALL_DATA) $(GNUSTEP_INSTANCE)_*.html \
|
||||
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR); \
|
||||
if [ -f i$(OUTFILE)_toc.html ]; then \
|
||||
$(INSTALL_DATA) $(OUTFILE)_*.html \
|
||||
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR) || true ; \
|
||||
fi
|
||||
if [ -f $(GNUSTEP_INSTANCE).html ]; then \
|
||||
$(INSTALL_DATA) $(GNUSTEP_INSTANCE).html \
|
||||
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR); \
|
||||
$(INSTALL_DATA) $(GNUSTEP_INSTANCE)_*.html \
|
||||
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR); \
|
||||
if [ -f $(OUTFILE)/index.html ]; then \
|
||||
$(MKINSTALLDIRS) $(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(OUTFILE); \
|
||||
$(INSTALL_DATA) $(OUTFILE)/*.html \
|
||||
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(OUTFILE); \
|
||||
fi
|
||||
|
||||
$(GNUSTEP_DOC_INFO):
|
||||
|
@ -159,13 +172,15 @@ $(GNUSTEP_DOC_INFO):
|
|||
|
||||
internal-doc-uninstall_::
|
||||
rm -f \
|
||||
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(GNUSTEP_INSTANCE).pdf
|
||||
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(OUTFILE).pdf
|
||||
rm -f \
|
||||
$(GNUSTEP_DOC_INFO)/$(GNUSTEP_INSTANCE).info*
|
||||
$(GNUSTEP_DOC_INFO)/$(OUTFILE).info*
|
||||
rm -f \
|
||||
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(GNUSTEP_INSTANCE)_*.html
|
||||
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(OUTFILE)_*.html
|
||||
rm -f \
|
||||
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(GNUSTEP_INSTANCE).html
|
||||
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(OUTFILE).html
|
||||
rm -f \
|
||||
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(OUTFILE)/*.html
|
||||
|
||||
#
|
||||
# textdoc targets - these should be merged with the doc targets
|
||||
|
|
87
Instance/Shared/pkgconfig.make
Normal file
87
Instance/Shared/pkgconfig.make
Normal file
|
@ -0,0 +1,87 @@
|
|||
|
||||
# -*-makefile-*-
|
||||
# Instance/Shared/pkgconifg.make
|
||||
#
|
||||
# Makefile fragment with rules for installing pkg-config files
|
||||
#
|
||||
# Copyright (C) 2016 Free Software Foundation, Inc.
|
||||
#
|
||||
# Author: Niels Grewe <niels.grewe@halbordnugn.de>
|
||||
#
|
||||
# This file is part of the GNUstep Makefile Package.
|
||||
#
|
||||
# This library is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 3
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public
|
||||
# License along with this library; see the file COPYING.
|
||||
# If not, write to the Free Software Foundation,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
#
|
||||
# input variables:
|
||||
#
|
||||
# $(GNUSTEP_INSTANCE)_PKGCONFIG_FILES : the list of .pc files to install
|
||||
#
|
||||
#
|
||||
|
||||
#
|
||||
# public targets:
|
||||
#
|
||||
# shared-instance-pkgconfig-install
|
||||
# shared-instance-pkgconfig-uninstall
|
||||
#
|
||||
|
||||
# Only add the pc files if pkg-config is enabled in gnustep-make
|
||||
ifeq ($(GNUSTEP_HAS_PKGCONFIG),yes)
|
||||
PC_FILES = $($(GNUSTEP_INSTANCE)_PKGCONFIG_FILES)
|
||||
endif
|
||||
|
||||
.PHONY: \
|
||||
shared-instance-pkgconfig-install \
|
||||
shared-instance-pkgconfig-uninstall
|
||||
|
||||
# This is either the case if no pkg-config files are set or pkg-config has been
|
||||
# disabled
|
||||
ifeq ($(PC_FILES),)
|
||||
|
||||
shared-instance-pkgconfig-install:
|
||||
|
||||
shared-instance-pkgconfig-uninstall:
|
||||
|
||||
else # PC_FILES non-emtpy
|
||||
|
||||
ifeq ($(GNUSTEP_PKGCONFIG_FRAGMENT),)
|
||||
GNUSTEP_PKGCONFIG_FRAGMENT=pkgconfig
|
||||
endif
|
||||
|
||||
ifneq ($($(GNUSTEP_INSTANCE)_INSTALL_DIR),)
|
||||
PC_INSTALL_DIR = $($(GNUSTEP_INSTANCE)_INSTALL_DIR)/$(GNUSTEP_TARGET_LDIR)/$(GNUSTEP_PKGCONFIG_FRAGMENT)
|
||||
else
|
||||
PC_INSTALL_DIR = $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR)/$(GNUSTEP_PKGCONFIG_FRAGMENT)
|
||||
endif
|
||||
|
||||
|
||||
shared-instance-pkgconfig-install: $(PC_INSTALL_DIR)
|
||||
$(ECHO_INSTALLING_PKGCONFIG)for file in $(PC_FILES) __done; do \
|
||||
if [ $$file != __done ]; then \
|
||||
$(INSTALL_DATA) $$file \
|
||||
$(PC_INSTALL_DIR)/$$file; \
|
||||
fi; \
|
||||
done$(END_ECHO)
|
||||
|
||||
# Create the installation directory
|
||||
$(PC_INSTALL_DIR):
|
||||
$(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
|
||||
|
||||
shared-instance-pkgconfig-uninstall:
|
||||
$(ECHO_NOTHING)for file in $(PC_FILES) __done; do \
|
||||
if [ $$file != __done ]; then \
|
||||
rm -rf $(PC_INSTALL_DIR)/$$file ; \
|
||||
fi; \
|
||||
done$(END_ECHO)
|
||||
-$(ECHO_NOTHING)rmdir $(PC_INSTALL_DIR)$(END_ECHO)
|
||||
|
||||
endif # PC_FILES = ''
|
|
@ -221,14 +221,16 @@ MAIN_MODEL_FILE = $(strip $(subst .gmodel,,$(subst .gorm,,$(subst .nib,,$($(GNUS
|
|||
|
||||
MAIN_MARKUP_FILE = $(strip $(subst .gsmarkup,,$($(GNUSTEP_INSTANCE)_MAIN_MARKUP_FILE)))
|
||||
|
||||
MAIN_STORYBOARD_FILE = $(strip $(subst .storyboard,,$($(GNUSTEP_INSTANCE)_MAIN_STORYBOARD_FILE)))
|
||||
|
||||
# We must recreate Info.plist if PRINCIPAL_CLASS and/or
|
||||
# APPLICATION_ICON and/or MAIN_MODEL_FILE and/or MAIN_MARKUP_FILE has
|
||||
# changed since last time we built Info.plist. We use
|
||||
# stamp-string.make, which will store the variables in a stamp file
|
||||
# APPLICATION_ICON and/or MAIN_MODEL_FILE and/or MAIN_MARKUP_FILE and/or
|
||||
# MAIN_STORYBOARD_FILE has changed since last time we built Info.plist.
|
||||
# We use stamp-string.make, which will store the variables in a stamp file
|
||||
# inside GNUSTEP_STAMP_DIR, and rebuild Info.plist if
|
||||
# GNUSTEP_STAMP_STRING changes. We will also depend on xxxInfo.plist
|
||||
# if any.
|
||||
GNUSTEP_STAMP_STRING = $(PRINCIPAL_CLASS)-$(APPLICATION_ICON)-$(MAIN_MODEL_FILE)-$(MAIN_MARKUP_FILE)
|
||||
GNUSTEP_STAMP_STRING = $(PRINCIPAL_CLASS)-$(APPLICATION_ICON)-$(MAIN_MODEL_FILE)-$(MAIN_MARKUP_FILE)-$(MAIN_STORYBOARD_FILE)
|
||||
|
||||
ifneq ($(FOUNDATION_LIB),apple)
|
||||
GNUSTEP_STAMP_DIR = $(APP_DIR)
|
||||
|
@ -263,6 +265,7 @@ $(APP_INFO_PLIST_FILE): $(GNUSTEP_STAMP_DEPEND) $(GNUSTEP_PLIST_DEPEND)
|
|||
$(ECHO_CREATING)(echo "{"; echo ' NOTE = "Automatically generated, do not edit!";'; \
|
||||
echo " NSExecutable = \"$(GNUSTEP_INSTANCE)\";"; \
|
||||
echo " NSMainNibFile = \"$(MAIN_MODEL_FILE)\";"; \
|
||||
echo " NSMainStoryboardFile = \"$(MAIN_STORYBOARD_FILE)\";"; \
|
||||
echo " GSMainMarkupFile = \"$(MAIN_MARKUP_FILE)\";"; \
|
||||
if [ "$(APPLICATION_ICON)" != "" ]; then \
|
||||
echo " CFBundleIconFile = \"$(APPLICATION_ICON)\";"; \
|
||||
|
@ -279,6 +282,7 @@ $(APP_INFO_PLIST_FILE): $(GNUSTEP_STAMP_DEPEND) $(GNUSTEP_PLIST_DEPEND)
|
|||
$(ECHO_CREATING)(echo "{"; echo ' NOTE = "Automatically generated, do not edit!";'; \
|
||||
echo " NSExecutable = \"$(GNUSTEP_INSTANCE)\";"; \
|
||||
echo " NSMainNibFile = \"$(MAIN_MODEL_FILE)\";"; \
|
||||
echo " NSMainStoryboardFile = \"$(MAIN_STORYBOARD_FILE)\";"; \
|
||||
echo " GSMainMarkupFile = \"$(MAIN_MARKUP_FILE)\";"; \
|
||||
if [ "$(APPLICATION_ICON)" != "" ]; then \
|
||||
echo " NSIcon = \"$(APPLICATION_ICON)\";"; \
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# -*-makefile-*-
|
||||
# -*-makefile-gmake-*-
|
||||
# Instance/framework.make
|
||||
#
|
||||
# Instance Makefile rules to build GNUstep-based frameworks.
|
||||
|
@ -176,6 +176,7 @@ FRAMEWORK_VERSION_DIR = $(GNUSTEP_BUILD_DIR)/$(FRAMEWORK_VERSION_DIR_NAME)
|
|||
# that we need to manage and install. So we assume by default that we
|
||||
# have some headers even if HEADER_FILES is empty.
|
||||
include $(GNUSTEP_MAKEFILES)/Instance/Shared/headers.make
|
||||
include $(GNUSTEP_MAKEFILES)/Instance/Shared/pkgconfig.make
|
||||
|
||||
# On windows, this is unfortunately required.
|
||||
ifeq ($(BUILD_DLL), yes)
|
||||
|
@ -298,6 +299,11 @@ SONAME_FRAMEWORK_FILE = $(FRAMEWORK_LIBRARY_FILE)
|
|||
# as under Unix.
|
||||
LIB_LINK_DLL_FILE = $(DLL_PREFIX)$(GNUSTEP_INSTANCE)-$(subst .,_,$(INTERFACE_VERSION))$(DLL_LIBEXT)
|
||||
|
||||
# LIB_LINK_PDB_FILE is the PDB symbol file. The program database (PDB)
|
||||
# includes instructions for formatting trace messages so that they
|
||||
# can be presented in a human-readable display.
|
||||
LIB_LINK_PDB_FILE = $(DLL_PREFIX)$(GNUSTEP_INSTANCE)-$(subst .,_,$(INTERFACE_VERSION))$(DLL_PDBEXT)
|
||||
|
||||
FRAMEWORK_OBJ_EXT = $(DLL_LIBEXT)
|
||||
endif # BUILD_DLL
|
||||
|
||||
|
@ -660,9 +666,11 @@ ifeq ($(FOUNDATION_LIB),gnu)
|
|||
|
||||
internal-framework-install_:: $(FRAMEWORK_INSTALL_DIR) \
|
||||
$(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR) \
|
||||
$(GNUSTEP_HEADERS)
|
||||
$(ECHO_INSTALLING)rm -rf $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_DIR_NAME); \
|
||||
(cd $(GNUSTEP_BUILD_DIR); $(TAR) cfX - $(GNUSTEP_MAKEFILES)/tar-exclude-list $(FRAMEWORK_DIR_NAME)) | (cd $(FRAMEWORK_INSTALL_DIR); $(TAR) xf -)$(END_ECHO)
|
||||
$(GNUSTEP_HEADERS) shared-instance-pkgconfig-install
|
||||
$(ECHO_INSTALLING)(cd $(GNUSTEP_BUILD_DIR); \
|
||||
$(TAR) cfX - $(GNUSTEP_MAKEFILES)/tar-exclude-list \
|
||||
$(FRAMEWORK_DIR_NAME)) \
|
||||
| (cd $(FRAMEWORK_INSTALL_DIR); $(TAR) xf -)$(END_ECHO)
|
||||
ifneq ($(CHOWN_TO),)
|
||||
$(ECHO_CHOWNING)$(CHOWN) -R $(CHOWN_TO) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_DIR_NAME)$(END_ECHO)
|
||||
endif
|
||||
|
@ -683,10 +691,10 @@ endif
|
|||
$(RM_LN_S) $(SONAME_FRAMEWORK_FILE); \
|
||||
$(RM_LN_S) $(VERSION_FRAMEWORK_LIBRARY_FILE); \
|
||||
$(LN_S) `$(REL_PATH_SCRIPT) $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_CURRENT_LIBRARY_DIR_NAME)/$(FRAMEWORK_LIBRARY_FILE) short` $(FRAMEWORK_LIBRARY_FILE); \
|
||||
if test -r "$(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_CURRENT_LIBRARY_DIR_NAME)/$(SONAME_FRAMEWORK_FILE)"; then \
|
||||
$(LN_S) `$(REL_PATH_SCRIPT) $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_CURRENT_LIBRARY_DIR_NAME)/$(SONAME_FRAMEWORK_FILE) short` $(SONAME_FRAMEWORK_FILE); \
|
||||
if test -r "$(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_LIBRARY_DIR_NAME)/$(SONAME_FRAMEWORK_FILE)"; then \
|
||||
$(LN_S) `$(REL_PATH_SCRIPT) $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_LIBRARY_DIR_NAME)/$(SONAME_FRAMEWORK_FILE) short` $(SONAME_FRAMEWORK_FILE); \
|
||||
fi; \
|
||||
$(LN_S) `$(REL_PATH_SCRIPT) $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_CURRENT_LIBRARY_DIR_NAME)/$(VERSION_FRAMEWORK_LIBRARY_FILE) short` $(VERSION_FRAMEWORK_LIBRARY_FILE)$(END_ECHO)
|
||||
$(LN_S) `$(REL_PATH_SCRIPT) $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_LIBRARY_DIR_NAME)/$(VERSION_FRAMEWORK_LIBRARY_FILE) short` $(VERSION_FRAMEWORK_LIBRARY_FILE)$(END_ECHO)
|
||||
ifneq ($(CHOWN_TO),)
|
||||
$(ECHO_CHOWNING)cd $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR); \
|
||||
$(CHOWN) $(CHOWN_TO) $(FRAMEWORK_LIBRARY_FILE); \
|
||||
|
@ -774,7 +782,7 @@ $(GNUSTEP_HEADERS):
|
|||
ifneq ($(BUILD_DLL), yes)
|
||||
# NB: We use '$(RM_LN_S)' to remove the symlinks to insure
|
||||
# that we do not remove customized real directories.
|
||||
internal-framework-uninstall_::
|
||||
internal-framework-uninstall_:: shared-instance-pkgconfig-uninstall
|
||||
$(ECHO_UNINSTALLING)if [ "$(HEADER_FILES)" != "" ]; then \
|
||||
for file in $(HEADER_FILES) __done; do \
|
||||
if [ $$file != __done ]; then \
|
||||
|
@ -816,8 +824,9 @@ ifneq ($($(GNUSTEP_INSTANCE)_TEST_DIR),)
|
|||
echo "export LD_LIBRARY_PATH=\"$$(pwd)/$(GNUSTEP_INSTANCE).framework:$(LD_LIBRARY_PATH)\"" > $($(GNUSTEP_INSTANCE)_TEST_DIR)/make-check.env; \
|
||||
echo "# Generated by 'make check'" \
|
||||
> $($(GNUSTEP_INSTANCE)_TEST_DIR)/make-check.mak; \
|
||||
echo "ADDITIONAL_INCLUDE_DIRS += \"-I$(GNUSTEP_MAKEFILES)/TestFramework -I$(FRAMEWORK_VERSION_DIR)/Headers\"" \
|
||||
echo "ADDITIONAL_INCLUDE_DIRS += \"-I$(GNUSTEP_MAKEFILES)/TestFramework\" \"-I$(FRAMEWORK_VERSION_DIR)/Headers\"" \
|
||||
>> $($(GNUSTEP_INSTANCE)_TEST_DIR)/make-check.mak; \
|
||||
echo "ADDITIONAL_LDFLAGS += \"-Wl,-rpath,$$(pwd)/$(GNUSTEP_INSTANCE).framework\"" \ >> $($(GNUSTEP_INSTANCE)_TEST_DIR)/make-check.mak; \
|
||||
echo "ADDITIONAL_LIB_DIRS += \"-L$(FRAMEWORK_VERSION_DIR))\"" \
|
||||
>> $($(GNUSTEP_INSTANCE)_TEST_DIR)/make-check.mak; \
|
||||
echo "ADDITIONAL_TOOL_LIBS += \"-l$(GNUSTEP_INSTANCE)\"" \
|
||||
|
|
|
@ -32,6 +32,7 @@ include $(GNUSTEP_MAKEFILES)/rules.make
|
|||
endif
|
||||
|
||||
include $(GNUSTEP_MAKEFILES)/Instance/Shared/headers.make
|
||||
include $(GNUSTEP_MAKEFILES)/Instance/Shared/pkgconfig.make
|
||||
|
||||
#
|
||||
# The name of the library (including the 'lib' prefix) is
|
||||
|
@ -218,8 +219,13 @@ endif
|
|||
CLEAN_library_NAME = $(subst -,_,$(LIBRARY_NAME_WITH_LIB))
|
||||
SHARED_CFLAGS += -DBUILD_$(CLEAN_library_NAME)_DLL=1
|
||||
|
||||
# LIBRARY_FILE is the import library, libgnustep-base.dll.a
|
||||
LIBRARY_FILE = $(LIBRARY_NAME_WITH_LIB)$(DLL_LIBEXT)$(LIBEXT)
|
||||
# LIBRARY_FILE is the import library, i.e. gnustep-base.lib for Windows
|
||||
# MSVC, or libgnustep-base.dll.a for MinGW.
|
||||
ifeq ($(GNUSTEP_TARGET_OS), windows)
|
||||
LIBRARY_FILE = $(LIBRARY_NAME_WITHOUT_LIB)$(LIBEXT)
|
||||
else
|
||||
LIBRARY_FILE = $(LIBRARY_NAME_WITH_LIB)$(DLL_LIBEXT)$(LIBEXT)
|
||||
endif
|
||||
VERSION_LIBRARY_FILE = $(LIBRARY_FILE)
|
||||
SONAME_LIBRARY_FILE = $(LIBRARY_FILE)
|
||||
|
||||
|
@ -229,6 +235,9 @@ SONAME_LIBRARY_FILE = $(LIBRARY_FILE)
|
|||
# INTERFACE_VERSION of the library; this works exactly in the same way
|
||||
# as under Unix.
|
||||
LIB_LINK_DLL_FILE = $(DLL_PREFIX)$(LIBRARY_NAME_WITHOUT_LIB)-$(subst .,_,$(INTERFACE_VERSION))$(DLL_LIBEXT)
|
||||
ifeq ($(GNUSTEP_TARGET_OS), windows)
|
||||
LIB_LINK_PDB_FILE = $(DLL_PREFIX)$(LIBRARY_NAME_WITHOUT_LIB)-$(subst .,_,$(INTERFACE_VERSION))$(DLL_PDBEXT)
|
||||
endif
|
||||
endif # BUILD_DLL
|
||||
|
||||
else # following code for static libs
|
||||
|
@ -296,7 +305,8 @@ endif
|
|||
#
|
||||
internal-library-install_:: internal-install-dirs \
|
||||
internal-install-lib \
|
||||
shared-instance-headers-install
|
||||
shared-instance-headers-install \
|
||||
shared-instance-pkgconfig-install
|
||||
|
||||
# Depend on creating all the dirs
|
||||
internal-install-dirs:: $(FINAL_LIBRARY_INSTALL_DIR) \
|
||||
|
@ -324,9 +334,18 @@ internal-install-lib::
|
|||
$(INSTALL_PROGRAM) $(GNUSTEP_OBJ_DIR)/$(LIB_LINK_DLL_FILE) \
|
||||
$(DLL_INSTALLATION_DIR) ; \
|
||||
fi$(END_ECHO)
|
||||
|
||||
ifeq ($(GNUSTEP_TARGET_OS), windows)
|
||||
# On Windows MSVC, also install the PDB file.
|
||||
internal-install-lib::
|
||||
$(ECHO_INSTALLING)if [ -f $(GNUSTEP_OBJ_DIR)/$(LIB_LINK_PDB_FILE) ]; then \
|
||||
$(INSTALL_PROGRAM) $(GNUSTEP_OBJ_DIR)/$(LIB_LINK_PDB_FILE) \
|
||||
$(DLL_INSTALLATION_DIR) ; \
|
||||
fi$(END_ECHO)
|
||||
endif
|
||||
endif
|
||||
|
||||
internal-library-uninstall_:: shared-instance-headers-uninstall
|
||||
internal-library-uninstall_:: shared-instance-headers-uninstall shared-instance-pkgconfig-uninstall
|
||||
$(ECHO_UNINSTALLING)rm -f $(FINAL_LIBRARY_INSTALL_DIR)/$(VERSION_LIBRARY_FILE) \
|
||||
$(FINAL_LIBRARY_INSTALL_DIR)/$(LIBRARY_FILE) \
|
||||
$(FINAL_LIBRARY_INSTALL_DIR)/$(SONAME_LIBRARY_FILE)$(END_ECHO)
|
||||
|
@ -351,7 +370,9 @@ ifneq ($($(GNUSTEP_INSTANCE)_TEST_DIR),)
|
|||
echo "export LD_LIBRARY_PATH=\"$$(pwd)/$(GNUSTEP_OBJ_DIR):$(LD_LIBRARY_PATH)\"" >> $($(GNUSTEP_INSTANCE)_TEST_DIR)/make-check.env; \
|
||||
echo "# Generated by 'make check'" \
|
||||
> $($(GNUSTEP_INSTANCE)_TEST_DIR)/make-check.mak; \
|
||||
echo "ADDITIONAL_INCLUDE_DIRS += \"-I$(GNUSTEP_MAKEFILES)/TestFramework -I$$(pwd)\"" \
|
||||
echo "ADDITIONAL_INCLUDE_DIRS += \"-I$(GNUSTEP_MAKEFILES)/TestFramework\" \"-I$$(pwd)\"" \
|
||||
>> $($(GNUSTEP_INSTANCE)_TEST_DIR)/make-check.mak; \
|
||||
echo "ADDITIONAL_LDFLAGS += \"-Wl,-rpath,$$(pwd)/$(GNUSTEP_OBJ_DIR)\"" \
|
||||
>> $($(GNUSTEP_INSTANCE)_TEST_DIR)/make-check.mak; \
|
||||
echo "ADDITIONAL_LIB_DIRS += \"-L$$(pwd)/$(GNUSTEP_OBJ_DIR)\"" \
|
||||
>> $($(GNUSTEP_INSTANCE)_TEST_DIR)/make-check.mak; \
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
# -*-makefile-*-
|
||||
# Instace/resource-set.make
|
||||
# Instance/resource-set.make
|
||||
#
|
||||
# Instance makefile rules to install resource files
|
||||
#
|
||||
|
@ -49,12 +49,21 @@ endif
|
|||
# The list of localized dirs to be created empty inside each
|
||||
# $(RESOURCE_FILES_INSTALL_DIR)/yyy.lproj for each language yyy
|
||||
# is in the xxx_LOCALIZED_RESOURCE_DIRS variable.
|
||||
#
|
||||
# NB. Info-gnustep.plist and Info.plist are NOT considered resource files.
|
||||
# These files are generated automatically by certain projects, and if you
|
||||
# want to insert your own entries into Info0gnustep.plist or Info.plist
|
||||
# you should create a xxxInfo.plist file (where xxx is the application name)
|
||||
# in the same directory as your makefile, and gnustep-make will automatically
|
||||
# read it and merge it into the generated Info-gnustep.plist.
|
||||
# For more detail, see rules.make
|
||||
|
||||
.PHONY: internal-resource_set-install_ \
|
||||
internal-resource_set-uninstall_
|
||||
|
||||
#
|
||||
# Determine where to install. By default, install into GNUSTEP_RESOURCES/GNUSTEP_INSTANCE
|
||||
# Determine where to install.
|
||||
# By default, install into GNUSTEP_RESOURCES/GNUSTEP_INSTANCE
|
||||
#
|
||||
ifneq ($($(GNUSTEP_INSTANCE)_INSTALL_DIR),)
|
||||
RESOURCE_FILES_INSTALL_DIR = $($(GNUSTEP_INSTANCE)_INSTALL_DIR)
|
||||
|
|
|
@ -206,7 +206,9 @@ endif
|
|||
|
||||
ifneq ($($(GNUSTEP_INSTANCE)_SUBPROJECTS),)
|
||||
SUBPROJECT_OBJ_FILES = $(foreach d, $($(GNUSTEP_INSTANCE)_SUBPROJECTS), \
|
||||
$(addprefix $(GNUSTEP_BUILD_DIR)/$(d)/, $(GNUSTEP_OBJ_DIR_NAME)/$(SUBPROJECT_PRODUCT)))
|
||||
$(foreach o, $(shell cat \
|
||||
$(GNUSTEP_BUILD_DIR)/$(d)/$(GNUSTEP_OBJ_DIR_NAME)/$(SUBPROJECT_PRODUCT)), \
|
||||
$(addprefix $(GNUSTEP_BUILD_DIR)/$(d)/, $(o))))
|
||||
endif
|
||||
|
||||
OBJC_OBJS = $(patsubst %.m,%.m$(OEXT),$($(GNUSTEP_INSTANCE)_OBJC_FILES))
|
||||
|
|
|
@ -58,7 +58,7 @@ $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT): $(OBJ_FILES_TO_LINK)
|
|||
ifeq ($(OBJ_FILES_TO_LINK),)
|
||||
$(WARNING_EMPTY_LINKING)
|
||||
endif
|
||||
$(ECHO_LINKING)$(OBJ_MERGE_CMD)$(END_ECHO)
|
||||
@echo "$(OBJ_FILES_TO_LINK)" > $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT)
|
||||
|
||||
#
|
||||
# Build-header target for framework subprojects
|
||||
|
|
|
@ -77,8 +77,8 @@ $(GNUSTEP_OBJ_DIR):
|
|||
# install depends on all as per GNU/Unix habits, conventions and standards.
|
||||
|
||||
# The very first top-most make invocation we want to have install
|
||||
# depend on internal-check-install-permissions and on all, and
|
||||
# distclean depend on clean. We used to check MAKELEVEL=0 here to
|
||||
# depend on all, and distclean depend on clean.
|
||||
# We used to check MAKELEVEL=0 here to
|
||||
# determine if this is the top-most invocation of make, but that does
|
||||
# not work if the top-most invocation of make is done from within a
|
||||
# (non-gnustep-make) makefile itself! So we use a marker variable.
|
||||
|
@ -87,7 +87,7 @@ $(GNUSTEP_OBJ_DIR):
|
|||
# subinvocations will have it set and we can distinguish them.
|
||||
ifeq ($(_GNUSTEP_TOP_INVOCATION_DONE),)
|
||||
# Top-most invocation of make
|
||||
install:: internal-check-install-permissions all \
|
||||
install:: all \
|
||||
before-install internal-install after-install internal-after-install
|
||||
|
||||
distclean:: clean before-distclean internal-distclean after-distclean
|
||||
|
@ -127,20 +127,6 @@ internal-jar::
|
|||
after-jar::
|
||||
|
||||
|
||||
ifneq ($(GNUSTEP_INSTALLATION_DIR),)
|
||||
internal-check-install-permissions:
|
||||
@if [ -d "$(GNUSTEP_INSTALLATION_DIR)" \
|
||||
-a ! -w "$(GNUSTEP_INSTALLATION_DIR)" ]; then \
|
||||
echo "*ERROR*: the software is configured to install itself into $(GNUSTEP_INSTALLATION_DIR)"; \
|
||||
echo "but you do not have permissions to write in that directory:";\
|
||||
echo "Aborting installation."; \
|
||||
echo ""; \
|
||||
exit 1; \
|
||||
fi
|
||||
else
|
||||
internal-check-install-permissions:
|
||||
endif
|
||||
|
||||
# By adding an ADDITIONAL_INSTALL_DIRS variable you can request
|
||||
# additional installation directories to be created before the first
|
||||
# installation target is executed. You can also have xxx_INSTALL_DIRS
|
||||
|
|
|
@ -26,13 +26,35 @@
|
|||
# PACKAGE_NAME = gnustep-base
|
||||
# PACKAGE_VERSION = 1.0.0
|
||||
#
|
||||
# For Git exports, you may want to define something like:
|
||||
#
|
||||
# GIT_MODULE_NAME = libs-base
|
||||
#
|
||||
# GIT_MODULE_NAME will default to the value of PACKAGE_NAME.
|
||||
# GIT_TAG_NAME is the same as GIT_MODULE_NAME if not set, and is used as
|
||||
# a prefix when creating a tag or exporting a tag. Currently, the Git
|
||||
# integration does not interact with remote repository, so specifying
|
||||
# a base URL is not needed.
|
||||
#
|
||||
# When Git tagging, an ANNOUNCE file can be used to create the annotated Git
|
||||
# tag's commit message.
|
||||
# - Passing GIT_TAG_ANNOUNCE_FILE will copy the file, then prefix it with
|
||||
# a one-line 'Release $(PACKAGE_VERSION).' and an empty line.
|
||||
# - Additionally passing GIT_TAG_ANNOUNCE_OMIT_PREFACE will use the ANNOUNCE
|
||||
# file verbatim, without the prefix.
|
||||
#
|
||||
# GIT_TAG_SIGN can be used to control whether the annotated Git tag should
|
||||
# be GPG-signed. Empty value or unspecified means no signature, 'yes' means
|
||||
# use the default signing key, and another value specifies which key should
|
||||
# be used; you can use things like key ID or e-mail address.
|
||||
#
|
||||
# For SVN exports, you may want to define something like:
|
||||
#
|
||||
# SVN_MODULE_NAME = base
|
||||
# SVN_BASE_URL = http://svn.gna.org/svn/gnustep/libs
|
||||
#
|
||||
# SVN_TAG_NAME is the same as SVN_MODULE_NAME if not set and is used to
|
||||
# tag and retreive a module version
|
||||
# tag and retrieve a module version.
|
||||
#
|
||||
# For CVS exports, you may want to define something like:
|
||||
#
|
||||
|
@ -87,6 +109,20 @@ ifeq ($(SVN_TAG_NAME),)
|
|||
SVN_TAG_NAME = $(SVN_MODULE_NAME)
|
||||
endif
|
||||
|
||||
ifeq ($(GIT_MODULE_NAME),)
|
||||
GIT_MODULE_NAME = $(SVN_MODULE_NAME)
|
||||
endif
|
||||
ifeq ($(GIT_TAG_NAME),)
|
||||
GIT_TAG_NAME = $(GIT_MODULE_NAME)
|
||||
endif
|
||||
|
||||
ifeq ($(HG_MODULE_NAME),)
|
||||
HG_MODULE_NAME = $(SVN_MODULE_NAME)
|
||||
endif
|
||||
ifeq ($(HG_TAG_NAME),)
|
||||
HG_TAG_NAME = $(HG_MODULE_NAME)
|
||||
endif
|
||||
|
||||
|
||||
# Set the cvs command we use. Most of the times, this is 'cvs' and
|
||||
# you need to do nothing. But you can override 'cvs' with something
|
||||
|
@ -98,6 +134,12 @@ endif
|
|||
ifeq ($(SVN),)
|
||||
SVN = svn
|
||||
endif
|
||||
ifeq ($(GIT),)
|
||||
GIT = git
|
||||
endif
|
||||
ifeq ($(HG),)
|
||||
HG = hg
|
||||
endif
|
||||
|
||||
#
|
||||
# You can set COMPRESSION_PROGRAM and COMPRESSION_EXT by hand if your
|
||||
|
@ -137,6 +179,24 @@ endif
|
|||
|
||||
endif # COMPRESSION
|
||||
|
||||
# Whether to GPG sign the Git tag.
|
||||
#
|
||||
# - By default (or with empty variable GIT_TAG_SIGN), annotated tag will be
|
||||
# created without signature.
|
||||
# - If GIT_TAG_SIGN has value of 'yes', default e-mail address's key will
|
||||
# be used.
|
||||
# - If GIT_TAG_SIGN has another value, the value will be used as the signing
|
||||
# e-mail address.
|
||||
ifeq ($(GIT_TAG_SIGN), )
|
||||
GIT_TAG_ANNOTATION_FLAGS = -a
|
||||
else
|
||||
ifeq ($(GIT_TAG_SIGN), yes)
|
||||
GIT_TAG_ANNOTATION_FLAGS = -s
|
||||
else
|
||||
GIT_TAG_ANNOTATION_FLAGS = -u $(GIT_TAG_SIGN)
|
||||
endif
|
||||
endif
|
||||
|
||||
# Due to peculiarities of some packaging systems or package distribution
|
||||
# systems, we may want to permit customization of tarball version string.
|
||||
|
||||
|
@ -345,3 +405,135 @@ ifneq ($(RELEASE_DIR),)
|
|||
fi; \
|
||||
mv $(ARCHIVE_FILE) $(RELEASE_DIR)$(END_ECHO)
|
||||
endif
|
||||
|
||||
#
|
||||
# Create an annotated Git tag with the $(GIT_TAG_NAME)-$(VERTAG) tag.
|
||||
#
|
||||
# New tag still needs to be published with git push --tags.
|
||||
#
|
||||
ifeq ($(GIT_TAG_ANNOUNCE_FILE),)
|
||||
git-tag:
|
||||
$(GIT) tag \
|
||||
$(GIT_TAG_ANNOTATION_FLAGS) \
|
||||
$(GIT_TAG_NAME)-$(VERTAG) \
|
||||
-m "Release $(PACKAGE_VERSION)"
|
||||
else
|
||||
ifneq ($(GIT_TAG_ANNOUNCE_OMIT_PREFACE),yes)
|
||||
.INTERMEDIATE += git-tag-announce-file-$(VERTAG).tmp
|
||||
git-tag-announce-file-$(VERTAG).tmp: $(GIT_TAG_ANNOUNCE_FILE)
|
||||
printf "Release $(PACKAGE_VERSION).\n\n" > $@
|
||||
cat $(GIT_TAG_ANNOUNCE_FILE) >> $@
|
||||
|
||||
git-tag: git-tag-announce-file-$(VERTAG).tmp
|
||||
$(GIT) tag \
|
||||
$(GIT_TAG_ANNOTATION_FLAGS) \
|
||||
$(GIT_TAG_NAME)-$(VERTAG) \
|
||||
-F $<
|
||||
else
|
||||
git-tag:
|
||||
$(GIT) tag \
|
||||
$(GIT_TAG_ANNOTATION_FLAGS) \
|
||||
$(GIT_TAG_NAME)-$(VERTAG) \
|
||||
-F $(GIT_TAG_ANNOUNCE_FILE)
|
||||
endif
|
||||
endif
|
||||
|
||||
#
|
||||
# Build a .tar.gz from the Git sources using revision/tag
|
||||
# $(GIT_TAG_NAME)-$(VERTAG) as for a new release of the package.
|
||||
#
|
||||
# Note: .dist-ignore is unused at this time.
|
||||
#
|
||||
git-dist:
|
||||
$(ECHO_NOTHING)echo "Exporting from branch or tag $(GIT_TAG_NAME)-$(VERTAG) on local Git repository..."; \
|
||||
if $(GIT) show $(GIT_TAG_NAME)-$(VERTAG):.dist-ignore 2>/dev/null >/dev/null; then \
|
||||
$(GIT) archive --format=tar.gz $(GIT_TAG_NAME)-$(VERTAG) -o $(ARCHIVE_FILE) --prefix=$(VERSION_NAME)/ ; \
|
||||
echo "Extracting $(ARCHIVE_FILE)"; \
|
||||
$(TAR) xzf $(ARCHIVE_FILE); \
|
||||
rm $(ARCHIVE_FILE); \
|
||||
$(TAR) cfX - $(VERSION_NAME)/.dist-ignore $(VERSION_NAME) \
|
||||
| $(COMPRESSION_PROGRAM) > $(ARCHIVE_FILE); \
|
||||
rm -rf $(VERSION_NAME); \
|
||||
else \
|
||||
$(GIT) archive --format=tar.gz $(GIT_TAG_NAME)-$(VERTAG) -o $(ARCHIVE_FILE) --prefix=$(VERSION_NAME)/ ; \
|
||||
fi ; \
|
||||
if [ ! -f $(ARCHIVE_FILE) ]; then \
|
||||
echo "*Error* creating .tar$(COMPRESSION_EXT) archive"; \
|
||||
exit 1; \
|
||||
fi;$(END_ECHO)
|
||||
ifneq ($(RELEASE_DIR),)
|
||||
$(ECHO_NOTHING)echo "Moving $(ARCHIVE_FILE) to $(RELEASE_DIR)..."; \
|
||||
if [ ! -d $(RELEASE_DIR) ]; then \
|
||||
$(MKDIRS) $(RELEASE_DIR); \
|
||||
fi; \
|
||||
if [ -f $(RELEASE_DIR)/$(ARCHIVE_FILE) ]; then \
|
||||
echo "$(RELEASE_DIR)/$(ARCHIVE_FILE) already exists:"; \
|
||||
echo "Saving old version in $(RELEASE_DIR)/$(ARCHIVE_FILE)~";\
|
||||
mv $(RELEASE_DIR)/$(ARCHIVE_FILE) \
|
||||
$(RELEASE_DIR)/$(ARCHIVE_FILE)~;\
|
||||
fi; \
|
||||
mv $(ARCHIVE_FILE) $(RELEASE_DIR)$(END_ECHO)
|
||||
endif
|
||||
|
||||
git-tag-stable:
|
||||
$(ECHO_NOTHING)echo "*Error* tagging stable branch in Git is not supported at this time."$(END_ECHO)
|
||||
exit 1
|
||||
|
||||
git-bugfix:
|
||||
$(ECHO_NOTHING)echo "*Error* creating a bugfix release from the stable branch in Git is not supported at this time."$(END_ECHO)
|
||||
exit 1
|
||||
|
||||
git-snapshot:
|
||||
$(ECHO_NOTHING)echo "*Error* creating a snapshot tarball from the current Git master is not supported at this time."$(END_ECHO)
|
||||
exit 1
|
||||
|
||||
git-export:
|
||||
$(ECHO_NOTHING)echo "*Error* creating a tarball from the current Git working copy is not supported at this time."$(END_ECHO)
|
||||
exit 1
|
||||
|
||||
#
|
||||
# Tag the Mercurial source with $(HG_TAG_NAME)-$(VERTAG) tag.
|
||||
#
|
||||
hg-tag:
|
||||
$(HG) tag -m "Release $(PACKAGE_VERSION)" $(HG_TAG_NAME)-$(VERTAG)
|
||||
|
||||
#
|
||||
# Build a .tar.gz from the Hg sources using revision/tag
|
||||
# $(HG_TAG_NAME)-$(VERTAG) as for a new release of the package.
|
||||
#
|
||||
hg-dist:
|
||||
$(ECHO_NOTHING)echo "Exporting from branch or tag $(HG_TAG_NAME)-$(VERTAG) on local Mercurial repository..."; \
|
||||
$(HG) archive -r $(HG_TAG_NAME)-$(VERTAG) -p $(VERSION_NAME)/ $(ARCHIVE_FILE); \
|
||||
if [ ! -f $(ARCHIVE_FILE) ]; then \
|
||||
echo "*Error* creating .tar$(COMPRESSION_EXT) archive"; \
|
||||
exit 1; \
|
||||
fi;$(END_ECHO)
|
||||
ifneq ($(RELEASE_DIR),)
|
||||
$(ECHO_NOTHING)echo "Moving $(ARCHIVE_FILE) to $(RELEASE_DIR)..."; \
|
||||
if [ ! -d $(RELEASE_DIR) ]; then \
|
||||
$(MKDIRS) $(RELEASE_DIR); \
|
||||
fi; \
|
||||
if [ -f $(RELEASE_DIR)/$(ARCHIVE_FILE) ]; then \
|
||||
echo "$(RELEASE_DIR)/$(ARCHIVE_FILE) already exists:"; \
|
||||
echo "Saving old version in $(RELEASE_DIR)/$(ARCHIVE_FILE)~";\
|
||||
mv $(RELEASE_DIR)/$(ARCHIVE_FILE) \
|
||||
$(RELEASE_DIR)/$(ARCHIVE_FILE)~;\
|
||||
fi; \
|
||||
mv $(ARCHIVE_FILE) $(RELEASE_DIR)$(END_ECHO)
|
||||
endif
|
||||
|
||||
hg-tag-stable:
|
||||
$(ECHO_NOTHING)echo "*Error* tagging stable branch in Mercurial is not supported at this time."$(END_ECHO)
|
||||
exit 1
|
||||
|
||||
hg-bugfix:
|
||||
$(ECHO_NOTHING)echo "*Error* creating a bugfix release from the stable branch in Mercurial is not supported at this time."$(END_ECHO)
|
||||
exit 1
|
||||
|
||||
hg-snapshot:
|
||||
$(ECHO_NOTHING)echo "*Error* creating a snapshot tarball from the current Mercurial master is not supported at this time."$(END_ECHO)
|
||||
exit 1
|
||||
|
||||
hg-export:
|
||||
$(ECHO_NOTHING)echo "*Error* creating a tarball from the current Mercurial working copy is not supported at this time."$(END_ECHO)
|
||||
exit 1
|
||||
|
|
21
README
21
README
|
@ -15,27 +15,27 @@ the user to easily create cross-compiled binaries.
|
|||
1.2 Information
|
||||
===============
|
||||
|
||||
The file `NEWS' has this packages feature history.
|
||||
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 with it.
|
||||
Files in the 'Documentation' directory have information on the design
|
||||
of the Makefile system and how to write your own makefiles that work
|
||||
with it.
|
||||
|
||||
1.3 License
|
||||
===========
|
||||
|
||||
The GNUstep libraries are covered under the GNU Lesser Public License.
|
||||
This means you can use these libraries in any program (even non-free
|
||||
programs). If you distribute the libraries along with your program, you
|
||||
programs). If you distribute the libraries along with your program, you
|
||||
must make the improvements you have made to the libraries freely
|
||||
available. You should read the COPYING.LIB file for more information.
|
||||
available. You should read the COPYING.LIB file for more information.
|
||||
|
||||
GNUstep tools, test programs, and other files are covered under the
|
||||
GNU General Public License. The GNU GPL is a free software license,
|
||||
GNU General Public License. The GNU GPL is a free software license,
|
||||
which requires that all the released improved versions be free software
|
||||
as well. You should read the COPYING file for more information.
|
||||
|
||||
|
@ -64,4 +64,3 @@ more effective.
|
|||
* Give us feedback! Tell us what you like; tell us what you think
|
||||
could be better. Send bug reports to <bug-gnustep@gnu.org>.
|
||||
|
||||
|
||||
|
|
524
RELEASENOTES
524
RELEASENOTES
|
@ -5,7 +5,131 @@ 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.6.7
|
||||
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.
|
||||
|
||||
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’.
|
||||
|
||||
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.)
|
||||
|
||||
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’
|
||||
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.
|
||||
|
||||
This release includes support for creating a Mercurial tag and
|
||||
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.6 Version 2.7.0
|
||||
=================
|
||||
|
||||
When building non-flattened, the subdirectory name for
|
||||
libraries/binaries is changed for Debian compatibility (and simplicity)
|
||||
to use a directory whose name is of the form architecture/library-combo
|
||||
rather than nested directories of the form cpu/os-abi/library-combo.
|
||||
The architecture name format is a sanitised triplet cpu-os-abi (where
|
||||
previously we had cpu/os-abi).
|
||||
|
||||
When building non-flattened, header files are now installed in an
|
||||
architecture and library-combo dependent subdirectory in the same way
|
||||
that binary libraries are installed. This removes an inconsistency and
|
||||
makes sense with Debian multiarch support which puts headers in an
|
||||
architecture specific subdirectory.
|
||||
|
||||
The long since deprecated GNUSTEP_INSTALLATION_DIR is removed.
|
||||
|
||||
Various bugfixes and minor improvements.
|
||||
|
||||
1.7 Version 2.6.8
|
||||
=================
|
||||
|
||||
Configure option '-with-library-combo=ng-gnu-gnu' to use the 'Next
|
||||
Generation' setup of the latest ObjectiveC-2 runtime and compiler
|
||||
features rather than traditional runtime. Requires the new runtime and
|
||||
a recent clang compiler.
|
||||
|
||||
With the 'ng' runtime in use, you can define GS_WITH_ARC=1 at the
|
||||
start of a makefile, or in your environment, or in the command line
|
||||
arguments to have objC code built using ARC.
|
||||
|
||||
Command line option 'documentation=no' to suppress builds of
|
||||
documentation.
|
||||
|
||||
Integration of testsuite for regression/unit testing of libraries
|
||||
using the 'check' target. In your makefile define libraryname_TEST_DIR
|
||||
= TestsSubdirectory
|
||||
|
||||
Various minor bugfixes, documentation spelling corrections etc.
|
||||
|
||||
The '-enable-strict-v2-mode' option is now, after eight years, turned
|
||||
on by default (in anticipation of finally removing backward
|
||||
compatibility with version one). WARNING; Packagers please ensure that
|
||||
you update any old gnustep-make version one makefiles.
|
||||
|
||||
Garbage collection support to be removed at the next release.
|
||||
|
||||
1.8 Version 2.6.7
|
||||
=================
|
||||
|
||||
Improved package building support
|
||||
|
@ -16,15 +140,15 @@ Improved package building support
|
|||
|
||||
Various minor bugfixes, documentation spelling corrections etc.
|
||||
|
||||
1.2 Version 2.6.6
|
||||
1.9 Version 2.6.6
|
||||
=================
|
||||
|
||||
Debian packagge generation support added.
|
||||
|
||||
Bug fixes
|
||||
|
||||
1.3 Version 2.6.5
|
||||
=================
|
||||
1.10 Version 2.6.5
|
||||
==================
|
||||
|
||||
Bugfix for non-fragile ABI test
|
||||
|
||||
|
@ -34,47 +158,46 @@ Bugfix for non-fragile ABI test
|
|||
|
||||
Added minimal test support for .c and .cc files.
|
||||
|
||||
1.4 Version 2.6.4
|
||||
=================
|
||||
1.11 Version 2.6.4
|
||||
==================
|
||||
|
||||
Test framework enhancement (extended equality tests)
|
||||
|
||||
Android build target
|
||||
|
||||
1.5 Version 2.6.3
|
||||
=================
|
||||
1.12 Version 2.6.3
|
||||
==================
|
||||
|
||||
Bug fixes
|
||||
|
||||
1.6 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.7 Version 2.6.1
|
||||
=================
|
||||
1.14 Version 2.6.1
|
||||
==================
|
||||
|
||||
Bug fixes
|
||||
|
||||
1.8 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
|
||||
default layout, configure gnustep-make using ./configure
|
||||
-with-layout=gnustep. Note that this change does not affect
|
||||
gnustep-make when used with the apple-apple-apple library combo,
|
||||
in which case the default filesystem layout remains the 'apple'
|
||||
one.
|
||||
gnustep-make when used with the apple-apple-apple library combo, in
|
||||
which case the default filesystem layout remains the 'apple' one.
|
||||
|
||||
The change in the default filesystem layout means that the
|
||||
location of the GNUstep.sh file in a default installation has
|
||||
changed from /usr/GNUstep/System/Library/Makefiles/GNUstep.sh to
|
||||
The change in the default filesystem layout means that the location
|
||||
of the GNUstep.sh file in a default installation has changed from
|
||||
/usr/GNUstep/System/Library/Makefiles/GNUstep.sh to
|
||||
/usr/local/share/GNUstep/Makefiles/GNUstep.sh. If you use the
|
||||
default layout and execute the GNUstep.sh script on startup, you
|
||||
need to change the command from
|
||||
|
@ -85,11 +208,11 @@ 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 location of the configuration file only when installing
|
||||
prefix were used. Starting with version 2.6.0, that is the default
|
||||
location of the configuration file only when installing
|
||||
system-wide, that is with a prefix set to /, /usr or /usr/GNUstep.
|
||||
In all other cases, the configuration file is by default located in
|
||||
$prefix/etc/GNUstep/GNUstep.conf.
|
||||
|
@ -109,43 +232,42 @@ 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 use this test framework. Please check the README in the
|
||||
TestFramework directory for more information on how it works or
|
||||
how to use it.
|
||||
of GNUstep-base and GNUstep-gui include regression test suites that
|
||||
use this test framework. Please check the README in the
|
||||
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.16 Version 2.4.0
|
||||
==================
|
||||
|
||||
1.9 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
|
||||
|
@ -157,20 +279,20 @@ Bug fixes
|
|||
can turn it off by using 'make warn=no'.
|
||||
|
||||
A similar change occurred for Java compilations, where the flag
|
||||
-deprecation, which used to be enabled by debug=yes, is now
|
||||
enabled by warn=yes. As a consequence, Java code is now compiled
|
||||
by default with the -deprecation flag. You can turn it off by
|
||||
-deprecation, which used to be enabled by debug=yes, is now enabled
|
||||
by warn=yes. As a consequence, Java code is now compiled by
|
||||
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 'YES' and 'NO'. For consistency with
|
||||
everything else, starting with gnustep-make 2.4.0 these two
|
||||
variables recognize the values 'yes' and 'no' too.
|
||||
and 'no', with the unfortunate exception of PACKAGE_NEEDS_CONFIGURE
|
||||
and JAVADOC_BUILD_ALWAYS which used to only recognize the values
|
||||
'YES' and 'NO'. For consistency with everything else, starting with
|
||||
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
|
||||
|
@ -180,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.
|
||||
"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
|
||||
|
@ -209,47 +331,46 @@ Bug fixes
|
|||
independent of each other. The operations that are executed in
|
||||
parallel are 'all', 'clean', 'distclean', 'check' and 'strings'.
|
||||
'install' and 'uninstall' are still executed in serial order to
|
||||
prevent any concurrency problems when creating (or removing)
|
||||
common installation directories.
|
||||
prevent any concurrency problems when creating (or removing) common
|
||||
installation directories.
|
||||
|
||||
aggregate.make is still available if you want or need to be
|
||||
backwards-compatible with older versions of gnustep-make. It is
|
||||
normally a wrapper around serial-subdirectories.make, but if you
|
||||
specify 'GNUSTEP_USE_PARALLEL_AGGREGATE = yes' in your
|
||||
GNUmakefile, it becomes a wrapper around
|
||||
parallel-subdirectories.make. aggregate.make will be deprecated
|
||||
in 2012 and removed in 2015, but for the next couple of years it
|
||||
might be a good solution while you wait for your users to upgrade
|
||||
their gnustep-make installations.
|
||||
specify 'GNUSTEP_USE_PARALLEL_AGGREGATE = yes' in your GNUmakefile,
|
||||
it becomes a wrapper around parallel-subdirectories.make.
|
||||
aggregate.make will be deprecated in 2012 and removed in 2015, but
|
||||
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
|
||||
with ./obj/source.m.o. Starting with version 2.4.0, different
|
||||
instances store their object files in different subdirectories;
|
||||
for example, if the file was compiled as part of tool ToolA, it
|
||||
would end up in ./obj/ToolA.obj/source.m.o, while if compiled as
|
||||
part of ToolB, it would end up in ./obj/ToolB.obj/source.m.o.
|
||||
This allows ToolA and ToolB to be built in parallel with no race
|
||||
conditions, even if they share some source files. There are a
|
||||
number of side effects of this change. First of all, in the
|
||||
unlikely event that your GNUmakefile depends on the location of
|
||||
the object files (bad idea by the way), you'll have to update it.
|
||||
Second, if you are reusing a single source file in multiple
|
||||
instances in the same project, this will now be compiled multiple
|
||||
times instead of one (on the plus side, you can fully parallelize
|
||||
the build by just using 'make -j N', without having to change
|
||||
anything in your GNUmakefile. On a machine with multiple
|
||||
cpus/cores this can massively speed up the build). Finally, the
|
||||
rules to compile C/ObjC/C++/ObjC++/Windres files are no longer
|
||||
available in the Master invocation - they are only available when
|
||||
compiling a specific instance. It's hard to imagine a situation
|
||||
where this change of private internals would affect any user; but
|
||||
people with their own private gnustep-make forks or advanced
|
||||
extensions might be affected.
|
||||
instances store their object files in different subdirectories; for
|
||||
example, if the file was compiled as part of tool ToolA, it would
|
||||
end up in ./obj/ToolA.obj/source.m.o, while if compiled as part of
|
||||
ToolB, it would end up in ./obj/ToolB.obj/source.m.o. This allows
|
||||
ToolA and ToolB to be built in parallel with no race conditions,
|
||||
even if they share some source files. There are a number of side
|
||||
effects of this change. First of all, in the unlikely event that
|
||||
your GNUmakefile depends on the location of the object files (bad
|
||||
idea by the way), you'll have to update it. Second, if you are
|
||||
reusing a single source file in multiple instances in the same
|
||||
project, this will now be compiled multiple times instead of one
|
||||
(on the plus side, you can fully parallelize the build by just
|
||||
using 'make -j N', without having to change anything in your
|
||||
GNUmakefile. On a machine with multiple cpus/cores this can
|
||||
massively speed up the build). Finally, the rules to compile
|
||||
C/ObjC/C++/ObjC++/Windres files are no longer available in the
|
||||
Master invocation - they are only available when compiling a
|
||||
specific instance. It's hard to imagine a situation where this
|
||||
change of private internals would affect any user; but people with
|
||||
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
|
||||
|
@ -258,11 +379,11 @@ Bug fixes
|
|||
This change affects applications, bundles, ctools, clibraries,
|
||||
libraries, services, palettes, test-applications, test-libraries,
|
||||
test-tools, tools. It does not affect Java, resource sets or
|
||||
documentation. [FIXME: frameworks ?]
|
||||
documentation. [FIXME: frameworks ?]
|
||||
|
||||
Before version 2.4.0, instances were always built one after the
|
||||
other one, exactly in the order specified. So, in the example
|
||||
ToolA would be built before ToolB. Starting with 2.4.0, the
|
||||
ToolA would be built before ToolB. Starting with 2.4.0, the
|
||||
instances might be built completely in parallel if parallel
|
||||
building is enabled. So, the order in which they are built is no
|
||||
longer defined and your GNUmakefile should not depend on the order
|
||||
|
@ -291,17 +412,17 @@ 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
|
||||
2.4.0 so you should not use it if you want to support older
|
||||
versions of gnustep-make; previously you had to create a
|
||||
subproject and add a GNUmakefile in the subdirectory using
|
||||
subproject.make. You can now spread your source files in multiple
|
||||
subdirectories without using subprojects.
|
||||
versions of gnustep-make; previously you had to create a subproject
|
||||
and add a GNUmakefile in the subdirectory using subproject.make.
|
||||
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
|
||||
|
@ -314,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
|
||||
|
@ -322,49 +443,49 @@ 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 'info gnustep-faq' instead of 'info faq'. Please note that
|
||||
this info documentation is in the core/make/Documentation
|
||||
subdirectory and at the moment is not automatically installed
|
||||
unless you explicitly go in that subdirectory and install it.
|
||||
example, to access the GNUstep faq using info, you now need to type
|
||||
'info gnustep-faq' instead of 'info faq'. Please note that this
|
||||
info documentation is in the core/make/Documentation subdirectory
|
||||
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 -O2 flag, you can simply build using 'make debug=yes'. You
|
||||
can also use the new ./configure -enable-debug-by-default option
|
||||
to make 'debug=yes' the default flag that is always used when
|
||||
by default using -g -O2 instead of just -g. If you do not want the
|
||||
-O2 flag, you can simply build using 'make debug=yes'. You can
|
||||
also use the new ./configure -enable-debug-by-default option to
|
||||
make 'debug=yes' the default flag that is always used when
|
||||
compiling if nothing else is specified. If you do not want the
|
||||
debugging symbols, remember that you can use the 'make strip=yes'
|
||||
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
|
||||
single Java compiler invocation. This can significantly speed up
|
||||
compilation of large projects. To disable it and get the
|
||||
behaviour of gnustep-make 2.2.0, please set the variable
|
||||
compilation of large projects. To disable it and get the behaviour
|
||||
of gnustep-make 2.2.0, please set the variable
|
||||
BATCH_COMPILE_JAVA_FILES to 'no' (or the variable
|
||||
xxx_BATCH_COMPILE_JAVA_FILES to 'no' to disable it for a single
|
||||
instance). Please note that if you are using the xxx_FILE_FLAGS
|
||||
or xxx_FILE_FILTER_OUT_FLAGS functionality for Java files, which
|
||||
instance). Please note that if you are using the xxx_FILE_FLAGS or
|
||||
xxx_FILE_FILTER_OUT_FLAGS functionality for Java files, which
|
||||
allows you to customize the compilation flags for each Java file,
|
||||
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
|
||||
|
@ -376,28 +497,28 @@ Bug fixes
|
|||
GNUSTEP_LIBRARY/Libraries/gnustep-base/Versions/1.14/Resources/.
|
||||
In gnustep-make 2.4.0, this bug has been fixed and the library
|
||||
name, without 'lib', will always be used in the resource
|
||||
installation directory, no matter if LIBRARY_NAME includes 'lib'
|
||||
or not.
|
||||
installation directory, no matter if LIBRARY_NAME includes 'lib' or
|
||||
not.
|
||||
|
||||
If you have a makefile which is affected and you need to support
|
||||
older versions of gnustep-make, you could remove 'lib' from the
|
||||
LIBRARY_NAME. That should install resources in the same directory
|
||||
LIBRARY_NAME. That should install resources in the same directory
|
||||
on all gnustep-make versions that support library resources (ie,
|
||||
gnustep-make >= 2.0.x).
|
||||
|
||||
1.10 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 is supported now. You can build using the
|
||||
normal make mechanism, e.g. 'make -j 2'.
|
||||
‘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
|
||||
|
@ -405,16 +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.11 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
|
||||
|
@ -422,81 +542,79 @@ 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 cases will produce smaller and less intrusive
|
||||
additions to PATH; in particular, on FHS filesystem layout, they
|
||||
will never add /usr/bin or other system paths if they are already
|
||||
there. If you are in a situation where there is an overlap
|
||||
between GNUstep paths and system paths and you are using
|
||||
GNUstep.sh or GNUstep.csh, you may want to check the new values of
|
||||
PATH, CLASSPATH, GUILE_LOAD_PATH, INFOPATH, LD_LIBRARY_PATH and
|
||||
similar variables since they may be different from the old ones.
|
||||
duplicate paths when adding paths to PATH and other path variables.
|
||||
Now they check each path separately before adding it, which in some
|
||||
cases will produce smaller and less intrusive additions to PATH; in
|
||||
particular, on FHS filesystem layout, they will never add /usr/bin
|
||||
or other system paths if they are already there. If you are in a
|
||||
situation where there is an overlap between GNUstep paths and
|
||||
system paths and you are using GNUstep.sh or GNUstep.csh, you may
|
||||
want to check the new values of PATH, CLASSPATH, GUILE_LOAD_PATH,
|
||||
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.12 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 absolute path. Dynamic libraries with an absolute install_name
|
||||
can be placed in non-standard locations, but may not be moved from
|
||||
dynamic libraries so the install_name stored within a library is an
|
||||
absolute path. Dynamic libraries with an absolute install_name can
|
||||
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',
|
||||
avoiding any conflicts and confusion. Please note that this info
|
||||
documentation is in the core/make/Documentation subdirectory and
|
||||
at the moment is not automatically installed unless you explicitly
|
||||
go in that subdirectory and install it.
|
||||
documentation is in the core/make/Documentation subdirectory and at
|
||||
the moment is not automatically installed unless you explicitly go
|
||||
in that subdirectory and install it.
|
||||
|
||||
|
||||
1.13 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
|
||||
default installed in /Library/GNUstep/GNUstep.conf instead of
|
||||
/etc/GNUstep/GNUstep.conf. Using the 'gnustep' filesystem layout
|
||||
with the apple-apple-apple library-combo did not make much sense;
|
||||
in gnustep-make version 2.0.5 and newer, a ./configure on Apple
|
||||
Mac OS X automatically chooses the right library-combo and
|
||||
filesystem layout to compile and install Apple native frameworks
|
||||
and applications.
|
||||
in gnustep-make version 2.0.5 and newer, a ./configure on Apple Mac
|
||||
OS X automatically chooses the right library-combo and filesystem
|
||||
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
|
||||
|
@ -505,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
|
||||
|
@ -517,27 +635,26 @@ 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, the gui library will not be linked. This behaviour can be
|
||||
not). If set to yes, the gui library will be linked; if set to no,
|
||||
the gui library will not be linked. This behaviour can be
|
||||
overridden for specific project targets by using the xxx_NEEDS_GUI
|
||||
variable (see above).
|
||||
|
||||
|
||||
1.14 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
|
||||
number of major changes compared to previous 1.x releases. Most of the
|
||||
changes are backwards compatible in the sense that old GNUmakefiles
|
||||
will work with gnustep-make version 1 or 2 when used in the same
|
||||
conditions (traditional GNUstep filesystem layout). But GNUmakefiles
|
||||
might need updating to work with the new filesystem layout
|
||||
configurations that are allowed by gnustep-make version 2.
|
||||
changes are backwards compatible in the sense that old GNUmakefiles will
|
||||
work with gnustep-make version 1 or 2 when used in the same conditions
|
||||
(traditional GNUstep filesystem layout). But GNUmakefiles might need
|
||||
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
|
||||
|
@ -545,27 +662,26 @@ configurations that are allowed by gnustep-make version 2.
|
|||
sense. If you need to relocate the whole installation (for
|
||||
example, installing into /tmp to prepare a binary package) you
|
||||
should use DESTDIR, as in 'make install DESTDIR=/tmp'. To choose
|
||||
an installation domain, you should use
|
||||
GNUSTEP_INSTALLATION_DOMAIN, as in 'make install
|
||||
GNUSTEP_INSTALLATION_DOMAIN=LOCAL'. It's particularly important
|
||||
that you remove any reference to GNUSTEP_INSTALLATION_DIR inside
|
||||
your own GNUmakefiles.
|
||||
an installation domain, you should use GNUSTEP_INSTALLATION_DOMAIN,
|
||||
as in 'make install GNUSTEP_INSTALLATION_DOMAIN=LOCAL'. It's
|
||||
particularly important that you remove any reference to
|
||||
GNUSTEP_INSTALLATION_DIR inside your own GNUmakefiles.
|
||||
|
||||
If your GNUmakefiles contains references to
|
||||
GNUSTEP_INSTALLATION_DIR (or similar), you should remove them by
|
||||
replacing them with references to the actual logical directory
|
||||
into which you want to install. For example, if your GNUmakefile
|
||||
is trying to install something into
|
||||
replacing them with references to the actual logical directory into
|
||||
which you want to install. For example, if your GNUmakefile is
|
||||
trying to install something into
|
||||
GNUSTEP_INSTALLATION_DIR/Library/Libraries, you need to replace it
|
||||
with GNUSTEP_LIBRARIES. This is important for non-GNUstep
|
||||
with GNUSTEP_LIBRARIES. This is important for non-GNUstep
|
||||
filesystem layouts (where, eg, GNUSTEP_LIBRARIES should be set to
|
||||
/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.
|
||||
|
@ -578,10 +694,10 @@ configurations that are 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
|
||||
|
@ -591,67 +707,65 @@ configurations that are allowed by gnustep-make version 2.
|
|||
configure options have been replaced by the more powerful
|
||||
-with-layout configure option. Also, configure no longer imports
|
||||
an existing configuration file so you need to make sure that you
|
||||
pass all the options every time. 'make install
|
||||
special_prefix=xxx' has been replaced by 'make install
|
||||
DESTDIR=xxx'.
|
||||
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
|
||||
has been deprecated in favour of xxx_INSTALL_DIR. For backwards
|
||||
compatibility, you may want to set them both:
|
||||
|
||||
xxx_INSTALL_DIR = $(GNUSTEP_LIBRARY)/Libraries/Resources/xxx
|
||||
|
||||
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'.
|
||||
variable GNUSTEP_IS_FLATTENED instead, and to compare it explicitly
|
||||
to 'yes' and 'no', and assume that " means 'yes'.
|
||||
|
||||
`./shared_obj'
|
||||
The ./shared_obj, ./shared_debug_obj directories and similar are
|
||||
no longer created. You can use ./obj instead.
|
||||
‘./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
|
||||
|
|
4
TestFramework/End.sh
Executable file
4
TestFramework/End.sh
Executable file
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh
|
||||
# This script is executed on conclusion of building/executing testcases in
|
||||
# this directory. Output from this script may be redirected to $GSTESTLOG
|
||||
# in order to have it appear in the test log file.
|
|
@ -8,6 +8,8 @@ include $(GNUSTEP_MAKEFILES)/common.make
|
|||
|
||||
TEST_TOOL_NAME = @TESTNAMES@
|
||||
|
||||
ADDITIONAL_CPPFLAGS += -I$(GNUSTEP_MAKEFILES)/TestFramework
|
||||
|
||||
ifeq ($(gcov),yes)
|
||||
ADDITIONAL_OBJCFLAGS += -ftest-coverage -fprofile-arcs
|
||||
ADDITIONAL_OBJCCFLAGS += -ftest-coverage -fprofile-arcs
|
||||
|
@ -24,5 +26,6 @@ include $(GNUSTEP_MAKEFILES)/test-tool.make
|
|||
|
||||
after-clean::
|
||||
rm -f core core.* *.core \
|
||||
test_*.out test_*.err \
|
||||
tests.log tests.sum oldtests.log oldtests.sum
|
||||
|
||||
|
|
|
@ -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) \
|
||||
} \
|
||||
}
|
||||
|
|
|
@ -135,6 +135,10 @@ option to have testing stopped at the first failure and the gdb debugger
|
|||
automatically launched to debug the failed testcase with a breakpoint set
|
||||
in the testStart() function for that testcase.
|
||||
|
||||
You can use the --notimestamps command line option to turn off timestamps of
|
||||
individual testcases if you want a less verbose output (though test code may
|
||||
override this default by setting the testTimestamps variable itself).
|
||||
|
||||
You can also use the --developer command line option to define the TESTDEV
|
||||
pre-processor variable (to turn on developer only test cases, and to have
|
||||
all 'hopes' treated as actual 'tests' with pass/fail results).
|
||||
|
@ -284,6 +288,11 @@ that by setting the MAKEFLAGS environment variable to '-j N' where N is the
|
|||
number of simultaneous builds you want to be permitted (or you can simply
|
||||
use 'gnustep-tests --sequential' to force building of one test at a time).
|
||||
|
||||
Running of the tests is, by default, done sequentially in alphabetical order,
|
||||
but this may be overridden to change the order of sequential tests and to run
|
||||
tests concurrently. The mechanism for this is to set values in the TestInfo
|
||||
file.
|
||||
|
||||
For total control, the framework checks to see if a 'GNUmakefile.tests' file
|
||||
exists in the directory, and if it does it uses that file as a template to
|
||||
create the GNUmakefile rather than using its own make file.
|
||||
|
|
4
TestFramework/Start.sh
Executable file
4
TestFramework/Start.sh
Executable file
|
@ -0,0 +1,4 @@
|
|||
#!/bin/sh
|
||||
# This script is executed before building/executing testcases in this
|
||||
# directory. Output from this script may be redirected to $GSTESTLOG
|
||||
# in order to have it appear in the test log file.
|
|
@ -35,75 +35,77 @@ present()
|
|||
return 1
|
||||
}
|
||||
|
||||
present "$GSTESTSUM" "Failed set$" "Failed sets$" "Failed test$" "Failed tests$" "Failed build$" "Failed builds$" "Failed file$" "Failed files$"
|
||||
if [ $? = 1 ]
|
||||
then
|
||||
echo "All OK!"
|
||||
|
||||
if present "$GSTESTSUM" "Dashed hope$" "Dashed hopes$"
|
||||
if test -r "$GSTESTSUM"
|
||||
then
|
||||
present "$GSTESTSUM" "Failed set$" "Failed sets$" "Failed test$" "Failed tests$" "Failed build$" "Failed builds$" "Failed file$" "Failed files$"
|
||||
if [ $? = 1 ]
|
||||
then
|
||||
echo
|
||||
echo "But we were hoping that even more tests might have passed if"
|
||||
echo "someone had added support for them to the package. If you"
|
||||
echo "would like to help, please contact the package maintainer."
|
||||
fi
|
||||
echo "All OK!"
|
||||
|
||||
if present "$GSTESTSUM" "Dashed hope$" "Dashed hopes$"
|
||||
then
|
||||
echo
|
||||
echo "But we were hoping that even more tests might have passed if"
|
||||
echo "someone had added support for them to the package. If you"
|
||||
echo "would like to help, please contact the package maintainer."
|
||||
fi
|
||||
|
||||
if present "$GSTESTSUM" "Skipped set$" "Skipped sets$"
|
||||
then
|
||||
echo
|
||||
echo "Even though no tests failed, we had to skip some testing"
|
||||
echo "due to lack of support on your system. This might be because"
|
||||
echo "some required software library was just not available when the"
|
||||
echo "software was built (in which case you can install that library"
|
||||
echo "and rebuild, then re-run the tests), or the required functions"
|
||||
echo "may not be available on your operating system at all."
|
||||
echo "Please see $GSTESTLOG for more detail."
|
||||
echo "If you would like to contribute code to add the missing"
|
||||
echo "functionality, please contact the package maintainer."
|
||||
fi
|
||||
|
||||
else
|
||||
if [ "$GSTESTMODE" = "failfast" ]
|
||||
then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if present "$GSTESTSUM" "Failed build$" "Failed build$"
|
||||
then
|
||||
echo
|
||||
echo "Unfortunately we could not even compile all the test programs."
|
||||
echo "This means that the test could not be run properly, and you need"
|
||||
echo "to try to figure out why and fix it or ask for help."
|
||||
fi
|
||||
|
||||
if present "$GSTESTSUM" "Failed file$" "Failed files$"
|
||||
then
|
||||
echo
|
||||
echo "Some testing was abandoned when a test program aborted. This is"
|
||||
echo "generally a severe problem and may mean that the package is"
|
||||
echo "completely unusable. You need to try to fix this and, if it is"
|
||||
echo "not due to some problem on your system, please help by submitting"
|
||||
echo "a patch (or at least a bug report) to the package maintainer."
|
||||
fi
|
||||
|
||||
if present "$GSTESTSUM" "Failed set$" "Failed sets$"
|
||||
then
|
||||
echo
|
||||
echo "Some set of tests failed. This could well mean that a large"
|
||||
echo "number of individual tests did not pass and that there are"
|
||||
echo "severe problems in the software."
|
||||
echo "Please submit a patch to fix the problem or send a bug report to"
|
||||
echo "the package maintainer."
|
||||
fi
|
||||
|
||||
if present "$GSTESTSUM" "Failed test$" "Failed tests$"
|
||||
then
|
||||
echo
|
||||
echo "One or more tests failed. None of them should have."
|
||||
echo "Please submit a patch to fix the problem or send a bug report to"
|
||||
echo "the package maintainer."
|
||||
fi
|
||||
|
||||
if present "$GSTESTSUM" "Skipped set$" "Skipped sets$"
|
||||
then
|
||||
echo
|
||||
echo "Even though no tests failed, we had to skip some testing"
|
||||
echo "due to lack of support on your system. This might be because"
|
||||
echo "some required software library was just not available when the"
|
||||
echo "software was built (in which case you can install that library"
|
||||
echo "and rebuild, then re-run the tests), or the required functions"
|
||||
echo "may not be available on your operating system at all."
|
||||
echo "Please see $GSTESTLOG for more detail."
|
||||
echo "If you would like to contribute code to add the missing"
|
||||
echo "functionality, please contact the package maintainer."
|
||||
fi
|
||||
|
||||
else
|
||||
if [ "$GSTESTMODE" = "failfast" ]
|
||||
then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
if present "$GSTESTSUM" "Failed build$" "Failed build$"
|
||||
then
|
||||
echo
|
||||
echo "Unfortunately we could not even compile all the test programs."
|
||||
echo "This means that the test could not be run properly, and you need"
|
||||
echo "to try to figure out why and fix it or ask for help."
|
||||
fi
|
||||
|
||||
if present "$GSTESTSUM" "Failed file$" "Failed files$"
|
||||
then
|
||||
echo
|
||||
echo "Some testing was abandoned when a test program aborted. This is"
|
||||
echo "generally a severe problem and may mean that the package is"
|
||||
echo "completely unusable. You need to try to fix this and, if it is"
|
||||
echo "not due to some problem on your system, please help by submitting"
|
||||
echo "a patch (or at least a bug report) to the package maintainer."
|
||||
fi
|
||||
|
||||
if present "$GSTESTSUM" "Failed set$" "Failed sets$"
|
||||
then
|
||||
echo
|
||||
echo "Some set of tests failed. This could well mean that a large"
|
||||
echo "number of individual tests did not pass and that there are"
|
||||
echo "severe problems in the software."
|
||||
echo "Please submit a patch to fix the problem or send a bug report to"
|
||||
echo "the package maintainer."
|
||||
fi
|
||||
|
||||
if present "$GSTESTSUM" "Failed test$" "Failed tests$"
|
||||
then
|
||||
echo
|
||||
echo "One or more tests failed. None of them should have."
|
||||
echo "Please submit a patch to fix the problem or send a bug report to"
|
||||
echo "the package maintainer."
|
||||
fi
|
||||
|
||||
echo "Please see $GSTESTLOG for more detail."
|
||||
fi
|
||||
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
# The presence of this file identifies the directory as one in which the
|
||||
# regression testing framework should attempt to find and run testcases.
|
||||
# This is sourced by the shell script running the tests and may be used
|
||||
# to set up the environment variables for the test etc.
|
||||
# Special variable declarations are used by the regression testing:
|
||||
# PARALLEL may be used to specify a space separated list of tests to be
|
||||
# executed concurrently.
|
||||
# SEQUENCE may be used to specify a space separated list of tests to be
|
||||
# executed sequentially.
|
||||
# The SEQUENCE tests are executed before the PARALLEL tests.
|
||||
# Any occurrence of an asterisk in either variable is expanded to a space
|
||||
# delimited list of all the available tests in the directory.
|
||||
# If neither variable is specified the system assumes SEQUENCE="*" so that
|
||||
# all available tests are executed sequentially.
|
||||
# Test names may occur more than once, in which case those tests will be
|
||||
# executed more than once.
|
|
@ -1,6 +1,6 @@
|
|||
/* Testing - Include basic tests macros for the GNUstep Testsuite
|
||||
|
||||
Copyright (C) 2005-2011 Free Software Foundation, Inc.
|
||||
Copyright (C) 2005-2021 Free Software Foundation, Inc.
|
||||
|
||||
Written by: Alexander Malmberg <alexander@malmberg.org>
|
||||
Updated by: Richard Frith-Macdonald <rfm@gnu.org>
|
||||
|
@ -25,14 +25,22 @@
|
|||
#include <stdarg.h>
|
||||
#include <string.h>
|
||||
|
||||
#import <Foundation/NSAutoreleasePool.h>
|
||||
#import <Foundation/NSDate.h>
|
||||
#import <Foundation/NSException.h>
|
||||
#import <Foundation/NSGarbageCollector.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
|
||||
* Objective-C constructs: https://bugs.llvm.org/show_bug.cgi?id=49681
|
||||
*/
|
||||
id __work_around_clang_bug = @"__unused__";
|
||||
#endif
|
||||
|
||||
/* strncpy is deprecated on Windows MSVC. Use strncpy_s instead.
|
||||
*/
|
||||
#if defined(_MSC_VER)
|
||||
#define STRNCPY(dest, size_dest, src, size_src) strncpy_s(dest, size_dest, src, size_src);
|
||||
#else
|
||||
#define STRNCPY(dest, size_dest, src, size_src) strncpy(dest, src, size_dest);
|
||||
#endif
|
||||
|
||||
/* A flag indicating that the testsuite is currently processing tests
|
||||
* which are actually not expected to pass, but where we hope someone
|
||||
|
@ -58,6 +66,15 @@ static BOOL testPassed __attribute__((unused)) = NO;
|
|||
*/
|
||||
static unsigned testLineNumber __attribute__((unused)) = 0;
|
||||
|
||||
/* A flag indicating whether timestamps should be produced in the output
|
||||
* for each testcase. By default it is set to TEST_TS if defined, but
|
||||
* test code may override that default.
|
||||
*/
|
||||
#if !defined(TEST_TS)
|
||||
#define TEST_TS 0
|
||||
#endif
|
||||
static BOOL testTimestamps __attribute__((unused)) = TEST_TS;
|
||||
|
||||
/* A variable storing the indentation of the set currently being run.
|
||||
* Do not modify this directly.
|
||||
*/
|
||||
|
@ -74,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;
|
||||
|
||||
|
@ -85,7 +104,8 @@ static NSException *testRaised __attribute__((unused)) = nil;
|
|||
* The SET_TIMER() macro turns on/off timing and, if timeing was
|
||||
* already on, adds the time of the current period to the duration.
|
||||
*/
|
||||
static void (*setEnded)(const char *name, BOOL completed, double duration) = 0;
|
||||
static void (*setEnded)(const char *name, BOOL completed, double duration)
|
||||
__attribute__((unused)) = 0;
|
||||
#define SET_TIMER(active) \
|
||||
({ \
|
||||
double started = _setTiming; \
|
||||
|
@ -104,7 +124,11 @@ static void (*setEnded)(const char *name, BOOL completed, double duration) = 0;
|
|||
* The global variable 'testHopeful' can be set to a non-zero value before
|
||||
* calling this function in order to specify that if the condition is
|
||||
* not true it should be treated as a dashed hope rather than a failure
|
||||
* (unless the tests are bing performed in 'developer' mode).
|
||||
* (unless the tests are being performed in 'developer' mode).
|
||||
*
|
||||
* The global variable 'testTimestamps' can be set to a non-zero value before
|
||||
* calling this function in order to specify that the output logged is to
|
||||
* include the timestamp of the testcase completion (entry into this function).
|
||||
*
|
||||
* If there is a better higher-level test macro available, please use
|
||||
* that instead. In particular, please use the PASS_EQUAL() macro wherever
|
||||
|
@ -124,22 +148,32 @@ static void pass(int passed, const char *format, ...)
|
|||
{
|
||||
va_list args;
|
||||
va_start(args, format);
|
||||
const char *ts = "";
|
||||
|
||||
if (testTimestamps)
|
||||
{
|
||||
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)
|
||||
{
|
||||
fprintf(stderr, "Passed test: ");
|
||||
fprintf(stderr, "Passed test: %s", ts);
|
||||
testPassed = YES;
|
||||
}
|
||||
#if !defined(TESTDEV)
|
||||
else if (YES == testHopeful)
|
||||
{
|
||||
fprintf(stderr, "Dashed hope: ");
|
||||
fprintf(stderr, "Dashed hope: %s", ts);
|
||||
testPassed = NO;
|
||||
}
|
||||
#endif
|
||||
else
|
||||
{
|
||||
fprintf(stderr, "Failed test: ");
|
||||
fprintf(stderr, "Failed test: %s", ts);
|
||||
testPassed = NO;
|
||||
}
|
||||
testIndent();
|
||||
|
@ -181,11 +215,9 @@ static void testStart()
|
|||
{ \
|
||||
int _cond; \
|
||||
id _tmp = testRaised; testRaised = nil; [_tmp release]; \
|
||||
[[NSGarbageCollector defaultCollector] collectExhaustively]; \
|
||||
testLineNumber = __LINE__; \
|
||||
testStart(); \
|
||||
_cond = (int)(testExpression__); \
|
||||
[[NSGarbageCollector defaultCollector] collectExhaustively]; \
|
||||
pass(_cond, "%s:%d ... " testFormat__, __FILE__, \
|
||||
__LINE__, ## __VA_ARGS__); \
|
||||
} \
|
||||
|
@ -231,7 +263,6 @@ static void testStart()
|
|||
id _obj; \
|
||||
id _exp; \
|
||||
id _tmp = testRaised; testRaised = nil; [_tmp release]; \
|
||||
[[NSGarbageCollector defaultCollector] collectExhaustively]; \
|
||||
testLineNumber = __LINE__; \
|
||||
testStart(); \
|
||||
_obj = (id)(testExpression__);\
|
||||
|
@ -248,7 +279,6 @@ static void testStart()
|
|||
{ \
|
||||
_cond = [_exp isEqual: _obj]; \
|
||||
} \
|
||||
[[NSGarbageCollector defaultCollector] collectExhaustively]; \
|
||||
pass(_cond, "%s:%d ... " testFormat__, __FILE__, \
|
||||
__LINE__, ## __VA_ARGS__); \
|
||||
if (0 == _cond) \
|
||||
|
@ -301,7 +331,6 @@ static void testStart()
|
|||
id _exp; \
|
||||
id _pat; \
|
||||
id _tmp = testRaised; testRaised = nil; [_tmp release]; \
|
||||
[[NSGarbageCollector defaultCollector] collectExhaustively]; \
|
||||
testLineNumber = __LINE__; \
|
||||
testStart(); \
|
||||
_obj = (id)(testExpression__);\
|
||||
|
@ -309,20 +338,16 @@ static void testStart()
|
|||
_pat = (id)(testExpect__);\
|
||||
_exp = [[[NSRegularExpression alloc] initWithPattern: _pat \
|
||||
options: 0 error: 0] autorelease];\
|
||||
_cond = 0; \
|
||||
if (nil != _dsc && nil != _exp) \
|
||||
{ \
|
||||
NSRange r = NSMakeRange(0, [_dsc length]);\
|
||||
r = [_exp rangeOfFirstMatchInString: _dsc options: 0 range: r];\
|
||||
if (r.length > 0)\
|
||||
{ \
|
||||
_cond = YES; \
|
||||
_cond = 1; \
|
||||
} \
|
||||
} \
|
||||
else \
|
||||
{ \
|
||||
_cond = NO; \
|
||||
} \
|
||||
[[NSGarbageCollector defaultCollector] collectExhaustively]; \
|
||||
pass(_cond, "%s:%d ... " testFormat__, __FILE__, \
|
||||
__LINE__, ## __VA_ARGS__); \
|
||||
if (0 == _cond) \
|
||||
|
@ -451,8 +476,9 @@ static void testStart()
|
|||
BOOL _save_hopeful = testHopeful; \
|
||||
unsigned _save_indentation = testIndentation; \
|
||||
int _save_line = __LINE__; \
|
||||
char *_save_set = (char*)malloc(strlen(setName) + 1); \
|
||||
strncpy(_save_set, setName, strlen(setName) + 1); \
|
||||
size_t _save_set_size = strlen(setName) + 1; \
|
||||
char *_save_set = (char*)malloc(_save_set_size); \
|
||||
STRNCPY(_save_set, _save_set_size, setName, _save_set_size); \
|
||||
fprintf(stderr, "Start set: "); \
|
||||
testIndent(); \
|
||||
fprintf(stderr, "%s:%d ... %s\n", __FILE__, __LINE__, _save_set); \
|
||||
|
@ -528,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
|
||||
|
@ -570,7 +597,8 @@ static void testStart()
|
|||
/* some good macros to compare floating point numbers */
|
||||
#import <math.h>
|
||||
#import <float.h>
|
||||
#define EQ(x, y) (fabs((x) - (y)) <= fabs((x) + (y)) * (FLT_EPSILON * 100))
|
||||
#define EQ(x, y) \
|
||||
(((x) >= ((y) - FLT_EPSILON*100)) && ((x) <= ((y) + FLT_EPSILON*100)))
|
||||
#define LE(x, y) ((x)<(y) || EQ(x, y))
|
||||
#define GE(x, y) ((y)<(x) || EQ(x, y))
|
||||
#define LT(x, y) (!GE(x, y))
|
||||
|
@ -637,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
|
||||
|
||||
|
|
|
@ -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,19 +54,45 @@ export GSTESTTOP
|
|||
GSTESTDIR=`pwd`
|
||||
export GSTESTDIR
|
||||
|
||||
GSTESTMODE=normal
|
||||
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
|
||||
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"
|
||||
;;
|
||||
--make-debug)
|
||||
GSMAKEOPTIONS+=" --debug"
|
||||
;;
|
||||
--make-no-silent)
|
||||
GSMAKEOPTIONS+=" --no-silent"
|
||||
;;
|
||||
--developer)
|
||||
GSTESTDEV=yes
|
||||
;;
|
||||
|
@ -77,8 +110,13 @@ do
|
|||
--sequential)
|
||||
GSSEQUENTIAL=yes
|
||||
;;
|
||||
--notimestamps)
|
||||
GSTEST_TS=0
|
||||
;;
|
||||
--verbose)
|
||||
GSVERBOSE=yes
|
||||
GSMAKEOPTIONS+=" messages=yes"
|
||||
GSVERBOSECFLAG="-v"
|
||||
;;
|
||||
--failfast)
|
||||
GSTESTMODE=failfast
|
||||
|
@ -90,12 +128,17 @@ 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 for any failed tests."
|
||||
echo "Use 'gnustep-tests --debug' to run gdb/lldb for any failed tests."
|
||||
echo "Use 'gnustep-tests --make-debug' to enable make debug output."
|
||||
echo "Use 'gnustep-tests --make-no-silent' to disable silent make output."
|
||||
echo "Use 'gnustep-tests --developer' to treat hopes as real tests."
|
||||
echo "Use 'gnustep-tests --verbose' for full/detailed log output."
|
||||
echo "Use 'gnustep-tests --sequential' to disable parallel building."
|
||||
echo "Use 'gnustep-tests --notimestamps' to disable testcase timestamps."
|
||||
echo
|
||||
echo "Interpreting the output"
|
||||
echo "-----------------------"
|
||||
|
@ -120,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
|
||||
|
@ -154,18 +212,23 @@ else
|
|||
OBJCXX=
|
||||
fi
|
||||
|
||||
GSTESTFLAGS=
|
||||
if test x"$GSTEST_TS" = x"0"
|
||||
then
|
||||
GSTESTFLAGS="-DTEST_TS=0"
|
||||
else
|
||||
GSTESTFLAGS="-DTEST_TS=1"
|
||||
fi
|
||||
if test "$GSTESTMODE" = "failfast"
|
||||
then
|
||||
if test x"$GSTESTDEV" = x"yes"
|
||||
then
|
||||
GSTESTFLAGS="-DTESTDEV=1 -DFAILFAST=1"
|
||||
GSTESTFLAGS="$GSTESTFLAGS -DTESTDEV=1 -DFAILFAST=1"
|
||||
else
|
||||
GSTESTFLAGS="-DFAILFAST=1"
|
||||
GSTESTFLAGS="$GSTESTFLAGS -DFAILFAST=1"
|
||||
fi
|
||||
elif test x"$GSTESTDEV" = x"yes"
|
||||
then
|
||||
GSTESTFLAGS="-DTESTDEV=1"
|
||||
GSTESTFLAGS="$GSTESTFLAGS -DTESTDEV=1"
|
||||
fi
|
||||
|
||||
if test x"$GSTESTFLAGS" != x
|
||||
|
@ -278,11 +341,17 @@ extract()
|
|||
shift
|
||||
while test $# != 0
|
||||
do
|
||||
grep "$1" "$f"
|
||||
grep -a "$1" "$f"
|
||||
shift
|
||||
done
|
||||
}
|
||||
|
||||
# Get the name of a test from its file name
|
||||
getname()
|
||||
{
|
||||
TESTNAME=`echo $1 | sed -e"s/^\(test^.]*\)$/\1.obj./;s/\.[^.]*//g"`
|
||||
}
|
||||
|
||||
# Function for platforms where grep can't search for multiple patterns.
|
||||
present()
|
||||
{
|
||||
|
@ -290,7 +359,7 @@ present()
|
|||
shift
|
||||
while test $# != 0
|
||||
do
|
||||
grep "$1" "$f" >/dev/null
|
||||
grep -a "$1" "$f" >/dev/null
|
||||
if test $? = "0"
|
||||
then
|
||||
return 0
|
||||
|
@ -300,20 +369,25 @@ present()
|
|||
return 1
|
||||
}
|
||||
|
||||
# Low level function to build and run the Objective-C program $TESTFILE
|
||||
# in the current directory. The TEMPLATE variable must already be set
|
||||
# to the name of the make file template if gnustep-make is to do the
|
||||
# building.
|
||||
# Low level function to build the Objective-C program $TESTFILE
|
||||
# in the current directory. The TEMPLATE variable must already
|
||||
# be set to the name of the make file template if gnustep-make
|
||||
# is to do the building.
|
||||
#
|
||||
build_and_run ()
|
||||
build_test ()
|
||||
{
|
||||
# The argument to this function is the name of a test file.
|
||||
# Remove the extension, if there is one. If there is no extension, add
|
||||
# .obj .
|
||||
TESTNAME=`echo $TESTFILE | sed -e"s/^\(test^.]*\)$/\1.obj./;s/\.[^.]*//g"`
|
||||
local TESTFILE=$1
|
||||
local TESTNAME=`echo $TESTFILE | sed -e"s/^\(test^.]*\)$/\1.obj./;s/\.[^.]*//g"`
|
||||
local BUILD_STATUS
|
||||
local BUILD_CMD
|
||||
local tmp
|
||||
|
||||
# Run the test.
|
||||
# Build the test.
|
||||
echo "Building $TESTNAME"
|
||||
|
||||
RUN_CMD="./obj/$TESTNAME"
|
||||
if test x"$TEMPLATE" = x
|
||||
then
|
||||
# The very simple case, we just need to compile a single file
|
||||
|
@ -330,57 +404,101 @@ build_and_run ()
|
|||
tmp=`basename $TESTFILE .c`
|
||||
if test x"$tmp" = x"$TESTFILE"
|
||||
then
|
||||
BUILD_CMD="$CXX -o ./obj/$TESTNAME $TESTFILE $ADDITIONAL_CXXFLAGS $ADDITIONAL_LDFLAGS"
|
||||
BUILD_CMD="$CXX -o $GSVERBOSECFLAG ./obj/$TESTNAME $TESTFILE $ADDITIONAL_CXXFLAGS $ADDITIONAL_LDFLAGS"
|
||||
else
|
||||
BUILD_CMD="$CC -o ./obj/$TESTNAME $TESTFILE $ADDITIONAL_CFLAGS $ADDITIONAL_LDFLAGS"
|
||||
BUILD_CMD="$CC -o $GSVERBOSECFLAG ./obj/$TESTNAME $TESTFILE $ADDITIONAL_CFLAGS $ADDITIONAL_LDFLAGS"
|
||||
fi
|
||||
else
|
||||
BUILD_CMD="$OBJCXX -o ./obj/$TESTNAME $TESTFILE $GSTESTFLAGS $GSTESTLIBS"
|
||||
BUILD_CMD="$OBJCXX -o $GSVERBOSECFLAG ./obj/$TESTNAME $TESTFILE $GSTESTFLAGS $GSTESTLIBS"
|
||||
fi
|
||||
else
|
||||
BUILD_CMD="$CC -o ./obj/$TESTNAME $TESTFILE $GSTESTFLAGS $GSTESTLIBS"
|
||||
BUILD_CMD="$CC -o $GSVERBOSECFLAG ./obj/$TESTNAME $TESTFILE $GSTESTFLAGS $GSTESTLIBS"
|
||||
fi
|
||||
else
|
||||
BUILD_CMD="$MAKE_CMD debug=yes $TESTNAME"
|
||||
echo $GSMAKEOPTIONS
|
||||
BUILD_CMD="$MAKE_CMD $GSMAKEOPTIONS $TESTNAME"
|
||||
fi
|
||||
|
||||
# Compile it if necessary.
|
||||
# Redirect errors to stdout so it shows up in the log,
|
||||
# but not in the summary.
|
||||
if test "$NEEDBUILD" = "yes"
|
||||
echo "Building $dir/$TESTFILE"
|
||||
echo "$BUILD_CMD"
|
||||
if test -r ./make-check.env
|
||||
then
|
||||
echo "Building $dir/$TESTFILE"
|
||||
echo "$BUILD_CMD"
|
||||
if test -r ./make-check.env
|
||||
then
|
||||
( . ./make-check.env; . ./TestInfo; $BUILD_CMD) 2>&1
|
||||
else
|
||||
( . ./TestInfo; $BUILD_CMD) 2>&1
|
||||
fi
|
||||
BUILDSTATUS=$?
|
||||
( . ./make-check.env; . ./TestInfo > /dev/null 2>&1; $BUILD_CMD) 2>&1
|
||||
else
|
||||
BUILDSTATUS=0
|
||||
( . ./TestInfo > /dev/null 2>&1; $BUILD_CMD) 2>&1
|
||||
fi
|
||||
|
||||
if test $BUILDSTATUS != 0
|
||||
if test $? != 0
|
||||
then
|
||||
echo "Failed build: $1" >&2
|
||||
rm -f ./obj/$TESTNAME
|
||||
echo "Failed build: $1" | tee -a $GSTESTSUM >> $GSTESTLOG
|
||||
if test "$GSTESTMODE" = "failfast"
|
||||
then
|
||||
return 1
|
||||
fi
|
||||
else
|
||||
# We want aggressive memory checking.
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
# Tell glibc to check for malloc errors, and to crash if it detects
|
||||
# any.
|
||||
# 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
|
||||
# .obj .
|
||||
local TESTFILE=$1
|
||||
local TESTNAME=$2
|
||||
|
||||
# Run the test.
|
||||
|
||||
local RUN_CMD="./obj/$TESTNAME"
|
||||
|
||||
if test -x $RUN_CMD
|
||||
then
|
||||
|
||||
# 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...
|
||||
|
@ -390,87 +508,123 @@ build_and_run ()
|
|||
# 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; $RUN_CMD )
|
||||
( . ./make-check.env; . ./TestInfo > /dev/null 2>&1; time with_timeout $GSTESTTIMEOUT $RUN_CMD )
|
||||
else
|
||||
( . ./TestInfo; $RUN_CMD )
|
||||
( . ./TestInfo > /dev/null 2>&1; time with_timeout $GSTESTTIMEOUT $RUN_CMD )
|
||||
fi
|
||||
fi
|
||||
|
||||
if test $? != 0
|
||||
then
|
||||
if test -r $TESTFILE.abort
|
||||
then
|
||||
result=$?
|
||||
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
|
||||
fi
|
||||
return 0
|
||||
}
|
||||
|
||||
# Function to build and run $TESTFILE in the current directory.
|
||||
# This actually manages the logging process and calls build_and_run
|
||||
# to perform the work.
|
||||
#
|
||||
run_test_file ()
|
||||
{
|
||||
RUNEXIT=0
|
||||
|
||||
echo >> $GSTESTLOG
|
||||
echo Testing $TESTFILE... >> $GSTESTLOG
|
||||
echo >> $GSTESTSUM
|
||||
run_test_log ()
|
||||
{
|
||||
local TESTFILE=$1
|
||||
local TESTNAME=$2
|
||||
local TESTLOG=$3
|
||||
local TESTVRB=$4
|
||||
|
||||
# Create temporary files
|
||||
touch $TESTVRB
|
||||
echo Testing $TESTFILE... > $TESTLOG
|
||||
|
||||
if test x"$GSVERBOSE" = xyes
|
||||
then
|
||||
build_and_run 2>&1 | tee $GSTESTLOG.tmp
|
||||
run_test $TESTFILE $TESTNAME 2>&1 | tee -a $TESTLOG >> $TESTVRB
|
||||
else
|
||||
build_and_run > $GSTESTLOG.tmp 2>&1
|
||||
run_test $TESTFILE $TESTNAME >> $TESTLOG 2>&1
|
||||
fi
|
||||
RUNEXIT=$?
|
||||
result=$?
|
||||
if test "$result" != "0"
|
||||
then
|
||||
if test "$GSTESTMODE" = "failfast"
|
||||
then
|
||||
RUNEXIT=1
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Add the information to the detailed log.
|
||||
cat $GSTESTLOG.tmp >> $GSTESTLOG
|
||||
proc_test_log ()
|
||||
{
|
||||
local TESTFILE=$1
|
||||
local TESTNAME=$2
|
||||
local TESTLOG=$3
|
||||
local TESTVRB=$4
|
||||
|
||||
# Extract the summary information and add it to the summary file.
|
||||
extract $GSTESTLOG.tmp "^Passed test:" "^Failed test:" "^Failed build:" "^Completed file:" "^Failed file:" "^Dashed hope:" "^Failed set:" "^Skipped set:" > $GSTESTSUM.tmp
|
||||
extract $TESTLOG "^Passed test:" "^Failed test:" "^Failed build:" "^Completed file:" "^Failed file:" "^Dashed hope:" "^Failed set:" "^Skipped set:" > $GSTESTSUM.tmp
|
||||
cat $GSTESTSUM.tmp >> $GSTESTSUM
|
||||
|
||||
cat $TESTLOG >> $GSTESTLOG
|
||||
rm -f $TESTLOG
|
||||
cat $TESTVRB
|
||||
rm -f $TESTVRB
|
||||
|
||||
# If there were failures or skipped tests then report them...
|
||||
if present $GSTESTSUM.tmp "^Failed build:" "^Failed file:" "^Failed set:" "^Failed test:" "^Skipped set:"
|
||||
then
|
||||
echo
|
||||
echo $dir/$TESTFILE:
|
||||
extract $GSTESTSUM.tmp "^Failed build:" "^Failed file:" "^Failed set:" "^Failed test:" "^Skipped set:"
|
||||
if test "$GSTESTMODE" = "failfast"
|
||||
then
|
||||
RUNEXIT=1
|
||||
fi
|
||||
else
|
||||
RUNEXIT=0
|
||||
fi
|
||||
|
||||
if test x"$GSTESTDBG" != x
|
||||
then
|
||||
DEBUGGER=`gnustep-config --variable=DEBUGGER`
|
||||
EXT=`gnustep-config --variable=EXEEXT`
|
||||
if present "$GSTESTSUM.tmp" "^Failed test:"
|
||||
then
|
||||
grep '^Failed test:' "$GSTESTLOG.tmp" | sed -e 's/^Failed test:[^:]*:\([0-9][0-9]*\).*/break testStart if testLineNumber==\1/' > "$GSTESTDBG"
|
||||
gdb "./obj/$TESTNAME" -x "$GSTESTDBG"
|
||||
grep -a '^Failed test:' "$GSTESTLOG.tmp" | sed -e 's/^Failed test:[^:]*:\([0-9][0-9]*\).*/break testStart if testLineNumber==\1/' > "$GSTESTDBG"
|
||||
$DEBUGGER "./obj/$TESTNAME"$EXT -x "$GSTESTDBG"
|
||||
rm -f "$GSTESTDBG"
|
||||
elif present "$GSTESTSUM.tmp" "^Failed file:"
|
||||
then
|
||||
gdb "./obj/$TESTNAME"
|
||||
$DEBUGGER "./obj/$TESTNAME"$EXT
|
||||
fi
|
||||
fi
|
||||
|
||||
return $RUNEXIT
|
||||
return 0
|
||||
}
|
||||
|
||||
|
||||
# Replace the old files.
|
||||
if test -f tests.log
|
||||
then
|
||||
|
@ -493,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"
|
||||
|
@ -546,7 +700,7 @@ do
|
|||
then
|
||||
$MAKE_CMD clean >/dev/null 2>&1
|
||||
fi
|
||||
rm -rf core core.* *.core obj GNUmakefile gdb.cmds tests.log tests.sum oldtests.log oldtests.sum tests.tmp tests.sum.tmp tests.log.tmp make-check.mak make-check.env
|
||||
rm -rf core core.* *.core obj GNUmakefile gdb.cmds test_*.err test_*.out tests.log tests.sum oldtests.log oldtests.sum tests.tmp tests.sum.tmp tests.log.tmp make-check.mak make-check.env
|
||||
|
||||
else
|
||||
echo "--- Running tests in $dir ---"
|
||||
|
@ -565,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
|
||||
|
||||
|
@ -608,10 +762,9 @@ do
|
|||
TEMPLATE=$GSTESTTOP/GNUmakefile.in
|
||||
fi
|
||||
|
||||
NEEDBUILD=yes
|
||||
if test x"$TEMPLATE" = x
|
||||
then
|
||||
rm -rf core obj GNUmakefile gdb.cmds
|
||||
rm -rf core core.* *.core obj GNUmakefile gdb.cmds
|
||||
else
|
||||
TESTNAMES=
|
||||
TESTRULES=
|
||||
|
@ -645,33 +798,121 @@ ${tmp}_OBJC_FILES=$TESTFILE"
|
|||
sed -e "s/@TESTNAMES@/$TESTNAMES/;s^@TESTOPTS@^$GSTESTOPTS^;s/@TESTRULES@/$TESTRULES/" < "$TEMPLATE" > GNUmakefile
|
||||
$MAKE_CMD clean >/dev/null 2>&1
|
||||
|
||||
# Try building all the test files in the directory in parallel.
|
||||
# If that works, set NEEDBUILD to 'no' so that we do not build
|
||||
# each individual test file later.
|
||||
echo "" >>$GSTESTLOG
|
||||
echo "Building in $dir" >>$GSTESTLOG
|
||||
if test -r ./make-check.env
|
||||
if test x"$GSSEQUENTIAL" = xyes
|
||||
then
|
||||
( . ./make-check.env; . ./TestInfo; $MAKE_CMD -j 4 debug=yes) >>$GSTESTLOG 2>&1
|
||||
build_state=1
|
||||
else
|
||||
( . ./TestInfo; $MAKE_CMD -j 4 debug=yes) >>$GSTESTLOG 2>&1
|
||||
# Try building all the test files in the directory in parallel.
|
||||
# If that fails, try building them individually.
|
||||
echo "" >>$GSTESTLOG
|
||||
echo "Building in $dir" >>$GSTESTLOG
|
||||
if test -r ./make-check.env
|
||||
then
|
||||
( . ./make-check.env; . ./TestInfo > /dev/null 2>&1; $MAKE_CMD -j 4 $GSMAKEOPTIONS) >>$GSTESTLOG 2>&1
|
||||
else
|
||||
( . ./TestInfo > /dev/null 2>&1; $MAKE_CMD -j 4 $GSMAKEOPTIONS) >>$GSTESTLOG 2>&1
|
||||
fi
|
||||
build_state=$?
|
||||
fi
|
||||
if test $? = 0
|
||||
if test $build_state != 0
|
||||
then
|
||||
NEEDBUILD=no
|
||||
for TESTFILE in $TESTS
|
||||
do
|
||||
build_test "$TESTFILE"
|
||||
done
|
||||
fi
|
||||
fi
|
||||
|
||||
# Now we process each test file in turn.
|
||||
# When cleaning, we only need to do one clean per directory.
|
||||
# Build up a list of the names of all the tests available.
|
||||
declare -A TESTMAP
|
||||
ALLTESTS=""
|
||||
for TESTFILE in $TESTS
|
||||
do
|
||||
run_test_file
|
||||
if test "$RUNEXIT" != "0"
|
||||
getname $TESTFILE
|
||||
TESTMAP["$TESTNAME"]="$TESTFILE"
|
||||
if test "$ALLTESTS" = ""
|
||||
then
|
||||
break
|
||||
ALLTESTS="$TESTNAME"
|
||||
else
|
||||
ALLTESTS="$ALLTESTS $TESTNAME"
|
||||
fi
|
||||
done
|
||||
|
||||
# Get the values defined for PARALLEL and PARALLEL in TestInfo
|
||||
# These variables should specify the names of sets of tests to
|
||||
# be executed in parallel or sequentially respectively.
|
||||
GSPAR=`( . ./TestInfo > /dev/null 2>&1; echo "$PARALLEL") 2>&1`
|
||||
GSSEQ=`( . ./TestInfo > /dev/null 2>&1; echo "$SEQUENCE") 2>&1`
|
||||
|
||||
# When PARALLEL and SEQUENCE are both missing or empty, we treat
|
||||
# it as if SEQUENCE had been set to contain an asterisk so that
|
||||
# all the tests are executed in order.
|
||||
if test "$GSPAR" = "" -a "$GSSEQ" = ""
|
||||
then
|
||||
GSSEQ="*"
|
||||
fi
|
||||
|
||||
# Any occurrence of an asterisk in PARALLEL or SEQUENCE is replaced
|
||||
# by the names of all the tests separated by white space.
|
||||
GSPAR=`echo "$GSPAR" | sed -e "s/\*/ $ALLTESTS /g"`
|
||||
GSSEQ=`echo "$GSSEQ" | sed -e "s/\*/ $ALLTESTS /g"`
|
||||
|
||||
# NB. we check the map to see that a file exists for each test name
|
||||
# because the names we have been given may not exist in the set of
|
||||
# tests being run (ie specified at the cvommand line).
|
||||
|
||||
# Now we process sequence test file in turn.
|
||||
i=0
|
||||
for TESTNAME in $GSSEQ
|
||||
do
|
||||
TESTFILE=${TESTMAP[$TESTNAME]}
|
||||
if test "$TESTFILE" != ""
|
||||
then
|
||||
if test x"$GSVERBOSE" = xyes
|
||||
then
|
||||
echo "Sequence perform $TESTNAME"
|
||||
fi
|
||||
run_test_log $TESTFILE $TESTNAME test_$i.out test_$i.err
|
||||
proc_test_log $TESTFILE $TESTNAME test_$i.out test_$i.err
|
||||
if test "$RUNEXIT" != "0"
|
||||
then
|
||||
break
|
||||
fi
|
||||
((i+=1))
|
||||
fi
|
||||
done
|
||||
|
||||
# And process all parallel test files together
|
||||
i=0
|
||||
for TESTNAME in $GSPAR
|
||||
do
|
||||
TESTFILE=${TESTMAP[$TESTNAME]}
|
||||
if test "$TESTFILE" != ""
|
||||
then
|
||||
if test x"$GSVERBOSE" = xyes
|
||||
then
|
||||
echo "Parallel startup $TESTNAME"
|
||||
fi
|
||||
run_test_log $TESTFILE $TESTNAME test_$i.out test_$i.err &
|
||||
((i+=1))
|
||||
fi
|
||||
done
|
||||
wait
|
||||
i=0
|
||||
for TESTNAME in $GSPAR
|
||||
do
|
||||
TESTFILE=${TESTMAP[$TESTNAME]}
|
||||
if test "$TESTFILE" != ""
|
||||
then
|
||||
proc_test_log $TESTFILE $TESTNAME test_$i.out test_$i.err
|
||||
if test "$RUNEXIT" != "0"
|
||||
then
|
||||
break
|
||||
fi
|
||||
((i+=1))
|
||||
fi
|
||||
done
|
||||
|
||||
else
|
||||
echo "Start.sh failed in '$TESTDIR' ... tests abandoned."
|
||||
for TESTFILE in $TESTS
|
||||
|
@ -730,7 +971,7 @@ fi
|
|||
|
||||
if test "$GSTESTMODE" = "clean"
|
||||
then
|
||||
rm -rf core obj GNUmakefile.tmp gdb.cmds tests.tmp tests.sum.tmp tests.log.tmp tests.log tests.sum oldtests.log oldtests.sum
|
||||
rm -rf core core.* *.core obj GNUmakefile.tmp gdb.cmds test_*.err test_*.out tests.tmp tests.sum.tmp tests.log.tmp tests.log tests.sum oldtests.log oldtests.sum
|
||||
else
|
||||
# Make some stats.
|
||||
if test -r tests.sum
|
||||
|
@ -769,13 +1010,18 @@ $RUNCMD
|
|||
FAILS=$?
|
||||
|
||||
# Delete the temporary file.
|
||||
rm -f tests.tmp tests.sum.tmp tests.log.tmp
|
||||
rm -f test_*.err test_*.out tests.tmp tests.sum.tmp tests.log.tmp
|
||||
|
||||
# Our exit status is 0 unless some test failed.
|
||||
present "$GSTESTSUM" "Failed set$" "Failed sets$" "Failed test$" "Failed tests$" "Failed build$" "Failed builds$" "Failed file$" "Failed files$"
|
||||
if [ $? = 1 ]
|
||||
if test -r "$GSTESTSUM"
|
||||
then
|
||||
exit 0
|
||||
present "$GSTESTSUM" "Failed set$" "Failed sets$" "Failed test$" "Failed tests$" "Failed build$" "Failed builds$" "Failed file$" "Failed files$"
|
||||
if [ $? = 1 ]
|
||||
then
|
||||
exit 0
|
||||
else
|
||||
exit 1
|
||||
fi
|
||||
else
|
||||
exit 1
|
||||
exit 0
|
||||
fi
|
||||
|
|
4
Version
4
Version
|
@ -3,7 +3,7 @@
|
|||
|
||||
# The version number of this release.
|
||||
GNUSTEP_MAKE_MAJOR_VERSION=2
|
||||
GNUSTEP_MAKE_MINOR_VERSION=6
|
||||
GNUSTEP_MAKE_SUBMINOR_VERSION=8
|
||||
GNUSTEP_MAKE_MINOR_VERSION=9
|
||||
GNUSTEP_MAKE_SUBMINOR_VERSION=3
|
||||
GNUSTEP_MAKE_VERSION=${GNUSTEP_MAKE_MAJOR_VERSION}.${GNUSTEP_MAKE_MINOR_VERSION}.${GNUSTEP_MAKE_SUBMINOR_VERSION}
|
||||
|
||||
|
|
296
aclocal.m4
vendored
Normal file
296
aclocal.m4
vendored
Normal file
|
@ -0,0 +1,296 @@
|
|||
# generated automatically by aclocal 1.16.5 -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996-2021 Free Software Foundation, Inc.
|
||||
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
|
||||
# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*-
|
||||
# serial 12 (pkg-config-0.29.2)
|
||||
|
||||
dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
|
||||
dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
|
||||
dnl
|
||||
dnl This program is free software; you can redistribute it and/or modify
|
||||
dnl it under the terms of the GNU General Public License as published by
|
||||
dnl the Free Software Foundation; either version 2 of the License, or
|
||||
dnl (at your option) any later version.
|
||||
dnl
|
||||
dnl This program is distributed in the hope that it will be useful, but
|
||||
dnl WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
dnl General Public License for more details.
|
||||
dnl
|
||||
dnl You should have received a copy of the GNU General Public License
|
||||
dnl along with this program; if not, write to the Free Software
|
||||
dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
|
||||
dnl 02111-1307, USA.
|
||||
dnl
|
||||
dnl As a special exception to the GNU General Public License, if you
|
||||
dnl distribute this file as part of a program that contains a
|
||||
dnl configuration script generated by Autoconf, you may include it under
|
||||
dnl the same distribution terms that you use for the rest of that
|
||||
dnl program.
|
||||
|
||||
dnl PKG_PREREQ(MIN-VERSION)
|
||||
dnl -----------------------
|
||||
dnl Since: 0.29
|
||||
dnl
|
||||
dnl Verify that the version of the pkg-config macros are at least
|
||||
dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's
|
||||
dnl installed version of pkg-config, this checks the developer's version
|
||||
dnl of pkg.m4 when generating configure.
|
||||
dnl
|
||||
dnl To ensure that this macro is defined, also add:
|
||||
dnl m4_ifndef([PKG_PREREQ],
|
||||
dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])])
|
||||
dnl
|
||||
dnl See the "Since" comment for each macro you use to see what version
|
||||
dnl of the macros you require.
|
||||
m4_defun([PKG_PREREQ],
|
||||
[m4_define([PKG_MACROS_VERSION], [0.29.2])
|
||||
m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
|
||||
[m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
|
||||
])dnl PKG_PREREQ
|
||||
|
||||
dnl PKG_PROG_PKG_CONFIG([MIN-VERSION])
|
||||
dnl ----------------------------------
|
||||
dnl Since: 0.16
|
||||
dnl
|
||||
dnl Search for the pkg-config tool and set the PKG_CONFIG variable to
|
||||
dnl first found in the path. Checks that the version of pkg-config found
|
||||
dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is
|
||||
dnl used since that's the first version where most current features of
|
||||
dnl pkg-config existed.
|
||||
AC_DEFUN([PKG_PROG_PKG_CONFIG],
|
||||
[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
|
||||
m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
|
||||
m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
|
||||
AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
|
||||
AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
|
||||
AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
|
||||
|
||||
if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
|
||||
AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
|
||||
fi
|
||||
if test -n "$PKG_CONFIG"; then
|
||||
_pkg_min_version=m4_default([$1], [0.9.0])
|
||||
AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
|
||||
if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
|
||||
AC_MSG_RESULT([yes])
|
||||
else
|
||||
AC_MSG_RESULT([no])
|
||||
PKG_CONFIG=""
|
||||
fi
|
||||
fi[]dnl
|
||||
])dnl PKG_PROG_PKG_CONFIG
|
||||
|
||||
dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
||||
dnl -------------------------------------------------------------------
|
||||
dnl Since: 0.18
|
||||
dnl
|
||||
dnl Check to see whether a particular set of modules exists. Similar to
|
||||
dnl PKG_CHECK_MODULES(), but does not set variables or print errors.
|
||||
dnl
|
||||
dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
|
||||
dnl only at the first occurence in configure.ac, so if the first place
|
||||
dnl it's called might be skipped (such as if it is within an "if", you
|
||||
dnl have to call PKG_CHECK_EXISTS manually
|
||||
AC_DEFUN([PKG_CHECK_EXISTS],
|
||||
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
|
||||
if test -n "$PKG_CONFIG" && \
|
||||
AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
|
||||
m4_default([$2], [:])
|
||||
m4_ifvaln([$3], [else
|
||||
$3])dnl
|
||||
fi])
|
||||
|
||||
dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
|
||||
dnl ---------------------------------------------
|
||||
dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting
|
||||
dnl pkg_failed based on the result.
|
||||
m4_define([_PKG_CONFIG],
|
||||
[if test -n "$$1"; then
|
||||
pkg_cv_[]$1="$$1"
|
||||
elif test -n "$PKG_CONFIG"; then
|
||||
PKG_CHECK_EXISTS([$3],
|
||||
[pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
|
||||
test "x$?" != "x0" && pkg_failed=yes ],
|
||||
[pkg_failed=yes])
|
||||
else
|
||||
pkg_failed=untried
|
||||
fi[]dnl
|
||||
])dnl _PKG_CONFIG
|
||||
|
||||
dnl _PKG_SHORT_ERRORS_SUPPORTED
|
||||
dnl ---------------------------
|
||||
dnl Internal check to see if pkg-config supports short errors.
|
||||
AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
|
||||
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
|
||||
if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
|
||||
_pkg_short_errors_supported=yes
|
||||
else
|
||||
_pkg_short_errors_supported=no
|
||||
fi[]dnl
|
||||
])dnl _PKG_SHORT_ERRORS_SUPPORTED
|
||||
|
||||
|
||||
dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
|
||||
dnl [ACTION-IF-NOT-FOUND])
|
||||
dnl --------------------------------------------------------------
|
||||
dnl Since: 0.4.0
|
||||
dnl
|
||||
dnl Note that if there is a possibility the first call to
|
||||
dnl PKG_CHECK_MODULES might not happen, you should be sure to include an
|
||||
dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
|
||||
AC_DEFUN([PKG_CHECK_MODULES],
|
||||
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
|
||||
AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
|
||||
AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
|
||||
|
||||
pkg_failed=no
|
||||
AC_MSG_CHECKING([for $2])
|
||||
|
||||
_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
|
||||
_PKG_CONFIG([$1][_LIBS], [libs], [$2])
|
||||
|
||||
m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
|
||||
and $1[]_LIBS to avoid the need to call pkg-config.
|
||||
See the pkg-config man page for more details.])
|
||||
|
||||
if test $pkg_failed = yes; then
|
||||
AC_MSG_RESULT([no])
|
||||
_PKG_SHORT_ERRORS_SUPPORTED
|
||||
if test $_pkg_short_errors_supported = yes; then
|
||||
$1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
|
||||
else
|
||||
$1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
|
||||
fi
|
||||
# Put the nasty error message in config.log where it belongs
|
||||
echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
|
||||
|
||||
m4_default([$4], [AC_MSG_ERROR(
|
||||
[Package requirements ($2) were not met:
|
||||
|
||||
$$1_PKG_ERRORS
|
||||
|
||||
Consider adjusting the PKG_CONFIG_PATH environment variable if you
|
||||
installed software in a non-standard prefix.
|
||||
|
||||
_PKG_TEXT])[]dnl
|
||||
])
|
||||
elif test $pkg_failed = untried; then
|
||||
AC_MSG_RESULT([no])
|
||||
m4_default([$4], [AC_MSG_FAILURE(
|
||||
[The pkg-config script could not be found or is too old. Make sure it
|
||||
is in your PATH or set the PKG_CONFIG environment variable to the full
|
||||
path to pkg-config.
|
||||
|
||||
_PKG_TEXT
|
||||
|
||||
To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
|
||||
])
|
||||
else
|
||||
$1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
|
||||
$1[]_LIBS=$pkg_cv_[]$1[]_LIBS
|
||||
AC_MSG_RESULT([yes])
|
||||
$3
|
||||
fi[]dnl
|
||||
])dnl PKG_CHECK_MODULES
|
||||
|
||||
|
||||
dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
|
||||
dnl [ACTION-IF-NOT-FOUND])
|
||||
dnl ---------------------------------------------------------------------
|
||||
dnl Since: 0.29
|
||||
dnl
|
||||
dnl Checks for existence of MODULES and gathers its build flags with
|
||||
dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags
|
||||
dnl and VARIABLE-PREFIX_LIBS from --libs.
|
||||
dnl
|
||||
dnl Note that if there is a possibility the first call to
|
||||
dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to
|
||||
dnl include an explicit call to PKG_PROG_PKG_CONFIG in your
|
||||
dnl configure.ac.
|
||||
AC_DEFUN([PKG_CHECK_MODULES_STATIC],
|
||||
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
|
||||
_save_PKG_CONFIG=$PKG_CONFIG
|
||||
PKG_CONFIG="$PKG_CONFIG --static"
|
||||
PKG_CHECK_MODULES($@)
|
||||
PKG_CONFIG=$_save_PKG_CONFIG[]dnl
|
||||
])dnl PKG_CHECK_MODULES_STATIC
|
||||
|
||||
|
||||
dnl PKG_INSTALLDIR([DIRECTORY])
|
||||
dnl -------------------------
|
||||
dnl Since: 0.27
|
||||
dnl
|
||||
dnl Substitutes the variable pkgconfigdir as the location where a module
|
||||
dnl should install pkg-config .pc files. By default the directory is
|
||||
dnl $libdir/pkgconfig, but the default can be changed by passing
|
||||
dnl DIRECTORY. The user can override through the --with-pkgconfigdir
|
||||
dnl parameter.
|
||||
AC_DEFUN([PKG_INSTALLDIR],
|
||||
[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
|
||||
m4_pushdef([pkg_description],
|
||||
[pkg-config installation directory @<:@]pkg_default[@:>@])
|
||||
AC_ARG_WITH([pkgconfigdir],
|
||||
[AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],,
|
||||
[with_pkgconfigdir=]pkg_default)
|
||||
AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
|
||||
m4_popdef([pkg_default])
|
||||
m4_popdef([pkg_description])
|
||||
])dnl PKG_INSTALLDIR
|
||||
|
||||
|
||||
dnl PKG_NOARCH_INSTALLDIR([DIRECTORY])
|
||||
dnl --------------------------------
|
||||
dnl Since: 0.27
|
||||
dnl
|
||||
dnl Substitutes the variable noarch_pkgconfigdir as the location where a
|
||||
dnl module should install arch-independent pkg-config .pc files. By
|
||||
dnl default the directory is $datadir/pkgconfig, but the default can be
|
||||
dnl changed by passing DIRECTORY. The user can override through the
|
||||
dnl --with-noarch-pkgconfigdir parameter.
|
||||
AC_DEFUN([PKG_NOARCH_INSTALLDIR],
|
||||
[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
|
||||
m4_pushdef([pkg_description],
|
||||
[pkg-config arch-independent installation directory @<:@]pkg_default[@:>@])
|
||||
AC_ARG_WITH([noarch-pkgconfigdir],
|
||||
[AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],,
|
||||
[with_noarch_pkgconfigdir=]pkg_default)
|
||||
AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
|
||||
m4_popdef([pkg_default])
|
||||
m4_popdef([pkg_description])
|
||||
])dnl PKG_NOARCH_INSTALLDIR
|
||||
|
||||
|
||||
dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
|
||||
dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
|
||||
dnl -------------------------------------------
|
||||
dnl Since: 0.28
|
||||
dnl
|
||||
dnl Retrieves the value of the pkg-config variable for the given module.
|
||||
AC_DEFUN([PKG_CHECK_VAR],
|
||||
[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
|
||||
AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
|
||||
|
||||
_PKG_CONFIG([$1], [variable="][$3]["], [$2])
|
||||
AS_VAR_COPY([$1], [pkg_cv_][$1])
|
||||
|
||||
AS_VAR_IF([$1], [""], [$5], [$4])dnl
|
||||
])dnl PKG_CHECK_VAR
|
||||
|
||||
m4_include([m4/gs_cc_is_clang.m4])
|
||||
m4_include([m4/gs_check_abi20_linker.m4])
|
||||
m4_include([m4/gs_gcc_version.m4])
|
||||
m4_include([m4/gs_library_combo.m4])
|
||||
m4_include([m4/gs_objc_runtime.m4])
|
||||
m4_include([m4/gs_runtime_abi.m4])
|
192
common.make
192
common.make
|
@ -78,9 +78,73 @@ REL_PATH_SCRIPT = $(GNUSTEP_MAKEFILES)/relative_path.sh
|
|||
#
|
||||
include $(GNUSTEP_MAKEFILES)/names.make
|
||||
|
||||
# Get library_combo from LIBRARY_COMBO or default_library_combo (or
|
||||
# from the command line if the user defined it on the command line by
|
||||
# invoking `make library_combo=gnu-gnu-gnu'; command line
|
||||
# automatically takes the precedence over makefile definitions, so
|
||||
# setting library_combo here has no effect if the user already defined
|
||||
# it on the command line).
|
||||
ifdef LIBRARY_COMBO
|
||||
library_combo := $(LIBRARY_COMBO)
|
||||
else
|
||||
library_combo := $(default_library_combo)
|
||||
endif
|
||||
|
||||
# Handle abbreviations for library combinations.
|
||||
the_library_combo = $(library_combo)
|
||||
|
||||
ifeq ($(the_library_combo), nx)
|
||||
the_library_combo = nx-nx-nx
|
||||
endif
|
||||
|
||||
ifeq ($(the_library_combo), apple)
|
||||
the_library_combo = apple-apple-apple
|
||||
endif
|
||||
|
||||
ifeq ($(the_library_combo), gnu)
|
||||
the_library_combo = gnu-gnu-gnu
|
||||
endif
|
||||
|
||||
ifeq ($(the_library_combo), ng)
|
||||
the_library_combo = ng-gnu-gnu
|
||||
endif
|
||||
|
||||
ifeq ($(the_library_combo), fd)
|
||||
the_library_combo = gnu-fd-gnu
|
||||
endif
|
||||
|
||||
# Strip out the individual libraries from the library_combo string
|
||||
combo_list = $(subst -, ,$(the_library_combo))
|
||||
|
||||
# NB: The user can always specify any of the OBJC_RUNTIME_LIB, the
|
||||
# FOUNDATION_LIB and the GUI_LIB variable manually overriding our
|
||||
# determination.
|
||||
|
||||
ifeq ($(OBJC_RUNTIME_LIB),)
|
||||
OBJC_RUNTIME_LIB = $(word 1,$(combo_list))
|
||||
endif
|
||||
|
||||
ifeq ($(FOUNDATION_LIB),)
|
||||
FOUNDATION_LIB = $(word 2,$(combo_list))
|
||||
endif
|
||||
|
||||
ifeq ($(GUI_LIB),)
|
||||
GUI_LIB = $(word 3,$(combo_list))
|
||||
endif
|
||||
|
||||
# Now build and export the final LIBRARY_COMBO variable, which is the
|
||||
# only variable (together with OBJC_RUNTIME_LIB, FOUNDATION_LIB and
|
||||
# GUI_LIB) the other makefiles need to know about. This LIBRARY_COMBO
|
||||
# might be different from the original one, because we might have
|
||||
# replaced it with a library_combo provided on the command line, or we
|
||||
# might have fixed up parts of it in accordance to some custom
|
||||
# OBJC_RUNTIME_LIB, FOUNDATION_LIB and/or GUI_LIB !
|
||||
export LIBRARY_COMBO = $(OBJC_RUNTIME_LIB)-$(FOUNDATION_LIB)-$(GUI_LIB)
|
||||
|
||||
|
||||
ifeq ($(GNUSTEP_IS_FLATTENED), no)
|
||||
GNUSTEP_HOST_DIR = $(GNUSTEP_HOST_CPU)/$(GNUSTEP_HOST_OS)
|
||||
GNUSTEP_TARGET_DIR = $(GNUSTEP_TARGET_CPU)/$(GNUSTEP_TARGET_OS)
|
||||
GNUSTEP_HOST_DIR = $(GNUSTEP_HOST_CPU)-$(GNUSTEP_HOST_OS)
|
||||
GNUSTEP_TARGET_DIR = $(GNUSTEP_TARGET_CPU)-$(GNUSTEP_TARGET_OS)
|
||||
GNUSTEP_HOST_LDIR = $(GNUSTEP_HOST_DIR)/$(LIBRARY_COMBO)
|
||||
GNUSTEP_TARGET_LDIR = $(GNUSTEP_TARGET_DIR)/$(LIBRARY_COMBO)
|
||||
else
|
||||
|
@ -90,14 +154,19 @@ else
|
|||
GNUSTEP_TARGET_LDIR = .
|
||||
endif
|
||||
|
||||
# Then, work out precisely library combos etc
|
||||
include $(GNUSTEP_MAKEFILES)/library-combo.make
|
||||
|
||||
#
|
||||
# Get the config information (host/target/library-combo specific),
|
||||
# this includes CC, OPTFLAG etc.
|
||||
#
|
||||
include $(GNUSTEP_MAKEFILES)/$(GNUSTEP_TARGET_LDIR)/config.make
|
||||
ifeq ($(GNUSTEP_IS_FLATTENED),yes)
|
||||
include $(GNUSTEP_MAKEFILES)/config.make
|
||||
else
|
||||
-include $(GNUSTEP_MAKEFILES)/config.make
|
||||
-include $(GNUSTEP_MAKEFILES)/$(GNUSTEP_TARGET_LDIR)/config.make
|
||||
endif
|
||||
|
||||
# Then, work out precisely library combos etc
|
||||
include $(GNUSTEP_MAKEFILES)/library-combo.make
|
||||
|
||||
# GNUSTEP_BUILD_DIR is the directory in which anything generated
|
||||
# during the build will be placed. '.' means it's the same as the
|
||||
|
@ -259,7 +328,7 @@ ifneq ($(GNUSTEP_INSTALLATION_DIR),)
|
|||
ifeq ($(GNUSTEP_IS_FLATTENED),yes)
|
||||
GNUSTEP_HEADERS = $(GNUSTEP_INSTALLATION_DIR)/Library/Headers
|
||||
else
|
||||
GNUSTEP_HEADERS = $(GNUSTEP_INSTALLATION_DIR)/Library/Headers/$(LIBRARY_COMBO)
|
||||
GNUSTEP_HEADERS = $(GNUSTEP_INSTALLATION_DIR)/Library/Headers/$(GNUSTEP_TARGET_LDIR)
|
||||
endif
|
||||
GNUSTEP_APPLICATION_SUPPORT = $(GNUSTEP_LIBRARY)/ApplicationSupport
|
||||
GNUSTEP_BUNDLES = $(GNUSTEP_LIBRARY)/Bundles
|
||||
|
@ -298,7 +367,7 @@ else
|
|||
ifeq ($(GNUSTEP_IS_FLATTENED),yes)
|
||||
GNUSTEP_HEADERS = $(MAYBE_DESTDIR)$(GNUSTEP_$(GNUSTEP_INSTALLATION_DOMAIN)_HEADERS)
|
||||
else
|
||||
GNUSTEP_HEADERS = $(MAYBE_DESTDIR)$(GNUSTEP_$(GNUSTEP_INSTALLATION_DOMAIN)_HEADERS)/$(LIBRARY_COMBO)
|
||||
GNUSTEP_HEADERS = $(MAYBE_DESTDIR)$(GNUSTEP_$(GNUSTEP_INSTALLATION_DOMAIN)_HEADERS)/$(GNUSTEP_TARGET_LDIR)
|
||||
endif
|
||||
GNUSTEP_APPLICATION_SUPPORT = $(MAYBE_DESTDIR)$(GNUSTEP_$(GNUSTEP_INSTALLATION_DOMAIN)_APPLICATION_SUPPORT)
|
||||
GNUSTEP_BUNDLES = $(MAYBE_DESTDIR)$(GNUSTEP_$(GNUSTEP_INSTALLATION_DOMAIN)_BUNDLES)
|
||||
|
@ -350,8 +419,8 @@ endif
|
|||
# So all instances of INSTALL_ROOT_DIR in user's makefiles should be
|
||||
# replaced with DESTDIR.
|
||||
#
|
||||
# Anyway, until all makefiles have been updated, we set INSTALL_ROOT_DIR for backwards
|
||||
# compatibility.
|
||||
# Anyway, until all makefiles have been updated, we set INSTALL_ROOT_DIR
|
||||
# for backwards compatibility.
|
||||
#
|
||||
ifeq ($(GNUSTEP_MAKE_STRICT_V2_MODE),yes)
|
||||
ifneq ($(INSTALL_ROOT_DIR),)
|
||||
|
@ -389,8 +458,8 @@ ifeq ($(GNUSTEP_IS_FLATTENED), no)
|
|||
# Later, we'll systematically replace domain with USER, the LOCAL,
|
||||
# then NETWORK, then SYSTEM.
|
||||
GS_HEADER_PATH = \
|
||||
$(GNUSTEP_$(domain)_HEADERS)/$(LIBRARY_COMBO)/$(GNUSTEP_TARGET_DIR) \
|
||||
$(GNUSTEP_$(domain)_HEADERS)/$(LIBRARY_COMBO) \
|
||||
$(GNUSTEP_$(domain)_HEADERS)/$(GNUSTEP_TARGET_LDIR) \
|
||||
$(GNUSTEP_$(domain)_HEADERS)/$(GNUSTEP_TARGET_DIR) \
|
||||
$(GNUSTEP_$(domain)_HEADERS)
|
||||
|
||||
GS_LIBRARY_PATH = \
|
||||
|
@ -414,6 +483,10 @@ endif
|
|||
|
||||
# First, we add paths based in the USER domain.
|
||||
|
||||
# But don't add GNUSTEP_USER_ROOT paths if being built by dpkg-buildpackage;
|
||||
# this is a Debian-specific convenience for package builders.
|
||||
ifndef DEB_BUILD_ARCH
|
||||
|
||||
# Please note that the following causes GS_HEADER_PATH to be evaluated
|
||||
# with the variable domain equal to USER, which gives the effect we
|
||||
# wanted.
|
||||
|
@ -421,6 +494,8 @@ GNUSTEP_HEADERS_DIRS = $(foreach domain,USER,$(GS_HEADER_PATH))
|
|||
GNUSTEP_LIBRARIES_DIRS = $(foreach domain,USER,$(GS_LIBRARY_PATH))
|
||||
GNUSTEP_FRAMEWORKS_DIRS = $(foreach domain,USER,$(GS_FRAMEWORK_PATH))
|
||||
|
||||
endif
|
||||
|
||||
# Second, if LOCAL flags are different from USER flags (which have
|
||||
# already been added), we add the LOCAL flags too.
|
||||
ifneq ($(GNUSTEP_LOCAL_HEADERS), $(GNUSTEP_USER_HEADERS))
|
||||
|
@ -534,40 +609,6 @@ endif
|
|||
ifeq ($(OBJC_RUNTIME_LIB), gnu)
|
||||
OBJC_RUNTIME = GNU
|
||||
endif
|
||||
ifeq ($(OBJC_RUNTIME_LIB), gnugc)
|
||||
OBJC_RUNTIME = GNU
|
||||
endif
|
||||
|
||||
# If all of the following really needed ? If the system is not
|
||||
# flattened, multiple Foundation libraries are not permitted anyway,
|
||||
# so libFoundation could just put his headers in Foundation/. If
|
||||
# library combos are used, all headers are in a library-combo
|
||||
# directory, so libFoundation could still put his headers in
|
||||
# Foundation/ and no conflict should arise. As for the
|
||||
# GNUSTEP_TARGET_DIR, maybe we should key all of our headers in a
|
||||
# GNUSTEP_TARGET_LDIR directory (rather than just a LIBRARY_COMBO
|
||||
# directory). But does it really matter in practice anyway ?
|
||||
ifeq ($(GNUSTEP_IS_FLATTENED),yes)
|
||||
GNUSTEP_HEADERS_FND_DIRS = \
|
||||
$(GNUSTEP_USER_HEADERS)/libFoundation \
|
||||
$(GNUSTEP_LOCAL_HEADERS)/libFoundation \
|
||||
$(GNUSTEP_NETWORK_HEADERS)/libFoundation \
|
||||
$(GNUSTEP_SYSTEM_HEADERS)/libFoundation \
|
||||
$(GNUSTEP_USER_HEADERS)/libFoundation/$(GNUSTEP_TARGET_DIR)/$(OBJC_RUNTIME) \
|
||||
$(GNUSTEP_LOCAL_HEADERS)/libFoundation/$(GNUSTEP_TARGET_DIR)/$(OBJC_RUNTIME) \
|
||||
$(GNUSTEP_NETWORK_HEADERS)/libFoundation/$(GNUSTEP_TARGET_DIR)/$(OBJC_RUNTIME) \
|
||||
$(GNUSTEP_SYSTEM_HEADERS)/libFoundation/$(GNUSTEP_TARGET_DIR)/$(OBJC_RUNTIME)
|
||||
else
|
||||
GNUSTEP_HEADERS_FND_DIRS = \
|
||||
$(GNUSTEP_USER_HEADERS)/$(LIBRARY_COMBO)/libFoundation \
|
||||
$(GNUSTEP_LOCAL_HEADERS)/$(LIBRARY_COMBO)/libFoundation \
|
||||
$(GNUSTEP_NETWORK_HEADERS)/$(LIBRARY_COMBO)/libFoundation \
|
||||
$(GNUSTEP_SYSTEM_HEADERS)/$(LIBRARY_COMBO)/libFoundation \
|
||||
$(GNUSTEP_USER_HEADERS)/$(LIBRARY_COMBO)/libFoundation/$(GNUSTEP_TARGET_DIR)/$(OBJC_RUNTIME) \
|
||||
$(GNUSTEP_LOCAL_HEADERS)/$(LIBRARY_COMBO)/libFoundation/$(GNUSTEP_TARGET_DIR)/$(OBJC_RUNTIME) \
|
||||
$(GNUSTEP_NETWORK_HEADERS)/$(LIBRARY_COMBO)/libFoundation/$(GNUSTEP_TARGET_DIR)/$(OBJC_RUNTIME) \
|
||||
$(GNUSTEP_SYSTEM_HEADERS)/$(LIBRARY_COMBO)/libFoundation/$(GNUSTEP_TARGET_DIR)/$(OBJC_RUNTIME)
|
||||
endif
|
||||
|
||||
ifeq ($(REMOVE_EMPTY_DIRS), yes)
|
||||
# Build the GNUSTEP_HEADERS_FND_FLAG by removing the empty dirs
|
||||
|
@ -597,7 +638,7 @@ INTERNAL_OBJCFLAGS = -fno-strict-aliasing
|
|||
# Linux CentOS 6.5 i386 clang...
|
||||
# Clang inserts move aligned packed instructions (i.e. movaps,etc) assembly
|
||||
# code however stack is not aligned causing fault crashes...
|
||||
ifeq ($(CC),clang)
|
||||
ifeq ($(CLANG_CC), yes)
|
||||
ifneq ($(wildcard /etc/redhat-release),"")
|
||||
RH_RELEASE := $(shell cat 2>/dev/null /etc/redhat-release)
|
||||
ifeq ($(findstring CentOS,$(RH_RELEASE)),CentOS)
|
||||
|
@ -623,18 +664,6 @@ ifeq ($(USE_OBJC_EXCEPTIONS), yes)
|
|||
INTERNAL_LDFLAGS += -fexceptions
|
||||
endif
|
||||
|
||||
# If the compiler supports nonfragile ABI and the user wants us to
|
||||
# use them, turn them on!
|
||||
ifeq ($(USE_NONFRAGILE_ABI), yes)
|
||||
INTERNAL_OBJCFLAGS += -fobjc-nonfragile-abi -D_NONFRAGILE_ABI
|
||||
INTERNAL_LDFLAGS += -fobjc-nonfragile-abi
|
||||
endif
|
||||
|
||||
# If we are using garbage collection we set a define to say so.
|
||||
ifeq ($(OBJC_WITH_GC), yes)
|
||||
INTERNAL_OBJCFLAGS += -DGS_WITH_GC=1
|
||||
endif
|
||||
|
||||
#
|
||||
# Now decide whether to build shared objects or not. Nothing depending
|
||||
# on the value of the shared variable is allowed before this point!
|
||||
|
@ -712,9 +741,11 @@ endif
|
|||
ifeq ($(debug), yes)
|
||||
# Optimization flags are filtered out as they make debugging harder.
|
||||
OPTFLAG := $(filter-out -O%, $(OPTFLAG))
|
||||
CCFLAGS := $(filter-out -O%, $(CCFLAGS))
|
||||
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
|
||||
|
@ -728,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
|
||||
|
@ -784,7 +850,7 @@ endif
|
|||
#
|
||||
# Common variables for subprojects
|
||||
#
|
||||
SUBPROJECT_PRODUCT = subproject$(OEXT)
|
||||
SUBPROJECT_PRODUCT = subproject.txt
|
||||
|
||||
#
|
||||
# Set JAVA_HOME if not set.
|
||||
|
@ -813,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
|
||||
|
@ -878,12 +944,14 @@ endif
|
|||
ifneq ($(FOUNDATION_LIB), apple)
|
||||
# Under Win32 paths are so confused this warning is not worthwhile
|
||||
ifneq ($(findstring mingw, $(GNUSTEP_HOST_OS)), mingw)
|
||||
ifneq ($(GNUSTEP_HOST_OS), windows)
|
||||
|
||||
ifeq ($(findstring $(GNUSTEP_SYSTEM_TOOLS),$(PATH)),)
|
||||
$(warning WARNING: Your PATH may not be set up correctly !)
|
||||
$(warning Please try again after adding "$(GNUSTEP_SYSTEM_TOOLS)" to your path)
|
||||
endif
|
||||
|
||||
endif
|
||||
endif
|
||||
endif # code used when FOUNDATION_LIB != apple
|
||||
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
# modify it under the terms of the GNU General Public License
|
||||
# as published by the Free Software Foundation; either version 3
|
||||
# of the License, or (at your option) any later version.
|
||||
#
|
||||
#
|
||||
# You should have received a copy of the GNU General Public
|
||||
# License along with this library; see the file COPYING.
|
||||
# If not, write to the Free Software Foundation,
|
||||
|
@ -74,12 +74,10 @@ endif
|
|||
# not set in the config files (or on the command-line or in
|
||||
# environment).
|
||||
ifeq ($(GNUSTEP_MAKE_STRICT_V2_MODE),yes)
|
||||
# FIXME: These should abort if the variables are ever evaluated, but
|
||||
# it needs testing.
|
||||
# GNUSTEP_SYSTEM_ROOT = $(error GNUSTEP_SYSTEM_ROOT is obsolete)
|
||||
# GNUSTEP_LOCAL_ROOT = $(error GNUSTEP_LOCAL_ROOT is obsolete)
|
||||
# GNUSTEP_NETWORK_ROOT = $(error GNUSTEP_NETWORK_ROOT is obsolete)
|
||||
# GNUSTEP_USER_DIR = $(error GNUSTEP_USER_DIR is obsolete)
|
||||
GNUSTEP_SYSTEM_ROOT = $(error GNUSTEP_SYSTEM_ROOT is obsolete)
|
||||
GNUSTEP_LOCAL_ROOT = $(error GNUSTEP_LOCAL_ROOT is obsolete)
|
||||
GNUSTEP_NETWORK_ROOT = $(error GNUSTEP_NETWORK_ROOT is obsolete)
|
||||
GNUSTEP_USER_DIR = $(error GNUSTEP_USER_DIR is obsolete)
|
||||
else
|
||||
GNUSTEP_SYSTEM_ROOT = @GNUSTEP_SYSTEM_ROOT@
|
||||
GNUSTEP_LOCAL_ROOT = @GNUSTEP_LOCAL_ROOT@
|
||||
|
@ -87,9 +85,29 @@ else
|
|||
GNUSTEP_USER_DIR = @GNUSTEP_USER_DIR@
|
||||
endif
|
||||
|
||||
# When building using Windows-native "make", GNUSTEP_MAKEFILES can be a
|
||||
# Windows-style path (with drive prefix and forward slashes), but
|
||||
# including GNUSTEP_CONFIG_FILE below will turn it into a Unix-style
|
||||
# path, breaking further uses of $GNUSTEP_MAKEFILES. As a hacky
|
||||
# workaround we save the original path if it seems to be Windows-style
|
||||
# (i.e. with drive letter prefix), and restore it below if needed.
|
||||
ifeq ($(GNUSTEP_HOST_OS), windows)
|
||||
ifeq ($(findstring :/, $(GNUSTEP_MAKEFILES)), :/)
|
||||
ORIGINAL_GNUSTEP_MAKEFILES:=$(GNUSTEP_MAKEFILES)
|
||||
endif
|
||||
endif
|
||||
|
||||
# This includes the GNUstep configuration file, but only if it exists
|
||||
-include $(GNUSTEP_CONFIG_FILE)
|
||||
|
||||
# Restore original GNUSTEP_MAKEFILES path to Windows-style path if new
|
||||
# path is Unix-style.
|
||||
ifneq ($(ORIGINAL_GNUSTEP_MAKEFILES),)
|
||||
ifneq ($(findstring :/, $(GNUSTEP_MAKEFILES)), :/)
|
||||
GNUSTEP_MAKEFILES:=$(ORIGINAL_GNUSTEP_MAKEFILES)
|
||||
endif
|
||||
endif
|
||||
|
||||
# FIXME: determining GNUSTEP_HOME
|
||||
GNUSTEP_HOME = $(HOME)
|
||||
|
||||
|
@ -104,36 +122,35 @@ ifneq ($(GNUSTEP_USER_CONFIG_FILE),)
|
|||
else
|
||||
# Path does no start with '/', try it as relative
|
||||
-include $(GNUSTEP_HOME)/$(GNUSTEP_USER_CONFIG_FILE)
|
||||
endif
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
# GNUSTEP_FLATTENED is obsolete, please use GNUSTEP_IS_FLATTENED
|
||||
# instead
|
||||
ifeq ($(GNUSTEP_MAKE_STRICT_V2_MODE),yes)
|
||||
# FIXME: Test that this is OK
|
||||
# GNUSTEP_FLATTENED = $(error GNUSTEP_FLATTENED is obsolete)
|
||||
GNUSTEP_FLATTENED = $(error GNUSTEP_FLATTENED is obsolete)
|
||||
else
|
||||
GNUSTEP_FLATTENED = @GNUSTEP_FLATTENED@
|
||||
endif
|
||||
GNUSTEP_IS_FLATTENED = @GNUSTEP_IS_FLATTENED@
|
||||
|
||||
#
|
||||
# Set GNUSTEP_USER_ROOT from GNUSTEP_USER_DIR; GNUSTEP_USER_ROOT is
|
||||
# the variable used in practice
|
||||
#
|
||||
ifneq ($(GNUSTEP_MAKE_STRICT_V2_MODE),yes)
|
||||
GNUSTEP_HAS_PKGCONFIG = @GNUSTEP_HAS_PKGCONFIG@
|
||||
|
||||
ifeq ($(GNUSTEP_MAKE_STRICT_V2_MODE),yes)
|
||||
GNUSTEP_USER_ROOT = $(error GNUSTEP_USER_ROOT is obsolete)
|
||||
else
|
||||
#
|
||||
# Set GNUSTEP_USER_ROOT from GNUSTEP_USER_DIR; GNUSTEP_USER_ROOT is
|
||||
# the variable used in practice
|
||||
#
|
||||
ifneq ($(filter /%, $(GNUSTEP_USER_DIR)),)
|
||||
# Path starts with '/', consider it absolute
|
||||
GNUSTEP_USER_ROOT = $(GNUSTEP_USER_DIR)
|
||||
else
|
||||
# Path does no start with '/', try it as relative
|
||||
GNUSTEP_USER_ROOT = $(GNUSTEP_HOME)/$(GNUSTEP_USER_DIR)
|
||||
endif
|
||||
else
|
||||
# FIXME: Test that this is OK. When I use it, it seems to
|
||||
# abort even if GNUSTEP_USER_ROOT is never referenced!
|
||||
# GNUSTEP_USER_ROOT = $(error GNUSTEP_USER_ROOT is obsolete)
|
||||
endif
|
||||
endif
|
||||
|
||||
# FIXME: Shouldn't the following go into config.make ? They are
|
||||
|
@ -164,4 +181,4 @@ endif
|
|||
# an additional make invocation which is performed when compiling an
|
||||
# executable or library; that invocation does not use .NOTPARALLEL and
|
||||
# will compile all the files of the executable or library in parallel.
|
||||
GNUSTEP_MAKE_PARALLEL_BUILDING = @GNUSTEP_MAKE_PARALLEL_BUILDING@
|
||||
GNUSTEP_MAKE_PARALLEL_BUILDING = @GNUSTEP_MAKE_PARALLEL_BUILDING@
|
||||
|
|
|
@ -77,8 +77,8 @@ fi
|
|||
|
||||
# Try to compile the file first.
|
||||
echo "** Compile the file without precompiled headers" >>"$gs_logfile" 2>&1
|
||||
echo "$CC -o \"$gs_builddir/config-precomp-test.out\" $CFLAGS $CPPFLAGS $LDFLAGS $LIBS config-precomp-test.m" >>"$gs_logfile" 2>&1
|
||||
$CC -o "$gs_builddir/config-precomp-test.out" $CFLAGS $CPPFLAGS $LDFLAGS $LIBS config-precomp-test.m >>"$gs_logfile" 2>&1
|
||||
echo "$CC -o \"$gs_builddir/config-precomp-test.out\" $CFLAGS $CPPFLAGS $LDFLAGS config-precomp-test.m $LIBS" >>"$gs_logfile" 2>&1
|
||||
$CC -o "$gs_builddir/config-precomp-test.out" $CFLAGS $CPPFLAGS $LDFLAGS config-precomp-test.m $LIBS >>"$gs_logfile" 2>&1
|
||||
if test ! "$?" = "0"; then
|
||||
echo "Failure" >>"$gs_logfile" 2>&1
|
||||
rm -f "$gs_builddir/config-precomp-test.out"
|
||||
|
@ -101,8 +101,8 @@ echo "" >>"$gs_logfile" 2>&1
|
|||
|
||||
# Now try to compile again with the preprocessed header. It might get ignored - which is fine.
|
||||
echo "** Compile the file with precompiled headers" >>"$gs_logfile" 2>&1
|
||||
echo "$CC -o \"$gs_builddir/config-precomp-test.out\" $CFLAGS $CPPFLAGS $LDFLAGS $LIBS -I\"$gs_builddir\" config-precomp-test.m" >>"$gs_logfile" 2>&1
|
||||
$CC -o "$gs_builddir/config-precomp-test.out" $CFLAGS $CPPFLAGS $LDFLAGS $LIBS -I"$gs_builddir" config-precomp-test.m >>"$gs_logfile" 2>&1
|
||||
echo "$CC -o \"$gs_builddir/config-precomp-test.out\" $CFLAGS $CPPFLAGS $LDFLAGS -I\"$gs_builddir\" config-precomp-test.m $LIBS" >>"$gs_logfile" 2>&1
|
||||
$CC -o "$gs_builddir/config-precomp-test.out" $CFLAGS $CPPFLAGS $LDFLAGS -I"$gs_builddir" config-precomp-test.m $LIBS >>"$gs_logfile" 2>&1
|
||||
if test ! "$?" = "0"; then
|
||||
echo "Failure" >>"$gs_logfile" 2>&1
|
||||
rm -f "$gs_builddir/config-precomp-test.out" "$gs_builddir/config-precomp-test.h.gch"
|
||||
|
|
1953
config.guess
vendored
Executable file → Normal file
1953
config.guess
vendored
Executable file → Normal file
File diff suppressed because it is too large
Load diff
|
@ -57,6 +57,8 @@ ifeq ($(CXX),)
|
|||
CXX = @CXX@
|
||||
endif
|
||||
|
||||
CLANG_CC = @CLANG_CC@
|
||||
|
||||
# TODO: Because of the following, OPTFLAG usually ends up being '-g
|
||||
# -O2'. The '-g' is fairly harmless as you can always use strip=yes
|
||||
# which will strip the object files upon installation; still, it's not
|
||||
|
@ -75,14 +77,8 @@ CCFLAGS = @CXXFLAGS@
|
|||
# configured.
|
||||
GNUSTEP_DEFAULT_DEBUG = @GNUSTEP_DEFAULT_DEBUG@
|
||||
|
||||
ifeq ($(OBJC_RUNTIME_LIB), gnugc)
|
||||
ifeq ($(OBJC_LIB_FLAG),)
|
||||
OBJC_LIB_FLAG = -lobjc_gc
|
||||
endif
|
||||
else
|
||||
ifeq ($(OBJC_LIB_FLAG),)
|
||||
OBJC_LIB_FLAG = -lobjc
|
||||
endif
|
||||
ifeq ($(OBJC_LIB_FLAG),)
|
||||
OBJC_LIB_FLAG = -lobjc
|
||||
endif
|
||||
|
||||
EXEEXT = @EXEEXT@
|
||||
|
@ -213,14 +209,9 @@ AUTO_DEPENDENCIES = @AUTO_DEPENDENCIES@
|
|||
USE_OBJC_EXCEPTIONS = @USE_OBJC_EXCEPTIONS@
|
||||
|
||||
#
|
||||
# Whether the ObjC compiler supports -fobjc-nonfragile-abi
|
||||
# Whether the ObjC compiler supports -fobjc-arc
|
||||
#
|
||||
USE_NONFRAGILE_ABI = @USE_NONFRAGILE_ABI@
|
||||
|
||||
#
|
||||
# Whether we are using the ObjC garbage cllection library.
|
||||
#
|
||||
OBJC_WITH_GC = @OBJC_WITH_GC@
|
||||
USE_ARC = @USE_ARC@
|
||||
|
||||
#
|
||||
# Whether the compiler is GCC with precompiled header support
|
||||
|
@ -237,3 +228,5 @@ GNUSTEP_ABSOLUTE_INSTALL_PATHS = @GNUSTEP_ABSOLUTE_INSTALL_PATHS@
|
|||
# Whether to use -r or -Wl,-r when doing partial linking
|
||||
#
|
||||
OBJ_MERGE_CMD_FLAG = @OBJ_MERGE_CMD_FLAG@
|
||||
|
||||
DEFAULT_OBJC_RUNTIME_ABI = @gs_cv_runtime_abi@
|
||||
|
|
2893
config.sub
vendored
Executable file → Normal file
2893
config.sub
vendored
Executable file → Normal file
File diff suppressed because it is too large
Load diff
643
configure.ac
643
configure.ac
|
@ -21,8 +21,9 @@
|
|||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
AC_INIT
|
||||
AC_PREREQ(2.57)
|
||||
AC_PREREQ([2.71])
|
||||
AC_CONFIG_SRCDIR([application.make])
|
||||
AC_CONFIG_MACRO_DIRS([m4])
|
||||
|
||||
#
|
||||
# TODO: This configure file should not contain any checks that depend on the
|
||||
|
@ -43,84 +44,16 @@ targetArgument=${target}
|
|||
|
||||
AC_CANONICAL_TARGET([])
|
||||
|
||||
AC_PATH_PROG(GNUSTEP_HAS_PKGCONFIG, pkgconfig, yes, no)
|
||||
AC_CHECK_PROG([HAVE_GNUSTEP_CONFIG], [gnustep-config], yes, no)
|
||||
#--------------------------------------------------------------------
|
||||
# Setup the library combination
|
||||
#--------------------------------------------------------------------
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# Check if objc should use garbage collection.
|
||||
#--------------------------------------------------------------------
|
||||
AC_ARG_ENABLE(objc-garbage-collection, [
|
||||
--enable-objc-garbage-collection
|
||||
Enable objc garbage collection. Use this option if you want
|
||||
to use garbage collection for objective-c software. This is equivalent
|
||||
to using --with-library-combo=gnugc-gnu-gnu to set the runtime library
|
||||
to be the gnu runtime with garbage collection.
|
||||
],
|
||||
OBJC_WITH_GC=$enableval,
|
||||
OBJC_WITH_GC="")
|
||||
|
||||
if test "$OBJC_WITH_GC" = "yes"; then
|
||||
ac_cv_library_combo="gnugc-gnu-gnu"
|
||||
elif test "$OBJC_WITH_GC" = "no"; then
|
||||
if test "$ac_cv_library_combo"="gnugc-gnu-gnu"; then
|
||||
ac_cv_library_combo="gnu-gnu-gnu"
|
||||
fi
|
||||
else
|
||||
OBJC_WITH_GC=no
|
||||
fi
|
||||
AC_SUBST(OBJC_WITH_GC)
|
||||
|
||||
AC_MSG_CHECKING(for library combo)
|
||||
AC_ARG_WITH(library-combo,[
|
||||
--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 Foundation library to use (examples are 'gnu' for
|
||||
gnustep-base, and 'apple' for Apple Cocoa FoundationKit),
|
||||
and 'ccc' is the ApplicationKit to use (examples are 'gnu'
|
||||
for gnustep-gui and 'apple' for Apple Cocoa AppKit). Use this
|
||||
option if you want to force a different default library combo than
|
||||
the one that would be used by default. For example, on Darwin GNUstep
|
||||
will automatically use the Apple Objective-C frameworks by
|
||||
default (library-combo=apple-apple-apple); if you are planning
|
||||
on installing and using gnustep-base on there, you would need
|
||||
to use --with-library-combo=gnu-gnu-gnu instead. Please notice
|
||||
that if --disable-flattened is used, gnustep-make can have fat
|
||||
binaries that support multiple library combos. In that case,
|
||||
this flag will only configure the default one, but you can still
|
||||
use other ones at run-time.
|
||||
Please use 'ng-gnu-gnu' to build with 'next generation' cutting edge
|
||||
runtime and compile time featured (requires a recent version of clang).
|
||||
],
|
||||
ac_cv_library_combo=$withval,
|
||||
ac_cv_library_combo=$ac_cv_library_combo
|
||||
)
|
||||
|
||||
if test "$ac_cv_library_combo" = "" -o "$ac_cv_library_combo" = "no"; then
|
||||
case "$host_os" in
|
||||
darwin*) ac_cv_library_combo=apple-apple-apple ;;
|
||||
nextstep4) ac_cv_library_combo=nx-nx-nx ;;
|
||||
openstep4) ac_cv_library_combo=nx-nx-nx ;;
|
||||
*) ac_cv_library_combo=gnu-gnu-gnu ;;
|
||||
esac
|
||||
fi
|
||||
|
||||
case "$ac_cv_library_combo" in
|
||||
apple) ac_cv_library_combo=apple-apple-apple ;;
|
||||
gnu) ac_cv_library_combo=gnu-gnu-gnu ;;
|
||||
ng) ac_cv_library_combo=ng-gnu-gnu ;;
|
||||
nx) ac_cv_library_combo=nx-nx-nx ;;
|
||||
esac
|
||||
|
||||
AC_SUBST(ac_cv_library_combo)
|
||||
AC_MSG_RESULT($ac_cv_library_combo)
|
||||
|
||||
OBJC_RUNTIME_LIB=`echo $ac_cv_library_combo | awk -F- '{print $1}'`
|
||||
GS_LIBRARY_COMBO()
|
||||
|
||||
# The ng runtime library setting requires clang rather than gcc
|
||||
if test "$OBJC_RUNTIME_LIB" = "ng"; then
|
||||
defaultng=yes;
|
||||
if test "$OBJCC" = ""; then
|
||||
OBJCC=clang
|
||||
fi
|
||||
|
@ -133,6 +66,8 @@ if test "$OBJC_RUNTIME_LIB" = "ng"; then
|
|||
if test "$CXX" = ""; then
|
||||
CXX=clang++
|
||||
fi
|
||||
else
|
||||
defaultng=no;
|
||||
fi
|
||||
|
||||
AC_PROG_CC
|
||||
|
@ -144,14 +79,21 @@ AC_PROG_CPP
|
|||
# compile/link C++ code. :-)
|
||||
AC_PROG_CXX
|
||||
|
||||
# Similarly for the ObjC++ compiler ... but only new versions of autoconf
|
||||
# support it, so we pretend by using the C++ compiler
|
||||
#AC_PROG_OBJCXX
|
||||
OBJCXX="${CXX}"
|
||||
# Similarly for the ObjC++ compiler...
|
||||
AC_PROG_OBJCXX
|
||||
|
||||
# We may use egrep for some tests further down below
|
||||
AC_PROG_EGREP
|
||||
|
||||
# Search for a debugger. We try 'gdb' then 'lldb'. If
|
||||
# we can't find it, we set it to 'gdb', even if that will fail later
|
||||
# on.
|
||||
AC_CHECK_PROGS(DEBUGGER, [gdb lldb], gdb)
|
||||
|
||||
# Used by gnustep-config to output the debugger variable and
|
||||
# gnustep-tests.
|
||||
AC_SUBST(DEBUGGER)
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# Check if we are using Apple cc
|
||||
#--------------------------------------------------------------------
|
||||
|
@ -175,6 +117,20 @@ AC_MSG_RESULT($cc_bundle)
|
|||
AC_SUBST(cc_cppprecomp)
|
||||
AC_SUBST(cc_bundle)
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# config.guess returns mingw64 and pc as the os and vendor, but the
|
||||
# mingw-w64 project chose to use mingw32 and w64 respectively. We
|
||||
#need to standardise on one.
|
||||
#--------------------------------------------------------------------
|
||||
if test "$host_os" = mingw64; then
|
||||
host_os=mingw32
|
||||
host_vendor=w64
|
||||
fi
|
||||
if test "$target_os" = mingw64; then
|
||||
target_os=mingw32
|
||||
target_vendor=w64
|
||||
fi
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# specific target_os options
|
||||
#--------------------------------------------------------------------
|
||||
|
@ -191,17 +147,26 @@ esac
|
|||
#--------------------------------------------------------------------
|
||||
case $host_os in
|
||||
*cygwin* )
|
||||
MINGW32=no
|
||||
CYGWIN=yes
|
||||
MSWIND=yes;;
|
||||
MINGW32=no
|
||||
MINGW64=no
|
||||
CYGWIN=yes
|
||||
MSWIND=yes;;
|
||||
*mingw32* )
|
||||
MINGW32=yes
|
||||
CYGWIN=no
|
||||
MSWIND=yes;;
|
||||
* )
|
||||
MINGW32=no
|
||||
CYGWIN=no
|
||||
MSWIND=no;;
|
||||
if test $host_vendor = pc
|
||||
then
|
||||
MINGW32=yes
|
||||
MINGW64=no
|
||||
else
|
||||
MINGW32=no
|
||||
MINGW64=yes
|
||||
fi
|
||||
CYGWIN=no
|
||||
MSWIND=yes;;
|
||||
* )
|
||||
MINGW32=no
|
||||
MINGW64=no
|
||||
CYGWIN=no
|
||||
MSWIND=no;;
|
||||
esac
|
||||
AC_SUBST(CYGWIN)
|
||||
|
||||
|
@ -218,6 +183,17 @@ if test "$MINGW32" = yes; then
|
|||
export AR=${AR:-ar}
|
||||
export RANLIB=${RANLIB:-ranlib}
|
||||
export DLLTOOL=${DLLTOOL:-dlltool}
|
||||
elif test "$MINGW64" = yes; then
|
||||
echo "hosted on mingw64 .."
|
||||
export SHELL=sh
|
||||
if test "$OBJC_RUNTIME_LIB" = ng; then
|
||||
export CC=${CC:-clang}
|
||||
else
|
||||
export CC=${CC:-gcc}
|
||||
fi
|
||||
export AR=${AR:-ar}
|
||||
export RANLIB=${RANLIB:-ranlib}
|
||||
export DLLTOOL=${DLLTOOL:-dlltool}
|
||||
elif test "$CYGWIN" = yes; then
|
||||
echo "hosted on cygwin .."
|
||||
if test "$OBJC_RUNTIME_LIB" = ng; then
|
||||
|
@ -230,13 +206,15 @@ elif test "$CYGWIN" = yes; then
|
|||
export DLLTOOL=${DLLTOOL:-dlltool}
|
||||
fi
|
||||
|
||||
GS_CHECK_CC_IS_CLANG()
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# Find the binary and compile tools
|
||||
#--------------------------------------------------------------------
|
||||
if test "x$target" != "x$host"; then
|
||||
echo "cross compiling from $host to $target .."
|
||||
cross_compiling="yes"
|
||||
if test "$OBJC_RUNTIME_LIB" = ng; then
|
||||
if test "$OBJC_RUNTIME_LIB" = ng -o x"$gs_cv_cc_is_clang" = x"yes"; then
|
||||
AC_CHECK_PROG(CC, "${targetArgument}-clang", dnl
|
||||
"${targetArgument}-clang", clang)
|
||||
else
|
||||
|
@ -274,6 +252,12 @@ else
|
|||
AC_PROG_RANLIB
|
||||
fi
|
||||
|
||||
# On Windows MSVC, AC_PROG_CC will not detect Clang in MSVC mode as a
|
||||
# GNU C compiler and therefore set CFLAGS to just "-g", so we fix it.
|
||||
if test "$target_os" = windows -a x"${GCC}" != x"yes" -a x"$gs_cv_cc_is_clang" = x"yes"; then
|
||||
CFLAGS="-g -O2"
|
||||
fi
|
||||
|
||||
AC_PROG_INSTALL
|
||||
|
||||
AC_MSG_CHECKING([if 'install -p' works])
|
||||
|
@ -325,8 +309,10 @@ AC_ARG_WITH(tar,[
|
|||
|
||||
AC_CHECK_PROG(CHOWN, chown, chown, none)
|
||||
if test "$MINGW32" = no; then
|
||||
if test "$CHOWN" = "none"; then
|
||||
AC_MSG_ERROR("Could not find chown.");
|
||||
if test "$MINGW64" = no; then
|
||||
if test "$CHOWN" = "none"; then
|
||||
AC_MSG_ERROR("Could not find chown.");
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
|
@ -407,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=;
|
||||
|
||||
|
@ -523,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"
|
||||
|
@ -1081,100 +1077,10 @@ AC_SUBST(GNUSTEP_INSTALL_LD_SO_CONF)
|
|||
# gnustep-base since it concerns the runtime library (see explanations
|
||||
# at the beginning of this file).
|
||||
|
||||
if test "$GNUSTEP_IS_FLATTENED" != yes; then
|
||||
clean_target_os=`$srcdir/clean_os.sh $target_os`
|
||||
clean_target_cpu=`$srcdir/clean_cpu.sh $target_cpu`
|
||||
obj_dir="$clean_target_cpu/$clean_target_os"
|
||||
fi
|
||||
|
||||
# Check to see if the libobjc library is in our GNUSTEP_SYSTEM_LIBRARIES
|
||||
# If so, there are probably other libraries that we want there also, so
|
||||
# leave the proper includes in CPPFLAGS and LDFLAGS
|
||||
AC_MSG_CHECKING(for custom shared objc library)
|
||||
AC_CACHE_VAL(gs_cv_objc_libdir,
|
||||
[dnl
|
||||
gs_cv_objc_libdir=NONE
|
||||
gs_cv_objc_incdir=NONE
|
||||
# Try GNUSTEP_SYSTEM_LIBRARIES first
|
||||
if test "$GNUSTEP_IS_FLATTENED" = yes; then
|
||||
GNUSTEP_LDIR="$GNUSTEP_SYSTEM_LIBRARIES"
|
||||
GNUSTEP_HDIR="$GNUSTEP_SYSTEM_HEADERS"
|
||||
else
|
||||
GNUSTEP_LDIR="$GNUSTEP_SYSTEM_LIBRARIES/$obj_dir"
|
||||
GNUSTEP_HDIR="$GNUSTEP_SYSTEM_HEADERS/$LIBRARY_COMBO"
|
||||
fi
|
||||
|
||||
if test -f "$GNUSTEP_HDIR/objc/objc.h"; then
|
||||
if test -f "$GNUSTEP_LDIR/libobjc.a" -o -f "$GNUSTEP_LDIR/libobjc.so" -o -f "$GNUSTEP_LDIR/libobjc.dll.a" -o -f "$GNUSTEP_LDIR/libobjc-gnu.dylib"; then
|
||||
gs_cv_objc_libdir="$GNUSTEP_LDIR"
|
||||
gs_cv_objc_incdir="$GNUSTEP_HDIR"
|
||||
gs_cv_objc_tools="$GNUSTEP_SYSTEM_TOOLS"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Try GNUSTEP_NETWORK_LIBRARIES second (override GNUSTEP_SYSTEM if
|
||||
# found)
|
||||
if test "$GNUSTEP_IS_FLATTENED" = yes; then
|
||||
GNUSTEP_LDIR="$GNUSTEP_NETWORK_LIBRARIES"
|
||||
GNUSTEP_HDIR="$GNUSTEP_NETWORK_HEADERS"
|
||||
else
|
||||
GNUSTEP_LDIR="$GNUSTEP_NETWORK_LIBRARIES/$obj_dir"
|
||||
GNUSTEP_HDIR="$GNUSTEP_NETWORK_HEADERS/$LIBRARY_COMBO"
|
||||
fi
|
||||
|
||||
if test -f "$GNUSTEP_HDIR/objc/objc.h"; then
|
||||
if test -f "$GNUSTEP_LDIR/libobjc.a" -o -f "$GNUSTEP_LDIR/libobjc.so" -o -f "$GNUSTEP_LDIR/libobjc.dll.a" -o -f "$GNUSTEP_LDIR/libobjc-gnu.dylib"; then
|
||||
gs_cv_objc_libdir="$GNUSTEP_LDIR"
|
||||
gs_cv_objc_incdir="$GNUSTEP_HDIR"
|
||||
gs_cv_objc_tools="$GNUSTEP_NETWORK_TOOLS"
|
||||
fi
|
||||
fi
|
||||
|
||||
# Try GNUSTEP_LOCAL_LIBRARIES third (override GNUSTEP_SYSTEM and
|
||||
# GNUSTEP_NETWORK if found)
|
||||
if test "$GNUSTEP_IS_FLATTENED" = yes; then
|
||||
GNUSTEP_LDIR="$GNUSTEP_LOCAL_LIBRARIES"
|
||||
GNUSTEP_HDIR="$GNUSTEP_LOCAL_HEADERS"
|
||||
else
|
||||
GNUSTEP_LDIR="$GNUSTEP_LOCAL_LIBRARIES/$obj_dir"
|
||||
GNUSTEP_HDIR="$GNUSTEP_LOCAL_HEADERS/$LIBRARY_COMBO"
|
||||
fi
|
||||
|
||||
if test -f "$GNUSTEP_HDIR/objc/objc.h"; then
|
||||
if test -f "$GNUSTEP_LDIR/libobjc.a" -o -f "$GNUSTEP_LDIR/libobjc.so" -o -f "$GNUSTEP_LDIR/libobjc.dll.a" -o -f "$GNUSTEP_LDIR/libobjc-gnu.dylib"; then
|
||||
gs_cv_objc_libdir="$GNUSTEP_LDIR"
|
||||
gs_cv_objc_incdir="$GNUSTEP_HDIR"
|
||||
gs_cv_objc_tools="$GNUSTEP_LOCAL_TOOLS"
|
||||
fi
|
||||
fi
|
||||
#gcc_shared_libobjc=`gcc -print-file-name=libobjc.so`
|
||||
#if test -f "$gcc_shared_libobjc"; then
|
||||
# gs_cv_objc_libdir=`dirname $gcc_shared_libobjc`
|
||||
#fi
|
||||
])
|
||||
AC_MSG_RESULT($gs_cv_objc_libdir)
|
||||
|
||||
if test "$gs_cv_objc_libdir" != "NONE"; then
|
||||
# The following are needed to compile the test programs
|
||||
OBJC_CPPFLAGS="$CPPFLAGS $INCLUDES -I$gs_cv_objc_incdir"
|
||||
OBJC_LDFLAGS="$LDFLAGS $LIB_DIR -L$gs_cv_objc_libdir"
|
||||
|
||||
# And the following to execute them
|
||||
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$gs_cv_objc_libdir"
|
||||
export LD_LIBRARY_PATH
|
||||
# Need to also add the Tools library on mingw
|
||||
case $host_os in
|
||||
*mingw32* )
|
||||
PATH=$PATH:$gs_cv_objc_tools;;
|
||||
* )
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
# Special case for Apple systems: When compiling plain C source files that
|
||||
# include Objective-C runtime headers we must make sure that the correct
|
||||
# header files are used with a gnu-*-* combo. The -fgnu-runtime compiler
|
||||
# option takes care of this when compiling Objective-C source files, but
|
||||
# header files are used with a gnu-*-* combo. The -fobjc-runtime=gcc compiler
|
||||
# option should take care of this when compiling Objective-C source files, but
|
||||
# has no effect when compiling plain C (or C++) source files.
|
||||
cc_gnuruntime=
|
||||
case $target_os-$ac_cv_library_combo in
|
||||
|
@ -1194,65 +1100,53 @@ case $target_os-$ac_cv_library_combo in
|
|||
esac
|
||||
AC_SUBST(cc_gnuruntime)
|
||||
|
||||
# TODO: This flag needs to be moved to gnustep-base since it concerns
|
||||
# the runtime library (see explanations at the beginning of this
|
||||
# file).
|
||||
AC_MSG_CHECKING(for the flag to link libobjc)
|
||||
AC_ARG_WITH(objc-lib-flag,[
|
||||
--with-objc-lib-flag
|
||||
Specify a different flag to link libobjc (the Objective-C runtime
|
||||
library). The default is -lobjc. In some situations you may have
|
||||
multiple versions of libobjc installed and if your linker supports
|
||||
it you may want to specify exactly which one must be used; for
|
||||
example on GNU/Linux you should be able to use
|
||||
--with-objc-lib-flag=-l:libobjc.so.1
|
||||
to request libobjc.so.1 (as opposed to, say, libobjc.so.2) to be
|
||||
linked.
|
||||
],
|
||||
OBJC_LIB_FLAG="$withval",
|
||||
OBJC_LIB_FLAG=""
|
||||
)
|
||||
# We pass the flag, unchanged, to gnustep-make - if it's empty,
|
||||
# gnustep-make will be free to use -lobjc or -lobjc_gc depending on
|
||||
# the case.
|
||||
AC_SUBST(OBJC_LIB_FLAG)
|
||||
dnl these macros are required by GS_CHECK_OBJC_RUNTIME, but we need to explicitly execute them here because we wrap this initial use of the macro in an
|
||||
dnl conditional
|
||||
AC_PROG_SED()
|
||||
GS_OBJ_DIR()
|
||||
GS_OBJC_LIB_FLAG()
|
||||
GS_LIBOBJC_PKG()
|
||||
|
||||
# But we need to compute, and print out, what flag we're using now.
|
||||
OBJC_FINAL_LIB_FLAG="$OBJC_LIB_FLAG"
|
||||
if test "$OBJC_RUNTIME_LIB" = "gnu" -a x"$gs_cv_cc_is_clang" = x"yes" -a x"$gs_cv_library_combo_implicit" = x"yes"; then
|
||||
dnl in order to determine whether the installed runtime library supports the `ng' library combo,
|
||||
dnl we need to detect the runtime with that combo specifically. Unfortunately,
|
||||
dnl GS_CHECK_OBJC_RUNTIME is a very invasive macro that sets up lots of variables needed later on.
|
||||
dnl For that reason, we need to save the state of all variables that are changed by this and
|
||||
dnl restore them afterwards
|
||||
m4_define([rt_save_variables], [[OBJC_CPPFLAGS],dnl
|
||||
[OBJC_LDFLAGS],dnl
|
||||
[OBJC_FINAL_LIB_FLAG],dnl
|
||||
[CFLAGS],dnl
|
||||
[LIBS],dnl
|
||||
[saved_CFLAGS],dnl
|
||||
[saved_LDFLAGS],dnl
|
||||
[OBJCRT],dnl
|
||||
[LD_LIBRARY_PATH],dnl
|
||||
[PATH]])
|
||||
|
||||
saved_CFLAGS="$CFLAGS"
|
||||
saved_LIBS="$LIBS"
|
||||
CFLAGS="$CFLAGS -x objective-c -I$srcdir $OBJC_CPPFLAGS $OBJC_LDFLAGS"
|
||||
if test "$OBJC_RUNTIME_LIB" = "gnu"; then
|
||||
CFLAGS="$CFLAGS -fgnu-runtime -DGNU_RUNTIME"
|
||||
if test "$OBJC_FINAL_LIB_FLAG" = ""; then
|
||||
OBJC_FINAL_LIB_FLAG=-lobjc
|
||||
fi
|
||||
OBJCRT="$OBJC_FINAL_LIB_FLAG"
|
||||
fi
|
||||
if test "$OBJC_RUNTIME_LIB" = "gnugc"; then
|
||||
CFLAGS="$CFLAGS -fgnu-runtime -DGNU_RUNTIME"
|
||||
if test "$OBJC_FINAL_LIB_FLAG" = ""; then
|
||||
OBJC_FINAL_LIB_FLAG=-lobjc_gc
|
||||
fi
|
||||
OBJCRT="$OBJC_FINAL_LIB_FLAG -ldl -lgc"
|
||||
fi
|
||||
if test "$OBJC_RUNTIME_LIB" = "nx"; then
|
||||
CFLAGS="$CFLAGS -DNeXT_RUNTIME"
|
||||
if test "$OBJC_FINAL_LIB_FLAG" = ""; then
|
||||
OBJC_FINAL_LIB_FLAG=-lobjc
|
||||
fi
|
||||
OBJCRT="$OBJC_FINAL_LIB_FLAG"
|
||||
fi
|
||||
if test "$OBJC_RUNTIME_LIB" = "apple"; then
|
||||
CFLAGS="$CFLAGS -DAPPLE_RUNTIME"
|
||||
if test "$OBJC_FINAL_LIB_FLAG" = ""; then
|
||||
OBJC_FINAL_LIB_FLAG=-lobjc
|
||||
fi
|
||||
OBJCRT="$OBJC_FINAL_LIB_FLAG"
|
||||
m4_foreach([to_save], [rt_save_variables], [dnl
|
||||
AS_VAR_SET([m4_join([_], [gs_cv_ng_rt_saved], m4_strip(to_save))], m4_join([], [$], m4_strip(to_save)))
|
||||
])dnl
|
||||
GS_CHECK_OBJC_RUNTIME([NG], [ng-gnu-gnu])
|
||||
|
||||
dnl The gnustep runtime library has objc_test_capability -- the GCC runtime doesn't, so we can use this
|
||||
dnl to distinguish between them
|
||||
AC_CHECK_FUNC([objc_test_capability], [
|
||||
GS_LIBRARY_COMBO([ng-gnu-gnu],[yes])
|
||||
LIBRARY_COMBO=ng-gnu-gnu
|
||||
AC_MSG_NOTICE([library combo has been upgraded to `ng-gnu-gnu' because compiler/runtime support is available. To prevent this, pass --with-library-combo explicitly.])
|
||||
])
|
||||
|
||||
dnl restare state
|
||||
m4_foreach([saved_var], [rt_save_variables], [dnl
|
||||
AS_VAR_SET([m4_strip(saved_var)], m4_join([], [$gs_cv_ng_rt_saved_], m4_strip(saved_var)))
|
||||
AS_UNSET(m4_join([_], [gs_cv_ng_rt_saved], m4_strip(saved_var)))
|
||||
])dnl
|
||||
m4_undefine([rt_save_variables])
|
||||
fi
|
||||
|
||||
AC_MSG_RESULT($OBJC_FINAL_LIB_FLAG)
|
||||
|
||||
GS_CHECK_OBJC_RUNTIME()
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# Check if libobjc was compiled with thread support.
|
||||
|
@ -1277,80 +1171,67 @@ fi
|
|||
AC_MSG_CHECKING(whether objc has thread support)
|
||||
if test "$OBJC_THREAD" != ""; then
|
||||
LIBS="$OBJCRT $LIBS $OBJC_THREAD"
|
||||
AC_TRY_RUN([#include "config_thread.m"],
|
||||
objc_threaded="$OBJC_THREAD",
|
||||
objc_threaded="", objc_threaded="")
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([[#include "config_thread.m"]])],[objc_threaded="$OBJC_THREAD"],[objc_threaded=""],[objc_threaded=""])
|
||||
elif test "$host_os" = linux-gnu; then
|
||||
LIBS="$OBJCRT -lpthread"
|
||||
AC_TRY_RUN([#include "config_thread.m"], objc_threaded="-lpthread",
|
||||
objc_threaded="", objc_threaded="-lpthread")
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([[#include "config_thread.m"]])],[objc_threaded="-lpthread"],[objc_threaded=""],[objc_threaded="-lpthread"])
|
||||
if test x"$objc_threaded" = x""; then
|
||||
LIBS="$OBJCRT"
|
||||
AC_TRY_RUN([#include "config_thread.m"],
|
||||
objc_threaded="works",
|
||||
objc_threaded="", objc_threaded="works")
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([[#include "config_thread.m"]])],[objc_threaded="works"],[objc_threaded=""],[objc_threaded="works"])
|
||||
fi
|
||||
elif test "$host_os" = linux-musl; then
|
||||
LIBS="$OBJCRT -lpthread"
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([[#include "config_thread.m"]])],[objc_threaded="-lpthread"],[objc_threaded=""],[objc_threaded="-lpthread"])
|
||||
if test x"$objc_threaded" = x""; then
|
||||
LIBS="$OBJCRT"
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([[#include "config_thread.m"]])],[objc_threaded="works"],[objc_threaded=""],[objc_threaded="works"])
|
||||
fi
|
||||
elif test "`echo $host_os|sed 's/[[0-9]].*//'|sed s/elf//`" = freebsd; then
|
||||
LIBS="-pthread $OBJCRT"
|
||||
AC_TRY_RUN([#include "config_thread.m"], objc_threaded="-pthread",
|
||||
objc_threaded="", objc_threaded="-pthread")
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([[#include "config_thread.m"]])],[objc_threaded="-pthread"],[objc_threaded=""],[objc_threaded="-pthread"])
|
||||
if test x"$objc_threaded" = x""; then
|
||||
LIBS="-lpthread $OBJCRT"
|
||||
AC_TRY_RUN([#include "config_thread.m"], objc_threaded="-lpthread",
|
||||
objc_threaded="", objc_threaded="-lpthread")
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([[#include "config_thread.m"]])],[objc_threaded="-lpthread"],[objc_threaded=""],[objc_threaded="-lpthread"])
|
||||
fi
|
||||
if test x"$objc_threaded" = x""; then
|
||||
LIBS="$OBJCRT -lpcthread"
|
||||
AC_TRY_RUN([#include "config_thread.m"], objc_threaded="-lpcthread",
|
||||
objc_threaded="", objc_threaded="-lpcthread")
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([[#include "config_thread.m"]])],[objc_threaded="-lpcthread"],[objc_threaded=""],[objc_threaded="-lpcthread"])
|
||||
fi
|
||||
if test x"$objc_threaded" = x""; then
|
||||
LIBS="$OBJCRT"
|
||||
AC_TRY_RUN([#include "config_thread.m"],
|
||||
objc_threaded="works",
|
||||
objc_threaded="", objc_threaded="works")
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([[#include "config_thread.m"]])],[objc_threaded="works"],[objc_threaded=""],[objc_threaded="works"])
|
||||
fi
|
||||
elif test "$MINGW32" = yes; then
|
||||
# Mingw doesn't need anything extra for threads
|
||||
LIBS="$OBJCRT $LIBS"
|
||||
AC_TRY_RUN([#include "config_thread.m"],
|
||||
objc_threaded="works",
|
||||
objc_threaded="", objc_threaded="works")
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([[#include "config_thread.m"]])],[objc_threaded="works"],[objc_threaded=""],[objc_threaded="works"])
|
||||
elif test "$MINGW64" = yes; then
|
||||
# Mingw doesn't need anything extra for threads
|
||||
LIBS="$OBJCRT $LIBS"
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([[#include "config_thread.m"]])],[objc_threaded="works"],[objc_threaded=""],[objc_threaded="works"])
|
||||
elif test "$OBJC_RUNTIME_LIB" = "apple"; then
|
||||
# Apple doesn't need anything extra for threads
|
||||
LIBS="$OBJCRT $LIBS"
|
||||
AC_TRY_RUN([#include "config_thread.m"],
|
||||
objc_threaded="works",
|
||||
objc_threaded="", objc_threaded="works")
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([[#include "config_thread.m"]])],[objc_threaded="works"],[objc_threaded=""],[objc_threaded="works"])
|
||||
else
|
||||
LIBS="$OBJCRT $LIBS"
|
||||
AC_TRY_RUN([#include "config_thread.m"],
|
||||
objc_threaded="works",
|
||||
objc_threaded="", objc_threaded="")
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([[#include "config_thread.m"]])],[objc_threaded="works"],[objc_threaded=""],[objc_threaded=""])
|
||||
if test x"$objc_threaded" = x""; then
|
||||
LIBS="$OBJCRT $saved_LIBS -lpthread "
|
||||
AC_TRY_RUN([#include "config_thread.m"],
|
||||
objc_threaded="-lpthread",
|
||||
objc_threaded="", objc_threaded="")
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([[#include "config_thread.m"]])],[objc_threaded="-lpthread"],[objc_threaded=""],[objc_threaded=""])
|
||||
fi
|
||||
if test x"$objc_threaded" = x""; then
|
||||
# Solaris, OpenBSD/sparc
|
||||
LIBS="$OBJCRT $saved_LIBS -lpthread -lposix4"
|
||||
AC_TRY_RUN([#include "config_thread.m"],
|
||||
objc_threaded="-lpthread -lposix4",
|
||||
objc_threaded="", objc_threaded="")
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([[#include "config_thread.m"]])],[objc_threaded="-lpthread -lposix4"],[objc_threaded=""],[objc_threaded=""])
|
||||
fi
|
||||
if test x"$objc_threaded" = x""; then
|
||||
LIBS="$OBJCRT $saved_LIBS -lthread "
|
||||
AC_TRY_RUN([#include "config_thread.m"],
|
||||
objc_threaded="-lthread",
|
||||
objc_threaded="", objc_threaded="")
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([[#include "config_thread.m"]])],[objc_threaded="-lthread"],[objc_threaded=""],[objc_threaded=""])
|
||||
fi
|
||||
if test x"$objc_threaded" = x""; then
|
||||
LIBS="$OBJCRT"
|
||||
AC_TRY_RUN([#include "config_thread.m"],
|
||||
objc_threaded="works",
|
||||
objc_threaded="", objc_threaded="works")
|
||||
AC_RUN_IFELSE([AC_LANG_SOURCE([[#include "config_thread.m"]])],[objc_threaded="works"],[objc_threaded=""],[objc_threaded="works"])
|
||||
fi
|
||||
fi
|
||||
if test x"$objc_threaded" = x""; then
|
||||
|
@ -1367,17 +1248,11 @@ AC_SUBST(ac_cv_objc_threaded)
|
|||
|
||||
AC_MSG_CHECKING(whether Objective-C++ is supported)
|
||||
|
||||
# Only new autoconf supports ObjC++ so we use C++ instead for now
|
||||
#AC_LANG_PUSH(Objective C++)
|
||||
#OBJCXXFLAGS_saved="$OBJCXXFLAGS"
|
||||
#OBJCXXFLAGS="$OBJCXXFLAGS -x objective-c++"
|
||||
#OBJCXXPPFLAGS_saved="$OBJCXXPPFLAGS"
|
||||
#OBJCXXPPFLAGS="$OBJCXXPPFLAGS -x objective-c++"
|
||||
AC_LANG_PUSH(C++)
|
||||
CXXFLAGS_saved="$CXXFLAGS"
|
||||
CXXFLAGS="$CXXFLAGS -x objective-c++"
|
||||
CXXPPFLAGS_saved="$CXXPPFLAGS"
|
||||
CXXPPFLAGS="$CXXPPFLAGS -x objective-c++"
|
||||
AC_LANG_PUSH(Objective C++)
|
||||
OBJCXXFLAGS_saved="$OBJCXXFLAGS"
|
||||
OBJCXXFLAGS="$OBJCXXFLAGS -x objective-c++"
|
||||
OBJCXXPPFLAGS_saved="$OBJCXXPPFLAGS"
|
||||
OBJCXXPPFLAGS="$OBJCXXPPFLAGS -x objective-c++"
|
||||
|
||||
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
|
||||
|
||||
|
@ -1403,74 +1278,69 @@ if test x"$objcc" = x"no"; then
|
|||
OBJCXX=
|
||||
fi
|
||||
AC_SUBST(OBJCXX)
|
||||
# Only new autoconf supports ObjC++ so we use C++ instead for now
|
||||
#OBJCXXFLAGS="$OBJCXXFLAGS_saved"
|
||||
#OBJCXXPPFLAGS="$OBJCXXPPFLAGS_saved"
|
||||
#AC_LANG_POP(Objective C++)
|
||||
CXXFLAGS="$CXXFLAGS_saved"
|
||||
CXXPPFLAGS="$CXXPPFLAGS_saved"
|
||||
AC_LANG_POP(C++)
|
||||
OBJCXXFLAGS="$OBJCXXFLAGS_saved"
|
||||
OBJCXXPPFLAGS="$OBJCXXPPFLAGS_saved"
|
||||
AC_LANG_POP(Objective C++)
|
||||
|
||||
#--------------------------------------------------------------------
|
||||
# Check if GCC supports -fobjc-nonfragile-abi, and if so, turn it on!
|
||||
# Check if compiler supports -fobjc-arc, and if so, turn it on!
|
||||
#--------------------------------------------------------------------
|
||||
|
||||
# TODO: Enable it by default if the compiler supports it :-)
|
||||
AC_ARG_ENABLE(objc-nonfragile-abi, [
|
||||
--enable-objc-nonfragile-abi
|
||||
Use the non-fragile ABI for Objective-C. Use this option if you want
|
||||
to use non-fragile instance variables provided by clang and libobjc2.
|
||||
AC_ARG_ENABLE(objc-arc, [
|
||||
--enable-objc-arc
|
||||
Use automatic retain counts for Objective-C. Use this option if you want
|
||||
to use the ARC mechanism of the Objective-C compiler and runtime.
|
||||
],
|
||||
USE_NONFRAGILE_ABI=$enableval,
|
||||
USE_NONFRAGILE_ABI=unset)
|
||||
USE_ARC=$enableval,
|
||||
USE_ARC=$defaultng)
|
||||
|
||||
AC_MSG_CHECKING(whether we should use the nonfragile ABI)
|
||||
if test x"$USE_NONFRAGILE_ABI" = x"yes"; then
|
||||
# What we want to do: set USE_NONFRAGILE_ABI to yes if we can compile
|
||||
# something with -fobjc-nonfragile-abi.
|
||||
CFLAGS_no_nonfragile="$CFLAGS"
|
||||
CFLAGS="$CFLAGS -fobjc-nonfragile-abi"
|
||||
AC_MSG_CHECKING(whether we should use ARC)
|
||||
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-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
|
||||
'-fobjc-nonfragile-abi' flag. */
|
||||
'-fobjc-arc' flag. */
|
||||
int
|
||||
main()
|
||||
{
|
||||
#ifndef __has_feature
|
||||
#define __has_feature(x) 0
|
||||
#endif
|
||||
return __has_feature(objc_nonfragile_abi) ? 0 : 1;
|
||||
return __has_feature(objc_arc) ? 0 : 1;
|
||||
}
|
||||
]])], USE_NONFRAGILE_ABI=yes, USE_NONFRAGILE_ABI=no)
|
||||
AC_MSG_RESULT($USE_NONFRAGILE_ABI)
|
||||
CFLAGS="$CFLAGS_no_nonfragile"
|
||||
]])], USE_ARC=yes, USE_ARC=no)
|
||||
AC_MSG_RESULT($USE_ARC)
|
||||
CFLAGS="$CFLAGS_no_arc"
|
||||
|
||||
if test x"$USE_NONFRAGILE_ABI" = x"no"; then
|
||||
AC_MSG_NOTICE([The nonfragile ABI was requested, but the compiler])
|
||||
if test x"$USE_ARC" = x"no"; then
|
||||
AC_MSG_NOTICE([Building ARC code was requested, but the compiler])
|
||||
AC_MSG_NOTICE([doesn't support it.])
|
||||
AC_MSG_ERROR([compiler doesn't support nonfragile ABI])
|
||||
AC_MSG_ERROR([compiler doesn't support ARC])
|
||||
fi
|
||||
else
|
||||
if test x"$USE_NONFRAGILE_ABI" != x"no"; then
|
||||
if test x"$USE_ARC" != x"no"; then
|
||||
saved_CPPFLAGS=$CPPFLAGS
|
||||
CPPFLAGS="$CPPFLAGS -x objective-c"
|
||||
AC_EGREP_CPP([^1$], [
|
||||
#ifndef __has_feature
|
||||
#define __has_feature(x) 0
|
||||
#endif
|
||||
__has_feature(objc_nonfragile_abi)
|
||||
], USE_NONFRAGILE_ABI=yes, USE_NONFRAGILE_ABI=no)
|
||||
__has_feature(objc_arc)
|
||||
], USE_ARC=yes, USE_ARC=no)
|
||||
CPPFLAGS=$saved_CPPFLAGS
|
||||
fi
|
||||
if test x"$USE_NONFRAGILE_ABI" = x"yes"; then
|
||||
if test x"$USE_ARC" = x"yes"; then
|
||||
AC_MSG_RESULT([yes (compiler default)])
|
||||
else
|
||||
AC_MSG_RESULT(not requested by user)
|
||||
fi
|
||||
fi
|
||||
|
||||
AC_SUBST(USE_NONFRAGILE_ABI)
|
||||
AC_SUBST(USE_ARC)
|
||||
|
||||
|
||||
# Keep LIBS and CFLAGS as they are for a while - we need them in
|
||||
|
@ -1506,49 +1376,14 @@ AC_SUBST(OBJ_MERGE_CMD_FLAG)
|
|||
# Check for the GCC version - this is used in the following tests
|
||||
#--------------------------------------------------------------------
|
||||
|
||||
AC_MSG_CHECKING(for the GCC version)
|
||||
if test ! x"${GCC}" = x"yes" ; then
|
||||
AC_MSG_RESULT(no: it's not gcc)
|
||||
else
|
||||
# Running gcc -dumpversion we get something like 2.95.4 or
|
||||
# egcs-2.91.66 or 3.0.2 or 3.1 20011211
|
||||
# We want to discard anything but the major number.
|
||||
# Explanation of the regexp -
|
||||
# \([^0-9]*\) matches non numeric chars at the beginning
|
||||
# \([0-9][0-9]*\) matches 1 or more numeric chars (this is the 2^nd
|
||||
# subpattern)
|
||||
# \([^0-9]*\) matches one or more non numeric chars
|
||||
# \([0-9][0-9]*\) matches 1 or more numeric chars (this is the 4^nd
|
||||
# subpattern)
|
||||
# \([^0-9].*\) matches a non numeric char followed by anything
|
||||
# /\2/ replace the whole lot with the 2^nd subpattern
|
||||
# /\4/ replace the whole lot with the 4^nd subpattern
|
||||
# All square brackets are doubled because this file is processed by m4 first.
|
||||
# Finally, any error messages are redirected to &5, so that they are logged
|
||||
# into config.log but don't clutter the normal user output.
|
||||
gs_cv_gcc_major_version=`(${CC} -dumpversion | sed "s/\([[^0-9]]*\)\([[0-9]][[0-9]]*\)\([[^0-9]]*\)\([[0-9]][[0-9]]*\)\([[^0-9]]*.*\)/\2/") 2>&5`;
|
||||
gs_cv_gcc_minor_version=`(${CC} -dumpversion | sed "s/\([[^0-9]]*\)\([[0-9]][[0-9]]*\)\([[^0-9]]*\)\([[0-9]][[0-9]]*\)\([[^0-9]]*.*\)/\4/") 2>&5`;
|
||||
GS_CHECK_GCC_VERSION()
|
||||
|
||||
gs_cv_gcc_parsed_version=${gs_cv_gcc_major_version}.${gs_cv_gcc_minor_version}
|
||||
|
||||
AC_MSG_RESULT(version: ${gs_cv_gcc_parsed_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
|
||||
GS_CHECK_ABI20_LINKER()
|
||||
fi
|
||||
|
||||
AC_MSG_CHECKING(whether the compiler is clang)
|
||||
if test ! x"${GCC}" = x"yes" ; then
|
||||
CLANG_CC=no
|
||||
AC_MSG_RESULT(no)
|
||||
else
|
||||
if "${CC}" -v 2>&1 | grep -q 'clang version'; then
|
||||
CLANG_CC=yes
|
||||
AC_MSG_RESULT(yes)
|
||||
else
|
||||
CLANG_CC=no
|
||||
AC_MSG_RESULT(no)
|
||||
fi
|
||||
fi
|
||||
AC_SUBST(CLANG_CC)
|
||||
|
||||
# Do not restore LIBS and CFLAGS yet as we need to test if the
|
||||
# compiler supports native exceptions.
|
||||
|
||||
|
@ -1571,6 +1406,12 @@ AC_ARG_ENABLE(native-objc-exceptions, [
|
|||
USE_OBJC_EXCEPTIONS=$enableval,
|
||||
USE_OBJC_EXCEPTIONS=maybe)
|
||||
|
||||
if test x"$USE_OBJC_EXCEPTIONS" = x"maybe"; then
|
||||
if test x"$MSWIND" = x"yes" -a "$OBJC_RUNTIME_LIB" = "gnu"; then
|
||||
USE_OBJC_EXCEPTIONS=no
|
||||
fi
|
||||
fi
|
||||
|
||||
# Please note that -fobjc-exceptions should automatically enable
|
||||
# -fexceptions.
|
||||
AC_MSG_CHECKING(whether the compiler supports native ObjC exceptions)
|
||||
|
@ -1938,17 +1779,67 @@ 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])
|
||||
AC_CONFIG_COMMANDS([default],
|
||||
[[chmod a+x openapp opentool fixpath.sh executable.template]],
|
||||
[[]])
|
||||
|
|
|
@ -2,9 +2,10 @@
|
|||
#
|
||||
# @configure_input@
|
||||
#
|
||||
# Script that outputs GNUstep filesystem configuration; can
|
||||
# be used by non-gnustep-make building/config systems to know
|
||||
# how GNUstep is configured on this machine
|
||||
# Script that outputs GNUstep filesystem configuration; Primarily to
|
||||
# provide information about the default/current GNUstep installation,
|
||||
# but may be used by non-gnustep-make building/config systems to ask
|
||||
# gnustep-make how GNUstep is configured on this machine
|
||||
#
|
||||
# Copyright (C) 2007 Free Software Foundation, Inc.
|
||||
#
|
||||
|
@ -38,7 +39,11 @@ case "$1" in
|
|||
--objc-libs) ;;
|
||||
--base-libs) ;;
|
||||
--gui-libs) ;;
|
||||
--host-dir) ;;
|
||||
--host-ldir) ;;
|
||||
--installation-domain-for=*) ;;
|
||||
--target-dir-for=*) ;;
|
||||
--target-ldir-for=*) ;;
|
||||
*)
|
||||
# An unrecognized option
|
||||
echo "Unrecognized option: $1"
|
||||
|
@ -65,6 +70,8 @@ if [ "$1" = "--help" ]; then
|
|||
echo " --variable=CXX"
|
||||
echo " --variable=OBJCXX"
|
||||
echo " --variable=LDFLAGS"
|
||||
echo " --variable=EXEEXT"
|
||||
echo " --variable=DEBUGGER"
|
||||
echo " --variable=GNUMAKE"
|
||||
echo " --variable=GNUSTEP_MAKEFILES"
|
||||
echo " --variable=GNUSTEP_USER_DEFAULTS_DIR"
|
||||
|
@ -96,10 +103,18 @@ if [ "$1" = "--help" ]; then
|
|||
echo
|
||||
echo "--gui-libs: prints all the flags required to link a GUI ObjC program"
|
||||
echo
|
||||
echo "--host-dir: prints the host architecture name"
|
||||
echo
|
||||
echo "--host-ldir: prints the host architecture and library combo name"
|
||||
echo
|
||||
echo "--installation-domain-for=xxx: prints the value of the default installation domain"
|
||||
echo " for the package xxx. The result could be 'SYSTEM', 'NETWORK', 'LOCAL'"
|
||||
echo " or 'USER'. This command always returns LOCAL unless the system has been"
|
||||
echo " personalized using an installation-domains.conf file."
|
||||
echo "--target-dir-for=xxx: prints the standardised target architecture directory"
|
||||
echo
|
||||
echo "--target-ldir-for=xxx: prints the target architecture and library combo name"
|
||||
echo
|
||||
exit 0
|
||||
fi
|
||||
|
||||
|
@ -155,7 +170,7 @@ fi
|
|||
export GNUSTEP_MAKEFILES
|
||||
|
||||
#
|
||||
# If all they want to know if GNUSTEP_MAKEFILES or anything that
|
||||
# If all they want to know is GNUSTEP_MAKEFILES or anything that
|
||||
# we can compute only using GNUSTEP_MAKEFILES, we can print it out
|
||||
#
|
||||
case "$1" in
|
||||
|
@ -171,6 +186,10 @@ case "$1" in
|
|||
exit 0;;
|
||||
--variable=LDFLAGS) echo "@LDFLAGS@"
|
||||
exit 0;;
|
||||
--variable=EXEEXT) echo "@EXEEXT@"
|
||||
exit 0;;
|
||||
--variable=DEBUGGER) echo "@DEBUGGER@"
|
||||
exit 0;;
|
||||
--variable=GNUSTEP_MAKEFILES) echo "$GNUSTEP_MAKEFILES"
|
||||
exit 0;;
|
||||
--variable=GNUMAKE) echo "@GNUMAKE@"
|
||||
|
@ -185,9 +204,21 @@ case "$1" in
|
|||
exit 0;;
|
||||
--gui-libs) @GNUMAKE@ --no-print-directory -s -f "$GNUSTEP_MAKEFILES/empty.make" print-gnustep-make-gui-libs quiet=yes 2>/dev/null
|
||||
exit 0;;
|
||||
--host-dir) @GNUMAKE@ --no-print-directory -s -f "$GNUSTEP_MAKEFILES/empty.make" print-gnustep-make-host-dir quiet=yes 2>/dev/null
|
||||
exit 0;;
|
||||
--host-ldir) @GNUMAKE@ --no-print-directory -s -f "$GNUSTEP_MAKEFILES/empty.make" print-gnustep-make-host-ldir quiet=yes 2>/dev/null
|
||||
exit 0;;
|
||||
--installation-domain-for=*) gs_package_name=`echo "$1" | sed -e 's/--installation-domain-for=//'`
|
||||
@GNUMAKE@ --no-print-directory -s -f "$GNUSTEP_MAKEFILES/empty.make" print-gnustep-make-installation-domain PACKAGE_NAME="$gs_package_name" quiet=yes 2>/dev/null
|
||||
exit 0;;
|
||||
--target-dir-for=*)
|
||||
gs_target=`echo "$1" | sed -e 's/--target-dir-for=//'`
|
||||
@GNUMAKE@ --no-print-directory -s -f "$GNUSTEP_MAKEFILES/empty.make" print-gnustep-make-target-dir target="$gs_target" quiet=yes 2>/dev/null
|
||||
exit 0;;
|
||||
--target-ldir-for=*)
|
||||
gs_target=`echo "$1" | sed -e 's/--target-ldir-for=//'`
|
||||
@GNUMAKE@ --no-print-directory -s -f "$GNUSTEP_MAKEFILES/empty.make" print-gnustep-make-target-ldir target="$gs_target" quiet=yes 2>/dev/null
|
||||
exit 0;;
|
||||
esac
|
||||
|
||||
#
|
||||
|
|
|
@ -20,75 +20,6 @@
|
|||
# If not, write to the Free Software Foundation,
|
||||
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
|
||||
# Get library_combo from LIBRARY_COMBO or default_library_combo (or
|
||||
# from the command line if the user defined it on the command line by
|
||||
# invoking `make library_combo=gnu-gnu-gnu'; command line
|
||||
# automatically takes the precedence over makefile definitions, so
|
||||
# setting library_combo here has no effect if the user already defined
|
||||
# it on the command line).
|
||||
ifdef LIBRARY_COMBO
|
||||
library_combo := $(LIBRARY_COMBO)
|
||||
else
|
||||
library_combo := $(default_library_combo)
|
||||
endif
|
||||
|
||||
# Handle abbreviations for library combinations.
|
||||
the_library_combo = $(library_combo)
|
||||
|
||||
ifeq ($(the_library_combo), nx)
|
||||
the_library_combo = nx-nx-nx
|
||||
endif
|
||||
|
||||
ifeq ($(the_library_combo), apple)
|
||||
the_library_combo = apple-apple-apple
|
||||
endif
|
||||
|
||||
ifeq ($(the_library_combo), gnu)
|
||||
the_library_combo = gnu-gnu-gnu
|
||||
endif
|
||||
|
||||
ifeq ($(the_library_combo), ng)
|
||||
the_library_combo = ng-gnu-gnu
|
||||
endif
|
||||
|
||||
ifeq ($(the_library_combo), fd)
|
||||
the_library_combo = gnu-fd-gnu
|
||||
endif
|
||||
|
||||
# Strip out the individual libraries from the library_combo string
|
||||
combo_list = $(subst -, ,$(the_library_combo))
|
||||
|
||||
# NB: The user can always specify any of the OBJC_RUNTIME_LIB, the
|
||||
# FOUNDATION_LIB and the GUI_LIB variable manually overriding our
|
||||
# determination.
|
||||
|
||||
# gc=yes is just another way of saying you want OBJC_RUNTIME_LIB = gnugc
|
||||
# to be used!
|
||||
ifeq ($(gc), yes)
|
||||
OBJC_RUNTIME_LIB = gnugc
|
||||
endif
|
||||
|
||||
ifeq ($(OBJC_RUNTIME_LIB),)
|
||||
OBJC_RUNTIME_LIB = $(word 1,$(combo_list))
|
||||
endif
|
||||
|
||||
ifeq ($(FOUNDATION_LIB),)
|
||||
FOUNDATION_LIB = $(word 2,$(combo_list))
|
||||
endif
|
||||
|
||||
ifeq ($(GUI_LIB),)
|
||||
GUI_LIB = $(word 3,$(combo_list))
|
||||
endif
|
||||
|
||||
# Now build and export the final LIBRARY_COMBO variable, which is the
|
||||
# only variable (together with OBJC_RUNTIME_LIB, FOUNDATION_LIB and
|
||||
# GUI_LIB) the other makefiles need to know about. This LIBRARY_COMBO
|
||||
# might be different from the original one, because we might have
|
||||
# replaced it with a library_combo provided on the command line, or we
|
||||
# might have fixed up parts of it in accordance to some custom
|
||||
# OBJC_RUNTIME_LIB, FOUNDATION_LIB and/or GUI_LIB !
|
||||
export LIBRARY_COMBO = $(OBJC_RUNTIME_LIB)-$(FOUNDATION_LIB)-$(GUI_LIB)
|
||||
|
||||
OBJC_LDFLAGS =
|
||||
OBJC_LIBS =
|
||||
|
||||
|
@ -100,42 +31,27 @@ ifeq ($(OBJC_RUNTIME_LIB), gnu)
|
|||
OBJC_LDFLAGS =
|
||||
OBJC_LIB_DIR =
|
||||
OBJC_LIBS = $(OBJC_LIB_FLAG)
|
||||
RUNTIME_FLAG = -fgnu-runtime
|
||||
ifeq ($(CLANG_CC), yes)
|
||||
RUNTIME_FLAG = -fobjc-runtime=gcc
|
||||
else
|
||||
RUNTIME_FLAG =
|
||||
endif
|
||||
RUNTIME_DEFINE = -DGNU_RUNTIME=1
|
||||
endif
|
||||
|
||||
ifeq ($(OBJC_RUNTIME_LIB), ng)
|
||||
OBJC_LDFLAGS =
|
||||
OBJC_LIB_DIR =
|
||||
OBJC_LIBS = $(OBJC_LIB_FLAG) -fobjc-nonfragile-abi
|
||||
RUNTIME_FLAG = -fobjc-runtime=gnustep-1.8 -fblocks
|
||||
OBJC_LIBS = $(OBJC_LIB_FLAG)
|
||||
ifeq ($(RUNTIME_VERSION),)
|
||||
ifneq ($(DEFAULT_OBJC_RUNTIME_ABI),)
|
||||
RUNTIME_VERSION=$(DEFAULT_OBJC_RUNTIME_ABI)
|
||||
else
|
||||
RUNTIME_VERSION=gnustep-2.2
|
||||
endif
|
||||
endif
|
||||
RUNTIME_FLAG = -fobjc-runtime=$(RUNTIME_VERSION) -fblocks
|
||||
RUNTIME_DEFINE = -DGNUSTEP_RUNTIME=1 -D_NONFRAGILE_ABI=1
|
||||
# Projects may control the use of ARC by defining GS_WITH_ARC=1
|
||||
# or GS_WITH_ARC=0 at the start of their GNUmakefile, or in the environment,
|
||||
# or as an argument to the 'make' command.
|
||||
# The default behavior is not to use ARC, unless GNUSTEP_NG_ARC is
|
||||
# set to 1 (perhaps in the GNUstep config file; GNUstep.conf).
|
||||
#
|
||||
ifeq ($(GS_WITH_ARC),)
|
||||
ifeq ($(GNUSTEP_NG_ARC), 1)
|
||||
GS_WITH_ARC=1
|
||||
endif
|
||||
endif
|
||||
ifeq ($(GS_WITH_ARC), 1)
|
||||
RUNTIME_FLAG += -fobjc-arc
|
||||
RUNTIME_DEFINE += -DGS_WITH_ARC=1
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(OBJC_RUNTIME_LIB), gnugc)
|
||||
OBJC_LDFLAGS =
|
||||
OBJC_LIB_DIR =
|
||||
OBJC_LIBS = $(OBJC_LIB_FLAG) -ldl -lgc
|
||||
RUNTIME_FLAG = -fgnu-runtime
|
||||
RUNTIME_DEFINE = -DGNU_RUNTIME=1 -DGS_WITH_GC=1
|
||||
ifeq ($(debug), yes)
|
||||
RUNTIME_DEFINE += -DGC_DEBUG
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(OBJC_RUNTIME_LIB), nx)
|
||||
|
@ -201,9 +117,6 @@ ifeq ($(FOUNDATION_LIB), fd)
|
|||
FND_DEFINE = -DLIB_FOUNDATION_LIBRARY=1
|
||||
FND_LIBS = -lFoundation
|
||||
|
||||
# If gc=yes was passed and libFoundation was compiled with Boehm's
|
||||
# GC support, use the appropriate libraries
|
||||
|
||||
ifeq ($(gc), yes)
|
||||
ifeq ($(LIBFOUNDATION_WITH_GC), yes)
|
||||
ifeq ($(leak), yes)
|
||||
|
|
25
m4/gs_cc_is_clang.m4
Normal file
25
m4/gs_cc_is_clang.m4
Normal file
|
@ -0,0 +1,25 @@
|
|||
# SYNOPSIS
|
||||
#
|
||||
# GS_CHECK_CC_IS_CLANG([run-if-true],[run-if-false])
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# This macro checks whether the active C compiler is a variant of clang. Upon return
|
||||
#
|
||||
# * The makefile variable `CLANG_CC' is set to `yes' or `no'.
|
||||
# * The variables `CLANG_CC' and `gs_cv_cc_is_clang' are set to the same values.
|
||||
# * Additionally if clang, run shell code run-if-true
|
||||
# else run shell code run-if-false.
|
||||
AC_DEFUN([GS_CHECK_CC_IS_CLANG],dnl
|
||||
[AC_REQUIRE([AC_PROG_CC])
|
||||
AC_CACHE_CHECK([whether the compiler is clang],[_gs_cv_cc_is_clang], [dnl
|
||||
_gs_cv_cc_is_clang="no"
|
||||
if "${CC}" -v 2>&1 | grep -q 'clang version'; then
|
||||
_gs_cv_cc_is_clang="yes";
|
||||
fi
|
||||
])
|
||||
AS_VAR_SET([gs_cv_cc_is_clang], [${_gs_cv_cc_is_clang}])
|
||||
AS_VAR_SET([CLANG_CC], [${_gs_cv_cc_is_clang}])
|
||||
AC_SUBST([CLANG_CC])
|
||||
AS_VAR_IF([_gs_cv_cc_is_clang], ["yes"], [$1], [$2])
|
||||
])
|
41
m4/gs_check_abi20_linker.m4
Normal file
41
m4/gs_check_abi20_linker.m4
Normal file
|
@ -0,0 +1,41 @@
|
|||
# SYNOPSIS
|
||||
#
|
||||
# GS_CHECK_ABI20_LINKER([run-if-true],[run-if-false])
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# 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], [
|
||||
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
|
||||
])
|
54
m4/gs_gcc_version.m4
Normal file
54
m4/gs_gcc_version.m4
Normal file
|
@ -0,0 +1,54 @@
|
|||
# SYNOPSIS
|
||||
#
|
||||
# GS_CHECK_GCC_VERSION()
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# Extracts the major and minor version numbers from a GCC-like compiler (GCC or clang)
|
||||
# into the following variables:
|
||||
# * gs_cv_gcc_major_version
|
||||
# * gs_cv_gcc_minor_version
|
||||
# * gs_cv_gcc_parsed_version (the combined version string)
|
||||
AC_DEFUN([GS_CHECK_GCC_VERSION],dnl
|
||||
[AC_REQUIRE([AC_PROG_CC])
|
||||
AC_REQUIRE([AC_PROG_AWK])
|
||||
AC_REQUIRE([GS_CHECK_CC_IS_CLANG])
|
||||
if test x"${gs_cv_cc_is_clang}" = x"yes"; then
|
||||
compiler_identification="clang"
|
||||
else
|
||||
compiler_identification="GCC"
|
||||
fi
|
||||
AC_CACHE_CHECK([for the ${compiler_identification} version],[_gs_cv_gcc_parsed_version], [dnl
|
||||
_gs_cv_gcc_major_version=""
|
||||
_gs_cv_gcc_minor_version=""
|
||||
_gs_cv_gcc_parsed_version="no: it's not gcc"
|
||||
if test x"${GCC}" = x"yes" ; then
|
||||
dnl Running gcc -dumpversion we get something like 2.95.4 or
|
||||
dnl egcs-2.91.66 or 3.0.2 or 3.1 20011211
|
||||
dnl We want to discard anything but the major number.
|
||||
dnl Explanation of the regexp -
|
||||
dnl \([^0-9]*\) matches non numeric chars at the beginning
|
||||
dnl \([0-9][0-9]*\) matches 1 or more numeric chars (this is the 2^nd
|
||||
dnl subpattern)
|
||||
dnl \([^0-9]*\) matches one or more non numeric chars
|
||||
dnl \([0-9][0-9]*\) matches 1 or more numeric chars (this is the 4^nd
|
||||
dnl subpattern)
|
||||
dnl \([^0-9].*\) matches a non numeric char followed by anything
|
||||
dnl /\2/ replace the whole lot with the 2^nd subpattern
|
||||
dnl /\4/ replace the whole lot with the 4^nd subpattern
|
||||
dnl All square brackets are doubled because this file is processed by m4 first.
|
||||
dnl Finally, any error messages are redirected to &5, so that they are logged
|
||||
dnl into config.log but don't clutter the normal user output.
|
||||
_gs_cv_gcc_major_version=`(${CC} -dumpfullversion -dumpversion | sed "s/\([[^0-9]]*\)\([[0-9]][[0-9]]*\)\([[^0-9]]*\)\([[0-9]][[0-9]]*\)\([[^0-9]]*.*\)/\2/") 2>&5`;
|
||||
_gs_cv_gcc_minor_version=`(${CC} -dumpfullversion -dumpversion | sed "s/\([[^0-9]]*\)\([[0-9]][[0-9]]*\)\([[^0-9]]*\)\([[0-9]][[0-9]]*\)\([[^0-9]]*.*\)/\4/") 2>&5`;
|
||||
_gs_cv_gcc_parsed_version="${_gs_cv_gcc_major_version}.${_gs_cv_gcc_minor_version}";
|
||||
fi
|
||||
])
|
||||
if test ! x"${_gs_cv_gcc_parsed_version}" = x"no: it's not gcc"; then
|
||||
_gs_cv_gcc_major_version=$(echo $_gs_cv_gcc_parsed_version | $AWK -F. '{ print $[1] }')
|
||||
_gs_cv_gcc_minor_version=$(echo $_gs_cv_gcc_parsed_version | $AWK -F. '{ print $[2] }')
|
||||
fi
|
||||
AS_VAR_IF([_gs_cv_gcc_major_version], [""], [AS_UNSET([gs_cv_gcc_major_version])], [AS_VAR_SET([gs_cv_gcc_major_version], [${_gs_cv_gcc_major_version}])])
|
||||
AS_VAR_IF([_gs_cv_gcc_minor_version], [""], [AS_UNSET([gs_cv_gcc_minor_version])], [AS_VAR_SET([gs_cv_gcc_minor_version], [${_gs_cv_gcc_minor_version}])])
|
||||
AS_VAR_IF([_gs_cv_gcc_major_version], [""], [AS_UNSET([gs_cv_gcc_parsed_version])], [AS_VAR_SET([gs_cv_gcc_parsed_version], ["${_gs_cv_gcc_major_version}.${_gs_cv_gcc_minor_version}"])])
|
||||
])
|
83
m4/gs_library_combo.m4
Normal file
83
m4/gs_library_combo.m4
Normal file
|
@ -0,0 +1,83 @@
|
|||
# SYNOPSIS
|
||||
#
|
||||
# GS_LIBRARY_COMBO([default_library_combo],[no-cache])
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# This macro installs the library combo configuration by setting the following:
|
||||
#
|
||||
# * The makefile variable `ac_cv_library_combo'
|
||||
# * The variables `OBJC_RUNTIME_LIB' and `ac_cv_library_combo'
|
||||
#
|
||||
AC_DEFUN([GS_LIBRARY_COMBO],dnl
|
||||
[AC_REQUIRE([AC_CANONICAL_TARGET])
|
||||
AC_REQUIRE([AC_PROG_AWK])
|
||||
gs_cv_library_combo_from_existing_install=no
|
||||
m4_ifblank([$1], [
|
||||
case "$host_os" in
|
||||
darwin*[)] default_library_combo=apple-apple-apple ;;
|
||||
nextstep4[)] default_library_combo=nx-nx-nx ;;
|
||||
openstep4[)] default_library_combo=nx-nx-nx ;;
|
||||
*[)] default_library_combo=gnu-gnu-gnu ;;
|
||||
esac
|
||||
if test x"$HAVE_GNUSTEP_CONFIG" = x"yes"; then
|
||||
maybe_library_combo=$(gnustep-config --variable=LIBRARY_COMBO||echo "")
|
||||
if test ! x"$maybe_library_combo" = x""; then
|
||||
default_library_combo=$maybe_library_combo
|
||||
gs_cv_library_combo_from_existing_install=yes
|
||||
fi
|
||||
fi
|
||||
], [
|
||||
default_library_combo="$1"
|
||||
])
|
||||
|
||||
m4_if([$2], [yes], [
|
||||
AS_UNSET([_gs_cv_libray_combo])
|
||||
AS_UNSET([with_library_combo])
|
||||
])
|
||||
|
||||
AC_ARG_WITH([library-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'),
|
||||
'bbb' is the Foundation library to use (examples are 'gnu' for
|
||||
gnustep-base, and 'apple' for Apple Cocoa FoundationKit),
|
||||
and 'ccc' is the ApplicationKit to use (examples are 'gnu'
|
||||
for gnustep-gui and 'apple' for Apple Cocoa AppKit). Use this
|
||||
option if you want to force a different default library combo than
|
||||
the one that would be used by default. For example, on Darwin GNUstep
|
||||
will automatically use the Apple Objective-C frameworks by
|
||||
default (library-combo=apple-apple-apple); if you are planning
|
||||
on installing and using gnustep-base on there, you would need
|
||||
to use --with-library-combo=gnu-gnu-gnu instead. Please notice
|
||||
that if --disable-flattened is used, gnustep-make can have fat
|
||||
binaries that support multiple library combos. In that case,
|
||||
this flag will only configure the default one, but you can still
|
||||
use other ones at run-time.
|
||||
Please use 'ng-gnu-gnu' to build with 'next generation' cutting edge
|
||||
runtime and compile time features (requires a recent version of clang).
|
||||
])],[
|
||||
gs_cv_library_combo_implicit=no
|
||||
],[dnl
|
||||
with_library_combo=${default_library_combo}
|
||||
if test x"$gs_cv_library_combo_from_existing_install" = x"yes"; then
|
||||
gs_cv_library_combo_implicit=no
|
||||
AC_MSG_NOTICE([Using library combo $default_library_combo from your existing installation of gnustep-make. To prevent this, pass --with-library-combo explicitly.])
|
||||
else
|
||||
gs_cv_library_combo_implicit=yes
|
||||
fi
|
||||
])
|
||||
AC_CACHE_CHECK([for library combo],[_gs_cv_libray_combo], [
|
||||
case "$with_library_combo" in
|
||||
apple) with_library_combo=apple-apple-apple ;;
|
||||
gnu) with_library_combo=gnu-gnu-gnu ;;
|
||||
ng) with_library_combo=ng-gnu-gnu ;;
|
||||
nx) with_library_combo=nx-nx-nx ;;
|
||||
esac
|
||||
_gs_cv_libray_combo=${with_library_combo}
|
||||
])
|
||||
AS_VAR_SET([ac_cv_library_combo], [${_gs_cv_libray_combo}])
|
||||
AS_VAR_SET([OBJC_RUNTIME_LIB], [$(echo ${_gs_cv_libray_combo} | $AWK -F- '{ print $[1] }')])
|
||||
AC_SUBST([ac_cv_library_combo], [${_gs_cv_libray_combo}])
|
||||
])
|
282
m4/gs_objc_runtime.m4
Normal file
282
m4/gs_objc_runtime.m4
Normal file
|
@ -0,0 +1,282 @@
|
|||
# SYNOPSIS
|
||||
#
|
||||
# GS_OBJ_DIR()
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# This macro may only be used after general gnustep-make configuration has completed. It will return the object directory
|
||||
# required for a non-flattened setup.
|
||||
#
|
||||
AC_DEFUN([GS_OBJ_DIR], [
|
||||
AC_CACHE_CHECK([for object subdirectory],[_gs_cv_obj_dir], [
|
||||
if test "$GNUSTEP_IS_FLATTENED" != yes; then
|
||||
clean_target_os=`$srcdir/clean_os.sh $target_os`
|
||||
clean_target_cpu=`$srcdir/clean_cpu.sh $target_cpu`
|
||||
_gs_cv_obj_dir="$clean_target_cpu/$clean_target_os"
|
||||
else
|
||||
_gs_cv_obj_dir="(none)"
|
||||
fi
|
||||
])
|
||||
AS_VAR_IF([_gs_cv_obj_dir], ["(none)"], AS_UNSET(gs_cv_obj_dir), [AS_VAR_SET([gs_cv_obj_dir], [${_gs_cv_obj_dir}])])
|
||||
])
|
||||
|
||||
|
||||
# SYNOPSIS
|
||||
#
|
||||
# GS_DOMAIN_DIR([installation-domain],[HEADERS or LIBRARIES],[override-library-combo])
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# Expands to the variable pointing to the correct headers or libraries directory in that domain
|
||||
#
|
||||
AC_DEFUN([GS_DOMAIN_DIR],[
|
||||
AC_REQUIRE([GS_OBJ_DIR])
|
||||
AS_VAR_SET([_LIBRARY_COMBO], [${LIBRARY_COMBO}])
|
||||
m4_pushdef([search_dir], [m4_join([_],[gs_cv], $1, $2, [dir], AS_TR_SH($3))])
|
||||
AS_VAR_PUSHDEF([LIBRARY_COMBO], m4_join([], search_dir, [_combo]))
|
||||
LIBRARY_COMBO=m4_default([$3], [${_LIBRARY_COMBO}])
|
||||
AC_CACHE_VAL(search_dir,[
|
||||
search_dir=m4_join([],[$GNUSTEP_], $1, [_], $2)
|
||||
|
||||
if test ! "$GNUSTEP_IS_FLATTENED" = yes; then
|
||||
search_dir="${search_dir}/m4_case([$2], [HEADERS], [${LIBRARY_COMBO}], [LIBRARIES], [${gs_cv_obj_dir}])"
|
||||
fi
|
||||
])
|
||||
AS_VAR_POPDEF([LIBRARY_COMBO])
|
||||
m4_popdef([search_dir])
|
||||
AS_UNSET(_LIBRARY_COMBO)
|
||||
])
|
||||
|
||||
|
||||
# SYNOPSIS
|
||||
#
|
||||
# GS_DOMAINS_FOR_FILES([prefix],[HEADERS or LIBRARIES],[comma separated list of file names][optional-library-combo-override])
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# This macros performs a search for the mentioned files in all installation domains and returns
|
||||
# a list of which domains the file(s) were found in as `$prefix_DOMAINS'. If more than file is
|
||||
# specified the search will succeed if one of the files is found.
|
||||
AC_DEFUN([GS_DOMAINS_FOR_FILES],[
|
||||
m4_pushdef([cache_var], [m4_join([_], [gs_cv], m4_tolower($1), [domains], AS_TR_SH($4))])
|
||||
AC_REQUIRE([GS_OBJ_DIR])
|
||||
AC_CACHE_CHECK(m4_join([ ], [for domains containing], m4_tolower($2), m4_join([, ], [$3])), cache_var, [
|
||||
cache_var=""
|
||||
INFIX=""
|
||||
m4_foreach([domain], [SYSTEM, NETWORK, LOCAL, USER], [
|
||||
m4_pushdef([search_dir], [m4_join([_],[gs_cv], domain, $2, [dir], AS_TR_SH($4))])
|
||||
GS_DOMAIN_DIR([domain],[$2],[$4])
|
||||
if test -d $search_dir; then
|
||||
if test -f "$search_dir/m4_combine(m4_join([], [-o -f "$], search_dir, [/]), [$3], [" ], []); then
|
||||
cache_var="${cache_var}${INFIX}domain"
|
||||
INFIX=", "
|
||||
fi
|
||||
fi
|
||||
m4_popdef([search_dir])
|
||||
])
|
||||
if test x"${cache_var}" = x""; then
|
||||
cache_var="(none)"
|
||||
fi
|
||||
])
|
||||
AS_VAR_IF(cache_var, ["(none)"], AS_UNSET(m4_join([_], $1, [DOMAINS])), [AS_VAR_SET(m4_join([_], $1, [DOMAINS]), [${cache_var}])])
|
||||
m4_popdef([cache_var])
|
||||
])
|
||||
|
||||
# Helper macro to detect in which installation domain (if any) a custom libobjc library is installed.
|
||||
AC_DEFUN([GS_CUSTOM_OBJC_RUNTIME_DOMAIN], [
|
||||
AC_REQUIRE([AC_PROG_SED])
|
||||
m4_pushdef([LIBOBJC], m4_join([_], [$1], [LIBOBJC]))
|
||||
m4_pushdef([OBJC_HEADERS], m4_join([_], [$1], [OBJC_HEADERS]))
|
||||
m4_pushdef([LIBOBJC_DOMAINS], m4_join([_], LIBOBJC, [DOMAINS]))
|
||||
m4_pushdef([OBJC_HEADERS_DOMAINS], m4_join([_], OBJC_HEADERS, [DOMAINS]))
|
||||
m4_pushdef([gs_cv_libobjc_domain], m4_join([_], [gs_cv_libobjc_domain], m4_tolower($1)))
|
||||
GS_DOMAINS_FOR_FILES([LIBOBJC], [LIBRARIES], [libobjc.a, libobjc.so, libobjc.dll.a, libobjc-gnu.dylib, objc.lib], [$2])
|
||||
GS_DOMAINS_FOR_FILES([OBJC_HEADERS], [HEADERS], [objc/objc.h], [$2])
|
||||
AC_CACHE_CHECK([for custom shared objc library domain], [gs_cv_libobjc_domain], [
|
||||
gs_cv_libobjc_domain=""
|
||||
for i in $(echo ${LIBOBJC_DOMAINS}| $SED "s/, / /g"); do
|
||||
for j in $(echo ${OBJC_HEADERS_DOMAINS}| $SED "s/, / /g"); do
|
||||
if test x"$i" = x"$j"; then
|
||||
gs_cv_libobjc_domain=$i
|
||||
break
|
||||
fi
|
||||
done
|
||||
if test ! x"$gs_cv_libobjc_domain" = x""; then
|
||||
break
|
||||
fi
|
||||
done
|
||||
])
|
||||
m4_popdef([LIBOBJC])
|
||||
m4_popdef([OBJC_HEADERS])
|
||||
m4_popdef([LIBOBJC_DOMAINS])
|
||||
m4_popdef([OBJC_HEADERS_DOMAINS])
|
||||
m4_popdef([gs_cv_libobjc_domain])
|
||||
])
|
||||
|
||||
# Helper macro to find libobjc via package config. In addition to the usual pkg-config flags, this will
|
||||
# also set libobjc_SUPPORTS_ABI20 to `yes' or `no' depending on whether the version has support for it.
|
||||
AC_DEFUN([GS_LIBOBJC_PKG], [
|
||||
AC_REQUIRE([GS_OBJC_LIB_FLAG])
|
||||
libobjc_SUPPORTS_ABI20=""
|
||||
if test x"$GNUSTEP_HAS_PKGCONFIG" = x"yes" -a x"$OBJC_LIB_FLAG" = x""; then
|
||||
PKG_CHECK_MODULES([libobjc], [libobjc >= 2], [
|
||||
dnl we already know that this
|
||||
AS_VAR_SET([libobjc_SUPPORTS_ABI20], ["yes"])
|
||||
], [
|
||||
PKG_CHECK_EXISTS([libobjc], [
|
||||
PKG_CHECK_MODULES([libobjc], [libobjc])
|
||||
])
|
||||
])
|
||||
fi
|
||||
])
|
||||
|
||||
# Helper macro to implement the --with-objc-lib-flag commandline parameter
|
||||
AC_DEFUN([GS_OBJC_LIB_FLAG], [
|
||||
AC_MSG_CHECKING(for the flag to link libobjc)
|
||||
AC_ARG_WITH([objc-lib-flag],
|
||||
[AS_HELP_STRING([--with-objc-lib-flag], [
|
||||
Specify a different flag to link libobjc (the Objective-C runtime
|
||||
library). The default is -lobjc. In some situations you may have
|
||||
multiple versions of libobjc installed and if your linker supports
|
||||
it you may want to specify exactly which one must be used; for
|
||||
example on GNU/Linux you should be able to use
|
||||
--with-objc-lib-flag=-l:libobjc.so.1
|
||||
to request libobjc.so.1 (as opposed to, say, libobjc.so.2) to be
|
||||
linked.
|
||||
])],,
|
||||
[with_objc_lib_flag=]"")
|
||||
AS_VAR_SET([OBJC_LIB_FLAG], [${with_objc_lib_flag}])
|
||||
AC_SUBST(OBJC_LIB_FLAG)
|
||||
if test x"${with_objc_lib_flag}" = x""; then
|
||||
effective_flag=-lobjc
|
||||
else
|
||||
effective_flag=${with_objc_lib_flag}
|
||||
fi
|
||||
AC_MSG_RESULT(${effective_flag})
|
||||
])
|
||||
|
||||
# SYNOPSIS
|
||||
#
|
||||
# GS_CHECK_OBJC_RUNTIME([prefix],[library-combo])
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# Configure the installed Objective-C runtime, if it is installed. This sets up CFLAGS/LDFLAGS/LD_LIBRARY_PATH
|
||||
# as required. Additionally, following variables are set after execution of this macro:
|
||||
# * OBJC_CPPFLAGS
|
||||
# * OBCJ_LDFLAGS
|
||||
# * OBJC_FINAL_LIB_FLAG
|
||||
# * OBJCRT
|
||||
#
|
||||
AC_DEFUN([GS_CHECK_OBJC_RUNTIME], [
|
||||
AC_REQUIRE([AC_CANONICAL_TARGET])
|
||||
AC_REQUIRE([GS_OBJ_DIR])
|
||||
AC_REQUIRE([GS_CHECK_CC_IS_CLANG])
|
||||
AC_REQUIRE([GS_OBJC_LIB_FLAG])
|
||||
AC_REQUIRE([GS_LIBOBJC_PKG])
|
||||
AS_VAR_PUSHDEF([gs_cv_libobjc_domain], m4_join([_], [gs_cv_libobjc_domain], m4_tolower(m4_default([$1], [DFLT]))))
|
||||
GS_CUSTOM_OBJC_RUNTIME_DOMAIN(m4_default([$1], [DFLT]), [$2])
|
||||
m4_ifnblank([$2], [
|
||||
AS_VAR_PUSHDEF([LIBRARY_COMBO], m4_join([_], [gs_cv_rt_combo], m4_tolower($1)))
|
||||
AS_VAR_PUSHDEF([OBJC_RUNTIME_LIB], m4_join([_], [gs_cv_rt_lib], m4_tolower($1)))
|
||||
AS_VAR_SET([LIBRARY_COMBO], [$2])
|
||||
AS_VAR_SET([OBJC_RUNTIME_LIB], m4_substr([$2], 0, m4_index([$2], [-])))
|
||||
])
|
||||
dnl pkg-config makes it easy for us to configure the flags
|
||||
if test ! x"$libobjc_LIBS" = x""; then
|
||||
OBJC_CPPFLAGS=$libobjc_CFLAGS
|
||||
OBCJ_LDFLAGS=""
|
||||
OBJC_FINAL_LIB_FLAG=$libobjc_LIBS
|
||||
dnl we need to invest more smarts if
|
||||
elif test ! x"$gs_cv_libobjc_domain" = x""; then
|
||||
if test x"$gs_cv_libobjc_domain" = x"SYSTEM"; then
|
||||
GNUSTEP_LDIR="$GNUSTEP_SYSTEM_LIBRARIES"
|
||||
GNUSTEP_HDIR="$GNUSTEP_SYSTEM_HEADERS"
|
||||
gs_cv_objc_tools="$GNUSTEP_SYSTEM_TOOLS"
|
||||
elif test x"$gs_cv_libobjc_domain" = x"NETWORK"; then
|
||||
GNUSTEP_LDIR="$GNUSTEP_NETWORK_LIBRARIES"
|
||||
GNUSTEP_HDIR="$GNUSTEP_NETWORK_HEADERS"
|
||||
gs_cv_objc_tools="$GNUSTEP_NETWORK_TOOLS"
|
||||
elif test x"$gs_cv_libobjc_domain" = x"LOCAL"; then
|
||||
GNUSTEP_LDIR="$GNUSTEP_LOCAL_LIBRARIES"
|
||||
GNUSTEP_HDIR="$GNUSTEP_LOCAL_HEADERS"
|
||||
gs_cv_objc_tools="$GNUSTEP_LOCAL_TOOLS"
|
||||
elif test x"$gs_cv_libobjc_domain" = x"USER"; then
|
||||
GNUSTEP_LDIR="$GNUSTEP_USER_LIBRARIES"
|
||||
GNUSTEP_HDIR="$GNUSTEP_USER_HEADERS"
|
||||
gs_cv_objc_tools="$GNUSTEP_USER_TOOLS"
|
||||
fi
|
||||
if test x"$GNUSTEP_IS_FLATTENED" = x"yes"; then
|
||||
GNUSTEP_LDIR="$GNUSTEP_LDIR/$gs_cv_obj_dir"
|
||||
GNUSTEP_HDIR="$GNUSTEP_HDIR/$LIBRARY_COMBO"
|
||||
fi
|
||||
gs_cv_objc_incdir=$GNUSTEP_HDIR
|
||||
gs_cv_objc_libdir=$GNUSTEP_LDIR
|
||||
# The following are needed to compile the test programs
|
||||
OBJC_CPPFLAGS="$CPPFLAGS $INCLUDES -I$gs_cv_objc_incdir"
|
||||
OBJC_LDFLAGS="$LDFLAGS $LIB_DIR -L$gs_cv_objc_libdir"
|
||||
OBJC_FINAL_LIB_FLAG="$OBJC_LIB_FLAG"
|
||||
|
||||
# And the following to execute them
|
||||
LD_LIBRARY_PATH="$LD_LIBRARY_PATH:$gs_cv_objc_libdir"
|
||||
export LD_LIBRARY_PATH
|
||||
# Need to also add the Tools library on mingw
|
||||
case $host_os in
|
||||
*mingw32* )
|
||||
PATH=$PATH:$gs_cv_objc_tools;;
|
||||
* )
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if test x"$OBJC_FINAL_LIB_FLAG" = x""; then
|
||||
OBJC_FINAL_LIB_FLAG="-lobjc"
|
||||
fi
|
||||
OBJC_LDFLAGS="$OBJC_LDFLAGS $OBJC_FINAL_LIB_FLAG"
|
||||
saved_CFLAGS="$CFLAGS"
|
||||
saved_LIBS="$LIBS"
|
||||
CFLAGS="$CFLAGS -x objective-c -I$srcdir $OBJC_CPPFLAGS $OBJC_LDFLAGS"
|
||||
if test "$OBJC_RUNTIME_LIB" = "gnu"; then
|
||||
if test x"$CLANG_CC" = x"yes"; then
|
||||
CFLAGS="$CFLAGS -fobjc-runtime=gcc"
|
||||
fi
|
||||
CFLAGS="$CFLAGS -DGNU_RUNTIME"
|
||||
elif test "$OBJC_RUNTIME_LIB" = "nx"; then
|
||||
CFLAGS="$CFLAGS -DNeXT_RUNTIME"
|
||||
elif test "$OBJC_RUNTIME_LIB" = "apple"; then
|
||||
CFLAGS="$CFLAGS -DAPPLE_RUNTIME"
|
||||
fi
|
||||
OBJCRT="$OBJC_FINAL_LIB_FLAG"
|
||||
AS_VAR_POPDEF([gs_cv_libobjc_domain])
|
||||
m4_ifnblank([$2], [
|
||||
AS_VAR_POPDEF([LIBRARY_COMBO])
|
||||
AS_VAR_POPDEF([OBJC_RUNTIME_LIB])
|
||||
])
|
||||
])
|
||||
|
||||
|
||||
# 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])
|
||||
])
|
||||
|
||||
# SYNOPSIS
|
||||
#
|
||||
# GS_CHECK_RUNTIME_ABI20_SUPPORT()
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# 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.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
|
||||
else
|
||||
gs_cv_libobjc_abi_20=$libobjc_SUPPORTS_ABI20
|
||||
fi
|
||||
])
|
||||
AS_VAR_SET([libobjc_SUPPORTS_ABI20], [${gs_cv_libobjc_abi_20}])
|
||||
])
|
34
m4/gs_runtime_abi.m4
Normal file
34
m4/gs_runtime_abi.m4
Normal file
|
@ -0,0 +1,34 @@
|
|||
# SYNOPSIS
|
||||
#
|
||||
# GS_RUNTIME_ABI([default_runtime_abi])
|
||||
#
|
||||
# DESCRIPTION
|
||||
#
|
||||
# This macro determine the correct runtime ABI to use.
|
||||
#
|
||||
AC_DEFUN([GS_RUNTIME_ABI],dnl
|
||||
[AC_REQUIRE([GS_LIBRARY_COMBO])
|
||||
AC_REQUIRE([GS_CHECK_RUNTIME_ABI20_SUPPORT])
|
||||
AC_REQUIRE([GS_CHECK_CC_IS_CLANG])
|
||||
AC_REQUIRE([GS_CHECK_GCC_VERSION])
|
||||
case "$OBJC_RUNTIME_LIB" in
|
||||
gnu) default_runtime_abi=gcc ;;
|
||||
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.2
|
||||
fi
|
||||
AC_ARG_WITH([runtime-abi],
|
||||
[AS_HELP_STRING([--with-runtime-abi], [
|
||||
When using the ng runtime library, allows control over the -fobjc-runtime= flag passed to clang.
|
||||
])],,
|
||||
[with_runtime_abi=]${default_runtime_abi})
|
||||
AC_CACHE_CHECK([for runtime ABI],[_gs_cv_runtime_abi], [
|
||||
_gs_cv_runtime_abi=${with_runtime_abi}
|
||||
])
|
||||
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])
|
||||
])
|
|
@ -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)...";
|
||||
|
@ -79,6 +79,10 @@ ifneq ($(messages),yes)
|
|||
ECHO_INSTALLING_ADD_CLASS_FILES = @(echo " Installing nested class files...";
|
||||
ECHO_INSTALLING_PROPERTIES_FILES = @(echo " Installing property files...";
|
||||
ECHO_CREATING_JAR_FILE = @(echo " Creating jar file...";
|
||||
|
||||
# Instance/Shared/pkgconfig.make
|
||||
ECHO_INSTALLING_PKGCONFIG = @(echo " Installing pkg-config files...";
|
||||
|
||||
# Instance/Shared/stamp-string.make
|
||||
ECHO_CREATING_STAMP_FILE = @(echo " Creating stamp file...";
|
||||
|
||||
|
|
|
@ -269,7 +269,7 @@ if [ "$GNUSTEP_IS_FLATTENED" = "no" ]; then
|
|||
|
||||
case "$LIBRARY_COMBO" in
|
||||
apple-*) openapp_app_executable="$openapp_full_appname/Contents/MacOS/$openapp_appname";;
|
||||
*) openapp_app_executable="$openapp_full_appname/$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS/$LIBRARY_COMBO/$openapp_appname";;
|
||||
*) openapp_app_executable="$openapp_full_appname/$GNUSTEP_HOST_CPU-$GNUSTEP_HOST_OS/$LIBRARY_COMBO/$openapp_appname";;
|
||||
esac
|
||||
|
||||
else
|
||||
|
|
|
@ -153,16 +153,16 @@ case "$tool" in
|
|||
# GNUSTEP_NETWORK_TOOLS
|
||||
# GNUSTEP_SYSTEM_TOOLS
|
||||
#
|
||||
# We look in the GNUSTEP_HOST_CPU/GNUSTEP_HOST_OS/LIBRARY_COMBO
|
||||
# subdirectory first, then the GNUSTEP_HOST_CPU/GNUSTEP_HOST_OS
|
||||
# We look in the GNUSTEP_HOST_CPU-GNUSTEP_HOST_OS/LIBRARY_COMBO
|
||||
# subdirectory first, then the GNUSTEP_HOST_CPU-GNUSTEP_HOST_OS
|
||||
# subdirectory, then the top-level directory.
|
||||
# (For flattened systems we skip the first two options.
|
||||
#
|
||||
# TODO: Also search Admin Tools directories if appropriate
|
||||
for dir in "$GNUSTEP_USER_TOOLS" "$GNUSTEP_LOCAL_TOOLS" "$GNUSTEP_NETWORK_TOOLS" "$GNUSTEP_SYSTEM_TOOLS" ; do
|
||||
if [ "$GNUSTEP_IS_FLATTENED" = "no" ]; then
|
||||
tmpgnudir="$dir/$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS"
|
||||
tmplibdir="$dir/$GNUSTEP_HOST_CPU/$GNUSTEP_HOST_OS/$LIBRARY_COMBO"
|
||||
tmpgnudir="$dir/$GNUSTEP_HOST_CPU-$GNUSTEP_HOST_OS"
|
||||
tmplibdir="$dir/$GNUSTEP_HOST_CPU-$GNUSTEP_HOST_OS/$LIBRARY_COMBO"
|
||||
# echo "$tmplibdir/$tool";
|
||||
if [ -x "$tmplibdir/$tool" ]; then
|
||||
# echo "Found: $tmplibdir/$tool";
|
||||
|
|
123
rules.make
123
rules.make
|
@ -204,6 +204,54 @@ 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.
|
||||
# The default behavior is not to use ARC, unless GNUSTEP_NG_ARC is
|
||||
# set to 1 (perhaps in the GNUstep config file; GNUstep.conf).
|
||||
# The value of ARC_OBJCFLAGS is used to specify the flags passed
|
||||
# to the compiler when building ARC code. If it has not been set,
|
||||
# it defaults to -fobjc-arc -fobjc-arc-exceptions so that objects
|
||||
# are not leaked when an exception is raised.
|
||||
# The value of ARC_CPPFLAGS is used to specify the flags passed
|
||||
# to the preprocessor when building ARC code. If it has not been set,
|
||||
# it defaults to -DGS_WITH_ARC=1
|
||||
ifeq ($(GS_WITH_ARC),)
|
||||
ifeq ($(GNUSTEP_NG_ARC), 1)
|
||||
GS_WITH_ARC=1
|
||||
endif
|
||||
endif
|
||||
ifeq ($(GS_WITH_ARC), 1)
|
||||
ifeq ($(ARC_OBJCFLAGS),)
|
||||
ARC_OBJCFLAGS = -fobjc-arc -fobjc-arc-exceptions
|
||||
endif
|
||||
ifeq ($(ARC_CPPFLAGS),)
|
||||
ARC_CPPFLAGS = -DGS_WITH_ARC=1
|
||||
endif
|
||||
INTERNAL_OBJCFLAGS += $(ARC_OBJCFLAGS)
|
||||
else
|
||||
ARC_OBJCFLAGS=
|
||||
ARC_CPPFLAGS=
|
||||
endif
|
||||
else
|
||||
ARC_OBJCFLAGS=
|
||||
ARC_CPPFLAGS=
|
||||
endif
|
||||
|
||||
# The difference between ADDITIONAL_XXXFLAGS and AUXILIARY_XXXFLAGS is the
|
||||
# following:
|
||||
#
|
||||
|
@ -241,7 +289,7 @@ endif
|
|||
#
|
||||
|
||||
ALL_CPPFLAGS = $(AUTO_DEPENDENCIES_FLAGS) $(CPPFLAGS) $(ADDITIONAL_CPPFLAGS) \
|
||||
$(AUXILIARY_CPPFLAGS)
|
||||
$(AUXILIARY_CPPFLAGS) $(ARC_CPPFLAGS)
|
||||
|
||||
# -I./obj/PrecompiledHeaders/ObjC must be before anything else because
|
||||
# we want an existing and working precompiled header to be used before
|
||||
|
@ -302,16 +350,23 @@ $(ADDITIONAL_JAVACFLAGS) $(AUXILIARY_JAVACFLAGS)
|
|||
ALL_JAVAHFLAGS = $(INTERNAL_CLASSPATHFLAGS) $(ADDITIONAL_JAVAHFLAGS) \
|
||||
$(AUXILIARY_JAVAHFLAGS)
|
||||
|
||||
# CORE_LDFLAGS are those used for both partial link and final link.
|
||||
ifeq ($(shared),no)
|
||||
ALL_LDFLAGS = $(STATIC_LDFLAGS)
|
||||
CORE_LDFLAGS = $(STATIC_LDFLAGS)
|
||||
else
|
||||
ALL_LDFLAGS =
|
||||
CORE_LDFLAGS =
|
||||
endif
|
||||
ALL_LDFLAGS += $(ADDITIONAL_LDFLAGS) $(AUXILIARY_LDFLAGS) $(GUI_LDFLAGS) \
|
||||
CORE_LDFLAGS += $(ADDITIONAL_LDFLAGS) $(AUXILIARY_LDFLAGS) $(GUI_LDFLAGS) \
|
||||
$(BACKEND_LDFLAGS) $(SYSTEM_LDFLAGS) $(INTERNAL_LDFLAGS)
|
||||
|
||||
# ALL_LDFLAGS are the set of flags used in the final link of an executable
|
||||
# or a shared library/bundle.
|
||||
ALL_LDFLAGS += $(CORE_LDFLAGS) $(FINAL_LDFLAGS)
|
||||
|
||||
# In some cases, ld is used for linking instead of $(CC), so we can't use
|
||||
# this in ALL_LDFLAGS
|
||||
CC_LDFLAGS = $(RUNTIME_FLAG)
|
||||
CC_LDFLAGS = $(RUNTIME_FLAG) $(ARC_OBJCFLAGS)
|
||||
|
||||
|
||||
ALL_LIB_DIRS = $(ADDITIONAL_FRAMEWORK_DIRS) $(AUXILIARY_FRAMEWORK_DIRS) \
|
||||
$(ADDITIONAL_LIB_DIRS) $(AUXILIARY_LIB_DIRS) \
|
||||
|
@ -523,7 +578,7 @@ $(GNUSTEP_OBJ_INSTANCE_DIR)/%.mm$(OEXT) : %.mm
|
|||
$($<_FILE_FLAGS) -o $@$(END_ECHO)
|
||||
|
||||
#
|
||||
# Special mingw32 specific rules to compile Windows resource files (.rc files)
|
||||
# Special mingw specific rules to compile Windows resource files (.rc files)
|
||||
# into object files.
|
||||
#
|
||||
ifeq ($(findstring mingw32, $(GNUSTEP_TARGET_OS)), mingw32)
|
||||
|
@ -617,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 $@ $<
|
||||
|
@ -666,18 +739,6 @@ endif
|
|||
|
||||
$(GNUSTEP_MAKEFILES)/*.make: ;
|
||||
|
||||
ifeq ($(GNUSTEP_IS_FLATTENED), no)
|
||||
# If this file can't be found, we can't load the config for that
|
||||
# library combo / target, so we can't do anything. We print an
|
||||
# error and exit.
|
||||
$(GNUSTEP_MAKEFILES)/$(GNUSTEP_TARGET_DIR)/$(LIBRARY_COMBO)/config.make:
|
||||
$(ECHO_NOTHING)\
|
||||
echo "Error - can not find configuration for '$(GNUSTEP_TARGET_DIR)/$(LIBRARY_COMBO)'"; \
|
||||
echo "Please configure, make and make install gnustep-make again using"; \
|
||||
echo "./configure --with-library-combo=$(LIBRARY_COMBO)"; \
|
||||
exit 1$(END_ECHO)
|
||||
endif
|
||||
|
||||
$(GNUSTEP_MAKEFILES)/Additional/*.make: ;
|
||||
|
||||
$(GNUSTEP_MAKEFILES)/Master/*.make: ;
|
||||
|
@ -712,6 +773,10 @@ endif
|
|||
print-gnustep-make-base-libs \
|
||||
print-gnustep-make-gui-libs \
|
||||
print-gnustep-make-installation-domain \
|
||||
print-gnustep-make-host-dir \
|
||||
print-gnustep-make-host-ldir \
|
||||
print-gnustep-make-target-dir \
|
||||
print-gnustep-make-target-ldir \
|
||||
print-gnustep-install-headers \
|
||||
print-gnustep-install-libraries
|
||||
|
||||
|
@ -731,7 +796,7 @@ endif
|
|||
print-gnustep-make-help:
|
||||
@(cat $(GNUSTEP_MAKEFILES)/gnustep-make-help | sed -e '/^#.*/d' -e 's/_MAKE_/$(notdir $(MAKE))/')
|
||||
|
||||
# These targets are used by gnustep-config to allow people to get
|
||||
# These targets are used by gnustep-config to allow people to see the
|
||||
# basic compilation/link flags for GNUstep ObjC code.
|
||||
|
||||
# Flags used when compiling ObjC
|
||||
|
@ -753,8 +818,20 @@ print-gnustep-make-gui-libs:
|
|||
print-gnustep-make-installation-domain:
|
||||
@(echo $(GNUSTEP_INSTALLATION_DOMAIN))
|
||||
|
||||
print-gnustep-make-host-dir:
|
||||
@(echo $(GNUSTEP_HOST_DIR))
|
||||
|
||||
print-gnustep-make-target-ldir:
|
||||
@(echo $(GNUSTEP_TARGET_LDIR))
|
||||
|
||||
print-gnustep-make-target-dir:
|
||||
@(echo $(GNUSTEP_TARGET_DIR))
|
||||
|
||||
print-gnustep-make-host-ldir:
|
||||
@(echo $(GNUSTEP_HOST_LDIR))
|
||||
|
||||
# These targets are used if gnustep-config can't be found but GNUSTEP_MAKEFILES
|
||||
# is defined ... they's let you get libraries and their headers (eg libobjc2)
|
||||
# is defined ... they let you get libraries and their headers (eg libobjc2)
|
||||
# installed in the right place.
|
||||
|
||||
print-gnustep-install-headers:
|
||||
|
|
|
@ -1,2 +1,4 @@
|
|||
CVS
|
||||
*.svn
|
||||
*.git
|
||||
*.hg
|
||||
|
|
301
target.make
301
target.make
|
@ -24,6 +24,9 @@
|
|||
# the 'shared' variable, because we have not set it up yet when this
|
||||
# file is processed!
|
||||
|
||||
# variable to for all OSs treated as Linux and Linux-like
|
||||
IS_LINUX = no
|
||||
|
||||
#
|
||||
# Host and target specific settings
|
||||
#
|
||||
|
@ -34,15 +37,27 @@ endif
|
|||
#
|
||||
# Target specific libraries
|
||||
#
|
||||
TARGET_SYSTEM_LIBS = $(CONFIG_SYSTEM_LIBS) -lm
|
||||
TARGET_SYSTEM_LIBS = $(CONFIG_SYSTEM_LIBS)
|
||||
ifneq ($(GNUSTEP_TARGET_OS), windows)
|
||||
TARGET_SYSTEM_LIBS += -lm
|
||||
endif
|
||||
|
||||
# All code we build needs to be thread-safe nowadays
|
||||
INTERNAL_CFLAGS = -pthread
|
||||
INTERNAL_OBJCFLAGS = -pthread
|
||||
ifeq ($(findstring android, $(GNUSTEP_TARGET_OS)), android)
|
||||
INTERNAL_LDFLAGS =
|
||||
else
|
||||
INTERNAL_LDFLAGS = -pthread
|
||||
INTERNAL_LDFLAGS =
|
||||
|
||||
ifeq ($(debug), yes)
|
||||
# Embed PDB Debug Info on Windows MSVC
|
||||
ifeq ($(findstring windows, $(GNUSTEP_TARGET_OS)), windows)
|
||||
INTERNAL_LDFLAGS += -Wl,-debug
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(findstring android, $(GNUSTEP_TARGET_OS)), android)
|
||||
ifneq ($(GNUSTEP_TARGET_OS), windows)
|
||||
INTERNAL_LDFLAGS = -pthread
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ("$(objc_threaded)","")
|
||||
|
@ -56,7 +71,22 @@ ifeq ($(findstring mingw32, $(GNUSTEP_TARGET_OS)), mingw32)
|
|||
TARGET_SYSTEM_LIBS = $(CONFIG_SYSTEM_LIBS) \
|
||||
-lws2_32 -ladvapi32 -lcomctl32 -luser32 -lcomdlg32 \
|
||||
-lmpr -lnetapi32 -lm -I. # the -I is a dummy to avoid -lm^M
|
||||
else ifeq ($(GNUSTEP_TARGET_OS), windows)
|
||||
TARGET_SYSTEM_LIBS = $(CONFIG_SYSTEM_LIBS) \
|
||||
-lws2_32 -ladvapi32 -lcomctl32 -luser32 -lcomdlg32 \
|
||||
-lmpr -lnetapi32 -lkernel32 -lshell32
|
||||
|
||||
# link against debug or release UCRT DLLs (i.e. /MDd or /MD)
|
||||
ifeq ($(debug),)
|
||||
debug = $(GNUSTEP_DEFAULT_DEBUG)
|
||||
endif
|
||||
ifeq ($(debug), yes)
|
||||
TARGET_SYSTEM_LIBS += -lmsvcrtd -lvcruntimed -lucrtd
|
||||
else
|
||||
TARGET_SYSTEM_LIBS += -lmsvcrt -lvcruntime -lucrt
|
||||
endif
|
||||
endif
|
||||
|
||||
ifeq ($(findstring solaris, $(GNUSTEP_TARGET_OS)), solaris)
|
||||
TARGET_SYSTEM_LIBS = $(CONFIG_SYSTEM_LIBS) -lsocket -lnsl -lm
|
||||
endif
|
||||
|
@ -151,7 +181,14 @@ endif
|
|||
# with XXXX, and prints the result. '-n' disables automatic printing
|
||||
# for portability, so we are sure we only print what we want on all
|
||||
# platforms.
|
||||
EXTRACT_CLASS_NAMES_COMMAND = $(NM) -Pg $$object_file | sed -n -e '/^__objc_class_name_[A-Za-z0-9_.]* [^U]/ {s/^__objc_class_name_\([A-Za-z0-9_.]*\) [^U].*/\1/p;}'
|
||||
|
||||
|
||||
#
|
||||
# NB. With the gnustep-2.0 ABI the class name prefix is ._OBJC_CLASS_
|
||||
# rather than __objc_class_name_ so we search for either.
|
||||
#
|
||||
EXTRACT_CLASS_NAMES_COMMAND = $(NM) -Pg $$object_file | sed -n -e '/^__objc_class_name_[A-Za-z0-9_.]* [^U]/ {s/^__objc_class_name_\([A-Za-z0-9_.]*\) [^U].*/\1/p;}' -e '/^\._OBJC_CLASS_[A-Za-z0-9_.]* [^U]/ {s/^\._OBJC_CLASS_\([A-Za-z0-9_.]*\) [^U].*/\1/p;}'
|
||||
|
||||
|
||||
#
|
||||
# This is the generic version - if the target is not in the following list,
|
||||
|
@ -187,80 +224,6 @@ BUNDLE_LINK_CMD = $(BUNDLE_LD) $(BUNDLE_LDFLAGS) $(ALL_LDFLAGS) \
|
|||
####################################################
|
||||
|
||||
|
||||
####################################################
|
||||
#
|
||||
# MacOSX-Server 1.0
|
||||
#
|
||||
ifeq ($(findstring rhapsody5, $(GNUSTEP_TARGET_OS)), rhapsody5)
|
||||
ifeq ($(OBJC_RUNTIME_LIB), apple)
|
||||
HAVE_BUNDLES = yes
|
||||
endif
|
||||
|
||||
HAVE_SHARED_LIBS = yes
|
||||
SHARED_LIBEXT = .dylib
|
||||
|
||||
ifeq ($(FOUNDATION_LIB), apple)
|
||||
# Use the NeXT compiler
|
||||
CC = cc
|
||||
OBJC_COMPILER = NeXT
|
||||
ifneq ($(arch),)
|
||||
ARCH_FLAGS = $(foreach a, $(arch), -arch $(a))
|
||||
INTERNAL_OBJCFLAGS += $(ARCH_FLAGS)
|
||||
INTERNAL_CFLAGS += $(ARCH_FLAGS)
|
||||
INTERNAL_LDFLAGS += $(ARCH_FLAGS)
|
||||
endif
|
||||
endif
|
||||
|
||||
ifneq ($(OBJC_COMPILER), NeXT)
|
||||
SHARED_LIB_LINK_CMD = \
|
||||
$(LD) $(SHARED_LD_PREFLAGS) \
|
||||
-dynamiclib $(ARCH_FLAGS) -dynamic \
|
||||
-compatibility_version 1 -current_version 1 \
|
||||
-install_name $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR)/$(LIB_LINK_FILE) \
|
||||
$(ALL_LDFLAGS) -o $@ \
|
||||
-framework Foundation \
|
||||
-framework System \
|
||||
$(INTERNAL_LIBRARIES_DEPEND_UPON) $(LIBRARIES_FOUNDATION_DEPEND_UPON) \
|
||||
-lobjc -lgcc $^ $(SHARED_LD_POSTFLAGS) \
|
||||
&& (cd $(LIB_LINK_OBJ_DIR); $(RM_LN_S) $(LIB_LINK_FILE); \
|
||||
$(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
|
||||
else # OBJC_COMPILER=NeXT
|
||||
SHARED_LIB_LINK_CMD = \
|
||||
$(LD) $(SHARED_LD_PREFLAGS) \
|
||||
-dynamiclib $(ARCH_FLAGS) -dynamic \
|
||||
-compatibility_version 1 -current_version 1 \
|
||||
-read_only_relocs warning -undefined warning \
|
||||
-install_name $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR)/$(LIB_LINK_FILE) \
|
||||
$(ALL_LDFLAGS) -o $@ \
|
||||
$(INTERNAL_LIBRARIES_DEPEND_UPON) $(LIBRARIES_FOUNDATION_DEPEND_UPON) \
|
||||
-framework Foundation \
|
||||
$^ $(SHARED_LD_POSTFLAGS) \
|
||||
&& (cd $(LIB_LINK_OBJ_DIR); $(RM_LN_S) $(LIB_LINK_FILE); \
|
||||
$(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
|
||||
endif # OBJC_COMPILER
|
||||
|
||||
OBJ_MERGE_CMD = \
|
||||
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) -d $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
|
||||
STATIC_LIB_LINK_CMD = \
|
||||
/usr/bin/libtool $(STATIC_LD_PREFLAGS) -static $(ARCH_FLAGS) $(ALL_LDFLAGS) -o $@ $^ \
|
||||
$(STATIC_LD_POSTFLAGS)
|
||||
|
||||
# This doesn't work with 4.1, what about others?
|
||||
#ADDITIONAL_LDFLAGS += -Wl,-read_only_relocs,suppress
|
||||
|
||||
AFTER_INSTALL_STATIC_LIB_CMD =
|
||||
|
||||
SHARED_CFLAGS += -dynamic
|
||||
SHARED_LIBEXT = .dylib
|
||||
|
||||
BUNDLE_LD = $(LD)
|
||||
BUNDLE_LDFLAGS += -bundle -undefined suppress $(ARCH_FLAGS)
|
||||
endif
|
||||
#
|
||||
# end MacOSX-Server 1.0
|
||||
#
|
||||
####################################################
|
||||
|
||||
####################################################
|
||||
#
|
||||
|
@ -279,7 +242,7 @@ HAVE_SHARED_LIBS = yes
|
|||
SHARED_LIBEXT = .dylib
|
||||
|
||||
# The output of nm is slightly different on Darwin, it doesn't support -P
|
||||
EXTRACT_CLASS_NAMES_COMMAND = $(NM) -g $$object_file | sed -n -e '/[^U] ___objc_class_name_/ {s/[0-9a-f]* [^U] ___objc_class_name_//p;}'
|
||||
EXTRACT_CLASS_NAMES_COMMAND = $(NM) -g $$object_file | sed -n -e '/[^U] .__OBJC_CLASS_/ {s/[0-9a-f]* [^U] .__OBJC_CLASS_//p;}' -e '/[^U] ___objc_class_name_/ {s/[0-9a-f]* [^U] ___objc_class_name_//p;}'
|
||||
|
||||
ifeq ($(FOUNDATION_LIB), apple)
|
||||
ifneq ($(arch),)
|
||||
|
@ -318,7 +281,7 @@ ifeq ($(OBJC_RUNTIME_LIB), gnu)
|
|||
|
||||
# Make sure that the compiler includes the right Objective-C runtime headers
|
||||
# when compiling plain C source files. When compiling Objective-C source files
|
||||
# the necessary directory is implicitly added by the -fgnu-runtime option, but
|
||||
# the necessary directory should be added by the -fobjc-runtime=gcc option, but
|
||||
# this option is ignored when compiling plain C files.
|
||||
ifneq ($(strip $(CC_GNURUNTIME)),)
|
||||
INTERNAL_CFLAGS += -isystem $(CC_GNURUNTIME)
|
||||
|
@ -349,8 +312,10 @@ SHARED_LIB_LINK_CMD = \
|
|||
$(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
|
||||
|
||||
BUNDLE_LD = $(LD)
|
||||
BUNDLE_LDFLAGS += -fgnu-runtime -bundle
|
||||
BUNDLE_LDFLAGS += -undefined dynamic_lookup
|
||||
ifeq ($(CLANG_CC), yes)
|
||||
BUNDLE_LDFLAGS += -fobjc-runtime=gcc
|
||||
endif
|
||||
BUNDLE_LDFLAGS += -bundle -undefined dynamic_lookup
|
||||
|
||||
else
|
||||
# Apple runtime
|
||||
|
@ -390,7 +355,7 @@ AFTER_INSTALL_SHARED_LIB_CMD = \
|
|||
$(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE) )
|
||||
|
||||
OBJ_MERGE_CMD = \
|
||||
$(LD) -nostdlib -keep_private_externs $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
$(LD) -nostdlib -keep_private_externs $(OBJ_MERGE_CMD_FLAG) $(CORE_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
|
||||
STATIC_LIB_LINK_CMD = \
|
||||
/usr/bin/libtool $(STATIC_LD_PREFLAGS) -static $(ARCH_FLAGS) $(ALL_LDFLAGS) -o $@ $^ \
|
||||
|
@ -543,12 +508,23 @@ endif
|
|||
|
||||
####################################################
|
||||
#
|
||||
# Linux ELF or GNU/Hurd
|
||||
# Linux ELF with GNU or GNU/HURD
|
||||
#
|
||||
# The following ifeq matches both 'linux-gnu' (which is GNU/Linux ELF)
|
||||
# and 'gnu0.3' (I've been told GNUSTEP_TARGET_OS is 'gnu0.3' on
|
||||
# GNU/Hurd at the moment). We want the same code in both cases.
|
||||
# GNU/Hurd at the moment).
|
||||
# We treat GNU/HURD as GNU/Linux for now
|
||||
ifeq ($(findstring gnu, $(GNUSTEP_TARGET_OS)), gnu)
|
||||
IS_LINUX = yes
|
||||
endif
|
||||
|
||||
# The following ifeq matches 'linux-musl' but does not re-match 'linux-gnu'
|
||||
# We treat is as GNU/Linux
|
||||
ifeq ($(findstring linux-musl, $(GNUSTEP_TARGET_OS)), linux-musl)
|
||||
IS_LINUX = yes
|
||||
endif
|
||||
|
||||
ifeq ($(IS_LINUX), yes)
|
||||
HAVE_SHARED_LIBS = yes
|
||||
SHARED_LIB_LINK_CMD = \
|
||||
$(LD) $(SHARED_LD_PREFLAGS) -shared -Wl,-soname,$(LIB_LINK_SONAME_FILE) \
|
||||
|
@ -578,7 +554,7 @@ AFTER_INSTALL_SHARED_LIB_CHOWN = \
|
|||
chown $(CHOWN_TO) $(LIB_LINK_FILE))
|
||||
|
||||
OBJ_MERGE_CMD = \
|
||||
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(CORE_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
|
||||
SHARED_CFLAGS += -fPIC
|
||||
SHARED_LIBEXT = .so
|
||||
|
@ -586,7 +562,7 @@ SHARED_LIBEXT = .so
|
|||
HAVE_BUNDLES = yes
|
||||
BUNDLE_LD = $(LD)
|
||||
BUNDLE_LDFLAGS += -shared
|
||||
ADDITIONAL_LDFLAGS += -rdynamic
|
||||
FINAL_LDFLAGS = -rdynamic
|
||||
STATIC_LDFLAGS += -static
|
||||
endif
|
||||
#
|
||||
|
@ -594,35 +570,6 @@ endif
|
|||
#
|
||||
####################################################
|
||||
|
||||
####################################################
|
||||
#
|
||||
# FreeBSD a.out (2.2.x)
|
||||
#
|
||||
ifeq ($(findstring freebsdaout, $(GNUSTEP_TARGET_OS)), freebsdaout)
|
||||
freebsdaout = yes
|
||||
|
||||
HAVE_SHARED_LIBS = no
|
||||
SHARED_LIB_LINK_CMD = \
|
||||
$(LD) -shared -Wl,-soname,$(LIB_LINK_VERSION_FILE) \
|
||||
$(ALL_LDFLAGS) -o $(LIB_LINK_OBJ_DIR)/$(LIB_LINK_VERSION_FILE) $^ /usr/lib/c++rt0.o \
|
||||
&& (cd $(LIB_LINK_OBJ_DIR); \
|
||||
$(RM_LN_S) $(LIB_LINK_FILE); \
|
||||
$(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
|
||||
|
||||
SHARED_CFLAGS += -fPIC
|
||||
SHARED_LIBEXT = .so
|
||||
|
||||
HAVE_BUNDLES = yes
|
||||
BUNDLE_LD = $(LD)
|
||||
BUNDLE_LDFLAGS += -shared
|
||||
ADDITIONAL_LDFLAGS += -rdynamic
|
||||
STATIC_LDFLAGS += -static
|
||||
endif
|
||||
#
|
||||
# end FreeBSD A.out
|
||||
#
|
||||
####################################################
|
||||
|
||||
####################################################
|
||||
#
|
||||
# FreeBSD ELF
|
||||
|
@ -656,7 +603,7 @@ AFTER_INSTALL_SHARED_LIB_CHOWN = \
|
|||
chown $(CHOWN_TO) $(LIB_LINK_SONAME_FILE); \
|
||||
chown $(CHOWN_TO) $(LIB_LINK_FILE))
|
||||
OBJ_MERGE_CMD = \
|
||||
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(CORE_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
|
||||
SHARED_CFLAGS += -fPIC
|
||||
SHARED_LIBEXT = .so
|
||||
|
@ -664,7 +611,7 @@ SHARED_LIBEXT = .so
|
|||
HAVE_BUNDLES = yes
|
||||
BUNDLE_LD = $(LD)
|
||||
BUNDLE_LDFLAGS += -shared
|
||||
ADDITIONAL_LDFLAGS += -rdynamic
|
||||
FINAL_LDFLAGS = -rdynamic
|
||||
STATIC_LDFLAGS += -static
|
||||
|
||||
endif
|
||||
|
@ -690,7 +637,7 @@ SHARED_LIB_LINK_CMD = \
|
|||
$(RM_LN_S) $(LIB_LINK_FILE); \
|
||||
$(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
|
||||
OBJ_MERGE_CMD = \
|
||||
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(CORE_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
|
||||
SHARED_CFLAGS += -fPIC
|
||||
SHARED_LIBEXT = .so
|
||||
|
@ -698,8 +645,8 @@ SHARED_LIBEXT = .so
|
|||
HAVE_BUNDLES = yes
|
||||
BUNDLE_LD = $(LD)
|
||||
BUNDLE_LDFLAGS += -shared
|
||||
ADDITIONAL_LDFLAGS += -rdynamic -Wl,-R/usr/pkg/lib -L/usr/pkg/lib -Wl,-R/usr/X11R6/lib -L/usr/X11R6/lib
|
||||
ADDITIONAL_INCLUDE_DIRS += -I/usr/pkg/include
|
||||
FINAL_LDFLAGS = -rdynamic
|
||||
ADDITIONAL_INCLUDE_DIRS +=
|
||||
STATIC_LDFLAGS += -static
|
||||
endif
|
||||
#
|
||||
|
@ -723,7 +670,7 @@ SHARED_LIB_LINK_CMD = \
|
|||
$(RM_LN_S) $(LIB_LINK_FILE); \
|
||||
$(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
|
||||
OBJ_MERGE_CMD = \
|
||||
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(CORE_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
|
||||
SHARED_CFLAGS += -fPIC
|
||||
SHARED_LIBEXT = .so
|
||||
|
@ -731,7 +678,8 @@ SHARED_LIBEXT = .so
|
|||
HAVE_BUNDLES = yes
|
||||
BUNDLE_LD = $(LD)
|
||||
BUNDLE_LDFLAGS += -shared
|
||||
ADDITIONAL_LDFLAGS += -rdynamic -Wl,-R/usr/pkg/lib -L/usr/pkg/lib -Wl,-R/usr/X11R6/lib -L/usr/X11R6/lib
|
||||
ADDITIONAL_LDFLAGS += -Wl,-R/usr/pkg/lib -L/usr/pkg/lib -Wl,-R/usr/X11R6/lib -L/usr/X11R6/lib
|
||||
FINAL_LDFLAGS = -rdynamic
|
||||
ADDITIONAL_INCLUDE_DIRS += -I/usr/pkg/include
|
||||
STATIC_LDFLAGS += -static
|
||||
endif
|
||||
|
@ -769,7 +717,7 @@ AFTER_INSTALL_SHARED_LIB_CMD = \
|
|||
)
|
||||
|
||||
OBJ_MERGE_CMD = \
|
||||
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(CORE_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
|
||||
SHARED_CFLAGS += -fPIC
|
||||
SHARED_LIBEXT = .so
|
||||
|
@ -781,7 +729,9 @@ ADDITIONAL_LDFLAGS += -Wl,-E
|
|||
STATIC_LDFLAGS += -static
|
||||
|
||||
# nm on OpenBSD is rather like on Darwin
|
||||
EXTRACT_CLASS_NAMES_COMMAND = $(NM) -g $$object_file | sed -n -e '/[^U] __objc_class_name_/ {s/[0-9a-f]* [^U] __objc_class_name_//p;}'
|
||||
|
||||
EXTRACT_CLASS_NAMES_COMMAND = $(NM) -g $$object_file | sed -n -e '/[^U] ._OBJC_CLASS_/ {s/[0-9a-f]* [^U] ._OBJC_CLASS_//p;}' -e '/[^U] __objc_class_name_/ {s/[0-9a-f]* [^U] __objc_class_name_//p;}'
|
||||
|
||||
endif
|
||||
#
|
||||
# end OpenBSD 3.x
|
||||
|
@ -801,7 +751,7 @@ SHARED_LIB_LINK_CMD = \
|
|||
$(RM_LN_S) $(LIB_LINK_FILE); \
|
||||
$(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
|
||||
OBJ_MERGE_CMD = \
|
||||
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(CORE_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
|
||||
SHARED_CFLAGS += -fPIC
|
||||
SHARED_LIBEXT = .so
|
||||
|
@ -809,7 +759,7 @@ SHARED_LIBEXT = .so
|
|||
HAVE_BUNDLES = yes
|
||||
BUNDLE_LD = $(LD)
|
||||
BUNDLE_LDFLAGS += -shared
|
||||
ADDITIONAL_LDFLAGS += -rdynamic
|
||||
FINAL_LDFLAGS = -rdynamic
|
||||
STATIC_LDFLAGS += -static
|
||||
# Newer gcc's don't define this in Objective-C programs:
|
||||
AUXILIARY_CPPFLAGS += -D__LANGUAGES_C__
|
||||
|
@ -858,7 +808,7 @@ SHARED_CFLAGS += -fPIC
|
|||
SHARED_LIBEXT = .so
|
||||
|
||||
OBJ_MERGE_CMD = \
|
||||
$(LD) $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
$(LD) $(OBJ_MERGE_CMD_FLAG) $(CORE_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
|
||||
ADDITIONAL_LDFLAGS +=
|
||||
STATIC_LDFLAGS +=
|
||||
|
@ -876,7 +826,7 @@ endif
|
|||
#
|
||||
# Mingw32
|
||||
#
|
||||
ifeq ($(findstring mingw32, $(GNUSTEP_TARGET_OS)), mingw32)
|
||||
ifeq ($(findstring mingw32, $(GNUSTEP_TARGET_OS)), mingw32)
|
||||
shared = yes
|
||||
HAVE_SHARED_LIBS = yes
|
||||
|
||||
|
@ -894,7 +844,7 @@ SHARED_CFLAGS =
|
|||
# while it is the default, it might silently get disabled if a symbol
|
||||
# gets manually exported (eg, because a header of a library we include
|
||||
# exports a symbol by mistake).
|
||||
ifneq ($(CC),clang)
|
||||
ifneq ($(CLANG_CC), yes)
|
||||
SHARED_LIB_LINK_CMD = \
|
||||
$(LD) $(SHARED_LD_PREFLAGS) -shared \
|
||||
-Wl,--enable-auto-image-base \
|
||||
|
@ -931,9 +881,9 @@ SHARED_LIBEXT = .dll.a
|
|||
DLL_LIBEXT = .dll
|
||||
#SHARED_CFLAGS +=
|
||||
|
||||
ifneq ($(CC),clang)
|
||||
ifneq ($(CLANG_CC), yes)
|
||||
OBJ_MERGE_CMD = \
|
||||
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(CORE_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
else
|
||||
OBJ_MERGE_CMD = \
|
||||
ar cr $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
|
@ -942,7 +892,7 @@ endif
|
|||
HAVE_BUNDLES = yes
|
||||
BUNDLE_LD = $(LD)
|
||||
|
||||
ifeq ($(CC),clang)
|
||||
ifeq ($(CLANG_CC), yes)
|
||||
BUNDLE_LDFLAGS += -shared -Wl,--export-all-symbols \
|
||||
-Wl,--enable-auto-import \
|
||||
-Wl,--enable-auto-image-base \
|
||||
|
@ -960,9 +910,14 @@ endif
|
|||
ADDITIONAL_LDFLAGS += -Wl,--enable-auto-import
|
||||
ADDITIONAL_FLAGS += -fno-omit-frame-pointer
|
||||
|
||||
# On Mingw32, it looks like the class name symbols start with '___' rather
|
||||
# than '__'
|
||||
EXTRACT_CLASS_NAMES_COMMAND = $(NM) -Pg $$object_file | sed -n -e '/^___objc_class_name_[A-Za-z0-9_.]* [^U]/ {s/^___objc_class_name_\([A-Za-z0-9_.]*\) [^U].*/\1/p;}'
|
||||
# On 32bit Mingw32, it looks like the class name symbols start with an extra
|
||||
# underscore.
|
||||
|
||||
ifeq ($(findstring pc, $(GNUSTEP_TARGET_VENDOR)), pc)
|
||||
EXTRACT_CLASS_NAMES_COMMAND = $(NM) -Pg $$object_file | sed -n -e '/^.__OBJC_CLASS_[A-Za-z0-9_.]* [^U]/ {s/^.__OBJC_CLASS_\([A-Za-z0-9_.]*\) [^U].*/\1/p;}' -e '/^___objc_class_name_[A-Za-z0-9_.]* [^U]/ {s/^___objc_class_name_\([A-Za-z0-9_.]*\) [^U].*/\1/p;}'
|
||||
else
|
||||
EXTRACT_CLASS_NAMES_COMMAND = $(NM) -Pg $$object_file | sed -n -e '/^._OBJC_CLASS_[A-Za-z0-9_.]* [^U]/ {s/^._OBJC_CLASS_\([A-Za-z0-9_.]*\) [^U].*/\1/p;}' -e '/^__objc_class_name_[A-Za-z0-9_.]* [^U]/ {s/^__objc_class_name_\([A-Za-z0-9_.]*\) [^U].*/\1/p;}'
|
||||
endif
|
||||
|
||||
endif
|
||||
|
||||
|
@ -1011,7 +966,7 @@ CYGWIN_LD_FLAGS = -Wl,--export-all-symbols -Wl,--enable-auto-import
|
|||
#SHARED_CFLAGS +=
|
||||
|
||||
OBJ_MERGE_CMD = \
|
||||
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) $(CYGWIN_LD_FLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(CORE_LDFLAGS) $(CYGWIN_LD_FLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
|
||||
HAVE_BUNDLES = yes
|
||||
BUNDLE_LD = $(LD)
|
||||
|
@ -1031,6 +986,60 @@ endif
|
|||
#
|
||||
####################################################
|
||||
|
||||
####################################################
|
||||
#
|
||||
# Windows MSVC
|
||||
#
|
||||
ifeq ($(GNUSTEP_TARGET_OS), windows)
|
||||
shared = yes
|
||||
HAVE_SHARED_LIBS = yes
|
||||
|
||||
# This command links the library, generates the list of symbols to export from
|
||||
# the dllexport annotations, creates the DLL (eg, obj/gnustep-base-1_13.dll),
|
||||
# a PDB file (eg, obj/gnustep-base-1_13.pdb, requires -g flag), and the import
|
||||
# library (eg, obj/gnustep-base.lib).
|
||||
SHARED_LIB_LINK_CMD = \
|
||||
$(LD) $(SHARED_LD_PREFLAGS) -g -Wl,-dll \
|
||||
-Wl,-implib:$(LIB_LINK_OBJ_DIR)/$(LIB_LINK_VERSION_FILE) \
|
||||
-Wl,-pdb:$(LIB_LINK_OBJ_DIR)/$(LIB_LINK_PDB_FILE) \
|
||||
$(ALL_LDFLAGS) -o $(LIB_LINK_OBJ_DIR)/$(LIB_LINK_DLL_FILE) $^ \
|
||||
$(INTERNAL_LIBRARIES_DEPEND_UPON) \
|
||||
$(SHARED_LD_POSTFLAGS)
|
||||
|
||||
AFTER_INSTALL_SHARED_LIB_CMD =
|
||||
AFTER_INSTALL_SHARED_LIB_CHOWN =
|
||||
|
||||
BUILD_DLL = yes
|
||||
LIBEXT = .lib
|
||||
SHARED_LIBEXT = .lib
|
||||
DLL_LIBEXT = .dll
|
||||
DLL_PDBEXT = .pdb
|
||||
#SHARED_CFLAGS +=
|
||||
|
||||
OBJ_MERGE_CMD = ar cr $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
|
||||
HAVE_BUNDLES = yes
|
||||
BUNDLE_LD = $(LD)
|
||||
|
||||
BUNDLE_LDFLAGS += -Wl,-dll
|
||||
BUNDLE_LINK_CMD = \
|
||||
$(BUNDLE_LD) $(BUNDLE_LDFLAGS) $(ALL_LDFLAGS) \
|
||||
-o $(LDOUT)$(BUNDLE_FILE) \
|
||||
$(OBJ_FILES_TO_LINK) \
|
||||
$(BUNDLE_LIBFLAGS) $(ALL_LIB_DIRS) $(BUNDLE_LIBS)
|
||||
|
||||
# On Windows MSVC, class name symbols start with '__'
|
||||
EXTRACT_CLASS_NAMES_COMMAND = $(NM) -Pg $$object_file | sed -n -e '/^._OBJC_CLASS_[A-Za-z0-9_.]* [^U]/ {s/^._OBJC_CLASS_\([A-Za-z0-9_.]*\) [^U].*/\1/p;}' -e '/^__objc_class_name_[A-Za-z0-9_.]* [^U]/ {s/^__objc_class_name_\([A-Za-z0-9_.]*\) [^U].*/\1/p;}'
|
||||
|
||||
# Suppress Clang warning in Base when including "GNUstepBase/GSConfig.h":
|
||||
# #include resolved using non-portable Microsoft search rules as: ././GNUstepBase/GSConfig.h
|
||||
ADDITIONAL_FLAGS += -Wno-microsoft-include
|
||||
|
||||
endif
|
||||
|
||||
# end Windows MSVC
|
||||
#
|
||||
####################################################
|
||||
|
||||
####################################################
|
||||
#
|
||||
|
@ -1072,7 +1081,7 @@ AFTER_INSTALL_SHARED_LIB_CHOWN = \
|
|||
chown $(CHOWN_TO) $(LIB_LINK_FILE))
|
||||
|
||||
OBJ_MERGE_CMD = \
|
||||
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(CORE_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
|
||||
SHARED_CFLAGS += -fpic -fPIC -std=gnu99
|
||||
SHARED_LIBEXT = .so
|
||||
|
@ -1108,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
|
||||
|
@ -1132,7 +1141,7 @@ SHARED_LIB_LINK_CMD = \
|
|||
$(LN_S) $(LIB_LINK_VERSION_FILE) $(LIB_LINK_FILE))
|
||||
|
||||
OBJ_MERGE_CMD = \
|
||||
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(CORE_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
|
||||
ifeq ($(CC), cc)
|
||||
SHARED_CFLAGS += +z
|
||||
|
@ -1193,7 +1202,7 @@ AFTER_INSTALL_SHARED_LIB_CHOWN = \
|
|||
chown $(CHOWN_TO) $(LIB_LINK_FILE))
|
||||
|
||||
OBJ_MERGE_CMD = \
|
||||
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(CORE_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
|
||||
SHARED_CFLAGS += -fPIC
|
||||
SHARED_LIBEXT = .so
|
||||
|
@ -1201,7 +1210,7 @@ SHARED_LIBEXT = .so
|
|||
HAVE_BUNDLES = yes
|
||||
BUNDLE_LD = $(LD)
|
||||
BUNDLE_LDFLAGS += -shared
|
||||
ADDITIONAL_LDFLAGS += -rdynamic
|
||||
FINAL_LDFLAGS = -rdynamic
|
||||
STATIC_LDFLAGS += -static
|
||||
endif
|
||||
#
|
||||
|
@ -1243,7 +1252,7 @@ AFTER_INSTALL_SHARED_LIB_CHOWN = \
|
|||
chown $(CHOWN_TO) $(LIB_LINK_FILE))
|
||||
|
||||
OBJ_MERGE_CMD = \
|
||||
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(CORE_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
|
||||
|
||||
SHARED_CFLAGS += -fPIC
|
||||
SHARED_LIBEXT = .so
|
||||
|
@ -1251,7 +1260,7 @@ SHARED_LIBEXT = .so
|
|||
HAVE_BUNDLES = yes
|
||||
BUNDLE_LD = $(LD)
|
||||
BUNDLE_LDFLAGS += -shared
|
||||
ADDITIONAL_LDFLAGS += -rdynamic
|
||||
FINAL_LDFLAGS = -rdynamic
|
||||
STATIC_LDFLAGS += -static
|
||||
endif
|
||||
#
|
||||
|
|
Loading…
Reference in a new issue