Makefiles: use our own makefiles rather than eXept's
authorJan Vrany <jan.vrany@fit.cvut.cz>
Thu, 03 Aug 2017 09:37:46 +0100
changeset 135 0325651d2b43
parent 134 78f8c3f3390d
child 136 29bd0a3c4a31
Makefiles: use our own makefiles rather than eXept's ...found in `stx/rules`. eXept's makefiles doesn't really fit Smalltalk/X jv-branch needs - they're cluttered with workarounds for long unsupported tools and platforms. In the past we had to monkey-patch them here and there. From this commit on, building requires GNU Make on UNUX-like and GCC or Clang toolchain on both UNIX-like and Windows. There we use MSYS2 environment. This is a followup for 6fcb351d23a7.
bin/stmkmf.rb
makelib/README.md
makelib/config-linux-i386.make
makelib/config-linux-x86_64.make
makelib/config-linux.make
makelib/stdHeader
makelib/stdHeader2
makelib/stdHeader_bc
makelib/stdRules
makelib/stdRules_bc
rakelib/compile.rake
specs/baseline.rbspec
--- a/bin/stmkmf.rb	Mon Jul 31 23:03:46 2017 +0100
+++ b/bin/stmkmf.rb	Thu Aug 03 09:37:46 2017 +0100
@@ -21,12 +21,20 @@
     return 3
   end
   if top.nil? then 
-    m = /^TOP=(.*)$/.match(File.read(File.join(cwd, 'Make.proto')))
-    if m.nil? then
+    # Spuriously it happens the `Make.proto` is somehow corrupted and not properly
+    # UTF8 encoded. This would result in error like
+    #
+    #    `match': invalid byte sequence in UTF-8 (ArgumentError)
+    #
+    # To prevent, replace all invalid character by $?. Not a safest
+    # approach, though.
+    make_proto_contents = File.read(File.join(cwd, 'Make.proto')).encode("UTF-8", :invalid=>:replace, :replace=>"?").encode('UTF-8')
+    match = /^TOP=(.*)$/.match(make_proto_contents)
+    if match.nil? then
       STDERR.puts "error: could not ectract TOP from Make.proto (missing TOP=.. definition?)"    
       return 4
     end
-    top = m[1]
+    top = match[1]
   end
   if not File.directory? top then
     STDERR.puts "error: TOP not a cwd: #{top}"    
@@ -41,17 +49,18 @@
     f.puts <<-CONTENTS
 #  
 # Do not edit! Automatically generated by stmkmf.
-# 
-include #{top}/rules/stdHeader
-include #{top}/configurations/COMMON/defines
+#
+
+MAKELIB ?= #{top}/../../makelib
+
+include $(MAKELIB)/stdHeader
 include #{top}/configurations/vendorConf
-include #{top}/configurations/myConf
-include #{top}/rules/stdHeader2
+include $(MAKELIB)/stdHeader2
 
 include Make.spec
 include Make.proto
 
-include #{top}/rules/stdRules
+include $(MAKELIB)/stdRules
 CONTENTS
   end
   return 0
--- a/makelib/README.md	Mon Jul 31 23:03:46 2017 +0100
+++ b/makelib/README.md	Thu Aug 03 09:37:46 2017 +0100
@@ -1,16 +1,16 @@
 # Makefile library for Smalltalk/X jv-branch
 
-This directory contains makefile definitions for building individual 
+This directory contains makefiles for building individual 
 Smalltalk/X packages. 
 
 
 ## Background & Rationale
 
 Essentially this is a replacement for eXept's definitions in 
-`stx/configurations`. However, they don't fit Smalltalk/X jv-branch
-needs. In the past, we used to monkey-patch eXept's definitions and tweak
-them here and there, but this lead to a big mess (not a surprise) in 
-`rakelib/compile.rake`. 
+`stx/configurations` and `stx/rules`. eXept's makefiles don't fit 
+Smalltalk/X jv-branch needs. In the past, we used to monkey-patch eXept's 
+makefiles and tweak them here and there, but this lead to a big mess (not a 
+surprise) in `rakelib/compile.rake`. 
 
 As we want to support more OS/CPU combinations, thing would go rather
 wild and truly messy. Hence we provide our own, starting off with
@@ -19,7 +19,6 @@
 packages to unify *NIX and Windows builds (since Windows now use different
 schema based on ancient, unmaintained Borland make).
 
-It is likely that in a future this directory will also contain make rules
-for actual compilation - stuff now located `stx/rules` (pulled from eXept's
-CVS)
+Time will show if this ever become true. Let's hope. 
 
+
--- a/makelib/config-linux-i386.make	Mon Jul 31 23:03:46 2017 +0100
+++ b/makelib/config-linux-i386.make	Thu Aug 03 09:37:46 2017 +0100
@@ -4,7 +4,7 @@
 #
 # $Header: /cvs/stx/stx/configurations/linux-elf/amd64_mode32/defines,v 1.25 2016-03-17 22:32:46 stefan Exp $
 
-include $(MAKELIB_DIR)/config-linux.make
+include $(MAKELIB)/config-linux.make
 
 CONF=config-linux-i386
 
--- a/makelib/config-linux-x86_64.make	Mon Jul 31 23:03:46 2017 +0100
+++ b/makelib/config-linux-x86_64.make	Thu Aug 03 09:37:46 2017 +0100
@@ -4,7 +4,7 @@
 #
 # $Header: /cvs/stx/stx/configurations/linux-elf/x86_64/defines,v 1.18 2016-08-29 08:52:44 stefan Exp $
 
-include $(MAKELIB_DIR)/config-linux.make
+include $(MAKELIB)/config-linux.make
 
 CONF=config-linux-x86_64
 
--- a/makelib/config-linux.make	Mon Jul 31 23:03:46 2017 +0100
+++ b/makelib/config-linux.make	Thu Aug 03 09:37:46 2017 +0100
@@ -1,7 +1,7 @@
 #------------------ start of linux-elf/COMMON/defines ---------------------
 #
 # $Header: /cvs/stx/stx/configurations/linux-elf/COMMON/defines,v 1.92 2016-07-19 19:56:46 stefan Exp $
-include $(MAKELIB_DIR)/config.make
+include $(MAKELIB)/config.make
 
 CONF_VENDOR=linux
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/makelib/stdHeader	Thu Aug 03 09:37:46 2017 +0100
@@ -0,0 +1,174 @@
+#
+# MIMEType: application/x-make
+#
+# this Makefile was generated by CONFIG / make Makefile
+#
+# do not change here
+# - change in Make.proto, stdRules or stdHeader
+#
+# otherwise your changes are lost when Makefiles are recreated
+#
+# if your system is not the one described below (CONF=),
+# you have to rerun config in stc's TOP directory !
+#
+
+default:: redefinableAll
+
+#------------------ start of rules/stdHeader ---------------------
+#
+# $Header: /cvs/stx/stx/rules/stdHeader,v 1.33 2014-11-20 16:24:40 cg Exp $
+#
+
+#
+# the default target;
+# this is redefined for HP and AIX, to compile some individual files
+# using different options
+# (due to exponential grows of their cc, they cannot compile certain files with -O/-O2)
+#
+ALL_TARGET=all
+
+#
+# where things get collected when building
+#
+BUILD_DIR=$(TOP)/build
+BUILD_BIN_DIR=$(BUILD_DIR)/bin
+BUILD_PACKAGE_DIR=$(BUILD_DIR)/packages
+
+# -------------------------------------------
+# installation directories (for make install)
+# -------------------------------------------
+
+INSTALLBASE=/opt/smalltalk/$(RELEASE)
+
+INSTALLTOP_DIR=$(INSTALLBASE)/packages/$(MODULE)/$(MODULE_DIR)
+INSTALLLIB_DIR=$(INSTALLTOP_DIR)
+INSTALLBIN_DIR=$(INSTALLBASE)/bin
+
+INSTALLBITMAPSLIB_DIR=$(INSTALLLIB_DIR)
+INSTALLDOCLIB_DIR=$(INSTALLLIB_DIR)
+DOC_DIR=doc
+
+INSTALL_SUBDIRS=$(ALLSUBDIRS)
+
+#
+# if found in a directory,
+# those are also installed
+#
+INSTALLED_LOAD_SCRIPTS=loadAll
+
+#
+# LIB is used for recursive make-invocations;
+# it needs a non-empty default for make to accept the Makefile
+#
+LIB=none
+
+H=H
+OUTDIR=
+
+INCL=$(INCLUDE)/
+
+STCHDR=$(INCLUDE)/stc.h $(INCLUDE)/stcIntern.h
+# STC_MSGFORMAT= -messageFormat: gcc
+STC_MSGFORMAT= -messageFormat: gcc-jenkins
+SYSDEP_OBJS=$(UNIX_OBJS)
+AR_OBJS=$(OBJS) $(AUXOBJS)
+
+UNCRITICALOBJS='xxx.o'
+UNCRITICALOPT=+optspace3
+AUTOLOADEDOBJS='yyy.o'
+
+#
+# SUBDIRS is used to make targets;
+# ALLSUBDIRS are those in which makefiles are created
+# (i.e. this allows passive directories, like all in
+# clients to be added)
+#
+
+SUBDIRS=
+ALLSUBDIRS=$(SUBDIRS)
+
+RULEDIR=$(TOP)/rules
+
+STBC=$(RULEDIR)/stbc
+STDHEADER=stdHeader
+STDRULES=stdRules
+STDHEADER_NT=stdHeader_nt
+STDRULES_NT=stdRules_nt
+
+#
+# files to be rcs managed
+# this is ok for classlib directories;
+# c directories (librun, stc) must redefine it
+#
+RCSSOURCES=*.st Make.proto
+
+#
+# files to be symlinked to a common source tree
+# this is ok for classlib directories;
+# c directories (librun, stc) must redefine it
+#
+LINKSOURCES=*.st Make.proto
+
+#
+# files to be delivered by default.
+# to be redefined in sub-Make.protos
+#
+DELIVERSOURCES=$(RCSSOURCES)
+DELIVERMISC=Makefile *.stc .dir.info README*
+DELIVERBINARIES=lib*.o lib*.so lib*.a
+
+#
+# rule for object file creation.
+# If redefined, there must be a corresponding rule in
+# the architecture specific config file
+# This is extra tricky and not recommended
+#
+O_RULE=__STANDARD_O_RULE__
+C_RULE=__STANDARD_C_RULE__
+S_RULE=__STANDARD_S_RULE__
+H_RULE=__STANDARD_H_RULE__
+
+SPACEOPT_O_RULE=__STANDARD_O_RULE__
+SPEEDOPT_O_RULE=__STANDARD_O_RULE__
+
+CC_SPEEDOPT=
+CC_SPACEOPT=
+
+#
+# rules to link .o files into a classLibrary
+#
+LINKOBJRULE=newobj_link
+SEPINITLINKOBJRULE=newobj_link
+
+#
+# rule to create a classList & to edit it into a .c file
+#
+CLASSLISTRULE=genClassList
+CLASSLISTEDITRULE=classListEdit
+
+#
+# special kludge for HP's stupid cpp limitations
+#
+# allows definition of another rule for big-st files,
+# and setting of BIG_ST_RULE=some_other_rule
+# see libview/Make.proto for an example
+#
+
+BIG_STFILE_RULE=BIG_STFILE_NORMAL
+BIG_STFILE_NORMAL:
+	    $(STC) -CC="$(CC)" $(STCFLAGS) $(CFLAGS) -c $(BIG_FILE).st
+
+#
+# special kludge for a bug in NeXT's (2.1) assembler,
+# which dumps core for some long identifiers
+# (funny, only happens with SeqColl)
+#
+LONGNAME_RULE=LONGNAME_NORMAL
+LONGNAME_NORMAL:
+	    $(STC) -CC="$(CC)" $(STCFLAGS) $(CFLAGS) -c $(LONGNAME_FILE).st
+
+SHAREDCLASSLIBRARIES=""
+
+UPDATETARGET=all
+
+#------------------ end of rules/stdHeader ---------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/makelib/stdHeader2	Thu Aug 03 09:37:46 2017 +0100
@@ -0,0 +1,23 @@
+#------------------ start of rules/stdHeader2 ---------------------
+
+# collected compiler flags
+
+CC_OPTS=$(CCCOMMONOPT) $(CCARCHCOMMONOPT) $(CCARCHOPT) $(OPT) $(CCCONFOPT) $(CC_CMD_OPT)
+
+STC_OPTS=$(STCCOMMONOPT) $(STCARCHCOMMONOPT) $(STCARCHOPT) $(STCOPT) $(STCCONFOPT) $(STCLOCALOPT) $(STC_CMD_OPT)
+
+CC_DEFS=$(DEFS) $(COMMONDEFS) $(ARCHCOMMONDEFS) $(ARCHDEFS) $(OTHERDEFS) $(LOCALDEFS)
+
+CFLAGS     = -I$(INCLUDE) $(LOCALINCLUDES) $(OS) $(CC_OPTS) $(DBG) $(CC_DEFS) $(CCLOCALOPT)
+
+MAIN_CFLAGS= -I$(INCLUDE) $(OS) $(ARCHOPT) $(CCCONFOPT) $(MAIN_OPT) $(DBG) $(CC_DEFS)
+
+STCFLAGS   = -CC="$(CC)" -Y$(INCLUDE) -I$(INCLUDE_IN) $(STCOPT) $(STC_OPTS) $(LIMITSUPERINCLUDE) $(FORCEAUTOLOAD) -scmType: auto -sha1
+
+SNMP_CC_OPT=$(ARCHOPT) $(OPT)
+
+DLD_CFLAGS=$(CC_OPTS) $(DBG) $(CC_DEFS)
+
+LINKOBJS   = $(OBJS)
+
+#------------------ end of rules/stdHeader2 ---------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/makelib/stdHeader_bc	Thu Aug 03 09:37:46 2017 +0100
@@ -0,0 +1,765 @@
+#
+# $Header: /cvs/stx/stx/rules/stdHeader_bc,v 1.197 2017-06-14 13:36:25 cg Exp $
+#
+# MIMEType: application/x-make
+# EOLMode: msdos
+#
+# The name of this rules file is now misleading; it used to be used only for
+# borland, but now also contains visualC and other compiler definitions.
+# actually, it is used for all Windows builds.
+#
+# defaults to borland-build (USEBC=1), unless invoked with any of:
+#   USEVC=1      - visualC-make
+#   USELCC=1     - lcc make       (suspended work - unfinished)
+#   USETCC=1     - tiny-C (tcc)   (suspended work - unfinished)
+#   USEMINGW64=1 - mingw-C        (ongoing work)
+
+!ifdef USEVC
+! undef USEBC
+!endif
+
+# use borland-cc by default
+!ifndef USEBC
+! ifndef USEVC
+!  ifndef USELCC
+!   ifndef USETCC
+!    ifndef USEMINGW32
+!     ifndef USEMINGW64
+USEBC=1
+!     endif
+!    endif
+!   endif
+!  endif
+! endif
+!endif
+
+MAKENSIS=makensis
+MAKENSIS=c:\programme\nsis\makensis
+MAKENSIS="$(PROGRAMFILES)\nsis\makensis.exe"
+
+#STC_MSGFORMAT= -messageFormat: gcc
+STC_MSGFORMAT= -messageFormat: gcc-jenkins
+
+COMMONSYMBOLS=+commonSymbols
+
+# uncomment this, if the stc compiled C files should be kept for debugging
+# KEEPCFILE=1
+
+# borland cbuilder version
+CBUILDER5=1
+#CBUILDER6=1
+
+!ifdef WINVER_5
+IPHLPAPI_LIB=iphlpapi.lib
+!else
+IPHLPAPI_LIB=
+!endif
+
+# all compiler specific libs are now under lib (used to be at top level)
+LIBDIR_PARENT=lib
+
+#
+# extensions
+#
+O=obj
+H=STH
+RES=res
+
+MAKE=make.exe
+
+!ifdef USEBC
+
+# ----------------
+# Borland C
+# ----------------
+
+# LIBDIR: final destination directory for lib's lib\bc, lib\vc, lib\lcc etc.
+# OUTDIR: temporary output directory (path) .\objbc\ .\objvc\ .\objlc\
+# OBJDIR: name of object directory (not path) - objbc, objvc or objlc
+LIBDIR_NAME=$(LIBDIR_PARENT)\bc
+LIBDIR=$(TOP)\$(LIBDIR_NAME)
+LIBDIR_LIBRUN=$(LIBDIR)
+OBJDIR=objbc
+OBJDIR_LIBRUN=$(OBJDIR)
+OUTDIR=objbc\\
+
+# the stxc32i is a stripped down version
+# of the original cw32i for CBuilder3
+#
+# cs32i is for CBuilder4
+#
+# CAUTION:
+# We need special build borland libraries for STX/X,
+# (they have to be linked to a different base address).
+# Look into support\win32\borland\not_delivered for more information
+# and build procedures. The generated libraries are in support\win32\borland.
+
+# CBUILDER5
+# RT_LIB = cs32mt.lib
+# The libraries from BCC 5.1 have not yet been adapted,
+# don't use them!
+#RT_LIB = cw32i.lib
+#RT_DLL = cc3250.dll
+
+# Use libraries from BCC 4
+RT_LIB = cs32i.lib
+RT_DLL = cs3245.dll
+
+X11_DLL  = X11.dll
+XEXT_DLL = Xext.dll
+
+#
+# where are the bctools ?
+#
+! ifndef BCB
+# BCB = $(MAKEDIR)\..
+BCB=c:\Borland\bcc55
+! endif
+
+
+# FOR BORLAND default (as installed, in path)
+# CC=bcc32.exe
+# RC=brcc32 -DWIN32
+# LINK32=ilink32.exe
+
+# FOR BORLAND 5.5 (CBuilder5, free command line tools)
+# BCB=c:\Borland\bcc55
+
+# FOR BORLAND 5.6 (CBuilder6)
+# BCB=c:\Borland\bcc56
+
+CC=$(BCB)\bin\bcc32.exe
+RC=$(BCB)\bin\brcc32 -DWIN32
+LINK32=$(BCB)\bin\ilink32.exe
+LIB32=$(BCB)\bin\tlib.exe
+AS=tasm32.exe
+MAKE_BAT=bmake
+USE_ARG=-DUSEBC
+APP_LINKER=$(LINK32)
+# APP_LFLAGS = -L$(LIBDIR);$(BCB)\lib;$(DEBUGLIBPATH) -H:0x400000 -Hc:0x100000 -S:0x40000 -Sc:0x10000 -ap -Tpe -x -Gn -v -Ao:0x10000
+APP_LFLAGS = -L$(LIBDIR);$(BCB)\lib -S:0x40000 -Sc:0x10000 -Tpe -x -Gn -v -Ao:0x10000
+APP_RT_LIB=
+APP_IMPORTLIBS=import32.lib
+CRT_STARTUP_CONSOLE=c0x32.obj
+CRT_STARTUP_NOCONSOLE=c0w32.obj
+LFLAGS_CONSOLE=-ap
+LFLAGS_NOCONSOLE=-aa
+
+!else
+! ifdef USEVC
+
+# ----------------
+# MS visual c
+# ----------------
+
+# !MESSAGE WINDOWSSDKDIR is $(WINDOWSSDKDIR)
+# !MESSAGE VSINSTALLDIR is $(VSINSTALLDIR)
+
+LIBDIR_NAME=$(LIBDIR_PARENT)\vc
+LIBDIR=$(TOP)\$(LIBDIR_NAME)
+# LIBDIR=$(TOP)\librun\Debug
+LIBDIR_LIBRUN=$(LIBDIR)
+OBJDIR=objvc
+OBJDIR_LIBRUN=$(OBJDIR)
+OUTDIR=objvc\\
+
+!   if "$(WINDOWSSDKDIR)x" == "x"
+
+SDK6=$(PROGRAMS)\Microsoft SDKs\Windows\v6.0A
+SDK70a=$(PROGRAMS)\Microsoft SDKs\Windows\v7.0A
+SDK70a_x86=$(PROGRAMS86)\Microsoft SDKs\Windows\v7.0A
+SDK71=$(PROGRAMS)\Microsoft SDKs\Windows\v7.1
+SDK71_x86=$(PROGRAMS86)\Microsoft SDKs\Windows\v7.1
+
+SDK=$(SDK71_x86)\\
+SDK=$(SDK70a_x86)\\
+
+
+!MESSAGE WINDOWSSDKDIR not set; assuming $(SDK)...
+
+!   else
+
+SDK=$(WINDOWSSDKDIR)
+
+!   endif
+
+!   if "$(VSINSTALLDIR)x" == "x"
+!ERROR VSINSTALLDIR not set. Please call the appropriate setup script (typically: C:\Program Files\Microsoft Visual Studio 10.0\VC\bin\vcvars32.bat)
+# VSINSTDIR=%ProgramFiles%\Microsoft Visual Studio 8\\
+# VSINSTDIR=%ProgramFiles%\Microsoft Visual Studio 9.0\\
+VSINSTDIR=%ProgramFiles%\Microsoft Visual Studio 10.0\\
+
+!   else
+
+VSINSTDIR=$(VSINSTALLDIR)
+
+!   endif
+
+VCINSTALLDIR=$(VSINSTDIR)VC
+VCBINDIR=$(VCINSTALLDIR)\bin\\
+VCLIBDIR=$(VCINSTALLDIR)\lib\\
+
+VS80COMNTOOLS=$(VSINSTDIR)Common7\Tools\\
+WINDOWSKIT=c:\Program Files (x86)\Windows Kits\10\Include\10.0.10150.0\ucrt
+INCLUDE_WINDOWSKIT=-I"$(WINDOWSKIT)"
+
+# VCBINDIR=
+LINK32="$(VCBINDIR)link.exe"
+CC="$(VCBINDIR)cl.exe"
+LIB32="$(VCBINDIR)lib.exe"
+MAKE_BAT=vcmake
+MAKE=make.exe
+USE_ARG=-DUSEVC
+RC="$(SDK)bin\rc.exe"
+APP_LINKER=$(LINK32)
+CRT_STARTUP_CONSOLE=
+CRT_STARTUP_NOCONSOLE=
+LFLAGS_CONSOLE=/nologo /DEBUG /DYNAMICBASE:NO /MACHINE:X86 /ERRORREPORT:PROMPT
+LFLAGS_NOCONSOLE=/nologo /DEBUG /DYNAMICBASE:NO /MACHINE:X86 /ERRORREPORT:PROMPT
+APP_RT_LIB=
+APP_IMPORTLIBS=kernel32.lib
+
+! else
+!  ifdef USELCC
+
+# ------------
+# lcc compiler
+# ------------
+LIBDIR_NAME=$(LIBDIR_PARENT)\lcc
+LIBDIR=$(TOP)\$(LIBDIR_NAME)
+LIBDIR_LIBRUN=$(TOP)\$(LIBDIR_PARENT)\vc
+LIBDIR_LIBRUN=$(LIBDIR)
+OBJDIR=objlcc
+OBJDIR_LIBRUN=objvc
+OUTDIR=objlcc\\
+
+LCCDIR=c:\lcc
+LCCBINDIR=$(LCCDIR)\bin
+CC=$(LCCBINDIR)\lcc.exe
+RC=$(LCCBINDIR)\lrc
+LINK32=$(LCCBINDIR)\lcclnk.exe
+LINK32_DLL=$(LCCBINDIR)\lcclnk.exe
+MAKE_BAT=lccmake
+USE_ARG=-DUSELCC
+APP_LINKER=$(LINK32)
+# APP_LFLAGS = -L$(LIBDIR);$(BCB)\lib;$(DEBUGLIBPATH) -H:0x400000 -Hc:0x100000 -S:0x40000 -Sc:0x10000 -ap -Tpe -x -Gn -v -Ao:0x10000
+CRT_STARTUP_CONSOLE=
+CRT_STARTUP_NOCONSOLE=
+LFLAGS_DLL=-dll
+LFLAGS_CONSOLE=
+LFLAGS_NOCONSOLE=
+APP_RT_LIB=
+APP_IMPORTLIBS=kernel32.lib
+
+!  else
+!   ifdef USETCC
+
+# ------------
+# tcc compiler
+# ------------
+O=o
+
+LIBDIR_NAME=$(LIBDIR_PARENT)\tcc
+LIBDIR=$(TOP)\$(LIBDIR_NAME)
+# LIBDIR=$(TOP)\librun\Debug
+LIBDIR_LIBRUN=$(TOP)\$(LIBDIR_PARENT)\vc
+OBJDIR=objtcc
+OBJDIR_LIBRUN=objvc
+OUTDIR=objtcc\\
+
+TCCDIR=$(TOP)\support\tcc
+CC=$(TCCDIR)\tcc.exe
+LINK32=$(TCCDIR)\tcc.exe
+MAKE_BAT=tccmake
+USE_ARG=-DUSETCC
+APP_LINKER=$(LINK32)
+# APP_LFLAGS = -L$(LIBDIR);$(BCB)\lib;$(DEBUGLIBPATH) -H:0x400000 -Hc:0x100000 -S:0x40000 -Sc:0x10000 -ap -Tpe -x -Gn -v -Ao:0x10000
+CRT_STARTUP_CONSOLE=
+CRT_STARTUP_NOCONSOLE=
+LFLAGS_CONSOLE=
+LFLAGS_NOCONSOLE=
+APP_RT_LIB=
+APP_IMPORTLIBS=kernel32.lib
+
+!   else
+!    if defined(USEMINGW32) || defined(USEMINGW64)
+
+# ------------
+# mingw gcc compiler
+# ------------
+
+LIBDIR_NAME=$(LIBDIR_PARENT)\mingw
+LIBDIR=$(TOP)\$(LIBDIR_NAME)
+# LIBDIR=$(TOP)\librun\Debug
+LIBDIR_LIBRUN=$(TOP)\$(LIBDIR_PARENT)\mingw
+OBJDIR=objmingw
+OBJDIR_LIBRUN=objmingw
+OUTDIR=objmingw/
+
+
+!     ifndef MINGW_DIR
+	echo "MINGW_DIR is not set"
+MINGW_DIR="C:\\MINGW"
+!     endif
+
+# do not quote here;
+# must already be quoted in the shell-env, if it contains spaces (program files\...)
+MINGWDIR=$(MINGW_DIR)
+MINGWBINDIR=$(MINGWDIR)\bin
+MINGWLIBDIR=$(MINGWDIR)\lib
+
+CC=$(MINGWBINDIR)\gcc.exe
+# LINK32=$(MINGWBINDIR)\ld.exe
+LINK32=$(CC)
+LINK32_DLL=$(CC)
+MAKE_BAT=mingwmake
+RC=$(MINGWBINDIR)\windres
+RFLAGS=
+RES=$(O)
+APP_LINKER=$(CC)
+
+!    if defined(USEMINGW32)
+USE_ARG=-DUSEMINGW32=1
+!    else
+USE_ARG=-DUSEMINGW64=1
+!    endif
+
+# the following generates a correct exe, but with console!
+CRT_STARTUP_CONSOLE=
+CRT_STARTUP_NOCONSOLE=
+
+LFLAGS_DLL=-g -shared
+# -L$(MINGWDIR)\lib
+LFLAGS_CONSOLE=-g
+# -L$(MINGWDIR)\lib
+LFLAGS_NOCONSOLE=-g -mwindows
+# -L$(MINGWDIR)\lib
+APP_RT_LIB=
+#APP_IMPORTLIBS=$(MINGWLIBDIR)\libkernel32.a
+APP_IMPORTLIBS=
+
+
+
+!    else
+error error error
+!    endif
+!   endif
+!  endif
+! endif
+!endif
+
+#slashified OUTDIR, because MIGNW does not handle backslashes correctly in a response file (sigh)
+!if defined(USEMINGW32) || defined(USEMINGW64)
+OUTDIR_SLASH=objmingw/
+!else
+OUTDIR_SLASH=$(OUTDIR)
+!endif
+
+STC_BINDIR=$(TOP)\stc
+GENDATE_UTILITY=$(TOP)\librun\genDate.com
+
+#
+# give disjount base addresses
+# (its not fatal, if libs overlap;
+#  however, startup time and sharability are affected if they do ...)
+#
+
+LIBORACLE_BASE            =0x03d00000
+LIBJAVA_BASE              =0x04000000
+LIBOPENGL_BASE            =0x04400000
+
+
+WORKFLOW_BASE             =0x66000000
+#                              680000
+#                              7fffff
+EXPECCO_BASE              =0x67000000
+#                              807000
+#                              dfffff
+EXPECCOREPORT_BASE        =0x67e00000
+#                               69000
+#                               fffff
+EXPECCOSTORAGE_BASE       =0x67f00000
+#                               4C000
+#                               7ffff
+EXEPT_PDF_BASE            =0x67f80000
+#                               55000
+#                               dffff
+EXEPT_SIGNEDZIP_BASE      =0x67fe0000
+#                                E000
+#                               1ffff
+
+DAPASX_BASE               =0x66000000
+
+LIBRUN_BASE               =0x69000000
+#                              181000
+#                              2FFFFF
+LIBSOAP_BASE              =0x69300000
+#                               98000
+#                               fffff     space
+#                               fffff     end-addr
+GOODIES_NET_BASE          =0x69400000
+#                               E7000
+#                              1fffff     space
+#                              5fffff     end-addr
+GOODIES_AUTH_BASE         =0x69600000
+#                               12000
+#                               3ffff     space
+#                               3ffff     end-addr
+# **FREE**                =0x69640000
+#
+#                               3ffff     space
+#                               7ffff     end-addr
+GOODIES_POSTSCRIPT_BASE   =0x69680000
+#                               2A000
+#                               3ffff     space
+#                               Bffff     end-addr
+GOODIES_RDOIT_BASE        =0x696C0000
+#                               17000
+#                               3ffff     space
+#                               fffff     end-addr
+GOODIES_COMM_BASE         =0x69700000
+#                               E1000
+#                              1fffff     space
+#                              8fffff     end-addr
+LIBCOMPAT_BASE            =0x69900000
+#                               4a000
+#                               fffff     space
+#                               fffff     end-addr
+# **FREE**                =0x69A00000
+#
+#                              5fffff     space
+#                              Ffffff     end-addr
+
+LIBBASIC_BASE             =0x6A000000
+#                              52b000
+#                              bfffff     space
+LIBOSI_ASN1_BASE          =0x6AC00000
+#                               b7000
+#                               fffff     space
+#                               fffff     end-addr
+LIBCRYPT_BASE             =0x6AD00000
+#                               7B000
+#                               fffff     space
+#                               fffff     end-addr
+LIBBASIC3_BASE            =0x6AE00000
+#                               b2000
+#                              1fffff     space
+#                              Ffffff     end-addr
+LIBVIEW_BASE              =0x6B000000
+#                              25d000     used
+#                              6fffff     space
+#                              6fffff     end-addr
+LIBVIEW2_BASE             =0x6B700000
+#                              13e000
+#                              2fffff     space
+#                              9fffff     end-addr
+LIBCOMP_BASE              =0x6BA00000
+#                              138000
+#                              2fffff     space
+#                              cfffff     end-addr
+LIBBASIC2_BASE            =0x6BD00000
+#                               cd000
+#                              1fffff     space
+#                              efffff     end-addr
+LIBHTMLTREE_BASE          =0x6BF00000
+#                               ba000
+#                               fffff     space
+#                              Ffffff     end-addr
+
+LIBTOOL_BASE              =0x6C000000
+#                              623000     used
+#                              Bfffff     space
+#                              Bfffff     end-addr
+LIBTOOL2_BASE             =0x6CC00000
+#                              12c000     used
+#                              3fffff     space
+#                              Ffffff     end-addr
+
+LIBWIDG_BASE              =0x6D000000
+#                              1f8000
+#                              4fffff
+LIBWIDG2_BASE             =0x6D500000
+#                              18a000
+#                              7fffff
+LIBWEBSERVER_BASE         =0x6D800000
+#                              15c000
+#                              3fffff
+#                              Bfffff
+LIBWIDG3_BASE             =0x6DC00000
+#                               18000
+#                               3ffff
+WINWORKSTAT_BASE          =0x6DC40000
+#                               44000
+#                               fffff
+XWORKSTAT_BASE            =0x6DD00000
+#                               3F000
+#                               fffff
+LIBUI_BASE                =0x6DE00000
+#                               c4000
+#                              1fffff
+#                              Ffffff
+
+LIBREGEX_BASE             =0x6E800000
+#                               42000
+#                               7ffff
+LIBXMLSTX_BASE            =0x6E880000
+#                               16000
+#                               3FFFF
+#                               bffff
+LIBSOAP_XMLSIG_BASE       =0x6E8C0000
+#                               17000
+#                               3FFFF
+#                               fffff
+LIBXMLVW_BASE             =0x6E900000
+#                               79000
+#                               fffff
+LIBHTMLTREE_BASE          =0x6EA00000
+#                               AB000
+#                              1fFFFF
+#                              Bfffff
+
+
+LIBJAVASCRIPT_BASE        =0x6EC00000
+#                               64000
+#                               fffff
+LIBODBC_BASE              =0x6ED00000
+#                               4a000
+#                               fffff
+LIBBOSS_BASE              =0x6EE00000
+#                               2d000
+#                               7ffff
+LIBDB_BASE                =0x6EE80000
+#                               1b000
+#                               fffff
+LIBHTML_BASE              =0x6EF00000
+#                               82000
+#                               fffff
+
+
+LIB_RB_HELPERS_BASE       =0x6f000000
+#                               2b000
+#                               7ffff
+LIB_RB_CHANGES_BASE       =0x6f080000
+#                               2F000
+#                               bffff
+LIB_XML_YAXO_BASE         =0x6f0c0000
+#                               2F000
+#                               fffff
+LIB_RB_PARSER_BASE        =0x6f100000
+#                               95000
+#                               fffff
+LIB_RB_REFACTORING_BASE   =0x6f200000
+#                               9e000
+#                               fffff
+
+#                          0x6f300000
+
+!ifdef USEBC
+MAKE_ZLIB_ARG= -f win32\Makefile.bor
+MAKE_BZ2LIB_ARG= -f Makefile.bor
+MAKE_FDMLIB_ARG= -f Makefile.bcc
+!else
+! ifdef USELCC
+MAKE_ZLIB_ARG= -f win32\Makefile.lcc
+MAKE_BZ2LIB_ARG= -f Makefile.lcc
+MAKE_FDMLIB_ARG= -f Makefile.lcc
+! else
+!  ifdef USEVC
+MAKE_ZLIB_ARG= -f win32\Makefile.msvc
+MAKE_BZ2LIB_ARG= -f Makefile.msvc
+MAKE_FDMLIB_ARG= -f Makefile.msvc
+!  else
+!   ifdef USETCC
+MAKE_ZLIB_ARG= -f win32\Makefile.tcc
+MAKE_BZ2LIB_ARG= -f Makefile.tcc
+MAKE_FDMLIB_ARG= -f Makefile.tcc
+!   else
+!    if defined(USEMINGW32) || defined(USEMINGW64)
+MAKE_ZLIB_ARG= -f win32\Makefile.mingw
+MAKE_BZ2LIB_ARG= -f Makefile.mingw
+MAKE_FDMLIB_ARG= -f Makefile.mingw
+!    else
+error error error
+!    endif
+!   endif
+!  endif
+! endif
+!endif
+
+!ifdef LIB_BASE
+! ifdef USEBC
+LIB_BASE_LD_ARG=-b:$(LIB_BASE)
+! endif
+! ifdef USEVC
+#LIB_BASE_LD_ARG=/BASE:$(LIB_BASE)
+! endif
+!endif
+
+ZLIB_DIR=$(TOP)\support\zlib-1.2.3
+ZLIB=$(OBJDIR)\zlib.lib
+
+BZ2LIB_DIR=$(TOP)\support\bz2lib
+BZ2LIB=$(BZ2LIB_DIR)\bz2lib.lib
+
+#
+# final destination directory for exe's and dll's
+#
+BINDIR=$(TOP)\projects\smalltalk
+STX=$(BINDIR)\stx.com
+
+#
+# input/output directory for STX-includes
+#
+STX_INCDIR=$(TOP)\include
+INCLUDE=$(STX_INCDIR)
+INCL=$(TOP)\include\\
+
+LIBRUN=$(LIBDIR)\librun.lib
+
+# WINSOCK=wsock32
+WINSOCK=ws2_32
+WINSOCK_LIB=$(WINSOCK).lib
+L_WINSOCK=-l$(WINSOCK)
+
+!ifdef USEBC
+
+# BORLAND
+SYS_INCL=-I$(BCB)\include -I..\support\win32\include
+OPENGL_INCLUDE=-I$(BCB)\include\gl
+
+# Linker definition file for DLL's (generic)
+DEF_FILE=$(TOP)\rules\bc_dll.def
+SYSLIBDIR=$(BCB)\lib\release
+IPHLPAPI_LIB=$(BCB)\lib\PSDK\iphlpapi.lib
+
+!else
+! ifdef USEVC
+
+# VISUALC
+SYS_INCL=-I"$(VCINSTALLDIR)\include" -I"$(SDK)Include" -I"$(SDK2)Include" -I"$(SDK3)Include" -I..\librun
+SYS_INCL=-I"$(VCINSTALLDIR)\include" -I"$(SDK)Include" -I..\librun
+SYS_INCL=-I"$(VCINSTALLDIR)\include" -I"$(SDK)Include" $(INCLUDE_WINDOWSKIT) -I..\librun
+OPENGL_INCLUDE=-I$(SDK)\include\gl
+
+DEF_FILE=$(TOP)\rules\vc_dll.def
+SYSLIBDIR=$(SDK)lib\\
+
+LINK32_LIBS=\
+	kernel32.lib \
+	user32.lib \
+	gdi32.lib\
+	shell32.lib\
+	comdlg32.lib \
+	ole32.lib \
+	oleaut32.lib \
+	advapi32.lib \
+	Mpr.lib \
+	uuid.lib \
+	iphlpapi.lib \
+	winmm.lib \
+	winspool.lib \
+#        wingdi.lib \
+	version.lib \
+	$(WINSOCK_LIB) \
+	"$(VCLIBDIR)oldnames.lib" \
+#        "$(VCLIBDIR)libcmt.lib" \
+	$(LOCALLIBS)
+
+# LINK32_INCREMENTAL=/INCREMENTAL:yes
+
+LINK32_FLAGS=\
+	$(LINK32_LIBS) \
+	$(LIBRUN) \
+	/NOLOGO \
+	/SUBSYSTEM:$(LIB_SUBSYSTEM) \
+	$(LINK32_INCREMENTAL) \
+	/PDB:$(OUTDIR)$(LIBNAME).pdb \
+	/DEBUG \
+	/DLL \
+	/DYNAMICBASE:NO \
+	/MACHINE:X86 \
+	/LARGEADDRESSAWARE \
+	/ERRORREPORT:PROMPT \
+	/OUT:$(OUTDIR)$(LIBNAME).dll
+
+! else
+!  ifdef USELCC
+
+# LCC
+SYS_INCL=-I$(LCCDIR)\include
+OPENGL_INCLUDE=-I$(LCCDIR)\include\gl
+
+!  else
+!   ifdef USETCC
+
+# TCC
+SYS_INCL=-I$(TCCDIR)\include
+OPENGL_INCLUDE=-I$(TCCDIR)\include\gl
+STC_CMD_OPT=-commonRefs
+
+!   else
+!    if defined(USEMINGW32) || defined(USEMINGW64)
+
+# MINGW
+SYS_INCL=-I$(MINGWDIR)\include
+OPTIONAL_SUPPORT_XLIB_INCLUDE=-I$(TOP)\support\win32\include -I$(TOP)\support\win32\include\x11
+OPENGL_INCLUDE=-I$(MINGWDIR)\include\gl
+# STC_CMD_OPT=-commonRefs
+!     if defined(USEMINGW32)
+L_WINSOCK=-lws2_32 -lwsock32
+WINSOCK_LIB=
+!     else
+L_WINSOCK=-lws2_32 -lwsock32
+WINSOCK_LIB=
+!     endif
+
+!    else
+error error error
+!    endif
+!   endif
+!  endif
+! endif
+!endif
+
+STC=$(STC_BINDIR)\stc
+STX_INCL=-I"$(STX_INCDIR)"
+LIBINIT_FILE=$(OUTDIR_SLASH)ntLibInit.$(O)
+
+SYS_LIBS=\
+	"$(SYSLIBDIR)kernel32.lib" \
+	"$(SYSLIBDIR)user32.lib" \
+	"$(SYSLIBDIR)gdi32.lib" \
+	"$(SYSLIBDIR)comdlg32.lib" \
+	"$(SYSLIBDIR)ole32.lib" \
+	"$(SYSLIBDIR)oleaut32.lib" \
+	"$(SYSLIBDIR)advapi32.lib" \
+	"$(SYSLIBDIR)Mpr.lib" \
+	"$(SYSLIBDIR)uuid.lib" \
+	"$(SYSLIBDIR)PSDK\iphlpapi.lib" \
+	"$(SYSLIBDIR)$(WINSOCK_LIB)" \
+	"$(SYSLIBDIR)version.lib" \
+	"$(SYSLIBDIR)libc.lib" \
+	"$(SYSLIBDIR)oldnames.lib"
+
+SYS_LIB_FLAGS=\
+	-lkernel32 -luser32 -lgdi32 -lcomdlg32 -lole32 -loleaut32 -ladvapi32 \
+	-lMpr -luuid -liphlpapi $(L_WINSOCK) -lversion -lwinmm
+
+! if defined(USEMINGW32) || defined(USEMINGW64)
+ODBC32_LIB=-lodbc32
+! else
+ODBC32_LIB=odbc32.lib
+! endif
+
+INTDIR=.
+
+#
+# defaults ...
+#
+
+LIB_SUBSYSTEM=console
+
+!if defined(USEMINGW32) || defined(USEMINGW64)
+OPT=-fPIC -O2 -fno-strict-aliasing -Wno-strict-aliasing -fno-stack-protector -ggdb3 -pipe -U_FORTIFY_SOURCE
+CFLAGS=$(OPT) $(CFLAGS1) $(CFLAGS2) $(LOCALINCLUDES) $(CLOCAL_INCL) $(CFLAGS_LOCAL)
+!endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/makelib/stdRules	Thu Aug 03 09:37:46 2017 +0100
@@ -0,0 +1,2995 @@
+#------------------ start of rules/stdRules ---------------------
+#
+# $Header: /cvs/stx/stx/rules/stdRules,v 1.439 2017-02-21 17:10:56 cg Exp $
+#
+# MIMEType: application/x-make
+#
+# Notice: on systems where make does not support the include
+# directive, this file is included as a whole into the generated
+# Makefile, and the following comment applies:
+#   these rules come from $(TOP)/rules/stdRules - do not change
+#   anything below, the changes will be lost when Makefiles are
+#   recreated.
+# If the make command does support include, this file is
+# referenced to by the generated Makefile with an include directive.
+#
+# Do not blame me about the complexity here - nowadays, I would use
+# configure. But I am happy to have a setup which runs on all those wierd
+# machines and have other things to do ...
+#
+# these rules enable the Makefiles to:
+#
+#     make mf                   -- recreate the makefile after a definition change
+#
+#     make Makefiles            -- recursively walk down and (re)create Makefiles
+#
+#     make depend               -- extract dependencies from ST sourcefiles
+#                                  and replace BEGINMAKEDEPEND..ENDMAKEDEPEND
+#                                  in Makefile
+#
+#     make check                -- syntax check all ST-files
+#
+#     make <Class>.check        -- check syntax of an individual ST-file
+#
+#     make debug                -- compile without -O / -g instead
+#
+#     make objs                 -- compile to all .o-files
+#
+#     make obj                  -- make a prelinked obj-library file
+#
+#     make clobber              -- remove all that can be reconstructed
+#
+#     make clean                -- remove all .o-files, but leave libraries and executables
+#
+#     make cleanjunk            -- clean junk (intermediate) files
+#
+#     make notes                -- for stc-developpers only
+#                                  output notes about internal actions
+#
+#     make warnings             -- for stc-developpers only
+#                                  output warning messages
+#
+#     make abbrev.stc           -- process local ST-files and collect
+#                                  classname-to-filename abbreviations in
+#                                  a local abbrev.stc file
+#
+#     make updAbbrev            -- merge all local abbreviations into the
+#                                  global abbrev.stc file (in include/)
+#
+#     make rmLocalAbbrevs       -- remove all local abbreviations from the
+#                                  global abbrev.stc file (in include/)
+#
+#     make collectAbbrev        -- recursively process all ST-files and collect
+#                                  className-to-fileName abbreviations
+#                                  in $(INCLUDE)/abbrev.stc
+#                                  (i.e. a recursive updAbbrev)
+#
+# ---- internal rules
+#
+#     make newobj               -- make a prelinked obj-library file
+#                                  including a classlibrary init-function
+#
+#     make sharedobj            -- make a prelinked shared obj-library file
+#                                  including a classlibrary init-function
+
+
+# controls if a 'lib' subdirectory is to be made
+# when linking against shared objects
+NO_LINK_LIBDIR="yes"
+
+
+# redefinableAll: Makefile $(ALL_TARGET) postMake
+redefinableAll: $(ALL_TARGET) postMake
+
+postMake::
+
+#
+# notice: the rule below used to be the Makefile rule;
+# however, since gmake automatically executes this rule upon entry,
+# this may lead to trouble, if you are on an NFS mounted file system,
+# and the machines times are not completely in sync (i.e. withing a second).
+# To avoid endless make recursion, this rule is now called 'mf'
+#
+
+MAKEFILE=makefile
+#MAKEFILE=makefile.gen
+RELEASE=`cat $(TOP)/RELEASE`
+MF=mf
+
+.PHONY: $(MF) $(MF)_2 additionalMakefiles
+
+#
+# creates a Makefile from Make.proto, rules and configuration
+#
+$(MF): Make.proto $(RULEDIR)/stdHeader $(RULEDIR)/stdHeader2 $(RULEDIR)/stdRules \
+		     $(CONFDIR)/COMMON/defines \
+		     $(CONFDIR)/vendorConf \
+		     $(CONFDIR)/myConf
+	@-echo "making $(MAKEFILE) for $(CONF) $(CONF_PACKS) ..."
+	@$(MAKE) additionalMakefiles
+	@$(MAKE) $(MF)_2
+
+additionalMakefiles::
+
+$(MF)_2:
+	@-rm -f $(MAKEFILE).bak
+	@-mv $(MAKEFILE) $(MAKEFILE).bak
+	@echo '#' > $(MAKEFILE)
+	@echo '# DO NOT EDIT ' >> $(MAKEFILE)
+	@echo '# automagically generated from Make.proto (by make mf)' >> $(MAKEFILE)
+	@echo "#" >> $(MAKEFILE)
+	@-if [ "$(MAKE_INCLUDE)" != "" ]; then \
+	    echo "$(MAKE_INCLUDE) $(TOP)/rules/stdHeader" >>$(MAKEFILE); \
+	else \
+	    cat $(RULEDIR)/stdHeader >> $(MAKEFILE) ; \
+	    echo "$(MAKEFILE):: $(TOP)/rules/stdHeader" >>$(MAKEFILE); \
+	fi
+	@-if [ -r $(CONFDIR)/COMMON/defines ]; then \
+	  if [ "$(MAKE_INCLUDE)" != "" ]; then \
+	    echo "$(MAKE_INCLUDE) $(TOP)/configurations/COMMON/defines" >> $(MAKEFILE); \
+	  else \
+	    cat $(CONFDIR)/COMMON/defines >> $(MAKEFILE); \
+	    echo "$(MAKEFILE):: $(CONFDIR)/COMMON/defines" >>$(MAKEFILE); \
+	  fi ;\
+	fi
+	@-if [ -r $(CONFDIR)/vendorConf ]; then \
+	  if [ "$(MAKE_INCLUDE)" != "" ]; then \
+	    echo "$(MAKE_INCLUDE) $(TOP)/configurations/vendorConf" >> $(MAKEFILE); \
+	  else \
+	    cat $(CONFDIR)/vendorConf >> $(MAKEFILE); \
+	  fi ; \
+	fi
+	@-if [ -r $(CONFDIR)/myTools ]; then \
+	  if [ "$(MAKE_INCLUDE)" != "" ]; then \
+	    echo "$(MAKE_INCLUDE) $(TOP)/configurations/myTools" >> $(MAKEFILE); \
+	  else \
+	    cat $(CONFDIR)/myTools >> $(MAKEFILE); \
+	  fi ;\
+	else \
+	  if [ "$(CONF_TOOLS)" != "" ]; then \
+	    if [ -r $(CONFDIR)/COMMON/$(CONF_TOOLS) ]; then \
+	      cat $(CONFDIR)/COMMON/$(CONF_TOOLS) >>$(MAKEFILE) ; \
+	    fi ; \
+	  fi ;\
+	fi
+	@-if [ "$(MAKE_INCLUDE)" != "" ]; then \
+	  echo "$(MAKE_INCLUDE) $(TOP)/configurations/myConf"  >> $(MAKEFILE); \
+	else \
+	  cat $(CONFDIR)/myConf  >>$(MAKEFILE); \
+	fi
+	@-if [ -r $(CONFDIR)/myPack ]; then \
+	  if [ "$(MAKE_INCLUDE)" != "" ]; then \
+	    echo "$(MAKE_INCLUDE) $(TOP)/configurations/myPack" >> $(MAKEFILE); \
+	  else \
+	    cat $(CONFDIR)/myPack >> $(MAKEFILE); \
+	    echo "$(MAKEFILE):: $(CONFDIR)/myPack" >>$(MAKEFILE); \
+	  fi ;\
+	else \
+	    if [ "$(CONF_PACKS)" != "" ]; then \
+		if [ -r $(CONFDIR)/PACKS/$(CONF_PACKS) ]; then \
+		    cat $(CONFDIR)/PACKS/$(CONF_PACKS) >>$(MAKEFILE) ; \
+		fi ;\
+	    fi ;\
+	fi
+	@-if [ "$(MAKE_INCLUDE)" != "" ]; then \
+	  echo "$(MAKE_INCLUDE) $(TOP)/rules/stdHeader2" >>$(MAKEFILE); \
+	else \
+	  cat $(RULEDIR)/stdHeader2         >>$(MAKEFILE); \
+	  echo "$(MAKEFILE):: $(RULEDIR)/stdHeader2" >>$(MAKEFILE); \
+	fi
+	@-if [ -r Make.spec ]; then                    \
+	  if [ "$(MAKE_INCLUDE)" != "" ]; then \
+	    echo "$(MAKE_INCLUDE) Make.spec"  >> $(MAKEFILE); \
+	  else \
+	    cat Make.spec  >>$(MAKEFILE); \
+	  fi; \
+	fi
+	@-if [ $$TOP"x" != "x" ]; then \
+	    echo "TOP="$$TOP  >>$(MAKEFILE); \
+	    sed '/^TOP=/d' < Make.proto > Make.proto.edit; \
+	    cat Make.proto.edit >>$(MAKEFILE); \
+	else \
+	    if [ $(TOPOVERWRITE)"x" != "x" ]; then \
+		echo "TOP="$(TOP) >>$(MAKEFILE);  \
+		sed '/^TOP=/d' < Make.proto > Make.proto.edit; \
+		cat Make.proto.edit >>$(MAKEFILE); \
+	    else \
+		if [ "$(MAKE_INCLUDE)" != "" ]; then \
+		    echo $(MAKE_INCLUDE) Make.proto >>$(MAKEFILE); \
+		else \
+		    cat Make.proto >>$(MAKEFILE); \
+		    echo "$(MAKEFILE):: Make.proto" >>$(MAKEFILE); \
+		fi ;\
+	    fi ;\
+	fi
+	@echo ""                           >>$(MAKEFILE)
+	@echo "BASE_CONF="$(CONF)               >>$(MAKEFILE)
+	@echo "BASE_CONF_VENDOR="$(CONF_VENDOR) >>$(MAKEFILE)
+	@echo "CONF_PACKS="$(CONF_PACKS)   >>$(MAKEFILE)
+	@echo "CONF_TOOLS="$(CONF_TOOLS)   >>$(MAKEFILE)
+	@-if [ $$TOP"x" != "x" ]; then                  \
+	    echo "TOP="$$TOP              >>$(MAKEFILE);        \
+	    echo "TOPOVERWRITE="$$TOP     >>$(MAKEFILE);        \
+	    echo "STC="stc                >>$(MAKEFILE);   \
+	    echo "INCLUDE="$(INCLUDE)     >>$(MAKEFILE);        \
+	    echo "INCLUDE_OUT="$(INCLUDE_OUT) >>$(MAKEFILE); \
+	else                                            \
+	    if [ $(TOPOVERWRITE)"x" != "x" ]; then      \
+		echo "TOP="$(TOP)          >>$(MAKEFILE);  \
+		echo "TOPOVERWRITE="$(TOP) >>$(MAKEFILE);  \
+		echo "STC="stc             >>$(MAKEFILE);  \
+		echo "INCLUDE="$(INCLUDE)  >>$(MAKEFILE);       \
+		echo "INCLUDE_OUT="$(INCLUDE_OUT) >>$(MAKEFILE); \
+	    fi;                                          \
+	fi
+	@echo ""                           >>$(MAKEFILE)
+	@-if [ "$(MAKE_INCLUDE)" != "" ]; then \
+	  echo "$(MAKE_INCLUDE) $(TOP)/rules/stdRules" >> $(MAKEFILE); \
+	else \
+	  cat $(RULEDIR)/stdRules           >>$(MAKEFILE); \
+	  echo "$(MAKEFILE):: $(RULEDIR)/stdRules" >>$(MAKEFILE); \
+	fi
+	@-if [ "$(TOUCH)" != "echo" ]; then \
+	    $(TOUCH) $(MAKEFILE); \
+	fi
+	@if [ "$(OTHER_MAKE_FILES)" != "" ]; then \
+	    $(MAKE) $(OTHER_MAKE_FILES); \
+	fi
+# No longer -- dependencies, abbrev and libInit.stc
+# are created by smalltalk!
+#
+#       @$(MAKE) depend MAKEFILE=$(MAKEFILE)
+#       @-if [ "$(MAKE_NT_MAKEFILES)" = "yes" ]; then \
+#           $(MAKE) nt.mak; \
+#           $(MAKE) bmake.bat; \
+#       fi
+#       @-if [ "$(MAKE_VMS_MAKEFILES)" = "yes" ]; then \
+#           $(MAKE) vms.mak; \
+#       fi
+#       @-if [ "$(SUPPRESS_LOCAL_ABBREVS)" = "" ]; then \
+#           $(MAKE) updateAbbrev; \
+#       fi
+	#cp $(TOP)/rules/samples/Makefile .
+
+#
+# unconditionally makes a new makefile
+# obsolete.
+#
+makeMakefile:
+	@echo "making $(MAKEFILE) for $(CONF) $(CONF_PACKS) ..."
+	@echo "1b"
+	@-rm -f $(MAKEFILE).bak
+	@-mv $(MAKEFILE) $(MAKEFILE).bak
+	@cat $(RULEDIR)/stdHeader       >$(MAKEFILE)
+	@-if [ -r $(CONFDIR)/COMMON/defines ]; then \
+	    cat $(CONFDIR)/COMMON/defines >> $(MAKEFILE); \
+	fi
+	@-if [ -r $(CONFDIR)/vendorConf ]; then \
+	    cat $(CONFDIR)/vendorConf >> $(MAKEFILE); \
+	fi
+	@-if [ -r $(CONFDIR)/myTools ]; then \
+	    cat $(CONFDIR)/myTools >> $(MAKEFILE); \
+	fi
+	@cat $(CONFDIR)/myConf  >>$(MAKEFILE)
+	@-if [ -r $(CONFDIR)/myPack ]; then \
+	    cat $(CONFDIR)/myPack >> $(MAKEFILE); \
+	else \
+	    if [ "$(CONF_PACKS)" != "" ]; then \
+		if [ -r $(CONFDIR)/PACKS/$(CONF_PACKS) ]; then \
+		    cat $(CONFDIR)/PACKS/$(CONF_PACKS) >>$(MAKEFILE) ; \
+		fi; \
+	    fi; \
+	fi
+	@cat $(RULEDIR)/stdHeader2         >>$(MAKEFILE)
+	@-if [ -r Make.spec ]; then                    \
+	    cat Make.spec                 >>$(MAKEFILE); \
+	fi
+	@cat Make.proto                    >>$(MAKEFILE)
+	@echo ""                           >>$(MAKEFILE)
+	@echo "BASE_CONF="$(CONF)               >>$(MAKEFILE)
+	@echo "BASE_CONF_VENDOR="$(CONF_VENDOR) >>$(MAKEFILE)
+	@echo "CONF_PACKS="$(CONF_PACKS)   >>$(MAKEFILE)
+	@echo "CONF_TOOLS="$(CONF_TOOLS)   >>$(MAKEFILE)
+	@-if [ $$TOP"x" != "x" ]; then \
+	    echo "TOP="$$TOP          >>$(MAKEFILE);    \
+	    echo "TOPOVERWRITE="$$TOP >>$(MAKEFILE);    \
+	    echo "STC="stc            >>$(MAKEFILE);       \
+	    echo "INCLUDE="$(INCLUDE)   >>$(MAKEFILE);  \
+	    echo "INCLUDE_OUT="$(INCLUDE_OUT) >>$(MAKEFILE); \
+	else                                            \
+	    if [ $(TOPOVERWRITE)"x" != "x" ]; then      \
+		echo "TOP="$(TOP)          >>$(MAKEFILE);       \
+		echo "TOPOVERWRITE="$(TOP) >>$(MAKEFILE);  \
+		echo "STC="stc             >>$(MAKEFILE);  \
+		echo "INCLUDE="$(INCLUDE)   >>$(MAKEFILE); \
+		echo "INCLUDE_OUT="$(INCLUDE_OUT) >>$(MAKEFILE); \
+	    fi;                                          \
+	fi
+	@echo ""                           >>$(MAKEFILE)
+	@cat $(RULEDIR)/stdRules         >>$(MAKEFILE)
+	@-if [ "$(TOUCH)" != "echo" ]; then \
+	    $(TOUCH) $(MAKEFILE); \
+	fi
+	@if [ "$(OTHER_MAKE_FILES)" != "" ]; then \
+	    $(MAKE) $(OTHER_MAKE_FILES);          \
+	fi
+# No longer -- dependencies, abbrev and libInit.stc
+# are created by smalltalk!
+#
+#        @-if [ "$(SUPPRESS_DEPEND)" = "" ]; then    \
+#            $(MAKE) depend MAKEFILE=$(MAKEFILE); \
+#        fi
+#        @-if [ "$(MAKE_NT_MAKEFILES)" = "yes" ]; then \
+#            $(MAKE) nt.mak;    \
+#            $(MAKE) bmake.bat; \
+#        fi
+#        @-if [ "$(MAKE_VMS_MAKEFILES)" = "yes" ]; then \
+#            $(MAKE) vms.mak;   \
+#        fi
+#        @-if [ "$(SUPPRESS_LOCAL_ABBREVS)" = "" ]; then \
+#            $(MAKE) updateAbbrev; \
+#        fi
+
+#
+# same, without make depend
+#
+qmakeMakefile:
+	$(MAKE) makeMakefile SUPPRESS_DEPEND=y MAKEFILE=$(MAKEFILE)
+
+#
+# same - lazy of typing
+#
+qmf:    qmakeMakefile
+
+# $(MAKEFILE): Make.proto
+#       $(MAKE) mf
+
+#
+# recursively goes down SUBDIRS and creates Makefiles
+#
+Makefiles:: checkForSTC
+	@echo "making Makefiles for $(CONF) $(CONF_PACKS) ..."
+	@$(MAKE) Makefiles_2
+
+Makefiles_2:
+	@-if [ "$(ALLSUBDIRS)"x != x ]; then         \
+	  $(MAKE) subMakefiles MAKEFILE=$(MAKEFILE); \
+	fi
+
+checkForSTC:
+	@-if [ ! -f $(STC) ]; then \
+	  (cd $(TOP)/stc && $(MAKE)); \
+	fi
+
+#
+# same without make depend
+#
+qMakefiles::
+	@-if [ "$(ALLSUBDIRS)"x != x ]; then                            \
+	  $(MAKE) subMakefiles SUPPRESS_DEPEND=y MAKEFILE=$(MAKEFILE);  \
+	fi
+
+subMakefiles::
+	@-for i in $(ALLSUBDIRS); do \
+	  if [ -d $$i ]; then \
+	   if [ -f $$i/Make.proto ]; then \
+	     $(MAKE) subMakefile SUBDIR=$$i ; \
+	   else \
+	     echo "*** oops no Make.proto in directory $$i ?? (non fatal)"; \
+	   fi; \
+	  else \
+	    echo "*** oops where is directory $$i ?? in "`pwd`" (non fatal)"; \
+	  fi; \
+	done
+
+subMakefile::
+	$(RULEDIR)/stmkmf --cd $(SUBDIR)
+
+#
+# sorry - the -nt operator is not available on most shells ... shame to them
+#
+
+# CHECKMAKEFILEISUPTODATE=checkMakefileIsUpToDate
+
+checkMakefileIsUpToDate:
+	@-if [ Make.proto -nt $(MAKEFILE) ]; then  \
+	   $(MAKE) mf;                         \
+	fi
+
+
+#
+# cross-make of makefiles & config files
+# for systems with poor make/sed/awk etc. support
+#
+# bmake.bat:
+#         @echo "mkdir objbc" > bmake.bat
+#         @echo "make.exe -N -f nt.mak %1 %2" >> bmake.bat
+
+bmake.bat:
+	@echo "make.exe -N -f nt.mak %1 %2" >> bmake.bat
+
+nt.mak: Make.proto $(TOP)/rules/stdRules
+	@$(MAKE) SYSDEP_OBJS="$(WIN32_OBJS)" do_nt.mak
+
+NT_ADDITIONAL_DEFS::
+	@echo "#"
+	@echo "# additional defines"
+	@echo "#"
+
+NT_ADDITIONAL_RULES::
+	@echo "#"
+	@echo "# additional rules"
+	@echo "#"
+
+do_nt.mak:
+	@echo "making nt.mak from Make.proto ..."
+	@echo '#' > nt_mak
+	@echo '# DO NOT EDIT ' >> nt_mak
+	@echo '# automagically generated from Make.proto (by make nt.mak)' >> nt_mak
+	@echo "#" >> nt_mak
+	@echo -n "TOP=" >> nt_mak
+	@echo $(TOP) | sed -e 's:/:\\:g' >> nt_mak
+	@echo "#" >> nt_mak
+	@echo '!INCLUDE $$(TOP)\rules\'$(STDHEADER_NT) >> nt_mak
+	@echo "#" >> nt_mak
+	@-if [ "$(LIBNAME)" != "" ]; then \
+	    echo "MODULE="$(MODULE) >> nt_mak; \
+	    echo "MODULE_DIR="$(MODULE_DIR) >> nt_mak; \
+	    echo "PACKAGE=$$"'('MODULE')'":$$"'('MODULE_DIR')' >> nt_mak; \
+	    echo "LIBNAME="$(LIBNAME) >> nt_mak; \
+	    if [ "$(NM_LIB_BASE)" != "" ]; then \
+		echo "LIB_BASE=$$"'('$(NM_LIB_BASE)')' >> nt_mak; \
+		echo '!ifdef USEBC' >> nt_mak; \
+		echo "LIB_BASE_LD_ARG=-b:$$"'('$(NM_LIB_BASE)')' >> nt_mak; \
+		echo '!endif' >> nt_mak; \
+	    fi; \
+	    echo LOCALINCLUDES='"'$(LOCALINCLUDES)'"' | sed -e 's:/:\\:g'  >> nt_mak; \
+	    echo 'CLOCAL_INCL=$$(LOCALINCLUDES)' >>nt_mak; \
+	    echo STCOPT='"'$(STCOPT)'"' >> nt_mak; \
+	    echo 'STCLOCALOPT=-package=$$(PACKAGE) $$(COMMONSYMBOLS) $$(SEPINITCODE) $$(RELOCINSTVARS) -varPrefix=$$(LIBNAME) $$(LOCALINCLUDES)' >> nt_mak; \
+	    echo '#STCLOCALOPT="'$(STCLOCALOPT)'"' >> nt_mak; \
+	    echo >> nt_mak; \
+	    echo 'ALL: $(NT_ADDITIONAL_ALL_TARGETS) $$(LIBDIR)\$$(LIBNAME).lib $$(BINDIR)\$$(LIBNAME).dll' >>nt_mak; \
+	    echo >> nt_mak; \
+	fi
+	@$(MAKE) NT_ADDITIONAL_DEFS >> nt_mak
+	@echo >> nt_mak
+	@echo 'OBJS=\' >> nt_mak
+	@for i in $(OBJS); do \
+	  BASE=`basename $$i .$(O)`; \
+	  W32BASE=`basename $$i .$(O)`_win32; \
+	  W32ST=`basename $$i .$(O)`_win32.st; \
+	  if [ -f $$W32ST ]; then \
+	    BASE=$$W32BASE; \
+	  fi; \
+	  if [ "$$BASE" != "XWorkstation" ]; then \
+	    if [ "$$BASE" != "GLXWorkstation" ]; then \
+	      if [ "$$BASE" != "WinWorkstation" ]; then \
+		echo '  $$(OUTDIR)'$$BASE'.$$(O)'" \\" >> nt_mak; \
+	      fi; \
+	    fi; \
+	  fi; \
+	done
+	@echo >> nt_mak
+	@echo >> nt_mak
+	@echo '!INCLUDE $$(TOP)\rules\'$(STDRULES_NT) >> nt_mak
+	@echo >> nt_mak
+	@$(MAKE) NT_ADDITIONAL_RULES >> nt_mak
+	@echo >> nt_mak
+	@echo "# BEGINMAKEDEPEND --- do not remove this line; make depend needs it" >> nt_mak
+	@for i in $(OBJS); do \
+	  BASE=`basename $$i .$(O)`; \
+	  W32BASE=`basename $$i .$(O)`_win32; \
+	  W32ST=`basename $$i .$(O)`_win32.st; \
+	  if [ -f $$W32ST ]; then \
+	    BASE=$$W32BASE; \
+	  fi; \
+	  if [ "$$BASE" != "XWorkstation" ]; then \
+	    if [ "$$BASE" != "GLXWorkstation" ]; then \
+	      if [ "$$BASE" != "WinWorkstation" ]; then \
+		echo '$$(OUTDIR)'$$BASE'.$$(O): '$$BASE'.st' >> nt_mak; \
+	      fi; \
+	    fi; \
+	  fi; \
+	done
+	@echo "# ENDMAKEDEPEND --- do not remove this line" >> nt_mak
+	@-if [ -f nt.mak ]; then \
+	    mv nt.mak nt.mak.bak; \
+	fi
+	@$(MAKE) stDepend MAKEFILE=nt_mak
+	@mv nt_mak nt.mak
+
+nt.def: $(MAKEFILE) $(TOP)/rules/stdRules
+	@echo "making nt.def from Make.proto ..."
+	@echo 'LIBRARY '$(LIBNAME) > nt_def
+	@echo 'CODE EXECUTE READ SHARED' >> nt_def
+	@echo 'DATA READ WRITE' >> nt_def
+	@echo 'SECTIONS' >> nt_def
+	@echo '    INITCODE    READ EXECUTE SHARED' >> nt_def
+	@echo '    INITDATA    READ WRITE' >> nt_def
+	@echo '    RODATA      READ SHARED' >> nt_def
+	@echo 'EXPORTS ' >> nt_def
+	@echo '    _'$(LIBNAME)'_Init' >> nt_def
+	@-mv nt.def nt.def.bak
+	@mv nt_def nt.def
+
+bc.def: $(MAKEFILE) $(TOP)/rules/stdRules
+	@echo "making bc.def from Make.proto ..."
+	@echo 'LIBRARY '$(LIBNAME) > bc_def
+	@echo 'CODE PRELOAD MOVEABLE DISCARDABLE' >> bc_def
+	@echo 'SEGMENTS' >> bc_def
+	@echo '   INITCODE    PRELOAD DISCARDABLE' >> bc_def
+	@echo 'EXPORTS ' >> bc_def
+	@echo '    _'$(LIBNAME)'_Init   @1' >> bc_def
+	@-mv bc.def bc.def.bak
+	@mv bc_def bc.def
+
+vms.mak: $(MAKEFILE) $(TOP)/rules/stdRules
+	@$(MAKE) SYSDEP_OBJS="$(VMS_OBJS)" do_vms.mak
+
+do_vms.mak:
+	@echo "making vms.mak from Make.proto ..."
+	@echo '#' > vms_mak
+	@echo '# DO NOT EDIT ' >> vms_mak
+	@echo '# automagically  generated from Make.proto (by make vms.mak)' >> vms_mak
+	@echo "#" >> vms_mak
+	@echo "TOP="$(TOP) >> vms_mak
+#       @echo '!INCLUDE $$(TOP)\rules\stdHeader_vms' >> vms_mak
+	@echo "LIBNAME="$(LIBNAME) >> vms_mak
+#       @grep $(GREP_ARGS) "LIB_BASE=" Make.proto >> vms_mak
+	@echo STCOPT='"'$(STCOPT)'"' >> vms_mak
+	@echo 'STCLOCALOPT=-package=$$(MODULE):$$(MODULE_DIR) $$(COMMONSYMBOLS) $$(SEPINITCODE) $$(RELOCINSTVARS) -varPrefix=$$(LIBNAME)' >> vms_mak
+	@echo 'ALL: $$(LIBDIR)\$$(LIBNAME).olb' >>vms_mak
+	@echo >>vms_mak
+	@echo 'OBJS=\' >> vms_mak
+	@for i in $(OBJS); do \
+	  BASE=`basename $$i .$(O)`; \
+	  echo '  $$(OUTDIR)'$$BASE'.$$(O)'" \\" >> vms_mak; \
+	done
+	@echo >> vms_mak
+	@echo >> vms_mak
+	@echo 'theLib:: $$(LIBNAME).olb' >> vms_mak
+	@echo 'Xwrite sys$$output "making class objects ..."' | tr X "\\011" >> vms_mak
+	@echo 'X$$(MAKE) objs' | tr X "\\011" >> vms_mak
+	@echo 'X$$(MAKE) libinit' | tr X "\\011" >> vms_mak
+	@echo 'Xwrite sys$$output "classlibrary $$(LIBNAME).olb made."' | tr X "\\011" >> vms_mak
+	@echo >> vms_mak
+	@echo '$$(LIBNAME).olb:' >> vms_mak
+	@echo 'Xwrite sys$$output "creating initial $$(LIBNAME).olb ..."' | tr X "\\011" >> vms_mak
+	@echo 'Xlib/cre $$(LIBNAME).olb' | tr X "\\011" >> vms_mak
+	@echo >> vms_mak
+	@echo 'objs:  $$(OBJS1)' >> vms_mak
+	@echo >> vms_mak
+	@echo >> vms_mak
+	@echo >> vms_mak
+	@echo '# BEGINMAKEDEPEND' >> vms_mak
+	@for i in $(OBJS); do \
+	  BASE=`basename $$i .$(O)`; \
+	  echo '$$(OUTDIR)'$$BASE'.$$(O): '$$BASE'.st' >> vms_mak; \
+	done
+	@echo '# ENDMAKEDEPEND' >> vms_mak
+	@-mv vms.mak vms.mak.bak
+	@$(MAKE) stDepend MAKEFILE=vms_mak
+	@mv vms_mak vms.mak
+
+# libInit.cc is now in CVS - do not overwrite!
+#
+#libInit.cc: Make.proto Make.spec $(MAKEFILE) $(TOP)/rules/stdRules
+libInit.cc:
+	$(MAKE) doLibInit.cc SYSDEP_OBJS=
+
+doLibInit.cc:
+	@echo "making libInit.cc from Make.proto ..."
+	@echo '/*' > libInit_cc
+	@echo ' * DO NOT EDIT ' >> libInit_cc
+	@echo ' * automagically generated from Make.proto (by make libInit.cc)' >> libInit_cc
+	@echo ' */' >> libInit_cc
+	@echo '#define __INDIRECTVMINITCALLS__' >> libInit_cc
+	@echo '#include <stc.h>' >> libInit_cc
+	@echo '#define INIT_TEXT_SECT /* as nothing */' >> libInit_cc
+	@echo '#ifdef WIN32' >> libInit_cc
+	@echo '# pragma codeseg INITCODE "INITCODE"' >> libInit_cc
+	@echo '#else /* not WIN32 */' >> libInit_cc
+	@echo '# if defined(__GNUC__) && !defined(NO_SECTION_ATTRIBUTES)' >> libInit_cc
+	@echo '#  if (__GNUC__  == 2 && __GNUC_MINOR__ >= 7) || __GNUC__ > 2' >> libInit_cc
+	@echo '#   undef INIT_TEXT_SECT' >> libInit_cc
+	@echo '#   define INIT_TEXT_SECT __attribute__((section(".stxitext")))' >> libInit_cc
+	@echo '#  endif' >> libInit_cc
+	@echo '# endif /* not GNUC */' >> libInit_cc
+	@echo '#endif /* not WIN32 */' >> libInit_cc
+	@echo '#ifdef INIT_TEXT_SECT' >> libInit_cc
+	@echo 'extern void _'$(LIBNAME)'_Init() INIT_TEXT_SECT;' >> libInit_cc
+	@echo '#endif' >> libInit_cc
+	@echo 'void _'$(LIBNAME)'_Init(pass, __pRT__, snd)' >> libInit_cc
+	@echo 'OBJ snd; struct __vmData__ *__pRT__; {' >> libInit_cc
+	@echo '__BEGIN_PACKAGE2__("'$(LIBNAME)'", _'$(LIBNAME)'_Init, "'$(PACKAGE)'");' >> libInit_cc
+	@for i in $(OBJS); do \
+	  BASE=`basename $$i .$(O)`; \
+	  if [ "$$BASE" = "XWorkstation" ]; then \
+	      echo "#ifdef WANT_XWorkstation" >> libInit_cc; \
+	  fi; \
+	  if [ "$$BASE" = "GLXWorkstation" ]; then \
+	      echo "#ifdef WANT_GLXWorkstation" >> libInit_cc; \
+	  fi; \
+	  if [ "$$BASE" = "WinWorkstation" ]; then \
+	      echo "#ifdef WANT_WinWorkstation" >> libInit_cc; \
+	  fi; \
+	  CLASS=`$(STC) -extractCInit $$BASE.st`; \
+	  echo "_"$$CLASS'_Init(pass,__pRT__,snd);' >> libInit_cc; \
+	  if [ "$$BASE" = "XWorkstation"  ]; then \
+	      echo "#endif" >> libInit_cc; \
+	  fi; \
+	  if [ "$$BASE" = "GLXWorkstation"  ]; then \
+	      echo "#endif" >> libInit_cc; \
+	  fi; \
+	  if [ "$$BASE" = "WinWorkstation"  ]; then \
+	      echo "#endif" >> libInit_cc; \
+	  fi; \
+	done
+	@if [ "$(WIN32_OBJS)" != "" ]; then \
+	    $(MAKE) libInit_xxx xxx_OBJS="$(WIN32_OBJS)" xxx_define=WIN32; \
+	fi
+	@if [ "$(VMS_OBJS)" != "" ]; then \
+	    $(MAKE) libInit_xxx xxx_OBJS="$(VMS_OBJS)" xxx_define=VMS; \
+	fi
+	@if [ "$(UNIX_OBJS)" != "" ]; then \
+	    $(MAKE) libInit_xxx xxx_OBJS="$(UNIX_OBJS)" xxx_define=UNIX; \
+	fi
+	@if [ "$(MACOS_OBJS)" != "" ]; then \
+	    $(MAKE) libInit_xxx xxx_OBJS="$(MACOS_OBJS)" xxx_define=MACOS; \
+	fi
+	@if [ "$(OS2_OBJS)" != "" ]; then \
+	    $(MAKE) libInit_xxx xxx_OBJS="$(OS2_OBJS)" xxx_define=OS2; \
+	fi
+	@if [ "$(BEOS_OBJS)" != "" ]; then \
+	    $(MAKE) libInit_xxx xxx_OBJS="$(BEOS_OBJS)" xxx_define=BEOS; \
+	fi
+	@echo '__END_PACKAGE__();' >> libInit_cc
+	@echo '}' >> libInit_cc
+	@-if [ -f libInit.cc ]; then \
+	    mv libInit.cc libInit.cc.bak; \
+	fi
+	@mv libInit_cc libInit.cc
+
+libInit_xxx:
+	@echo "#ifdef "$(xxx_define) >> libInit_cc
+	@for i in $(xxx_OBJS); do \
+	  BASE=`basename $$i .$(O)`; \
+	  if [ -f $$BASE.st ]; then \
+	    CLASS=`$(STC) -extractCInit $$BASE.st`; \
+	    echo "_"$$CLASS'_Init(pass,__pRT__,snd);' >> libInit_cc; \
+	  else \
+	    echo "skipped missing classFile: "$$BASE.st; \
+	  fi \
+	done
+	@echo "#endif" >> libInit_cc
+
+#
+# check:
+#    quick ST-syntax check over all st-files
+#
+check::
+	@-if [ "*.st" != '\*.st' ]; then  \
+	  for i in *.st; do               \
+	    echo checking $$i ...;        \
+	    $(STC) -check $(STCFLAGS) $(STC_MSGFORMAT) $$i;\
+	  done;                           \
+	fi
+	@-if [ "$(SUBDIRS)"x != x ]; then \
+	  for i in $(SUBDIRS)" "; do      \
+	    if [ -d $$i ]; then           \
+	      echo "checking in $$i";     \
+	      (cd $$i && $(MAKE) check );  \
+	    fi;                           \
+	  done;                           \
+	fi
+
+#
+# debug - make with -g instead of -O
+#
+debug:
+	$(MAKE) OPT="-g $(OPT)" LIBRUN_OPT="-g $(LIBRUN_OPT)" STCOPT="$(STCOPT) +lineInfo +stLineInfo"
+
+cfiles:
+	  for i in ""*.st""; do                          \
+	    $(MAKE) $$(echo $$i | sed "s/\.st/\.c/1"); \
+	  done;                                          \
+
+#
+# notes:
+#    output notes on st-code (for compiler writer only)
+#
+notes::
+	@-if [ "*.st" != '\*.st' ]; then                 \
+	  for i in ""*.st""; do                          \
+	    echo notes on $$i ...;                       \
+	    $(STC) -check +notice +hint $(STCFLAGS) $(STC_MSGFORMAT) $$i; \
+	  done;                                          \
+	fi
+	@-if [ "$(SUBDIRS)"x != x ]; then  \
+	  for i in $(SUBDIRS)" "; do       \
+	    if [ -d $$i ]; then            \
+	      echo "notes in $$i";         \
+	      (cd $$i && $(MAKE) notes );   \
+	    fi;                            \
+	  done;                            \
+	fi
+
+#
+# warnings:
+#    output warning on st-code (for compiler writer only)
+#
+warnings::
+	@-if [ "*.st" != '\*.st' ]; then                 \
+	  for i in ""*.st""; do                          \
+	    echo warnings on $$i ...;                       \
+	    $(STC) -check +hint $(STCFLAGS) $(STC_MSGFORMAT) $$i; \
+	  done;                                          \
+	fi
+	@-if [ "$(SUBDIRS)"x != x ]; then  \
+	  for i in $(SUBDIRS)" "; do       \
+	    if [ -d $$i ]; then            \
+	      echo "warnings in $$i";         \
+	      (cd $$i && $(MAKE) warnings );   \
+	    fi;                            \
+	  done;                            \
+	fi
+
+#
+# hints:
+#    output hints on st-code (mostly for compiler writer)
+#
+hints::
+	@-for i in *.st; do                           \
+	    echo hints on $$i ...;                    \
+	    $(STC) -check +hint $(STCFLAGS) $(STC_MSGFORMAT) $$i;      \
+	done
+
+#
+# fullcheck:
+#    outputs notice + hints
+#
+fullcheck::
+	@-if [ "*.st" != '\*.st' ]; then                 \
+	  for i in *.st; do                              \
+	    echo checking $$i ...;                       \
+	    $(STC) -check $(STCFLAGS) $(STC_MSGFORMAT) +notice +hint $$i; \
+	  done;                                          \
+	fi
+	@-if [ "$(SUBDIRS)"x != x ]; then    \
+	  for i in $(SUBDIRS)" "; do         \
+	    if [ -d $$i ]; then              \
+	      echo "check in $$i";           \
+	      (cd $$i && $(MAKE) fullcheck ); \
+	    fi;                              \
+	  done;                              \
+	fi
+
+#
+# defaultMakefile
+# create an initial Make.proto.
+# use as: make -f <some-existing-makefile> Make.proto
+#
+
+Make.spec:
+	@-if [ -r Make.spec ]; then         \
+	    echo "Make.spec exists";        \
+	    exit 1;                          \
+	fi
+	@echo -n '# $$Header' > Make.spec
+	@echo '$$' >> Make.spec
+	@echo "#" >> Make.spec
+	@echo "# --- Automatically created Make.spec" >> Make.spec
+	@echo >> Make.spec
+	@echo "TOP="$(TOP) >> Make.spec
+	@echo "SUBDIRS=" >> Make.spec
+	@echo >> Make.spec
+	@echo >> Make.spec
+	@echo "# ***************************** modify the next line ***" >> Make.spec
+	@echo "LIBNAME=libprivate" >> Make.spec
+	@echo >> Make.spec
+	@echo >> Make.spec
+	@echo "EXTRA_TARGTES=" >> Make.spec
+	@echo >> Make.spec
+	@echo -n "OBJS= " >> Make.spec
+	@-if [ "*.st" != '\*.st' ]; then                        \
+	  for i in ""*.st""; do                                 \
+	    echo " \\" >> Make.spec;                           \
+	    echo -n "   " $$(OUTDIR)`basename $$i .st`.'$$(O)' >> Make.spec; \
+	  done;                                                 \
+	fi
+	@echo >> Make.spec
+	@echo >> Make.spec
+
+
+Make.proto:
+	@-if [ -r Make.proto ]; then         \
+	    echo "Make.proto exists";        \
+	    exit 1;                          \
+	fi
+	@echo -n '# $$Header' > Make.proto
+	@echo '$$' >> Make.proto
+	@echo "#" >> Make.proto
+	@echo "# --- Automatically created Make.proto" >> Make.proto
+	@echo >> Make.proto
+	@echo "# ***************************** modify the next line ***" >> Make.proto
+	@echo "STCLOCALOPT='-Pprivate-classes-(module:directory)'" >> Make.proto
+	@echo "STCOPT=$(LIBBASIC2_STCOPT)" >> Make.proto
+	@echo >> Make.proto
+	@echo >> Make.proto
+	@echo "all:: classLibRule $(EXTRA_TARGETS)" >> Make.proto
+	@echo >> Make.proto
+	@echo "cleanjunk::" >> Make.proto
+	@echo >> Make.proto
+	@echo "clean::" >> Make.proto
+	@echo " -rm -f *.H" >> Make.proto
+	@echo >> Make.proto
+	@echo "clobber::" >> Make.proto
+	@echo " -rm -f *.o" >> Make.proto
+	@echo >> Make.proto
+	@echo "# BEGINMAKEDEPEND --- do not remove this line; make depend needs it" >> Make.proto
+	@echo "# ENDMAKEDEPEND --- do not remove this line" >> Make.proto
+
+
+#
+# collectAbbrev
+# recursively work thru subdirectories and collect abbreviations
+# into $(INCLUDE)/abbrev.stc for classname-to-filename translations
+#
+#
+collectAbbrev::
+	@-$(MAKE) abbrev.stc
+	@-if [ "$(SUPPRESS_LOCAL_ABBREVS)" = "" ]; then \
+	    $(MAKE) updateAbbrev; \
+	fi
+	@-if [ "$(ALLSUBDIRS)"x != x ]; then \
+	    $(MAKE) collectSubdirAbbrev;     \
+	fi
+
+collectSubdirAbbrev::
+	@-for i in $(ALLSUBDIRS); do         \
+	    if [ -d $$i ]; then              \
+	      if [ -f $$i/Make.proto ]; then \
+		if [ -f $$i/$(MAKEFILE) ]; then            \
+		  echo "collect abbreviations in $$i";  \
+		  if [ "$(NOSUBAUTOLOAD)" = "1" ]; then \
+		      (cd $$i && $(MAKE) collectAbbrev NOSUBAUTOLOAD=1 NOAUTOLOAD=1 ); \
+		  else                                  \
+		      (cd $$i && $(MAKE) collectAbbrev);     \
+		  fi;                        \
+		fi                           \
+	      fi                             \
+	    fi;                              \
+	done
+
+UNCRITICAL:
+	$(MAKE) $(SPACEOPT_O_RULE) STFILE=$(NAME) STCOPT="$(STCOPT) $(UNCRITICALOPT)" CLASSLIB_CC="$(CLASSLIB_CC)" CLASSLIB_OPT="$(CLASSLIB_OPT)" CC="$(CLASSLIB_CC)" OPT="$(OPT)"
+
+$(UNCRITICALOBJS):
+	@$(MAKE) UNCRITICAL CC="$(CLASSLIB_CC)" OPT="$(OPT)" CLASSLIB_CC="$(CLASSLIB_CC)" CLASSLIB_OPT="$(CLASSLIB_OPT)" NAME=$*
+
+AUTOLOADED:
+	@-if [ -f i_$(NAME).o ]; then \
+	    echo "assuming stubObject i_$(NAME).o is up-to-date"; \
+	else \
+	    $(MAKE) $(SPACEOPT_O_RULE) STFILE=$(NAME) STCOPT="$(STCOPT)" FORCEAUTOLOAD="+autoload -sepInitCode" CLASSLIB_CC="$(CLASSLIB_CC)" CLASSLIB_OPT="$(CLASSLIB_OPT)" OPT="$(OPT)" CC="$(CLASSLIB_CC)"; \
+	fi
+
+$(AUTOLOADEDOBJS):
+	@$(MAKE) AUTOLOADED CLASSLIB_CC="$(CLASSLIB_CC)" CLASSLIB_OPT="$(CLASSLIB_OPT)" CC="$(CC)" OPT="$(OPT)" NAME=$*
+
+#
+# objs:
+#    generate all .o-files
+#
+
+subDirObjsIfBeforeObjs:
+	@-if [ "$(SUBDIRS_AFTER_OBJS)" = "" ]; then \
+	    $(MAKE) subDirObjsIfPresent; \
+	fi
+
+subDirObjsIfAfterObjs:
+	@-if [ "$(SUBDIRS_AFTER_OBJS)" != "" ]; then \
+	    $(MAKE) subDirObjsIfPresent; \
+	fi
+
+subDirObjsIfPresent:
+	@-if [ "$(OBJ_SUBDIRS)" != "" ]; then \
+	    $(MAKE) subDirObjs;           \
+	fi
+
+subDirObjs::
+	@-for i in $(OBJ_SUBDIRS); do         \
+	    if [ -d $$i ]; then           \
+	      echo "making obj in $$i ...";\
+	      (cd $$i && $(MAKE) CC="$(CC)" OPT="$(OPT)" obj );   \
+	    fi;                           \
+	done
+
+objs:: pre_objs pre_local_objs $(OBJS) post_local_objs
+
+pre_objs::
+
+pre_local_objs::
+	@$(MAKE) subDirObjsIfBeforeObjs
+
+post_local_objs::
+	@$(MAKE) subDirObjsIfAfterObjs
+
+clsFiles:: pre_cls subDirClassFiles
+	@test  "$(CLS)" = "" || $(MAKE) cls_files
+
+cls_files:: $(CLS)
+
+#
+# The makefile in SUBDIR may not have been built yet...
+#
+subDirClassFiles::
+	@-if [ "$(SUBDIRS)" != "" ]; then \
+	    $(MAKE) subDirClassFilesPresent;    \
+	fi
+
+subDirClassFilesPresent::
+	@for i in $(SUBDIRS); do \
+	    if [ -d "$$i" ]; then \
+		echo "making cls-files in $$i ..."; \
+		(cd $$i && $(MAKE) makefile && $(MAKE) clsFiles) || exit $? ;  \
+	    fi;  \
+	done
+
+pre_cls::
+
+# systems which support hiding symbols from libs,
+# may add the following lines in the config-file:
+#
+# PRE_LD_ACTION=createHiddenSymFile
+# POST_LD_ACTION=removeHiddenSymFile
+
+
+emptyRule:
+	@true
+
+createHiddenSymFile: hiddenSyms.stc
+	@-echo > /dev/null
+
+removeHiddenSymFile:
+	@-rm -f hiddenSyms.stc
+
+
+#
+# make without optimizer ...
+#
+nonopt:
+	$(MAKE) OPT=
+
+
+#
+# those two are no longer needed
+#
+CLASSLIST_OR_EMPTY=
+
+#
+# rule to build a class Library
+#
+lib: classLibRule
+
+classLibRule: clsFiles $(LOCAL_EXTRA_TARGETS) $(OBJTARGET) registerClassLib
+
+#
+# create a symbolic link to the shared library in the projects/smalltalk/packages
+# folder. This folder can later be scanned quickly and presented in the Launcher's
+# load package menu item.
+#
+REGISTERED_PACKAGES_DIR=$(TOP)/projects/smalltalk/packages
+
+registerClassLib: $(REGISTERED_PACKAGES_DIR)
+	@echo "registering $(MODULE):$(MODULE_DIR)/$(LIBNAME) in $(REGISTERED_PACKAGES_DIR)"
+	rm -f $(REGISTERED_PACKAGES_DIR)/$(LIBNAME)$(SO_NAME)
+	echo "lib ../../../../$(MODULE)/$(MODULE_DIR)/$(LIBNAME)$(SO_NAME)" > $(REGISTERED_PACKAGES_DIR)/$(LIBNAME)$(SO_NAME)
+
+$(REGISTERED_PACKAGES_DIR):
+	@mkdir $(REGISTERED_PACKAGES_DIR)
+
+registerApplication:
+	@-if [ "$(APPNAME)"x != ""x ]; then \
+	    echo "registering $(MODULE):$(MODULE_DIR)/$(APPNAME) in $(REGISTERED_PACKAGES_DIR)";  \
+	    rm -f $(REGISTERED_PACKAGES_DIR)/$(APPNAME); \
+	    echo "app ../../../../$(MODULE)/$(MODULE_PATH)/$(APPNAME)" > $(REGISTERED_PACKAGES_DIR)/$(APPNAME); \
+	fi
+
+#
+# rule to build a program (application)
+#
+progRule:
+	@-if [ "$(PROGS)"x != ""x ]; then \
+	  for i in $(PROGS)" "; do        \
+	    echo "making $$i";            \
+	    $(MAKE) PROGTARGET$(TARGET_RULE_EXTENSION) PROG=$$i; \
+	  done;                           \
+	fi
+
+#
+# one of the two below is performed by the $(OBJTARGET) target;
+# create a library for either static or dynamic linking
+# (this is controlled by the TARGET_EXTENSION, set in an architecture specific config file)
+#
+
+obj::    obj$(TARGET_RULE_EXTENSION)
+
+obj_shared: newobj
+	@echo "making shared classObject ..."
+	@-if [ "$(LIBNAME)" != "" ]; then \
+	    if [ -f $(LIBNAME)$(OBJNAME) ]; then \
+		echo "making shared object $(LIBNAME)$(SO_NAME)"; \
+		if [ "$(LOCAL_SHARED_LIBS)" != "" ]; then \
+		    echo "   local libs: $(LOCAL_SHARED_LIBS)"; \
+		fi; \
+		$(MAKE) $(LIBNAME)$(SO_NAME) LOCAL_SHARED_LIBS="$(LOCAL_SHARED_LIBS)"; \
+	    else \
+		echo " ** $(LIBNAME)$(SO_NAME) not made - no $(LIBNAME)$(OBJNAME)"; \
+	    fi \
+	fi
+	@-if [ "$(STUBLIBNAME)" != "" ]; then \
+	  $(MAKE) obj_shared_stub; \
+	fi
+
+obj_shared_stub:
+	@-if [ -f $(STUBLIBNAME)$(OBJNAME) ]; then \
+	  echo "making shared stub object $(STUBLIBNAME)$(SO_NAME)"; \
+	  $(MAKE) $(STUBLIBNAME)$(SO_NAME); \
+	else \
+	  echo " ** $(STUBLIBNAME)$(SO_NAME) not made - no $(STUBLIBNAME)$(OBJNAME)"; \
+	fi
+
+obj_static: newobj
+
+static_obj:
+	$(MAKE) newobj LINKOBJRULE=newobj_staticLink
+
+#
+# newobj:
+#    generate all .o-files, pre-link them into one big lib.o file
+#    create a lib-init function and include it in library
+#
+
+newobj_prelink::
+	@true "nothing done here"
+
+newobj_postlink::
+	@true "nothing done here"
+
+newobj: $(LIBNAME)Init.c objs $(LINKOBJS)
+	@if [ "$(NEWOBJ_SUBDIRS)"x != x ]; then \
+	  for i in "$(NEWOBJ_SUBDIRS)"; do \
+	    if [ -d $$i ]; then \
+	      echo "making newobj in $$i"; \
+	      (cd $$i && $(MAKE) newobj); \
+	    fi; \
+	  done; \
+	fi
+	@if [ "$(LIBNAME)" != "" ]; then \
+	  if [ "$(LINKOBJS)" != "" ]; then \
+	      echo "making objs ..."; \
+	      $(MAKE) objs && \
+	      echo "making init code ..." && \
+	      $(MAKE) $(LIBNAME)Init.o LIBNAME=$(LIBNAME) CC=$(CC) &&\
+	      $(MAKE) $(PRE_LD_ACTION) && \
+	      $(MAKE) newobj_prelink LIBNAME=$(LIBNAME) && \
+	      $(MAKE) $(LINKOBJRULE) LINKOBJS="$(LINKOBJS)" LIBNAME=$(LIBNAME) && \
+	      $(MAKE) newobj_postlink LIBNAME=$(LIBNAME) && \
+	      chmod -x,+w $(LIBNAME)$(OBJNAME) && \
+	      $(MAKE) $(POST_LD_ACTION); \
+	  else \
+	    echo " ** $(LIBNAME)$(OBJNAME) not made - no object files (LINKOBJS=) defined";   \
+	  fi \
+	else \
+	  echo " ** no library name (LIBNAME=) defined"; \
+	fi
+	@if [ "$(STUBLIBNAME)" != "" ]; then \
+	  $(MAKE) stubobj STUBLIBNAME=$(STUBLIBNAME) LIBNAME=$(LIBNAME); \
+	fi
+
+stubobj:
+	@echo "making stubobj ..."
+	@echo "making stub init code ..."
+	@$(MAKE) $(STUBLIBNAME)Stub.o STUBLIBNAME=$(STUBLIBNAME) LIBNAME=$(LIBNAME)
+	@rm -f $(STUBLIBNAME)$(OBJNAME)
+	@$(MAKE) stub_link LIBNAME=$(LIBNAME)
+	@chmod -x,+w $(STUBLIBNAME)$(OBJNAME)
+	@rm -f $(STUBLIBNAME)Stub.o $(STUBLIBNAME)Stub.c
+
+newobj_link::
+	@echo "linking class object ..."
+	$(CLASSLIB_LD) $(LD_REL_FLAG) $(LD_OBJ_FLAGS) $(LIBNAME)Init.o $(LINKOBJS) $(LD_OBJ_LIBS) $(LD_REL_OBJ_LIBS) -o $(LIBNAME)$(OBJNAME)
+
+newobj_staticLink::
+	@echo "linking static classLib object ..."
+	@$(CLASSLIB_LD) $(LD_REL_FLAG) $(LD_OBJ_FLAGS) \
+	    $(LIBNAME)Init.o $(LINKOBJS) $(LD_OBJ_LIBS) $(LD_REL_OBJ_LIBS) -o $(LIBNAME).$(O)
+
+newobj_linkSep::
+	@-echo "linking sepInit class object ..."
+	@-echo $(CLASSLIB_LD) $(LD_REL_FLAG) $(LD_OBJ_FLAGS) \
+	    $(LIBNAME)Init.o `$(TOP)/rules/i_list $(LINKOBJS)` $(LINKOBJS) $(LD_OBJ_LIBS) $(LD_REL_OBJ_LIBS) -o $(LIBNAME)$(OBJNAME)
+	@$(CLASSLIB_LD) $(LD_REL_FLAG) $(LD_OBJ_FLAGS) \
+	    $(LIBNAME)Init.o `$(TOP)/rules/i_list $(LINKOBJS)` $(LINKOBJS) $(LD_OBJ_LIBS) $(LD_REL_OBJ_LIBS) -o $(LIBNAME)$(OBJNAME)
+
+newobj_link_sepInitCode::
+	@-if [ "$(SEPINITCODE)" != "" ]; then   \
+	    $(MAKE) newobj_linkSep LINKOBJS="$(LINKOBJS)" LIBNAME=$(LIBNAME);                     \
+	else                                    \
+	    echo "** oops - sepInit rule but no +sepInit specified (non fatal)"; \
+	    $(MAKE) newobj_link LINKOBJS="$(LINKOBJS)" LIBNAME=$(LIBNAME);                        \
+	fi
+
+stub_link::
+	@-echo "linking stub class object ..."
+	@-echo $(CLASSLIB_LD) $(LD_REL_FLAG) $(LD_OBJ_FLAGS) $(STUBLIBNAME)Stub.o $(LINKOBJS) -o $(STUBLIBNAME)$(OBJNAME)
+	@$(CLASSLIB_LD) $(LD_REL_FLAG) $(LD_OBJ_FLAGS) $(STUBLIBNAME)Stub.o $(LINKOBJS) -o $(STUBLIBNAME)$(OBJNAME)
+
+iobjs:
+	echo "making sepInit objs ..."
+	@-if [ "$(OBJS)"x != x ]; then \
+	  for i in $(OBJS); do         \
+	      $(MAKE) i_$$i ;          \
+	  done;                        \
+	fi
+
+#
+# to force creation of a shared object, even if not defined in config
+#
+sharedobj: newobj
+	@echo "making shared object $(LIBNAME)$(SO_NAME)"
+	$(MAKE) $(LIBNAME)$(SO_NAME)
+
+#
+# objstrip:
+#     like make obj, but strip debug syms
+#
+objstrip::
+	@if [ "$(OBJ_SUBDIRS)"x != x ]; then               \
+	  for i in $(OBJ_SUBDIRS)" "; do                    \
+	    if [ -d $$i ]; then                         \
+	      echo "making obj in $$i";                 \
+	      (cd $$i && $(MAKE) obj );                  \
+	    fi;                                         \
+	  done;                                         \
+	fi
+	@if [ "$(LIBNAME)" != "" ]; then                \
+	  $(MAKE) objs &&                               \
+	  echo $(CLASSLIB_LD) $(LD_REL_FLAG) $(LD_STRIP_FLAG) $(LD_OBJ_FLAGS) $(LINKOBJS) -o $(LIBNAME)$(OBJNAME) && \
+	  rm -f $(LIBNAME)$(OBJNAME) &&                 \
+	  $(CLASSLIB_LD) $(LD_REL_FLAG) $(LD_STRIP_FLAG) $(LD_OBJ_FLAGS) $(LINKOBJS) -o $(LIBNAME)$(OBJNAME) && \
+	  chmod -x,+w $(LIBNAME)$(OBJNAME);                \
+	fi
+
+# cleanjunk:
+#    remove all temporary stuff
+#
+cleanjunk::
+	@echo cleaning junk
+	@echo no -rm -f .dependencies
+	@-rm -f nohup.out out .errors *.bak core .dir.*.old *.old *~ Make.log
+	@-rm -f bitmaps/*.bak bitmaps/*~
+	@-rm -f resources/*.bak resources/*~ resources/*.old
+	@echo no $(MAKE) cleanLIBjunk
+	@-if [ "$(ALLSUBDIRS)" != "" ]; then \
+	  $(MAKE) cleanjunkALLSUBDIRS; \
+	fi
+	@-if [ "$(CLEANSUBDIRS)" != "" ]; then \
+	  $(MAKE) cleanjunkCLEANSUBDIRS; \
+	fi
+
+cleanLIBjunk:
+	@-if [ "$(LIBNAME)"x != x ]; then \
+	    rm -f $(LIBNAME)Init.[co] $(STUBLIBNAME)Stub.[co]; \
+	    if [ -f $(LIBNAME).so ]; then \
+		    rm -f $(LIBNAME).o; \
+	    fi; \
+	fi
+
+cleanjunkALLSUBDIRS::
+	@-for i in $(ALLSUBDIRS); do \
+	    if [ -d $$i ]; then \
+	      if [ -f $$i/Make.proto ]; then \
+		if [ -f $$i/$(MAKEFILE) ]; then \
+		  echo "cleaning junk in $$i ..."; \
+		  (cd $$i && $(MAKE) cleanjunk ); \
+		fi \
+	      fi \
+	    fi; \
+	done
+
+cleanjunkCLEANSUBDIRS::
+	@-for i in $(CLEANSUBDIRS); do \
+	    if [ -d $$i ]; then \
+	      if [ -f $$i/Make.proto ]; then \
+		if [ -f $$i/$(MAKEFILE) ]; then \
+		  echo "cleaning junk in $$i ...";\
+		  (cd $$i && $(MAKE) cleanjunk ); \
+		fi \
+	      fi \
+	    fi; \
+	done
+
+#
+# clean:
+#    remove all that is not needed to run/link
+#
+
+clean::
+	@echo cleaning
+	@-rm -f err out *.bak core .dir.*.old *.old *~ *.H ttt* i_[A-Z]*.[cso]
+	@-rm -f .dependencies
+	@-if [ "$(LIBNAME)"x != x ]; then \
+	    rm -f $(LIBNAME)Init.[co] $(STUBLIBNAME)Stub.[co]; \
+	    if [ -f $(LIBNAME).so ]; then \
+		    rm -f $(LIBNAME).o; \
+	    fi; \
+	fi
+	@-rm -f bitmaps/*.bak bitmaps/*~
+	@-rm -f resources/*.bak resources/*~ resources/*.old
+	@-if [ "$(ALLSUBDIRS)"x != x ]; then \
+	  $(MAKE) cleanALLSUBDIRS; \
+	fi
+	@-if [ "$(CLEANSUBDIRS)"x != x ]; then \
+	  $(MAKE) cleanCLEANSUBDIRS; \
+	fi
+
+cleanALLSUBDIRS::
+	@-for i in $(ALLSUBDIRS); do \
+	    if [ -d $$i ]; then \
+	      if [ -f $$i/Make.proto ]; then \
+		  echo "cleaning $$i ..."; \
+		  (cd $$i && $(MAKE) clean); \
+	      fi; \
+	    fi; \
+	done
+
+cleanCLEANSUBDIRS::
+	@-for i in $(CLEANSUBDIRS); do \
+	    if [ -d $$i ]; then \
+	      if [ -f $$i/Make.proto ]; then \
+		  echo "cleaning $$i ..."; \
+		  (cd $$i && $(MAKE) clean); \
+	      fi; \
+	    fi; \
+	done
+
+#
+# clobber:
+#    remove all that can be regenerated
+#
+CLOBBERED_OBJS=*.o
+
+clobber::
+	@-rm -f err out *.bak core .dir.*.old *.old *~ $(CLOBBERED_OBJS) \
+	       *.H *.so *.obj obj \
+	       liblist.stc \
+	       .listOfSTfiles* .dependencies
+	@rm -f *.a $(PROGS) $(TESTPROGS)
+	@-if [ "$(LIBNAME)"x != x ]; then \
+	    rm -f $(LIBNAME)Init.[co] $(STUBLIBNAME)Stub.[co] $(LIBNAME)zip; \
+	fi
+	@-rm -f bitmaps/*.bak bitmaps/*~
+	@-rm -f resources/*.bak resources/*~ resources/*.old
+	@-if [ "$(ALLSUBDIRS)"x != x ]; then \
+	  $(MAKE) clobberALLSUBDIRS;         \
+	fi
+	@-if [ "$(CLEANSUBDIRS)"x != x ]; then \
+	  $(MAKE) clobberCLEANSUBDIRS;         \
+	fi
+
+clobberALLSUBDIRS::
+	@-for i in $(ALLSUBDIRS); do      \
+	    if [ -d $$i ]; then           \
+	      echo "clobbering $$i ...";  \
+	      (cd $$i && $(MAKE) clobber); \
+	    fi;                           \
+	done
+
+clobberCLEANSUBDIRS::
+	@-for i in $(CLEANSUBDIRS); do    \
+	    if [ -d $$i ]; then           \
+	      echo "clobbering $$i ...";  \
+	      (cd $$i && $(MAKE) clobber); \
+	    fi;                           \
+	done
+
+#
+# distClean:
+#    cleanup for distribution
+#
+distClean:: clobber
+	@-if [ "$(ALLSUBDIRS)"x != x ]; then \
+	  $(MAKE) distCleanALLSUBDIRS;       \
+	fi
+	@-if [ "$(CLEANSUBDIRS)"x != x ]; then \
+	  $(MAKE) distCleanCLEANSUBDIRS;       \
+	fi
+
+distCleanALLSUBDIRS::
+	@-for i in $(ALLSUBDIRS); do        \
+	    if [ -d $$i ]; then             \
+	      if [ -f $$i/$(MAKEFILE) ]; then  \
+		echo "distClean  $$i ...";  \
+		(cd $$i && $(MAKE) distClean); \
+	      fi;                           \
+	    fi;                             \
+	done
+
+distCleanCLEANSUBDIRS::
+	@-for i in $(CLEANSUBDIRS); do      \
+	    if [ -d $$i ]; then             \
+	      if [ -f $$i/$(MAKEFILE) ]; then  \
+		echo "distClean $$i ...";   \
+		(cd $$i && $(MAKE) distClean); \
+	      fi;                           \
+	    fi;                             \
+	done
+#
+# copy all relevant files to $(DELIVERDIR)/full
+#
+preDeliverFull::
+
+postDeliverFull::
+
+deliverFull::
+	@if [ "$(RELDIR)" = "" ]; then  \
+	    echo "no RELDIR defined";   \
+	    exit 1;                     \
+	fi
+	@if [ "$(DELIVERDIR)" = "" ]; then      \
+	    echo "no DELIVERDIR defined";       \
+	    exit 1;                             \
+	fi
+	-$(MAKE) preDeliverFull RELDIR=$(RELDIR) DELIVERDIR=$(DELIVERDIR)
+	-$(MAKE) deliverFullLocal RELDIR=$(RELDIR) DELIVERDIR=$(DELIVERDIR)
+	@-if [ "$(ALLSUBDIRS)"x != x ]; then            \
+	  $(MAKE) deliverFullALLSUBDIRS RELDIR=$(RELDIR) DELIVERDIR=$(DELIVERDIR);              \
+	fi
+	@-if [ "$(DELIVERSUBDIRS)"x != x ]; then        \
+	  $(MAKE) deliverFullDELIVERSUBDIRS RELDIR=$(RELDIR) DELIVERDIR=$(DELIVERDIR);          \
+	fi
+	$(MAKE) postDeliverFull RELDIR=$(RELDIR) DELIVERDIR=$(DELIVERDIR)
+
+deliverFullLocal::
+	@if [ "$(RELDIR)" = "" ]; then  \
+	    echo "no RELDIR defined";   \
+	    exit 1;                     \
+	fi
+	@if [ "$(DELIVERDIR)" = "" ]; then \
+	    echo "no DELIVERDIR defined";  \
+	    exit 1;                        \
+	fi
+	@test -d $(DELIVERDIR) || mkdir $(DELIVERDIR)
+	@test -d $(DELIVERDIR)/$(RELDIR) || mkdir $(DELIVERDIR)/$(RELDIR)
+	@-if [ "$(DELIVERSOURCES)" != "" ]; then \
+	    (tar cf - $(DELIVERSOURCES) | (cd $(DELIVERDIR)/$(RELDIR) && tar xvf -)); \
+	fi
+	@-if [ "$(DELIVERMISC)" != "" ]; then \
+	    (tar cf - $(DELIVERMISC) | (cd $(DELIVERDIR)/$(RELDIR) && tar xvf -)); \
+	fi
+	@-if [ "$(DELIVERBINARIES)" != "" ]; then \
+	    (tar cf - $(DELIVERBINARIES) | (cd $(DELIVERDIR)/$(RELDIR) && tar xvf -)); \
+	fi
+
+deliverFullALLSUBDIRS::
+	@-for i in $(ALLSUBDIRS); do                    \
+	    if [ -d $$i ]; then                         \
+		echo "deliver files in $$i ...";        \
+		(cd $$i && $(MAKE) deliverFull RELDIR=$(RELDIR)/$$i DELIVERDIR=$(DELIVERDIR));           \
+	    fi;                                         \
+	done
+
+deliverFullDELIVERSUBDIRS::
+	@-for i in $(DELIVERSUBDIRS); do                \
+	    if [ -d $$i ]; then                         \
+		echo "deliver files in $$i ...";        \
+		(cd $$i && $(MAKE) deliverFull RELDIR=$(RELDIR)/$$i DELIVERDIR=$(DELIVERDIR));           \
+	    fi;                                         \
+	done
+
+#
+# remake:
+#    a clean followed my make
+#
+remake:
+	$(MAKE) clean
+	$(MAKE)
+
+#
+# update: first get any changed versions from cvs,
+# then make all here.
+#
+update:
+	@-if [ -d CVS ]; then \
+	    cvs update; \
+	    $(MAKE) mf; \
+	    $(MAKE) Makefiles; \
+	    $(MAKE) $(UPDATETARGET); \
+	else \
+	    echo "no CVS directory"; \
+	fi
+
+pre_all::
+
+#
+# all:
+#    make what is appropriate here (library or application)
+#
+all::   pre_all
+	@-if [ "$(SUBDIRS)"x != ""x ]; then \
+	  $(MAKE) allSubDirs;               \
+	fi
+
+# full:
+#    in addition to all, this also builds support stuff needed
+#    by some subsystems using ant and possibly other tools.
+#    for now, this is libjava only
+full::   all
+
+allSubDirs:
+	@-for i in $(SUBDIRS); do     \
+	  if [ -d $$i ]; then         \
+	    $(MAKE) subDirMake SUBDIR=$$i; \
+	  else                        \
+	    echo "*** oops where is directory $$i ?? in "`pwd`" (non fatal)"; \
+	  fi;                         \
+	done
+
+subDirMake:
+	@-if [ -f $(SUBDIR)/$(MAKEFILE) ] ; then \
+	    true; \
+	else \
+	    $(MAKE) subMakefile SUBDIR=$(SUBDIR); \
+	fi
+	@-echo "********************************"
+	@-echo "making all in $(SUBDIR)"
+	@-echo "********************************"
+	@-cd $(SUBDIR) && $(MAKE) all
+
+allLibs::
+	@-if [ "$(LIBNAME)"x != ""x ]; then \
+	  $(MAKE) lib;               \
+	fi
+	@-if [ "$(SUBDIRS)"x != ""x ]; then \
+	  $(MAKE) allSubDirLibs;               \
+	fi
+
+allSubDirLibs:
+	@-for i in $(SUBDIRS); do     \
+	  if [ -d $$i ]; then         \
+	    $(MAKE) subDirLibsMake SUBDIR=$$i; \
+	  else                        \
+	    echo "*** oops where is directory $$i ?? in "`pwd`" (non fatal)"; \
+	  fi;                         \
+	done
+
+subDirLibsMake:
+	@-if [ -f $(SUBDIR)/$(MAKEFILE) ] ; then \
+	    true; \
+	else \
+	    $(MAKE) subMakefile SUBDIR=$(SUBDIR); \
+	fi
+	@-echo "********************************"
+	@-echo "making libs in $(SUBDIR)"
+	@-echo "********************************"
+	@-cd $(SUBDIR) && $(MAKE) allLibs
+
+APPLICATION:
+	    @-rm -f main.o modulList.stc modulList.c modulList.o
+	    $(MAKE) main.o \
+		STARTUP_CLASS="$(STARTUP_CLASS)" \
+		STARTUP_SELECTOR="$(STARTUP_SELECTOR)" \
+		MAIN_DEFINES="$(MAIN_DEFINES)"
+	    @-echo "OPTIONAL_SHARED_LIBS=" $(OPTIONAL_SHARED_LIBS)
+	    $(MAKE) linkTarget \
+		LIBLIST="$(LIBLIST)" \
+		LIBOBJS="$(LIBOBJS)" \
+		LINK_LIBOBJS="$(LINK_LIBOBJS)" \
+		TARGET=$(TARGET) \
+		ADDITIONAL_CLASSES="$(APPLICATION_CLASSES)" \
+		ADDITIONAL_OBJS="$(APPLICATION_OBJS)" \
+		ADDITIONAL_LINK_OBJS="$(APPLICATION_LINK_OBJS)"
+	    @-rm -f main.o modulList.stc modulList.c modulList.o
+
+#
+# a standAlone target without graphical user interface
+#
+NON_GUI_APPLICATION:
+	    @-rm -f main.o modulList.stc modulList.c modulList.o
+	    $(MAKE) main.o \
+		STARTUP_CLASS="$(STARTUP_CLASS)" \
+		STARTUP_SELECTOR="$(STARTUP_SELECTOR)" \
+		MAIN_DEFINES="$(MAIN_DEFINES)"
+	    @-echo "OPTIONAL_SHARED_LIBS=" $(OPTIONAL_SHARED_LIBS)
+	    $(MAKE) linkTarget \
+		LIBLIST="$(APPLICATION_LIBLIST)" \
+		LIBOBJS="$(APPLICATION_LIBOBJS)" \
+		LINK_LIBOBJS="$(APPLICATION_LINK_LIBOBJS)" \
+		TARGET=$(TARGET) \
+		ADDITIONAL_CLASSES="$(APPLICATION_CLASSES)" \
+		ADDITIONAL_OBJS="$(APPLICATION_OBJS)" \
+		ADDITIONAL_LINK_OBJS="$(APPLICATION_LINK_OBJS)"
+	    @-rm -f main.o modulList.stc modulList.c modulList.o
+
+xNON_GUI_APPLICATION:
+	    @-rm -f main.o modulList.stc modulList.c modulList.o
+	    $(MAKE) main.o \
+		STARTUP_CLASS="$(STARTUP_CLASS)" \
+		STARTUP_SELECTOR="$(STARTUP_SELECTOR)" \
+		MAIN_DEFINES="$(MAIN_DEFINES)"
+	    @-echo "OPTIONAL_SHARED_LIBS=" $(OPTIONAL_SHARED_LIBS)
+	    $(MAKE) linkTarget \
+		LIBLIST="$(MINI_LIST) libstx_libbasic2 libstx_libboss $(APPLICATION_LIBLIST)" \
+		LIBOBJS="$(MINI_LIB) $(LIBBASIC2) $(LIBBOSS) $(APPLICATION_LIBOBJS)" \
+		LINK_LIBOBJS="$(LINK_MINI_LIB) $(LINK_LIBBASIC2) $(LINK_LIBBOSS) $(APPLICATION_LINK_LIBOBJS)" \
+		TARGET=$(TARGET) \
+		ADDITIONAL_CLASSES="$(APPLICATION_CLASSES)" \
+		ADDITIONAL_OBJS="$(APPLICATION_OBJS)" \
+		ADDITIONAL_LINK_OBJS="$(APPLICATION_LINK_OBJS)"
+	    @-rm -f main.o modulList.stc modulList.c modulList.o
+
+#
+# a minimum standAlone target without graphical user interface
+# (only links libbasic - no compiler etc.)
+#
+BARE_NON_GUI_APPLICATION:
+	    @-rm -f main.o modulList.stc modulList.c modulList.o
+	    $(MAKE) main.o \
+		STARTUP_CLASS="$(STARTUP_CLASS)" \
+		STARTUP_SELECTOR="$(STARTUP_SELECTOR)" \
+		MAIN_DEFINES="$(MAIN_DEFINES)"
+	    @-echo "OPTIONAL_SHARED_LIBS=" $(OPTIONAL_SHARED_LIBS)
+	    $(MAKE) linkTarget \
+		LIBLIST="$(BARE_LIST) $(APPLICATION_LIBLIST)" \
+		LIBOBJS="$(BARE_LIB) $(APPLICATION_LIBOBJS)" \
+		LINK_LIBOBJS="$(LINK_BARE_LIB) $(APPLICATION_LINK_LIBOBJS)" \
+		TARGET=$(TARGET) \
+		ADDITIONAL_CLASSES="$(APPLICATION_CLASSES)" \
+		ADDITIONAL_OBJS="$(APPLICATION_OBJS)" \
+		ADDITIONAL_LINK_OBJS="$(APPLICATION_LINK_OBJS)"
+	    @-rm -f main.o modulList.stc modulList.c modulList.o
+
+#
+# with graphical user interface
+#
+BARE_GUI_APPLICATION:
+	@-rm -f main.o modulList.stc modulList.c modulList.o
+	$(MAKE) main.o \
+	    STARTUP_CLASS="$(STARTUP_CLASS)" \
+	    STARTUP_SELECTOR="$(STARTUP_SELECTOR)" \
+	    MAIN_DEFINES="$(MAIN_DEFINES)"
+	@-echo "OPTIONAL_SHARED_LIBS=" $(OPTIONAL_SHARED_LIBS)
+	$(MAKE) linkTarget \
+	    LIBLIST="$(EXTRA_UI_CLASSES) $(APPLICATION_LIBLIST)" \
+	    LIBOBJS="$(EXTRA_UI_OBJ) $(APPLICATION_LIBOBJS)" \
+	    LINK_LIBOBJS="$(EXTRA_LINK_UI_OBJ) $(APPLICATION_LINK_LIBOBJS)" \
+	    TARGET=$(TARGET) \
+	    ADDITIONAL_CLASSES="$(APPLICATION_CLASSES)" \
+	    ADDITIONAL_OBJS="$(APPLICATION_OBJS)" \
+	    ADDITIONAL_LINK_OBJS="$(APPLICATION_LINK_OBJS)"
+	@-rm -f main.o modulList.stc modulList.c modulList.o
+
+#
+# with tool libraries
+#
+GUI_APPLICATION:
+	@echo making GUI_APPLICATION...
+	@echo EXTRA_UI_CLASSES=$(EXTRA_UI_CLASSES)
+	@echo EXTRA_UI_OBJ=$(EXTRA_UI_OBJ)
+	@echo EXTRA_LINK_UI_OBJ=$(EXTRA_LINK_UI_OBJ)
+	@-rm -f main.o modulList.stc modulList.c modulList.o
+	$(MAKE) main.o \
+	    STARTUP_CLASS="$(STARTUP_CLASS)" \
+	    STARTUP_SELECTOR="$(STARTUP_SELECTOR)" \
+	    MAIN_DEFINES="$(MAIN_DEFINES)"
+	@-echo "OPTIONAL_SHARED_LIBS=" $(OPTIONAL_SHARED_LIBS)
+	$(MAKE) linkTarget \
+	    LIBLIST="$(EXTRA_UI_CLASSES) $(APPLICATION_LIBLIST)" \
+	    LIBOBJS="$(EXTRA_UI_OBJ) $(APPLICATION_LIBOBJS)" \
+	    LINK_LIBOBJS="$(EXTRA_LINK_UI_OBJ) $(APPLICATION_LINK_LIBOBJS)" \
+	    TARGET=$(TARGET) \
+	    ADDITIONAL_CLASSES="$(APPLICATION_CLASSES)" \
+	    ADDITIONAL_OBJS="$(APPLICATION_OBJS)" \
+	    ADDITIONAL_LINK_OBJS="$(APPLICATION_LINK_OBJS)"
+	@-rm -f main.o modulList.stc modulList.c modulList.o
+	@$(MAKE) registerClassLib
+
+#
+# a program target
+# needs: CLASSLIBRARIES,
+#        STARTUP_SELECTOR, STARTUP_CLASS
+#        LIBOBJS
+#
+PROGTARGET_shared::
+	    @-echo "OPTIONAL_SHARED_LIBS=" $(OPTIONAL_SHARED_LIBS)
+	    @-echo "Making PROGTARGET_shared ..."
+	    $(MAKE) linkTarget                      \
+		    LIBOBJS="$(LIBOBJS_SHARED)" \
+		    ADDITIONAL_OBJS="$(ADDITIONAL_OBJS)"    \
+		    ADDITIONAL_CLASSES="$(ADDITIONAL_CLASSES)"    \
+		    ADDITIONAL_LIBS="$(ADDITIONAL_LIBS)"    \
+		    EXTRA_LIBS="$(EXTRA_LIBS)" \
+		    LINK_LIBRUN="$(LINK_LIBRUN)" \
+		    LIBRUN=$(LIBRUN)
+
+PROGTARGET_static:
+	    @-echo "OPTIONAL_SHARED_LIBS=" $(OPTIONAL_SHARED_LIBS)
+	    @-echo "Making PROGTARGET_static ..."
+	    $(MAKE) linkTarget                      \
+		    LIBOBJS="$(STATIC_LIBOBJS)" \
+		    LINK_LIBOBJS="$(STATIC_LIBOBJS)" \
+		    ADDITIONAL_OBJS="$(STATIC_ADDITIONAL_OBJS)"    \
+		    ADDITIONAL_CLASSES="$(ADDITIONAL_CLASSES)"    \
+		    ADDITIONAL_LIBS="$(ADDITIONAL_LIBS)"    \
+		    EXTRA_LIBS="$(STATIC_EXTRA_LIBS)" \
+		    EXTRA_UI_OBJ="$(STATIC_EXTRA_UI_OBJ)" \
+		    LINK_LIBRUN="$(LIBRUN)" \
+		    LIBRUN="$(LIBRUN)"
+
+PROGTARGET_fullstatic:
+	    @-echo "OPTIONAL_SHARED_LIBS=" $(OPTIONAL_SHARED_LIBS)
+	    @-echo "Making PROGTARGET_fullstatic ..."
+	    $(MAKE) linkTarget                      \
+		    LIBOBJS="$(STATIC_LIBOBJS)" \
+		    LINK_LIBOBJS="$(STATIC_LIBOBJS)" \
+		    ADDITIONAL_OBJS="$(STATIC_ADDITIONAL_OBJS)"    \
+		    ADDITIONAL_CLASSES="$(ADDITIONAL_CLASSES)"    \
+		    ADDITIONAL_LIBS="$(ADDITIONAL_LIBS)"    \
+		    LINK_LIBRUN="$(LIBRUN)" \
+		    LIBRUN="$(LIBRUN)" \
+		    MATHLIB="$(STATIC_MATHLIB)" \
+		    EXTRA_LIBS="$(STATIC_EXTRA_LIBS)" \
+		    EXTRA_UI_OBJ="$(STATIC_EXTRA_UI_OBJ)" \
+		    SYSLIBS="$(STATIC_SYSLIBS)"
+
+PROGTARGET::
+	    @-echo "OPTIONAL_SHARED_LIBS=" $(OPTIONAL_SHARED_LIBS)
+	    @-echo "Making PROGTARGET_shared ..."
+	    $(MAKE) linkTarget                      \
+		    LIBOBJS="$(LIBOBJS_SHARED)" \
+		    ADDITIONAL_OBJS="$(ADDITIONAL_OBJS)"    \
+		    ADDITIONAL_CLASSES="$(ADDITIONAL_CLASSES)"    \
+		    ADDITIONAL_LIBS="$(ADDITIONAL_LIBS)"    \
+		    EXTRA_LIBS="$(EXTRA_LIBS)" \
+		    LINK_LIBRUN="$(LINK_LIBRUN)" \
+		    LIBRUN=$(LIBRUN)
+
+nullRebaseRule:
+	    @-echo "No rebase done for this architecture/configuration"
+
+linkTarget: main.$(O) $(LIBOBJS) checkSymbolsInLibrunAreUpToDate $(LIBRUN) $(EXTRA_OBJ)
+	    @-echo "Making modulList (PACK = " $(CONF_PACKS) ") ..."
+	    @-echo "LIBLIST=" $(LIBLIST)
+	    @-echo "ADDITIONAL_CLASSES=" $(ADDITIONAL_CLASSES)
+	    $(MAKE) modulList.$(O) \
+		    LIBS="$(LIBOBJS)" \
+		    LIBLIST="$(LIBLIST)" \
+		    ADDITIONAL_CLASSES="$(ADDITIONAL_CLASSES)"
+	    @-echo "OPTIONAL_SHARED_LIBS=" $(OPTIONAL_SHARED_LIBS)
+	    @-echo "linking ..."
+	    $(MAKE) linkLibs LINK_LIBDIR="$(LINK_LIBDIR)" LINK_LIBOBJS="$(LINK_LIBOBJS)" LIBOBJS="$(LIBOBJS)"
+	    $(MAKE) $(rebaseLibsRule) LINK_LIBRUN="$(LINK_LIBRUN)" LINK_LIBOBJS="$(LINK_LIBOBJS)" LINK_ADDITIONAL_OBJS="$(LINK_ADDITIONAL_OBJS)"
+	    $(LD) $(ST_LDFLAG) $(LDFLAGS) -o $(TARGET)$(EXE) \
+		  $(CRT0) modulList.$(O) main.$(O) \
+		  $(OPTIONAL_SHARED_LIBS) \
+		  $(LINK_LIBOBJS) $(LINK_ADDITIONAL_OBJS) \
+		  $(LINK_LIBRUN) \
+		  $(ADDITIONAL_LIBS) $(MATHLIB) $(EXTRA_LIBS) $(SYSLIBS) $(CRTN)
+	    @if [ "$(POST_LD)" != "" ]; then \
+		echo $(POST_LD) $(TARGET)$(EXE); \
+		$(POST_LD) $(TARGET)$(EXE); \
+	    fi
+	    @if [ "$(POST_LD2)" != "" ]; then \
+		echo $(POST_LD2) $(TARGET)$(EXE); \
+		$(POST_LD2) $(TARGET)$(EXE); \
+	    fi
+
+# a pure C library
+cLibRule:
+	@-echo "linking ..."
+	$(LD) $(ST_LDFLAG) $(LDFLAGS) -shared -o $(CLIB)$(SO_NAME) \
+	      $(CRT0) \
+	      $(OPTIONAL_SHARED_LIB_PATH) \
+	      $(COBJS) $(LINK_ADDITIONAL_OBJS) \
+	      $(ADDITIONAL_LIBS) $(MATHLIB) $(EXTRA_LIBS) $(SYSLIBS) $(CRTN)
+
+checkSymbolsInLibrunAreUpToDate:
+	if [ -f $(LIBRUNDIR)/symbolAddress.h.timestamp ]; then \
+	    $(MAKE) reallyCheckSymbolsInLibrunAreUpToDate; \
+	fi
+
+reallyCheckSymbolsInLibrunAreUpToDate: $(LIBRUNDIR)/symbolAddress.h.timestamp
+
+$(LIBRUNDIR)/symbolAddress.h.timestamp: $(INCLUDE)/symbols.stc $(LIBRUNDIR)/symbols.h
+	@-echo "Making librun for changed symbolList..."
+	cd $(LIBRUNDIR); $(MAKE)
+
+#
+# install:
+#     make all then install
+#
+
+install:: checkTargetPresent
+	@if [ "$(VERBOSE)"x != "x" ]; then \
+	    echo "making install in `pwd` ..."; \
+	fi
+	@$(MAKE) qinstall installSubdirsIf RELEASE=$(RELEASE)
+
+verboseInstall::
+	@$(MAKE) install VERBOSE=yes
+
+installHere:: checkTargetPresent
+	@$(MAKE) qinstall RELEASE=$(RELEASE)
+
+installLocal:: checkTargetPresent
+	@if [ "$(SILENT)"x = "x" ]; then \
+	    echo "making installLocal in `pwd` ..."; \
+	fi
+	@$(MAKE) qinstall installSubdirsIf INSTALLBASE=$(TOP)/build
+
+installHereLocal:: checkTargetPresent
+	@$(MAKE) qinstall INSTALLBASE=$(TOP)/build
+
+installBinOnly::
+	@$(MAKE) qinstall installSubdirsIf RELEASE=$(RELEASE) SUPPRESS_INSTALL_SRC="yes"
+
+#
+# generate a self-extracting archive
+#
+installerFile::
+	@if [ "$(INSTALLED_DIR)"x != ""x ]; then \
+	     $(MAKE) createInstallerFile \
+		    INSTALLED_DIR=$(INSTALLED_DIR) \
+		    INSTALL_FILE=inst_$(MODULE)-`$(TOP)/support/check/config.guess`.sh; \
+	else \
+	  if [ "$(MODULE)"x = ""x ]; then \
+	     $(MAKE) createInstallerFile \
+		    INSTALLED_DIR=$(INSTALLBASE)/$(RELEASE) \
+		    INSTALL_FILE=inst_STX$(RELEASE)-`$(TOP)/support/check/config.guess`.sh; \
+	  else \
+	     $(MAKE) createInstallerFile \
+		    INSTALLED_DIR=$(INSTALLBASE)/$(RELEASE)/packages/$(MODULE) \
+		    INSTALL_FILE=inst_$(MODULE)-`$(TOP)/support/check/config.guess`.sh; \
+	  fi \
+	fi
+
+createInstallerFile::
+	@if [ "$(VERBOSE)"x != "x" ]; then \
+	    echo "Generating tar-file for "$(INSTALLED_DIR)"..."; \
+	fi
+	@( \
+	  here=`pwd` ; \
+	  cd / ; \
+	  tar cf $$here/installFile.tar $(INSTALLED_DIR) \
+	 )
+	@if [ "$(COMPRESSOR)"x != "x" ]; then \
+	    if [ "$(VERBOSE)"x != "x" ]; then \
+		echo $(COMPRESSOR)"-ing tar-file..."; \
+	    fi; \
+	    $(COMPRESSOR) installFile.tar; \
+	fi
+	@if [ "$(VERBOSE)"x != "x" ]; then \
+	    echo "Generating self extracting shell-command-file ..."; \
+	fi
+	@$(TOP)/support/mk-selfinstall \
+	    --outfile=$(INSTALL_FILE) \
+	    --type=$(COMPRESSED_FILETYPE) \
+	    --installDirMsg="$(INSTALLED_DIR)"\
+	    installFile.tar.*
+	@rm installFile.tar.*
+
+checkTargetPresent::
+
+#$(INSTALLTOP_DIR)/bin:: $(INSTALLTOP_DIR)
+#        @test -d $@ || mkdir $@
+#
+#$(INSTALLTOP_DIR)/lib:: $(INSTALLTOP_DIR)
+#        @test -d $@ || mkdir $@
+#
+#$(INSTALLLIB_DIR)/lib:: $(INSTALLLIB_DIR)
+#        @test -d $@ || mkdir $@
+#
+$(INSTALLLIB_DIR)/bitmaps:: $(INSTALLLIB_DIR)
+	@test -d $@ || mkdir $@
+
+$(INSTALLLIB_DIR)/fonts:: $(INSTALLLIB_DIR)
+	test -d $(INSTALLLIB_DIR)/fonts || mkdir $(INSTALLLIB_DIR)/fonts
+
+$(INSTALLLIB_DIR)/resources:: $(INSTALLLIB_DIR)
+	@test -d $@ || mkdir $@
+
+$(INSTALLLIB_DIR)/source:: $(INSTALLLIB_DIR)
+	@test -d $@ || mkdir $@
+
+$(INSTALLBASE)::
+	@test -d $@ || mkdir $@
+
+$(INSTALLBASE)/bin:: $(INSTALLBASE)
+	@test -d $@ || mkdir $@
+
+$(INSTALLBASE)/lib:: $(INSTALLBASE)
+	@test -d $@ || mkdir $@
+
+$(INSTALLBASE)/lib/lib:: $(INSTALLBASE)/lib
+	@test -d $@ || mkdir $@
+
+$(INSTALLBASE)/lib/bitmaps:: $(INSTALLBASE)/lib
+	@test -d $@ || mkdir $@
+
+$(INSTALLBASE)/packages:: $(INSTALLBASE)
+	@test -d $@ || mkdir $@
+
+$(INSTALLBASE)/packages/$(MODULE):: $(INSTALLBASE)/packages
+	@test -d $@ || mkdir $@
+
+$(INSTALLBASE)/packages/$(MODULE)/$(MODULE_DIR):: $(INSTALLBASE)/packages/$(MODULE)
+	@case "$(MODULE_DIR)" in           \
+	    "")                            \
+		;;                         \
+	    */*)                           \
+		( md=`dirname $(MODULE_DIR)`; $(MAKE) installDir MODULE_DIR=$$md ); \
+		;;                        \
+	esac
+	@test -d $@ || mkdir $@
+
+installDir:     $(INSTALLBASE)/packages/$(MODULE)/$(MODULE_DIR)
+
+#
+# qinstall: (quick install)
+#     install only - assumes make all was done previously
+#
+qinstall:: installAux installProgsIf installLibsIf installSources
+
+installProgsIf::
+	@-if [ "$(INSTALLPROGS)"x != x ]; then          \
+	  $(MAKE) installProgs; \
+	fi
+
+installProgs:: $(INSTALLBIN_DIR)
+	@-for i in $(INSTALLPROGS); do \
+	  if [ "$(VERBOSE)"x != "x" ]; then \
+	      echo "installing program: "$$i"..."; \
+	  fi; \
+	  $(INSTALL_BIN_CMD) $$i $(INSTALLBIN_DIR); \
+	done
+
+installLibsIf::
+	@-if [ "$(LIBNAME)" != "" ]; then \
+	  $(MAKE) installLibs; \
+	fi
+	@-if [ "$(INSTALLED_LOAD_SCRIPTS)"x != ""x ]; then \
+	  $(MAKE) installLoadScripts; \
+	fi
+	@-if [ -f $(LIBNAME).prj ]; then \
+	  $(MAKE) installPrjFile; \
+	fi
+
+installLibs::
+	@-if [ -f $(LIBNAME)$(SO_NAME) ]; then \
+	  $(MAKE) installSharedLib; \
+	else \
+	  if [ -f $(LIBNAME)$(OBJNAME) ]; then \
+	    $(MAKE) installStaticLib; \
+	  fi \
+	fi
+	@-if [ -f $(LIBNAME).zip ]; then \
+	  $(MAKE) installZippedClassFile; \
+	fi
+
+installSharedLib:: $(INSTALLLIB_DIR)
+	@if [ "$(VERBOSE)"x != "x" ]; then \
+	    echo "installing dynamic library: "$(LIBNAME)$(SO_NAME)" in "$(INSTALLLIB_DIR)" ..."; \
+	fi
+	$(INSTALL_LIB_CMD) $(LIBNAME)$(SO_NAME) $(INSTALLLIB_DIR)
+	@-if [ "$(THIS_IS_A_BASE_LIBRARY)"x != ""x ]; then  \
+	  if [ "$(MODULE)"x != ""x ]; then  \
+	    if [ "$(MODULE_DIR)"x != ""x ]; then  \
+	      if [ "$(INSTALLLIB_DIR)" = "$(INSTALLBASE)/packages/$(MODULE)/$(MODULE_DIR)" ]; then \
+		if [ "$(INSTALLBASE)/lib" != "$(INSTALLLIB_DIR)" ]; then \
+		  $(MAKE) installSharedLibSymbolicLink;\
+		fi \
+	      fi \
+	    fi \
+	  fi \
+	fi
+
+installSharedLibSymbolicLink:: $(INSTALLBASE)/lib/lib
+	@if [ "$(VERBOSE)"x != "x" ]; then \
+	    echo "generating symbolic link to shared object in $(INSTALLBASE)/lib/lib ..."; \
+	fi
+	@cd $(INSTALLBASE)/lib/lib && $(LNS) -f ../../packages/$(MODULE)/$(MODULE_DIR)/$(LIBNAME)$(SO_NAME) .
+
+installStaticLib:: $(INSTALLLIB_DIR)
+	@if [ "$(VERBOSE)"x != "x" ]; then \
+	    echo "installing static library: "$(LIBNAME)$(OBJNAME)" in "$(INSTALLLIB_DIR)" ..."; \
+	fi
+	$(INSTALL_LIB_CMD) $(LIBNAME)$(OBJNAME) $(INSTALLLIB_DIR)
+
+installZippedClassFile:: $(INSTALLLIB_DIR)
+	@if [ "$(VERBOSE)"x != "x" ]; then \
+	    echo "installing zip package: "$(LIBNAME).zip" in "$(INSTALLLIB_DIR)" ..."; \
+	fi
+	$(INSTALL_AUX_CMD) $(LIBNAME).zip $(INSTALLLIB_DIR)
+
+installPrjFile:: $(INSTALLLIB_DIR)
+	@if [ "$(VERBOSE)"x != "x" ]; then \
+	    echo "installing prj file: "$(LIBNAME).prj" in "$(INSTALLLIB_DIR)" ..."; \
+	fi
+	$(INSTALL_AUX_CMD) $(LIBNAME).prj $(INSTALLLIB_DIR)
+
+installLoadScript:: $(INSTALLLIB_DIR)
+	@if [ "$(VERBOSE)"x != "x" ]; then \
+	    echo "installing "$(LOAD_SCRIPT)" in "$(INSTALLLIB_DIR)" ..."; \
+	fi
+	$(INSTALL_AUX_CMD) $(LOAD_SCRIPT) $(INSTALLLIB_DIR)
+
+installLoadScripts::
+	@-for i in $(INSTALLED_LOAD_SCRIPTS); do \
+	  if [ -f $$i ]; then \
+	     $(MAKE) installLoadScript LOAD_SCRIPT=$$i; \
+	  fi \
+	done
+
+installSources:: installSTSourceIf
+
+installSTSourceIf::
+	@-if [ "$(MODULE)"x != ""x ]; then  \
+	  if [ "$(MODULE_DIR)"x != ""x ]; then  \
+	    if [ "$(SUPPRESS_INSTALL_SRC)"x = ""x ]; then  \
+	      if [ "*.st" != '\*.st' ]; then  \
+		if ( zip -h >/dev/null ) ; then \
+		  $(MAKE) installSTZipSource;        \
+		else \
+		  $(MAKE) installSTSource;        \
+		fi \
+	      fi \
+	    fi \
+	  fi \
+	fi
+
+installSTSource:: $(INSTALLLIB_DIR)/source
+	@if [ "$(VERBOSE)"x != "x" ]; then \
+	    echo "installing sources in $(INSTALLLIB_DIR)/source..."; \
+	fi
+	@-for i in *.st; do \
+	  $(INSTALL_AUX_CMD) $$i $(INSTALLLIB_DIR)/source;\
+	done
+
+#
+# only store (i.e. do not compress);
+# ZipArchive cannot deflate/uncompress right now.
+#
+installSTZipSource:: $(INSTALLLIB_DIR)
+	@if [ "$(VERBOSE)"x != "x" ]; then \
+	    echo "installing zipped sources in $(INSTALLLIB_DIR)/source.zip..."; \
+	fi
+	@zip -0 /tmp/source.zip *.st > /dev/null
+	@-rm -f $(INSTALLLIB_DIR)/source.zip
+	@mv /tmp/source.zip $(INSTALLLIB_DIR)/source.zip
+	@chmod 0644 $(INSTALLLIB_DIR)/source.zip
+
+installSubdirsIf::
+	@-if [ "$(INSTALL_SUBDIRS)" != "" ]; then          \
+	  $(MAKE) installSubDirs; \
+	fi
+
+installSubDirs::
+	@-for i in $(INSTALL_SUBDIRS); do          \
+	  if [ -d $$i ]; then              \
+	    if [ -f $$i/$(MAKEFILE) ]; then \
+	      (cd $$i && $(MAKE) install  INSTALLBASE=$(INSTALLBASE)); \
+	    fi;                            \
+	  fi;                              \
+	done
+
+installLocalSubdirsIf::
+	@-if [ "$(INSTALL_SUBDIRS)" != "" ]; then          \
+	  $(MAKE) installLocalSubDirs;                 \
+	fi
+
+installLocalSubDirs::
+	@-for i in $(INSTALL_SUBDIRS); do          \
+	  if [ -d $$i ]; then              \
+	    if [ -f $$i/$(MAKEFILE) ]; then \
+	      (cd $$i && $(MAKE) installLocal); \
+	    fi;                            \
+	  fi;                              \
+	done
+
+installAux:: installAbbrevIf installBitmapsIf installResourcesIf
+
+installAbbrevIf::
+	@-if [ -f abbrev.stc ]; then \
+	  if [ "$(MODULE)"x != ""x ]; then  \
+	    if [ "$(MODULE_DIR)"x != ""x ]; then  \
+	      $(MAKE) installAbbrev; \
+	    fi \
+	  fi \
+	fi
+
+installAbbrev:: $(INSTALLTOP_DIR)
+	@if [ "$(VERBOSE)"x != "x" ]; then \
+	    echo "installing abbrev.stc..."; \
+	fi
+	@$(MAKE) abbrev.stc
+	cp abbrev.stc $(INSTALLTOP_DIR)
+
+installBitmapsIf::
+	@-if [ -d bitmaps ]; then \
+	  if [ "$(SUPPRESS_INSTALL_BITMAPS)"x = "x" ]; then \
+	    $(MAKE) installBitmaps; \
+	  fi \
+	fi
+
+installBitmaps:: $(INSTALLBITMAPSLIB_DIR)
+	@-if [ "$(VERBOSE)"x != "x" ]; then \
+	    echo "installing bitmaps..."; \
+	fi
+	-tar cf - bitmaps | (cd $(INSTALLBITMAPSLIB_DIR) && tar xf -)
+	@-find $(INSTALLBITMAPSLIB_DIR)/bitmaps -name 'CVS' -exec rm -rf {} \;            2>/dev/null
+	@-find $(INSTALLBITMAPSLIB_DIR)/bitmaps -name 'not_delivered' -exec rm -rf {} \;  2>/dev/null
+
+installFonts:: $(INSTALLLIB_DIR)/fonts
+	@if [ "$(VERBOSE)"x != "x" ]; then \
+	    echo "installing fonts..."; \
+	fi
+	-(tar cf - fonts | (cd $(INSTALLLIB_DIR) ; tar xf -))
+	@-find $(INSTALLLIB_DIR)/fonts -name 'CVS' -exec rm -rf {} \;              2>/dev/null
+	@-find $(INSTALLLIB_DIR)/fonts -name 'not_delivered' -exec rm -rf {} \;    2>/dev/null
+
+installResourcesIf::
+	@-if [ -d resources ]; then \
+	  if [ "$(SUPPRESS_INSTALL_RESOURCES)"x = "x" ]; then \
+	    $(MAKE) installResources; \
+	  fi \
+	fi
+
+installResources:: $(INSTALLLIB_DIR)/resources
+	@if [ "$(VERBOSE)"x != "x" ]; then \
+	    echo "installing resources..."; \
+	fi
+	-tar cf - resources | (cd $(INSTALLLIB_DIR) && tar xf -)
+	@-find $(INSTALLLIB_DIR)/resources -name 'CVS' -exec rm -rf {} \;            2>/dev/null
+	@-find $(INSTALLLIB_DIR)/resources -name 'not_delivered' -exec rm -rf {} \;  2>/dev/null
+
+#
+# rule to make an archive
+#
+$(LIB):     pre_lib $(DEPOBJS) $(DEPAUXOBJS) $(LIB_HELPER)
+	-cp $(LIB) $(LIB).sav
+	rm -f $(LIB)
+	$(AR) $(AR_LIB_FLAG) $(LIB) $(AR_OBJS)
+	-$(RANLIB) $(LIB)
+
+pre_lib::
+
+CONF_STRING="$(CONF):$(CONF_PACKS)"
+
+#
+# rule to make a main (either in smalltalk or application)
+# main.o depends on Makefile, to be recompiled when the configuration
+# changes (used to be in libbasic/Smalltalk.st)
+#
+# Now always rebuild main.o, to get the newest build number/date
+
+#main.o::  $(MAIN) $(INCLUDE)/stc.h $(MAKEFILE)
+main.o::
+	  $(MAIN_CC) -o main.o -c $(MAIN_CFLAGS) $(MAIN_DEFINES) \
+		-DSTARTUP_CLASS="\"$(STARTUP_CLASS)\"" \
+		-DSTARTUP_SELECTOR="\"$(STARTUP_SELECTOR)\"" \
+		-DCONFIGURATION_STRING="\"$(CONF_STRING)\"" \
+		-DBUILD_DATE="\"`date '+%Y-%m-%d %R %Z'`\"" \
+		-DBUILD_NUMBER="\"${BUILD_NUMBER}\"" \
+		-I$(INCLUDE) -I. $(MAIN)
+
+#
+# liblist.stc:
+#    automatic generate a liblist.stc - libinfo file from all OBJ files
+#
+liblist.stc:: Make.proto Make.spec
+	@-if [ "*.st" != '\*.st' ]; then                \
+	  if [ "$(LIBNAME)" != "" ]; then               \
+	    echo "";                                    \
+	    echo "generating libinfo liblist.stc ...";  \
+	    echo "";                                    \
+	    if [ -f liblist.stc ]; then                 \
+		rm -f liblist.stc;                      \
+	    fi;                                         \
+	    for i in ""*.st"" ; do                      \
+	      NAME=`basename $$i .st`;                  \
+	      if [ -f "$$NAME".o ]; then                \
+	       CLASS=`$(STC) -extractClass $$i`;        \
+	       if [ "$$CLASS" != "" ]; then             \
+		 echo "  adding "$$i;                   \
+		 echo $$CLASS" "$(LIBNAME) >> liblist.stc;       \
+	       fi;                                      \
+	      fi;                                       \
+	    done;                                       \
+	    $(MAKE) patchLiblist;                       \
+	  fi;                                           \
+	fi
+
+
+forceAbbrev::
+	@-$(MAKE) saveAbbrev
+	@-$(MAKE) abbrev.stc
+
+saveAbbrev:
+	@-if [ -f abbrev.stc ]; then \
+	  rm -f abbrev.stc.bak ;     \
+	  mv abbrev.stc abbrev.stc.bak ; \
+	fi
+
+#
+# abbrev.stc:
+#    generate an abbrev.stc - abbreviation file
+#    from all .st files found here; leave as is, if no change
+#
+abbrev.stc:: Make.proto Make.spec $(TOP)/rules/rightstr .listOfSTfiles
+	@-if [ "`echo *.st`" != "*.st" ]; then \
+	  echo "generating abbrev.stc in "$(MODULE_DIR)"..."; \
+	  LC_COLLATE=POSIX; export LC_COLLATE; \
+	  $(MAKE) genAbbrev; \
+	  if [ "$(TOUCH)" != "echo" ]; then   \
+	    $(TOUCH) abbrev.stc; \
+	  fi; \
+	  if [ -f abbrev.stc.bak ]; then \
+	    if (cmp abbrev.stc.bak abbrev.stc >/dev/null); then  \
+	      echo "  abbrev.stc unchanged";  \
+	      mv abbrev.stc.bak abbrev.stc;   \
+	    else \
+	      echo "  abbrev has changed";    \
+	    fi \
+	  fi \
+	else \
+	  echo "  no st-files -> no abbrevs"; \
+	fi
+
+#
+# unconditionally generate a local abbrev.stc file
+#
+genAbbrev::
+	@rm -f abbrev.stc
+	echo RELNAME=`$(RULEDIR)/relname $(TOP) $(DIRNAME) $(RIGHTSTR)`
+	@RELNAME=`$(RULEDIR)/relname $(TOP) $(DIRNAME) $(RIGHTSTR)`
+	@for i in *.st ; do              \
+	  case $$i in                   \
+	    m_*)                        \
+	      echo "  ** skipping "$$i; \
+	      ;;                        \
+	    *_win32.st)                 \
+	      echo "  ** skipping win32 specific file in abbrev: "$$i;\
+	      ;;                        \
+	    *_vms.st)                   \
+	      echo "  ** skipping vms specific file in abbrev: "$$i; \
+	      ;;                        \
+	    *_macos.st)                 \
+	      echo "  ** skipping mac specific file in abbrev: "$$i; \
+	      ;;                        \
+	    *_beos.st)                 \
+	      echo "  ** skipping be specific file in abbrev: "$$i; \
+	      ;;                        \
+	    *_os2.st)                 \
+	      echo "  ** skipping os2 specific file in abbrev: "$$i; \
+	      ;;                        \
+	    *_unix.st)                 \
+	      echo "  ** skipping unix specific file in abbrev: "$$i; \
+	      ;;                        \
+	    *)                          \
+	      if [ "$(VERBOSE)" != "" ]; then \
+		echo "  processing "$$i;\
+	      fi;                       \
+	      CLASS=`$(STC) -extractClass $$i 2>/dev/null`; \
+	      if [ "$(PACKAGE)" != "" ]; then \
+		PACKAGE=$(PACKAGE);     \
+	      else                      \
+		echo "Cannot figure out the package of $$i when generating abbrev.stc in "`pwd`; \
+		exit 1;                 \
+		PACKAGE=unknown;        \
+	      fi;                       \
+	      if [ "$(NOAUTOLOAD)" = "1" ]; then \
+		if [ "$$CLASS" != "" ]; then  \
+		  NAME=`basename $$i .st`;    \
+		  if [ "$$CLASS" != "$$NAME" ]; then \
+		    echo "  warning: className ~= fileName: "$$NAME".st" > /dev/null; \
+		  fi; \
+		  echo $$CLASS" "$$NAME" "$$PACKAGE  >> abbrev.stc; \
+		  echo "  added " $$CLASS" -> "$$NAME >/dev/null;   \
+		else                    \
+		  echo "  ** ignore "$$i" in abbrevs (no valid class source ?)"; \
+		fi;                     \
+	      else                      \
+		NCIVARS=`$(STC) -extractNumClassInstvars $$i  2>/dev/null`; \
+		CAT=`$(STC) -extractCategory $$i  2>/dev/null`; \
+		if [ "$$CLASS" != "" ]; then  \
+		  NAME=`basename $$i .st`;    \
+		  if [ "$$CLASS" != "$$NAME" ]; then \
+		    echo "  warning: className ~= fileName: "$$NAME".st" > /dev/null; \
+		  fi; \
+		  echo $$CLASS" "$$NAME" "$$PACKAGE $$CAT $$NCIVARS>> abbrev.stc; \
+		  echo "  added " $$CLASS" -> "$$NAME >/dev/null; \
+		else    \
+		  echo "  ** ignore "$$i" in abbrevs (no valid class source ?)"; \
+		fi;     \
+	      fi;       \
+	      ;;        \
+	  esac;       \
+	done
+	@sort < abbrev.stc | uniq > abbrev.stc.sorted
+	@mv abbrev.stc.sorted abbrev.stc
+
+$(TOP)/rules/rightstr:
+	@-if [ "$(CONF)" = "NT/cygwin32-bc" ]; then \
+	    (cd $(TOP)/rules && $(CC) -c rightstr.c); \
+	    (cd $(TOP)/rules && $(CC) rightstr.$(O)); \
+	else \
+	    (cd $(TOP)/rules && $(CC) -o rightstr rightstr.c); \
+	fi
+
+
+#
+# recursively walk down, updating abbrev file
+#
+updAbbrev:
+	@$(MAKE) updLocalAbbrev
+	@-if [ "$(ALLSUBDIRS)x" != "x" ]; then            \
+	    $(MAKE) updSubdirAbbrev;                    \
+	fi
+
+updSubdirAbbrev::
+	@-for i in $(ALLSUBDIRS); do                    \
+	    if [ -d $$i ]; then                         \
+	      if [ -f $$i/Make.proto ]; then            \
+		if [ -f $$i/$(MAKEFILE) ]; then         \
+		  echo "update abbreviations in $$i";   \
+		  if [ "$(NOSUBAUTOLOAD)" = "1" ]; then \
+		      (cd $$i && $(MAKE) updAbbrev NOSUBAUTOLOAD=1 NOAUTOLOAD=1 ); \
+		  else                                  \
+		      (cd $$i && $(MAKE) updAbbrev);     \
+		  fi;                                   \
+		fi                                      \
+	      fi                                        \
+	    fi;                                         \
+	done
+
+
+.listOfSTfiles: .
+	@-if [ -r .listOfSTfiles ]; then                        \
+	    ls *.st > .listOfSTfiles.new;                       \
+	    if cmp .listOfSTfiles .listOfSTfiles.new; then      \
+		rm -f .listOfSTfiles.new;                       \
+	    else                                                \
+		rm -f .listOfSTfiles;                           \
+		mv .listOfSTfiles.new .listOfSTfiles;           \
+	    fi;                                                 \
+	else                                                    \
+	    ls *.st > .listOfSTfiles;                           \
+	fi
+
+
+modulList.o: modulList.c
+	$(CC) -c $(CFLAGS) -I$(INCLUDE) modulList.c
+	@-echo "done with modulList.o"
+
+modulList.c: modulList.stc
+	@$(MAKE) $(CLASSLISTEDITRULE) CLASSLIST=modulList
+	@-echo "done with modulList.c"
+
+modulList.stc: $(MAKEFILE)
+	@-rm -f modulList.stc modulList.c
+	@$(MAKE) GENERICLIST CLASSLIST=modulList                \
+		 ADDITIONAL_CLASSES="$(ADDITIONAL_CLASSES)"     \
+		 LIBLIST="$(LIBLIST)"                           \
+		 CLASSLIBRARIES="                               \
+			$(LIBLIST)                              \
+			$(OTHERLIBRARIES)                       \
+		 "                                              \
+		 CLASSLISTS="                                   \
+			$(EXTRACLASSLISTS)                      \
+			$(CLIENTCLASSLISTS)                     \
+		 "
+
+#
+# edit a modulList.c file from a modulList.stc file
+#
+classListEdit:
+	@echo "making $(CLASSLIST).c from $(CLASSLIST).stc"
+	@echo "#include <stcIntern.h>" > $(CLASSLIST).c
+	@echo "typedef void (*vf)();" >> $(CLASSLIST).c
+	@sed '/^$$/d' < $(CLASSLIST).stc > $(CLASSLIST).tmp1
+	@sed 's/ $$//' < $(CLASSLIST).tmp1 > $(CLASSLIST).tmp2
+	@sed 's/ $$//' < $(CLASSLIST).tmp2 > $(CLASSLIST).tmp1
+	@sed 's/^/extern void _/' < $(CLASSLIST).tmp1 > $(CLASSLIST).tmp2
+	@sed -e '/[A-Za-z]/s/$$/_Init();/' -e 's/::/__/' < $(CLASSLIST).tmp2 >> $(CLASSLIST).c
+	@echo "static vf modules[] = {" >> $(CLASSLIST).c
+	@sed 's/^/_/' < $(CLASSLIST).tmp1 > $(CLASSLIST).tmp2
+	@sed 's/::/__/' < $(CLASSLIST).tmp2 > $(CLASSLIST).tmp1
+	@sed 's/$$/_Init,/' < $(CLASSLIST).tmp1 >> $(CLASSLIST).c
+	@echo "(vf)0" >> $(CLASSLIST).c
+	@echo "};" >> $(CLASSLIST).c
+	@echo "vf *__modules__ = modules;" >> $(CLASSLIST).c
+	@-rm -f $(CLASSLIST).tmp1 $(CLASSLIST).tmp2
+	@-echo "done with classListEdit"
+
+#
+# generate a classList.stc/modulList.stc
+# from LIBLIST, CLASSLISTS and EXTRA_CLASSES
+# requires CLASSLIST to be set
+#
+GENERICLIST:   $(CLASSLISTS)
+	    @echo "making $(CLASSLIST)"
+	    @-rm -f $(CLASSLIST)
+	    @-if [ "$(LIBLIST)" != "" ]; then                   \
+		echo "   included class libraries:";            \
+		$(MAKE) addNamesToList NAMES="$(LIBLIST)"; \
+	     fi
+	    @-if [ "$(CLASSLISTS)" = "" ]; then                 \
+	      echo "(ignore any following syntax error ...)" >/dev/null;        \
+	     fi
+	    @-if [ "$(CLASSLISTS)" != "" ]; then                \
+		echo "   included individual classes:";         \
+		for i in "$(CLASSLISTS)"; do                    \
+		    echo "     $$i";                            \
+		done;                                           \
+		cat $(CLASSLISTS) >> $(CLASSLIST).stc;          \
+	     fi
+	    @-if [ "$(ADDITIONAL_CLASSES)" != "" ]; then        \
+		echo "   included additional (user) classes:";  \
+		for i in $(ADDITIONAL_CLASSES); do              \
+		    echo "     $$i" | sed 's/_/_137/g';         \
+		    echo $$i | sed 's/_/_137/g'   >> $(CLASSLIST).stc;  \
+		done; \
+	    fi
+	    @echo
+
+addNamesToList:
+	@-for i in $(NAMES); do \
+	    echo "     $$i";    \
+	    echo $$i    >> $(CLASSLIST).stc; \
+	done
+
+#
+# generate a libXXXInit.c file from classList/modulList.stc
+#
+$(LIBNAME)Init.c:  Make.proto Make.spec libInit.cc
+	@cp libInit.cc  $(LIBNAME)Init.c
+
+ntLibInit.c: $(LIBNAME)Init.c
+	mv $(LIBNAME)Init.c ntLibInit.c
+
+
+#
+# generate a zip file containing the sources.
+#
+$(LIBNAME).zip:
+	zip -0 $(LIBNAME).zip *.st
+
+#
+# generate an export file for AIX sharedlibrary building
+#
+#old$(LIBNAME).exp: $(CLASSLIST).stc
+#        @-if [ -f $(CLASSLIST).stc ]; then \
+#            echo "making export file $(LIBNAME).exp from $(CLASSLIST).stc"; \
+#            echo "#! /usr/local/lib/smalltalk/lib/$(LIBNAME).so" > $(LIBNAME).exp; \
+#            sed '/^$$/d' < $(CLASSLIST).stc > $(LIBNAME).tmp1; \
+#            sed 's/ $$//' < $(LIBNAME).tmp1 > $(LIBNAME).tmp2; \
+#            sed 's/ $$//' < $(LIBNAME).tmp2 > $(LIBNAME).tmp1; \
+#            sed 's/^/_/' < $(LIBNAME).tmp1 > $(LIBNAME).tmp2; \
+#            sed 's/::/__/' < $(LIBNAME).tmp2 > $(LIBNAME).tmp1; \
+#            sed '/[A-Za-z]/s/$$/_Init/' < $(LIBNAME).tmp1 >> $(LIBNAME).exp ;\
+#            rm -f $(LIBNAME).tmp1 $(LIBNAME).tmp2; \
+#            echo "done with $(LIBNAME).exp"; \
+#        else \
+#            echo "skip making of $(LIBNAME).exp - no classList"; \
+#        fi
+
+$(LIBNAME).exp: $(LIB)
+	@-echo "making export file $(LIBNAME).exp"
+	@-echo "#! /usr/local/lib/smalltalk/lib/$(LIBNAME).so" > $(LIBNAME).exp
+	@-echo "_"$(LIBNAME)"_Init" >> $(LIBNAME).exp
+
+#
+# generate a file containing symbols to be hidden in
+# a classlib. Use for classLibs which are to be loaded completely
+#
+hiddenSyms.stc: $(CLASSLIST).stc
+	@echo "making list of hidden syms ..."
+	@sed '/^$$/d' < $(CLASSLIST).stc > hiddenSyms.tmp1
+	@sed 's/ $$//' < hiddenSyms.tmp1 > hiddenSyms.tmp2
+	@sed 's/ $$//' < hiddenSyms.tmp2 > hiddenSyms.tmp1
+	@sed 's/^/_/' < hiddenSyms.tmp1 > hiddenSyms.tmp2
+	@sed 's/::/__/' < hiddenSyms.tmp2 > hiddenSyms.tmp1
+	@sed '/[A-Za-z]/s/$$/_Init/' < hiddenSyms.tmp1 > hiddenSyms.stc
+	@rm -f hiddenSyms.tmp1 hiddenSyms.tmp2
+	@-echo "done with hiddenSyms.stc"
+
+#depend:
+#       @-if grep "xx"STDEPEND $(MAKEFILE); then           \
+#           sed '/"xx"STDEPEND/, $$ d' < $(MAKEFILE) > mf.tmp;     \
+#           echo "# xx""STDEPENDxx" >> mf.tmp   ;       \
+#           echo mv mf.tmp $(MAKEFILE);                    \
+#       fi
+#
+allDepend:
+	@-$(MAKE) depend
+	@-if [ "$(SUBDIRS)"x != x ]; then \
+	  for i in $(SUBDIRS)" "; do      \
+	    if [ -d $$i ]; then           \
+	      (cd $$i && $(MAKE) depend);  \
+	    fi;                           \
+	  done;                           \
+	fi
+
+depend:
+	@-if grep "^# BEGINMAKEDEPEND" Make.proto > /dev/null; then \
+	    if [ -f $(TOP)/stc/stc ]; then                          \
+		$(MAKE) STC=$(STC) stDepend;                        \
+	    else                                                    \
+		if ($(STC) --version 2>/dev/null); then             \
+		    $(MAKE) STC=$(STC) stDepend;                    \
+		else                                                \
+		    echo "**** oops, no stc ("$(STC)"). Cannot make dependencies"; \
+		fi                                                  \
+	    fi                                                      \
+	fi
+
+.dependencies:
+	@-echo "  extracting dependencies ..."
+	@-for i in *.st ; do                    \
+	    if [ -f `basename $$i .st`_win32.st ]; then \
+	      echo "  skipping $$i in dependencies"; \
+	    else \
+	      echo "  extracting dependencies for $$i ..." >/dev/null; \
+	      $(STC) $(LOCALINCLUDES) -I$(INCLUDE) -I. -makeDepend $$i >> .dependencies 2>/dev/null; \
+	      rslt=$$?; \
+	      if [ $$rslt != 0 ]; then \
+		echo "    *** superclass not compiled / no valid class source in "$$i" ? [exitCode="$$rslt"]" >/dev/null; \
+	      fi \
+	    fi \
+	done
+
+stDepend::
+	@-rm -f .dependencies
+	@$(MAKE) .dependencies
+	@-sed 's/^\(.\)/$$(OUTDIR)\1/' < .dependencies > ttt1
+	@-sed 's/\.H/\.$$(H)/g' < ttt1 > .dependencies
+	@-for i in *.st ; do                    \
+	  echo "genAbbrev:: $$i" >> .dependencies; \
+	done
+	@-sed '1,/^# BEGINMAKEDEPEND/w ttt1' < $(MAKEFILE) > /dev/null
+	@-sed '/^# ENDMAKEDEPEND/,$$w ttt2' < $(MAKEFILE) > /dev/null
+	@-cat ttt1              > $(MAKEFILE).new
+	@-if grep "^# BEGINMAKEDEPEND" ttt1 > /dev/null; then \
+	    echo "found BEGIN line" > /dev/null; \
+	else \
+	    echo "# BEGINMAKEDEPEND --- do not remove this line; make depend needs it" >> $(MAKEFILE).new; \
+	fi
+	@-cat .dependencies     >> $(MAKEFILE).new
+	@-if grep "^# ENDMAKEDEPEND" ttt2 > /dev/null; then \
+	    echo "found END line" > /dev/null; \
+	else \
+	    echo "# ENDMAKEDEPEND --- do not remove this line" >> $(MAKEFILE).new; \
+	fi
+	@-cat ttt2              >> $(MAKEFILE).new
+	@-rm -f ttt1 ttt2
+	@-rm -f $(MAKEFILE)
+	@-rm -f .dependencies
+	@-mv $(MAKEFILE).new $(MAKEFILE)
+
+showDepend:: abbrev.stc
+	@-for i in *.st ; do \
+	    $(STC) $(LOCALINCLUDES) -I$(INCLUDE) -I. -makeDepend $$i; \
+	done
+
+unlink:
+	@-for i in * ; do                       \
+	  if [ -h $i ]; then                    \
+	    echo $i;                            \
+	    cp $i $i.X; mv $i.X $i;             \
+	  fi;                                   \
+	done
+
+#
+# create symbolic links for all used libraries in the LINK_LIBDIR
+# directory. Req'd for sharedLib links.
+#
+mkLinkLibDir:
+	@test -d $(LINK_LIBDIR) || mkdir $(LINK_LIBDIR)
+
+linkLibsDir:
+	@-if [ "$(LINK_LIBDIR)" = "" ]; then                            \
+	    if [ "$(NO_LINK_LIBDIR)" != "yes" ]; then                   \
+		test -d lib || mkdir lib;                               \
+	    fi                                                          \
+	else                                                            \
+	    $(MAKE) mkLinkLibDir LINK_LIBDIR="$(LINK_LIBDIR)";          \
+	fi
+
+linkLibs:
+	@if [ "$(LINK_LIBOBJS)" != "$(LIBOBJS)" ]; then                \
+	    if [ "$(LIBOBJS)" != "" ]; then                             \
+		$(MAKE) linkLibsDir LINK_LIBDIR="$(LINK_LIBDIR)";       \
+		$(MAKE) linkObjs LIBOBJS="$(LIBOBJS)";                  \
+	    fi;                                                         \
+	fi
+	@if [ "$(LINK_LIBRUN)" != "$(LIBRUN)" ]; then                  \
+	    $(MAKE) linkLibsDir LINK_LIBDIR="$(LINK_LIBDIR)";           \
+	    if [ "$(LINK_LIBDIR)" = "" ]; then                          \
+		if [ "$(LIBRUN)" = "" ]; then                           \
+		  echo "  symlinking to $(LIBRUNDIR)/$(LINK_LIBRUN) for linkage ..."; \
+		  rm -f `basename $(LINK_LIBRUN)` lib/`basename $(LINK_LIBRUN)`;      \
+		  $(LNS) $(LIBRUNDIR)/$(LINK_LIBRUN) .;                 \
+		  if [ "$(NO_LINK_LIBDIR)" != "yes" ]; then             \
+		    (cd lib && $(LNS) ../$(LIBRUNDIR)/$(LINK_LIBRUN) .); \
+		  fi;                                                   \
+		else                                                    \
+		  echo "  symlinking to $(LIBRUN) for linkage ...";     \
+		  rm -f `basename $(LIBRUN)` lib/`basename $(LIBRUN)`;  \
+		  $(LNS) $(LIBRUN) .;                                   \
+		  if [ "$(NO_LINK_LIBDIR)" != "yes" ]; then             \
+		      (cd lib && $(LNS) ../$(LIBRUN) .);                 \
+		  fi;                                                   \
+		fi;                                                     \
+	    else                                                        \
+		if [ "$(FORCE_LINK_LIBRUN)" != "" ]; then               \
+		    echo "  symlinking to $(LIBRUNDIR)/$(LINK_LIBRUN) for linkage ..."; \
+		    rm -f `basename $(LINK_LIBRUN)` lib/`basename $(LINK_LIBRUN)`;      \
+		    $(LNS) $(LIBRUNDIR)/$(LINK_LIBRUN) .;               \
+		    if [ "$(NO_LINK_LIBDIR)" != "yes" ]; then           \
+			(cd lib && $(LNS) ../$(LIBRUNDIR)/$(LINK_LIBRUN) .); \
+		    fi;                                                 \
+		else                                                    \
+		    if [ "$(LINK_LIBDIR)" != "" ]; then                 \
+			echo "  symlinking to ../$(LIBRUN) for linkage ..."; \
+			rm -f $(LINK_LIBDIR)/`basename $(LIBRUN)`;      \
+			(cd $(LINK_LIBDIR) && $(LNS) ../$(LIBRUN) .);    \
+		    fi;                                                 \
+		fi;                                                     \
+	    fi;                                                         \
+	fi
+	@if [ "$(LINK_EXTRA_OBJ)" != "$(EXTRA_OBJ)" ]; then            \
+	    $(MAKE) linkLibsDir LINK_LIBDIR="$(LINK_LIBDIR)";           \
+	    $(MAKE) linkExtraObj EXTRA_OBJ="$(EXTRA_OBJ)";              \
+	fi
+
+linkObjs:
+	@for i in $(LIBOBJS); do                                       \
+	    echo "  symlinking to $$i for linkage ...";                 \
+	    if [ "$(LINK_LIBDIR)" = "" ]; then                          \
+		rm -f `basename $$i` lib/`basename $$i`;                \
+		$(LNS) $$i .;                                           \
+		if [ "$(NO_LINK_LIBDIR)" != "yes" ]; then               \
+		    (cd lib && $(LNS) ../$$i .);                         \
+		fi                                                      \
+	    else                                                        \
+		if [ "$(LINK_LIBDIR)" != "" ]; then                     \
+		    rm -f $(LINK_LIBDIR)/`basename $$i`;                \
+		    (cd $(LINK_LIBDIR) && $(LNS) ../$$i .);              \
+		fi;                                                     \
+	    fi;                                                         \
+	done
+
+linkExtraObj:
+	@for i in $(EXTRA_OBJ); do                                     \
+	    echo "  symlinking to $$i for linkage ...";                 \
+	    if [ "$(LINK_LIBDIR)" = "" ]; then                          \
+		rm -f `basename $$i` lib/`basename $$i`;                \
+		$(LNS) $$i .;                                           \
+		if [ "$(NO_LINK_LIBDIR)" != "yes" ]; then               \
+		    (cd lib && $(LNS) ../$$i .);                         \
+		fi                                                      \
+	    else                                                        \
+		if [ "$(LINK_LIBDIR)" != "" ]; then                     \
+		    rm -f $(LINK_LIBDIR)/`basename $$i`;                \
+		    (cd $(LINK_LIBDIR) && $(LNS) ../$$i .);              \
+		fi;                                                     \
+	    fi;                                                         \
+	done
+
+removeLinkLibs::
+	@-if [ "$(LINK_LIBDIR)" = "" ]; then                            \
+	    rm -f $(EXTRA_LINK_LIBS) $(EXTRA_LINK_OBJ)                  \
+		  $(LINK_LIBOBJS) $(LINK_LIBRUN);                       \
+	fi
+
+#
+# linking to bitmap files in a project directory
+#
+bitmapLink:
+	@-if [ "$(COLLECT_BITMAPS)" != "" ]; then \
+	  $(MAKE) do_bitmapLink; \
+	fi
+
+do_bitmapLink::
+	test -d bitmaps || mkdir bitmaps
+	for i in $(BITMAPLINK_DIRS) $(EXTRA_BITMAPLINK_DIRS); do      \
+	  if [ -d $$i ]; then                                         \
+	    if [ -d $$i/bitmaps ]; then                               \
+	      if [ "`echo $$i/bitmaps/*`" != '$$i/bitmaps/*' ]; then  \
+		echo linking bitmaps from $$i;                        \
+		(cd bitmaps && $(LNS) ../$$i/bitmaps/* . 2>/dev/null);  \
+		(cd bitmaps && rm -f CVS RCS \* not_delivered);         \
+	      fi;                                                     \
+	    fi;                                                       \
+	  fi;                                                         \
+	done
+
+#
+# linking to binary files in a project directory
+#
+binaryLink:
+	@-if [ "$(COLLECT_BINARIES)" != "" ]; then \
+	  $(MAKE) do_binaryLink; \
+	fi
+
+do_binaryLink::
+	test -d binary || mkdir binary
+	@-for i in $(BINARYLINK_DIRS); do                            \
+	  if [ -d $$i ]; then                                        \
+	    if [ "`echo $$i/*$(BIN_O)`" != '$$i/*$(BIN_O)' ]; then   \
+	      echo linking binaries from $$i;                        \
+	      (cd binary && $(LNS) ../$$i/*$(BIN_O) . 2>/dev/null);    \
+	      (cd binary && $(LNS) ../$$i/*.cls . 2>/dev/null);        \
+	      (cd binary && rm -f CVS RCS not_delivered \*.cls \*$(BIN_O) ); \
+	    fi;                                                      \
+	  fi;                                                        \
+	done
+	@-if [ "$(EXTRA_BINARYLINK_DIRS)" != "" ]; then              \
+	    $(MAKE) binaryLinkExtra;                                 \
+	fi
+
+binaryLinkExtra:
+	@-for i in $(EXTRA_BINARYLINK_DIRS); do                 \
+	    echo linking binary $$i;                            \
+	    rm -f binary/`basename $$i`;                        \
+	    (cd binary && $(LNS) ../$$i .);                       \
+	done
+
+#
+# linking to source files in a project directory
+#
+sourceLink:
+	@-if [ "$(COLLECT_SOURCES)" != "" ]; then \
+	  $(MAKE) do_sourceLink; \
+	fi
+
+do_sourceLink::
+	test -d source || mkdir source
+	@-for i in $(SOURCELINK_DIRS); do                       \
+	      if [ -d $$i ]; then                               \
+		if [ "`echo $$i/*.st`" != $$i'/*.st' ]; then    \
+		  echo linking sourcefiles from $$i;            \
+		  (cd source && $(LNS) ../$$i/*.st . 2> /dev/null || true);       \
+		  (cd source && rm -f CVS RCS not_delivered \*.st); \
+		fi;                                             \
+	      else                                              \
+		if [ -d $(TOP)/$$i ]; then                      \
+		  if [ "`echo $(TOP)/$$i/*.st`" != $(TOP)/$$i'/*.st' ]; then \
+		    echo linking sourcefiles from $(TOP)/$$i;   \
+		    (cd source && $(LNS) ../$(TOP)/$$i/*.st . 2> /dev/null || true);      \
+		    (cd source && rm -f CVS RCS not_delivered \*.st);       \
+		  fi;                                           \
+		fi;                                             \
+	      fi;                                               \
+	done
+
+#
+# create zip files containing sources
+# (do not compress - ZipArchive class cannot do this right now
+#
+sourceZip:
+	test -d source || mkdir source
+	test -d source/stx || mkdir source/stx
+	for i in $(SOURCELINK_DIRS); do                 \
+	    if [ -d $$i ]; then                                 \
+		if [ "`echo $$i/*.zip`" != $$i'/*.zip' ]; then  \
+		    echo "copy zip-sourcefile from $$i";        \
+		    cp $$i/*.zip source/stx;                    \
+		fi                                              \
+	    else                                                \
+		if [ -d $(TOP)/$$i ]; then                      \
+		    if [ "`echo $(TOP)/$$i/*.st`" != $(TOP)/$$i/'*.st' ]; then  \
+			echo "copy zip-sourcefile from $(TOP)/$$i";             \
+			cp $(TOP)/$$i/*.zip source/stx; \
+		    fi                                          \
+		fi                                              \
+	    fi                                                  \
+	done
+
+#
+# linking to resource files in a project directory
+#
+resourceLink:
+	@-if [ "$(COLLECT_RESOURCES)" != "" ]; then \
+	  $(MAKE) do_resourceLink; \
+	fi
+
+do_resourceLink::
+	@test -d resources || mkdir resources
+	@-for i in $(RESOURCELINK_DIRS); do                   \
+	      if [ -d $$i ]; then                             \
+		if [ "`echo $$i/*`" != '$$i/*' ]; then        \
+		  echo linking resource files from $$i ...;   \
+		  (cd resources && $(LNS) ../$$i/* . 2> /dev/null || true);       \
+		  (cd resources && rm -f CVS RCS not_delivered \*); \
+		fi;                                           \
+	      else                                            \
+		if [ -d $(TOP)/$$i ]; then                    \
+		  if [ "`echo $(TOP)/$$i/*`" != '$(TOP)/$$i/*' ]; then    \
+		    echo linking resource files from $(TOP)/$$i ...;      \
+		    (cd resources && $(LNS) ../$(TOP)/$$i/* . 2> /dev/null || true);      \
+		    (cd resources && rm -f CVS RCS not_delivered \*);       \
+		  fi;                                                     \
+		fi;                                                       \
+	      fi;                                                         \
+	done
+
+styleLink:
+	@-if [ "$(COLLECT_RESOURCES)" != "" ]; then \
+	  $(MAKE) do_styleLink; \
+	fi
+
+do_styleLink::
+	@test -d resources || mkdir resources
+	@-echo "linking style files from $(LIBVIEWDIR)/styles ..."
+	@-rm -f resources/*.style resources/*.common
+	@-(cd resources && $(LNS) ../$(LIBVIEWDIR)/styles/* . 2> /dev/null || true)
+	@rm -f resources/RCS resources/CVS resources/not_delivered
+
+includeLink:
+	@test -d include || mkdir include
+	@-for i in $(INCLUDELINK_FILES); do                   \
+	    if [ ! -r include/$$i ]; then                     \
+		if [ -f $(INCLUDE)/$$i ]; then                \
+		    echo "linking $$i ...";                   \
+		    rm -f include/`basename $$i`;             \
+		    (cd include && $(LNS) ../$(INCLUDE)/$$i .); \
+		else                                          \
+		    echo "oops - no $(INCLUDE)/$$i";          \
+		fi;                                           \
+	    fi;                                               \
+	done
+
+#
+# checkin all changed files
+#
+checkin::
+	@echo "comment: "
+	@(read comment ; $(MAKE) doCheckin COMMENT="$$comment")
+
+checkinlocal::
+	@echo "comment: "
+	@(read comment ; $(MAKE) doCheckin COMMENT="$$comment" LOCALCHECKIN="yes" )
+
+#
+# checkin; expects $(COMMENT) to be set
+#
+doCheckin::
+	@-if [ -d CVS ]; then                                   \
+	    if [ "$(LOCALCHECKIN)" != "yes" ]; then             \
+		cvs commit -m"$(COMMENT)";                      \
+	    else                                                \
+		cvs commit -l -m"$(COMMENT)";                   \
+	    fi                                                  \
+	fi
+
+ident::
+	@-ident *.st Make.proto
+
+releaseDir:
+	@-if [ ! -d $(TOP)/releases ]; then                             \
+	    echo "creating release directory";                          \
+	    mkdir $(TOP)/releases;                                      \
+	    echo 2 > $(TOP)/releases/NEXT_MAJOR;                        \
+	    echo 10 > $(TOP)/releases/NEXT_MINOR;                       \
+	    echo 5 > $(TOP)/releases/NEXT_VSN;                          \
+	    echo 1 > $(TOP)/releases/NEXT_REL;                          \
+	fi
+
+incRelease:
+	@(read rel < $(TOP)/releases/NEXT_REL ; \
+	  expr $$rel + 1 > $(TOP)/releases/NEXT_REL)
+
+incVersion:
+	@(read vsn < $(TOP)/releases/NEXT_VSN ; \
+	  expr $$vsn + 1 > $(TOP)/releases/NEXT_VSN)
+	echo 1 > $(TOP)/releases/NEXT_REL
+
+incMinor:
+	@(read min < $(TOP)/releases/NEXT_MIN ; \
+	  expr $$min + 1 > $(TOP)/releases/NEXT_MIN)
+	echo 1 > $(TOP)/releases/NEXT_VSN
+	echo 1 > $(TOP)/releases/NEXT_REL
+
+#
+# make a new release
+#
+release:
+	@$(MAKE) releaseDir
+	@$(MAKE) incRelease
+	@(read maj<$(TOP)/releases/NEXT_MAJOR ; \
+	  read min<$(TOP)/releases/NEXT_MINOR ; \
+	  read vsn<$(TOP)/releases/NEXT_VSN ; \
+	  read rel<$(TOP)/releases/NEXT_REL ; \
+	  $(MAKE) doRelease REL=$$rel RELEASEID="$$maj.$$min.$$vsn.$$rel" )
+
+#
+# make a new version
+#
+version:
+	@$(MAKE) releaseDir
+	@$(MAKE) incVersion
+	@(read maj<$(TOP)/releases/NEXT_MAJOR ; \
+	  read min<$(TOP)/releases/NEXT_MINOR ; \
+	  read vsn<$(TOP)/releases/NEXT_VSN ; \
+	  read rel<$(TOP)/releases/NEXT_REL ; \
+	  $(MAKE) doRelease VSN=$$vsn RELEASEID="$$maj.$$min.$$vsn.$$rel" )
+
+#
+# make a new minor
+#
+minor:
+	@$(MAKE) releaseDir
+	@$(MAKE) incMinor
+	@(read maj<$(TOP)/releases/NEXT_MAJOR ; \
+	  read min<$(TOP)/releases/NEXT_MINOR ; \
+	  read vsn<$(TOP)/releases/NEXT_VSN ; \
+	  read rel<$(TOP)/releases/NEXT_REL ; \
+	  $(MAKE) doRelease MIN=$$min RELEASEID="$$maj.$$min.$$vsn.$$rel" )
+
+doRelease:
+	@-if [ -d $(TOP)/releases/$(RELEASEID) ]; then   \
+	    echo "Release $(RELEASEID) already exists";  \
+	    echo;                                        \
+	    echo "stop make";                            \
+	    sh -c "exit 1";                              \
+	fi
+	test -d $(TOP)/releases/$(RELEASEID) ||         \
+	mkdir $(TOP)/releases/$(RELEASEID)
+	@if [ -d $(TOP)/releases/$(RELEASEID) ]; then    \
+	    echo "making new release $(RELEASEID) ... "; \
+	    $(MAKE) manifest RELPATH="." RELEASEID=$(RELEASEID); \
+	fi
+
+#
+# extract rcs ids and add to manifest file
+# as $(TOP)/releases/$(RELEASEID)/MANIFEST
+#
+manifest:
+	@-for i in $(RCSSOURCES); do                                    \
+	    rlog -h $$i | grep "head:" | sed "s/head://" >/tmp/ID;      \
+	    (read id</tmp/ID ; echo $(RELPATH)/$$i $$id >> $(TOP)/releases/$(RELEASEID)/MANIFEST); \
+	    tail -1 $(TOP)/releases/$(RELEASEID)/MANIFEST; \
+	done
+	if [ "$(ALLSUBDIRS)"x != x ]; then                 \
+	  for i in $(ALLSUBDIRS)" "; do                    \
+	    if [ -d $$i ]; then                            \
+	      echo "";                                     \
+	      echo "manifest in $$i ... ";                 \
+	      echo "";                                     \
+	      (cd $$i && $(MAKE) makeMakefile);             \
+	      (cd $$i && $(MAKE) manifest RELPATH="$(RELPATH)/$$i" RELEASEID=$(RELEASEID));       \
+	    fi;                                            \
+	  done;                                            \
+	fi
+
+
+stcinfo:
+	$(STC) $(STCFLAGS) -V -version
+
+echoObjs:
+	@-if [ "$(OBJS)" != "" ]; then \
+	    $(MAKE) doEchoObjs; \
+	fi
+
+doEchoObjs:
+	@-for i in $(OBJS); do \
+	    echo `basename $$i .$(O)` ;\
+	done
+
+#
+# additional/changed rules
+#
+.SUFFIXES: .st .chg .c .o .tco .chk .note .i .copt .cls .dep .H .STH
+
+__STANDARD_O_RULE__:
+	$(STC) $(STCFLAGS) $(STC_MSGFORMAT) $(CFLAGS_ARCH) $(CFLAGS) $(CFLAGS_LOCAL) -CC="$(CLASSLIB_CC)" -c $(PWD)/$(STFILE).st  && \
+	    $(TOUCH) $(PWD)/$(STFILE).$(O)
+
+__STANDARD_C_RULE__:
+	$(STC) $(STCFLAGS) $(STC_MSGFORMAT) $(CFLAGS_ARCH) $(CFLAGS) $(CFLAGS_LOCAL) -CC="$(CLASSLIB_CC)" -C $(PWD)/$(STFILE).st
+
+__STANDARD_S_RULE__:
+	$(STC) $(STCFLAGS) $(STC_MSGFORMAT) $(CFLAGS_ARCH) $(CFLAGS) $(CFLAGS_LOCAL) -CC="$(CLASSLIB_CC)" -S $(PWD)/$(STFILE).st
+
+__STANDARD_H_RULE__:
+	$(STC) $(STCFLAGS) $(STC_MSGFORMAT) -H. -warn -headerOnly $(PWD)/$(STFILE).st  && \
+	    $(TOUCH) $(PWD)/$(STFILE).$(H)
+
+.st.STH:
+	@$(MAKE) OPT="$(OPT)" STC="$(STC)" STFILE=$* $(H_RULE)
+
+.SUFFIXES: .st .gdb
+.st.gdb:
+	(echo "r $(STCFLAGS) $(STC_MSGFORMAT) $(CFLAGS_ARCH) $(CFLAGS) $(CFLAGS_LOCAL) -CC="$(CLASSLIB_CC)" -C $<" ; echo "bt" ; cat -) | gdb $(STC)
+
+# Now the header files are no longer stored in stx/include, but together
+# with the .st files. The .H files may be older then the .st files (if the
+# class layout didn't change, so they should not be recreated implicitely!
+#
+#.st.H:
+#       @$(MAKE) OPT="$(OPT)" STC="$(STC)" STFILE=$* $(H_RULE)
+
+.st.$(O):
+	@$(MAKE) CC="$(CLASSLIB_CC)" OPT="$(OPT)" SEPINITCODE="$(SEPINITCODE)" STC="$(STC)" STFILE=$* $(O_RULE)
+
+.st.c:
+	@$(MAKE) CC="$(CLASSLIB_CC)" OPT="$(CLASSLIB_OPT)" SEPINITCODE="$(SEPINITCODE)" STC="$(STC)" STFILE=$* $(C_RULE)
+
+.c.i:
+	$(CC) $(CFLAGS_ARCH) $(CFLAGS) -E $*.c > $*.i
+
+#.c.s:
+#       $(CC)  $(CFLAGS_ARCH) $(CFLAGS) -S $*.c
+
+.st.s:
+	@$(MAKE) CC="$(CLASSLIB_CC)" OPT="$(CLASSLIB_OPT)" SEPINITCODE="$(SEPINITCODE)" STC="$(STC)" STFILE=$* $(S_RULE)
+
+.chg.c:
+	    $(STC) -VT $(STCFLAGS) $(STC_MSGFORMAT) $(CFLAGS) -C $*.chg
+
+.chg.$(O):
+	    $(STC) $(STCFLAGS) $(STC_MSGFORMAT) $(CFLAGS) -c $*.chg
+	    @$(TOUCH) $*.$(O)
+
+.st.dep:
+	    $(STC) $(STCFLAGS) $(STC_MSGFORMAT) $(CFLAGS) -makeDepend $*.st
+
+.st.chk:
+	    $(STC) $(STCFLAGS) $(STC_MSGFORMAT) $(CFLAGS) -check $*.st
+
+.st.note:
+	    $(STC) $(STCFLAGS) $(STC_MSGFORMAT) $(CFLAGS) -check +notice +hint $*.st
+
+.st.cls:
+	    $(TOP)/projects/smalltalk/stx -I -noInfoPrint -q -f $(TOP)/projects/smalltalk/stbc $(STBC_ARGS) $*.st
+
+#.st.cls:
+#            $(TOP)/projects/smalltalk/stx -I -noInfoPrint -q -f $(TOP)/projects/smalltalk/stbc \
+#                                         -s $(TOP)/projects/smalltalk/smalltalk $*.st
+
+#
+# all-rule for Make.protos that dont need one ...
+#
+AIX::   all
+
+HP::    all
+
+HP_ACC32::    all
+
+HP_ACC64::    all
+
+ULTRIX:: all
+
+LINUX_i386:: all
+
+LUNIX_i386_ELF:: all
+
+SGI5::  all
+
+SGI5_gcc::  all
+
+SGI:: all
+
+SGI_gcc:: all
+
+REALIX_88k:: all
+
+SUN_sparc:: all
+
+OSF_ALPHA:: all
+
+#------------------ end of rules/stdRules ---------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/makelib/stdRules_bc	Thu Aug 03 09:37:46 2017 +0100
@@ -0,0 +1,647 @@
+#
+# $Header: /cvs/stx/stx/rules/stdRules_bc,v 1.132 2017-01-19 10:28:06 stefan Exp $
+#
+# MIMEType: application/x-make
+# EOLMode: msdos
+#
+# The name of this rules file is now misleading; it used to be used only for
+# borland, but now also contains visualC and other compiler definitions.
+#
+# defaults to borland-build, unless invoked with either
+#   USEVC=1  - visualC-make
+#   USELCC=1 - lcc make        (suspended work - unfinished)
+#   USETCC=1 - tcc make        (suspended work - unfinished)
+#   USEMINGW64=1 - mingw make  (ongoing work)
+
+COMMONSYMBOLS=+commonSymbols
+
+!ifdef USETCC
+CSUFFIX=c
+!else
+! if defined(USEMINGW32) || defined(USEMINGW64)
+CSUFFIX=sc
+! else
+CSUFFIX=sc
+! endif
+!endif
+
+#STCFLAGS=-H$(STX_INCDIR) -Y$(STX_INCDIR) $(STCLOCALOPT) $(STCOPT) -cSuffix=$(CSUFFIX)
+#no longer use a common include directory - leave header files where the classes are
+#notice: the -Y cares for the common symbol file
+
+!ifndef SCMTYPE
+SCMTYPE=auto
+!endif
+
+STCFLAGS=-Y$(STX_INCDIR) $(STCLOCALOPT) $(STCOPT) $(STC_MSGFORMAT) $(STC_CMD_OPT) -cSuffix=$(CSUFFIX) -scmType: $(SCMTYPE) -sha1
+
+# KEEPCFILE=1
+
+!ifdef USEBC
+
+#------------------------------------------------------------------
+# borland-c defs here ...
+#------------------------------------------------------------------
+
+DEFS=-D_NO_VCL;WIN32;DEBUG;_RTLDLL
+#DEFS=-D_NO_VCL;WIN32;DEBUG
+
+COPTFLAGS=-O2 -5
+#COPTFLAGS=-O2 -5 -r -a4 -b -d -H
+
+#CFLAGS1= -WD -w- -x- -k- -v- -c -tWD
+# -v  source level debugging
+# -y  line number info
+# -k  standard stack frame
+# -x- no exception handling code
+
+! if !$d(CFLAGS1)
+# CFLAGS1= -WD -w- -x- -r- -k -y -v -vi- -c -tWDR
+CFLAGS1= -WD -w- -w-pro -w-ccc -w-rch -w-aus -w-par -x- -r- -k -y -v -vi- -c -tWDR
+! endif
+
+! if !$d(CFLAGS2)
+CFLAGS2= -RT- -Tkh30000
+! endif
+
+CFLAGS=$(CFLAGS1) $(CFLAGS2) $(LOCALINCLUDES) $(CLOCAL_INCL) $(CFLAGS_LOCAL)
+
+! if !$d(LFLAGS)
+LFLAGS = -L$(LIBDIR) -L$(BCB)\lib;$(BCB)\lib\PSDK;$(DEBUGLIBPATH) -ap -Tpd -s -Gn -Gi -v -w-dup $(LIB_BASE_LD_ARG)
+#LFLAGS = -L$(BCB)\lib;$(DEBUGLIBPATH) -ap -Tpd -s -Gn -Gi -M -v -w-dup
+! endif
+
+LD_BASE_ARG=-b:
+LIBFILES=$(LIBDIR)\librun.lib
+
+ALLLIB = $(LIBFILES) $(LOCALLIBS) import32.lib $(IPHLPAPI_LIB) $(RT_LIB)
+!undef USEVC
+!undef USELCC
+
+!else
+! ifdef USEVC
+
+#------------------------------------------------------------------
+# MS visual-C Compiler defs here
+#------------------------------------------------------------------
+DEFS=-lineInfo -stLineInfo
+CDEFS=/D"DEBUG" /D"WIN32" /D"_CONSOLE" /D"VISUALC" /D"__VISUALC__" /D"__i386__"
+
+# O2 - optimize
+# Ob1 - only inline explicit
+
+# COPTFLAGS=/O2
+# COPTFLAGS=/Ox -- does not work !!!
+COPTFLAGS=/ZI
+
+# GF - merge common strings in data space
+# outdated: GZ - no stack checks (done by stx-code itself)
+# EHsc - catch only C++ exceptions. External functions never throw a C++ exception
+# W2 - warnings
+# w - no warnings
+# Oy - no frame pointer
+# Ox - full optimization (=Oy, O2, Og)
+# ZI - debug info
+# Zi - debug info
+
+CDEBUGFLAGS1=/w /GF /EHsc
+CDEBUGFLAGS2=/FR$(OUTDIR)
+CDEBUGFLAGS3=/Fp"$(OUTDIR)$(LIBNAME).pch" /Fd"$(OUTDIR)$(LIBNAME).pdb"
+
+CDEBUGFLAGS=$(CDEBUGFLAGS1) $(CDEBUGFLAGS2) $(CDEBUGFLAGS3) $(LOCALINCLUDES) $(CLOCAL_INCL) $(CFLAGS_LOCAL)
+
+LD_BASE_ARG=/BASE:
+
+! else
+!  ifdef USELCC
+
+#------------------------------------------------------------------
+# LCC defs here (not yet supported)
+#------------------------------------------------------------------
+DEFS=-DWIN32 -D__LCC__ -DDEBUG
+CFLAGS=-nw $(CFLAGS1) $(CFLAGS2) $(LOCALINCLUDES) $(CLOCAL_INCL) $(CFLAGS_LOCAL)
+LFLAGS = -L$(LIBDIR) $(LIB_BASE_LD_ARG)
+LD_BASE_ARG=-b:
+LIBFILES=$(LIBDIR_LIBRUN)\librun.lib
+
+ALLLIB = $(LIBFILES) $(LOCALLIBS) $(IPHLPAPI_LIB) $(RT_LIB)
+
+!  else
+!   ifdef USETCC
+
+#------------------------------------------------------------------
+# TCC defs here (not yet supported)
+#------------------------------------------------------------------
+DEFS=-DWIN32 -D__TCC__ -DDEBUG
+CFLAGS=$(CFLAGS1) $(CFLAGS2) $(LOCALINCLUDES) $(CLOCAL_INCL) $(CFLAGS_LOCAL)
+LFLAGS = -L$(LIBDIR) $(LIB_BASE_LD_ARG)
+LIBFILES=$(LIBDIR_LIBRUN)\librun.lib
+# no resource compiler
+RESFILES=
+
+ALLLIB = $(LIBFILES) $(LOCALLIBS) $(IPHLPAPI_LIB) $(RT_LIB)
+
+!   else
+!    ifdef USEMINGW32
+
+#------------------------------------------------------------------
+# MINGW32 defs here
+#------------------------------------------------------------------
+DEFS=-DWIN32 -D__MINGW__ -D__MINGW32__ -DDEBUG
+CFLAGS=$(CFLAGS1) $(CFLAGS2) $(LOCALINCLUDES) $(CLOCAL_INCL) $(CFLAGS_LOCAL)
+LFLAGS = -L$(LIBDIR) $(LIB_BASE_LD_ARG)
+LIBFILES=$(LIBDIR_LIBRUN)\librun.lib
+# no resource compiler
+RESFILES=
+
+ALLLIB = $(LIBFILES) $(LOCALLIBS) $(IPHLPAPI_LIB) $(SYS_LIB_FLAGS) $(RT_LIB)
+
+!    else
+!     ifdef USEMINGW64
+
+#------------------------------------------------------------------
+# MINGW64 defs here
+#------------------------------------------------------------------
+DEFS=-DWIN32 -D__MINGW__ -D__MINGW64__ -DDEBUG
+#CFLAGS=-O $(CFLAGS1) $(CFLAGS2) $(LOCALINCLUDES) $(CLOCAL_INCL) $(CFLAGS_LOCAL)
+#CFLAGS=-g $(CFLAGS1) $(CFLAGS2) $(LOCALINCLUDES) $(CLOCAL_INCL) $(CFLAGS_LOCAL)
+CWARNFLAGS=-Wno-int-conversion -Wno-pointer-to-int-cast -Wno-incompatible-pointer-types
+CFLAGS=-O2 $(CFLAGS1) $(CFLAGS2) $(CWARNFLAGS) $(LOCALINCLUDES) $(CLOCAL_INCL) $(CFLAGS_LOCAL)
+LFLAGS=-g $(LIB_BASE_LD_ARG)
+LFLAGS2=-L$(LIBDIR)
+LIBFILES=$(LIBDIR_LIBRUN)/librun.lib
+
+ALLLIB = $(LIBFILES) $(LOCALLIBS) $(IPHLPAPI_LIB) $(SYS_LIB_FLAGS) $(RT_LIB)
+
+!     else
+error error error
+!     endif
+!    endif
+!   endif
+!  endif
+! endif
+!endif
+
+#
+# create a symbolic link to the shared library in the projects/smalltalk/packages
+# folder. This folder can later be scanned quickly and presented in the Launcher's
+# load package menu item.
+#
+REGISTERED_PACKAGES_DIR=$(TOP)\projects\smalltalk\packages
+
+registerClassLib: $(REGISTERED_PACKAGES_DIR)
+	@echo "registering $(MODULE):$(MODULE_DIR)/$(LIBNAME) in $(REGISTERED_PACKAGES_DIR)"
+	@-if exist $(REGISTERED_PACKAGES_DIR)\$(LIBNAME).dll del $(REGISTERED_PACKAGES_DIR)\$(LIBNAME).dll
+	@echo "lib ..\..\..\..\$(MODULE)\$(MODULE_PATH)\$(OUTDIR)$(LIBNAME).dll" > $(REGISTERED_PACKAGES_DIR)\$(LIBNAME).dll
+
+registerApplication:
+	@if "$(APPNAME)" NEQ "" $(MAKE) -N -f bc.mak $(USE_ARG) registerApplicationN
+
+registerApplicationN: $(REGISTERED_PACKAGES_DIR)
+	@echo "registering $(MODULE):$(MODULE_DIR)/$(PROJECT_NOCONSOLE) in $(REGISTERED_PACKAGES_DIR)"
+	@-if exist $(REGISTERED_PACKAGES_DIR)\$(PROJECT_NOCONSOLE) del $(REGISTERED_PACKAGES_DIR)\$(PROJECT_NOCONSOLE)
+	@echo "app ..\..\..\..\$(MODULE)\$(MODULE_PATH)\$(OUTDIR)$(APPNAME)" > $(REGISTERED_PACKAGES_DIR)\$(APPNAME)
+
+$(REGISTERED_PACKAGES_DIR):
+	@-if not exist $(REGISTERED_PACKAGES_DIR)\nul mkdir $(REGISTERED_PACKAGES_DIR)\.
+
+$(LIBDIR_PARENT):
+	@-if not exist $(LIBDIR_PARENT)\nul mkdir $(LIBDIR_PARENT)\.
+
+$(LIBDIR): $(LIBDIR_PARENT)
+	@-if not exist $(LIBDIR)\nul mkdir $(LIBDIR)\.
+
+$(OUTDIR):
+	@-if not exist $(OUTDIR)nul mkdir $(OUTDIR:/=)
+
+$(OUTDIR)$(LIBNAME).lib : $(OUTDIR)$(LIBNAME).dll
+
+$(BINDIR)\include:
+	@if not exist $(BINDIR)\include\nul mkdir $(BINDIR)\include
+
+!ifdef USEBC
+
+$(OUTDIR)$(LIBNAME).dll : $(OUTDIR) $(DEF_FILE) $(OBJS) $(RESFILES) $(LIBFILES) $(LIBINIT_FILE)
+	@echo generating $(LIBNAME).dll / .lib [bc link] ...
+	@type &&!
+	$(LINK32) $(LFLAGS) +
+	    c0d32.obj $(LIBINIT_FILE) $(IOBJS) $(OBJS) , +
+	    $(OUTDIR)$(LIBNAME).dll,, +
+	    $(ALLLIB) $(X11_LIBS), +
+	    $(DEF_FILE), +
+	    $(RESFILES)
+!
+    $(LINK32) @&&!
+	$(LFLAGS) +
+	c0d32.obj $(LIBINIT_FILE) $(IOBJS) $(OBJS) , +
+	$(OUTDIR)$(LIBNAME).dll,, +
+	$(ALLLIB) $(X11_LIBS), +
+	$(DEF_FILE), +
+	$(RESFILES)
+!
+	del $(OUTDIR)$(LIBNAME).tds
+	$(MAKE) -f bc.mak registerClassLib
+
+# CLIB_STARTUP=c0d32.obj
+CLIB_STARTUP=
+
+cLibRule:
+	@echo generating $(CLIB).dll / .lib [cLibRule clib bc link] ...
+	@type &&!
+	$(LFLAGS) +
+	    $(CLIB_STARTUP) $(COBJS) , +
+	    $(CLIB).dll,, +
+	    $(CLINK_LIBS), +
+	    $(CDEF_FILE), +
+	    $(CRESFILES)
+!
+    $(LINK32) @&&!
+	$(LFLAGS) +
+	$(CLIB_STARTUP) $(COBJS) , +
+	$(CLIB).dll,, +
+	$(CLINK_LIBS), +
+	$(CDEF_FILE), +
+	$(CRESFILES)
+!
+
+!else
+! ifdef USEVC
+
+$(OUTDIR)$(LIBNAME).dll : $(OUTDIR) $(OBJS) $(LIBINIT_FILE) $(RESFILES) $(LIBFILES)
+	@-if not exist $(OUTDIR)nul mkdir $(OUTDIR:/=)
+	@-if not exist $(LIBDIR)nul mkdir $(LIBDIR)\.
+	@echo generating $(LIBNAME).dll / .lib [vc link] ...
+	@echo RESFILES= $(RESFILES)
+	@type &&!
+	$(LINK32) /DEF:$(DEF_FILE)
+	    $(LINK32_FLAGS)
+	    $(ALLLIB) $(X11_LIBS) $(LIBINIT_FILE) $(IOBJS)
+	    $(OBJS)
+	    $(DEF_FILE)
+	    $(RESFILES)
+!
+	@echo linking...
+	$(LINK32) /DEF:$(DEF_FILE) @&&!
+	    $(LINK32_FLAGS) $(ALLLIB) $(X11_LIBS) $(LIBINIT_FILE) $(IOBJS) $(OBJS) $(RESFILES)
+	$(MAKE) -f bc.mak registerClassLib
+!
+
+cLibRule:
+	@echo generating $(CLIB).dll / .lib [cLibRule vc link] ...
+	@type &&!
+	$(LINK32) $(LINK32_FLAGS)
+	    $(CLINK_LIBS)
+	    $(COBJS)
+	    $(CDEF_FILE)
+	    $(CRESFILES)
+!
+    @echo linking...
+    $(LINK32) /DEF:$(CDEF_FILE) @&&!
+	$(LINK32_FLAGS) $(CLINK_LIBS) $(COBJS) $(CRESFILES)
+!
+
+! else
+!  ifdef USELCC
+
+$(OUTDIR)$(LIBNAME).dll : $(OUTDIR) $(DEF_FILE) $(OBJS) $(RESFILES) $(LIBINIT_FILE) $(LIBFILES)
+	@echo generating $(LIBNAME).dll / .lib [lcc link] ...
+	$(LINK32_DLL) \
+	    $(LFLAGS_DLL) \
+	    $(LIBINIT_FILE) $(IOBJS) $(OBJS) \
+	    $(ALLLIB) $(X11_LIBS) \
+	    $(RESFILES) \
+	    -o $(OUTDIR)$(LIBNAME).dll
+
+	@-del $(OUTDIR)$(LIBNAME).exp
+	@-del $(OUTDIR)$(LIBNAME).lib
+	$(MAKE) -f bc.mak registerClassLib
+
+# additional rule to convert visual-c lib files into lcc format
+$(TOP)\$(LIBDIR_PARENT)\lcc\librun.lib: $(TOP)\$(LIBDIR_PARENT)\vc\librun.lib
+	@-if not exist $(TOP)\$(LIBDIR_PARENT)\nul mkdir $(TOP)\$(LIBDIR_PARENT).
+	@-if not exist $(TOP)\$(LIBDIR_PARENT)\lcc\nul mkdir $(TOP)\$(LIBDIR_PARENT)\lcc.
+	$(LCCBINDIR)\pedump /exp $(TOP)\$(LIBDIR_PARENT)\vc\librun.lib > $(TOP)\$(LIBDIR_PARENT)\lcc\librun.exp
+	$(LCCBINDIR)\buildlib $(TOP)\$(LIBDIR_PARENT)\lcc\librun.exp $(TOP)\$(LIBDIR_PARENT)\lcc\librun.lib
+
+!  else
+!   ifdef USETCC
+
+$(OUTDIR)$(LIBNAME).dll : $(OUTDIR) $(DEF_FILE) $(OBJS) $(RESFILES) $(LIBINIT_FILE) $(LIBFILES)
+	@echo generating $(LIBNAME).dll / .lib [tcc link] ...
+	$(LINK32) -shared \
+	    $(LFLAGS) \
+	    $(LIBINIT_FILE) $(IOBJS) $(OBJS) \
+	    $(ALLLIB) $(X11_LIBS) \
+	    $(RESFILES) \
+	    -o $(OUTDIR)$(LIBNAME).dll
+
+	del $(OUTDIR)$(LIBNAME).lib
+	$(MAKE) -f bc.mak registerClassLib
+
+# additional rule to copy visual-c lib files into tcc folder
+$(TOP)\$(LIBDIR_PARENT)\tcc\librun.lib: $(TOP)\$(LIBDIR_PARENT)\vc\librun.lib
+	@-if not exist $(TOP)\$(LIBDIR_PARENT)\nul mkdir $(TOP)\$(LIBDIR_PARENT).
+	@-if not exist $(TOP)\$(LIBDIR_PARENT)\mingw\nul mkdir $(TOP)\$(LIBDIR_PARENT)\mingw.
+	copy $(TOP)\$(LIBDIR_PARENT)\vc\librun.lib $(TOP)\$(LIBDIR_PARENT)\tcc\librun.lib
+
+!   else
+!    if defined(USEMINGW32) || defined(USEMINGW64) || defined(USEMINGW)
+
+$(OUTDIR)$(LIBNAME).dll : $(OUTDIR) $(DEF_FILE) $(OBJS) $(RESFILES) $(LIBINIT_FILE) $(LIBFILES)
+	@echo generating $(LIBNAME).dll / .lib [mingw link] ...
+	type &&!
+	    $(LINK32_DLL)  \
+	    $(LFLAGS_DLL) -L$(MINGWDIR)\lib \
+	    $(LIBINIT_FILE) $(IOBJS) $(OBJS) \
+	    $(ALLLIB) $(X11_LIBS) \
+	    -o $(OUTDIR)$(LIBNAME).dll
+!
+	$(LINK32_DLL) $(LFLAGS_DLL) -L$(MINGWDIR)\lib @&&$
+		$(LIBINIT_FILE) $(IOBJS) $(OBJS)
+$ \
+		$(ALLLIB) $(X11_LIBS) -o $(OUTDIR_SLASH)$(LIBNAME).dll
+
+	$(MAKE) -f bc.mak registerClassLib
+
+cLibRule:
+	@echo generating $(CLIB).dll / .lib [cLibRule mingw link] ...
+	@echo COBJS=$(COBJS)
+	type &&!
+	    $(LINK32_DLL) $(LFLAGS_DLL) -L$(MINGWDIR)\lib \
+	    $(COBJS) \
+	    $(CLINK_LIBS) \
+	    -o $(CLIB).dll
+!
+	$(LINK32_DLL) $(LFLAGS_DLL) -L$(MINGWDIR)\lib \
+	    $(COBJS) $(CLINK_LIBS) -o $(CLIB).dll
+
+!    else
+
+error error error
+
+!    endif
+!   endif
+!  endif
+! endif
+!endif
+
+iObjs : $(IOBJS) $(WIN32_IOBJS)
+
+$(BINDIR)\$(LIBNAME).dll: $(OUTDIR)$(LIBNAME).dll
+	-copy $(OUTDIR)$(LIBNAME).dll $(BINDIR)
+
+$(LIBDIR)\$(LIBNAME).lib: $(OUTDIR)$(LIBNAME).lib
+	-copy $(OUTDIR)$(LIBNAME).lib $(LIBDIR)
+	-touch $(LIBDIR)\$(LIBNAME).lib
+
+# full:
+#    in addition to all, this also builds support stuff needed
+#    by some subsystems using ant and possibly other tools.
+#    for now, this is libjava only
+full::   all
+
+lib: $(BINDIR)\$(LIBNAME).dll
+
+cleanjunk:
+	-del *.sbr
+	-del *.pdb $(OBJDIR)\*.pdb
+	-del *.ilk
+	-del *.sc
+	-del ntLibInit.c
+	-del MAKE*.@@@
+	-del *.$$$$$
+
+clean_obj: cleanjunk
+	-del $(OBJDIR)\*.$(O) $(OBJDIR)\*.obj $(OBJDIR)\*.map $(OBJDIR)\*.tds $(OBJDIR)\*.$(RES)
+	-del $(OBJDIR)\*.sbr $(OBJDIR)\*.idb $(OBJDIR)\*.exp
+	-del *.$(O) *.map *.tds *.$(RES) *.ilk
+
+clean:: clean_obj
+	-del .\#*.*
+	-del *.sc
+	-del ntLibInit.c
+	-del MAKE0000.@@@
+	-del *.$$$$$
+	-del *.$$$
+
+clobber:: clean
+	-del $(OBJDIR)\*.dll $(OBJDIR)\*.lib $(OBJDIR)\*.ilk $(OBJDIR)\*.exp $(OBJDIR)\*.pdb $(OBJDIR)\*.map
+	-del objbc\*.dll objbc\*.lib objbc\*.ilk objbc\*.exp objbc\*.obj objbc\*.pdb objbc\*.map
+	-del objmingw\*.dll objmingw\*.o objmingw\*.lib objmingw\*.ilk objmingw\*.exp objmingw\*.obj objmingw\*.pdb objmingw\*.map
+	-del objvc\*.dll objvc\*.lib objvc\*.ilk objvc\*.exp objvc\*.obj objvc\*.pdb objvc\*.map
+	-del objtcc\*.dll objtcc\*.lib objtcc\*.o
+	-del objlcc\*.dll objlcc\*.lib objlcc\*.obj objlcc\*.exp
+	-rd /S /Q objbc objvc objtcc objlcc obj objmingw
+	-del *.dll *.lib *.sth *.sav
+
+!ifdef USEBC
+
+.SUFFIXES: .st .$(CSUFFIX) .c .cc .$(O)
+
+.$(CSUFFIX).I:
+    cpp32 $(STX_INCL) $(SYS_INCL) $(FFLAGS) $(DEFS) $(COPTFLAGS) $(DBGFLAGS) $(CFLAGS) $<
+
+.$(CSUFFIX).$(O):
+    $(CC) $(STX_INCL) $(SYS_INCL) $(FFLAGS) $(DEFS) $(COPTFLAGS) $(DBGFLAGS) $(CFLAGS) -c -o$@ $<
+
+.st.$(O):
+    $(STC) $(STX_INCL) $(FFLAGS) $(STCFLAGS) $(STC_MSGFORMAT) $(DBGFLAGS) $(DEFS) -C $<
+    $(CC) $(STX_INCL) $(SYS_INCL) $(FFLAGS) $(DEFS) $(COPTFLAGS) $(DBGFLAGS) $(CFLAGS) -c -o$@ $&.$(CSUFFIX)
+!  ifndef KEEPCFILE
+    del $&.$(CSUFFIX)
+!  endif
+
+.st.$(CSUFFIX):
+    $(STC) $(FFLAGS) $(STCFLAGS)  $(STC_CMD_OPT) $(STC_MSGFORMAT) $(DBGFLAGS) $(DEFS) -C $<
+
+# disabled? - leads to double-compile trouble?
+#.st.$(H):
+#    $(STC) $(FFLAGS) $(STCFLAGS) $(STC_MSGFORMAT) $(DBGFLAGS) $(DEFS) -C -headerOnly $<
+
+
+.c.obj:
+    $(CC) $(STX_INCL) $(SYS_INCL) $(FFLAGS) $(DEFS) $(COPTFLAGS) $(DBGFLAGS) $(CFLAGS) -c -o$@ $<
+
+!else
+! ifdef USEVC
+
+.SUFFIXES: .st .sc .c .cc .obj
+
+.st.obj:
+    $(STC) $(STX_INCL) $(FFLAGS) $(STCFLAGS) $(STC_MSGFORMAT) $(DBGFLAGS) $(DEFS) -C $<
+    $(CC) /nologo $(STX_INCL) $(SYS_INCL) $(FFLAGS) $(CDEFS) $(COPTFLAGS) $(DBGFLAGS) $(CDEBUGFLAGS) -c /Fo$*.obj /Tc$&.$(CSUFFIX)
+!  ifndef KEEPCFILE
+    del $&.$(CSUFFIX)
+!  endif
+
+#.st.asm:
+#    $(STC) $(STX_INCL) $(FFLAGS) $(STCFLAGS) $(STC_MSGFORMAT) $(DBGFLAGS) $(DEFS) -C $<
+#    $(CC) /nologo $(STX_INCL) $(SYS_INCL) $(FFLAGS) /Fa /Fs $(DEFS) $(COPTFLAGS) $(DBGFLAGS) $(CDEBUGFLAGS) -c $*.c
+
+.st.$(CSUFFIX):
+    $(STC) $(STX_INCL) $(SYS_INCL) $(FFLAGS) $(STCFLAGS) $(STC_MSGFORMAT) $(DBGFLAGS) $(DEFS) -C $<
+
+#.c.asm:
+#    $(CC) /nologo $(STX_INCL) $(SYS_INCL) $(FFLAGS) /Fa /Fs $(CDEFS) $(COPTFLAGS) $(DBGFLAGS) $(CDEBUGFLAGS) -c $<
+
+.$(CSUFFIX).$(O):
+    $(CC) /nologo $(STX_INCL) $(SYS_INCL) $(FFLAGS) $(CDEFS) $(COPTFLAGS) $(DBGFLAGS) $(CDEBUGFLAGS) -c /Fo$*.$(O) /Tc$<
+
+.c.$(O):
+    $(CC) /nologo $(STX_INCL) $(SYS_INCL) $(FFLAGS) $(CDEFS) $(COPTFLAGS) $(DBGFLAGS) $(CDEBUGFLAGS) -c  /Fo$*.$(O) /Tc$<
+
+.$(CSUFFIX).i:
+    $(CC) /nologo $(STX_INCL) $(SYS_INCL) $(FFLAGS) $(CDEFS) $(COPTFLAGS) $(DBGFLAGS) $(CDEBUGFLAGS) /EP /Tc$< >$*.i
+
+
+! else
+!  ifdef USELCC
+
+.SUFFIXES: .st .c .sc .$(O)
+
+.sc.$(O):
+    $(CC) $(STX_INCL) $(SYS_INCL) $(FFLAGS) $(DEFS) $(COPTFLAGS) $(DBGFLAGS) $(CFLAGS) -c $<
+
+.c.$(O):
+    $(CC) $(STX_INCL) $(SYS_INCL) $(FFLAGS) $(DEFS) $(COPTFLAGS) $(DBGFLAGS) $(CFLAGS) -c -o $*.$(O) $<
+
+.st.$(O):
+    $(STC) $(STX_INCL) $(FFLAGS) $(STCFLAGS) $(STC_MSGFORMAT) $(DBGFLAGS) $(DEFS) -C $<
+    $(CC) $(STX_INCL) $(SYS_INCL) $(FFLAGS) $(DEFS) $(COPTFLAGS) $(DBGFLAGS) $(CFLAGS) -c -o $*.$(O) $&.$(CSUFFIX)
+!  ifndef KEEPCFILE
+    del *.$(CSUFFIX)
+!  endif
+
+.st.$(CSUFFIX):
+    $(STC) $(FFLAGS) $(STCFLAGS) $(STC_MSGFORMAT) $(DBGFLAGS) $(DEFS) -C $<
+
+!  else
+!   ifdef USETCC
+
+.SUFFIXES: .st .c .sc .$(O)
+
+.st.$(O):
+    $(STC) $(STX_INCL) $(FFLAGS) $(STCFLAGS) $(STC_MSGFORMAT) $(DBGFLAGS) $(DEFS) -C $<
+    $(CC) $(STX_INCL) $(SYS_INCL) $(FFLAGS) $(DEFS) $(COPTFLAGS) $(DBGFLAGS) $(CFLAGS) -c -o $*.$(O) $&.$(CSUFFIX)
+!  ifndef KEEPCFILE
+    del *.$(CSUFFIX)
+!  endif
+
+.st.$(CSUFFIX):
+    $(STC) $(FFLAGS) $(STCFLAGS) $(STC_MSGFORMAT) $(DBGFLAGS) $(DEFS) -C $<
+
+.c.$(O):
+    $(CC) $(STX_INCL) $(SYS_INCL) $(FFLAGS) $(DEFS) $(COPTFLAGS) $(DBGFLAGS) $(CFLAGS) -c -o $@ $<
+
+.sc.$(O):
+    $(CC) $(STX_INCL) $(SYS_INCL) $(FFLAGS) $(DEFS) $(COPTFLAGS) $(DBGFLAGS) $(CFLAGS) -c -o $@ $<
+
+!   else
+!    if defined(USEMINGW32) || defined(USEMINGW64) || defined(USEMINGW)
+
+# .SUFFIXES: .st $(CSUFFIX) .c .sc .s .$(O) .i
+.SUFFIXES: .st .c .$(O) .i
+
+.st.$(O):
+    $(STC) $(STX_INCL) $(FFLAGS) $(STCFLAGS) $(STC_MSGFORMAT) $(DBGFLAGS) $(DEFS) -C $<
+! ifdef KEEPCFILE
+    copy $&.$(CSUFFIX) $&.c
+! else
+    ren $&.$(CSUFFIX) $&.c
+! endif
+    $(CC) $(STX_INCL) $(SYS_INCL) $(FFLAGS) $(DEFS) $(COPTFLAGS) $(DBGFLAGS) $(CFLAGS) -c -o $*.$(O) $&.c
+    del $&.c
+
+.st.$(CSUFFIX):
+    $(STC) $(STX_INCL) $(FFLAGS) $(STCFLAGS) $(STC_MSGFORMAT) $(DBGFLAGS) $(DEFS) -C $<
+
+.c.$(O):
+    $(CC) $(STX_INCL) $(SYS_INCL) $(FFLAGS) $(DEFS) $(COPTFLAGS) $(DBGFLAGS) $(CFLAGS) -c -o $@ $<
+
+#.sc.$(O):
+#       $(CC) $(STX_INCL) $(SYS_INCL) $(FFLAGS) $(DEFS) $(COPTFLAGS) $(DBGFLAGS) $(CFLAGS) -c -o $@ $<
+
+#.c.i:
+#       $(CC) $(STX_INCL) $(SYS_INCL) $(FFLAGS) $(DEFS) $(COPTFLAGS) $(DBGFLAGS) $(CFLAGS) -E $< > $*.i
+
+.$(CSUFFIX).$(O):
+    copy $&.$(CSUFFIX) $&.c
+    $(CC) $(STX_INCL) $(SYS_INCL) $(FFLAGS) $(DEFS) $(COPTFLAGS) $(DBGFLAGS) $(CFLAGS) -c -o $@ $&.c
+    del $&.c
+
+.$(CSUFFIX).s:
+    $(CC) $(STX_INCL) $(SYS_INCL) $(FFLAGS) $(DEFS) $(COPTFLAGS) $(DBGFLAGS) $(CFLAGS) -S $<
+
+!    else
+
+error error error
+
+!    endif
+!   endif
+!  endif
+! endif
+!endif
+
+!ifdef USEBC
+
+.SUFFIXES: .rc .res
+
+.rc.res:
+	$(RC) -I$(BCB)\include $&.rc @&&|
+$(RCINCLUDEPATH)
+| -fo$@
+
+!else
+! ifdef USEVC
+
+.SUFFIXES: .rc .res
+
+.rc.res:
+	$(RC) /fo $@ $&.rc
+
+! else
+!  ifdef USELCC
+
+.SUFFIXES: .rc .res
+
+.rc.res:
+	$(RC) $&.rc
+
+!  else
+!   ifdef USETCC
+
+# no resource compiler ?
+
+!   else
+!    if defined(USEMINGW32) || defined(USEMINGW64)
+
+.suffixes .rc .$(RES)
+
+.rc.$(RES):
+	$(RC) -D__MINGW__=1 --input="$<" --output="$@"
+
+.suffixes .rc .res
+
+.rc.res:
+	$(RC) -D__MINGW__=1 --input="$<" --output="$@"
+
+#.rc.res:
+#        echo "xxx RC is " $(RC)
+#        $(RC) $&.rc -o $&.o
+#        -ren $&.o $&.res
+
+!    else
+error error error
+!    endif
+!   endif
+!  endif
+! endif
+!endif
+
+$(OUTDIR)ntLibInit.$(O): ntLibInit.c
+
+ntLibInit.c:  libInit.cc
+	-copy libInit.cc ntLibInit.c
+
+buildDate.h: $(GENDATE_UTILITY)
+	call $(GENDATE_UTILITY)
--- a/rakelib/compile.rake	Mon Jul 31 23:03:46 2017 +0100
+++ b/rakelib/compile.rake	Thu Aug 03 09:37:46 2017 +0100
@@ -83,7 +83,7 @@
     'librun.a',
     'symlist.c',
     'Make.proto',
-    'Makefile',
+    'makefile',
   ]
   LIBRUN_BINARY_FILES2 = []
 elsif win32?
@@ -203,29 +203,11 @@
   task :'application' => :'setup:dependencies'
 
 
-  case
-  when unix?
-    task :'config' => [ STX_CONF_DIR / 'COMMON' / 'defines',
+  
+  if unix?
+    mkdir_p STX_CONF_DIR
                         STX_CONF_DIR / 'vendorConf',
-                        STX_CONF_DIR / 'myConf' ,
-
-                        STX_RULES_DIR / 'stdRules' ]
-
-
-    task STX_RULES_DIR / 'stdRules' do
-      # Sigh, yet another hack here. For a funny reason, target newobj depends on .o files
-      # and not on target objs. The problem is that some of the .o may need some third party
-      # library being built before (for example, stx:libview2 requires libjpeg-9 being built 
-      # before!). To workaround this, we have to patch the rule so it depends on target `objs`
-      # which depends on `pre_objs` that builds libraries. Triple sigh here. I should fork rules
-      # directory...
-      sed('newobj: $(LIBNAME)Init.c $(LINKOBJS)' , 'newobj: $(LIBNAME)Init.c objs $(LINKOBJS)', STX_RULES_DIR / 'stdRules', true)
-      
-      # Yet another hack to pass absolute filenames when compiling. This should help Jenkins's 
-      # Warning plugin correctly locate files mentioned in compile log - it cannot deal with relative paths
-      # (as it cannot track compilation process's working directory, naturally)
-      sed(' $(STFILE)', ' $(PWD)/$(STFILE)', STX_RULES_DIR / 'stdRules', true) 
-    end
+                        STX_CONF_DIR / 'myConf' ]
 
     directory STX_CONF_DIR do | t |
       mkdir_p t.name()
@@ -261,8 +243,8 @@
           # Do not edit! Automatically generated by rake (rakelib/#{__FILE__})
           #
           TOP ?= #{BUILD_DIR / 'stx'}
-          MAKELIB_DIR ?= $(TOP)/#{makelib_dir}
-          include $(MAKELIB_DIR)/config-#{os}-#{ARCH}.make          
+          MAKELIB ?= $(TOP)/#{makelib_dir}
+          include $(MAKELIB)/config-#{os}-#{ARCH}.make          
           CONTENTS
       end
     end
@@ -274,22 +256,7 @@
           #           
           CONTENTS
       end
-    end
-  when win32?
-    task :'config' => [ STX_RULES_DIR / 'stdRules_bc_mingwhack.txt' ]
-
-    file STX_RULES_DIR / 'stdRules_bc_mingwhack.txt' do
-      File.open( STX_RULES_DIR / 'stdRules_bc', 'a') do | f |
-        f.puts "!if defined(USEMINGW32) || defined(USEMINGW64)"
-        f.puts "CFLAGS=#{GCC_CFLAGS} $(CFLAGS1) $(CFLAGS2) $(LOCALINCLUDES) $(CLOCAL_INCL) $(CFLAGS_LOCAL)"
-        f.puts "!endif"
-      end
-      File.open( STX_RULES_DIR / 'stdRules_bc_mingwhack.txt', 'a') do | f |
-        f.puts "stdRules_bc CFLAGS already fixed"
-      end
-    end
-  else
-    error "Unsuported platform: #{Config::CONFIG['host_os']}"
+    end  
   end
 
   rule 'makefile' do | t |
--- a/specs/baseline.rbspec	Mon Jul 31 23:03:46 2017 +0100
+++ b/specs/baseline.rbspec	Thu Aug 03 09:37:46 2017 +0100
@@ -50,16 +50,45 @@
 
     file BUILD_DIR / 'stx' / 'rules'  => BUILD_DIR do | t |
       checkout :'exept:public', 'stx/rules'
-      if unix? then        
-        chdir BUILD_DIR / 'stx' / 'rules'  do
-          rm_f 'stmkmf'
+      top = "#{File.absolute_path(BUILD_DIR).gsub("/", "\\")}\\stx"
+      chdir BUILD_DIR / 'stx' / 'rules'  do          
+        rm_f 'stmkmf'
+        rm_f 'stdHeader'
+        rm_f 'stdHeader2'
+        rm_f 'stdRules'
+        rm_f 'stdHeader_bc'
+        rm_f 'stdRules_bc'
+        if unix? then                
           # Argh, cannot use ln_s as it cannot make symlinks with relative
           # paths. Sigh, 
           sh "ln -s \'../../../bin/stmkmf.rb\' stmkmf"
         end
+      
+        if win32? then
+          File.open('stdHeader_bc', "w") do | f |
+            f.puts <<-CONTENTS      
+# Do not edit! Automatically generated by rake (rakelib/#{__FILE__})
+#
+!IF !defined(TOP) 
+TOP=#{top}
+!ENDIF
+MAKELIB = $(TOP)\\..\\..\\makelib
+!INCLUDE $(MAKELIB)\\stdHeader_bc
+CONTENTS
+          end
+          File.open('stdRules_bc', "w") do | f |
+            f.puts <<-CONTENTS      
+# Do not edit! Automatically generated by rake (rakelib/#{__FILE__})
+#
+!IF !defined(TOP) 
+TOP=#{top}
+!ENDIF
+MAKELIB = $(TOP)\\..\\..\\makelib
+!INCLUDE $(MAKELIB)\\stdRules_bc
+CONTENTS
+          end
+        end
       end
-      # the clear is here to avoid multiple checkouts
-      t.clear()
     end
 
     file BUILD_DIR / 'stx' / 'RELEASE'  => BUILD_DIR do | t |