mirror of
https://github.com/gnustep/libs-base.git
synced 2025-04-22 16:33:29 +00:00
* 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:
parent
e5b499f079
commit
d48fdafcbb
13 changed files with 141 additions and 2202 deletions
26
ChangeLog
26
ChangeLog
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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.
|
||||
|
|
|
@ -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:
|
|
@ -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
|
||||
|
||||
|
|
|
@ -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!
|
|
@ -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}
|
||||
|
||||
|
|
|
@ -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.
|
||||
|
||||
|
|
471
GNUstep-HOWTO
471
GNUstep-HOWTO
|
@ -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!
|
||||
|
|
@ -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 = \
|
||||
|
|
|
@ -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];
|
||||
};
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue