Compare commits

...

173 commits

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

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

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

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

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

* Update README
2023-11-01 09:47:05 +01:00
Richard Frith-Macdonald
3ff4ee8a05 Specify texi2html output file explicitly 2023-02-06 21:35:32 +00:00
Riccardo Mottola
2ce2a05f45 Try to implement .dist-ignore support for git-dist: after archive, export and recompress again by excluding .dist-ignore 2023-02-06 21:19:49 +01:00
Hugo Melder
5ee21206a8
Windows MSVC debug symbols, gnustep-tests extension, and typo fixes (#30)
* Conditionally add PDB Debug Info on Windows MSVC

* Add make debug and no-silent options

* Update gnustep-tests help prompt
2023-01-09 23:30:22 +01:00
Richard Frith-Macdonald
f0e00360a2 Dec 2022 release 2022-12-28 10:18:03 +00:00
Richard Frith-Macdonald
6b6217fb14 Make sure test framework is in the include path 2022-12-23 10:19:23 +00:00
Richard Frith-Macdonald
626971095f Fix occasional loss of pass/fail output 2022-12-05 10:58:38 +00:00
Richard Frith-Macdonald
3b1d8035b2 Fix uninitialised variable in test 2022-12-05 10:35:49 +00:00
Riccardo
58d9d3a9e5
since newer autoconf detects linux-musl as separate, try to support it (#32)
* since newer autoconf detects linux-musl as separate, try to support it
2022-12-04 23:14:34 +01:00
Hugo Melder
13db21b769
Merge pull request #28 from gnustep/msvc-debugger-fixes
Various fixes for Windows MSVC
2022-08-03 14:59:40 +02:00
Hugo Melder
5d7d5838f8
Merge pull request #29 from gnustep/msvc-pdb-fix
Add missing LIB_LINK_PDB_FILE variable to framework.make
2022-08-03 14:55:49 +02:00
Hugo Melder
323223cae6 Add missing LIB_LINK_PDB_FILE variable to framework.make 2022-08-03 14:43:36 +02:00
Hugo Melder
5dd6aee069 Cleanup config.make.in 2022-08-02 19:25:07 +02:00
Hugo Melder
c4eb5b1192 Remove verbose messages and regenerate configure 2022-08-02 19:01:46 +02:00
Hugo Melder
42fe78d730 Remove old configure 2022-08-02 18:57:19 +02:00
Hugo Melder
0e1b7ea571 Regenerate configure and aclocal.m4 2022-08-02 18:56:06 +02:00
Hugo Melder
d46255b681 Find a compatible debugger 2022-08-02 18:35:28 +02:00
Hugo Melder
1b247a9b4c Conditionally use strncpy_s on MSVC 2022-08-02 17:46:37 +02:00
Hugo Melder
360ec400bc Conditionally use strncpy_s on MSVC 2022-08-02 16:34:18 +02:00
Hugo Melder
ea58b898e9 Create DEBUGGER variable 2022-08-02 16:26:35 +02:00
Fred Kiefer
0dee926610
Merge pull request #27 from gnustep/config_update
Use newer version of config.guess and config.sub.
2022-06-12 17:20:42 +02:00
Fred Kiefer
1e69012101 Use newer version of config.guess and config.sub.
Update configure.ac with autoupdate and regenerate configure with autoconf.
2022-05-10 22:56:55 +02:00
Richard Frith-Macdonald
5e9818204b Avoid output from TestInfo script breaking things 2022-03-01 13:57:56 +00:00
Richard Frith-Macdonald
fd76f00ab8 Unless --failfast is specified, all test files should be executed. 2022-02-16 09:29:58 +00:00
rfm
0c837c086b
Merge pull request #25 from svgol/tmp_Docs_to_LOCAL
* Documentation is now installed in the LOCAL domain
2022-02-08 21:24:00 +00:00
Richard Frith-Macdonald
d637bdbbb3 fix typo referencing variable 2022-01-31 15:35:46 +00:00
Richard Frith-Macdonald
e0cd6bf36e log file hamdling tweaks 2022-01-31 13:35:40 +00:00
Richard Frith-Macdonald
f3df026023 create new files 2022-01-27 17:06:50 +00:00
Richard Frith-Macdonald
d4e31a7b0a Improve cleanup 2022-01-27 14:54:35 +00:00
Richard Frith-Macdonald
385ac92961 Improve cleanup of log files 2022-01-27 10:48:51 +00:00
Richard Frith-Macdonald
9129f9e786 Add testcase support for concurrency, ordering control, repetition. 2022-01-26 22:16:04 +00:00
Sergei Golovin
bdd44812a1 * Documentation is now installed in the LOCAL domain
* Documentation/GNUmakefile:
  - all packages except for tools-make are installed
    to the LOCAL domain nowadays...
    it would be better to install the Documentation part
    of the tools-make there too because it contains
    articles/docs referenced from other libraries'
    Documentation parts
    (e.g. base' Documentation/HtmlNav/index.html)
2021-12-05 12:23:25 +04:00
rfm
d6f902228f
Merge pull request #23 from srbaker/patch-1
Fix spelling error in library-combo manpage.
Merged, thanks.
2021-08-27 09:34:42 +01:00
rfm
25abed1a85
Merge pull request #24 from srbaker/patch-2
Fix spelling error in gnustep-config manpage.
Thanks for that.
2021-08-27 09:33:26 +01:00
Steven R. Baker
058a8344b9
Update gnustep-config.1
Fix spelling error.  This was fixed in the Debian package in 2017 by Eric Heintzmann.
2021-08-25 22:07:52 +02:00
Steven R. Baker
f3645338b6
Update library-combo.7
Fix spelling error.  This was fixed in the Debian package in 2017 by Eric Heintzmann.
2021-08-25 22:06:20 +02:00
Frederik Seiffert
d71ed3371f Windows MSVC: suppress Clang warning -Wmicrosoft-include 2021-08-11 10:23:48 +02:00
Frederik Seiffert
00a4e989ae Install DLLs into /bin under Windows MSVC
This matches the MinGW setup and expectations in other scripts (e.g. gnustep-tests).
2021-08-07 14:55:09 +02:00
John D Pell
30e6966ae5
Exclude .git and .hg from installed packages 2021-07-06 14:45:45 -07:00
John D Pell
ee5dc99e07 Ignore generated file 2021-07-04 18:11:50 -07:00
John D Pell
25ad1abc3e Use defined constants in GNUstep-reset.sh 2021-07-04 18:11:50 -07:00
John D Pell
8c45f895ee Generate GNUstep-reset.sh just like GNUstep.sh
so that different file system layouts can be accounted for. This does not solve the problem of removing /usr/bin from PATH…
2021-07-04 18:11:50 -07:00
Frederik Seiffert
93c893bcde Add workaround for Clang bug on Windows MSVC 2021-07-02 17:22:54 +02:00
Ivan Vučica
796aa5742e
release-chore: Bump version to 2.9.0 and update release notes. 2021-03-21 21:56:13 +00:00
rfm
b262b4f5c9
Merge pull request #17 from triplef/win-msvc-fixes
Windows MSVC fixes
2021-03-17 10:17:21 +00:00
Frederik Seiffert
f4ec7e8609 Fix CFLAGS for Windows MSVC. 2021-03-13 09:51:02 +01:00
Frederik Seiffert
39e556b037 Link against debug or release UCRT DLLs for Windows MSVC and remove unused -pthread flag. 2021-03-13 09:42:15 +01:00
Frederik Seiffert
0ae54f11da Fixed import in Testing.h.
The code uses NSCalendarDate but was only importing NSDate.h.
2021-03-13 09:42:15 +01:00
Richard Frith-Macdonald
1005016879 Correct the example of builing individual files with ARC 2021-03-11 16:08:25 +00:00
Richard Frith-Macdonald
2270671e94 It turns out that, in gnustep-make the mingw64 support was incomplete,
so when we correctly detect mingw64 rather than mingw32 we actually
broke building of Gorm on mingw64.  Additionally, examination of the
cases where we do differentiate between mingw32 and mingw64, in all but
one of them we do the same thing for both.  That being the case, it
makes more sense to scrap the code to differentiate between the two
systems (except in the one case in target.make where we need to be aware
that the two systems prefix class names differently in the object
files), and adopt the triplet used by the mingw-w64 project (where os is
always mingw32 and we differentaiate 64bit windows using the vendor part
of the triplet) rather than the one returned by autoconf (config.guess).
2021-03-06 12:50:53 +00:00
Richard Frith-Macdonald
04ce555693 Fix incorrect setting of a couple of variables in last change 2021-02-26 08:49:07 +00:00
Richard Frith-Macdonald
9115af78c6 The autoconf system (eg the output from config.guess) expects the triplet (cpu-vendor-os) to have mingw32 or mingw64 as the os part, but the mingw-w64 project chose a different triplet (cpu-w64-mingw32) which looks like mingw32. To handle that we convert the triplet back to the standard form. All our tests can therefore continue to check the os part of the triplet to determine whether we are working with mingw32 or mingw64. 2021-02-25 21:34:51 +00:00
Richard Frith-Macdonald
5b47b25b28 fix incorrect check of the value of GSTEST_TS 2021-02-15 10:00:44 +00:00
Richard Frith-Macdonald
e2df3f4a19 Add per-testcase timestamps with an option to disable them 2021-02-15 09:52:22 +00:00
Frederik Seiffert
7ea6ab208d Windows MSVC fixes. 2021-02-12 15:28:53 +01:00
Frederik Seiffert
49fa0681af Support building on Windows with Clang MSVC target 2021-02-03 12:29:02 +01:00
Frederik Seiffert
e9f89d5459 Check $CLANG_CC instead of comparing $CC with "clang"
Fixes checks when $CC is set to something like /path/to/clang.
2021-02-03 12:29:02 +01:00
Frederik Seiffert
ce9d4f5526 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.
2021-02-03 12:29:02 +01:00
fredkiefer
a2737b35f3 * Documentation/news.texi: Update for upcoming release. 2021-01-18 22:38:27 +01:00
Frederik Seiffert
58d2d577f7 Check for objc.lib instead of objc.dll as that is what is used for linking. 2020-12-15 11:49:18 +01:00
Frederik Seiffert
528747eac1 Check for objc.dll to support libobjc2 on Windows. 2020-11-27 16:30:37 +01:00
rfm
ea63969d2b
Merge pull request #11 from gnustep/windows-ng-exceptions
Enable native Objective-C exception check on Windows
2020-11-26 14:12:31 +00:00
Frederik Seiffert
19c86e397c Enable checking for native Objective-C exception support on Windows if non-gnu runtime is used (i.e. ng runtime). 2020-11-26 14:28:56 +01:00
Richard Frith-Macdonald
b9984cae70 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-11-14 07:31:16 +00:00
Richard Frith-Macdonald
8070ae6228 Patch to honor @setfilename 2020-10-31 11:00:35 +00:00
Gregory John Casamento
b20f8d7559 Merge branch 'storyboard_support' 2020-09-07 21:45:58 -04:00
Gregory John Casamento
9a6f5d296c Add storyboard to stamp 2020-09-07 21:45:25 -04:00
Gregory Casamento
99fa14e6fa
Merge pull request #9 from gnustep/storyboard_support
Support for storyboards in GNUmakefiles.
2020-09-07 17:48:46 -04:00
Gregory John Casamento
02e2ba42c1 Fix issues mentioned by fred 2020-09-07 11:16:33 -04:00
Gregory John Casamento
5cdfca4345 Support for storyboards in GNUmakefiles. 2020-09-07 00:17:25 -04:00
fredkiefer
eb7c5d8df3 * configure.ac: Increase AC version number and use OBJCXX directly.
* configure: Regenerate.
2020-08-30 20:42:33 +02:00
Richard Frith-Macdonald
96e81d23c6 fixup for near-equality test 2020-07-31 14:58:21 +01:00
Wolfgang Lux
2e41a77191 Fix variable name in rules.make to make compiling for ARC actually work. 2020-07-09 17:57:32 +02:00
Fred Kiefer
f785b7b772
Merge pull request #8 from gnustep/gcc_version_fix
* gs_gcc_version.m4: Add -dumpfullversion to the version
2020-06-08 12:15:25 +02:00
Niels Grewe
95bd45fb7b
chore: regenerate configure 2020-06-08 09:27:10 +02:00
fredkiefer
c0d40bdf8a * 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. This remove the runstatedir option as my version
of autoconfig does not include it.
2020-06-07 21:39:38 +02:00
Gregory Casamento
f2dca3bc06
Create CODEOWNERS 2020-05-29 04:00:08 -04:00
fredkiefer
d57b85cee2 Patch by Yavor Doganov <yavor@gnu.org> to better support precompiler
headers on gcc >= 9. Although this was still working with my gcc 9.3.1.
2020-05-09 17:37:36 +02:00
Ivan Vučica
e7b97a63fc
documentation: Regenerate the ANNOUNCE file once again. 2020-04-13 23:44:16 +01:00
Ivan Vučica
bcb81bae6d
release-chore: For 2.8.0, fix which 'changes in' section is included.
This will be used when sending the email even if the released
file is still incorrect.
2020-04-13 23:44:13 +01:00
Ivan Vučica
808001278b
documentation: Regenerate the announcement file. 2020-04-13 23:21:00 +01:00
Ivan Vučica
62c7ae20e9
documentation: Standardize announcement file text.
Normalize the accompanying text for the release announcement across
core packages: standardize chapter name and GPG information.
2020-04-13 23:20:50 +01:00
Ivan Vučica
f55c3a95e9
release-chore: Bump version to 2.8.0 and update release notes. 2020-04-05 15:59:54 +01:00
Niels Grewe
d0973c2b9d
Merge pull request #6 from gnustep/fix_extract_class_names_for_runtime2.0_ALL_OSES
Fix extract class names for runtime2.0 (all OSes)
2020-03-29 21:53:46 +02:00
Niels Grewe
a31f416727
docs: Prepare release documentation 2020-03-29 18:58:44 +02:00
Niels Grewe
7c3abdca4a
Merge pull request #5 from gnustep/fix_extract_class_names_for_runtime2.0
Fix extract class names for runtime 2.0 (Linux only)
2020-03-08 15:14:45 +01:00
Patryk Laurent
de94ae6fec adopt rfm's combined sed for the other OSes 2020-02-28 03:49:56 +00:00
Patryk Laurent
3af60d8cce Merge branch 'fix_extract_class_names_for_runtime2.0' into fix_extract_class_names_for_runtime2.0_ALL_OSES 2020-02-28 03:44:59 +00:00
Patryk Laurent
a3bed018c1 adopt rfm's combined sed that works across runtimes 2020-02-28 03:41:49 +00:00
Patryk Laurent
0627fb4eb7 Fix class name extraction for Darwin, OpenBSD, Mingw32/64 2020-02-22 03:34:43 +00:00
Patryk Laurent
29d6accada Condition on kind of runtime 2020-02-22 02:59:51 +00:00
Patryk Laurent
77f7aed44c Fix extract class names for runtime 2. 2020-02-18 01:16:27 +00:00
Richard Frith-Macdonald
2e4a65737d Changes to make activation of ARC for a project easier and more flexible 2020-02-17 11:35:55 +00:00
rfm
46acbafc20 Merge pull request #4 from gnustep/runtime-abi-versions
Simplify configuration of the gnustep-2.0 ABI
2020-02-10 08:33:21 +00:00
Niels Grewe
9b27e65659
simplify runtime type detection
also add some documentation about why this is so complicated
2019-12-23 07:13:23 +01:00
Niels Grewe
02f47ebb01
honour the library combo of an existing installation 2019-12-22 23:59:07 +01:00
Niels Grewe
29dbe2bc76
seamlessly upgrade library combo to ng-gnu-gnu if supported 2019-12-22 23:01:57 +01:00
Niels Grewe
94b77396ce
If the gnustep-2.0 ABI is used, emit a warning if a suspicious linker is found. 2019-12-06 22:29:31 +01:00
Niels Grewe
b458b0eb87
automatically upgrade to gnustep-2.0 abi if supported by compiler and runtime 2019-12-04 08:52:22 +01:00
Niels Grewe
02e014a5f1
move runtime lib check into m4 module 2019-12-04 07:18:35 +01:00
Niels Grewe
4536e16cc7
wip: start improving runtime detection for gnustep-2.0 2019-12-04 02:17:39 +01:00
Niels Grewe
95c97b6690
increase portability of variable splitting 2019-12-03 23:29:26 +01:00
Niels Grewe
98a6b0135d
allow specifing the runtime abi to use 2019-12-03 22:49:26 +01:00
Niels Grewe
21c5b37cc9
move library combo into m4/ 2019-12-03 22:09:00 +01:00
Niels Grewe
114faf5cd8
move some autoconf macros into separate m4 dir 2019-12-03 20:15:42 +01:00
Wolfgang Lux
ebd667fe16 Add support for creating Mercurial tags and archives from Mercurial tags 2019-10-29 15:46:49 +01:00
Richard Frith-Macdonald
14a1d33b46 Use -fobjec-runtime=gcc for targetting the gnu/gcc runtime ABI 2018-07-10 10:46:40 +01:00
Richard Frith-Macdonald
789fa92246 fix typo in comment 2018-07-10 10:42:54 +01:00
Richard Frith-Macdonald
4e4a202511 Changes to make sure that nonfragile ABI settings are implied by gnu/ng runtime 2018-07-09 15:17:49 +01:00
Wolfgang Lux
d13a709339 Fix quotation errors in automatically generated testsuite flags 2018-07-05 12:03:00 +02:00
Richard Frith-Macdonald
a0d45d5a17 make scripts executable 2018-06-27 09:21:44 +01:00
Richard Frith-Macdonald
c80f35fb7b Improve documentation with examples of pre and post testing scripts. 2018-06-27 08:54:39 +01:00
Richard Frith-Macdonald
fd12d1bc5d Replace missing 'then', lost in last commit 2018-04-13 11:04:37 +01:00
Richard Frith-Macdonald
56f7fb1a06 Use 'make maessages=yes' when invoked with --verbose 2018-03-22 17:24:31 +00:00
Richard Frith-Macdonald
11431df279 Minor usability tweak for testcases 2018-03-21 12:57:08 +00:00
Riccardo Mottola
1ce6058205 Remove legacy Rhapsody and FreeBSD-out support 2018-03-05 16:07:02 +01:00
Riccardo Mottola
ad4d7ca0cc cleanup old X11R6 directories and generally remove additional dir 2018-03-05 15:56:56 +01:00
Ivan Vučica
88ea3f8589
git: Fix a bug where old ANNOUNCE text might get added to annotated tag.
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-10 16:14:14 +00:00
Ivan Vučica
50afbfa898
git-tag: Make gnustep-make git-tag'gable and git-dist'able.
This adds support for git-tag and git-dist into GNUmakefile.in for
gnustep-make itself.
2017-12-10 16:14:10 +00:00
Ivan Vučica
720df0d7cf
git-tag: Support annotation files and signing annotated commits. 2017-12-10 16:14:07 +00:00
Ivan Vučica
bf725e8b0d
git-tag: Support creating a Git tag and exporting tarball from the tag.
This commit does not add support to GNUstep Make itself (i.e. you
cannot use the new rules to release GNUstep Make).
2017-12-10 16:14:01 +00:00
Ivan Vučica
06f4a8de1e Fix typo in source-distribution.make. 2017-12-07 21:22:57 +00:00
Eric Heintzmann
9bc9df6167 Update GNUstep.7
fix typo
2017-06-11 21:47:10 +01:00
62 changed files with 11216 additions and 6613 deletions

43
.gitignore vendored Normal file
View 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

View file

@ -1,9 +1,9 @@
1 Announcement
**************
The GNUstep Makefile Package version 2.7.0 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,26 +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.7.0'
1.2 Changes in version 2.9.3
==============================
Garbage collection support removed
• Added support for ASAN/LSAN builds
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
• Various minor bugfixes.
1.3 Obtaining gnustep-make
==========================
You can get the gstep-make-2.7.0.tar.gz distribution file at
You can get the gnustep-make-2.9.3.tar.gz distribution file at
<ftp://ftp.gnustep.org/pub/gnustep/core>
Please log bug reports on the GNUstep project page
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
View 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

388
ChangeLog
View file

@ -1,3 +1,387 @@
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
@ -284,14 +668,14 @@ to specify the files to install.
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

View file

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

View file

@ -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

View file

@ -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 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
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

View file

@ -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/})

View file

@ -13,7 +13,7 @@ gnustep-config \- prints information about the current gnustep installation.
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 differnt types of GNUstep project.
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

View file

@ -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

View file

@ -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

View file

@ -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::
@ -198,7 +252,7 @@ types) is in resource-set.make.
@node aggregate.make, application.make, Project Types, Project Types
@subsection Aggregate (@file{aggregate.make})
@section Aggregate (@file{aggregate.make})
An Aggregate project is a project that consists of several
subprojects. Each subproject can be of any other valid project type
@ -211,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
@ -266,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}.
@ -293,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::
@ -306,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
@ -444,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.
@ -512,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
@ -539,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,
@ -590,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::
@ -602,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}).
@ -628,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.
@ -675,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
@ -738,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
@ -930,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
@ -963,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
@ -997,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::
@ -1017,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
@ -1184,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
@ -1267,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
@ -1344,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
@ -1363,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
@ -1470,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
@ -1557,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
@ -1573,25 +1644,24 @@ 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
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).
Alternatively, to switch on ARC for individual files, you can have a makefile
fragment like this:
@smallexample
ifeq ($(OBJC_RUNTIME_LIB), ng)
file1.m_FILE_FLAGS+=-fobjc-arc
file2.m_FILE_FLAGS+=-fobjc-arc
file9.m_FILE_FLAGS+=-fobjc-arc
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
@defvar xxx_FILE_FILTER_OUT_FLAGS
@code{xxx_FILE_FILTER_OUT_FLAGS} (where xxx is the file name, such as mframe.m)
is a filter-out make pattern of flags to be filtered out

View file

@ -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

View file

@ -9,6 +9,88 @@
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
@ -21,8 +103,6 @@ Framework support fixes
Various other minor bugfixes
@ifclear ANNOUNCE-ONLY
@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.

View file

@ -4,6 +4,69 @@ 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

View file

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

View file

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

View file

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

File diff suppressed because it is too large Load diff

View file

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

26
INSTALL
View file

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

View file

@ -1,4 +1,4 @@
# -*-makefile-*-
# -*-makefile-gmake*-
# Instance/Documentation/texi.make
#
# Instance Makefile rules to build Texinfo documentation.
@ -61,9 +61,23 @@ ifeq ($(GNUSTEP_TEXI2HTML_FLAGS),)
GNUSTEP_TEXI2HTML_FLAGS =
endif
internal-doc-all_:: $(GNUSTEP_INSTANCE).info \
$(GNUSTEP_INSTANCE).pdf \
$(GNUSTEP_INSTANCE)/index.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)/index.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,21 +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 \
if [ -f i$(OUTFILE)_toc.html ]; then \
$(INSTALL_DATA) $(OUTFILE)_*.html \
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR) || true ; \
fi
if [ -f $(GNUSTEP_INSTANCE)/index.html ]; then \
$(MKINSTALLDIRS) $(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(GNUSTEP_INSTANCE); \
$(INSTALL_DATA) $(GNUSTEP_INSTANCE)/*.html \
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(GNUSTEP_INSTANCE); \
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):
@ -158,15 +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)/$(GNUSTEP_INSTANCE)/*.html
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(OUTFILE)/*.html
#
# textdoc targets - these should be merged with the doc targets

View file

@ -122,8 +122,6 @@ endif
# when linking applications.
ifeq ($(findstring mingw32, $(GNUSTEP_TARGET_OS)), mingw32)
ALL_LDFLAGS += -Wl,-subsystem,windows
else ifeq ($(findstring mingw64, $(GNUSTEP_TARGET_OS)), mingw32)
ALL_LDFLAGS += -Wl,-subsystem,windows
endif
$(APP_FILE): $(OBJ_FILES_TO_LINK)
@ -223,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)
@ -265,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)\";"; \
@ -281,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)\";"; \

View file

@ -299,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
@ -819,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)\"" \

View file

@ -219,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)
@ -230,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
@ -326,6 +334,15 @@ 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 shared-instance-pkgconfig-uninstall
@ -353,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; \

View file

@ -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))

View file

@ -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

View file

@ -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

478
NEWS
View file

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

6
README
View file

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

View file

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

4
TestFramework/End.sh Executable file
View 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.

View 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

View file

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

View file

@ -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
View 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.

View file

@ -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.

View file

@ -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,13 +25,22 @@
#include <stdarg.h>
#include <string.h>
#import <Foundation/NSAutoreleasePool.h>
#import <Foundation/NSDate.h>
#import <Foundation/NSException.h>
#import <Foundation/NSObjCRuntime.h>
#import <Foundation/NSObject.h>
#import <Foundation/NSRegularExpression.h>
#import <Foundation/NSString.h>
#import <Foundation/Foundation.h>
#if defined(__OBJC__) && defined(__clang__) && defined(_MSC_VER)
/* Work around Clang bug on Windows MSVC when tests contain no
* 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
@ -57,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.
*/
@ -73,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;
@ -104,7 +124,11 @@ static void (*setEnded)(const char *name, BOOL completed, double duration)
* 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();
@ -304,19 +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; \
} \
pass(_cond, "%s:%d ... " testFormat__, __FILE__, \
__LINE__, ## __VA_ARGS__); \
if (0 == _cond) \
@ -445,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); \
@ -522,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
@ -564,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))
@ -631,5 +665,7 @@ if (__value != __object) \
#define RECREATE_AUTORELEASE_POOL(X) \
if (X == nil) \
(X) = [NSAutoreleasePool new]
#define ENTER_POOL @autoreleasepool{
#define LEAVE_POOL }
#endif

View file

@ -29,6 +29,13 @@
# oldtests.log and oldtests.sum, available for comparison.
# The exit value of the script is 0 if there are no failures, 1 otherwise.
if test "@MISSINGBASH@" = "YES"; then
echo "gnustep-make was unable to find bash at configure time."
echo "The test framework cannot run without bash installed."
echo "Please install bash and reconfigure/reinstall gnustep-make."
exit 0
fi
if test -z "$GNUSTEP_MAKEFILES"; then
GNUSTEP_MAKEFILES=`gnustep-config --variable=GNUSTEP_MAKEFILES 2>/dev/null`
if test -z "$GNUSTEP_MAKEFILES"; then
@ -47,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,7 +762,6 @@ do
TEMPLATE=$GSTESTTOP/GNUmakefile.in
fi
NEEDBUILD=yes
if test x"$TEMPLATE" = x
then
rm -rf core core.* *.core obj GNUmakefile gdb.cmds
@ -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 core.* *.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,7 +1010,7 @@ $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.
if test -r "$GSTESTSUM"

View file

@ -3,7 +3,7 @@
# The version number of this release.
GNUSTEP_MAKE_MAJOR_VERSION=2
GNUSTEP_MAKE_MINOR_VERSION=7
GNUSTEP_MAKE_SUBMINOR_VERSION=0
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
View 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])

View file

@ -638,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)
@ -664,17 +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
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!
@ -756,7 +745,7 @@ ifeq ($(debug), yes)
ADDITIONAL_FLAGS := $(filter-out -O%, $(ADDITIONAL_FLAGS))
# If OPTFLAG does not already include -g, add it here.
ifneq ($(filter -g, $(OPTFLAG)), -g)
ADDITIONAL_FLAGS += -g
OPTFLAG += -g
endif
# Add standard debug compiler flags.
ADDITIONAL_FLAGS += -DDEBUG -fno-omit-frame-pointer
@ -770,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
@ -826,7 +850,7 @@ endif
#
# Common variables for subprojects
#
SUBPROJECT_PRODUCT = subproject$(OEXT)
SUBPROJECT_PRODUCT = subproject.txt
#
# Set JAVA_HOME if not set.
@ -855,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
@ -920,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

View file

@ -85,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)

View file

@ -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"

1641
config.guess vendored Executable file → Normal file

File diff suppressed because it is too large Load diff

View file

@ -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
@ -206,11 +208,6 @@ AUTO_DEPENDENCIES = @AUTO_DEPENDENCIES@
#
USE_OBJC_EXCEPTIONS = @USE_OBJC_EXCEPTIONS@
#
# Whether the ObjC compiler supports -fobjc-nonfragile-abi
#
USE_NONFRAGILE_ABI = @USE_NONFRAGILE_ABI@
#
# Whether the ObjC compiler supports -fobjc-arc
#
@ -231,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@

2973
config.sub vendored Executable file → Normal file

File diff suppressed because it is too large Load diff

7160
configure vendored

File diff suppressed because it is too large Load diff

View file

@ -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
@ -44,58 +45,11 @@ 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
#--------------------------------------------------------------------
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
@ -125,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
#--------------------------------------------------------------------
@ -156,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
#--------------------------------------------------------------------
@ -172,25 +147,26 @@ esac
#--------------------------------------------------------------------
case $host_os in
*cygwin* )
MINGW32=no
MINGW64=no
CYGWIN=yes
MSWIND=yes;;
MINGW32=no
MINGW64=no
CYGWIN=yes
MSWIND=yes;;
*mingw32* )
MINGW32=yes
MINGW64=no
CYGWIN=no
MSWIND=yes;;
*mingw64* )
MINGW32=no
MINGW64=yes
CYGWIN=no
MSWIND=yes;;
* )
MINGW32=no
MINGW64=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)
@ -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
@ -259,7 +237,7 @@ else
CFLAGS="$CFLAGS -fblocks"
AC_LANG_PUSH(C)
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([],[(void)^{int i; i = 0; }();])], [
ac64v_blocks="yes"
ac_cv_blocks="yes"
], [
ac_cv_blocks="no"
])
@ -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])
@ -409,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=;
@ -525,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"
@ -1083,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
@ -1196,57 +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
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" = "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.
@ -1271,86 +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_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 "$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,9 @@ 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++)
if test "$OBJC_RUNTIME_LIB" != ng; then
#--------------------------------------------------------------------
# Check if compiler supports -fobjc-nonfragile-abi, and if so, turn it on!
#--------------------------------------------------------------------
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.
],
USE_NONFRAGILE_ABI=$enableval,
USE_NONFRAGILE_ABI=notset)
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_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. */
int
main()
{
#ifndef __has_feature
#define __has_feature(x) 0
#endif
return __has_feature(objc_nonfragile_abi) ? 0 : 1;
}
]])], USE_NONFRAGILE_ABI=yes, USE_NONFRAGILE_ABI=no)
AC_MSG_RESULT($USE_NONFRAGILE_ABI)
CFLAGS="$CFLAGS_no_nonfragile"
if test x"$USE_NONFRAGILE_ABI" = x"no"; then
AC_MSG_NOTICE([The nonfragile ABI was requested, but the compiler])
AC_MSG_NOTICE([doesn't support it.])
AC_MSG_ERROR([compiler doesn't support nonfragile ABI])
fi
else
if test x"$USE_NONFRAGILE_ABI" != 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)
CPPFLAGS=$saved_CPPFLAGS
fi
if test x"$USE_NONFRAGILE_ABI" = x"yes"; then
AC_MSG_RESULT([yes (compiler default)])
else
AC_MSG_RESULT(not requested by user)
fi
fi
fi
AC_SUBST(USE_NONFRAGILE_ABI)
OBJCXXFLAGS="$OBJCXXFLAGS_saved"
OBJCXXPPFLAGS="$OBJCXXPPFLAGS_saved"
AC_LANG_POP(Objective C++)
#--------------------------------------------------------------------
# Check if compiler supports -fobjc-arc, and if so, turn it on!
@ -1489,7 +1299,7 @@ if test x"$USE_ARC" = x"yes"; then
# What we want to do: set USE_ARC to yes if we can compile
# something with -fobjc-arc.
CFLAGS_no_arc="$CFLAGS"
CFLAGS="$CFLAGS -fobjc-runtime=gnustep-1.8 -fobjc-arc"
CFLAGS="$CFLAGS -fobjc-runtime=gnustep-2.2 -fobjc-arc"
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
/* Note that we never execute this code so it does not really matter
what it is. We are testing that the compiler accepts the
@ -1566,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.
@ -1632,7 +1407,7 @@ USE_OBJC_EXCEPTIONS=$enableval,
USE_OBJC_EXCEPTIONS=maybe)
if test x"$USE_OBJC_EXCEPTIONS" = x"maybe"; then
if test x"$MSWIND" = x"yes"; then
if test x"$MSWIND" = x"yes" -a "$OBJC_RUNTIME_LIB" = "gnu"; then
USE_OBJC_EXCEPTIONS=no
fi
fi
@ -2004,15 +1779,64 @@ AC_CHECK_PROGS(LATEX2HTML, latex2html)
#--------------------------------------------------------------------
# For test framework
#--------------------------------------------------------------------
AC_PATH_PROG(SHELLPROG,bash,/bin/sh)
AC_PATH_PROG(TESTPROG, test)
AC_ARG_WITH(bash-path,[
--with-bash-path=PATH
Set the path to the bash executable to use. This is useful on systems
which do not have a reasonably recent version of bash in their path.
Example: --with-bash-path=/opt/homebrew/bin/bash
],
SHELLPROG="$withval",SHELLPROG=)
if test x"$SHELLPROG" = x""; then
AC_PATH_PROG(SHELLPROG, bash)
else
if test ! -x $SHELLPROG
then
echo "Unable to find executable bash program at $SHELLPROG."
SHELLPROG=
fi
fi
if test x"$SHELLPROG" = x""; then
echo "Unable to find the bash program (needed for testsuite)."
SHELLPROG=/bin/sh
MISSINGBASH=YES
else
MISSINGBASH=NO
BVER=`$SHELLPROG -c 'echo $BASH_VERSION'`
BMAJ=`echo $BVER | sed -e 's/\..*//'`
BMIN=`echo $BVER | sed -e 's/^[[0-9]][[0-9]]*\.\([[0-9]][[0-9]]*\).*/\1/'`
if test ${BMAJ} -lt 4
then
MISSINGBASH=YES
else
if test ${BMAJ} -eq 4 -a ${BMIN} -lt 3
then
MISSINGBASH=YES
fi
fi
if test ${MISSINGBASH} = "YES"
then
echo "The bash progrem version is too old (needed for testsuite)."
SHELLPROG=/bin/sh
fi
fi
if test ${MISSINGBASH} = "YES"
then
echo "Please configure using --with-bash-path= to specify a modernish"
echo "bash program (version 4.3 or later)."
SHELLPROG=/bin/sh
fi
AC_SUBST(MISSINGBASH)
#--------------------------------------------------------------------
# Produce the output files
#--------------------------------------------------------------------
AC_CONFIG_FILES([config-noarch.make config.make openapp opentool
executable.template GNUmakefile GNUstep.conf GNUstep-strict-v2.conf
GNUstep.sh GNUstep.csh fixpath.sh
GNUstep-reset.sh
gnustep-make.spec gnustep-config TestFramework/gnustep-tests
filesystem.make filesystem.sh filesystem.csh gnustep-make-ld.so.conf])
AC_CONFIG_FILES([runtime/$OBJC_RUNTIME_LIB.make:config.make.in])

View file

@ -70,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"
@ -168,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
@ -184,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@"

View file

@ -48,8 +48,6 @@ endif
# Windows
ifeq ($(findstring mingw32, $(GNUSTEP_TARGET_OS)), mingw32)
JAVA_OS = win32
else ifeq ($(findstring mingw64, $(GNUSTEP_TARGET_OS)), mingw64)
JAVA_OS = win32
endif
# Add more platforms here

View file

@ -31,31 +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), nx)

25
m4/gs_cc_is_clang.m4 Normal file
View 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])
])

View 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
View 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
View 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
View 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
View 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])
])

View file

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

View file

@ -204,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) \
@ -530,14 +585,6 @@ ifeq ($(findstring mingw32, $(GNUSTEP_TARGET_OS)), mingw32)
# Add the .rc suffix on Windows.
.SUFFIXES: .rc
# A rule to generate a .o file from the .rc file.
$(GNUSTEP_OBJ_INSTANCE_DIR)/%.rc$(OEXT): %.rc
$(ECHO_COMPILING)windres $< $@$(END_ECHO)
else ifeq ($(findstring mingw64, $(GNUSTEP_TARGET_OS)), mingw64)
# Add the .rc suffix on Windows.
.SUFFIXES: .rc
# A rule to generate a .o file from the .rc file.
$(GNUSTEP_OBJ_INSTANCE_DIR)/%.rc$(OEXT): %.rc
$(ECHO_COMPILING)windres $< $@$(END_ECHO)
@ -625,10 +672,28 @@ endif
# Example of how this rule will be applied:
# gnu/gnustep/base/NSObject.h : gnu/gnustep/base/NSObject.java
# javah -o gnu/gnustep/base/NSObject.h gnu.gnustep.base.NSObject
# or, on more recent releases than 8, we have to use javac and move the
# resulting header file around t the correct location as javac does not
# provide command line options to control the output file name.
# NB. javac also fails to produce a header file when a java file does
# not produce class information, so we catch that and generate an empty
# header where necessary.
%.h : %.java
$(ECHO_JAVAHING)$(JAVAH) \
$(filter-out $($<_FILE_FILTER_OUT_FLAGS),$(ALL_JAVAHFLAGS)) \
$($<_FILE_FLAGS) -o $@ $(subst /,.,$*)$(END_ECHO)
$(ECHO_NOTHING)if [ -x $(JAVAH) ]; then \
$(JAVAH) \
$(filter-out $($<_FILE_FILTER_OUT_FLAGS),$(ALL_JAVAHFLAGS)) \
$($<_FILE_FLAGS) -o $@ $(subst /,.,$*); \
else \
JAVA_DST_DIR=`dirname $@`; \
$(JAVAC) -h $$JAVA_DST_DIR -sourcepath `dirname $*` \
$(filter-out $($<_FILE_FILTER_OUT_FLAGS),$(ALL_JAVAHFLAGS)) \
$($<_FILE_FLAGS) $*.java; \
if [ -e $$JAVA_DST_DIR/$(subst /,_,$@) ]; then \
mv $$JAVA_DST_DIR/$(subst /,_,$@) $$JAVA_DST_DIR/`basename $@`; \
else \
touch $$JAVA_DST_DIR/`basename $@`; \
fi \
fi$(END_ECHO)
%.c : %.psw
pswrap -h $*.h -o $@ $<

View file

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

View file

@ -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,10 +71,20 @@ 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 ($(findstring mingw64, $(GNUSTEP_TARGET_OS)), mingw64)
else ifeq ($(GNUSTEP_TARGET_OS), windows)
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
-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)
@ -156,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,
@ -192,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
#
####################################################
####################################################
#
@ -284,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),)
@ -323,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)
@ -354,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
@ -395,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 $@ $^ \
@ -548,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) \
@ -583,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
@ -591,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
#
@ -599,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
@ -661,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
@ -669,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
@ -695,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
@ -703,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
#
@ -728,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
@ -736,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
@ -774,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
@ -786,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
@ -806,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
@ -814,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__
@ -863,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 +=
@ -899,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 \
@ -936,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) $^ ;
@ -947,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 \
@ -965,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
@ -975,104 +925,6 @@ endif
#
####################################################
####################################################
#
# Mingw64
#
ifeq ($(findstring mingw64, $(GNUSTEP_TARGET_OS)), mingw64)
shared = yes
HAVE_SHARED_LIBS = yes
# There's some sort of gcc bug that -pthread doesn't work on windows
# so we need to reset the variables which use it.
INTERNAL_CFLAGS =
INTERNAL_OBJCFLAGS =
INTERNAL_LDFLAGS =
SHARED_CFLAGS =
# This command links the library, generates automatically the list of
# symbols to export, creates the DLL (eg, obj/gnustep-base-1_13.dll)
# and the import library (eg, obj/libgnustep-base.dll.a). We pass
# --export-all-symbols to make sure it is always used. Otherwise,
# 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)
SHARED_LIB_LINK_CMD = \
$(LD) $(SHARED_LD_PREFLAGS) -shared \
-Wl,--enable-auto-image-base \
-Wl,--export-all-symbols \
-Wl,--out-implib,$(LIB_LINK_OBJ_DIR)/$(LIB_LINK_VERSION_FILE) \
$(ALL_LDFLAGS) -o $(LIB_LINK_OBJ_DIR)/$(LIB_LINK_DLL_FILE) $^ \
$(INTERNAL_LIBRARIES_DEPEND_UPON) \
$(SHARED_LD_POSTFLAGS)
else
SHARED_LIB_LINK_CMD = \
$(LD) $(SHARED_LD_PREFLAGS) -shared \
-Wl,--enable-auto-image-base \
-Wl,--export-all-symbols \
-Wl,--out-implib,$(LIB_LINK_OBJ_DIR)/$(LIB_LINK_VERSION_FILE) \
-o $(LIB_LINK_OBJ_DIR)/$(LIB_LINK_DLL_FILE) \
-Wl,--whole-archive $^ $(ALL_LDFLAGS) -Wl,--no-whole-archive \
$(INTERNAL_LIBRARIES_DEPEND_UPON) \
$(SHARED_LD_POSTFLAGS)
endif
AFTER_INSTALL_SHARED_LIB_CMD =
AFTER_INSTALL_SHARED_LIB_CHOWN =
BUILD_DLL = yes
LIBEXT = .a
# Technically, in this Unix-inspired building system, a DLL is
# composed of a .dll file which goes in the executable path and is the
# one which is loaded at runtime, and a .dll.a file which goes in the
# library path and which is linked into the application in order to
# enable it use the .dll. Anything in gnustep-make which is looking
# for shared libs should detect / look for the .dll.a as that's what
# we link applications against.
SHARED_LIBEXT = .dll.a
DLL_LIBEXT = .dll
#SHARED_CFLAGS +=
ifneq ($(CC),clang)
OBJ_MERGE_CMD = \
$(LD) -nostdlib $(OBJ_MERGE_CMD_FLAG) $(ALL_LDFLAGS) -o $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
else
OBJ_MERGE_CMD = \
ar cr $(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT) $^ ;
endif
HAVE_BUNDLES = yes
BUNDLE_LD = $(LD)
ifeq ($(CC),clang)
BUNDLE_LDFLAGS += -shared -Wl,--export-all-symbols \
-Wl,--enable-auto-import \
-Wl,--enable-auto-image-base \
-Wl,--whole-archive
BUNDLE_LIBFLAGS += -Wl,--no-whole-archive
BUNDLE_LINK_CMD = \
$(BUNDLE_LD) $(BUNDLE_LDFLAGS) $(ALL_LDFLAGS) \
-o $(LDOUT)$(BUNDLE_FILE) \
$(OBJ_FILES_TO_LINK) \
$(BUNDLE_LIBFLAGS) $(ALL_LIB_DIRS) $(BUNDLE_LIBS)
else
BUNDLE_LDFLAGS += -shared -Wl,--enable-auto-image-base
endif
ADDITIONAL_LDFLAGS += -Wl,--enable-auto-import
ADDITIONAL_FLAGS += -fno-omit-frame-pointer
# On Mingw64, it looks like the class name symbols start with '__' rather
# than '___' like Mingw32
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;}'
endif
# end Mingw64
#
####################################################
####################################################
#
# Cygwin
@ -1114,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)
@ -1134,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
#
####################################################
####################################################
#
@ -1175,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
@ -1211,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
@ -1235,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
@ -1296,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
@ -1304,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
#
@ -1346,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
@ -1354,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
#