2008-12-18 13:17:21 +00:00
|
|
|
Date: 18-Dec-2008
|
|
|
|
Author: Nicola Pero <nicola.pero@meta-innovation.com>
|
|
|
|
|
|
|
|
|
|
|
|
PURPOSE
|
|
|
|
-------
|
|
|
|
|
|
|
|
This document is intended to provide background information useful to
|
|
|
|
successfully package GNUstep. It particularly applies to GNU/Linux
|
|
|
|
packages such as RPMs and DEBs, but the general concepts would apply
|
|
|
|
to most type of packaging. If you're packaging for other systems,
|
|
|
|
such as Microsoft Windows, you should read carefully the instructions
|
|
|
|
for that system as well as there will be significant differences.
|
|
|
|
|
|
|
|
|
2009-02-25 09:08:08 +00:00
|
|
|
GETTING HELP
|
|
|
|
------------
|
|
|
|
|
2009-02-25 09:13:05 +00:00
|
|
|
If you need help with packaging GNUstep or a GNUstep package, please
|
|
|
|
contact the help GNUstep mailing lists <help-gnustep@gnu.org>, or the
|
|
|
|
more general GNUstep mailing list <discuss-gnustep@gnu.org>.
|
2009-02-25 09:08:08 +00:00
|
|
|
|
2008-12-18 13:17:21 +00:00
|
|
|
|
|
|
|
DESTDIR
|
|
|
|
-------
|
|
|
|
|
|
|
|
gnustep-make and all the GNUstep software supports the standard
|
|
|
|
variable DESTDIR to relocate the installation into a packaging
|
|
|
|
directory. You need to pass it when running a 'make install', as in
|
|
|
|
|
|
|
|
make install DESTDIR=/tmp/package/
|
|
|
|
|
|
|
|
this example will cause all the software to be installed in
|
|
|
|
subdirectories of /tmp/package; for example, a config file that would
|
|
|
|
normally be installed into /etc/GNUstep/GNUstep.conf will be installed
|
|
|
|
into /tmp/package/etc/GNUstep/GNUstep.conf.
|
|
|
|
|
|
|
|
To create a package, you then only need to package all the files
|
|
|
|
that were installed into that directory.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GNUSTEP-MAKE
|
|
|
|
------------
|
|
|
|
|
2014-01-08 07:56:40 +00:00
|
|
|
When packaging GNUstep, you should start by packaging gnustep-make
|
|
|
|
(you should at least have read the INSTALL document to give you an
|
|
|
|
overview of how gnustep-make is installed).
|
2008-12-18 13:17:21 +00:00
|
|
|
|
|
|
|
GNUstep-make includes both the basic filesystem layout configuration
|
|
|
|
files and scripts that are used by all the other GNUstep software, and
|
|
|
|
makefiles and scripts that are used to build GNUstep software. It
|
|
|
|
would make sense to have them as separate packages (eg, a
|
|
|
|
"gnustep-filesystem" for all users and a "gnustep-make" package for
|
|
|
|
developers), but at this stage for simplicity we recommend just having
|
|
|
|
a single package that includes both.
|
|
|
|
|
|
|
|
All your GNUstep packages should depend on gnustep-make (which
|
|
|
|
includes the filesystem layout infrastructure) and gnustep-base (which
|
|
|
|
includes the basic Objective-C foundation library that everything else
|
|
|
|
uses).
|
|
|
|
|
|
|
|
GNUstep-make has a number of configure options. Most of them affect
|
|
|
|
all other GNUstep software. The defaults should be fine in most
|
|
|
|
situations, except for the filesystem layout which you really need to
|
|
|
|
review. If you are confused by an option and it's not mentioned in
|
|
|
|
this document, we recommend using whatever default is automatically
|
|
|
|
selected by gnustep-make.
|
|
|
|
|
|
|
|
The minimal set of configure options that you need is probably just
|
|
|
|
|
|
|
|
./configure --with-layout={FILE}
|
|
|
|
|
|
|
|
Read the section 1. FILESYSTEM LAYOUT for a bit of help on choosing
|
|
|
|
your filesystem layout.
|
|
|
|
|
|
|
|
If you have a bit more time, it's probably worth checking the other
|
|
|
|
available options as well and thinking if you need or want to change
|
|
|
|
any of them to better suit your environment. You probably don't, but
|
|
|
|
we document here the major options that you may want to change.
|
|
|
|
|
|
|
|
|
|
|
|
1. FILESYSTEM LAYOUT
|
|
|
|
====================
|
|
|
|
|
|
|
|
The first and most important configuration option is the filesystem
|
|
|
|
layout one:
|
|
|
|
|
|
|
|
./configure --with-layout={FILE}
|
|
|
|
|
|
|
|
Where {FILE} is the name of a file from the FilesystemLayouts
|
|
|
|
directory (eg, ./configure --with-layout=gnustep).
|
|
|
|
|
|
|
|
This option controls where GNUstep applications, tools, libraries, and
|
|
|
|
everything else GNUstep is installed.
|
|
|
|
|
|
|
|
There are two major options here:
|
|
|
|
|
2008-12-18 15:31:44 +00:00
|
|
|
1. ./configure --with-layout=gnustep
|
|
|
|
|
|
|
|
The "standard" GNUstep layout, where all the GNUstep software is
|
|
|
|
installed into a separate directory tree located by default in
|
|
|
|
/usr/GNUstep. You can change the default location by using
|
|
|
|
--prefix=xxx, as in
|
|
|
|
|
|
|
|
./configure --with-layout=gnustep --prefix=/opt/GNUstep
|
|
|
|
|
|
|
|
to install everything into /opt/GNUstep instead of /usr/GNUstep. This
|
|
|
|
directory tree is organized with directories such as Applications,
|
|
|
|
Library, Tools and it looks very much like a NeXTSTEP or an Apple Mac
|
|
|
|
OS X filesystem. The main disadvantage of this layout is that it
|
|
|
|
doesn't blend so well with the native Unix filesystem so it requires
|
|
|
|
additional handling of executable and library paths to get the system
|
|
|
|
to find the executables and the libraries.
|
|
|
|
|
|
|
|
2. ./configure --with-layout=fhs-system
|
|
|
|
|
|
|
|
The "FHS" layout, where the GNUstep software is installed into the
|
2008-12-18 13:17:21 +00:00
|
|
|
standard Unix directories such as /usr/bin and /usr/lib. This blends
|
|
|
|
very well with the native Unix filesystem, but you lose the special
|
|
|
|
allure of the GNUstep layout.
|
|
|
|
|
|
|
|
We don't have a particular recommendation on what filesystem to use;
|
|
|
|
you should pick the one that best suits your system's philosophy. If
|
|
|
|
it's a GNUstep-based system, you are likely to want to use the GNUstep
|
|
|
|
layout; if it's a more general Unix system, you may want to use the
|
|
|
|
FHS layout and have the GNUstep packages install into the standard
|
|
|
|
Unix directories just like every other package, since this might feel
|
|
|
|
more natural to your users.
|
|
|
|
|
|
|
|
If you're packaging things for Apple, it's also possible to use the
|
|
|
|
Apple filesystem layout, but extra care is required in that situation
|
|
|
|
to avoid conflicting with the Apple software itself. This works best
|
|
|
|
if packaging a single piece of software (eg, Renaissance).
|
|
|
|
|
|
|
|
In some special cases you may be unhappy with the existing filesystem
|
|
|
|
layouts and may want to create your own. This is possible and easy by
|
|
|
|
creating a new FilesystemLayouts file; for more information, please
|
|
|
|
refer to the gnustep-make documentation.
|
|
|
|
|
|
|
|
Once you pick a filesystem layout and configure gnustep-make using it,
|
|
|
|
all of the GNUstep software will automatically use it.
|
|
|
|
|
|
|
|
|
|
|
|
2. FLATTENED AND MULTI-PLATFORM
|
|
|
|
===============================
|
|
|
|
|
|
|
|
Here it is very likely that the defaults (flattened layout, and no
|
|
|
|
multi-platform support) are exactly what you want, since they remove a
|
|
|
|
lot of complication for end-users.
|
|
|
|
|
|
|
|
In case you wonder what these options do, here's a quick summary. If
|
|
|
|
you disable the flattened layout GNUstep uses a "fat" directory
|
|
|
|
structure that can accomodate binaries for multiple architectures in
|
|
|
|
the same filesystem; by turning on the "multi-platform" support you
|
|
|
|
can then make it to choose which one to use at runtime, allowing you
|
|
|
|
to mount a single fat directory structure from the network on machines
|
|
|
|
with different architectures. This works best with the GNUstep
|
|
|
|
filesystem layout.
|
|
|
|
|
|
|
|
|
|
|
|
3. LIBRARY-COMBOS
|
|
|
|
=================
|
|
|
|
|
|
|
|
The library-combo defines the main components of your Objective-C
|
2016-03-04 13:44:13 +00:00
|
|
|
environment.
|
2008-12-18 13:17:21 +00:00
|
|
|
|
2016-03-04 13:44:13 +00:00
|
|
|
The default is currently "gnu-gnu-gnu", which means that the system
|
|
|
|
is using the GNU Objective-C runtime library, the GNU foundation/base
|
|
|
|
library, and the GNU app/gui library.
|
2008-12-18 13:17:21 +00:00
|
|
|
|
2016-03-04 13:44:13 +00:00
|
|
|
You may well wish to use "ng-gnu-gnu", which means that the runtime
|
|
|
|
library is the GNUstep runtime for ObjectiveC-2, and also means that
|
|
|
|
the latest language features are expected with the compiler.
|
|
|
|
To use this you must ship the GNUstep runtime and clang-3.1 or later.
|
2008-12-18 13:17:21 +00:00
|
|
|
|
|
|
|
4. CONFIGURATION FILE
|
|
|
|
=====================
|
|
|
|
|
|
|
|
GNUstep has a system-wide configuration file that is used by both
|
|
|
|
gnustep-make and gnustep-base to learn about the current filesystem
|
|
|
|
layout in the system and locate the various resources. By default,
|
|
|
|
this configuration file is installed by gnustep-make into
|
|
|
|
|
|
|
|
/etc/GNUstep/GNUstep.conf
|
|
|
|
|
|
|
|
This location can be changed as in
|
|
|
|
|
|
|
|
./configure --with-config-file=/etc/GNUstep.conf
|
|
|
|
|
|
|
|
Please note that this configuration file is generally not meant to be
|
|
|
|
edited after it's been installed by gnustep-make. The configuration
|
|
|
|
file merely records the filesystem layout that was chosen at configure
|
|
|
|
time and is used by all the software.
|
|
|
|
|
|
|
|
Finally, changing the location of the configuration file can introduce
|
|
|
|
an additional complication since you later need to make sure the new
|
|
|
|
config file is found in its new location. This should be easy and is
|
|
|
|
explained below, but it might depend on your setup. If you don't have
|
|
|
|
a serious reason to change its location, we recommend just leaving the
|
|
|
|
configuration file in the default /etc/GNUstep/GNUstep.conf location
|
|
|
|
which is guaranteed to work with no additional setup work.
|
|
|
|
|
|
|
|
|
|
|
|
5. USER DEFAULTS DIRECTORY
|
|
|
|
==========================
|
|
|
|
|
|
|
|
User defaults are used by GNUstep applications and tools to store your
|
|
|
|
user preferences and other user-specific information. These user
|
|
|
|
defaults are stored in a directory inside the user's home directory,
|
|
|
|
which by default is
|
|
|
|
|
|
|
|
~/GNUstep/Defaults/
|
|
|
|
|
|
|
|
You can change this to something else, for example
|
|
|
|
|
|
|
|
./configure --with-user-defaults-dir=.GNUstep/Defaults
|
|
|
|
|
|
|
|
would store the defaults into the directory ~/.GNUstep/Defaults.
|
|
|
|
|
|
|
|
If you change this, it might be worth testing it later; after you install
|
|
|
|
GNUstep-base, you can test where the user defaults get written by using
|
|
|
|
the command-line tool 'defaults' which allows you to read or write
|
|
|
|
user defaults.
|
|
|
|
|
|
|
|
|
2009-10-08 16:03:57 +00:00
|
|
|
6. GLOBAL DEFAULTS DATABASE
|
|
|
|
===========================
|
|
|
|
|
2014-01-08 07:56:40 +00:00
|
|
|
You may define global (ie for all applications and all users) default
|
2009-10-08 16:03:57 +00:00
|
|
|
values by placing them in the GlobalDefaults.plist file in the same
|
|
|
|
directory as the GNUstep.conf configuration file.
|
|
|
|
|
|
|
|
This file should contain data as keys and values in a dictionary using
|
|
|
|
the text property list format (the gnustep-base command 'defaults plist'
|
|
|
|
will give you a summary of the syntax of a text property list).
|
|
|
|
|
|
|
|
It is recommended that, if there are multiple packages wiching to set
|
|
|
|
global defaults, the values for each package are stored in a separate
|
|
|
|
file and the 'plmerge' command (also available with gnustep-base) is
|
|
|
|
used to merge those separate files into Globaldefaults.plist when any
|
|
|
|
package is installed or removed.
|
|
|
|
|
|
|
|
|
|
|
|
7. SUMMARY OF CONFIGURE OPTIONS
|
2008-12-18 13:17:21 +00:00
|
|
|
===============================
|
|
|
|
|
|
|
|
If you've followed us up to here, probably your gnustep-make's configure
|
|
|
|
command now looks something like
|
|
|
|
|
|
|
|
./configure --with-layout={FILE}
|
|
|
|
|
|
|
|
Or, if you really wanted to change a lot of things, it might look like
|
|
|
|
|
2016-03-04 13:44:13 +00:00
|
|
|
./configure --with-layout={FILE} --with-library-combo=ng-gnu-gnu --with-config-file={LOCATION} --with-user-defaults-dir={DEFAULTS_DIR}
|
2008-12-18 13:17:21 +00:00
|
|
|
|
|
|
|
|
2009-10-08 16:03:57 +00:00
|
|
|
8. USER ENVIRONMENT
|
2008-12-18 13:17:21 +00:00
|
|
|
===================
|
|
|
|
|
|
|
|
GNUstep will install applications, tools and libraries into the
|
|
|
|
filesystem of your choice. If this filesystem is different from the
|
|
|
|
native system filesystem, it's likely that:
|
|
|
|
|
|
|
|
* executables won't be found because they are not in the user's PATH
|
|
|
|
|
|
|
|
* libraries won't be found because they are not in the user's LD_LIBRARY_PATH
|
|
|
|
(or in /etc/ld.so.conf or similar variables/configuration depending on the
|
|
|
|
type of system)
|
|
|
|
|
|
|
|
In that case you need to make sure that when the gnustep-make package
|
|
|
|
is installed, these paths will be added as appropriate.
|
|
|
|
|
|
|
|
One option is to use the GNUstep.sh script that comes with
|
|
|
|
GNUstep-make. You should execute it every time a user logs in, for
|
|
|
|
example by adding
|
|
|
|
|
|
|
|
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh
|
|
|
|
|
|
|
|
to your /etc/profile (or appropriate corresponding setup for your system).
|
|
|
|
|
|
|
|
The other option is to add manually the paths; check the documentation
|
|
|
|
for your filesystem layout for the paths that you need to add (see
|
|
|
|
FilesystemLayouts/ for the documentation of the various layouts).
|
|
|
|
|
|
|
|
|
2009-10-08 16:03:57 +00:00
|
|
|
9. DEVELOPER ENVIRONMENT
|
2008-12-18 13:17:21 +00:00
|
|
|
========================
|
|
|
|
|
|
|
|
To compile software that uses gnustep-make, you also need to set the
|
|
|
|
GNUSTEP_MAKEFILES shell variable:
|
|
|
|
|
|
|
|
GNUSTEP_MAKEFILES=/usr/GNUstep/System/Library/Makefiles
|
|
|
|
export GNUSTEP_MAKEFILES
|
|
|
|
|
|
|
|
(the actual location depends on your filesystem layout; please check
|
|
|
|
the output of gnustep-make's ./configure to see the location on your
|
|
|
|
chosen layout). If you're using GNUstep.sh, this variable is
|
|
|
|
automatically set by it; otherwise you need to make sure that after
|
|
|
|
installing your gnustep-make package, this variable is set in the
|
|
|
|
environment whenever a user logs in.
|
|
|
|
|
|
|
|
This is important because then users can download any GNUstep software
|
|
|
|
and compile it by just typing 'make'. And, of course, you can compile
|
|
|
|
the software yourself and create GNUstep packages. :-)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GNUSTEP_INSTALLATION_DOMAIN
|
|
|
|
---------------------------
|
|
|
|
|
|
|
|
Once you have packaged gnustep-make, you are ready to start packaging
|
2014-01-08 07:56:40 +00:00
|
|
|
all other GNUstep software, starting with gnustep-base (or perhaps with
|
|
|
|
the gnustep-make documentation).
|
|
|
|
|
|
|
|
To build/package GNUstep software, you should normally install the
|
|
|
|
gnustep-make package you just built, but you may use another gnustep-make
|
|
|
|
installation as long as you ensure that the GNUstep.conf file used by
|
|
|
|
that installation contains paths matching those in your new
|
|
|
|
gnustep-make package.
|
2008-12-18 13:17:21 +00:00
|
|
|
|
|
|
|
By default, all GNUstep software will install into the "LOCAL" domain
|
|
|
|
if you compile it from source. Depending on your filesystem layout,
|
|
|
|
this is mapped to different directories on disk; with a GNUstep
|
|
|
|
filesystem layout it would typically be mapped to /usr/GNUstep/Local
|
|
|
|
and subdirectories, and with a FHS (Unix) filesystem layout it would
|
|
|
|
typically be mapped to /usr/local and subdirectories.
|
|
|
|
|
|
|
|
This is inappropriate for packages though; you want all of your
|
|
|
|
packages to install into the "SYSTEM" domain. Again, depending on
|
|
|
|
your filesystem layout, the "SYSTEM" domain is mapped to different
|
|
|
|
directories on disk; with a GNUstep filesystem layout it would
|
|
|
|
typically be mapped to /usr/GNUstep/System and subdirectories, and
|
|
|
|
with a FHS (Unix) filesystem layout it would typically be mapped to
|
|
|
|
/usr, /var and subdirectories.
|
|
|
|
|
|
|
|
To install software into the SYSTEM domain, you should use the
|
|
|
|
variable GNUSTEP_INSTALLATION_DOMAIN, as in
|
|
|
|
|
|
|
|
make install GNUSTEP_INSTALLATION_DOMAIN=SYSTEM
|
|
|
|
|
|
|
|
You can also set the variable in the shell (recommended), as in
|
|
|
|
|
|
|
|
GNUSTEP_INSTALLATION_DOMAIN=SYSTEM
|
|
|
|
export GNUSTEP_INSTALLATION_DOMAIN
|
|
|
|
|
|
|
|
make
|
|
|
|
make install
|
|
|
|
|
|
|
|
If you're packaging, you're likely to be also using the DESTDIR
|
|
|
|
variable, so your package build command sequence would probably look
|
|
|
|
like
|
|
|
|
|
|
|
|
DESTDIR=/tmp/my-package
|
|
|
|
export DESTDIR
|
|
|
|
|
|
|
|
GNUSTEP_INSTALLATION_DOMAIN=SYSTEM
|
|
|
|
export GNUSTEP_INSTALLATION_DOMAIN
|
|
|
|
|
|
|
|
make
|
|
|
|
make install
|
|
|
|
|
|
|
|
and then you have all the compiled software files inside
|
|
|
|
/tmp/my-package ready to be packaged.
|
|
|
|
|
|
|
|
Obviously some packages (but not all of them) require an initial
|
|
|
|
'configure' before the 'make' step, or require other minor changes
|
|
|
|
around this basic set of commands.
|
|
|
|
|
|
|
|
|
|
|
|
|
2014-01-07 07:50:33 +00:00
|
|
|
DOCUMENTATION
|
|
|
|
-------------
|
|
|
|
|
2014-01-10 10:25:47 +00:00
|
|
|
Once you have packaged gnustep-make and installed the package,
|
|
|
|
you can package the gnustep-make documentation.
|
2014-01-07 07:50:33 +00:00
|
|
|
|
|
|
|
cd Documentation
|
|
|
|
DESTDIR=/tmp/my-package
|
|
|
|
export DESTDIR
|
|
|
|
|
|
|
|
GNUSTEP_INSTALLATION_DOMAIN=SYSTEM
|
|
|
|
export GNUSTEP_INSTALLATION_DOMAIN
|
|
|
|
|
|
|
|
make
|
|
|
|
make install
|
|
|
|
|
|
|
|
A similar process may be used to package documentation for each of the
|
|
|
|
gnustep core libraries.
|
|
|
|
|
2014-01-10 10:25:47 +00:00
|
|
|
As a special case in gnustepmake, you can use special commands to build
|
|
|
|
and install the documentation.
|
|
|
|
|
|
|
|
To build and install the gnustep-make documentation from the top level:
|
|
|
|
make install-docs
|
|
|
|
|
|
|
|
To build and install the gnustep-make documnentation with gnustep-make:
|
|
|
|
make install-all
|
2014-01-07 07:50:33 +00:00
|
|
|
|
|
|
|
|
2008-12-18 13:17:21 +00:00
|
|
|
GNUSTEP-BASE
|
|
|
|
------------
|
|
|
|
|
2014-01-08 07:56:40 +00:00
|
|
|
Your next step is to package gnustep-base.
|
2008-12-18 13:17:21 +00:00
|
|
|
|
|
|
|
gnustep-base has a number of configure options that you may want to
|
|
|
|
check; most of them have to do with locating the various libraries on
|
2009-01-06 23:44:16 +00:00
|
|
|
your platform.
|
|
|
|
|
|
|
|
One special thing about gnustep-base is that in some special cases
|
|
|
|
(most notably on MinGW) it needs to know the installation domain at
|
|
|
|
configure time. So make sure to set GNUSTEP_INSTALLATION_DOMAIN in
|
|
|
|
the environment *before* running configure.
|
|
|
|
|
|
|
|
The package build command sequence is the standard one and so would
|
|
|
|
look something like
|
2008-12-18 13:17:21 +00:00
|
|
|
|
|
|
|
DESTDIR=/tmp/my-package
|
|
|
|
export DESTDIR
|
|
|
|
|
|
|
|
GNUSTEP_INSTALLATION_DOMAIN=SYSTEM
|
|
|
|
export GNUSTEP_INSTALLATION_DOMAIN
|
|
|
|
|
|
|
|
./configure {maybe some options here}
|
|
|
|
make
|
|
|
|
make install
|
|
|
|
|
|
|
|
|
|
|
|
The only configure options that are really specific to GNUstep are the
|
|
|
|
ones controlling the location of the configuration file.
|
|
|
|
|
|
|
|
If you changed the location of the configuration file when you
|
|
|
|
configured gnustep-make by using the option --with-config-file as in
|
|
|
|
|
|
|
|
./configure --with-config-file=/etc/GNUstep.conf
|
|
|
|
|
|
|
|
then you need to make sure that gnustep-base's configure has found the
|
|
|
|
configuration file in its new location. Check the output of
|
|
|
|
gnustep-base's configure; it should mention your special configuration
|
|
|
|
file location.
|
|
|
|
|
|
|
|
If it doesn't, you may need to configure gnustep-base using the
|
|
|
|
--with-config-file option, as in
|
|
|
|
|
|
|
|
./configure --with-config-file=/etc/GNUstep.conf
|
|
|
|
|
|
|
|
to make sure the correct file is used.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
OTHER GNUSTEP PACKAGES
|
|
|
|
----------------------
|
|
|
|
|
|
|
|
At this stage, all the GNUstep-specific issues should have been sorted
|
|
|
|
out and packaging GNUstep software should be quite easy. You just
|
|
|
|
need to use DESTDIR and GNUSTEP_INSTALLATION_DOMAIN=SYSTEM.
|
|
|
|
|