git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/tools/make/trunk@9204 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Adam Fedor 2001-02-22 04:52:03 +00:00
parent e99c05b6bc
commit f0f3dea686
6 changed files with 124 additions and 310 deletions

View file

@ -1,3 +1,10 @@
2001-02-21 Adam Fedor <fedor@gnu.org>
* Documentation/make.texi: Update
* Documentation/news.texi: Likewise
* Documentation/install.texi: Likewise
* NEWS, INSTALL: Regenerate
2001-02-19 Nicola Pero <nicola@brainstorm.co.uk>
* configure.in: Accept --with-local-root and --with-network-root

View file

@ -1,6 +1,15 @@
@ifclear HOWTO
@node Top, Introduction, (dir), (dir)
@chapter GNUstep makefile package installation
@menu
* Introduction::
* Configuration::
* Installation::
* Setup::
@end menu
@node Introduction, Configuration, Top, Top
@section Introduction
If you are installing this package as part of the GNUstep core
@ -14,13 +23,11 @@ configuration options as with gstep-make.
Also make sure you've read the machine-specific instructions for your
particular operating system and CPU. These instructions come with the
core libraries and are also located at the GNUstep web site at
GNUstep-HOWTO and are also located at the GNUstep web site at
@url{http://www.gnustep.org}.
@section Additional Libraries
@node Configuration, Installation, Introduction, Top
@section Configuration
@end ifclear
The GNUstep packages uses the Autoconf mechanism for
configuration; it checks some host capabilties which are used by
@ -60,6 +67,13 @@ switches, shared and debug. As in ``make shared=no debug=yes'' (Make sure
you use the same switches for every package you compile, and also when
you install).
@menu
* Alternate Libraries::
* Cross-Compiling::
* Flat Structure::
@end menu
@node Alternate Libraries, Cross-Compiling, Configuration, Configuration
@subsection Alternate Library Setup
You can specify compilation of alternate libraries by using the
@ -74,79 +88,8 @@ to compile with the xdps library rather than the default xgps backend.
IMPORTANT: The xdps backend is still experimental. Do not use it unless
you are willing to deal with PostScript problems and other bugs.
@subsection Reading Command-Line Arguments
There are two features that change how GNUstep gets access to
command-line arguments and environment variables (normally passed to
the program in the @code{main()} function. These features are
@code{--enable-pass-arguments} and the @code{--enable-fake-main}
option(s).
The fake-main option @emph{secretly} renames the @code{main()} function
and substitutes it's own function which stores the command line
arguments before calling the real main.
The pass-arguments option absolves GNUstep of any effort to get the
command-line arguments and instead forces the developer to insert the
line
@example
[NSProcessInfo initializeWithArguments:argv count:argc environment:env];
@end example
in the @code{main()} function of their program.
Normally, the configure script will determine if a program
can read process information directly from the system (for use by the
class NSProcessInfo) and enable or disable the fake-main hack
automatically, but if you find that configure is not doing this
correctly, you can force the fake-main hack to be used, which will
always work. Note that if the fake-main hack is enabled, you need to
include the header file GSConfig.h in you main program -- this is done
by default if you include NSObject.h or Foundation.h. If you want to
avoid the whole idea of the fake-main hack, you can use the
pass-arguments option. In this case you will be forced to call the
NSProcessInfo initializeWithArguments method to pass the program
arguments to NSProcessInfo (This would be done automatically if you use
the NSApplicationMain function in a gui application).
@subsection FFI Library
GNUstep's NSInvocations and Distributed Objects code involves detailed
manipulation of function (method) calls, which does not work on all
machine architectures. A more robust and portable solution is to use a
library that implements a Foreign-Function Interface (FFI), such as the
ffcall libraries.
Use of the ffcall libraries are now @emph{highly recommended} for in the
GNUstep system. The old gcc __builtin_apply method used previously is
no longer supported and may at some time in the future be removed entirely.
Failure to use the ffcall libraries will make GNUstep's Distributed Objects
system incompatible with other GNUstep systems. The ffcall library is
required on most non-x86 machines for proper operation of invocations and DO.
For this to work, you need to have the ffcall libraries, which you can
get from @url{ftp://ftp.santafe.edu/pub/gnu/} or
@url{http://clisp.cons.org/~haible/}. You also need to have a special
version of the Objective-C library (as of gcc 2.95.x the required hooks
are not in the standard library). You can get this library from
@url{ftp://www.gnustep.org/pub/gnustep/libs/libobjc-20010105.tar.gz} or
patch the standard library with the patch at
@url{ftp://www.gnustep.org/pub/gnustep/libs/patches/libobjc-ffi.patch}.
Note that the ffcall libraries are GPL, not LGPL, but the copyright
holder has created a special exception when ffcall is linked with GNUstep:
@example
ffcall is under GNU GPL. As a special exception, if used in GNUstep
or in derivate works of GNUstep, the included parts of ffcall are
under GNU LGPL.
@end example
Make sure you specify this option when configuring gstep-base also.
@section Configuring the GNUstep makefile package for a cross-compile target
@node Cross-Compiling, Flat Structure, Alternate Libraries, Configuration
@subsection Configuring the GNUstep makefile package for a cross-compile target
By default when you run configure, it assumes that you want to create
executables for the same host that you are compiling on; however, the
@ -179,7 +122,8 @@ make install
make install
@end example
@section Configuring the GNUstep makefile package for a flattened structure
@node Flat Structure, , Cross-Compiling, Configuration
@subsection Configuring the GNUstep makefile package for a flattened structure
On systems where you know you are only interested in supporting a single
operating system, cpu type, and library combination, it's possible to
@ -192,7 +136,7 @@ in a @code{$(GNUSTEP_CPU)/$(GNUSTEP_OS)/$(LIBRARY_COMBO)} subdirectory.
You lose a lot of versatility with this layout, but it's simpler (less
intimidating) for naive users to handle.
@ifclear HOWTO
@node Installation, Setup, Configuration, Top
@section Installation
After you configure the GNUstep makefile package, then you need to
@ -210,20 +154,32 @@ some minor administration to be performed. Based upon whether you are
setting up the GNUstep environment for a single user or all users on
your system, perform the appropriate step below.
@section Setting up the GNUstep environment for all users
@node Setup, , Installation, Top
@section Setting up the GNUstep
The GNUstep environment and thus usage of the makefile package is
based almost solely upon the GNUSTEP_SYSTEM_ROOT environment variable.
So essentially the setup involved is to make sure that the variable is
defined for all users. The GNUstep.sh file within the makefile
package contains all of the environment variable settings required, so
you want to call that shell. For most UNIX systems, the easiest way
to do that is to modify the system rc.local file which is executed
upon system startup; add lines similar to these:
@menu
* Multi-User::
* Single-User::
@end menu
@node Multi-User, Single-User, Setup, Setup
@subsection Setting up the GNUstep environment for all users
The GNUstep environment and thus usage of the makefile package is based
almost solely upon the GNUSTEP_SYSTEM_ROOT environment variable. So
essentially the setup involved is to make sure that the variable is
defined for all users. The GNUstep.sh file within the makefile package
contains all of the environment variable settings required, so you want
to call that shell. Some systems, like GNU/Linux have an
@file{/etc/profile.d} directory where scripts can be executed
automatically. Just copy GNUstep.sh to this directory for it to
work. For other UNIX systems, the easiest way to do that is to modify
the system rc.local file which is executed upon system startup; add
lines similar to these:
@example
# Setup for the GNUstep environment
. /usr/GNUstep/Makefiles/GNUstep.sh
. /usr/GNUstep/System/Makefiles/GNUstep.sh
@end example
This will source in the GNUstep.sh file and set the environment
@ -239,12 +195,13 @@ $GNUSTEP_USER_ROOT:$GNUSTEP_LOCAL_ROOT:$GNUSTEP_SYSTEM_ROOT
which might look something like this:
@example
~/GNUstep:/usr/GNUstep/Local:/usr/GNUstep
~/GNUstep:/usr/GNUstep/Local:/usr/GNUstep/System
@end example
when all is done.
@section Setting up the GNUstep environment for a single user
@node Single-User, , Multi-User, Setup
@subsection Setting up the GNUstep environment for a single user
The GNUstep environment and thus usage of the makefile package is
based almost solely upon the GNUSTEP_SYSTEM_ROOT environment variable.
@ -262,11 +219,4 @@ you can add the following lines to that file:
This will source in the GNUstep.sh file and set the environment
variables; thus making them available for the user.
@include end.texi
@end ifclear
@bye

View file

@ -584,136 +584,33 @@ directory. Typically this is either @code{$(GNUSTEP_SYSTEM_ROOT)}),
it defaults to @code{$(GNUSTEP_LOCAL_ROOT)}.
@end defvr
@defvr {RPM} PACKAGE_SOURCE
This is typically set to the location and name of the original source
file. For example,
@file{ftp://ftp.gnustep.org/pub/gnustep/libs/libobjc-%@{ver@}.tar.gz}.
Notice the @file{%@{ver@}} construct which is a rpm macro that gets
replaced by the version number of the package.
@defvr {RPM} RPM_DISABLE_RELOCATABLE
Set this to @code{YES} if the package must be in @code{$(GNUSTEP_SYSTEM_ROOT)}
and is not relocatable.
@end defvr
@defvr {RPM} PACKAGE_COPYRIGHT
This should describe the license the package is released under, such as
@code{GPL}.
@defvr {RPM} PACKAGE_NEEDS_CONFIGURE
Set this to @code{YES} if a configure script needs to be run before
compilation
@end defvr
@defvr {RPM} PACKAGE_SUMMARY
This is a short (one line) summary of the package.
@end defvr
In addition you need to provide a stub spec file named for the package
name, such as this example @file{libobjc.spec.in} file:
@defvr {RPM} PACKAGE_DESCRIPTION
This is a longer description of the package. Note that the text in this
variable is formated like a printf statement, so remember to add
@code{\n} and other appropriate formatting characters here.
@end defvr
@defvr {RPM} PACKAGER
Set this to the name and e-mail address of the packager. Note that
these variables are set via a shell script so you should escape
the standard e-mail braces (e.g. @code{Mr. GNUstep \<gnustep@@gnustep.org\>}).
@end defvr
@defvr {RPM} PACKAGE_URL
Set this to a URL which provides more information about the package.
@end defvr
@defvr {RPM} RPM_GROUP
The project group that the project falls under. such as
@code{Applications/Productivity}. See the rpm documentation
(@file{GROUPS}) for a list of valid groups. @file{rpm.make} tries to set
a reasonable value, but it is rarely correct.
@end defvr
@@defvr {RPM} PACKAGE_SUMMARY_DEVEL
Library projects generate both a user rpm and a @file{devel} rpm. This
variable is used to describe the contents of the devel rpm. Typically it
would be something like @code{Headers and other files for developing
projects with the $(PACKAGE_NAME) library}. This varaible is only used
for library projects.
@end defvr
@defvr {RPM} PACKAGE_DESCRIPTION_DEVEL
This is the description for the devel rpm package. See the
@code{PACKAGE_DESCRIPTION} variable for more information.
@end defvr
The following variables are not required, and are generally not needed
for most normal projects. Complex or speciallized projects that perform
compilation or installation outside the normal GNUstep system might
need to use some of these to customize the spec file.
@defvr {RPM} RPM_RELEASE
The rpm release number, which defaults to @code{1} if not set. You would
only need to change this if you made a new rpm release without changing
the original source (for instance, if the first rpm release was somehow
corrupted).
@end defvr
defvr {RPM} RPM_DIST
Set to the rpm distributor
@end defvr
@defvr {RPM} RPM_VENDOR
Set to the rpm vendor
@end defvr
@defvr {RPM} RPM_CONFLICTS
A list of packages with which this package conflicts.
@end defvr
@defvr {RPM} RPM_REQUIRES
A list of packages that this package requires.
@end defvr
@defvr {RPM} RPM_SETUP
@end defvr
@defvr {RPM} RPM_CONFIGURE
A shell command that provides additional configuration, such as a
configure script
@end defvr
@defvr {RPM} RPM_ADDITIONAL_INSTALL
Additional installation instructions (beyond @code{make install}).
@end defvr
@defvr {RPM} RPM_POST
@end defvr
@defvr {RPM} RPM_PREUNINSTALL
@end defvr
@defvr {RPM} RPM_POSTUNINSTALL
@end defvr
@defvr {RPM} RPM_FILELIST
Additional files that should be included in the package. Note this text
is formated with printf, so insert a @code{\n} after each file.
@end defvr
@defvr {RPM} RPM_FILELIST_DEVEL
Additional files that should be included in the devel package. Note this text
is formated with printf, so insert a @code{\n} after each file.
@end defvr
@defvr {RPM} RPM_DIRLIST
Additional dirs that are owned by the package. Note this text
is formated with printf, so insert a @code{\n} after each file.
@end defvr
@defvr {RPM} RPM_DIRLIST_DEVEL
Additional dirs that are owned by the devel package. Note this text
is formated with printf, so insert a @code{\n} after each file.
@end defvr
@defvr {RPM} RPM_CONFLICTS_DEVEL
Packages that conflict with the devel package
@end defvr
@defvr {RPM} RPM_REQUIRES_DEVEL
Packages required by the devel package.
@end defvr
@example
Release: 1
Source: ftp://ftp.gnustep.org/pub/gnustep/libs/%@{gs_name@}-%@{gs_version@}.
tar.gz
Copyright: GPL
Group: Development/Libraries
Summary: Objective-C Runtime Library
Packager: Adam Fedor <fedor@@gnu.org>
Vendor: The GNUstep Project
URL: http://www.gnustep.org/
%description
Library containing the Objective-C runtime.
@end example
@node service.make, subproject.make, rpm.make, Project Types
@subsection Services (@file{service.make})

View file

@ -9,6 +9,20 @@
The currently released version is @samp{@value{GNUSTEP-MAKE-VERSION}}.
@section Changes in version @samp{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
@file{Additional} directory. This greatly simplifies compilation and packaging.
@itemize @bullet
@item Javadoc support added.
@item debian directory added for dpkg
@item RPM support rewritten from scratch.
@end itemize
@ifclear ANNOUNCE-ONLY
@section Changes in version @samp{0.9.0}
ffcall library is highly recommended for use with the GNUstep base
@ -23,7 +37,6 @@ package. See the INSTALL file.
@item Added support for Frameworks
@end itemize
@ifclear ANNOUNCE-ONLY
@section Noteworthy changes in version @samp{0.6.6}
The GNUstep system libraries are now installed in a separate system root

100
INSTALL
View file

@ -4,7 +4,7 @@ GNUstep makefile package installation
Introduction
============
If you are installing this package as part of the GNUstep core
If you are installing this package as part of the GNUstep core
libraries, read the file GNUstep-HOWTO for more complete instructions on
how to install the entire GNUstep package (including this package).
GNUstep-HOWTO comes with the core distribution and also is located at
@ -15,12 +15,9 @@ configuration options as with gstep-make.
Also make sure you've read the machine-specific instructions for your
particular operating system and CPU. These instructions come with the
core libraries and are also located at the GNUstep web site at
GNUstep-HOWTO and are also located at the GNUstep web site at
<http://www.gnustep.org>.
Additional Libraries
====================
Configuration
=============
@ -70,78 +67,8 @@ backend. IMPORTANT: The xdps backend is still experimental. Do not use
it unless you are willing to deal with PostScript problems and other
bugs.
Reading Command-Line Arguments
------------------------------
There are two features that change how GNUstep gets access to
command-line arguments and environment variables (normally passed to
the program in the `main()' function. These features are
`--enable-pass-arguments' and the `--enable-fake-main' option(s).
The fake-main option _secretly_ renames the `main()' function and
substitutes it's own function which stores the command line arguments
before calling the real main.
The pass-arguments option absolves GNUstep of any effort to get the
command-line arguments and instead forces the developer to insert the
line
[NSProcessInfo initializeWithArguments:argv count:argc environment:env];
in the `main()' function of their program.
Normally, the configure script will determine if a program can read
process information directly from the system (for use by the class
NSProcessInfo) and enable or disable the fake-main hack automatically,
but if you find that configure is not doing this correctly, you can
force the fake-main hack to be used, which will always work. Note that
if the fake-main hack is enabled, you need to include the header file
GSConfig.h in you main program - this is done by default if you include
NSObject.h or Foundation.h. If you want to avoid the whole idea of the
fake-main hack, you can use the pass-arguments option. In this case you
will be forced to call the NSProcessInfo initializeWithArguments method
to pass the program arguments to NSProcessInfo (This would be done
automatically if you use the NSApplicationMain function in a gui
application).
FFI Library
-----------
GNUstep's NSInvocations and Distributed Objects code involves
detailed manipulation of function (method) calls, which does not work
on all machine architectures. A more robust and portable solution is to
use a library that implements a Foreign-Function Interface (FFI), such
as the ffcall libraries.
Use of the ffcall libraries are now _highly recommended_ for in the
GNUstep system. The old gcc __builtin_apply method used previously is
no longer supported and may at some time in the future be removed
entirely. Failure to use the ffcall libraries will make GNUstep's
Distributed Objects system incompatible with other GNUstep systems. The
ffcall library is required on most non-x86 machines for proper
operation of invocations and DO.
For this to work, you need to have the ffcall libraries, which you
can get from <ftp://ftp.santafe.edu/pub/gnu/> or
<http://clisp.cons.org/~haible/>. You also need to have a special
version of the Objective-C library (as of gcc 2.95.x the required hooks
are not in the standard library). You can get this library from
<ftp://www.gnustep.org/pub/gnustep/libs/libobjc-20010105.tar.gz> or
patch the standard library with the patch at
<ftp://www.gnustep.org/pub/gnustep/libs/patches/libobjc-ffi.patch>.
Note that the ffcall libraries are GPL, not LGPL, but the copyright
holder has created a special exception when ffcall is linked with
GNUstep:
ffcall is under GNU GPL. As a special exception, if used in GNUstep
or in derivate works of GNUstep, the included parts of ffcall are
under GNU LGPL.
Make sure you specify this option when configuring gstep-base also.
Configuring the GNUstep makefile package for a cross-compile target
===================================================================
-------------------------------------------------------------------
By default when you run configure, it assumes that you want to create
executables for the same host that you are compiling on; however, the
@ -170,7 +97,7 @@ for multiple targets then just perform the above steps multiple times.
make install
Configuring the GNUstep makefile package for a flattened structure
==================================================================
------------------------------------------------------------------
On systems where you know you are only interested in supporting a
single operating system, cpu type, and library combination, it's
@ -199,20 +126,25 @@ some minor administration to be performed. Based upon whether you are
setting up the GNUstep environment for a single user or all users on
your system, perform the appropriate step below.
Setting up the GNUstep
======================
Setting up the GNUstep environment for all users
================================================
------------------------------------------------
The GNUstep environment and thus usage of the makefile package is
based almost solely upon the GNUSTEP_SYSTEM_ROOT environment variable.
So essentially the setup involved is to make sure that the variable is
defined for all users. The GNUstep.sh file within the makefile package
contains all of the environment variable settings required, so you want
to call that shell. For most UNIX systems, the easiest way to do that
is to modify the system rc.local file which is executed upon system
startup; add lines similar to these:
to call that shell. Some systems, like GNU/Linux have an
`/etc/profile.d' directory where scripts can be executed automatically.
Just copy GNUstep.sh to this directory for it to work. For other UNIX
systems, the easiest way to do that is to modify the system rc.local
file which is executed upon system startup; add lines similar to these:
# Setup for the GNUstep environment
. /usr/GNUstep/Makefiles/GNUstep.sh
. /usr/GNUstep/System/Makefiles/GNUstep.sh
This will source in the GNUstep.sh file and set the environment
variables; thus making them available for all users. Before executing
@ -224,12 +156,12 @@ it). By defualt, it's set to
which might look something like this:
~/GNUstep:/usr/GNUstep/Local:/usr/GNUstep
~/GNUstep:/usr/GNUstep/Local:/usr/GNUstep/System
when all is done.
Setting up the GNUstep environment for a single user
====================================================
----------------------------------------------------
The GNUstep environment and thus usage of the makefile package is
based almost solely upon the GNUSTEP_SYSTEM_ROOT environment variable.

17
NEWS
View file

@ -1,7 +1,22 @@
NEWS
****
The currently released version is `0.6.7'.
The currently released version is `0.9.0'.
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
simplifies compilation and packaging.
* Javadoc support added.
* debian directory added for dpkg
* RPM support rewritten from scratch.
Changes in version `0.9.0'
==========================