Updated docs. --enable-ffcall check

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/tools/make/trunk@8284 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Adam Fedor 2000-12-08 17:25:44 +00:00
parent 2285763de7
commit 357263c411
7 changed files with 849 additions and 527 deletions

View file

@ -1,3 +1,11 @@
2000-12-08 Adam Fedor <fedor@gnu.org>
* configure.in: Add check for --enable-ffcall
* Documentation/GNUmakefile.in: New file.
* Documentation/install.texi: New file.
* Documentation/readme.texi: New file.
* README, INSTALL: Regenerate.
2000-12-06 Richard Frith-Macdonald <rfm@gnu.org>
* openapp.in:

View file

@ -0,0 +1,68 @@
#
# Documentation makefile for the GNUstep Makefile Package
# Copyright (C) 2000 Free Software Foundation, Inc.
#
# Written: Adam Fedor <fedor@gnu.org>
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU Library General Public
# License as published by the Free Software Foundation; either
# version 2 of the License, or (at your option) any later version.
#
# This library is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
# Library General Public License for more details.
#
# You should have received a copy of the GNU Library General Public
# License along with this library; if not, write to the Free
# Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111 USA.
# Install into the system root by default
prefix = @prefix@
GNUSTEP_INSTALLATION_DIR=$(prefix)
GNUSTEP_PREFIX = @GNUSTEP_PREFIX@
srcdir = @srcdir@
datadir = @datadir@
GNUSTEP_MAKETEXT = makeinfo
GNUSTEP_MAKETEXT_FLAGS = -D NO-TEXI2HTML -D TEXT-ONLY --no-header --no-split
# The documents to be generated
DOCUMENT_NAME =
# The text documents to be generated
DOCUMENT_TEXT_NAME = \
INSTALL README
TOP_DOC_FILES = INSTALL README
INSTALL_TEXI_FILES =
INSTALL_TEXT_MAIN = install.texi
INSTALL_DOC_INSTALL_DIR = Developer/Makefiles/ReleaseNotes/$(VERSION)
NEWS_TEXI_FILES =
NEWS_TEXT_MAIN = news.texi
NEWS_DOC_INSTALL_DIR = Developer/Makefiles/ReleaseNotes/$(VERSION)
README_TEXI_FILES =
README_TEXT_MAIN = readme.texi
README_DOC_INSTALL_DIR = Developer/Makefiles/ReleaseNotes/$(VERSION)
ANNOUNCE_TEXI_FILES =
ANNOUNCE_TEXT_MAIN = announce.texi
ANNOUNCE_DOC_INSTALL_DIR = Developer/Makefiles/ReleaseNotes/$(VERSION)
all: $(DOCUMENT_TEXT_NAME)
INSTALL: install.texi
$(GNUSTEP_MAKETEXT) $(GNUSTEP_MAKETEXT_FLAGS) \
-o $@ $^
README: readme.texi
$(GNUSTEP_MAKETEXT) $(GNUSTEP_MAKETEXT_FLAGS) \
-o $@ $^
regenerate: $(DOCUMENT_TEXT_NAME)
mv -f $(TOP_DOC_FILES) ..

222
Documentation/install.texi Normal file
View file

@ -0,0 +1,222 @@
@chapter GNUstep makefile package installation
@section Introduction
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 the
same ftp sites as this library.
When you configure additional libraries, make sure you use the same
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
@url{http://www.gnustep.org}.
@section Additional Libraries
@section Configuration
The GNUstep makefile package uses the Autoconf mechanism for
configuration; it checks some host capabilties which are used by
all GNUstep software. To configure just type:
@example
./configure
@end example
The GNUstep makefile package needs a root directory. If the
GNUSTEP_SYSTEM_ROOT environment variable is set then configure will
use its value as the root directory. You can also specify the root
directory when you run configure with the prefix paramter; the
following command makes /usr/local/GNUstep the root directory:
@example
./configure --prefix=/usr/local/GNUstep
@end example
If you do not have the GNUSTEP_SYSTEM_ROOT environment variable set
and you do not specify a root directory when running configure, then
configure will use /usr/GNUstep as the default root directory.
@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. If you use a non-x86 machine, you should seriously
consider enabling this option using @code{--enable-ffcall}.
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/contrib/libobjc-hh.tar.gz} or
patch the standard library with the patch at
@url{ftp://www.gnustep.org/pub/gnustep/contrib/libobjc-ffi.patch}.
Make sure you specify this option when configuring gstep-base also.
@section 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
GNUstep makefile package has been designed to support cross-compiling
just as easily as normal compiling. In order to add a cross-compile
target to the GNUstep makefile package, you must rerun configure for
that target and reinstall the makefile package. By rerunning
configure, the appropriate target settings are determined, and
reinstalling the makefile package installs the appropriate files for
that target. The target parameter is used to specify the target
platform for cross-compiling:
@example
./configure --target=i386-mingw32
make install
@end example
Note that configuring and installing for a cross-compile target does
not eliminate or overwrite the files for any other targets that you
may have configured. So if you wish to setup the GNUstep makefile
package for multiple targets then just perform the above steps
multiple times.
@example
./configure --target=i386-mingw32
make install
./configure --target=sparc-solaris2.5
make install
./configure --target=alpha-linux-gnu
make install
@end example
@section 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
configure GNUstep to use a 'flattened' directory structure.
You do this by supplying the '--enable-flattened' argument to configure.
In a flattened structure, files are stotred at the top-level rather than
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.
@section Installation
After you configure the GNUstep makefile package, then you need to
compile the programs that come with the package. Currently there is
only a single C program which needs to be compiled; all of the other
files are either shell scripts or makefile fragments, so you can
compile and install the makefile package in one step with:
@example
make install
@end example
After you have installed the GNUstep makefile package, there is still
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
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:
@example
# Setup for the GNUstep environment
. /usr/GNUstep/Makefiles/GNUstep.sh
@end example
This will source in the GNUstep.sh file and set the environment
variables; thus making them available for all users. Before executing
this script, you can setup a default path for searching for tools
and apps by defining the variable GNUSTEP_PATHPREFIX_LIST (and exporting
it). By defualt, it's set to
@example
$GNUSTEP_USER_ROOT:$GNUSTEP_LOCAL_ROOT:$GNUSTEP_SYSTEM_ROOT
@end example
which might look something like this:
@example
~/GNUstep:/usr/GNUstep/Local:/usr/GNUstep
@end example
when all is done.
@section 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.
So essentially the setup involved is to make sure that the variable is
defined for the user. The GNUstep.sh file within the makefile package
contains all of the environment variable settings required, so you
want to call that shell when the user logs in to the system. Most
shells have some file that you read upon login, for example the BASH
shell reads the .bash_profile file in the user's home directory. So
you can add the following lines to that file:
# Setup for the GNUstep environment
. /usr/GNUstep/Makefiles/GNUstep.sh
This will source in the GNUstep.sh file and set the environment
variables; thus making them available for the user.
@bye

44
Documentation/readme.texi Normal file
View file

@ -0,0 +1,44 @@
@chapter GNUstep makefile package
Here is some introductory info to get you started:
@section What is the GNUstep makefile package?
The makefile package is a simplistic, powerful and extensible way to
write makefiles for a GNUstep-based project. It allows the user to
write a GNUstep-based project without having to deal with the complex
issues associated with the configuration and installation of the core
GNUstep libraries. It also allows the user to easily create
cross-compiled binaries.
@section Information
The file @samp{NEWS} has the library's feature history.
The files @samp{INSTALL} or @samp{GNUstep-HOWTO} (from the core package)
gives instructions for installing the library.
The file @samp{DESIGN} has information on the design of the Makefile
system and how to write your own makefiles that work with it.
@section History
The GNUstep makefile package was designed by Scott Christley
@email{scottc@@net-community.com} and Ovidiu Predescu
@email{ovidiu@@net-community.com}.
Flags for building shared libraries and bundles on several systems were
originally identified by Mircea Oancea @email{mircea@@pathcom.com}.
Richard Frith-Macdonald @email{richard@@brainstorm.co.uk} also
contributed with ideas.
@section How can you help?
@itemize @bullet
@item
Give us feedback! Tell us what you like; tell us what you think
could be better. Send bug reports to @email{bug-gnustep@@gnu.org}.
@end itemize

167
README
View file

@ -1,167 +1,46 @@
GNUstep makefile package
========================
************************
This document discusses the configuration and installation tasks for
the GNUstep makefile package.
Read the DESIGN documentation for detailed information about the
design and implementation of the GNUstep makefile package.
Here is some introductory info to get you started:
What is the GNUstep makefile package?
=====================================
The makefile package is a simplistic, powerful and extensible way to
The makefile package is a simplistic, powerful and extensible way to
write makefiles for a GNUstep-based project. It allows the user to
write a GNUstep-based project without having to deal with the complex
issues associated with the configuration and installation of the core
GNUstep libraries. It also allows the user to easily create
cross-compiled binaries.
Configuring the GNUstep makefile package
========================================
Information
===========
The GNUstep makefile package uses the Autoconf mechanism for
configuration; it checks some host capabilties which are used by
all GNUstep software. To configure just type:
The file `NEWS' has the library's feature history.
./configure
The GNUstep makefile package needs a root directory. If the
GNUSTEP_SYSTEM_ROOT environment variable is set then configure will
use its value as the root directory. You can also specify the root
directory when you run configure with the prefix paramter; the
following command makes /usr/local/GNUstep the root directory:
./configure --prefix=/usr/local/GNUstep
If you do not have the GNUSTEP_SYSTEM_ROOT environment variable set
and you do not specify a root directory when running configure, then
configure will use /usr/GNUstep as the default root directory.
Installing the GNUstep makefile package
=======================================
After you configure the GNUstep makefile package, then you need to
compile the programs that come with the package. Currently there is
only a single C program which needs to be compiled; all of the other
files are either shell scripts or makefile fragments, so you can
compile and install the makefile package in one step with:
make install
After you have installed the GNUstep makefile package, there is still
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 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:
# Setup for the GNUstep environment
. /usr/GNUstep/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
this script, you can setup a default path for searching for tools
and apps by defining the variable GNUSTEP_PATHPREFIX_LIST (and exporting
it). By defualt, it's set to
$GNUSTEP_USER_ROOT:$GNUSTEP_LOCAL_ROOT:$GNUSTEP_SYSTEM_ROOT
which might look something like this:
~/GNUstep:/usr/GNUstep/Local:/usr/GNUstep
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.
So essentially the setup involved is to make sure that the variable is
defined for the user. The GNUstep.sh file within the makefile package
contains all of the environment variable settings required, so you
want to call that shell when the user logs in to the system. Most
shells have some file that you read upon login, for example the BASH
shell reads the .bash_profile file in the user's home directory. So
you can add the following lines to that file:
# Setup for the GNUstep environment
. /usr/GNUstep/Makefiles/GNUstep.sh
This will source in the GNUstep.sh file and set the environment
variables; thus making them available for the user.
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
GNUstep makefile package has been designed to support cross-compiling
just as easily as normal compiling. In order to add a cross-compile
target to the GNUstep makefile package, you must rerun configure for
that target and reinstall the makefile package. By rerunning
configure, the appropriate target settings are determined, and
reinstalling the makefile package installs the appropriate files for
that target. The target parameter is used to specify the target
platform for cross-compiling:
./configure --target=i386-mingw32
make install
Note that configuring and installing for a cross-compile target does
not eliminate or overwrite the files for any other targets that you
may have configured. So if you wish to setup the GNUstep makefile
package for multiple targets then just perform the above steps
multiple times.
./configure --target=i386-mingw32
make install
./configure --target=sparc-solaris2.5
make install
./configure --target=alpha-linux-gnu
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 possible to
configure GNUstep to use a 'flattened' directory structure.
You do this by supplying the '--enable-flattened' argument to configure.
In a flattened structure, files are stotred at the top-level rather than
in a $(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.
The files `INSTALL' or `GNUstep-HOWTO' (from the core package) gives
instructions for installing the library.
The file `DESIGN' has information on the design of the Makefile
system and how to write your own makefiles that work with it.
History
=======
The GNUstep makefile package was designed by Scott Christley
<scottc@net-community.com> and Ovidiu Predescu <ovidiu@net-community.com>.
The GNUstep makefile package was designed by Scott Christley
<scottc@net-community.com> and Ovidiu Predescu
<ovidiu@net-community.com>.
Flags for building shared libraries and bundles on several systems were
originally identified by Mircea Oancea <mircea@pathcom.com>.
Flags for building shared libraries and bundles on several systems
were originally identified by Mircea Oancea <mircea@pathcom.com>.
Richard Frith-Macdonald <richard@brainstorm.co.uk> also contributed with ideas.
Richard Frith-Macdonald <richard@brainstorm.co.uk> also contributed
with ideas.
How can you help?
=================
* Give us feedback! Tell us what you like; tell us what you think
could be better. Send bug reports to <bug-gnustep@gnu.org>.
Questions and/or Bug Reports
============================
The initial implementation was performed by Scott Christley
<scottc@net-community.com> and Ovidiu Predescu <ovidiu@net-community.com>, so
you may send questions and/or bug reports to them or to
<bug-gnustep@gnu.org>

834
configure vendored

File diff suppressed because it is too large Load diff

View file

@ -500,6 +500,36 @@ ac_cv_objc_threaded=$objc_threaded
AC_SUBST(objc_threaded)
AC_SUBST(ac_cv_objc_threaded)
#--------------------------------------------------------------------
# Check for FFI interface libraries for invocations
#--------------------------------------------------------------------
AC_ARG_ENABLE(libffi,
[ --enable-libffi Enable use of libffi library],,
enable_libffi=no)
AC_ARG_ENABLE(ffcall,
[ --enable-ffcall Enable use of ffcall library],,
enable_ffcall=no)
AC_CHECK_HEADER(ffi.h, , enable_libffi=no)
AC_TRY_CPP([#include "objc/objc-api.h"
#ifndef OBJC_METHOD_LOOKUP_HOOKS
#error
#endif], , enable_ffcall=no)
AC_CHECK_HEADERS(callback.h, , enable_ffcall=no)
AC_MSG_CHECKING("FFI library usage")
WITH_FFI=none
if test $enable_libffi = yes; then
LIBS="$LIBS -lffi"
AC_MSG_RESULT(libffi)
elif test $enable_ffcall = yes; then
LIBS="$LIBS -lcallback -lavcall"
AC_MSG_RESULT(ffcall)
else
AC_MSG_RESULT(none)
fi
#--------------------------------------------------------------------
# Check recent libxml for Properytlists, GSXML, GSDoc etc.
#--------------------------------------------------------------------
@ -690,5 +720,6 @@ AC_SUBST(GNUSTEP_MINOR_VERSION)
# Produce the output files
#--------------------------------------------------------------------
AC_OUTPUT(config.h config.make openapp debugapp which_lib.pl opentool
executable.template GNUmakefile GNUstep.sh GNUstep.csh,
executable.template GNUmakefile GNUstep.sh GNUstep.csh
Documentation/GNUmakefile,
chmod a+x openapp debugapp which_lib.pl opentool executable.template)