• Home
  • History
  • Annotate
Name Date Size #Lines LOC

..03-May-2022-

Documentation/H05-Apr-2020-10,2097,926

FilesystemLayouts/H05-Apr-2020-831737

Instance/H05-Apr-2020-6,3625,432

Master/H05-Apr-2020-3,2462,689

TestFramework/H05-Apr-2020-2,7522,029

config-install-p-test/H05-Apr-2020-10037

config-precomp-test/H05-Apr-2020-13368

m4/H05-Apr-2020-514498

.gitignoreH A D05-Apr-2020727 4342

ANNOUNCEH A D05-Apr-20201.8 KiB5738

COPYINGH A D05-Apr-202034.3 KiB676553

ChangeLogH A D05-Apr-2020271.8 KiB7,4815,558

ChangeLog.1H A D05-Apr-2020252.5 KiB7,0685,151

FAQH A D05-Apr-202022.5 KiB542408

GNUmakefile.inH A D05-Apr-202021.5 KiB586500

GNUmakefile.postambleH A D05-Apr-2020856 4633

GNUmakefile.preambleH A D05-Apr-20201.1 KiB5136

GNUstep-HOWTOH A D05-Apr-202037.2 KiB1,122813

GNUstep-reset.shH A D05-Apr-20205.8 KiB198129

GNUstep-strict-v2.conf.inH A D05-Apr-20206.5 KiB152124

GNUstep.conf.inH A D05-Apr-20206.5 KiB155127

GNUstep.csh.inH A D05-Apr-202014.8 KiB447380

GNUstep.sh.inH A D05-Apr-202023.4 KiB714613

INSTALLH A D05-Apr-202012.4 KiB325238

NEWSH A D05-Apr-202021.2 KiB607450

READMEH A D05-Apr-20202.4 KiB6747

README.PackagingH A D05-Apr-202016 KiB458315

RELEASENOTESH A D05-Apr-202033.3 KiB718588

VersionH A D05-Apr-2020387 107

aclocal.m4H A D05-Apr-202010.9 KiB297263

aggregate.makeH A D05-Apr-20201.7 KiB5543

app-wrapper.templateH A D05-Apr-202047 21

application.makeH A D05-Apr-20201 KiB3129

bake_debian_files.shH A D03-May-202212.1 KiB355280

bundle.makeH A D05-Apr-2020913 3127

clean_cpu.shH A D05-Apr-20201 KiB4418

clean_os.shH A D05-Apr-20201.4 KiB5930

clean_vendor.shH A D05-Apr-2020780 251

clibrary.makeH A D05-Apr-2020924 3127

common.makeH A D05-Apr-202033.2 KiB924794

config-noarch.make.inH A D05-Apr-20206.1 KiB165146

config.guessH A D05-Apr-202042.7 KiB1,4551,262

config.make.inH A D05-Apr-20206.9 KiB233199

config.siteH A D05-Apr-20203.4 KiB11196

config.subH A D05-Apr-202035.3 KiB1,8161,678

config_thread.mH A D05-Apr-2020820 4636

configureH A D05-Apr-2020300.4 KiB9,6467,504

configure.acH A D05-Apr-202066.5 KiB1,7891,613

cpu.shH A D05-Apr-2020794 241

ctool.makeH A D05-Apr-2020921 3127

debugappH A D05-Apr-2020985 332

documentation.makeH A D05-Apr-20201,023 3731

empty.makeH A D05-Apr-2020161 44

executable.template.inH A D05-Apr-20207 KiB235149

filesystem.csh.inH A D05-Apr-202014.5 KiB404380

filesystem.make.inH A D05-Apr-202014 KiB335299

filesystem.sh.inH A D05-Apr-202014.1 KiB382358

fixpath.sh.inH A D05-Apr-20202.1 KiB9349

framework.makeH A D05-Apr-2020928 3127

gnustep-config.inH A D05-Apr-20208.5 KiB234162

gnustep-make-helpH A D05-Apr-20203 KiB7969

gnustep-make-ld.so.conf.inH A D05-Apr-2020169 85

gnustep-make.spec.inH A D05-Apr-20202.7 KiB10279

gswapp.makeH A D05-Apr-2020922 3127

gswbundle.makeH A D05-Apr-2020923 3127

install-shH A D05-Apr-20202.1 KiB12071

installation-domains.confH A D05-Apr-20202.7 KiB7515

java-executable.templateH A D05-Apr-20201.5 KiB6213

java-tool.makeH A D05-Apr-2020926 3027

java.makeH A D05-Apr-2020910 3027

jni.makeH A D05-Apr-20201.8 KiB6755

library-combo.makeH A D05-Apr-20204.2 KiB158140

library.makeH A D05-Apr-2020919 3127

messages.makeH A D05-Apr-20208.7 KiB206165

mkinstalldirsH A D05-Apr-2020928 5130

names.makeH A D05-Apr-20202.4 KiB7156

native-library.makeH A D05-Apr-20201.6 KiB4738

nsi-app.templateH A D05-Apr-20203.9 KiB10991

nsi-lib.templateH A D05-Apr-20203.7 KiB10789

objc.makeH A D05-Apr-20201.4 KiB4135

openapp.inH A D05-Apr-202010.7 KiB341224

opentool.inH A D05-Apr-20205.7 KiB198109

os.shH A D05-Apr-2020792 241

palette.makeH A D05-Apr-2020918 3127

parallel-subdirectories.makeH A D05-Apr-20201.2 KiB3631

print_unique_pathlist.shH A D05-Apr-20203.4 KiB10652

relative_path.shH A D05-Apr-20206.8 KiB22683

resource-set.makeH A D05-Apr-2020932 3127

rules.makeH A D05-Apr-202030.4 KiB816699

serial-subdirectories.makeH A D05-Apr-20201.1 KiB3530

service.makeH A D05-Apr-2020912 3127

spec-rules.templateH A D05-Apr-2020610 4135

strip_makefiles.shH A D05-Apr-20201.6 KiB449

subproject.makeH A D05-Apr-2020990 3228

tar-exclude-listH A D05-Apr-202010 32

target.makeH A D03-May-202242.7 KiB1,2901,136

test-application.makeH A D05-Apr-2020955 3127

test-library.makeH A D05-Apr-2020947 3127

test-tool.makeH A D05-Apr-2020928 3127

tool.makeH A D05-Apr-2020916 3127

vendor.shH A D05-Apr-2020800 241

README

11 GNUstep makefile package
2**************************
3
4Here is some introductory info to get you started:
5
61.1 What is the GNUstep makefile package?
7=========================================
8
9The makefile package is a simple, powerful and extensible way to write
10makefiles for a GNUstep-based project.  It allows the user to write a
11project without having to deal with the complex issues associated with
12configuration, building, installation, and packaging.  It also allows
13the user to easily create cross-compiled binaries.
14
151.2 Information
16===============
17
18The file 'NEWS' has this packages feature history.
19
20   The files 'INSTALL' or 'GNUstep-HOWTO' give instructions for
21installing the packages.  Also see the 'machines' documentation and
22various machine specific READMEs in the Documentation directory.
23
24   Files in the 'Documentation' directory have information on the design
25of the Makefile system and how to write your own makefiles that work
26with it.
27
281.3 License
29===========
30
31The GNUstep libraries are covered under the GNU Lesser Public License.
32This means you can use these libraries in any program (even non-free
33programs).  If you distribute the libraries along with your program, you
34must make the improvements you have made to the libraries freely
35available.  You should read the COPYING.LIB file for more information.
36
37   GNUstep tools, test programs, and other files are covered under the
38GNU General Public License.  The GNU GPL is a free software license,
39which requires that all the released improved versions be free software
40as well.  You should read the COPYING file for more information.
41
42   The GNUstep make package is licensed under the GNU GPL.
43
441.4 History
45===========
46
47The GNUstep makefile package was designed by Scott Christley and Ovidiu
48Predescu.
49
50   Flags for building shared libraries and bundles on several systems
51were originally identified by Mircea Oancea <mircea@pathcom.com>.
52
53   Richard Frith-Macdonald <richard@brainstorm.co.uk> also contributed
54with ideas.
55
56   Nicola Pero <nicola@brainstorm.co.uk> rewrote much of the rule
57procedures to increase the speed of the package by over a factor of 7.
58He also rewrote much of the rest of the system to make it simpler and
59more effective.
60
611.5 How can you help?
62=====================
63
64   * Give us feedback!  Tell us what you like; tell us what you think
65     could be better.  Send bug reports to <bug-gnustep@gnu.org>.
66
67

README.Packaging

1Date:	18-Dec-2008
2Author: Nicola Pero <nicola.pero@meta-innovation.com>
3
4
5PURPOSE
6-------
7
8This document is intended to provide background information useful to
9successfully package GNUstep.  It particularly applies to GNU/Linux
10packages such as RPMs and DEBs, but the general concepts would apply
11to most type of packaging.  If you're packaging for other systems,
12such as Microsoft Windows, you should read carefully the instructions
13for that system as well as there will be significant differences.
14
15
16GETTING HELP
17------------
18
19If you need help with packaging GNUstep or a GNUstep package, please
20contact the help GNUstep mailing lists <help-gnustep@gnu.org>, or the
21more general GNUstep mailing list <discuss-gnustep@gnu.org>.
22
23
24DESTDIR
25-------
26
27gnustep-make and all the GNUstep software supports the standard
28variable DESTDIR to relocate the installation into a packaging
29directory.  You need to pass it when running a 'make install', as in
30
31 make install DESTDIR=/tmp/package/
32
33this example will cause all the software to be installed in
34subdirectories of /tmp/package; for example, a config file that would
35normally be installed into /etc/GNUstep/GNUstep.conf will be installed
36into /tmp/package/etc/GNUstep/GNUstep.conf.
37
38To create a package, you then only need to package all the files
39that were installed into that directory.
40
41
42
43GNUSTEP-MAKE
44------------
45
46When packaging GNUstep, you should start by packaging gnustep-make
47(you should at least have read the INSTALL document to give you an
48overview of how gnustep-make is installed).
49
50GNUstep-make includes both the basic filesystem layout configuration
51files and scripts that are used by all the other GNUstep software, and
52makefiles and scripts that are used to build GNUstep software.  It
53would make sense to have them as separate packages (eg, a
54"gnustep-filesystem" for all users and a "gnustep-make" package for
55developers), but at this stage for simplicity we recommend just having
56a single package that includes both.
57
58All your GNUstep packages should depend on gnustep-make (which
59includes the filesystem layout infrastructure) and gnustep-base (which
60includes the basic Objective-C foundation library that everything else
61uses).
62
63GNUstep-make has a number of configure options.  Most of them affect
64all other GNUstep software.  The defaults should be fine in most
65situations, except for the filesystem layout which you really need to
66review.  If you are confused by an option and it's not mentioned in
67this document, we recommend using whatever default is automatically
68selected by gnustep-make.
69
70The minimal set of configure options that you need is probably just
71
72 ./configure --with-layout={FILE}
73
74Read the section 1. FILESYSTEM LAYOUT for a bit of help on choosing
75your filesystem layout.
76
77If you have a bit more time, it's probably worth checking the other
78available options as well and thinking if you need or want to change
79any of them to better suit your environment.  You probably don't, but
80we document here the major options that you may want to change.
81
82
831. FILESYSTEM LAYOUT
84====================
85
86The first and most important configuration option is the filesystem
87layout one:
88
89 ./configure --with-layout={FILE}
90
91Where {FILE} is the name of a file from the FilesystemLayouts
92directory (eg, ./configure --with-layout=gnustep).
93
94This option controls where GNUstep applications, tools, libraries, and
95everything else GNUstep is installed.
96
97There are two major options here:
98
99 1. ./configure --with-layout=gnustep
100
101The "standard" GNUstep layout, where all the GNUstep software is
102installed into a separate directory tree located by default in
103/usr/GNUstep.  You can change the default location by using
104--prefix=xxx, as in
105
106 ./configure --with-layout=gnustep --prefix=/opt/GNUstep
107
108to install everything into /opt/GNUstep instead of /usr/GNUstep.  This
109directory tree is organized with directories such as Applications,
110Library, Tools and it looks very much like a NeXTSTEP or an Apple Mac
111OS X filesystem.  The main disadvantage of this layout is that it
112doesn't blend so well with the native Unix filesystem so it requires
113additional handling of executable and library paths to get the system
114to find the executables and the libraries.
115
116 2. ./configure --with-layout=fhs-system
117
118The "FHS" layout, where the GNUstep software is installed into the
119standard Unix directories such as /usr/bin and /usr/lib.  This blends
120very well with the native Unix filesystem, but you lose the special
121allure of the GNUstep layout.
122
123We don't have a particular recommendation on what filesystem to use;
124you should pick the one that best suits your system's philosophy.  If
125it's a GNUstep-based system, you are likely to want to use the GNUstep
126layout; if it's a more general Unix system, you may want to use the
127FHS layout and have the GNUstep packages install into the standard
128Unix directories just like every other package, since this might feel
129more natural to your users.
130
131If you're packaging things for Apple, it's also possible to use the
132Apple filesystem layout, but extra care is required in that situation
133to avoid conflicting with the Apple software itself.  This works best
134if packaging a single piece of software (eg, Renaissance).
135
136In some special cases you may be unhappy with the existing filesystem
137layouts and may want to create your own.  This is possible and easy by
138creating a new FilesystemLayouts file; for more information, please
139refer to the gnustep-make documentation.
140
141Once you pick a filesystem layout and configure gnustep-make using it,
142all of the GNUstep software will automatically use it.
143
144
1452. FLATTENED AND MULTI-PLATFORM
146===============================
147
148Here it is very likely that the defaults (flattened layout, and no
149multi-platform support) are exactly what you want, since they remove a
150lot of complication for end-users.
151
152In case you wonder what these options do, here's a quick summary.  If
153you disable the flattened layout GNUstep uses a "fat" directory
154structure that can accomodate binaries for multiple architectures in
155the same filesystem; by turning on the "multi-platform" support you
156can then make it to choose which one to use at runtime, allowing you
157to mount a single fat directory structure from the network on machines
158with different architectures.  This works best with the GNUstep
159filesystem layout.
160
161
1623. LIBRARY-COMBOS
163=================
164
165The library-combo defines the main components of your Objective-C
166environment.
167
168The default is currently "gnu-gnu-gnu", which means that the system
169is using the GNU Objective-C runtime library, the GNU foundation/base
170library, and the GNU app/gui library.
171
172You may well wish to use "ng-gnu-gnu", which means that the runtime
173library is the GNUstep runtime for ObjectiveC-2, and also means that
174the latest language features are expected with the compiler.
175To use this you must ship the GNUstep runtime and clang-3.1 or later.
176
1774. CONFIGURATION FILE
178=====================
179
180GNUstep has a system-wide configuration file that is used by both
181gnustep-make and gnustep-base to learn about the current filesystem
182layout in the system and locate the various resources.  By default,
183this configuration file is installed by gnustep-make into
184
185 /etc/GNUstep/GNUstep.conf
186
187This location can be changed as in
188
189 ./configure --with-config-file=/etc/GNUstep.conf
190
191Please note that this configuration file is generally not meant to be
192edited after it's been installed by gnustep-make.  The configuration
193file merely records the filesystem layout that was chosen at configure
194time and is used by all the software.
195
196Finally, changing the location of the configuration file can introduce
197an additional complication since you later need to make sure the new
198config file is found in its new location.  This should be easy and is
199explained below, but it might depend on your setup.  If you don't have
200a serious reason to change its location, we recommend just leaving the
201configuration file in the default /etc/GNUstep/GNUstep.conf location
202which is guaranteed to work with no additional setup work.
203
204
2055. USER DEFAULTS DIRECTORY
206==========================
207
208User defaults are used by GNUstep applications and tools to store your
209user preferences and other user-specific information.  These user
210defaults are stored in a directory inside the user's home directory,
211which by default is
212
213 ~/GNUstep/Defaults/
214
215You can change this to something else, for example
216
217 ./configure --with-user-defaults-dir=.GNUstep/Defaults
218
219would store the defaults into the directory ~/.GNUstep/Defaults.
220
221If you change this, it might be worth testing it later; after you install
222GNUstep-base, you can test where the user defaults get written by using
223the command-line tool 'defaults' which allows you to read or write
224user defaults.
225
226
2276. GLOBAL DEFAULTS DATABASE
228===========================
229
230You may define global (ie for all applications and all users) default
231values by placing them in the GlobalDefaults.plist file in the same
232directory as the GNUstep.conf configuration file.
233
234This file should contain data as keys and values in a dictionary using
235the text property list format (the gnustep-base command 'defaults plist'
236will give you a summary of the syntax of a text property list).
237
238It is recommended that, if there are multiple packages wiching to set
239global defaults, the values for each package are stored in a separate
240file and the 'plmerge' command (also available with gnustep-base) is
241used to merge those separate files into Globaldefaults.plist when any
242package is installed or removed.
243
244
2457. SUMMARY OF CONFIGURE OPTIONS
246===============================
247
248If you've followed us up to here, probably your gnustep-make's configure
249command now looks something like
250
251 ./configure --with-layout={FILE}
252
253Or, if you really wanted to change a lot of things, it might look like
254
255 ./configure --with-layout={FILE} --with-library-combo=ng-gnu-gnu --with-config-file={LOCATION} --with-user-defaults-dir={DEFAULTS_DIR}
256
257
2588. USER ENVIRONMENT
259===================
260
261GNUstep will install applications, tools and libraries into the
262filesystem of your choice.  If this filesystem is different from the
263native system filesystem, it's likely that:
264
265 * executables won't be found because they are not in the user's PATH
266
267 * libraries won't be found because they are not in the user's LD_LIBRARY_PATH
268(or in /etc/ld.so.conf or similar variables/configuration depending on the
269type of system)
270
271In that case you need to make sure that when the gnustep-make package
272is installed, these paths will be added as appropriate.
273
274One option is to use the GNUstep.sh script that comes with
275GNUstep-make.  You should execute it every time a user logs in, for
276example by adding
277
278 . /usr/GNUstep/System/Library/Makefiles/GNUstep.sh
279
280to your /etc/profile (or appropriate corresponding setup for your system).
281
282The other option is to add manually the paths; check the documentation
283for your filesystem layout for the paths that you need to add (see
284FilesystemLayouts/ for the documentation of the various layouts).
285
286
2879. DEVELOPER ENVIRONMENT
288========================
289
290To compile software that uses gnustep-make, you also need to set the
291GNUSTEP_MAKEFILES shell variable:
292
293 GNUSTEP_MAKEFILES=/usr/GNUstep/System/Library/Makefiles
294 export GNUSTEP_MAKEFILES
295
296(the actual location depends on your filesystem layout; please check
297the output of gnustep-make's ./configure to see the location on your
298chosen layout).  If you're using GNUstep.sh, this variable is
299automatically set by it; otherwise you need to make sure that after
300installing your gnustep-make package, this variable is set in the
301environment whenever a user logs in.
302
303This is important because then users can download any GNUstep software
304and compile it by just typing 'make'.  And, of course, you can compile
305the software yourself and create GNUstep packages. :-)
306
307
308
309GNUSTEP_INSTALLATION_DOMAIN
310---------------------------
311
312Once you have packaged gnustep-make, you are ready to start packaging
313all other GNUstep software, starting with gnustep-base (or perhaps with
314the gnustep-make documentation).
315
316To build/package GNUstep software, you should normally install the
317gnustep-make package you just built, but you may use another gnustep-make
318installation as long as you ensure that the GNUstep.conf file used by
319that installation contains paths matching those in your new
320gnustep-make package.
321
322By default, all GNUstep software will install into the "LOCAL" domain
323if you compile it from source.  Depending on your filesystem layout,
324this is mapped to different directories on disk; with a GNUstep
325filesystem layout it would typically be mapped to /usr/GNUstep/Local
326and subdirectories, and with a FHS (Unix) filesystem layout it would
327typically be mapped to /usr/local and subdirectories.
328
329This is inappropriate for packages though; you want all of your
330packages to install into the "SYSTEM" domain.  Again, depending on
331your filesystem layout, the "SYSTEM" domain is mapped to different
332directories on disk; with a GNUstep filesystem layout it would
333typically be mapped to /usr/GNUstep/System and subdirectories, and
334with a FHS (Unix) filesystem layout it would typically be mapped to
335/usr, /var and subdirectories.
336
337To install software into the SYSTEM domain, you should use the
338variable GNUSTEP_INSTALLATION_DOMAIN, as in
339
340 make install GNUSTEP_INSTALLATION_DOMAIN=SYSTEM
341
342You can also set the variable in the shell (recommended), as in
343
344 GNUSTEP_INSTALLATION_DOMAIN=SYSTEM
345 export GNUSTEP_INSTALLATION_DOMAIN
346
347 make
348 make install
349
350If you're packaging, you're likely to be also using the DESTDIR
351variable, so your package build command sequence would probably look
352like
353
354 DESTDIR=/tmp/my-package
355 export DESTDIR
356
357 GNUSTEP_INSTALLATION_DOMAIN=SYSTEM
358 export GNUSTEP_INSTALLATION_DOMAIN
359
360 make
361 make install
362
363and then you have all the compiled software files inside
364/tmp/my-package ready to be packaged.
365
366Obviously some packages (but not all of them) require an initial
367'configure' before the 'make' step, or require other minor changes
368around this basic set of commands.
369
370
371
372DOCUMENTATION
373-------------
374
375Once you have packaged gnustep-make and installed the package,
376you can package the gnustep-make documentation.
377
378 cd Documentation
379 DESTDIR=/tmp/my-package
380 export DESTDIR
381
382 GNUSTEP_INSTALLATION_DOMAIN=SYSTEM
383 export GNUSTEP_INSTALLATION_DOMAIN
384
385 make
386 make install
387
388A similar process may be used to package documentation for each of the
389gnustep core libraries.
390
391As a special case in gnustepmake, you can use special commands to build
392and install the documentation.
393
394To build and install the gnustep-make documentation from the top level:
395  make install-docs
396
397To build and install the gnustep-make documnentation with gnustep-make:
398  make install-all
399
400
401GNUSTEP-BASE
402------------
403
404Your next step is to package gnustep-base.
405
406gnustep-base has a number of configure options that you may want to
407check; most of them have to do with locating the various libraries on
408your platform.
409
410One special thing about gnustep-base is that in some special cases
411(most notably on MinGW) it needs to know the installation domain at
412configure time.  So make sure to set GNUSTEP_INSTALLATION_DOMAIN in
413the environment *before* running configure.
414
415The package build command sequence is the standard one and so would
416look something like
417
418 DESTDIR=/tmp/my-package
419 export DESTDIR
420
421 GNUSTEP_INSTALLATION_DOMAIN=SYSTEM
422 export GNUSTEP_INSTALLATION_DOMAIN
423
424 ./configure {maybe some options here}
425 make
426 make install
427
428
429The only configure options that are really specific to GNUstep are the
430ones controlling the location of the configuration file.
431
432If you changed the location of the configuration file when you
433configured gnustep-make by using the option --with-config-file as in
434
435 ./configure --with-config-file=/etc/GNUstep.conf
436
437then you need to make sure that gnustep-base's configure has found the
438configuration file in its new location.  Check the output of
439gnustep-base's configure; it should mention your special configuration
440file location.
441
442If it doesn't, you may need to configure gnustep-base using the
443--with-config-file option, as in
444
445 ./configure --with-config-file=/etc/GNUstep.conf
446
447to make sure the correct file is used.
448
449
450
451OTHER GNUSTEP PACKAGES
452----------------------
453
454At this stage, all the GNUstep-specific issues should have been sorted
455out and packaging GNUstep software should be quite easy.  You just
456need to use DESTDIR and GNUSTEP_INSTALLATION_DOMAIN=SYSTEM.
457
458