tools-make/Documentation/releasenotes.texi

385 lines
17 KiB
Text
Raw Normal View History

@chapter GNUstep Make Release Notes
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.2.1
@table @samp
@item the order in which tools are built is no longer guaranteed
If you use something like ``TOOL_NAME = ToolA ToolB'' to build
multiple tools in the same GNUmakefile, you need to be aware that the
way the tools are built changed in version 2.2.1. Before version
2.2.1, the tools were always built one after the other one, exactly in
the order specified. So, in the example ToolA would be built before
ToolB. Starting with 2.2.1, the tools might be built completely in
parallel if parallel building is enabled. So, the order in which they
are built is no longer defined and your GNUmakefile should not depend
on the order in which tools are specified in the GNUmakefile. Most
GNUmakefiles should be unaffected because rarely people rely on the
order in which tools are built. If your GNUmakefile does depend on
the order in which tools are built, you have a few options. The
preferred option is to identify the code or steps that need to be
executed before some of the tools are built and put them into a
before-all:: rule, which is guaranteed to be executed before anything
else. In this way your serialized code is executed first, and the
build can continue in a completely parallel fashion afterwards.
If you just want to force a specific tool (say, ToolA) to be
built before the others, you can always add a 'before-all:: ToolA'
rule which will make sure ToolA is built before the other ones.
If you want to complete disable parallel building, you can add
GNUSTEP_MAKE_PARALLEL_BUILDING=no just after including common.make, or
pass it on the command-line.
@item support for having source files in subdirectories
Starting with version 2.2.1, it is possible to put source files in
subdirectories by specifiying them as in xxx_OBJC_FILES =
Source/Beauty.m. This syntax does not work on versions before 2.2.1
so you should not use it if you want to support older versions of
gnustep-make; previously you had to create a subproject and add a
GNUmakefile in the subdirectory using subproject.make. You can now
spread your source files in multiple subdirectories without using
subprojects.
@item support for having header files in subdirectories
Starting with version 2.2.1, 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 2.2.1
so you should not use it if you want to support older versions of
gnustep-make. When headers are put in subdirectories specified in
this way, corresponding subdirectories are created when the header
files are installed. For example Beauty/Beauty.h would be
automatically installed into
GNUSTEP_HEADERS/HEADER_FILES_INSTALL_DIR/Beauty/Beauty.h. To get the
same result in versions before 2.2.1 you would have had to manually
create the header installation subdirectories.
@item support for HEADER_FILES_DIR in framework subproject
Before version 2.2.1, specifying xxx_HEADER_FILES_DIR in a framework
subproject would have no effect. Starting with version 2.2.1, the
variable is now recognized and can be used to have the files in a
subdirectory. You should avoid using the variable in framework
subprojects if you want to support older versions of gnustep-make.
@item info files renamed adding a gnustep- prefix
To prevent conflicts with other documentation, all the gnustep-make
info files have been renamed adding a gnustep- prefix. For example,
to access the GNUstep faq using info, you now need to type 'info
gnustep-faq' instead of 'info faq'. Please note that this info
documentation is in the core/make/Documentation subdirectory and at
the moment is not automatically installed unless you explicitly go in
that subdirectory and install it.
@item 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.2.1, 'make clean' removes the
directory too.
@item debug=no made the default
gnustep-make now builds using debug=no by default. As a consequence,
on most platforms C/Objective-C/C++ code is now built by default using
-g -O2 instead of just -g. If you do not want the -O2 flag, you can
simply build using 'make debug=yes'. You can also use the new
./configure --enable-debug-by-default option to make 'debug=yes' the
default flag that is always used when compiling if nothing else is
specified. If you do not want the debugging symbols, remember that
you can use the 'make strip=yes' option to have them stripped out from
all object files when they are installed.
@item 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.2.1,
gnustep-make will compile all Java files in a Java project with a
single Java compiler invocation. This can significantly speed up
compilation of large projects. To disable it and get the behaviour of
gnustep-make 2.2.0, please set the variable BATCH_COMPILE_JAVA_FILES
to 'no' (or the variable xxx_BATCH_COMPILE_JAVA_FILES to 'no' to
disable it for a single instance). Please note that if you are using
the xxx_FILE_FLAGS or xxx_FILE_FILTER_OUT_FLAGS functionality for Java
files, which allows you to customize the compilation flags for each
Java file, then batch compilation is automatically disabled and all
files are compiled separately.
@end table
@section Version 2.2.0
@table @samp
@item 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.
@item parallel building
Parallel building is supported now. You can build using the normal make
mechanism, e.g. 'make -j 2'.
@item 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 reinstalling headers that
have not been modified. You can use the gnustep-make configure option
--disable-install-p to disable this behaviour and go back to always
using a standard 'install'.
@item 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'.
@end table
@section Version 2.0.7
@table @samp
@item 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 installation-domains.conf
file to the same directory as the GNUstep.conf file, and edit it to
customize the default installation domain (Thanks to Richard for the
idea).
@item --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.
@item 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.
@item change in path checking algorithm in GNUstep.sh and GNUstep.csh
GNUstep.sh and GNUstep.csh perform more careful checks for duplicate
paths when adding paths to PATH and other path variables. Now they
check each path separately before adding it, which in some cases will
produce smaller and less intrusive additions to PATH; in particular,
on FHS filesystem layout, they will never add /usr/bin or other system
paths if they are already there. If you are in a situation where
there is an overlap between GNUstep paths and system paths and you are
using GNUstep.sh or GNUstep.csh, you may want to check the new values
of PATH, CLASSPATH, GUILE_LOAD_PATH, INFOPATH, LD_LIBRARY_PATH and
similar variables since they may be different from the old ones.
@item 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.
@end table
@section Version 2.0.6
@table @samp
@item GNUSTEP_ABSOLUTE_INSTALL_PATHS
Added the --enable-absolute-install-paths option to configure on
Darwin. Enabling this option modifies the process for building
dynamic libraries so the install_name stored within a library
is an absolute path. Dynamic libraries with an absolute
install_name can be placed in non-standard locations, but may
not be moved from their designated location.
@item 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.
@item make.info renamed to gnustep-make.info
To prevent conflicts with the standard GNU 'make' info documentation,
the gnustep-make one has been renamed. Now you can access it as in
'info gnustep-make' instead of 'info make', avoiding any conflicts and
confusion. Please note that this info documentation is in the
core/make/Documentation subdirectory and at the moment is not
automatically installed unless you explicitly go in that subdirectory
and install it.
@end table
@section Version 2.0.5
@table @samp
@item default filesystem layout on apple-apple-apple
The default filesystem layout when using the apple-apple-apple
library-combo has been changed from 'gnustep' to the new 'apple'
filesystem layout, and on darwin the configuration file is by default
installed in /Library/GNUstep/GNUstep.conf instead of
/etc/GNUstep/GNUstep.conf. Using the 'gnustep' filesystem layout with
the apple-apple-apple library-combo did not make much sense; in
gnustep-make version 2.0.5 and newer, a ./configure on Apple Mac OS X
automatically chooses the right library-combo and filesystem layout to
compile and install Apple native frameworks and applications.
@item ~/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 GNUstep.sh
at start-up and have a custom shell script that you'd like to source
in addition to GNUstep.sh, please source it in your shell init script
before or after sourcing GNUstep.sh. The same applies to
~/GNUstep/GNUstep.csh.
@item 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
linked. If unspecified, the generic variable NEEDS_GUI is used; if
that is also unspecified, the behaviour depends on the project type
(and is backwards-compatible): applications, bundles, frameworks,
palettes and libraries link automatically against the gui library;
other project types do not. It is recommended that you set
xxx_NEEDS_GUI for all bundles, frameworks and libraries to clarify how
the linking should be done.
@item NEEDS_GUI
This new variable can be used to specify that all projects built by
this GNUmakefile need to be linked against the gui library (or not).
If set to yes, the gui library will be linked; if set to no, the gui
library will not be linked. This behaviour can be overridden for
specific project targets by using the xxx_NEEDS_GUI variable (see
above).
@end table
@section Version 2.0.0
Version 2.0.0 is a new major release of gnustep-make which includes a
number of major changes compared to previous 1.x releases. Most of
the changes are backwards compatible in the sense that old
GNUmakefiles will work with gnustep-make version 1 or 2 when used in
the same conditions (traditional GNUstep filesystem layout). But
GNUmakefiles might need updating to work with the new filesystem
layout configurations that are allowed by gnustep-make version 2.
@table @samp
@item 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
reason, specifying a GNUSTEP_INSTALLATION_DIR no longer makes sense.
If you need to relocate the whole installation (for example,
installing into /tmp to prepare a binary package) you should use
DESTDIR, as in 'make install DESTDIR=/tmp'. To choose an installation
domain, you should use GNUSTEP_INSTALLATION_DOMAIN, as in 'make
install GNUSTEP_INSTALLATION_DOMAIN=LOCAL'. It's particularly
important that you remove any reference to GNUSTEP_INSTALLATION_DIR
inside your own GNUmakefiles.
If your GNUmakefiles contains references to GNUSTEP_INSTALLATION_DIR
(or similar), you should remove them by replacing them with references
to the actual logical directory into which you want to install. For
example, if your GNUmakefile is trying to install something into
GNUSTEP_INSTALLATION_DIR/Library/Libraries, you need to replace it
with GNUSTEP_LIBRARIES. This is important for non-GNUstep filesystem
layouts (where, eg, GNUSTEP_LIBRARIES should be set to /usr/lib or
/usr/local/lib or /home/nicola/GNUstep/Library/Libraries depending on
the installation domain); in that case, gnustep-make will manage
GNUSTEP_LIBRARIES for you. Please check the file @file{filesystem}
for more information on the available variables.
@item 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.
gnustep-make version 2 supports installation domains that are mapped
to filesystem locations in arbitrary ways; for this reason, a variable
like GNUSTEP_SYSTEM_ROOT has no longer any use.
If your GNUmakefiles contains references to GNUSTEP_SYSTEM_ROOT (or
similar), you should remove them by replacing them with references to
the actual logical directory into which you want to install. For
example, if your GNUmakefile is trying to install something into
GNUSTEP_SYSTEM_ROOT/Library/Libraries, you need to replace it with
GNUSTEP_SYSTEM_LIBRARIES. Please check the file @file{filesystem} for
more information on the available variables.
@item 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
for gnustep-make, you need to make sure you replace your old
./configure options with the new ones. In particular, the
--with-system-root, --with-local-root and --with-network-root
configure options have been replaced by the more powerful
--with-layout configure option. Also, configure no longer imports an
existing configuration file so you need to make sure that you pass all
the options every time. 'make install special_prefix=xxx' has been
replaced by 'make install DESTDIR=xxx'.
@item 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'.
@item 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.
@item xxx_PREPROCESS_INFO_PLIST
This variable is now obsolete and can be removed; gnustep-make version 2
can automatically detect plists that need preprocessing.
@item Framework default version
The default framework resource version changed from 'A' to
INTERFACE_VERSION (which is set, by default, to '0').
@item Microsoft Windows updates
If you are using Microsoft Windows, you probably want to check
the new installation instructions and reinstall everything.
@item Java tools location changed
Java tools are now installed into GNUSTEP_JAVA rather than
in a subdirectory of GNUSTEP_TOOLS.
@item 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:
xxx_INSTALL_DIR = $(GNUSTEP_LIBRARY)/Libraries/Resources/xxx
xxx_RESOURCE_FILES_INSTALL_DIR = /Library/Libraries/Resources/xxx
@item INSTALL_ROOT_DIR
All instances of INSTALL_ROOT_DIR in user's makefiles should be
replaced with DESTDIR.
@item 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'.
@item ./shared_obj
The ./shared_obj, ./shared_debug_obj directories and similar are no longer
created. You can use ./obj instead.
@item library names
All libraries now have the same name.
@item application names
All applications now have the same name.
@end table
@ifinfo
Copyright @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
notice and this notice are preserved.
@end ifinfo