Stable branch 2_0_0

git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/tools/make/branches/stable@25025 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Adam Fedor 2007-04-13 14:39:45 +00:00
commit 708e17e48a
180 changed files with 12 additions and 50726 deletions

View file

@ -1,3 +1,13 @@
2007-04-13 Adam Fedor <fedor@gnu.org>
* Version 2.0.0 (Updated)
* Version: Revert reversion number
* RELEASENOTES: Add to top dir
2007-04-12 Adam Fedor <fedor@gnu.org>
* Version: Bump version to 2.1.0
2007-04-12 Adam Fedor <fedor@gnu.org>
* Version 2.0.0

View file

@ -77,7 +77,7 @@ DOCUMENT_NAME = gnustep-howto faq filesystem internals machines make userfaq
# The text documents to be generated
DOCUMENT_TEXT_NAME = FAQ INSTALL README NEWS RELEASENOTES GNUstep-HOWTO ANNOUNCE
TOP_DOC_FILES = FAQ INSTALL README NEWS GNUstep-HOWTO ANNOUNCE
TOP_DOC_FILES = FAQ INSTALL README NEWS RELEASENOTES GNUstep-HOWTO ANNOUNCE
README_FILES = README.Darwin README.MinGWOnCygwin README.Cygwin \
README.MinGW
@ -131,7 +131,7 @@ NEWS_DOC_INSTALL_DIR = Developer/Make/ReleaseNotes/$(GNUSTEP_MAKE_VERSION)
RELEASENOTES_TEXI_FILES = version.texi
RELEASENOTES_TEXT_MAIN = releasenotes.texi
RELEASENOTES_DOC_INSTALL_DIR = Developer/Make/ReleaseNotes/$(GNUSTEP_MAKE_VERSION)
RELEASENOTES_DOC_INSTALL_DIR = Developer/Make/ReleaseNotes
README_TEXI_FILES = version.texi
README_TEXT_MAIN = readme.texi

View file

@ -1,16 +0,0 @@
config.log
config.make
config-noarch.make
config.cache
GNUmakefile
GNUstep.sh
GNUstep.csh
config.h
config.status
openapp
debugapp
executable.template
opentool
gnustep-make.spec
fixpath.sh
GNUstep.conf

View file

@ -1,79 +0,0 @@
1 Announcement
**************
The GNUstep Makefile Package version 2.0.0 is now available.
1.1 What is the GNUstep makefile package?
=========================================
The makefile package is a simple, powerful and extensible way to write
makefiles for a GNUstep-based project. It allows the user to write a
project without having to deal with the complex issues associated with
configuration, building, installation, and packaging. It also allows
the user to easily create cross-compiled binaries.
1.2 Changes in version `2.0.0'
==============================
The Makefile package has had a major makover which befits a major
version update. The most user-visible change of this is customized
filesystem support. GNUstep can now be configured and installed using
any of many typical filesystem layouts, including FHS, Mac, and the
traditional GNUstep layout.
Due to this change a number of variable names have been changed or
deprecated. If you are a developer maintaining makefiles, you should
check your makefiles for these variables. Most notibly, variabels such
as `GNUSTEP_SYSTEM_ROOT' no longer make any sense, as various
directories that were previously in a traditional GNUstep system root
directory exist accross multiple directories in disparate places in
other filesystem layouts.
If you are a user or developer that is just installing GNUstep, read
the `GNUstep-HOWTO' and `INSTALL' documents to find out new information
about configuring and installing make.
If you are a developer, read the files `filesystem' and `make' for
information on new and changed variables. Read the `releasenotes' file
for specific changes in this release and updates you will need to make
to work with this version of make.
Various changes include:
* New configure option `--with-layout' to choose different
filesystem layouts.
* All applications use the `.app' extension even when compiled with
debugging or profiling.
* Precompiled header support added using
xxx_OBJC_PRECOMPILED_HEADERS.
* gnustep-config is a program which prints out information on the
GNUstep filesystem and variables (Similar to programs like
pkg-config).
* Applications can be started now just using their name (by
installing a wrapper in the tools directory).
* Versioning of Microsoft Windows DLLs implemented.
* Use of `GNUSTEP_SYSTEM_ROOT' and similar variables deprecated. Use
instead `GNUSTEP_INSTALLATION_DOMAIN' and `SYSTEM' or `LOCAL'
* Implement use of GNU standard `DESTDIR' variable.
* Object files are now placed in the `obj' directory.
* Static and profile libraries have the same name as normal
libraries.
1.3 Obtaining gnustep-make
==========================
You can get the gstep-make-2.0.0.tar.gz distribution file at
`ftp://ftp.gnustep.org/pub/gnustep/core'
Please log bug reports on the GNUstep project page
`http://savannah.gnu.org/bugs/?group=gnustep' or send bug reports to
<bug-gnustep@gnu.org>.

View file

@ -1,340 +0,0 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Library General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) 19yy <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) 19yy name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you may
consider it more useful to permit linking proprietary applications with the
library. If this is what you want to do, use the GNU Library General
Public License instead of this License.

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -1,22 +0,0 @@
GNUmakefile
version.texi
*.log
*.dvi
*.ps
*.html
*.info
*.aux
*.toc
*.cp
*.fn
*.vr
*.tp
*.ky
*.pg
*.vrs
*.gz
INSTALL
README
NEWS
GNUstep-HOWTO
internals

View file

@ -1,47 +0,0 @@
# Workaround for a bug in latex2html which does not seem to
# manage the \tableofcontents command correctly
&ignore_commands( <<_IGNORED_CMDS_);
tableofcontents
_IGNORED_CMDS_
$ASCII_MODE = 1;
$BODYTEXT = "BGCOLOR=\"\#FFFFFF\" text=\"\#000000\" link=\"\#0000FF\" vlink=\"\#4444FF\" alink=\"\#3388FF\"";
$SHOW_SECTION_NUMBERS = 1;
$MAX_SPLIT_DEPTH = 4;
$INFO = "
<P>
Copyright (C) 2000, 2001 Free Software Foundation, Inc.
<P>
Permission is granted to make and distribute verbatim copies of this
manual provided the copyright notice and this permission notice are
preserved on all copies.
<P>
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided that the
entire resulting derived work is distributed under the terms of a
permission notice identical to this one.
<P>
Permission is granted to copy and distribute translations of this
manual into another language, under the above conditions for modified
versions.
";
sub top_navigation_panel {
($NEXT_TITLE ? "<B> Next: $NEXT_TITLE </B>\n" : undef) .
($UP_TITLE ? "<B>Up: $UP_TITLE </B>\n" : undef) .
($PREVIOUS_TITLE ? "<B> Previous: $PREVIOUS_TITLE </B>\n" : undef) .
"<BR> <P>\n"
}
sub bot_navigation_panel {
"<HR>".
($NEXT_TITLE ? "<B> Next: $NEXT_TITLE </B>\n" : undef) .
($UP_TITLE ? "<B>Up: $UP_TITLE </B>\n" : undef) .
($PREVIOUS_TITLE ? "<B> Previous: $PREVIOUS_TITLE </B>\n" : undef)
}

View file

@ -1,486 +0,0 @@
[Important: this is mostly a historical document.]
A makefile package for the GNUstep environment
==============================================
This document presents a makefile package for the GNUstep
environment. It describes what are the goals the GNUstep environment
should achieve and then presents some solutions.
Goals
=====
There are several issues we tried to solve while designing a directory
structure and the configuration/make procedures required to build a
package.
We tried to define a directory structure for keeping all the GNUstep
related files. This structure makes the things more consistent and the
configuration and compile process of various GNUstep packages more
easier.
An important issue is to let to a package the ability to deal with
various libraries and configurations available now:
* different Objective-C runtimes. In the Objective-C world there are
currently two major runtimes: the NeXT runtime and the GNU
runtime. They are different in several respects and a program or
library that works at the runtime level should be aware of them.
* different Foundation libraries. There are several Foundation libraries
an OpenStep application can be written on top of: NeXT Foundation
library which runs on NeXTStep/OPENSTEP systems, PDO (Portable
Distributed Objects) which runs on a variety of Unix systems,
gnustep-base and libFoundation.
* different graphical interfaces. Until now two libraries provide or
try to provide OpenStep compliant systems: the AppKit from NeXT and
the GNUstep graphical libraries.
The makefile package should be a simplistic, powerful and extensible
way to write makefiles for a GNUstep project. It should allow the user
to easily specify a library combination he/she wants to use when
compiling a project. Also it should allow the user to easily create
cross-compiled binaries.
Library combinations
====================
If an application wants to work with all the possible combinations it
will have to provide different binaries for each combination because
it's not possible to have an application compiled for NeXT PDO that
runs with gnustep-base or vice-versa. To summarize, an application can
be compiled for these combinations:
Objective-C runtime: NeXT, GNU
Foundation library: NeXT, PDO, gnustep-base, libFoundation
GUI library: NeXT, gnustep-gui
Objective-C runtime: nx (for NeXT), gnu (for GNU)
Foundation library: nx (for NeXT), pdo (for PDO), gnu (for gnustep-base),
fd (for libFoundation)
GUI library: nx (for NeXT), gnu (for gnustep-gui)
We'll denote the fact that an application was compiled for a certain
combination of the above values by using the abbreviations of the
different subsystems and placing dashes between them. For example
an application compiled for NeXT Foundation using NeXT AppKit will
have the compile attribute nx-nx-nx. An application compiled for
PDO with the gnustep-gui library under Unix will be denoted by
nx-pdo-gnu and another one compiled for gnustep-base using
gnustep-gui under Unix will be denoted by gnu-gnu-gnu. Here is a
list of some of the possible combinations:
ObjC runtime Foundation GUI
------------ ---------- ---
nx nx nx
nx pdo nx
nx pdo gnu
gnu gnu gnu
gnu gnu gnu
nx fd gnu
gnu fd gnu
Note that one can choose his/her own packages to build; it is not
required to have all the packages installed on the system. Not having
all of them installed limits only the ability to build and distribute
binaries for those missing combinations.
Directory structure
===================
There are several directories used in a GNUstep environment. The
directories are relative to a top directory whose name is given by the
variable GNUSTEP_SYSTEM_ROOT ($GNUSTEP_SYSTEM_ROOT in a shell or
$(GNUSTEP_SYSTEM_ROOT) in a makefile). Below is the hierarchy of
GNUstep directories:
$(GNUSTEP_SYSTEM_ROOT)/
Headers/
Libraries/
Applications/
Tools/
The Headers/ and Libraries/ directories, as their names suggest, keep
the header files and the libraries required by a GNUstep project to
compile and link. The libraries can be both shared or static,
depending on the target system.
The Applications/ directory is used by GNUstep graphical applications,
those applications which have a graphical interface with the user. The
Tools/ directory holds command line tools based on GNUstep libraries.
The header files are grouped like this in the Headers/ directory:
Headers/
gnustep/
base/
Foundation -> base
gui/
AppKit -> gui
libFoundation/
Foundation/
The Libraries/ directory can hold libraries for several machines and
several combinations of packages:
Libraries/
i386/
linux-gnu/
gnu-gnu-gnu/
libgnustep-base.so
libgnustep-gui.so
gnu-fd-gnu/
libFoundation.so
libgnustep-gui.so
sparc/
solaris-2.5.1/
nx-pdo-gnu/
libgnustep-gui.so
Please note that the Libraries/ directory contains only the libraries
that come with GNUstep, the PDO library for example is not inside
Libraries/. The compiler has to know where that library can be found,
although the makefile package is responsible for passing all the
necessary flags during compiling and linking.
The libraries directory also contains resource files which belong to
the GNUstep libraries, such as images and printer description
files. Since the images can look different for different backends,
each backend has its own images in a different directory based upon
the interface look and feel:
Libraries/
Resources/
Images/
NeXT/
Win32/
PrinterTypes/
Fonts/
gnustep/
NSCharacterSets/
libFoundation/
CharacterSets/
Defaults/
TimeZoneInfo/
The resources that are specific to each Foundation libraries are kept
in a subdirectory like above, except for NeXT Foundation and PDO which
keep their resources in their own places.
The Applications/ directory contains GNUstep graphical
applications. Each application is kept in an app wrapper which
contains all the binaries and all the resource files the application
needs. The binaries organization resembles the one from libraries:
Applications/
InterfaceModeller.app/
InterfaceModeller (for OPENSTEP systems compatibility)
i386/
linux-gnu/
gnu-gnu-gnu/
InterfaceModeller
sparc/
solaris-2.5.1/
nx-pdo-gnu/
InterfaceModeller
The Tools/ directory contains command line tools. Each tool
executable is placed in a subdirectory corresponding to the CPU and
operating system.
Tools/
i386/
linux-gnu/
autoconf
gcc
dgs
sparc/
solaris-2.5.1/
autoconf
gcc
The makefile package
====================
The GNUstep environment needs a makefile package whose purpose is to
simplify writing a GNUstep project. This package should help
developers easily write makefiles for compiling their projects.
Theoretically an OpenStep application should only use OpenStep API, it
should not rely at all on system specific header files. This is the
most portable way to write an OpenStep application. For this kind of
applications configuring is not necessary since no system specific
header files or libraries need to be checked. The idea is to try
eliminate the configuring process because of the problems it has in
the presence of cross-compiling. Not relying on system files in a
GNUstep project means that you don't need to check for them, so the
project can simply be compiled by just typing `make'.
This is the best scenario for a GNUstep package. If configuring is
still needed the makefile package should support it without major
changes.
We identified until now the following types of projects:
- application: for projects whose result are graphical GNUstep applications
- tool: for command line programs which use GNUstep libraries
- library: for creating libraries (both static and shared)
- bundle: for creating a dynamically loaded bundle
- aggregate: for projects that contain several other subprojects like
libraries, bundles and so on
Another possible type of project could be "pallete", for adding
functionality to the GNUstep InterfaceModeller application. Other
project types can be added as well, the makefile package does not
limit this in any way.
A project consists from a collection of source code files and resource
files. If a project has several subdirectories, those subdirectories
are subprojects of the main project. A subproject type is not
restricted in any way by the type of the project it's contained
into. The only restriction is that you can not create multiple project
types from the files in the same directory.
For a project that does not need any additional configuring before
compiling the only thing required to build the project should be
typing
$ make
in the command line :-).
Where the object files go
=========================
The object files will go in a separate directory identified by the
name of the target system and of the development environment used
(ObjC runtime, Foundation library and GUI libraries). This way one can
use the same source tree for building the project for multiple
targets.
How to choose the library combination
=====================================
The makefile package will allow the user to choose between different
library combinations. To specify a combination you want to compile for
just type:
$ make library_combo="library combination"
For instance if you want to choose to compile using the NeXT's PDO
Foundation and use the GNUstep GUI library on a Unix machine you can
do like this:
$ make library_combo=nx-pdo-gnu
Projects that require running configure before compiling
========================================================
There are two issues with this kind of projects. 'configure' is used
to determine the existence of particular header files and/or of some
specific functionality in the system header files. This thing is
usually done by creating a config.h file which contains a couple of
defines like HAVE_... which say if the checked functionality is
present or not.
Another usage of configure is to determine some specific libraries to
link against to and/or some specific tools. A typical GNUstep program
is not required to check for additional libraries because this step is
done by the time the makefile package is installed. If the project
still needs to check for additional libraries and/or tools, the
recommended way is to output a config.mak file which is included by
the main makefile, instead of using Makefile.in files which are
modified by configure. The reason for not doing this is to avoid
having the Makefiles contain target dependencies like above, this way
keeping only one makefile instead of several for each target machine.
The makefile package will be written for GNU make because it provides
some very powerful features that save time both in writing the package
but also at runtime, when you compile a project.
How to build a package for different architectures
==================================================
In order to build a project for multiple architectures you'll need the
development environment for the target machine installed on your
machine. This includes a cross-compiler together with all the
additional tools like the assembler and linker, the target header
files and all the libraries you need.
The GNUstep makefile package should be able to compile and link an
application for another machine just by typing
$ make target="target machine"
where "target machine" is the canonical system name as reported by
config.guess.
Building different types of a project
=====================================
During development you usually need to switch between a debug version and a
profile one without having to recompile all of the sources. The makefile
package allows you to do this by letting you define three boolean make
variables. The values of these variables can be either "yes" or "no".
* debug
If the value is yes then it is assumed that the target is to be built with
debugging info. By default the optimization is turned on but you can control
this behavior via the OPTFLAGS make variable. The default is no.
* shared
It makes sense to specify this only for library targets. This variable says
if the target needs to be built as a shared library. On systems that support
shared libraries this is the default; the user has to explicitly specify
shared=no in the command line.
* profile
When this variable is yes, a profile version of the target is built. The
default is no.
For example if you want to build a shared library with debug information
enabled but no profile information, the command line would be:
$ make shared=yes debug=yes profile=no
The last argument is not necessary because the default is to build a version
without profile information.
The object files will be output into the shared_debug_obj directory. If the
profile is turned on the output directory would be shared_profile_debug_obj.
Of course you also have to specify the library combo if it's different than the
default.
Naming conventions of the libraries
===================================
Sometimes you need to have different versions of a library compiled with
different options. Suppose you want to compile a library with profiling
information enabled so that you can profile your code. But you don't want to
overwrite your existing installed library so that only some of the applications
will work with the profile library, the rest will still use the normal library.
The makefile package supports such a schema by having different names for
different types of the same library. This works by appending an underscore
after the name of the library followed by a letter which indicates the type of
the library:
's' for a static library
'p' for a profile library
'd' for a debug library
So for example if you have the library 'example' compiled with debug
information as a shared library it would be named libexample_d.so. If the same
library is compiled as a static library its name would be named
libexample_sd.a. The reason why the 's' letter for the static library appears
in name of the library is for systems where the extensions of libraries don't
matter.
It is possible to compile a library with whatever combination of flags you
want. The letters are appended in the order specified above, so if you compile
the library as a static library, with profile and debug information enabled,
the library name will have the _spd suffix appended.
How a library is chosen
=======================
What happens if you compile an application with profile enabled and you don't
have a library compiled with profile info into it, but you do have a normal
library installed? It would be great if the normal library is chosen instead.
This is a problem because the library that should be chosen has a different
name than the profile library.
We do support this schema by requiring the libraries to be specified using the
short name, without any suffix appended to it. The `example' library in our
case should be passed to the linker using -lexample, and not using -lexample_p.
Based upon the shared, profile and debug variables, the makefile package will
identify which are the libraries that exist on the system and it will come with
the correct names when linking.
The search order of libraries depending on what type of library is required is
as follows. First of all an exact match is searched; if one is found it is
returned. If either debug or profile are required, a library that matches at
least one of these attributes is returned. For example if there is a
profile+debug version of a library but only debug is required this library will
match. If a static version is required but no static versions of the library
exist, then no library is chosen; in this case the system simply prints out the
name of the library, assuming a static library is somewhere else in the
libraries search path of the linker.
Building applications
=====================
In the makefile's package terminology an application is a program linked
against the GUI libraries.
An application is built as usualy, by compiling all of the sources and then
linking the object files into the binary. The only difference between
an application and any other project results is that the first is created into
its own directory, instead of being a simple file. This directory is called
the application wrapper and it contains the binaries for various architectures
and resources needed by the application.
The name of the application wrapper is taken to be the name of the application
with the following extensions:
.profile - if the application has been built with profile enabled
.debug - if the application has been built with debug enabled
.app - if the application has been built without debug or profile enabled
If both debug and profile are enabled, the application extension will simply
have the .profile extension. This is different from libraries were both options
are reflected into the library's name.
The structure of makefiles
==========================
The makefile package should be built so that a user project will only
have to define what are the Objective-C files he/she uses, what are
the C files, the header files and so on. All the rules that know how
to build a library, an application or whatever type of project are
defined in the internal files of the makefile package.
This organization has several advantages. The main advantage is that
we keep the makefiles in a GNUstep project small, only the makefile
variable definitions. The other advantage is that all the build
knowledge is centralized in a single place, the makefile
package. Right now each GNUstep package tries to solve all of the
issues related to the package building and nothing is reusable.
The way the main makefile of a project should be written requires the
user to specify the files needed by the make process and what kind of
project needs to be built. This is defined by including a certain
makefile package file. For example if the package to be built is an
application then a possible Makefile can look like this:
APP_NAME = test1 test2
test1_OBJC_FILES = test1.m
test2_OBJC_FILES = test2.m test21.m
-include Makefile.preamble
include application.make
-include Makefile.postamble
The main makefile will be generated automatically in the future by the
ProjectCenter. This presents problems if the user wants to add his/her
own makefiles targets or additional rules. Two additional files are
provided: Makefile.preamble and Makefile.postamble. The first file is
included before the makefile for the specific project type and is
intended for redefining the standard variables or for adding to
them. The second one is intended for adding additional rules or
targets.
The makefile package is installed under $(GNUSTEP_SYSTEM_ROOT)/Library/Makefiles.
Ovidiu Predescu
Last updated: April, 2001

View file

@ -1,211 +0,0 @@
#
# This GNUmakefile needs to build the gnustep-make documentation.
#
# The GNUmakefile itself is written using gnustep-make. If we find an
# existing gnustep-make installation, we use it. Otherwise, we
# configure, compile and install gnustep-make into a temporary
# subdirectory, then we use that copy.
# In the very unlikely event that gnustep-make does not even install
# on your machine, please get a pre-generated copy of the
# documentation from the internet! Or just read the documentation in
# source format. :-)
ifeq ($(GNUSTEP_MAKEFILES),)
# We have no gnustep-make installation to use. We need gnustep-make
# to generate the documentation.
# To help lazy cows who want to type 'make' and have all work
# automatically without installating gnustep-make first, if we don't
# have a gnustep-make installation to use, we create a temporary one
# in the subdirectory ./tmp-installation, the run make again passing
# GNUSTEP_MAKEFILES set to point to the new makefile installation
# To execute all, or clean, or install, we first depend on a local
# temporary installation of gnustep-make; when we have it, we source
# GNUstep.sh, then we run the make command again. Please note that
# "make install" will install into our temporary gnustep-make
# directory, which is usually not particularly useful, but anyway.
all clean install regenerate: ./tmp-installation/System/Library/Makefiles
@echo "** Running 'make $@' using the local/temporary gnustep-make installation **"
$(MAKE) $@ GNUSTEP_MAKEFILES="$(CURRENT_DIR)/tmp-installation/System/Library/Makefiles"
CURRENT_DIR = $(shell pwd)
# This creates a local temporary installation of GNUstep-make
./tmp-installation/System/Library/Makefiles:
@echo "** No gnustep-make installation found, attempting to create a local/temporary one. **"
(mkdir tmp-build; \
cd tmp-build; \
../../configure --prefix="$(CURRENT_DIR)/tmp-installation" \
--with-config-file="$(CURRENT_DIR)/tmp-installation/GNUstep.conf"; \
make; \
make install)
distclean:
-(if [ -f ./tmp-installation/System/Library/Makefiles/common.make ]; then \
$(MAKE) $@ GNUSTEP_MAKEFILES="$(CURRENT_DIR)/tmp-installation/System/Library/Makefiles"; \
fi)
rm -Rf tmp-installation tmp-build
else
# We have a gnustep-make installation to use. The following is a
# normal gnustep-make GNUmakefile for documentation.
# We normally install into System
GNUSTEP_INSTALLATION_DOMAIN = SYSTEM
include $(GNUSTEP_MAKEFILES)/common.make
# The documents to be generated
# FIXME: We should prefix everything with 'gnustep' because we
# generate info files that we then put into the standard info
# directories, and we don't want those to conflict with info files
# from other packages! For example, 'info make' should return GNU
# make documentation, while 'info gnustep-make' should return
# GNUstep-make documentation. At the moment they would have the same
# name instead, giving rise to unpleasant consequences! For example
# in a default installation, 'info make' would return gnustep-make
# documentation (instead of GNU make one) because the INFOPATH is used
# before built-in paths!
DOCUMENT_NAME = gnustep-howto faq filesystem internals machines make userfaq
# The text documents to be generated
DOCUMENT_TEXT_NAME = FAQ INSTALL README NEWS RELEASENOTES GNUstep-HOWTO ANNOUNCE
TOP_DOC_FILES = FAQ INSTALL README NEWS RELEASENOTES GNUstep-HOWTO ANNOUNCE
README_FILES = README.Darwin README.MinGWOnCygwin README.Cygwin \
README.MinGW
GNUstep-HOWTO_TEXI_FILES = version.texi
GNUstep-HOWTO_TEXT_MAIN = gnustep-howto.texi
GNUstep-HOWTO_DOC_INSTALL_DIR = User/GNUstep/
FAQ_TEXI_FILES = version.texi
FAQ_TEXT_MAIN = faq.texi
FAQ_DOC_INSTALL_DIR = User/GNUstep/
make_TEXI_FILES = \
make.texi
make_DOC_INSTALL_DIR = Developer/Make/Manual/
faq_TEXI_FILES = \
faq.texi \
version.texi
faq_DOC_INSTALL_DIR = User/GNUstep/
userfaq_TEXI_FILES = \
userfaq.texi \
version.texi
userfaq_DOC_INSTALL_DIR = User/GNUstep/
filesystem_TEXI_FILES = \
filesystem.texi
filesystem_DOC_INSTALL_DIR = User/GNUstep/
machines_TEXI_FILES = \
machines.texi
machines_DOC_INSTALL_DIR = User/GNUstep/
gnustep-howto_TEXI_FILES = \
gnustep-howto.texi \
version.texi
gnustep-howto_DOC_INSTALL_DIR = User/GNUstep/
internals_LATEX_FILES = \
internals.tex
internals_DOC_INSTALL_DIR = Developer/Make/Manual/Internals/
INSTALL_TEXI_FILES = version.texi
INSTALL_TEXT_MAIN = install.texi
INSTALL_DOC_INSTALL_DIR = Developer/Make/ReleaseNotes/$(GNUSTEP_MAKE_VERSION)
NEWS_TEXI_FILES = version.texi
NEWS_TEXT_MAIN = news.texi
NEWS_DOC_INSTALL_DIR = Developer/Make/ReleaseNotes/$(GNUSTEP_MAKE_VERSION)
RELEASENOTES_TEXI_FILES = version.texi
RELEASENOTES_TEXT_MAIN = releasenotes.texi
RELEASENOTES_DOC_INSTALL_DIR = Developer/Make/ReleaseNotes
README_TEXI_FILES = version.texi
README_TEXT_MAIN = readme.texi
README_DOC_INSTALL_DIR = Developer/Make/ReleaseNotes/$(GNUSTEP_MAKE_VERSION)
ANNOUNCE_TEXI_FILES = version.texi
ANNOUNCE_TEXT_MAIN = announce.texi
ANNOUNCE_DOC_INSTALL_DIR = Developer/Make/ReleaseNotes/$(GNUSTEP_MAKE_VERSION)
# Manual pages to install
MAN1_PAGES = openapp.1
MAN7_PAGES = GNUstep.7
include $(GNUSTEP_MAKEFILES)/documentation.make
include ../Version
GNUSTEP_TEXI2HTML_FLAGS += -init_file gnustep.init
# Typing 'make regenerate' should build all, then install the files
# top-level. This is mostly for making gnustep-make releases.
regenerate: all
mv -f $(TOP_DOC_FILES) ..
# Generate the version.texi file from the Version of gnustep-make.
version.texi: ../Version
rm -f version.texi
echo '@set GNUSTEP-MAKE-VERSION' $(GNUSTEP_MAKE_VERSION) \
> version.texi
# Install manually man pages
after-install:: $(GNUSTEP_DOC)/Developer/Make/Manual $(GNUSTEP_DOC)/User/GNUstep
$(INSTALL_DATA) DESIGN $(GNUSTEP_DOC)/Developer/Make/Manual
for file in $(README_FILES); do \
$(INSTALL_DATA) $$file $(GNUSTEP_DOC)/User/GNUstep/$$file; \
done;
if [ ! -f $(GNUSTEP_DOC_MAN) ]; then \
$(MKDIRS) $(GNUSTEP_DOC_MAN); \
fi; \
if [ ! -f $(GNUSTEP_DOC_MAN)/man1 ]; then \
$(MKDIRS) $(GNUSTEP_DOC_MAN)/man1; \
fi; \
for file in $(MAN1_PAGES) __done; do \
if [ $$file != __done ]; then \
$(INSTALL_DATA) $$file $(GNUSTEP_DOC_MAN)/man1/$$file; \
which gzip && rm -f $(GNUSTEP_DOC_MAN)/man1/$$file.gz \
&& gzip -9 $(GNUSTEP_DOC_MAN)/man1/$$file; \
fi; \
done;
if [ ! -f $(GNUSTEP_DOC_MAN)/man7 ]; then \
$(MKDIRS) $(GNUSTEP_DOC_MAN)/man7; \
fi; \
for file in $(MAN7_PAGES) __done; do \
if [ $$file != __done ]; then \
$(INSTALL_DATA) $$file $(GNUSTEP_DOC_MAN)/man7/$$file; \
which gzip && rm -f $(GNUSTEP_DOC_MAN)/man7/$$file.gz \
&& gzip -9 $(GNUSTEP_DOC_MAN)/man7/$$file; \
fi; \
done;
# Uninstall manually man pages
after-uninstall::
rm -f $(GNUSTEP_DOC)/Developer/Make/Manual/DESIGN
for file in $(MAN1_PAGES) __done; do \
if [ $$file != __done ]; then \
rm -f $(GNUSTEP_DOC_MAN)/man1/$$file; \
fi; \
done;
for file in $(MAN7_PAGES) __done; do \
if [ $$file != __done ]; then \
rm -f $(GNUSTEP_DOC_MAN)/man7/$$file; \
fi; \
done;
after-distclean::
rm -f version.texi
endif

View file

@ -1,147 +0,0 @@
.\"GNUstep(7) man page
.\"put together by Martin Brecher <martin@gnustep.de>
.\"
.\"Process this file with
.\"groff -man -Tascii GNUstep.7
.\"
.TH GNUSTEP 7 "August 2003" GNUstep "GNUstep System Manual"
.SH NAME
GNUstep \- A free implementation of the OpenStep standard
.SH DESCRIPTION
GNUstep provides an Object-Oriented application development framework
and toolset for use on a wide variety of computer platforms.
GNUstep is based on the original OpenStep specification provided by
NeXT, Inc. (now Apple).
.P
GNUstep is written in Objective-C, an object-oriented superset of the C
programming language, similar to SmallTalk. However there exist a number
of brigdes and interfaces to develop GNUstep programs using other languages
like JAVA or Ruby.
.P
.B The GNUstep Core System
.P
The GNUstep core system consists of the following parts:
.IP gnustep-make
A set of scripts and makefiles that heavily ease the
creation and maintenance of software projects.
.IP gnustep-base
The FoundationKit libraries for non-GUI tools providing
everything from string
and array classes, filemanager classes to distributed objects.
.IP gnustep-gui
The ApplicationKit containing widgets, workspace classes and
means for
applications to interact with the user. This is the frontend of
GNUstep's GUI part.
.IP gnustep-back
This is the backend of GNUstep's GUI part which does the actual
rendering and event handling. It acts as a layer between
gnustep-gui and the operating/drawing system. Backends exist
for X11 (one using libart, one using xlib drawing) and win32.
Apart from the above, there exist a number of addon libraries, like Renaissance
which allows developers to specify an application's user interface in xml.
For database access, there is gdl2 - the GNUstep Database Library.
Please refer to the GNUstep website for more information.
GNUstep is self-containing. That means that all GNUstep applications, tools,
libraries and add-ons are installed into the GNUstep directory hierarchy.
There are four domains which are searched for files: the System domain, which
should only contain the core system files, the Local domain which stores all
that has later been installed on the system, the Network domain which should
be used for importing data from a remote system, and the User domain which resides in the user's home directory (mostly ~/GNUstep).
See the filesystem.texi document for more information.
.P
.B Some Basic Terms:
.P
.B Tools and Applications
.P
In the world of GNUstep the term
.I tool
refers to command line programs whereas
.I applications
are fully fledged GUI programs.
Naturally,
.I tools
reside in the domains' Tools folder,
.I applications
can be
found in the domains' Applications folder.
Applications are either launched using the openapp command or from the
Workspace.
.P
.B Services
.P
In GNUstep applications globally offer functionality to other applications
through
.I services
. They can be reached through the Services menu entry in an
application's main menu.
Apart from
.I services
offered by applications, there may
be programs whose sole purpose is the offering of services. They can be found
in the domains' Libary/Services folders.
.P
.B The Workspace
.P
The central place of the user interface is the
.I Workspace
or
.I Workspace Manager
which acts as an interface between the user and parts of the system like
files, processes, etc. The GWorkspace application provides this functionality
in GNUstep. See the GWorkspace website for more details.
.P
.P
.B Getting More Help
.P
Most discussion and support is taking place on the GNUstep mailinglists
<http://www.gnustep.org/information/gethelp.html>. Additionally, most larger
projects have their own mailing lists. Consult the appropriate websites for
details.
.P
Alternatively you are invited to join the #GNUstep IRC channel on
FreeNode (irc.freenode.net).
.P
.SH SEE ALSO
gcc(1), gdnc(1), gdomap(8), gopen(1), gpbs(1), make(1), openapp(1)
.PP
.B GNUstep Websites:
.PP
Official GNUstep website <http://www.gnustep.org/> -
GNUstep Wiki (lots of useful information) <http://wiki.gnustep.org/> -
GNUstep Project Page <http://savannah.gnu.org/projects/gnustep/> -
GNUstep Community Page <http://www.gnustep.net/> -
GNUstep Documentation Library <http://gnustep.made-it.com/> -
GNUstep Build Guide <http://gnustep.made-it.com/BuildGuide/>
.PP
Collaboration World <http://www.collaboration-world.com/> -
GNUstep.de <http://www.gnustep.de/> -
GNUstep.it <http://www.gnustep.it/> -
GNUstep.us <http://www.gnustep.us/> -
GWorkspace Website <http://www.gnustep.it/enrico/gworkspace/>
.PP
.B Mailinglists:
.PP
<http://www.gnu.org/software/gnustep/information/gethelp.html> -
Archives can be found at <http://mail.gnu.org/archive/html/>
.P
.SH AUTHORS
GNUstep is developed and maintained by a large number of people. Please
see <http://www.gnustep.org/developers/whoiswho.html> for a list.
.PP
GWorkspace is developed by Enrico Sersale. Please see the GWorkspace Website
for details.
.PP
This man page was written by Martin Brecher <martin@mb-itconsulting.com>.

View file

@ -1,191 +0,0 @@
Date: 17-Sep-2002 (tested under windows-xp)
Author: Ildar Mulyukov <ildar@users.sourceforge.net>
Update: 23-Oct-2004 (tested under windows-2000)
Author: Adam Fedor <fedor@gnu.org>
PURPOSE
-------
This document may be treated as just an appendix to GNUstep-HOWTO. You
can find GNUstep-HOWTO link here:
http://gnustep.org/experience/documentation.html
This document is intended to provide a step by step instruction on how
to get the GNUstep base library into a usable state on a recent windows
operating system (XP, 2000, and probably NT) within Cygwin environment.
Cygwin is unix-like environment working on top of Win32 (Windows, Windows
NT/2k/XP). You can find complete information about it on the website
http://cygwin.org
For the moment GNUstep can be built with GUI support. (Native Win32
GUI, not X11) The gui library is only partially ported to run under
Win32 API so be warned.
Several people have reported that GNUstep installation on Cygwin works
fine, but as always, a slightly different Window's setup can cause
unforseen problems. You should be relatively confident at working with
Cygwin before attempting to install GNUstep.
ADDITIONAL COMMENTS
-------------------
Note: These comments are just my experience. You don't need these to build
GNUstep. If you don't understand something don't worry.
Cygwin project is now in a very advanced stage. It's ready to be used by
end-users and in commercial purposes and very convenient for programmers.
Cygwin provides "General UNIX" environment and APIs. In fact
GNUstep-base is compiled using Unix alternatives of classes (like
NSConcreteUnixTask). But it has several particularities that must been
taken into consideration. There is a very good documentation on Cygwin
website on these questions. See e.g.
http://cygwin.com/cygwin-ug-net/cygwin-ug-net.html I would like to
mention two of them:
1. Filesystem is case-insensitive. Now it's (luckily) supports
soft-links. But case-insensitivity hinders quite a lot.
2. Dynamic libraries mechanism is not so good. (Windows DLL). It does
not support several features (and this makes so hard to port some
software e.g. licq) And it has those ugly __declspec(dllexport) /
__declspec(dllimport) . But (Cygwin hackers are just cool!) in later
releases of binutils ld is capable to link wrongly declared exports!
This eliminates a lot of problems when dealing with DLLs (including
objc.dll and gnustep-*.dll)
PRELIMINARIES
-------------
Before you start, you need Cygwin in some programming-oriented
configuration (full configuration is OK but it's VERY big
now). Installation instructions are on Cygwin site.
Cygwin already contains every package needed for GNUstep. The default
installation, however, does not include every package needed. See the
GNUstep-HOWTO lists all the packages you might need. A probably incomplete
list is given below:
For base (non-GUI):
gcc-objc
libxml2
libxslt
For GUI:
X11 installation
libtiff
libtiff-devel
libjpg
libpng
Obtaining GNUstep
-----------------
The main GNUstep project pages tell you how to get hold of this. You
can get the latest release of the following libraries.
You need these packages:
GNUstep-make
ffcall
GNUstep-objc
GNUstep-base
GNUstep-gui
GNUstep-back
Building and installing libraries
---------------------------------
FFCALL: Unpack, configure, make, make install. See GNUstep-HOWTO for details.
Note again: you can make package. See APPENDIX A
Building and installing gnustep-make
------------------------------------
As ususal. e.g.
./configure
make
make install
Building and installing libobjc
-------------------------------
You need to install gnustep-objc as it properly exports symbols for
DLLs and it's DLL.
Unpack gnustep-objc, and type:
make install
Note: do not use configure.
Building and installing GNUstep-base
------------------------------------
Unpack gnustep-base, and type:
make install
This should automatically run the configure script for you, build the
base library and some tools, and install the whole lot.
Building and installing GNUstep-gui
-----------------------------------
Unpack to gnustep-gui, and type:
make install
Building and installing GNUstep-back
------------------------------------
In the back directory, type
make install
Troubleshooting
---------------
APPENDIX A
----------
This is mkpkg.sh script for making packages from sources.
#!/bin/bash
# make a cygwin package
# launch this script in the building dir
TMPDIR=/tmp/__TMP_$RANDOM
FLIST=$TMPDIR/files.list
rm -rf $TMPDIR
mkdir $TMPDIR
touch /usr/time.stamp
make install
pushd .
cd /
find usr ! -type d -newer /usr/time.stamp > $FLIST
rm /usr/time.stamp
# Don't forget to rename it to real package name
tar cjf $TMPDIR/package.tar.bz2 `cat $FLIST`
popd
unset TMPDIR FLIST
--- *** CUT *** ---

View file

@ -1,510 +0,0 @@
Date : 15-Jan-2004
Last update: 20061231 (tested under Mac OS X 10.4 / Darwin 8)
Authors: Adam Fedor <fedor@gnu.org>
Quentin Mathé <qmathe@club-internet.fr>
Lars S.-Helldorf <lars.sonchocky-helldorf@hamburg.de>
PURPOSE
-------
This document is intended to provide a step by step instruction on how to get
the GNUstep installed on Mac OS X and Darwin.
COMMONLY USED SYMBOLS
---------------------
<> denotes a variable depending on your preferences. To be replaced with the
actual values from your system. For instance, if you installed GCC in /opt/local
./configure CC=<gcc install dir>/bin/gcc
will become:
./configure CC=/opt/local/bin/gcc
[] denotes an optional parameter. For instance:
./configure [--enable-graphics=art]
can be either:
./configure
or:
./configure --enable-graphics=art
PRELIMINAIRES
-------------
For all targets, get the following software. I'd recommend installing Fink (and
FinkCommander on Mac OS X) to get all this software. If you use Fink, you
probably need to add the two lines below to your .bashrc or .profile (or similar
startup) file:
test -r /sw/bin/init.sh && . /sw/bin/init.sh
export DYLD_LIBRARY_PATH=/sw/lib:$DYLD_LIBRARY_PATH
Remember you usually need root access to install software. That means when you
see an instruction like 'make install', you usually need to use sudo
('sudo make install') or be logged in as root (not recommended).
libxml2 (Optional, highly recommended, already in
Mac OS X 10.3 / Darwin 7 and later)
libxslt (Optional)
libtiff (Required)
libjpeg (Optional, highly recommended - don't get from fink!)
libpng (Optional, highly recommended)
libffi (Required, only contained in the GCC distributions and pyobjc)
ffcall (On Darwin x86 - use instead of libffi)
Xfree86 (Required, already in Mac OS X 10.3/Darwin 7 and later)
libart2 (Required for art backend)
freetype2 (Required for art backend)
dlcompat (Required, already in Mac OS X 10.3 or later)
Obtaining GNUstep
-----------------
The main GNUstep project pages tell you how to get hold of this. You can get the
latest release of the following libraries.
You need these gnustep packages:
GNUstep-make
GNUstep-base
GNUstep-gui
GNUstep-back
Targets
-------
For GNUstep, there are several combinations of Objective-C runtime, Foundation
library and Application Kit library possible, called library combos. The usual
notation is:
objcruntime-foundation-applicationkit
Theoretically possible are:
gnu-gnu-gnu # gnu-objc runtime with gnustep-base and gnustep-gui.
# Most widely tested.
apple-gnu-gnu # apple-objc runtime with gnustep libraries. Does
# currently not work.
apple-apple-gnu # Apple Foundation with gnustep-gui on the top. Only of
# academic interest.
apple-apple-apple # Cocoa with GNUstep additions. For porting GNUstep apps
# to Cocoa.
All gnu-*-apple library combos are purely theoretical and only available to the
folks inside Apple since no mortal person ever saw the Cocoa source code. ;-)
You can use either the Apple compiler or compile your own FSF compiler. This
potentially gives two different targets:
Apple GCC, gnu-gnu-gnu
FSF GCC, gnu-gnu-gnu
Unfortunately, using Apple GCC with gnu-gnu-gnu doesn't appear to work currently
(see below for more info), so this option really isn't open now. In addition,
if you are on Mac OS X, you can also use the Apple Foundation and AppKit
frameworks to do GNUstep development with Cocoa, but this only works with the
Apple compiler:
Apple GCC, apple-apple-apple
GNUstep on Darwin x86
---------------------
For GNUstep on Darwin x86, Apple GCC compiles GNUstep-base, but causes strange
problems when running programs (e.g. the program hangs while allocating memory
or executes methods multiple times). So we have to use FSF GCC. Additionally,
libffi has not been ported to Darwin x86, so you will need to install ffcall
instead.
GNUstep on Darwin PowerPC
-------------------------
Building FSF-GCC
----------------
Darwin x86:
FSF GCC is difficult to compile here. The only way I could do it was like this:
ln -s /usr/bin/c++filt /usr/bin/c++filt3 # Missing on Darwin 7.0.1
# x86 but not necessary
# on OpenDarwin 7.2.1
and then configure GCC with:
mkdir build # Create a sibling to the
# toplevel source dir
cd build
<dir>/gcc-X.X.X/configure \ # Don't try to build c++
--enable-languages=c,objc
make bootstrap
make install
cd /usr/local/lib
ln -s libobjc.a libobjc.dylib # So the linker sees us
(Replace X.X.X with the actual distribution you have).
GCC on Darwin doesn't appear to support threads.
Darwin PowerPC:
Configure and build as follows (tested using gcc-3.3.2 on Mac OS X 10.2 and
10.3):
mkdir build
cd build
<dir>/gcc-x.x.x/configure \ # The first option
[--prefix=<gcc install dir>] \ # permits to change the
[--enable-languages=c,objc] # fact GCC installs by
# default in /usr/local
# The second option
# permits to speed the
# GCC compilation in the
# case you will not use
# languages other than c
# and objc
make bootstrap
make install
cd <gcc install dir>/lib
ln -s libobjc.a libobjc.dylib # So the linker sees us
# Note when using gcc 4 or greater, make sure this is libobjc-gnu.dylib
Setting up the GNUstep make environment
---------------------------------------
In the GNUstep-make (core/make) package, do with bourne shell like bash
(Mac OS X 10.3):
echo 'export CC=<gcc install dir>/bin/gcc' >> ~/.profile
with c shell like tcsh (Mac OS X 10.2):
echo 'setenv CC <gcc install dir>/bin/gcc' >> ~/.tcshrc
else use [CC=<gcc install dir>/bin/gcc] option when running configure.
then:
./configure --with-library-combo=gnu-gnu-gnu \
[--prefix=<GNUstep install dir>] [CC=<gcc install dir>/bin/gcc]
(apple-apple-apple is the default if you don't specify gnu-gnu-gnu). If you want
to be able to compile for different targets/platforms together. Do this:
./configure --with-library-combo=gnu-gnu-gnu --disable-flattened \
--enable-multi-platform [--prefix=<GNUstep install dir>] \
[CC=<gcc install dir>/bin/gcc]
Now:
make
make install
Building and installing libobjc (target Apple GCC, gnu-gnu-gnu only !!!)
-------------------------------
Warning ! Don't compile libobjc if you are using FSF GCC. Go to gnustep-objc
(or from CVS, into dev-libs/libobjc), and type:
make install
This should build and install the GNU Objective-C runtime and headers for you.
Building and installing libffi (on Darwin PowerPC only !!!)
------------------------------
Untar the GNU GCC distribution, at least a version 3.4.x (even if you are not
compiling the compiler) and:
mkdir libffi-build
cd libffi-build
<gcc-3.4.x install dir>/libffi/configure [CC=<gcc install dir>/bin/gcc]
make
make install
Note: some 3.4.x versions doesn't have a working libffi on Mac OS X / Darwin.
Use PyObjC libffi from http://pyobjc.sourceforge.net, in the case libffi
install doesn't work with the 3.4.x version.
(This libffi issue needs to be tested with the various GCC 3.4.x versions)
mkdir libffi-build
cd libffi-build
<pyobjc dir>/libffi-src/configure [CC=<gcc install dir>/bin/gcc]
make
make install
Warning ! Don't install libffi in <gcc install dir>, let it just install in
/usr/local
Building and installing ffcall (on Darwin x86 only !!!)
------------------------------
./configure --prefix=$GNUSTEP_SYSTEM_ROOT \
--libdir=$GNUSTEP_SYSTEM_ROOT/Library/Libraries \
--includedir=$GNUSTEP_SYSTEM_ROOT/Library/Headers
Now you can now build and install it simply by typing:
make
make install
Source GNUstep.sh
-----------------
If you are using bourne shell like bash, type:
. <GNUstep install dir>/System/Makefiles/GNUstep.sh
If you are using c shell like tcsh, type:
source <GNUstep install dir>/System/Makefiles/GNUstep.csh
Building and installing GNUstep-base
------------------------------------
Go to GNUstep-base (or from CVS into the core/base directory).
If you are using the FSF GCC (with the Apple GCC which only works currently
with the apple-apple-apple library combo, you don't need to run the configure
yourself unless you need special options), type:
./configure [--with-xml-prefix=/usr] [--disable-xmltest] [--disable-do] \
[LDFLAGS=-L/sw/lib] [CPPFLAGS=-I/sw/include] [CC=<gcc install dir>/bin/gcc]
To know which options you need to use with your environment:
--disable-xmltest is needed with the latest Mac OS X 10.3 / Darwin 7
versions xml2-config tool and libxml2 headers reports differents versions,
because of this versions conflict the GNUstep xmltest fails.
--with-xml-prefix=/usr is needed with Mac OS X 10.3 / Darwin 7 when you
want to build the base library with xslt support and you have installed
libxslt with Fink (because Fink installs lixml2 without the headers when
you install lixslt, and by default the base library tries to link Fink
libxml2 first, then the configuration fails because configure looks for
the libxml2 headers).
--disable-do is needed when you decide to not build libffi or ffcall.
LDFLAGS=-L/sw/lib is needed when you installed libxslt with Fink and you
want to compile the base library with libxslt support.
CPPFLAGS=-I/sw/include is needed when you installed libxslt with Fink and
you want to compile the base library with libxslt support.
followed when you are using the Apple GCC by:
make install
Note: this should automatically run the configure script for you (in the case
you haven't done it).
otherwise (with the FSF GCC) followed by:
make
make install
On the apple-apple-apple target, it will only build the GNUstep additions
library that adds extra stuff to Foundation. If you are using the
apple-apple-apple target, there currently is no reason to go on and compile
GNUstep-gui.
Building and installing GNUstep-gui
-----------------------------------
Go to GNUstep-gui (or from CVS into the core/gui directory).
If you are using the Apple GCC (doesn't work currently) or the FSF GCC type:
./configure [CC=<gcc install dir>/bin/gcc]
followed by:
make
make install
Note: The gsnd server hasn't been ported to Mac OS X / Darwin yet.
In the case configure didn't found libjpeg, use
--with-jpeg-library=<jpeg libdir> --with-jpeg-include=<jpeg include dir> to have
the libjpeg detected.
Example:
./configure --with-jpeg-library=/usr/local/lib
--with-jpeg-include=/usr/local/include
Building and installing GNUstep-back
------------------------------------
Warning ! You must have installed X11User.pkg from the Panther install disc and
also X11SDK.pkg from the xCode Tools install disc to be able to compile
GNUstep-back under Mac OS X 10.3.
If you aren't installing GNUstep under Mac OS X 10.3 / Darwin 7, you can use
XDarwin (ftp://ftp.xfree86.org/pub/XFree86/4.3.0/binaries/Darwin-ppc-6.x/) for
the X server, take a look at http://www.xdarwin.org
In the back directory, type:
./configure [CC=<gcc install dir>/bin/gcc]
make
make install
In the case, you choose to use the art backend, you will need to have the
freetype2 and libart2 libraries installed, first be sure to have libart2 in your
path, for example, with Fink installation type:
export DYLD_LIBRARY_PATH=/sw/lib:$DYLD_LIBRARY_PATH
NOTE: I found also that even though the X11SDK.pkg package has freetype2,
it is missing a crucial include file and also has some undefined symbols. I
had to install the freetype2-dev package from fink and add this to my path
so that it could be found:
PATH=/sw/lib/freetype/bin:$PATH
make sure in config.make that -L/sw/lib/freetype2/lib is included before -L/usr/X11R6/lib (Adam Fedor <fedor@gnu.org>) Mac OS X 10.4 doesn't have this problem.
Then you should be able to configure back and install it:
./configure --enable-graphics=art [CC='<gcc install dir>/bin/gcc']
make
make install
You also need to have /sw/lib in your library path before running GNUstep apps
with the art backend, as it needs to find libart2, so put the above export
DYLD_LIBRARY_PATH somewhere in your .profile (or do the export before launching
an application). The backend architecture which GNUstep-gui is built upon, has
been written to be used within X Windows, then you need to start up an X Server
(like Apple X11) to run the GNUstep-gui applications.
Warning ! With the art backend, before to launch applications based on
GNUstep-gui, in the shell, don't forget to edit the defaults (no need it to redo
it later):
defaults write NSGlobalDomain XWindowBufferUseXShm NO
because Apple X11 doesn't support well shared memory for buffering (which
libart2 uses by default).
POTENTIAL ERRORS WHEN RUNNING MAKE ESPECIALLY WITH BACK AND GUI
---------------------------------------------------------------
If you get errors like below, just do:
make clean
make
The second or the third time, the errors should disappear. It's probably due to
some potential issues between FSF GCC and the libtool/ld Mac OS X / Darwin
versions.
Linking subproject x11 ...
/usr/bin/ld: shared_obj/xdnd.o bad magic number (not a Mach-O file)
collect2: ld returned 1 exit status
make[3]: *** [shared_obj/subproject.o] Error 1
make[2]: *** [x11.all.subproject.variables] Error 2
make[1]: *** [libgnustep-back.all.bundle.variables] Error 2
make: *** [internal-all] Error 2
More informations on the art backend
------------------------------------
To have a working art backend... You will also need to download and install
fonts, as it uses a specific font format. Use for example the file
http://w1.423.telia.com/~u42308495/alex/backart/ArtResources-0.1.2.tar.bz2 and
put the .nfont directories somewhere in $(GNUSTEP_SYSTEM_ROOT)/Library/Fonts
Other fonts are available on http://www.knuddel.org/Downloads/Fonts/
Window Maker
------------
Window Maker is the traditional window manager for GNUstep.
In the case, you choose to use it, don't forget to execute wmaker.inst else
Window Maker will crash with signal 10.
Example with Fink, do:
/sw/bin/wmaker.inst
GNUstep daemons
---------------
Refer to GNUstep-HOWTO to know how to launch GNUstep daemons.
Note: If you try to start GNUstep daemons by hand with 'sudo opentool dameon',
it won't work, because when you become root on Mac OS X / Darwin with sudo or
su, the DYLD_LIBRARY_PATH environment variable of your user isn't used, then to
start them in the shell, do:
sudo opentool gdomap # gdomap doesn't rely on
# the GNUstep libraries
# or other special
# librairies.
su root
then with bourne shell like bash (Mac OS X 10.3):
. $GNUSTEP_SYSTEM_ROOT/Library/Makesfiles/GNUstep.sh
or with c shell like tcsh (Mac OS X 10.2):
source $GNUSTEP_SYSTEM_ROOT/Library/Makesfiles/GNUstep.csh
and just do:
opentool gdnc
opentool gpbs
GNUstep applications
--------------------
Now you can install GNUstep applications like Gorm, ProjectCenter etc.
Remember the fact that when you do 'sudo make install', the $DYLD_LIBRARY_PATH
variable of your user is not used by root. In that case, GNUstep-make could
complain for the undefined library path, the solution is identical to the one we
used to launch the GNUstep daemons above:
su root
then with bourne shell like bash (Mac OS X 10.3):
. $GNUSTEP_SYSTEM_ROOT/Library/MakeFiles/GNUstep.sh
or with c shell like tcsh (Mac OS X 10.2):
. $GNUSTEP_SYSTEM_ROOT/Library/MakeFiles/GNUstep.sh
and just do:
make install
Note: upon launching applications like Project Center which links a framework,
you will probably get an error message about the library
<Framework name>.framework/<Framework name> which cannot be found, to fix that,
just create a symbolic link to the actual library file, which is installed
deeper in the hierarchy:
cd $GNUSTEP_SYSTEM_ROOT/Library/Frameworks/<Framework name>.framework
sudo ln -s Versions/<Current version>/lib<Framework name>.dylib <Framework name>
Example with the ProjectCenter framework (0.4.0 version):
cd $GNUSTEP_SYSTEM_ROOT/Library/Frameworks/ProjectCenter.framework
sudo ln -s Versions/0.4.0/libProjectCenter.dylib.0.4.0 ProjectCenter
---
That's all.

View file

@ -1,557 +0,0 @@
Date: 28-Feb-2007 (tested under Windows XP)
Author: Nicola Pero <nicola.pero@meta-innovation.com>
after Richard Frith-Macdonald <rfm@gnu.org> and others
PURPOSE
-------
This document is intended to provide a step by step instruction on how
to use GNUstep on recent Windows operating systems (XP, 2000, and
probably NT).
It will get as far as explaining how to build a GNUstep application
and create a standalone version that can be shipped standalone to
Windows end users.
The recommended way to get GNUstep working on Windows is to use MinGW
and MSYS to get a Unix-like environment where you can easily build
your GNUstep software (this is what is described in this file).
Software built in the MinGW/MSYS environment is native Windows
software that you can then run without having to rely on the environment
you used to build.
So, this document is divided in two parts.
In the first part ("STEP BY STEP INSTALLATION INSTRUCTIONS"), we will
describe how to get MSYS/MinGW up and running, and how to build
GNUstep software in this environment.
In the second part ("HOW TO SHIP YOUR GNUSTEP APPLICATION TO WINDOWS
USERS"), we'll show an example of how to package (and use) the .exes,
.dlls and resources (that you can build using the environment
described in the first part) as Windows standalone binaries.
INTRODUCTION TO MINGW
---------------------
MinGW is a collection of header files and import libraries that allow
one to use GCC and produce native Windows32 programs that do not rely
on any 3rd-party DLLs. GNUstep has only partially been ported to
MinGW so expect some problems when trying to compile. Also, there are
still subtle problems with running GNU tools on Windows, so any
problems you may encounter may just as easly have to do with the
compilation tools you are using as with GNUstep.
MSYS is a very much cut down version of the Cygwin environment ...
providing a minimal set of tools needed to build programs using
MingGW. If you wish to build for MinGW by cross-compiling from a
Cygwin environment, please read README.Cygwin instead.
The gui library is only partially ported to run under MinGW. The look
and behavior may not be consistent. Contributions are welcome.
PRELIMINARIES
-------------
One way to vastly simplify installing GNUstep, is to use the Windows-based
GNUstep installer. Get it from
http://www.gnustep.org/resources/sources.html#windows
If you have already installed this, you can skip to the end and just
start compiling and packaging applications! Although you may want to
read the rest of the instructions for other helpful information.
A. STEP BY STEP INSTALLATION INSTRUCTIONS
-----------------------------------------
1. Install MinGW
================
Download MinGW-5.1.3 from
http://sourceforge.net/projects/mingw Install it into
C:/xxx/msys/1.0/mingw
(where /xxx/ is the top-level path you want to use, I use Nicola/GNUstep so
I install it into C:/Nicola/GNUstep/msys/1.0/mingw) (earlier versions of
MinGW might not work)
PS: Download MinGW-5.1.3.exe, then start it up. Select 'Current' as
the package version ot install. Then select 'MinGW Base Tools',
'Objective-C Compiler' and 'MinGW Make' as packages to install. Set
the installation path to C:\xxx\msys\1.0\mingw.
2. Install msys
===============
Download MSYS-1.0.10 following the links in
http://www.mingw.org/download.shtml. Install it into C:/xxx/msys/1.0
The postinstall script should ask you for the mingw location, then
detect it and be happy that it's there and all is setup properly.
3. Install msys developer toolkit
=================================
Download msysDTK-1.0.1 from the same site. Install it into
C:/xxx/msys/1.0
Now your MSYS/MinGW system should be setup! There should be an icon
on your desktop called 'MSYS'. Double-clicking on it will launch a
Unix-like shell. Go around and make sure you know how to use it. Log
into it and work in it.
4. Additional Windows steps
===========================
You may need to edit /mingw/include/winsock2.h to change the size of the
sa_data field in the sockaddr structure from 14 to 22 ... this is because
some versions of Windows have changed the layout of this structure.
This modification may be needed to be able to correctly determine the
network interface details for your machine.
It's a good idea to remove the libobjc.a and libobjc.la and
include/objc headers that come with gcc (gcc -v for location) so that
they are not accidentally found instead of the libobjc DLL that you
will compile below. This is what I did to remove them:
rm -Rf /mingw/lib/gcc/mingw32/3.4.2/include/objc
rm -Rf /mingw/lib/libobjc.a
rm -Rf /mingw/lib/libobjc.la
Now you can open a window containg a shell by choosing MSYS from the
start menu.
From this window we can now start building things.
5. Additional Useful Tools [Optional]
=====================================
If you want to install GNUstep from Subversion, you need a Subversion
client. I used
http://subversion.tigris.org/files/documents/15/35379/svn-1.4.2-setup.exe
and then installed subversion in a random directory. Then you can run
svn.exe from the MS-DOS console (or the MSYS one).
If you need Emacs, get a Windows version from
ftp://ftp.gnu.org/gnu/emacs/windows/emacs-21.3-bin-i386.tar.gz. To
install it, simply unpack it in your home directory, you can now
execute the binary in 'bin'.
6. Obtaining GNUstep
====================
The main GNUstep project pages tell you how to get hold of this. You
can get the latest release of the libraries. However, since MinGW
support is currently evolving, we recommend that you get the latest
snapshot or code from SVN.
svn co http://svn.gna.org/svn/gnustep/modules/core
7. Installing gnustep-make
==========================
go in core/make and do
./configure --with-layout=fhs
make
make install
The reason we recommend using the 'fhs' layout is that if do this, you
don't need to do anything to set up your environment. You could use
the standard 'gnustep' layout instead, in which case you need to
source GNUstep.sh to run stuff.
8. setup your GNUstep environment
=================================
Nothing to do here since we're using the fhs native layout.
But if at some point something doesn't work for you, try using
export GNUSTEP_MAKEFILES=/usr/local/share/GNUstep/Makefiles
9. Installing gnustep-objc
==========================
Download gnustep-libobjc (you can find it at
http://www.gnustep.org/resources/downloads.php, or use subversion:
svn co http://svn.gna.org/svn/gnustep/modules/dev-libs/libobjc),
and compile it:
make
make install
10. Reinstalling gnustep-make
=============================
Go in core/make and reconfigure/recompile again so that gnustep-objc
is detected:
make distclean
./configure --with-layout=fhs
make
make install
gnustep-make should have detected your custom libobjc.
11. Installing ffcall
=====================
Download ffcall from the GNUstep website, and type:
./configure
make
make install
(if you get a popup about contest.exe failing, just ignore it)
12. Installing additional packages
==================================
Download the following packages:
libintl-0.14.4.bin.zip
libintl-0.14.4.lib.zip
libiconv-1.9.2-bin.zip
libiconv-1.9.2-lib.zip
zlib-1.2.3-bin.zip
zlib-1.2.3-lib.zip
from http://gnuwin32.sourceforge.net, and install them. To
install them, simply unzip them into /C/xxx/msys/1.0/mingw.
13. XML support
===============
You need to get the source code for libxml2 and build it yourself ...
Now download the libxml2 source from http://www.xmlsoft.org I used
libxml2-2.6.27.tar.gz
Unpack the source, change into the directory and do the usual routine --
./configure
make
make install
You should now have libxml2 installed on your system.
IMPORTANT: Do *not* install libxslt. It has been reported that
libxslt is currently built in the wrong way and will prevent anything
from linking correctly if you try to use it.
14. Installing gnustep-base
===========================
Go in gnustep-base, and type
./configure
make
make install
At this point, you should be able to compile and run any non-gui tool
and library (to check this try, for example, 'defaults read'). The
next steps are only required for gui applications.
15. Installing gui additional packages
======================================
For the gui, download and install the following packages:
jpeg-6b-4-bin.zip
jpeg-6b-4-dep.zip
jpeg-6b-4-lib.zip
tiff-3.8.2-1-bin.zip
tiff-3.8.2-1-dep.zip
tiff-3.8.2-1-lib.zip
libpng-1.2.8-bin.zip
libpng-1.2.8-lib.zip
The process is always the same: download the zip file from the
gnuwin32 website, then unzip them into /C/xxx/msys/1.0/mingw.
16. Installing gnustep-gui
==========================
Go in the gui, and type:
./configure
make
make install
17. Installing gnustep-back
===========================
Go in back, and type:
./configure
make
make install
18. Testing your gui installation
=================================
Go in a simple gui application (examples/gui a very good starting
point), compile and run it. :-)
Additionally, you might want to compile and run Gorm or other GNUstep
applications. Gorm (and hopefully other GNUstep applications too)
should compile and run out of the box.
Troubleshooting
---------------
Issues with updating:
Before attempting to update your GNUstep installation, be sure to stop/kill
all running GNUstep programs or services (i.e. gdomap, gdnc, gpbs) since
Windows cannot overwrite files that are currently in use.
Where we specify specific versions of packages to be used, we have tested
with those versions ... later or earlier versions may work, but may well not.
Generally earlier versions should be assumed not to work.
B. HOW TO SHIP YOUR GNUSTEP APPLICATION TO WINDOWS USERS
--------------------------------------------------------
You probably want to ship your Windows application as a standalone
.zip file that Windows users can easily download and use.
We will explain what to do with an example: that of packaging
Gomoku.app. We will first build the application (creating
Gomoku.app), then we'll add to to it all the GNUstep DLLs and
resources that are needed to run the application, and we'll end up
with a single directory, Gomoku.app, that contains a program
(Gomoku.exe) and a bunch of DLLs and various other resources required
to run the program.
The end user just needs to get this directory (from a .zip or .tgz
file, for example) and can double-click on Gomoku.exe to start the
program (no GNUstep installation required).
1. Build the application
========================
Build your application (Gomoku.app in this example) in your
MinGW/GNUstep environment. Generally, this means getting the source
code and typing 'make' in it. If you're trying to follow the
Gomoku.app example, the source code is here:
http://www.gnustep.it/nicola/Applications/Gomoku/index.html
Once you have built it, make sure you can run your application from
within mingw by using 'openapp', as in 'openapp ./Gomoku.app'.
2. Copy your application somewhere
==================================
Now take your built application and copy it somewhere -- we'll be
working on it! Eg, I just copy it in my home directory.
cp -R /home/Nico/Gomoku-1.2.8/Gomoku.app /home/Nico/
3. Copy DLLs into your application
==================================
Now search for MinGW/GNUstep DLL files in /bin and /local/bin, and
copy them all into Gomoku.app:
cp $(find /bin -name *.dll) /home/Nico/Gomoku.app/
cp $(find /local/bin -name *.dll) /home/Nico/Gomoku.app/
4. Copy your GNUstep Library folder
===================================
Now copy all of the GNUstep resources into the application --
mkdir -p /home/Nicola/Gomoku.app/GNUstep/
cp -R /usr/local/lib/GNUstep/* /home/Nico/Gomoku.app/GNUstep/
I put them all into Gomoku.app/GNUstep/, which means that later on
I'll set up the GNUstep.conf file to map GNUSTEP_*_LIBRARY to that
directory.
5. Copy key GNUstep binary programs
===================================
mkdir -p /home/Nicola/Gomoku.app/GNUstep/Tools/
cp /local/bin/gpbs.exe /home/Nicola/Gomoku.app/GNUstep/Tools
cp /local/bin/gdnc.exe /home/Nicola/Gomoku.app/GNUstep/Tools
cp /local/bin/gdomap.exe /home/Nicola/Gomoku.app/GNUstep/Tools
cp /local/bin/make_services.exe /home/Nicola/Gomoku.app/GNUstep/Tools
I put them all into Gomoku.app/GNUStep/Tools, which means that later
on I'll set up the GNUstep.conf file to map GNUSTEP_*_TOOLS to that
directory.
6. Add a GNUstep.conf
=====================
You need to add a Gomoku.app/GNUstep.conf file to tell gnustep-base
where to find things inside Gomoku.app -- here is the one I use (which
matches the locations where I copied things in the previous steps) --
GNUSTEP_USER_CONFIG_FILE=.GNUstep.conf
GNUSTEP_USER_DIR=GNUstep
GNUSTEP_USER_DEFAULTS_DIR=GNUstep/Defaults
GNUSTEP_SYSTEM_APPS=./GNUstep/Apps
GNUSTEP_SYSTEM_ADMIN_APPS=./GNUstep/Apps
GNUSTEP_SYSTEM_TOOLS=./GNUstep/Tools
GNUSTEP_SYSTEM_ADMIN_TOOLS=./GNUstep/Tools
GNUSTEP_SYSTEM_LIBRARY=./GNUstep
GNUSTEP_SYSTEM_HEADERS=./GNUstep/Headers
GNUSTEP_SYSTEM_LIBRARIES=./GNUstep/Libraries
GNUSTEP_SYSTEM_DOC=./GNUstep/Documentation
GNUSTEP_SYSTEM_DOC_MAN=./GNUstep/Documentation/man
GNUSTEP_SYSTEM_DOC_INFO=./GNUstep/Documentation/info
GNUSTEP_NETWORK_APPS=./GNUstep/Apps
GNUSTEP_NETWORK_ADMIN_APPS=./GNUstep/Apps
GNUSTEP_NETWORK_TOOLS=./GNUstep/Tools
GNUSTEP_NETWORK_ADMIN_TOOLS=./GNUstep/Tools
GNUSTEP_NETWORK_LIBRARY=./GNUstep
GNUSTEP_NETWORK_HEADERS=./GNUstep/Headers
GNUSTEP_NETWORK_LIBRARIES=./GNUstep/Libraries
GNUSTEP_NETWORK_DOC=./GNUstep/Documentation
GNUSTEP_NETWORK_DOC_MAN=./GNUstep/Documentation/man
GNUSTEP_NETWORK_DOC_INFO=./GNUstep/Documentation/info
GNUSTEP_LOCAL_APPS=./GNUstep/Apps
GNUSTEP_LOCAL_ADMIN_APPS=./GNUstep/Apps
GNUSTEP_LOCAL_TOOLS=./GNUstep/Tools
GNUSTEP_LOCAL_ADMIN_TOOLS=./GNUstep/Tools
GNUSTEP_LOCAL_LIBRARY=./GNUstep
GNUSTEP_LOCAL_HEADERS=./GNUstep/Headers
GNUSTEP_LOCAL_LIBRARIES=./GNUstep/Libraries
GNUSTEP_LOCAL_DOC=./GNUstep/Documentation
GNUSTEP_LOCAL_DOC_MAN=./GNUstep/Documentation/man
GNUSTEP_LOCAL_DOC_INFO=./GNUstep/Documentation/info
So, just copy and paste this code into a GNUstep.conf file that you
put into /home/Nico/Gomoku.app/GNUstep.conf.
7. Now the application should be working
========================================
At this stage, everything should be working "standalone".
By that we mean that if you give your Gomoku.app/ to a Windows user
(with no GNUstep installed on their machine), they should be able to
run it by just double-clicking on the Gomoku executable inside of the
Gomoku.app/ directory! :-)
Try it out and make sure that it works.
8. Cleanup
==========
If you look at your Gomoku.app/ directory, you will see that it is
really big. We mass-copied stuff from the GNUstep/MinGW directories;
but generally, you want to make sure you remove anything that you
don't strictly need. So go in there and remove anything that you
don't need.
First thing, you should remove the MSYS libraries, which we never use --
rm Gomoku.app/msys-1.0.dll
rm Gomoku.app/msysltdl-3.dll
rm Gomoku.app/libW11.dll
rm Gomoku.app/libperl.dll
rm Gomoku.app/librle3.dll
Then, remove any additional library that your application doesn't use;
for example, I removed --
rm Gomoku.app/Renaissance.dll
rm Gomoku.app/ProjectCenter.dll
Finally, remove Apps and other stuff that you might have copied from
the general GNUstep installation --
rm -Rf Gomoku.app/GNUstep/Apps
rm -Rf Gomoku.app/GNUstep/Frameworks/ProjectCenter.framework
Generally, you may want to build the whole stuff making sure you only
include what you strictly need.
9. Stripping
============
The resulting directory might still be pretty big. If you are trying
to distribute it over the internet, your users will probably
appreciate if you stripped it, removing symbols. Just run 'strip'
on all the .exe and .dll files in your application.
strip $(find /home/Nico/Gomoku.app/ -name '*.exe')
strip $(find /home/Nico/Gomoku.app/ -name '*.dll')
That will reduce the size a lot. If you're not distributing it over
the internet, you might be happy leaving the symbols in though.
10. Checking Licenses
====================
Finally, before deployment, you need to realize that you are shipping
a lot of GNUstep (and non-GNUstep) software with your application.
This is fine, just make sure you are aware of the licenses, and that
you comply with them (by explaining to people where to easily get the
source code of the GNUstep software, for example [this comment is not
legal advice -- please check the licenses yourself to make sure you
are compliant]). (FIXME: Maybe someone should provide the appropriate
ready-to-use notices that ought to be included ?)
PACKAGING/WINDOWS TODOS
-----------------------
The gdnc, gpbs processes are somehow a bit of a pain. They are
automatically started when you start your application, but they are
not automatically stopped when you quit it. This might have bad
consequences, eg, if you are using your application from a USB flash
disk, Windows doesn't let you unplug the USB disk while gdnc/gpbs are
running, because they are running from the disk!
Also, it's not clear what happens if you have two or three such
GNUstep apps downloaded from the web and you try to run them at the
same time. What about gdomap etc ?

View file

@ -1,205 +0,0 @@
Cross Compiling GNUstep for MinGW from Cygwin
=============================================
If you wish to build on a native MinGW system (recommended),
please read README.MinGW instead.
MinGW is a collection of header files and import libraries that allow
one to use GCC and produce native Windows32 programs that do not rely
on any 3rd-party DLLs. GNUstep has only partially been ported to MinGW
so expect some problems when trying to compile. Also, there are still
subtle problems with running GNU tools on Windows, so any problems you
may encounter may just as easly have to do with the compilation tools
you are using as with GNUstep.
The base library is not completely ported to run on MinGW yet, but most
stuff works, including networking/distributed objects.
Probably background file handle operations (other than networking) and
advanced parts of NSTask code do not currently work.
Note for compiling with shared libraries (DLLs), it's a good idea to
remove the libobjc.a that comes with gcc (gcc -v for location) so that
it isn't accidentally found instead of the libobjc DLL that you will
compile below. Also note that, despite the statement in the GNUstep-HOWTO,
even if you have 3.x, you still need to install gnustep-objc as it properly
exports symbols for DLLs.
Note also that the //c construct for specifying paths with drives has
been depreciated. You'll need to use /cygwin/path or C: style paths now.
MinGW on Cygwin
---------------
Not recommended. This is a cross compilation solution. Using native
mingw/msys is simpler and less error prone.
Uses the Cygwin tools to help out with the configuration and compilation of
the libraries. It's always good to get the very latest version of
Cygwin and MinGW. These instructions were performed
with Cygwin DLL 1.3.9-1 and MingW gcc 2.95.3-6. If you have more
experience with MinGW than me, please help improve these instructions!
I assume you have installed Cygwin and MinGW, and dowloaded and
unpacked the GNUstep packages:
ffcall
gnustep-make
gnustep-objc
gnustep-base
See the GNUstep-HOWTO file for more information on where to get
various files. You need to build and install each package separately,
as described below.
1. First, start up a Cygwin BASH shell and make sure the MinGW tools
are in your path:
export PATH=/c/mingw/bin:$PATH
(Put in whatever path you have for the mingw tools).
NB. Using MinGW-1.1 the header file winsock2.h needed to be slightly
updated for 2000 or XP. The size of the sa_data field in struct sockaddr
had to be increased from 14 to 22. If you don't do this before building
the gnustep base library, the gdomap tool will not correctly determine the
internet addresses of your machine.
2. Configure and compile gnustep-make.
The default location for GNUstep on Windows systems in C:/GNUstep.
To use another location you can use the --prefix argument to configure.
First, go to the 'gnustep-make' package and configure:
cd gnustep-make
./configure --target=i386-mingw32
2a. The configure script may not have recognised that you are running in
a cygwin environment ... so you may need to edit 'fixpath.sh' to set the
CYGWIN variable to 'yes' before you build and install the make package.
3. Now build the gnustep-make package. Occationally, the make that comes
with MinGW doesn't like the way GNUstep makefiles are setup (or perhaps
it's that MingW make doesn't work with bash), so you can try
using Cygwin's make instead (/usr/bin/make instead of just make).
make target=i386-mingw32
make target=i386-mingw32 install
4. Now source the GNUstep.sh file so the rest of the packages will
compile correctly:
. C:/GNUstep/System/Library/Makefiles/GNUstep.sh
Also put this command in your shell startup script. Be sure to adjust
this path to match your real GNUstep root directory if you changed it
when configuring gnustep-make.
NOTE for WIN98 users: You should also define the environment variables
HOMEDRIVE and HOMEPATH, since these aren't defined normally.
5. Compile and install the ffcall package (Version 1.8b). It's
simply a C library so it requires no special tools other than the compiler.
LD=ld RANLIB=touch ./configure --target=i386-mingw32 \
--prefix=`$GNUSTEP_MAKEFILES/fixpath.sh -u $GNUSTEP_SYSTEM_ROOT`
which installs the libraries in the GNUstep directory structure (There is
a script in ffcall-1.8d and higher that automatically configures ffcall
and installs, called compile-mingw). Then
make # NOTE: Might need to be 'make LN_S=cp'
make install
6. Now you can compile the Objective-C runtime DLL, gnustep-objc (unless
you already have one installed):
cd gnustep-objc
make target=i386-mingw32 shared=yes
make target=i386-mingw32 shared=yes install
Make sure to remove libobjc.a that comes with gcc, otherwise it will find that
one instead of the one we want. The libobjc library that comes with gcc-3.x
MAY work if you add some extra lines to the .def file, but I won't go into
that here. It's good just to use gnustep-objc.
7. Now we can configure and build the gnustep-base library.
cd gnustep-base
./configure --target=i386-mingw32
make target=i386-mingw32 shared=yes
make target=i386-mingw32 shared=yes install
If you get tired of typing "target=i386-mingw32" all the time, then before
you exec the GNUstep.sh script, just set the GNUSTEP_HOST:
export GNUSTEP_HOST=i586-pc-mingw32
. $GNUSTEP_SYSTEM_ROOT/Library/Makefiles/GNUstep.sh
Problems?
---------
[1] It's really important that all the libraries you link with GNUstep be
shared libraries. Even static libraries based on C (e.g. libtiff) will
prevent Objective-C modules from being loaded in Objective-C libraries.
[2] On Windows XP, at least, there are sometimes spaces in the path to the
user directory. The make program cannot deal with this.
Probably the best solution is to add a .GNUsteprc file in your home
directory with a line of the form -
GNUSTEP_USER_ROOT=/home/myname
setting your personal GNUstep root directory to be '/home/myname' ...
some path which does not contain spaces.
[3] Some users report needing to make gnustep libs like this (perhaps
when using Cygwin's gcc only):
export CC="gcc"
export CFLAGS="-mno-cygwin"
export CPPFLAGS="-mno-cygwin"
find . -name "*.lnk" -print -exec rm {} \;
make target=i386-mingw32 shared=yes LN_S="ln -s" \
SHARED_LD_PREFLAGS="--driver-flags=\"-mno-cygwin -mdll -Wl,--enable-stdcall-fixup\" --target=i386-mingw32 --export-all-symbols"
[4] Compiling iconv (1.8):
(the part with the most problems - maybe you download it precompiled
but if you want to compile it - here is the guide) Make sure you are
compiling from a mapped drive (eg. d:) not from an UNC Path!!!!
./configure --target=i386-mingw32 --host=i386-mingw32 (ignore warnings here)
edit libtool and libcharset/libtool so that the CC variable reads
"gcc -mno-cygwin -mdll"
make
(After a while make breaks with an error in linking)
find . -name "*.lnk" -print -exec rm {} \;
make
(make breaks now in the src folder, but the DLL is already buildt,
that is what we need)
cp include/iconv.h $GNUSTEP_SYSTEM_ROOT/Headers
cp lib/.libs/libiconv-2.dll $GNUSTEP_SYSTEM_ROOT/Tools/libiconv-2.dll
cp lib/.libs/libiconv.dll.a $GNUSTEP_SYSTEM_ROOT/Libraries/libiconv.a
Good Sites for Pre-Compiled Binaries
------------------------------------
Many libraries, etc from:
<http://sourceforge.net/project/showfiles.php?group_id=7382>
<http://penguin.at0.net/~fredo/files/old/> (for libxml2, more?)
<http://sourceforge.net/project/showfiles.php?group_id=23617> (libtiff)
MingW guile from
<http://www.textsure.net/~ela/devel.html>.
also need guile from
<http://sourceforge.net/project/showfiles.php?group_id=7382>
for guile-config file.
Author
------
Adam Fedor <fedor@gnu.org>

View file

@ -1,26 +0,0 @@
@chapter Announcement
@include version.texi
The GNUstep Makefile Package version @value{GNUSTEP-MAKE-VERSION} is now available.
@section What is the GNUstep makefile package?
The makefile package is a simple, powerful and extensible way to
write makefiles for a GNUstep-based project. It allows the user to
write a project without having to deal with the complex issues
associated with configuration, building, installation, and packaging.
It also allows the user to easily create cross-compiled binaries.
@set ANNOUNCE-ONLY
@include news.texi
@clear ANNOUNCE-ONLY
@section Obtaining gnustep-make
You can get the gstep-make-@value{GNUSTEP-MAKE-VERSION}.tar.gz
distribution file at @url{ftp://ftp.gnustep.org/pub/gnustep/core}
Please log bug reports on the GNUstep project page
@url{http://savannah.gnu.org/bugs/?group=gnustep} or send bug
reports to @email{bug-gnustep@@gnu.org}.

View file

@ -1,2 +0,0 @@
@bye
\bye

View file

@ -1,622 +0,0 @@
\input texinfo @c -*-texinfo-*-
@c A FAQ for GNUstep
@node Top, Compatibility, (dir), (dir)
@chapter GNUstep Frequently Asked Questions with Answers
Last updated @today{}.
Please send corrections to @email{gnustep-maintainer@@gnu.org}. Also look
at the user FAQ for more user oriented questions.
@menu
* Compatibility::
* Compiling and Developing::
* GNU Objective C Compiler and Runtime::
* GNUstep Base Library::
* GNUstep GUI Library::
* GNUstep DisplayGhostScript Server::
@end menu
@c ****************************************************************
@c Compiling
@node Compatibility, Compiling and Developing, Top, Top
@section Compatibility
@menu
* Is it easy to port OPENSTEP programs to GNUstep?::
* How about porting between Cocoa and GNUstep?::
* Tools for porting::
* Can I transfer archived data from GNUstep to Cocoa?::
* Does distributed objects work between GNUstep and Cocoa?::
* Is there an Interface Builder for GNUstep?::
* Can I use my original NIB files?::
* Can one use the hybrid "Objective-C++"::
* Is there a plan to support Java/YellowBox Bindings?::
* What if I compile GNUstep under OPENSTEP/MacOS X?::
* Is the Objective C API for GTK related?::
* How about implementing parts of the Application Kit with GTK?::
@end menu
@node Is it easy to port OPENSTEP programs to GNUstep?, How about porting between Cocoa and GNUstep?, Compatibility, Compatibility
@subsection Is it easy to port OPENSTEP programs to GNUstep?
It is probably easy for simple programs. There are some portability
tools to make this easier, or rewrite
the Makefiles yourself. You will also have to translate the NIB files
(if there are any) to GNUstep model files using the nib2gmodel program
(from @url{ftp://ftp.gnustep.org/pub/gnustep/dev-apps}).
@node How about porting between Cocoa and GNUstep?, Tools for porting, Is it easy to port OPENSTEP programs to GNUstep?, Compatibility
@subsection How about porting between Cocoa and GNUstep?
It's easier from GNUstep to Cocoa than Cocoa to GNUstep. Cocoa is
constantly changing, much faster than GNUstep could hope to keep
up. They have added extensions and new classes that aren't available in
GNUstep yet. Plus there are some other issues. If you start with
Cocoa:
@itemize @bullet
@item Use #ifndef GNUSTEP for Apple only code.
@item Do not use CoreFoundation
@item Do not use Objective-C++ (except with gcc 4.1 or later)
@item Do not use Quicktime or other proprietary extension
@item GNUstep should be able to read Cocoa nib files automatically, so there
is no need to port these, although you might want to have GNUstep specific
versions of them anyway.
@end itemize
See also @url{http://mediawiki.gnustep.org/index.php/Writing_portable_code}
for more information.
@node Tools for porting, Can I transfer archived data from GNUstep to Cocoa?, How about porting between Cocoa and GNUstep?, Compatibility
@subsection Tools for porting
While the programming interface should be almost transparent between
systems (expect for the unimplemented parts, of course), there are a
variety of other files and tools that are necessary for porting
programs.
@table @samp
@item ni2gmodel
This program coverts nib files from any system, such as OPENSTEP to
a gmodel format file. Gmodel can be read directly by GNUstep or you can
convert this to a more GNUstep-native gorm format (using the Gorm interface
modeller). Note this is not necessary for Cocoa nibs - GNUstep can read these
directly.
@item Renaissance
GNUstep Renaissance allows you to describe your user
interfaces (that is, the windows in your application, and the buttons,
boxes, textfields, etc in the windows) in simple and intuitive XML
files, using an open, standard format describing the logic of the
interface. It has a number of advantages over the proprietary nib format:
portability, open standard, easy localization, themeability, and
intelligent autolayout.
@item Gorm
The equivalent of the Interface Builder in GNUstep. It might be easier to
just recreate the interface using Gorm rather than dealing with
translations.
@item OpenStep2GNUConverter and nfmake
Two programs that allow you to convert PB files to GNUstep makefiles or
compile a program on GNUstep directly from PB files. They probably work
only for OPENSTEP systems and are a little out-of-date.
@item StepTalk
A portable scripting environment that lets your do scripting in almost
any language you like.
@end table
@node Can I transfer archived data from GNUstep to Cocoa?, Does distributed objects work between GNUstep and Cocoa?, Tools for porting, Compatibility
@subsection Can I transfer archived data from GNUstep to Cocoa?
Apple's archiving format is proprietary and not documented, so this
poses a problem for anyone wanting to implement compatibility with it.
However, even if we reverse engineered the format, there are enough
differences between the class and ivar layouts to make this sort of
compatibility difficult. Not to mention the fact that we would
constantly have to keep up with the changes Apple made.
The new keyed archiving using XML file formats is much more portable,
and GNUstep is trying to maintain compatibility with Apple with this
type of archiving.
@node Does distributed objects work between GNUstep and Cocoa?, Is there an Interface Builder for GNUstep?, Can I transfer archived data from GNUstep to Cocoa?, Compatibility
@subsection Does distributed objects work between GNUstep and Cocoa?
See the answer to the previous question (on archive compatibility) for
why this won't work either.
@node Is there an Interface Builder for GNUstep?, Can I use my original NIB files?, Does distributed objects work between GNUstep and Cocoa?, Compatibility
@subsection Is there an Interface Builder for GNUstep?
There is an Interface Builder for GNUstep called Gorm. A lot of work
has been put into it and it works very well. You can download it from
the ftp site or via http. The Project Manager ProjectCenter is also
available.
@node Can I use my original NIB files?, Can one use the hybrid "Objective-C++", Is there an Interface Builder for GNUstep?, Compatibility
@subsection Can I use my original NIB files?
No - NeXT/Apple never documented their nib format, so GNUstep supports
both the 'gmodel' format (which stores information as text
(property-lists) and can therefore be edited 'by hand') and binary
archive format (which can be edited by Gorm). There IS a conversion
tool called nib2gmodel that can be compiled under OPENSTEP to convert
nib files to GNUstep gmodel files.
Newer nib files use XML format keyed archiving and may possibly be
transportable, although differences in class and ivar layout may still
make this difficult.
@node Can one use the hybrid "Objective-C++", Is there a plan to support Java/YellowBox Bindings?, Can I use my original NIB files?, Compatibility
@subsection Can one use the hybrid "Objective-C++"
No. at present the GNU compiler (gcc) does not support
"Objective-C++". Soon to br released gcc 4.1 will have this support, but
it is still unclear how robust it will be.
@node Is there a plan to support Java/YellowBox Bindings?, What if I compile GNUstep under OPENSTEP/MacOS X?, Can one use the hybrid "Objective-C++", Compatibility
@subsection Is there a plan to support the Java/YellowBox Bindings?
Yes. The GNustep Java library/bridge called JIGS is available now. JIGS
is a free (LGPL) Java Interface for GNUstep; it can automatically wrap
Objective-C libraries based on GNUstep, making them accessible directly
to the Java programmer as if they were Java libraries. As a side effect,
it is also possible to use the whole engine in the reverse way: JIGS
provides a high level API to allow Objective-C programmers to start java
virtual machines inside GNUstep Objective-C code and access java objects
in the java virtual machine transparently, as if they were objective-C
objects.
@node What if I compile GNUstep under OPENSTEP/MacOS X?, Is the Objective C API for GTK related?, Is there a plan to support Java/YellowBox Bindings?, Compatibility
@subsection What if I compile GNUstep under OPENSTEP/MacOS X?
GNUstep uses the X-windows display postscript extension.
The interface to that is not the same as the interface to the
OPENSTEP/MacOS-X windows server. While someone could write a
backend library to provide the interface, nobody has bothered to
date.
You can, however, use a GNUstep program with an X11 server
running on MacOSX.
@node Is the Objective C API for GTK related?, How about implementing parts of the Application Kit with GTK?, What if I compile GNUstep under OPENSTEP/MacOS X?, Compatibility
@subsection Is the Objective C API for GTK related?
No. GNUstep applications provide their GUI via the OpenStep
API, which provides fully object-oriented access to GUI manipulation.
The object-oriented nature of the libraries and language make it much easier
for new users to create their own subclasses rather than simply using the
supplied widgets as in other frameworks.
@node How about implementing parts of the Application Kit with GTK?, , Is the Objective C API for GTK related?, Compatibility
@subsection How about implementing parts of the Application Kit with GTK?
Yes and No - The GNUstep architecture provides a single,
platform-independent, API for handling all aspects of GUI interaction
(implemented in the gstep-gui library), with a backend architecture
that permits you to have different display models (display postscript,
X-windows, win32, berlin ...) while letting you use the same code
for printing as for displaying. Use of GTK in the frontend gui
library would remove some of those advantages without adding any.
That being said, a backend library could be implemented using gtk
if anyone wanted to do so. Since the frontend library handles most
of the work involved in implementing the OpenStep API, the backend
is a relatively thin layer and the advantages of GTK over direct
xlib or win32 calls is likely to be minimal. If/when GTK is ported
to more systems, a backend written using it could be a valuable
asset - volunteers are, as always, welcome.
@c ****************************************************************
@c Compiling
@node Compiling and Developing, GNU Objective C Compiler and Runtime, Compatibility, Top
@section Compiling and Developing
@menu
* How can I get started programming?::
* How can I help with GNUstep?::
* Helping develop GNUstep::
* Helping document GNUstep::
* How do I assign my contribution?::
* How do I update the task list?::
* How do I start writing tests?::
* How do I start writing applications?::
* How can I help with the GNUstep website?::
* Why doesn't GDB support Objective-C?::
@end menu
@node How can I get started programming?, How can I help with GNUstep?, Compiling and Developing, Compiling and Developing
@subsection How can I get started programming?
Good question. Read the tutorials at the GNUstep web site. Also look at
Apple's documentation (pointers in the Resources section on the GNUstep web
site.)
@node How can I help with GNUstep?, Helping develop GNUstep, How can I get started programming?, Compiling and Developing
@subsection How can I help with GNUstep?
@enumerate
@item Write/debug library code
@item Write documentation
@item Update the task list and library headers
@item Write applications
@end enumerate
Let people know what you are doing. Break your project up into
the smallest units you can. Feed back frequent updates to the
maintainers. Ask questions in the discussion mailing list.
Do remember that any changes beyond a few lines of code (or
documentation) require a disclaimer or copyright assignment to the
Free Software Foundation before they can be incorporated into the
project. Get in touch with the GNUstep maintainer about this.
Don't start with large-scale reorganization of anything - instead,
get a general idea in mind of what you want to do, and proceed as
much as possible with incremental changes that don't break anything
- that way you can make those incremental changes available to the
rest of the community at frequent intervals.
Don't be afraid to give up - there is no shame in finding out that
you have take on too large/complex a project. It's much better to
'resign' and take on a smaller job than to just stop without telling
anyone.
Please document the code you add or change (using autogsdoc comments
that begin with a slash and two asterices). But PLEASE, do not copy from
the Apple documentation or any other copyrighted documentation.
@node Helping develop GNUstep, Helping document GNUstep, How can I help with GNUstep?, Compiling and Developing
@subsection Helping develop GNUstep
There is plenty of unimplemented stuff in the gui library and
backend libraries that volunteers can work on - just browse through
the code and see if it conforms to the documentation.
Specific tasks are noted in the developers section on the GNUstep
website.
Once you have coded something, you could always write a testcase
and documentation for it :-)
@node Helping document GNUstep, How do I assign my contribution?, Helping develop GNUstep, Compiling and Developing
@subsection Helping document GNUstep
All class documentation is written directly in the source code itself
and translated using the autogsdoc program. See the source code and
documentation for autogsdoc for information on documenting the classes.
Newcomers could write documentation for individual classes by
comparing the OpenStep specification, the MacOS-X documentation,
and the GNUstep source. Documentation should clearly note where
individual methods are specific to OpenStep, MacOS-X or are GNustep
extensions.
More experienced people could write documentation on general
programming topics, and tutorials for new users.
Anyone willing to write documentation, either tutorials for using
GNUstep, or reference documentation for individual classes, should
either write it in gsdoc or as plain ascii text for someone else to
format into gsdoc.
GNUstep documentation should have copyright assigned to the Free
Software Foundation.
@node How do I assign my contribution?, How do I update the task list?, Helping document GNUstep, Compiling and Developing
@subsection How do I assign my contribution?
Everyone who contributes more than 20 lines of code or so needs to
sign a copyright assignment so that the FSF can have legal control of
the copyright. This makes it easier to defend against any copyright
infringement suits. Contact the GNUstep maintainer for instructions
on how to do this or download and fill out the form
@url{http://www.gnustep.org/resources/request-assign.future}
(instructions are included).
@node How do I update the task list?, How do I start writing tests?, How do I assign my contribution?, Compiling and Developing
@subsection How do I update the task list?
The task list (@url{http://savannah.gnu.org/pm/?group_id=99}) is
supposed to tell people what jobs are waiting to be done. Feel free to
add to it or update the tasks that are there (you need to create a login
for yourself first).
One job of major importance that pretty much anyone can do is to
look for jobs to add to the task list. In the case of methods from
the OpenStep specification or the MacOS-X documentation not being
present in the GNUstep libraries, it is also helpful to add the
method prototypes to the library header files.
Send any changes or additions to @email{bug-gnustep@@gnu.org}.
A beginner can look through the MacOS-X documentation, the OpenStep
specification and the GNUstep source and contribute task items.
If a class or method is in MacOS-X and OpenStep but is not in
GNUstep - it's a high priority TODO and should at least be added
to the GNUstep headers and a dummy version added to the source with
a FIXME comment.
If a class or method is in MacOS-X but not OpenStep or GNUstep -
it's a low priority TODO. It should be added to the GNUstep headers
bracketed in @code{#ifndef STRICT_OPENSTEP}
If a class or method is in OpenStep but not in MacOS-X or GNUstep
- it's a low priority TODO. It should be added to the GNUstep
headers bracketed in @code{#ifndef STRICT_MACOS_X}
There are a couple of people working on this already, so it's a
good idea to get in touch with Adam or Richard to coordinate efforts.
@node How do I start writing tests?, How do I start writing applications?, How do I update the task list?, Compiling and Developing
@subsection How do I start writing tests?
You can write testcases - where the libraries fail tests, you
could either fix the problem, or add it to the task list.
To write testcases, you need to use svn to install the latest
GNUstep sourcecode you can find. Then checkout the
'gnustep/tools/testsuite' module from svn.
@node How do I start writing applications?, How can I help with the GNUstep website?, How do I start writing tests?, Compiling and Developing
@subsection How do I start writing applications?
You can either look at the links on the GNUstep website for
applications that have been started, and email their owners to
volunteer to help, or you can start your own project.
@node How can I help with the GNUstep website?, Why doesn't GDB support Objective-C?, How do I start writing applications?, Compiling and Developing
@subsection How can I help with the GNUstep website?
Talk to Adam Fedor @email{fedor@@gnu.org}, the maintainer.
The GNUstep website is kept as a CVS module, but the largest portions
of it (the FAQ and the Documentation) are actually
generated from files in the individual GNUstep packages.
Many highly changeable portions are kept on the Wiki, so anyone can change
these (first you need to get write access, though).
If you want to update the FAQ or documentation - grab
the latest snapshot of the GNUstep core you can find, update it
from the svn repository, and work with the contents of the appropriate
documentation directory.
If you want to work on other parts of the website, you can grab a copy
of the website via anonymous CVS. See
@url{http://savannah.gnu.org/cvs/?group_id=99} for instructions on how
to do that.
The main task with the website is to figure out which bits are
out-of-date (or wrong) and update/mark-as-outdated as required.
@node Why doesn't GDB support Objective-C?, , How can I help with the GNUstep website?, Compiling and Developing
@subsection Why doesn't GDB support Objective-C?
Um, it does. As of GDB 6.0, gdb supports debugging of Objective-C
code.
@c -------------------------------------------------------------------
@node GNU Objective C Compiler and Runtime, GNUstep Base Library, Compiling and Developing, Top
@section GNU Objective C Compiler and Runtime
@menu
* What is the Objective C Runtime?::
@end menu
@node What is the Objective C Runtime?, , GNU Objective C Compiler and Runtime, GNU Objective C Compiler and Runtime
@subsection What is the Objective C Runtime?
The Objective C Runtime Library provides C functions and data structures
required to execute an Objective C program.
The GNU Objective C Runtime Library offers everything NeXT's runtime
does, including Categories, Protocols, @samp{+poseAs:}, thread-safety,
class initialization on demand, delayed loading of classes, and
initialization of static instances (such as @@""-style string objects).
It also has several differences over NeXT's implementation:
@itemize @bullet
@item GNU's runtime provides ``selector-types'' along with each
selector; NeXT's does not. A selector-type is a string that describes
the C variable types for the method's return and argument values. Among
other uses, selector-types is extremely helpful for fast distributed
objects implementations, (see GNUstep Base Library Section, below).
@item Many of the GNU functions have different names than their
corresponding NeXT functions; the GNU names conform to the GNU coding
standards. The GNUstep base library contains a compatibility header that
works with both runtimes. You should use functions there or use OpenStep
Foundation methods/functions instead of the basic
runtime functions so that you code can run with either system.
Apple has recently added new functionality to their runtime, including
built-in exception handling, etc. Hopefully these will be ported to the
GNU runtime in the future.
@end itemize
@c ------------- GNU Compiler and Objective C Runtime Library -------
@node GNUstep Base Library, GNUstep GUI Library, GNU Objective C Compiler and Runtime, Top
@section GNUstep Base Library
@menu
* What is the GNUstep Base Library?::
* What is base's current state of development?::
* What are the features of GNU Distributed Objects?::
@end menu
@node What is the GNUstep Base Library?, What is base's current state of development?, GNUstep Base Library, GNUstep Base Library
@subsection What is the GNUstep Base Library?
The GNUstep Base Library is a library of general-purpose, non-graphical
Objective C objects. For example, it includes classes for strings,
object collections, byte streams, typed coders, invocations,
notifications, notification dispatchers, moments in time, network ports,
remote object messaging support (distributed objects), event loops, and
random number generators.
It provides functionality that aims to implement the non-graphical
portion of the OpenStep standard (the Foundation library).
@node What is base's current state of development?, What are the features of GNU Distributed Objects?, What is the GNUstep Base Library?, GNUstep Base Library
@subsection What is its current state of development?
GNUstep base is currently stable and, to the best of our knowledge,
implements all of the OpenStep functionality (except for a few classes
that we feel are not useful). It also implements most all of the new
Cocoa classes. However we do some things, like scripting, differently,
so we don't implement all the Cocoa classes.
@node What are the features of GNU Distributed Objects?, , What is base's current state of development?, GNUstep Base Library
@subsection What are the features of GNU Distributed Objects?
GNU Distributed Objects has many of the features of other distributed
objects implementations, but, since it is free software, it can be
ported to platforms for which other distributed objects implementations
are not available.
[ NOTE: The GNU distributed object facilities have the same ease-of-use
as Apple's; be warned, however, that they are not compatible with each
other. They have different class hierarchies, different instance
variables, different method names, different implementation strategies
and different network message formats. You cannot communicate with a
Apple NSConnection using a GNU NSConnection.
Here are some differences between GNU distributed objects and Apple's
distributed objects: Apple NSDistantObject asks it's remote
target for the method encoding types and caches the results; GNU
NSDistantObject gets the types directly from the local GNU "typed selector"
mechanism if the information is known locally and only queries the remote
target or caching encoding types when using a method that is not known to
the local process. The NSProxy for the remote root object always has name
and, once set, you cannot change the root object of a NSConnection; the GNU
Proxy for the remote root object has a target address value just like
all other Proxy's, and you can change the root object as many times as
you like. ].
@c --------------------------GNUstep Base Library----------------------
@node GNUstep GUI Library, GNUstep DisplayGhostScript Server, GNUstep Base Library, Top
@section GNUstep GUI Library
@menu
* What is the GUI Library?::
* Explain the organization of the front- and back-ends::
* What is the current state of development of the front-end?::
* What is the current state of development of the back-ends?::
@end menu
@node What is the GUI Library?, Explain the organization of the front- and back-ends, GNUstep GUI Library, GNUstep GUI Library
@subsection What is the GUI Library?
The GNUstep GUI Library is a library of objects useful for writing
graphical applications. For example, it includes classes for drawing
and manipulating graphics objects on the screen: windows, menus,
buttons, sliders, text fields, and events. There are also many
peripheral classes that offer operating-system-independent interfaces to
images, cursors, colors, fonts, pasteboards, printing. There are also
workspace support classes such as data links, open/save panels,
context-dependent help, spell checking.
It provides functionality that aims to implement the @samp{AppKit}
portion of the OpenStep standard. However the implementation has
been written to take advantage of GNUstep enhancements wherever possible.
@node Explain the organization of the front- and back-ends, What is the current state of development of the front-end?, What is the GUI Library?, GNUstep GUI Library
@subsection Explain the organization of the front- and back-ends
The GNUstep GUI Library is divided into a front- and back-end. The
front-end contains the majority of implementation, but leaves out the
low-level drawing and event code. A back-end can override whatever
methods necessary in order to implement low-level drawing event
receiving. Different back-ends will make GNUstep available on various
platforms. The default GNU back-end will run on top of X Windows.
Other back-ends could allow GNUstep to run on OpenGL and WIN32
graphics/event platforms. Much work will be saved by this clean
separation between front- and back-end, because it allows different
platforms to share the large amount of front-end code.
@node What is the current state of development of the front-end?, What is the current state of development of the back-ends?, Explain the organization of the front- and back-ends, GNUstep GUI Library
@subsection What is the current state of development of the front-end?
Many of the classes are well implemented, if not thoroughly tested.
See the GNUstep web sites and read status information contained in the
distribution for the most up-to-date information.
@node What is the current state of development of the back-ends?, , What is the current state of development of the front-end?, GNUstep GUI Library
@subsection What is the current state of development of the back-ends?
There are several backends currently available:
@table @samp
@item xlib
This backend runs on X11 and uses standard xlib
calls for implementing drawing. It works well, but is limited in many
areas due to the limitations of xlib drawing.
@item art
This is a very good backend that draws using the libart package and
freetype with near PostScript quality and functionality. It is currently
the standard backend (as long as the required libraries are installed).
@item w32
This backend works on Windows and uses basic Windows drawing
@item cairo
An up-and-coming backend. It still relies on unpublished functions in
the cairo library so using it is not for the beginner.
@end table
@c ------------------------- GNUstep GUI Library -----------------------
@node GNUstep DisplayGhostScript Server, , GNUstep GUI Library, Top
@section GNUstep DisplayGhostScript Server
@menu
* What is the Display Ghostscript Server?::
* What is DGSs current state of development?::
* What is the relationship between the Display Ghostscript Server and X Windows?::
@end menu
@node What is the Display Ghostscript Server?, What is DGSs current state of development?, GNUstep DisplayGhostScript Server, GNUstep DisplayGhostScript Server
@subsection What is the Display Ghostscript Server?
It is a free implementation of a Display PostScript server based on the
GNU Ghostscript program developed by Aladdin Enterprises and now owned by artofcode LLC.
At one point, GNUstep was using this for display purposes. However the
development of DGS has stopped as it is too difficult to maintain and
no one wanted to work on it. Now we are using other means of drawing.
@node What is DGSs current state of development?, What is the relationship between the Display Ghostscript Server and X Windows?, What is the Display Ghostscript Server?, GNUstep DisplayGhostScript Server
@subsection What is its current state of development?
GNU contracted with Aladdin Enterprises to add some key features to GNU
Ghostscript so it could be used as a DPS server. This work has mostly
been done, although Aladdin did not completely finish the work that they
were contracted for. (Because the work took longer than specified and
was not completed, Aladdin agreed to waive approximately $10,000 in
promised fees for the work that was actually done and delivered.) DGS
works fairly well with a single context. Alpha channel and compositing
doesn't work.
@node What is the relationship between the Display Ghostscript Server and X Windows?, , What is DGSs current state of development?, GNUstep DisplayGhostScript Server
@subsection What is the relationship between the Display Ghostscript Server and X Windows?
Display Ghostscript runs on top of X Windows.
@c ------------------ GNUstep DisplayGhostScript Server ---------------
@bye
\bye

View file

@ -1,904 +0,0 @@
\input texinfo @c -*-texinfo-*-
@c GNUstep filesystem hierarchy
@c %**start of header
@setfilename filesystem.info
@settitle GNUstep Filesystem Hierarchy Document
@c %**end of header
@setcontentsaftertitlepage
@smallbook
@titlepage
@title GNUstep Filesystem Hierarchy Document
@vskip 0pt plus 1filll
Last Update: @today{}
@page
@vskip 0pt plus 1filll
Authors: Nicola Pero, Tim Harrison, Martin Brecher, Adam Fedor,
Richard Frith-Macdonald
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
any later version published by the Free Software Foundation.
@end titlepage
@node Top, The System Domain, (dir), (dir)
@top GNUstep Filesystem Hierarchy
@menu
* The System Domain::
* The Local Domain::
* The Network Domain::
* The Users Domain::
* Structure of a Domain::
* Configuration::
@end menu
On GNUstep, there are four separate places where files related to
GNUstep are installed: these places are called "domains". These four
domains are the System domain, the Network domain, the Local domain,
and the User domain. Each of these domains serve a special purpose.
You can install various things in each domain; for example
applications, tools or libraries. Each domain should allow you to
install the different types of resources or compiled software.
Starting with gnustep-make version 2.0, each GNUstep installation can
specify how these domains should be organized and mapped to
directories on the filesystem. A way to map GNUstep domains to
filesystem directories is called a ``filesystem layout''. A
filesystem layout will specify in which directory System Tools are to
be installed, for example. The description of various filesystem
layouts (and instructions on how to create your own) can be found in
the @file{FilesystemLayouts} directory inside gnustep-make.
Applications, libraries, bundles and other resources are normally
looked up in domains following a fixed order: User first, then Local,
then Network, then System.
In this document we give a general overview of the GNUstep domains and
of the interesting locations in a domain. We also describe the
default GNUstep filesystem layout.
The default GNUstep filesystem layout is a good way to discuss
domains, because it is very simple: in the default GNUstep filesystem
layout, every domain is mapped to a single directory on disk. For
example, the System domain could be mapped to the
@file{/usr/GNUstep/System} directory, and everything that is installed
into the System domain is then installed into some subdirectory of
@file{/usr/GNUstep/System}. Before gnustep-make version 2.0, this was
the only filesystem layout available.
Please keep in mind that (starting from gnustep-make version 2.0) this
is not the case for a general filesystem layout; for example a typical
FHS (Unix) layout might be installing System Tools in @file{/usr/bin}
and System Admin Tools in @file{/sbin}.
@node The System Domain, The Local Domain, Top, Top
@section The System Domain
The System domain contains all files which were included in the
default GNUstep installation or distribution. These files are
normally managed by the distribution/packaging system used to install
GNUstep; thus, making modifications to these files is highly
discouraged. In addition, only the system administrator ('root' on
most UNIX systems) should have permissions to write to that domain.
Normally you can expect to find gnustep-make and the basic GNUstep
libraries (Foundation and AppKit) in this domain, and also essential
system applications (the Workspace Manager, the Editor, applications
related to system administrative tasks), developer applications
(Project Center and Gorm, as well as header files), essential
extensions (bundles for XML, SSL, RTF, etc), as well as all software
installed by the manufacturer of your distribution.
In the default GNUstep filesystem layout, the entire System domain is
found in the @file{System} folder of the GNUstep installation.
@node The Local Domain, The Network Domain, The System Domain, Top
@section The Local Domain
The Local domain is meant as the location for installing software
which was not included with your GNUstep distribution and which you or
your local sysadmin compile and/or install manually. These may
include third party applications, custom extension libraries and their
related header files, etc. Every software (except for gnustep-make,
gnustep-base, gnustep-gui and gnustep-back which for historical
reasons by default install into the System domain) should install by
default into the Local domain, so that if you download a source
tarball of the software and you install it, it installs by default in
the right place for this operation (the Local domain). Distributions
should override this default manually when they package the software
they want to distribute as part of their distribution, so that in that
case the software is installed in the System domain.
In the default GNUstep filesystem layout the entire Local domain is
installed as the @file{Local} folder of your GNUstep installation.
@node The Network Domain, The Users Domain, The Local Domain, Top
@section The Network Domain
The @file{Network} domain is optional and is usually coalesced with
the @file{Local} domain by default; this is particularly appropriate
for use on stand alone systems such as your home workstation.
However, the Network domain can be of great use in networked,
corporate environments. Its main purpose is to hold files exported
from a central server in your network or from other workstations.
Most times, remote directories containing applictations or general
data used by several workstations in the network are mounted using the
Network File System (NFS). Such usage gives administrators the
possibility of providing application or resources to a vast number of
workstations while only having to manage the software in one place.
This is especially useful when workstations are used by several users
with different tasks and requirements. If you want to take advantage
of the Network domain, you need to use a filesystem layout with
a separate Network domain.
In the default GNUstep filesystem layout the Network domain is the
same as the Local domain; if you want to use the Network domain there
is a separate GNUstep filesystem layout variant with a separate
Network domain, in which case the entire Network domain is installed
as the @file{Network} folder of your GNUstep installation.
@node The Users Domain, Structure of a Domain, The Network Domain, Top
@section The Users Domain
The main purpose of the Users domain is to hold GNUstep related files
which shall not be available to other users on the system but only to
the user owning them. This includes the GNUstep defaults database
(which holds system settings, application preferences and customized
resources) as well as temporary data related to services and file type
associations for programs. It also holds user installed applications
and tools (each user has the ability to install their own version of
an application or tool).
In the default GNUstep filesystem layout (and in most other layouts
too) the User domain is completely contained in a subdirectory of the
user's home directory called @file{GNUstep}.
@node Structure of a Domain, Configuration, The Users Domain, Top
@section Structure of a Domain
In this section we examine the interesting locations in a domain. We
will enumerate the locations, and discuss what should be installed in
each location, and how they are mapped to directories on disk in the
GNUstep filesystem layout and in a general filesystem layout.
@menu
* The GNUstep Filesystem Layout::
* Accessing Domain Locations::
* Applications::
* Admin Applications::
* Web Applications::
* Tools::
* Admin Tools::
* Library::
* Headers::
* Libraries::
* Documentation::
* Documentation (Info)::
* Documentation (Man Pages)::
* Folders inside Library::
@end menu
@node The GNUstep Filesystem Layout, Accessing Domain Locations, Structure of a Domain, Structure of a Domain
@subsection The GNUstep Filesystem Layout
We quickly present the GNUstep filesystem layout for a domain first
because it is an essential reference for all discussions on the
structure of a domain.
The GNUstep filesystem layout is the simplest layout, in which every
domain is a directory on disk, and all locations in the domain are
subdirectories of the domain.
In that case, a domain has the following structure on disk:
@example
Domain/
Applications/
Applications/Admin/
Defaults/ (User domain only)
Library/
Library/ApplicationSupport/
Library/ApplicationSupport/Palettes
Library/Bundles/
Library/Documentation/
Library/Documentation/info/
Library/Documentation/man/
Library/Frameworks/
Library/Headers/
Library/Libraries/
Library/Libraries/Java/
Library/Libraries/Resources/
Library/Makefiles/ (System domain only)
Library/Services/
Library/Tools/Resources/
Library/WebApplications/
Tools/
Tools/Admin/
@end example
The terminology for locations is derived from this filesystem layout,
and it can be useful to use this directory structure as a reference
point for all discussions. For example, every domain must have a
'Library' location.
@node Accessing Domain Locations, Applications, The GNUstep Filesystem Layout, Structure of a Domain
@subsection Accessing Domain Locations
In order to install and run software that uses some resources, you
need to be able to install the resources in the appropriate location,
and your software needs to be able to locate these resources when it's
running.
Since domain locations can be mapped to arbitrary locations on disk,
you must use the appropriate gnustep-make and gnustep-base facilities
to install things in the right place and to find things at runtime.
GNUstep-make creates makefile variables for all the domain locations.
If you need to perform some custom installation for your software, you
must use these variables to make sure your installation will work with
all filesystem layouts. For example, the @file{Applications} location
for the domain where the software will be installed is available as
the @code{GNUSTEP_APPS} variable. You can also access the locations
for specific domains by using the variables
@code{GNUSTEP_SYSTEM_APPS}, @code{GNUSTEP_NETWORK_APPS},
@code{GNUSTEP_LOCAL_APPS} and @code{GNUSTEP_USER_APPS}.
GNUstep-base provides you with the
@code{NSSearchPathForDirectoriesInDomains()} function that allows you
to retrieve the domain locations at runtime. You must lookup
resources only via this function. For example, the
@file{Applications} location can be found by using the
@code{NSApplicationDirectory} directory key, so you can use it in your
software to iterate over all the @file{Applications} directories in
the various domains searching for an application.
In general, all interesting domain locations have a set of variables
defined in gnustep-make (such as @code{GNUSTEP_APPS},
@code{GNUSTEP_SYSTEM_APPS}, @code{GNUSTEP_NETWORK_APPS},
@code{GNUSTEP_LOCAL_APPS} and @code{GNUSTEP_USER_APPS}) and a
corresponding directory key in gnustep-base (such as
@code{NSApplicationDirectory}).
When examining the various domain locations, we will explicitly
mention the gnustep-make variables and the gnustep-base directory keys
that can be used to access them.
@node Applications, Admin Applications , Accessing Domain Locations, Structure of a Domain
@subsection Applications
The @file{Applications} location contains applications. Applications
are programs that typically have a GUI interface and contain
associated resource files, such as images, localization files and
other program elements.
Important applications which are part of GNUstep and which are often
distributed as part of a core GNUstep distribution include:
@example
Gorm.app
ProjectCenter.app
GWorkspace.app
Preferences.app
@end example
In GNUmakefiles, the @file{Applications} location is available via the
@code{GNUSTEP_APPS} variable, which is the Applications location for
the domain in which the software will be installed. You can also
reference the locations in the various domains directly by using the
variables @code{GNUSTEP_SYSTEM_APPS}, @code{GNUSTEP_NETWORK_APPS},
@code{GNUSTEP_LOCAL_APPS} and @code{GNUSTEP_USER_APPS}.
In gnustep-base, the @file{Applications} locations are available by
using the @code{NSApplicationDirectory} directory key for
@code{NSSearchPathForDirectoriesInDomains()}.
@node Admin Applications, Web Applications, Applications, Structure of a Domain
@subsection Admin Applications
The @file{Admin Applications} location contains applications that are
only useful to the system administrator. A normal user wouldn't have
enough privileges to use these applications in a useful way.
In GNUmakefiles, the @file{Admin Applications} location is available
via the @code{GNUSTEP_ADMIN_APPS} variable, which is the Admin
Applications location for the domain in which the software will be
installed. You can also reference the locations in the various
domains directly by using the variables
@code{GNUSTEP_SYSTEM_ADMIN_APPS}, @code{GNUSTEP_NETWORK_ADMIN_APPS},
@code{GNUSTEP_LOCAL_ADMIN_APPS} and @code{GNUSTEP_USER_ADMIN_APPS}.
In gnustep-base, the @file{Admin Applications} locations are available
by using the @code{NSAdminApplicationDirectory} directory key for
@code{NSSearchPathForDirectoriesInDomains()}.
@node Web Applications, Tools, Admin Applications, Structure of a Domain
@subsection Web Applications
The @file{Web Applications} location contains web applications that
were created using GSWeb or SOPE. These are programs contained with
their resources in small wrappers very similar to standard
applications.
In GNUmakefiles, the @file{Web Applications} location is available via
the @code{GNUSTEP_WEB_APPS} variable, which is the Web Applications
location for the domain in which the software will be installed. You
can also reference the locations in the various domains directly by
using the variables @code{GNUSTEP_SYSTEM_WEB_APPS},
@code{GNUSTEP_NETWORK_WEB_APPS}, @code{GNUSTEP_LOCAL_WEB_APPS} and
@code{GNUSTEP_USER_WEB_APPS}.
In gnustep-base, the @file{Web Applications} locations are available
by using the @code{GSWebApplicationDirectory} directory key for
@code{NSSearchPathForDirectoriesInDomains()}.
@node Tools, Admin Tools, Web Applications, Structure of a Domain
@subsection Tools
The @file{Tools} location contains tools and executable scripts. Tools
are programs which generally have a command-line interface. Most are
not meant to be used by the average user.
Important tools which are part of GNUstep and which are often
distributed as part of a core GNUstep distribution include:
@example
openapp
defaults
gdomap
gdnc
gpbs
@end example
In GNUmakefiles, the @file{Tools} location is available via the
@code{GNUSTEP_TOOLS} variable, which is the location for the domain in
which the software will be installed. You can also reference the
locations in the various domains directly by using the variables
@code{GNUSTEP_SYSTEM_TOOLS}, @code{GNUSTEP_NETWORK_TOOLS},
@code{GNUSTEP_LOCAL_TOOLS} and @code{GNUSTEP_USER_TOOLS}.
In gnustep-base, the @file{Tools} locations are available by using the
@code{GSToolsDirectory} directory key for
@code{NSSearchPathForDirectoriesInDomains()}.
@node Admin Tools, Library, Tools, Structure of a Domain
@subsection Admin Tools
The @file{Admin Tools} location contains tools and executable scripts
that are only useful to the system administrator. A normal user
wouldn't have enough privileges to use these applications in a useful
way.
In GNUmakefiles, the @file{Admin Tools} location is available via the
@code{GNUSTEP_ADMIN_TOOLS} variable, which is the location for the
domain in which the software will be installed. You can also
reference the locations in the various domains directly by using the
variables @code{GNUSTEP_SYSTEM_ADMIN_TOOLS},
@code{GNUSTEP_NETWORK_ADMIN_TOOLS}, @code{GNUSTEP_LOCAL_ADMIN_TOOLS}
and @code{GNUSTEP_USER_ADMIN_TOOLS}.
In gnustep-base, the @file{Admin Tools} locations are available by
using the @code{GSAdminToolsDirectory} directory key for
@code{NSSearchPathForDirectoriesInDomains()}.
@node Library, Headers, Admin Tools, Structure of a Domain
@subsection Library
The @file{Library} location contains most of the resources that are
located and loaded at runtime. These resources are organized in
folders (directories) inside @file{Library}; the most important
@file{Library} folders will be described later on.
Like all systems inspired by OpenStep, resources are mostly organized
in bundles and small wrappers that contain both machine-dependent
files (such as executables or loadable object files) and general
machine-independent resources (such as images or text files). For
this reason, the @file{Library} location will contain both
machine-dependent and machine-independent files.
The structure of the folders within Library is the same in all
filesystem layouts, with a few exceptions: in the GNUstep filesystem
layout, the @code{Libraries}, @code{Headers}, @code{Documentation} and
@code{WebApplications} folders are all inside @code{Library}, but this
is not necessarily true for other filesystem layouts.
Vice versa, it's common on other filesystem layouts (eg, FHS) to put
@code{Applications} and @code{Admin Applications} as folders inside
@code{Library}.
In GNUmakefiles, the @file{Library} location is available via the
@code{GNUSTEP_LIBRARY} variable, which is the location for the
domain in which the software will be installed. You can also
reference the locations in the various domains directly by using the
variables @code{GNUSTEP_SYSTEM_LIBRARY},
@code{GNUSTEP_NETWORK_LIBRARY}, @code{GNUSTEP_LOCAL_LIBRARY} and
@code{GNUSTEP_USER_LIBRARY}.
In gnustep-base, the @file{Library} locations are available by
using the @code{NSLibraryDirectory} directory key for
@code{NSSearchPathForDirectoriesInDomains()}.
@node Headers, Libraries, Library, Structure of a Domain
@subsection Headers
The @code{Headers} location contains header files associated with a
library located in @code{Libraries}.
In GNUmakefiles, the @file{Headers} location is available via the
@code{GNUSTEP_HEADERS} variable, which is the location for the
domain in which the software will be installed. You can also
reference the locations in the various domains directly by using the
variables @code{GNUSTEP_SYSTEM_HEADERS},
@code{GNUSTEP_NETWORK_HEADERS}, @code{GNUSTEP_LOCAL_HEADERS} and
@code{GNUSTEP_USER_HEADERS}.
In gnustep-base, the @file{Headers} location is not currently
available.
@node Libraries, Documentation, Headers, Structure of a Domain
@subsection Libraries
The @code{Libraries} location contains libraries (shared/static object
files that are linked into programs). (NOTE: In the GNUstep
filesystem layout, the Libraries directory being in Library may sound
somewhat redundant, however, it could be read as "a Library of shared
libraries").
In the GNUstep filesystem layout, the @code{Library/Libraries} folder
contains two other folders: @code{Resources} and @code{Java}. It's
important to notice that when the @code{Libraries} location is moved
elsewhere, these folders are not moved; they will still be in
@code{Library/Libraries/Resources} and @code{Library/Libraries/Java}.
In GNUmakefiles, the @file{Libraries} location is available via the
@code{GNUSTEP_LIBRARIES} variable, which is the location for the
domain in which the software will be installed. You can also
reference the locations in the various domains directly by using the
variables @code{GNUSTEP_SYSTEM_LIBRARIES},
@code{GNUSTEP_NETWORK_LIBRARIES}, @code{GNUSTEP_LOCAL_LIBRARIES} and
@code{GNUSTEP_USER_LIBRARIES}.
In gnustep-base, the @file{Libraries} locations are available by using
the @code{GSLibrariesDirectory} directory key for
@code{NSSearchPathForDirectoriesInDomains()}.
@node Documentation, Documentation (Info), Libraries, Structure of a Domain
@subsection Documentation
The @code{Documentation} location contains documentation for
libraries, applications, etc.
In GNUmakefiles, the @file{Documentation} location is available via
the @code{GNUSTEP_DOC} variable, which is the location for the
domain in which the software will be installed. You can also
reference the locations in the various domains directly by using the
variables @code{GNUSTEP_SYSTEM_DOC}, @code{GNUSTEP_NETWORK_DOC},
@code{GNUSTEP_LOCAL_DOC} and @code{GNUSTEP_USER_DOC}.
In gnustep-base, the @file{Documentation} locations are available by
using the @code{NSDocumentationDirectory} directory key for
@code{NSSearchPathForDirectoriesInDomains()}.
@node Documentation (Info), Documentation (Man Pages), Documentation, Structure of a Domain
@subsection Documentation (Info)
The @code{Documentation (Info)} location contains documentation in
info format.
In GNUmakefiles, the @file{Documentation (Info)} location is available
via the @code{GNUSTEP_DOC_INFO} variable, which is the location for
the domain in which the software will be installed. You can also
reference the locations in the various domains directly by using the
variables @code{GNUSTEP_SYSTEM_DOC_INFO},
@code{GNUSTEP_NETWORK_DOC_INFO}, @code{GNUSTEP_LOCAL_DOC_INFO} and
@code{GNUSTEP_USER_DOC_INFO}.
In gnustep-base, the @file{Documentation (Info)} locations are not
currently available.
@node Documentation (Man Pages), Folders inside Library, Documentation (Info), Structure of a Domain
@subsection Documentation (Man Pages)
The @code{Documentation (Man Pages)} location contains Unix man pages.
In GNUmakefiles, the @file{Documentation (Man Pages)} location is
available via the @code{GNUSTEP_DOC_MAN} variable, which is the
location for the domain in which the software will be installed. You
can also reference the locations in the various domains directly by
using the variables @code{GNUSTEP_SYSTEM_DOC_MAN},
@code{GNUSTEP_NETWORK_DOC_MAN}, @code{GNUSTEP_LOCAL_DOC_MAN} and
@code{GNUSTEP_USER_DOC_MAN}.
In gnustep-base, the @file{Documentation (Man)} locations are not
currently available.
@node Folders inside Library, , Documentation (Man Pages), Structure of a Domain
@subsection Folders inside Library
In this section we discuss the standard folders that are available
inside the @code{Library} location. To find any of these folders,
just find the location of @code{Library} and then append the folder
name (for example, in a GNUmakefile you can access the 'ColorPickers'
folder of the installation domain as
@code{$GNUSTEP_LIBRARY/ColorPickers}).
Some of the folders can also be accessed using direct variables, such
as @code{GNUSTEP_BUNDLES}. You should prefer using these direct
variables if you can because they are more future-proof (in case some
of the folders become independent from @code{Library} in the future).
All such cases should be documented here.
@menu
* ApplicationSupport::
* Bundles::
* ColorPickers::
* Colors::
* DTDs::
* DocTemplates::
* Fonts::
* Frameworks::
* Images::
* Libraries/Java::
* Libraries/Resources::
* KeyBindings::
* PostScript::
* Services::
* Sounds::
* Tools/Resources::
@end menu
@node ApplicationSupport, Bundles, Folders inside Library, Folders inside Library
@subsubsection ApplicationSupport
This directory contains bundles and other resources that are provided
for an application, but that are not specifically distributed with
that application. For instance, these may be third-party resources for
an application.
For example, modules for the Preferences application may be stored
here, in a @file{Preferences} subdirectory. In particular, Palettes
for Gorm are stored in @file{ApplicationSupport/Palettes}.
In GNUmakefiles, this location is available via the
@code{GNUSTEP_APPLICATION_SUPPORT} variable, which is the location for
the domain in which the software will be installed. You can also
reference the locations in the various domains directly by using the
variables @code{GNUSTEP_SYSTEM_APPLICATION_SUPPORT},
@code{GNUSTEP_NETWORK_APPLICATION_SUPPORT},
@code{GNUSTEP_LOCAL_APPLICATION_SUPPORT} and
@code{GNUSTEP_USER_APPLICATION_SUPPORT}.
In gnustep-base, the @code{ApplicationSupport} locations are available
by using the @code{NSApplicationSupportDirectory} directory key for
@code{NSSearchPathForDirectoriesInDomains()}.
@node Bundles, ColorPickers, ApplicationSupport, Folders inside Library
@subsubsection Bundles
This directory contains bundles. Bundles are collections of executable
code and associated resources that may be loaded at runtime by an
application or tool. Note: this directory is depreciated. Use
ApplicationSupport to install bundles that can be used by an
application.
In GNUmakefiles, this location is available via the
@code{GNUSTEP_BUNDLES} variable, which is the location for the domain
in which the software will be installed. You can also reference the
locations in the various domains directly by using the variables
@code{GNUSTEP_SYSTEM_BUNDLES}, @code{GNUSTEP_NETWORK_BUNDLES},
@code{GNUSTEP_LOCAL_BUNDLES} and @code{GNUSTEP_USER_BUNDLES}.
In gnustep-base, you can access the @code{Bundles} location as a
folder inside the @code{Library} location.
@node ColorPickers, Colors, Bundles, Folders inside Library
@subsubsection ColorPickers
This directory contains bundles that are used by the color picking
system. They may include code that implements picking colors from a
color wheel, a custom defined list of colors, etc.
This folder is accessed as the @code{ColorPickers} folder inside
@code{Library}.
@node Colors, DTDs, ColorPickers, Folders inside Library
@subsubsection Colors
This directory contains files that define specific color mappings for
use within libraries or applications that require color definitions.
This folder is accessed as the @code{Colors} folder inside
@code{Library}.
@node DTDs, DocTemplates, Colors, Folders inside Library
@subsubsection DTDs
This directory contains any Document Type Definitions
required for document parsing.
This folder is accessed as the @code{DTDs} folder inside
@code{Library}.
@node DocTemplates, Fonts, DTDs, Folders inside Library
@subsubsection DocTemplates
This directory contains text templates for automatic documentation, as
generated by autodoc. Any additional documentation template types
must be placed in this directory, as a central location for
documentation template types. Any templates installed within this
directory must have an extension indicating what type of documentation
system it is referenced by (ie. .gsdoc for the GNUstep implementation
of autodoc).
This folder is accessed as the @code{DocTemplates} folder inside
@code{Library}.
@node Fonts, Frameworks, DocTemplates, Folders inside Library
@subsubsection Fonts
This directory contains fonts and files for organizing font information.
This folder is accessed as the @code{Fonts} folder inside
@code{Library}.
@node Frameworks, Images, Fonts, Folders inside Library
@subsubsection Frameworks
This directory contains frameworks. Frameworks are a type of bundle,
which include, within their directory structure, a shared library
providing a specific functionality (or group of related
functionalities), and all resources required by that shared library.
All frameworks must have the extension @file{framework}, to indicate
their usage.
Use of frameworks is generally discouraged, as it is difficult to
support them in a clean way on multiple platforms. Bundles are a
better method of organizing shared collections of resources and code.
In GNUmakefiles, this location is available via the
@code{GNUSTEP_FRAMEWORKS} variable, which is the location for the
domain in which the software will be installed. You can also
reference the locations in the various domains directly by using the
variables @code{GNUSTEP_SYSTEM_FRAMEWORKS},
@code{GNUSTEP_NETWORK_FRAMEWORKS}, @code{GNUSTEP_LOCAL_FRAMEWORKS} and
@code{GNUSTEP_USER_FRAMEWORKS}.
In gnustep-base, the @code{Frameworks} locations are available by
using the @code{GSFrameworksDirectory} directory key for
@code{NSSearchPathForDirectoriesInDomains()}.
@node Images, Libraries/Java, Frameworks, Folders inside Library
@subsubsection Images
@node Libraries/Java, Libraries/Resources, Images, Folders inside Library
@subsubsection Libraries/Java
This directory contains Java classes. If you are using Java with
GNUstep, you probably want to make sure these directories are in your
CLASSPATH.
In GNUmakefiles, this location is available via the
@code{GNUSTEP_JAVA} variable, which is the location for the domain in
which the software will be installed. You can also reference the
locations in the various domains directly by using the variables
@code{GNUSTEP_SYSTEM_JAVA}, @code{GNUSTEP_NETWORK_JAVA},
@code{GNUSTEP_LOCAL_JAVA} and @code{GNUSTEP_USER_JAVA}.
In gnustep-base, you can access the @code{Libraries/Java} location as
the @code{Libraries/Java} folder inside the @code{Library} location.
@node Libraries/Resources, KeyBindings, Libraries/Java, Folders inside Library
@subsubsection Libraries/Resources
This directory contains resources used by shared libraries. In
GNUstep a shared library can have an associated resource bundle (a
bundle only composed of resources, with no object file), which is then
installed into this directory.
For example, @code{gnustep-base} will get its resource bundle
installed into
@code{GNUSTEP_SYSTEM_LIBRARY/Libraries/Resources/gnustep-base}.
In GNUmakefiles, this location is available via the
@code{GNUSTEP_RESOURCES} variable, which is the location for the
domain in which the software will be installed. You can also
reference the locations in the various domains directly by using the
variables @code{GNUSTEP_SYSTEM_RESOURCES},
@code{GNUSTEP_NETWORK_RESOURCES}, @code{GNUSTEP_LOCAL_RESOURCES} and
@code{GNUSTEP_USER_RESOURCES}.
In gnustep-base, you can access the resource bundle associated with a
library by using the @code{[NSBundle +bundleForLibrary:]} method (it
is a GNUstep extension).
@node KeyBindings, PostScript, Libraries/Resources, Folders inside Library
@subsubsection KeyBindings
@node PostScript, Services, KeyBindings, Folders inside Library
@subsubsection PostScript
This directory contains directories for specific PostScript document
types and definitions, allowing applications written using the GNUstep
development environment to display PostScript documents, or
communicate with printers using PostScript.
This folder is accessed as the @code{PostScript} folder inside
@code{Library}.
@node Services, Sounds, PostScript, Folders inside Library
@subsubsection Services
This directory contains bundles that are specifically built to provide
functionality between different programs (for example, spell checking,
creation of a note from text within an email application). Services
that are installed on the system must an extension of ".service".
In GNUmakefiles, this location is available via the
@code{GNUSTEP_SERVICES} variable, which is the location for the domain
in which the software will be installed. You can also reference the
locations in the various domains directly by using the variables
@code{GNUSTEP_SYSTEM_SERVICES}, @code{GNUSTEP_NETWORK_SERVICES},
@code{GNUSTEP_LOCAL_SERVICES} and @code{GNUSTEP_USER_SERVICES}.
In gnustep-base, you can access the @code{Services} location as a
folder inside the @code{Library} location.
@node Sounds, Tools/Resources, Services, Folders inside Library
@subsubsection Sounds
This directory contains sound files.
@node Tools/Resources, , Sounds, Folders inside Library
@subsubsection Tools/Resources
This directory contains resources used by tools. In GNUstep a tool
can have an associated resource bundle (a bundle only composed of
resources, with no object file), which is then installed into this
directory.
For example, a tool called @code{myTool} will get its resource bundle
installed into
@code{GNUSTEP_SYSTEM_LIBRARY/Tools/Resources/myTool}.
In GNUmakefiles, this location is available as the
@file{Tools/Resources} folder inside the @code{Library} location.
In gnustep-base, you can access the resource bundle associated with
your tool by using the @code{[NSBundle +mainBundle]} method (this
semantic is a GNUstep extension).
@c TODO: Mention special directories, for example location of user defaults
@c TODO: Mention special directories, for example location of makefiles
@node Configuration, , Structure of a Domain, Top
@section Configuration
GNUstep supports arbitrary filesystem layouts to map the locations in
the various domains to directories on the filesystem.
When you run gnustep-make's ./configure program you can use the
--with-layout=xxx flag to select the filesystem layout that you prefer
(choosing between the ones in the FilesystemLayouts directory, or
creating your own in there!).
For most users, this is all they need to know.
In this section we'll go more into the details of how the filesystem
layout system internally works; this is only useful if you need to do
something advanced with it, typically because you have multiple
GNUstep installations or you are trying to do some custom packaging of
GNUstep.
The filesystem layout is determined by the GNUstep configuration file
(or if that is not present, by default values built into the GNUstep
make and base packages when they were configured and built).
The location of the GNUstep configuration file is built in to the make and
base packages when they are configured using the --with-config-file option
to the configure script. The path specified must be an absolute one for
the make package, but may also be a path relative to the location of the
base library itsself (as dynamically linked into applications) for the
base package.
However, the location of the configuration file may also be specified
using the GNUSTEP_CONFIG_FILE environment variable, overriding the value
built in to the package, at any time when using the make package to build
or install software. Support for the environment variable may also
be enabled for the make package when its configure script is run.
The GNUSTEP_CONFIG_FILE environment variable is particularly useful if
you have multiple installations and need to easily switch between
them.
@menu
* File Format::
* Windows (MINGW)::
@end menu
@node File Format, Windows (MINGW), Configuration, Configuration
@subsection File Format
By default, the configuration file is called GNUstep.conf and exists
in /etc/GNUstep on a Unix-like system. This file is in a format
suitable for being 'sourced' by the standard unix (Bourne) shell,
consisting of lines of the form key=value, comments (everything on a
line from the first hash (#) onwards), or blank lines.
This is very convenient on unix-like systems, but needs care for windows users.
If a value contains whitespace or backslash characters (or the hash which
would start a comment) it needs to be quoted by enclosing the whole value
in single or double quotes. An alternative for values containing backslashes
(the norm for a windows path) is to double up each backslash in an unquoted
value.
The valid values for the keys in the GNUstep configuration file are
documented in the GNUstep.conf file itself. Please check the
GNUstep.conf.in file in your gnustep-make distribution for an
up-to-date list of all the variables that you can change with
explanations of what they do.
@node Windows (MINGW), , File Format, Configuration
@subsection Windows (MINGW)
On ms-windows, for software development, you are likely to want to have an
extra configuration file. This is because of the limitations of the
make program (used to build and install software).
Basically the issue is that the make package doesn't really like the
colons and backslashes in windows paths (using them is error prone)
and can't tolerate whitespace in file names. So you want to do all
the building in a unix-style environment using only unix-style paths.
On MSYS/MinGW this is done naturally by using the standard unix-style
/etc/GNUstep/GNUstep.conf config file, where the location is inside
the MSYS unix-style emulation system. This is what is normally done
by gnustep-make, so there is nothing special you need to do here.
On the other hand, the base library (and all applications since they are
built using it) wants to work with native windows paths so that applications
behave naturally as far as the end users are concerned, and therefore needs a
configuration file containing windows-style paths rather than unix-like
ones.
So, you need a different config file to be used by gnustep-base at
runtime. And this is enabled by default -- in fact gnustep-base will
use ./GNUstep.conf as config file on MinGW, where the location is
relative to the location of the gnustep-base.dll.
In other words, gnustep-make will use C:/xxx/etc/GNUstep/GNUstep.conf
(where 'xxx' is the MSYS installation path), while gnustep-base will
use a GNUstep.conf file in the same directory as the gnustep-base.dll.
This ./GNUstep.conf file normally does not even exist; gnustep-base's
./configure will hardcode into gnustep-base.dll relative paths to all
resources (relative from the installation location of
gnustep-base.dll). If you modify the filesystem layout or relocate
gnustep-base.dll, you should add a GNUstep.conf file with
gnustep-base.dll that contains the relative locations of the
directories (relative to the location of gnustep-base.dll).
It is recommended that this ./GNUstep.conf always contains relative
paths to make relocation easier.
@bye
\bye

View file

@ -1,498 +0,0 @@
\input texinfo @c -*-texinfo-*-
@c GNUstep installation instructions
@c %**start of header
@setfilename gnustep-howto.info
@settitle GNUstep HOWTO
@c %**end of header
@set HOWTO
@setcontentsaftertitlepage
@smallbook
@titlepage
@title GNUstep HOWTO
@subtitle Installing the GNUstep developement system
@vskip 0pt plus 1filll
@emph{This document explains how to build the different components of
the GNUstep core libraries.}
Last Update: @today{}
@page
@vskip 0pt plus 1filll
Copyright @copyright{} 1996 - 2007 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
any later version published by the Free Software Foundation.
@end titlepage
@ifinfo
@format
GNUstep HOWTO
*************
Last Update: @today{}
This document explains how to build the different components of the
GNUstep core libraries and GNUstep Launchpad.
Copyright (C) 1996 - 2007 Free Software Foundation, Inc.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Public License, Version 1.0 or
any later version published by the Free Software Foundation.
@end format
@end ifinfo
@include version.texi
@node Top, Introduction, (dir), (dir)
@menu
* Introduction::
* Preliminaries::
* Compiling and Installing::
* Additional Installation::
* Tools and Applications::
* Machine Specific::
* Source via SVN::
@end menu
@node Introduction, Preliminaries, Top, Top
@chapter Introduction
This document explains how to build the GNUstep core libraries. The
core libraries, along with associated tools and other files provide
everything necessary for a working GNUstep system.
In order to easily compile and debug GNUstep projects, you will need the
GNU Objective-C compiler @samp{GCC} as well as various other GNU packages.
You will need at least 80Mb of hard disk space (150Mb prefered) in order
to compile the GNUstep core libraries.
@node Preliminaries, Compiling and Installing, Introduction, Top
@chapter Summary
In order to compile the libraries, you need to compile and install
the following packages first (if you don't already have them):
@itemize @bullet
@item gcc (Version 2.95 or greater, 3.0.4 or greater recommended)
@item GNU make (Version 3.75 or greater)
@item gdb (Version 6.0 or greater recommended), if you plan to do any debugging
@end itemize
You may also need to install some of the following libraries and
packages described below. Most of these packages are optional, but some
are required.
@table @samp
@item ffcall libraries (HIGHLY RECOMMENDED)
This is a library that provides stack-frame handling for NSInvocation
and NSConnection. This library is highly recommended. The previous
builtin method for stack frame handling is no longer supported and may
be removed in the future. 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.
@item libffi library (ALTERNATIVE RECOMMENDATION)
This is a library that provides stack frame handling for NSInvocation
and NSConnection similar to ffcall.
Use this instead of ffcall. You don't need both.
@item libxml2 (RECOMMENDED)
The libxml library (Version 2) is used to translate some of the
documentation for GNUstep and to provide suport for MacOS-X compatible
XML-based property-lists. It is not required, but you have to explicitly
disable use of XML when compiling GNUstep base if you do not have it.
@item libxslt (OPTIONAL)
Stylesheet support for use with XML.
@item openssl (OPTIONAL)
The openssl library is used to provide support for https connections by
the NSURL and HSURLHandle classes. This functionality is
compiled as a separate bundle since the OpenSSL license is not
compatible with GPL, and in the hopes that if someone writes an openssl
replacement, it can quickly be used by creating another bundle.
@item libiconv (OPTIONAL)
Note: Do not install this library unless you are sure you need it.
You probably don't need it except perhaps on MinGW.
Unicode support functions (iconv) come with glibc version 2.1 or greater. If
you don't have glibc (try iconv --version), you can get the separate
libiconv library from
@url{http://clisp.cons.org/~haible/packages-libiconv.html}. However,
neither one is required to use GNUstep.
@item The TIFF library (libtiff) (Version 3.4beta36 or greater) (REQUIRED)
The GUI library uses this to handle loading and saving TIFF images.
@item The JPEG library (libjpeg) (RECOMMENDED)
The GUI library uses this to handle loading JPEG images.
@item The PNG library (libpng) (RECOMMENDED)
The GUI library uses this to handle loading PNG images.
@item gif or ungif (OPTIONAL)
The GUI library uses either one of these libraries to load GIF images.
@item aspell (OPTIONAL)
The GUI library uses this to handle spell checking.
@item cups (OPTIONAL)
The GUI library uses this to handle interface to the CUPS print servers.
@item audiofile (OPTIONAL)
The GUI library uses this for playing sound files.
@item portaudio (OPTIONAL)
The GUI library uses this for the sound server. Use v19, which has
several API changes since the previous version. v19 hasn't actually been
formally released, but several distributions (SuSE, etc) use it anyway.
@item freetype2 (RECOMMENDED, REQUIRED for art backend)
This is used for font information. Freetype2 cache API is in flux.
GNUstep tries to account for
this, but if you get errors about undefined FTC_ symbols, you might be
using an unsupported version of freetype.
@item libart_lgpl2 (REQUIRED for art backend only)
Drawing library for the art backend.
@item WindowMaker (Version >= 0.62) (OPTIONAL)
GNUstep and WindowMaker work together to provide a consistant interface.
Although it is not required, GNUstep will work much better if you use it
with the WindowMaker window manager.
Get WindowMaker from @url{http://www.windowmaker.info}.
@item gnustep-objc package (REQUIRED BUT ONLY for gcc version < 3.0 or MINGW/Cygwin)
Note: Do not install this library unless you are sure you need it.
You probably don't need it except on MinGW and Cygwin (regardless of the
gcc version you have).
This is a special version of the Objective-C runtime that is compiled
as a shared library.
It is available at @url{ftp://ftp.gnustep.org/pub/gnustep/libs} which
compiles using the GNUstep Makefile package (so you don't have to get the
entire gcc dist). Make sure to set the THREADING variable in the GNUmakefile.
It's possible to compile the library static (make shared=no) and
just copy to the place where the gcc libobjc library is (type gcc -v to
get this location). Note you have to install gnustep-make (below) before
installing this library.
@item GDB (OPTIONAL)
GDB can be obtained from @url{ftp://ftp.gnu.org/gnu/gdb}. As of release
6.0, gdb has special support for debugging Objective-C programs.
@item TeX (OPTIONAL)
You need a TeX implementation, like tetex, to compile some of the
documentation (although most of that is available on the web).
@end table
@node Compiling and Installing, Additional Installation, Preliminaries, Top
@chapter Compiling and Installing the packages
Get the following individual packages:
@itemize @bullet
@item gnustep-make
@item gnustep-base
@item gnustep-gui
@item gnustep-back
@end itemize
See @url{http://www.gnustep.org} for information on where to get these
packages.
Make sure you install (if necessary) all the previously mentioned
libraries first before configuring and building GNUstep.
You should install these packages as root (read special note for the
gnustep-base library, below, if you cannot do this).
For installation on specific systems, read the machine specific
instructions at the end of this document or appropriate README files in
the gnustep-make Documentation directory (such as README.MingW for Windows).
@menu
* Core Package::
@end menu
@node Core Package, , Compiling and Installing, Compiling and Installing
@section Installing the Core Libraries
The GNUstep packages uses the Autoconf mechanism for configuration; it
checks some host capabilities which are used by all GNUstep software.
The first package you will compile is gnustep-make. To configure
gnustep-make just type:
@example
./configure
@end example
The GNUstep makefile package can be configured to use different types
of filesystem layouts. By default, GNUstep is installed with a
GNUstep filesystem layout into /usr/GNUstep. That is a good,
recommended default if you don't have an opinion on which filesystem
layout to use.
But you can also install it somewhere else by using the prefix
parameter; the following command makes /usr/local/GNUstep the root
directory:
@example
./configure --prefix=/usr/local/GNUstep
@end example
You can also install GNUstep using an FHS layout (or some other filesystem layout
of your choice) by using the with-layout parameter; the following command
configures GNUstep to use the standard FHS (unix) filesystem layout:
@example
./configure --with-layout=fhs
@end example
In this document we will always present examples that assume that you
are using the default GNUstep filesystem layout in /usr/GNUstep. If
you are using a different layout, you will need to make the obvious
changes.
@menu
* Alternate Library Setup::
* Individual Packages::
@end menu
@node Alternate Library Setup, Individual Packages, Core Package, Core Package
@subsection Alternate Library Setup
Read the installation instructions in the Makefile package (make) for more
installation options. Make sure you use the same
configuration options when configuring each GNUstep library.
@node Individual Packages, , Alternate Library Setup, Core Package
@subsection Building the Package
To build the individual packages, use this familiar set of commands for
each pacakge (add any additional options you decide upon):
@example
./configure
make
make install
@end example
Start with the Makefile Package (gnustep-make). After installing
gnustep-make you need to execute GNUstep's shell configuration script,
as follows:
@example
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh
@end example
before proceeding any further.
NOTE for gcc 2.X or MinGW users: Now install gnustep-objc. Before building
gnustep-objc, edit the @file{GNUmakefile} and set the @var{THREADING}
variable to the thread library used on your system (usually its posix,
but you can leave it at single if you don't need threads). At this point
you should probably re-configure, make and install gnustep-make, so it
can pick up on any threading information that gnustep-objc provides.
Now install gnustep-base, gnustep-gui and finally gnustep-back.
NOTE: If you are trying to install the packages without root permission,
you may need to change one thing in the base library. Edit the file
gnustep-base/Tools/gdomap.h to uncomment the last line and modify
the specified port number to a port which you @emph{know} is not in use on
your network. You should only do this if absolutely necessary since
making this change will break communications with any systems where
an identical change has not been made. Also, the standard gdomap port
is the one officially registered with IANA and is reserved for use by
gdomap - it should only be changed if you can't get your system
administrator to start the gdomap server using it.
@node Additional Installation, Tools and Applications, Compiling and Installing, Top
@chapter Additional Installation
@menu
* Environment Setup::
* GNUstep Home::
* Time Zone::
* GNUstep deamons::
@end menu
@node Environment Setup, GNUstep Home, Additional Installation, Additional Installation
@section Environment Setup
You need to make sure your environment is properly setup in order to
compile and run GNUstep software. The steps to setup your environment
differ slightly depending on your filesystem layout.
There is a way of setting up your environment that always works:
sourcing the @file{GNUstep.sh} shell script before using GNUstep. The
shell script @file{GNUstep.sh} is located in the Makefile package; you
may want to add it to your shell startup file (such as
@file{.profile}). For instance, if you installed GNUstep with the
default GNUstep filesystem layout in @file{/usr/GNUstep}, then adding
@example
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh
@end example
in your @file{.profile} file will work (Note the period at the
beginning of the line, and the space between the period and the
following path; if you installed GNUstep somewhere else, you need to
replace @file{/usr/GNUstep/System/Library/Makefiles} with the path to
your @file{GNUstep.sh} script). The script defines environment
variables that are needed to find GNUstep files and executables.
Users of csh need to use the @file{GNUstep.csh} script. Read the make
package @file{README} for more info. Some systems, like GNU/Linux have
an @file{/etc/profile.d} directory where scripts can be executed
automatically. If you want to set up GNUstep for every user on your
system, you can try copying/linking the @file{GNUstep.sh} there. For
csh or tcsh, try
@example
source /usr/GNUstep/System/Library/Makefiles/GNUstep.csh
@end example
Finally, in most filesystem configuration it's also possible to
manually set up your environment by setting PATH, the linker library
paths and the @code{GNUSTEP_MAKEFILES} variable (instead of using
@file{GNUstep.sh}). For example, on GNU/Linux (with a default GNUstep
installation), instead of sourcing @file{GNUstep.sh} you could manually
add the Tools directories to your PATH:
@example
PATH="/usr/GNUstep/System/Tools:/usr/GNUstep/Local/Tools:$PATH"
@end example
manually add @file{/usr/GNUstep/System/Library/Libraries} and
@file{/usr/GNUstep/Local/Library/Libraries} to your
@file{/etc/ld.so.conf} file (don't forget to run @code{ldconfig} every
time you install a library), and set the environment variable
@code{GNUSTEP_MAKEFILES} when you want to compile something:
@example
GNUSTEP_MAKEFILES=/usr/GNUstep/System/Library/Makefiles
@end example
@node GNUstep Home, Time Zone, Environment Setup, Additional Installation
@section GNUstep Home
Your home GNUstep directory should be created automatically the first
time you use a GNUstep tool or application. This is where user
defaults are kept as well as other user configuration files. User
installed apps, libraries, etc are also here (if the default user
directory is used). By default this is the directory @file{GNUstep}
under your home directory, but you can change this (see the
gnustep-make installation documentation).
@node Time Zone, GNUstep deamons, GNUstep Home, Additional Installation
@section Time Zone
In most cases, GNUstep should be able to determine your time zone, if
you have already set it up correctly when setting up your
computer. However, in some cases this might fail or the correct
information may not be available. You can set it manually using the
GNUstep defaults utility to set @kbd{Local Time Zone} to your local time
zone. Type something like @kbd{defaults write NSGlobalDomain "Local
Time Zone" GB}. Where @kbd{GB} is a time zone abbreviation.
See
@file{/usr/GNUstep/System/Library/Libraries/gnustep-base/Versions/1.14/Resources/NSTimeZones/zones/}
(or equivalent on your system depending on your filesystem layout) for
typical time zones.
@node GNUstep deamons, , Time Zone, Additional Installation
@section GNUstep deamons
Set up your system to execute some GNUstep deamons. This is optional
because if you don't do this, they will be started automatically when
you run your first GNUstep app:
@itemize @bullet
@item gdomap - Put this in a system startup file, like @file{/etc/rc.local} or @file{/etc/rc.d/rc.local} (customize for your system)
@example
if [ -f /usr/GNUstep/System/Tools/gdomap ]; then
/usr/GNUstep/System/Tools/gdomap
fi
@end example
@item gdnc - Start after sourcing @file{GNUstep.sh} (e.g. in .profile)
@item gpbs - Same as with gdnc, make sure X-Windows is running.
@item make_services - Not a deamon, but a tool that needs to be run everytime
you install a new Application or service. This is NOT run automatically.
@end itemize
@example
if [ `gdomap -L GDNCServer | grep -c Unable` == 1 ]; then
echo "Starting GNUstep services..."
gdnc
gpbs
fi
make_services
@end example
@node Tools and Applications, Machine Specific, Additional Installation, Top
@chapter Test Tools and Applications
Example applications are located in the gstep-examples package. To
build these, just uncompress and untar this package, cd to the
appropriate directory, and type make. You will need to install the
GNUstep core libraries first before doing this.
To run the examples. Use the openapp utility that is part of the
GNUstep makefile package (and stored in
@file{/usr/GNUstep/System/Tools}). Usage is:
@example
openapp application_name [additional arguments to app]
@end example
Good Luck!
@node Machine Specific, Source via SVN, Tools and Applications, Top
@chapter Machine Specific Instructions
@include machines.texi
@node Source via SVN, , Machine Specific, Top
@chapter Getting Libraries via SVN
If you didn't get one of the snapshots, or if you want to be sure to
stay on the bleading edge, then you should get the libraries via SVN. Go
to @url{http://www.gnustep.org/resources/sources.html} for information on how
to get the sourcecode.
If you haven't already done so, change to the directory, where you
want the source to reside. To checkout all of the GNUstep repository,
type
@example
svn co http://svn.gna.org/svn/gnustep/modules
@end example
To check out only the @file{core}, which contains all the GNUstep core
libraries:
@example
svn co http://svn.gna.org/svn/gnustep/modules/core
@end example
After you have checked out the source you can compile it as
usual. To update the source, go into the directory of the source tree
you want to update, for example, go into 'base', and type:
@example
svn update
@end example
You don't have to re-checkout after you have the source, just update!
@bye
\bye

View file

@ -1,23 +0,0 @@
if (defined($ENV{'GNUSTEP_WEB_ROOT'})) {
open(TMPL,"<$ENV{'GNUSTEP_WEB_ROOT'}/secondary.html.template");
$tmpl=join("",<TMPL>);
close(TMPL);
($T2H_EXTRA_HEAD,$T2H_AFTER_BODY_OPEN,$T2H_PRE_BODY_CLOSE_BAD) =
($tmpl=~/<\/title>(.*)<\/head>.*<body>(.*<div id="main">).*(<\/div><\/div>.*)<\/body>/sm);
}
else {
# this is added inside <HEAD></HEAD> after <TITLE> and some META NAME stuff
# can be used for <style> <script>, <meta> tags
$T2H_EXTRA_HEAD = '<link rel="stylesheet" href="../gnustep-main.css"
type="text/css" />';
}
######################################################################
sub nothing
{
}
$T2H_print_About = \&nothing;
$T2H_SECTION_NAVIGATION = 0;
#$T2H_print_navigation = \&nothing;

View file

@ -1,382 +0,0 @@
@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
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 this distribution.
This should be the first GNUstep package you install. Before
installing this package, install ffcall or libffi and any other
libraries that GNUstep may need (see the GNUstep-HOWTO). Read and
follow the instructions on setting up the GNUstep environement below.
Then install gnustep-base.
Make sure you've read the machine-specific instructions for your
particular operating system and CPU. These instructions come with the
GNUstep-HOWTO and are also located at the GNUstep web site at
@url{http://www.gnustep.org}.
Quick installation instructions:
@example
./configure
make
make install
@end example
This will use the default GNUstep filesystem layout (in other words,
all of GNUstep will end up installed into /usr/GNUstep). If you are on a
Unix system, another popular option is
@example
./configure --with-layout=fhs
make
make install
@end example
which will use the FHS (in other words, all of GNUstep will end up
installed into /usr/local).
To make and install the documentation:
@example
cd Documentation
make
make install
@end example
@node Configuration, Installation, Introduction, Top
@section Configuration
The GNUstep packages 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 to know which filesystem layout to
use when installing; this determines the way that various directories
in the GNUstep domains (SYSTEM, NETWORK, LOCAL, USER) are mapped to
local directories on disk. In the FilesystemLayouts/README file you
can find detailed information on filesystem layouts.
To specify a filesystem layout, use the --with-layout=xxx option. The
default is
@example
./configure --with-layout=gnustep
@end example
which installs GNUstep in /usr/GNUstep using the GNUstep layout (that
is, /usr/GNUstep/System, /usr/GNUstep/Local, ~/GNUstep). Another
popular option is '--with-layout=fhs' which installs gnustep-make into
FHS directories based on /usr/local. Check the FilesystemLayouts for
more options.
If you want to install the same layout but in a different location
(for example, /opt/gnustep), you can use --prefix=xxx,
@example
./configure --prefix=/opt/gnustep
@end example
If you're confused and want to see exactly what directories will be
used for a certain choice of ./configure flags, have a look at the
GNUstep.conf file that is generated by ./configure. It will list the
full paths to all the relevant GNUstep directories that would be used
if you install the software with that configuration.
To see more options you can use with configure, type
@example
./configure --help
@end example
Look particularly at the end of the list that configure gives, as these
options are specific to GNUstep. Some of these are described below.
With the GNUstep packages you can use various switches, such as shared
and debug, to control compilation. for example, ``make shared=no
debug=yes'' compiles using static libraries with debugging
information. (Make sure you use the same switches for every package you
compile, and also when you install).
@menu
* Backend Bundles::
* Alternate Libraries::
* Alternate Thread Library::
* Flat Structure::
* Cross-Compiling::
@end menu
@node Backend Bundles, Alternate Libraries, Configuration, Configuration
@subsection Backend Bundles
By default, the gnustep-make package specifies that GUI backends are built
as a bundle and loaded in at runtime. This allows one to switch backends
by simply redefining a user default. If you do not want this behavior (for
instance, if bundles do not work on your platform), it can be disabled using
@example
--disable-backend-bundle
@end example
in the arguments to configure.
@node Alternate Libraries, Alternate Thread Library, Backend Bundles, Configuration
@subsection Alternate Library Setup
You can specify compilation of alternate libraries by using the
with-library-combo option.
@example
./configure --with-library-combo=apple-gnu-gnu
@end example
to compile with Apple's runtime on Darwin, for example. See the DESIGN
document for more examples of the variety of library combos.
@node Alternate Thread Library, Flat Structure, Alternate Libraries, Configuration
@subsection Alternate Thread Library
You can specify compilation of an alternate thread library from the one that
is normally used (or if GNUstep does not know what your normal library is)
with the with-thread-lib option.
@example
./configure --with-thread-lib="-L/usr/local/lib -lgthread -lglib"
@end example
to use libgthread as your threading library. Note that the Objective-C
runtime (libobjc) must have a compatible threading backend in order to
use this threading library and you must set the appropriate threading backend
by hand in the GNUmakefile if you are using gnustep-objc. If you also need
to set compiler flags, use the CPPFLAGS variable when calling configure:
@example
CPPFLAGS="-I/usr/local/include" ./configure --with-thread-lib="-L/usr/local/lib -lgthread -lglib"
@end example
@node Flat Structure, Cross-Compiling, Alternate Thread Library, Configuration
@subsection Configuring for a non-flattened structure
GNUstep is normally configured to support a single target/combo. If you are
interested in supporting more than one target and/or combo, it's possible to
configure GNUstep to use a non-'flattened' directory structure.
You do this by supplying the @code{--disable-flattened} argument to configure.
You might also want to supply the @code{--enable-multi-platform} option.
In a flattened structure, files are stored at the top-level rather than
in a @code{$(GNUSTEP_CPU)/$(GNUSTEP_OS)/$(LIBRARY_COMBO)} subdirectory.
@node Cross-Compiling, , Flat Structure, Configuration
@subsection Configuring 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
GNUstep normally is configured to work with only one target. To work
with multiple targets, you'll need to add @code{--disable-flattened}
and @code{--enable-multi-platform} to the configure flags. Files for
the different targets will not be overwritten when you configure and install
the make package several times.
@example
./configure --disable-flattened --enable-multi-platform --target=i386-mingw32
make install
./configure --disable-flattened --enable-multi-platform --target=sparc-solaris2.5
make install
./configure --disable-flattened --enable-multi-platform --target=alpha-linux-gnu
make install
@end example
@node Installation, Setup, Configuration, Top
@section Installation
After you configure the GNUstep makefile package, you can go straight
into installation (there is nothing to compile):
@example
make install
@end example
After you have installed the GNUstep makefile package, there might
still be some minor administration to be performed, depending on your
configuration.
@node Setup, UserDomainSetup, Installation, Top
@section Setting up the GNUstep environment
GNUstep-make will install all programs and libraries in the
directories specified by the filesystem layout that you choose.
In here we explain how to set up your environment so that the
operating system can find the programs and libraries in these
directories.
The procedure depends on the type of layout (flattened or
non-flattened), and on the amount of advanced options that you want to
use.
@menu
* Flattened::
* Non-Flattened::
* UserDomainSetup::
* MultipleInstallations::
@end menu
@node Flattened, Non-Flattened, Setup, Setup
@subsection Flattened (default) Setup
In a flattened setup (the default unless you use the
--disable-flattened configure argument), you can use a simple setup
where you just need to make sure that the few program and library
directories are found by the shell/linker.
Check the description of your filesystem in FilesystemLayouts to find
precise simplified instructions for your layout.
In general, you need to your GNUSTEP_SYSTEM_TOOLS,
GNUSTEP_NETWORK_TOOLS and GNUSTEP_LOCAL_TOOLS to your PATH, and add
your GNUSTEP_SYSTEM_LIBRARIES, GNUSTEP_NETWORK_LIBRARIES and
GNUSTEP_LOCAL_LIBRARIES to your linker paths (which is /etc/ld.so.conf
on GNU/Linux).
To build software, you also need to set GNUSTEP_MAKEFILES. (PS: This requirement
is likely to go away soon)
@node Non-Flattened, , Flattened, Setup
@subsection Non-Flattend (fat binary) Setup
(Advanced configuration)
If the setup is non-flattened (ie, fat binary support is enabled)
programs and libraries will be installed in appropriate subdirectories
so that binaries for different machines/library-combos can coexist.
This is the case only if you configure gnustep-make with the option
--disable-flattened.
In this case, the recommended solution for setting up the GNUstep
environment is to source the GNUstep.sh file.
@example
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh
@end example
(change the path to be the path to your GNUstep.sh file on disk.
Common cases include /usr/GNUstep/System/Library/Libraries/Makefiles
and /usr/local/share/GNUstep/Makefiles)
You can run this command in your shell every time, or you may want to
add the command to your shell startup scripts - either the ones for
your own user (for example, @file{.bash_profile} for Bash) or the ones
for the whole system (for example, @file{/etc/profile} on GNU/Linux).
Please note that you need to execute this command both to build
software using gnustep-make and to run software installed by
gnustep-make.
@node UserDomainSetup, MultipleInstallations, Setup, Setup
@section Setting up your GNUstep User domain
(Advanced configuration)
The USER domain is generally expected to be in your home directory;
you can use the USER domain to install programs or libraries in your
home directory without affecting other users.
If you want to access programs or libraries installed in your USER
domain, then you really need to source GNUstep.sh in all cases (both
flattened and non-flattened), as explained in the Non-Flattened
section.
If you want to change the filesystem layout of your USER domain
(without reinstalling gnustep-make or affecting other people's USER
domains), you can do so at runtime by creating a file called
~/.GNUstep.conf (this might have a different name if your filesystem
layout specifies otherwise).
In that file, you can set all the GNUSTEP_USER_* variables set in
GNUstep.conf. Check your GNUstep.conf for a full description. Here
is an example in which all the GNUstep domain is moved into
~/Test/GNUstep instead of ~/GNUstep:
@example
GNUSTEP_USER_DIR=Test/GNUstep
@end example
@node MultipleInstallations, , UserDomainSetup, Setup
@section Having multiple gnustep-makes installed at the same time
(Advanced configuration)
You can install gnustep-make multiple times in different directories
by using a different config file for each. But if you do, then you
must make sure that you can easily switch the operating system paths
from one installation to the other. An easy way to do this is to
configure your GNUstep by using GNUstep.sh as explained in the
non-flattened instructions.
Your default gnustep-make installation is the one described in the
default GNUstep.conf file for the system; on GNU/Linux this is
@file{/etc/GNUstep/GNUstep.conf}. You can create a second one that
uses a different config file; for example:
@example
./configure --prefix=/opt/mytest --with-config-file=/etc/GNUstep-mytest.conf
@end example
When you install, this second instance of gnustep-make will reside in
@file{/opt/mytest}, and have @file{/etc/GNUstep-mytest.conf} as config
file.
To use this second installation instead of the first one, you only
need to set the GNUSTEP_CONFIG_FILE variable to point to the next
config file and source GNUstep.sh:
@example
export GNUSTEP_CONFIG_FILE=/etc/GNUstep-mytest.conf
. /opt/mytest/System/Library/Makefies/GNUstep.sh
@end example
To stop using a GNUstep installation, reset your GNUstep environment
with the GNUstep-reset.sh script and destroy the variable
GNUSTEP_CONFIG_FILE --
@example
. /opt/mytest/System/Library/Makefies/GNUstep-reset.sh
unset GNUSTEP_CONFIG_FILE
@end example
After this, you are ready to start using a new one (by setting a new
GNUSTEP_CONFIG_FILE and then sourcing the GNUstep.sh of the new one).
@bye

View file

@ -1,198 +0,0 @@
\documentclass[a4paper]{article}
%
% Comment the following line out if you don't have the geometry
% package on your system.
%
\usepackage[includemp=no]{geometry}
%
%
%
\begin{document}
\title{GNUstep Makefile Package Internals}
\author{Nicola Pero n.pero@mi.flashnet.it}
\date{last days of June 2001 - revised end of July 2001}
\maketitle
\tableofcontents
\section{Introduction}
This short document attempts to explain simply how the gnustep
makefile package works internally. When I first wrote this document,
the mechanism used to be extremely complex, involving many recursive
make invocations; I have now simplified it so that it involves only a
single recursive make invocation per target/type/operation. As a
result, I hope that the mechanism is now so simple that you can figure
out how it works without reading this document, by just reading the
gnustep-make source code. Anyway, the thing might still not be still
totally trivial at a first approach, so this document might help you
to get familiar with the gnustep-make source code in a shorter time
and with less pain.
\section{From `make' to the internal-all rule}
Imagine for example that in your \texttt{ GNUmakefile} you include both
\texttt{tool.make} and \texttt{library.make}, as in the following example:
\begin{verbatim}
include $(GNUSTEP_MAKEFILES)/common.make
TOOL_NAME = decrypt
decrypt_OBJC_FILES = decrypt.m
LIBRARY_NAME = libDvd
libDvd_OBJC_FILES = decss.m
include $(GNUSTEP_MAKEFILES)/tool.make
include $(GNUSTEP_MAKEFILES)/library.make
\end{verbatim} % $ fool emacs's buggy tex mode
Then you type `make' on the command line. We want to understand what
happens.
Make will process your \texttt{GNUmakefile}, which includes
\texttt{tool.make}, and that will include \texttt{rules.make}. In
\texttt{rules.make} make finds the first rule (the one which is
executed), which is
\begin{verbatim}
all:: before-all internal-all after-all
\end{verbatim}
This means that make will build by default that target \texttt{ all},
and that building that target requires building the
\texttt{before-all}, \texttt{internal-all} and \texttt{after-all}
targets. We ignore the \texttt{before-all} and \texttt{after-all}
targets for now, and only concentrate on the core target, which is
\texttt{internal-all}.
\section{From the internal-all rule to the \%.variables rule}
Make needs to build this target \texttt{internal-all}. In
\texttt{rules.make} this target appears as
\begin{verbatim}
internal-all::
\end{verbatim}
because of the double colons (that is, because it is
\texttt{internal-all::} rather than \texttt{internal-all:}) this
target can have multiple totally separated rules. Each rule must be a
double colon rule, and is processed separately from the other rules
(even if they refer to the same target).
The real rules for \texttt{internal-all} are included by the specific
makefiles; in our example, \texttt{tool.make} includes
\begin{verbatim}
internal-all:: $(TOOL_NAME:=.all.tool.variables)
\end{verbatim} %$
now - in our case - because \texttt{TOOL\_NAME} is \texttt{decrypt}, then
this rule actually means
\begin{verbatim}
internal-all:: decrypt.all.tool.variables
\end{verbatim}
This means that to build \texttt{internal-all}, make has to build (at
least) the \texttt{decrypt.all.tool.variables} target.
\texttt{library.make} includes the completely analogous rule
\begin{verbatim}
internal-all:: $(LIBRARY_NAME:=.all.library.variables)
\end{verbatim} %$
which in our case means
\begin{verbatim}
internal-all:: libDvd.all.library.variables
\end{verbatim}
This rule is completely separated from the other one; to build
\texttt{internal-all}, make has to build the two different targets:
\begin{verbatim}
decrypt.all.tool.variables
libDvd.all.library.variables
\end{verbatim}
\section{The \%.variables rule - dependencies}
The rule for building these targets is in the \texttt{rules.make} file,
it is the \texttt{\%.variables} rule:
\begin{verbatim}
%.variables: %.tools %.subprojects
@ \
target=$(basename $(basename $*)); \
operation=$(subst .,,$(suffix $(basename $*))); \
type=$(subst -,_,$(subst .,,$(suffix $*))); \
echo Making $$operation for $$type $$target...; \
$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory --no-keep-going \
internal-$${type}-$$operation \
INTERNAL_$${type}_NAME=$$target \
TARGET=$$target \
_SUBPROJECTS="$($(basename $(basename $*))_SUBPROJECTS)" \
...
\end{verbatim}%$
This rule matches all targets ending in \texttt{.variables}. First of
all, the rule depends on the corresponding \texttt{\%.tools} and
\texttt{\%.subprojects} rules. This is because before processing the
target itself, gnustep-make needs to process the related subprojects
and (only for frameworks) the framework tools. We ignore this
complication of subprojects and framework tools for now; if you look
at the \texttt{\%.subprojects} and \texttt{\%.tools} rules you see
that they do nothing if you are not actually using subprojects or
framework tools in your makefile.
\section{The \%.variables rule - second make invocation}
The rule body parses the \texttt{\%.variables} string - for example when
the rule is applied to
\begin{verbatim}
decrypt.all.tool.variables
\end{verbatim}
then (remember that \texttt{\$*} is the stem of the rule,
\texttt{decrypt.all.tool} in this case) it extracts
\begin{verbatim}
target=decrypt
operation=all
type=tool
\end{verbatim}
and then it runs a make subprocess, specific to that target, type and
operation. In our case, the \texttt{\%.variables} rules is executed
twice, once to build
\begin{verbatim}
decrypt.all.tool.variables
\end{verbatim}
and once to build
\begin{verbatim}
libDvd.all.tool.variables
\end{verbatim}
so the result is to run two separate make processes:
\begin{verbatim}
make internal-tool-all INTERNAL_tool_NAME=decrypt TARGET=decrypt \
_SUBPROJECTS="$(decrypt_SUBPROJECTS)" \
OBJC_FILES="$(decrypt_OBJC_FILES)" \
...
make internal-library-all INTERNAL_library_NAME=libDvd TARGET=libDvd \
_SUBPROJECTS="$(libDvd_SUBPROJECTS)" \
OBJC_FILES="$(libDvs_OBJC_FILES)" \
...
\end{verbatim}
where \texttt{...} stands for a lot of other variables, including all
variables needed to perform the final stage: \texttt{OBJC\_FILES},
\texttt{C\_FILES}, \texttt{JAVA\_FILES},
\texttt{ADDITIONAL\_INCLUDE\_DIRS} etc. Note that each make
subprocess will get passed different, specific, variables. If
gnustep-make wants to modify these variables in some way, it does it
at this stage, before passing them to the submake process. For
example, some library flags are filtered through the
\texttt{WHICH\_LIB\_SCRIPT}.
What this means is that for each target/type/operation, a separate
make process is run. For example, if you have two tools,
\texttt{decrypt} and \texttt{crypt}, and you want to both compile and install
them, it will run four make subprocesses:
\begin{verbatim}
make internal-tool-all INTERNAL_tool_NAME=decrypt ...
make internal-tool-all INTERNAL_tool_NAME=crypt ...
make internal-tool-install INTERNAL_tool_NAME=decrypt ...
make internal-tool-install INTERNAL_tool_NAME=crypt ...
\end{verbatim}
This is the `second make invocation'. The make package knows that it
is being invoked for the second time, because of the
\texttt{INTERNAL\_tool\_NAME} being non-empty.
\section{Second make invocation}
Because of the \texttt{INTERNAL\_tool\_NAME} variable being a
non-empty string (while it was empty in the previous top-level
invocation), \texttt{tool.make} will include the actual rules to build
the tool; in particular, the \texttt{internal-tool-all} rule, which is
then executed and builds the tool. All variables such as
\texttt{OBJC\_FILES} or the library flags are now available directly
in the makefiles, they have already been prepared and preprocessed, so
that the rules in \texttt{tool.make} can just plainly use these
variables naively to perform their job (compiling, installing, or
whatever).
\end{document}

View file

@ -1,875 +0,0 @@
\input texinfo @c -*-texinfo-*-
@setfilename machines.info
@settitle Platform Compatibility
@ifclear HOWTO
@c Machine Specific, Compilers, , (DIR)
@node Machine Specific, Compilers, , (DIR)
@chapter Machines
@end ifclear
Below is a list of machines that people have attempted to compile
GNUstep on. GNUstep compiles with little or no trouble on many of the
more popular operating systems. Some machines marked with
@emph{Unstable} may have some trouble or may not work at all.
Platforms marked @emph{Needs Testing} are not actively tested by developers
and need someone to help with reporting problems and fixes.
Platforms marked @emph{Obsolete} are very old distributions. No one really
knows if GNUstep works on these although they may.
If you have compiled GNUstep on a specific machine, please send information
about what you needed and any special instructions needed to
GNUstep @email{bug-gnustep@@gnu.org}.
@menu
* Compilers::
* CentOS/i386::
* Darwin/ix86::
* Darwin/PowerPC::
* Debian/Alpha::
* Debian/i386::
* Debian/em64t::
* Debian/PowerPC::
* Debian/SPARC::
* FedoraCore/i386::
* FreeBSD 5.x::
* FreeBSD 4.x::
* FreeBSD 3.x::
* FreeBSD 2.x::
* Gentoo/i686::
* Gentoo/PPC::
* Gentoo/amd64::
* Gentoo/alpha::
* Gentoo/sparc::
* Irix 6.5/MIPS::
* MacOSX/PowerPC::
* MkLinux/PowerPC::
* NetBSD/i386::
* NetBSD/Sparc64::
* Netwinder::
* OpenBSD 3.x::
* OSF/Alpha::
* RedHat/i386::
* Slackware/Intel::
* Slackware/Sparc::
* Solaris 2.5.1/Sparc::
* Solaris/Sparc::
* Solaris 2.7/Intel::
* Suse 6.x/Intel::
* Suse/Intel::
* Suse 7.x/PPC::
* Unixware-2.1.3/Intel::
* Windows with CYGWIN::
* Windows with MinGW::
* Yellowdog/PowerPC::
@end menu
@c -----------------------------------------
@node Compilers, CentOS/i386, Machine Specific, Machine Specific
@section Compilers
A recommended compiler is listed for each machine, if known. You should try
to use the recommended compiler for compiling GNUstep, as GNUstep is quite
complex and tends provoke a lot of errors in some compilers. Even versions
newer than the listed compiler may not work, so don't just get the latest
version of a compiler expecting it to be better than previous versions.
Compiler notes: If a recommended compiler is not listed, take note of the
following information before choosing the compiler you use.
@table @var
@item egcs or gcc < 2.95
Most likely will not work and is not supported.
@item gcc 2.95.x
Support for this compiler is deprecated as of Aug 2006. Mostly likely
it will work in the near future and bug fixes will be accepted, but any
bugs are considered non-critical.
@item gcc 2.96
Not an official gcc release. Some versions (Redhat, Mandrake) have problems
that prevent GNUstep from being compiled correctly and cause
mysterious errors. Not supported.
@item gcc 3.0.x
A fairly good compiler.
@item gcc 3.1
Several bugs where introduced in the version. It's probably better to
avoid this one, although it might work fine.
@item gcc 3.2.x
Pretty good.
@item gcc 3.3.x
Recommended. Fixes some bugs relating to protocols as well as other
improvements.
@item gcc 3.4.x
Recommended. The #import directive is no longer deprecated as of this
version of the compiler.
@item gcc 4.0
Probably OK. Did start triggering compiler errors on parts of base, but
there has been a workaround in base for that. Does not work on MacOSX.
@item gcc 4.0.1
Probably OK. This version should work on MacOSX.
@item gcc 4.1.x
4.1.0 and 4.1.1 don't work if you use precompiled headers.
@end table
If your having mysterious trouble with a machine, try compiling GNUstep
without optimization. Particularly in the newer GCC compilers,
optimization can break some code. The easiest way to do this is when
configuring, @kbd{CFLAGS="" ./configure}. Or when building,
@kbd{make OPTFLAG=""}.
Also if you manually upgraded gcc and/or make, we recommend reading the
documentation at @url{http://www.LinuxFromScratch.org} for tips on compiling
and installing gcc and make. If you had GNUstep previously installed, make sure
you completely remove all of it, including installed init scripts.
Support Notes:
@table @var
@item Supported
Regularly used and tested by developers
@item Release
Tested before a release
@item Unsupported
Not regularly used or tested
@item Unstable
Has problems either building or running GNUstep or requires special
setp procedures to run correctly.
@end table
@c -----------------------------------------
@node CentOS/i386, Darwin/ix86, Compilers, Machine Specific
@section CentOS/ix86 (@emph{Supported})
This RedHat variant is well-tested and well-supported (tested at least
up to CentOS release 4.4). For more information, please check the
section on RedHat/i386 below.
@c -----------------------------------------
@node Darwin/ix86, Darwin/PowerPC, CentOS/i386, Machine Specific
@section Darwin/ix86 (@emph{Unsupported})
Currently tested on Darwin 7.x
@table @var
@item Recommended compiler
gcc 3.3.2 or greater 3.3.* versions.
Older versions will not compile on Darwin and 3.4.* versions don't
support GNU runtime compilation on Darwin currently (The GCC bug report
is http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11572).
Default compiler (Apple GCC) has unknown problems.
Download the FSF GCC compiler and configure it with
-enable-threads=posix. You don't need binutils or anything else.
Use the GNU runtime. Make sure to add
@example
export CC=/usr/local/bin/gcc (use the correct path to FSF gcc)
@end example
so that the correct compiler is found
@item Extra libs needed
Use ffcall because libffi hasn't been ported to Darwin x86.
@item Special Instructions
Read the @url{README.Darwin} file in the gnustep-make/Documentation
directory for complete instructions.
@end table
@c -----------------------------------------
@node Darwin/PowerPC, Debian/Alpha, Darwin/ix86, Machine Specific
@section Darwin/PowerPC (@emph{Supported})
This section is for building the complete GNUstep system.
This system will not interact at all with Mac OS X/Cocoa. It uses different
complilers, different display systems, etc. For building GNUstep extensions
to be used with Mac OS X (for instance, if you want to build something based
on GNUstep, such as GSWeb or GNUMail), see the MacOSX/PowerPC section.
Currently tested on Darwin 6.x, 7.x, 8.x
@table @var
@item Recommended compiler
gcc 4.x, gcc 3.3.2 or greater 3.3.* versions.
Older versions will not compile on Darwin and 3.4.* versions don't
support GNU runtime compilation on Darwin currently (The GCC bug report
is http://gcc.gnu.org/bugzilla/show_bug.cgi?id=11572).
Default compiler (Apple GCC) has problems, mostly because it tries
to link in Apple libraries that conflict with GNUstep.
Get the FSF gcc-4 compiler using fink or
download the FSF GCC compiler and configure it with
-enable-threads=posix. You don't need binutils or anything else.
Use the GNU runtime. Make sure to add
@example
export CC=gcc-4 (or use the correct path to FSF gcc)
@end example
so that the correct compiler is found
@item Extra libs needed
Use libffi (not ffcall). This should be enabled by default in gnustep-base
so you don't have to type --enable-libffi. For 6.x, you need the dlcompat
library (from @url{www.opendarwin.org}) to load bundles (not needed for 7.x
or later). libjpeg that comes with fink conflicts with the Apple libraries
and screw up other apps on Mac OSX (like X11).
@item Special Instructions
Read the @url{README.Darwin} file in the gnustep-make/Documentation
directory for complete instructions. If you compiled FSF gcc by hand,
make sure to rename to GNU libobjc library to libobjc-gnu.dylib
@end table
See also the MacOSX/PowerPC section
@c -----------------------------------------
@node Debian/Alpha, Debian/i386, Darwin/PowerPC, Machine Specific
@section Debian/Alpha (@emph{Unsupported})
@c -----------------------------------------
@node Debian/i386, Debian/em64t, Debian/Alpha, Machine Specific
@section Debian/i386 (@emph{Supported})
Tested on sid.
@c -----------------------------------------
@node Debian/em64t, Debian/PowerPC, Debian/i386, Machine Specific
@section Debian/em64t (@emph{Supported})
Tested on 'unstable'.
@c -----------------------------------------
@node Debian/PowerPC, Debian/SPARC, Debian/em64t, Machine Specific
@section Debian/PowerPC (@emph{Supported})
Tested on sid.
@c -----------------------------------------
@node Debian/SPARC, FedoraCore/i386, Debian/PowerPC, Machine Specific
@section Debian/SPARC (@emph{Release})
Tested on sid.
@c -----------------------------------------
@node FedoraCore/i386, FreeBSD 5.x, Debian/SPARC, Machine Specific
@section FedoraCore/ix86 (@emph{Supported})
This RedHat variant is well-tested and well-supported (tested at least
up to Fedora Core release 6). For more information, please check the
section on RedHat/i386 below.
@c -----------------------------------------
@node FreeBSD 5.x, FreeBSD 4.x, FedoraCore/i386, Machine Specific
@section FreeBSD 5.x (@emph{Supported})
Tested on 5.0, 5.1, 5.3
@table @var
@item Special Instructions
Can install via /usr/ports/devel/gnustep, but not all required dependancies
are installed. See the GNUstep-HOWTO for list of libraries.
For 5.3, there is a bug in libkvm that requires that /proc be mounted. Use
'mount_procfs proc /proc' or see the procfs man page.
@end table
@c -----------------------------------------
@node FreeBSD 4.x, FreeBSD 3.x, FreeBSD 5.x, Machine Specific
@section FreeBSD 4.x (@emph{Unsupported})
@table @var
@item Special Instructions
For gcc 3.0.4, make WANT_THREADS_SUPPORT=YES
For libxml2 2.4.24, make WITHOUT_PYTHON=YES
@end table
@c -----------------------------------------
@node FreeBSD 3.x, FreeBSD 2.x, FreeBSD 4.x, Machine Specific
@section FreeBSD 3.x (@emph{Obsolete})
Compiles "out of the box" on FreeBSD 3.4.
@table @var
@item Special Instructions
You need to use gmake not make to compile the GNUstep packages. A special
port of gdb can be used with the Objective-C patches from
@url{ftp://ftp.pcnet.com/users/eischen/FreeBSD/gdb-4.17-port.tar.gz}
The best compiler for GNUstep is the latest release of the GNU Compiler
Collection (GCC). You can find it at @url{http://egcs.cygnus.com/}.
If you want to use the native POSIX threads support from @file{libc_r} pass
@code{--enable-threads=posix} to configure. This is the recommended option as
this is the FreeBSD threads package that gives the best results --with others
you may be unable to run some examples like @file{diningPhilosophers}.
The whole compilation process can fail if you have another threads library
installed so watch out for installed packages like @file{pth} and such.
Besides the support for libc_r, GNUstep will also look for @file{pth} and
@file{pcthreads}, so if you have installed them and they aren't detected
prepare to write a nice bug report.
This can be done more much easily by using the port version. Just @code{cd}
to @file{/usr/ports/lang/egcs} and do a @code{"make WANT_THREADS=yes install"}.
Easy.
If configure cannot find tiff.h or the tiff library and you have it installed
in a non-standard place (even @file{/usr/local}), you may need to pass these
flags to configure: @code{CFLAGS="-I/usr/local/include"} and
@code{LDFLAGS="-L/usr/local/lib"}.
@end table
@c -----------------------------------------
@node FreeBSD 2.x, Gentoo/i686, FreeBSD 3.x, Machine Specific
@section FreeBSD 2.x (@emph{Obsolete,Unstable})
@table @var
@item Special Instructions
Only static libraries work on this system.
Use /stand/sysinstall to install these packages if you have not
already done so:
@format
gmake (GNU make)
gcc 2.8.x
@end format
Seems to compile ok, but some tests crash. Possibly due to a
performace 'hack' in base. Might be a good idea to upgrade to FreeBSD 3.x.
You need to use gmake not make to compile the GNUstep packages.
@end table
@c -----------------------------------------
@node Gentoo/i686, Gentoo/PPC, FreeBSD 2.x, Machine Specific
@section Gentoo/i686 (@emph{Supported})
@table @var
@item Special Instructions
libffi sometimes causes odd problems. Try to use ffcall.
@end table
@c -----------------------------------------
@node Gentoo/PPC, Gentoo/amd64, Gentoo/i686, Machine Specific
@section Gentoo/PPC (@emph{Supported})
@c -----------------------------------------
@node Gentoo/amd64, Gentoo/alpha, Gentoo/PPC, Machine Specific
@section Gentoo/amd64 (@emph{Unsupported})
32-bit mode only?
@c -----------------------------------------
@node Gentoo/alpha, Gentoo/sparc, Gentoo/amd64, Machine Specific
@section Gentoo/alpha (@emph{Unsupported})
@c -----------------------------------------
@node Gentoo/sparc, Irix 6.5/MIPS, Gentoo/alpha, Machine Specific
@section Gentoo/sparc (@emph{Unsupported})
@c -----------------------------------------
@node Irix 6.5/MIPS, MacOSX/PowerPC, Gentoo/sparc, Machine Specific
@section Irix 6.5/MIPS (@emph{Unsupported})
@table @var
@item Recommended compiler
gcc 3.2.1
To use threads, it's necessary to bootstrap a compiler yourself:
configure with --enable-threads=posix, that will work as long as you
link EVERY objective C executable with -lpthread, no matter what
warnings the irix linker produces!
@item Extra libs needed
Unknown
@item Special Instructions
If you cannot link the library because of the very low default limit
(20480) for the command line length, then you should either use systune
ncargs to increase the value (maximum is 262144) or link the library by
hand.
No libffi-support: Use ffcall
@end table
@c -----------------------------------------
@node MacOSX/PowerPC, MkLinux/PowerPC, Irix 6.5/MIPS, Machine Specific
@section MacOSX/PowerPC (@emph{Release})
This section is for building the GNUstep extensions only.
Use this if, for instance, if you want to build something based
on GNUstep, such as GSWeb or GNUMail. If you want to build the complete
GNUstep system independant of Mac OS X, see the Darwin/PowerPC section.
Currently tested on MacOSX 10.1.5, 10.2, 10.3
@table @var
@item Recommended compiler
Default. For 10.1.5, you need to add -no-cpp-precomp to CFLAGS
(For instance, ./configure CFLAGS="-no-cpp-precomp" ...)
@item Extra libs needed
None.
@item Special Instructions
Warning ! To know how to install a complete GNUstep system on Mac OS X,
read the Darwin/PowerPC section.
By default, on Mac OS X, only the GNUstep extensions are built. Read the @url{README.Darwin} file in the gnustep-make/Documentation directory for
complete instructions.
To build the GNUstep extensions only is useful, when you want to build
on Mac OS X, GNUstep related projects like gdl2, etc linked to Cocoa.
Xcode project files exist, but they may not be up-to-date. Make sure
/usr/sbin is in your path:
@example
PATH=$PATH:/usr/sbin
@end example
Then type:
@example
cd make
./configure --with-library-combo=apple-apple-apple
make install
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh
cd ../base
./configure --with-xml-prefix=/usr --disable-xmltest
make debug=yes install
@end example
On Mac OS X 10.1.5, there is no libxml. Either install libxml2
or configure base with --disable-xml.
@end table
See also the Darwin/PowerPC section.
@c -----------------------------------------
@node MkLinux/PowerPC, NetBSD/i386, MacOSX/PowerPC, Machine Specific
@section MkLinux/PowerPC (@emph{Unsupported})
Tested with R2 RC2 (2004/03/04).
@c -----------------------------------------
@node NetBSD/i386, NetBSD/Sparc64, MkLinux/PowerPC, Machine Specific
@section NetBSD/i386 (@emph{Release})
Tested on NetBSD 2.0.2 (2005/04/15)
@table @var
@item Recommended compiler
Standard
@item Extra libs needed
libiconv(?), libffi
@item Special Instructions
Use NetBSD packages to install needed libraries. libffi either comes
automatically with gcc or can be installed separately and works fine
(over ffcall).
@end table
@c -----------------------------------------
@node NetBSD/Sparc64, Netwinder, NetBSD/i386, Machine Specific
@section NetBSD/Sparc64 (@emph{Unstable})
Tested on NetBSD 2.0.2 (2005/04/15)
@table @var
@item Recommended compiler
Standard
@item Extra libs needed
libiconv(?), libffi
@item Special Instructions
Use NetBSD packages to install needed libraries. libffi either comes
automatically with gcc or can be installed separately and is prefered
over ffcall which does not work on Sparc64 machines.
@end table
gdomap crashes. Perhaps other things do not work as well.
@c -----------------------------------------
@node Netwinder, OpenBSD 3.x, NetBSD/Sparc64, Machine Specific
@section Netwinder (@emph{Unstable})
@table @var
@item Recommended compiler
Build #12 of the system.
@item Extra libs needed
Unknown
@item Special Instructions
See @url{http://www.netwinder.org/~patrix}
@end table
@c -----------------------------------------
@node OpenBSD 3.x, OSF/Alpha, Netwinder, Machine Specific
@section OpenBSD 3.9 (@emph{Unsupported})
Information for version 3.9 (2006/08/13)
Ports at
@url{http://mail.rochester.edu/~asveikau/gnustep-openbsd/}
@c -----------------------------------------
@node OSF/Alpha, RedHat/i386, OpenBSD 3.x, Machine Specific
@section OSF/Alpha (@emph{Needs Testing, Unstable})
@c Contact: suzukis@file.phys.tohoku.ac.jp
Information is for Version 3.2C
@table @var
@item Recommended compiler
Unknown
@item Extra libs needed
Unknown
@item Special Instructions
Can only compile with static libraries. Compiler may fail when
linking executables (e.g. gdnc). Standard ranlib and ar programs are
to feable to create libraries. Should use GNU binutils versions. Linker
sometimes fails to find symbols, in which case you may need to link with
a library twice. For instance, add an extra -lgnustep-gui in
ADDTIONAL_TOOL_LIBS in the GNUmakefile(.preamble).
@end table
@c -----------------------------------------
@node RedHat/i386, Slackware/Intel, OSF/Alpha, Machine Specific
@section RedHat/i386 (@emph{Supported})
RedHat and variants/clones such as Fedora Core and CentOS are all very
well supported and are regularly tested with all GNUstep releases.
@table @var
@item Recommended compiler
The default compiler works very well.
@item Extra libs needed
All extra libs needed are easily available from standard packages; the
only tricky one is ffcall. If you don't find an RPM for that one,
download it directly from the GNUstep web site
(http://www.gnustep.org).
@item Special Instructions
None.
@end table
@c -----------------------------------------
@node Slackware/Intel, Slackware/Sparc, RedHat/i386, Machine Specific
@section Slackware/Intel (@emph{Unsupported})
@c -----------------------------------------
@node Slackware/Sparc, Solaris 2.5.1/Sparc, Slackware/Intel, Machine Specific
@section Slackware/Sparc (Splack) (@emph{Unsupported})
Tested with Spalck 8.0 (2005/03/01)
@table @var
@item Recommended compiler
gcc 3.2, no extra options.
@item Extra libs needed
Unknown.
@item Special Instructions
Tested on an ultra sparc server, kernel 2.4.27, XF86-4.0.3
@end table
@c -----------------------------------------
@node Solaris 2.5.1/Sparc, Solaris/Sparc, Slackware/Sparc, Machine Specific
@section Solaris 2.5.1/Sparc (@emph{Obsolete})
This configuration is no longer being tested, but it may still work.
@table @var
@item Recommended compiler
Unknown
@item Extra libs needed
tiff, Don't use the one in /usr/openwin
@item Special Instructions
See the Solaris 2.6 section for more instructions.
@end table
@c -----------------------------------------
@node Solaris/Sparc, Solaris 2.7/Intel, Solaris 2.5.1/Sparc, Machine Specific
@section Solaris 2.[678]/Sparc (@emph{Supported})
Tested on Solaris version 6, 7, 8 and 9
@table @var
@item Recommended compiler
gcc 3.2.1 or greater
gcc 3.04. Not 3.1 - does not compile parts of GNUstep.
@item Extra libs needed
tiff, Don't use the one in /usr/openwin
@item Special Instructions
Using a POSIX shell (zsh or bash, which should come with Solaris) is
highly recommended. In fact, some functions, such as compiling frameworks,
will not work without it.
@end table
Some people have reported problems when using binutils assembler and linker.
Using the native Solaris assmebler and linker should work fine.
Older Instructions:
If you are using threads, make sure the Objective-C runtime (libobjc that comes
with gcc) is compiled with threads enabled (This is true by default) AND that
it is compiled with the _REENTRANT flag defined (This does not seem to be
true by default). Or use the gnustep-objc package. Also make sure THREADS is
set to 'posix' not 'solaris'.
@c -----------------------------------------
@node Solaris 2.7/Intel, Suse 6.x/Intel, Solaris/Sparc, Machine Specific
@section Solaris 2.7/Intel (@emph{Unsupported})
@c Contact?: Sebastian Niesen <sniesen@niesen.net>
@table @var
@item Recommended compiler
Unknown.
@item Extra libs needed
Unknown
@item Special Instructions
Make sure there are no -g compiler flags (i.e. compiling with debug=yes
might be a problem). Unsure of correct bundle flags - You might need
to use the alternate flags listed in target.make, line 989. Also,
configuring gnustep-make with @option{--disable-backend-bundle} might be
necessary if you can't get bundles to work.
You will probable get a lot of text relocation
warnings, which probably can be ignored. See the other Solaris
instructions above for more information.
@end table
@c -----------------------------------------
@node Suse 6.x/Intel, Suse/Intel, Solaris 2.7/Intel, Machine Specific
@section Suse 6.x/Intel (@emph{Obsolete})
GNUstep has been tested on version 6.2-6.4 of Suse
@table @var
@item Recommended compiler
Standard
@item Extra libs needed
None
@item Special Instructions
It seems that there is a problem with the default kernel build
distributed with Suse which means that the socket binding used by
gdnc doesn't work. If you recompile the kernel then it starts working.
@end table
@c -----------------------------------------
@node Suse/Intel, Suse 7.x/PPC, Suse 6.x/Intel, Machine Specific
@section Suse/Intel (@emph{Supported})
GNUstep has been tested on version 7.0, 8.0, 8.1, 8.2, 9.0, 9.1, 9.3, and
10.1 of Suse
@table @var
@item Recommended compiler
The default compiler that comes with Susu is fine. Also
gcc2.95.x, gcc3.0.x, 3.1 and 3.2 work, but 2.95 is faster.
Compile with --threads-enabled (non-standard).
@item Extra libs needed
None
@item Special Instructions
Suse 10.1 does not work with the x11 backend.
@end table
@c -----------------------------------------
@node Suse 7.x/PPC, Unixware-2.1.3/Intel, Suse/Intel, Machine Specific
@section Suse 7.x/PPC (@emph{Unsupported})
GNUstep has been tested on version 7.0 of Suse/PPC
@table @var
@item Recommended compiler
Standard. gcc2.95.x, gcc3.0.x and gc3.1 work, but 2.95 is faster.
Compile with --threads-enabled (non-standard).
@item Extra libs needed
None
@item Special Instructions
@end table
@c -----------------------------------------
@node Unixware-2.1.3/Intel, Windows with CYGWIN, Suse 7.x/PPC, Machine Specific
@section Unixware-2.1.3/Intel (@emph{Unsupported})
@c Contact?: Richard Frith-Macdonald <richard@brainstorm.co.uk>
@table @var
@item Recommended compiler
Unknown
@item Extra libs needed
Unknown
@end table
Special Instructions for GNUstep installation on Unixware 2.1 systems
@table @asis
@item 1
Tune the kernel to increase the argument space so that we can pass long
command-line argument strings to processes (which the makefiles do)
(/etc/conf/bin/idtune ARG_MAX 102400)
@item 2
Install raft of the latest GNU software
@format
gzip (you need this to unpack other stuff)
make (to build everything)
m4 (for autoconf etc)
autoconf (if you need to change anything)
bison
flex
binutils (required by gcc if you want to debug)
gcc-2.8.1
(configure --with-gnu-as --with-gnu-ld --with-stabs)
NB. gcc-2.8.1 needs a fix to __do_global_dtors_aux()
in crtstuff.c on Unixware 2.1.3
(and possibly other unixware versions)
The fix is already in recent versions of egcs.
@end format
@example
==================================
static void
__do_global_dtors_aux ()
@{
static func_ptr *p = __DTOR_LIST__ + 1;
static int completed = 0;
if (completed)
return;
while (*p)
@{
p++;
(*(p-1)) ();
@}
#ifdef EH_FRAME_SECTION_ASM_OP
__deregister_frame_info (__EH_FRAME_BEGIN__);
#endif
completed = 1;
@}
======================================
@end example
@item 3
Having got gcc working - it's probably a good idea to rebuild
all your GNU software using it!
@item 4
Build gstep as normal.
@item 5
The SIOCGIFCONF ioctl sometimes doesn't work on unixware after applying
some of the OS patches.
So I have added a '-a' flag to gdomap to give it the name of a file
containing IP address and netmask information for the network interfaces
on the system.
You need to set up a file (I suggest '/etc/gdomap_addresses') containing
the information for your machine and modify your system startup files in
/etc/rc?.d to run gdomap, telling it to use that file.
eg. If your machine has an IP address of '193.111.111.2' and is on a
class-C network, your /etc/gdomap_addresses file would contain the line
@example
193.111.111.2 255.255.255.0
@end example
and your startup file would contain the lines
@example
. /usr/local/GNUstep/Library/Makefiles/GNUstep.sh
gdomap -a /etc/gdomap_addresses
@end example
@end table
If you don't set gdomap up correctly, Distributed Objects will not
work.
@c -----------------------------------------
@node Windows with CYGWIN, Windows with MinGW, Unixware-2.1.3/Intel, Machine Specific
@section Windows with CYGWIN (@emph{Unsupported})
@table @var
@item Recommended compiler
gcc 3.3.1 or later (with libobjc and libjava (if using libffi))
@item Extra libs needed
Objective-C library DLL (@url{ftp://ftp.gnustep.org/pub/gnustep/windows/cygwin})
for shared libs. It's a good idea to remove the libobjc.a that comes with gcc
(gcc -v for location) so that it isn't accidentally found.
For ffcall, you should get version 1.8b or above (the earlier ones don't
compile). There are still some problems with structure passing, but that is
generally not supported on any architecture. libffi also works.
@item Special Instructions
Make sure you have good shared libraries for everthing. Sometimes a bad
shared library (like libtiff) will cause odd and untraceable problems.
See @url{README.Cygwin} for information on compiling.
@end table
@c -----------------------------------------
@node Windows with MinGW, Yellowdog/PowerPC, Windows with CYGWIN, Machine Specific
@section Windows with MinGW (@emph{Supported})
@table @var
@item Recommended compiler
See below.
@item Extra libs needed
See below.
@item Special Instructions
See the @url{README.MinGW} file located in the gnustep-make Documentation
directory for instructions. Windows NT/2000/XP only. Win98 machines and
earlier are very buggy and are not supported.
Native GUI backend is alpha version.
@end table
@c -----------------------------------------
@node Yellowdog/PowerPC, , Windows with MinGW, Machine Specific
@section Yellowdog/PowerPC (@emph{Unsupported})
@ifclear HOWTO
@include end.texi
@end ifclear

File diff suppressed because it is too large Load diff

View file

@ -1,418 +0,0 @@
@c -*-texinfo-*-
@ifclear ANNOUNCE-ONLY
@chapter NEWS
@ifset TEXT-ONLY
@include version.texi
@end ifset
The currently released version is @samp{@value{GNUSTEP-MAKE-VERSION}}.
@end ifclear
@section Changes in version @samp{2.0.0}
The Makefile package has had a major makover which befits a major
version update. The most user-visible change of this is customized
filesystem support. GNUstep can now be configured and installed using
any of many typical filesystem layouts, including FHS, Mac, and the
traditional GNUstep layout.
Due to this change a number of variable names have been changed or
deprecated. If you are a developer maintaining makefiles, you should
check your makefiles for these variables. Most notibly, variables such
as @samp{GNUSTEP_SYSTEM_ROOT} no longer make any sense, as various
directories that were previously in a traditional GNUstep system root
directory exist accross multiple directories in disparate places in
other filesystem layouts.
If you are a user or developer that is just installing GNUstep, read
the @file{GNUstep-HOWTO} and @file{INSTALL} documents to find out new
information about configuring and installing make.
If you are a developer, read the files @file{filesystem} and
@file{make} for information on new and changed variables. Read the
@file{RELEASENOTES} file for specific changes in this release and updates
you will need to make with this version of make.
Various changes include (See @file{RELEASENOTES} for more information):
@itemize @bullet
@item New configure option @samp{--with-layout} to choose different
filesystem layouts.
@item All applications use the @samp{.app} extension even when compiled with
debugging or profiling.
@item Precompiled header support added using xxx_OBJC_PRECOMPILED_HEADERS.
@item gnustep-config is a program which prints out information on the
GNUstep filesystem and variables (Similar to programs like pkg-config).
@item Better inline messages/help, including printing the version
of gnustep-make that is being used
@item Applications can be started now just using their name (by
installing a wrapper in the tools directory).
@item Versioning of Microsoft Windows DLLs implemented.
@item Use of @samp{GNUSTEP_SYSTEM_ROOT} and similar variables
deprecated.
@item Implement use of GNU standard @samp{DESTDIR} variable.
@item Object files are now placed in the @file{obj} directory.
@item Static and profile libraries have the same name as normal libraries.
@item Support for Admin Tools and Admin Apps directories
@item RPM support rewritten
@item Microsoft Windows support updated and extended
@item Easy consistent way to link non-installed frameworks by using
-Lpath_to_framework/xxx.framework/$GNUSTEP_TARGET_LDIR
@item Versioning of library resources
@item Fixed rebuilding .plist and .palette files
@end itemize
@ifclear ANNOUNCE-ONLY
@section Changes in version @samp{1.13.0}
Debug libraries now have the same name as normal libraries (i.e. no "_d"
suffix). This reduces the possiblity of multiple libraries being loaded
into the same executable.
Added dragonfly OS to make targets.
Spaces and backslashes are no longer allowed in paths used by the make
package (e.g. with Windows OS). The libraries can still use native paths.
@section Changes in version @samp{1.12.0}
Minor fixes.
@section Changes in version @samp{1.11.2}
The @file{GNUstep.conf} file is now viewed as the essential
determination of the install location for GNUstep libraries, tools and
other files. During configuration, this file is read, if it exists, to
determine this information. This can still be overriden with
environment and command line options, however. See the filesystem
documentation in the GNUstep Make Documentation directory for more
information.
You no longer need to source GNUstep.sh in order to compile GNUstep
programs. All that is needed is the definition of
GNUSTEP_MAKEFILES. You should also have the GNUstep system tools
directory in your path.
All netbsd systems are assumed to use ELF libraries. Support for the old
static libs version of netbsd was removed.
Serveral new options were added to configure to change the location of
basic dir locations and basic configuration files. Also, the help was
greatly improved. Note that --prefix=/usr/GNUstep/System no longer
works. Please use --prefix=/usr/GNUstep or
--with-system-root=/usr/GNUstep/System.
A few more fixes for cygwin are included as well as Windows resource rules.
Support for ObjC++ has been added. You should list the ObjC++ .mm
files in the xxx_OBJCC_FILES variable, and put extra ObjC++ flags in
xxx_OBJCCFLAGS or ADDITIONAL_OBJCCFLAGS.
@section Changes in version @samp{1.11.1}
Part of the previous change was reversed. Now libobjc is still linked
with individual applications (as well as the base library), since some
operating systems require this to resolve external symbols. However,
there is no need to recompile all applications again.
Compilation of GNUstep on cygwin was revampled and fixed due to a lot of
work by Tom MacSween.
@section Changes in version @samp{1.11.0}
NOTE: The libobjc library is now linked in with the base library and NOT with
individual applications or tools (except on MingW). This requires that
you do a complete rebuild of all libraries, tools and apps when switching
to this new version.
@itemize @bullet
@item New rules for building and using DLLs were implemented. Now gcc
and other tricks are used to properly export symbols, so no .def file
should be needed.
@item The GNUsteprc file in $GNUSTEP_SYSTEM_ROOT is deprecated. See the
new GNUstep.conf file (which is not installed by default).
@item Psuedo-framwork support was implemented on MingW. This essentially
involves copying the framework to several places so it can be used without
links, which Windows does not really support. There's no other
clean way to do it.
@item Support for xxx_WINDRES_FILES on MinGW was implemented.
@end itemize
@section Changes in version @samp{1.10.0}
@itemize @bullet
@item a GNUsteprc file is now automatically created and installed in
$GNUSTEP_SYSTEM_ROOT, which sets the system-wide default for the user
root directory (default=~/GNUstep, which can be overriden with the
@code{--with-user-root} argument to configure, or by modifying GNUsteprc
after configuration.)
@item make_services is not run by GNUstep.sh anymore. You must run this
manually now (see the gnustep-gui documentation).
@item Palettes use a plist instead of a strings format file now for the
palette.table file.
@item You can use the @code{--enable-native-objc-exceptions} argument to
configure to enable use of built in objc exceptions with compilers that
support it.
@end itemize
@section Changes in version @samp{1.9.2}
@itemize @bullet
@item Application and Bundles use the latest convention on Apple.
@item Improve/Simplify dependency checking when making docs
@end itemize
@section Changes in version @samp{1.9.1}
@itemize @bullet
@item Remove @code{--disable-import} option
@item README.Darwin for darwin/MacOSX install
@item Framework version and naming clarified.
@end itemize
@section Changes in version @samp{1.9.0}
@itemize @bullet
@item Support for building in a separate build dir.
@item Add @code{--enable-strip-makefiles} option to configure
@item List of classes in a framework gets written to the plist file.
@end itemize
@section Changes in version @samp{1.8.0}
Read the NEWS file for a complete list of changes since the last stable
release. The major difference from 1.6.0 is that the locations of certain
directories have changed. Generally this will not cause a problem unless
your GNUstep directory is shared by multiple machines running this and
earlier (1.6.x) versions of the software.
@section Changes in version @samp{1.7.4}
Bug fixes.
@section Changes in version @samp{1.7.3}
@itemize @bullet
@item Adds library combo to Headers directory if not flattened.
@item Add Markup file (Renaissance) support.
@end itemize
@section Changes in version @samp{1.7.2}
--enable-flattened (Flat directory structure) is on by default.
@itemize @bullet
@item On WIN32 use HOMEPATH in preference to USERPROFILE
@item netbsd and openbsd compile fixes.
@end itemize
@section Changes in version @samp{1.7.1}
Bug fixes.
@section Changes in version @samp{1.7.0}
This version contains a major change in the location of certain
directories and installed files as detailed in the @file{filesystem.texi}
document. When installing this version for the first time, all old
directories and files in those directories will be moved to the new
locations automatically. However, you should update all GNUstep versions
on any machine you have them installed on in order to avoid any
incompatibilities.
Other changes:
@itemize @bullet
@item Support for preprocessed Info.plists.
@end itemize
@section Changes in version @samp{1.6.0}
Make now configures by default for only one system. To compile and run
GNUstep for multiple platforms from the same directory, use the
configure argument --enable-multi-platform.
@itemize @bullet
@item Auto-build def file for DLLs
@item Work natively on MacOSX systems. Now use apple-apple-apple
instead of nx-nx-nx on OSX systems.
@item More efficient checks for re-making a project.
@end itemize
@section Changes in version @samp{1.5.1}
@itemize @bullet
@item Framework support rewritten, also supports multiple names.
@item API change: Replace frameowork's xxx_TOOLS by xxx_COPY_INTO_DIR.
@item Unified link commands between libraries and frameworks (LIB_LINK_*).
@item New 'make strings' target for localization support.
@item Speed improvements.
@item Doesn't try to build OSX bundle on GNUstep and vice versa.
@item API change: Tools/Subproj can have resources.
@item API change: TOOL_INSTALL_DIR.
@end itemize
@section Changes in version @samp{1.5.0}
@itemize @bullet
@item Add NetBSD Elf support
@end itemize
@section Changes in version @samp{1.4.0}
@itemize @bullet
@item Update Darwin/GNU gcc and Irix targets
@end itemize
@section Changes in version @samp{1.3.4}
This is a first prerelease version for 1.4.
@itemize @bullet
@item Use gnugc-gnu-gnu library combo for garbage collecting version.
@item Add support for --library-combo in opentool
@item Change GNUSTEP_PATHPREFIX_LIST to GNUSTEP_PATHLIST
@item Add verbosity levels. Use make messages=yes for full messages.
@end itemize
@section Changes in version @samp{1.3.3}
@itemize @bullet
@item Recognizes XXX_STANDARD_INSTALL=no to not do installation.
@item Updated instructions for MingW/MSYS installation.
@end itemize
@section Changes in version @samp{1.3.2}
@itemize @bullet
@item Instructions for building on Windows with MSYS
@item Resolve library dependencies better on Windows
@item Fix frameworks in RPMs and DEBs
@item Continued reorganization.
@end itemize
@section Changes in version @samp{1.3.0}
The package has gone through an extensive reorganization to break up
each sub-make into two separate components. This allows for much
simplified code and lots of code sharing between components. As a side
effect, it also increased the speed of the code by at least a factor of
2.
@itemize @bullet
@item Force shared=yes for cygwin and mingw
@item Bundles copy resources from subprojects.
@item Better resource management. Resources handled accross all project types.
@item Simplified and fixed user root location between make and base libraries.
@item Changed Apps directory to Applications
@item Fixes for MacOSX, MingW
@end itemize
@section Changes in version @samp{1.2.1}
@itemize @bullet
@item the source distribution code has been rewritten to be more general
and extended. Packages built using gnustep-make now automatically
have handy targets building tarballs from sources or from CVS imports.
@item implemented support for auto-dependencies, which means that any object
file automatically depends on all the header files which were used to
build it. Only works with newer compilers.
@item implemented INSTALL_AS_USER and INSTALL_AS_GROUP.
@item implemented a strip=yes option.
@item various bug fixes and minor improvements.
@end itemize
@section Changes in version @samp{1.2.0}
@itemize @bullet
@item The core rules and internals of gnustep-make have been fundamentally
redesigned and rewritten. notably, gnustep-make now works using only
a single recursive sub-make invocation rather than two, which makes
it consistently faster and simpler in all circumstances.
@item The clean rules have been heavily optimized - they no longer use
recursive sub-make invocations at all and so they are really fast.
@item Many improvements to java support. Optimized management of nested classes
@item Better conformance to make conventions.
@item File specific compilation flags
@item Fixed darwin support
@item Support for C++ files.
@item Made use of library installation dir consistent with other installation.
@item Much improved Windows path support
@end itemize
@section Changes in version @samp{1.0.1}
@itemize @bullet
@item Support for Java tools.
@item Build GUI backend as a bundle (default).
@item Remove backend part of LIBRARY_COMBO.
@item Fixes to run on FreeBSD, Solaris.
@end itemize
@section Changes in version @samp{1.0.0}
@itemize @bullet
@item Optimizations that in many cases more than double the speed.
@item Added preliminary darwin support.
@item rpm packeing improvements.
@item Better checking for mingw and cygwin
@end itemize
@section Changes in version @samp{0.9.2}
@itemize @bullet
@item HOWTO and faq files moved from core package to here
@item Configurable GNUSTEP_LOCAL_ROOT and GNUSTEP_NETWORK_ROOT
@end itemize
@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
@section Changes in version @samp{0.9.0}
ffcall library is highly recommended for use with the GNUstep base
library. You need to have installed it prior to configuring the Makefile
package. See the INSTALL file.
@itemize @bullet
@item Support for automatically generating RPM spec files.
@item Build suitable files for MacOS bundles
@item Add option for flattened directory structure.
@item LaText documentation support.
@item Added support for Frameworks
@end itemize
@section Noteworthy changes in version @samp{0.6.6}
The GNUstep system libraries are now installed in a separate system root
directory (default /usr/GNUstep/System) rather than the GNUstep
root directory (default /usr/GNUstep). You can revert to the old behavior
using a configure option @samp{--without-system-root}. We also recommend
removing any previous GNUstep versions before installing the new one in order
to avoid problems with the system finding the correct binary and/or library.
@itemize @bullet
@item Support for Windows compilation (cygwin and mingw) and DLL creation
and usage.
@item Java support rewritten and extended.
@end itemize
@end ifclear
@c end ifclear ANNOUNCE-ONLY

View file

@ -1,106 +0,0 @@
.\"openapp(1) man page
.\"put together by Martin Brecher <martin@gnustep.de>
.\"
.\"Process this file with
.\"groff -man -Tascii openpp.1
.\"
.TH OPENAPP 1 "August 2003" GNUstep "GNUstep System Manual"
.SH NAME
openapp \- launch applications from the command line
.SH SYNOPSIS
.B openapp
.RB [ --find ]
.IR application
.RB [ "\fIarguments..." ]
.P
.SH DESCRIPTION
The
.B openapp
command allows you launch graphical GNUstep applications from the command
line.a
.PP
.I application
is the complete or relative name of the application program with or
without the .app extension, like Ink.app.
.PP
.I arguments
are the arguments passed to the application.
.PP
.B openapp
first checks whether the application is in the current working directory.
If not then searches the GNUstep domains' Applications folders in the
following order:
User (i.e. ~/GNUstep/Applications), Local, Network, System. First match wins.
.PP
If
.I application
is given without extension (i.e. Ink instead of Ink.app),
.B openapp
searches for
.I application.app
,
.I application.debug
,
.I application.profile
(in that order).
.PP
If
.I --find
is used as first argument,
.B openapp
prints out
the full path of the application executable which would be
executed, without actually executing it as it would normally do.
.PP
.SH OPTIONS
.IP "\fB--find"
print complete path of the executable which would be launched.
.IP "\fB--help"
print above usage description.
.PP
.SH EXAMPLES
Start Ink.app without additional parameters:
.PP
.I openapp Ink.app
.PP
Launch Ink.app and pass it the --GNU-Debug argument:
.PP
.I openapp Ink.app --GNU-Debug=NSTextView
.PP
To determine which executable is launched by openapp, type:
.PP
.I openapp --find Ink.app
.PP
The output of the abovecommand might be something like:
.I /usr/GNUstep/Local/Applications/Ink.app/Ink
.PP
.SH BUGS
.B openapp
does currently not handle library combos.
.PP
.SH ENVIRONMENT
.IP "\fBGNUSTEP_PATHLIST"
This variable contains the paths of the domains in which
.B gopen
tries to find applications to open the files with. Entries are
separated by a colon.
.IP
.IP Example:
.I /home/foo/GNUstep:/usr/GNUstep/Local:/usr/GNUstep/Network:/usr/GNUstep/System
.PP
.SH SEE ALSO
GNUstep(7), gopen(1)
.P
.SH HISTORY
Work on
.B openapp
started October 1997.
.P
This manual page was first written July 2003.
.P
.SH AUTHORS
openapp was originally written by Ovidiu Predescu <ovidiu@net-community.com>
and is now maintained by Nicola Pero <n.pero@mi.flashnet.it>.
.P
This man page was written by Martin Brecher <martin@mb-itconsulting.com>.

View file

@ -1,66 +0,0 @@
@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 simple, powerful and extensible way to
write makefiles for a GNUstep-based project. It allows the user to
write a project without having to deal with the complex issues
associated with configuration, building, installation, and packaging.
It also allows the user to easily create cross-compiled binaries.
@section Information
The file @samp{NEWS} has this packages feature history.
The files @samp{INSTALL} or @samp{GNUstep-HOWTO}
give instructions for installing the packages. Also see the @file{machines}
documentation and various machine specific READMEs in the Documentation
directory.
Files in the @samp{Documentation} directory have information on the
design of the Makefile system and how to write your own makefiles that
work with it.
@section License
The GNUstep libraries are covered under the GNU Lesser Public License.
This means you can use these libraries in any program (even non-free
programs). If you distribute the libraries along with your program,
you must make the improvements you have made
to the libraries freely available. You should read the COPYING.LIB file
for more information.
GNUstep tools, test programs, and other files are covered under the GNU
General Public License. The GNU GPL is a free software license, which
requires that all the released improved versions be free software as
well. You should read the COPYING file for more information.
The GNUstep make package is licensed under the GNU GPL.
@section History
The GNUstep makefile package was designed by Scott Christley
and Ovidiu Predescu.
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.
Nicola Pero @email{nicola@@brainstorm.co.uk} rewrote much of the rule
procedures to increase the speed of the package by over a factor of 7.
He also rewrote much of the rest of the system to make it simpler and
more effective.
@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

View file

@ -1,138 +0,0 @@
@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.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.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

View file

@ -1,487 +0,0 @@
\input texinfo @c -*-texinfo-*-
@c A FAQ for GNUstep Users
@node Top, GNUstep General Information, (dir), (dir)
@chapter GNUstep Frequently Asked Questions for Users
Last updated @today{}.
Please send corrections to @email{gnustep-maintainer@@gnu.org}. Also look
at the (developer) FAQ for more developer oriented questions.
@menu
* GNUstep General Information::
* Compiling and Installing::
* Compatibility and Layout::
* Troubleshooting::
@end menu
@node GNUstep General Information, Compiling and Installing, Top, Top
@section GNUstep General Information
@menu
* What is GNUstep?::
* What is the OpenStep standard?::
* What platforms does GNUstep run on?::
* Does GNUstep run on Windows?::
* What is GNUstep's position towards KDE and the GNOME project?::
* How can I get GNUstep?::
* How do you run GNUstep?::
* Is there a web site?::
* When is GNUstep intended to be available?::
* What is usable?::
@end menu
@node What is GNUstep?, What is the OpenStep standard?, GNUstep General Information, GNUstep General Information
@subsection What is GNUstep?
GNUstep is the Free Software Foundation's effort to implement NeXT
Software, Inc.'s (now Apple Computer, Inc.) OpenStep Standard. Also we
are building developer and user applications based on this standard which
may someday be used to form a complete desktop experience.
@node What is the OpenStep standard?, What platforms does GNUstep run on?, What is GNUstep?, GNUstep General Information
@subsection What is the OpenStep standard?
OpenStep is an Application Programming Interface (API) for creating
applications using the Objective-C language. It was published by NeXT
Computer, Inc. in 1994.
OpenStep consists of three parts: the @samp{Foundation Kit}, a library
of non-graphical objects; the @samp{Application Kit}, a library of
objects useful in creating graphical applications; and the @samp{Display
PostScript System} (DPS), an interface for drawing to the screen using
the PostScript graphics language. DPS support is not being persued at
this time however.
You can obtain a copy of the OpenStep standard from the GNUstep web site
@url{http://www.gnustep.org} or it's mirror sites.
@node What platforms does GNUstep run on?, Does GNUstep run on Windows?, What is the OpenStep standard?, GNUstep General Information
@subsection What platforms does GNUstep run on?
See the list of supported platforms at
@url{machines_toc.html} for
information on what machines GNUstep builds on and what the status of
the ports is. Probably a few days porting to any other UNIX system where
current gcc compilers and gdb debugger work.
@node Does GNUstep run on Windows?, What is GNUstep's position towards KDE and the GNOME project?, What platforms does GNUstep run on?, GNUstep General Information
@subsection Does GNUstep run on Windows?
The primary targets for GNUstep are free UNIX system-based platforms such
as GNU/Linux and FreeBSD.
That being said, the base library should run on Windows NT, 98, 2000, and XP
with the Cygwin UNIX system-emulation environment from Cygnus
(@url{http://www.cygwin.com/}), or the MinGW environment
(@url{http://www.mingw.org}).
The GUI library uses the win32 backend library to work under
Windows. The backend library is a thin layer that converts the
GNUstep methods to handle drawing of GUI elements to calls to the
Windows API. This project is currently in beta.
@node What is GNUstep's position towards KDE and the GNOME project?, How can I get GNUstep?, Does GNUstep run on Windows?, GNUstep General Information
@subsection What is GNUstep's position towards KDE and the GNOME project?
You can use GNUstep with GNOME and/or KDE. GNUstep displays
on top of X11. You can still do programming in C (since Objective-C
is just a super-set of C), and when GCC gets around to it,
you'll be able to mix C++ and Objective-C code in the same file.
GNUstep, is much more than a window manager or desktop environment.
It frees you to develop cross-platform applications without the
work of developing an OS independent framework from scratch. It
gives you lots of basic functionality, from font panels to Unicode
strings to distributed objects.
@node How can I get GNUstep?, How do you run GNUstep?, What is GNUstep's position towards KDE and the GNOME project?, GNUstep General Information
@subsection How can I get GNUstep?
Many distributions include packaged versions of GNUstep (Debian,
etc). To compile from sratch, download the GNUstep Startup package or
get the HOWTO from @url{gnustep-howto_toc.html}. Get the latest releases
from @url{ftp://ftp.gnustep.org/pub/gnustep/core}.
@node How do you run GNUstep?, Is there a web site?, How can I get GNUstep?, GNUstep General Information
@subsection How do you run GNUstep?
You are presumably under the misapprehension that GNUstep is
some sort of program or window manager.
It isn't.
GNUstep is a whole load of things --- primarily a set of libraries
for developing software.
At present, it's those libraries, plus various command-line based
support tools and service providing daemons, plus various GUI
development tools, a GUI desktop/workspace application, etc.
At no stage will you ever 'run' GNUstep --- you will run applications
and tools and will make use of it's services. At some point
you may well find packages distributed as 'GNUstep' systems in the
way that you get 'GNU/Linux' systems packaged today. Look at
Simply GNUstep @url{http://simplygnustep.sourceforge.net/} for instance.
If you want to see a sample GUI application running you need to build
GNUstep and look at the example applications in the gnustep-examples
package. Build 'Finger' or 'Ink' and start it with 'openapp Finger.app'
or 'openapp Ink.app'
To look best, use WindowMaker (the currently preferred GNUstep
window manager) as your window manager.
@node Is there a web site?, When is GNUstep intended to be available?, How do you run GNUstep?, GNUstep General Information
@subsection Is there a web site?
See @url{http://www.gnustep.org/}.
@node When is GNUstep intended to be available?, What is usable?, Is there a web site?, GNUstep General Information
@subsection When is GNUstep intended to be available?
It's usable now. Major releases are made about every six months. However, if
you are a serious developer, it's probably best to use the latest
snapshots.
@node What is usable?, , When is GNUstep intended to be available?, GNUstep General Information
@subsection What is usable?
Most of GNUstep is quite usable and there are many complex applications
that work well. However, GNUstep does not completely track the latest
changes that Apple makes to their interface and there are still some
parts that need some work).
What does this mean for users? Many applications will run quite well.
Applications that require very complex text handling and some unusual
features and/or some of the latest additions to Cocoa may not work as
well.
@c ****************************************************************
@node Compiling and Installing, Compatibility and Layout, GNUstep General Information, Top
@section Compiling and Installing
@menu
* How do I compile GNUstep on my machine? ::
* Are there any precompiled packages available?::
* What are these type and size warnings?::
* What are these import warnings?::
@end menu
@node How do I compile GNUstep on my machine? , Are there any precompiled packages available?, Compiling and Installing, Compiling and Installing
@subsection How do I compile GNUstep on my machine?
Read the file @file{GNUstep-HOWTO}, which comes with the GNUstep
distribution (gnustep-make), and also is available separately on the
GNUstep web site.
@node Are there any precompiled packages available?, What are these type and size warnings?, How do I compile GNUstep on my machine? , Compiling and Installing
@subsection Are there any precompiled packages available?
Check @url{http://www.gnustep.org/resources/sources.html} for links to
RPMs, Debian packages, and BSD ports. There's also Windows installers, Mac OS X
binaries and others.
@node What are these type and size warnings?, What are these import warnings?, Are there any precompiled packages available?, Compiling and Installing
@subsection What are these type and size warnings?
These warnings:
@example
/usr/bin/ld: warning: type and size of dynamic symbol
`__objc_class_name_NSConstantString' are not defined
@end example
are a common occurence and are due to a mismatch between gcc and
ld. They don't do any harm so they can be safely ignored. They have been
fixed in GCC version 3.1.
@node What are these import warnings?, , What are these type and size warnings?, Compiling and Installing
@subsection What are these import warnings?
Do you get this obnoxious warning whenever you compile an application, tool,
or Objective-C program:
@example
warning: using `#import' is not recommended
[...]
@end example
Up until gcc 3.4, the #import directive was not implemented correctly.
As a result, the GCC compiler automatically emitted a warning whenever
#import was used. As of gcc 3.4, this problem has been fixed, so
presumably, this warning is no longer emitted when code is compiled. If
you are using an early compiler, you can supress these warnings by adding
@code{-Wno-import} to your include (cpp) flags.
@c ****************************************************************
@node Compatibility and Layout, Troubleshooting, Compiling and Installing, Top
@section Compatibility and Layout
@menu
* Can I run NeXT OPENSTEP or Mac OS X programs on GNUstep?::
* Is GNUstep following changes to OpenStep and Mac OS X?::
* Do we have to have the NEXTSTEP look and feel?::
* What's up with the directory structure?::
* Why not use framework bundles?::
@end menu
@node Can I run NeXT OPENSTEP or Mac OS X programs on GNUstep?, Is GNUstep following changes to OpenStep and Mac OS X?, Compatibility and Layout, Compatibility and Layout
@subsection Can I run NeXT OPENSTEP or Mac OS X programs on GNUstep?
You can't run these programs on GNUstep, but if you have the source
code for the programs, you should be able to port them to GNUstep and
compile them. Whether or not you will be able to run them depends on how
complete GNUstep is at the time.
@node Is GNUstep following changes to OpenStep and Mac OS X?, Do we have to have the NEXTSTEP look and feel?, Can I run NeXT OPENSTEP or Mac OS X programs on GNUstep?, Compatibility and Layout
@subsection Is GNUstep following changes to OpenStep and Mac OS X?
Yes, gnustep-base already contains the documented changes in the
Foundation library. GNUstep aims to be compatible with both the
OpenStep specification and with Mac OS X. It should be easy to write
an application that compiles cleanly under both GNUstep and Cocoa.
@node Do we have to have the NEXTSTEP look and feel?, What's up with the directory structure?, Is GNUstep following changes to OpenStep and Mac OS X?, Compatibility and Layout
@subsection Do we have to have the NEXTSTEP look and feel?
GNUstep is aiming for something like the NEXTSTEP 3.3 look and feel.
Although we don't want to force anyone into this, a lot of the power and
ease of use comes from this feel. The look of GNUstep is something
different --- buttons and other widgets can look different but still act
the same way. We hope to implement themes which will allow
this.
@node What's up with the directory structure?, Why not use framework bundles?, Do we have to have the NEXTSTEP look and feel?, Compatibility and Layout
@subsection What's up with the directory structure?
First of all, GNUstep uses a slightly different directory structure than
NEXTSTEP or Mac OS X. Part of this is historical, part is because we can't do
things the same way (see @pxref{Why not use framework bundles?}). Although
currently the structure is very similar to the one used in Mac OS X.
@node Why not use framework bundles?, , What's up with the directory structure?, Compatibility and Layout
@subsection Why not use framework bundles?
Framework bundles are much more difficult to port and to use, and are very
unnatural on a UNIX system; extremely unnatural on Windows. In a
framework bundle, the shared dynamic library is inside a framework wrapper
directory. Because of this, the dynamic linker can't find it.
We have frameworks, so how do we work around that? Well, we build dynamic
links from a directory inside the dynamic linker path into the framework,
which work, but then you can't move the framework anywhere else on
the system, otherwise you break the link, and nothing will find the
framework any longer!
On systems without dynamic links, like Windows, we can't even do this!
We have to copy the library from the framework into the dynamic linker
path, but that is simply a shared library then! Absolutely @emph{no}
difference. You put the dynamic library in a system directory in the
dynamic linker path, and associate with that library a resource directory.
OpenStep for Windows did that, and still called them frameworks.
So we can do the same, and call our libraries frameworks.
In a shared library, the shared dynamic library is in a directory which is
in the path to the dynamic linker. the dynamic linker can find it very
easily. this is how all shared and static libraries work on UNIX systems,
Windows systems and possibly most system at all.
Moreover, the OpenStep API requires us to provide some stuff for
frameworks, like creating and registering automatically a framework
object each time a framework is used (linked at runtime, or linked into
the app), and attaching to it the list of classes inside the framework -
which are not particularly trivial to implement --- they depend on playing
with the linker and the object file format --- and might produce troubles
when porting. And we never use these facilities.
For Apple Mac OS X sure it's easier. They can modify
the system linker, compiler, the system dynamical linker. They
always know on which platform they are working (their own), etc. They can
modify the system to support frameworks natively. Easy that way.
But GNUstep is meant to run on many different platforms, platforms which
we don't control (Windows, Sun Solaris, Darwin, GNU/Linux, UNIX system
variants) and which have different linkers and do not support frameworks
natively. On some systems it's difficult to just load a bundle or
compile a shared library!
So building the core libraries as 'libraries' means that it's much
easier to port them, and it's much more difficult to break them.
Sure, frameworks have a bundle of resources associated with it --- but we
can very easily associate a bundle of resource with a shared library, no
reason why not. We are doing it.
So please note that GNUstep libraries are meant to be much similar to
Mac OS X frameworks. They are composed of a shared library and
associated with a bundle of resources. There is a difference in
terminology, in where the resources are installed, and possibly a slight
difference in the NSBundle API to get to the resource bundle (anyway,
it's a one line difference between Mac OS X and GNUstep, so it looks like
very easy to #ifdef).
In other words, GNUstep libraries are meant to basically do the same as
frameworks do on Mac OS X, but to be portable to very different platforms (such
as Windows).
@c ****************************************************************
@node Troubleshooting, , Compatibility and Layout, Top
@section Troubleshooting
@menu
* Problems compiling (loading shared libs)::
* Problems compiling (GNUstep Internal Error)::
* Problems with Alt key::
* Problems with gcc3::
* Problems with fonts::
* No characters displayed::
* No Makefile::
@end menu
@node Problems compiling (loading shared libs), Problems compiling (GNUstep Internal Error), Troubleshooting, Troubleshooting
@subsection Problems compiling (loading shared libs)
If you get something like
@example
plmerge: error while loading shared libraries:
libgnustep-base.so.1: cannot open shared object file: No such file or directory
@end example
or this:
@example
Making all for service example...
make[2]: *** [example.service/Resources/Info-gnustep.plist] Error 1
make[1]: *** [example.all.service.variables] Error 2
make[1]: Leaving directory `/home/multix/gnustep-gui-0.8.6/Tools'
make: *** [internal-all] Error 2
@end example
This means your GNU make is being overly protective. When you try to
become root (e.g. to install something), certain environment variables
like LD_LIBRARY_PATH are unset in order to reduce the possibility of
a security breach. If you are becoming root to install
something, you need to exec the GNUstep.sh file as root, just as you
do when you login. Although for simplicity, you can also try this:
@example
make LD_LIBRARY_PATH=$LD_LIBRARY_PATH
@end example
You could also be having problems with gcc. gcc 2.96 does not work
(Mandrake 8.1, perhaps others). Use a different compiler, like gcc 3.x.
@node Problems compiling (GNUstep Internal Error), Problems with Alt key, Problems compiling (loading shared libs), Troubleshooting
@subsection Problems compiling (GNUstep Internal Error)
If you get
@example
GNUSTEP Internal Error:
The private GNUstep function to establish the argv and environment
variables was not called.
Please report the error to bug-gnustep@@gnu.org.
@end example
when compiling the gui library, there could be several things wrong. One
is that you installed the gnustep-objc library, but the compiler
found another Objecive-C library (like the one that came with gcc). If
you are using gcc 3.x, DO NOT use the gnustep-objc library.
There could also be a mismatch between the base and gui library versions.
Make sure you have the latest release of each library installed.
@node Problems with Alt key, Problems with gcc3, Problems compiling (GNUstep Internal Error), Troubleshooting
@subsection Problems with Alt key
It's possible the Alt key is not where you think it is or is defined
incorrectly. Try running the GSTest application, KeyboardInput test
(located in the examples package
at @url{ftp://ftp.gnustep.org/pub/gnustep/core}) to test it.
See
@url{http://www.gnustep.org/resources/documentation/User/Gui/KeyboardSetup.html}
for information on how to change the settings.
If you are using WindowMaker, it's possible it is grabing this key and
using it for itself. To check, open Window Maker's WPrefs and go to the
Mouse Preferences. Then use another value for the "Mouse grab modifier"
(bottom right). That will allow you to alt-drag things.
@node Problems with gcc3, Problems with fonts, Problems with Alt key, Troubleshooting
@subsection Problems with gcc3
Don't forget you need to update binutils and libc also.
@node Problems with fonts, No characters displayed, Problems with gcc3, Troubleshooting
@subsection Problems with fonts
Why do the characters get changed to asterisks ('*')?
The problem you are getting come from the fact that the xlib backend
(when not using Xft) will only use one fixed X font for a given
font name. If the font "helvetica" is used inside of GNUstep the
one selected X font, in your case
"-*-helvetica-medium-r-normal--12-*-*-*-p-*-iso8859-1" is used. So
only characters (or glyphs) that are available in that font can be
displayed. The selection of which font name to use happens inside the
font_cacher and is more or less at random (the order fonts are
listed by the X system).
You can influence the fonts that are available by setting:
@example
defaults write NSGlobalDomain GSFontMask "*iso8859-13"
font_cacher
@end example
(or using a different character set, like iso8859-2). This is really a
bug in GNUstep, but it hasn't been fixed yet.
The other option is the use the art backend, which handles fonts much
better. When compiling gnustep-back, start with
@example
./configure --enable-graphics=art
@end example
@node No characters displayed, No Makefile, Problems with fonts, Troubleshooting
@subsection No characters displayed.
When using the xlib backend, no characters are displayed in any GNUstep
applications.
The xlib backend has font anti-aliasing turned on by default. It's possible
that GNUstep can't find any fonts on your system that can be properly anti-
aliased. Try
@example
defaults write NSGlobalDomain GSFontAntiAlias NO
@end example
to turn off font anti-aliasing.
@node No Makefile, , No characters displayed, Troubleshooting
@subsection No Makefile
I tried to compile something and I get:
@example
GNUmakefile:27: /Makefiles/common.make: No such file or directory
GNUmakefile:39: /Makefiles/aggregate.make: No such file or directory
gmake: *** No rule to make target `/Makefiles/aggregate.make'. Stop.
@end example
Make sure you have installed the gnustep-make package and also type:
@example
source /usr/GNUstep/System/Library/Makefiles/GNUstep.sh
@end example
You can put this line in your @file{.profile} or @file{.bash_profile} file
so that it is done automatically when you log in.
@bye
\bye

541
trunk/FAQ
View file

@ -1,541 +0,0 @@
1 GNUstep Frequently Asked Questions with Answers
*************************************************
Last updated 11 April 2007. Please send corrections to
<gnustep-maintainer@gnu.org>. Also look at the user FAQ for more user
oriented questions.
1.1 Compatibility
=================
1.1.1 Is it easy to port OPENSTEP programs to GNUstep?
------------------------------------------------------
It is probably easy for simple programs. There are some portability
tools to make this easier, or rewrite the Makefiles yourself. You will
also have to translate the NIB files (if there are any) to GNUstep
model files using the nib2gmodel program (from
`ftp://ftp.gnustep.org/pub/gnustep/dev-apps').
1.1.2 How about porting between Cocoa and GNUstep?
--------------------------------------------------
It's easier from GNUstep to Cocoa than Cocoa to GNUstep. Cocoa is
constantly changing, much faster than GNUstep could hope to keep up.
They have added extensions and new classes that aren't available in
GNUstep yet. Plus there are some other issues. If you start with Cocoa:
* Use #ifndef GNUSTEP for Apple only code.
* Do not use CoreFoundation
* Do not use Objective-C++ (except with gcc 4.1 or later)
* Do not use Quicktime or other proprietary extension
* GNUstep should be able to read Cocoa nib files automatically, so
there is no need to port these, although you might want to have
GNUstep specific versions of them anyway.
See also
`http://mediawiki.gnustep.org/index.php/Writing_portable_code' for more
information.
1.1.3 Tools for porting
-----------------------
While the programming interface should be almost transparent between
systems (expect for the unimplemented parts, of course), there are a
variety of other files and tools that are necessary for porting
programs.
`ni2gmodel'
This program coverts nib files from any system, such as OPENSTEP to
a gmodel format file. Gmodel can be read directly by GNUstep or
you can convert this to a more GNUstep-native gorm format (using
the Gorm interface modeller). Note this is not necessary for Cocoa
nibs - GNUstep can read these directly.
`Renaissance'
GNUstep Renaissance allows you to describe your user interfaces
(that is, the windows in your application, and the buttons, boxes,
textfields, etc in the windows) in simple and intuitive XML files,
using an open, standard format describing the logic of the
interface. It has a number of advantages over the proprietary nib
format: portability, open standard, easy localization,
themeability, and intelligent autolayout.
`Gorm'
The equivalent of the Interface Builder in GNUstep. It might be
easier to just recreate the interface using Gorm rather than
dealing with translations.
`OpenStep2GNUConverter and nfmake'
Two programs that allow you to convert PB files to GNUstep
makefiles or compile a program on GNUstep directly from PB files.
They probably work only for OPENSTEP systems and are a little
out-of-date.
`StepTalk'
A portable scripting environment that lets your do scripting in
almost any language you like.
1.1.4 Can I transfer archived data from GNUstep to Cocoa?
---------------------------------------------------------
Apple's archiving format is proprietary and not documented, so this
poses a problem for anyone wanting to implement compatibility with it.
However, even if we reverse engineered the format, there are enough
differences between the class and ivar layouts to make this sort of
compatibility difficult. Not to mention the fact that we would
constantly have to keep up with the changes Apple made.
The new keyed archiving using XML file formats is much more portable,
and GNUstep is trying to maintain compatibility with Apple with this
type of archiving.
1.1.5 Does distributed objects work between GNUstep and Cocoa?
--------------------------------------------------------------
See the answer to the previous question (on archive compatibility) for
why this won't work either.
1.1.6 Is there an Interface Builder for GNUstep?
------------------------------------------------
There is an Interface Builder for GNUstep called Gorm. A lot of work
has been put into it and it works very well. You can download it from
the ftp site or via http. The Project Manager ProjectCenter is also
available.
1.1.7 Can I use my original NIB files?
--------------------------------------
No - NeXT/Apple never documented their nib format, so GNUstep supports
both the 'gmodel' format (which stores information as text
(property-lists) and can therefore be edited 'by hand') and binary
archive format (which can be edited by Gorm). There IS a conversion
tool called nib2gmodel that can be compiled under OPENSTEP to convert
nib files to GNUstep gmodel files.
Newer nib files use XML format keyed archiving and may possibly be
transportable, although differences in class and ivar layout may still
make this difficult.
1.1.8 Can one use the hybrid "Objective-C++"
--------------------------------------------
No. at present the GNU compiler (gcc) does not support "Objective-C++".
Soon to br released gcc 4.1 will have this support, but it is still
unclear how robust it will be.
1.1.9 Is there a plan to support the Java/YellowBox Bindings?
-------------------------------------------------------------
Yes. The GNustep Java library/bridge called JIGS is available now. JIGS
is a free (LGPL) Java Interface for GNUstep; it can automatically wrap
Objective-C libraries based on GNUstep, making them accessible directly
to the Java programmer as if they were Java libraries. As a side effect,
it is also possible to use the whole engine in the reverse way: JIGS
provides a high level API to allow Objective-C programmers to start java
virtual machines inside GNUstep Objective-C code and access java objects
in the java virtual machine transparently, as if they were objective-C
objects.
1.1.10 What if I compile GNUstep under OPENSTEP/MacOS X?
--------------------------------------------------------
GNUstep uses the X-windows display postscript extension. The interface
to that is not the same as the interface to the OPENSTEP/MacOS-X
windows server. While someone could write a backend library to provide
the interface, nobody has bothered to date.
You can, however, use a GNUstep program with an X11 server running
on MacOSX.
1.1.11 Is the Objective C API for GTK related?
----------------------------------------------
No. GNUstep applications provide their GUI via the OpenStep API, which
provides fully object-oriented access to GUI manipulation.
The object-oriented nature of the libraries and language make it
much easier for new users to create their own subclasses rather than
simply using the supplied widgets as in other frameworks.
1.1.12 How about implementing parts of the Application Kit with GTK?
--------------------------------------------------------------------
Yes and No - The GNUstep architecture provides a single,
platform-independent, API for handling all aspects of GUI interaction
(implemented in the gstep-gui library), with a backend architecture
that permits you to have different display models (display postscript,
X-windows, win32, berlin ...) while letting you use the same code for
printing as for displaying. Use of GTK in the frontend gui library
would remove some of those advantages without adding any.
That being said, a backend library could be implemented using gtk if
anyone wanted to do so. Since the frontend library handles most of the
work involved in implementing the OpenStep API, the backend is a
relatively thin layer and the advantages of GTK over direct xlib or
win32 calls is likely to be minimal. If/when GTK is ported to more
systems, a backend written using it could be a valuable asset -
volunteers are, as always, welcome.
1.2 Compiling and Developing
============================
1.2.1 How can I get started programming?
----------------------------------------
Good question. Read the tutorials at the GNUstep web site. Also look at
Apple's documentation (pointers in the Resources section on the GNUstep
web site.)
1.2.2 How can I help with GNUstep?
----------------------------------
1. Write/debug library code
2. Write documentation
3. Update the task list and library headers
4. Write applications
Let people know what you are doing. Break your project up into the
smallest units you can. Feed back frequent updates to the maintainers.
Ask questions in the discussion mailing list.
Do remember that any changes beyond a few lines of code (or
documentation) require a disclaimer or copyright assignment to the Free
Software Foundation before they can be incorporated into the project.
Get in touch with the GNUstep maintainer about this.
Don't start with large-scale reorganization of anything - instead,
get a general idea in mind of what you want to do, and proceed as much
as possible with incremental changes that don't break anything - that
way you can make those incremental changes available to the rest of the
community at frequent intervals.
Don't be afraid to give up - there is no shame in finding out that
you have take on too large/complex a project. It's much better to
'resign' and take on a smaller job than to just stop without telling
anyone.
Please document the code you add or change (using autogsdoc comments
that begin with a slash and two asterices). But PLEASE, do not copy from
the Apple documentation or any other copyrighted documentation.
1.2.3 Helping develop GNUstep
-----------------------------
There is plenty of unimplemented stuff in the gui library and backend
libraries that volunteers can work on - just browse through the code
and see if it conforms to the documentation.
Specific tasks are noted in the developers section on the GNUstep
website.
Once you have coded something, you could always write a testcase and
documentation for it :-)
1.2.4 Helping document GNUstep
------------------------------
All class documentation is written directly in the source code itself
and translated using the autogsdoc program. See the source code and
documentation for autogsdoc for information on documenting the classes.
Newcomers could write documentation for individual classes by
comparing the OpenStep specification, the MacOS-X documentation, and
the GNUstep source. Documentation should clearly note where individual
methods are specific to OpenStep, MacOS-X or are GNustep extensions.
More experienced people could write documentation on general
programming topics, and tutorials for new users.
Anyone willing to write documentation, either tutorials for using
GNUstep, or reference documentation for individual classes, should
either write it in gsdoc or as plain ascii text for someone else to
format into gsdoc.
GNUstep documentation should have copyright assigned to the Free
Software Foundation.
1.2.5 How do I assign my contribution?
--------------------------------------
Everyone who contributes more than 20 lines of code or so needs to sign
a copyright assignment so that the FSF can have legal control of the
copyright. This makes it easier to defend against any copyright
infringement suits. Contact the GNUstep maintainer for instructions on
how to do this or download and fill out the form
`http://www.gnustep.org/resources/request-assign.future' (instructions
are included).
1.2.6 How do I update the task list?
------------------------------------
The task list (`http://savannah.gnu.org/pm/?group_id=99') is supposed
to tell people what jobs are waiting to be done. Feel free to add to it
or update the tasks that are there (you need to create a login for
yourself first).
One job of major importance that pretty much anyone can do is to
look for jobs to add to the task list. In the case of methods from the
OpenStep specification or the MacOS-X documentation not being present
in the GNUstep libraries, it is also helpful to add the method
prototypes to the library header files.
Send any changes or additions to <bug-gnustep@gnu.org>.
A beginner can look through the MacOS-X documentation, the OpenStep
specification and the GNUstep source and contribute task items.
If a class or method is in MacOS-X and OpenStep but is not in
GNUstep - it's a high priority TODO and should at least be added to the
GNUstep headers and a dummy version added to the source with a FIXME
comment.
If a class or method is in MacOS-X but not OpenStep or GNUstep -
it's a low priority TODO. It should be added to the GNUstep headers
bracketed in `#ifndef STRICT_OPENSTEP'
If a class or method is in OpenStep but not in MacOS-X or GNUstep -
it's a low priority TODO. It should be added to the GNUstep headers
bracketed in `#ifndef STRICT_MACOS_X'
There are a couple of people working on this already, so it's a good
idea to get in touch with Adam or Richard to coordinate efforts.
1.2.7 How do I start writing tests?
-----------------------------------
You can write testcases - where the libraries fail tests, you could
either fix the problem, or add it to the task list.
To write testcases, you need to use svn to install the latest
GNUstep sourcecode you can find. Then checkout the
'gnustep/tools/testsuite' module from svn.
1.2.8 How do I start writing applications?
------------------------------------------
You can either look at the links on the GNUstep website for
applications that have been started, and email their owners to
volunteer to help, or you can start your own project.
1.2.9 How can I help with the GNUstep website?
----------------------------------------------
Talk to Adam Fedor <fedor@gnu.org>, the maintainer.
The GNUstep website is kept as a CVS module, but the largest portions
of it (the FAQ and the Documentation) are actually generated from files
in the individual GNUstep packages. Many highly changeable portions
are kept on the Wiki, so anyone can change these (first you need to get
write access, though).
If you want to update the FAQ or documentation - grab the latest
snapshot of the GNUstep core you can find, update it from the svn
repository, and work with the contents of the appropriate documentation
directory.
If you want to work on other parts of the website, you can grab a
copy of the website via anonymous CVS. See
`http://savannah.gnu.org/cvs/?group_id=99' for instructions on how to
do that.
The main task with the website is to figure out which bits are
out-of-date (or wrong) and update/mark-as-outdated as required.
1.2.10 Why doesn't GDB support Objective-C?
-------------------------------------------
Um, it does. As of GDB 6.0, gdb supports debugging of Objective-C code.
1.3 GNU Objective C Compiler and Runtime
========================================
1.3.1 What is the Objective C Runtime?
--------------------------------------
The Objective C Runtime Library provides C functions and data structures
required to execute an Objective C program.
The GNU Objective C Runtime Library offers everything NeXT's runtime
does, including Categories, Protocols, `+poseAs:', thread-safety, class
initialization on demand, delayed loading of classes, and
initialization of static instances (such as @""-style string objects).
It also has several differences over NeXT's implementation:
* GNU's runtime provides "selector-types" along with each selector;
NeXT's does not. A selector-type is a string that describes the C
variable types for the method's return and argument values. Among
other uses, selector-types is extremely helpful for fast
distributed objects implementations, (see GNUstep Base Library
Section, below).
* Many of the GNU functions have different names than their
corresponding NeXT functions; the GNU names conform to the GNU
coding standards. The GNUstep base library contains a
compatibility header that works with both runtimes. You should use
functions there or use OpenStep Foundation methods/functions
instead of the basic runtime functions so that you code can run
with either system.
Apple has recently added new functionality to their runtime,
including built-in exception handling, etc. Hopefully these will
be ported to the GNU runtime in the future.
1.4 GNUstep Base Library
========================
1.4.1 What is the GNUstep Base Library?
---------------------------------------
The GNUstep Base Library is a library of general-purpose, non-graphical
Objective C objects. For example, it includes classes for strings,
object collections, byte streams, typed coders, invocations,
notifications, notification dispatchers, moments in time, network ports,
remote object messaging support (distributed objects), event loops, and
random number generators.
It provides functionality that aims to implement the non-graphical
portion of the OpenStep standard (the Foundation library).
1.4.2 What is its current state of development?
-----------------------------------------------
GNUstep base is currently stable and, to the best of our knowledge,
implements all of the OpenStep functionality (except for a few classes
that we feel are not useful). It also implements most all of the new
Cocoa classes. However we do some things, like scripting, differently,
so we don't implement all the Cocoa classes.
1.4.3 What are the features of GNU Distributed Objects?
-------------------------------------------------------
GNU Distributed Objects has many of the features of other distributed
objects implementations, but, since it is free software, it can be
ported to platforms for which other distributed objects implementations
are not available.
[ NOTE: The GNU distributed object facilities have the same
ease-of-use as Apple's; be warned, however, that they are not
compatible with each other. They have different class hierarchies,
different instance variables, different method names, different
implementation strategies and different network message formats. You
cannot communicate with a Apple NSConnection using a GNU NSConnection.
Here are some differences between GNU distributed objects and Apple's
distributed objects: Apple NSDistantObject asks it's remote target for
the method encoding types and caches the results; GNU NSDistantObject
gets the types directly from the local GNU "typed selector" mechanism
if the information is known locally and only queries the remote target
or caching encoding types when using a method that is not known to the
local process. The NSProxy for the remote root object always has name
and, once set, you cannot change the root object of a NSConnection; the
GNU Proxy for the remote root object has a target address value just
like all other Proxy's, and you can change the root object as many
times as you like. ].
1.5 GNUstep GUI Library
=======================
1.5.1 What is the GUI Library?
------------------------------
The GNUstep GUI Library is a library of objects useful for writing
graphical applications. For example, it includes classes for drawing
and manipulating graphics objects on the screen: windows, menus,
buttons, sliders, text fields, and events. There are also many
peripheral classes that offer operating-system-independent interfaces to
images, cursors, colors, fonts, pasteboards, printing. There are also
workspace support classes such as data links, open/save panels,
context-dependent help, spell checking.
It provides functionality that aims to implement the `AppKit'
portion of the OpenStep standard. However the implementation has been
written to take advantage of GNUstep enhancements wherever possible.
1.5.2 Explain the organization of the front- and back-ends
----------------------------------------------------------
The GNUstep GUI Library is divided into a front- and back-end. The
front-end contains the majority of implementation, but leaves out the
low-level drawing and event code. A back-end can override whatever
methods necessary in order to implement low-level drawing event
receiving. Different back-ends will make GNUstep available on various
platforms. The default GNU back-end will run on top of X Windows.
Other back-ends could allow GNUstep to run on OpenGL and WIN32
graphics/event platforms. Much work will be saved by this clean
separation between front- and back-end, because it allows different
platforms to share the large amount of front-end code.
1.5.3 What is the current state of development of the front-end?
----------------------------------------------------------------
Many of the classes are well implemented, if not thoroughly tested.
See the GNUstep web sites and read status information contained in the
distribution for the most up-to-date information.
1.5.4 What is the current state of development of the back-ends?
----------------------------------------------------------------
There are several backends currently available:
`xlib'
This backend runs on X11 and uses standard xlib calls for
implementing drawing. It works well, but is limited in many areas
due to the limitations of xlib drawing.
`art'
This is a very good backend that draws using the libart package and
freetype with near PostScript quality and functionality. It is
currently the standard backend (as long as the required libraries
are installed).
`w32'
This backend works on Windows and uses basic Windows drawing
`cairo'
An up-and-coming backend. It still relies on unpublished functions
in the cairo library so using it is not for the beginner.
1.6 GNUstep DisplayGhostScript Server
=====================================
1.6.1 What is the Display Ghostscript Server?
---------------------------------------------
It is a free implementation of a Display PostScript server based on the
GNU Ghostscript program developed by Aladdin Enterprises and now owned
by artofcode LLC.
At one point, GNUstep was using this for display purposes. However
the development of DGS has stopped as it is too difficult to maintain
and no one wanted to work on it. Now we are using other means of
drawing.
1.6.2 What is its current state of development?
-----------------------------------------------
GNU contracted with Aladdin Enterprises to add some key features to GNU
Ghostscript so it could be used as a DPS server. This work has mostly
been done, although Aladdin did not completely finish the work that they
were contracted for. (Because the work took longer than specified and
was not completed, Aladdin agreed to waive approximately $10,000 in
promised fees for the work that was actually done and delivered.) DGS
works fairly well with a single context. Alpha channel and compositing
doesn't work.
1.6.3 What is the relationship between the Display Ghostscript Server and X Windows?
------------------------------------------------------------------------------------
Display Ghostscript runs on top of X Windows.

View file

@ -1,54 +0,0 @@
*** What is the FilesystemLayouts directory ***
This directory contains filesystem layouts that you can use when you
configure your gnustep-make.
A filesystem layout describes how the GNUstep installation domains
(System, Network, Local, User) map to directories on disk.
Every file in this directory is a filesystem layout that you can use
in gnustep-make's ./configure (technical note: the files are shell
files that are directly included by ./configure and that should set the
specified variables). For example:
./configure --with-layout=fhs
./configure --with-layout=fhs-system
By default, the GNUstep layout is used.
If you want to use your own custom layout, just start with one of the
existing layouts, copy it into a new file, and edit it. :-)
*** Popular Fileystem Layouts ***
Here is a list of popular filesystem layout --
* gnustep: default GNUstep filesystem layout; it installs everything
into /usr/GNUstep/System, /usr/GNUstep/Local. It's a very friendly
layout, similar to the ones found on NeXTstep, OpenStep and Apple Mac
OS X. It's a layout that can work nicely with fat binaries, but may
not blend very well with the native environment because everything is
installed in special, GNUstep-only, directories, so you may need to
source a special script (GNUstep.sh) before being able to use the
layout. Recommended for the advanced GNUstep users and the
NeXTstep/Apple fans.
* fhs: standard FHS Unix layout for locally compiled software; it
installs everything into /usr/local. Blends very well with native
GNU/Linux systems (and other Unix systems with similar directory
structure). Recommended if you're compiling from sources on Unix and
want good integration with your native system.
* fhs-system: standard FHS layout for software to be shipped as part
of distributions/systems; it installs system stuff into /usr, and is
ready to support local stuff to be installed into /usr/local. Blends
wonderfully with native GNU/Linux systems (and other Unix systems with
similar directory structure) as you're installing everything straight
into the standard system locations. Recommended if you're building
packages for a Unix system.

View file

@ -1,82 +0,0 @@
#
# FHS (Filesystem Hierarchy Standard) filesystem layout
#
# This is the standard FHS Unix filesystem layout to use when
# installing everything into /usr/local. Use this on GNU/Linux (or
# any Unix with a similar filesystem layout) if you want GNUstep to
# blend in your GNU/Linux environment and you are compiling all of
# your GNUstep system from source.
#
# Basically, it's a standard FHS Unix filesystem with all domains mapped
# into the same /usr/local directory.
# Make sure you have /usr/local/bin in your PATH, and /usr/local/lib
# in your /etc/ld.so.conf (or equivalent for your Unix), and don't
# forget to run ldconfig after installing a library! To use
# gnustep-make in this environment, use 'export
# GNUSTEP_MAKEFILES=/usr/local/share/GNUstep/Makefiles'
# By default, we install into /usr/local, but this can be overridden
# by using ./configure --prefix=xxx when configuring.
GNUSTEP_DEFAULT_PREFIX=/usr/local
# These are only used by gnustep-base to implement the NSUserDirectory
# API. We never install anything in them. They will be used as they
# are without $prefix.
GNUSTEP_SYSTEM_USERS_DIR=/home
GNUSTEP_NETWORK_USERS_DIR=/home
GNUSTEP_LOCAL_USERS_DIR=/home
# NB: $prefix will be added to all the MAKEFILES/SYSTEM/NETWORK/LOCAL
# paths.
GNUSTEP_MAKEFILES=/share/GNUstep/Makefiles
GNUSTEP_SYSTEM_APPS=/lib/GNUstep/Applications
GNUSTEP_SYSTEM_ADMIN_APPS=/lib/GNUstep/Applications
GNUSTEP_SYSTEM_WEB_APPS=/lib/GNUstep/WebApplications
GNUSTEP_SYSTEM_TOOLS=/bin
GNUSTEP_SYSTEM_ADMIN_TOOLS=/sbin
GNUSTEP_SYSTEM_LIBRARY=/lib/GNUstep
GNUSTEP_SYSTEM_HEADERS=/include
GNUSTEP_SYSTEM_LIBRARIES=/lib
GNUSTEP_SYSTEM_DOC=/share/GNUstep/Documentation
GNUSTEP_SYSTEM_DOC_MAN=/man
GNUSTEP_SYSTEM_DOC_INFO=/info
GNUSTEP_NETWORK_APPS=/lib/GNUstep/Applications
GNUSTEP_NETWORK_ADMIN_APPS=/lib/GNUstep/Applications
GNUSTEP_NETWORK_WEB_APPS=/lib/GNUstep/WebApplications
GNUSTEP_NETWORK_TOOLS=/bin
GNUSTEP_NETWORK_ADMIN_TOOLS=/sbin
GNUSTEP_NETWORK_LIBRARY=/lib/GNUstep
GNUSTEP_NETWORK_HEADERS=/include
GNUSTEP_NETWORK_LIBRARIES=/lib
GNUSTEP_NETWORK_DOC=/share/GNUstep/Documentation
GNUSTEP_NETWORK_DOC_MAN=/man
GNUSTEP_NETWORK_DOC_INFO=/info
GNUSTEP_LOCAL_APPS=/lib/GNUstep/Applications
GNUSTEP_LOCAL_ADMIN_APPS=/lib/GNUstep/Applications
GNUSTEP_LOCAL_WEB_APPS=/lib/GNUstep/WebApplications
GNUSTEP_LOCAL_TOOLS=/bin
GNUSTEP_LOCAL_ADMIN_TOOLS=/sbin
GNUSTEP_LOCAL_LIBRARY=/lib/GNUstep
GNUSTEP_LOCAL_HEADERS=/include
GNUSTEP_LOCAL_LIBRARIES=/lib
GNUSTEP_LOCAL_DOC=/share/GNUstep/Documentation
GNUSTEP_LOCAL_DOC_MAN=/man
GNUSTEP_LOCAL_DOC_INFO=/info
GNUSTEP_USER_DIR_APPS=GNUstep/Applications
GNUSTEP_USER_DIR_ADMIN_APPS=GNUstep/Applications/Admin
GNUSTEP_USER_DIR_WEB_APPS=GNUstep/WebApplications
GNUSTEP_USER_DIR_TOOLS=GNUstep/Tools
GNUSTEP_USER_DIR_ADMIN_TOOLS=GNUstep/Tools/Admin
GNUSTEP_USER_DIR_LIBRARY=GNUstep/Library
GNUSTEP_USER_DIR_HEADERS=GNUstep/Library/Headers
GNUSTEP_USER_DIR_LIBRARIES=GNUstep/Library/Libraries
GNUSTEP_USER_DIR_DOC=GNUstep/Documentation
GNUSTEP_USER_DIR_DOC_MAN=GNUstep/Documentation/man
GNUSTEP_USER_DIR_DOC_INFO=GNUstep/Documentation/info
GNUSTEP_USER_CONFIG_FILE=.GNUstep.conf
GNUSTEP_USER_DEFAULTS_DIR=GNUstep/Defaults

View file

@ -1,87 +0,0 @@
#
# FHS (Filesystem Hierarchy Standard) filesystem layout for system installations
#
# This is the standard FHS Unix filesystem layout to use when
# installing into /usr. Use this if you want GNUstep to blend into
# your GNU/Linux filesystem (or any other Unix with a similar
# filesystem) and you are compiling gnustep-make so that it can be
# shipped as part of a distribution/basic system installation.
#
# We put SYSTEM into /usr, and LOCAL into /usr/local. This allows you
# to make a distinction between stuff that you ship as part of your
# system/distribution, and the local stuff installed by the local
# sysadmin. Make sure you compile/install all packages that you want
# to go into /usr (ie, be part of the system/distribution) using
# 'make install GNUSTEP_INSTALLATION_DOMAIN=SYSTEM'
#
# To get system packages to work in this layout, you need /usr/bin in
# your PATH, and /usr/lib in your /etc/ld.so.conf (or equivalent for
# your Unix). Don't forget to run ldconfig after installing a
# library!
#
# Your users will need to also add /usr/local/bin to PATH and
# /usr/local/lib to /etc/ld.so.conf (or equivalent for your Unix) if
# they want to use the LOCAL domain. To use gnustep-make in this
# environment, use 'export
# GNUSTEP_MAKEFILES=/usr/share/GNUstep/Makefiles'
# By default, we install into /usr, but this can be overridden
# by using ./configure --prefix=xxx when configuring.
GNUSTEP_DEFAULT_PREFIX=/usr
# These are only used by gnustep-base to implement the NSUserDirectory
# API. We never install anything in them. They will be used as they
# are without $prefix.
GNUSTEP_SYSTEM_USERS_DIR=/home
GNUSTEP_NETWORK_USERS_DIR=/home
GNUSTEP_LOCAL_USERS_DIR=/home
# NB: $prefix will be added to all the MAKEFILES/SYSTEM/NETWORK/LOCAL
# paths.
GNUSTEP_MAKEFILES=/share/GNUstep/Makefiles
GNUSTEP_SYSTEM_APPS=/lib/GNUstep/Apps
GNUSTEP_SYSTEM_ADMIN_APPS=/lib/GNUstep/Apps
GNUSTEP_SYSTEM_TOOLS=/bin
GNUSTEP_SYSTEM_ADMIN_TOOLS=/sbin
GNUSTEP_SYSTEM_LIBRARY=/lib/GNUstep
GNUSTEP_SYSTEM_HEADERS=/include
GNUSTEP_SYSTEM_LIBRARIES=/lib
GNUSTEP_SYSTEM_DOC=/share/GNUstep/Documentation
GNUSTEP_SYSTEM_DOC_MAN=/man
GNUSTEP_SYSTEM_DOC_INFO=/info
GNUSTEP_NETWORK_APPS=/local/lib/GNUstep/Apps
GNUSTEP_NETWORK_ADMIN_APPS=/local/lib/GNUstep/Apps
GNUSTEP_NETWORK_TOOLS=/local/bin
GNUSTEP_NETWORK_ADMIN_TOOLS=/local/sbin
GNUSTEP_NETWORK_LIBRARY=/local/lib/GNUstep
GNUSTEP_NETWORK_HEADERS=/local/include
GNUSTEP_NETWORK_LIBRARIES=/local/lib
GNUSTEP_NETWORK_DOC=/local/share/GNUstep/Documentation
GNUSTEP_NETWORK_DOC_MAN=/local/man
GNUSTEP_NETWORK_DOC_INFO=/local/info
GNUSTEP_LOCAL_APPS=/local/lib/GNUstep/Apps
GNUSTEP_LOCAL_ADMIN_APPS=/local/lib/GNUstep/Apps
GNUSTEP_LOCAL_TOOLS=/local/bin
GNUSTEP_LOCAL_ADMIN_TOOLS=/local/sbin
GNUSTEP_LOCAL_LIBRARY=/local/lib/GNUstep
GNUSTEP_LOCAL_HEADERS=/local/include
GNUSTEP_LOCAL_LIBRARIES=/local/lib
GNUSTEP_LOCAL_DOC=/local/share/GNUstep/Documentation
GNUSTEP_LOCAL_DOC_MAN=/local/man
GNUSTEP_LOCAL_DOC_INFO=/local/info
GNUSTEP_USER_DIR_APPS=GNUstep/Applications
GNUSTEP_USER_DIR_ADMIN_APPS=GNUstep/Applications/Admin
GNUSTEP_USER_DIR_TOOLS=GNUstep/Tools
GNUSTEP_USER_DIR_ADMIN_TOOLS=GNUstep/Tools/Admin
GNUSTEP_USER_DIR_LIBRARY=GNUstep/Library
GNUSTEP_USER_DIR_HEADERS=GNUstep/Library/Headers
GNUSTEP_USER_DIR_LIBRARIES=GNUstep/Library/Libraries
GNUSTEP_USER_DIR_DOC=GNUstep/Documentation
GNUSTEP_USER_DIR_DOC_MAN=GNUstep/Documentation/man
GNUSTEP_USER_DIR_DOC_INFO=GNUstep/Documentation/info
GNUSTEP_USER_CONFIG_FILE=.GNUstep.conf
GNUSTEP_USER_DEFAULTS_DIR=GNUstep/Defaults

View file

@ -1,92 +0,0 @@
#
# GNUstep filesystem layout
#
# This is the standard GNUstep filesystem layout. It's a layout very
# similar to the ones found on NeXTstep, OpenStep and Apple Mac OS X.
#
# This is also a layout well suited to use fat binaries: binaries
# for multiple cpu/os/*step libraries in the same installation. The
# 'fat binary' support is called 'non-flattened' in GNUstep parlance,
# and is disabled by default. You can activate it by with ./configure
# --disable-flattened. It's cool, but your directory structure
# becomes more complex to account for all the types of binaries and
# systems. It's recommended that you source GNUstep.sh if you're
# using the non-flattened layout (the command is:
# '. $GNUSTEP_MAKEFILES/GNUstep.sh', and notice the '.' and the space
# after it).
#
# If the layout is flattened, it's still a good idea to source
# GNUstep.sh if it's not too much trouble for you, else you can
# manually add /usr/GNUstep/System/Tools and /usr/GNUstep/Local/Tools
# to your PATH, /usr/GNUstep/System/Library/Libraries and
# /usr/GNUstep/Local/Library/Libraries to your LD_LIBRARY_PATH (or
# /etc/ld.so.conf + ldconfig).
#
# To use gnustep-make in this environment, source GNUstep.sh or use
# 'export GNUSTEP_MAKEFILES=/usr/GNUstep/System/Library/Makefiles'.
# By default, we install into /usr/GNUstep, but this can be overridden
# by using ./configure --prefix=xxx when configuring.
GNUSTEP_DEFAULT_PREFIX=/usr/GNUstep
# These are only used by gnustep-base to implement the NSUserDirectory
# API. We never install anything in them. They will be used as they
# are without $prefix.
GNUSTEP_SYSTEM_USERS_DIR=/home
GNUSTEP_NETWORK_USERS_DIR=/home
GNUSTEP_LOCAL_USERS_DIR=/home
# NB: $prefix will be added to all the MAKEFILES/SYSTEM/NETWORK/LOCAL
# paths.
GNUSTEP_MAKEFILES=/System/Library/Makefiles
GNUSTEP_SYSTEM_APPS=/System/Applications
GNUSTEP_SYSTEM_ADMIN_APPS=/System/Applications/Admin
GNUSTEP_SYSTEM_WEB_APPS=/System/Library/WebApplications
GNUSTEP_SYSTEM_TOOLS=/System/Tools
GNUSTEP_SYSTEM_ADMIN_TOOLS=/System/Tools/Admin
GNUSTEP_SYSTEM_LIBRARY=/System/Library
GNUSTEP_SYSTEM_HEADERS=/System/Library/Headers
GNUSTEP_SYSTEM_LIBRARIES=/System/Library/Libraries
GNUSTEP_SYSTEM_DOC=/System/Library/Documentation
GNUSTEP_SYSTEM_DOC_MAN=/System/Library/Documentation/man
GNUSTEP_SYSTEM_DOC_INFO=/System/Library/Documentation/info
GNUSTEP_NETWORK_APPS=/Local/Applications
GNUSTEP_NETWORK_ADMIN_APPS=/Local/Applications/Admin
GNUSTEP_NETWORK_WEB_APPS=/Local/Library/WebApplications
GNUSTEP_NETWORK_TOOLS=/Local/Tools
GNUSTEP_NETWORK_ADMIN_TOOLS=/Local/Tools/Admin
GNUSTEP_NETWORK_LIBRARY=/Local/Library
GNUSTEP_NETWORK_HEADERS=/Local/Library/Headers
GNUSTEP_NETWORK_LIBRARIES=/Local/Library/Libraries
GNUSTEP_NETWORK_DOC=/Local/Library/Documentation
GNUSTEP_NETWORK_DOC_MAN=/Local/Library/Documentation/man
GNUSTEP_NETWORK_DOC_INFO=/Local/Library/Documentation/info
GNUSTEP_LOCAL_APPS=/Local/Applications
GNUSTEP_LOCAL_ADMIN_APPS=/Local/Applications/Admin
GNUSTEP_LOCAL_WEB_APPS=/Local/Library/WebApplications
GNUSTEP_LOCAL_TOOLS=/Local/Tools
GNUSTEP_LOCAL_ADMIN_TOOLS=/Local/Tools/Admin
GNUSTEP_LOCAL_LIBRARY=/Local/Library
GNUSTEP_LOCAL_HEADERS=/Local/Library/Headers
GNUSTEP_LOCAL_LIBRARIES=/Local/Library/Libraries
GNUSTEP_LOCAL_DOC=/Local/Library/Documentation
GNUSTEP_LOCAL_DOC_MAN=/Local/Library/Documentation/man
GNUSTEP_LOCAL_DOC_INFO=/Local/Library/Documentation/info
GNUSTEP_USER_DIR_APPS=GNUstep/Applications
GNUSTEP_USER_DIR_ADMIN_APPS=GNUstep/Applications/Admin
GNUSTEP_USER_DIR_WEB_APPS=GNUstep/Library/WebApplications
GNUSTEP_USER_DIR_TOOLS=GNUstep/Tools
GNUSTEP_USER_DIR_ADMIN_TOOLS=GNUstep/Tools/Admin
GNUSTEP_USER_DIR_LIBRARY=GNUstep/Library
GNUSTEP_USER_DIR_HEADERS=GNUstep/Library/Headers
GNUSTEP_USER_DIR_LIBRARIES=GNUstep/Library/Libraries
GNUSTEP_USER_DIR_DOC=GNUstep/Documentation
GNUSTEP_USER_DIR_DOC_MAN=GNUstep/Documentation/man
GNUSTEP_USER_DIR_DOC_INFO=GNUstep/Documentation/info
GNUSTEP_USER_CONFIG_FILE=.GNUstep.conf
GNUSTEP_USER_DEFAULTS_DIR=GNUstep/Defaults

View file

@ -1,86 +0,0 @@
#
# GNUstep filesystem layout
#
# This is the standard GNUstep filesystem layout with the difference
# that the 'Network' domain is enabled.
#
# If you want to share parts of your GNUstep installation over an
# internal network of machines, then you may want to use this layout.
#
# In all other cases, you most likely don't need this layout.
#
# Having the 'Network' domain is useful if you have some GNUstep stuff
# that you plan to share on many machines in your internal network.
# In that case, you should mount the directory as the 'Network' domain
# on all the machines in your network. If the machines have different
# CPUs/OSes installed on them, you may also want to disable the
# flattened filesystem structure, and enable multi-platform support.
#
# Please check the 'gnustep' layout documentation for more info.
#
# By default, we install into /usr/GNUstep, but this can be overridden
# by using ./configure --prefix=xxx when configuring.
GNUSTEP_DEFAULT_PREFIX=/usr/GNUstep
# These are only used by gnustep-base to implement the NSUserDirectory
# API. We never install anything in them. They will be used as they
# are without $prefix.
GNUSTEP_SYSTEM_USERS_DIR=/home
GNUSTEP_NETWORK_USERS_DIR=/home
GNUSTEP_LOCAL_USERS_DIR=/home
# NB: $prefix will be added to all the MAKEFILES/SYSTEM/NETWORK/LOCAL
# paths.
GNUSTEP_MAKEFILES=/System/Library/Makefiles
GNUSTEP_SYSTEM_APPS=/System/Applications
GNUSTEP_SYSTEM_ADMIN_APPS=/System/Applications/Admin
GNUSTEP_SYSTEM_WEB_APPS=/System/Library/WebApplications
GNUSTEP_SYSTEM_TOOLS=/System/Tools
GNUSTEP_SYSTEM_ADMIN_TOOLS=/System/Tools/Admin
GNUSTEP_SYSTEM_LIBRARY=/System/Library
GNUSTEP_SYSTEM_HEADERS=/System/Library/Headers
GNUSTEP_SYSTEM_LIBRARIES=/System/Library/Libraries
GNUSTEP_SYSTEM_DOC=/System/Library/Documentation
GNUSTEP_SYSTEM_DOC_MAN=/System/Library/Documentation/man
GNUSTEP_SYSTEM_DOC_INFO=/System/Library/Documentation/info
GNUSTEP_NETWORK_APPS=/Network/Applications
GNUSTEP_NETWORK_ADMIN_APPS=/Network/Applications/Admin
GNUSTEP_NETWORK_WEB_APPS=/Network/Library/WebApplications
GNUSTEP_NETWORK_TOOLS=/Network/Tools
GNUSTEP_NETWORK_ADMIN_TOOLS=/Network/Tools/Admin
GNUSTEP_NETWORK_LIBRARY=/Network/Library
GNUSTEP_NETWORK_HEADERS=/Network/Library/Headers
GNUSTEP_NETWORK_LIBRARIES=/Network/Library/Libraries
GNUSTEP_NETWORK_DOC=/Network/Library/Documentation
GNUSTEP_NETWORK_DOC_MAN=/Network/Library/Documentation/man
GNUSTEP_NETWORK_DOC_INFO=/Network/Library/Documentation/info
GNUSTEP_LOCAL_APPS=/Local/Applications
GNUSTEP_LOCAL_ADMIN_APPS=/Local/Applications/Admin
GNUSTEP_LOCAL_WEB_APPS=/Local/Library/WebApplications
GNUSTEP_LOCAL_TOOLS=/Local/Tools
GNUSTEP_LOCAL_ADMIN_TOOLS=/Local/Tools/Admin
GNUSTEP_LOCAL_LIBRARY=/Local/Library
GNUSTEP_LOCAL_HEADERS=/Local/Library/Headers
GNUSTEP_LOCAL_LIBRARIES=/Local/Library/Libraries
GNUSTEP_LOCAL_DOC=/Local/Library/Documentation
GNUSTEP_LOCAL_DOC_MAN=/Local/Library/Documentation/man
GNUSTEP_LOCAL_DOC_INFO=/Local/Library/Documentation/info
GNUSTEP_USER_DIR_APPS=GNUstep/Applications
GNUSTEP_USER_DIR_ADMIN_APPS=GNUstep/Applications/Admin
GNUSTEP_USER_DIR_WEB_APPS=GNUstep/Library/WebApplications
GNUSTEP_USER_DIR_TOOLS=GNUstep/Tools
GNUSTEP_USER_DIR_ADMIN_TOOLS=GNUstep/Tools/Admin
GNUSTEP_USER_DIR_LIBRARY=GNUstep/Library
GNUSTEP_USER_DIR_HEADERS=GNUstep/Library/Headers
GNUSTEP_USER_DIR_LIBRARIES=GNUstep/Library/Libraries
GNUSTEP_USER_DIR_DOC=GNUstep/Documentation
GNUSTEP_USER_DIR_DOC_MAN=GNUstep/Documentation/man
GNUSTEP_USER_DIR_DOC_INFO=GNUstep/Documentation/info
GNUSTEP_USER_CONFIG_FILE=.GNUstep.conf
GNUSTEP_USER_DEFAULTS_DIR=GNUstep/Defaults

View file

@ -1,75 +0,0 @@
#
# Mac-like filesystem layout
#
# This is similar to the layout found on Apple Mac OS X. It mimicks
# most of the layout, but doesn't go all the way since GNUstep doesn't
# have GNUSTEP_DEVELOPER_xyz for example.
#
# To use gnustep-make in this environment, source GNUstep.sh or use
# 'export GNUSTEP_MAKEFILES=/System/Library/Makefiles'.
# By default, we install into /, but this can be overridden by using
# ./configure --prefix=xxx when configuring.
GNUSTEP_DEFAULT_PREFIX=/
# These are only used by gnustep-base to implement the NSUserDirectory
# API. We never install anything in them. They will be used as they
# are without $prefix.
GNUSTEP_SYSTEM_USERS_DIR=
GNUSTEP_NETWORK_USERS_DIR=/Network/Users
GNUSTEP_LOCAL_USERS_DIR=/Users
# NB: $prefix will be added to all the MAKEFILES/SYSTEM/NETWORK/LOCAL
# paths.
GNUSTEP_MAKEFILES=/System/Library/Makefiles
GNUSTEP_SYSTEM_APPS=/Applications
GNUSTEP_SYSTEM_ADMIN_APPS=/Applications/Utilities
GNUSTEP_SYSTEM_WEB_APPS=/System/Library/WebApplications
GNUSTEP_SYSTEM_TOOLS=/usr/local/bin
GNUSTEP_SYSTEM_ADMIN_TOOLS=/usr/local/sbin
GNUSTEP_SYSTEM_LIBRARY=/System/Library
GNUSTEP_SYSTEM_HEADERS=/System/Library/Headers
GNUSTEP_SYSTEM_LIBRARIES=/System/Library/Libraries
GNUSTEP_SYSTEM_DOC=/Library/Documentation
GNUSTEP_SYSTEM_DOC_MAN=/Library/Documentation/man
GNUSTEP_SYSTEM_DOC_INFO=/Library/Documentation/info
GNUSTEP_NETWORK_APPS=/Applications
GNUSTEP_NETWORK_ADMIN_APPS=/Applications/Utilities
GNUSTEP_NETWORK_WEB_APPS=/Library/WebApplications
GNUSTEP_NETWORK_TOOLS=/usr/local/bin
GNUSTEP_NETWORK_ADMIN_TOOLS=/usr/local/sbin
GNUSTEP_NETWORK_LIBRARY=/Library
GNUSTEP_NETWORK_HEADERS=/Library/Headers
GNUSTEP_NETWORK_LIBRARIES=/Library/Libraries
GNUSTEP_NETWORK_DOC=/Library/Documentation
GNUSTEP_NETWORK_DOC_MAN=/Library/Documentation/man
GNUSTEP_NETWORK_DOC_INFO=/Library/Documentation/info
GNUSTEP_LOCAL_APPS=/Applications
GNUSTEP_LOCAL_ADMIN_APPS=/Applications/Utilities
GNUSTEP_LOCAL_WEB_APPS=/Library/WebApplications
GNUSTEP_LOCAL_TOOLS=/usr/local/bin
GNUSTEP_LOCAL_ADMIN_TOOLS=/usr/local/sbin
GNUSTEP_LOCAL_LIBRARY=/Library
GNUSTEP_LOCAL_HEADERS=/Library/Headers
GNUSTEP_LOCAL_LIBRARIES=/Library/Libraries
GNUSTEP_LOCAL_DOC=/Library/Documentation
GNUSTEP_LOCAL_DOC_MAN=/Library/Documentation/man
GNUSTEP_LOCAL_DOC_INFO=/Library/Documentation/info
GNUSTEP_USER_DIR_APPS=Applications
GNUSTEP_USER_DIR_ADMIN_APPS=Applications/Utilities
GNUSTEP_USER_DIR_WEB_APPS=Library/WebApplications
GNUSTEP_USER_DIR_TOOLS=bin
GNUSTEP_USER_DIR_ADMIN_TOOLS=sbin
GNUSTEP_USER_DIR_LIBRARY=Library
GNUSTEP_USER_DIR_HEADERS=Library/Headers
GNUSTEP_USER_DIR_LIBRARIES=Library/Libraries
GNUSTEP_USER_DIR_DOC=Documentation
GNUSTEP_USER_DIR_DOC_MAN=Documentation/man
GNUSTEP_USER_DIR_DOC_INFO=Documentation/info
GNUSTEP_USER_CONFIG_FILE=Library/.GNUstep.conf
GNUSTEP_USER_DEFAULTS_DIR=Library/Defaults

View file

@ -1,71 +0,0 @@
#
# next filesystem layout
#
# Inspired by the filesystem layout on NeXTSTEP 3.x / OPENSTEP 4.x and
# Rhapsody. This is mostly a historical layout, but potentially
# interesting for NeXTSTEP / OPENSTEP fans.
#
# override this prefix by using ./configure --prefix=xxx when
# configuring.
GNUSTEP_DEFAULT_PREFIX=/
# These are only used by gnustep-base to implement the NSUserDirectory
# API. We never install anything in them. They will be used as they
# are without $prefix.
GNUSTEP_SYSTEM_USERS_DIR=/Users
GNUSTEP_NETWORK_USERS_DIR=/Network/Users
GNUSTEP_LOCAL_USERS_DIR=/Users
# NB: $prefix will be added to all the MAKEFILES/SYSTEM/NETWORK/LOCAL
# paths.
GNUSTEP_MAKEFILES=/GNUDeveloper/Makefiles
GNUSTEP_SYSTEM_APPS=/GNUApps
GNUSTEP_SYSTEM_ADMIN_APPS=/GNUAdmin
GNUSTEP_SYSTEM_WEB_APPS=/GNULibrary/WebApps
GNUSTEP_SYSTEM_TOOLS=/bin
GNUSTEP_SYSTEM_ADMIN_TOOLS=/sbin
GNUSTEP_SYSTEM_LIBRARY=/GNULibrary
GNUSTEP_SYSTEM_HEADERS=/GNUDeveloper/Headers
GNUSTEP_SYSTEM_LIBRARIES=/GNULibrary/Libraries
GNUSTEP_SYSTEM_DOC=/GNULibrary/Documentation
GNUSTEP_SYSTEM_DOC_MAN=/GNULibrary/Documentation/man
GNUSTEP_SYSTEM_DOC_INFO=/GNULibrary/Documentation/info
GNUSTEP_NETWORK_APPS=/Network/Apps
GNUSTEP_NETWORK_ADMIN_APPS=/Network/Admin
GNUSTEP_NETWORK_WEB_APPS=/Network/WebApps
GNUSTEP_NETWORK_TOOLS=/Network/bin
GNUSTEP_NETWORK_ADMIN_TOOLS=/Network/sbin
GNUSTEP_NETWORK_LIBRARY=/Network/Library
GNUSTEP_NETWORK_HEADERS=/Network/Developer/Headers
GNUSTEP_NETWORK_LIBRARIES=/Network/Library/Libraries
GNUSTEP_NETWORK_DOC=/Network/Library/Documentation
GNUSTEP_NETWORK_DOC_MAN=/Network/Library/Documentation/man
GNUSTEP_NETWORK_DOC_INFO=/Network/Library/Documentation/info
GNUSTEP_LOCAL_APPS=/LocalApps
GNUSTEP_LOCAL_ADMIN_APPS=/LocalAdmin
GNUSTEP_LOCAL_WEB_APPS=/LocalLibrary/WebApps
GNUSTEP_LOCAL_TOOLS=/bin
GNUSTEP_LOCAL_ADMIN_TOOLS=/sbin
GNUSTEP_LOCAL_LIBRARY=/LocalLibrary
GNUSTEP_LOCAL_HEADERS=/LocalDeveloper/Headers
GNUSTEP_LOCAL_LIBRARIES=/LocalLibrary/Libraries
GNUSTEP_LOCAL_DOC=/LocalLibrary/Documentation
GNUSTEP_LOCAL_DOC_MAN=/LocalLibrary/Documentation/man
GNUSTEP_LOCAL_DOC_INFO=/LocalLibrary/Documentation/info
GNUSTEP_USER_DIR_APPS=Apps
GNUSTEP_USER_DIR_ADMIN_APPS=Admin
GNUSTEP_USER_DIR_WEB_APPS=Library/WebApps
GNUSTEP_USER_DIR_TOOLS=bin
GNUSTEP_USER_DIR_ADMIN_TOOLS=sbin
GNUSTEP_USER_DIR_LIBRARY=Library
GNUSTEP_USER_DIR_HEADERS=Developer/Headers
GNUSTEP_USER_DIR_LIBRARIES=Library/Libraries
GNUSTEP_USER_DIR_DOC=Library/Documentation
GNUSTEP_USER_DIR_DOC_MAN=Library/Documentation/man
GNUSTEP_USER_DIR_DOC_INFO=Library/Documentation/info
GNUSTEP_USER_CONFIG_FILE=Library/Preferences/GNUstep.conf
GNUSTEP_USER_DEFAULTS_DIR=Library/Preferences

View file

@ -1,356 +0,0 @@
# @configure_input@
#
# Main GNUmakefile for the GNUstep GNUmakefile Package.
#
# Copyright (C) 1997-2006 Free Software Foundation, Inc.
#
# Author: Scott Christley <scottc@net-community.com>
# Author: Nicola Pero <n.pero@mi.flashnet.it>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# I've thought about using the Makefile package files
# to install the GNUmakefile package, a cool little recursion,
# but there is nothing to made, and the files get installed
# in a special directory, so it was simpler this way.
#
include config-noarch.make
include config.make
# To install everything inside a temporary directory (say as part of
# building a binary package - deb or rpm), use something like `make
# install DESTDIR=/var/tmp/gnustep-make'
DESTDIR =
# 'special_prefix' is an old alias for DESTDIR.
ifneq ($(special_prefix),)
$(warning "WARNING: special_prefix is deprecated. Please use DESTDIR instead")
DESTDIR = $(special_prefix)
endif
override GNUSTEP_CONFIG_FILE = $(DESTDIR)@GNUSTEP_CONFIG_FILE@
override GNUSTEP_CONFIG_FILE_DIR = $(dir $(GNUSTEP_CONFIG_FILE))
tooldir = $(DESTDIR)@GNUSTEP_SYSTEM_TOOLS@
makedir = $(DESTDIR)@GNUSTEP_MAKEFILES@
srcdir = @srcdir@
VPATH = @srcdir@
override GNUSTEP_IS_FLATTENED = @GNUSTEP_IS_FLATTENED@
override GNUSTEP_TARGET_CPU = @clean_target_cpu@
override GNUSTEP_TARGET_VENDOR = @clean_target_vendor@
override GNUSTEP_TARGET_OS = @clean_target_os@
override GNUSTEP_LIB_COMBO = @ac_cv_library_combo@
ifeq ($(GNUSTEP_IS_FLATTENED), no)
override GNUSTEP_TARGET_DIR = $(GNUSTEP_TARGET_CPU)/$(GNUSTEP_TARGET_OS)
override GNUSTEP_TARGET_LDIR = $(GNUSTEP_TARGET_DIR)/$(GNUSTEP_LIB_COMBO)
override MAYBE_LIBRARY_COMBO = $(GNUSTEP_LIB_COMBO)
else
override GNUSTEP_TARGET_DIR = .
override GNUSTEP_TARGET_LDIR = .
override MAYBE_LIBRARY_COMBO = .
endif
export GNUSTEP_TARGET_DIR
export GNUSTEP_TARGET_LDIR
export MAYBE_LIBRARY_COMBO
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
VERTAG = $(subst .,_,$(GNUSTEP_MAKE_VERSION))
SVNPREFIX=svn+ssh://svn.gna.org/svn/gnustep/tools/make
MAKE_FILES = aggregate.make application.make bundle.make service.make \
common.make empty.make filesystem.make library-combo.make java.make jni.make library.make \
messages.make rules.make target.make names.make resource-set.make \
tool.make ctool.make test-library.make \
objc.make test-application.make test-tool.make subproject.make \
palette.make gswapp.make gswbundle.make clibrary.make \
documentation.make \
java-executable.template java-tool.make framework.make \
native-library.make spec-rules.template \
tar-exclude-list gnustep-make-help
MASTER_MAKE_FILES = \
aggregate.make source-distribution.make rpm.make rules.make \
application.make bundle.make clibrary.make ctool.make \
documentation.make framework.make gswapp.make gswbundle.make \
library.make objc.make java.make java-tool.make palette.make \
resource-set.make service.make subproject.make test-application.make \
test-library.make test-tool.make tool.make
INSTANCE_MAKE_FILES = \
rules.make \
application.make bundle.make clibrary.make ctool.make \
documentation.make framework.make gswapp.make gswbundle.make \
library.make objc.make java.make java-tool.make palette.make \
resource-set.make service.make subproject.make test-application.make \
test-library.make test-tool.make tool.make
INSTANCE_SHARED_MAKE_FILES = bundle.make headers.make java.make \
stamp-string.make strings.make
INSTANCE_DOC_MAKE_FILES = autogsdoc.make gsdoc.make install_files.make \
javadoc.make latex.make texi.make
ifeq ($(messages),yes)
EC =
else
EC = @
endif
all: generated-files
$(EC)(echo "Thanks. All is ready to install.")
install: generated-files
$(EC)(echo "Creating system tools directory: $(tooldir)"; \
$(srcdir)/mkinstalldirs $(tooldir); \
echo "Creating makefile directories in: $(makedir)"; \
$(srcdir)/mkinstalldirs \
$(makedir) \
$(makedir)/$(GNUSTEP_TARGET_CPU) \
$(makedir)/$(GNUSTEP_TARGET_DIR) \
$(makedir)/$(GNUSTEP_TARGET_LDIR) \
$(makedir)/Additional \
$(makedir)/Auxiliary \
$(makedir)/Master \
$(makedir)/Instance \
$(makedir)/Instance/Shared \
$(makedir)/Instance/Documentation)
$(EC)(echo "Installing GNUstep configuration file in $(GNUSTEP_CONFIG_FILE)"; \
$(srcdir)/mkinstalldirs "$(GNUSTEP_CONFIG_FILE_DIR)"; \
$(INSTALL_DATA) GNUstep.conf "$(GNUSTEP_CONFIG_FILE)")
$(EC)(echo "Installing gnustep-make support software")
$(EC)(for f in config.guess config.sub install-sh mkinstalldirs \
clean_cpu.sh clean_os.sh \
clean_vendor.sh cpu.sh os.sh vendor.sh \
print_unique_pathlist.sh \
relative_path.sh strip_makefiles.sh; do \
$(INSTALL_PROGRAM) -m 755 $(srcdir)/$$f $(makedir); \
done)
$(EC)($(INSTALL_DATA) GNUstep.sh $(makedir); \
$(INSTALL_DATA) GNUstep.csh $(makedir); \
$(INSTALL_DATA) filesystem.sh $(makedir); \
$(INSTALL_DATA) filesystem.csh $(makedir); \
$(INSTALL_DATA) $(srcdir)/ld_lib_path.sh $(makedir); \
$(INSTALL_DATA) $(srcdir)/ld_lib_path.csh $(makedir); \
$(INSTALL_DATA) $(srcdir)/GNUstep-reset.sh $(makedir); \
$(INSTALL_PROGRAM) -m 755 fixpath.sh $(makedir); \
$(INSTALL_PROGRAM) -m 755 openapp $(tooldir); \
$(INSTALL_PROGRAM) -m 755 debugapp $(tooldir); \
$(INSTALL_PROGRAM) -m 755 opentool $(tooldir); \
$(INSTALL_PROGRAM) -m 755 gnustep-config $(tooldir))
$(EC)(echo "Installing makefiles"; \
for f in $(MAKE_FILES); do \
$(INSTALL_DATA) $(srcdir)/$$f $(makedir); \
done; \
for f in $(MASTER_MAKE_FILES); do \
$(INSTALL_DATA) $(srcdir)/Master/$$f $(makedir)/Master; \
done; \
for f in $(INSTANCE_MAKE_FILES); do \
$(INSTALL_DATA) $(srcdir)/Instance/$$f $(makedir)/Instance; \
done; \
for f in $(INSTANCE_SHARED_MAKE_FILES); do \
$(INSTALL_DATA) $(srcdir)/Instance/Shared/$$f \
$(makedir)/Instance/Shared; \
done; \
for f in $(INSTANCE_DOC_MAKE_FILES); do \
$(INSTALL_DATA) $(srcdir)/Instance/Documentation/$$f \
$(makedir)/Instance/Documentation; \
done; \
$(INSTALL_DATA) app-wrapper.template $(makedir); \
$(INSTALL_DATA) executable.template $(makedir); \
$(INSTALL_DATA) config-noarch.make $(makedir); \
$(INSTALL_DATA) config.make $(makedir)/$(GNUSTEP_TARGET_LDIR))
$(EC)(if [ "@GNUSTEP_STRIP_MAKEFILES@" = "strip" ]; then \
echo "Stripping makefiles and shell scripts..."; \
cd $(makedir); ./strip_makefiles.sh; \
fi)
# FIXME - review the issue of this config.site. What is it used for ?
# $(EC)($(srcdir)/mkinstalldirs $(GNUSTEP_SYSTEM_ROOT)/share; \
# $(INSTALL_DATA) $(srcdir)/config.site $(GNUSTEP_SYSTEM_ROOT)/share)
uninstall:
for f in config.guess config.sub install-sh mkinstalldirs \
clean_cpu.sh clean_os.sh \
clean_vendor.sh cpu.sh ld_lib_path.sh os.sh \
vendor.sh \
print_unique_pathlist.sh \
ld_lib_path.csh fixpath.sh \
filesystem.sh filesystem.csh \
GNUstep.sh GNUstep.csh GNUstep-reset.sh \
relative_path.sh strip_makefiles.sh; do \
rm -f $(makedir)/$$f; \
done
rm -f $(tooldir)/openapp; \
rm -f $(tooldir)/debugapp; \
rm -f $(tooldir)/opentool; \
rm -f $(tooldir)/gnustep-config; \
for f in $(MAKE_FILES); do \
rm -f $(makedir)/$$f; \
done
for f in $(MASTER_MAKE_FILES); do \
rm -f $(makedir)/Master/$$f; \
done
for f in $(INSTANCE_MAKE_FILES); do \
rm -f $(makedir)/Instance/$$f; \
done
for f in $(INSTANCE_SHARED_MAKE_FILES); do \
rm -f $(makedir)/Instance/Shared/$$f; \
done
for f in $(INSTANCE_DOC_MAKE_FILES); do \
rm -f $(makedir)/Instance/Documentation/$$f; \
done
rm -f $(makedir)/executable.template
rm -f $(makedir)/app-wrapper.template
rm -f $(GNUSTEP_SYSTEM_ROOT)/share/config.site
rm -f $(makedir)/config-noarch.make
rm -f $(makedir)/$(GNUSTEP_TARGET_LDIR)/config.make
-for f in $(makedir)/Instance/Documentation \
$(makedir)/Instance/Shared \
$(makedir)/Instance \
$(makedir)/Master \
$(makedir)/Auxiliary \
$(makedir)/Additional \
$(makedir)/$(GNUSTEP_TARGET_LDIR) \
$(makedir)/$(GNUSTEP_TARGET_DIR) \
$(makedir)/$(GNUSTEP_TARGET_CPU) \
$(makedir); do \
test -d $$f && rmdir $$f; \
done
clean:
rm -f *~ Master/*~ Instance/*~ Instance/Shared/*~
distclean: clean
rm -f GNUmakefile config-noarch.make config.make config.h
rm -f config.cache config.log config.status
rm -f openapp opentool executable.template
rm -f GNUstep.sh GNUstep.csh fixpath.sh gnustep-config
rm -f filesystem.make filesystem.sh filesystem.csh
rm -f gnustep-make.spec GNUstep.conf
rm -f config-precomp-test.log
svn-tag:
svn copy $(SVNPREFIX)/trunk $(SVNPREFIX)/tags/make-$(VERTAG) \
-m "Tag version $(VERTAG)"
svn-dist:
svn export $(SVNPREFIX)/tags/make-$(VERTAG) \
gnustep-make-$(GNUSTEP_MAKE_VERSION)
tar --gzip -cf gnustep-make-$(GNUSTEP_MAKE_VERSION).tar.gz gnustep-make-$(GNUSTEP_MAKE_VERSION)
rm -rf gnustep-make-$(GNUSTEP_MAKE_VERSION)
svn-snapshot:
svn export $(SVNPREFIX)/trunk \
gnustep-make-$(GNUSTEP_MAKE_VERSION)
tar --gzip -cf gnustep-make-$(GNUSTEP_MAKE_VERSION).tar.gz gnustep-make-$(GNUSTEP_MAKE_VERSION)
rm -rf gnustep-make-$(GNUSTEP_MAKE_VERSION)
cvs-tag:
cvs -z3 rtag make-$(VERTAG) make
cvs-dist:
cvs -z3 export -r make-$(VERTAG) make
mv make gnustep-make-$(GNUSTEP_MAKE_VERSION)
tar --gzip -cf gnustep-make-$(GNUSTEP_MAKE_VERSION).tar.gz gnustep-make-$(GNUSTEP_MAKE_VERSION)
rm -rf gnustep-make-$(GNUSTEP_MAKE_VERSION)
cvs-snapshot:
cvs -z3 export -D now make
mv make gnustep-make-$(GNUSTEP_MAKE_VERSION)
tar --gzip -cf gnustep-make-$(GNUSTEP_MAKE_VERSION).tar.gz gnustep-make-$(GNUSTEP_MAKE_VERSION)
rm -rf gnustep-make-$(GNUSTEP_MAKE_VERSION)
test-RPM_TOPDIR:
@(if [ -z "$(RPM_TOPDIR)" ]; then \
echo "Error - RPM_TOPDIR variable not set."; \
echo "You need to set it to the top of your rpm directory tree"; \
exit 1; \
fi)
# The check for rpmbuild is for old RPM versions which didn't have
# rpmbuild and used 'rpm -ba' instead. It can be removed when we are
# reasonably sure no more old RPM versions (not having rpmbuild), are
# still around.
rpm: test-RPM_TOPDIR dist
cp ../gnustep-make-$(GNUSTEP_MAKE_VERSION).tar.gz $(RPM_TOPDIR)/SOURCES/
cp gnustep-make.spec $(RPM_TOPDIR)/SPECS/
cd $(RPM_TOPDIR)/SPECS/
if which rpmbuild > /dev/null 2>/dev/null; then \
rpmbuild="rpmbuild"; \
else \
if which rpm > /dev/null 2>/dev/null; then \
rpmbuild="rpm"; \
else \
echo "Error: You don't have rpm installed!"; \
rpmbuild="rpmbuild"; \
fi; \
fi; \
$${rpmbuild} -ba gnustep-make.spec
generated-files: GNUmakefile GNUstep.sh GNUstep.csh fixpath.sh config-noarch.make config.make \
openapp opentool gnustep-make.spec executable.template gnustep-config \
filesystem.make filesystem.sh filesystem.csh GNUstep.conf
GNUmakefile: GNUmakefile.in config.status
$(SHELL) config.status
GNUstep.sh: GNUstep.sh.in
$(SHELL) config.status
GNUstep.csh: GNUstep.csh.in
$(SHELL) config.status
GNUstep.conf: GNUstep.conf.in
$(SHELL) config.status
fixpath.sh: fixpath.sh.in
$(SHELL) config.status
filesystem.make: filesystem.make.in
$(SHELL) config.status
filesystem.sh: filesystem.sh.in
$(SHELL) config.status
filesystem.csh: filesystem.csh.in
$(SHELL) config.status
config-noarch.make: config-noarch.make.in Version
$(SHELL) config.status --recheck
config.make: config.make.in
$(SHELL) config.status --recheck
openapp: openapp.in
$(SHELL) config.status
opentool: opentool.in
$(SHELL) config.status
gnustep-make.spec: gnustep-make.spec.in Version
$(SHELL) config.status --recheck
executable.template: executable.template.in
$(SHELL) config.status
gnustep-config: gnustep-config.in
$(SHELL) config.status

View file

@ -1,45 +0,0 @@
#
# GNUmakefile.postamble
#
# Project specific makefile rules
#
# Uncomment the targets you want.
# The double colons (::) are important, do not make them single colons
# otherwise the normal makefile rules will not be performed.
#
# Things to do before compiling
# before-all::
# Things to do after compiling
# after-all::
# Things to do before installing
# before-install::
# Things to do after installing
# after-install::
# Things to do before uninstalling
# before-uninstall::
# Things to do after uninstalling
# after-uninstall::
# Things to do before cleaning
# before-clean::
# Things to do after cleaning
# after-clean::
# Things to do before distcleaning
# before-distclean::
# Things to do after distcleaning
# after-distclean::
# Things to do before checking
# before-check::
# Things to do after checking
# after-check::

View file

@ -1,50 +0,0 @@
#
# GNUmakefile.preamble
#
# Project specific makefile variables, and additional
#
# Do not put any GNUmakefile rules in this file, instead they should
# be put into GNUmakefile.postamble.
#
#
# Flags dealing with compiling and linking
#
# Additional flags to pass to the preprocessor
ADDITIONAL_CPPFLAGS +=
# Additional flags to pass to the Objective-C compiler
ADDITIONAL_OBJCFLAGS +=
# Additional flags to pass to the C compiler
ADDITIONAL_CFLAGS +=
# Additional LDFLAGS to pass to the linker
ADDITIONAL_LDFLAGS +=
# Additional include directories the compiler should search
ADDITIONAL_INCLUDE_DIRS +=
# Additional library directories the linker should search
ADDITIONAL_LIB_DIRS +=
# Additional libraries when linking Objective-C programs
ADDITIONAL_OBJC_LIBS +=
# Additional libraries when linking tools
ADDITIONAL_TOOL_LIBS +=
# Additional libraries when linking applications
ADDITIONAL_GUI_LIBS +=
# Libraries that a shared library depends upon
LIBRARIES_DEPEND_UPON +=
#
# Flags dealing with installing and uninstalling
#
# Additional directories to be created during installation
ADDITIONAL_INSTALL_DIRS +=

File diff suppressed because it is too large Load diff

View file

@ -1,196 +0,0 @@
#! /bin/echo This file must be sourced inside (ba)sh using: .
#
# GNUstep-reset.sh
#
# Shell script resetting the GNUstep environment variables
#
# Copyright (C) 2002 Free Software Foundation, Inc.
#
# Author: Nicola Pero <n.pero@mi.flashnet.it>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# This file is used to reset your environment. This is needed if you
# want to change LIBRARY_COMBO. You first reset your environment, then
# set a new LIBRARY_COMBO variable, then source GNUstep.sh again.
# This file resets variables in reverse order as they are set in the
# GNUstep.sh file.
# This file only makes sense if you are using the standard GNUstep
# filesystem structure. If you're not, then your System Tools
# directory could be /usr/bin, but you don't really want to remove
# that from your PATH. :-)
# This function resets a path.
# It takes two arguments: the name of the path variable to reset,
# and a path fragment which is used to make our guess at what should
# be removed more accurate. All paths beginning with GNUSTEP_SYSTEM_ROOT,
# GNUSTEP_LOCAL_ROOT, GNUSTEP_NETWORK_ROOT and GNUSTEP_USER_ROOT
# followed by the specified path fragment are removed from the path
# variable. All other paths are kept unchanged.
function reset_path
{
# Declare local variables
local original_path tmp_IFS temp_path dir gnustep_dir found
# NB: We need to use eval because we want to access a variable
# whose name is another variable!
original_path=$(eval echo \$$1)
tmp_IFS="$IFS"
IFS=:
temp_path=
# Loop on the paths
for dir in $original_path; do
# For each of them, keep it only if it's not beginning with
# a path in GNUSTEP_PATHLIST as prefix
found=no;
for gnustep_dir in $GNUSTEP_PATHLIST; do
if [ -n "$gnustep_dir$2" ]; then
case "$dir" in
$gnustep_dir$2*) found=yes; break;;
*);;
esac;
fi;
done;
if [ "$found" = "no" ]; then
if [ -z "$temp_path" ]; then
temp_path="$dir"
else
temp_path="$temp_path:$dir"
fi;
fi
done
IFS="$tmp_IFS"
# Not set the path variable.
eval "$1=\$temp_path"
# Export it only if non empty, otherwise remove it completely from
# the shell environment.
temp_path=`eval echo \$"$1"`
if [ -z "$temp_path" ]; then
eval "unset $1"
else
eval "export $1"
fi
}
reset_path INFOPATH /Library/Documentation/info
reset_path GUILE_LOAD_PATH /Library/Libraries/Guile
reset_path CLASSPATH /Library/Libraries/Java
reset_path LD_LIBRARY_PATH /Library/Libraries
reset_path DYLD_LIBRARY_PATH /Library/Libraries
reset_path DYLD_FRAMEWORK_PATH /Library/Frameworks
reset_path PATH /Tools
# Make sure we destroy the reset_path function after using it - we don't
# want to pollute the environment with it.
unset -f reset_path
unset GNUSTEP_SYSTEM_USERS_DIR
unset GNUSTEP_NETWORK_USERS_DIR
unset GNUSTEP_LOCAL_USERS_DIR
unset GNUSTEP_SYSTEM_APPS
unset GNUSTEP_SYSTEM_ADMIN_APPS
unset GNUSTEP_SYSTEM_WEB_APPS
unset GNUSTEP_SYSTEM_TOOLS
unset GNUSTEP_SYSTEM_ADMIN_TOOLS
unset GNUSTEP_SYSTEM_LIBRARY
unset GNUSTEP_SYSTEM_HEADERS
unset GNUSTEP_SYSTEM_LIBRARIES
unset GNUSTEP_SYSTEM_RESOURCES
unset GNUSTEP_SYSTEM_JAVA
unset GNUSTEP_SYSTEM_DOC
unset GNUSTEP_SYSTEM_DOC_MAN
unset GNUSTEP_SYSTEM_DOC_INFO
unset GNUSTEP_NETWORK_APPS
unset GNUSTEP_NETWORK_ADMIN_APPS
unset GNUSTEP_NETWORK_WEB_APPS
unset GNUSTEP_NETWORK_TOOLS
unset GNUSTEP_NETWORK_ADMIN_TOOLS
unset GNUSTEP_NETWORK_LIBRARY
unset GNUSTEP_NETWORK_HEADERS
unset GNUSTEP_NETWORK_LIBRARIES
unset GNUSTEP_NETWORK_RESOURCES
unset GNUSTEP_NETWORK_JAVA
unset GNUSTEP_NETWORK_DOC
unset GNUSTEP_NETWORK_DOC_MAN
unset GNUSTEP_NETWORK_DOC_INFO
unset GNUSTEP_LOCAL_APPS
unset GNUSTEP_LOCAL_ADMIN_APPS
unset GNUSTEP_LOCAL_WEB_APPS
unset GNUSTEP_LOCAL_TOOLS
unset GNUSTEP_LOCAL_ADMIN_TOOLS
unset GNUSTEP_LOCAL_LIBRARY
unset GNUSTEP_LOCAL_HEADERS
unset GNUSTEP_LOCAL_LIBRARIES
unset GNUSTEP_LOCAL_RESOURCES
unset GNUSTEP_LOCAL_JAVA
unset GNUSTEP_LOCAL_DOC
unset GNUSTEP_LOCAL_DOC_MAN
unset GNUSTEP_LOCAL_DOC_INFO
unset GNUSTEP_USER_APPS
unset GNUSTEP_USER_ADMIN_APPS
unset GNUSTEP_USER_WEB_APPS
unset GNUSTEP_USER_TOOLS
unset GNUSTEP_USER_ADMIN_TOOLS
unset GNUSTEP_USER_LIBRARY
unset GNUSTEP_USER_HEADERS
unset GNUSTEP_USER_LIBRARIES
unset GNUSTEP_USER_RESOURCES
unset GNUSTEP_USER_JAVA
unset GNUSTEP_USER_DOC
unset GNUSTEP_USER_DOC_MAN
unset GNUSTEP_USER_DOC_INFO
# These should not defined, but might be if something goes wrong
# somewhere.
unset GNUSTEP_USER_DIR_APPS
unset GNUSTEP_USER_DIR_ADMIN_APPS
unset GNUSTEP_USER_DIR_WEB_APPS
unset GNUSTEP_USER_DIR_TOOLS
unset GNUSTEP_USER_DIR_ADMIN_TOOLS
unset GNUSTEP_USER_DIR_LIBRARY
unset GNUSTEP_USER_DIR_HEADERS
unset GNUSTEP_USER_DIR_LIBRARIES
unset GNUSTEP_USER_DIR_RESOURCES
unset GNUSTEP_USER_DIR_JAVA
unset GNUSTEP_USER_DIR_DOC
unset GNUSTEP_USER_DIR_DOC_MAN
unset GNUSTEP_USER_DIR_DOC_INFO
unset GNUSTEP_PATHLIST
unset GNUSTEP_USER_ROOT
unset GNUSTEP_HOST_OS
unset GNUSTEP_HOST_VENDOR
unset GNUSTEP_HOST_CPU
unset GNUSTEP_HOST
unset GNUSTEP_NETWORK_ROOT
unset GNUSTEP_LOCAL_ROOT
unset GNUSTEP_MAKEFILES
unset GNUSTEP_FLATTENED
unset GNUSTEP_IS_FLATTENED
unset GNUSTEP_SYSTEM_ROOT
unset GNUSTEP_ROOT
unset LIBRARY_COMBO
unset GNUSTEP_CONFIG_FILE
unset GNUSTEP_USER_CONFIG_FILE
unset GNUSTEP_USER_DIR
unset GNUSTEP_USER_DEFAULTS_DIR

View file

@ -1,155 +0,0 @@
# This is the GNUstep configuration file.
# Any line starting with a '#' is a comment.
# Empty lines are ignored.
# Every other line in this file must be of the form
# XXX=YYY
# where there should be no spaces around the '=' (this is because we
# include this file in shell scripts and makefiles, and sh syntax
# requires no spaces around the '=').
#
# Standard sh quotes can be used in YYY but only at runtime; they can
# not be used while building.
# GNUstep can use up to 4 domains at the same time. They are System,
# Local, Network and User. You can install your programs / resources
# in any of these domains. This file mostly deals with configuring
# how the domains map to your filesystem.
# IMPORTANT: Don't delete lines from this file unless you want
# the values hardcoded in the packages to be used. If you want
# to suppress the network domain, set all its paths to be the same
# as the system domain. If you want to suppress the local domain,
# set all its paths to be the same as the network domain. If you
# want to suppress the user domain, set its paths to be the same
# as the local domain. You can not suppress the system domain.
# The paths should not include a '/' at the end.
# These GNUSTEP_*_ROOT variables are obsolete, and will be removed.
GNUSTEP_SYSTEM_ROOT=@GNUSTEP_SYSTEM_ROOT@
GNUSTEP_LOCAL_ROOT=@GNUSTEP_LOCAL_ROOT@
GNUSTEP_NETWORK_ROOT=@GNUSTEP_NETWORK_ROOT@
# The name of the user config file. This file can override
# some settings in this file. Usually used by users that want
# to install things into their GNUstep user domain and/or have
# many such domains.
GNUSTEP_USER_CONFIG_FILE=@GNUSTEP_USER_CONFIG_FILE@
# The name of the user directory, if any. This is obsolete,
# and will be removed.
GNUSTEP_USER_DIR=@GNUSTEP_USER_DIR@
# The name of the user directory where defaults (eg, preferences) are
# stored. If it does not start with a '/', it will be considered
# relative to the user home directory.
GNUSTEP_USER_DEFAULTS_DIR=@GNUSTEP_USER_DEFAULTS_DIR@
# This is where the gnustep-make Makefiles are installed.
# Traditionally, this is /usr/GNUstep/System/Library/Makefiles
GNUSTEP_MAKEFILES=@GNUSTEP_MAKEFILES@
# This is where the user home directories are. Only used to provide
# NSUserDirectory in gnustep-base. Never used anywhere else.
GNUSTEP_SYSTEM_USERS_DIR=@GNUSTEP_SYSTEM_USERS_DIR@
GNUSTEP_NETWORK_USERS_DIR=@GNUSTEP_NETWORK_USERS_DIR@
GNUSTEP_LOCAL_USERS_DIR=@GNUSTEP_LOCAL_USERS_DIR@
# This is where System GUI Applications get installed.
# Traditionally it is /usr/GNUstep/System/Applications.
GNUSTEP_SYSTEM_APPS=@GNUSTEP_SYSTEM_APPS@
# This is where System GUI Applications that only the
# Administrator can use get installed.
# Traditionally it is /usr/GNUstep/System/Applications/Admin.
GNUSTEP_SYSTEM_ADMIN_APPS=@GNUSTEP_SYSTEM_ADMIN_APPS@
# This is where System Web Applications (GSWeb, SOPE) get
# installed.
# Traditionally it is /usr/GNUstep/System/Library/WebApplications.
GNUSTEP_SYSTEM_WEB_APPS=@GNUSTEP_SYSTEM_WEB_APPS@
# This is where System Command-Line Tools get installed.
# Traditionally it is /usr/GNUstep/System/Tools.
GNUSTEP_SYSTEM_TOOLS=@GNUSTEP_SYSTEM_TOOLS@
# This is where System Command-Line Tools that only the
# Administrator can use get installed. Important: this
# should not be in the PATH of normal users.
# Traditionally it is /usr/GNUstep/System/Tools/Admin.
GNUSTEP_SYSTEM_ADMIN_TOOLS=@GNUSTEP_SYSTEM_ADMIN_TOOLS@
# This is where System resources get installed. This directory will
# contain a lot of executable code since *step traditionally likes to
# bundle executables and resources together.
# Traditionally it is /usr/GNUstep/System/Library.
GNUSTEP_SYSTEM_LIBRARY=@GNUSTEP_SYSTEM_LIBRARY@
# This is where System headers get installed. They are the
# library .h headers.
# Traditionally it is /usr/GNUstep/System/Library/Headers.
GNUSTEP_SYSTEM_HEADERS=@GNUSTEP_SYSTEM_HEADERS@
# This is where System libraries get installed. By libraries we mean
# the shared/static object files that you can link into programs.
# Traditionally it is /usr/GNUstep/System/Library/Libraries.
GNUSTEP_SYSTEM_LIBRARIES=@GNUSTEP_SYSTEM_LIBRARIES@
# This is where System documentation get installed. This is known
# not to contain any executable, so we keep it separate.
# Traditionally it is /usr/GNUstep/System/Library/Documentation.
GNUSTEP_SYSTEM_DOC=@GNUSTEP_SYSTEM_DOC@
# This is where System man pages get installed.
# Traditionally it is /usr/GNUstep/System/Library/Documentation/man.
GNUSTEP_SYSTEM_DOC_MAN=@GNUSTEP_SYSTEM_DOC_MAN@
# This is where System info pages get installed.
# Traditionally it is /usr/GNUstep/System/Library/Documentation/info.
GNUSTEP_SYSTEM_DOC_INFO=@GNUSTEP_SYSTEM_DOC_INFO@
GNUSTEP_NETWORK_APPS=@GNUSTEP_NETWORK_APPS@
GNUSTEP_NETWORK_ADMIN_APPS=@GNUSTEP_NETWORK_ADMIN_APPS@
GNUSTEP_NETWORK_WEB_APPS=@GNUSTEP_NETWORK_WEB_APPS@
GNUSTEP_NETWORK_TOOLS=@GNUSTEP_NETWORK_TOOLS@
GNUSTEP_NETWORK_ADMIN_TOOLS=@GNUSTEP_NETWORK_ADMIN_TOOLS@
GNUSTEP_NETWORK_LIBRARY=@GNUSTEP_NETWORK_LIBRARY@
GNUSTEP_NETWORK_HEADERS=@GNUSTEP_NETWORK_HEADERS@
GNUSTEP_NETWORK_LIBRARIES=@GNUSTEP_NETWORK_LIBRARIES@
GNUSTEP_NETWORK_DOC=@GNUSTEP_NETWORK_DOC@
GNUSTEP_NETWORK_DOC_MAN=@GNUSTEP_NETWORK_DOC_MAN@
GNUSTEP_NETWORK_DOC_INFO=@GNUSTEP_NETWORK_DOC_INFO@
GNUSTEP_LOCAL_APPS=@GNUSTEP_LOCAL_APPS@
GNUSTEP_LOCAL_ADMIN_APPS=@GNUSTEP_LOCAL_ADMIN_APPS@
GNUSTEP_LOCAL_WEB_APPS=@GNUSTEP_LOCAL_WEB_APPS@
GNUSTEP_LOCAL_TOOLS=@GNUSTEP_LOCAL_TOOLS@
GNUSTEP_LOCAL_ADMIN_TOOLS=@GNUSTEP_LOCAL_ADMIN_TOOLS@
GNUSTEP_LOCAL_LIBRARY=@GNUSTEP_LOCAL_LIBRARY@
GNUSTEP_LOCAL_HEADERS=@GNUSTEP_LOCAL_HEADERS@
GNUSTEP_LOCAL_LIBRARIES=@GNUSTEP_LOCAL_LIBRARIES@
GNUSTEP_LOCAL_DOC=@GNUSTEP_LOCAL_DOC@
GNUSTEP_LOCAL_DOC_MAN=@GNUSTEP_LOCAL_DOC_MAN@
GNUSTEP_LOCAL_DOC_INFO=@GNUSTEP_LOCAL_DOC_INFO@
# Important: settings in the User should normally be relative paths,
# and will be interpreted as relative to the user's directory. This
# allows each user to have their own domain to install things. You
# can set them to be absolute, mostly if you want to disable them
# by setting them equal to the ones in the Network domain.
GNUSTEP_USER_DIR_APPS=@GNUSTEP_USER_DIR_APPS@
GNUSTEP_USER_DIR_ADMIN_APPS=@GNUSTEP_USER_DIR_ADMIN_APPS@
GNUSTEP_USER_DIR_WEB_APPS=@GNUSTEP_USER_DIR_WEB_APPS@
GNUSTEP_USER_DIR_TOOLS=@GNUSTEP_USER_DIR_TOOLS@
GNUSTEP_USER_DIR_ADMIN_TOOLS=@GNUSTEP_USER_DIR_ADMIN_TOOLS@
GNUSTEP_USER_DIR_LIBRARY=@GNUSTEP_USER_DIR_LIBRARY@
GNUSTEP_USER_DIR_HEADERS=@GNUSTEP_USER_DIR_HEADERS@
GNUSTEP_USER_DIR_LIBRARIES=@GNUSTEP_USER_DIR_LIBRARIES@
GNUSTEP_USER_DIR_DOC=@GNUSTEP_USER_DIR_DOC@
GNUSTEP_USER_DIR_DOC_MAN=@GNUSTEP_USER_DIR_DOC_MAN@
GNUSTEP_USER_DIR_DOC_INFO=@GNUSTEP_USER_DIR_DOC_INFO@

View file

@ -1,297 +0,0 @@
#! /bin/echo This file must be sourced inside csh using: source
#
# @configure_input@
#
# Shell initialization for the GNUstep environment.
#
# Copyright (C) 1998-2005 Free Software Foundation, Inc.
#
# Author: Scott Christley <scottc@net-community.com>
# Author: Adam Fedor <fedor@gnu.org>
# Author: Richard Frith-Macdonald <rfm@gnu.org>
# Author: Nicola Pero <n.pero@mi.flashnet.it>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
#
# Set the GNUstep system root and local root
#
#
# Read our configuration files
#
# Determine the location of the system configuration file
if ( ! ${?GNUSTEP_CONFIG_FILE} ) then
setenv GNUSTEP_CONFIG_FILE "@GNUSTEP_CONFIG_FILE@"
endif
# Determine the location of the user configuration file
if ( ! ${?GNUSTEP_USER_CONFIG_FILE} ) then
setenv GNUSTEP_USER_CONFIG_FILE "@GNUSTEP_USER_CONFIG_FILE@"
endif
# Read the system configuration file
if ( -e "${GNUSTEP_CONFIG_FILE}" ) then
#
# Convert the config file from sh syntax to csh syntax, and execute it.
#
# We want to convert every line of the type ^xxx=yyy$ into setenv xxx yyy;
# and ignore any other line.
#
# This sed expression will first delete all lines that don't match
# the pattern ^[^#=][^#=]*=.*$ -- which means "start of line (^),
# followed by a character that is not # and not = ([^#=]), followed
# by 0 or more characters that are not # and not = ([^#=]*),
# followed by a = (=), followed by some characters until end of the
# line (.*$). It will then replace each occurrence of the same
# pattern (where the first and second relevant parts are now tagged
# -- that's what the additional \(...\) do) with 'setenv \1 \2'.
#
# The result of all this is ... something that we want to execute!
# We use eval to execute the results of `...`.
#
# Please note that ! must always be escaped in csh, which is why we
# write \\!
#
# Also note that we add a ';' at the end of each setenv command so
# that we can pipe all the commands through a single eval.
#
eval `sed -e '/^[^#=][^#=]*=.*$/\\!d' -e 's/^\([^#=][^#=]*\)=\(.*\)$/setenv \1 \2;/' "${GNUSTEP_CONFIG_FILE}"`
endif
# FIXME: determining GNUSTEP_HOME
set GNUSTEP_HOME = ~
# Read the user configuration file ... unless it is disabled (ie, set
# to an empty string)
if ( ${?GNUSTEP_USER_CONFIG_FILE} ) then
switch ("${GNUSTEP_USER_CONFIG_FILE}")
case /*: # An absolute path
if ( -e "${GNUSTEP_USER_CONFIG_FILE}" ) then
# See above for an explanation of the sed expression
eval `sed -e '/^[^#=][^#=]*=.*$/\\!d' -e 's/^\([^#=][^#=]*\)=\(.*\)$/setenv \1 \2;/' "${GNUSTEP_USER_CONFIG_FILE}"``
endif
breaksw
default: # Something else
if ( -e "${GNUSTEP_HOME}/${GNUSTEP_USER_CONFIG_FILE}" ) then
eval `sed -e '/^[^#=][^#=]*=.*$/\\!d' -e 's/^\([^#=][^#=]*\)=\(.*\)$/setenv \1 \2;/' "${GNUSTEP_HOME}/${GNUSTEP_USER_CONFIG_FILE}"`
endif
breaksw
endsw
endif
# Now, set any essential variable (that is not already set) to the
# built-in values.
if ( ! ${?GNUSTEP_SYSTEM_ROOT} ) then
setenv GNUSTEP_SYSTEM_ROOT "@GNUSTEP_SYSTEM_ROOT@"
endif
if ( ! ${?GNUSTEP_LOCAL_ROOT} ) then
setenv GNUSTEP_LOCAL_ROOT "@GNUSTEP_LOCAL_ROOT@"
endif
if ( ! ${?GNUSTEP_NETWORK_ROOT} ) then
setenv GNUSTEP_NETWORK_ROOT "@GNUSTEP_NETWORK_ROOT@"
endif
# GNUSTEP_FLATTENED is obsolete, please use GNUSTEP_IS_FLATTENED
# instead
setenv GNUSTEP_FLATTENED "@GNUSTEP_FLATTENED@"
setenv GNUSTEP_IS_FLATTENED "@GNUSTEP_IS_FLATTENED@"
if ( ! ${?LIBRARY_COMBO} ) then
setenv LIBRARY_COMBO "@ac_cv_library_combo@"
endif
if ( ! ${?GNUSTEP_MAKEFILES} ) then
setenv GNUSTEP_MAKEFILES "@GNUSTEP_MAKEFILES@"
endif
if ( ! ${?GNUSTEP_USER_DIR} ) then
setenv GNUSTEP_USER_DIR "@GNUSTEP_USER_DIR@"
endif
#
# Set GNUSTEP_USER_ROOT which is the variable used in practice
#
switch ("${GNUSTEP_USER_DIR}")
case /*: # An absolute path
setenv GNUSTEP_USER_ROOT "${GNUSTEP_USER_DIR}"
breaksw
default: # Something else
setenv GNUSTEP_USER_ROOT "${GNUSTEP_HOME}/${GNUSTEP_USER_DIR}"
breaksw
endsw
if ( "@GNUSTEP_MULTI_PLATFORM@" == "" ) then
setenv GNUSTEP_HOST "@target@"
setenv GNUSTEP_HOST_CPU "@clean_target_cpu@"
setenv GNUSTEP_HOST_VENDOR "@clean_target_vendor@"
setenv GNUSTEP_HOST_OS "@clean_target_os@"
endif
#
# Determine the host information
#
if ( ! ${?GNUSTEP_HOST} ) then
pushd /tmp > /dev/null
setenv GNUSTEP_HOST `${GNUSTEP_MAKEFILES}/config.guess`
setenv GNUSTEP_HOST `${GNUSTEP_MAKEFILES}/config.sub ${GNUSTEP_HOST}`
popd > /dev/null
endif
if ( ! ${?GNUSTEP_HOST_CPU} ) then
setenv GNUSTEP_HOST_CPU `${GNUSTEP_MAKEFILES}/cpu.sh ${GNUSTEP_HOST}`
setenv GNUSTEP_HOST_CPU `${GNUSTEP_MAKEFILES}/clean_cpu.sh ${GNUSTEP_HOST_CPU}`
endif
if ( ! ${?GNUSTEP_HOST_VENDOR} ) then
setenv GNUSTEP_HOST_VENDOR `${GNUSTEP_MAKEFILES}/vendor.sh ${GNUSTEP_HOST}`
setenv GNUSTEP_HOST_VENDOR `${GNUSTEP_MAKEFILES}/clean_vendor.sh ${GNUSTEP_HOST_VENDOR}`
endif
if ( ! ${?GNUSTEP_HOST_OS} ) then
setenv GNUSTEP_HOST_OS `${GNUSTEP_MAKEFILES}/os.sh ${GNUSTEP_HOST}`
setenv GNUSTEP_HOST_OS `${GNUSTEP_MAKEFILES}/clean_os.sh ${GNUSTEP_HOST_OS}`
endif
# Now load in all the remaining paths
source "${GNUSTEP_MAKEFILES}/filesystem.csh"
# No longer needed
unset GNUSTEP_HOME
# Determine if the paths look like Windows paths that need fixing
set fixup_paths=no
if ( `echo $GNUSTEP_MAKEFILES | sed 's|^[a-zA-Z]:/.*$||'` == "" ) then
set fixup_paths=yes
endif
#
# Add the GNUstep tools directories to the path
#
if ( ! ${?GNUSTEP_PATHLIST} ) then
setenv GNUSTEP_PATHLIST `$GNUSTEP_MAKEFILES/print_unique_pathlist.sh "$GNUSTEP_USER_ROOT" "$GNUSTEP_LOCAL_ROOT" "$GNUSTEP_NETWORK_ROOT" "$GNUSTEP_SYSTEM_ROOT" $fixup_paths`
endif
set GNUSTEP_TOOLS_PATHLIST=`$GNUSTEP_MAKEFILES/print_unique_pathlist.sh "$GNUSTEP_USER_TOOLS" "$GNUSTEP_LOCAL_TOOLS" "$GNUSTEP_NETWORK_TOOLS" "$GNUSTEP_SYSTEM_TOOLS" $fixup_paths`
foreach dir ( "${GNUSTEP_SYSTEM_ADMIN_TOOLS}" "${GNUSTEP_NETWORK_ADMIN_TOOLS}" "${GNUSTEP_LOCAL_ADMIN_TOOLS}" "${GNUSTEP_USER_ADMIN_TOOLS}" )
if ( -d "${dir}" && -w "${dir}" ) then
if ( { (echo "${GNUSTEP_TOOLS_PATHLIST}" | fgrep -v "${dir}" >/dev/null) } ) then
setenv GNUSTEP_TOOLS_PATHLIST "${dir}:${GNUSTEP_TOOLS_PATHLIST}"
endif
endif
end
set temp_path = ""
foreach dir ( `/bin/sh -c 'IFS=:; for i in '"${GNUSTEP_TOOLS_PATHLIST}"'; do echo $i; done'` )
set temp_path="${temp_path}${dir}:"
if ( "${GNUSTEP_IS_FLATTENED}" == "no" ) then
set temp_path="${temp_path}${dir}/${GNUSTEP_HOST_CPU}/${GNUSTEP_HOST_OS}/${LIBRARY_COMBO}:"
set temp_path="${temp_path}${dir}/${GNUSTEP_HOST_CPU}/${GNUSTEP_HOST_OS}:"
endif
end
if ( ! ${?PATH} ) then
setenv PATH "${temp_path}"
else if ( { (echo "$PATH" | fgrep -v "$temp_path" >/dev/null) } ) then
setenv PATH "${temp_path}${PATH}"
endif
unset temp_path dir
unset GNUSTEP_TOOLS_PATHLIST
source "${GNUSTEP_MAKEFILES}/ld_lib_path.csh"
set gnustep_class_path=`$GNUSTEP_MAKEFILES/print_unique_pathlist.sh "$GNUSTEP_USER_LIBRARY/Libraries/Java" "$GNUSTEP_LOCAL_LIBRARY/Libraries/Java" "$GNUSTEP_NETWORK_LIBRARY/Libraries/Java" "$GNUSTEP_SYSTEM_LIBRARY/Libraries/Java" $fixup_paths`
if ( ! ${?CLASSPATH} ) then
setenv CLASSPATH "${gnustep_class_path}"
else if ( { (echo "${CLASSPATH}" | fgrep -v "${gnustep_class_path}" >/dev/null) } ) then
setenv CLASSPATH "${CLASSPATH}:${gnustep_class_path}"
endif
unset gnustep_class_path
set gnustep_guile_path=`$GNUSTEP_MAKEFILES/print_unique_pathlist.sh "$GNUSTEP_USER_LIBRARY/Libraries/Guile" "$GNUSTEP_LOCAL_LIBRARY/Libraries/Guile" "$GNUSTEP_NETWORK_LIBRARY/Libraries/Guile" "$GNUSTEP_SYSTEM_LIBRARY/Libraries/Guile" $fixup_paths`
if ( ! ${?GUILE_LOAD_PATH} ) then
setenv GUILE_LOAD_PATH "${gnustep_guile_path}"
else if ( { (echo "${GUILE_LOAD_PATH}" | fgrep -v "${gnustep_guile_path}" >/dev/null) } ) then
setenv GUILE_LOAD_PATH "${gnustep_guile_path}:${GUILE_LOAD_PATH}"
endif
unset gnustep_guile_path
set gnustep_info_path=`$GNUSTEP_MAKEFILES/print_unique_pathlist.sh "$GNUSTEP_USER_DOC_INFO" "$GNUSTEP_LOCAL_DOC_INFO" "$GNUSTEP_NETWORK_DOC_INFO" "$GNUSTEP_SYSTEM_DOC_INFO" $fixup_paths`
if ( ! ${?INFOPATH} ) then
setenv INFOPATH "${gnustep_info_path}:"
else if ( { (echo "${INFOPATH}" | fgrep -v "${gnustep_info_path}" >/dev/null) } ) then
setenv INFOPATH "${INFOPATH}:${gnustep_info_path}:"
endif
unset gnustep_info_path
#
# Perform any user initialization
#
if ( -e "$GNUSTEP_USER_ROOT/GNUstep.csh" ) then
source "$GNUSTEP_USER_ROOT/GNUstep.csh"
endif
unsetenv GNUSTEP_SYSTEM_APPS
unsetenv GNUSTEP_SYSTEM_ADMIN_APPS
unsetenv GNUSTEP_SYSTEM_TOOLS
unsetenv GNUSTEP_SYSTEM_ADMIN_TOOLS
unsetenv GNUSTEP_SYSTEM_LIBRARY
unsetenv GNUSTEP_SYSTEM_HEADERS
unsetenv GNUSTEP_SYSTEM_LIBRARIES
unsetenv GNUSTEP_SYSTEM_DOC
unsetenv GNUSTEP_SYSTEM_DOC_MAN
unsetenv GNUSTEP_SYSTEM_DOC_INFO
unsetenv GNUSTEP_NETWORK_APPS
unsetenv GNUSTEP_NETWORK_ADMIN_APPS
unsetenv GNUSTEP_NETWORK_TOOLS
unsetenv GNUSTEP_NETWORK_ADMIN_TOOLS
unsetenv GNUSTEP_NETWORK_LIBRARY
unsetenv GNUSTEP_NETWORK_HEADERS
unsetenv GNUSTEP_NETWORK_LIBRARIES
unsetenv GNUSTEP_NETWORK_DOC
unsetenv GNUSTEP_NETWORK_DOC_MAN
unsetenv GNUSTEP_NETWORK_DOC_INFO
unsetenv GNUSTEP_LOCAL_APPS
unsetenv GNUSTEP_LOCAL_ADMIN_APPS
unsetenv GNUSTEP_LOCAL_TOOLS
unsetenv GNUSTEP_LOCAL_ADMIN_TOOLS
unsetenv GNUSTEP_LOCAL_LIBRARY
unsetenv GNUSTEP_LOCAL_HEADERS
unsetenv GNUSTEP_LOCAL_LIBRARIES
unsetenv GNUSTEP_LOCAL_DOC
unsetenv GNUSTEP_LOCAL_DOC_MAN
unsetenv GNUSTEP_LOCAL_DOC_INFO
unsetenv GNUSTEP_USER_APPS
unsetenv GNUSTEP_USER_ADMIN_APPS
unsetenv GNUSTEP_USER_TOOLS
unsetenv GNUSTEP_USER_ADMIN_TOOLS
unsetenv GNUSTEP_USER_LIBRARY
unsetenv GNUSTEP_USER_HEADERS
unsetenv GNUSTEP_USER_LIBRARIES
unsetenv GNUSTEP_USER_DOC
unsetenv GNUSTEP_USER_DOC_MAN
unsetenv GNUSTEP_USER_DOC_INFO

View file

@ -1,476 +0,0 @@
#! /bin/echo This file must be sourced inside (ba)sh using: .
#
# @configure_input@
#
# Shell initialization for the GNUstep environment.
#
# Copyright (C) 1997-2005 Free Software Foundation, Inc.
#
# Author: Scott Christley <scottc@net-community.com>
# Author: Adam Fedor <fedor@gnu.org>
# Author: Richard Frith-Macdonald <rfm@gnu.org>
# Author: Nicola Pero <n.pero@mi.flashnet.it>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# Warning - this shell script is delicate, because it is sourced by
# using . rather than simply executed. It is sourced because that is
# the only way to change the shell variables in the calling
# environment.
#
# Sourcing makes the shell script more delicate for the following reasons:
#
# * temporary variables are automatically set in the calling
# environment! WORKAROUND: we need to unset all them after using
# them to avoid polluting the calling environment;
#
# * not only the exit value of the script, but the exit value of each
# command we execute, might be interpreted by the calling
# environment. Typically, the calling environment might be using the
# shell errexit option ('set -e') in bash parlance, which causes the
# shell to exit if any command returns an error value. If this were
# a normal script, this option would mean that the shell would exit
# if the return value of the whole script were an error value; but
# because we are sourced, it is as all the commands in this script
# were executed directly in the calling environment, so *all* values
# returned by *all* commands must be non-error. [this all typically
# happens in rpm builds, where scripts are run with the errexit
# option so that errors in scripts abort the build, and now if a
# script sources GNUstep.sh, then we are exactly in this situation -
# if any command inside GNUstep.sh returns an error value (even if
# GNUstep.sh as a whole would be happy and return succes), the whole
# rpm build process aborts!]. WORKAROUND: we must make sure all
# commands return success - last resorts hacks like 'command || :'
# which always returns success whatever command returns.
#
# If we're running in zsh (auch!) make sure we're using -y
# (SH_WORD_SPLIT) else our path manipulations won't work.
if [ -n "$ZSH_VERSION" ]; then
# If -y is not already set, set it and remember that we
# need to set it back to what it was at the end.
if ( setopt | grep shwordsplit > /dev/null ); then :; else
set -y
GS_ZSH_NEED_TO_RESTORE_SET=yes
fi
fi
#
# Set the GNUstep system root and local root
#
#
# Read our configuration files
#
# Determine the location of the system configuration file
if [ -z "$GNUSTEP_CONFIG_FILE" ]; then
GNUSTEP_CONFIG_FILE=@GNUSTEP_CONFIG_FILE@
fi
# Determine the location of the user configuration file
if [ -z "$GNUSTEP_USER_CONFIG_FILE" ]; then
GNUSTEP_USER_CONFIG_FILE=@GNUSTEP_USER_CONFIG_FILE@
fi
# Read the system configuration file
if [ -f "$GNUSTEP_CONFIG_FILE" ]; then
. "$GNUSTEP_CONFIG_FILE"
fi
# FIXME: determining GNUSTEP_HOME
GNUSTEP_HOME=~
# Read the user configuration file ... unless it is disabled (ie, set
# to an empty string)
if [ -n "$GNUSTEP_USER_CONFIG_FILE" ]; then
case "$GNUSTEP_USER_CONFIG_FILE" in
/*) # An absolute path
if [ -f "$GNUSTEP_USER_CONFIG_FILE" ]; then
. "$GNUSTEP_USER_CONFIG_FILE"
fi;;
*) # Something else
if [ -f "$GNUSTEP_HOME/$GNUSTEP_USER_CONFIG_FILE" ]; then
. "$GNUSTEP_HOME/$GNUSTEP_USER_CONFIG_FILE"
fi;;
esac
fi
# Now, set any essential variable (that is not already set) to the
# built-in values.
# This is deprecated and will be removed
if [ -z "$GNUSTEP_SYSTEM_ROOT" ]; then
GNUSTEP_SYSTEM_ROOT=@GNUSTEP_SYSTEM_ROOT@
fi
# This is deprecated and will be removed
if [ -z "$GNUSTEP_LOCAL_ROOT" ]; then
GNUSTEP_LOCAL_ROOT=@GNUSTEP_LOCAL_ROOT@
fi
# This is deprecated and will be removed
if [ -z "$GNUSTEP_NETWORK_ROOT" ]; then
GNUSTEP_NETWORK_ROOT=@GNUSTEP_NETWORK_ROOT@
fi
export GNUSTEP_SYSTEM_ROOT GNUSTEP_LOCAL_ROOT GNUSTEP_NETWORK_ROOT
# GNUSTEP_FLATTENED is obsolete, please use GNUSTEP_IS_FLATTENED
# instead
GNUSTEP_FLATTENED=@GNUSTEP_FLATTENED@
GNUSTEP_IS_FLATTENED=@GNUSTEP_IS_FLATTENED@
if [ -z "$LIBRARY_COMBO" ]; then
LIBRARY_COMBO=@ac_cv_library_combo@
fi
export GNUSTEP_IS_FLATTENED GNUSTEP_FLATTENED LIBRARY_COMBO
if [ -z "$GNUSTEP_MAKEFILES" ]; then
GNUSTEP_MAKEFILES=@GNUSTEP_MAKEFILES@
fi
export GNUSTEP_MAKEFILES
if [ -z "$GNUSTEP_USER_DIR" ]; then
GNUSTEP_USER_DIR=@GNUSTEP_USER_DIR@
fi
#
# Set GNUSTEP_USER_ROOT which is the variable used in practice
#
case "$GNUSTEP_USER_DIR" in
/*) # An absolute path
GNUSTEP_USER_ROOT="$GNUSTEP_USER_DIR";;
*) # Something else
GNUSTEP_USER_ROOT="$GNUSTEP_HOME/$GNUSTEP_USER_DIR";;
esac
# This is deprecated and will be removed
export GNUSTEP_USER_ROOT
# If multi-platform support is disabled, just use the hardcoded cpu,
# vendor and os determined when gnustep-make was configured. The
# reason using the hardcoded ones might be better is that config.guess
# and similar scripts might even require compiling test files to
# determine the platform - but then you can't source GNUstep.sh
# without having gcc, binutils, libc6-dev installed. Which can be a
# problem for end-users who are not developers and have no development
# tools installed. To prevent this problem, unless we were configured
# to determine the platform at run time, by default we use the
# hardcoded values of GNUSTEP_HOST*.
if [ -z "@GNUSTEP_MULTI_PLATFORM@" ]; then
GNUSTEP_HOST=@target@
GNUSTEP_HOST_CPU=@clean_target_cpu@
GNUSTEP_HOST_VENDOR=@clean_target_vendor@
GNUSTEP_HOST_OS=@clean_target_os@
fi
#
# Determine the host information
#
if [ -z "$GNUSTEP_HOST" ]; then
# Not all shells (e.g. /bin/sh on FreeBSD < 4.0 or ash) have pushd/popd
tmpdir=`pwd`; cd /tmp
GNUSTEP_HOST=`$GNUSTEP_MAKEFILES/config.guess`
GNUSTEP_HOST=`$GNUSTEP_MAKEFILES/config.sub $GNUSTEP_HOST`
cd "$tmpdir"
unset tmpdir
fi
if [ -z "$GNUSTEP_HOST_CPU" ]; then
GNUSTEP_HOST_CPU=`$GNUSTEP_MAKEFILES/cpu.sh $GNUSTEP_HOST`
GNUSTEP_HOST_CPU=`$GNUSTEP_MAKEFILES/clean_cpu.sh $GNUSTEP_HOST_CPU`
fi
if [ -z "$GNUSTEP_HOST_VENDOR" ]; then
GNUSTEP_HOST_VENDOR=`$GNUSTEP_MAKEFILES/vendor.sh $GNUSTEP_HOST`
GNUSTEP_HOST_VENDOR=`$GNUSTEP_MAKEFILES/clean_vendor.sh $GNUSTEP_HOST_VENDOR`
fi
if [ -z "$GNUSTEP_HOST_OS" ]; then
GNUSTEP_HOST_OS=`$GNUSTEP_MAKEFILES/os.sh $GNUSTEP_HOST`
GNUSTEP_HOST_OS=`$GNUSTEP_MAKEFILES/clean_os.sh $GNUSTEP_HOST_OS`
fi
export GNUSTEP_HOST GNUSTEP_HOST_CPU GNUSTEP_HOST_VENDOR GNUSTEP_HOST_OS
# Now load in all the remaining paths
. $GNUSTEP_MAKEFILES/filesystem.sh
# No longer needed
unset GNUSTEP_HOME
# Determine if the paths look like Windows paths that need fixing
fixup_paths=no
if [ -z "`echo $GNUSTEP_MAKEFILES | sed 's|^[a-zA-Z]:/.*$||'`" ]; then
fixup_paths=yes
fi
# GNUSTEP_PATHLIST is deprecated and will be removed.
#
# GNUSTEP_PATHLIST is like an abstract path-like shell variable, which
# can be used to search the gnustep directories - and in these
# scripts, it is also used to set up other shell variables
#
if [ -z "$GNUSTEP_PATHLIST" ]; then
GNUSTEP_PATHLIST=`$GNUSTEP_MAKEFILES/print_unique_pathlist.sh "$GNUSTEP_USER_ROOT" "$GNUSTEP_LOCAL_ROOT" "$GNUSTEP_NETWORK_ROOT" "$GNUSTEP_SYSTEM_ROOT" $fixup_paths`
export GNUSTEP_PATHLIST
fi
#
# Add path to Tools to PATH
#
GNUSTEP_TOOLS_PATHLIST=`$GNUSTEP_MAKEFILES/print_unique_pathlist.sh "$GNUSTEP_USER_TOOLS" "$GNUSTEP_LOCAL_TOOLS" "$GNUSTEP_NETWORK_TOOLS" "$GNUSTEP_SYSTEM_TOOLS" $fixup_paths`
# Now, we check the paths in GNUSTEP_*_ADMIN_TOOLS. These paths
# should only be used by Administrators -- normal users don't have
# enough powers to use those tools to do useful things. Our test for
# being an 'Administrator' is that anyone who can write to an Admin
# directory can be considered powerful enough to use those tools.
# FIXME: Unfortunately, this doesn't work if the Admin directory
# is mounted read-only, so a better test is required!
# So we examine GNUSTEP_*_ADMIN_TOOLS; if we find any path in that
# list that exists and that we can write to, we add it to our PATH.
for dir in "$GNUSTEP_SYSTEM_ADMIN_TOOLS" "$GNUSTEP_NETWORK_ADMIN_TOOLS" "$GNUSTEP_LOCAL_ADMIN_TOOLS" "$GNUSTEP_USER_ADMIN_TOOLS"; do
if [ -d "$dir" -a -w "$dir" ]; then
# Only add the new dir if it's not already in GNUSTEP_TOOLS_PATHLIST
if (echo $GNUSTEP_TOOLS_PATHLIST | grep -v "$dir" >/dev/null); then
GNUSTEP_TOOLS_PATHLIST="$dir:$GNUSTEP_TOOLS_PATHLIST"
fi
fi
done
#
# And now, we put the results into PATH
#
old_IFS="$IFS"
IFS=:
temp_path=
for dir in $GNUSTEP_TOOLS_PATHLIST; do
# Prepare the path_fragment
if [ "$GNUSTEP_IS_FLATTENED" = "no" ]; then
path_fragment="$dir:$dir/${GNUSTEP_HOST_CPU}/${GNUSTEP_HOST_OS}/${LIBRARY_COMBO}:$dir/${GNUSTEP_HOST_CPU}/${GNUSTEP_HOST_OS}"
else
path_fragment="$dir"
fi
# Add it to temp_path
if [ -z "$temp_path" ]; then
temp_path="$path_fragment"
else
temp_path="$temp_path:$path_fragment"
fi
unset path_fragment
done
IFS="$old_IFS"
unset old_IFS
unset dir
if [ -z "$PATH" ]; then
PATH="$temp_path"
else
if ( echo ${PATH}| grep -v "${temp_path}" >/dev/null ); then
PATH="${temp_path}:${PATH}"
fi
fi
unset temp_path
unset GNUSTEP_TOOLS_PATHLIST
export PATH
. $GNUSTEP_MAKEFILES/ld_lib_path.sh
GNUSTEP_LIBRARY_PATHLIST=`$GNUSTEP_MAKEFILES/print_unique_pathlist.sh "$GNUSTEP_USER_LIBRARY" "$GNUSTEP_LOCAL_LIBRARY" "$GNUSTEP_NETWORK_LIBRARY" "$GNUSTEP_SYSTEM_LIBRARY" $fixup_paths`
old_IFS="$IFS"
IFS=:
gnustep_class_path=
for dir in $GNUSTEP_LIBRARY_PATHLIST; do
if [ -z "$gnustep_class_path" ]; then
gnustep_class_path="$dir/Libraries/Java"
else
gnustep_class_path="$gnustep_class_path:$dir/Libraries/Java"
fi
done
IFS="$old_IFS"
unset old_IFS
unset dir
if [ -z "$CLASSPATH" ]; then
CLASSPATH="$gnustep_class_path"
else
if ( echo ${CLASSPATH}| grep -v "${gnustep_class_path}" >/dev/null ); then
CLASSPATH="$CLASSPATH:$gnustep_class_path"
fi
fi
unset gnustep_class_path
export CLASSPATH
#
# Setup path for loading guile modules too.
#
old_IFS="$IFS"
IFS=:
guile_paths=
for dir in $GNUSTEP_LIBRARY_PATHLIST; do
if [ -z "$guile_paths" ]; then
guile_paths="$dir/Libraries/Guile"
else
guile_paths="$guile_paths:$dir/Libraries/Guile"
fi
done
IFS="$old_IFS"
unset old_IFS
unset dir
if [ -z "$GUILE_LOAD_PATH" ]; then
GUILE_LOAD_PATH="$guile_paths"
else
if ( echo ${GUILE_LOAD_PATH}| grep -v "${guile_paths}" >/dev/null ); then
GUILE_LOAD_PATH="$guile_paths:$GUILE_LOAD_PATH"
fi
fi
export GUILE_LOAD_PATH
unset guile_paths
unset GNUSTEP_LIBRARY_PATHLIST
#
# Make sure info files, that we install by default into
# xxx/Library/Documentation/info, are found by the info browsing
# programs. To get this effect, we add those paths to INFOPATH.
#
GNUSTEP_INFO_PATHLIST=`$GNUSTEP_MAKEFILES/print_unique_pathlist.sh "$GNUSTEP_USER_DOC_INFO" "$GNUSTEP_LOCAL_DOC_INFO" "$GNUSTEP_NETWORK_DOC_INFO" "$GNUSTEP_SYSTEM_DOC_INFO" $fixup_paths`
old_IFS="$IFS"
IFS=:
gnustep_info_path=
for dir in $GNUSTEP_INFO_PATHLIST; do
if [ -z "$gnustep_info_path" ]; then
gnustep_info_path="$dir"
else
gnustep_info_path="$gnustep_info_path:$dir"
fi
done
IFS="$old_IFS"
unset old_IFS
unset dir
if [ -z "$INFOPATH" ]; then
# The ':' at the end means to use the built-in paths after searching
# the INFOPATH we provide.
INFOPATH="${gnustep_info_path}:"
else
if ( echo ${INFOPATH}| grep -v "${gnustep_info_path}" >/dev/null ); then
INFOPATH="$INFOPATH:${gnustep_info_path}:"
fi
fi
unset gnustep_info_path
export INFOPATH
unset GNUSTEP_INFO_PATHLIST
#
# Perform any user initialization
#
if [ -f "$GNUSTEP_USER_ROOT/GNUstep.sh" ]; then
. "$GNUSTEP_USER_ROOT/GNUstep.sh"
fi
#
# Clean up the environment by removing the filesystem variables. Do
# it unless we were explicitly requested not to clean it up! Mostly
# gnustep-config will request that the environment is not cleaned up,
# so it can print out all of the GNUstep variables.
#
if [ -n "$GNUSTEP_SH_EXPORT_ALL_VARIABLES" ]; then
export GNUSTEP_SYSTEM_APPS GNUSTEP_SYSTEM_ADMIN_APPS GNUSTEP_SYSTEM_WEB_APPS GNUSTEP_SYSTEM_TOOLS GNUSTEP_SYSTEM_ADMIN_TOOLS
export GNUSTEP_SYSTEM_LIBRARY GNUSTEP_SYSTEM_HEADERS GNUSTEP_SYSTEM_LIBRARIES
export GNUSTEP_SYSTEM_DOC GNUSTEP_SYSTEM_DOC_MAN GNUSTEP_SYSTEM_DOC_INFO
export GNUSTEP_NETWORK_APPS GNUSTEP_NETWORK_ADMIN_APPS GNUSTEP_NETWORK_WEB_APPS GNUSTEP_NETWORK_TOOLS GNUSTEP_NETWORK_ADMIN_TOOLS
export GNUSTEP_NETWORK_LIBRARY GNUSTEP_NETWORK_HEADERS GNUSTEP_NETWORK_LIBRARIES
export GNUSTEP_NETWORK_DOC GNUSTEP_NETWORK_DOC_MAN GNUSTEP_NETWORK_DOC_INFO
export GNUSTEP_LOCAL_APPS GNUSTEP_LOCAL_ADMIN_APPS GNUSTEP_LOCAL_WEB_APPS GNUSTEP_LOCAL_TOOLS GNUSTEP_LOCAL_ADMIN_TOOLS
export GNUSTEP_LOCAL_LIBRARY GNUSTEP_LOCAL_HEADERS GNUSTEP_LOCAL_LIBRARIES
export GNUSTEP_LOCAL_DOC GNUSTEP_LOCAL_DOC_MAN GNUSTEP_LOCAL_DOC_INFO
export GNUSTEP_USER_APPS GNUSTEP_USER_ADMIN_APPS GNUSTEP_USER_WEB_APPS GNUSTEP_USER_TOOLS GNUSTEP_USER_ADMIN_TOOLS
export GNUSTEP_USER_LIBRARY GNUSTEP_USER_HEADERS GNUSTEP_USER_LIBRARIES
export GNUSTEP_USER_DOC GNUSTEP_USER_DOC_MAN GNUSTEP_USER_DOC_INFO
else
unset GNUSTEP_SYSTEM_APPS
unset GNUSTEP_SYSTEM_ADMIN_APPS
unset GNUSTEP_SYSTEM_WEB_APPS
unset GNUSTEP_SYSTEM_TOOLS
unset GNUSTEP_SYSTEM_ADMIN_TOOLS
unset GNUSTEP_SYSTEM_LIBRARY
unset GNUSTEP_SYSTEM_HEADERS
unset GNUSTEP_SYSTEM_LIBRARIES
unset GNUSTEP_SYSTEM_DOC
unset GNUSTEP_SYSTEM_DOC_MAN
unset GNUSTEP_SYSTEM_DOC_INFO
unset GNUSTEP_NETWORK_APPS
unset GNUSTEP_NETWORK_ADMIN_APPS
unset GNUSTEP_NETWORK_WEB_APPS
unset GNUSTEP_NETWORK_TOOLS
unset GNUSTEP_NETWORK_ADMIN_TOOLS
unset GNUSTEP_NETWORK_LIBRARY
unset GNUSTEP_NETWORK_HEADERS
unset GNUSTEP_NETWORK_LIBRARIES
unset GNUSTEP_NETWORK_DOC
unset GNUSTEP_NETWORK_DOC_MAN
unset GNUSTEP_NETWORK_DOC_INFO
unset GNUSTEP_LOCAL_APPS
unset GNUSTEP_LOCAL_ADMIN_APPS
unset GNUSTEP_LOCAL_WEB_APPS
unset GNUSTEP_LOCAL_TOOLS
unset GNUSTEP_LOCAL_ADMIN_TOOLS
unset GNUSTEP_LOCAL_LIBRARY
unset GNUSTEP_LOCAL_HEADERS
unset GNUSTEP_LOCAL_LIBRARIES
unset GNUSTEP_LOCAL_DOC
unset GNUSTEP_LOCAL_DOC_MAN
unset GNUSTEP_LOCAL_DOC_INFO
unset GNUSTEP_USER_APPS
unset GNUSTEP_USER_ADMIN_APPS
unset GNUSTEP_USER_WEB_APPS
unset GNUSTEP_USER_TOOLS
unset GNUSTEP_USER_ADMIN_TOOLS
unset GNUSTEP_USER_LIBRARY
unset GNUSTEP_USER_HEADERS
unset GNUSTEP_USER_LIBRARIES
unset GNUSTEP_USER_DOC
unset GNUSTEP_USER_DOC_MAN
unset GNUSTEP_USER_DOC_INFO
fi
if [ -n "$GS_ZSH_NEED_TO_RESTORE_SET" ]; then
set +y
fi
# EOF

View file

@ -1,321 +0,0 @@
1 GNUstep makefile package installation
***************************************
1.1 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 this distribution.
This should be the first GNUstep package you install. Before
installing this package, install ffcall or libffi and any other
libraries that GNUstep may need (see the GNUstep-HOWTO). Read and
follow the instructions on setting up the GNUstep environement below.
Then install gnustep-base.
Make sure you've read the machine-specific instructions for your
particular operating system and CPU. These instructions come with the
GNUstep-HOWTO and are also located at the GNUstep web site at
`http://www.gnustep.org'.
Quick installation instructions:
./configure
make
make install
This will use the default GNUstep filesystem layout (in other words,
all of GNUstep will end up installed into /usr/GNUstep). If you are on
a Unix system, another popular option is
./configure --with-layout=fhs
make
make install
which will use the FHS (in other words, all of GNUstep will end up
installed into /usr/local).
To make and install the documentation:
cd Documentation
make
make install
1.2 Configuration
=================
The GNUstep packages uses the Autoconf mechanism for configuration; it
checks some host capabilties which are used by all GNUstep software.
To configure just type:
./configure
The GNUstep makefile package needs to know which filesystem layout to
use when installing; this determines the way that various directories
in the GNUstep domains (SYSTEM, NETWORK, LOCAL, USER) are mapped to
local directories on disk. In the FilesystemLayouts/README file you
can find detailed information on filesystem layouts.
To specify a filesystem layout, use the -with-layout=xxx option. The
default is
./configure --with-layout=gnustep
which installs GNUstep in /usr/GNUstep using the GNUstep layout (that
is, /usr/GNUstep/System, /usr/GNUstep/Local, ~/GNUstep). Another
popular option is '-with-layout=fhs' which installs gnustep-make into
FHS directories based on /usr/local. Check the FilesystemLayouts for
more options.
If you want to install the same layout but in a different location
(for example, /opt/gnustep), you can use -prefix=xxx,
./configure --prefix=/opt/gnustep
If you're confused and want to see exactly what directories will be
used for a certain choice of ./configure flags, have a look at the
GNUstep.conf file that is generated by ./configure. It will list the
full paths to all the relevant GNUstep directories that would be used
if you install the software with that configuration.
To see more options you can use with configure, type
./configure --help
Look particularly at the end of the list that configure gives, as
these options are specific to GNUstep. Some of these are described
below.
With the GNUstep packages you can use various switches, such as
shared and debug, to control compilation. for example, "make shared=no
debug=yes" compiles using static libraries with debugging information.
(Make sure you use the same switches for every package you compile, and
also when you install).
1.2.1 Backend Bundles
---------------------
By default, the gnustep-make package specifies that GUI backends are
built as a bundle and loaded in at runtime. This allows one to switch
backends by simply redefining a user default. If you do not want this
behavior (for instance, if bundles do not work on your platform), it
can be disabled using
--disable-backend-bundle
in the arguments to configure.
1.2.2 Alternate Library Setup
-----------------------------
You can specify compilation of alternate libraries by using the
with-library-combo option.
./configure --with-library-combo=apple-gnu-gnu
to compile with Apple's runtime on Darwin, for example. See the
DESIGN document for more examples of the variety of library combos.
1.2.3 Alternate Thread Library
------------------------------
You can specify compilation of an alternate thread library from the one
that is normally used (or if GNUstep does not know what your normal
library is) with the with-thread-lib option.
./configure --with-thread-lib="-L/usr/local/lib -lgthread -lglib"
to use libgthread as your threading library. Note that the
Objective-C runtime (libobjc) must have a compatible threading backend
in order to use this threading library and you must set the appropriate
threading backend by hand in the GNUmakefile if you are using
gnustep-objc. If you also need to set compiler flags, use the CPPFLAGS
variable when calling configure:
CPPFLAGS="-I/usr/local/include" ./configure --with-thread-lib="-L/usr/local/lib -lgthread -lglib"
1.2.4 Configuring for a non-flattened structure
-----------------------------------------------
GNUstep is normally configured to support a single target/combo. If you
are interested in supporting more than one target and/or combo, it's
possible to configure GNUstep to use a non-'flattened' directory
structure. You do this by supplying the `--disable-flattened' argument
to configure. You might also want to supply the
`--enable-multi-platform' option.
In a flattened structure, files are stored at the top-level rather
than in a `$(GNUSTEP_CPU)/$(GNUSTEP_OS)/$(LIBRARY_COMBO)' subdirectory.
1.2.5 Configuring 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
GNUstep normally is configured to work with only one target. To work
with multiple targets, you'll need to add `--disable-flattened' and
`--enable-multi-platform' to the configure flags. Files for the
different targets will not be overwritten when you configure and install
the make package several times.
./configure --disable-flattened --enable-multi-platform --target=i386-mingw32
make install
./configure --disable-flattened --enable-multi-platform --target=sparc-solaris2.5
make install
./configure --disable-flattened --enable-multi-platform --target=alpha-linux-gnu
make install
1.3 Installation
================
After you configure the GNUstep makefile package, you can go straight
into installation (there is nothing to compile):
make install
After you have installed the GNUstep makefile package, there might
still be some minor administration to be performed, depending on your
configuration.
1.4 Setting up the GNUstep environment
======================================
GNUstep-make will install all programs and libraries in the directories
specified by the filesystem layout that you choose.
In here we explain how to set up your environment so that the
operating system can find the programs and libraries in these
directories.
The procedure depends on the type of layout (flattened or
non-flattened), and on the amount of advanced options that you want to
use.
1.4.1 Flattened (default) Setup
-------------------------------
In a flattened setup (the default unless you use the -disable-flattened
configure argument), you can use a simple setup where you just need to
make sure that the few program and library directories are found by the
shell/linker.
Check the description of your filesystem in FilesystemLayouts to find
precise simplified instructions for your layout.
In general, you need to your GNUSTEP_SYSTEM_TOOLS,
GNUSTEP_NETWORK_TOOLS and GNUSTEP_LOCAL_TOOLS to your PATH, and add
your GNUSTEP_SYSTEM_LIBRARIES, GNUSTEP_NETWORK_LIBRARIES and
GNUSTEP_LOCAL_LIBRARIES to your linker paths (which is /etc/ld.so.conf
on GNU/Linux).
To build software, you also need to set GNUSTEP_MAKEFILES. (PS: This
requirement is likely to go away soon)
1.4.2 Non-Flattend (fat binary) Setup
-------------------------------------
(Advanced configuration)
If the setup is non-flattened (ie, fat binary support is enabled)
programs and libraries will be installed in appropriate subdirectories
so that binaries for different machines/library-combos can coexist.
This is the case only if you configure gnustep-make with the option
-disable-flattened.
In this case, the recommended solution for setting up the GNUstep
environment is to source the GNUstep.sh file.
. /usr/GNUstep/System/Library/Makefiles/GNUstep.sh
(change the path to be the path to your GNUstep.sh file on disk.
Common cases include /usr/GNUstep/System/Library/Libraries/Makefiles
and /usr/local/share/GNUstep/Makefiles)
You can run this command in your shell every time, or you may want to
add the command to your shell startup scripts - either the ones for
your own user (for example, `.bash_profile' for Bash) or the ones for
the whole system (for example, `/etc/profile' on GNU/Linux).
Please note that you need to execute this command both to build
software using gnustep-make and to run software installed by
gnustep-make.
1.5 Setting up your GNUstep User domain
=======================================
(Advanced configuration)
The USER domain is generally expected to be in your home directory;
you can use the USER domain to install programs or libraries in your
home directory without affecting other users.
If you want to access programs or libraries installed in your USER
domain, then you really need to source GNUstep.sh in all cases (both
flattened and non-flattened), as explained in the Non-Flattened section.
If you want to change the filesystem layout of your USER domain
(without reinstalling gnustep-make or affecting other people's USER
domains), you can do so at runtime by creating a file called
~/.GNUstep.conf (this might have a different name if your filesystem
layout specifies otherwise).
In that file, you can set all the GNUSTEP_USER_* variables set in
GNUstep.conf. Check your GNUstep.conf for a full description. Here is
an example in which all the GNUstep domain is moved into ~/Test/GNUstep
instead of ~/GNUstep:
GNUSTEP_USER_DIR=Test/GNUstep
1.6 Having multiple gnustep-makes installed at the same time
============================================================
(Advanced configuration)
You can install gnustep-make multiple times in different directories
by using a different config file for each. But if you do, then you
must make sure that you can easily switch the operating system paths
from one installation to the other. An easy way to do this is to
configure your GNUstep by using GNUstep.sh as explained in the
non-flattened instructions.
Your default gnustep-make installation is the one described in the
default GNUstep.conf file for the system; on GNU/Linux this is
`/etc/GNUstep/GNUstep.conf'. You can create a second one that uses a
different config file; for example:
./configure --prefix=/opt/mytest --with-config-file=/etc/GNUstep-mytest.conf
When you install, this second instance of gnustep-make will reside in
`/opt/mytest', and have `/etc/GNUstep-mytest.conf' as config file.
To use this second installation instead of the first one, you only
need to set the GNUSTEP_CONFIG_FILE variable to point to the next
config file and source GNUstep.sh:
export GNUSTEP_CONFIG_FILE=/etc/GNUstep-mytest.conf
. /opt/mytest/System/Library/Makefies/GNUstep.sh
To stop using a GNUstep installation, reset your GNUstep environment
with the GNUstep-reset.sh script and destroy the variable
GNUSTEP_CONFIG_FILE -
. /opt/mytest/System/Library/Makefies/GNUstep-reset.sh
unset GNUSTEP_CONFIG_FILE
After this, you are ready to start using a new one (by setting a new
GNUSTEP_CONFIG_FILE and then sourcing the GNUstep.sh of the new one).

View file

@ -1,78 +0,0 @@
# -*-makefile-*-
# Instance/Documentation/autogsdoc.make
#
# Instance Makefile rules to build Autogsdoc documentation.
#
# Copyright (C) 1998, 2000, 2001, 2002 Free Software Foundation, Inc.
#
# Author: Scott Christley <scottc@net-community.com>
# Author: Nicola Pero <n.pero@mi.flashnet.it>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(BASE_MAKE_LOADED), yes)
ifeq ($(GNUSTEP_BASE_HAVE_LIBXML), 1)
ifeq ($(AUTOGSDOC),)
AUTOGSDOC = autogsdoc
endif
AGSDOC_FLAGS = $($(GNUSTEP_INSTANCE)_AGSDOC_FLAGS)
INTERNAL_AGSDOCFLAGS = -Project $(GNUSTEP_INSTANCE)
INTERNAL_AGSDOCFLAGS += -DocumentationDirectory $(GNUSTEP_INSTANCE)
INTERNAL_AGSDOCFLAGS += $(AGSDOC_FLAGS)
internal-doc-all_:: $(GNUSTEP_INSTANCE)/dependencies
# Only include (and implicitly automatically rebuild if needed) the
# dependencies file when we are compiling. Ignore it when cleaning or
# installing.
ifeq ($(GNUSTEP_OPERATION), all)
-include $(GNUSTEP_INSTANCE)/dependencies
endif
$(GNUSTEP_INSTANCE)/dependencies:
$(ECHO_AUTOGSDOC)$(AUTOGSDOC) $(INTERNAL_AGSDOCFLAGS) -MakeDependencies $(GNUSTEP_INSTANCE)/dependencies $(AGSDOC_FILES)$(END_ECHO)
internal-doc-install_::
$(ECHO_INSTALLING)rm -rf $(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(GNUSTEP_INSTANCE); \
$(TAR) cfX - $(GNUSTEP_MAKEFILES)/tar-exclude-list $(GNUSTEP_INSTANCE) | \
(cd $(GNUSTEP_DOC)/$(DOC_INSTALL_DIR); $(TAR) xf -)$(END_ECHO)
ifneq ($(CHOWN_TO),)
$(ECHO_CHOWNING)$(CHOWN) -R $(CHOWN_TO) \
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(GNUSTEP_INSTANCE)$(END_ECHO)
endif
internal-doc-uninstall_::
-$(ECHO_UNINSTALLING)rm -f $(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(GNUSTEP_INSTANCE)$(END_ECHO)
internal-doc-clean::
-$(ECHO_NOTHING)rm -Rf $(GNUSTEP_INSTANCE)$(END_ECHO)
else
internal-doc-all_::
@echo "No libxml - processing of autogsdoc files skipped"
endif # GNUSTEP_BASE_HAVE_LIBXML
else
internal-doc-all_::
@echo "GNUstep-Base not installed - processing of autogsdoc files skipped"
@echo "If you want to generate documentation, install GNUstep-base first"
@echo "and then rerun make here"
endif # BASE_MAKE_LOADED

View file

@ -1,43 +0,0 @@
# -*-makefile-*-
# Instance/Documentation/gsdoc.make
#
# Instance Makefile rules to build gsdoc documentation.
#
# Copyright (C) 1998, 2000, 2001, 2002 Free Software Foundation, Inc.
#
# Author: Scott Christley <scottc@net-community.com>
# Author: Nicola Pero <n.pero@mi.flashnet.it>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# The only thing we know is that each %.gsdoc file should generate a
# %.html file. If any of the %.gsdoc files is newer than a corresponding
# %.html file, we rebuild them all.
GSDOC_OBJECT_FILES = $(patsubst %.gsdoc,%.html,$(GSDOC_FILES))
internal-doc-all_:: $(GSDOC_OBJECT_FILES)
$(GSDOC_OBJECT_FILES): $(GSDOC_FILES)
autogsdoc $(GSDOC_FILES)
internal-doc-install_:: \
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(GNUSTEP_INSTANCE)
$(ECHO_INSTALLING)$(INSTALL_DATA) $(GSDOC_OBJECT_FILES) \
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(GNUSTEP_INSTANCE)$(END_ECHO)
internal-doc-uninstall_::
$(ECHO_UNINSTALLING)rm -f \
$(addprefix $(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/\
$(GNUSTEP_INSTANCE)/,$(GSDOC_OBJECT_FILES))$(END_ECHO)
internal-doc-clean::
-$(ECHO_NOTHING)rm -f $(GSDOC_OBJECT_FILES)$(END_ECHO)

View file

@ -1,36 +0,0 @@
# -*-makefile-*-
# Instance/Documentation/install_files.make
#
# Instance Makefile rules to install pre-made documentation
#
# Copyright (C) 1998, 2000, 2001, 2002 Free Software Foundation, Inc.
#
# Author: Scott Christley <scottc@net-community.com>
# Author: Nicola Pero <n.pero@mi.flashnet.it>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
internal-doc-install_::
$(ECHO_INSTALLING)for file in $($(GNUSTEP_INSTANCE)_INSTALL_FILES) __done; do \
if [ $$file != __done ]; then \
$(INSTALL_DATA) $$file \
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$$file ; \
fi; \
done$(END_ECHO)
internal-doc-uninstall_::
$(ECHO_UNINSTALLING)for file in $($(GNUSTEP_INSTANCE)_INSTALL_FILES) __done; do \
if [ $$file != __done ]; then \
rm -f $(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$$file ; \
fi; \
done$(END_ECHO)

View file

@ -1,86 +0,0 @@
# -*-makefile-*-
# Instance/Documentation/javadoc.make
#
# Instance Makefile rules to build JavaDoc documentation.
#
# Copyright (C) 1998, 2000, 2001, 2002 Free Software Foundation, Inc.
#
# Author: Scott Christley <scottc@net-community.com>
# Author: Nicola Pero <n.pero@mi.flashnet.it>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
JAVADOC_SOURCEPATH = $($(GNUSTEP_INSTANCE)_JAVADOC_SOURCEPATH)
.PHONY: generate-javadoc
ifeq ($(JAVADOC),)
JAVADOC = $(JAVA_HOME)/bin/javadoc
endif
ifeq ($(JAVADOC_SOURCEPATH),)
INTERNAL_JAVADOCFLAGS = -sourcepath ./
else
INTERNAL_JAVADOCFLAGS = -sourcepath ./:$(strip $(JAVADOC_SOURCEPATH))
endif
ALL_JAVADOCFLAGS = $(INTERNAL_CLASSPATHFLAGS) $(INTERNAL_JAVADOCFLAGS) \
$(ADDITIONAL_JAVADOCFLAGS) $(AUXILIARY_JAVADOCFLAGS)
# incremental compilation with javadoc is not supported - you can only
# build once, or always. by default we build only once - use
# `JAVADOC_BUILD_ALWAYS = YES' to force rebuilding it always
ifneq ($(JAVADOC_BUILD_ALWAYS),YES) # Build only once
internal-doc-all_:: $(GNUSTEP_INSTANCE)/index.html
$(GNUSTEP_INSTANCE)/index.html:
$(ECHO_NOTHING)$(MKDIRS) $(GNUSTEP_INSTANCE); \
$(JAVADOC) $(ALL_JAVADOCFLAGS) $(JAVADOC_FILES) -d $(GNUSTEP_INSTANCE)$(END_ECHO)
else # Build always
internal-doc-all_:: generate-javadoc
generate-javadoc:
$(ECHO_NOTHING)$(MKDIRS) $(GNUSTEP_INSTANCE); \
$(JAVADOC) $(ALL_JAVADOCFLAGS) $(JAVADOC_FILES) -d $(GNUSTEP_INSTANCE)$(END_ECHO)
endif
#
# Javadoc installation
#
ifneq ($(JAVADOC_FILES),)
internal-doc-install_::
$(ECHO_INSTALLING)rm -rf $(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(GNUSTEP_INSTANCE); \
$(TAR) cfX - $(GNUSTEP_MAKEFILES)/tar-exclude-list $(GNUSTEP_INSTANCE) | \
(cd $(GNUSTEP_DOC)/$(DOC_INSTALL_DIR); $(TAR) xf -)$(END_ECHO)
ifneq ($(CHOWN_TO),)
$(ECHO_CHOWNING)$(CHOWN) -R $(CHOWN_TO) \
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(GNUSTEP_INSTANCE)$(END_ECHO)
endif
internal-doc-uninstall_::
-$(ECHO_UNINSTALLING)rm -f $(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(GNUSTEP_INSTANCE)$(END_ECHO)
endif # JAVADOC_FILES
internal-doc-clean::
-$(ECHO_NOTHING)rm -Rf $(GNUSTEP_INSTANCE)$(END_ECHO)
internal-doc-distclean::

View file

@ -1,96 +0,0 @@
# -*-makefile-*-
# Instance/Documentation/latex.make
#
# Instance Makefile rules to build LaTeX documentation.
#
# Copyright (C) 1998, 2000, 2001, 2002 Free Software Foundation, Inc.
#
# Author: Scott Christley <scottc@net-community.com>
# Author: Nicola Pero <n.pero@mi.flashnet.it>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
$(GNUSTEP_INSTANCE).dvi: $(LATEX_FILES)
latex $(GNUSTEP_INSTANCE).tex
latex $(GNUSTEP_INSTANCE).tex
$(GNUSTEP_INSTANCE).ps: $(GNUSTEP_INSTANCE).dvi
$(GNUSTEP_DVIPS) $(GNUSTEP_DVIPS_FLAGS) $(ADDITIONAL_DVIPS_FLAGS) \
$(GNUSTEP_INSTANCE).dvi -o $@
$(GNUSTEP_INSTANCE).ps.gz: $(GNUSTEP_INSTANCE).ps
gzip $(GNUSTEP_INSTANCE).ps -c > $(GNUSTEP_INSTANCE).ps.gz
internal-doc-all_:: $(GNUSTEP_INSTANCE).ps.gz
internal-doc-install_::
$(INSTALL_DATA) $(GNUSTEP_INSTANCE).ps \
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)
internal-doc-uninstall_::
$(ECHO_UNINSTALLING)rm -f \
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(GNUSTEP_INSTANCE).ps$(END_ECHO)
internal-doc-clean::
-$(ECHO_NOTHING)rm -f $(GNUSTEP_INSTANCE).aux \
$(GNUSTEP_INSTANCE).cp \
$(GNUSTEP_INSTANCE).cps \
$(GNUSTEP_INSTANCE).dvi \
$(GNUSTEP_INSTANCE).fn \
$(GNUSTEP_INSTANCE).info* \
$(GNUSTEP_INSTANCE).ky \
$(GNUSTEP_INSTANCE).log \
$(GNUSTEP_INSTANCE).pg \
$(GNUSTEP_INSTANCE).ps \
$(GNUSTEP_INSTANCE).toc \
$(GNUSTEP_INSTANCE).tp \
$(GNUSTEP_INSTANCE).vr \
$(GNUSTEP_INSTANCE).vrs \
$(GNUSTEP_INSTANCE)_*.html \
$(GNUSTEP_INSTANCE).ps.gz \
$(GNUSTEP_INSTANCE).tar.gz \
$(GNUSTEP_INSTANCE)/* \
*.aux$(END_ECHO)
#
# Targets built only if we can find `latex2html'
#
ifneq ($(LATEX2HTML),)
HAS_LATEX2HTML = yes
endif
ifeq ($(HAS_LATEX2HTML),yes)
internal-doc-all_:: $(GNUSTEP_INSTANCE).tar.gz
$(GNUSTEP_INSTANCE)/$(GNUSTEP_INSTANCE).html: $(GNUSTEP_INSTANCE).dvi
$(LATEX2HTML) $(GNUSTEP_INSTANCE)
$(GNUSTEP_INSTANCE).tar.gz: $(GNUSTEP_INSTANCE)/$(GNUSTEP_INSTANCE).html
$(TAR) cfzX $(GNUSTEP_INSTANCE).tar.gz $(GNUSTEP_MAKEFILES)/tar-exclude-list $(GNUSTEP_INSTANCE)
internal-doc-install_::
$(INSTALL_DATA) $(GNUSTEP_INSTANCE)/*.html \
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)
$(INSTALL_DATA) $(GNUSTEP_INSTANCE)/*.css \
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)
# Yeah - I know - the following is dangerous if you have misused the
# DOC_INSTALL_DIR - but it's the only way to do it
internal-doc-uninstall_::
-$(ECHO_UNINSTALLING)rm -f $(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/*.html; \
rm -f $(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/*.css$(END_ECHO)
internal-doc-distclean::
$(ECHO_NOTHING) if [ -d "$(GNUSTEP_INSTANCE)" ]; then \
rm -rf $(GNUSTEP_INSTANCE)/; \
fi$(END_ECHO)
endif # LATEX2HTML

View file

@ -1,156 +0,0 @@
# -*-makefile-*-
# Instance/Documentation/texi.make
#
# Instance Makefile rules to build Texinfo documentation.
#
# Copyright (C) 1998, 2000, 2001, 2002 Free Software Foundation, Inc.
#
# Author: Scott Christley <scottc@net-community.com>
# Author: Nicola Pero <n.pero@mi.flashnet.it>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# To override GNUSTEP_MAKEINFO, define it differently in
# GNUmakefile.preamble
ifeq ($(GNUSTEP_MAKEINFO),)
GNUSTEP_MAKEINFO = makeinfo
endif
# To override GNUSTEP_MAKEINFO_FLAGS, define it differently in
# GNUmakefile.premable. To only add new flags to the existing ones,
# set ADDITIONAL_MAKEINFO_FLAGS in GNUmakefile.preamble.
ifeq ($(GNUSTEP_MAKEINFO_FLAGS),)
GNUSTEP_MAKEINFO_FLAGS = -D NO-TEXI2HTML
endif
ifeq ($(GNUSTEP_MAKETEXT),)
GNUSTEP_MAKETEXT = makeinfo
endif
ifeq ($(GNUSTEP_MAKETEXT_FLAGS),)
GNUSTEP_MAKETEXT_FLAGS = -D NO-TEXI2HTML -D TEXT-ONLY --no-header --no-split
endif
ifeq ($(GNUSTEP_TEXI2DVI),)
GNUSTEP_TEXI2DVI = texi2dvi
endif
ifeq ($(GNUSTEP_TEXI2DVI_FLAGS),)
GNUSTEP_TEXI2DVI_FLAGS =
endif
ifeq ($(GNUSTEP_TEXI2PDF),)
GNUSTEP_TEXI2PDF = texi2pdf
endif
ifeq ($(GNUSTEP_TEXI2PDF_FLAGS),)
GNUSTEP_TEXI2PDF_FLAGS =
endif
ifeq ($(GNUSTEP_TEXI2HTML),)
GNUSTEP_TEXI2HTML = texi2html
endif
ifeq ($(GNUSTEP_TEXI2HTML_FLAGS),)
GNUSTEP_TEXI2HTML_FLAGS = -split_chapter -expandinfo
endif
internal-doc-all_:: $(GNUSTEP_INSTANCE).info \
$(GNUSTEP_INSTANCE).pdf \
$(GNUSTEP_INSTANCE)_toc.html
internal-textdoc-all_:: $(GNUSTEP_INSTANCE)
# If we don't have these programs, just don't build them but don't
# abort the make. This allows projects to automatically build documentation
# without worring that the build will crash if the user doesn't have the
# doc programs. Also don't install them if they haven't been generated.
$(GNUSTEP_INSTANCE).info: $(TEXI_FILES)
-$(GNUSTEP_MAKEINFO) $(GNUSTEP_MAKEINFO_FLAGS) $(ADDITIONAL_MAKEINFO_FLAGS) \
-o $@ $(GNUSTEP_INSTANCE).texi
$(GNUSTEP_INSTANCE).dvi: $(TEXI_FILES)
-$(GNUSTEP_TEXI2DVI) $(GNUSTEP_TEXI2DVI_FLAGS) $(ADDITIONAL_TEXI2DVI_FLAGS) \
$(GNUSTEP_INSTANCE).texi
$(GNUSTEP_INSTANCE).ps: $(GNUSTEP_INSTANCE).dvi
-$(GNUSTEP_DVIPS) $(GNUSTEP_DVIPS_FLAGS) $(ADDITIONAL_DVIPS_FLAGS) \
$(GNUSTEP_INSTANCE).dvi -o $@
$(GNUSTEP_INSTANCE).pdf: $(TEXI_FILES)
-$(GNUSTEP_TEXI2PDF) $(GNUSTEP_TEXI2PDF_FLAGS) $(ADDITIONAL_TEXI2PDF_FLAGS) \
$(GNUSTEP_INSTANCE).texi -o $@
$(GNUSTEP_INSTANCE)_toc.html: $(TEXI_FILES)
-$(GNUSTEP_TEXI2HTML) $(GNUSTEP_TEXI2HTML_FLAGS) $(ADDITIONAL_TEXI2HTML_FLAGS) \
$(GNUSTEP_INSTANCE).texi
$(GNUSTEP_INSTANCE): $(TEXI_FILES) $(TEXT_MAIN)
-$(GNUSTEP_MAKETEXT) $(GNUSTEP_MAKETEXT_FLAGS) $(ADDITIONAL_MAKETEXT_FLAGS) \
-o $@ $(TEXT_MAIN)
internal-doc-clean::
-$(ECHO_NOTHING) rm -f $(GNUSTEP_INSTANCE).aux \
$(GNUSTEP_INSTANCE).cp \
$(GNUSTEP_INSTANCE).cps \
$(GNUSTEP_INSTANCE).dvi \
$(GNUSTEP_INSTANCE).fn \
$(GNUSTEP_INSTANCE).info* \
$(GNUSTEP_INSTANCE).ky \
$(GNUSTEP_INSTANCE).log \
$(GNUSTEP_INSTANCE).pg \
$(GNUSTEP_INSTANCE).ps \
$(GNUSTEP_INSTANCE).pdf \
$(GNUSTEP_INSTANCE).toc \
$(GNUSTEP_INSTANCE).tp \
$(GNUSTEP_INSTANCE).vr \
$(GNUSTEP_INSTANCE).vrs \
$(GNUSTEP_INSTANCE).html \
$(GNUSTEP_INSTANCE)_*.html \
$(GNUSTEP_INSTANCE).ps.gz \
$(GNUSTEP_INSTANCE).tar.gz \
$(GNUSTEP_INSTANCE)/*$(END_ECHO)
# NB: Only install doc files if they have been generated
# We install all info files in the same directory, which is
# GNUSTEP_DOC_INFO. TODO: I think we should run
# install-info too - to keep up-to-date the dir index in that
# directory.
internal-doc-install_:: $(GNUSTEP_DOC_INFO)
if [ -f $(GNUSTEP_INSTANCE).pdf ]; then \
$(INSTALL_DATA) $(GNUSTEP_INSTANCE).pdf \
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR); \
fi
if [ -f $(GNUSTEP_INSTANCE).info ]; then \
$(INSTALL_DATA) $(GNUSTEP_INSTANCE).info* $(GNUSTEP_DOC_INFO); \
fi
if [ -f $(GNUSTEP_INSTANCE)_toc.html ]; then \
$(INSTALL_DATA) $(GNUSTEP_INSTANCE)_*.html \
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR); \
fi
if [ -f $(GNUSTEP_INSTANCE).html ]; then \
$(INSTALL_DATA) $(GNUSTEP_INSTANCE).html \
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR); \
fi
$(GNUSTEP_DOC_INFO):
$(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
internal-doc-uninstall_::
rm -f \
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(GNUSTEP_INSTANCE).pdf
rm -f \
$(GNUSTEP_DOC_INFO)/$(GNUSTEP_INSTANCE).info*
rm -f \
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(GNUSTEP_INSTANCE)_*.html
rm -f \
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(GNUSTEP_INSTANCE).html

View file

@ -1,23 +0,0 @@
Makefiles in this directory are only used during the 'Instance' make
invocation. The 'Master' invocation (see explanation in
Master/README) decides which tasks are to be done; for each of them,
it calls a recursive make invocation (called an 'Instance' make
invocation), setting GNUSTEP_INSTANCE to the instance name (for
example, 'defaults'), and GNUSTEP_TYPE to the type of instance type
(for example, 'tool'). The make target to build is as in
internal-tool-all.
This means that all makefiles in this directory are executed with a
well defined GNUSTEP_INSTANCE, GNUSTEP_TYPE, and target.
It is safe/required in all these makefiles/makefile fragments to
access the variables needed to build the target for this instance by
using $($(GNUSTEP_INSTANCE)_VARIABLE). For example, the list of
OBJC_FILES needed to compile the `defaults' instance will have been
defined by the user in the defaults_OBJC_FILES variable. In this
directory, we access this list using
$($(GNUSTEP_INSTANCE)_OBJC_FILES).
Please note that this makefiles/makefile fragments can't be included
in the Master invocation, they are actually useless in the Master
invocation, because $(GNUSTEP_INSTANCE) is undefined in that case.

View file

@ -1,51 +0,0 @@
Files in this directory are makefile fragments which might be included
by arbitrary project types during the instance make invocation. You
can think of it as a little library of makefile fragments which can be
used to build project types more easily, and to favour code reuse and
API consistency between different project types.
Each of the makefile fragments will normally contain
* standalone makefile code
* make targets and rules
The makefile fragment must document (ie list at the very least) very
clear which variables are used by the makefile fragment.
Normally, the variables are either
* $($(GNUSTEP_INSTANCE)_XXX) variables, such as
$($(GNUSTEP_INSTANCE)_HEADERS) for a makefile fragment installing headers.
Because GNUSTEP_INSTANCE is guaranteed to be the name of the instance we
process during an instance invocation, this will extract xxx_HEADERS
regardless of the type of project. Most variables should be of this type.
* GNUSTEP_SHARED_XXX_YYY, where XXX should be the makefile fragment name
(such as 'HEADERS', or 'JAVA'), and YYY is the variable specific name.
These variables are to be thought as arguments being passed from the
project makefile to the shared makefile fragment.
For example, GNUSTEP_SHARED_JAVA_INSTALLATION_DIR will be set to
JAVA_INSTALLATION_DIR by Instance/java.make and to
JAVA_TOOL_INSTALLATION_DIR/Java by Instance/java-tool.make, before including
Shared/java.make. Shared/java.make will install the java files into
GNUSTEP_SHARED_JAVA_INSTALLATION_DIR, which will point to the correct
location in both cases.
Please note that in this case you can't use $($(GNUSTEP_INSTANCE)_XXX)
variables because the end-user API explicitly allow them to set a single
JAVA_[TOOL_]INSTALLATION_DIR for the whole GNUmakefile.
The make fragments rules should be named as follows -
shared-instance-xxx-yyy where xxx is the name of the makefile fragment
(such as 'java' or 'headers'), and yyy is the actual target (such as
'clean', 'install', 'all'). If possible, the standard targets should
be provided (all, install, uninstall, clean, distclean). In certain cases,
additional targets might be provided, or empty standard targets omitted.
It should be clear which ones are 'public' targets, and which ones are
'private' targets (internal to the implementation of the makefile fragment).
The make fragments do not need to be protected against multiple inclusions.

View file

@ -1,423 +0,0 @@
# -*-makefile-*-
# Shared/bundle.make
#
# Makefile fragment with rules to copy resource files
# into a local bundle
#
# Copyright (C) 2002 Free Software Foundation, Inc.
#
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# input variables:
#
#
# GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH : this is used when copying
# resource files into the bundle. It's the path to the local resource
# bundle where all resources will be put (this might be a subdirectory
# of the actual bundle directory). This path must include
# GNUSTEP_BUILD_DIR. Resource files will be copied into this path.
# For example, for a normal bundle it would be
# $(BUNDLE_DIR)/Resources; for an application it would be
# $(APP_DIR)/Resources; for a library or a tool,
# $(GNUSTEP_BUILD_DIR)/Resources/$(GNUSTEP_INSTANCE). This variable
# is used during build, to copy the resources in place.
#
# GNUSTEP_BUILD_DIR : Implicitly used to find the bundle.
#
# GNUSTEP_SHARED_BUNDLE_INSTALL_NAME : this is used when installing.
# It's the name of the directory that is installed. For example, for
# a normal bundle it would be $(BUNDLE_DIR_NAME); for an application
# it would be $(APP_DIR_NAME); for a tool $(GNUSTEP_INSTANCE); for a
# library, $(INTERFACE_VERSION).
#
# GNUSTEP_SHARED_BUNDLE_INSTALL_LOCAL_PATH : this is used when
# installing. It's the path to the directory that contains
# GNUSTEP_SHARED_BUNDLE_INSTALL_NAME, but relative to
# GNUSTEP_BUILD_DIR. For example, for a normal bundle or an
# application this is simply ./; for a tool this is ./Resources; for a
# library this is ./Resources/$(GNUSTEP_INSTANCE). This is relative
# to GNUSTEP_BUILD_DIR so that it can be used by COPY_INTO_DIR as
# well. When we are asked to COPY_INTO_DIR (instead of the standard
# installation) then we copy the stuff from
# GNUSTEP_BUILD_DIR/GNUSTEP_SHARED_BUNDLE_INSTALL_LOCAL_PATH into
# COPY_INTO_DIR/GNUSTEP_SHARED_BUNDLE_INSTALL_LOCAL_PATH. This works
# well for tool resources, for example, so that when you copy a tool
# with resources into a framework, the tool resources and the tool
# executable remain in the same relative relationship and tool
# resources can be found.
#
# GNUSTEP_SHARED_BUNDLE_INSTALL_PATH : this is used when installing.
# It's the path where we install the bundle; that is, we will take
# GNUSTEP_SHARED_BUNDLE_INSTALL_NAME from
# GNUSTEP_SHARED_BUNDLE_INSTALL_LOCAL_PATH and install it into
# GNUSTEP_SHARED_BUNDLE_INSTALL_PATH. For example, for a normal
# bundle it would be $(BUNDLE_INSTALL_DIR); for an application it
# would be $(APP_INSTALL_DIR); for a tool, $(GNUSTEP_TOOL_RESOURCES);
# for a library $(GNUSTEP_RESOURCES)/$(GNUSTEP_INSTANCE).
#
# Please note that the main constraint when installing is that your
# local bundle should have the same name that it has when installed.
# Paths can be changed arbitrarily though.
#
# $(GNUSTEP_INSTANCE)_RESOURCE_FILES : a list of resource files to install.
# They are recursively copied (/symlinked), so it might also include dirs.
#
# $(GNUSTEP_INSTANCE)_RESOURCE_DIRS : a list of additional resource dirs
# to create.
#
# $(GNUSTEP_INSTANCE)_LANGUAGES : the list of languages of localized resource
# files
#
# $(GNUSTEP_INSTANCE)_LOCALIZED_RESOURCE_FILES : a list of localized
# resource files to install.
#
# $(GNUSTEP_INSTANCE)_LOCALIZED_RESOURCE_DIRS : a list of additional localized
# resource dirs to create.
#
# $(GNUSTEP_INSTANCE)_COMPONENTS : a list of directories which are
# recursively copied (/locally symlinked if symlinks are available)
# into the resource bundle. Basically, they are currently added to
# $(GNUSTEP_INSTANCE)_RESOURCE_FILES.
#
# $(GNUSTEP_INSTANCE)_LOCALIZED_COMPONENTS : a list of localized
# directories which are recursively copied (/locally symlinked if
# symlinks are available) into the resource bundle. Currently, they
# are simply added to $(GNUSTEP_INSTANCE)_LOCALIZED_RESOURCE_FILES.
#
# $(GNUSTEP_INSTANCE)_SUBPROJECTS : the list of subprojects is used
# because the resources from each subproject are merged into the bundle
# resources (by recursively copying from LLL/Resources/Subproject into
# the GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH, where $(LLL) is the
# subproject name.
#
# GNUSTEP_TYPE : used when printing the message 'Copying resources into
# the $(GNUSTEP_TYPE) wrapper...'
#
# GSWeb related variables -
#
# $(GNUSTEP_INSTANCE)_WEBSERVER_RESOURCE_FILES : a list of resource files to
# copy from the WebServerResources directory into the WebServer
# subdirectory of the resource bundle
#
# $(GNUSTEP_INSTANCE)_WEBSERVER_LOCALIZED_RESOURCE_FILES : a list of
# localized resource files to copy from the yyy.lproj subdir of the
# WebServerResources directory into the yyy.lproj subdir of the
# WebServer subdirectory of the resource bundle - this for each
# language yyy.
#
# $(GNUSTEP_INSTANCE)_WEBSERVER_COMPONENTS:
# $(GNUSTEP_INSTANCE)_WEBSERVER_LOCALIZED_COMPONENTS:
# $(GNUSTEP_INSTANCE)_WEBSERVER_RESOURCE_DIRS:
# $(GNUSTEP_INSTANCE)_WEBSERVER_LOCALIZED_RESOURCE_DIRS:
#
#
# public targets:
#
# shared-instance-bundle-all
#
# $(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH): Creates the bundle
# resource path (invoked automatically)
#
# shared-instance-bundle-install
# shared-instance-bundle-uninstall
# shared-instance-bundle-copy_into_dir
#
#
# Warning - the bundle install rules depend on the rule to create
# $(GNUSTEP_SHARED_BUNDLE_INSTALL_PATH) - the rule to build it has to be
# provided by the caller {we can't provide two rules to build the same
# target; the caller might need to provide the rule for cases when we
# are not included, so we let the caller always provide it}
#
RESOURCE_FILES = $(strip $($(GNUSTEP_INSTANCE)_RESOURCE_FILES) \
$($(GNUSTEP_INSTANCE)_COMPONENTS))
RESOURCE_DIRS = $(strip $($(GNUSTEP_INSTANCE)_RESOURCE_DIRS))
LANGUAGES = $(strip $($(GNUSTEP_INSTANCE)_LANGUAGES))
LOCALIZED_RESOURCE_FILES = \
$(strip $($(GNUSTEP_INSTANCE)_LOCALIZED_RESOURCE_FILES) \
$($(GNUSTEP_INSTANCE)_LOCALIZED_COMPONENTS))
LOCALIZED_RESOURCE_DIRS = \
$(strip $($(GNUSTEP_INSTANCE)_LOCALIZED_RESOURCE_DIRS))
# NB: Use _SUBPROJECTS, not SUBPROJECTS here as that might conflict
# with what is used in aggregate.make.
_SUBPROJECTS = $(strip $($(GNUSTEP_INSTANCE)_SUBPROJECTS))
.PHONY: \
shared-instance-bundle-all \
shared-instance-bundle-all-resources \
shared-instance-bundle-all-gsweb \
shared-instance-bundle-install \
shared-instance-bundle-uninstall \
shared-instance-bundle-copy_into_dir
ifneq ($(RESOURCE_DIRS),)
FULL_RESOURCE_DIRS = \
$(foreach d, $(RESOURCE_DIRS), $(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/$(d))
endif
ifeq ($(LANGUAGES),)
LANGUAGES = English
endif
$(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH):
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
$(FULL_RESOURCE_DIRS):
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
#
# We provide two different ways of building bundles, suited to
# different usages - normal user and developer.
#
# `Normal user` builds the bundle once. We optimize for single-build
# in this case.
#
# `Developer` builds and rebuilds the bundle a lot of times with minor
# changes each time. We optimize for efficient rebuilding in this
# case.
#
# The default behaviour is 'Normal user'. To switch to 'Developer'
# mode, set GNUSTEP_DEVELOPER=YES in the environment.
#
# TODO - implement the `Developer` mode :-)
#
# Please note the trick when copying subproject resources - if there
# is nothing inside $$subproject/Resources/Subproject/, in
# $$subproject/Resources/Subproject/* the * expands to itself. So we
# check if that is true before trying to copy.
# Please note that if xxx/yyy is specified in RESOURCE_FILES, we
# create the file {bundle}/yyy (not {bundle}/xxx/yyy), because people
# usually can put resource files in subdirs, and want to copy them
# just top-level. That is what currently happens, but often enough
# you might want the other behaviour ({bundle}/xxx/yyy to be created),
# and TODO: devise a way to support it.
#
# If instead xxx/yyy is specified in LOCALIZED_RESOURCE_FILES, we
# create the file {bundle}/Language.lproj/xxx/yyy, because we want to
# mirror the Language.lproj directory faithfully. There is no
# possible confusion here.
#
# Important: we pass the '-f' argument to 'cp' to make sure that you
# can write and overwrite RESOURCE_FILES which are -r--r--r--.
#
shared-instance-bundle-all: $(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH) \
$(FULL_RESOURCE_DIRS) \
shared-instance-bundle-all-gsweb
ifneq ($(RESOURCE_FILES),)
$(ECHO_COPYING_RESOURCES)for f in $(RESOURCE_FILES); do \
if [ -f $$f -o -d $$f ]; then \
cp -fr $$f $(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/; \
else \
echo "Warning: $$f not found - ignoring"; \
fi; \
done$(END_ECHO)
endif
ifneq ($(LOCALIZED_RESOURCE_DIRS),)
$(ECHO_CREATING_LOC_RESOURCE_DIRS)for l in $(LANGUAGES); do \
if [ -d $$l.lproj ]; then \
$(MKDIRS) $(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/$$l.lproj; \
for f in $(LOCALIZED_RESOURCE_DIRS); do \
$(MKDIRS) $(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/$$l.lproj/$$f; \
done; \
else \
echo "Warning: $$l.lproj not found - ignoring"; \
fi; \
done$(END_ECHO)
endif
ifneq ($(LOCALIZED_RESOURCE_FILES),)
$(ECHO_COPYING_LOC_RESOURCES)for l in $(LANGUAGES); do \
if [ -d $$l.lproj ]; then \
$(MKDIRS) $(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/$$l.lproj; \
for f in $(LOCALIZED_RESOURCE_FILES); do \
if [ -f $$l.lproj/$$f -o -d $$l.lproj/$$f ]; then \
cp -fr $$l.lproj/$$f \
$(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/$$l.lproj/; \
else \
echo "Warning: $$l.lproj/$$f not found - ignoring"; \
fi; \
done; \
else \
echo "Warning: $$l.lproj not found - ignoring"; \
fi; \
done$(END_ECHO)
endif
ifneq ($(_SUBPROJECTS),)
$(ECHO_COPYING_RESOURCES_FROM_SUBPROJS)for subproject in $(_SUBPROJECTS); do \
if [ -d $$subproject/Resources/Subproject ]; then \
for f in $$subproject/Resources/Subproject/*; do \
if [ $$f != $$subproject'/Resources/Subproject/*' ]; then \
cp -fr $$f $(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/; \
fi; \
done; \
fi; \
done$(END_ECHO)
endif
##
##
## GSWeb code
## A main issue here is - executing *nothing* if gsweb is not used :-)
##
##
WEBSERVER_RESOURCE_FILES = \
$(strip $($(GNUSTEP_INSTANCE)_WEBSERVER_RESOURCE_FILES) \
$($(GNUSTEP_INSTANCE)_WEBSERVER_COMPONENTS))
# For historical reasons, we recognized the old variant
# xxx_LOCALIZED_WEBSERVER_RESOURCE_FILES - but we recommend to use
# xxx_WEBSERVER_LOCALIZED_RESOURCE_FILES instead.
WEBSERVER_LOCALIZED_RESOURCE_FILES = \
$(strip $($(GNUSTEP_INSTANCE)_LOCALIZED_WEBSERVER_RESOURCE_FILES) \
$($(GNUSTEP_INSTANCE)_WEBSERVER_LOCALIZED_RESOURCE_FILES) \
$($(GNUSTEP_INSTANCE)_WEBSERVER_LOCALIZED_COMPONENTS))
WEBSERVER_RESOURCE_DIRS = \
$(strip $($(GNUSTEP_INSTANCE)_WEBSERVER_RESOURCE_DIRS))
WEBSERVER_LOCALIZED_RESOURCE_DIRS = \
$(strip $($(GNUSTEP_INSTANCE)_WEBSERVER_LOCALIZED_RESOURCE_DIRS))
ifneq ($(WEBSERVER_RESOURCE_DIRS),)
WEBSERVER_FULL_RESOURCE_DIRS = \
$(foreach d, $(WEBSERVER_RESOURCE_DIRS), $(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/WebServer/$(d))
$(WEBSERVER_FULL_RESOURCE_DIRS):
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
endif
.PHONY: shared-instance-bundle-all-webresources \
shared-instance-bundle-all-localized-webresources
shared-instance-bundle-all-gsweb: shared-instance-bundle-all-webresources \
shared-instance-bundle-all-localized-webresources
ifneq ($(WEBSERVER_RESOURCE_FILES),)
$(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/WebServer:
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
shared-instance-bundle-all-webresources: \
$(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/WebServer \
$(WEBSERVER_FULL_RESOURCE_DIRS)
$(ECHO_COPYING_WEBSERVER_RESOURCES)for f in $(WEBSERVER_RESOURCE_FILES); do \
if [ -f ./WebServerResources/$$f \
-o -d ./WebServerResources/$$f ]; then \
cp -fr ./WebServerResources/$$f \
$(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/WebServer/$$f; \
else \
echo "Warning: WebServerResources/$$f not found - ignoring"; \
fi; \
done$(END_ECHO)
else
shared-instance-bundle-all-webresources:
endif
ifneq ($(WEBSERVER_LOCALIZED_RESOURCE_FILES)$(WEBSERVER_LOCALIZED_RESOURCE_DIRS),)
shared-instance-bundle-all-localized-webresources: \
$(WEBSERVER_FULL_RESOURCE_DIRS)
ifneq ($(WEBSERVER_LOCALIZED_RESOURCE_DIRS),)
$(ECHO_CREATING_WEBSERVER_LOC_RESOURCE_DIRS)for l in $(LANGUAGES); do \
if [ -d ./WebServerResources/$$l.lproj ]; then \
$(MKDIRS) \
$(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/WebServer/$$l.lproj; \
for f in $(WEBSERVER_LOCALIZED_RESOURCE_DIRS); do \
$(MKDIRS) \
$(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/WebServer/$$l.lproj/$$f; \
done; \
else \
echo "Warning: WebServer/$$l.lproj not found - ignoring"; \
fi; \
done$(END_ECHO)
endif
ifneq ($(WEBSERVER_LOCALIZED_RESOURCE_FILES),)
$(ECHO_COPYING_WEBSERVER_LOC_RESOURCES)for l in $(LANGUAGES); do \
if [ -d ./WebServerResources/$$l.lproj ]; then \
$(MKDIRS) \
$(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/WebServer/$$l.lproj;\
for f in $(WEBSERVER_LOCALIZED_RESOURCE_FILES); do \
if [ -f ./WebServerResources/$$l.lproj/$$f \
-o -d ./WebServerResources/$$l.lproj/$$f ]; then \
cp -fr ./WebServerResources/$$l.lproj/$$f \
$(GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH)/WebServer/$$l.lproj/$$f; \
else \
echo "Warning: WebServerResources/$$l.lproj/$$f not found - ignoring"; \
fi; \
done; \
else \
echo "Warning: WebServerResources/$$l.lproj not found - ignoring"; \
fi; \
done$(END_ECHO)
endif
else
shared-instance-bundle-all-localized-webresources:
endif
# In the following rule, tar has the 'h' option, which dereferences
# symbolic links. The idea is that you could specify symbolic links
# to some templates as some of the resource files; then building the
# bundle is quick, because you only copy the symlinks - not the actual
# files; and the symlinks are dereferenced when the bundle is
# installed (which is why the 'h' option is there). I've never used
# this feature, but it was requested by some of our users.
#
# Another common request is to ignore/drop CVS and .svn
# directories/files from the bundle when installing. You don't really
# want to install those in case they ended up in the bundle when you
# recursively copied some resources in it from your source code.
# This is obtained by using the 'X' flag.
#
# Because of compatibility issues with older versions of GNU tar (not
# to speak of non-GNU tars), we use the X option rather than the
# --exclude= option. The X option requires as argument a file listing
# files to exclude. We use a standard exclude file list which we store
# in GNUSTEP_MAKEFILES.
#
shared-instance-bundle-install:: $(GNUSTEP_SHARED_BUNDLE_INSTALL_PATH)
$(ECHO_INSTALLING_BUNDLE)rm -rf $(GNUSTEP_SHARED_BUNDLE_INSTALL_PATH)/$(GNUSTEP_SHARED_BUNDLE_INSTALL_NAME); \
(cd $(GNUSTEP_BUILD_DIR)/$(GNUSTEP_SHARED_BUNDLE_INSTALL_LOCAL_PATH); \
$(TAR) chfX - $(GNUSTEP_MAKEFILES)/tar-exclude-list $(GNUSTEP_SHARED_BUNDLE_INSTALL_NAME)) \
| (cd $(GNUSTEP_SHARED_BUNDLE_INSTALL_PATH); $(TAR) xf -)$(END_ECHO)
ifneq ($(CHOWN_TO),)
$(ECHO_CHOWNING)$(CHOWN) -R $(CHOWN_TO) \
$(GNUSTEP_SHARED_BUNDLE_INSTALL_PATH)/$(GNUSTEP_SHARED_BUNDLE_INSTALL_NAME)$(END_ECHO)
endif
shared-instance-bundle-copy_into_dir::
$(ECHO_COPYING_BUNDLE_INTO_DIR)rm -rf $(COPY_INTO_DIR)/$(GNUSTEP_SHARED_BUNDLE_INSTALL_LOCAL_PATH)/$(GNUSTEP_SHARED_BUNDLE_INSTALL_NAME); \
(cd $(GNUSTEP_BUILD_DIR); \
$(TAR) chfX - $(GNUSTEP_MAKEFILES)/tar-exclude-list $(GNUSTEP_SHARED_BUNDLE_INSTALL_LOCAL_PATH)/$(GNUSTEP_SHARED_BUNDLE_INSTALL_NAME)) \
| (cd $(COPY_INTO_DIR); $(TAR) xf -)$(END_ECHO)
shared-instance-bundle-uninstall::
$(ECHO_NOTHING)cd $(GNUSTEP_SHARED_BUNDLE_INSTALL_PATH); rm -rf $(GNUSTEP_SHARED_BUNDLE_INSTALL_NAME)$(END_ECHO)

View file

@ -1,133 +0,0 @@
#
# Shared/headers.make
#
# Makefile fragment with rules to install header files
#
# Copyright (C) 2002 Free Software Foundation, Inc.
#
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# input variables:
#
# $(GNUSTEP_INSTANCE)_HEADER_FILES : the list of .h files to install
#
# $(GNUSTEP_INSTANCE)_HEADER_FILES_DIR : the dir in which the .h files are;
# defaults to `.' if no set.
#
# $(GNUSTEP_INSTANCE)_HEADER_FILES_INSTALL_DIR : the dir in which to install
# the .h files; defaults to $(GNUSTEP_INSTANCE) if not set. Please set it
# to `.' if you want it to be like empty.
#
#
# public targets:
#
# shared-instance-headers-install
# shared-instance-headers-uninstall
#
HEADER_FILES = $($(GNUSTEP_INSTANCE)_HEADER_FILES)
.PHONY: \
shared-instance-headers-install \
shared-instance-headers-uninstall
# We always compute HEADER_FILES_DIR and HEADER_FILES_INSTALL_DIR.
# The reason is that frameworks might have headers in subprojects (and
# not in the top framework makefile!). Those headers are
# automatically used and installed, but in the top-level makefile,
# HEADER_FILES = '', still you might want to have a special
# HEADER_FILES_DIR and HEADER_FILES_INSTALL_DIR even in this case.
# NB: Header installation for frameworks is done by the framework
# code.
HEADER_FILES_DIR = $($(GNUSTEP_INSTANCE)_HEADER_FILES_DIR)
ifeq ($(HEADER_FILES_DIR),)
HEADER_FILES_DIR = .
endif
HEADER_FILES_INSTALL_DIR = $($(GNUSTEP_INSTANCE)_HEADER_FILES_INSTALL_DIR)
# Please use `.' to force it to stay empty
ifeq ($(HEADER_FILES_INSTALL_DIR),)
HEADER_FILES_INSTALL_DIR = $(GNUSTEP_INSTANCE)
endif
ifeq ($(HEADER_FILES),)
shared-instance-headers-install:
shared-instance-headers-uninstall:
else # we have some HEADER_FILES
#
# We provide two different algorithms of installing headers.
#
ifeq ($(GNUSTEP_DEVELOPER),)
#
# The first one is the standard one. We run a subshell, loop on all the
# header files, and install all of them. This is the default one.
#
shared-instance-headers-install: $(GNUSTEP_HEADERS)/$(HEADER_FILES_INSTALL_DIR)
$(ECHO_INSTALLING_HEADERS)for file in $(HEADER_FILES) __done; do \
if [ $$file != __done ]; then \
$(INSTALL_DATA) $(HEADER_FILES_DIR)/$$file \
$(GNUSTEP_HEADERS)/$(HEADER_FILES_INSTALL_DIR)/$$file; \
fi; \
done$(END_ECHO)
else
#
# The second one (which you activate by setting GNUSTEP_DEVELOPER to
# YES in your shell) is the one specifically optimized for faster
# development. We only install headers which are newer than the
# installed version. This is much faster if you are developing and
# need to install headers often, and normally with just few changes.
# It is slower the first time you install the headers, because we
# install them using a lot of subshell processes (which is why it is not
# the default - `users' install headers only once - the default
# setup is for users).
#
shared-instance-headers-install: \
$(GNUSTEP_HEADERS)/$(HEADER_FILES_INSTALL_DIR) \
$(addprefix $(GNUSTEP_HEADERS)/$(HEADER_FILES_INSTALL_DIR)/,$(HEADER_FILES))
$(GNUSTEP_HEADERS)/$(HEADER_FILES_INSTALL_DIR)/% : $(HEADER_FILES_DIR)/%
$(ECHO_NOTHING)$(INSTALL_DATA) $< $@$(END_ECHO)
endif
$(GNUSTEP_HEADERS)/$(HEADER_FILES_INSTALL_DIR):
$(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
shared-instance-headers-uninstall:
$(ECHO_NOTHING)for file in $(HEADER_FILES) __done; do \
if [ $$file != __done ]; then \
rm -rf $(GNUSTEP_HEADERS)/$(HEADER_FILES_INSTALL_DIR)/$$file ; \
fi; \
done$(END_ECHO)
# TODO - during uninstall, it would be pretty to remove
# $(GNUSTEP_HEADERS)/$(HEADER_FILES_INSTALL_DIR) if it's empty.
endif # HEADER_FILES = ''

View file

@ -1,140 +0,0 @@
#
# Shared/java.make
#
# Makefile fragment with rules to compile and install java files,
# with associated property files.
#
# Copyright (C) 2000, 2002 Free Software Foundation, Inc.
#
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# input variables:
#
# JAVA_OBJ_FILES, JAVA_JNI_OBJ_FILES, SUBPROJECT_OBJ_FILES :
# the list of object files (built by Instance/rules.make)
#
# $(GNUSTEP_INSTANCE)_JAVA_PROPERTIES_FILES : the list of .properties files
# to install together with the .java files
#
# GNUSTEP_SHARED_JAVA_INSTALLATION_DIR : the base directory where to
# install the files.
#
#
# public targets:
#
# shared-instance-java-all
# shared-instance-java-install
# shared-instance-java-uninstall
# shared-instance-java-clean
#
.PHONY: \
shared-instance-java-all \
shared-instance-java-install \
shared-instance-java-install-dirs \
shared-instance-java-uninstall \
shared-instance-java-clean
shared-instance-java-all: $(JAVA_OBJ_FILES) \
$(JAVA_JNI_OBJ_FILES) \
$(SUBPROJECT_OBJ_FILES)
# Say that you have a Pisa.java source file. Here we install both
# Pisa.class (the main class) and also, if they exist, all class files
# with names beginning wih Pisa$ (such as Pisa$1$Nicola.class); these
# files are generated for nested/inner classes, and must be installed
# as well. The fact we need to install these files is the reason why
# the following is more complicated than you would think at first
# glance.
# Build efficiently the list of possible inner/nested classes
# We first build a list like in `Pisa[$]*.class Roma[$]*.class' by
# taking the JAVA_OBJ_FILES and replacing .class with [$]*.class, then
# we use wildcard to get the list of all files matching the pattern
UNESCAPED_ADD_JAVA_OBJ_FILES = $(wildcard $(JAVA_OBJ_FILES:.class=[$$]*.class))
# Finally we need to escape the $s before passing the filenames to the
# shell
ADDITIONAL_JAVA_OBJ_FILES = $(subst $$,\$$,$(UNESCAPED_ADD_JAVA_OBJ_FILES))
JAVA_PROPERTIES_FILES = $($(GNUSTEP_INSTANCE)_JAVA_PROPERTIES_FILES)
shared-instance-java-install: shared-instance-java-install-dirs
ifneq ($(JAVA_OBJ_FILES),)
$(ECHO_INSTALLING_CLASS_FILES)for file in $(JAVA_OBJ_FILES) __done; do \
if [ $$file != __done ]; then \
$(INSTALL_DATA) $$file \
$(GNUSTEP_SHARED_JAVA_INSTALLATION_DIR)/$$file ; \
fi; \
done$(END_ECHO)
endif
ifneq ($(ADDITIONAL_JAVA_OBJ_FILES),)
$(ECHO_INSTALLING_ADD_CLASS_FILES)for file in $(ADDITIONAL_JAVA_OBJ_FILES) __done; do \
if [ $$file != __done ]; then \
$(INSTALL_DATA) $$file \
$(GNUSTEP_SHARED_JAVA_INSTALLATION_DIR)/$$file ; \
fi; \
done$(END_ECHO)
endif
ifneq ($(JAVA_PROPERTIES_FILES),)
$(ECHO_INSTALLING_PROPERTIES_FILES)for file in $(JAVA_PROPERTIES_FILES) __done; do \
if [ $$file != __done ]; then \
$(INSTALL_DATA) $$file \
$(GNUSTEP_SHARED_JAVA_INSTALLATION_DIR)/$$file ; \
fi; \
done$(END_ECHO)
endif
shared-instance-java-install-dirs: $(GNUSTEP_SHARED_JAVA_INSTALLATION_DIR)
ifneq ($(JAVA_OBJ_FILES),)
$(ECHO_NOTHING)$(MKINSTALLDIRS) \
$(addprefix $(GNUSTEP_SHARED_JAVA_INSTALLATION_DIR)/,$(dir $(JAVA_OBJ_FILES)))$(END_ECHO)
endif
$(GNUSTEP_SHARED_JAVA_INSTALLATION_DIR):
$(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
shared-instance-java-clean:
$(ECHO_NOTHING)rm -f $(JAVA_OBJ_FILES) \
$(ADDITIONAL_JAVA_OBJ_FILES) \
$(JAVA_JNI_OBJ_FILES)$(END_ECHO)
shared-instance-java-uninstall:
ifneq ($(JAVA_OBJ_FILES),)
$(ECHO_NOTHING)for file in $(JAVA_OBJ_FILES) __done; do \
if [ $$file != __done ]; then \
rm -f $(GNUSTEP_SHARED_JAVA_INSTALLATION_DIR)/$$file ; \
fi; \
done$(END_ECHO)
endif
ifneq ($(ADDITIONAL_JAVA_OBJ_FILES),)
$(ECHO_NOTHING)for file in $(ADDITIONAL_JAVA_OBJ_FILES) __done; do \
if [ $$file != __done ]; then \
rm -f $(GNUSTEP_SHARED_JAVA_INSTALLATION_DIR)/$$file ; \
fi; \
done$(END_ECHO)
endif
ifneq ($(JAVA_PROPERTIES_FILES),)
$(ECHO_NOTHING)for file in $(JAVA_PROPERTIES_FILES) __done; do \
if [ $$file != __done ]; then \
rm -f $(GNUSTEP_SHARED_JAVA_INSTALLATION_DIR)/$$file ; \
fi; \
done$(END_ECHO)
endif

View file

@ -1,136 +0,0 @@
# -*-makefile-*-
# Shared/stamp-string.make
#
# Makefile fragment with rules to manage stamp strings
#
# Copyright (C) 2002 Free Software Foundation, Inc.
#
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# Normally, make computes dependencies basing on files' timestamps.
# You can have a target which depedends on some files. When the files
# have changed since the last time the target was built, the target
# is rebuilt.
#
# Inside gnustep-make, we have also a need for a different type of
# dependency. We create/patch some .plist files basing on the value
# of some make variables. In this case, we want some targets to
# depend on some make variables; when the variables have changed since
# the last time the target was built, the target is rebuilt.
#
# This file provides an efficient implementation of this feature. You
# can have a target be rebuilt when a certain GNUSTEP_STAMP_STRING has
# changed since the last time the target was built. By storing the
# values of some variables, in a fixed order, in the
# GNUSTEP_STAMP_STRING, you can then in practice have the result of
# having the target depend on the variable values.
#
#
# To use this file, define GNUSTEP_STAMP_STRING to be the string you
# want to depend upon. This file will store the string into a
# stamp.make; you need to provide the directory in which to store this
# file, and a rule to create the directory. In practice, you need to
# set GNUSTEP_STAMP_DIR and implement a $(GNUSTEP_STAMP_DIR): rule.
# Then, you can have a target to depend on $(GNUSTEP_STAMP_DEPEND).
# That will cause the target to store GNUSTEP_STAMP_STRING into
# $(GNUSTEP_STAMP_DIR)/stamp.make the first time it's executed, and to
# read it from the same file each time it's executed afterwards.
# Whenever the stamp string in stamp.make does not match the curret
# GNUSTEP_STAMP_STRING, the stamp file will be rebuilt, and the target
# depending on $(GNUSTEP_STAMP_DEPEND) will be forced to be rebuilt.
#
#
# Input variables:
#
# GNUSTEP_STAMP_STRING: This variable is the stamp; we check that it
# has not changed since last time the target was rebuilt. You must
# set this variable to the appropriate stamp string before including
# this file; usually the stamp string is just a concatenation of the
# values of the various variables (separated by some character you want,
# such as '-') you want to depend upon.
#
# GNUSTEP_STAMP_DIR: The directory in which you want the stamp file to
# be placed. Each time the target is rebuilt, GNUSTEP_STAMP_STRING is
# recorded into the stamp file so that next time it can be compared.
# Your code must provide a rule to build GNUSTEP_STAMP_DIR.
# Typically, GNUSTEP_STAMP_DIR is the bundle dir for a bundle, the
# application dir for an application, and so on.
#
#
# Output variables:
#
# GNUSTEP_STAMP_DEPEND: If the value of GNUSTEP_STAMP_STRING is the
# same as the value stored inside stamp.make, then this is set to ''.
# Else, this is set to shared-instance-stamp-string, and causes both
# GNUSTEP_STAMP_FILE to be regenerated, and any target depending on
# GNUSTEP_STAMP_DEPEND to be rebuilt as well.
#
#
# public targets:
#
# shared-instance-stamp-string: You do not refer this target directly;
# you should instead depend on $(GNUSTEP_STAMP_DEPEND), which will expand
# to shared-instance-stamp-string when a change in the stamp string is
# detected, and to '' when not.
#
# To read the stamp file very quickly, we use a trick: we write the
# file as a makefile fragment, and include it to read it.
# This can be considered a trick to read the file very efficiently
# without spanning a 'cat' subprocess in a subshell.
GNUSTEP_STAMP_FILE = $(GNUSTEP_STAMP_DIR)/stamp.make
# This rule tells make that GNUSTEP_STAMP_FILE is always up to date.
# Else, because it is included as a makefile, make would try
# rebuilding it, and moreover, after rebuilding it, it would run again
# using the new one! We instead manage rules manually to have control
# of it.
$(GNUSTEP_STAMP_FILE):
# By default, GNUSTEP_STAMP_DEPEND causes shared-instance-stamp-string to
# be executed, and everything depending on GNUSTEP_STAMP_DEPEND to be
# rebuilt.
GNUSTEP_STAMP_DEPEND = shared-instance-stamp-string
# We want to make sure the string put in the stamp.make is never empty.
# To make sure it is so, we add an '_' at the beginning of the string.
GNUSTEP_STAMP_ASTRING = _$(GNUSTEP_STAMP_STRING)
OLD_GNUSTEP_STAMP_ASTRING =
# Include the old stamp.make, but only if it exists.
# stamp.make contains the line
# OLD_GNUSTEP_STAMP_ASTRING = xxx
-include $(GNUSTEP_STAMP_FILE)
# If there was a stamp.make, and it contained the same
# GNUSTEP_STAMP_ASTRING, then we drop GNUSTEP_STAMP_DEPEND, and do
# nothing.
ifneq ($(OLD_GNUSTEP_STAMP_ASTRING),)
ifeq ($(OLD_GNUSTEP_STAMP_ASTRING), $(GNUSTEP_STAMP_ASTRING))
GNUSTEP_STAMP_DEPEND =
endif
endif
# The actual target building the stamp string.
.PHONY: shared-instance-stamp-string
shared-instance-stamp-string: $(GNUSTEP_STAMP_DIR)
$(ECHO_NOTHING)echo "OLD_GNUSTEP_STAMP_ASTRING = $(GNUSTEP_STAMP_ASTRING)" > $(GNUSTEP_STAMP_FILE)$(END_ECHO)

View file

@ -1,79 +0,0 @@
#
# Shared/strings.make
#
# Makefile fragment with rules to run make_strings
#
# Copyright (C) 2002 Free Software Foundation, Inc.
#
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# input variables:
#
# $(GNUSTEP_INSTANCE)_LANGUAGES: the list of languages
#
# $(GNUSTEP_INSTANCE)_STRINGS_FILES: the list of ObjC/C/.h files to
# parse; if not set, it defaults to $(GNUSTEP_INSTANCE)_OBJC_FILES and
# $(GNUSTEP_INSTANCE)_C_FILES and $(GNUSTEP_INSTANCE)_HEADER_FILES
# (header files interpreted as relative paths to HEADER_FILES_DIR).
#
# $(GNUSTEP_INSTANCE)_MAKE_STRINGS_OPTIONS: the make_strings special
# options; defaults to $(MAKE_STRINGS_OPTIONS) (which defaults to
# nothing :-) if not set.
#
# public targets:
#
# internal-$(GNUSTEP_TYPE)-strings
#
ifneq ($(strip $($(GNUSTEP_INSTANCE)_STRINGS_FILES)),)
Str_STRINGS_FILES = $($(GNUSTEP_INSTANCE)_STRINGS_FILES)
else
Str1_STRINGS_FILES = \
$($(GNUSTEP_INSTANCE)_OBJC_FILES) \
$($(GNUSTEP_INSTANCE)_C_FILES) \
$(addprefix $($(GNUSTEP_INSTANCE)_HEADER_FILES_DIR),$($(GNUSTEP_INSTANCE)_HEADER_FILES))
Str_STRINGS_FILES = $(strip $(Str1_STRINGS_FILES))
endif
.PHONY: internal-$(GNUSTEP_TYPE)-strings
ifeq ($(Str_STRINGS_FILES),)
internal-$(GNUSTEP_TYPE)-strings::
$(ALWAYS_ECHO_NO_FILES)
else # we have some STRINGS_FILES
Str_LANGUAGES = $(strip $($(GNUSTEP_INSTANCE)_LANGUAGES))
Str_MAKE_STRINGS_OPTIONS = $(strip $($(GNUSTEP_INSTANCE)_MAKE_STRINGS_OPTIONS))
ifeq ($(Str_MAKE_STRINGS_OPTIONS),)
Str_MAKE_STRINGS_OPTIONS = $(MAKE_STRINGS_OPTIONS)
endif
internal-$(GNUSTEP_TYPE)-strings::
ifeq ($(Str_LANGUAGES),)
$(ALWAYS_ECHO_NO_LANGUAGES)
else
$(ECHO_MAKING_STRINGS)make_strings $(Str_MAKE_STRINGS_OPTIONS) \
-L "$(Str_LANGUAGES)" \
$(Str_STRINGS_FILES)$(END_ECHO)
endif
endif # Str_STRING_FILES = ''

View file

@ -1,360 +0,0 @@
# -*-makefile-*-
# application.make
#
# Instance Makefile rules to build GNUstep-based applications.
#
# Copyright (C) 1997, 2001, 2002 Free Software Foundation, Inc.
#
# Author: Nicola Pero <nicola@brainstorm.co.uk>
# Author: Ovidiu Predescu <ovidiu@net-community.com>
# Based on the original version by Scott Christley.
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# Include in the common makefile rules
#
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
#
# The name of the application is in the APP_NAME variable.
# The list of application resource directories is in xxx_RESOURCE_DIRS
# The list of application resource files is in xxx_RESOURCE_FILES
# The list of localized resource files is in xxx_LOCALIZED_RESOURCE_FILES
# The list of supported languages is in xxx_LANGUAGES
# The name of the application icon (if any) is in xxx_APPLICATION_ICON
# The name of the app class is xxx_PRINCIPAL_CLASS (defaults to NSApplication).
# The name of a file containing info.plist entries to be inserted into
# Info-gnustep.plist (if any) is xxxInfo.plist
# where xxx is the application name
#
.PHONY: internal-app-all_ \
internal-app-install_ \
internal-app-uninstall_ \
internal-app-copy_into_dir \
internal-application-build-template
#
# Determine where to install. By default, install into GNUSTEP_APPS.
#
ifneq ($($(GNUSTEP_INSTANCE)_INSTALL_DIR),)
APP_INSTALL_DIR = $($(GNUSTEP_INSTANCE)_INSTALL_DIR)
endif
ifeq ($(APP_INSTALL_DIR),)
APP_INSTALL_DIR = $(GNUSTEP_APPS)
endif
ALL_GUI_LIBS = \
$(ALL_LIB_DIRS) \
$(ADDITIONAL_GUI_LIBS) $(AUXILIARY_GUI_LIBS) $(GUI_LIBS) \
$(BACKEND_LIBS) $(ADDITIONAL_TOOL_LIBS) $(AUXILIARY_TOOL_LIBS) \
$(FND_LIBS) $(ADDITIONAL_OBJC_LIBS) $(AUXILIARY_OBJC_LIBS) $(OBJC_LIBS) \
$(SYSTEM_LIBS) $(TARGET_SYSTEM_LIBS)
APP_DIR_NAME = $(GNUSTEP_INSTANCE:=.$(APP_EXTENSION))
APP_DIR = $(GNUSTEP_BUILD_DIR)/$(APP_DIR_NAME)
#
# Now include the standard resource-bundle routines from Shared/bundle.make
#
ifneq ($(FOUNDATION_LIB), apple)
# GNUstep bundle
GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH = $(APP_DIR)/Resources
APP_INFO_PLIST_FILE = $(APP_DIR)/Resources/Info-gnustep.plist
else
# OSX bundle
GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH = $(APP_DIR)/Contents/Resources
APP_INFO_PLIST_FILE = $(APP_DIR)/Contents/Info.plist
endif
GNUSTEP_SHARED_BUNDLE_INSTALL_NAME = $(APP_DIR_NAME)
GNUSTEP_SHARED_BUNDLE_INSTALL_LOCAL_PATH = .
GNUSTEP_SHARED_BUNDLE_INSTALL_PATH = $(APP_INSTALL_DIR)
include $(GNUSTEP_MAKEFILES)/Instance/Shared/bundle.make
ifneq ($(FOUNDATION_LIB), apple)
APP_FILE_NAME = $(APP_DIR_NAME)/$(GNUSTEP_TARGET_LDIR)/$(GNUSTEP_INSTANCE)$(EXEEXT)
else
APP_FILE_NAME = $(APP_DIR_NAME)/Contents/MacOS/$(GNUSTEP_INSTANCE)$(EXEEXT)
endif
APP_FILE = $(GNUSTEP_BUILD_DIR)/$(APP_FILE_NAME)
#
# Internal targets
#
# If building on Windows, also generate an import library which can be
# used by loadable bundles to resolve symbols in the application. If
# a loadable bundle/palette needs to use symbols in the application,
# it just needs to link against this APP_NAME/APP_NAME.exe.a library.
# We add .exe to the application name to account for Gorm which is
# using the same name for the library (libGorm.dll.a) and for the
# application (Gorm.exe). Using this terminology, just add
# Gorm.app/Gorm.exe.a to the list of objects you link and you get it
# working. TODO: Move this into target.make
ifeq ($(BUILD_DLL), yes)
ALL_LDFLAGS += -Wl,--export-all-symbols -Wl,--out-implib,$(GNUSTEP_BUILD_DIR)/$(APP_DIR_NAME)/$(GNUSTEP_TARGET_LDIR)/$(GNUSTEP_INSTANCE).exe$(LIBEXT)
endif
# If building on MinGW, also mark the application as a 'GUI'
# application. This prevents an ugly terminal window from being
# automatically opened when you start your application directly by
# double-clicking on the .exe icon in the Windows file manager. TODO:
# Move this into target.make, but somehow make sure it is only used
# when linking applications.
ifeq ($(findstring mingw32, $(GNUSTEP_TARGET_OS)), mingw32)
ALL_LDFLAGS += -mwindows
endif
$(APP_FILE): $(OBJ_FILES_TO_LINK)
$(ECHO_LINKING)$(LD) $(ALL_LDFLAGS) $(CC_LDFLAGS) -o $(LDOUT)$@ \
$(OBJ_FILES_TO_LINK) $(ALL_GUI_LIBS)$(END_ECHO)
#
# Compilation targets
#
ifeq ($(FOUNDATION_LIB), apple)
internal-app-all_:: $(GNUSTEP_OBJ_DIR) \
$(APP_DIR)/Contents/MacOS \
$(APP_FILE) \
shared-instance-bundle-all \
$(APP_INFO_PLIST_FILE)
$(APP_DIR)/Contents/MacOS:
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
else
internal-app-all_:: $(GNUSTEP_OBJ_DIR) \
$(APP_DIR)/$(GNUSTEP_TARGET_LDIR) \
$(APP_FILE) \
internal-application-build-template \
$(APP_DIR)/Resources \
$(APP_INFO_PLIST_FILE) \
$(APP_DIR)/Resources/$(GNUSTEP_INSTANCE).desktop \
shared-instance-bundle-all
$(APP_DIR)/$(GNUSTEP_TARGET_LDIR):
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
ifeq ($(GNUSTEP_IS_FLATTENED), no)
internal-application-build-template: $(APP_DIR)/$(GNUSTEP_INSTANCE)
$(APP_DIR)/$(GNUSTEP_INSTANCE):
$(ECHO_NOTHING)cp $(GNUSTEP_MAKEFILES)/executable.template \
$(APP_DIR)/$(GNUSTEP_INSTANCE); \
chmod a+x $(APP_DIR)/$(GNUSTEP_INSTANCE)$(END_ECHO)
ifneq ($(CHOWN_TO),)
$(ECHO_CHOWNING)$(CHOWN) $(CHOWN_TO) $(APP_DIR)/$(GNUSTEP_INSTANCE)$(END_ECHO)
endif
else
internal-application-build-template:
endif
endif
PRINCIPAL_CLASS = $(strip $($(GNUSTEP_INSTANCE)_PRINCIPAL_CLASS))
ifeq ($(PRINCIPAL_CLASS),)
PRINCIPAL_CLASS = NSApplication
endif
APPLICATION_ICON = $($(GNUSTEP_INSTANCE)_APPLICATION_ICON)
MAIN_MODEL_FILE = $(strip $(subst .gmodel,,$(subst .gorm,,$(subst .nib,,$($(GNUSTEP_INSTANCE)_MAIN_MODEL_FILE)))))
MAIN_MARKUP_FILE = $(strip $(subst .gsmarkup,,$($(GNUSTEP_INSTANCE)_MAIN_MARKUP_FILE)))
# We must recreate Info.plist if PRINCIPAL_CLASS and/or
# APPLICATION_ICON and/or MAIN_MODEL_FILE and/or MAIN_MARKUP_FILE has
# changed since last time we built Info.plist. We use
# stamp-string.make, which will store the variables in a stamp file
# inside GNUSTEP_STAMP_DIR, and rebuild Info.plist if
# GNUSTEP_STAMP_STRING changes. We will also depend on xxxInfo.plist
# if any.
GNUSTEP_STAMP_STRING = $(PRINCIPAL_CLASS)-$(APPLICATION_ICON)-$(MAIN_MODEL_FILE)-$(MAIN_MARKUP_FILE)
ifneq ($(FOUNDATION_LIB),apple)
GNUSTEP_STAMP_DIR = $(APP_DIR)
# Only for efficiency
$(GNUSTEP_STAMP_DIR): $(APP_DIR)/$(GNUSTEP_TARGET_LDIR)
else
# Everything goes in $(APP_DIR)/Contents on Apple
GNUSTEP_STAMP_DIR = $(APP_DIR)/Contents
endif
include $(GNUSTEP_MAKEFILES)/Instance/Shared/stamp-string.make
# You can have a single xxxInfo.plist for both GNUstep and Apple.
# Often enough, you can just put in it all fields required by both
# GNUstep and Apple; if there is a conflict, you can provide
# axxxInfo.cplist (please note the suffix!) - that file is
# automatically run through the C preprocessor to generate a
# xxxInfo.plist file from it. The preprocessor will define GNUSTEP
# when using gnustep-base, APPLE when using Apple FoundationKit, NEXT
# when using NeXT/OPENStep FoundationKit, and UNKNOWN when using
# something else, so you can use
# #ifdef GNUSTEP
# ... some plist code for GNUstep ...
# #else
# ... some plist code for Apple ...
# #endif
# to have your .cplist use different code for each.
#
# Our problem is that we'd like to always depend on xxxInfo.plist if
# it's there, and not depend on it if it's not there - which we solve
# by expanding $(wildcard $(GNUSTEP_INSTANCE)Info.plist)
GNUSTEP_PLIST_DEPEND = $(wildcard $(GNUSTEP_INSTANCE)Info.plist)
# As a special case, if xxxInfo.cplist is there, in this case as well
# we'd like to depend on xxxInfo.plist.
ifeq ($(GNUSTEP_PLIST_DEPEND),)
# xxxInfo.plist is not there. Check if xxxInfo.cplist is there, and
# if so, convert it to xxxInfo.plist and add it to the dependencies.
GNUSTEP_PLIST_DEPEND = $(patsubst %.cplist,%.plist,$(wildcard $(GNUSTEP_INSTANCE)Info.cplist))
endif
# On Apple we assume that xxxInfo.plist has a '{' (and nothing else)
# on the first line, and the rest of the file is a plain property list
# dictionary. You must make sure your xxxInfo.plist is in this format
# to use it on Apple.
# The problem is, we need to add the automatically generated entries
# to this custom dictionary on Apple - to do that, we generate '{'
# followed by the custom entries, followed by xxxInfo.plist (with the
# first line removed), or by '}'. NB: "sed '1d' filename" prints out
# filename, except the first line.
# On GNUstep we use plmerge which is much slower, but should probably
# be safer, because as soon as xxxInfo.plist is in plist format, it
# should always work (even if the first line is not just a '{' and
# nothing else).
ifeq ($(FOUNDATION_LIB), apple)
$(APP_INFO_PLIST_FILE): $(GNUSTEP_STAMP_DEPEND) $(GNUSTEP_PLIST_DEPEND)
$(ECHO_CREATING)(echo "{"; echo ' NOTE = "Automatically generated, do not edit!";'; \
echo " NSExecutable = \"$(GNUSTEP_INSTANCE)\";"; \
echo " NSMainNibFile = \"$(MAIN_MODEL_FILE)\";"; \
echo " GSMainMarkupFile = \"$(MAIN_MARKUP_FILE)\";"; \
if [ "$(APPLICATION_ICON)" != "" ]; then \
echo " CFBundleIconFile = \"$(APPLICATION_ICON)\";"; \
fi; \
echo " NSPrincipalClass = \"$(PRINCIPAL_CLASS)\";"; \
if [ -r "$(GNUSTEP_INSTANCE)Info.plist" ]; then \
sed '1d' "$(GNUSTEP_INSTANCE)Info.plist"; \
else \
echo "}"; \
fi) > $@$(END_ECHO)
else
$(APP_INFO_PLIST_FILE): $(GNUSTEP_STAMP_DEPEND) $(GNUSTEP_PLIST_DEPEND)
$(ECHO_CREATING)(echo "{"; echo ' NOTE = "Automatically generated, do not edit!";'; \
echo " NSExecutable = \"$(GNUSTEP_INSTANCE)\";"; \
echo " NSMainNibFile = \"$(MAIN_MODEL_FILE)\";"; \
echo " GSMainMarkupFile = \"$(MAIN_MARKUP_FILE)\";"; \
if [ "$(APPLICATION_ICON)" != "" ]; then \
echo " NSIcon = \"$(APPLICATION_ICON)\";"; \
fi; \
echo " NSPrincipalClass = \"$(PRINCIPAL_CLASS)\";"; \
echo "}") >$@$(END_ECHO)
-$(ECHO_NOTHING)if [ -r "$(GNUSTEP_INSTANCE)Info.plist" ]; then \
plmerge $@ "$(GNUSTEP_INSTANCE)Info.plist"; \
fi$(END_ECHO)
endif
$(APP_DIR)/Resources/$(GNUSTEP_INSTANCE).desktop: \
$(APP_DIR)/Resources/Info-gnustep.plist
$(ECHO_CREATING)pl2link $^ $(APP_DIR)/Resources/$(GNUSTEP_INSTANCE).desktop$(END_ECHO)
internal-app-copy_into_dir:: shared-instance-bundle-copy_into_dir
#
# install/uninstall targets
#
$(APP_INSTALL_DIR):
$(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
internal-app-install_:: shared-instance-bundle-install internal-install-app-wrapper
ifeq ($(strip),yes)
$(ECHO_STRIPPING)$(STRIP) $(APP_INSTALL_DIR)/$(APP_FILE_NAME)$(END_ECHO)
endif
internal-app-uninstall_:: shared-instance-bundle-uninstall internal-uninstall-app-wrapper
#
# Normally, to start up an application from the command-line you would
# need to use something like 'openapp Gorm.app'. To make this easier
# for end-users, we create a 'Gorm' executable inside GNUSTEP_TOOLS
# that does just that. Your environment needs to be setup (PATH and
# library path properly setup) to use this executable. But that's OK;
# if your environment is not setup, then GNUSTEP_TOOLS wouldn't be
# in your PATH and so typing 'openapp' or 'Gorm' at the command-line
# would do nothing anyway because they wouldn't be found! ;-)
#
# If your environment is difficult (and you can't fix it), then you
# should stick with 'openapp', and you may need to specify the whole
# PATH to openapp so that it is found. Eg,
# /usr/GNUstep/System/Tools/openapp Gorm.app. That will do a full
# GNUstep environment setup and should work no matter what.
#
# If we have symlinks, we simply create a symlink from
# GNUSTEP_TOOLS/GNUSTEP_TARGET_LDIR to APP_INSTALL_DIR/APP_FILE_NAME.
# This is the fastest way to start up your application; it just jumps
# to the executable file. In fact, it is much faster than openapp.
#
# If we don't have symlinks, we install an app-wrapper consisting of a
# one-liner shell script that will start openapp. This will be
# slower.
#
# These are the rules to create/delete this 'wrapper'.
#
$(GNUSTEP_TOOLS)/$(GNUSTEP_TARGET_LDIR):
$(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
ifeq ($(HAS_LN_S), yes)
# We generate a relative symlink. This makes it easier to use DESTDIR
# and other packaging relocation tricks.
internal-install-app-wrapper: $(GNUSTEP_TOOLS)/$(GNUSTEP_TARGET_LDIR)
$(ECHO_NOTHING)\
cd $(GNUSTEP_TOOLS)/$(GNUSTEP_TARGET_LDIR); \
$(RM_LN_S) $(GNUSTEP_INSTANCE); \
$(LN_S) `$(REL_PATH_SCRIPT) $(GNUSTEP_TOOLS)/$(GNUSTEP_TARGET_LDIR) $(APP_INSTALL_DIR)/$(APP_FILE_NAME)` \
$(GNUSTEP_INSTANCE)$(END_ECHO)
else
# Not sure that we can use relative paths with 'exec' in a portable
# way. We want the stuff to work with DESTDIR, so in this case we use
# openapp in the app wrapper. Much slower, but should work fine.
internal-install-app-wrapper: $(GNUSTEP_TOOLS)/$(GNUSTEP_TARGET_LDIR)
$(ECHO_NOTHING)cat $(GNUSTEP_MAKEFILES)/app-wrapper.template \
| sed -e "s@GNUSTEP_INSTANCE@$(GNUSTEP_INSTANCE)@" > $(GNUSTEP_TOOLS)/$(GNUSTEP_TARGET_LDIR)/$(GNUSTEP_INSTANCE); \
chmod a+x $(GNUSTEP_TOOLS)/$(GNUSTEP_TARGET_LDIR)/$(GNUSTEP_INSTANCE)$(END_ECHO)
ifneq ($(CHOWN_TO),)
$(ECHO_CHOWNING)$(CHOWN) $(CHOWN_TO) $(GNUSTEP_TOOLS)/$(GNUSTEP_TARGET_LDIR)/$(GNUSTEP_INSTANCE)$(END_ECHO)
endif
endif
internal-uninstall-app-wrapper:
$(ECHO_NOTHING)$(RM) -f $(GNUSTEP_TOOLS)/$(GNUSTEP_TARGET_LDIR)/$(GNUSTEP_INSTANCE)$(END_ECHO)
include $(GNUSTEP_MAKEFILES)/Instance/Shared/strings.make

View file

@ -1,306 +0,0 @@
#
# Instace/bundle.make
#
# Instance makefile rules to build GNUstep-based bundles.
#
# Copyright (C) 1997, 2001, 2002 Free Software Foundation, Inc.
#
# Author: Scott Christley <scottc@net-community.com>
# Author: Ovidiu Predescu <ovidiu@net-community.com>
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
include $(GNUSTEP_MAKEFILES)/Instance/Shared/headers.make
# The name of the bundle is in the BUNDLE_NAME variable.
# The list of bundle resource file are in xxx_RESOURCE_FILES
# The list of localized bundle resource files is in
# xxx_LOCALIZED_RESOURCE_FILES
# The list of languages the bundle supports is in xxx_LANGUAGES
# The list of bundle resource directories are in xxx_RESOURCE_DIRS
# The name of the principal class is xxx_PRINCIPAL_CLASS
# The header files are in xxx_HEADER_FILES
# The directory where the header files are located is xxx_HEADER_FILES_DIR
# The directory where to install the header files inside the library
# installation directory is xxx_HEADER_FILES_INSTALL_DIR
# where xxx is the bundle name
#
.PHONY: internal-bundle-all_ \
internal-bundle-install_ \
internal-bundle-uninstall_ \
internal-bundle-copy_into_dir \
build-bundle
# In some cases, a bundle without any object file in it is useful - to
# just store some resources which can be loaded comfortably using the
# gnustep-base NSBundle API. In this case - which we detect because
# OBJ_FILES_TO_LINK is empty - we skip any code related to linking etc
ifneq ($(OBJ_FILES_TO_LINK),)
# NB: we don't need to link the bundle against the system libraries,
# which are already linked in the application ... linking them both in
# the bundle and in the application would just make things more
# difficult when the bundle is loaded (eg, if the application and the
# bundle end up being linked to different versions of the system
# libraries ...)
# On windows, this is unfortunately required.
ifeq ($(BUILD_DLL), yes)
LINK_BUNDLE_AGAINST_ALL_LIBS = yes
endif
# Apple CC two-level namespaces requires all symbols in bundles
# to be resolved at link time.
ifeq ($(CC_BUNDLE), yes)
LINK_BUNDLE_AGAINST_ALL_LIBS = yes
endif
ifeq ($(LINK_BUNDLE_AGAINST_ALL_LIBS), yes)
BUNDLE_LIBS += $(ADDITIONAL_GUI_LIBS) $(AUXILIARY_GUI_LIBS) $(BACKEND_LIBS) \
$(GUI_LIBS) $(ADDITIONAL_TOOL_LIBS) $(AUXILIARY_TOOL_LIBS) \
$(FND_LIBS) $(ADDITIONAL_OBJC_LIBS) $(AUXILIARY_OBJC_LIBS) $(OBJC_LIBS) \
$(SYSTEM_LIBS) $(TARGET_SYSTEM_LIBS)
endif
ALL_BUNDLE_LIBS = \
$(ALL_LIB_DIRS) \
$(BUNDLE_LIBS)
ifeq ($(BUILD_DLL),yes)
BUNDLE_OBJ_EXT = $(DLL_LIBEXT)
endif
endif # OBJ_FILES_TO_LINK
#
# GNUstep bundles are built in the following way on all platforms:
# xxx.bundle/Resources/Info-gnustep.plist
# xxx.bundle/Resources/<all resources here>
#
# We also support building Apple bundles using Apple frameworks
# on Apple platforms - in which case, the bundle has a different
# structure:
# xxx.bundle/Contents/Info.plist
# xxx.bundle/Contents/Resources/<all resources here>
# This second way of building bundles is triggered by FOUNDATION_LIB =
# apple.
#
internal-bundle-all_:: $(GNUSTEP_OBJ_DIR) build-bundle
BUNDLE_DIR_NAME = $(GNUSTEP_INSTANCE:=$(BUNDLE_EXTENSION))
BUNDLE_DIR = $(GNUSTEP_BUILD_DIR)/$(BUNDLE_DIR_NAME)
ifneq ($(OBJ_FILES_TO_LINK),)
ifneq ($(FOUNDATION_LIB), apple)
BUNDLE_FILE_NAME = \
$(BUNDLE_DIR_NAME)/$(GNUSTEP_TARGET_LDIR)/$(GNUSTEP_INSTANCE)$(BUNDLE_OBJ_EXT)
else
BUNDLE_FILE_NAME = \
$(BUNDLE_DIR_NAME)/Contents/MacOS/$(GNUSTEP_INSTANCE)$(BUNDLE_OBJ_EXT)
endif
BUNDLE_FILE = $(GNUSTEP_BUILD_DIR)/$(BUNDLE_FILE_NAME)
endif
#
# Determine where to install. By default, install into GNUSTEP_BUNDLES.
#
ifneq ($($(GNUSTEP_INSTANCE)_INSTALL_DIR),)
BUNDLE_INSTALL_DIR = $($(GNUSTEP_INSTANCE)_INSTALL_DIR)
endif
ifeq ($(BUNDLE_INSTALL_DIR),)
BUNDLE_INSTALL_DIR = $(GNUSTEP_BUNDLES)
endif
ifneq ($(FOUNDATION_LIB), apple)
# GNUstep bundle
GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH = $(BUNDLE_DIR)/Resources
BUNDLE_INFO_PLIST_FILE = $(BUNDLE_DIR)/Resources/Info-gnustep.plist
else
# OSX bundle
GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH = $(BUNDLE_DIR)/Contents/Resources
BUNDLE_INFO_PLIST_FILE = $(BUNDLE_DIR)/Contents/Info.plist
endif
GNUSTEP_SHARED_BUNDLE_INSTALL_NAME = $(BUNDLE_DIR_NAME)
GNUSTEP_SHARED_BUNDLE_INSTALL_LOCAL_PATH = .
GNUSTEP_SHARED_BUNDLE_INSTALL_PATH = $(BUNDLE_INSTALL_DIR)
include $(GNUSTEP_MAKEFILES)/Instance/Shared/bundle.make
ifneq ($(OBJ_FILES_TO_LINK),)
ifneq ($(FOUNDATION_LIB),apple)
build-bundle: $(BUNDLE_DIR)/$(GNUSTEP_TARGET_LDIR) \
$(BUNDLE_FILE) \
$(BUNDLE_INFO_PLIST_FILE) \
shared-instance-bundle-all
else
build-bundle: $(BUNDLE_DIR)/Contents/MacOS \
$(BUNDLE_FILE) \
$(BUNDLE_INFO_PLIST_FILE) \
shared-instance-bundle-all
endif
# The rule to build $(BUNDLE_DIR)/Resources is already provided
# by Instance/Shared/bundle.make
$(BUNDLE_DIR)/$(GNUSTEP_TARGET_LDIR):
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
$(BUNDLE_FILE): $(OBJ_FILES_TO_LINK)
$(ECHO_LINKING)$(BUNDLE_LINK_CMD)$(END_ECHO)
PRINCIPAL_CLASS = $(strip $($(GNUSTEP_INSTANCE)_PRINCIPAL_CLASS))
ifeq ($(PRINCIPAL_CLASS),)
PRINCIPAL_CLASS = $(GNUSTEP_INSTANCE)
endif
else
# Following code for the case OBJ_FILES_TO_LINK is empty - bundle with
# no shared object in it.
build-bundle: $(BUNDLE_INFO_PLIST_FILE) shared-instance-bundle-all
endif # OBJ_FILES_TO_LINK
MAIN_MODEL_FILE = $(strip $(subst .gmodel,,$(subst .gorm,,$(subst .nib,,$($(GNUSTEP_INSTANCE)_MAIN_MODEL_FILE)))))
# We must recreate Info.plist if the values of PRINCIPAL_CLASS and/or
# of MAIN_MODEL_FILE has changed since last time we built Info.plist.
# We use stamp-string.make, which will store the variables in a stamp
# file inside GNUSTEP_STAMP_DIR, and rebuild Info.plist if
# GNUSTEP_STAMP_STRING changes
GNUSTEP_STAMP_STRING = $(PRINCIPAL_CLASS)-$(MAIN_MODEL_FILE)
ifneq ($(FOUNDATION_LIB), apple)
GNUSTEP_STAMP_DIR = $(BUNDLE_DIR)
else
# Everything goes in Contents/ on Apple
GNUSTEP_STAMP_DIR = $(BUNDLE_DIR)/Contents
endif
ifeq ($(FOUNDATION_LIB), apple)
# For efficiency, depend on the rule to build
# BUNDLE_DIR/Contents/Resources (which would be used anyway when
# building the bundle), so that first we use the rule to create
# BUNDLE_DIR/Contents/Resources, and then we can avoid executing a
# separate rule/subshell to create GNUSTEP_STAMP_DIR which has already
# been implicitly created by the other rule!
$(GNUSTEP_STAMP_DIR): $(BUNDLE_DIR)/Contents/Resources
else
$(GNUSTEP_STAMP_DIR): $(BUNDLE_DIR)/Resources
endif
include $(GNUSTEP_MAKEFILES)/Instance/Shared/stamp-string.make
ifeq ($(FOUNDATION_LIB), apple)
# MacOSX bundles
$(BUNDLE_DIR)/Contents:
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
$(BUNDLE_DIR)/Contents/MacOS:
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
ifneq ($(OBJ_FILES_TO_LINK),)
$(BUNDLE_DIR)/Contents/Info.plist: $(BUNDLE_DIR)/Contents \
$(GNUSTEP_STAMP_DEPEND)
$(ECHO_CREATING)(echo "<?xml version='1.0' encoding='utf-8'?>";\
echo "<!DOCTYPE plist SYSTEM 'file://localhost/System/Library/DTDs/PropertyList.dtd'>";\
echo "<!-- Automatically generated, do not edit! -->";\
echo "<plist version='0.9'>";\
echo " <dict>";\
echo " <key>CFBundleExecutable</key>";\
echo " <string>$(GNUSTEP_TARGET_LDIR)/$(GNUSTEP_INSTANCE)$(BUNDLE_OBJ_EXT)</string>";\
echo " <key>CFBundleInfoDictionaryVersion</key>";\
echo " <string>6.0</string>";\
echo " <key>CFBundlePackageType</key>";\
echo " <string>BNDL</string>";\
echo " <key>NSPrincipalClass</key>";\
echo " <string>$(PRINCIPAL_CLASS)</string>";\
echo " </dict>";\
echo "</plist>";\
) >$@$(END_ECHO)
else
$(BUNDLE_DIR)/Contents/Info.plist: $(BUNDLE_DIR)/Contents \
$(GNUSTEP_STAMP_DEPEND)
$(ECHO_CREATING)(echo "<?xml version='1.0' encoding='utf-8'?>";\
echo "<!DOCTYPE plist SYSTEM 'file://localhost/System/Library/DTDs/PropertyList.dtd'>";\
echo "<!-- Automatically generated, do not edit! -->";\
echo "<plist version='0.9'>";\
echo " <dict>";\
echo " <key>CFBundleInfoDictionaryVersion</key>";\
echo " <string>6.0</string>";\
echo " <key>CFBundlePackageType</key>";\
echo " <string>BNDL</string>";\
echo " </dict>";\
echo "</plist>";\
) >$@$(END_ECHO)
endif
else # following executed if FOUNDATION_LIB != apple
# Depend on xxxInfo.plist but only if it exists.
GNUSTEP_PLIST_DEPEND = $(wildcard $(GNUSTEP_INSTANCE)Info.plist)
ifneq ($(OBJ_FILES_TO_LINK),)
# GNUstep bundles
$(BUNDLE_DIR)/Resources/Info-gnustep.plist: $(BUNDLE_DIR)/Resources \
$(GNUSTEP_STAMP_DEPEND) \
$(GNUSTEP_PLIST_DEPEND)
$(ECHO_CREATING)(echo "{"; echo ' NOTE = "Automatically generated, do not edit!";'; \
echo " NSExecutable = \"$(GNUSTEP_INSTANCE)$(BUNDLE_OBJ_EXT)\";"; \
echo " NSMainNibFile = \"$(MAIN_MODEL_FILE)\";"; \
echo " NSPrincipalClass = \"$(PRINCIPAL_CLASS)\";"; \
echo "}") >$@$(END_ECHO)
$(ECHO_NOTHING)if [ -r "$(GNUSTEP_INSTANCE)Info.plist" ]; then \
plmerge $@ $(GNUSTEP_INSTANCE)Info.plist; \
fi$(END_ECHO)
else # following code for when no object file is built
# GNUstep bundles
$(BUNDLE_DIR)/Resources/Info-gnustep.plist: $(BUNDLE_DIR)/Resources \
$(GNUSTEP_STAMP_DEPEND) \
$(GNUSTEP_PLIST_DEPEND)
$(ECHO_CREATING)(echo "{"; echo ' NOTE = "Automatically generated, do not edit!";'; \
echo " NSMainNibFile = \"$(MAIN_MODEL_FILE)\";"; \
echo "}") >$@$(END_ECHO)
$(ECHO_NOTHING)if [ -r "$(GNUSTEP_INSTANCE)Info.plist" ]; then \
plmerge $@ $(GNUSTEP_INSTANCE)Info.plist; \
fi$(END_ECHO)
endif
endif # FOUNDATION_LIB != apple
internal-bundle-copy_into_dir:: shared-instance-bundle-copy_into_dir
$(BUNDLE_INSTALL_DIR):
$(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
internal-bundle-install_:: shared-instance-headers-install \
shared-instance-bundle-install
ifeq ($(strip),yes)
ifneq ($(OBJ_FILES_TO_LINK),)
$(ECHO_STRIPPING)$(STRIP) $(BUNDLE_INSTALL_DIR)/$(BUNDLE_FILE_NAME)$(END_ECHO)
endif
endif
internal-bundle-uninstall_:: shared-instance-headers-uninstall \
shared-instance-bundle-uninstall
include $(GNUSTEP_MAKEFILES)/Instance/Shared/strings.make

View file

@ -1,71 +0,0 @@
#
# Instance/clibrary.make
#
# Instance Makefile rules to build C libraries.
#
# Copyright (C) 2002 Free Software Foundation, Inc.
#
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# Warning/TODO - this makefile is not really finished, because it
# still uses the LIB_LINK_CMD used for normal ObjC libraries. The
# main difference from library.make, currently, is that it installs
# outside the library_combo dir. (because this is the status of this
# makefile, we currently simply inherit from library.make. Once we
# actually implement C libraries, we might want to make this makefile
# partially independent from library.make)
#
# It all works as for library.make but we install outside library-combo
#
# Other differences are:
#
# The name of the library is in the CLIBRARY_NAME variable, rather
# than in the LIBRARY_NAME variable as it happens for libraries.
#
# Similarly, the install dir is controlled by CLIBRARY_INSTALL_DIR
# rather than LIBRARY_INSTALL_DIR.
#
.PHONY: internal-clibrary-all_ \
internal-clibrary-install_ \
internal-clibrary-uninstall_
# This is the directory where the lib get installed.
ifneq ($($(GNUSTEP_INSTANCE)_INSTALL_DIR),)
CLIBRARY_INSTALL_DIR = $($(GNUSTEP_INSTANCE)_INSTALL_DIR)
endif
ifeq ($(CLIBRARY_INSTALL_DIR),)
CLIBRARY_INSTALL_DIR = $(GNUSTEP_LIBRARIES)
endif
# And this is used internally - it is the final directory where we put
# the library - it includes target arch, os dir but not the
# library_combo - this variable is PRIVATE to gnustep-make
FINAL_LIBRARY_INSTALL_DIR = $(CLIBRARY_INSTALL_DIR)/$(GNUSTEP_TARGET_DIR)
# Drag in library.make rules
include $(GNUSTEP_MAKEFILES)/Instance/library.make
# Now call them from our own rules
internal-clibrary-all_:: internal-library-all_
internal-clibrary-install_:: internal-library-install_
internal-clibrary-uninstall_:: internal-library-uninstall_
internal-clibrary-check:: internal-library-check

View file

@ -1,83 +0,0 @@
#
# Instance/ctool.make
#
# Instance Makefile rules to build GNUstep-based command line ctools.
#
# Copyright (C) 1997, 2001 Free Software Foundation, Inc.
#
# Author: Scott Christley <scottc@net-community.com>
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The name of the ctools is in the CTOOL_NAME variable.
#
# xxx We need to prefix the target name when cross-compiling
#
# This is the same as a tool, but it is not linked against libobjc and
# it is not linked against the foundation library. This is good if
# you are not using any Objective-C stuff in here.
#
# PS: this means you must leave the variable xxx_OBJC_FILES (and
# xxx_OBJCC_FILES) empty (if you don't, it won't work). If you need
# to compile Objective-C stuff, please use tool.make.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
# This is the directory where the ctools get installed. If you don't
# specify a directory they will get installed in the GNUstep Local
# root.
ifneq ($($(GNUSTEP_INSTANCE)_INSTALL_DIR),)
CTOOL_INSTALL_DIR = $($(GNUSTEP_INSTANCE)_INSTALL_DIR)
endif
ifeq ($(CTOOL_INSTALL_DIR),)
CTOOL_INSTALL_DIR = $(GNUSTEP_TOOLS)
endif
.PHONY: internal-ctool-all_ \
internal-ctool-install_ \
internal-ctool-uninstall_
ALL_TOOL_LIBS = \
$(ALL_LIB_DIRS) \
$(ADDITIONAL_TOOL_LIBS) $(AUXILIARY_TOOL_LIBS) \
$(TARGET_SYSTEM_LIBS)
#
# Compilation targets
#
internal-ctool-all_:: $(GNUSTEP_OBJ_DIR) \
$(GNUSTEP_OBJ_DIR)/$(GNUSTEP_INSTANCE)$(EXEEXT)
$(GNUSTEP_OBJ_DIR)/$(GNUSTEP_INSTANCE)$(EXEEXT): $(OBJ_FILES_TO_LINK)
$(ECHO_LINKING)$(LD) $(ALL_LDFLAGS) -o $(LDOUT)$@ \
$(OBJ_FILES_TO_LINK) \
$(ALL_TOOL_LIBS)$(END_ECHO)
internal-ctool-install_:: $(CTOOL_INSTALL_DIR)/$(GNUSTEP_TARGET_DIR)
$(ECHO_INSTALLING)$(INSTALL_PROGRAM) -m 0755 \
$(GNUSTEP_OBJ_DIR)/$(GNUSTEP_INSTANCE)$(EXEEXT) \
$(CTOOL_INSTALL_DIR)/$(GNUSTEP_TARGET_DIR)$(END_ECHO)
$(CTOOL_INSTALL_DIR)/$(GNUSTEP_TARGET_DIR):
$(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
internal-ctool-uninstall_::
$(ECHO_UNINSTALLING)rm -f $(CTOOL_INSTALL_DIR)/$(GNUSTEP_TARGET_DIR)/$(GNUSTEP_INSTANCE)$(EXEEXT)$(END_ECHO)
include $(GNUSTEP_MAKEFILES)/Instance/Shared/strings.make

View file

@ -1,154 +0,0 @@
# -*-makefile-*-
# Instance/documentation.make
#
# Instance Makefile rules to build GNUstep-based documentation.
#
# Copyright (C) 1998, 2000, 2001, 2002 Free Software Foundation, Inc.
#
# Author: Scott Christley <scottc@net-community.com>
# Author: Nicola Pero <n.pero@mi.flashnet.it>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
#
# The names of the documents are in the DOCUMENT_NAME variable.
# These final documents will be generated in info, dvi, ps, and html output.
#
# The names of text documents are in the DOCUMENT_TEXT_NAME variable.
#
# The main file for text document is in the xxx_TEXT_MAIN variable.
# Files already ready to be installed without pre-processing (eg, html, rtf)
# are in the xxx_INSTALL_FILES
# The Texinfo files that needs pre-processing are in xxx_TEXI_FILES
# The GSDoc files that needs pre-processing are in xxx_GSDOC_FILES
# The files for processing by autogsdoc are in xxx_AGSDOC_FILES
# The options for controlling autogsdoc are in xxx_AGSDOC_FLAGS
#
# Javadoc support:
# The Java classes and packages that needs documenting using javadoc
# are in xxx_JAVADOC_FILES (could contain both packages, as
# `gnu.gnustep.base', and standalone classes, as
# `gnu.gnustep.base.NSArray.java')
#
# The sourcepath to the Java classes source code in in xxx_JAVADOC_SOURCEPATH
# (it can contain more than one path, as CLASSPATH or LD_LIBRARY_PATH do).
# To set special flags for javadoc (eg, -public), use ADDITIONAL_JAVADOCFLAGS
#
# The installation directory is in the xxx_DOC_INSTALL_DIR variable
# (eg, Gui_DOC_INSTALL_DIR = Developer/Gui/Reference
# Things should be installed under `Developer/YourProjectName' or
# `User/YourProjectName' - for Javadoc, use `Developer/YourProjectName' or
# `Developer/YourProjectName/Java' if your project has both java and
# non java)
#
# Where xxx is the name of the document
#
TEXI_FILES = $($(GNUSTEP_INSTANCE)_TEXI_FILES)
GSDOC_FILES = $($(GNUSTEP_INSTANCE)_GSDOC_FILES)
AGSDOC_FILES = $($(GNUSTEP_INSTANCE)_AGSDOC_FILES)
LATEX_FILES = $($(GNUSTEP_INSTANCE)_LATEX_FILES)
JAVADOC_FILES = $($(GNUSTEP_INSTANCE)_JAVADOC_FILES)
DOC_INSTALL_DIR = $($(GNUSTEP_INSTANCE)_DOC_INSTALL_DIR)
TEXT_MAIN = $($(GNUSTEP_INSTANCE)_TEXT_MAIN)
#
# GNUSTEP_DVIPS is here because it's common to texi.make and latex.make
#
# To override GNUSTEP_DVIPS, define it differently in
# GNUmakefile.preamble
ifeq ($(GNUSTEP_DVIPS),)
GNUSTEP_DVIPS = dvips
endif
# To override GNUSTEP_DVIPS_FLAGS, define it differently in
# GNUmakefile.premable. To only add new flags to the existing ones,
# set ADDITIONAL_DVIPS_FLAGS in GNUmakefile.preamble.
ifeq ($(GNUSTEP_DVIPS_FLAGS),)
GNUSTEP_DVIPS_FLAGS =
endif
.PHONY: internal-doc-all_ \
internal-doc-clean \
internal-doc-distclean \
internal-doc-install_ \
internal-doc-uninstall_ \
internal-textdoc-all_ \
internal-textdoc-clean \
internal-textdoc-distclean \
internal-textdoc-install_ \
internal-textdoc-uninstall_
#
# Common code.
#
# Installation directory - always created. This rule should be before
# the makefile fragments' internal-doc-install_, so that
# GNUSTEP_DOC/DOC_INSTALL_DIR is built before their targets
# are. FIXME: Maybe this dependency should be in the submakefiles
# themselves.
internal-doc-install_:: $(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR):
$(ECHO_CREATING)$(MKINSTALLDIRS) $(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)$(END_ECHO)
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(GNUSTEP_INSTANCE):
$(ECHO_CREATING)$(MKINSTALLDIRS) $(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(GNUSTEP_INSTANCE)$(END_ECHO)
ifneq ($(TEXI_FILES),)
include $(GNUSTEP_MAKEFILES)/Instance/Documentation/texi.make
endif
ifneq ($(GSDOC_FILES),)
include $(GNUSTEP_MAKEFILES)/Instance/Documentation/gsdoc.make
endif
ifneq ($(AGSDOC_FILES),)
include $(GNUSTEP_MAKEFILES)/Instance/Documentation/autogsdoc.make
endif
ifneq ($(LATEX_FILES),)
include $(GNUSTEP_MAKEFILES)/Instance/Documentation/latex.make
endif
ifneq ($(JAVADOC_FILES),)
include $(GNUSTEP_MAKEFILES)/Instance/Documentation/javadoc.make
endif
ifneq ($($(GNUSTEP_INSTANCE)_INSTALL_FILES),)
include $(GNUSTEP_MAKEFILES)/Instance/Documentation/install_files.make
endif
#
# textdoc targets - these are meant to be used with texi.make ... maybe
# they should be moved in there
#
internal-textdoc-install_:: $(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)
$(ECHO_NOTHING)$(INSTALL_DATA) $(GNUSTEP_INSTANCE) \
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)$(END_ECHO)
internal-textdoc-uninstall_::
$(ECHO_UNINSTALLING)rm -f \
$(GNUSTEP_DOC)/$(DOC_INSTALL_DIR)/$(GNUSTEP_INSTANCE)$(END_ECHO)
internal-textdoc-clean::
$(ECHO_NOTHING) rm -f $(GNUSTEP_INSTANCE) $(END_ECHO)
internal-textdoc-distclean::

View file

@ -1,737 +0,0 @@
# -*-makefile-*-
# Instance/framework.make
#
# Instance Makefile rules to build GNUstep-based frameworks.
#
# Copyright (C) 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc.
#
# Author: Mirko Viviani <mirko.viviani@rccr.cremona.it>
# Author: Nicola Pero <n.pero@mi.flashnet.it>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
.PHONY: internal-framework-all_ \
build-framework \
internal-framework-build-headers \
build-framework-dirs \
internal-framework-install_ \
internal-framework-distclean \
internal-framework-clean \
internal-framework-uninstall_
# The name of the framework is in the FRAMEWORK_NAME variable.
# The list of framework resource files are in xxx_RESOURCE_FILES
# The list of framework web server resource files are in
# xxx_WEBSERVER_RESOURCE_FILES
# The list of localized framework resource files is in
# xxx_LOCALIZED_RESOURCE_FILES
# The list of localized framework web server resource files is in
# xxx_WEBSERVER_LOCALIZED_RESOURCE_FILES
# The list of framework GSWeb components are in xxx_COMPONENTS
# The list of languages the framework supports is in xxx_LANGUAGES
# The list of framework resource directories are in xxx_RESOURCE_DIRS
# The list of framework subprojects directories are in xxx_SUBPROJECTS
# The name of the principal class is xxx_PRINCIPAL_CLASS
# The header files are in xxx_HEADER_FILES
# The directory where the header files are located is xxx_HEADER_FILES_DIR
# (defaults to ./)
# The directory where to install the header files inside the library
# installation directory is xxx_HEADER_FILES_INSTALL_DIR
# (defaults to the framework name [without .framework]). Can't be `.'
# The list of framework web server resource directories are in
# xxx_WEBSERVER_RESOURCE_DIRS
# The list of localized framework web server GSWeb components are in
# xxx_WEBSERVER_LOCALIZED_RESOURCE_DIRS
# xxx_CURRENT_VERSION_NAME is the compiled version name (default "A")
# xxx_MAKE_CURRENT_VERSION is used to decide if the framework version
# we compiling should be made the current/default version or not
# (default is "yes")
#
# where xxx is the framework name
#
#
# The HEADER_FILES_INSTALL_DIR might look somewhat weird - because in
# most if not all cases, you want it to be the framework name. At the
# moment, it allows you to put headers for framework XXX in directory
# YYY, so that you can refer to them by using #include
# <YYY/MyHeader.h> rather than #include <XXX/MyHeader.h>. It seems to
# be mostly used to have a framework with name XXX work as a drop-in
# replacement for another framework, which has name YYY -- and which
# might be installed at the same time :-).
#
# Set VERSION from xxx_VERSION
ifneq ($($(GNUSTEP_INSTANCE)_VERSION),)
VERSION = $($(GNUSTEP_INSTANCE)_VERSION)
endif
ifeq ($(VERSION),)
VERSION = 0.0.1
endif
# By setting xxx_INTERFACE_VERSION you can change the soversion used
# when linking the library. See comments in library.make for the
# variables with the same name for libraries.
ifeq ($($(GNUSTEP_INSTANCE)_INTERFACE_VERSION),)
# By default, if VERSION is 1.0.0, INTERFACE_VERSION is 1
INTERFACE_VERSION = $(word 1,$(subst ., ,$(VERSION)))
else
INTERFACE_VERSION = $($(GNUSTEP_INSTANCE)_INTERFACE_VERSION)
endif
# CURRENT_VERSION_NAME is the name of the version as used when
# building the library structure. We recommend just using
# INTERFACE_VERSION for that, so your resources and your shared
# library have the same versioning.
# Warning - the following variable is also used in Master/rules.make
# to build the OWNING_PROJECT_HEADER_DIR for the framework's
# subprojects. Make sure you keep them in sync if you change them.
CURRENT_VERSION_NAME = $($(GNUSTEP_INSTANCE)_CURRENT_VERSION_NAME)
ifeq ($(CURRENT_VERSION_NAME),)
CURRENT_VERSION_NAME = $(INTERFACE_VERSION)
endif
# xxx_MAKE_CURRENT_VERSION can be set to 'no' if you do not want the
# framework version that we are building from becoming the Current
# one.
ifneq ($($(GNUSTEP_INSTANCE)_MAKE_CURRENT_VERSION),)
MAKE_CURRENT_VERSION = $($(GNUSTEP_INSTANCE)_MAKE_CURRENT_VERSION)
endif
ifeq ($(MAKE_CURRENT_VERSION),)
MAKE_CURRENT_VERSION = yes
endif
# If there are no working symlinks, common.make sets
# FRAMEWORK_VERSION_SUPPORT to no, which unconditionally turn
# versioning off. This means that we create no symlinks inside the
# xxx.framework directory for the various versions; that everything is
# put top-level as in the case of bundles. So with
# FRAMEWORK_VERSION_SUPPORT = no, the Directory structure is:
#
# xxx.framework/libframework.dll.a
# xxx.framework/framework.dll
# xxx.framework/Resources
# xxx.framework/Headers
#
# The Headers, libframework.dll.a and framework.dll are then copied into
# the standard header/library locations so that they can be found by
# compiler/linker. Given that there are no symlinks, there is no other
# way of doing this.
ifeq ($(FRAMEWORK_VERSION_SUPPORT),no)
MAKE_CURRENT_VERSION = no
endif
# This is used on Apple to build frameworks which can be embedded into
# applications. You usually set it to something like
# @executable_path/../Frameworks and then you can embed the framework
# in an application.
DYLIB_INSTALL_NAME_BASE = $($(GNUSTEP_INSTANCE)_DYLIB_INSTALL_NAME_BASE)
FRAMEWORK_DIR_NAME = $(GNUSTEP_INSTANCE).framework
FRAMEWORK_DIR = $(GNUSTEP_BUILD_DIR)/$(FRAMEWORK_DIR_NAME)
ifeq ($(FRAMEWORK_VERSION_SUPPORT), yes)
FRAMEWORK_VERSION_DIR_NAME = $(FRAMEWORK_DIR_NAME)/Versions/$(CURRENT_VERSION_NAME)
else
FRAMEWORK_VERSION_DIR_NAME = $(FRAMEWORK_DIR_NAME)
endif
FRAMEWORK_VERSION_DIR = $(GNUSTEP_BUILD_DIR)/$(FRAMEWORK_VERSION_DIR_NAME)
# This is not doing much at the moment, it is only defining
# HEADER_FILES, HEADER_FILES_DIR and HEADER_FILES_INSTALL_DIR in the
# standard way. Please note that HEADER_FILES might be empty even if
# we have headers in subprojects that we need to manage and install.
# So we assume by default that we have some headers even if
# HEADER_FILES is empty.
include $(GNUSTEP_MAKEFILES)/Instance/Shared/headers.make
# On windows, this is unfortunately required.
ifeq ($(BUILD_DLL), yes)
LINK_AGAINST_ALL_LIBS = yes
endif
ifeq ($(LINK_AGAINST_ALL_LIBS), yes)
# Link against all libs ... but not the one we're compiling! (not sure
# when this could happen with frameworks, anyway it makes sense)
LIBRARIES_DEPEND_UPON += $(filter-out -l$(GNUSTEP_INSTANCE), \
$(ADDITIONAL_GUI_LIBS) $(AUXILIARY_GUI_LIBS) \
$(BACKEND_LIBS) \
$(GUI_LIBS) $(ADDITIONAL_TOOL_LIBS) $(AUXILIARY_TOOL_LIBS) \
$(FND_LIBS) $(ADDITIONAL_OBJC_LIBS) $(AUXILIARY_OBJC_LIBS) $(OBJC_LIBS) \
$(SYSTEM_LIBS) $(TARGET_SYSTEM_LIBS))
endif
INTERNAL_LIBRARIES_DEPEND_UPON = \
$(ALL_LIB_DIRS) \
$(LIBRARIES_DEPEND_UPON)
ifeq ($(FOUNDATION_LIB),gnu)
# On GNUstep, build our dummy class to store information which
# gnustep-base can find at run time.
# An ObjC class name can not contain '-', but some people '-' this
# in framework names. So we need to encode the '-' in some way
# into an ObjC class name. (since we're there, we also encode '+'
# even if that's not really common).
# What we do is, we use '_' as an escape character, and encode (in the
# order) as follows:
#
# '_' is converted to '__'
# '-' is converted to '_0'
# '+' is converted to '_1'
#
# For example, 'Renaissance-Experimental' becomes
# 'Renaissance_0Experimental'.
# GNUstep-base will convert the name back by applying the reverse rules
# in the reverse order.
DUMMY_FRAMEWORK = NSFramework_$(subst +,_1,$(subst -,_0,$(subst _,__,$(GNUSTEP_INSTANCE))))
DUMMY_FRAMEWORK_FILE = $(DERIVED_SOURCES_DIR)/$(DUMMY_FRAMEWORK).m
DUMMY_FRAMEWORK_OBJ_FILE = $(addprefix $(GNUSTEP_OBJ_DIR)/,$(DUMMY_FRAMEWORK).o)
# The following file will hold the list of classes compiled into the
# framework, ready to be included in the .plist file. We include the
# list of classes twice, in the object file itself (for when the
# framework is loaded) and in the .plist (for tools which let you
# browse in frameworks on disk and see lists of classes). Please note
# that reading the class list from the .plist requires gnustep-base to
# have properly located the framework bundle on disk, while reading
# the list from the object file itself does not (and so it's more
# likely to work in a portable way), which is why we still save the
# list in the object file rather than only putting it in the .plist.
# Maybe this point should be discarded, and we should only store the class
# list in the .plist file.
DUMMY_FRAMEWORK_CLASS_LIST = $(DERIVED_SOURCES_DIR)/$(GNUSTEP_INSTANCE)-class-list
endif
FRAMEWORK_HEADER_FILES = $(addprefix $(FRAMEWORK_VERSION_DIR)/Headers/,$(HEADER_FILES))
# FIXME - do we really those variables too ?
ifeq ($(FRAMEWORK_VERSION_SUPPORT), yes)
FRAMEWORK_CURRENT_DIR_NAME = $(FRAMEWORK_DIR_NAME)/Versions/Current
else
FRAMEWORK_CURRENT_DIR_NAME = $(FRAMEWORK_DIR_NAME)
endif
FRAMEWORK_CURRENT_DIR = $(GNUSTEP_BUILD_DIR)/$(FRAMEWORK_CURRENT_DIR_NAME)
FRAMEWORK_LIBRARY_DIR_NAME = $(FRAMEWORK_VERSION_DIR_NAME)/$(GNUSTEP_TARGET_LDIR)
FRAMEWORK_LIBRARY_DIR = $(GNUSTEP_BUILD_DIR)/$(FRAMEWORK_LIBRARY_DIR_NAME)
FRAMEWORK_CURRENT_LIBRARY_DIR_NAME = $(FRAMEWORK_CURRENT_DIR_NAME)/$(GNUSTEP_TARGET_LDIR)
FRAMEWORK_CURRENT_LIBRARY_DIR = $(GNUSTEP_BUILD_DIR)/$(FRAMEWORK_CURRENT_LIBRARY_DIR_NAME)
ifneq ($(BUILD_DLL), yes)
FRAMEWORK_LIBRARY_FILE = lib$(GNUSTEP_INSTANCE)$(SHARED_LIBEXT)
VERSION_FRAMEWORK_LIBRARY_FILE = $(FRAMEWORK_LIBRARY_FILE).$(VERSION)
SONAME_FRAMEWORK_FILE = $(FRAMEWORK_LIBRARY_FILE).$(INTERFACE_VERSION)
else # BUILD_DLL
# When you build a DLL, you have to install it in a directory which is
# in your PATH.
ifeq ($(DLL_INSTALLATION_DIR),)
DLL_INSTALLATION_DIR = $(GNUSTEP_TOOLS)/$(GNUSTEP_TARGET_LDIR)
endif
# When we build a DLL, we also pass -DBUILD_lib{library_name}_DLL=1 to
# the preprocessor. With the new DLL support, this is usually not
# needed; but in some cases some symbols are difficult and have to be
# exported/imported manually. For these cases, the library header
# files can use this preprocessor define to know that they are
# included during compilation of the library itself, or are being
# imported by external code. Typically with the new DLL support if a
# symbol can't be imported you have to mark it with
# __declspec(dllimport) when the library is not being compiled.
# __declspec(dllexport) is not particularly useful instead.
CLEAN_framework_NAME = $(subst -,_,$(GNUSTEP_INSTANCE))
SHARED_CFLAGS += -DBUILD_$(CLEAN_framework_NAME)_DLL=1
# FRAMEWORK_LIBRARY_FILE is the import library, libRenaissance.dll.a
FRAMEWORK_LIBRARY_FILE = lib$(GNUSTEP_INSTANCE)$(DLL_LIBEXT)$(LIBEXT)
VERSION_FRAMEWORK_LIBRARY_FILE = $(FRAMEWORK_LIBRARY_FILE)
SONAME_FRAMEWORK_FILE = $(FRAMEWORK_LIBRARY_FILE)
# LIB_LINK_DLL_FILE is the DLL library, Renaissance-0.dll. Include
# the INTERFACE_VERSION in the DLL library name. Applications are
# linked explicitly to this INTERFACE_VERSION of the library; this
# works exactly in the same way as under Unix.
LIB_LINK_DLL_FILE = $(GNUSTEP_INSTANCE)-$(subst .,_,$(INTERFACE_VERSION))$(DLL_LIBEXT)
FRAMEWORK_OBJ_EXT = $(DLL_LIBEXT)
endif # BUILD_DLL
FRAMEWORK_FILE_NAME = $(FRAMEWORK_LIBRARY_DIR_NAME)/$(VERSION_FRAMEWORK_LIBRARY_FILE)
FRAMEWORK_FILE = $(GNUSTEP_BUILD_DIR)/$(FRAMEWORK_FILE_NAME)
ifneq ($($(GNUSTEP_INSTANCE)_INSTALL_DIR),)
FRAMEWORK_INSTALL_DIR = $($(GNUSTEP_INSTANCE)_INSTALL_DIR)
endif
ifeq ($(FRAMEWORK_INSTALL_DIR),)
FRAMEWORK_INSTALL_DIR = $(GNUSTEP_FRAMEWORKS)
endif
#
# Now prepare the variables which are used by target-dependent commands
# defined in target.make
#
LIB_LINK_OBJ_DIR = $(FRAMEWORK_LIBRARY_DIR)
LIB_LINK_VERSION_FILE = $(VERSION_FRAMEWORK_LIBRARY_FILE)
LIB_LINK_SONAME_FILE = $(SONAME_FRAMEWORK_FILE)
LIB_LINK_FILE = $(FRAMEWORK_LIBRARY_FILE)
LIB_LINK_INSTALL_DIR = $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_LIBRARY_DIR_NAME)
ifneq ($(DYLIB_INSTALL_NAME_BASE),)
LIB_LINK_INSTALL_NAME = $(DYLIB_INSTALL_NAME_BASE)/$(FRAMEWORK_FILE_NAME)
else
# Use a relative path for easy relocation.
LIB_LINK_INSTALL_NAME = $(GNUSTEP_INSTANCE).framework/$(GNUSTEP_INSTANCE)
endif
GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH = $(FRAMEWORK_VERSION_DIR)/Resources
include $(GNUSTEP_MAKEFILES)/Instance/Shared/bundle.make
internal-framework-all_:: $(GNUSTEP_OBJ_DIR) \
build-framework
internal-framework-build-headers:: $(FRAMEWORK_HEADER_FILES) \
build-framework-dirs
ifeq ($(MAKE_CURRENT_VERSION),yes)
# A target to build/reset the Current symlink to point to the newly
# compiled framework. Only executed if MAKE_CURRENT_VERSION is yes,
# and only executed if the symlink doesn't exist yet, or if
# FRAMEWORK_VERSION_DIR is newer than the symlink. This is to avoid
# rebuilding the symlink every single time, which is a waste of time.
UPDATE_CURRENT_SYMLINK_RULE = $(FRAMEWORK_DIR)/Versions/Current
$(FRAMEWORK_DIR)/Versions/Current: $(FRAMEWORK_VERSION_DIR)
$(ECHO_NOTHING)cd $(FRAMEWORK_DIR)/Versions; \
$(RM_LN_S) Current; \
$(LN_S) $(CURRENT_VERSION_NAME) Current$(END_ECHO)
else
UPDATE_CURRENT_SYMLINK_RULE =
endif
# FIXME/TODO - the following rule is always executed. This is stupid.
# We should have some decent dependencies so that it's not executed if
# there is nothing to build. :-)
# Please note that test -h must be used instead of test -L because on
# old Sun Solaris, test -h works but test -L does not.
build-framework-dirs: $(DERIVED_SOURCES_DIR) \
$(FRAMEWORK_LIBRARY_DIR) \
$(FRAMEWORK_VERSION_DIR)/Headers \
$(FRAMEWORK_VERSION_DIR)/Resources \
$(FRAMEWORK_RESOURCE_DIRS) \
$(UPDATE_CURRENT_SYMLINK_RULE)
ifeq ($(FRAMEWORK_VERSION_SUPPORT), yes)
$(ECHO_NOTHING)cd $(FRAMEWORK_DIR); \
if [ ! -h "Resources" ]; then \
$(RM_LN_S) Resources; \
$(LN_S) Versions/Current/Resources Resources; \
fi; \
if [ ! -h "Headers" ]; then \
$(RM_LN_S) Headers; \
$(LN_S) Versions/Current/Headers Headers; \
fi$(END_ECHO)
endif
$(ECHO_NOTHING)cd $(DERIVED_SOURCES_DIR); \
if [ ! -h "$(HEADER_FILES_INSTALL_DIR)" ]; then \
$(RM_LN_S) ./$(HEADER_FILES_INSTALL_DIR); \
$(LN_S) ../$(FRAMEWORK_DIR_NAME)/Headers \
./$(HEADER_FILES_INSTALL_DIR); \
fi$(END_ECHO)
$(FRAMEWORK_LIBRARY_DIR):
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
$(FRAMEWORK_VERSION_DIR)/Headers:
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
$(DERIVED_SOURCES_DIR): $(DERIVED_SOURCES_DIR)/.stamp
$(DERIVED_SOURCES_DIR)/.stamp:
$(ECHO_CREATING)$(MKDIRS) $(DERIVED_SOURCES_DIR); \
touch $@$(END_ECHO)
# Need to share this code with the headers code ... but how.
$(FRAMEWORK_VERSION_DIR)/Headers/%.h: $(HEADER_FILES_DIR)/%.h $(FRAMEWORK_VERSION_DIR)/Headers
$(ECHO_NOTHING)$(INSTALL_DATA) $< $@$(END_ECHO)
OBJC_OBJ_FILES_TO_INSPECT = $(OBJC_OBJ_FILES) $(SUBPROJECT_OBJ_FILES)
# FIXME - We should not depend on GNUmakefile - rather we should use
# Instance/Shared/stamp-string.make if we need to depend on the value
# of some make variables. That would also detect a change in
# FRAMEWORK_INSTALL_DIR from the command line, not currently covered
# at the moment!
#
# To get the list of all classes, we use
# $(EXTRACT_CLASS_NAMES_COMMAND), which is defined in target.make
#
#
# The following rule will also build the DUMMY_FRAMEWORK_CLASS_LIST
# file. This file is always created/deleted at the same time as the
# DUMMY_FRAMEWORK_FILE.
$(DUMMY_FRAMEWORK_FILE): $(DERIVED_SOURCES_DIR)/.stamp $(OBJ_FILES_TO_LINK) GNUmakefile
$(ECHO_CREATING) classes=""; \
for object_file in $(OBJC_OBJ_FILES_TO_INSPECT) __dummy__; do \
if [ "$$object_file" != "__dummy__" ]; then \
sym=`$(EXTRACT_CLASS_NAMES_COMMAND)`; \
classes="$$classes $$sym"; \
fi; \
done; \
classlist=""; \
classarray=""; \
for f in $$classes __dummy__ ; do \
if [ "$$f" != "__dummy__" ]; then \
if [ "$$classlist" = "" ]; then \
classlist="@\"$$f\""; \
classarray="(\"$$f\""; \
else \
classlist="$$classlist, @\"$$f\""; \
classarray="$$classarray, \"$$f\""; \
fi; \
fi; \
done; \
if [ "$$classlist" = "" ]; then \
classlist="NULL"; \
classarray="()"; \
else \
classlist="$$classlist, NULL"; \
classarray="$$classarray)"; \
fi; \
echo "$$classarray" > $(DUMMY_FRAMEWORK_CLASS_LIST); \
echo "#include <Foundation/NSString.h>" > $@; \
echo "@interface $(DUMMY_FRAMEWORK)" >> $@; \
echo "+ (NSString *)frameworkEnv;" >> $@; \
echo "+ (NSString *)frameworkPath;" >> $@; \
echo "+ (NSString *)frameworkVersion;" >> $@; \
echo "+ (NSString **)frameworkClasses;" >> $@; \
echo "@end" >> $@; \
echo "@implementation $(DUMMY_FRAMEWORK)" >> $@; \
echo "+ (NSString *)frameworkEnv { return nil; }" >> $@; \
echo "+ (NSString *)frameworkPath { return @\"$(FRAMEWORK_INSTALL_DIR)\"; }" >> $@; \
echo "+ (NSString *)frameworkVersion { return @\"$(CURRENT_VERSION_NAME)\"; }" >> $@; \
echo "static NSString *allClasses[] = {$$classlist};" >> $@; \
echo "+ (NSString **)frameworkClasses { return allClasses; }" >> $@;\
echo "@end" >> $@$(END_ECHO)
ifeq ($(FOUNDATION_LIB),gnu)
$(DUMMY_FRAMEWORK_OBJ_FILE): $(DUMMY_FRAMEWORK_FILE)
$(ECHO_COMPILING)$(CC) $< -c $(ALL_CPPFLAGS) $(ALL_OBJCFLAGS) -o $@$(END_ECHO)
endif
ifeq ($(FOUNDATION_LIB),gnu)
FRAMEWORK_INFO_PLIST_FILE = Info-gnustep.plist
else
FRAMEWORK_INFO_PLIST_FILE = Info.plist
endif
ifeq ($(FRAMEWORK_VERSION_SUPPORT), yes)
build-framework: $(FRAMEWORK_FILE) \
shared-instance-bundle-all \
$(FRAMEWORK_VERSION_DIR)/Resources/$(FRAMEWORK_INFO_PLIST_FILE) \
$(GNUSTEP_BUILD_DIR)/$(GNUSTEP_INSTANCE).framework/$(GNUSTEP_TARGET_LDIR)/$(GNUSTEP_INSTANCE)
else
build-framework: $(FRAMEWORK_FILE) \
shared-instance-bundle-all \
$(FRAMEWORK_VERSION_DIR)/Resources/$(FRAMEWORK_INFO_PLIST_FILE)
endif
ifeq ($(findstring darwin, $(GNUSTEP_TARGET_OS)), darwin)
# When building native frameworks on Apple, we need to create a
# top-level symlink xxx.framework/xxx ---> the framework shared
# library. On Darwin (non-Apple) we do this as well since we can partially
# emulate frameworks (see the ld_lib_path.sh comments on this).
# Please note that the following keeps the top-level symlink pointing
# to the framework in Current. This is always correct, even if what
# we are compiling is not made the Current framework version, but if
# what we are compiling is not made the Current framework version, I
# think it's not our business to touch the Current stuff, so let's
# ignore it. It's faster to ignore it anyway. ;-)
$(GNUSTEP_BUILD_DIR)/$(GNUSTEP_INSTANCE).framework/$(GNUSTEP_TARGET_LDIR):
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
$(GNUSTEP_BUILD_DIR)/$(GNUSTEP_INSTANCE).framework/$(GNUSTEP_TARGET_LDIR)/$(GNUSTEP_INSTANCE): $(GNUSTEP_BUILD_DIR)/$(GNUSTEP_INSTANCE).framework/$(GNUSTEP_TARGET_LDIR)/
ifeq ($(MAKE_CURRENT_VERSION),yes)
$(ECHO_NOTHING)cd $(GNUSTEP_BUILD_DIR)/$(GNUSTEP_INSTANCE).framework; \
$(RM_LN_S) $(GNUSTEP_INSTANCE); \
$(LN_S) Versions/Current/$(GNUSTEP_TARGET_LDIR)/$(GNUSTEP_INSTANCE) $(GNUSTEP_INSTANCE)$(END_ECHO)
endif
else
# We create a top-level symlink (/copy)
#
# xxx.framework/{TARGET_LDIR}/xxx --> <the Current framework {TARGET_LDIR}/object file>
#
# And also
#
# xxx.framework/{TARGET_LDIR}/libxxx.so --> <the Current framework {TARGET_LDIR}/libxxx.so file>
#
# On Windows, we don't do any of this since there are no versions anyway.
#
# The reason for doing this is that you can link against the uninstalled framework
# by just using -Lpath_to_the_framework/xxx.framework/$TARGET_LDIR
#
ifeq ($(FRAMEWORK_VERSION_SUPPORT), yes)
$(GNUSTEP_BUILD_DIR)/$(GNUSTEP_INSTANCE).framework/$(GNUSTEP_TARGET_LDIR):
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
$(GNUSTEP_BUILD_DIR)/$(GNUSTEP_INSTANCE).framework/$(GNUSTEP_TARGET_LDIR)/$(GNUSTEP_INSTANCE): $(GNUSTEP_BUILD_DIR)/$(GNUSTEP_INSTANCE).framework/$(GNUSTEP_TARGET_LDIR)/
ifeq ($(MAKE_CURRENT_VERSION),yes)
$(ECHO_NOTHING)cd $(GNUSTEP_BUILD_DIR)/$(GNUSTEP_INSTANCE).framework/$(GNUSTEP_TARGET_LDIR); \
$(RM_LN_S) $(GNUSTEP_INSTANCE) $(FRAMEWORK_LIBRARY_FILE); \
$(LN_S) `$(REL_PATH_SCRIPT) $(GNUSTEP_TARGET_LDIR) \
Versions/Current/$(GNUSTEP_TARGET_LDIR)/$(GNUSTEP_INSTANCE)` \
$(GNUSTEP_INSTANCE); \
$(LN_S) `$(REL_PATH_SCRIPT) $(GNUSTEP_TARGET_LDIR) \
Versions/Current/$(GNUSTEP_TARGET_LDIR)/$(FRAMEWORK_LIBRARY_FILE)` \
$(FRAMEWORK_LIBRARY_FILE)$(END_ECHO)
endif
endif
endif
ifneq ($(BUILD_DLL), yes)
LIB_LINK_FRAMEWORK_FILE = $(LIB_LINK_FILE)
else
LIB_LINK_FRAMEWORK_FILE = $(LIB_LINK_DLL_FILE)
endif
$(FRAMEWORK_FILE): $(DUMMY_FRAMEWORK_OBJ_FILE) $(OBJ_FILES_TO_LINK)
$(ECHO_LINKING) \
$(LIB_LINK_CMD) || $(RM) $(FRAMEWORK_FILE) ; \
(cd $(LIB_LINK_OBJ_DIR); \
$(RM_LN_S) $(GNUSTEP_INSTANCE); \
$(LN_S) $(LIB_LINK_FRAMEWORK_FILE) $(GNUSTEP_INSTANCE)) \
$(END_ECHO)
PRINCIPAL_CLASS = $(strip $($(GNUSTEP_INSTANCE)_PRINCIPAL_CLASS))
ifeq ($(PRINCIPAL_CLASS),)
PRINCIPAL_CLASS = $(GNUSTEP_INSTANCE)
endif
MAIN_MODEL_FILE = $(strip $(subst .gmodel,,$(subst .gorm,,$(subst .nib,,$($(GNUSTEP_INSTANCE)_MAIN_MODEL_FILE)))))
# FIXME: Use stamp.make to depend on the value of MAIN_MODEL_FILE and PRINCIPAL_CLASS
# FIXME: MacOSX frameworks should also merge xxxInfo.plist into them
# MacOSX-S frameworks
$(FRAMEWORK_VERSION_DIR)/Resources/Info.plist: $(FRAMEWORK_VERSION_DIR)/Resources
$(ECHO_CREATING)(echo "{"; echo ' NOTE = "Automatically generated, do not edit!";'; \
echo " NSExecutable = \"$(GNUSTEP_INSTANCE)\";"; \
echo " NSMainNibFile = \"$(MAIN_MODEL_FILE)\";"; \
echo " NSPrincipalClass = \"$(PRINCIPAL_CLASS)\";"; \
echo "}") >$@$(END_ECHO)
# Depend on xxxInfo.plist but only if it exists.
GNUSTEP_PLIST_DEPEND = $(wildcard $(GNUSTEP_INSTANCE)Info.plist)
# GNUstep frameworks
$(FRAMEWORK_VERSION_DIR)/Resources/Info-gnustep.plist: \
$(FRAMEWORK_VERSION_DIR)/Resources \
$(DUMMY_FRAMEWORK_FILE) \
$(GNUSTEP_PLIST_DEPEND)
$(ECHO_CREATING)(echo "{"; echo ' NOTE = "Automatically generated, do not edit!";'; \
echo " NSExecutable = \"$(GNUSTEP_INSTANCE)$(FRAMEWORK_OBJ_EXT)\";"; \
echo " NSMainNibFile = \"$(MAIN_MODEL_FILE)\";"; \
echo " NSPrincipalClass = \"$(PRINCIPAL_CLASS)\";"; \
echo " Classes = "; \
cat $(DUMMY_FRAMEWORK_CLASS_LIST); \
echo " ;"; \
echo "}") >$@$(END_ECHO)
$(ECHO_NOTHING)if [ -r "$(GNUSTEP_INSTANCE)Info.plist" ]; then \
plmerge $@ $(GNUSTEP_INSTANCE)Info.plist; \
fi$(END_ECHO)
ifneq ($(BUILD_DLL),yes)
ifeq ($(FOUNDATION_LIB),gnu)
internal-framework-install_:: $(FRAMEWORK_INSTALL_DIR) \
$(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR) \
$(GNUSTEP_HEADERS)
$(ECHO_INSTALLING)rm -rf $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_DIR_NAME); \
(cd $(GNUSTEP_BUILD_DIR); $(TAR) cfX - $(GNUSTEP_MAKEFILES)/tar-exclude-list $(FRAMEWORK_DIR_NAME)) | (cd $(FRAMEWORK_INSTALL_DIR); $(TAR) xf -)$(END_ECHO)
ifneq ($(CHOWN_TO),)
$(ECHO_CHOWNING)$(CHOWN) -R $(CHOWN_TO) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_DIR_NAME)$(END_ECHO)
endif
ifeq ($(strip),yes)
$(ECHO_STRIPPING)$(STRIP) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_FILE_NAME)$(END_ECHO)
endif
$(ECHO_INSTALLING_HEADERS)cd $(GNUSTEP_HEADERS); \
$(RM_LN_S) $(HEADER_FILES_INSTALL_DIR); \
$(LN_S) `$(REL_PATH_SCRIPT) $(GNUSTEP_HEADERS) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_DIR_NAME)/Headers` $(HEADER_FILES_INSTALL_DIR); \
$(END_ECHO)
ifneq ($(CHOWN_TO),)
$(ECHO_CHOWNING)cd $(GNUSTEP_HEADERS); \
$(CHOWN) $(CHOWN_TO) $(HEADER_FILES_INSTALL_DIR); \
$(END_ECHO)
endif
$(ECHO_NOTHING)cd $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR); \
$(RM_LN_S) $(FRAMEWORK_LIBRARY_FILE); \
$(RM_LN_S) $(SONAME_FRAMEWORK_FILE); \
$(RM_LN_S) $(VERSION_FRAMEWORK_LIBRARY_FILE); \
$(LN_S) `$(REL_PATH_SCRIPT) $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_CURRENT_LIBRARY_DIR_NAME)/$(FRAMEWORK_LIBRARY_FILE)` $(FRAMEWORK_LIBRARY_FILE); \
if test -r "$(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_CURRENT_LIBRARY_DIR_NAME)/$(SONAME_FRAMEWORK_FILE)"; then \
$(LN_S) `$(REL_PATH_SCRIPT) $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_CURRENT_LIBRARY_DIR_NAME)/$(SONAME_FRAMEWORK_FILE)` $(SONAME_FRAMEWORK_FILE); \
fi; \
$(LN_S) `$(REL_PATH_SCRIPT) $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_CURRENT_LIBRARY_DIR_NAME)/$(VERSION_FRAMEWORK_LIBRARY_FILE)` $(VERSION_FRAMEWORK_LIBRARY_FILE)$(END_ECHO)
ifneq ($(CHOWN_TO),)
$(ECHO_CHOWNING)cd $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR); \
$(CHOWN) $(CHOWN_TO) $(FRAMEWORK_LIBRARY_FILE); \
if test -r "$(SONAME_FRAMEWORK_FILE)"; then \
$(CHOWN) $(CHOWN_TO) $(SONAME_FRAMEWORK_FILE); \
fi; \
$(CHOWN) $(CHOWN_TO) $(VERSION_FRAMEWORK_LIBRARY_FILE)$(END_ECHO)
endif
else
# This code for Apple OSX
internal-framework-install_:: $(FRAMEWORK_INSTALL_DIR)
$(ECHO_INSTALLING)rm -rf $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_DIR_NAME); \
(cd $(GNUSTEP_BUILD_DIR); $(TAR) cfX - $(GNUSTEP_MAKEFILES)/tar-exclude-list $(FRAMEWORK_DIR_NAME)) | (cd $(FRAMEWORK_INSTALL_DIR); $(TAR) xf -)$(END_ECHO)
ifneq ($(CHOWN_TO),)
$(ECHO_CHOWNING)$(CHOWN) -R $(CHOWN_TO) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_DIR_NAME)$(END_ECHO)
endif
ifeq ($(strip),yes)
$(ECHO_STRIPPING)$(STRIP) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_FILE_NAME)$(END_ECHO)
endif
endif
else # install DLL
internal-framework-install_:: $(FRAMEWORK_INSTALL_DIR) \
$(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR) \
$(GNUSTEP_HEADERS) \
$(DLL_INSTALLATION_DIR)
$(ECHO_INSTALLING)\
rm -rf $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_DIR_NAME); \
(cd $(GNUSTEP_BUILD_DIR);\
$(TAR) cfX - $(GNUSTEP_MAKEFILES)/tar-exclude-list \
$(FRAMEWORK_DIR_NAME)) | (cd $(FRAMEWORK_INSTALL_DIR); \
$(TAR) xf -)$(END_ECHO)
ifneq ($(CHOWN_TO),)
$(ECHO_CHOWNING)$(CHOWN) -R $(CHOWN_TO) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_DIR_NAME)$(END_ECHO)
endif
ifeq ($(strip),yes)
$(ECHO_STRIPPING)$(STRIP) $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_FILE_NAME)$(END_ECHO)
endif
$(ECHO_INSTALLING_HEADERS)cd $(GNUSTEP_HEADERS); \
if test -d "$(HEADER_FILES_INSTALL_DIR)"; then \
rm -Rf $(HEADER_FILES_INSTALL_DIR); \
fi; \
$(MKINSTALLDIRS) $(HEADER_FILES_INSTALL_DIR); \
cd $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_VERSION_DIR_NAME)/Headers ; \
$(TAR) cfX - $(GNUSTEP_MAKEFILES)/tar-exclude-list . | (cd $(GNUSTEP_HEADERS)/$(HEADER_FILES_INSTALL_DIR); \
$(TAR) xf - ); \
$(END_ECHO)
ifneq ($(CHOWN_TO),)
$(ECHO_CHOWNING)cd $(GNUSTEP_HEADERS); \
$(CHOWN) -R $(CHOWN_TO) $(HEADER_FILES_INSTALL_DIR); \
$(END_ECHO)
endif
$(ECHO_NOTHING)$(INSTALL_PROGRAM) $(FRAMEWORK_LIBRARY_DIR)/$(LIB_LINK_DLL_FILE) \
$(DLL_INSTALLATION_DIR)$(END_ECHO)
$(ECHO_NOTHING)$(INSTALL_PROGRAM) $(FRAMEWORK_FILE_NAME) \
$(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR)$(END_ECHO)
endif
$(DLL_INSTALLATION_DIR):
$(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
# If Version support is disabled, then this directory is the same as
# the Resources directory in Shared/bundle.make for which we already
# have a rule.
ifeq ($(FRAMEWORK_VERSION_SUPPORT), yes)
$(FRAMEWORK_DIR)/Resources:
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
endif
$(FRAMEWORK_INSTALL_DIR):
$(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
$(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR):
$(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
$(GNUSTEP_HEADERS):
$(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
ifneq ($(BUILD_DLL), yes)
# NB: We use '$(RM_LN_S)' to remove the symlinks to insure
# that we do not remove customized real directories.
internal-framework-uninstall_::
$(ECHO_UNINSTALLING)if [ "$(HEADER_FILES)" != "" ]; then \
for file in $(HEADER_FILES) __done; do \
if [ $$file != __done ]; then \
rm -rf $(GNUSTEP_HEADERS)/$(HEADER_FILES_INSTALL_DIR)/$$file ; \
fi; \
done; \
fi; \
$(RM_LN_S) $(GNUSTEP_HEADERS)/$(HEADER_FILES_INSTALL_DIR) ; \
rm -rf $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_DIR_NAME) ; \
cd $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR); \
$(RM_LN_S) $(FRAMEWORK_LIBRARY_FILE); \
$(RM_LN_S) $(SONAME_FRAMEWORK_FILE); \
$(RM_LN_S) $(VERSION_FRAMEWORK_LIBRARY_FILE); \
$(END_ECHO)
else
internal-framework-uninstall_::
$(ECHO_UNINSTALLING)if [ "$(HEADER_FILES)" != "" ]; then \
for file in $(HEADER_FILES) __done; do \
if [ $$file != __done ]; then \
rm -rf $(GNUSTEP_HEADERS)/$(HEADER_FILES_INSTALL_DIR)/$$file ; \
fi; \
done; \
fi; \
$(RM_LN_S) $(GNUSTEP_HEADERS)/$(HEADER_FILES_INSTALL_DIR) ; \
rm -rf $(FRAMEWORK_INSTALL_DIR)/$(FRAMEWORK_DIR_NAME) ; \
cd $(GNUSTEP_LIBRARIES)/$(GNUSTEP_TARGET_LDIR); \
$(RM_LN_S) $(FRAMEWORK_LIBRARY_FILE); \
cd $(DLL_INSTALLATION_DIR); \
$(RM_LN_S) $(LIB_LINK_DLL_FILE); \
$(END_ECHO)
endif
#
# Cleaning targets
#
internal-framework-clean::
$(ECHO_NOTHING)rm -rf \
$(PSWRAP_C_FILES) $(PSWRAP_H_FILES) \
$(FRAMEWORK_DIR) $(DERIVED_SOURCES_DIR)$(END_ECHO)
internal-framework-distclean::
include $(GNUSTEP_MAKEFILES)/Instance/Shared/strings.make

View file

@ -1,185 +0,0 @@
#
# Instance/gswapp.make
#
# Instance Makefile rules to build GNUstep web based applications.
#
# Copyright (C) 1997-2004 Free Software Foundation, Inc.
#
# Author: Manuel Guesdon <mguesdon@sbuilders.com>,
# Nicola Pero <n.pero@mi.flashnet.it>
# Based on application.make by Ovidiu Predescu <ovidiu@net-community.com>
# Based on gswapp.make by Helge Hess, MDlink online service center GmbH.
# Based on the original version by Scott Christley.
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
# FIXME/TODO - this file has not been updated to use
# Instance/Shared/bundle.make because it is linking resources instead of
# copying them.
# The name of the application is in the GSWAPP_NAME variable.
# The list of languages the app is localized in are in xxx_LANGUAGES <==
# The list of application resource file are in xxx_RESOURCE_FILES
# The list of localized application resource file are in
# xxx_LOCALIZED_RESOURCE_FILES <==
# The list of application resource directories are in xxx_RESOURCE_DIRS
# The list of application web server resource directories are in
# xxx_WEBSERVER_RESOURCE_DIRS <==
# The list of localized application web server resource directories are in
# xxx_LOCALIZED_WEBSERVER_RESOURCE_DIRS
# where xxx is the application name <==
# Determine the application directory extension
GSWAPP_EXTENSION = gswa
.PHONY: internal-gswapp-all_ \
internal-gswapp-install_ \
internal-gswapp-uninstall_ \
internal-gswapp-copy_into_dir
# Defined (5 March 2007) for backwards compatibility in case your
# GNUmakefiles used it -- will be removed any time from 5 March 2011.
GNUSTEP_GSWAPPS = $(GNUSTEP_WEB_APPS)
#
# Determine where to install. By default, install into GNUSTEP_WEB_APPS.
#
ifneq ($($(GNUSTEP_INSTANCE)_INSTALL_DIR),)
GSWAPP_INSTALL_DIR = $($(GNUSTEP_INSTANCE)_INSTALL_DIR)
endif
ifeq ($(GSWAPP_INSTALL_DIR),)
GSWAPP_INSTALL_DIR = $(GNUSTEP_WEB_APPS)
endif
# Libraries that go before the WO libraries
ALL_GSW_LIBS = \
$(ALL_LIB_DIRS) \
$(ADDITIONAL_GSW_LIBS) $(AUXILIARY_GSW_LIBS) $(GSW_LIBS) \
$(ADDITIONAL_TOOL_LIBS) $(AUXILIARY_TOOL_LIBS) \
$(FND_LIBS) $(ADDITIONAL_OBJC_LIBS) $(AUXILIARY_OBJC_LIBS) \
$(OBJC_LIBS) $(SYSTEM_LIBS) $(TARGET_SYSTEM_LIBS)
GSWAPP_DIR_NAME = $(GNUSTEP_INSTANCE:=.$(GSWAPP_EXTENSION))
GSWAPP_DIR = $(GNUSTEP_BUILD_DIR)/$(GSWAPP_DIR_NAME)
#
# Now include the standard resource-bundle routines from Shared/bundle.make
#
ifneq ($(FOUNDATION_LIB), apple)
# GNUstep bundle
GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH = $(GSWAPP_DIR)/Resources
GSWAPP_INFO_PLIST_FILE = $(GSWAPP_DIR)/Resources/Info-gnustep.plist
else
# OSX bundle
GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH = $(GSWAPP_DIR)/Contents/Resources
GSWAPP_INFO_PLIST_FILE = $(GSWAPP_DIR)/Contents/Info.plist
endif
GNUSTEP_SHARED_BUNDLE_INSTALL_NAME = $(GSWAPP_DIR_NAME)
GNUSTEP_SHARED_BUNDLE_INSTALL_LOCAL_PATH = .
GNUSTEP_SHARED_BUNDLE_INSTALL_PATH = $(GSWAPP_INSTALL_DIR)
include $(GNUSTEP_MAKEFILES)/Instance/Shared/bundle.make
ifneq ($(FOUNDATION_LIB), apple)
GSWAPP_FILE_NAME = $(GSWAPP_DIR_NAME)/$(GNUSTEP_TARGET_LDIR)/$(GNUSTEP_INSTANCE)$(EXEEXT)
else
GSWAPP_FILE_NAME = $(GSWAPP_DIR_NAME)/Contents/MacOS/$(GNUSTEP_INSTANCE)$(EXEEXT)
endif
GSWAPP_FILE = $(GNUSTEP_BUILD_DIR)/$(GSWAPP_FILE_NAME)
#
# Internal targets
#
$(GSWAPP_FILE): $(OBJ_FILES_TO_LINK)
$(ECHO_LINKING)$(LD) $(ALL_LDFLAGS) $(CC_LDFLAGS) -o $(LDOUT)$@ \
$(OBJ_FILES_TO_LINK) $(ALL_GSW_LIBS)$(END_ECHO)
#
# Compilation targets
#
ifeq ($(FOUNDATION_LIB), apple)
internal-gswapp-all_:: \
$(GNUSTEP_OBJ_DIR) \
$(GSWAPP_DIR)/Contents/MacOS \
$(GSWAPP_FILE) \
shared-instance-bundle-all \
$(GSWAPP_INFO_PLIST_FILE)
$(GSWAPP_DIR)/Contents/MacOS:
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
else
internal-gswapp-all_:: $(GNUSTEP_OBJ_DIR) \
$(GSWAPP_DIR)/$(GNUSTEP_TARGET_LDIR) \
$(GSWAPP_FILE) \
$(GSWAPP_DIR)/Resources \
$(GSWAPP_INFO_PLIST_FILE) \
shared-instance-bundle-all
$(GSWAPP_DIR)/$(GNUSTEP_TARGET_LDIR):
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
endif
PRINCIPAL_CLASS = $(strip $($(GNUSTEP_INSTANCE)_PRINCIPAL_CLASS))
ifeq ($(PRINCIPAL_CLASS),)
PRINCIPAL_CLASS = $(GNUSTEP_INSTANCE)
endif
HAS_GSWCOMPONENTS = $($(GNUSTEP_INSTANCE)_HAS_GSWCOMPONENTS)
GSWAPP_INFO_PLIST = $($(GNUSTEP_INSTANCE)_GSWAPP_INFO_PLIST)
MAIN_MODEL_FILE = $(strip $(subst .gmodel,,$(subst .gorm,,$(subst .nib,,$($(GNUSTEP_INSTANCE)_MAIN_MODEL_FILE)))))
# Depend on xxxInfo.plist but only if it exists.
GNUSTEP_PLIST_DEPEND = $(wildcard $(GNUSTEP_INSTANCE)Info.plist)
$(GSWAPP_INFO_PLIST_FILE): $(GNUSTEP_PLIST_DEPEND)
$(ECHO_CREATING)(echo "{"; echo ' NOTE = "Automatically generated, do not edit!";'; \
echo " NSExecutable = \"$(GNUSTEP_INSTANCE)\";"; \
echo " NSPrincipalClass = \"$(PRINCIPAL_CLASS)\";"; \
if [ "$(HAS_GSWCOMPONENTS)" != "" ]; then \
echo " HasGSWComponents = \"$(HAS_GSWCOMPONENTS)\";"; \
fi; \
echo " NSMainNibFile = \"$(MAIN_MODEL_FILE)\";"; \
if [ -r "$(GNUSTEP_INSTANCE)Info.plist" ]; then \
cat $(GNUSTEP_INSTANCE)Info.plist; \
fi; \
if [ "$(GSWAPP_INFO_PLIST)" != "" ]; then \
cat $(GSWAPP_INFO_PLIST); \
fi; \
echo "}") >$@$(END_ECHO)
internal-gswapp-copy_into_dir:: shared-instance-bundle-copy_into_dir
# install/uninstall targets
$(GSWAPP_INSTALL_DIR):
$(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
internal-gswapp-install_:: shared-instance-bundle-install
ifeq ($(strip),yes)
$(ECHO_STRIPPING)$(STRIP) $(GSWAPP_INSTALL_DIR)/$(GSWAPP_FILE_NAME)$(END_ECHO)
endif
internal-gswapp-uninstall_:: shared-instance-bundle-uninstall
include $(GNUSTEP_MAKEFILES)/Instance/Shared/strings.make

View file

@ -1,266 +0,0 @@
#
# Instance/gswbundle.make
#
# Instance Makefile rules to build GNUstep web bundles.
#
# Copyright (C) 1997 Free Software Foundation, Inc.
#
# Author: Manuel Guesdon <mguesdon@sbuilders.com>
# Based on WOBundle.make by Helge Hess, MDlink online service center GmbH.
# Based on bundle.make by Ovidiu Predescu <ovidiu@net-community.com>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
# FIXME - this file has not been updated to use Shared/bundle.make
# because it is using symlinks rather than copying resources.
COMPONENTS = $($(GNUSTEP_INSTANCE)_COMPONENTS)
LANGUAGES = $($(GNUSTEP_INSTANCE)_LANGUAGES)
WEBSERVER_RESOURCE_FILES = $($(GNUSTEP_INSTANCE)_WEBSERVER_RESOURCE_FILES)
LOCALIZED_WEBSERVER_RESOURCE_FILES = $($(GNUSTEP_INSTANCE)_LOCALIZED_WEBSERVER_RESOURCE_FILES)
WEBSERVER_RESOURCE_DIRS = $($(GNUSTEP_INSTANCE)_WEBSERVER_RESOURCE_DIRS)
LOCALIZED_RESOURCE_FILES = $($(GNUSTEP_INSTANCE)_LOCALIZED_RESOURCE_FILES)
RESOURCE_FILES = $($(GNUSTEP_INSTANCE)_RESOURCE_FILES)
RESOURCE_DIRS = $($(GNUSTEP_INSTANCE)_RESOURCE_DIRS)
include $(GNUSTEP_MAKEFILES)/Instance/Shared/headers.make
ifeq ($(strip $(GSWBUNDLE_EXTENSION)),)
GSWBUNDLE_EXTENSION = .gswbundle
endif
GSWBUNDLE_LD = $(BUNDLE_LD)
GSWBUNDLE_LDFLAGS = $(BUNDLE_LDFLAGS)
ifneq ($($(GNUSTEP_INSTANCE)_INSTALL_DIR),)
GSWBUNDLE_INSTALL_DIR = $($(GNUSTEP_INSTANCE)_INSTALL_DIR)
endif
ifeq ($(GSWBUNDLE_INSTALL_DIR),)
GSWBUNDLE_INSTALL_DIR = $(GNUSTEP_LIBRARIES)
endif
# The name of the bundle is in the BUNDLE_NAME variable.
# The list of languages the bundle is localized in are in xxx_LANGUAGES
# The list of bundle resource file are in xxx_RESOURCE_FILES
# The list of localized bundle resource file are in xxx_LOCALIZED_RESOURCE_FILES
# The list of bundle resource directories are in xxx_RESOURCE_DIRS
# The name of the principal class is xxx_PRINCIPAL_CLASS
# The header files are in xxx_HEADER_FILES
# The directory where the header files are located is xxx_HEADER_FILES_DIR
# The directory where to install the header files inside the library
# installation directory is xxx_HEADER_FILES_INSTALL_DIR
# where xxx is the bundle name
# xxx_WEBSERVER_RESOURCE_DIRS <==
# The list of localized application web server resource directories are in
# xxx_LOCALIZED_WEBSERVER_RESOURCE_DIRS
# where xxx is the application name <==
.PHONY: internal-gswbundle-all_ \
internal-gswbundle-install_ \
internal-gswbundle-uninstall_ \
build-bundle-dir \
build-bundle \
gswbundle-components \
gswbundle-resource-files \
gswbundle-localized-resource-files \
gswbundle-webresource-dir \
gswbundle-webresource-files \
gswbundle-localized-webresource-files
# On Solaris we don't need to specifies the libraries the bundle needs.
# How about the rest of the systems? ALL_BUNDLE_LIBS is temporary empty.
#ALL_GSWBUNDLE_LIBS = $(ADDITIONAL_GSW_LIBS) $(AUXILIARY_GSW_LIBS) $(GSW_LIBS) \
$(ADDITIONAL_TOOL_LIBS) $(AUXILIARY_TOOL_LIBS) \
$(FND_LIBS) $(ADDITIONAL_OBJC_LIBS) $(AUXILIARY_OBJC_LIBS) \
$(OBJC_LIBS) $(SYSTEM_LIBS) $(TARGET_SYSTEM_LIBS)
#ALL_GSWBUNDLE_LIBS =
#ALL_GSWBUNDLE_LIBS = $(ALL_LIB_DIRS) $(ALL_GSWBUNDLE_LIBS)
internal-gswbundle-all_:: $(GNUSTEP_OBJ_DIR) \
build-bundle-dir \
build-bundle
GSWBUNDLE_DIR_NAME = $(GNUSTEP_INSTANCE:=$(GSWBUNDLE_EXTENSION))
GSWBUNDLE_DIR = $(GNUSTEP_BUILD_DIR)/$(GSWBUNDLE_DIR_NAME)
GSWBUNDLE_FILE_NAME = \
$(GSWBUNDLE_DIR_NAME)/$(GNUSTEP_TARGET_LDIR)/$(GNUSTEP_INSTANCE)
GSWBUNDLE_FILE = $(GNUSTEP_BUILD_DIR)/$(GSWBUNDLE_FILE_NAME)
GSWBUNDLE_RESOURCE_DIRS = $(foreach d, $(RESOURCE_DIRS), $(GSWBUNDLE_DIR)/Resources/$(d))
GSWBUNDLE_WEBSERVER_RESOURCE_DIRS = $(foreach d, $(WEBSERVER_RESOURCE_DIRS), $(GSWBUNDLE_DIR)/Resources/WebServer/$(d))
ifeq ($(strip $(LANGUAGES)),)
LANGUAGES="English"
endif
build-bundle-dir: $(GSWBUNDLE_DIR)/Resources \
$(GSWBUNDLE_DIR)/$(GNUSTEP_TARGET_LDIR) \
$(GSWBUNDLE_RESOURCE_DIRS)
$(GSWBUNDLE_DIR)/$(GNUSTEP_TARGET_LDIR):
$(ECHO_CREATING)$(MKDIRS) $(GSWBUNDLE_DIR)/$(GNUSTEP_TARGET_LDIR)$(END_ECHO)
$(GSWBUNDLE_RESOURCE_DIRS):
$(ECHO_CREATING)$(MKDIRS) $(GSWBUNDLE_RESOURCE_DIRS)$(END_ECHO)
build-bundle: $(GSWBUNDLE_FILE) \
gswbundle-components \
gswbundle-resource-files \
gswbundle-localized-resource-files \
gswbundle-localized-webresource-files \
gswbundle-webresource-files
$(GSWBUNDLE_FILE) : $(OBJ_FILES_TO_LINK)
$(ECHO_LINKING)$(GSWBUNDLE_LD) $(GSWBUNDLE_LDFLAGS) \
$(ALL_LDFLAGS) -o $(LDOUT)$(GSWBUNDLE_FILE) \
$(OBJ_FILES_TO_LINK) \
$(ALL_GSWBUNDLE_LIBS)$(END_ECHO)
gswbundle-components: $(GSWBUNDLE_DIR)
ifneq ($(strip $(COMPONENTS)),)
@(echo "Linking components into the bundle wrapper..."; \
cd $(GSWBUNDLE_DIR)/Resources; \
for component in $(COMPONENTS); do \
if [ -d ../../$$component ]; then \
$(LN_S) -f ../../$$component ./;\
fi; \
done; \
echo "Linking localized components into the bundle wrapper..."; \
for l in $(LANGUAGES); do \
if [ -d ../../$$l.lproj ]; then \
$(MKDIRS) $$l.lproj; \
cd $$l.lproj; \
for f in $(COMPONENTS); do \
if [ -d ../../../$$l.lproj/$$f ]; then \
$(LN_S) -f ../../../$$l.lproj/$$f .;\
fi;\
done;\
cd ..; \
fi;\
done)
endif
gswbundle-resource-files: $(GSWBUNDLE_DIR)/bundle-info.plist \
$(GSWBUNDLE_DIR)/Resources/Info-gnustep.plist
ifneq ($(strip $(RESOURCE_FILES)),)
@(echo "Linking resources into the bundle wrapper..."; \
cd $(GSWBUNDLE_DIR)/Resources/; \
for ff in $(RESOURCE_FILES); do \
$(LN_S) -f ../../$$ff .;\
done)
endif
gswbundle-localized-resource-files: $(GSWBUNDLE_DIR)/Resources/Info-gnustep.plist
ifneq ($(strip $(LOCALIZED_RESOURCE_FILES)),)
@(echo "Linking localized resources into the bundle wrapper..."; \
cd $(GSWBUNDLE_DIR)/Resources; \
for l in $(LANGUAGES); do \
if [ -d ../../$$l.lproj ]; then \
$(MKDIRS) $$l.lproj; \
cd $$l.lproj; \
for f in $(LOCALIZED_RESOURCE_FILES); do \
if [ -f ../../../$$l.lproj/$$f ]; then \
$(LN_S) -f ../../../$$l.lproj/$$f .;\
fi;\
done;\
cd ..;\
else\
echo "Warning - $$l.lproj not found - ignoring";\
fi;\
done)
endif
gswbundle-webresource-dir:
$(ECHO_CREATING)$(MKDIRS) $(GSWBUNDLE_WEBSERVER_RESOURCE_DIRS)$(END_ECHO)
gswbundle-webresource-files: $(GSWBUNDLE_DIR)/Resources/WebServer \
gswbundle-webresource-dir
ifneq ($(strip $(WEBSERVER_RESOURCE_FILES)),)
@(echo "Linking webserver resources into the application wrapper..."; \
cd $(GSWBUNDLE_DIR)/Resources/WebServer; \
for ff in $(WEBSERVER_RESOURCE_FILES); do \
$(LN_S) -f ../../WebServerResources/$$ff .;\
done)
endif
gswbundle-localized-webresource-files: $(GSWBUNDLE_DIR)/Resources/WebServer \
gswbundle-webresource-dir
ifneq ($(strip $(LOCALIZED_WEBSERVER_RESOURCE_FILES)),)
@(echo "Linking localized web resources into the application wrapper..."; \
cd $(GSWBUNDLE_DIR)/Resources/WebServer; \
for l in $(LANGUAGES); do \
if [ -d ../../WebServerResources/$$l.lproj ]; then \
$(MKDIRS) $$l.lproj; \
cd $$l.lproj; \
for f in $(LOCALIZED_WEBSERVER_RESOURCE_FILES); do \
if [ -f ../../../WebServerResources/$$l.lproj/$$f ]; then \
if [ ! -r $$f ]; then \
$(LN_S) ../../../WebServerResources/$$l.lproj/$$f $$f;\
fi;\
fi;\
done;\
cd ..; \
else \
echo "Warning - WebServerResources/$$l.lproj not found - ignoring";\
fi;\
done)
endif
PRINCIPAL_CLASS = $(strip $($(GNUSTEP_INSTANCE)_PRINCIPAL_CLASS))
ifeq ($(PRINCIPAL_CLASS),)
PRINCIPAL_CLASS = $(GNUSTEP_INSTANCE)
endif
$(GSWBUNDLE_DIR)/bundle-info.plist: $(GSWBUNDLE_DIR)
@(cd $(GSWBUNDLE_DIR); $(LN_S) -f ../bundle-info.plist .)
HAS_GSWCOMPONENTS = $($(GNUSTEP_INSTANCE)_HAS_GSWCOMPONENTS)
$(GSWBUNDLE_DIR)/Resources/Info-gnustep.plist: $(GSWBUNDLE_DIR)/Resources
$(ECHO_CREATING)(echo "{"; echo ' NOTE = "Automatically generated, do not edit!";'; \
echo " NSExecutable = \"$(GNUSTEP_INSTANCE)\";"; \
echo " NSPrincipalClass = \"$(PRINCIPAL_CLASS)\";"; \
if [ "$(HAS_GSWCOMPONENTS)" != "" ]; then \
echo " HasGSWComponents = \"$(HAS_GSWCOMPONENTS)\";"; \
fi; \
echo "}") >$@$(END_ECHO)
$(GSWBUNDLE_DIR)/Resources:
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
$(GSWBUNDLE_DIR)/Resources/WebServer:
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
internal-gswbundle-install_:: $(GSWBUNDLE_INSTALL_DIR) shared-instance-headers-install
$(ECHO_INSTALLING)rm -rf $(GSWBUNDLE_INSTALL_DIR)/$(GSWBUNDLE_DIR_NAME); \
(cd $(GNUSTEP_BUILD_DIR); $(TAR) chX - $(GNUSTEP_MAKEFILES)/tar-exclude-list $(GSWBUNDLE_DIR_NAME)) | (cd $(GSWBUNDLE_INSTALL_DIR); $(TAR) xf -)$(END_ECHO)
ifneq ($(CHOWN_TO),)
$(ECHO_CHOWNING)$(CHOWN) -R $(CHOWN_TO) $(GSWBUNDLE_INSTALL_DIR)/$(GSWBUNDLE_DIR_NAME)$(END_ECHO)
endif
ifeq ($(strip),yes)
$(ECHO_STRIPPING)$(STRIP) $(GSWBUNDLE_INSTALL_DIR)/$(GSWBUNDLE_FILE_NAME)$(END_ECHO)
endif
$(GSWBUNDLE_INSTALL_DIR):
$(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
internal-gswbundle-uninstall_:: shared-instance-headers-uninstall
$(ECHO_UNINSTALLING)rm -rf $(GSWBUNDLE_INSTALL_DIR)/$(GSWBUNDLE_DIR_NAME)$(END_ECHO)
include $(GNUSTEP_MAKEFILES)/Instance/Shared/strings.make

View file

@ -1,98 +0,0 @@
#
# Instance/java-tool.make
#
# Instance makefile rules to build Java command-line tools.
#
# Copyright (C) 2001 Free Software Foundation, Inc.
#
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# Why using Java if you can use Objective-C ...
# Anyway if you really want it, here we go.
#
# The name of the tools is in the JAVA_TOOL_NAME variable.
# The main class (the one implementing main) is in the
# xxx_PRINCIPAL_CLASS variable.
#
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
.PHONY: internal-java_tool-all_ \
internal-java_tool-clean \
internal-java_tool-distclean \
internal-java_tool-install_ \
internal-java_tool-uninstall_ \
_FORCE
# This is the directory where the shell wrapper gets installed. You
# want this on your path! If you don't specify a directory they will
# get installed in $(GNUSTEP_LOCAL_ROOT)/Tools/.
ifeq ($(JAVA_TOOL_INSTALLATION_DIR),)
JAVA_TOOL_INSTALLATION_DIR = $(GNUSTEP_TOOLS)
endif
# This is the directory where the java classes get installed.
# Normally this is /usr/GNUstep/Local/Library/Libraries/Java/
ifeq ($(JAVA_INSTALLATION_DIR),)
JAVA_INSTALLATION_DIR = $(GNUSTEP_JAVA)
endif
GNUSTEP_SHARED_JAVA_INSTALLATION_DIR = $(JAVA_INSTALLATION_DIR)
include $(GNUSTEP_MAKEFILES)/Instance/Shared/java.make
internal-java_tool-all_:: shared-instance-java-all
internal-java_tool-install_:: shared-instance-java-install \
$(JAVA_TOOL_INSTALLATION_DIR)/$(GNUSTEP_INSTANCE)
PRINCIPAL_CLASS = $(strip $($(GNUSTEP_INSTANCE)_PRINCIPAL_CLASS))
ifeq ($(PRINCIPAL_CLASS),)
$(warning You must specify PRINCIPAL_CLASS, which should be set to the full classname)
# But then, we are good, and try guessing. This will only work if the class
# is not in a package though, which sounds unlikely.
PRINCIPAL_CLASS = $(word 1 $(JAVA_OBJ_FILES))
endif
# Remove an eventual extension (.class or .java) from PRINCIPAL_CLASS;
# only take the first word of it
NORMALIZED_PRINCIPAL_CLASS = $(basename $(word 1 $(PRINCIPAL_CLASS)))
# Escape '/' so it can be passes to sed
ESCAPED_PRINCIPAL_CLASS = $(subst /,\/,$(PRINCIPAL_CLASS))
# Always rebuild this because if the PRINCIPAL_CLASS changes...
$(JAVA_TOOL_INSTALLATION_DIR)/$(GNUSTEP_INSTANCE): _FORCE
$(ECHO_NOTHING)sed -e 's/JAVA_OBJ_FILE/$(ESCAPED_PRINCIPAL_CLASS)/g' \
$(GNUSTEP_MAKEFILES)/java-executable.template \
> $(JAVA_TOOL_INSTALLATION_DIR)/$(GNUSTEP_INSTANCE); \
chmod a+x $(JAVA_TOOL_INSTALLATION_DIR)/$(GNUSTEP_INSTANCE)$(END_ECHO)
ifneq ($(CHOWN_TO),)
$(ECHO_CHOWNING)$(CHOWN) $(CHOWN_TO) \
$(JAVA_TOOL_INSTALLATION_DIR)/$(GNUSTEP_INSTANCE)$(END_ECHO)
endif
_FORCE::
internal-java_tool-uninstall_:: shared-instance-java-uninstall
$(ECHO_UNINSTALLING)rm -f $(JAVA_TOOL_INSTALLATION_DIR)/$(GNUSTEP_INSTANCE)$(END_ECHO)
internal-java_tool-clean:: shared-instance-java-clean
internal-java_tool-distclean::

View file

@ -1,96 +0,0 @@
#
# Instance/java.make
#
# Instance Makefile rules to build java-based (not necessarily
# GNUstep) packages.
#
# Copyright (C) 2000 Free Software Foundation, Inc.
#
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
#
# You can compile any set of java classes, it does not need to be strictly
# a single package in the java sense. Please put a single class in each
# source file. Multiple classes in a single source file are not supported.
#
# The name of the Java package is in the JAVA_PACKAGE_NAME variable.
# The java files to be compiled are in the xxx_JAVA_FILES variable;
# they should be specified in full relative path, such as:
# test_JAVA_FILES = gnu/gnustep/base/NSArray.java
#
# The relative path is important because things will be installed
# in $(JAVA_INSTALL_DIR)/{relative_path}; for example,
# the file above would be installed in
# ${JAVA_INSTALL_DIR)/gnu/gnustep/base/NSArray.class
#
# JAVA_INSTALL_DIR contains the directory where you want to
# install your classes - it defaults to $(GNUSTEP_JAVA), which is
# $(GNUSTEP_LOCAL_ROOT)/Library/Libraries/Java/.
#
# If you have all your files in a directory but want them to be
# installed with a different relative path, you can simply redefine
# JAVA_INSTALL_DIR, as in the following example -
# JAVA_INSTALL_DIR = $(GNUSTEP_JAVA)/gnu/gnustep/base/
#
# If you have java sources to be processed throught JAVAH to create
# JNI headers, specify the files in xxx_JAVA_JNI_FILES. The headers
# will be placed together with the source file (example: the header of
# gnu/gnustep/base/NSObject.java will be created as
# gnu/gnustep/base/NSObject.h) These headers are not installed.
#
# If you have properties file to install, put them in the
# xxx_JAVA_PROPERTIES_FILES
.PHONY: internal-java_package-all_ \
internal-java_package-clean \
internal-java_package-distclean \
internal-java_package-install_ \
internal-java_package-uninstall_
#
# For backwards compatibility ... will be removed!
#
ifneq ($($(GNUSTEP_INSTANCE)_INSTALL_DIR),)
JAVA_INSTALL_DIR = $($(GNUSTEP_INSTANCE)_INSTALL_DIR)
endif
ifneq ($(JAVA_INSTALLATION_DIR),)
JAVA_INSTALL_DIR = $(JAVA_INSTALLATION_DIR)
endif
# This is the directory where the java classses get
# installed. Normally this is /usr/GNUstep/Local/Library/Libraries/Java/
ifeq ($(JAVA_INSTALL_DIR),)
JAVA_INSTALL_DIR = $(GNUSTEP_JAVA)
endif
GNUSTEP_SHARED_JAVA_INSTALLATION_DIR = $(JAVA_INSTALL_DIR)
include $(GNUSTEP_MAKEFILES)/Instance/Shared/java.make
internal-java_package-all_:: shared-instance-java-all
internal-java_package-install_:: shared-instance-java-install
internal-java_package-clean:: shared-instance-java-clean
internal-java_package-distclean::
internal-java_package-uninstall_:: shared-instance-java-uninstall

View file

@ -1,343 +0,0 @@
# -*-makefile-*-
# Instance/library.make
#
# Instance Makefile rules to build GNUstep-based libraries.
#
# Copyright (C) 1997, 2001 Free Software Foundation, Inc.
#
# Author: Scott Christley <scottc@net-community.com>
# Ovidiu Predescu <ovidiu@net-community.com>
# Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
include $(GNUSTEP_MAKEFILES)/Instance/Shared/headers.make
#
# The name of the library (including the 'lib' prefix) is
# in the LIBRARY_NAME variable.
# The Objective-C files that gets included in the library are in xxx_OBJC_FILES
# The C files are in xxx_C_FILES
# The pswrap files are in xxx_PSWRAP_FILES
# The header files are in xxx_HEADER_FILES
# The directory where the header files are located is xxx_HEADER_FILES_DIR
# The directory where to install the header files inside the library
# installation directory is xxx_HEADER_FILES_INSTALL_DIR
#
# Where xxx is the name of the library
#
.PHONY: internal-library-all_ \
internal-library-install_ \
internal-library-uninstall_ \
internal-install-lib \
internal-install-dirs
# This is the directory where the libs get installed. This should *not*
# include the target arch, os directory or library_combo.
ifneq ($($(GNUSTEP_INSTANCE)_INSTALL_DIR),)
LIBRARY_INSTALL_DIR = $($(GNUSTEP_INSTANCE)_INSTALL_DIR)
endif
ifeq ($(LIBRARY_INSTALL_DIR),)
LIBRARY_INSTALL_DIR = $(GNUSTEP_LIBRARIES)
endif
# And this is used internally - it is the final directory where we put the
# library - it includes target arch, os dir and library_combo - this variable
# is PRIVATE to gnustep-make
#
# Do not set this variable if it is already set ... this allows other
# makefiles (Instance/clibrary.make) to use the code in this file with
# a different FINAL_LIBRARY_INSTALL_DIR !
#
ifeq ($(FINAL_LIBRARY_INSTALL_DIR),)
FINAL_LIBRARY_INSTALL_DIR = $(LIBRARY_INSTALL_DIR)/$(GNUSTEP_TARGET_LDIR)
endif
# Set VERSION from xxx_VERSION
ifneq ($($(GNUSTEP_INSTANCE)_VERSION),)
VERSION = $($(GNUSTEP_INSTANCE)_VERSION)
endif
ifeq ($(VERSION),)
# Check if we can guess VERSION from one of the other version variables
ifneq ($($(GNUSTEP_INSTANCE)_INTERFACE_VERSION),)
VERSION = $($(GNUSTEP_INSTANCE)_INTERFACE_VERSION).0
else
# For backwards compatibility we also check xxx_SOVERSION, which
# is the old name for xxx_INTERFACE_VERSION
ifneq ($($(GNUSTEP_INSTANCE)_SOVERSION),)
VERSION = $($(GNUSTEP_INSTANCE)_SOVERSION).0
else
# No luck with those. Use the default.
VERSION = 0.0.1
endif
endif
endif
#
# Manage the case that LIBRARY_NAME starts with 'lib', and the case
# that it doesn't start with 'lib'. In both cases, we need to create
# a .so file whose name starts with 'lib'.
#
ifneq ($(filter lib%,$(GNUSTEP_INSTANCE)),)
LIBRARY_NAME_WITH_LIB = $(GNUSTEP_INSTANCE)
LIBRARY_NAME_WITHOUT_LIB = $(patsubst lib%,%,$(GNUSTEP_INSTANCE))
else
LIBRARY_NAME_WITH_LIB = lib$(GNUSTEP_INSTANCE)
LIBRARY_NAME_WITHOUT_LIB = $(GNUSTEP_INSTANCE)
endif
# On windows, this is unfortunately required.
ifeq ($(BUILD_DLL), yes)
LINK_AGAINST_ALL_LIBS = yes
endif
ifeq ($(LINK_AGAINST_ALL_LIBS), yes)
# Link against all libs ... but not the one we're compiling! (this can
# happen, for example, with gnustep-gui)
LIBRARIES_DEPEND_UPON += $(filter-out -l$(LIBRARY_NAME_WITHOUT_LIB), \
$(ADDITIONAL_GUI_LIBS) $(AUXILIARY_GUI_LIBS) \
$(BACKEND_LIBS) \
$(GUI_LIBS) $(ADDITIONAL_TOOL_LIBS) $(AUXILIARY_TOOL_LIBS) \
$(FND_LIBS) $(ADDITIONAL_OBJC_LIBS) $(AUXILIARY_OBJC_LIBS) $(OBJC_LIBS) \
$(SYSTEM_LIBS) $(TARGET_SYSTEM_LIBS))
endif
INTERNAL_LIBRARIES_DEPEND_UPON = \
$(ALL_LIB_DIRS) \
$(LIBRARIES_DEPEND_UPON)
ifeq ($(shared), yes)
# Allow the user GNUmakefile to define xxx_INTERFACE_VERSION to
# replace the default INTERFACE_VERSION for this library.
# Effect of the value of xxx_INTERFACE_VERSION -
# suppose your library is libgnustep-base.1.0.0 - if you do nothing,
# INTERFACE_VERSION=1, and we prepare the symlink
# libgnustep-base.so.1 --> libgnustep-base.so.1.0.0 and tell the
# linker that it should remember that any application compiled
# against this library need to use version .1 of the library. So at
# runtime, the dynamical linker will search for libgnustep-base.so.1.
# This is important if you install multiple versions of the same
# library. The default is that if you install a new version of a
# library with the same major number, the new version replaces the
# old one, and all applications which were using the old one now use
# the new one. If you install a library with a different major
# number, the old apps will still use the old library, while newly
# compiled apps will use the new one.
# If you redefine xxx_INTERFACE_VERSION to be for example 1.0, then
# we prepare the symlink libgnustep-base.so.1.0 -->
# libgnustep-base.so.1.0.0 instead, and tell the linker to remember
# 1.0. So at runtime, the dynamic linker will search for
# libgnustep-base.so.1.0. The effect of changing
# xxx_INTERFACE_VERSION to major.minor as in this example is that if
# you install a new version with the same major.minor version, that
# replaces the old one also for old applications, but if you install
# a new library with the same major version but a *different* minor
# version, that is used in new apps, but old apps still use the old
# version.
ifeq ($($(GNUSTEP_INSTANCE)_INTERFACE_VERSION),)
# Backwards compatibility: xxx_SOVERSION was the old name for
# xxx_INTERFACE_VERSION. There was no support for setting SOVERSION
# (without xxx_), like there is no support for setting
# INTERFACE_VERSION (without xxx_) now.
# TODO: Remove xxx_SOVERSION at some point in the next few
# years. NB: Likely the only user of this is Helge Hess, so once he's
# upgraded, let's remove the backwards compatibility code. :-)
ifneq ($($(GNUSTEP_INSTANCE)_SOVERSION),)
INTERFACE_VERSION = $($(GNUSTEP_INSTANCE)_SOVERSION)
else
# This is the current code - by default, if VERSION is
# 1.0.0, INTERFACE_VERSION is 1
INTERFACE_VERSION = $(word 1,$(subst ., ,$(VERSION)))
endif
else
INTERFACE_VERSION = $($(GNUSTEP_INSTANCE)_INTERFACE_VERSION)
endif
ifneq ($(BUILD_DLL),yes)
LIBRARY_FILE = $(LIBRARY_NAME_WITH_LIB)$(SHARED_LIBEXT)
VERSION_LIBRARY_FILE = $(LIBRARY_FILE).$(VERSION)
SONAME_LIBRARY_FILE = $(LIBRARY_FILE).$(INTERFACE_VERSION)
else # BUILD_DLL
# When you build a DLL, you have to install it in a directory which is
# in your PATH.
ifeq ($(DLL_INSTALLATION_DIR),)
DLL_INSTALLATION_DIR = $(GNUSTEP_TOOLS)/$(GNUSTEP_TARGET_LDIR)
endif
# When we build a DLL, we also pass -DBUILD_lib{library_name}_DLL=1 to
# the preprocessor. With the new DLL support, this is usually not
# needed; but in some cases some symbols are difficult and have to be
# exported/imported manually. For these cases, the library header
# files can use this preprocessor define to know that they are
# included during compilation of the library itself, or are being
# imported by external code. Typically with the new DLL support if a
# symbol can't be imported you have to mark it with
# __declspec(dllimport) when the library is not being compiled.
# __declspec(dllexport) is not particularly useful instead.
CLEAN_library_NAME = $(subst -,_,$(LIBRARY_NAME_WITH_LIB))
SHARED_CFLAGS += -DBUILD_$(CLEAN_library_NAME)_DLL=1
# LIBRARY_FILE is the import library, libgnustep-base.dll.a
LIBRARY_FILE = $(LIBRARY_NAME_WITH_LIB)$(DLL_LIBEXT)$(LIBEXT)
VERSION_LIBRARY_FILE = $(LIBRARY_FILE)
SONAME_LIBRARY_FILE = $(LIBRARY_FILE)
# LIB_LINK_DLL_FILE is the DLL library, gnustep-base-1.dll. Include
# the INTERFACE_VERSION in the DLL library name. Applications are
# linked explicitly to this INTERFACE_VERSION of the library; this
# works exactly in the same way as under Unix.
LIB_LINK_DLL_FILE = $(LIBRARY_NAME_WITHOUT_LIB)-$(subst .,_,$(INTERFACE_VERSION))$(DLL_LIBEXT)
endif # BUILD_DLL
else # following code for static libs
LIBRARY_FILE = $(LIBRARY_NAME_WITH_LIB)$(LIBEXT)
VERSION_LIBRARY_FILE = $(LIBRARY_FILE)
SONAME_LIBRARY_FILE = $(LIBRARY_FILE)
endif # shared
#
# Now prepare the variables which are used by target-dependent commands
# defined in target.make
#
LIB_LINK_OBJ_DIR = $(GNUSTEP_OBJ_DIR)
LIB_LINK_VERSION_FILE = $(VERSION_LIBRARY_FILE)
LIB_LINK_SONAME_FILE = $(SONAME_LIBRARY_FILE)
LIB_LINK_FILE = $(LIBRARY_FILE)
LIB_LINK_INSTALL_NAME = $(SONAME_LIBRARY_FILE)
LIB_LINK_INSTALL_DIR = $(FINAL_LIBRARY_INSTALL_DIR)
#
# Internal targets
#
#
# Compilation targets
#
internal-library-all_:: $(GNUSTEP_OBJ_DIR) \
$(GNUSTEP_OBJ_DIR)/$(VERSION_LIBRARY_FILE)
$(GNUSTEP_OBJ_DIR)/$(VERSION_LIBRARY_FILE): $(OBJ_FILES_TO_LINK)
$(ECHO_LINKING)$(LIB_LINK_CMD)$(END_ECHO)
#
# Install and uninstall targets
#
internal-library-install_:: internal-install-dirs \
internal-install-lib \
shared-instance-headers-install
# Depend on creating all the dirs
internal-install-dirs:: $(FINAL_LIBRARY_INSTALL_DIR) \
$(DLL_INSTALLATION_DIR)
# Now the rule to create each dir. NB: Nothing gets executed if the dir
# already exists
$(FINAL_LIBRARY_INSTALL_DIR):
$(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
$(DLL_INSTALLATION_DIR):
$(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
internal-install-lib::
$(ECHO_INSTALLING)if [ -f $(GNUSTEP_OBJ_DIR)/$(VERSION_LIBRARY_FILE) ]; then \
$(INSTALL_PROGRAM) $(GNUSTEP_OBJ_DIR)/$(VERSION_LIBRARY_FILE) \
$(FINAL_LIBRARY_INSTALL_DIR) ; \
$(AFTER_INSTALL_LIBRARY_CMD) \
fi$(END_ECHO)
ifeq ($(BUILD_DLL),yes)
# For DLLs, also install the DLL file.
internal-install-lib::
$(ECHO_INSTALLING)if [ -f $(GNUSTEP_OBJ_DIR)/$(LIB_LINK_DLL_FILE) ]; then \
$(INSTALL_PROGRAM) $(GNUSTEP_OBJ_DIR)/$(LIB_LINK_DLL_FILE) \
$(DLL_INSTALLATION_DIR) ; \
fi$(END_ECHO)
endif
internal-library-uninstall_:: shared-instance-headers-uninstall
$(ECHO_UNINSTALLING)rm -f $(FINAL_LIBRARY_INSTALL_DIR)/$(VERSION_LIBRARY_FILE) \
$(FINAL_LIBRARY_INSTALL_DIR)/$(LIBRARY_FILE) \
$(FINAL_LIBRARY_INSTALL_DIR)/$(SONAME_LIBRARY_FILE)$(END_ECHO)
ifeq ($(BUILD_DLL),yes)
# For DLLs, also remove the DLL file.
internal-library-uninstall_::
$(ECHO_UNINSTALLING)rm -f $(DLL_INSTALLATION_DIR)/$(LIB_LINK_DLL_FILE)$(END_ECHO)
endif
#
# Testing targets
#
internal-library-check::
#
# If the user makefile contains the command
# xxx_HAS_RESOURCE_BUNDLE = yes
# then we need to build a resource bundle for the library, and install it.
# You can then add resources to the library, any sort of, with the usual
# xxx_RESOURCE_FILES, xxx_LOCALIZED_RESOURCE_FILES, xxx_LANGUAGES, etc.
# The library resource bundle (and all resources inside it) can be
# accessed at runtime very comfortably, by using gnustep-base's
# [NSBundle +bundleForLibrary:version:].
#
ifeq ($($(GNUSTEP_INSTANCE)_HAS_RESOURCE_BUNDLE),yes)
# Include the rules to build resource bundles
GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH = $(GNUSTEP_BUILD_DIR)/$(GNUSTEP_INSTANCE)/Versions/$(INTERFACE_VERSION)/Resources/
# We want to install gnustep-base resources into
# GNUSTEP_LIBRARY/Libraries/gnustep-base/Versions/1.14/Resources/
# This is similar to a framework resource directory, which might be
# helpful in the future.
GNUSTEP_SHARED_BUNDLE_INSTALL_NAME = Resources
GNUSTEP_SHARED_BUNDLE_INSTALL_LOCAL_PATH = $(GNUSTEP_INSTANCE)/Versions/$(INTERFACE_VERSION)
GNUSTEP_SHARED_BUNDLE_INSTALL_PATH = $(GNUSTEP_LIBRARY)/Libraries/$(GNUSTEP_INSTANCE)/Versions/$(INTERFACE_VERSION)
include $(GNUSTEP_MAKEFILES)/Instance/Shared/bundle.make
internal-library-all_:: shared-instance-bundle-all
internal-library-copy_into_dir:: shared-instance-bundle-copy_into_dir
$(GNUSTEP_LIBRARY)/Libraries/$(GNUSTEP_INSTANCE)/Versions/$(INTERFACE_VERSION):
$(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
internal-library-install_:: $(GNUSTEP_LIBRARY)/Libraries/$(GNUSTEP_INSTANCE)/Versions/$(INTERFACE_VERSION) \
shared-instance-bundle-install
internal-library-uninstall:: shared-instance-bundle-uninstall
endif
include $(GNUSTEP_MAKEFILES)/Instance/Shared/strings.make

View file

@ -1,72 +0,0 @@
#
# Instance/objc.make
#
# Instance Makefile rules to build ObjC-based (but not GNUstep) programs.
#
# Copyright (C) 1997, 2001 Free Software Foundation, Inc.
#
# Author: Scott Christley <scottc@net-community.com>
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The name of the ObjC program(s) is in the OBJC_PROGRAM_NAME variable.
#
# xxx We need to prefix the target name when cross-compiling
#
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
.PHONY: internal-objc_program-all_ \
internal-objc_program-install_ \
internal-objc_program-uninstall_
# This is the directory where the objc programs get installed. If you
# don't specify a directory they will get installed in the Tools
# directory in GNUSTEP_LOCAL_ROOT.
ifneq ($($(GNUSTEP_INSTANCE)_INSTALL_DIR),)
OBJC_PROGRAM_INSTALL_DIR = $($(GNUSTEP_INSTANCE)_INSTALL_DIR)
endif
ifeq ($(OBJC_PROGRAM_INSTALL_DIR),)
OBJC_PROGRAM_INSTALL_DIR = $(GNUSTEP_TOOLS)
endif
ALL_OBJC_LIBS = \
$(ALL_LIB_DIRS) \
$(ADDITIONAL_OBJC_LIBS) $(AUXILIARY_OBJC_LIBS) $(OBJC_LIBS) \
$(TARGET_SYSTEM_LIBS)
internal-objc_program-all_:: \
$(GNUSTEP_OBJ_DIR) \
$(GNUSTEP_OBJ_DIR)/$(GNUSTEP_INSTANCE)$(EXEEXT)
$(GNUSTEP_OBJ_DIR)/$(GNUSTEP_INSTANCE)$(EXEEXT): $(OBJ_FILES_TO_LINK)
$(ECHO_LINKING)$(LD) $(ALL_LDFLAGS) $(CC_LDFLAGS) -o $(LDOUT)$@ \
$(OBJ_FILES_TO_LINK) $(ALL_OBJC_LIBS)$(END_ECHO)
internal-objc_program-install_:: $(OBJC_PROGRAM_INSTALL_DIR)/$(GNUSTEP_TARGET_LDIR)
$(ECHO_INSTALLING)$(INSTALL_PROGRAM) -m 0755 \
$(GNUSTEP_OBJ_DIR)/$(GNUSTEP_INSTANCE)$(EXEEXT) \
$(OBJC_PROGRAM_INSTALL_DIR)/$(GNUSTEP_TARGET_LDIR)$(END_ECHO)
$(OBJC_PROGRAM_INSTALL_DIR)/$(GNUSTEP_TARGET_LDIR):
$(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
internal-objc_program-uninstall_::
$(ECHO_UNINSTALLING)rm -f $(OBJC_PROGRAM_INSTALL_DIR)/$(GNUSTEP_TARGET_LDIR)/$(GNUSTEP_INSTANCE)$(EXEEXT)$(END_ECHO)
include $(GNUSTEP_MAKEFILES)/Instance/Shared/strings.make

View file

@ -1,170 +0,0 @@
#
# Instance/palette.make
#
# Instance Makefile rules to build GNUstep-based palettes.
#
# Copyright (C) 1999 Free Software Foundation, Inc.
#
# Author: Scott Christley <scottc@net-community.com>
# Author: Ovidiu Predescu <ovidiu@net-community.com>
# Author: Richard Frith-Macdonald <richard@brainstorm.co.uk>
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
# The name of the palette is in the PALETTE_NAME variable.
# The list of palette resource file are in xxx_RESOURCE_FILES
# The list of palette resource directories are in xxx_RESOURCE_DIRS
# The name of the palette class is xxx_PRINCIPAL_CLASS
# The name of the palette nib is xxx_MAIN_MODEL_FILE
# The name of the palette icon is xxx_PALETTE_ICON
# The name of a file containing info.plist entries to be inserted into
# Info-gnustep.plist (if any) is xxxInfo.plist where xxx is the palette name
# The name of a file containing palette.table entries to be inserted into
# palette.table (if any) is xxxpalette.table where xxx is the palette name
#
.PHONY: internal-palette-all_ \
internal-palette-install_ \
internal-palette-uninstall_ \
internal-palette-copy_into_dir
# On windows, this is unfortunately required.
ifeq ($(BUILD_DLL), yes)
LINK_PALETTE_AGAINST_ALL_LIBS = yes
endif
# On Apple, two-level namespaces require all symbols in bundles
# to be resolved at link time. Also on gnu/darwin
ifeq ($(CC_BUNDLE), yes)
LINK_PALETTE_AGAINST_ALL_LIBS = yes
endif
ifeq ($(LINK_PALETTE_AGAINST_ALL_LIBS), yes)
PALETTE_LIBS += $(ADDITIONAL_GUI_LIBS) $(AUXILIARY_GUI_LIBS) $(BACKEND_LIBS) \
$(GUI_LIBS) $(ADDITIONAL_TOOL_LIBS) $(AUXILIARY_TOOL_LIBS) \
$(FND_LIBS) $(ADDITIONAL_OBJC_LIBS) $(AUXILIARY_OBJC_LIBS) $(OBJC_LIBS) \
$(SYSTEM_LIBS) $(TARGET_SYSTEM_LIBS)
endif
ALL_PALETTE_LIBS = \
$(ALL_LIB_DIRS) \
$(PALETTE_LIBS)
ifeq ($(BUILD_DLL),yes)
PALETTE_OBJ_EXT = $(DLL_LIBEXT)
endif
PALETTE_DIR_NAME = $(GNUSTEP_INSTANCE).palette
PALETTE_DIR = $(GNUSTEP_BUILD_DIR)/$(PALETTE_DIR_NAME)
PALETTE_FILE_NAME = $(PALETTE_DIR_NAME)/$(GNUSTEP_TARGET_LDIR)/$(PALETTE_NAME)$(PALETTE_OBJ_EXT)
PALETTE_FILE = $(GNUSTEP_BUILD_DIR)/$(PALETTE_FILE_NAME)
ifneq ($($(GNUSTEP_INSTANCE)_INSTALL_DIR),)
PALETTE_INSTALL_DIR = $($(GNUSTEP_INSTANCE)_INSTALL_DIR)
endif
ifeq ($(PALETTE_INSTALL_DIR),)
PALETTE_INSTALL_DIR = $(GNUSTEP_PALETTES)
endif
GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH = $(PALETTE_DIR)/Resources
GNUSTEP_SHARED_BUNDLE_INSTALL_NAME = $(PALETTE_DIR_NAME)
GNUSTEP_SHARED_BUNDLE_INSTALL_LOCAL_PATH = .
GNUSTEP_SHARED_BUNDLE_INSTALL_PATH = $(PALETTE_INSTALL_DIR)
include $(GNUSTEP_MAKEFILES)/Instance/Shared/bundle.make
internal-palette-all_:: $(GNUSTEP_OBJ_DIR) \
$(PALETTE_DIR)/Resources \
$(PALETTE_DIR)/$(GNUSTEP_TARGET_LDIR) \
$(PALETTE_FILE) \
$(PALETTE_DIR)/Resources/Info-gnustep.plist \
$(PALETTE_DIR)/Resources/palette.table \
shared-instance-bundle-all
$(PALETTE_DIR)/$(GNUSTEP_TARGET_LDIR):
$(ECHO_CREATING)$(MKDIRS) $(PALETTE_DIR)/$(GNUSTEP_TARGET_LDIR)$(END_ECHO)
# Standard bundle build using the rules for this target
$(PALETTE_FILE) : $(OBJ_FILES_TO_LINK)
$(ECHO_LINKING)$(BUNDLE_LD) $(BUNDLE_LDFLAGS) \
-o $(LDOUT)$(PALETTE_FILE) \
$(OBJ_FILES_TO_LINK) $(ALL_LDFLAGS) \
$(BUNDLE_LIBFLAGS) $(ALL_PALETTE_LIBS)$(END_ECHO)
PRINCIPAL_CLASS = $(strip $($(GNUSTEP_INSTANCE)_PRINCIPAL_CLASS))
ifeq ($(PRINCIPAL_CLASS),)
PRINCIPAL_CLASS = $(GNUSTEP_INSTANCE)
endif
PALETTE_ICON = $($(GNUSTEP_INSTANCE)_PALETTE_ICON)
ifeq ($(PALETTE_ICON),)
PALETTE_ICON = $(GNUSTEP_INSTANCE)
endif
# Depend on xxxInfo.plist but only if it exists.
GNUSTEP_PLIST_DEPEND = $(wildcard $(GNUSTEP_INSTANCE)Info.plist)
# FIXME - xxxInfo.plist in this case is not really a plist!
$(PALETTE_DIR)/Resources/Info-gnustep.plist: $(PALETTE_DIR)/Resources $(GNUSTEP_PLIST_DEPEND)
$(ECHO_CREATING)(echo "{"; echo ' NOTE = "Automatically generated, do not edit!";'; \
echo " NSExecutable = \"$(PALETTE_NAME)$(PALETTE_OBJ_EXT)\";"; \
if [ -r "$(GNUSTEP_INSTANCE)Info.plist" ]; then \
cat $(GNUSTEP_INSTANCE)Info.plist; \
fi; \
echo "}") >$@$(END_ECHO)
MAIN_MODEL_FILE = $(strip $(subst .gmodel,,$(subst .gorm,,$(subst .nib,,$($(GNUSTEP_INSTANCE)_MAIN_MODEL_FILE)))))
# Depend on xxxpalette.table but only if it exists.
PALETTE_TABLE_DEPEND = $(wildcard $(GNUSTEP_INSTANCE)palette.table)
# FIXME - use stamp.make to depend on the value of the variables
# MAIN_MODEL_FILE, PRINCIPAL_CLASS and PALETTE_ICON
$(PALETTE_DIR)/Resources/palette.table: $(PALETTE_DIR)/Resources $(PALETTE_TABLE_DEPEND)
$(ECHO_CREATING)(echo "{";\
echo ' NOTE = "Automatically generated, do not edit!";'; \
echo " NibFile = \"$(MAIN_MODEL_FILE)\";"; \
echo " Class = \"$(PRINCIPAL_CLASS)\";"; \
echo " Icon = \"$(PALETTE_ICON)\";"; \
echo "}"; \
if [ -r "$(GNUSTEP_INSTANCE)palette.table" ]; then \
cat $(GNUSTEP_INSTANCE)palette.table; \
fi; \
) >$@$(END_ECHO)
internal-palette-copy_into_dir:: shared-instance-bundle-copy_into_dir
#
# Install targets
#
$(PALETTE_INSTALL_DIR):
$(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
internal-palette-install_:: shared-instance-bundle-install
ifeq ($(strip),yes)
$(ECHO_STRIPPING)$(STRIP) $(PALETTE_INSTALL_DIR)/$(PALETTE_FILE_NAME)$(END_ECHO)
endif
internal-palette-uninstall_:: shared-instance-bundle-uninstall
include $(GNUSTEP_MAKEFILES)/Instance/Shared/strings.make

View file

@ -1,258 +0,0 @@
# -*-makefile-*-
# Instace/resource-set.make
#
# Instance makefile rules to install resource files
#
# Copyright (C) 2002 Free Software Foundation, Inc.
#
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
#
# This is used to install a bunch of resource files somewhere. It is
# different from a bundle without resources; in a bundle without
# resources, we first create the bundle in the build directory, then
# copy the build to the install dir, overwriting anything already
# there. This instead will install the separate resource files
# directly in the installation directory; it's more efficient as it
# doesn't create a local bundle, and it doesn't overwrite an existing
# bundle in the installation directory.
#
#
# The name of the set of resources is in the RESOURCE_SET_NAME variable.
# The list of resource files/dirs is in xxx_RESOURCE_FILES
# The list of resource directories to create are in xxx_RESOURCE_DIRS
# The directory in which to install the resources is in the
# xxx_INSTALL_DIR
# The directory in which the resources are is in the
# xxx_RESOURCE_FILES_DIR (defaults to ./ if omitted)
# The list of LANGUAGES is in the xxx_LANGUAGES variable.
# The list of localized files/dirs to be read from yyy.lproj and copied
# into $(RESOURCE_FILES_INSTALL_DIR)/yyy.lproj for each language yyy
# is in the xxx_LOCALIZED_RESOURCE_FILES variable.
# The list of localized dirs to be created empty inside each
# $(RESOURCE_FILES_INSTALL_DIR)/yyy.lproj for each language yyy
# is in the xxx_LOCALIZED_RESOURCE_DIRS variable.
.PHONY: internal-resource_set-install_ \
internal-resource_set-uninstall_
#
# Determine where to install. By default, install into GNUSTEP_RESOURCES/GNUSTEP_INSTANCE
#
ifneq ($($(GNUSTEP_INSTANCE)_INSTALL_DIR),)
RESOURCE_FILES_INSTALL_DIR = $($(GNUSTEP_INSTANCE)_INSTALL_DIR)
endif
# Use the old xxx_RESOURCE_FILES_INSTALL_DIR setting only if the new
# one is not available. If you need your makefile to be compatible
# with both old and new versions of make, you can use both settings.
ifeq ($($(GNUSTEP_INSTANCE)_INSTALL_DIR),)
ifneq ($($(GNUSTEP_INSTANCE)_RESOURCE_FILES_INSTALL_DIR),)
# This is deprecated because we need to prepend GNUSTEP_INSTALLATION_DIR to it, which
# is deprecated. This was deprecated on 12 Feb 2007.
$(warning xxx_RESOURCE_FILES_INSTALL_DIR is deprecated, please use xxx_INSTALL_DIR instead)
RESOURCE_FILES_INSTALL_DIR = $(GNUSTEP_INSTALLATION_DIR)/$($(GNUSTEP_INSTANCE)_RESOURCE_FILES_INSTALL_DIR)
endif
endif
ifeq ($(RESOURCE_FILES_INSTALL_DIR),)
RESOURCE_FILES_INSTALL_DIR = $(GNUSTEP_RESOURCES)/$(GNUSTEP_INSTANCE)
endif
# Determine the dir to take the resources from
RESOURCE_FILES_DIR = $($(GNUSTEP_INSTANCE)_RESOURCE_FILES_DIR)
ifeq ($(RESOURCE_FILES_DIR),)
RESOURCE_FILES_DIR = ./
endif
# Determine the list of resource files
RESOURCE_FILES = $($(GNUSTEP_INSTANCE)_RESOURCE_FILES)
RESOURCE_DIRS = $($(GNUSTEP_INSTANCE)_RESOURCE_DIRS)
ifneq ($(RESOURCE_DIRS),)
# Rule to build the additional installation dirs
$(addprefix $(RESOURCE_FILES_INSTALL_DIR)/,$(RESOURCE_DIRS)):
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
ifneq ($(CHOWN_TO),)
$(ECHO_CHOWNING)$(CHOWN) -R $(CHOWN_TO) $@$(END_ECHO)
endif
endif
# Rule to build the installation dir
$(RESOURCE_FILES_INSTALL_DIR):
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
ifneq ($(CHOWN_TO),)
$(ECHO_CHOWNING)$(CHOWN) -R $(CHOWN_TO) $@$(END_ECHO)
endif
# Determine the list of languages
override LANGUAGES = $($(GNUSTEP_INSTANCE)_LANGUAGES)
ifeq ($(LANGUAGES),)
override LANGUAGES = English
endif
# Determine the list of localized resource files
LOCALIZED_RESOURCE_FILES = $($(GNUSTEP_INSTANCE)_LOCALIZED_RESOURCE_FILES)
LOCALIZED_RESOURCE_DIRS = $($(GNUSTEP_INSTANCE)_LOCALIZED_RESOURCE_DIRS)
ifneq ($(LOCALIZED_RESOURCE_DIRS),)
# The following expression will create all the
# RESOURCE_FILES_INSTALL_DIR/LANGUAGE/LOCALIZED_RESOURCE_DIR that we
# need to build.
$(foreach LANGUAGE,$(LANGUAGES),$(addprefix $(RESOURCE_FILES_INSTALL_DIR)/$(LANGUAGE), $(LOCALIZED_RESOURCE_DIRS))):
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
ifneq ($(CHOWN_TO),)
$(ECHO_CHOWNING)$(CHOWN) -R $(CHOWN_TO) $@$(END_ECHO)
endif
endif
#
# We provide two different algorithms of installing resource files.
#
ifeq ($(GNUSTEP_DEVELOPER),)
# Standard one - just run a subshell and loop, and install everything.
internal-resource_set-install_: \
$(RESOURCE_FILES_INSTALL_DIR) \
$(addprefix $(RESOURCE_FILES_INSTALL_DIR)/,$(RESOURCE_DIRS)) \
$(foreach LANGUAGE,$(LANGUAGES),$(addprefix $(RESOURCE_FILES_INSTALL_DIR)/$(LANGUAGE), $(LOCALIZED_RESOURCE_DIRS)))
ifneq ($(RESOURCE_FILES),)
$(ECHO_NOTHING)for f in $(RESOURCE_FILES); do \
if [ -f $$f -o -d $$f ]; then \
cp -fr $(RESOURCE_FILES_DIR)/$$f \
$(RESOURCE_FILES_INSTALL_DIR)/$$f; \
else \
echo "Warning: $$f not found - ignoring"; \
fi; \
done$(END_ECHO)
ifneq ($(CHOWN_TO),)
$(ECHO_CHOWNING)for f in $(RESOURCE_FILES); do \
if [ -f $$f -o -d $$f ]; then \
$(CHOWN) -R $(CHOWN_TO) $(RESOURCE_FILES_INSTALL_DIR)/$$f; \
fi; \
done$(END_ECHO)
endif
endif
ifneq ($(LOCALIZED_RESOURCE_FILES),)
$(ECHO_NOTHING)for l in $(LANGUAGES); do \
if [ -d $$l.lproj ]; then \
$(MKINSTALLDIRS) $(RESOURCE_FILES_INSTALL_DIR)/$$l.lproj; \
for f in $(LOCALIZED_RESOURCE_FILES); do \
if [ -f $$l.lproj/$$f -o -d $$l.lproj/$$f ]; then \
cp -fr $$l.lproj/$$f \
$(RESOURCE_FILES_INSTALL_DIR)/$$l.lproj; \
else \
echo "Warning: $$l.lproj/$$f not found - ignoring"; \
fi; \
done; \
else \
echo "Warning: $$l.lproj not found - ignoring"; \
fi; \
done$(END_ECHO)
ifneq ($(CHOWN_TO),)
$(ECHO_CHOWNING)for l in $(LANGUAGES); do \
if [ -d $$l.lproj ]; then \
$(CHOWN) -R $(CHOWN_TO) $(RESOURCE_FILES_INSTALL_DIR)/$$l.lproj; \
for f in $(LOCALIZED_RESOURCE_FILES); do \
if [ -f $$l.lproj/$$f -o -d $$l.lproj/$$f ]; then \
$(CHOWN) -R $(CHOWN_TO) $(RESOURCE_FILES_INSTALL_DIR)/$$l.lproj/$$f; \
fi; \
done; \
fi; \
done$(END_ECHO)
endif
endif
else # Following code turned on by setting GNUSTEP_DEVELOPER=YES in the shell
# TODO/FIXME: Update the code; implement proper
# LOCALIZED_RESOURCE_FILES that also allows directories etc.
.PHONY: internal-resource-set-install-languages
# One optimized for recurrent installations during development - this
# rule installs a single file only if strictly needed
$(RESOURCE_FILES_INSTALL_DIR)/% : $(RESOURCE_FILES_DIR)/%
$(ECHO_NOTHING)cp -fr $< $(RESOURCE_FILES_DIR)$(END_ECHO)
ifneq ($(CHOWN_TO),)
$(ECHO_CHOWNING)$(CHOWN) -R $(CHOWN_TO) $@$(END_ECHO)
endif
# This rule depends on having installed all files
internal-resource_set-install_: \
$(RESOURCE_FILES_INSTALL_DIR) \
$(addprefix $(RESOURCE_FILES_INSTALL_DIR)/,$(RESOURCE_DIRS)) \
$(addprefix $(RESOURCE_FILES_INSTALL_DIR)/,$(RESOURCE_FILES)) \
internal-resource-set-install-languages
ifeq ($(LOCALIZED_RESOURCE_FILES),)
internal-resource-set-install-languages:
else
# Rule to build the language installation directories
$(addsuffix .lproj,$(addprefix $(RESOURCE_FILES_INSTALL_DIR)/,$(LANGUAGES))):
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
# install the localized resources, checking the installation date by
# using test -nt ... this doesn't seem to be easy to do using make
# rules because we want to issue a warning if the directory/file can't
# be found, rather than aborting with an error as make would do.
internal-resource-set-install-languages: \
$(addsuffix .lproj,$(addprefix $(RESOURCE_FILES_INSTALL_DIR)/,$(LANGUAGES)))
$(ECHO_NOTHING)for l in $(LANGUAGES); do \
if [ -d $$l.lproj ]; then \
for f in $(LOCALIZED_RESOURCE_FILES); do \
if [ -f $$l.lproj/$$f ]; then \
if [ $$l.lproj -nt $(RESOURCE_FILES_INSTALL_DIR)/$$l.lproj/$$f ]; then \
$(INSTALL_DATA) $$l.lproj/$$f \
$(RESOURCE_FILES_INSTALL_DIR)/$$l.lproj; \
fi; \
else \
echo "Warning: $$l.lproj/$$f not found - ignoring"; \
fi; \
done; \
else \
echo "Warning: $$l.lproj not found - ignoring"; \
fi; \
done$(END_ECHO)
endif # LOCALIZED_RESOURCE_FILES
endif
internal-resource_set-uninstall_:
ifneq ($(LOCALIZED_RESOURCE_FILES),)
-$(ECHO_NOTHING)for language in $(LANGUAGES); do \
for file in $(LOCALIZED_RESOURCE_FILES); do \
rm -rf $(RESOURCE_FILES_INSTALL_DIR)/$$language.lproj/$$file;\
done; \
rmdir $(RESOURCE_FILES_INSTALL_DIR)/$$language.lproj; \
done$(END_ECHO)
endif
ifneq ($(RESOURCE_FILES),)
$(ECHO_NOTHING)for file in $(RESOURCE_FILES); do \
rm -rf $(RESOURCE_FILES_INSTALL_DIR)/$$file ; \
done$(END_ECHO)
-rmdir $(RESOURCE_FILES_INSTALL_DIR)
endif

View file

@ -1,364 +0,0 @@
#
# rules.make
#
# Makefile rules for the Instance invocation.
#
# Copyright (C) 1997, 2001, 2002 Free Software Foundation, Inc.
#
# Author: Scott Christley <scottc@net-community.com>
# Author: Ovidiu Predescu <ovidiu@net-community.com>
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# Every project should have its internal-xxx-all depend first on
# before-$(GNUSTEP_INSTANCE)-all, and last on
# after-$(GNUSTEP_INSTANCE)-all. We declare them here, empty, so that
# the user can add them if he wants, but if he doesn't, make doesn't
# complain about missing targets.
# NB: internal-$(GNUSTEP_TYPE)-all_ should not be declared .PHONY
# here, because it's not implemented here. (example of how could go
# wrong otherwise: if say internal-clibrary-all_ depends on
# internal-library-all_, both of them should be declared .PHONY, while
# here we would only declare one of them .PHONY, so it should be done
# by the project specific makefile fragments).
.PHONY: \
internal-precompile-headers \
before-$(GNUSTEP_INSTANCE)-all after-$(GNUSTEP_INSTANCE)-all \
internal-$(GNUSTEP_TYPE)-all \
before-$(GNUSTEP_INSTANCE)-install after-$(GNUSTEP_INSTANCE)-install \
internal-$(GNUSTEP_TYPE)-install \
before-$(GNUSTEP_INSTANCE)-uninstall after-$(GNUSTEP_INSTANCE)-uninstall \
internal-$(GNUSTEP_TYPE)-uninstall
# By adding the line
# xxx_COPY_INTO_DIR = ../Vanity.framework/Resources
# to you GNUmakefile, you cause the after-xxx-all:: stage of
# compilation of xxx to copy the created stuff into the *local*
# directory ../Vanity.framework/Resources (this path should be
# relative). It also disables installation of xxx.
#
# This is normally used, for example, to bundle a tool into a
# framework. You compile the framework, then the tool, then you can
# request the tool to be copied into the framework, becoming part of
# the framework (it is installed with the framework etc).
#
COPY_INTO_DIR = $(strip $($(GNUSTEP_INSTANCE)_COPY_INTO_DIR))
# If COPY_INTO_DIR is non-empty, we'll execute below an additional
# target at the end of compilation:
# internal-$(GNUSTEP_TYPE)-copy_into_dir
# Centrally disable standard installation if COPY_INTO_DIR is non-empty.
ifneq ($(COPY_INTO_DIR),)
$(GNUSTEP_INSTANCE)_STANDARD_INSTALL = no
endif
before-$(GNUSTEP_INSTANCE)-all::
after-$(GNUSTEP_INSTANCE)-all::
# Automatically run before-$(GNUSTEP_INSTANCE)-all before building,
# and after-$(GNUSTEP_INSTANCE)-all after building.
# The project-type specific makefile instance fragment only needs to provide
# the internal-$(GNUSTEP_TYPE)-all_ rule.
ifeq ($(COPY_INTO_DIR),)
internal-$(GNUSTEP_TYPE)-all:: internal-precompile-headers \
before-$(GNUSTEP_INSTANCE)-all \
internal-$(GNUSTEP_TYPE)-all_ \
after-$(GNUSTEP_INSTANCE)-all
else
internal-$(GNUSTEP_TYPE)-all:: internal-precompile-headers \
before-$(GNUSTEP_INSTANCE)-all \
internal-$(GNUSTEP_TYPE)-all_ \
after-$(GNUSTEP_INSTANCE)-all \
internal-$(GNUSTEP_TYPE)-copy_into_dir
# To copy into a dir, we always have to first make sure the dir exists :-)
$(COPY_INTO_DIR):
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
# The specific project-type makefiles will add more commands.
internal-$(GNUSTEP_TYPE)-copy_into_dir:: $(COPY_INTO_DIR)
endif
before-$(GNUSTEP_INSTANCE)-install::
after-$(GNUSTEP_INSTANCE)-install::
before-$(GNUSTEP_INSTANCE)-uninstall::
after-$(GNUSTEP_INSTANCE)-uninstall::
# By adding the line
# xxxx_STANDARD_INSTALL = no
# to your GNUmakefile, you can disable the standard installation code
# for a certain GNUSTEP_INSTANCE. This can be useful if you are
# installing manually in some other way (or for some other reason you
# don't want installation to be performed ever) and don't want the
# standard installation to be performed. Please note that
# before-xxx-install and after-xxx-install are still executed, so if
# you want, you can add your code in those targets to perform your
# custom installation.
ifeq ($($(GNUSTEP_INSTANCE)_STANDARD_INSTALL),no)
internal-$(GNUSTEP_TYPE)-install:: before-$(GNUSTEP_INSTANCE)-install \
after-$(GNUSTEP_INSTANCE)-install
@echo "Skipping standard installation of $(GNUSTEP_INSTANCE) as requested by makefile"
internal-$(GNUSTEP_TYPE)-uninstall:: before-$(GNUSTEP_INSTANCE)-uninstall \
after-$(GNUSTEP_INSTANCE)-uninstall
@echo "Skipping standard uninstallation of $(GNUSTEP_INSTANCE) as requested by makefile"
else
# By adding an ADDITIONAL_INSTALL_DIRS variable (or xxx_INSTALL_DIRS)
# you can request additional installation directories to be created
# before the first installation target is executed.
ADDITIONAL_INSTALL_DIRS += $($(GNUSTEP_INSTANCE)_INSTALL_DIRS)
$(ADDITIONAL_INSTALL_DIRS):
$(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
internal-$(GNUSTEP_TYPE)-install:: $(ADDITIONAL_INSTALL_DIRS) \
before-$(GNUSTEP_INSTANCE)-install \
internal-$(GNUSTEP_TYPE)-install_ \
after-$(GNUSTEP_INSTANCE)-install
# It would be nice to remove ADDITIONAL_INSTALL_DIRS here, if empty.
internal-$(GNUSTEP_TYPE)-uninstall:: before-$(GNUSTEP_INSTANCE)-uninstall \
internal-$(GNUSTEP_TYPE)-uninstall_ \
after-$(GNUSTEP_INSTANCE)-uninstall
endif
# before-$(GNUSTEP_INSTANCE)-clean and similar for after and distclean
# are not supported -- they wouldn't be executed most of the times, since
# most of the times we don't perform an Instance invocation at all on
# make clean or make distclean.
#
# The list of Objective-C source files to be compiled
# are in the OBJC_FILES variable.
#
# The list of C source files to be compiled
# are in the C_FILES variable.
#
# The list of C++ source files to be compiled
# are in the CC_FILES variable.
#
# The list of Objective-C++ source files to be compiled
# are in the OBJCC_FILES variable.
#
# The list of PSWRAP source files to be compiled
# are in the PSWRAP_FILES variable.
#
# The list of JAVA source files to be compiled
# are in the JAVA_FILES variable.
#
# The list of JAVA source files from which to generate jni headers
# are in the JAVA_JNI_FILES variable.
#
# The list of WINDRES source files to be compiled
# are in the WINDRES_FILES variable.
#
#
# Please note the subtle difference:
#
# At `user' level (ie, in the user's GNUmakefile),
# the SUBPROJECTS variable is reserved for use with aggregate.make;
# the xxx_SUBPROJECTS variable is reserved for use with subproject.make.
#
# This separation *must* be enforced strictly, because nothing prevents
# a GNUmakefile from including both aggregate.make and subproject.make!
#
ifneq ($($(GNUSTEP_INSTANCE)_SUBPROJECTS),)
SUBPROJECT_OBJ_FILES = $(foreach d, $($(GNUSTEP_INSTANCE)_SUBPROJECTS), \
$(addprefix $(GNUSTEP_BUILD_DIR)/$(d)/, $(GNUSTEP_OBJ_DIR_NAME)/$(SUBPROJECT_PRODUCT)))
endif
OBJC_OBJS = $(patsubst %.m,%$(OEXT),$($(GNUSTEP_INSTANCE)_OBJC_FILES))
OBJC_OBJ_FILES = $(addprefix $(GNUSTEP_OBJ_DIR)/,$(OBJC_OBJS))
OBJCC_OBJS = $(patsubst %.mm,%$(OEXT),$($(GNUSTEP_INSTANCE)_OBJCC_FILES))
OBJCC_OBJ_FILES = $(addprefix $(GNUSTEP_OBJ_DIR)/,$(OBJCC_OBJS))
JAVA_OBJS = $(patsubst %.java,%.class,$($(GNUSTEP_INSTANCE)_JAVA_FILES))
JAVA_OBJ_FILES = $(JAVA_OBJS)
JAVA_JNI_OBJS = $(patsubst %.java,%.h,$($(GNUSTEP_INSTANCE)_JAVA_JNI_FILES))
JAVA_JNI_OBJ_FILES = $(JAVA_JNI_OBJS)
PSWRAP_C_FILES = $(patsubst %.psw,%.c,$($(GNUSTEP_INSTANCE)_PSWRAP_FILES))
PSWRAP_H_FILES = $(patsubst %.psw,%.h,$($(GNUSTEP_INSTANCE)_PSWRAP_FILES))
PSWRAP_OBJS = $(patsubst %.psw,%$(OEXT),$($(GNUSTEP_INSTANCE)_PSWRAP_FILES))
PSWRAP_OBJ_FILES = $(addprefix $(GNUSTEP_OBJ_DIR)/,$(PSWRAP_OBJS))
C_OBJS = $(patsubst %.c,%$(OEXT),$($(GNUSTEP_INSTANCE)_C_FILES))
C_OBJ_FILES = $(PSWRAP_OBJ_FILES) $(addprefix $(GNUSTEP_OBJ_DIR)/,$(C_OBJS))
# C++ files might end in .C, .cc, .cpp, .cxx, .cp so we replace multiple times
CC_OBJS = $(patsubst %.cc,%$(OEXT),\
$(patsubst %.C,%$(OEXT),\
$(patsubst %.cp,%$(OEXT),\
$(patsubst %.cpp,%$(OEXT),\
$(patsubst %.cxx,%$(OEXT),$($(GNUSTEP_INSTANCE)_CC_FILES))))))
CC_OBJ_FILES = $(addprefix $(GNUSTEP_OBJ_DIR)/,$(CC_OBJS))
ifeq ($(findstring mingw32, $(GNUSTEP_TARGET_OS)), mingw32)
WINDRES_OBJS = $(patsubst %.rc,%$(OEXT),$($(GNUSTEP_INSTANCE)_WINDRES_FILES))
WINDRES_OBJ_FILES = $(addprefix $(GNUSTEP_OBJ_DIR)/,$(WINDRES_OBJS))
else
ifeq ($(findstring cygwin, $(GNUSTEP_TARGET_OS)), cygwin)
WINDRES_OBJS = $(patsubst %.rc,%$(OEXT),$($(GNUSTEP_INSTANCE)_WINDRES_FILES))
WINDRES_OBJ_FILES = $(addprefix $(GNUSTEP_OBJ_DIR)/,$(WINDRES_OBJS))
else
WINDRES_OBJ_FILES =
endif
endif
OBJ_FILES = $($(GNUSTEP_INSTANCE)_OBJ_FILES)
# OBJ_FILES_TO_LINK is the set of all .o files which will be linked
# into the result - please note that you can add to OBJ_FILES_TO_LINK
# by defining manually some special xxx_OBJ_FILES for your
# tool/app/whatever. Strip the variable so that by comparing
# OBJ_FILES_TO_LINK to '' we know if there is a link stage to be
# performed at all (useful for example in bundles which can contain an
# object file, or not).
OBJ_FILES_TO_LINK = $(strip $(C_OBJ_FILES) $(OBJC_OBJ_FILES) $(CC_OBJ_FILES) $(OBJCC_OBJ_FILES) $(WINDRES_OBJ_FILES) $(SUBPROJECT_OBJ_FILES) $(OBJ_FILES))
ifeq ($(AUTO_DEPENDENCIES),yes)
ifneq ($(strip $(OBJ_FILES_TO_LINK)),)
-include $(addsuffix .d, $(basename $(OBJ_FILES_TO_LINK)))
endif
endif
# The following is for precompiled headers, only executed if GCC
# supports them.
ifeq ($(GCC_WITH_PRECOMPILED_HEADERS),yes)
#
# The following are useful to speed up compilation by using
# precompiled headers. If GCC_WITH_PRECOMPILED_HEADERS is '', then
# these variables do nothing. If GCC_WITH_PRECOMPILED_HEADERS is yes,
# then these variables cause all the listed headers to be precompiled
# with the specified compiler before the compilation of the main files
# starts; the precompiled files will be put in the
# GNUSTEP_OBJ_DIR/PrecompiledHeaders/{language} directory, and
# -I$GNUSTEP_OBJ_DIR/PrecompiledHeaders/{language} -Winvalid-pch will
# automatically be added to the command line to make sure they are
# used.
#
# The list of C header files to be precompiled is in the
# C_PRECOMPILED_HEADERS variable
#
# The list of Objective-C header files to be precompiled is in the
# OBJC_PRECOMPILED_HEADERS variable
#
# The list of C++ header files to be precompiled is in the
# CC_PRECOMPILED_HEADERS variable
#
# The list of Objective-C++ header files to be precompiled is in the
# OBJCC_PRECOMPILED_HEADERS variable
#
C_PRECOMPILED_OBJS = $(patsubst %.h,%.h.gch,$($(GNUSTEP_INSTANCE)_C_PRECOMPILED_HEADERS))
C_PRECOMPILED_OBJ_FILES = $(addprefix $(GNUSTEP_OBJ_DIR)/PrecompiledHeaders/C/,$(C_PRECOMPILED_OBJS))
OBJC_PRECOMPILED_OBJS = $(patsubst %.h,%.h.gch,$($(GNUSTEP_INSTANCE)_OBJC_PRECOMPILED_HEADERS))
OBJC_PRECOMPILED_OBJ_FILES = $(addprefix $(GNUSTEP_OBJ_DIR)/PrecompiledHeaders/ObjC/,$(OBJC_PRECOMPILED_OBJS))
CC_PRECOMPILED_OBJS = $(patsubst %.h,%.h.gch,$($(GNUSTEP_INSTANCE)_CC_PRECOMPILED_HEADERS))
CC_PRECOMPILED_OBJ_FILES = $(addprefix $(GNUSTEP_OBJ_DIR)/PrecompiledHeaders/CC/,$(CC_PRECOMPILED_OBJS))
OBJCC_PRECOMPILED_OBJS = $(patsubst %.h,%.h.gch,$($(GNUSTEP_INSTANCE)_OBJCC_PRECOMPILED_HEADERS))
OBJCC_PRECOMPILED_OBJ_FILES = $(addprefix $(GNUSTEP_OBJ_DIR)/PrecompiledHeaders/ObjCC/,$(OBJCC_PRECOMPILED_OBJS))
# If any of those variables is not empty
ifneq ($(C_PRECOMPILED_OBJ_FILES)$(OBJC_PRECOMPILED_OBJ_FILES)$(CC_PRECOMPILED_OBJ_FILES)$(OBJCC_PRECOMPILED_OBJ_FILES),)
# Then we need to build the files before everything else!
internal-precompile-headers: $(C_PRECOMPILED_OBJ_FILES)\
$(OBJC_PRECOMPILED_OBJ_FILES)\
$(CC_PRECOMPILED_OBJ_FILES)\
$(OBJCC_PRECOMPILED_OBJ_FILES)
# We put all the PrecompiledHeaders/xx/ dirs in xx_PRECOMPILED_HEADERS_INCLUDE_FLAGS,
# which will be put before any other header include (this is what we want, as we
# want a precompiled header, if available, to be used in preference
# to the non-precompiled header, no matter where the non-precompiled
# header is).
ifneq ($(C_PRECOMPILED_OBJ_FILES),)
C_PRECOMPILED_HEADERS_INCLUDE_FLAGS += -I$(GNUSTEP_OBJ_DIR)/PrecompiledHeaders/C
endif
ifneq ($(OBJC_PRECOMPILED_OBJ_FILES),)
OBJC_PRECOMPILED_HEADERS_INCLUDE_FLAGS += -I$(GNUSTEP_OBJ_DIR)/PrecompiledHeaders/ObjC
endif
ifneq ($(CC_PRECOMPILED_OBJ_FILES),)
CC_PRECOMPILED_HEADERS_INCLUDE_FLAGS += -I$(GNUSTEP_OBJ_DIR)/PrecompiledHeaders/CC
endif
ifneq ($(OBJCC_PRECOMPILED_OBJ_FILES),)
OBJCC_PRECOMPILED_HEADERS_INCLUDE_FLAGS += -I$(GNUSTEP_OBJ_DIR)/PrecompiledHeaders/ObjCC
endif
else
internal-precompile-headers:
endif
# End of precompiled headers code
else
internal-precompile-headers:
endif
##
## Library and related special flags.
##
BUNDLE_LIBS += $($(GNUSTEP_INSTANCE)_BUNDLE_LIBS)
ADDITIONAL_INCLUDE_DIRS += $($(GNUSTEP_INSTANCE)_INCLUDE_DIRS)
ADDITIONAL_GUI_LIBS += $($(GNUSTEP_INSTANCE)_GUI_LIBS)
ADDITIONAL_TOOL_LIBS += $($(GNUSTEP_INSTANCE)_TOOL_LIBS)
ADDITIONAL_OBJC_LIBS += $($(GNUSTEP_INSTANCE)_OBJC_LIBS)
ADDITIONAL_LIBRARY_LIBS += $($(GNUSTEP_INSTANCE)_LIBS) \
$($(GNUSTEP_INSTANCE)_LIBRARY_LIBS)
ADDITIONAL_NATIVE_LIBS += $($(GNUSTEP_INSTANCE)_NATIVE_LIBS)
ADDITIONAL_LIB_DIRS += $($(GNUSTEP_INSTANCE)_LIB_DIRS)
ADDITIONAL_CPPFLAGS += $($(GNUSTEP_INSTANCE)_CPPFLAGS)
ADDITIONAL_CFLAGS += $($(GNUSTEP_INSTANCE)_CFLAGS)
ADDITIONAL_OBJCFLAGS += $($(GNUSTEP_INSTANCE)_OBJCFLAGS)
ADDITIONAL_CCFLAGS += $($(GNUSTEP_INSTANCE)_CCFLAGS)
ADDITIONAL_OBJCCFLAGS += $($(GNUSTEP_INSTANCE)_OBJCCFLAGS)
ADDITIONAL_LDFLAGS += $($(GNUSTEP_INSTANCE)_LDFLAGS)
ADDITIONAL_CLASSPATH += $($(GNUSTEP_INSTANCE)_CLASSPATH)
LIBRARIES_DEPEND_UPON += $($(GNUSTEP_INSTANCE)_LIBRARIES_DEPEND_UPON)

View file

@ -1,130 +0,0 @@
#
# Instance/service.make
#
# Instance Makefile rules to build GNUstep-based services.
#
# Copyright (C) 1998, 2001 Free Software Foundation, Inc.
#
# Author: Richard Frith-Macdonald <richard@brainstorm.co.uk>
# Based on the makefiles by Scott Christley.
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
#
# The name of the service is in the SERVICE_NAME variable.
# The NSServices info should be in $(SERVICE_NAME)Info.plist
# The list of service resource file are in xxx_RESOURCE_FILES
# The list of service resource directories are in xxx_RESOURCE_DIRS
# where xxx is the service name
#
.PHONY: internal-service-all_ \
internal-service-install_ \
internal-service-uninstall_ \
internal-service-copy_into_dir \
service-resource-files
# Libraries that go before the GUI libraries
ALL_SERVICE_LIBS = \
$(ALL_LIB_DIRS) \
$(ADDITIONAL_GUI_LIBS) $(AUXILIARY_GUI_LIBS) \
$(GUI_LIBS) $(ADDITIONAL_TOOL_LIBS) $(AUXILIARY_TOOL_LIBS) \
$(FND_LIBS) $(ADDITIONAL_OBJC_LIBS) $(AUXILIARY_OBJC_LIBS) \
$(OBJC_LIBS) $(SYSTEM_LIBS) $(TARGET_SYSTEM_LIBS)
# Don't include these definitions the first time make is invoked. This part is
# included when make is invoked the second time from the %.build rule (see
# rules.make).
SERVICE_DIR_NAME = $(GNUSTEP_INSTANCE:=.service)
SERVICE_DIR = $(GNUSTEP_BUILD_DIR)/$(SERVICE_DIR_NAME)
#
# Internal targets
#
SERVICE_FILE_NAME = $(SERVICE_DIR_NAME)/$(GNUSTEP_TARGET_LDIR)/$(GNUSTEP_INSTANCE)
SERVICE_FILE = $(GNUSTEP_BUILD_DIR)/$(SERVICE_FILE_NAME)
ifneq ($($(GNUSTEP_INSTANCE)_INSTALL_DIR),)
SERVICE_INSTALL_DIR = $($(GNUSTEP_INSTANCE)_INSTALL_DIR)
endif
ifeq ($(SERVICE_INSTALL_DIR),)
SERVICE_INSTALL_DIR = $(GNUSTEP_SERVICES)
endif
GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH = $(SERVICE_DIR)/Resources
GNUSTEP_SHARED_BUNDLE_INSTALL_NAME = $(SERVICE_DIR_NAME)
GNUSTEP_SHARED_BUNDLE_INSTALL_LOCAL_PATH = .
GNUSTEP_SHARED_BUNDLE_INSTALL_PATH = $(SERVICE_INSTALL_DIR)
include $(GNUSTEP_MAKEFILES)/Instance/Shared/bundle.make
internal-service-all_:: $(GNUSTEP_OBJ_DIR) \
$(SERVICE_DIR)/$(GNUSTEP_TARGET_LDIR) \
$(SERVICE_FILE) \
$(SERVICE_DIR)/Resources/Info-gnustep.plist \
shared-instance-bundle-all
$(SERVICE_FILE): $(OBJ_FILES_TO_LINK)
$(ECHO_LINKING)$(LD) $(ALL_LDFLAGS) $(CC_LDFLAGS) -o $(LDOUT)$@ \
$(OBJ_FILES_TO_LINK) $(ALL_SERVICE_LIBS)$(END_ECHO)
$(SERVICE_DIR)/$(GNUSTEP_TARGET_LDIR):
$(ECHO_CREATING)$(MKDIRS) $(SERVICE_DIR)/$(GNUSTEP_TARGET_LDIR)$(END_ECHO)
# Allow the gui library to redefine make_services to use its local one
ifeq ($(GNUSTEP_MAKE_SERVICES),)
GNUSTEP_MAKE_SERVICES = make_services
endif
# Depend on xxxInfo.plist but only if it exists.
GNUSTEP_PLIST_DEPEND = $(wildcard $(GNUSTEP_INSTANCE)Info.plist)
ifeq ($(GNUSTEP_PLIST_DEPEND),)
$(warning Service $(GNUSTEP_INSTANCE) missing $(GNUSTEP_INSTANCE)Info.plist)
endif
# FIXME - xxxInfo.plist in this case is not really a plist!
$(SERVICE_DIR)/Resources/Info-gnustep.plist: \
$(SERVICE_DIR)/Resources $(GNUSTEP_PLIST_DEPEND)
$(ECHO_CREATING)(echo "{"; echo ' NOTE = "Automatically generated, do not edit!";'; \
echo " NSExecutable = \"$(GNUSTEP_INSTANCE)\";"; \
if [ -r "$(GNUSTEP_INSTANCE)Info.plist" ]; then \
cat $(GNUSTEP_INSTANCE)Info.plist; \
fi; \
echo "}") >$@ ;\
if $(GNUSTEP_MAKE_SERVICES) --test $@; then : ; else rm -f $@; false; \
fi$(END_ECHO)
internal-service-copy_into_dir:: shared-instance-bundle-copy_into_dir
#
# Install targets
#
$(SERVICE_INSTALL_DIR):
$(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
internal-service-install_:: shared-instance-bundle-install
ifeq ($(strip),yes)
$(ECHO_STRIPPING)$(STRIP) $(SERVICE_INSTALL_DIR)/$(SERVICE_FILE_NAME)$(END_ECHO)
endif
internal-service-uninstall_:: shared-instance-bundle-uninstall
include $(GNUSTEP_MAKEFILES)/Instance/Shared/strings.make

View file

@ -1,105 +0,0 @@
# -*-makefile-*-
# Instance/subproject.make
#
# Instance Makefile rules to build subprojects in GNUstep projects.
#
# Copyright (C) 1998, 2001 Free Software Foundation, Inc.
#
# Author: Jonathan Gapen <jagapen@whitewater.chem.wisc.edu>
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
.PHONY: internal-subproject-all_ \
internal-subproject-install_ \
internal-subproject-uninstall_
#
# Compilation targets
#
internal-subproject-all_:: $(GNUSTEP_OBJ_DIR) \
$(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT)
# We need to depend on SUBPROJECT_OBJ_FILES to account for sub-subprojects.
$(GNUSTEP_OBJ_DIR)/$(SUBPROJECT_PRODUCT): $(OBJ_FILES_TO_LINK)
$(ECHO_LINKING)$(OBJ_MERGE_CMD)$(END_ECHO)
#
# Build-header target for framework subprojects
#
# If we are called with OWNING_PROJECT_HEADER_DIR_NAME which is not empty,
# we need to copy our headers into that directory during the
# build-headers stage, and to disable installation/uninstallation of
# headers.
#
ifneq ($(OWNING_PROJECT_HEADER_DIR_NAME),)
.PHONY: internal-subproject-build-headers
OWNING_PROJECT_HEADER_DIR = $(GNUSTEP_BUILD_DIR)/$(OWNING_PROJECT_HEADER_DIR_NAME)
HEADER_FILES = $($(GNUSTEP_INSTANCE)_HEADER_FILES)
OWNING_PROJECT_HEADER_FILES = $(patsubst %.h,$(OWNING_PROJECT_HEADER_DIR)/%.h,$(HEADER_FILES))
internal-subproject-build-headers:: $(OWNING_PROJECT_HEADER_FILES)
# We need to build the OWNING_PROJECT_HEADER_DIR directory here
# because this rule could be executed before the top-level framework
# has built his dirs
$(OWNING_PROJECT_HEADER_DIR)/%.h: %.h $(OWNING_PROJECT_HEADER_DIR)
$(ECHO_NOTHING)$(INSTALL_DATA) $< $@$(END_ECHO)
$(OWNING_PROJECT_HEADER_DIR):
$(ECHO_CREATING)$(MKDIRS) $@$(END_ECHO)
# End FRAMEWORK code
else
# Start no FRAMEWORK code
#
# Installation targets - we only need to install headers and only
# if this is not in a framework
#
include $(GNUSTEP_MAKEFILES)/Instance/Shared/headers.make
internal-subproject-install_:: shared-instance-headers-install
internal-subproject-uninstall_:: shared-instance-headers-uninstall
endif # no FRAMEWORK
#
# A subproject can have resources, which it stores into the
# Resources/Subproject directory. If you want your subproject
# to have resources, you need to put
# xxx_HAS_RESOURCE_BUNDLE = yes
# in your GNUmakefile. The project which owns us can then
# copy recursively this directory into its own Resources directory
# (that is done automatically if the project uses
# Instance/Shared/bundle.make to manage its own resource bundle)
#
ifeq ($($(GNUSTEP_INSTANCE)_HAS_RESOURCE_BUNDLE), yes)
GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH = $(GNUSTEP_BUILD_DIR)/Resources/Subproject
include $(GNUSTEP_MAKEFILES)/Instance/Shared/bundle.make
# Only build, not install
internal-subproject-all_:: shared-instance-bundle-all
endif
include $(GNUSTEP_MAKEFILES)/Instance/Shared/strings.make

View file

@ -1,29 +0,0 @@
# -*-makefile-*-
# Instance/test-application.make
#
# Copyright (C) 2002 Free Software Foundation, Inc.
#
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
# Just inherit the build rule from application.make
include $(GNUSTEP_MAKEFILES)/Instance/application.make
internal-test_app-all_:: internal-app-all_

View file

@ -1,30 +0,0 @@
#
# Instance/test-library.make
#
# Instance Makefile rules for test/non-installed libraries
#
# Copyright (C) 2005 Free Software Foundation, Inc.
#
# Author: Adam Fedor <fedor@gnu.org>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
# Just inherit the build rule from library.make
include $(GNUSTEP_MAKEFILES)/Instance/library.make
internal-test_library-all_:: internal-library-all_

View file

@ -1,29 +0,0 @@
# -*-makefile-*-
# Instance/test-tool.make
#
# Copyright (C) 2002 Free Software Foundation, Inc.
#
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
# Just inherit the build rule from tool.make
include $(GNUSTEP_MAKEFILES)/Instance/tool.make
internal-test_tool-all_:: internal-tool-all_

View file

@ -1,129 +0,0 @@
# -*-makefile-*-
# Instance/tool.make
#
# Instance Makefile rules to build GNUstep-based command line tools.
#
# Copyright (C) 1997, 2001 Free Software Foundation, Inc.
#
# Author: Scott Christley <scottc@net-community.com>
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# The name of the tools is in the TOOL_NAME variable.
#
# xxx We need to prefix the target name when cross-compiling
#
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
.PHONY: internal-tool-all_ \
internal-tool-install_ \
internal-tool-uninstall_ \
internal-tool-copy_into_dir
# This is the directory where the tools get installed. If you don't specify a
# directory they will get installed in the GNUstep Local Root.
ifneq ($($(GNUSTEP_INSTANCE)_INSTALL_DIR),)
TOOL_INSTALL_DIR = $($(GNUSTEP_INSTANCE)_INSTALL_DIR)
endif
ifeq ($(TOOL_INSTALL_DIR),)
TOOL_INSTALL_DIR = $(GNUSTEP_TOOLS)
endif
# This is the 'final' directory in which we copy the tool executable, including
# the target and library-combo paths. You can override it in special occasions
# (eg, installing an executable into a web server's cgi dir).
ifeq ($(FINAL_TOOL_INSTALL_DIR),)
FINAL_TOOL_INSTALL_DIR = $(TOOL_INSTALL_DIR)/$(GNUSTEP_TARGET_LDIR)
endif
ALL_TOOL_LIBS = \
$(ALL_LIB_DIRS) \
$(ADDITIONAL_TOOL_LIBS) $(AUXILIARY_TOOL_LIBS) $(FND_LIBS) \
$(ADDITIONAL_OBJC_LIBS) $(AUXILIARY_OBJC_LIBS) $(OBJC_LIBS) \
$(TARGET_SYSTEM_LIBS)
#
# Compilation targets
#
internal-tool-all_:: $(GNUSTEP_OBJ_DIR) \
$(GNUSTEP_OBJ_DIR)/$(GNUSTEP_INSTANCE)$(EXEEXT)
$(GNUSTEP_OBJ_DIR)/$(GNUSTEP_INSTANCE)$(EXEEXT): $(OBJ_FILES_TO_LINK)
$(ECHO_LINKING)$(LD) $(ALL_LDFLAGS) $(CC_LDFLAGS) -o $(LDOUT)$@ \
$(OBJ_FILES_TO_LINK) \
$(ALL_TOOL_LIBS)$(END_ECHO)
internal-tool-copy_into_dir::
$(ECHO_COPYING_INTO_DIR)$(MKDIRS) $(COPY_INTO_DIR)/$(GNUSTEP_TARGET_LDIR);\
$(INSTALL_PROGRAM) -m 0755 \
$(GNUSTEP_OBJ_DIR)/$(GNUSTEP_INSTANCE)$(EXEEXT) \
$(COPY_INTO_DIR)/$(GNUSTEP_TARGET_LDIR)$(END_ECHO)
# This rule runs $(MKDIRS) only if needed
$(FINAL_TOOL_INSTALL_DIR):
$(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
internal-tool-install_:: $(FINAL_TOOL_INSTALL_DIR)
$(ECHO_INSTALLING)$(INSTALL_PROGRAM) -m 0755 \
$(GNUSTEP_OBJ_DIR)/$(GNUSTEP_INSTANCE)$(EXEEXT) \
$(FINAL_TOOL_INSTALL_DIR)$(END_ECHO)
internal-tool-uninstall_::
rm -f $(FINAL_TOOL_INSTALL_DIR)/$(GNUSTEP_INSTANCE)$(EXEEXT)
# NB: We don't have any cleaning targets for tools here, because we
# clean during the Master make invocation.
#
# If the user makefile contains the command
# xxx_HAS_RESOURCE_BUNDLE = yes
# then we need to build a resource bundle for the tool, and install it.
# You can then add resources to the tool, any sort of, with the usual
# xxx_RESOURCE_FILES, xxx_LOCALIZED_RESOURCE_FILES, xxx_LANGUAGES, etc.
# The tool resource bundle (and all resources inside it) can be
# accessed at runtime very comfortably, by using gnustep-base's
# [NSBundle +mainBundle] (exactly as you would do for an application).
#
ifeq ($($(GNUSTEP_INSTANCE)_HAS_RESOURCE_BUNDLE),yes)
# Include the rules to build resource bundles
GNUSTEP_SHARED_BUNDLE_RESOURCE_PATH = $(GNUSTEP_BUILD_DIR)/Resources/$(GNUSTEP_INSTANCE)
GNUSTEP_SHARED_BUNDLE_INSTALL_NAME = $(GNUSTEP_INSTANCE)
GNUSTEP_SHARED_BUNDLE_INSTALL_LOCAL_PATH = Resources
GNUSTEP_SHARED_BUNDLE_INSTALL_PATH = $(GNUSTEP_LIBRARY)/Tools/Resources
include $(GNUSTEP_MAKEFILES)/Instance/Shared/bundle.make
internal-tool-all_:: shared-instance-bundle-all
internal-tool-copy_into_dir:: shared-instance-bundle-copy_into_dir
$(TOOL_INSTALL_DIR):
$(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
$(GNUSTEP_LIBRARY)/Tools/Resources:
$(ECHO_CREATING)$(MKINSTALLDIRS) $@$(END_ECHO)
internal-tool-install_:: $(GNUSTEP_LIBRARY)/Tools/Resources \
shared-instance-bundle-install
internal-tool-uninstall:: shared-instance-bundle-uninstall
endif
include $(GNUSTEP_MAKEFILES)/Instance/Shared/strings.make

View file

@ -1,55 +0,0 @@
The 'Master' invocation is the first time that 'make' is run on any
GNUmakefile in your project.
During the 'Master' invocation, gnustep-make determines exactly what
it needs to build. For example, in the following GNUmakefile -
include $(GNUSTEP_MAKEFILES)/common.make
LIBRARY_NAME = libquantum
TOOL_NAME = create destroy
create_OBJC_FILES = create.m
destroy_OBJC_FILES = destroy.m
libquantum_OBJC_FILES = quantum.m
include $(GNUSTEP_MAKEFILES)/library.make
include $(GNUSTEP_MAKEFILES)/tool.make
the 'Master' invocation will determine that we need to perform the
following logically separated operations -
type:library name:libquantum operation:all
type:tool name:create operation:all
type:tool name:destroy operation:all
It will then run an 'Instance' invocation for each of these tasks.
The 'Instance' invocation is a submake invocation, with some special
variables set telling it exactly what task it needs to perform out of
all the available ones. The 'Instance' invocation will read the same
user GNUmakefile(s) as the 'Master' invocation, but will use different
system makefiles. The 'Instance' invocation will actually include and
use all the code to perform the required tasks.
The role of the 'Master' invocation is very limited. It needs to
determine which 'Instance' invocations to run, and then exit.
Please note that we have a 'Master' invocation per each GNUmakefile in
your project. We have an 'Instance' invocation per each logically
separate thing to do in your project.
You might wonder why we use 'Instance' invocations at all, and why we
don't actually perform each instance task inside the 'Master'
invocation itself. The explanation is very technical ... in a few
words, we can't because of limitations of make. The problem is that
if you have multiple instances of the same type, say multiple
libraries or multiple tools or multiple yyys (or all of them), each
one might require an arbitrarily complex makefile code to be built,
which should change according to the value of xxx_ANY_VARIABLE_HERE,
where xxx is the library/tool/yyy name. So we have the problem that
we need to execute the same makefile code with an arbitrary value of
xxx, for each xxx. That is difficult to do in the same make
invocation, because the make grammar doesn't contain any looping
construct allowing us to include the same makefile multiple times, one
for each value of xxx. What we do to work around this problem is, we
run a separate submake invocation per instance to be built.

View file

@ -1,80 +0,0 @@
#
# aggregate.make
#
# Master Makefile rules to build a set of GNUstep-base subprojects.
#
# Copyright (C) 1997-2002 Free Software Foundation, Inc.
#
# Author: Scott Christley <scottc@net-community.com>
# Author: Ovidiu Predescu <ovidiu@net-community.com>
# Author: Nicola Pero <n.pero@mi.flashnet.it>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
#
# The list of aggregate project directory names is in the makefile
# variable SUBPROJECTS. The name is unforunate, because it is confusingly
# similar to xxx_SUBPROJECTS, which is used for subprojects.
#
# SUBPROJECTS - which is implemented in this file - are just a list of
# directories; we step in each directory in turn, and run a submake in
# there. The project types in the directories can be anything -
# tools, documentation, libraries, bundles, applications, whatever.
# For example, if your package is composed by a library and then by
# some tools using the library, you could have the library in one
# directory, the tools in another directory, and have a top level
# GNUmakefile which has the two as SUBPROJECTS.
#
# xxx_SUBPROJECTS - which is *not* implemented in this file, I'm just
# explaining it here to make clear the difference - are again a list
# of directories, each of which should contain a *subproject* project
# type (as implemented by subproject.make), which builds stuff into a
# .o file, which is then automatically linked into the xxx instance by
# gnustep-make when the top-level xxx is built. For example, a
# library might be broken into many separate subprojects, each of
# which implementing a logically separated part of the library; the
# top-level GNUmakefile will then build the library, specifying
# xxx_SUBPROJECTS for the library to be those directories.
# gnustep-make will step in all dirs, compile the subprojects, and
# then finally automatically link the subprojects into the main
# library.
SUBPROJECTS := $(strip $(SUBPROJECTS))
ifneq ($(SUBPROJECTS),)
internal-all internal-install internal-uninstall internal-clean \
internal-distclean internal-check internal-strings::
@ operation=$(subst internal-,,$@); \
abs_build_dir="$(ABS_GNUSTEP_BUILD_DIR)"; \
for f in $(SUBPROJECTS); do \
echo "Making $$operation in $$f..."; \
mf=$(MAKEFILE_NAME); \
if [ ! -f "$$f/$$mf" -a -f "$$f/Makefile" ]; then \
mf=Makefile; \
echo "WARNING: No $(MAKEFILE_NAME) found for aggregate project $$f; using 'Makefile'"; \
fi; \
if [ "$${abs_build_dir}" = "." ]; then \
gsbuild="."; \
else \
gsbuild="$${abs_build_dir}/$$f"; \
fi; \
if $(MAKE) -C $$f -f $$mf --no-keep-going $$operation \
GNUSTEP_BUILD_DIR="$$gsbuild"; then \
:; else exit $$?; \
fi; \
done
endif

View file

@ -1,79 +0,0 @@
#
# application.make
#
# Master makefile rules to build GNUstep-based applications.
#
# Copyright (C) 1997, 2001, 2002 Free Software Foundation, Inc.
#
# Author: Nicola Pero <nicola@brainstorm.co.uk>
# Author: Ovidiu Predescu <ovidiu@net-community.com>
# Based on the original version by Scott Christley.
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
APP_NAME := $(strip $(APP_NAME))
internal-all:: $(APP_NAME:=.all.app.variables)
internal-install:: $(APP_NAME:=.install.app.variables)
internal-uninstall:: $(APP_NAME:=.uninstall.app.variables)
# Compute them manually to avoid having to do an Instance make
# invocation just to remove them.
_PSWRAP_C_FILES = $(foreach app,$(APP_NAME),$($(app)_PSWRAP_FILES:.psw=.c))
_PSWRAP_H_FILES = $(foreach app,$(APP_NAME),$($(app)_PSWRAP_FILES:.psw=.h))
# The following intricate code computes the list of xxxInfo.plist files
# for all applications xxx which have xxx_PREPROCESS_INFO_PLIST=yes.
_PLIST_INFO_FILES = $(addsuffix Info.plist,$(foreach app,$(APP_NAME),$(patsubst yes,$(app),$($(app)_PREPROCESS_INFO_PLIST))))
internal-clean::
ifeq ($(GNUSTEP_IS_FLATTENED), no)
(cd $(GNUSTEP_BUILD_DIR); \
rm -rf $(_PSWRAP_C_FILES) $(_PSWRAP_H_FILES) $(_PLIST_INFO_FILES) *.$(APP_EXTENSION)/$(GNUSTEP_TARGET_LDIR))
else
(cd $(GNUSTEP_BUILD_DIR); \
rm -rf $(_PSWRAP_C_FILES) $(_PSWRAP_H_FILES) $(_PLIST_INFO_FILES) *.$(APP_EXTENSION))
endif
internal-distclean::
ifeq ($(GNUSTEP_IS_FLATTENED), no)
(cd $(GNUSTEP_BUILD_DIR); rm -rf *.$(APP_EXTENSION))
endif
# The following make trick extracts all tools in APP_NAME for which
# the xxx_SUBPROJECTS variable is set to something non-empty.
# For those apps (and only for them), we need to run 'clean' and
# 'distclean' in subprojects too.
#
# Please note that newer GNU make has a $(if condition,then,else)
# function, which would be so handy here! But unfortunately it's not
# available in older GNU makes, so we must not use it. This trick
# works around this problem.
APPS_WITH_SUBPROJECTS = $(strip $(foreach app,$(APP_NAME),$(patsubst %,$(app),$($(app)_SUBPROJECTS))))
ifneq ($(APPS_WITH_SUBPROJECTS),)
internal-clean:: $(APPS_WITH_SUBPROJECTS:=.clean.app.subprojects)
internal-distclean:: $(APPS_WITH_SUBPROJECTS:=.distclean.app.subprojects)
endif
internal-strings:: $(APP_NAME:=.strings.app.variables)
# FIXME - GNUSTEP_BUILD_DIR here. Btw should we remove this or
# provide a better more general way of doing it ?
$(APP_NAME):
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory $@.all.app.variables

View file

@ -1,56 +0,0 @@
#
# Master/bundle.make
#
# Master makefile rules to build GNUstep-based bundles.
#
# Copyright (C) 1997, 2001 Free Software Foundation, Inc.
#
# Author: Scott Christley <scottc@net-community.com>
# Author: Ovidiu Predescu <ovidiu@net-community.com>
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
BUNDLE_NAME := $(strip $(BUNDLE_NAME))
internal-all:: $(BUNDLE_NAME:=.all.bundle.variables)
internal-install:: $(BUNDLE_NAME:=.install.bundle.variables)
internal-uninstall:: $(BUNDLE_NAME:=.uninstall.bundle.variables)
_PSWRAP_C_FILES = $(foreach bundle,$(BUNDLE_NAME),$($(bundle)_PSWRAP_FILES:.psw=.c))
_PSWRAP_H_FILES = $(foreach bundle,$(BUNDLE_NAME),$($(bundle)_PSWRAP_FILES:.psw=.h))
internal-clean::
(cd $(GNUSTEP_BUILD_DIR); \
rm -rf $(_PSWRAP_C_FILES) $(_PSWRAP_H_FILES) $(addsuffix $(BUNDLE_EXTENSION),$(BUNDLE_NAME)))
internal-distclean::
BUNDLES_WITH_SUBPROJECTS = $(strip $(foreach bundle,$(BUNDLE_NAME),$(patsubst %,$(bundle),$($(bundle)_SUBPROJECTS))))
ifneq ($(BUNDLES_WITH_SUBPROJECTS),)
internal-clean:: $(BUNDLES_WITH_SUBPROJECTS:=.clean.bundle.subprojects)
internal-distclean:: $(BUNDLES_WITH_SUBPROJECTS:=.distclean.bundle.subprojects)
endif
internal-strings:: $(BUNDLE_NAME:=.strings.bundle.variables)
$(BUNDLE_NAME):
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory \
$@.all.bundle.variables

View file

@ -1,57 +0,0 @@
#
# Master/clibrary.make
#
# Master Makefile rules to build C libraries.
#
# Copyright (C) 1997, 2001 Free Software Foundation, Inc.
#
# Author: Scott Christley <scottc@net-community.com>
# Ovidiu Predescu <ovidiu@net-community.com>
# Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
CLIBRARY_NAME := $(strip $(CLIBRARY_NAME))
internal-all:: $(CLIBRARY_NAME:=.all.clibrary.variables)
internal-install:: $(CLIBRARY_NAME:=.install.clibrary.variables)
internal-uninstall:: $(CLIBRARY_NAME:=.uninstall.clibrary.variables)
_PSWRAP_C_FILES = $(foreach lib,$(CLIBRARY_NAME),$($(lib)_PSWRAP_FILES:.psw=.c))
_PSWRAP_H_FILES = $(foreach lib,$(CLIBRARY_NAME),$($(lib)_PSWRAP_FILES:.psw=.h))
internal-clean::
ifneq ($(_PSWRAP_C_FILES)$(_PSWRAP_H_FILES),)
(cd $(GNUSTEP_BUILD_DIR); \
rm -rf $(_PSWRAP_C_FILES) $(_PSWRAP_H_FILES))
endif
internal-distclean::
CLIBRARIES_WITH_SUBPROJECTS = $(strip $(foreach clibrary,$(CLIBRARY_NAME),$(patsubst %,$(clibrary),$($(clibrary)_SUBPROJECTS))))
ifneq ($(CLIBRARIES_WITH_SUBPROJECTS),)
internal-clean:: $(CLIBRARIES_WITH_SUBPROJECTS:=.clean.clibrary.subprojects)
internal-distclean:: $(CLIBRARIES_WITH_SUBPROJECTS:=.distclean.clibrary.subprojects)
endif
internal-strings:: $(CLIBRARY_NAME:=.strings.clibrary.variables)
$(CLIBRARY_NAME):
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory \
$@.all.clibrary.variables

View file

@ -1,49 +0,0 @@
#
# Master/ctool.make
#
# Master Makefile rules to build GNUstep-based command line ctools.
#
# Copyright (C) 1997, 2001 Free Software Foundation, Inc.
#
# Author: Scott Christley <scottc@net-community.com>
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
CTOOL_NAME := $(strip $(CTOOL_NAME))
internal-all:: $(CTOOL_NAME:=.all.ctool.variables)
internal-install:: $(CTOOL_NAME:=.install.ctool.variables)
internal-uninstall:: $(CTOOL_NAME:=.uninstall.ctool.variables)
internal-clean::
internal-distclean::
CTOOLS_WITH_SUBPROJECTS = $(strip $(foreach ctool,$(CTOOL_NAME),$(patsubst %,$(ctool),$($(ctool)_SUBPROJECTS))))
ifneq ($(CTOOLS_WITH_SUBPROJECTS),)
internal-clean:: $(CTOOLS_WITH_SUBPROJECTS:=.clean.ctool.subprojects)
internal-distclean:: $(CTOOLS_WITH_SUBPROJECTS:=.distclean.ctool.subprojects)
endif
internal-strings:: $(CTOOL_NAME:=.strings.ctool.variables)
$(CTOOL_NAME):
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory \
$@.all.ctool.variables

View file

@ -1,48 +0,0 @@
# -*-makefile-*-
# Master/documentation.make
#
# Master Makefile rules to build GNUstep-based documentation.
#
# Copyright (C) 1998, 2000, 2001, 2002 Free Software Foundation, Inc.
#
# Author: Scott Christley <scottc@net-community.com>
# Author: Nicola Pero <n.pero@mi.flashnet.it>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
DOCUMENT_NAME := $(strip $(DOCUMENT_NAME))
DOCUMENT_TEXT_NAME := $(strip $(DOCUMENT_TEXT_NAME))
internal-all:: $(DOCUMENT_NAME:=.all.doc.variables) \
$(DOCUMENT_TEXT_NAME:=.all.textdoc.variables)
internal-install:: $(DOCUMENT_NAME:=.install.doc.variables) \
$(DOCUMENT_TEXT_NAME:=.install.textdoc.variables)
internal-uninstall:: $(DOCUMENT_NAME:=.uninstall.doc.variables) \
$(DOCUMENT_TEXT_NAME:=.uninstall.textdoc.variables)
internal-clean:: $(DOCUMENT_NAME:=.clean.doc.variables) \
$(DOCUMENT_TEXT_NAME:=.clean.textdoc.variables)
internal-distclean:: $(DOCUMENT_NAME:=.distclean.doc.variables) \
$(DOCUMENT_TEXT_NAME:=.distclean.textdoc.variables)
#$(DOCUMENT_NAME):
# @$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory \
# $@.all.doc.variables

View file

@ -1,54 +0,0 @@
#
# Master/framework.make
#
# Master Makefile rules to build GNUstep-based frameworks.
#
# Copyright (C) 2000, 2001 Free Software Foundation, Inc.
#
# Author: Mirko Viviani <mirko.viviani@rccr.cremona.it>
# Author: Nicola Pero <n.pero@mi.flashnet.it>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
FRAMEWORK_NAME := $(strip $(FRAMEWORK_NAME))
before-build-headers::
after-build-headers::
# A framework has a special task to do before all, which is to build
# the public framework headers.
build-headers:: before-build-headers $(FRAMEWORK_NAME:=.build-headers.framework.variables) after-build-headers
before-all:: build-headers
internal-all:: $(FRAMEWORK_NAME:=.all.framework.variables)
$(FRAMEWORK_NAME:=.all.framework.variables): $(FRAMEWORK_NAME:=.build-headers.framework.variables)
internal-install:: $(FRAMEWORK_NAME:=.install.framework.variables)
internal-uninstall:: $(FRAMEWORK_NAME:=.uninstall.framework.variables)
internal-clean:: $(FRAMEWORK_NAME:=.clean.framework.variables)
internal-distclean:: $(FRAMEWORK_NAME:=.distclean.framework.variables)
internal-strings:: $(FRAMEWORK_NAME:=.strings.framework.variables)
$(FRAMEWORK_NAME):
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory --no-keep-going \
$@.all.framework.variables

View file

@ -1,65 +0,0 @@
#
# Master/gswapp.make
#
# Master Makefile rules to build GNUstep web based applications.
#
# Copyright (C) 1997 Free Software Foundation, Inc.
#
# Author: Manuel Guesdon <mguesdon@sbuilders.com>
# Based on application.make by Ovidiu Predescu <ovidiu@net-community.com>
# Based on gswapp.make by Helge Hess, MDlink online service center GmbH.
# Based on the original version by Scott Christley.
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
# Determine the application directory extension
GSWAPP_EXTENSION=gswa
GSWAPP_NAME := $(strip $(GSWAPP_NAME))
internal-all:: $(GSWAPP_NAME:=.all.gswapp.variables)
internal-install:: $(GSWAPP_NAME:=.install.gswapp.variables)
internal-uninstall:: $(GSWAPP_NAME:=.uninstall.gswapp.variables)
internal-clean::
ifeq ($(GNUSTEP_IS_FLATTENED), no)
(cd $(GNUSTEP_BUILD_DIR); \
rm -rf *.$(GSWAPP_EXTENSION)/$(GNUSTEP_TARGET_LDIR))
else
(cd $(GNUSTEP_BUILD_DIR); \
rm -rf *.$(GSWAPP_EXTENSION))
endif
internal-distclean::
ifeq ($(GNUSTEP_IS_FLATTENED), no)
(cd $(GNUSTEP_BUILD_DIR); \
rm -rf *.$(GSWAPP_EXTENSION))
endif
GSWAPPS_WITH_SUBPROJECTS = $(strip $(foreach gswapp,$(GSWAPP_NAME),$(patsubst %,$(gswapp),$($(gswapp)_SUBPROJECTS))))
ifneq ($(GSWAPPS_WITH_SUBPROJECTS),)
internal-clean:: $(GSWAPPS_WITH_SUBPROJECTS:=.clean.gswapp.subprojects)
internal-distclean:: $(GSWAPPS_WITH_SUBPROJECTS:=.distclean.gswapp.subprojects)
endif
internal-strings:: $(GSWAPP_NAME:=.strings.gswapp.variables)
$(GSWAPP_NAME):
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory \
$@.all.gswapp.variables

View file

@ -1,56 +0,0 @@
#
# Master/gswbundle.make
#
# Master Makefile rules to build GNUstep web bundles.
#
# Copyright (C) 1997 Free Software Foundation, Inc.
#
# Author: Manuel Guesdon <mguesdon@sbuilders.com>
# Based on WOBundle.make by Helge Hess, MDlink online service center GmbH.
# Based on bundle.make by Ovidiu Predescu <ovidiu@net-community.com>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
ifeq ($(strip $(GSWBUNDLE_EXTENSION)),)
GSWBUNDLE_EXTENSION = .gswbundle
endif
GSWBUNDLE_NAME := $(strip $(GSWBUNDLE_NAME))
internal-all:: $(GSWBUNDLE_NAME:=.all.gswbundle.variables)
internal-install:: $(GSWBUNDLE_NAME:=.install.gswbundle.variables)
internal-uninstall:: $(GSWBUNDLE_NAME:=.uninstall.gswbundle.variables)
internal-clean::
(cd $(GNUSTEP_BUILD_DIR); \
rm -rf $(addsuffix $(GSWBUNDLE_EXTENSION),$(GSWBUNDLE_NAME)))
internal-distclean::
GSWBUNDLES_WITH_SUBPROJECTS = $(strip $(foreach gswbundle,$(GSWBUNDLE_NAME),$(patsubst %,$(gswbundle),$($(gswbundle)_SUBPROJECTS))))
ifneq ($(GSWBUNDLES_WITH_SUBPROJECTS),)
internal-clean:: $(GSWBUNDLES_WITH_SUBPROJECTS:=.clean.gswbundle.subprojects)
internal-distclean:: $(GSWBUNDLES_WITH_SUBPROJECTS:=.distclean.gswbundle.subprojects)
endif
internal-all:: $(GSWBUNDLE_NAME:=.all.gswbundle.variables)
$(GSWBUNDLE_NAME):
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory \
$@.all.gswbundle.variables

View file

@ -1,54 +0,0 @@
#
# Master/java-tool.make
#
# Master Makefile rules to build Java command-line tools.
#
# Copyright (C) 2001 Free Software Foundation, Inc.
#
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
# Why using Java if you can use Objective-C ...
# Anyway if you really want it, here we go.
#
# The name of the tools is in the JAVA_TOOL_NAME variable.
# The main class (the one implementing main) is in the
# xxx_PRINCIPAL_CLASS variable.
#
JAVA_TOOL_NAME := $(strip $(JAVA_TOOL_NAME))
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
internal-all:: $(JAVA_TOOL_NAME:=.all.java_tool.variables)
internal-install:: $(JAVA_TOOL_NAME:=.install.java_tool.variables)
internal-uninstall:: $(JAVA_TOOL_NAME:=.uninstall.java_tool.variables)
internal-clean:: $(JAVA_TOOL_NAME:=.clean.java_tool.variables)
internal-distclean::
JAVA_TOOLS_WITH_SUBPROJECTS = $(strip $(foreach java_tool,$(JAVA_TOOL_NAME),$(patsubst %,$(java_tool),$($(java_tool)_SUBPROJECTS))))
ifneq ($(JAVA_TOOLS_WITH_SUBPROJECTS),)
internal-distclean:: $(JAVA_TOOLS_WITH_SUBPROJECTS:=.distclean.java_tool.subprojects)
endif
$(JAVA_TOOL_NAME):
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory \
$@.all.java_tool.variables

View file

@ -1,46 +0,0 @@
#
# Master/java.make
#
# Master Makefile rules to build java-based (not necessarily
# GNUstep) packages.
#
# Copyright (C) 2000 Free Software Foundation, Inc.
#
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
JAVA_PACKAGE_NAME := $(strip $(JAVA_PACKAGE_NAME))
internal-all:: $(JAVA_PACKAGE_NAME:=.all.java-package.variables)
internal-install:: $(JAVA_PACKAGE_NAME:=.install.java-package.variables)
internal-uninstall:: $(JAVA_PACKAGE_NAME:=.uninstall.java-package.variables)
internal-clean:: $(JAVA_PACKAGE_NAME:=.clean.java-package.variables)
internal-distclean::
JAVA_PACKAGES_WITH_SUBPROJECTS = $(strip $(foreach java-package,$(JAVA_PACKAGE_NAME),$(patsubst %,$(java-package),$($(java-package)_SUBPROJECTS))))
ifneq ($(JAVA_PACKAGES_WITH_SUBPROJECTS),)
internal-distclean:: $(JAVA_PACKAGES_WITH_SUBPROJECTS:=.distclean.java-package.subprojects)
endif
$(JAVA_PACKAGE_NAME):
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory \
$@.all.java-package.variables

View file

@ -1,57 +0,0 @@
#
# Master/library.make
#
# Master Makefile rules to build GNUstep-based libraries.
#
# Copyright (C) 1997, 2001 Free Software Foundation, Inc.
#
# Author: Scott Christley <scottc@net-community.com>
# Ovidiu Predescu <ovidiu@net-community.com>
# Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
LIBRARY_NAME := $(strip $(LIBRARY_NAME))
internal-all:: $(LIBRARY_NAME:=.all.library.variables)
internal-install:: $(LIBRARY_NAME:=.install.library.variables)
internal-uninstall:: $(LIBRARY_NAME:=.uninstall.library.variables)
_PSWRAP_C_FILES = $(foreach lib,$(LIBRARY_NAME),$($(lib)_PSWRAP_FILES:.psw=.c))
_PSWRAP_H_FILES = $(foreach lib,$(LIBRARY_NAME),$($(lib)_PSWRAP_FILES:.psw=.h))
internal-clean::
ifneq ($(_PSWRAP_C_FILES)$(_PSWRAP_H_FILES),)
(cd $(GNUSTEP_BUILD_DIR); \
rm -rf $(_PSWRAP_C_FILES) $(_PSWRAP_H_FILES))
endif
internal-distclean::
LIBRARIES_WITH_SUBPROJECTS = $(strip $(foreach library,$(LIBRARY_NAME),$(patsubst %,$(library),$($(library)_SUBPROJECTS))))
ifneq ($(LIBRARIES_WITH_SUBPROJECTS),)
internal-clean:: $(LIBRARIES_WITH_SUBPROJECTS:=.clean.library.subprojects)
internal-distclean:: $(LIBRARIES_WITH_SUBPROJECTS:=.distclean.library.subprojects)
endif
internal-strings:: $(LIBRARY_NAME:=.strings.library.variables)
$(LIBRARY_NAME):
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory \
$@.all.library.variables

View file

@ -1,49 +0,0 @@
#
# Master/objc.make
#
# Master Makefile rules to build ObjC-based (but not GNUstep) programs.
#
# Copyright (C) 1997, 2001 Free Software Foundation, Inc.
#
# Author: Scott Christley <scottc@net-community.com>
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
OBJC_PROGRAM_NAME := $(strip $(OBJC_PROGRAM_NAME))
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
internal-all:: $(OBJC_PROGRAM_NAME:=.all.objc-program.variables)
internal-install:: $(OBJC_PROGRAM_NAME:=.install.objc-program.variables)
internal-uninstall:: $(OBJC_PROGRAM_NAME:=.uninstall.objc-program.variables)
internal-clean::
internal-distclean::
OBJC_PROGRAMS_WITH_SUBPROJECTS = $(strip $(foreach objc_program,$(OBJC_PROGRAM_NAME),$(patsubst %,$(objc_program),$($(objc_program)_SUBPROJECTS))))
ifneq ($(OBJC_PROGRAMS_WITH_SUBPROJECTS),)
internal-clean:: $(OBJC_PROGRAMS_WITH_SUBPROJECTS:=.clean.objc-program.subprojects)
internal-distclean:: $(OBJC_PROGRAMS_WITH_SUBPROJECTS:=.distclean.objc-program.subprojects)
endif
internal-strings:: $(OBJC_PROGRAM_NAME:=.strings.objc-program.variables)
$(OBJC_PROGRAM_NAME):
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory \
$@.all.objc-program.variables

View file

@ -1,63 +0,0 @@
#
# Master/palette.make
#
# Master Makefile rules to build GNUstep-based palettes.
#
# Copyright (C) 1999 Free Software Foundation, Inc.
#
# Author: Scott Christley <scottc@net-community.com>
# Author: Ovidiu Predescu <ovidiu@net-community.com>
# Author: Richard Frith-Macdonald <richard@brainstorm.co.uk>
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
PALETTE_NAME:=$(strip $(PALETTE_NAME))
internal-all:: $(PALETTE_NAME:=.all.palette.variables)
internal-install:: $(PALETTE_NAME:=.install.palette.variables)
internal-uninstall:: $(PALETTE_NAME:=.uninstall.palette.variables)
_PSWRAP_C_FILES = $(foreach palette,$(PALETTE_NAME),$($(palette)_PSWRAP_FILES:.psw=.c))
_PSWRAP_H_FILES = $(foreach palette,$(PALETTE_NAME),$($(palette)_PSWRAP_FILES:.psw=.h))
internal-clean::
ifeq ($(GNUSTEP_IS_FLATTENED), no)
(cd $(GNUSTEP_BUILD_DIR); \
rm -rf $(_PSWRAP_C_FILES) $(_PSWRAP_H_FILES) *.palette/$(GNUSTEP_TARGET_LDIR))
else
(cd $(GNUSTEP_BUILD_DIR); \
rm -rf $(_PSWRAP_C_FILES) $(_PSWRAP_H_FILES) *.palette)
endif
internal-distclean::
ifeq ($(GNUSTEP_IS_FLATTENED), no)
(cd $(GNUSTEP_BUILD_DIR); rm -rf *.palette)
endif
PALETTES_WITH_SUBPROJECTS = $(strip $(foreach palette,$(PALETTE_NAME),$(patsubst %,$(palette),$($(palette)_SUBPROJECTS))))
ifneq ($(PALETTES_WITH_SUBPROJECTS),)
internal-clean:: $(PALETTES_WITH_SUBPROJECTS:=.clean.palette.subprojects)
endif
internal-strings:: $(PALETTE_NAME:=.strings.palette.variables)
$(PALETTE_NAME):
@$(MAKE) -f $(MAKEFILE_NAME) --no-print-directory \
$@.all.palette.variables

View file

@ -1,39 +0,0 @@
#
# Master/resource-set.make
#
# Master makefile rules to install resource files
#
# Copyright (C) 2002 Free Software Foundation, Inc.
#
# Author: Nicola Pero <nicola@brainstorm.co.uk>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
ifeq ($(RULES_MAKE_LOADED),)
include $(GNUSTEP_MAKEFILES)/rules.make
endif
RESOURCE_SET_NAME := $(strip $(RESOURCE_SET_NAME))
# Only install and uninstall are actually performed for this project type
internal-all::
internal-install:: $(RESOURCE_SET_NAME:=.install.resource-set.variables)
internal-uninstall:: $(RESOURCE_SET_NAME:=.uninstall.resource-set.variables)
internal-clean::
internal-distclean::

View file

@ -1,262 +0,0 @@
#
# rpm.make
#
# Makefile rules to build a RPM spec files and RPM packages
#
# Copyright (C) 2001-2007 Free Software Foundation, Inc.
#
# Author: Nicola Pero <n.pero@mi.flashnet.it>
#
# This file is part of the GNUstep Makefile Package.
#
# This library is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# You should have received a copy of the GNU General Public
# License along with this library; see the file COPYING.LIB.
# If not, write to the Free Software Foundation,
# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# FIXME: Move all this documentation into the documentation
#
#
# FIXME/TODO: Update for GNUSTEP_BUILD_DIR
#
# rpm puts all tools, bundles, applications, subprojects, libraries,
# etc specified in the GNUmakefile into a single rpm. There aren't any
# provisions for putting separate apps/tools/etc in separate rpms
# (other than putting them in separate dirs).
#
# Note: we don't make development packages separated from the standard
# ones. Every package containing a library's object files will also
# contain the header files for the library <only the ones which were
# declared in the makefile of course>.
#
#
# When building a package, the make package generates automatically:
#
# * the .tgz source file to be copied into where_you_build_rpms/SOURCES/
# <generated by source-dist.make>
#
# * the spec file to be copied into where_you_build_rpms/SPECS/
# <generate by rpm.make>
#
# at this point, to build the rpm you just do
# cd where_you_build_rpms/SPECS/
# rpm -ba my_package.spec
#
# If you are *very* lazy, typing `make rpm' will do it all automatically
# for you. But in that case, you need to have set the shell environment
# variable `RPM_TOPDIR' to the top dir of where you build rpms (eg,
# /usr/src/redhat/).
#
# To build the spec file for a package, you need to do two things:
# [1] Add - after common.make - the following lines in your GNUmakefile:
#
# PACKAGE_NAME = Gomoku
# PACKAGE_VERSION = 1.1.1
#
# (replace them with name, version of your software). This is mainly
# needed so that when you build the .tgz and the spec file, they have
# names which are in sync. Make sure to keep the library version and
# the package version in sync.
#
# The other important variable you may want to set in your makefiles is
#
# GNUSTEP_INSTALLATION_DOMAIN - Installation domain (defaults to LOCAL)
#
# Make sure that your filesystem layout matches the one of your target
# system else your files might end up in the wrong directory when
# installed. In other words, use the same version of gnustep-make
# that will be used on the target system, and configured in the same
# way.
# [2] Provide a $(PACKAGE_NAME).spec.in file, which contains the RPM
# spec preamble. Here is an example:
# Summary: A table board game
# Release: 1
# License: GPL
# Group: Amusements/Games
# Source: http://www.gnustep.it/nicola/Applications/Gomoku/%{gs_name}-%{gs_version}.tar.gz
#
# %description
# Gomoku is an extended TicTacToe game for GNUstep. You win the game if
# you are able to put 5 of your pieces in a row, column or diagonal. You
# loose if the computer does it before you. You can play the game on
# boards of different size; the default size is 8 but 10 is also nice to
# play. The game has 6 different difficulty levels.
# Comments:
# you must not include: `Name', `Version', `BuildRoot' and `Prefix'
# entries. These are generated automatically; `Name' and `Version'
# from $(PACKAGE_NAME) and $(PACKAGE_VERSION), and so for BuildRoot
# and Prefix. you might include all the other tags listed in the RPM
# doc if you want.
#
# You can use the following if you need:
# %{gs_name} expands to the value of the make variable PACKAGE_NAME
# %{gs_version} expands to the value of the make variable PACKAGE_VERSION
# (make sure you use them in `Source:' as shown).
#
# A special note: if you need `./configure' to be run before
# compilation (usually only needed for GNUstep core libraries
# themselves), define the following make variable:
#
# PACKAGE_NEEDS_CONFIGURE = YES
#
# in your makefile.
#
# At this point, typing
# `make dist' will generate the .tgz (can be used outside rpm.make)
# `make specfile' will generate the (matching) specfile.
#
#
# As said before, if you are very lazy, typing something like
#
# make distclean
# `RPM_TOPDIR=/usr/src/redhat' make rpm
#
# will do the whole job once you have written your '.spec.in' file,
# and set the PACKAGE_NAME and PACKAGE_VERSION variables in the makefile.
# The generated rpm will be in /usr/src/redhat/RPMS/.
#
#
# Internal targets
#
# If we have been called with something like
#
# make DESTDIR=/var/tmp/package-build filelist=yes install
#
# we are being called inside the rpm installation stage, and we need
# to produce the file list from the installed files.
#
GNUSTEP_FILE_LIST = $(GNUSTEP_OBJ_DIR)/file-list
ifeq ($(filelist),yes)
# Build the file-list only at top level
# ifeq ($(MAKELEVEL),0)
# Remove the old file list before installing, and initialize the new one.
before-install:: $(GNUSTEP_OBJ_DIR)
$(ECHO_NOTHING)rm -f $(GNUSTEP_FILE_LIST)$(END_ECHO)
$(ECHO_NOTHING)echo "%attr (-, root, root)" >> $(GNUSTEP_FILE_LIST)$(END_ECHO)
# Get the list of files inside DESTDIR
internal-after-install::
$(ECHO_NOTHING)for file in `$(TAR) Pcf - $(DESTDIR) | $(TAR) t`; do \
if [ -d "$$file" ]; then \
echo "%dir $$file" > /dev/null; \
else \
echo "$$file" >> $(GNUSTEP_FILE_LIST); \
fi; \
done$(END_ECHO)
$(ECHO_NOTHING)sed -e "s|^$(DESTDIR)||" $(GNUSTEP_FILE_LIST) > file-list.tmp$(END_ECHO)
$(ECHO_NOTHING)mv file-list.tmp $(GNUSTEP_FILE_LIST)$(END_ECHO)
# endif # MAKELEVEL
endif # filelist == yes
# NB: The filelist is automatically deleted when GNUSTEP_OBJ_DIR is
# deleted (that is, by make clean)
SPEC_FILE_NAME=$(PACKAGE_NAME).spec
SPEC_FILE=$(GNUSTEP_OBJ_DIR)/$(SPEC_FILE_NAME)
SPEC_RULES_TEMPLATE=$(GNUSTEP_MAKEFILES)/spec-rules.template
SPEC_IN=$(PACKAGE_NAME).spec.in
SPEC_SCRIPT_IN=$(PACKAGE_NAME).script.spec.in
.PHONY: specfile rpm check-RPM_TOPDIR
#
# The user will type `make specfile' to generate the specfile
#
specfile: $(SPEC_FILE)
#
# This is the real target - depends on having a correct .spec.in file
#
$(SPEC_FILE): $(SPEC_IN) $(GNUSTEP_OBJ_DIR)
$(ECHO_NOTHING)echo "Generating the spec file..."$(END_ECHO)
$(ECHO_NOTHING)rm -f $@$(END_ECHO)
$(ECHO_NOTHING)echo "##" >> $@$(END_ECHO)
$(ECHO_NOTHING)echo "## Generated automatically by GNUstep make - do not edit!" >> $@$(END_ECHO)
$(ECHO_NOTHING)echo "## Edit the $(SPEC_IN) file instead" >> $@$(END_ECHO)
$(ECHO_NOTHING)echo "##" >> $@$(END_ECHO)
$(ECHO_NOTHING)echo " " >> $@$(END_ECHO)
$(ECHO_NOTHING)echo "## Code dynamically generated" >> $@$(END_ECHO)
$(ECHO_NOTHING)echo "%define gs_name $(PACKAGE_NAME)" >> $@$(END_ECHO)
$(ECHO_NOTHING)echo "%define gs_version $(PACKAGE_VERSION)" >> $@$(END_ECHO)
$(ECHO_NOTHING)echo "%define gs_install_domain $(GNUSTEP_INSTALLATION_DOMAIN)" >> $@$(END_ECHO)
$(ECHO_NOTHING)echo "%define gs_makefiles $(GNUSTEP_MAKEFILES)" >> $@$(END_ECHO)
$(ECHO_NOTHING)echo "%define gs_file_list $(GNUSTEP_FILE_LIST)" >> $@$(END_ECHO)
ifeq ($(PACKAGE_NEEDS_CONFIGURE),YES)
$(ECHO_NOTHING)echo "%define gs_configure YES" >> $@$(END_ECHO)
else
$(ECHO_NOTHING)echo "%define gs_configure NO" >> $@$(END_ECHO)
endif
$(ECHO_NOTHING)echo " " >> $@$(END_ECHO)
$(ECHO_NOTHING)echo "Name: %{gs_name}" >> $@$(END_ECHO)
$(ECHO_NOTHING)echo "Version: %{gs_version}" >> $@$(END_ECHO)
$(ECHO_NOTHING)echo "BuildRoot: /var/tmp/%{gs_name}-buildroot" >> $@$(END_ECHO)
$(ECHO_NOTHING)echo "" >> $@$(END_ECHO)
$(ECHO_NOTHING)echo "## Code from $(SPEC_IN)" >> $@$(END_ECHO)
$(ECHO_NOTHING)cat $(SPEC_IN) >> $@$(END_ECHO)
$(ECHO_NOTHING)echo "" >> $@$(END_ECHO)
$(ECHO_NOTHING)echo "## Fixed rules from $(SPEC_RULES_TEMPLATE)" >> $@$(END_ECHO)
$(ECHO_NOTHING)cat $(SPEC_RULES_TEMPLATE) >> $@$(END_ECHO)
$(ECHO_NOTHING)if [ -f $(SPEC_SCRIPT_IN) ]; then \
echo "" >> $@; \
echo "## Script rules from $(SPEC_SCRIPT_IN)" >> $@; \
cat $(SPEC_SCRIPT_IN) >> $@; \
fi$(END_ECHO)
check-RPM_TOPDIR:
$(ECHO_NOTHING)if [ "$(RPM_TOPDIR)" = "" ]; then \
echo "I can't build the RPM if you do not set your RPM_TOPDIR"; \
echo "shell variable"; \
exit 1; \
fi;$(END_ECHO)
# In old RPM versions, building was done using 'rpm -ba'; in newer RPM
# versions, it can only be done using 'rpmbuild -ba'. Try to support
# the old RPM versions by using 'rpm' instead of 'rpmbuild', if
# 'rpmbuild' is not available. This hack can presumably be removed
# when all RPM versions on earth will have been updated to the new
# setup (it might take a while).
rpm: check-RPM_TOPDIR dist specfile
$(ECHO_NOTHING)echo "Generating the rpm..."$(END_ECHO)
ifneq ($(RELEASE_DIR),)
$(ECHO_NOTHING)cp $(RELEASE_DIR)/$(PACKAGE_NAME)-$(PACKAGE_VERSION).tar.gz \
$(RPM_TOPDIR)/SOURCES/$(END_ECHO)
else
$(ECHO_NOTHING)cp ../$(PACKAGE_NAME)-$(PACKAGE_VERSION).tar.gz $(RPM_TOPDIR)/SOURCES/$(END_ECHO)
endif
$(ECHO_NOTHING)cp $(SPEC_FILE) $(RPM_TOPDIR)/SPECS/; \
cd $(RPM_TOPDIR)/SPECS/; \
if which rpmbuild > /dev/null 2>/dev/null; then \
rpmbuild="rpmbuild"; \
else \
if which rpm > /dev/null 2>/dev/null; then \
rpmbuild="rpm"; \
else \
echo "Error: You don't have rpm installed!"; \
rpmbuild="rpmbuild"; \
fi; \
fi; \
$${rpmbuild} -ba $(SPEC_FILE_NAME)$(END_ECHO)

Some files were not shown because too many files have changed in this diff Show more