* Utilize documentation rules in Makefile Package.

* doc/GNUmakefile: Rewrite to use Makefile Package.
	* doc/Makefile.postamble: Remove old obsolete rules.

	* Documentation which covers GNUstep as a whole versus just
	gstep-base has been moved to the top level Documentation dir.
	* GNUstep-HOWTO: Delete.
	* doc/gnustep-base.tmpl.texi: GNUstep-HOWTO and FAQ removed.
	Add variable so that included files know they are within the
	main document.
	* doc/gnustep-howto.tmpl.texi: Delete.
	* doc/faq.tmpl.texi: Delete.
	* doc/announce.tmpl.texi: Don't include version.texi needlessly.
	* doc/news.tmpl.texi: Don't include version.texi needlessly.
	* doc/todo.tmpl.texi: Don't include version.texi needlessly.

	* src/GNUmakefile: Don't compile Random class as the name too
	often conflicts with user apps.

	* src/GetDefEncoding.m: Reformat.

	* src/NSArray.m (-replaceObjectsInRange:withObjectsFromArray:):
 	Fix range check.  Use enumerator instead of count.


git-svn-id: svn+ssh://svn.gna.org/svn/gnustep/libs/base/trunk@2783 72102866-910b-0410-8b05-ffd578937521
This commit is contained in:
Scott Christley 1998-04-06 02:09:44 +00:00
parent e5b499f079
commit d48fdafcbb
13 changed files with 141 additions and 2202 deletions

View file

@ -1,3 +1,29 @@
Sun Apr 5 20:07:28 1998 Scott Christley <scottc@net-community.com>
* Utilize documentation rules in Makefile Package.
* doc/GNUmakefile: Rewrite to use Makefile Package.
* doc/Makefile.postamble: Remove old obsolete rules.
* Documentation which covers GNUstep as a whole versus just
gstep-base has been moved to the top level Documentation dir.
* GNUstep-HOWTO: Delete.
* doc/gnustep-base.tmpl.texi: GNUstep-HOWTO and FAQ removed.
Add variable so that included files know they are within the
main document.
* doc/gnustep-howto.tmpl.texi: Delete.
* doc/faq.tmpl.texi: Delete.
* doc/announce.tmpl.texi: Don't include version.texi needlessly.
* doc/news.tmpl.texi: Don't include version.texi needlessly.
* doc/todo.tmpl.texi: Don't include version.texi needlessly.
* src/GNUmakefile: Don't compile Random class as the name too
often conflicts with user apps.
* src/GetDefEncoding.m: Reformat.
* src/NSArray.m (-replaceObjectsInRange:withObjectsFromArray:):
Fix range check. Use enumerator instead of count.
Wed Apr 1 18:45:00 1998 Richard Frith-Macdonald <richard@brainstorm.co.uk>
* Tools/gdomap.m: Modified code so that we make sure we have at least

View file

@ -30,14 +30,18 @@ include $(GNUSTEP_MAKEFILES)/common.make
include ../Version
include ../config.mak
MAKEINFO = makeinfo
TEXI2DVI = texi2dvi
TEXI2HTML = texi2html
# The documents to be generated
DOCUMENT_NAME = gnustep-base
ORIG_FILES = \
# The text documents to be generated
DOCUMENT_TEXT_NAME = \
TODO INSTALL NEWS CODING-STANDARDS README ANNOUNCE STATUS
TOP_DOC_FILES = TODO INSTALL NEWS README ANNOUNCE STATUS
gnustep-base_TEXI_FILES = \
version.tmpl.texi \
gnustep-base.tmpl.texi \
gnustep-howto.tmpl.texi \
gnustep-zones.tmpl.texi \
announce.tmpl.texi \
coding-standards.tmpl.texi \
@ -45,43 +49,32 @@ install.tmpl.texi \
news.tmpl.texi \
readme.tmpl.texi \
status.tmpl.texi \
todo.tmpl.texi \
faq.tmpl.texi
todo.tmpl.texi
TEXI_FILES = \
version.texi \
gnustep-base.texi \
gnustep-howto.texi \
gnustep-zones.texi \
announce.texi \
coding-standards.texi \
install.texi \
news.texi \
readme.texi \
status.texi \
todo.texi \
faq.texi \
TODO_TEXI_FILES = version.tmpl.texi
TODO_TEXT_MAIN = todo.tmpl.texi
TEXT_FILES = \
TODO INSTALL NEWS CODING-STANDARDS README ANNOUNCE FAQ STATUS GNUstep-HOWTO
INSTALL_TEXI_FILES = version.tmpl.texi
INSTALL_TEXT_MAIN = install.tmpl.texi
INFO_FILES = gnustep-base.info
PS_FILES = gnustep-base.dvi
HTML_FILES = gnustep-base_toc.html faq_toc.html
DVI_FILES = gnustep-base.dvi
NEWS_TEXI_FILES = version.tmpl.texi
NEWS_TEXT_MAIN = news.tmpl.texi
TOP_DOC_FILES = TODO README INSTALL NEWS ANNOUNCE STATUS GNUstep-HOWTO
RCS_FILES = $(ORIG_FILES) GNUmakefile Makefile.postamble
DIST_FILES = $(RCS_FILES) $(TEXT_FILES)
CODING-STANDARDS_TEXI_FILES = version.tmpl.texi
CODING-STANDARDS_TEXT_MAIN = coding-standards.tmpl.texi
README_TEXI_FILES = version.tmpl.texi
README_TEXT_MAIN = readme.tmpl.texi
ANNOUNCE_TEXI_FILES = version.tmpl.texi
ANNOUNCE_TEXT_MAIN = announce.tmpl.texi
STATUS_TEXI_FILES = version.tmpl.texi
STATUS_TEXT_MAIN = status.tmpl.texi
-include Makefile.preamble
-include Makefile.local
# We don't actually build anything in this directory so
# just include the common makefile rules
include $(GNUSTEP_MAKEFILES)/rules.make
include $(GNUSTEP_MAKEFILES)/documentation.make
-include Makefile.postamble

View file

@ -57,17 +57,7 @@
# before-clean::
# Things to do after cleaning
after-clean::
rm -f version.texi version.tmpl.texi
rm -f $(TEXT_FILES)
rm -f $(ORIG_FILES:.tmpl.texi=.texi)
rm -f *.info
rm -f *.html
rm -f gnustep-base.dvi gnustep-base.aux gnustep-base.log \
gnustep-base.toc gnustep-base.cl \
gnustep-base.cp gnustep-base.cps gnustep-base.fn gnustep-base.fns \
gnustep-base.ky gnustep-base.pg gnustep-base.pr gnustep-base.tp \
gnustep-base.vr
# after-clean::
# Things to do before distcleaning
# before-distclean::
@ -81,18 +71,7 @@ after-clean::
# Things to do after checking
# after-check::
srcdir=.
INFO_FLAGS = -I $(srcdir) -D NO-TEXI2HTML --no-header
HTML_FLAGS = -split_chapter -expandinfo -I $(srcdir)
TEXT_FLAGS = -I $(srcdir) -D NO-TEXI2HTML -D TEXT-ONLY --no-header --no-split
text: $(TEXT_FILES)
info: $(INFO_FILES)
ps: $(PS_FILES)
html: $(HTML_FILES)
dvi: $(DVI_FILES)
version.tmpl.texi: $(srcdir)/../Version
version.tmpl.texi: ../Version
rm -f version.tmpl.texi
echo '@set GNUSTEP-BASE-VERSION' $(GNUSTEP_BASE_VERSION) \
> version.tmpl.texi
@ -114,141 +93,5 @@ version.tmpl.texi: $(srcdir)/../Version
>> version.tmpl.texi; fi
cp version.tmpl.texi version.texi
gnustep-base.dvi: $(ORIG_FILES)
rm -f $(TEXI_FILES)
for i in $(ORIG_FILES); do \
cp $$i `basename $$i .tmpl.texi`.texi ; \
done
$(TEXI2DVI) $(srcdir)/gnustep-base.texi
gnustep-base.info: $(ORIG_FILES)
rm -f $(TEXI_FILES)
for i in $(ORIG_FILES); do \
sed -e 's,@email{\([^}]*\)},<\1>,g' \
$(srcdir)/$$i \
| sed -e 's,@url{\([^}]*\)},@samp{\1},g' \
> `basename $$i .tmpl.texi`.texi ; \
done
$(MAKEINFO) $(INFO_FLAGS) -o gnustep-base.info $(srcdir)/gnustep-base.texi
gnustep-base.ps: gnustep-base.dvi
dvips gnustep-base.dvi -o gnustep-base.ps
gnustep-base_toc.html: $(ORIG_FILES)
rm -f $(TEXI_FILES)
for i in $(ORIG_FILES); do \
sed -e 's,@email{\([^}]*\)},<A HREF="mailto:\1">\1</A>,g' \
$(srcdir)/$$i \
| sed -e 's,@url{\([^}]*\)},<A HREF="\1">\1</A>,g' \
| sed -e 's,^ *$$,@br{},g' \
> `basename $$i .tmpl.texi`.texi ; \
done
$(TEXI2HTML) $(HTML_FLAGS) gnustep-base.texi
faq_toc.html: $(ORIG_FILES)
rm -f $(TEXI_FILES)
for i in $(ORIG_FILES); do \
sed -e 's,@email{\([^}]*\)},<A HREF="mailto:\1">\1</A>,g' \
$(srcdir)/$$i \
| sed -e 's,@url{\([^}]*\)},<A HREF="\1">\1</A>,g' \
| sed -e 's,^ *$$,@br{},g' \
> `basename $$i .tmpl.texi`.texi ; \
done
$(TEXI2HTML) $(HTML_FLAGS) faq.texi
# Rules for producing the text files
README: version.tmpl.texi readme.tmpl.texi
sed -e 's,@email{\([^}]*\)},<\1>,g' \
$(srcdir)/readme.tmpl.texi \
| sed -e 's,@url{\([^}]*\)},@samp{\1},g' \
> readme.texi ; \
$(MAKEINFO) $(TEXT_FLAGS) -o README $(srcdir)/readme.texi
ANNOUNCE: version.tmpl.texi announce.tmpl.texi
sed -e 's,@email{\([^}]*\)},<\1>,g' \
$(srcdir)/announce.tmpl.texi \
| sed -e 's,@url{\([^}]*\)},@samp{\1},g' \
> announce.texi ; \
$(MAKEINFO) $(TEXT_FLAGS) -o ANNOUNCE $(srcdir)/announce.texi
INSTALL: version.tmpl.texi install.tmpl.texi
sed -e 's,@email{\([^}]*\)},<\1>,g' \
$(srcdir)/install.tmpl.texi \
| sed -e 's,@url{\([^}]*\)},@samp{\1},g' \
> install.texi ; \
$(MAKEINFO) $(TEXT_FLAGS) -o INSTALL $(srcdir)/install.texi
NEWS: version.tmpl.texi news.tmpl.texi
sed -e 's,@email{\([^}]*\)},<\1>,g' \
$(srcdir)/news.tmpl.texi \
| sed -e 's,@url{\([^}]*\)},@samp{\1},g' \
> news.texi ; \
$(MAKEINFO) $(TEXT_FLAGS) -o NEWS $(srcdir)/news.texi
FAQ: version.tmpl.texi faq.tmpl.texi
sed -e 's,@email{\([^}]*\)},<\1>,g' \
$(srcdir)/faq.tmpl.texi \
| sed -e 's,@url{\([^}]*\)},@samp{\1},g' \
> faq.texi ; \
$(MAKEINFO) $(TEXT_FLAGS) -o FAQ $(srcdir)/faq.texi
STATUS: version.tmpl.texi status.tmpl.texi
sed -e 's,@email{\([^}]*\)},<\1>,g' \
$(srcdir)/status.tmpl.texi \
| sed -e 's,@url{\([^}]*\)},@samp{\1},g' \
> status.texi ; \
$(MAKEINFO) $(TEXT_FLAGS) -o STATUS $(srcdir)/status.texi
TODO: version.tmpl.texi todo.tmpl.texi
sed -e 's,@email{\([^}]*\)},<\1>,g' \
$(srcdir)/todo.tmpl.texi \
| sed -e 's,@url{\([^}]*\)},@samp{\1},g' \
> todo.texi ; \
$(MAKEINFO) $(TEXT_FLAGS) -o TODO $(srcdir)/todo.texi
CODING-STANDARDS: version.tmpl.texi coding-standards.tmpl.texi
sed -e 's,@email{\([^}]*\)},<\1>,g' \
$(srcdir)/coding-standards.tmpl.texi \
| sed -e 's,@url{\([^}]*\)},@samp{\1},g' \
> coding-standards.texi ; \
$(MAKEINFO) $(TEXT_FLAGS) -o CODING-STANDARDS \
$(srcdir)/coding-standards.texi
GNUstep-HOWTO: version.tmpl.texi gnustep-howto.tmpl.texi
sed -e 's,@email{\([^}]*\)},<\1>,g' \
$(srcdir)/gnustep-howto.tmpl.texi \
| sed -e 's,@url{\([^}]*\)},@samp{\1},g' \
> gnustep-howto.texi ; \
$(MAKEINFO) $(TEXT_FLAGS) -o GNUstep-HOWTO \
$(srcdir)/gnustep-howto.texi
# Unused for now, but may be used in the future.
#%: %.texi
# $(MAKEINFO) $(MAKEINFO_FLAGS) -o $@ -D ${@}_ONLY \
# --no-header --no-split $(srcdir)/$<
#
#%.texi: %.www.texi
# rm -f $@
# sed -e 's,@email{\([^}]*\)},<\1>,g' \
# $(srcdir)/$< \
# | sed -e 's,@url{\([^}]*\)},@samp{\1},g' \
# > $@
#
#%.html: %.www.texi
# rm -f $@.texi
# sed -e 's,@email{\([^}]*\)},<A HREF="mailto:\1">\1</A>,g' \
# $(srcdir)/$< \
# | sed -e 's,@url{\([^}]*\)},<A HREF="\1">\1</A>,g' \
# | sed -e 's,^ *$$,@br{},g' \
# > $<.html.texi
# texi2html -expandinfo $(MAKEINFO_FLAGS) $<.html.texi
# mv -f $<.html.html $*.html
regenerate: $(DIST_FILES)
regenerate: $(DOCUMENT_TEXT_NAME)
mv $(TOP_DOC_FILES) ..
copy-dist: $(DIST_FILES)
mkdir ../snap/doc
ln $(DIST_FILES) ../snap/doc
ln $(TOP_DOC_FILES) ../snap

View file

@ -1,7 +1,9 @@
@chapter Announcement
@c set the vars GNUSTEP-BASE-VERSION and GNUSTEP-BASE-GCC-VERSION
@ifclear GSTEP-BASE-MAIN
@include version.tmpl.texi
@end ifclear
The GNUstep Base Library, version @value{GNUSTEP-BASE-VERSION}, is now
available.

View file

@ -1,903 +0,0 @@
@c A FAQ for GNUstep
@c
@c This file uses the special commands @url{} and @email{}. They are
@c handled by the doc/Makefile.
@iftex
@global@let@email=@i
@global@let@url=@samp
@end iftex
@c @ifinfo
@c @definfoenclose email, <, >
@c @definfoenclose url `, '
@c @end ifinfo
@chapter GNUstep Frequently Asked Questions with Answers
Maintained by Andrew McCallum @email{mccallum@@gnu.org}, with
contributions by Adam Fedor @email{fedor@@gnu.org},
Pascal Forget @email{pascal@@wsc.com}, Scott Christley
@email{scottc@@net-community.com}, and Randy Chapman
@email{chapman@@u.washington.edu}.
Last updated @today{}
Please send corrections to @email{gnustep-maintainer@@gnu.org}.
The intended audience of this FAQ is future and present code developers
for GNUstep. This FAQ serves a purpose complementary to the GNUstep WWW
pages---since it is written and maintained directly by those writing
code for GNUstep, it emphasizes (although not exclusively): (1)
technical details and organization, (2) the functionality is coded and
working now. This FAQ is intended to provide a succinct document in
which to find GNUstep information without hype.
@section GNUstep General Information
@enumerate
@item @b{What is GNUstep?}
GNUstep is the Free Software Foundation's effort to implement NeXT
Software Inc.'s (now Apple) OpenStep Standard. The project is not
finished, however some components are useable now.
The GNUstep project consists of the following sub-projects:
@itemize @bullet
@item GNU Objective C Compiler and Objective C Runtime Library -
Although not actually a component of GNUstep, GCC and the GNU
Objective C Runtime Library are integral to GNUstep, since they are used
to make every GNU Objective C program.
@item GNUstep Base Library - Code for non-graphical objects, such as
strings, collections, archiving support and distributed objects
messaging. (Including functionality similar to OpenStep's
@samp{FoundationKit}.)
@item GNUstep GUI Library - Code for graphical objects used in making a
Graphical User Interface (GUI). This includes buttons, sliders, text
fields, windows, menus, etc. (Including functionality similar to
OpenStep's @samp{AppKit}.)
@item GNUstep DisplayGhostScript Server - A server that draws PostScript
graphics to the screen, and receives events from the keyboard and
mouse. It is based on GhostScript.
@item GNUstep Interface Modeller Application - An application for
graphically assembling application interfaces.
@end itemize
More detailed information about each of these sub-projects can be found
in their own sections below.
There are several projects related to GNUstep that are not officially
part of the GNU project and GNUstep, but may become so in the future.
These include: the @samp{G3DKit} project, (contact Thomas Engle
@email{tsengel@@cip.informatik.uni-erlangen.de}); an application library
based on OpenGL, (contact Georg Tuparev
@email{Tuparev@@EMBL-Heidelberg.de}); and @samp{ProjectCenter}, a source
code management and development environment, (contact unknown). If you
know of others, please contact the FAQ maintainer.
The initial target platforms for GNUstep are Linux and other UN*X's.
There has been some OS/2 WARP work, but I have not seen any ongoing work
on this platform yet, (contact McCallum if you are interested).
@item @b{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{FoundationKit}, a library of
non-graphical objects; the @samp{AppKit}, a library of objects usful in
creating graphical applications; and @samp{DisplayPostscript}, an
interface for drawing to the screen using the PostScript graphics
language.
You can obtain a copy of the OpenStep standard in
@itemize @bullet
@item texinfo at @url{http://www.dartmouth.edu/~ajones/Projects}.
@item HTML at @url{http://www.nmr.embl-heidelberg.de/GNUstep/GNUOpenStep}.
@item PostScript and RTF at @url{ftp://ftp.next.com/pub/OpenStepSpec/}.
@end itemize
@item @b{Who is currently involved in writing GNUstep code?}
For the sake of being social and getting to know each other, here is a
list of the folks who are currently, actively contributing GNUstep code.
The list includes a brief descriptions of each person's background and
involvement in the GNUstep coding efforts.
@itemize @bullet
@item Adam Fedor @email{fedor@@gnu.org} Co-Maintainer of the
GNUstep project, continues his excellent, long service as user, tester,
and code contributor to both the Base Library and the GUI Library.
@item Andrew McCallum @email{mccallum@@gnu.ai.mit.edu} was appointed chief
maintainer of the GNUstep project by Richard Stallman in January 1996.
He has been involved and hacking in the NeXT community since NeXTSTEP
version 0.8; he has been working on GNU Objective C and the Base Library
since 1993.
@item Scott Christley @email{scottc@@net-community.com} is in charge of
the GUI library and the InterfaceModeler project, which is currently in
the design stages. He is also the maintainer of the Objective-C
language and runtime for GCC.
@item Richard Frith-Macdonald @email{richard@@brainstorm.co.uk} is
responsible in large part for the distributed objects system as well as
many other classes in the GNUstep base library.
@item Ovidiu Predescu @email{ovidiu@@net-community.com} is doing a lot of work
on the GUI and XDPS backend, wrote the Makefile package, and also, along
with Mircea Ion Oancea wrote the Foundation extensions and the alternate
Foundation library libFoundation.
@item Pascal Forget @email{pascal@@wsc.com} is working on the GUI
Library in conjunction with Scott Christley. He has worked with Randy
Chapman's DisplayGhostScript and X Windows as a GNUstep GUI backend.
@item Randy Chapman @email{chapman@@u.washington.edu} has been working
on the GNUstep DisplayGhostScript Server, adding DPS extensions to
GhostScript, including pswrap work.
@end itemize
There are many others who have made significant contributions to
GNUstep, but who are not currently contributing code, (such as Kresten
Thorup @email{krab@@next.com} and Paul Kunz
@email{paul_kunz@@slac.stanford.edu}). For more information about
GNUstep history, see the GNUstep WWW pages.
There are also several others who have contributed individual classes to
GNUstep, but who are not actively contributing to general GNUstep work.
This list is not intended to be a complete list of GNUstep code
contributors; that information is available in each of the GNUstep code
packages.
There are also other code developers who are writing Objective C code
related to GNUstep, but for projects that are not officially part of the
GNU project and GNUstep. We hope that some of these projects will join
the GNU project and GNUstep in the future.
Please send corrections to the FAQ maintainer.
@item @b{Is there a WWW site for GNUstep? Are there mailing lists for GNUstep?}
There is a WWW site at @url{http://www.gnustep.org}, (and its mirror
@url{http://www.NMR.EMBL-Heidelberg.DE/gnustep}, that contains many
useful pointers.
There are several mailing lists:
@itemize @bullet
@item @email{discussion@@gnustep.org} is a mailing list for general
discussion of GNUstep developments. Announcements about GNUstep
progress are also made there. The list is maintained by Georg Tuparev
@email{Tuparev@@EMBL-Heidelberg.de}.
To join, send mail to @email{discussion-request@@gnustep.org}.
@item @email{webmasters@@gnustep.org} is a mailing list for discussion of
the GNUstep WWW site.
To join, send mail to @email{webmasters-request@@gnustep.org}.
@item @email{g3dkit@@gnustep.org} is a mailing list for discussion of a
library for drawing 3D graphics; it is based on OpenGL and RenderMan.
The Free Software Foundation is hoping that this work can become an
official part of the GNU project and the GNUstep project.
To join, send mail to @email{g3dkit@@gnustep.org}.
@item There is also a private mailing list for the core active
developers of GNUstep. Those people who contribute large sections of
code and who are interested in making and planning further contributions
may be invited to join. We apologize in advance, but, for the sake of
efficient communication, the list is not open to people who are not
actively contributing significant coding work to the project; don't
bother asking to be added unless you have already been in contact with
Adam Fedor about source code contributions. If you would like to make
code contributions, by all means, contact Adam. This list is maintained
by Adam @email{fedor@@gnu.org} and Andrew McCallum
@email{mccallum@@gnu.org}.
@end itemize
@item @b{What is the current state of the project? When can I expect it to be completed?}
The Base Library is about 90 percent done. Significant useful work can
already be done using the library. The GUI library is about 65
percent done.
More detailed information about the state of each of the sub-projects
can be found at the above mentioned web sites.
With free software, you should never, ever, believe promises about when
a project will be finished. ...However, that said: there are certain
GNUstep developers that are counting on having useful Base and GUI
libraries working by the end of Summer 1998.
@item @b{On what platforms will it run?}
The short answer is: On whichever platforms volunteers offer port it!
The main target platforms is free operating systems, namely Linux and
the Hurd. Much of the code is OS-independent, and should port quite
easily to various UNIX-like OS's. There has been interest in a port to
Linux on the Apple Macintosh, but we have not heard from any developers
working on this.
At least one of the current active developers is also working with
Windows NT. There has been some interest in an OS/2 port, but I've seen
few code contributions for OS/2.
@item @b{How can I help?}
If you have a specific piece of functionality that you would like to
contribute, or if you would like to ask for suggestions about what
coding work you can do to help, contact the GNUstep Maintainers,
Andrew McCallum and Adam Fedor @email{gnustep-maintainer@@gnu.org}.
@end enumerate
@c GNUstep General
More detailed inforamtion about each of the GNUstep sub-projects can be
found below.
@section GNU Objective C Compiler and Objective C Runtime Library
@enumerate
@item @b{What is the Objective C Runtime Library?}
The Objective C Runtime Library provides C functions and data structures
required to execute an Objective C program. An introduction to the
Objective C Language is provided at
@url{http://gemma.apple.com/techinfo/techdocs/rhapsody}.
The Frequently Asked Questions list for
@url{news://comp.lang.objective-c} can be found at @url{??}.
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 improvements over NeXT's implementation:
@itemize @bullet
@item NeXT's runtime requires an extra function call (objc_msgSend) for
each message that is sent; (the function looks up the receiving
instance's implementation of the method). GNU's implementation is
faster because it does not use an extra function call. Instead, it
inlines a short piece of code that makes two pointer hops into a method
dispatch table; because the code is inlined, it does not incur the
overhead of a function call.
@item When running in thread-safe mode, NeXT's runtime must aquire a
global mutual exclusion lock every time a message is sent; this is
extremely slow. GNU's runtime, amazingly, sends messages just as fast
in thread-safe mode as it does in single-thread mode---the code path
does not contain even a single extra instruction! The GNU runtime only
needs locks when certainly structures are written, not read; the
structures are written relatively infrequently: only at class
initialization and when @samp{+poseAs:} is called.
@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 extrememly 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.
@item GNU's runtime library has a new class heirarchy manipulating
method called @samp{-transmuteClassTo:}. It can change the class of an
instance to a cousin class of the same instance-size.
@item NeXT's compiler, @samp{cc}, is based on an old version of
@samp{gcc}. GNU's compiler is, of course, the latest version of
@samp{gcc}, and therefore contains all the latest enhancements.
@end itemize
@item @b{What is its current state of development?}
GNU's Objective C Runtime library has been stable and useable since
1993. Enhancements continue to be made.
GCC contains the source for the GNU Objective C compiler and runtime
library. It can be obtained from @url{ftp://prep.ai.mit.edu/pub/gnu},
or any other mirror of the GNU archives. As far as I know, the GNU
Objective C Runtime runs on all, platforms on which GCC runs.
GCC version 2.8.0 or later is required for GNUstep. You can also use
egcs version 1.0.1 or later. Both compilers should contain the
thread-safe features. There are currently thread-safe backends for DEC
OSF/1, Solaris, IRIX, Linux, and WindowsNT. Volunteers are solicited
for writing additional back-ends.
@item @b{Does it allow a mixture of Objective C and C++}
No. Unlike NeXT's @samp{cc}, GNU GCC does not support source files
containing both Objective C and C++. People at Cygnus have mentioned
that they would be willing to do the work---if they were paid for it, of
course. Several people are interested in seeing this happen. Send
email to @samp{discussion@@gnustep.org} and
@samp{gnu-objc@@gnu.org} if you are interesting in pushing this
issue, so that the efforts of all those people interested can be
coordinated.
Also, unlike NeXT's @samp{cc}, GNU GCC does not support the @samp{extern
"Objective-C"} construct.
@item @b{Where can I find more information?}
The FAQ associated with the newsgroup @samp{comp.lang.objective-c}
contains more information about GNU Objective C.
@end enumerate
@c GNU Compiler and Objective C Runtime Library
@section GNUstep Base Library
@enumerate
@item @b{What is the GNUstep Base Library?}
@include base-desc.texi
@item @b{What is its current state of development?}
It is about 90 percent of the way to having all the OpenStep classes.
Significant useful work can already be done using the library since the
missing 10 percent are the less-often-used classes, such as NSByteStore.
Over 60,000 lines of code have already been written.
Look at the STATUS file that comes with the distriution for additional
status information.
@item @b{In what ways is the Base Library different from OpenStep's FoundationKit?}
It contains several enhancements:
@enumerate
@item OpenStep has a single NSInvocation class, which is based on
sending a message to an object. The GNUstep Base Library has a
heirarchy of Invocation classes with various capabilities. Two of the
Invocation subclasses can cause C functions to be called, instead of
sending messages to objects; these subclasses are useful when one would
otherwise have to write a new class and method to implement some simple,
stateless functionality. Other subclasses of Invocation could hold
GUILE or TCL code to be run, or could record their invocation
information to a file.
All of them respond to a new method called @samp{-invokeWithObject:}
that is useful for enumerations.
@item I have been told that OpenStep's NSNotificationCenter is slow.
GNUstep's NotificationDispatcher class is based on interesting use of
linked lists and hash tables in such a way that it should be
comparatively very fast.
OpenStep notifications must be method selectors sent to objects.
GNUstep notifications can invoke an Invocation instead, thus taking
advantage of the flexbility and context-holding capability of Invocation
objects.
@item OpenStep takes a disconnected ``class forest'' approach to
collection classes. GNUstep has all the OpenStep collection classes,
however they are build from underlying GNU collection classes that are
organized as a deep class heirarchy. Because of the deep heirarchy,
there is a built-in uniformity of method names, and there are common
abstract superclasses in which to add new common functionality.
Unlike OpenStep, the Base Library also has additional collection classes
for heaps, stacks, queues, trees and linked lists. There is also a rich
variety of enumeration methods based on invocations.
@item OpenStep's archiving mechanism provides only one choice of backend
format. By backend format, I mean a format for writing C types, such as
ints, floats and C strings. The GNUstep archiving mechanism has a clear
separation between frontend and backend. Different backends are
provided. One backend writes in human-readable and human-editable ASCII
text, (including programmer-provided text name labels for each of the
items.) Another writes in a compact, stream machine-independent bits.
A third writes in an even more compact stream of machine-dependent bits;
this is useful for distributed objects connections on machines of the
same architecture.
OpenStep's archiving system implements forward references, (that is,
calls to @samp{encodeConditionalObject:} for which the object argument
has not yet been encoded, but will be encoded later.) by making two
passes through all the -encodeWithCoder: methods of the objects to be
encoded. GNU's archiving system, on the other hand, implements forward
references efficiently, without making two passes. It does this by
using an object decoding method (@samp{-decodeObjectAt:..}) that
back-patches @code{id}-pointers when the conditionally encoded objects
are found in the coded stream.
@item OpenStep's distributed objects mechanism requires four network
``hops'' when sending and responding to each new method---one to send
the request, one for the server to request the method type from the
client, one for the client to respond with the method type, and one to
respond with the return value of the method call. GNUstep distributed
objects takes advantage of the superior GNU Objective C runtime, which
includes the method type locally with the selector. Since the method
type can already be found on the server, there is no need to ask the
client for the type, and GNU distributed objects takes two less network
hops.
@item OpenStep's distributed objects mechanism is based on a single
@i{Port} class. By contrast, GNU distributed objects makes use of a
heirarchy of Port objects that will provide the different ``back-ends''
appropriate to different situations. For example, the network back-end
for GNU distributed objects will be able to send messages using TCP,
UDP, local Unix sockets, or shared memory.
@item NeXT's Objective C runtime becomes very slow when thread-safety is
turned on since the runtime must acquire a global mutual-exclusion lock
each time an Objective C message is sent. GNUstep takes advantage of
the superior GNU Objective C runtime, which is requires zero extra time
to send a message when thread safe---not even one instruction more is
required for a thread-safe message send. Mutual exclusion locks are
only necessary in the relatively infrequent times in which classes are
initialized or @samp{+poseAs:} is called. Galen Hunt implemented the
patches to make the runtime thread-safe.
@end enumerate
@item @b{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.
If you are interested in having it ported to a new platform, or if you
have any questions about it, please contact Andrew McCallum,
@email{mccallum@@gnu.ai.mit.edu}.
The distributed object support classes are @b{Connection}, @b{Proxy},
@b{ConnectedCoder}, @b{Port}, @b{TcpPort}, @b{UdpPort}, and
@b{MachPort}. Of the various Port backend's, currently only the the
TcpPort is in working order.
[NOTE: The GNU distributed object facilities have the same ease-of-use
as NeXT's; be warned, however, that they are not compatible with each
other. They have different class heirarchies, different instance
variables, different method names, different implementation strategies
and different network message formats. You cannot communicate with a
NeXT NSConnection using a GNU Connection.
Here are some differences between GNU distributed objects and NeXT's
distributed objects: NSConnection creates NSProxy objects for local
objects as well as remote objects; GNU Connection doesn't need and
doesn't create proxies for local objects. NSProxy asks it's remote
target for the method encoding types and caches the results; GNU Proxy
gets the types directly from the local GNU "typed selector" mechanism
and has no need for querying the remote target or caching encoding
types. The NSProxy for the remote root object always has name 0 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. See the "lacking-capabilities" list below for a partial
list of things that NSConnection can do that GNU Connection cannot.]
Here is a partial list of what the current distributed objects system
can do:
@itemize @bullet
@item It can pass and return all simple C types, including char*, float
and double, both by value and by reference.
@item It can pass structures by value and by reference, return
structures by reference. The structures can contain arrays.
@item It obeys all the type qualifiers: oneway, in, out, inout, const.
@item It can pass and return objects, either bycopy or with proxies. An
object encoded multiple times in a single message is properly decoded on
the other side.
@item Proxies to remote objects are automatically created as they are
returned. Proxies passed back where they came from are decoded as the
correct local object.
@item It can wait for an incoming message and timeout after a specified
period.
@item A server can handle multiple clients.
@item The server will ask its delegate before making new connections.
@item The server can make call-back requests of the client, and keep it
all straight even when the server has multiple clients.
@item A client will automatically form a connection to another client if
an object from the other client is vended to it. (i.e. Always make a
direct connection rather than forwarding messages twice, once into the
server, from there out to the other client.)
@item Servers and clients can detect port deaths (due to remote
application crash, for example) and close down gracefully, announcing
the closed connection to other objects who have requested notifications.
@item Exceptions that occur in the server (during the course of
servicing a request) are sent back to the client, and the exception is
then properly raised in the client's process.
@item Servers and clients can be on different machines of different
architectures; byte-order and all other architecture-dependent nits are
taken care of for you. You can have SPARC, i386, m68k, and
MIPS---Linux, SunOS, Solaris, IRIX, AIX and HPUX machines all
distributed-object'ing away together in one big web of client-server
connections! The library can be ported to other architectures and
operating systems also. Please contact Andrew McCallum,
@email{mccallum@@gnu.ai.mit.edu}, if you are interested in having a new
port of GNU Distributed Objects.
@end itemize
Here is a partial list of what the current distributed objects system
does @b{not} yet do:
@itemize @bullet
@item Run multi-threaded.
@item Return structures by value.
@item Use Mach ports, pass Mach ports, pass Mach virtual memory.
@end itemize
@item @b{What is the general organization of the non-OpenStep, GNU classes?}
(This FAQ does not describe the OpenStep standard classes, because a
detailed description of those can be found in the OpenStep
documentation.)
Here are some of the public GNU classes. See the source header files
for more information.
@format
The collection class heirarchy:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Collection Root all the collection classes (abstract)
Set Unordered collection, no duplicates
Bag Unordered collection, may have duplicates
KeyedCollection Contents accessible by object key (abstract)
Dictionary Concrete implementation
MappedCollection One collection maps into another
IndexedCollection Contents accessible by integer (abstract)
BinaryTree Basic, sorted binary tree
RBTree Red-Black tree, sorted, more balanced
SplayTree Splay operation keeps tree balanced
OrderedCollection Can insert at arbitrary index (abstract)
Array Basic array
Queue First in, first out
Stack First in, last out
GapArray Efficient handle middle insert and delete
LinkedList More efficient than arrays for some ops
Strings (as in Smalltalk, part of the collection class heirarchy):
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ConstantString Root of string classes, chars not changable
String contents can be changed
*CString Strings based on 1-byte characters
Writing/reading bytes, C-type variables, and connected groups of objects:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Stream Source and Destination for stream of bytes
StdioStream Stream based on FILE* (files, pipes, etc)
MemoryStream Stream based on memory buffer
CStream Write/Read C-type variables on stream
TextCStream use human-readable format
BinaryCStream use compact machine independent format
RawCStream use even more compact machine depedent format
Coder Write/Read groups of objects on CStream
Encoder Writing
Archiver for files
ConnectedEncoder for distributed objects
Decoder Reading
Unarchiver for files
ConnectedDecoder for distributed objects
Holding code to be run on request:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Invocation Contains code that can be run
ArgframeInvocation based on gcc __builtin_apply()
MethodInvocation invokes a method on an object
ObjectMethodInvocation the method takes at least one object arg
ObjectFunctionInvocation calls a function with type (id(*)(id))
VoidFunctionInvocation calls a functions with type (void(*)())
Posting information about happenings:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Notification for posting information others may want
NotificationRequest a record of an observers request
NotificationInvocation will be posted by invoking an Invocation
NotificationPerformer will be posted by -perform:withObject
NotificationDispatcher distributes Notification's among requestors
Distributed Objects Support:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Connection between two machines on which messages sent
Proxy Representative of a remote object
Port A mailbox for packets
InPort for receiving packets
OutPort for sending packets
Tcp*Port based on TCP/IP
Udp*Port based on UDP/IP
Mach*Port based on Mach ports
Packet holds data and reply port
@end format
@item @b{Why don't we separate the OpenStep standard classes from the GNU-specific classes?}
Just like @i{GCC} has more features than ANSI C, @i{gawk} has more
features than @i{awk}, and the @i{GNU C Library} has more features than
standard C Libraries, also, @i{GNUstep} has more features than
@i{OpenStep}. In all these cases, ``more features'' means some
combination of increased capabilities, and better time/space efficiency.
It is in keeping with the GNU tradition that GNU implementations are not
simply mindless copies of others standards, but that our implementations
include new improvements and creative solutions to previous annoyances.
In fact, Richard Stallman encourages innovation of this kind---not only
for the sake of better software---but also because it makes the legal
issues more clear: when the underlying implementation differs from the
proprietary implementation in significant, core, structural ways, it is
far more difficult for the proprietary entities to claim copyright
infringement.
But the far more exciting reason for structural differences is the
increased efficiency and features that come from the changes. The item
above, ``@b{In what ways is the Base Library different from OpenStep's
FoundationKit?}'', explains some of the advantages that GNUstep's
organizational differences provide.
Many of these advantages are based on variations in class hierarchy, and
could not have been obtained by simply adding Category methods, or
subclasses to NeXT's structural organization. Using the advantageous
GNU structures, providing the OpenStep standard interface on top of the
GNU implementations is quite straightforward, (and when the mechanism
is understood, quite clean, also).
By analogy, consider the GNU C Library's @i{stdio} functionality. It is
based on a different underlying structure that provides new features not
found in standard @i{stdio} implementations. A @i{FILE*} can be opened
on a memory string that automatically grows as necessary; a @i{FILE*}
can be opened on a Mach port, where available. Using the generalized
underlying mechanism, it is straightforward to also implement the
standard @i{FILE*} opened on a UNIX file descriptor.
The GNUstep NSArray class, (for example), is implemented in much the
same way. GNUstep has a generalized collection class hierarchy with a
deep structure that provides common super classes in which a programmer
can add new functionality across all collection classes at once. It
also simply and powerfully ensures uniformity of method names and
semantics across all collection class methods. It also provides more
efficient code sharing between classes. The @i{Array} class is part of
the GNUstep collection classes hierarchy; implementing @i{NSArray} in
terms of @i{Array} is straightforward. It avoids much duplicated code.
And it also provides users of NSArray with the extra GNU features;
(although, like in the GNU C Library, the GNUstep library user has the
option of turning off the availability of these extra features.)
In summary, the GNU project has often found that, while adding new
features to standard programs and libraries often requires more thought
and source code than standard implementations, it is worthwhile because
of the advantages of (1) better features, (2) increased time/space
efficiency, and (2) legal clarity. GNUstep is no exception.
@item @b{Where can I get a copy?}
The most recently released ``official'' version can be obtained from
@url{ftp://ftp.gnu.org/pub/gnu}.
The most recently released alpha version can be obtained from
@url{ftp://alpha.gnu.org/gnu/gnustep}.
@end enumerate
@c GNUstep Base Library
@section GNUstep GUI Library
@enumerate
@item @b{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.
@item @b{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 and
the DisplayGhostScript Server. Other back-ends could allow GNUstep to
run on OpenGL, OS/2, 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.
The front-end does not specify what mechanism to use in order to "plug
in" the back-end---that is the back-end implementor's choice. At least
two backends will use @samp{+poseAs:} method, for example, running
@samp{[XDPSWindow poseAs: [NSWindow class]]}. Using @samp{+poseAs:} is
more flexible than using Categories because it allows the the back-end
implementor to choose what to override in the front-end, instead of
having the interface between front- and back-end fixed by the front-end.
@item @b{What is the current state of development of the front-end?}
Many of the classes are well implemented, if not thouroughly tested.
See the GNUstep web sites and read status information contained in the
distribution for the most up-to-date information.
@item @b{What is the current state of development of the X/DPS back-end?}
Many of the classes are well implemented, if not thouroughly tested.
See the GNUstep web sites and read status information contained in the
distribution for the most up-to-date information.
@item @b{Where can I get a copy?}
At the same place as the Base library.
@end enumerate
@c GNUstep GUI Library
@section GNUstep DisplayGhostScript Server
@enumerate
@item @b{What is the DisplayGhostScript Server?}
@item @b{What is its current state of development?}
@item @b{What is the relationship between the DisplayGhostScript Server and X Windows?}
@end enumerate
@c GNUstep DisplayGhostScript Server
@section GNUstep Interface Modeller Application
@enumerate
@item @b{What is the Interface Modeller?}
Interface Modeller, in its simplest form, is an application for visually
constructing and prototyping graphical user interfaces. At a more
abstract level, it is a tool for connecting instances of Objective C
classes to create a graph of objects; this graph is a model of an
executable program that Interface Modeller can save to a file to be
loaded and executed later outside of Interface Modeller.
@item @b{What is its current state of development?}
It is in the specification stage; no code has been written yet. The
current specifications are available through the GNUstep WWW pages.
@end enumerate
@c GNUstep IM
@c ****************************************************************
@c Compiling
@section Compiling the GNUstep package
@enumerate
@item @b{How do I compile GNUstep on my machine?}
Read the file @file{GNUstep-HOWTO}, which comes with the Base library
distribution, and also is available separately on the GNUstep ftp sites.
@item @b{Are there any precompiled packages available?}
Not really, but you can contact Net-Community
@email{info@@net-community.com} for information on a CD they release
occasionally contaning compiled packages for Linux and Windows NT.
@item @b{I get an error compiling mframe.m in gnustep-base}
This occurs on some Linux systems. You'll need to change the
optimization level, usually like this:
@example
make OPTFLAG=-O
@end example
@item @b{Can I run NeXT OPENSTEP or Apple Rhapsody 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.
@item @b{Is it easy to port OPENSTEP and Rhapsody programs to GNUstep?}
It is probably easy for simple programs. You'll have to rewrite the
Makefiles as GNUstep uses a slightly different format. You will also
have to translate the NIB files (if there are any) to GNUstep model
files using the FoundationExt library.
@end enumerate
@ignore
[Notes to FAQ contributors: Be succinct. Stick to the facts. Emphasize
technical features that are already implemented; avoid writing about
vague features without concrete ideas about their implementation. Your
audience is future and present code contributors to GNUstep, not
managers or publicity people.]
@end ignore
@format
All trademarks mentioned on in this FAQ belong to their owners.
@end format
@c Local variables:
@c page-delimiter: "^\n\n"
@c time-stamp-active: t
@c time-stamp-format: "%d %b %y"
@c time-stamp-line-limit: 50
@c time-stamp-start: "Last updated[ \t]+"
@c time-stamp-end: "\\."
@c end:

View file

@ -3,6 +3,9 @@
@c
@c This file uses the special commands @url{} and @email{}.
@c Let included files know they are within the main document
@set GSTEP-BASE-MAIN
@iftex
@global@let@email=@i
@global@let@url=@samp
@ -86,15 +89,9 @@ into another language, under the above conditions for modified versions.
@c Announcement
@include announce.texi
@c Installation Instructions
@include gnustep-howto.texi
@c News
@include news.texi
@c The FAQ
@include faq.texi
@c Status Report
@include status.texi

View file

@ -1,556 +0,0 @@
\input texinfo @c -*-texinfo-*-
@setfilename gnustep-howto.texi
@chapter Installation
@c @paragraphindent 4
@ignore
This file gives a quick introduction to installing GNUstep.
Copyright (C) 1993 - 1998 Free Software Foundation, Inc.
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.
Permission is granted to copy and distribute modified versions of this
manual under the conditions for verbatim copying, provided also that the
section entitled ``GNU Library General Public License'' is included exactly as
in the original, and provided that the entire resulting derived work is
distributed under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual
into another language, under the above conditions for modified versions,
except that the section entitled ``GNU Library General Public License'' and
this permission notice may be included in translations approved by the
Free Software Foundation instead of in the original English.
@end ignore
@format
GNUstep-HOWTO
Last Update: @today{}
This document explains how to build the different components
of GNUstep.
Copyright (C) 1996 - 1998 Free Software Foundation, Inc.
Authors: Pascal Forget <pascal@@wsc.com>,
Ovidiu Predescu <ovidiu@@net-community.com>,
Adam Fedor <fedor@@doc.com>.
This file is part of GNUstep.
@format
@section Introduction
This document explains how to build the GNUstep project along with all
the tools required to develop applications with it.
In order to easily compile and debug GNUstep projects, you will need the
latest GNU ObjC compiler @samp{GCC} and a modified version of the GNU
debugger @samp{GDB}.
You will need at least 80Mb of hard disk space in order to compile
the GNUstep project. Luckily, you can delete the object files
and the uncompressed source code after each piece of the project
has been successfully built and installed in order to save some
space. The biggest offender is the GCC compiler, which eats up 50Mb
of hard disk space while it compiles.
@section Summary
Currently, you pretty much need to get and install the latest versions
of the following packages:
@display
GCC or egcs
GDB and patch to make it work with better Objective-C
GNU make
TIFF library
DGS or Adobe DPS
gstep-core which is composed of the individual packages:
gstep-make
gstep-base or libFoundation
gstep-gui
gstep-xdps
FoundationExt
@end display
@section Getting the files
Most of the files needed by GNUstep are available from the following ftp
sites. Except for GCC, GDB, GNU make and TIFF, alpha.gnu.org and
ftp.gnustep.org should contain the latest versions of all the required
packages.
@table @samp
@item ftp://ftp.gnu.org/pub/gnu
GCC, GDB, and other GNU tools, and
GNUstep public releases
@item ftp://ftp.sgi.com/graphics/tiff
TIFF library
@item ftp://alpha.gnu.org/gnu/gnustep
GNUstep developer releases and snapshots
@item ftp://ftp.gnustep.org/pub/gnustep
All GNUstep releases
@end table
You need the following packages of either the version given or any later
version, in order to compile GNUstep.
@example
gcc-2.8.0.tar.gz (The GCC compiler)
ftp://ftp.gnu.org/pub/gnu or from other GNU mirror sites.
You can also use egcs-1.0.1.tar.gz, from ftp://ftp.cygnus.com/pub/egcs
gdb-4.16.tar.gz (The GDB debugger)
make-3.75.tar.gz (You need GNU make to compile GNUstep).
ftp://ftp.gnu.org/pub/gnu or from other GNU mirror sites.
gdb-4.16-objc-971112.diff.gz (A patch for easier debugging of Objective-C).
ftp://alpha.gnu.org/gnu/gnustep
tiff-970711.tar.gz (The TIFF library), or
you can use tiff-v3.4beta036-tar.gz or greater version
ftp://ftp.sgi.com/graphics/tiff/
ftp://alpha.gnu.org/gnu/gnustep
ftp://ftp.gnustep.org/pub/gnustep
pcthreads-1.1.0.tar.gz (PCThreads for Linux/GNU Inel x86 systems)
ftp://alpha.gnu.org/gnu/gnustep
ftp://ftp.gnustep.org/pub/gnustep
gstep-core-0.5.0.tar.gz (Contains gstep-make, -extensions, -base, -gui, -xdps)
gstep-make-0.5.0.tar.gz (Makefile package)
gstep-base-0.5.0.tar.gz (Foundation)
gstep-gui-0.5.0.tar.gz (AppKit)
gstep-xdps-0.5.0.tar.gz (X11/PostScript backend)
extensions-0.5.0.tar.gz (Foundation extensions)
dgs-0.5.0.tar.gz (The Display Ghostscript distribution)
ftp://ftp.gnu.org/pub/gnu
ftp://ftp.gnustep.org/pub/gnustep
ftp://alpha.gnu.org/gnu/gnustep
libFoundation-0.8.0.tar.gz (Alternate Foundation)
ftp://ftp.gnustep.org/pub/gnustep
ftp://alpha.gnu.org/gnu/gnustep
ftp://ftp.gnu.org/pub/gnu
@end example
You may get either one of the Foundations libraries (you only need to
take one of them, not both) gstep-base or libFoundation.
Note that you should get the latest version available, not necessarily
the one listed here. For the more adventurous, and since the project is
still in development, it might be better to get the latest snapshot
located in the snap or snapshot subdirectories at
ftp://alpha.gnu.org/gnu/gnustep/snap or the other appropriate ftp locations.
For the following instructions, some version numbers are replaced by XXX.
You shoule replace the 'X's with the version of the package you have.
@section Compiling and Installing the packages
@subsection Compiling GNU make
GNU make is required to compile all GNUstep packages.
@example
cd /usr/src
tar fvxz make-XXX.tar.gz
cd make-XXX
./configure
make
su root
make install
@end example
@subsection Compiling PCThreads
For GNU/Linux systems on Intel x86 processors, the PCThreads library is
known to work with GNUstep. PCThreads version 1.1.0 is an enhanced version
of PCThread 1.0.0 with better support for GNUstep. PCThreads may no longer
be necessary on all GNU/Linux systems, such as Debian 2.0 or other systems
with glibc2.
@example
cd /usr/src
tar fvxz pcthreads-1.1.0.tar.gz
cd pcthreads-1.1.0
./configure
make
su root
make install
@end example
If you are using the GNUstep makefile package and wish PCThreads to be
installed with the GNUstep directory structure; then you should specify the
GNUstep system root as the prefix when you configure the package.
@example
./configure --prefix=$GNUSTEP_SYSTEM_ROOT
@end example
@subsection Compiling GCC
The following commands assume that all the aforementioned files have
been copied to the /usr/src directory on your machine. If you already
have GCC 2.8.0 installed on your system then there is no need to compile
it again, just set up your PATH so that the new GCC is used for
compiling GNUstep.
Special note for Solaris users. GNUstep works on Solaris/Intel systems;
however, GCC 2.8.0 has problems, so you must use the older patched GCC
2.7.2 instead. GCC 2.8.0 has also induced a problem on Solaris/Sparc
systems; however, there is a patch to fix this in the contrib directory
on the ftp sites (This is also true for egcs-1.0.1).
@table @asis
@item 1. Uncompress GCC:
@format
cd /usr/src
tar fvxz gcc-2.8.0.tar.gz
@end format
@item 2. Configure the GCC compiler's makefile for your machine:
@format
./configure
@end format
If you are using the GNUstep makefile package and wish GCC to be
installed within the GNUstep directory structure; then you should
specify the GNUstep system root as the prefix when you configure the
package. This setup requires that you compile and install the GNUstep
Makefile Package before configuring GCC.
@format
./configure --prefix=$GNUSTEP_SYSTEM_ROOT
@end format
To enable multiple threads in the Objective-C library use the
@var{--enable-threads=lib} argument to configure, where @var{lib} is the
thread library to use or @var{--disable-threads} to use a
single-threaded Objective-C runtime. If your system has a native
threads library, like Solaris or SGI, then the @var{--enable-threads}
parameter without the @var{lib} specification will use that native
threads library.
@item 4. Compile GCC
make bootstrap
@item 5. Wait
@format
If you have a Pentium Pro, go drink a coffee.
If you have a fast Pentium, count from 0 to 100 in your head.
If you have a slow Pentium, go eat a bagel.
If you have a 486, go watch the news.
If you have a 386, come back tomorrow.
@end format
@item 6. Install GCC
@format
su root
make install
@end format
@item 7. Delete the GCC directory if you're low on disk space
@format
rm -rf /usr/src/gcc-2.8.0
@end format
@end table
@subsection Patching and Compiling GDB
@table @asis
@item Uncompress GDB, and patch it:
@format
cd /usr/src
tar fvxz gdb-4.16.tar.gz
gunzip gdb-4.16-objc-971112.diff.gz
cd gdb-4.16
patch -p1 < ../gdb-4.16-objc-971112.diff
@end format
@item Configure, compile and install GDB:
@format
cd /usr/src/gdb-4.16
./configure
make
su root
make install
@end format
If you are using the GNUstep makefile package and wish GDB to be
installed with the GNUstep directory structure; then you should specify
the GNUstep system root as the prefix when you configure the package.
This setup requires that you compile and install the GNUstep Makefile
Package before configuring GCC.
@format
./configure --prefix=$GNUSTEP_SYSTEM_ROOT
@end format
@item 4. Make sure GDB is where you think it is
On Linux/GNU, GDB should be installed in /usr/bin, whereas on other
systems, the default installation path is usually /usr/local/bin. If
you have a Linux/GNU box, you can do this:
@format
ln -s /usr/local/bin/gdb /usr/bin/gdb
@end format
Note that this is only a suggestion, you are free to do
whatever you want.
@end table
@subsection Installing the GNUstep libraries
If you have the gstep-core package, you can make and install all the
GNUstep core packages at one time. If you already have a TIFF library
and a Display Postscript system installed, you can do this following the
example instructions below. If you don't already have a TIFF library or
DPS, you have to do things in a slightly different order.
If you have the separate gstep packages, skip to the next section
(Installing the Makefile package).
First decide where you want the GNUstep files to go, and use this as
an argument to configure. If you don't choose
a location, the default is /usr/GNUstep. The example below shows how
to configure the packages for installation in /usr/local/GNUstep.
If you don't have the TIFF library or DPS, first make and install the
Makefile package, the TIFF library and DGS, as shown in the following
three sections.
After you have TIFF and DPS/DGS installed, make the core libraries:
@example
tar fvxz gstep-core-XXXXX.tar.gz
cd gstep-core-XXXX
./configure --prefix=/usr/local/GNUstep
make
su root
make install
@end example
With the various GNUstep libraries you can use the various
switches, shared, debug. As in ``make shared=no debug=yes'' (Make sure
you use the same switches for every package you compile, and also when
you install).
Skip to the Additional Instructions sections to finish up installation
of the GNUstep system.
@subsection Installing the Makefile package
Decide where you want the GNUstep files to go, and use this as
an argument to configure in the makefile package. If you don't choose
a location, the default is /usr/GNUstep. The example below shows how
to configure the packages for installation in /usr/local/GNUstep.
@example
tar fvxz gstep-make-XXXXXX.tar.gz
cd gstep-make-XXXXXX
./configure --prefix=/usr/local/GNUstep
make
su root
make install
@end example
If you are using, or intend to compile the GCC Objective-C runtime with
threads, you need to specify the thread package you are using when
running configure:
@example
LIBS=-lpcthread; ./configure --prefix=/usr/local/GNUstep
@end example
After this you should add the shell script @file{GNUstep.sh} in the makefile
package to you initialization file (such as @file{.profile}). For instance:
@example
. /usr/local/GNUstep/Makefiles/GNUstep.sh
@end example
in your @file{.profile} file will work. It defines environment variables that
are needed to find GNUstep files and executables. Users of csh need
to change the @file{GNUstep.sh} script so it will work with csh. Read the
@file{README} for more info.
GNUstep packages will automatically install in this directory structure. You
can install other packages (such as GCC) in the same structure if you specify
the GNUstep system root as the prefix when you configure the package.
@example
./configure --prefix=$GNUSTEP_SYSTEM_ROOT
@end example
@subsection Compiling the TIFF library
You don't need a customized version of the TIFF library, or necessarily
even the newest one, but the customized version located at the GNUstep
ftp sites will install in the GNUstep directory structure.
@example
cd /usr/src
tar fvxz tiff-XXXXX.tar.gz
cd tiff-XXX
./configure
make
su root
make install
@end example
@subsection Building DGS
If you have a real Display Postscript system already on your computer,
you don't necessarily need DGS. Linux/GNU michines need DGS.
You can also read the file DGS-HOWTO located at the ftp machines listed
above.
@example
tar fvxz dgs-XXXXXX.tar.gz
cd dgs-XXXXXX/dgs
./configure
make
su root
make install
@end example
@subsection Building a Foundation library
If you work with gstep-base:
@example
cd /usr/src
tar fvxz gstep-base-XXXXXX.tar.gz
cd gstep-base-XXXXXX
./configure
make
su root
make install
@end example
On some Linux systems, you may have to change the optimization level
(particularly if you get an error compiling mframe.m):
@example
make OPTFLAG=-O
@end example
If you work with libFoundation:
@example
cd /usr/src
tar zxf libFoundation-0.8.0.tar.gz
cd libFoundation-0.8.0/libFoundation
./configure --with-gnustep
make
su root
make install
@end example
@subsection Building the GUI libraries
Compile the GUI library:
@example
cd /usr/src
tar zxf gstep-gui-XXXXXX.tar.gz
cd gstep-gui
make
su root
make install
@end example
Compile the XDPS library:
@example
cd /usr/src
tar zxf gstep-xdps-XXXXXX.tar.gz
cd gstep-xdps
./configure
make
cd Testing
make
@end example
@subsection Building the Foundation extensions
The Foundation extensions have some useful features in them. The one
reason you definitely might want to use it is to read in GNUstep model
files which store User Interface structures in ASCII format, and can
also be used to translate NeXT and OpenStep NIB files to GNUstep model
format.
Compiling:
@example
cd /usr/src
tar zxf FoundationExt-XXX.tar.gz
cd extensions
make
su root
make install
@end example
@section Additional Installation
If you haven't already done so when installing the Makefile package,
you should add the shell script @file{GNUstep.sh} in the Makefile
package to you initialization file (such as @file{.profile}). For instance:
@example
. /usr/local/GNUstep/Makefiles/GNUstep.sh
@end example
in your @file{.profile} file will work. It defines environment variables that
are needed to find GNUstep files and executables. Users of csh need
to change the @file{GNUstep.sh} script so it will work with csh. Read the
@file{README} for more info.
Set up your home GNUstep directory. This is where user defaults are
kept, and in the future, other files may be kept there.
@example
cd
mkdir GNUstep
@end example
Next, set your local time zone. There are three ways to do this, pick
one:
@enumerate
@item Use the dwrite utility to set ``Local Time Zone'' to your local
time zone.
@item Set the @var{TZ} environment variable.
@item Create the file
@file{$GNUSTEP_SYSTEM_ROOT/Libraries/Resources/gnustep/NSTimeZones/localtime}
with the name of the local time zone in it.
@end enumerate
Finally, run the tests in the Testing directory. Use the openapp utility
that is part of the GNUstep makefile package (and stored in
@file{$GNUSTEP_SYSTEM_ROOT/Tools}). Usage is:
@example
openapp [--library-combo=...] application [additional arguments to app]
@end example
Good Luck!

View file

@ -1,4 +1,7 @@
@ifclear GSTEP-BASE-MAIN
@include version.tmpl.texi
@end ifclear
@chapter News
The currently released version of the library is
@ -164,7 +167,7 @@ NSAllocateMemoryPages, NSDeallocateMemoryPages, NSCopyMemoryPages.
@c ====================================================================
@c Keep the next line just below the list of changes in most recent version.
@ifclear ANNOUNCE_ONLY
@ifclear ANNOUNCE-ONLY
@section Noteworthy changes since version @samp{0.1.14}

View file

@ -1,6 +1,8 @@
@chapter Todo
@c set the vars GSTEP-BASE-VERSION and GCC-VERSION
@ifclear GSTEP-BASE-MAIN
@include version.tmpl.texi
@end ifclear
@chapter Todo
This TODO list is out of date.

View file

@ -1,471 +0,0 @@
Installation
************
GNUstep-HOWTO
Last Update: 11 March 1998
This document explains how to build the different components
of GNUstep.
Copyright (C) 1996 - 1998 Free Software Foundation, Inc.
Authors: Pascal Forget <pascal@wsc.com>,
Ovidiu Predescu <ovidiu@net-community.com>,
Adam Fedor <fedor@doc.com>.
This file is part of GNUstep.
Introduction
============
This document explains how to build the GNUstep project along with all
the tools required to develop applications with it.
In order to easily compile and debug GNUstep projects, you will need the
latest GNU ObjC compiler `GCC' and a modified version of the GNU
debugger `GDB'.
You will need at least 80Mb of hard disk space in order to compile the
GNUstep project. Luckily, you can delete the object files and the
uncompressed source code after each piece of the project has been
successfully built and installed in order to save some space. The
biggest offender is the GCC compiler, which eats up 50Mb of hard disk
space while it compiles.
Summary
=======
Currently, you pretty much need to get and install the latest versions
of the following packages:
GCC or egcs
GDB and patch to make it work with better Objective-C
GNU make
TIFF library
DGS or Adobe DPS
gstep-core which is composed of the individual packages:
gstep-make
gstep-base or libFoundation
gstep-gui
gstep-xdps
FoundationExt
Getting the files
=================
Most of the files needed by GNUstep are available from the following ftp
sites. Except for GCC, GDB, GNU make and TIFF, alpha.gnu.org and
ftp.gnustep.org should contain the latest versions of all the required
packages.
`ftp://ftp.gnu.org/pub/gnu'
GCC, GDB, and other GNU tools, and GNUstep public releases
`ftp://ftp.sgi.com/graphics/tiff'
TIFF library
`ftp://alpha.gnu.org/gnu/gnustep'
GNUstep developer releases and snapshots
`ftp://ftp.gnustep.org/pub/gnustep'
All GNUstep releases
You need the following packages of either the version given or any later
version, in order to compile GNUstep.
gcc-2.8.0.tar.gz (The GCC compiler)
ftp://ftp.gnu.org/pub/gnu or from other GNU mirror sites.
You can also use egcs-1.0.1.tar.gz, from ftp://ftp.cygnus.com/pub/egcs
gdb-4.16.tar.gz (The GDB debugger)
make-3.75.tar.gz (You need GNU make to compile GNUstep).
ftp://ftp.gnu.org/pub/gnu or from other GNU mirror sites.
gdb-4.16-objc-971112.diff.gz (A patch for easier debugging of Objective-C).
ftp://alpha.gnu.org/gnu/gnustep
tiff-970711.tar.gz (The TIFF library), or
you can use tiff-v3.4beta036-tar.gz or greater version
ftp://ftp.sgi.com/graphics/tiff/
ftp://alpha.gnu.org/gnu/gnustep
ftp://ftp.gnustep.org/pub/gnustep
pcthreads-1.1.0.tar.gz (PCThreads for Linux/GNU Inel x86 systems)
ftp://alpha.gnu.org/gnu/gnustep
ftp://ftp.gnustep.org/pub/gnustep
gstep-core-0.5.0.tar.gz (Contains gstep-make, -extensions, -base, -gui, -xdps)
gstep-make-0.5.0.tar.gz (Makefile package)
gstep-base-0.5.0.tar.gz (Foundation)
gstep-gui-0.5.0.tar.gz (AppKit)
gstep-xdps-0.5.0.tar.gz (X11/PostScript backend)
extensions-0.5.0.tar.gz (Foundation extensions)
dgs-0.5.0.tar.gz (The Display Ghostscript distribution)
ftp://ftp.gnu.org/pub/gnu
ftp://ftp.gnustep.org/pub/gnustep
ftp://alpha.gnu.org/gnu/gnustep
libFoundation-0.8.0.tar.gz (Alternate Foundation)
ftp://ftp.gnustep.org/pub/gnustep
ftp://alpha.gnu.org/gnu/gnustep
ftp://ftp.gnu.org/pub/gnu
You may get either one of the Foundations libraries (you only need to
take one of them, not both) gstep-base or libFoundation.
Note that you should get the latest version available, not necessarily
the one listed here. For the more adventurous, and since the project is
still in development, it might be better to get the latest snapshot
located in the snap or snapshot subdirectories at
ftp://alpha.gnu.org/gnu/gnustep/snap or the other appropriate ftp
locations.
For the following instructions, some version numbers are replaced by
XXX. You shoule replace the 'X's with the version of the package you
have.
Compiling and Installing the packages
=====================================
Compiling GNU make
------------------
GNU make is required to compile all GNUstep packages.
cd /usr/src
tar fvxz make-XXX.tar.gz
cd make-XXX
./configure
make
su root
make install
Compiling PCThreads
-------------------
For Linux/GNU systems on Intel x86 processors, the PCThreads library is
known to work with GNUstep. PCThreads version 1.1.0 is an enhanced
version of PCThread 1.0.0 with better support for GNUstep.
cd /usr/src
tar fvxz pcthreads-1.1.0.tar.gz
cd pcthreads-1.1.0
./configure
make
su root
make install
If you are using the GNUstep makefile package and wish PCThreads to be
installed with the GNUstep directory structure; then you should specify
the GNUstep system root as the prefix when you configure the package.
./configure --prefix=$GNUSTEP_SYSTEM_ROOT
Compiling GCC
-------------
The following commands assume that all the aforementioned files have
been copied to the /usr/src directory on your machine. If you already
have GCC 2.8.0 installed on your system then there is no need to compile
it again, just set up your PATH so that the new GCC is used for
compiling GNUstep.
Special note for Solaris users. GNUstep works on Solaris/Intel systems;
however, GCC 2.8.0 has problems, so you must use the older patched GCC
2.7.2 instead. GCC 2.8.0 has also induced a problem on Solaris/Sparc
systems; however, there is a patch to fix this in the contrib directory
on the ftp sites.
1. Uncompress GCC:
cd /usr/src
tar fvxz gcc-2.8.0.tar.gz
2. Configure the GCC compiler's makefile for your machine:
./configure
If you are using the GNUstep makefile package and wish GCC to be
installed within the GNUstep directory structure; then you should
specify the GNUstep system root as the prefix when you configure
the package. This setup requires that you compile and install the
GNUstep Makefile Package before configuring GCC.
./configure --prefix=$GNUSTEP_SYSTEM_ROOT
To enable multiple threads in the Objective-C library use the
--ENABLE-THREADS=LIB argument to configure, where LIB is the
thread library to use or --DISABLE-THREADS to use a
single-threaded Objective-C runtime. If your system has a native
threads library, like Solaris or SGI, then the --ENABLE-THREADS
parameter without the LIB specification will use that native
threads library.
4. Compile GCC
make bootstrap
5. Wait
If you have a Pentium Pro, go drink a coffee.
If you have a fast Pentium, count from 0 to 100 in your head.
If you have a slow Pentium, go eat a bagel.
If you have a 486, go watch the news.
If you have a 386, come back tomorrow.
6. Install GCC
su root
make install
7. Delete the GCC directory if you're low on disk space
rm -rf /usr/src/gcc-2.8.0
Patching and Compiling GDB
--------------------------
Uncompress GDB, and patch it:
cd /usr/src
tar fvxz gdb-4.16.tar.gz
gunzip gdb-4.16-objc-971112.diff.gz
cd gdb-4.16
patch -p1 < ../gdb-4.16-objc-971112.diff
Configure, compile and install GDB:
cd /usr/src/gdb-4.16
./configure
make
su root
make install
If you are using the GNUstep makefile package and wish GDB to be
installed with the GNUstep directory structure; then you should
specify the GNUstep system root as the prefix when you configure
the package. This setup requires that you compile and install the
GNUstep Makefile Package before configuring GCC.
./configure --prefix=$GNUSTEP_SYSTEM_ROOT
4. Make sure GDB is where you think it is
On Linux/GNU, GDB should be installed in /usr/bin, whereas on other
systems, the default installation path is usually /usr/local/bin.
If you have a Linux/GNU box, you can do this:
ln -s /usr/local/bin/gdb /usr/bin/gdb
Note that this is only a suggestion, you are free to do whatever
you want.
Installing the GNUstep libraries
--------------------------------
If you have the gstep-core package, you can make and install all the
GNUstep core packages at one time. If you already have a TIFF library
and a Display Postscript system installed, you can do this following the
example instructions below. If you don't already have a TIFF library or
DPS, you have to do things in a slightly different order.
If you have the separate gstep packages, skip to the next section
(Installing the Makefile package).
First decide where you want the GNUstep files to go, and use this as an
argument to configure. If you don't choose a location, the default is
/usr/GNUstep. The example below shows how to configure the packages
for installation in /usr/local/GNUstep.
If you don't have the TIFF library or DPS, first make and install the
Makefile package, the TIFF library and DGS, as shown in the following
three sections.
After you have TIFF and DPS/DGS installed, make the core libraries:
tar fvxz gstep-core-XXXXX.tar.gz
cd gstep-core-XXXX
./configure --prefix=/usr/local/GNUstep
make
su root
make install
With the various GNUstep libraries you can use the various switches,
shared, debug. As in ``make shared=no debug=yes'' (Make sure you use
the same switches for every package you compile, and also when you
install).
Skip to the Additional Instructions sections to finish up installation
of the GNUstep system.
Installing the Makefile package
-------------------------------
Decide where you want the GNUstep files to go, and use this as an
argument to configure in the makefile package. If you don't choose a
location, the default is /usr/GNUstep. The example below shows how to
configure the packages for installation in /usr/local/GNUstep.
tar fvxz gstep-make-XXXXXX.tar.gz
cd gstep-make-XXXXXX
./configure --prefix=/usr/local/GNUstep
make
su root
make install
If you are using, or intend to compile the GCC Objective-C runtime with
threads, you need to specify the thread package you are using when
running configure:
LIBS=-lpthread; ./configure --prefix=/usr/local/GNUstep
After this you should add the shell script `GNUstep.sh' in the makefile
package to you initialization file (such as `.profile'). For instance:
. /usr/local/GNUstep/Makefiles/GNUstep.sh
in your `.profile' file will work. It defines environment variables that
are needed to find GNUstep files and executables. Users of csh need to
change the `GNUstep.sh' script so it will work with csh. Read the
`README' for more info.
GNUstep packages will automatically install in this directory
structure. You can install other packages (such as GCC) in the same
structure if you specify the GNUstep system root as the prefix when you
configure the package.
./configure --prefix=$GNUSTEP_SYSTEM_ROOT
Compiling the TIFF library
--------------------------
You don't need a customized version of the TIFF library, or necessarily
even the newest one, but the customized version located at the GNUstep
ftp sites will install in the GNUstep directory structure.
cd /usr/src
tar fvxz tiff-XXXXX.tar.gz
cd tiff-XXX
./configure
make
su root
make install
Building DGS
------------
If you have a real Display Postscript system already on your computer,
you don't necessarily need DGS. Linux/GNU michines need DGS. You can
also read the file DGS-HOWTO located at the ftp machines listed above.
tar fvxz dgs-XXXXXX.tar.gz
cd dgs-XXXXXX/dgs
./configure
make
su root
make install
Building a Foundation library
-----------------------------
If you work with gstep-base:
cd /usr/src
tar fvxz gstep-base-XXXXXX.tar.gz
cd gstep-base-XXXXXX
./configure
make
su root
make install
On some Linux systems, you may have to change the optimization level
(particularly if you get an error compiling mframe.m):
make OPTFLAG=-O
If you work with libFoundation:
cd /usr/src
tar zxf libFoundation-0.8.0.tar.gz
cd libFoundation-0.8.0/libFoundation
./configure --with-gnustep
make
su root
make install
Building the GUI libraries
--------------------------
Compile the GUI library:
cd /usr/src
tar zxf gstep-gui-XXXXXX.tar.gz
cd gstep-gui
make
su root
make install
Compile the XDPS library:
cd /usr/src
tar zxf gstep-xdps-XXXXXX.tar.gz
cd gstep-xdps
./configure
make
cd Testing
make
Building the Foundation extensions
----------------------------------
The Foundation extensions have some useful features in them. The one
reason you definitely might want to use it is to read in GNUstep model
files which store User Interface structures in ASCII format, and can
also be used to translate NeXT and OpenStep NIB files to GNUstep model
format.
Compiling:
cd /usr/src
tar zxf FoundationExt-XXX.tar.gz
cd extensions
make
su root
make install
Additional Installation
=======================
If you haven't already done so when installing the Makefile package,
you should add the shell script `GNUstep.sh' in the Makefile package to
you initialization file (such as `.profile'). For instance:
. /usr/local/GNUstep/Makefiles/GNUstep.sh
in your `.profile' file will work. It defines environment variables that
are needed to find GNUstep files and executables. Users of csh need to
change the `GNUstep.sh' script so it will work with csh. Read the
`README' for more info.
Set up your home GNUstep directory. This is where user defaults are
kept, and in the future, other files may be kept there.
cd
mkdir GNUstep
Next, set your local time zone. There are three ways to do this, pick
one:
1. Use the dwrite utility to set ``Local Time Zone'' to your local
time zone.
2. Set the TZ environment variable.
3. Create the file
`$GNUSTEP_SYSTEM_ROOT/Libraries/Resources/gnustep/NSTimeZones/localtime'
with the name of the local time zone in it.
Finally, run the tests in the Testing directory. Use the openapp utility
that is part of the GNUstep makefile package (and stored in
`$GNUSTEP_SYSTEM_ROOT/Tools'). Usage is:
openapp [--library-combo=...] application [additional arguments to app]
Good Luck!

View file

@ -102,7 +102,6 @@ OrderedCollection.m \
Port.m \
Proxy.m \
Queue.m \
Random.m \
RawCStream.m \
RBTree.m \
RBTreeNode.m \
@ -147,6 +146,8 @@ stringsfile.tab.m \
mframe.m \
objc-gnu2next.m
#Random.m \
GNU_CFILES = \
md5.c \
numbers.c \
@ -224,7 +225,6 @@ RBTree.h \
RBTreeNode.h \
RNGAdditiveCongruential.h \
RNGBerkeley.h \
Random.h \
RandomGenerating.h \
RawCStream.h \
Retaining.h \
@ -266,6 +266,8 @@ all.h \
README \
preface.h
#Random.h \
# NEXTSTEP source files
NEXTSTEP_MFILES = \

View file

@ -62,61 +62,61 @@ NSStringEncoding GetDefEncoding()
availableEncodings = [NSString availableStringEncodings];
encoding = getenv("GNUSTEP_STRING_ENCODING");
if(encoding)
{
count=0;
while((count<str_encoding_table_size)&
strcmp(str_encoding_table[count].ename,encoding))
if (encoding)
{
count++;
count = 0;
while ((count < str_encoding_table_size) &
strcmp(str_encoding_table[count].ename,encoding))
{
count++;
}
if( !(count == str_encoding_table_size) )
{
ret = str_encoding_table[count].enc;
if ((ret == NSUnicodeStringEncoding) ||
(ret == NSSymbolStringEncoding))
{
fprintf(stderr, "WARNING: %s - encoding not supported as default c string encoding.\n", encoding);
fprintf(stderr, "NSASCIIStringEncoding set as default.\n");
ret = NSASCIIStringEncoding;
}
else /*encoding should be supported but is it implemented?*/
{
count = 0;
tmp = 0;
while ( !(availableEncodings[count] == 0) )
{
if ( !(ret == availableEncodings[count]) )
tmp = 0;
else
{
tmp = ret;
break;
}
count++;
};
if (!tmp)
{
fprintf(stderr, "WARNING: %s - encoding not yet implemented.\n", encoding);
fprintf(stderr, "NSASCIIStringEncoding set as default.\n");
ret = NSASCIIStringEncoding;
};
};
}
else /* encoding not found */
{
fprintf(stderr, "WARNING: %s - encoding not supported.\n", encoding);
fprintf(stderr, "NSASCIIStringEncoding set as default.\n");
ret = NSASCIIStringEncoding;
}
}
if(!(count==str_encoding_table_size))
{
ret= str_encoding_table[count].enc;
if((ret==NSUnicodeStringEncoding) ||
(ret==NSSymbolStringEncoding))
{
fprintf(stderr, "WARNING: %s - encoding not supported as default c string encoding.\n", encoding);
fprintf(stderr, "NSASCIIStringEncoding set as default.\n");
ret=NSASCIIStringEncoding;
}
else /*encoding should be supported but is it implemented?*/
{
count=0;
tmp=0;
while(!(availableEncodings[count]==0))
{
if(!(ret==availableEncodings[count]))
tmp=0;
else
{
tmp=ret;
break;
}
count++;
};
if(!tmp)
{
fprintf(stderr, "WARNING: %s - encoding not yet implemented.\n", encoding);
fprintf(stderr, "NSASCIIStringEncoding set as default.\n");
ret=NSASCIIStringEncoding;
};
};
}
else /* encoding not found */
{
fprintf(stderr, "WARNING: %s - encoding not supported.\n", encoding);
fprintf(stderr, "NSASCIIStringEncoding set as default.\n");
ret=NSASCIIStringEncoding;
}
}
else /* envirinment var not found */
{
/* This shouldn't be required. It really should be in UserDefaults - asf */
//fprintf(stderr,"WARNING: GNUSTEP_STRING_ENCODING environment variable not found\n");
//fprintf(stderr, "NSASCIIStringEncoding set as default.\n");
ret=NSASCIIStringEncoding;
}
{
/* This shouldn't be required. It really should be in UserDefaults - asf */
//fprintf(stderr,"WARNING: GNUSTEP_STRING_ENCODING environment variable not found\n");
//fprintf(stderr, "NSASCIIStringEncoding set as default.\n");
ret = NSASCIIStringEncoding;
}
return ret;
};
@ -124,14 +124,15 @@ NSString*
GetEncodingName(NSStringEncoding encoding)
{
char* ret;
unsigned int count=0;
while((count<str_encoding_table_size)&
unsigned int count=0;
while ((count < str_encoding_table_size) &
!(str_encoding_table[count].enc == encoding))
{
count++;
}
if(!(count==str_encoding_table_size))
ret= str_encoding_table[count].ename;
else ret="Unknown encoding";
{
count++;
}
if ( !(count == str_encoding_table_size) )
ret = str_encoding_table[count].ename;
else
ret = "Unknown encoding";
return [NSString stringWithCString:ret];
};

View file

@ -695,15 +695,15 @@ static Class NSMutableArray_concrete_class;
- (void) replaceObjectsInRange: (NSRange)aRange
withObjectsFromArray: (NSArray*)anArray
{
unsigned i;
id e, o;
if ([self count] <= aRange.location)
if ([self count] < (aRange.location + aRange.length))
[NSException raise: NSRangeException
format: @"Replacing objects beyond end of array."];
[self removeObjectsInRange: aRange];
i = [anArray count];
while (i-- > 0)
[self insertObject: [anArray objectAtIndex: i] atIndex: aRange.location];
e = [anArray reverseObjectEnumerator];
while ((o = [e nextObject]))
[self insertObject: o atIndex: aRange.location];
}
- (void) replaceObjectsInRange: (NSRange)aRange