#
# %W% %E%
#
# -------------- no need to change anything below ----------
OTHERS=-DSTATISTIC -DDEBUG
OTHERS=-DDEBUG
SUBDIRS=
CLIENTOBJS=
LIBIBASICOBJ= $(LIBBASICDIR)/i_libbasic$(OBJNAME)
LIBICOMPOBJ= $(LIBCOMPDIR)/i_libcomp$(OBJNAME)
LIBIVIEWOBJ= $(LIBVIEWDIR)/i_libview$(OBJNAME)
LIBIWIDGETOBJ= $(LIBWIDGETDIR)/i_libwidg$(OBJNAME)
LIBOBJ= $(LIBBASICOBJ) $(LIBCOMPOBJ) $(LIBVIEWOBJ) $(LIBWIDGETOBJ) $(LIBRUN)
LIBIOBJ=$(LIBIBASICOBJ) $(LIBICOMPOBJ) $(LIBIVIEWOBJ) $(LIBIWIDGETOBJ)
LIBAR= $(LIBBASIC) $(LIBCOMP) $(LIBVIEW) $(LIBWIDG)
FULLLIB=libwidg.a libview.a libcomp.a libbasic.a
TOP=..
STARTUP_CLASS=Smalltalk
STARTUP_SELECTOR="start"
all:: $(TARGET) abbrev.stc resources newSource bitmaps binary
allNew: $(TARGET) abbrev.stc newResources newSource newBitmaps binary
smalltalk: main.$(O) classList.$(O) $(LIBOBJS) $(LIBRUN) $(EXTRA_LIBS)
$(LD) $(ST_LDFLAG) $(LDFLAGS) -o smalltalk$(EXE) \
$(CRT0) main.$(O) classList.$(O) \
$(LIBOBJS) $(EXTRA_OBJ) $(CLIENTOBJS) \
../goodies/Persistency/libdbase$(OBJNAME) \
$(LIBRUNDIR)/hidata.$(O) $(LIBRUN) \
$(DBLIB) \
$(MATHLIB) $(EXTRA_LIBS) $(SYSLIBS) $(CRTN)
fulltalk: main.$(O) fclassList.$(O) $(LIBOBJS) $(LIBRUN) $(EXTRA_LIBS)
$(LD) $(ST_LDFLAG) $(LDFLAGS) -o smalltalk$(EXE) \
$(CRT0) main.$(O) fclassList.$(O) \
$(LIBOBJS) $(EXTRA_OBJ) $(CLIENTOBJS) \
../goodies/Persistency/libdbase$(OBJNAME) \
../goodies/Benchmarks/DeltaBlue/libDeltaBlue$(OBJNAME) \
../goodies/Benchmarks/Richards/libRichards$(OBJNAME) \
../goodies/Benchmarks/Self/libSelfBench$(OBJNAME) \
../goodies/Benchmarks/Dhrystones/dhrystones$(OBJNAME) \
../goodies/Benchmarks/misc/libPDBench$(OBJNAME) \
$(LIBRUNDIR)/hidata.$(O) $(LIBRUN) \
$(DBLIB) \
$(MATHLIB) $(EXTRA_LIBS) $(SYSLIBS) $(CRTN)
minitalk: main.$(O) miniList.$(O) $(LIBBASICOBJ) $(LIBCOMPOBJ) $(LIBRUN)
$(LD) $(ST_LDFLAG) $(LDFLAGS) -o minitalk$(EXE) \
$(CRT0) main.$(O) miniList.$(O) \
$(LIBBASICDIR)/libbasic$(OBJNAME) \
$(LIBCOMPDIR)/libcomp$(OBJNAME) \
$(LIBRUNDIR)/hidata.$(O) \
$(LIBRUN) $(SYSLIBS) $(MATHLIB) $(CRTN)
tinytalk: main.$(O) tinyList.$(O) $(LIBRUN) $(FULLLIB)
$(LD) $(ST_LDFLAG) $(LDFLAGS) -o tinytalk$(EXE) \
$(CRT0) main.$(O) tinyList.$(O) \
$(FULLLIB) \
$(LIBRUNDIR)/hidata.$(O) $(LIBRUN) \
$(MATHLIB) $(SYSLIBS) $(CRTN)
nxtalk: main.$(O) nxclassList $(LIBBASICOBJ) $(LIBCOMPOBJ) $(LIBRUN)
$(LD) $(ST_LDFLAG) $(LDFLAGS) -o nxtalk$(EXE) \
$(CRT0) main.$(O) nxclassList.$(O) \
$(LIBBASICDIR)/libbasic$(OBJNAME) \
$(LIBCOMPDIR)/libcomp$(OBJNAME) \
$(LIBVIEWDIR)/libview$(OBJNAME) \
$(LIBRUNDIR)/hidata.$(O) \
$(LIBRUN) $(MATHLIB) $(SYSLIBS) $(CRTN)
smalltalk_8mb: main.$(O) classList.$(O) $(LIBOBJS) $(LIBIOBJ) $(LIBRUN)
$(LD) $(ST_LDFLAG) $(LDFLAGS) -o smalltalk$(EXE) \
$(CRT0) main.$(O) classList.$(O) \
$(LIBIOBJS) \
$(LIBRUNDIR)/hidata.$(O) \
$(LIBOBJS) $(LIBRUN) \
$(MATHLIB) $(SYSLIBS) $(CRTN)
bigtalk: main.$(O) bigList.$(O) $(LIBOBJS) $(CLIENTSOBJS) $(LIBRUN) $(EXTRA_LIBS)
$(LD) $(ST_LDFLAG) $(LDFLAGS) -o smalltalk$(EXE) \
$(CRT0) main.$(O) bigList.$(O) \
$(LIBOBJS) \
$(CLIENTOBJS) \
$(LIBRUNDIR)/hidata.$(O) $(LIBRUN) \
$(MATHLIB) $(EXTRA_LIBS) $(SYSLIBS) $(CRTN)
#
# the following stuff is for transputer (inmos ctools)
#
# I had a minitalk running once, but did not update -
# so it may not work anymore
#
centry.lku: globals.$(O) main.$(O) classlist.lnk
ilink -KB 500 -I -f /usr/local/inmos/lib/startup.lnk \
main.$(O) globals.$(O) \
-f classlist.lnk \
$(LIBRUNDIR)/hidata.$(O) \
$(LIBRUN) $(MATHLIB) $(SYSLIBS) $(CRTN)
puter: centry.lku
-cp /usr/local/inmos/lib/linkboot.lib .
-cp /usr/local/inmos/lib/sysproc.lib .
icollect -T centry.lku
mv centry.btl smalltalk.btl
-rm linkboot.lib sysproc.lib
classlist.lnk:
ls ../libbasic/*.tco > classlist.lnk
ls ../libcomp/*.tco >> classlist.lnk
globals.c:
echo "#include \"stc.h\" " > globals.c
cat $(LIBRUNDIR)/globalData.c \
$(LIBBASICDIR)/globalData.c \
$(LIBCOMPDIR)/globalData.c | sort | uniq >> globals.c
#
# end of transputer special
#
classList: classList.c
$(CC) $(_C) $(CFLAGS) classList.c
rm -f classList.c
fclassList: fclassList.c
$(CC) $(_C) $(CFLAGS) fclassList.c
rm -f fclassList.c
nxclassList: nxclassList.c
$(CC) $(_C) $(CFLAGS) nxclassList.c
rm -f nxclassList.c
miniList: miniList.c
$(CC) $(_C) $(CFLAGS) miniList.c
rm -f miniList.c
tinyList: tinyList.c
$(CC) $(_C) $(CFLAGS) tinyList.c
rm -f tinyList.c
bigList: bigList.c
$(CC) $(_C) $(CFLAGS) bigList.c
rm -f bigList.c
fclassList.c: fclassList.stc
$(MAKE) fclassList.stc
$(MAKE) classListEdit CLASSLIST=fclassList
miniList.c: miniList.stc
$(MAKE) miniList.stc
$(MAKE) classListEdit CLASSLIST=miniList
nxclassList.c: nxclassList.stc
$(MAKE) nxclassList.stc
$(MAKE) classListEdit CLASSLIST=nxclassList
tinyList.c: tinyList.stc
$(MAKE) tinyList.stc
$(MAKE) classListEdit CLASSLIST=tinyList
bigList.c: bigList.stc
$(MAKE) bigList.stc
$(MAKE) classListEdit CLASSLIST=bigList
#
# this creates the class archives
#
libbasic.a:
$(AR) rv libbasic.a $(LIBBASICDIR)/[A-Z]*.o
$(RANLIB) libbasic.a
libcomp.a:
$(AR) rv libcomp.a $(LIBCOMPDIR)/[A-Z]*.o
$(RANLIB) libcomp.a
libview.a:
$(AR) rv libview.a $(LIBVIEWDIR)/[A-Z]*.o
$(RANLIB) libview.a
libwidg.a:
$(AR) rv libwidg.a $(LIBWIDGETDIR)/[A-Z]*.o
$(RANLIB) libwidg.a
#
# make list of classes for a standard smalltalk
# (includes basic, view & widgets and Persistency)
#
classList.stc: $(LIBBASICDIR)/classList.stc $(LIBCOMPDIR)/classList.stc \
$(LIBVIEWDIR)/classList.stc $(LIBWIDGETDIR)/classList.stc \
$(TOP)/goodies/Persistency/classList.stc \
$(EXTRACLASSLISTS) $(CLIENTCLASSLISTS)
-cat $(LIBBASICDIR)/classList.stc \
$(LIBCOMPDIR)/classList.stc \
$(LIBVIEWDIR)/classList.stc \
$(LIBWIDGETDIR)/classList.stc \
$(TOP)/goodies/Persistency/classList.stc \
$(EXTRACLASSLISTS) \
$(CLIENTCLASSLISTS) > classList.stc
-if [ "$(EXTRA_CLASSES)"X != X ]; then \
for i in $(EXTRA_CLASSES); do \
echo $$i >> classList.stc; \
done; \
fi
#
# make list of classes for a standard smalltalk using NeXTStep
#
nxclassList.stc:
rm -f classList.stc
$(MAKE) miniList.stc EXTRA_CLASSES='NeXTWorkstation'
-cat ../libview/classList.stc >> classList.stc
#
# make list of classes for a full smalltalk
# (like standard smalltalk, but adds Benchmarks)
#
fclassList.stc: $(TOP)/libbasic/classList.stc \
$(TOP)/libcomp/classList.stc \
$(TOP)/libview/classList.stc \
$(TOP)/libwidg/classList.stc \
$(EXTRACLASSLISTS) $(CLIENTCLASSLISTS) \
$(TOP)/goodies/Persistency/classList.stc \
$(TOP)/goodies/Benchmarks/DeltaBlue/classList.stc \
$(TOP)/goodies/Benchmarks/Richards/classList.stc \
$(TOP)/goodies/Benchmarks/Dhrystones/classList.stc
-cat $(TOP)/libbasic/classList.stc \
$(TOP)/libcomp/classList.stc \
$(TOP)/libview/classList.stc \
$(TOP)/libwidg/classList.stc \
$(EXTRACLASSLISTS) \
$(CLIENTCLASSLISTS) > fclassList.stc
-if [ "$(EXTRA_CLASSES)"X != X ]; then \
for i in $(EXTRA_CLASSES); do \
echo $$i >> fclassList.stc; \
done; \
fi
-cat $(TOP)/goodies/Persistency/classList.stc >> fclassList.stc
-cat $(TOP)/goodies/Benchmarks/DeltaBlue/classList.stc >> fclassList.stc
-cat $(TOP)/goodies/Benchmarks/Richards/classList.stc >> fclassList.stc
-cat $(TOP)/goodies/Benchmarks/Dhrystones/classList.stc >> fclassList.stc
-cat $(TOP)/goodies/Benchmarks/Self/classList.stc >> fclassList.stc
-cat $(TOP)/goodies/Benchmarks/misc/classList.stc >> fclassList.stc
#
# make list of classes for a big smalltalk
# (like standard smalltalk, but adds Benchmarks and all clients)
#
bigList.stc: $(TOP)/libbasic/classList.stc \
$(TOP)/libcomp/classList.stc \
$(TOP)/libview/classList.stc \
$(TOP)/libwidg/classList.stc \
$(EXTRACLASSLISTS) $(CLIENTCLASSLISTS) \
$(TOP)/goodies/Persistency/classList.stc \
$(TOP)/goodies/Benchmarks/DeltaBlue/classList.stc \
$(TOP)/goodies/Benchmarks/Richards/classList.stc \
$(TOP)/goodies/Benchmarks/Dhrystones/classList.stc
$(TOP)/clients/*/classList.stc
-cat $(TOP)/libbasic/classList.stc \
$(TOP)/libcomp/classList.stc \
$(TOP)/libview/classList.stc \
$(TOP)/libwidg/classList.stc \
$(EXTRACLASSLISTS) \
$(TOP)/clients/*/classList.stc > bigList.stc
-if [ "$(EXTRA_CLASSES)"X != X ]; then \
for i in $(EXTRA_CLASSES); do \
echo $$i >> bigList.stc; \
done; \
fi
-cat $(TOP)/goodies/Persistency/classList.stc >> bigList.stc
-cat $(TOP)/goodies/Benchmarks/DeltaBlue/classList.stc >> bigList.stc
-cat $(TOP)/goodies/Benchmarks/Richards/classList.stc >> bigList.stc
-cat $(TOP)/goodies/Benchmarks/Dhrystones/classList.stc >> bigList.stc
-cat $(TOP)/goodies/Benchmarks/Self/classList.stc >> bigList.stc
-cat $(TOP)/goodies/Benchmarks/misc/classList.stc >> bigList.stc
#
# make list of classes for a mini smalltalk
# (no GUI, line-by-line interface only)
#
miniList.stc:
-cat $(TOP)/libbasic/classList.stc > miniList.stc
-cat $(TOP)/libcomp/classList.stc >> miniList.stc
-if [ "$(EXTRA_CLASSES)"X != X ]; then \
for i in $(EXTRA_CLASSES); do \
echo $$i >> classList.stc; \
done; \
fi
#
# make list of classes for a tiny smalltalk
# (minimum classes compiled, loads in rest as interpreted byte code)
# this is done by creating a classList and removing all we dont want
#
EXCLUDE=
tinyList.stc:
$(MAKE) miniList.stc
mv miniList.stc tinyList.stc
-cat $(TOP)/libview/classList.stc >> tinyList.stc
#tinyList.stc:
# -rm classList.stc
# $(MAKE) classList.stc
# sh ../rules/removeFrom.sh classList.stc excludeList.stc > tinyList.stc
# -rm classList.stc
#
# make a new source subdirectory
#
newSource:
-rm -rf source
$(MAKE) sourceLink
Source: source
source:
$(MAKE) sourceLink
sourceLink:
-mkdir source
-(cd source; $(LNS) ../$(LIBBASICDIR)/*.st .)
-(cd source; $(LNS) ../$(LIBCOMPDIR)/*.st .)
-(cd source; $(LNS) ../$(LIBVIEWDIR)/*.st .)
-(cd source; $(LNS) ../$(LIBWIDGETDIR)/*.st .)
-(cd source; $(LNS) ../$(CLIENTDIR)/[A-Z]*/*.st .)
-(cd source; $(LNS) ../../fileIn/*.st .)
-(cd source; $(LNS) ../../goodies/*.st .)
-(cd source; $(LNS) ../../goodies/*/*.st .)
-(cd source; $(LNS) ../../goodies/*/*/*.st .)
#
# make a new binary subdirectory
# (this is only useful on systems that support dynamic loading;
# autoloaded classes will then be loaded from machine code files
# instead of source)
#
newBinary:
-rm -rf binary
$(MAKE) binaryLink
binary:
$(MAKE) binaryLink
binaryLink:
-mkdir binary
-if [ "`echo $(CLIENTDIR)/[A-Z]*/*.o`" != '$(CLIENTDIR)/[A-Z]*/*.o' ]; then \
(cd binary; $(LNS) ../$(CLIENTDIR)/[A-Z]*/*.o .); \
fi
-if [ "`echo ../goodies/*.o`" != '../goodies/*.o' ]; then \
(cd binary; $(LNS) ../../goodies/*.o .) ; \
fi
-if [ "`echo ../goodies/*/*.o`" != '../goodies/*/*.o' ]; then \
(cd binary; $(LNS) ../../goodies/*/*.o .) ; \
fi
-if [ "`echo ../goodies/*/*/*.o`" != '../goodies/*/*/*.o' ]; then \
(cd binary; $(LNS) ../../goodies/*/*/*.o .) ; \
fi
#
# make a new bitmaps subdirectory
# (simply collect the contents of all bitmap directories)
#
newBitmaps:
-rm -rf bitmaps
$(MAKE) bitmaps
Bitmaps: bitmaps
bitmaps:
-mkdir bitmaps
-(cd bitmaps; $(LNS) ../$(LIBVIEWDIR)/bitmaps/* .)
-(cd bitmaps; $(LNS) ../$(LIBWIDGETDIR)/bitmaps/* .)
-(cd bitmaps; $(LNS) ../$(CLIENTDIR)/A*/bitmaps/* .)
-(cd bitmaps; $(LNS) ../$(CLIENTDIR)/[B-C]*/bitmaps/* .)
-(cd bitmaps; $(LNS) ../$(CLIENTDIR)/D[a-q]*/bitmaps/* .)
-(cd bitmaps; $(LNS) ../$(CLIENTDIR)/D[r-z]*/bitmaps/* .)
-(cd bitmaps; $(LNS) ../$(CLIENTDIR)/[E-Z]*/bitmaps/* .)
-(cd bitmaps; $(LNS) ../../fileIn/bitmaps/* .)
-(cd bitmaps; $(LNS) ../../fileIn/*/bitmaps/* .)
-(cd bitmaps; $(LNS) ../../goodies/bitmaps/* .)
#
# clean out intermediate chunk
#
cleanjunk::
-rm -f a.out changes SymbolTable ttt main.c
#
# clean out all that is not needed to run smalltalk
#
clean::
-rm -f a.out changes SymbolTable ttt main.c
-rm -f classList.stc classList.c
-rm -f fclassList.stc fclassList.c
-rm -f nxclassList.stc nxclassList.c
-rm -f miniList.stc miniList.c
-rm -f tinyList.stc tinyList.c
#
# clean out all that can be regenerated
#
clobber::
-rm -rf resources source bitmaps changes
-rm -f smalltalk minitalk tinytalk abbrev.stc st.img
-rm -f main.o
#
# make a new resources subdirectory
#
newResources:
rm -rf resources
$(MAKE) resources
resources:
-mkdir resources
cp $(LIBWIDGETDIR)/resources/*.rs resources
cp $(LIBVIEWDIR)/resources/*.rs resources
cp ../fileIn/resources/*.rs resources
cp $(CLIENTDIR)/*/resources/*.rs resources
#
# make an abbreviation file by collecting all existing ones
#
abbrev.stc: $(LIBBASICDIR)/abbrev.stc $(LIBCOMPDIR)/abbrev.stc \
$(LIBVIEWDIR)/abbrev.stc $(LIBWIDGETDIR)/abbrev.stc \
../fileIn/abbrev.stc ../clients/MailTool/abbrev.stc \
../clients/DrawTool/abbrev.stc ../clients/DocTool/abbrev.stc \
../clients/DirView/abbrev.stc
cat $(LIBBASICDIR)/abbrev.stc > abbrev.stc
cat $(LIBCOMPDIR)/abbrev.stc >> abbrev.stc
cat $(LIBVIEWDIR)/abbrev.stc >> abbrev.stc
cat $(LIBWIDGETDIR)/abbrev.stc >> abbrev.stc
cat $(CLIENTDIR)/*/abbrev.stc >> abbrev.stc
cat ../fileIn/abbrev.stc >> abbrev.stc
cat ../goodies/*/abbrev.stc >> abbrev.stc
$(TARGET): $(INCLUDE)/stc.h $(INCLUDE)/stcIntern.h
installDemo: install
-rm $(DESTLIBDIR)/source/BCompiler.st
-rm $(DESTLIBDIR)/source/ObjectView.st
-strip $(DESTBINDIR)/smalltalk
binInstall::
-mkdir $(DESTLIBDIR)
-mkdir $(DESTBINDIR)
$(INSTALL) smalltalk $(DESTBINDIR)
-strip $(DESTBINDIR)/smalltalk
install:: installThis
#
# notice the [x-y]* patterns; some unixes (at&t) dont like too many arguments ...
#
installThis::
-mkdir $(DESTLIBDIR)
-mkdir $(DESTBINDIR)
$(INSTALL) smalltalk $(DESTBINDIR)
-strip $(DESTBINDIR)/smalltalk
-mkdir $(DESTLIBDIR)/source
-chmod a+rx $(DESTLIBDIR)/source
-cp source/[A-G]* $(DESTLIBDIR)/source
-cp source/[H-P]* $(DESTLIBDIR)/source
-cp source/[Q-Z]* $(DESTLIBDIR)/source
-chmod a+r $(DESTLIBDIR)/source/[A-G]*
-chmod a+r $(DESTLIBDIR)/source/[H-P]*
-chmod a+r $(DESTLIBDIR)/source/[Q-Z]*
-mkdir $(DESTLIBDIR)/bitmaps
-chmod a+rx $(DESTLIBDIR)/bitmaps
-cp bitmaps/[A-I]* $(DESTLIBDIR)/bitmaps
-cp bitmaps/[J-Z]* $(DESTLIBDIR)/bitmaps
-cp bitmaps/[a-i]* $(DESTLIBDIR)/bitmaps
-cp bitmaps/[j-z]* $(DESTLIBDIR)/bitmaps
-chmod a+r $(DESTLIBDIR)/bitmaps/[A-I]*
-chmod a+r $(DESTLIBDIR)/bitmaps/[J-Z]*
-chmod a+r $(DESTLIBDIR)/bitmaps/[a-i]*
-chmod a+r $(DESTLIBDIR)/bitmaps/[j-z]*
-chmod a+rx $(DESTLIBDIR)/resources
-mkdir $(DESTLIBDIR)/resources
-cp resources/* $(DESTLIBDIR)/resources
-chmod a+r $(DESTLIBDIR)/resources/*.rs
-cp *.rc *.stc patches $(DESTLIBDIR)
-chmod a+r $(DESTLIBDIR)/*.rc $(DESTLIBDIR)/*.stc $(DESTLIBDIR)/patches
qinstall:: installThis