Merge feature-block-in-context
authorJan Vrany <jan.vrany@fit.cvut.cz>
Wed, 01 Feb 2017 22:20:35 +0000
branchfeature-block-in-context
changeset 160 95149f95cb5c
parent 159 cbc152f322a8 (current diff)
parent 123 1929fa1590da (diff)
child 161 cfc0b59da7a9
Merge
specs/stx-jv.rbspec
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/makelib/README.md	Wed Feb 01 22:20:35 2017 +0000
@@ -0,0 +1,25 @@
+# Makefile library for Smalltalk/X jv-branch
+
+This directory contains makefile definitions 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`. 
+
+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
+eXept's definition. The plan is eventually to clean them up to the point
+we understand how it works and then rewrite build process of individual 
+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)
+
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/makelib/config-linux-i386.make	Wed Feb 01 22:20:35 2017 +0000
@@ -0,0 +1,74 @@
+# linux-elf/amd64_mode32: cpu: athlon64 in 32 bit mode os:linux-ELF options: +commonSymbol
+#
+#------------------ start of linux/amd64_mode32 ---------------------
+#
+# $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
+
+CONF=config-linux-i386
+
+COMMONSYMBOLS=+commonSymbols
+SAVECOMMONSYMBOLS=+saveCommonSymbols
+STCARCHOPT=+sharedLibCode -staticMethods $(COMMONSTCCONFOPT)
+STC_LEXLIB=libfl/libfl_pic.a
+# STC_LEXLIB=-lfl
+
+DEFS=-D__amd64_mode32__ -DELF
+DLDEFS=-DHAS_DLOPEN
+
+
+#
+# ATTENTION: with gcc3.2 fPIC + O6 generates wrong code in stc - sigh
+#
+CCCONFOPT=-m32
+OPT=-fPIC -O2 -fomit-frame-pointer -fno-stack-protector
+# avoid tree-loop-vectorize in librun for now as is makes librun/md5.c segfault
+# also, do not call it tree-loop-vectorize, but combine tree-vectorize 
+# and ftree-slp-vectorize for gcc version before 4.9
+# LIBRUN_OPT=$(OPT) -fno-tree-vectorize -ftree-slp-vectorize
+LIBRUN_OPT=-fPIC -O0 -fomit-frame-pointer -fno-stack-protector -fno-tree-vectorize
+AS_CC=as
+AS_CC_CFLAG=
+ASFLAGS=--32
+
+
+# LD=ld -m elf_i386
+# STC_LD=ld -m elf_i386
+STC_LDFLAGS=$(CCCONFOPT) -L/usr/lib -Llib -L/usr/local/lib -L/usr/X11/lib
+CLASSLIB_LD=ld -m elf_i386
+LDFLAGS=$(CCCONFOPT) -Llib -L/usr/local/lib -L/usr/X11/lib -L/usr/lib \
+	-Wl,-rpath,'$$ORIGIN',-rpath,'$$ORIGIN/lib',-rpath,'$$ORIGIN/../lib' 
+LD_REL_FLAG=-r
+
+#OPTIONAL_DL_LIB=-ldl
+#OPTIONAL_LIBDL_TARGET=libdld
+
+TARGET_RULE_EXTENSION=_shared
+O_EXT=.so
+# name of object files in binary directory
+BIN_O=.so
+
+MAKE_ZLIB_ARG= -f Makefile.amd64_mode32
+MAKE_BZ2LIB_ARG= -f Makefile.amd64_mode32
+
+# We have problems with FFI as of 2008-12-01
+# Remove the follwoing lines when the problems have been fixed
+#FFI_OBJS=
+#OPTIONAL_HAVE_FFI_ARG=
+#OPTIONAL_FFI_TARGET_IN_LIBRUN=
+# END FFI kludge
+FFI_CFLAGS=$(CCCONFOPT)
+#------------------ end of linux-elf/amd64_mode32 ---------------------
+OPT?=-pipe -fno-omit-frame-pointer -fno-stack-protector -fno-strict-aliasing -fwrapv -fPIC -O -ggdb3
+LIBRUN_OPT?=$(OPT)
+O_RULE=__STANDARD_O_RULE__
+EXTRA_LIBS=-ldl -lX11 -lXext
+
+# Following is a workaround for Debian / Ubuntu boxes. 
+# 
+ifeq ($(wildcard /usr/lib/i386-linux-gnu/libXft.so),) 
+ifeq ($(wildcard /usr/lib/i386-linux-gnu/libXft.so.2),/usr/lib/i386-linux-gnu/libXft.so.2) 
+LIB_XFT=-l:libXft.so.2 -l:libfontconfig.so.1
+endif
+endif
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/makelib/config-linux-x86_64.make	Wed Feb 01 22:20:35 2017 +0000
@@ -0,0 +1,89 @@
+# linux-elf/x86_64: cpu: x86_64 in 64 bit mode os:linux-ELF options: +commonSymbol
+#
+#------------------ start of linux/x86_64 ---------------------
+#
+# $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
+
+CONF=config-linux-x86_64
+
+COMMONSYMBOLS=+commonSymbols
+SAVECOMMONSYMBOLS=+saveCommonSymbols
+STCARCHOPT=+sharedLibCode -staticMethods $(COMMONSTCCONFOPT)
+STC_LEXLIB=-lfl
+
+CPU_INTERN_H=cpu_x86_64.h
+
+DEFS=-D__x86_64__
+CCCONFOPT=-m64 -fPIC
+
+DLDEFS=-DHAS_DLOPEN
+
+NOSTDLIB=
+
+LDFLAGS=-Llib -L/usr/local/lib -L/usr/X11/lib \
+	-Wl,-z,now,-Bsymbolic,-rpath,'$$ORIGIN',-rpath,'$$ORIGIN/lib',-rpath,'$$ORIGIN/../lib'
+EXTRA_SHARED_LIBS=-ldl
+
+#
+# ATTENTION: with gcc3.2 fPIC + O6 generates wrong code in stc - sigh
+# gcc toplevel-reorder breaks relative function offset generation (leads to SIGSEGV)
+OPT=-O2 -fno-toplevel-reorder -fno-stack-protector
+
+# workaround for failing longjmp check: undefine FORTIFY_SOURCE, which is enabled by default on Gentoo. Remove when fixed.
+LIBRUN_OPT=-g -O -fno-stack-protector -U_FORTIFY_SOURCE -Wno-comment -Wno-pointer-sign -Wno-unused-variable -Wno-unused-parameter -Wno-unused-label -Wall
+
+#OPTIONAL_DL_LIB=-ldl
+#OPTIONAL_LIBDL_TARGET=libdld
+
+TARGET_RULE_EXTENSION=_shared
+O_EXT=.so
+# name of object files in binary directory
+BIN_O=.so
+
+# We have problems with FFI as of 2008-12-01
+# Remove the follwoing lines when the problems have been fixed
+FFI_OBJS=
+OPTIONAL_HAVE_FFI_ARG=
+OPTIONAL_FFI_TARGET_IN_LIBRUN=
+# END FFI kludge
+
+# LIBJPEG=$(LIBJPEG_DIR)/libjpeg.a
+# LIBJPEG_FOR_COPY=$(LIBJPEG_DIR)/libjpeg.a
+# LIBJPEG_FOR_LINK=$(LIBJPEG_DIR)/libjpeg.a
+
+
+# a netsnmp library
+#
+# if already in /usr/lib:
+# DYNAMIC_LINK_LIB_NETSNMP=-lnetsnmp
+# STATIC_LINK_LIB_NETSNMP=
+# TARGET_LIB_NETSNMP=
+#
+# if a local one should be built and used (for 64bit, no -lrt is needed):
+DYNAMIC_LINK_LIB_NETSNMP=-L$(NETSNMP_LIBDIR)/.libs -L$(NETSNMP_LIBDIR) $(NETSNMP_LIBDIR)/.libs/libnetsnmp.a
+
+
+MATRIXLOCK_DIR=$(TOP)/../exept/setup/ml
+MATRIXLOCK_LIB_ARG=-L$(MATRIXLOCK_DIR)/lib -lmxlin64260
+MATRIXLOCK_SHARED_LIB_ARG=-lusb
+
+#.SUFFIXES: .o .so
+
+#.o.so:
+#	@-rm -f $*.so
+#	$(LD) -shared $(LDFLAGS) -o $*.so $*.o $(LOCAL_SHARED_LIBS)
+
+#------------------ end of linux-elf/x86_64 ---------------------
+OPT?=-pipe -fno-omit-frame-pointer -fno-stack-protector -fno-strict-aliasing -fwrapv -fPIC  -ggdb3
+LIBRUN_OPT?=$(OPT)
+O_RULE=__STANDARD_O_RULE__
+EXTRA_LIBS=-ldl -lX11 -lXext
+MAKE_ZLIB_ARG= "CFLAGS=-fPIC -O3 -DUSE_MMAP"
+FFI_OBJS=$(FFI_DIR)/build/src/*.o $(FFI_DIR)/build/src/x86/*.o
+FFI_DIR=libffi-3.0.10rc8
+OPTIONAL_HAVE_FFI_ARG=-DHAVE_FFI -I$(TOP)/librun/$(FFI_DIR)/build/include
+OPTIONAL_FFI_TARGET_IN_LIBRUN=ffi
+FFI_CC="$(CC) -m64 -fPIC"
+FFI_LD="ld -m elf_x84_64"
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/makelib/config-linux.make	Wed Feb 01 22:20:35 2017 +0000
@@ -0,0 +1,268 @@
+#------------------ 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
+
+CONF_VENDOR=linux
+
+ARCH=linux
+ARCH_NAME=linux_elf
+DISTRIB_NAME=demoLinuxELF
+
+CCARCHCOMMONOPT=-DELF
+#RELOCINSTVARS=+relocInstvars
+
+INTERN_H=linuxIntern.h
+CPU_INTERN_H=cpu_i386.h
+CPUINTERN_H=$(INCLUDE)/linuxIntern.h
+
+MAKEFILE_EXTENSION=linux-elf
+TARGET_RULE_EXTENSION=_shared
+# ALL_TARGET=LINUX_i386_ELF
+
+MAKEFLAGS += --no-print-directory
+MAKE_INCLUDE=include
+INSTALL=install
+INSTALL_BIN_CMD=install -s -m 0755
+INSTALL_SCRIPT_CMD=install -m 0755
+COMPRESSOR=gzip
+COMPRESSED_FILETYPE=targz
+SETUP_RULE=setup_linux
+
+CC=gcc
+
+STC_LEXLIB=
+STC_OPT=-O -fno-stack-protector
+
+# There are problems with -O3 in gcc3.0, gcc3.3, gcc3.3.1
+LIBRUN_OPT=-O2 -fPIC -fomit-frame-pointer -fno-stack-protector
+OS=-DLINUX
+
+FFI_ARCH=x86
+FFI_CFLAGS=
+FFI_DIR=libffi-3.0.10rc8
+FFI_OBJS=$(FFI_DIR)/build/src/*.o $(FFI_DIR)/build/src/x86/*.o
+OPTIONAL_HAVE_FFI_ARG=-DHAVE_FFI -I$(TOP)/librun/$(FFI_DIR)/build/include
+OPTIONAL_FFI_TARGET_IN_LIBRUN=ffi
+FFI_CC="gcc -m32"
+FFI_LD='ld -m elf_i386'
+
+OBJNAME=.o
+BIN_O=.so
+O_EXT=.so
+SA_EXT=.so
+SO_NAME=.so
+
+#
+# use static librt for clock_gettime().
+# dynamic librt causes libpthread to be loaded that does not
+# work with stx' stack layout
+#
+
+OTHERLIBS=-ldl -Wl,-Bstatic,-lrt,-Bdynamic
+OTHERLIBS=-ldl -lrt
+OTHERLIBS=-ldl -lrt -lc
+STATIC_OTHERLIBS=
+LDFLAGS=-Llib -L/usr/local/lib -L/usr/X11/lib \
+	-Wl,-z,now,-rpath,'$$ORIGIN',-rpath,'$$ORIGIN/lib',-rpath,'$$ORIGIN/../lib',--wrap=memcpy
+
+SPECIAL_LIBRUN_RULE=allLINUX
+LIBRUNTARGET=librun.so
+
+FORCE_LINK_LIBRUN=1
+
+# mhm - these should now only be in libview!
+LIBVIEW_EXTRA_TARGETS=$(WORKSTAT1).so $(WORKSTAT2).so
+
+ARCH_LIBSNMP=$(TOP)/libsnmp
+ARCH_CLASSLIBDIRS=$(ARCH_LIBSNMP)
+
+#
+# where are the X libraries if we need them:
+#
+XDEFS=-DSHAPE -DXINERAMA -DXFT -DHAVE_FONTCONFIG
+XINCLUDE+=$(shell pkg-config --cflags xft)
+
+LIB_X=-lX11
+LIB_XEXT=-lXext
+LIB_XT= -lXt
+LIB_XAW=-lXaw
+LIB_XMU=-lXmu
+LIB_XMU=-lXt
+LIB_XINERAMA=-lXinerama
+LIB_XFT=$(shell pkg-config --libs xft)
+
+EXTRA_LIBS= -lX11 -lXext
+STATIC_EXTRA_LIBS= -lX11 -lXext
+
+X_LIB_DIR=/usr/X11/lib
+JPEGLIB_LD_ARG=
+LIBJPEG_DIR=$(TOP)/support/libjpeg-9
+JPEG_INCLUDE=-I$(LIBJPEG_DIR)
+
+LIBJPEG=$(LIBJPEG_DIR)/.libs/libjpeg.a
+LIBJPEG_FOR_COPY=$(LIBJPEG_DIR)/.libs/libjpeg.a
+LIBJPEG_FOR_LINK=$(LIBJPEG_DIR)/.libs/libjpeg.a
+
+#
+# a netsnmp library
+#
+# if already in /usr/lib:
+# DYNAMIC_LINK_LIB_NETSNMP=-lnetsnmp
+# STATIC_LINK_LIB_NETSNMP=
+# TARGET_LIB_NETSNMP=
+#
+# if a local one should be built and used:
+DYNAMIC_LINK_LIB_NETSNMP=-L$(NETSNMP_LIBDIR)/.libs -L$(NETSNMP_LIBDIR) $(NETSNMP_LIBDIR)/.libs/libnetsnmp.a -lrt
+STATIC_LINK_LIB_NETSNMP=
+TARGET_LIB_NETSNMP=snmplib
+
+
+STATIC_LIB_X   =$(X_LIB_DIR)/libX11.a
+STATIC_LIB_XEXT=$(X_LIB_DIR)/libXext.a
+STATIC_LIB_XT  =$(X_LIB_DIR)/libXt.a
+STATIC_LIB_XAW =$(X_LIB_DIR)/libXaw.a
+STATIC_LIB_XMU =$(X_LIB_DIR)/libXmu.a
+
+# the following defs are for using the system's usb lib (only needed in some apps);
+USB_LIB_DIR=
+USB_LIB_ARG=-lusb
+USB_LIB_DIR_ARG=-L/usr/lib
+USB_MAKE_TARGET=
+
+MATRIXLOCK_DIR=$(TOP)/../exept/setup/ml
+MATRIXLOCK_LIB_ARG=-L$(MATRIXLOCK_DIR)/lib -lmxlin260 -lusb
+
+NOSTDLIB=-nostdlib
+
+#
+# an extra rule for shared objects
+#
+.SUFFIXES: .a .o .so
+# use -nostdlib in combination with -lc -lgcc: we actually use some functions (like fstat) from libc (-lc)
+# and gcc (-lgcc) provides some low level routines that should be around
+.o.so:
+	@-rm -f $*.so
+	$(LD) $(NOSTDLIB) -shared $(LDFLAGS) -o $*.so $*.o $(LOCAL_SHARED_LIBS) $(EXTRA_SHARED_LIBS) -lc -lgcc
+
+.a.so:
+	rm -f $*.so
+	rm -rf tmp.a.so
+	mkdir tmp.a.so
+	cd tmp.a.so; $(AR) x ../$*.a
+	@-rm -f $*.so
+	$(LD) $(NOSTDLIB) -shared $(LDFLAGS) -o $*.so tmp.a.so/*.o $(LOCAL_SHARED_LIBS) $(EXTRA_SHARED_LIBS) -lc -lgcc
+	rm -rf tmp.a.so
+
+SHAREDLIBRULE=linuxSharedLib
+linuxSharedLib:
+	@-rm -f $(LIB)
+	$(LD) $(NOSTDLIB) -shared $(LDFLAGS) -o $(LIB) $(OBJS) $(LOCAL_SHARED_LIBS) $(EXTRA_SHARED_LIBS) -lc -lgcc
+
+#.st.s2:
+#       $(STC) $(STCFLAGS) $(CFLAGS) -C $*.st
+#       $(CC) $(CFLAGS) -S $*.c
+#       @-echo " stripping off useless .align directives ..."
+#       sed "/.align 4/d" < $*.s > $*.s2
+
+#.SUFFIXES: .s2 .s3
+#
+#.s2.s3:
+#       @-echo "   removing useless jumps ..."
+#       awk -f $(TOP)/rules/i386.script.awk < $*.s2 > $*.s3
+
+#
+# extra rules for space-optimized/speed-optimized modules modules
+#
+.SUFFIXES: .st .spc .spd
+
+.st.spc:
+	$(MAKE) STC_OPT="$(STC_OPT)" OPT="$(OPT)" STCOPT="$(STCOPT)" STFILE=$* KEEP=y __SPACEOPT_O_RULE__
+
+.st.spd:
+	$(MAKE) STC_OPT="$(STC_OPT)" OPT="$(OPT)" STCOPT="$(STCOPT)" STFILE=$* KEEP=y __SPEEDOPT_O_RULE__
+
+VERYBIG_STFILE_RULE=__VERYBIG_RULE__
+__VERYBIG_RULE__:
+	$(MAKE) $(O_RULE) STFILE=$(BIG_FILE) CC="$(CC)" STC_OPT="$(STC_OPT) -Os" OPT="$(OPT) -Os" SEPINITCODE="$(SEPINITCODE)"
+
+LONGNAME_RULE=__NORMAL_RULE2__
+__NORMAL_RULE2__:
+	$(MAKE) $(O_RULE) STFILE=$(LONGNAME_FILE) CC="$(CC)" STC_OPT="$(STC_OPT)" OPT="$(OPT)" SEPINITCODE="$(SEPINITCODE)"
+
+
+#AWK_VERBOSE=1
+AWK_DIFF=
+AWK_FIX=$(TOP)/rules/i386fixELF.awk
+
+SPACEOPT_O_RULE=__SPACEOPT_O_RULE__
+__SPACEOPT_O_RULE__:
+	@$(MAKE) STC=$(STC) CC=$(CC) STCOPT="$(STCOPT)" SEPINITCODE="$(SEPINITCODE)" $(STFILE).s
+	@-if [ -f $(STFILE).s ]; then \
+	    awk -f $(AWK_FIX) < $(STFILE).s > $(STFILE).s2; \
+	    if [ "$(AWK_DIFF)" != "" ]; then \
+		diff $(STFILE).s $(STFILE).s2; \
+	    fi; \
+	    if [ "$(AWK_VERBOSE)" != "" ]; then \
+		echo "# optimized $(STFILE).s -> $(STFILE).s2"; \
+		tail -5 $(STFILE).s2; \
+		echo; \
+	    fi; \
+	    $(AS) $(ASFLAGS) -o $(STFILE).o $(STFILE).s2; \
+	fi
+	@-if [ -f i_$(STFILE).s ]; then \
+	    awk -f $(AWK_FIX) < i_$(STFILE).s > i_$(STFILE).s2; \
+	    if [ "$(AWK_DIFF)" != "" ]; then \
+		diff i_$(STFILE).s i_$(STFILE).s2; \
+	    fi; \
+	    if [ "$(AWK_VERBOSE)" != "" ]; then \
+		echo "# optimized i_$(STFILE).s -> i_$(STFILE).s2"; \
+		tail -5 i_$(STFILE).s2; \
+		echo; \
+	    fi; \
+	    $(AS) $(ASFLAGS) -o i_$(STFILE).o i_$(STFILE).s2; \
+	fi
+	@if [ "$(KEEP)" != "y" ]; then \
+	    rm -f $(STFILE).s $(STFILE).s2 i_$(STFILE).s i_$(STFILE).s2; \
+	fi
+
+
+.SUFFIXES: .st .s2
+
+.st.s2:
+	@$(MAKE) $(SPEEDOPT_O_RULE) STCOPT="$(STCOPT)" KEEP=y STFILE=$* SEPINITCODE="$(SEPINITCODE)"
+
+SPEEDOPT_O_RULE=__SPEEDOPT_O_RULE__
+__SPEEDOPT_O_RULE__:
+	@$(MAKE) STC=$(STC) CC=$(CC) STCOPT="$(STCOPT)" SEPINITCODE="$(SEPINITCODE)" $(STFILE).s
+	@-if [ -f $(STFILE).s ]; then \
+	    awk -f $(AWK_FIX) < $(STFILE).s > $(STFILE).s2; \
+	    if [ "$(AWK_DIFF)" != "" ]; then \
+		diff $(STFILE).s $(STFILE).s2; \
+	    fi; \
+	    if [ "$(AWK_VERBOSE)" != "" ]; then \
+		echo "# optimized $(STFILE).s -> $(STFILE).s2"; \
+		tail -5 $(STFILE).s2; \
+		echo; \
+	    fi; \
+	    $(AS) $(ASFLAGS) -o $(STFILE).o $(STFILE).s2; \
+	fi
+	@-if [ -f i_$(STFILE).s ]; then \
+	    awk -f $(AWK_FIX) < i_$(STFILE).s > i_$(STFILE).s2; \
+	    if [ "$(AWK_DIFF)" != "" ]; then \
+		diff i_$(STFILE).s i_$(STFILE).s2; \
+	    fi; \
+	    if [ "$(AWK_VERBOSE)" != "" ]; then \
+		echo "# optimized i_$(STFILE).s -> i_$(STFILE).s2"; \
+		tail -5 i_$(STFILE).s2; \
+		echo; \
+	    fi; \
+	    $(AS) $(ASFLAGS) -o i_$(STFILE).o i_$(STFILE).s2; \
+	fi
+	@if [ "$(KEEP)" != "y" ]; then \
+	    rm -f $(STFILE).s $(STFILE).s2 i_$(STFILE).s i_$(STFILE).s2; \
+	fi
+
+O_RULE=$(SPEEDOPT_O_RULE)
+
+#------------------ end of linux-elf/COMMON/defines ---------------------
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/makelib/config.make	Wed Feb 01 22:20:35 2017 +0000
@@ -0,0 +1,1250 @@
+#------------------ start of COMMON/defines ---------------------
+#
+# MIMEType: application/x-make (for editor to knows the comment chars)
+#
+# $Header: /cvs/stx/stx/configurations/COMMON/defines,v 1.136 2016-11-08 09:37:06 cg Exp $
+#
+# NOTICE:
+#   all of these definitions can be overwritten in
+#       vendor/COMMON/defines
+#   and/or in
+#     vendor/configuration/defines
+#
+# do not change anything here, but create a new configuration file
+# redefining only things that need to be.
+# Since Makefiles are created by sequentially concatenating
+# the various 'defines'-files, almost everything can be redefined
+
+# This file sets up defaults which fit on most systems -
+# see redefinitions in vendor-define, config-define or individual Make.proto files
+
+#
+# target for local make
+#
+TARGET_DIR=$(TOP)/projects/smalltalk
+
+#-------------
+# optional subPackages
+# can be redefined to empty in concrete packages
+#-------------
+
+OPTIONAL_GOODIES_BENCHMARKS=benchmarks
+OPTIONAL_GOODIES_PATHS=paths
+OPTIONAL_GOODIES_TGEN=tgen
+OPTIONAL_SUPPORT_UTILITIES=
+
+OPTIONAL_LIBJAVA=libjava
+
+# ------------
+# architecture
+# ------------
+
+ARCH=unknown
+
+# -------------
+# how to deploy
+# redefined in mac to "dmg"
+# -------------
+DEPLOY_PACKAGE=tgz
+
+# --------
+# commands
+# --------
+
+SHELL=/bin/sh
+# MAKE is defined implicitly by make or gmake. Do not define here!
+# MAKE=make
+
+# c-compiler to use
+CC=cc
+AS_CC=$(CC)
+AS_CC_CFLAG=-c
+CPP=/lib/cpp
+
+# assembler for librun/asmhelp
+AS=as
+
+# linker for final executable
+LD=$(CC)
+# linker for classlibs
+CLASSLIB_LD=ld
+
+# lex (can be replaced by flex)
+LEX=lex
+
+# yacc (can be replaced by bison)
+YACC=yacc
+
+# librarian
+AR=ar
+AR_LIB_FLAG=r
+RANLIB=ranlib
+
+# symbolic link
+LNS=ln -s
+
+# misc
+STRIP=strip
+DIRNAME=dirname
+#
+# all BSD-based expr-implementations are missing the substring function
+#
+# RIGHTSTR="expr substr"
+RIGHTSTR=$(TOP)/rules/rightstr
+TOUCH=touch
+
+# installer (to bring files to the INSTALLTOPDIR)
+INSTALL=cp
+INSTALL_BIN_CMD=$(INSTALL)
+INSTALL_SCRIPT_CMD=$(INSTALL)
+INSTALL_LIB_CMD=$(INSTALL)
+INSTALL_AUX_CMD=$(INSTALL)
+COMPRESSOR=
+COMPRESSED_FILETYPE=
+
+# in a vendorConf, you can define:
+#
+# INSTALL=install
+# INSTALL_BIN_CMD=install -s -m 0555
+# INSTALL_LIB_CMD=install -m 0444
+# INSTALL_AUX_CMD=install -m 0444
+
+#
+# programs to install
+#
+INSTALL_PROGS=$(PROGS)
+
+# --------------
+# compiler flags
+# --------------
+
+# stc default optimization
+
+DEFAULT_STCOPT=+optinline
+STCOPT=$(DEFAULT_STCOPT)
+
+# default stc optimization to use in various lib-directories
+# (used in Make.protos)
+
+LIBBASIC_STCOPT=$(DEFAULT_STCOPT) +optinline2 -warnNonStandard
+LIBBOSS_STCOPT=$(LIBBASIC_STCOPT)
+LIBBASIC2_STCOPT=+optspace2 -warnNonStandard
+LIBBASIC3_STCOPT=+optspace2 -warnNonStandard
+LIBCOMP_STCOPT=$(DEFAULT_STCOPT) -warnNonStandard
+LIBVIEW_STCOPT=$(DEFAULT_STCOPT) -warnNonStandard
+LIBVIEW2_STCOPT=+optspace2 -warnNonStandard
+LIBWIDG_STCOPT=+optspace2 -warnNonStandard
+LIBWIDG2_STCOPT=+optspace2
+LIBWIDG3_STCOPT=+optspace3 -warnNonStandard
+#LIBUI_STCOPT=+optspace2 -warnNonStandard
+LIBUI_STCOPT=-warnNonStandard
+LIBHTML_STCOPT=+optspace2 -warnNonStandard
+LIBTOOL_STCOPT=+optspace2 -warnNonStandard -warnUnusedLocals -warnUseBeforeSet
+LIBTOOL2_STCOPT=+optspace3 -warnNonStandard
+LIBTABLE_STCOPT=+optspace2 -warnNonStandard
+CLIENT_STCOPT=+optspace2
+GOODIES_STCOPT=+optspace2
+
+# common for all:
+STCCOMMONOPT=
+CCCOMMONOPT=$(OPTIONAL_HAVE_FFI_ARG)
+
+# to be redefined in arch/COMMON/defines
+STCARCHCOMMONOPT=
+CCARCHCOMMONOPT=
+
+# top be redefined in arch/<conf>/defines
+STCARCHOPT=
+CCARCHOPT=
+
+# this could be set per-configuration:
+# STCCONFOPT=
+
+# this could be set per-subdirectory:
+# STCLOCALOPT=
+
+
+# all st-objects depend on these:
+
+STCHDR=$(INCLUDE)/stc.h $(INCLUDE)/stcIntern.h $(CPUINTERN_H)
+
+# compile librun with -DDEBUG
+
+DBG=-DDEBUG
+
+#
+# some c-preprocessors have a bug in not handling too-deeply nested
+# include files. If yours does, some classes have to be compiled with a
+# special STC flag, to produce a different kind of header-definition file
+# If your machine is one of those, add a line as:
+#   LIMITSUPERINCLUDE=+limitSuperInclude
+# to the corresponding defines-file
+LIMITSUPERINCLUDE=
+
+#
+# include path for Xlib
+#
+XINCLUDE=-I/usr/include/X11
+
+# default for 'make includeLink'
+
+#INCLUDELINK_FILES= \
+#       abbrev.stc \
+#       liblist.stc \
+#       symbols.stc
+
+INCLUDELINK_FILES= \
+	symbols.stc
+
+# -------------------------------------------------------------------------
+# normally, the following need not be redefined (they have useful defaults)
+# -------------------------------------------------------------------------
+
+# compiler, linker, cflags and lexlib to use when building stc
+# you could use a different compiler (gcc vs. cc) here.
+# default is to use the same compiler as for classes
+
+STC_CC=$(CC)
+STC_LD=$(STC_CC)
+STC_CFLAGS=$(CFLAGS)
+STC_LEXLIB=-ll
+
+# compiler and optimizer flags to compile main.o
+# default is to use the same compiler as for classes
+
+MAIN_CC=$(CC)
+MAIN_OPT=$(OPT)
+
+# compiler, and optimizer flags for librun
+# default is to use the same compiler as for classes
+
+LIBRUN_CC=$(CC)
+LIBRUN_OPT=$(OPT)
+LIBRUN_SPECIAL_OPT=$(LIBRUN_OPT)
+
+FFI_CC=$(CC)
+FFI_LD=$(LD)
+# if ffi.h is to be included from somewhere else...
+FFI_INCLUDE=
+
+# compiler to use for big-files
+# default is to use the same compiler as for other classes
+
+BIGFILE_CC=$(CC)
+
+# compiler to use for libjpeg
+# (only needed for hp, where standard cc cannot compile libjpeg)
+
+# compiler to use for class libraries
+# the only system, where this is different is (currently) hpux_
+# (their cc crashes for some big files - sigh)
+
+CLASSLIB_CC=$(CC)
+CLASSLIB_OPT=$(OPT)
+STC_OPT=$(OPT)
+
+# compiler to use for particular class libraries
+LIBBASIC_CC=$(CLASSLIB_CC)
+LIBBASIC_OPT=$(CLASSLIB_OPT)
+
+LIBBASIC2_CC=$(CLASSLIB_CC)
+LIBBASIC2_OPT=$(CLASSLIB_OPT)
+
+LIBBASIC3_OPT=$(CLASSLIB_OPT)
+LIBBASIC3_CC=$(CLASSLIB_CC)
+
+LIBCOMP_OPT=$(CLASSLIB_OPT)
+LIBCOMP_CC=$(CLASSLIB_CC)
+
+LIBVIEW_OPT=$(CLASSLIB_OPT)
+LIBVIEW_CC=$(CLASSLIB_CC)
+
+LIBVIEW2_OPT=$(CLASSLIB_OPT)
+LIBVIEW2_CC=$(CLASSLIB_CC)
+
+LIBWIDG_OPT=$(CLASSLIB_OPT)
+LIBWIDG_CC=$(CLASSLIB_CC)
+
+LIBWIDG2_OPT=$(CLASSLIB_OPT)
+LIBWIDG2_CC=$(CLASSLIB_CC)
+
+LIBWIDG3_OPT=$(CLASSLIB_OPT)
+LIBWIDG3_CC=$(CLASSLIB_CC)
+
+LIBTOOL_OPT=$(CLASSLIB_OPT)
+LIBTOOL_CC=$(CLASSLIB_CC)
+
+LIBTOOL2_OPT=$(CLASSLIB_OPT)
+LIBTOOL2_CC=$(CLASSLIB_CC)
+
+LIBUI_OPT=$(CLASSLIB_OPT)
+LIBUI_CC=$(CLASSLIB_CC)
+
+LIBHTML_OPT=$(CLASSLIB_OPT)
+LIBHTML_CC=$(CLASSLIB_CC)
+
+#
+# flag for prelinking
+#
+LD_REL_FLAG=-r
+#
+# additional linker flags for prelinked obj-libraries
+# (used when prelinking object modules)
+#
+LD_OBJ_FLAGS=
+
+#
+# optional rebasing rule (to relocate dll's to disjoint address ranges, if supported by the toolchain).
+# OS X does provide this
+#
+rebaseLibsRule=nullRebaseRule
+rebaseLibsRule_static=nullRebaseRule
+
+# file name extensions
+
+# name of object files
+O=o
+O2=o
+
+# name of archives
+A=a
+
+# name of executables
+EXE=
+
+# name of shared objects
+SO=so
+
+# name of prelinked nonshared objects
+OBJ=obj
+OBJNAME=.obj
+
+# name of individual object files
+BIN_O=.o
+
+# extension of linked object files
+# (usually either '.a', '.o' or '.obj' on static-link systems
+# or '.so' on dynamic link systems.
+# (maybe even '.dll' some time later ...)
+
+# static link with prelinked relocatable modules:
+O_EXT=$(OBJNAME)
+# shared lib link:
+# O_EXT=.$(SO)
+# library link:
+# O_EXT=.$(A)
+
+#
+# location of various subdirs
+#
+
+INCLUDE    = $(TOP)/include
+INCLUDE_IN = $(INCLUDE)
+INCLUDE_OUT= $(INCLUDE)
+CONFTOP    = $(TOP)
+RULETOP    = $(TOP)
+STCDIR     = $(TOP)/stc
+STC        = $(STCDIR)/stc
+
+CONFDIR    = $(CONFTOP)/configurations
+RULEDIR    = $(RULETOP)/rules
+
+LIBBASIC_RELDIR  = libbasic
+LIBBASIC2_RELDIR = libbasic2
+LIBBASIC3_RELDIR = libbasic3
+LIBBOSS_RELDIR   = libboss
+LIBCOMP_RELDIR   = libcomp
+LIBHTML_RELDIR   = libhtml
+LIBVIEW_RELDIR   = libview
+LIBVIEW2_RELDIR  = libview2
+LIBWIDG_RELDIR   = libwidg
+LIBWIDG2_RELDIR  = libwidg2
+LIBWIDG3_RELDIR  = libwidg3
+LIBTOOL_RELDIR   = libtool
+LIBTOOL2_RELDIR  = libtool2
+LIBCOMPAT_RELDIR = libcompat
+LIBUI_RELDIR     = libui
+LIBODBC_RELDIR   = libodbc
+LIBOBJC_RELDIR   = libobjc
+GOODIES_RELDIR   = goodies
+LIBDB_RELDIR     = libdb
+SUNIT_RELDIR     = $(GOODIES_RELDIR) $(GOODIES_RELDIR)/sunit
+RB_RELDIR        = $(GOODIES_RELDIR) $(GOODIES_RELDIR)/refactoryBrowser
+
+LIBRUNDIR    = $(TOP)/librun
+LIBBASICDIR  = $(TOP)/libbasic
+LIBBASIC2DIR = $(TOP)/libbasic2
+LIBBASIC3DIR = $(TOP)/libbasic3
+LIBBOSSDIR   = $(TOP)/libboss
+LIBCOMPDIR   = $(TOP)/libcomp
+LIBHTMLDIR   = $(TOP)/libhtml
+LIBVIEWDIR   = $(TOP)/libview
+LIBVIEW2DIR  = $(TOP)/libview2
+LIBWIDGDIR   = $(TOP)/libwidg
+LIBWIDG2DIR  = $(TOP)/libwidg2
+LIBWIDG3DIR  = $(TOP)/libwidg3
+LIBTOOLDIR   = $(TOP)/libtool
+LIBTOOL2DIR  = $(TOP)/libtool2
+LIBTABLEDIR  = $(TOP)/libtable
+LIBPRODIR    = $(TOP)/libpro
+LIBCOMPATDIR = $(TOP)/libcompat
+LIBUIDIR     = $(TOP)/libui
+LIBODBCDIR   = $(TOP)/libodbc
+CLIENTDIR    = $(TOP)/clients
+LIBOBJCDIR   = $(TOP)/libobjc
+GOODIESDIR   = $(TOP)/goodies
+LIBDBASEDIR  = $(TOP)/goodies/libdbase
+SUNITDIR     = $(TOP)/goodies/sunit
+
+RBDIR        = $(TOP)/goodies/refactoryBrowser
+LIBRB_HELPERSDIR     = $(RBDIR)/helpers
+LIBRB_CHANGESDIR     = $(RBDIR)/changes
+LIBRB_PARSERDIR      = $(RBDIR)/parser
+LIBRB_REFACTORINGDIR = $(RBDIR)/refactoring
+LIBRB_BROWSERDIR     = $(RBDIR)/browser
+
+LIBSCMDIR            = $(TOP)/libscm
+LIBSCM_COMMONDIR     = $(LIBSCMDIR)/common
+LIBSCM_MERCURIALDIR  = $(LIBSCMDIR)/mercurial
+
+#
+# these are not yet released to the public
+#
+LIBCPLUSPLUSDIR = $(TOP)/libc++
+LIBXTDIR        = $(TOP)/libxt
+LIBXMDIR        = $(TOP)/libxm
+
+#
+# your private directories
+#
+# OTHERLIBDIRS are directories to be visited by make
+#
+OTHERLIBDIRS    =
+#
+# OTHERLIBS are libraries to be linked in at the end
+#
+OTHERLIBS       =
+
+MAIN       = $(LIBRUNDIR)/main.c
+#HIDATA     = $(LIBRUNDIR)/hidata.o
+HIDATA=
+
+#
+# object files to include in a classlibrary
+# default is all upper-case .o-files
+#
+LINKOBJS=[A-Z]*.$(O)
+
+SA_EXT=.a
+A_EXT=.a
+STATIC_O_EXT=.o
+
+#
+# libraries as in the development tree;
+#
+LIBRUN   = $(LIBRUNDIR)/librun$(SA_EXT)
+LIBBASIC = $(LIBBASICDIR)/libstx_libbasic$(O_EXT)
+LIBBOSS  = $(LIBBOSSDIR)/libstx_libboss$(O_EXT)
+LIBBASIC2= $(LIBBASIC2DIR)/libstx_libbasic2$(O_EXT)
+LIBBASIC3= $(LIBBASIC3DIR)/libstx_libbasic3$(O_EXT)
+LIBHTML  = $(LIBHTMLDIR)/libstx_libhtml$(O_EXT)
+LIBCOMP  = $(LIBCOMPDIR)/libstx_libcomp$(O_EXT)
+LIBCOMPAT= $(LIBCOMPATDIR)/libstx_libcompat$(O_EXT)
+LIBVIEW  = $(LIBVIEWDIR)/libstx_libview$(O_EXT)
+LIBVIEW2 = $(LIBVIEW2DIR)/libstx_libview2$(O_EXT)
+LIBWIDG  = $(LIBWIDGDIR)/libstx_libwidg$(O_EXT)
+LIBWIDG2 = $(LIBWIDG2DIR)/libstx_libwidg2$(O_EXT)
+LIBWIDG3 = $(LIBWIDG3DIR)/libstx_libwidg3$(O_EXT)
+LIBTOOL  = $(LIBTOOLDIR)/libstx_libtool$(O_EXT)
+LIBTOOL2 = $(LIBTOOL2DIR)/libstx_libtool2$(O_EXT)
+LIBTABLE = $(LIBTABLEDIR)/libstx_libtable$(O_EXT)
+LIBUI    = $(LIBUIDIR)/libstx_libui$(O_EXT)
+LIBDBASE = $(LIBDBASEDIR)/libstx_goodies_libdbase$(O_EXT)
+GOODIES  = $(GOODIESDIR)/libstx_goodies$(O_EXT)
+LIBOBJC  = $(LIBOBJCDIR)/libstx_libobjc$(O_EXT)
+SUNIT    = $(SUNITDIR)/libstx_goodies_sunit$(O_EXT)
+
+LIBRB_HELPERS     = $(LIBRB_HELPERSDIR)/libstx_goodies_refactoryBrowser_helpers$(O_EXT)
+LIBRB_CHANGES     = $(LIBRB_CHANGESDIR)/libstx_goodies_refactoryBrowser_changes$(O_EXT)
+LIBRB_PARSER      = $(LIBRB_PARSERDIR)/libstx_goodies_refactoryBrowser_parser$(O_EXT)
+LIBRB_REFACTORING = $(LIBRB_REFACTORINGDIR)/libstx_goodies_refactoryBrowser_refactoring$(O_EXT)
+LIBRB_BROWSER     = $(LIBRB_BROWSERDIR)/libstx_goodies_refactoryBrowser_browser$(O_EXT)
+
+LIBSCM_COMMON     = $(LIBSCM_COMMONDIR)/libstx_libscm_common$(O_EXT)
+LIBSCM_MERCURIAL  = $(LIBSCM_MERCURIALDIR)/libstx_libscm_mercurial$(O_EXT)
+
+#
+# additional (depreviated or private/experimental)
+# libraries. These are not req'd normally.
+#
+LIBCPLUSPLUS= $(LIBCPLUSPLUSDIR)/libc++$(O_EXT)
+LIBXT       = $(LIBXTDIR)/libxt$(O_EXT)
+LIBXM       = $(LIBXMDIR)/libxm$(O_EXT)
+
+#
+# libraries which are either provided via the support directory
+# or by the system. If a system-library is present, that one should
+# usually be used (and then redefined in a platform-specific defines-file)
+#
+
+# the following defs are for using the provided (not the system) zlib;
+# should work everywhere
+ZLIB_DIR=$(TOP)/support/zlib-1.2.3
+ZLIB_LD_ARG=-L$(ZLIB_DIR) -lz
+ZLIB_MAKE_TARGET=zlib
+
+# the following defs are for using the provided (not the system) bz2lib;
+# should work everywhere
+BZ2LIB_DIR=$(TOP)/support/bz2lib
+BZ2LIB_LD_ARG=-L$(BZ2LIB_DIR) -lbz2
+BZ2LIB_MAKE_TARGET=bz2lib
+
+# the following defs are for NOT using any usb lib (only needed in some apps);
+# redefined in linux configurations, to use the system lib (-lusb)
+USB_LIB_DIR=
+USB_LIB_ARG=
+USB_MAKE_TARGET=
+
+#
+# libraries as linked to the executable.
+# For sharedLib links, these must be in a common
+# lib-subdirectory while being linked,
+# in order to allow those shared libraries to be placed
+# into some other directory (LD_LIBRARY_PATH) later.
+# This is a bit inconvenient - sorry.
+#
+#LINK_LIBDIR = lib/
+#LINK_LIBDIR = .
+LINK_LIBRUN   = $(LINK_LIBDIR)librun$(SA_EXT)
+LINK_LIBBASIC = $(LINK_LIBDIR)libstx_libbasic$(O_EXT)
+LINK_LIBBOSS  = $(LINK_LIBDIR)libstx_libboss$(O_EXT)
+LINK_LIBBASIC2= $(LINK_LIBDIR)libstx_libbasic2$(O_EXT)
+LINK_LIBBASIC3= $(LINK_LIBDIR)libstx_libbasic3$(O_EXT)
+LINK_LIBHTML  = $(LINK_LIBDIR)libstx_libhtml$(O_EXT)
+LINK_LIBCOMP  = $(LINK_LIBDIR)libstx_libcomp$(O_EXT)
+LINK_LIBCOMPAT= $(LINK_LIBDIR)libstx_libcompat$(O_EXT)
+LINK_LIBVIEW  = $(LINK_LIBDIR)libstx_libview$(O_EXT)
+LINK_LIBVIEW2 = $(LINK_LIBDIR)libstx_libview2$(O_EXT)
+LINK_LIBWIDG  = $(LINK_LIBDIR)libstx_libwidg$(O_EXT)
+LINK_LIBWIDG2 = $(LINK_LIBDIR)libstx_libwidg2$(O_EXT)
+LINK_LIBWIDG3 = $(LINK_LIBDIR)libstx_libwidg3$(O_EXT)
+LINK_LIBTOOL  = $(LINK_LIBDIR)libstx_libtool$(O_EXT)
+LINK_LIBTOOL2 = $(LINK_LIBDIR)libstx_libtool2$(O_EXT)
+LINK_LIBTABLE = $(LINK_LIBDIR)libstx_libtable$(O_EXT)
+LINK_LIBUI    = $(LINK_LIBDIR)libstx_libui$(O_EXT)
+LINK_LIBDBASE = $(LINK_LIBDIR)libstx_goodies_libdbase$(O_EXT)
+LINK_GOODIES  = $(LINK_LIBDIR)libstx_goodies$(O_EXT)
+LINK_LIBOBJC  = $(LINK_LIBDIR)libstx_libobjc$(O_EXT)
+LINK_SUNIT    = $(LINK_LIBDIR)libstx_goodies_sunit$(O_EXT)
+
+LINK_LIBRB_HELPERS     = $(LINK_LIBDIR)libstx_goodies_refactoryBrowser_helpers$(O_EXT)
+LINK_LIBRB_CHANGES     = $(LINK_LIBDIR)libstx_goodies_refactoryBrowser_changes$(O_EXT)
+LINK_LIBRB_PARSER      = $(LINK_LIBDIR)libstx_goodies_refactoryBrowser_parser$(O_EXT)
+LINK_LIBRB_REFACTORING = $(LINK_LIBDIR)libstx_goodies_refactoryBrowser_refactoring$(O_EXT)
+LINK_LIBRB_BROWSER     = $(LINK_LIBDIR)libstx_goodies_refactoryBrowser_browser$(O_EXT)
+
+LINK_LIBSCM_COMMON     = $(LINK_LIBDIR)libstx_libscm_common$(O_EXT)
+LINK_LIBSCM_MERCURIAL  = $(LINK_LIBDIR)libstx_libscm_mercurial$(O_EXT)
+
+LINK_LIBCPLUSPLUS= $(LINK_LIBDIR)libc++$(O_EXT)
+LINK_LIBXT       = $(LINK_LIBDIR)libxt$(O_EXT)
+LINK_LIBXM       = $(LINK_LIBDIR)libxm$(O_EXT)
+
+STATIC_LIBRUN      = $(LIBRUNDIR)/librun$(A_EXT)
+STATIC_LIBBASIC    = $(LIBBASICDIR)/libstx_libbasic$(STATIC_O_EXT)
+STATIC_LIBBOSS     = $(LIBBOSSDIR)/libstx_libboss$(STATIC_O_EXT)
+STATIC_LIBBASIC2   = $(LIBBASIC2DIR)/libstx_libbasic2$(STATIC_O_EXT)
+STATIC_LIBBASIC3   = $(LIBBASIC3DIR)/libstx_libbasic3$(STATIC_O_EXT)
+STATIC_LIBHTML     = $(LIBHTMLDIR)/libstx_libhtml$(STATIC_O_EXT)
+STATIC_LIBCOMP     = $(LIBCOMPDIR)/libstx_libcomp$(STATIC_O_EXT)
+STATIC_LIBCOMPAT   = $(LIBCOMPATDIR)/libstx_libcompat$(STATIC_O_EXT)
+STATIC_LIBVIEW     = $(LIBVIEWDIR)/libstx_libview$(STATIC_O_EXT)
+STATIC_LIBVIEW2    = $(LIBVIEW2DIR)/libstx_libview2$(STATIC_O_EXT)
+STATIC_LIBWIDG     = $(LIBWIDGDIR)/libstx_libwidg$(STATIC_O_EXT)
+STATIC_LIBWIDG2    = $(LIBWIDG2DIR)/libstx_libwidg2$(STATIC_O_EXT)
+STATIC_LIBWIDG3    = $(LIBWIDG3DIR)/libstx_libwidg3$(STATIC_O_EXT)
+STATIC_LIBTOOL     = $(LIBTOOLDIR)/libstx_libtool$(STATIC_O_EXT)
+STATIC_LIBTOOL2    = $(LIBTOOL2DIR)/libstx_libtool2$(STATIC_O_EXT)
+STATIC_LIBTABLE    = $(LIBTABLEDIR)/libstx_libtable$(STATIC_O_EXT)
+STATIC_LIBUI       = $(LIBUIDIR)/libstx_libui$(STATIC_O_EXT)
+STATIC_LIBDBASE    = $(LIBDBASEDIR)/libstx_goodies_libdbase$(STATIC_O_EXT)
+STATIC_GOODIES     = $(GOODIESDIR)/libstx_goodies$(STATIC_O_EXT)
+STATIC_LIBOBJC     = $(LIBOBJCDIR)/libstx_libobjc$(STATIC_O_EXT)
+STATIC_SUNIT       = $(SUNITDIR)/libstx_goodies_sunit$(STATIC_O_EXT)
+
+STATIC_LIBRB_HELPERS     = $(LIBRB_HELPERSDIR)/libstx_goodies_refactoryBrowser_helpers$(STATIC_O_EXT)
+STATIC_LIBRB_CHANGES     = $(LIBRB_CHANGESDIR)/libstx_goodies_refactoryBrowser_changes$(STATIC_O_EXT)
+STATIC_LIBRB_PARSER      = $(LIBRB_PARSERDIR)/libstx_goodies_refactoryBrowser_parser$(STATIC_O_EXT)
+STATIC_LIBRB_REFACTORING = $(LIBRB_REFACTORINGDIR)/libstx_goodies_refactoryBrowser_refactoring$(STATIC_O_EXT)
+STATIC_LIBRB_BROWSER     = $(LIBRB_BROWSERDIR)/libstx_goodies_refactoryBrowser_browser$(STATIC_O_EXT)
+
+STATIC_LIBSCM_COMMON     = $(LIBSCM_COMMONDIR)/libstx_libscm_common$(STATIC_O_EXT)
+STATIC_LIBSCM_MERCURIAL  = $(LIBSCM_MERCURIALDIR)/libstx_libscm_mercurial$(STATIC_O_EXT)
+
+STATIC_LIBCPLUSPLUS= $(LIBCPLUSPLUSDIR)/libc++$(STATIC_O_EXT)
+STATIC_LIBXT       = $(LIBXTDIR)/libxt$(STATIC_O_EXT)
+STATIC_LIBXM       = $(LIBXMDIR)/libxm$(STATIC_O_EXT)
+
+# -------------------------------------------
+# various package lists (to link)
+#
+# depending on how the final target is linked,
+# either the normal-classlibrary, the shared classlibrary
+# or the sep-init libraries are used.
+#
+# +sepInit is no longer supported - so it may not work
+# (no known configurations uses it currently)
+# -------------------------------------------
+REFACTORY_DIR        = $(LIBRB_HELPERSDIR) $(LIBRB_CHANGESDIR) $(LIBRB_REFACTORINGDIR) $(LIBRB_PARSERDIR) $(LIBRB_BROWSERDIR)
+REFACTORY_LIB        = $(LIBRB_HELPERS) $(LIBRB_CHANGES) $(LIBRB_REFACTORING) $(LIBRB_PARSER) $(LIBRB_BROWSER)
+REFACTORY_LIST       = libstx_goodies_refactoryBrowser_helpers libstx_goodies_refactoryBrowser_changes libstx_goodies_refactoryBrowser_refactoring libstx_goodies_refactoryBrowser_parser libstx_goodies_refactoryBrowser_browser
+LINK_REFACTORY_LIB   = $(LINK_LIBRB_HELPERS) $(LINK_LIBRB_CHANGES) $(LINK_LIBRB_REFACTORING) $(LINK_LIBRB_PARSER) $(LINK_LIBRB_BROWSER)
+STATIC_REFACTORY_LIB = $(STATIC_LIBRB_HELPERS) $(STATIC_LIBRB_CHANGES) $(STATIC_LIBRB_REFACTORING) $(STATIC_LIBRB_PARSER) $(STATIC_LIBRB_BROWSER)
+
+SUNIT_DIR        = $(SUNITDIR)
+SUNIT_LIB        = $(SUNIT)
+SUNIT_LIST       = libstx_goodies_sunit
+LINK_SUNIT_LIB   = $(LINK_SUNIT)
+STATIC_SUNIT_LIB = $(STATIC_SUNIT)
+
+LIBSCM_DIR        = $(LIBSCM_COMMONDIR) $(LIBSCM_MERCURIALDIR)
+LIBSCM_LIB        = $(LIBSCM_COMMON) $(LIBSCM_MERCURIAL)
+LIBSCM_LIST       = libstx_libscm_common libstx_libscm_mercurial
+LINK_LIBSCM_LIB   = $(LINK_LIBSCM_COMMON) $(LINK_LIBSCM_MERCURIAL)
+STATIC_LIBSCM_LIB = $(STATIC_LIBSCM_COMMON) $(STATIC_LIBSCM_MERCURIAL)
+
+#
+# barebones
+#   absolute minimum - no compiler i.e. no rc files etc.
+#
+BARE_DIR        = $(LIBBASICDIR) $(PRIVATEOBJ)
+BARE_RELDIR     = $(LIBBASIC_RELDIR)
+BARE_LIB        = $(LIBBASIC) $(PRIVATEOBJ)
+BARE_LIST       = libstx_libbasic $(PRIVATELIBS)
+LINK_BARE_LIB   = $(LINK_LIBBASIC) $(LINK_PRIVATE)
+STATIC_BARE_LIB = $(STATIC_LIBBASIC) $(STATIC_PRIVATE)
+
+#
+# minitalk (non GUI) uses this
+#   minimum needed for non GUI applications
+#
+MINI_DIR        = $(BARE_DIR) $(LIBCOMPDIR)
+MINI_RELDIR     = $(BARE_RELDIR) $(LIBCOMP_RELDIR)
+MINI_LIB        = $(BARE_LIB) $(LIBCOMP)
+MINI_LIST       = $(BARE_LIST) libstx_libcomp
+LINK_MINI_LIB   = $(LINK_BARE_LIB) $(LINK_LIBCOMP)
+STATIC_MINI_LIB = $(STATIC_BARE_LIB) $(STATIC_LIBCOMP)
+
+#
+# fundamental components
+#   all that is needed for typical GUI applications
+#
+FUNDAMENTAL_DIR       = $(MINI_DIR) $(LIBBASIC2DIR) $(LIBVIEWDIR) $(LIBVIEW2DIR) $(LIBWIDGDIR) $(LIBWIDG2DIR) $(LIBUIDIR)
+FUNDAMENTAL_RELDIR    = $(MINI_RELDIR) $(LIBBASIC2_RELDIR) $(LIBVIEW_RELDIR) $(LIBVIEW2_RELDIR) $(LIBWIDG_RELDIR) $(LIBWIDG2_RELDIR) $(LIBUI_RELDIR)
+FUNDAMENTAL_LIB       = $(MINI_LIB) $(LIBBASIC2) $(LIBVIEW) $(LIBVIEW2) $(LIBWIDG) $(LIBWIDG2) $(LIBUI)
+FUNDAMENTAL_LIST      = $(MINI_LIST) libstx_libbasic2 libstx_libview libstx_libview2 libstx_libwidg libstx_libwidg2 libstx_libui
+LINK_FUNDAMENTAL_LIB  = $(LINK_MINI_LIB) $(LINK_LIBBASIC2) $(LINK_LIBVIEW) $(LINK_LIBVIEW2) $(LINK_LIBWIDG) $(LINK_LIBWIDG2) $(LINK_LIBUI)
+STATIC_FUNDAMENTAL_LIB= $(STATIC_MINI_LIB) $(STATIC_LIBBASIC2) $(STATIC_LIBVIEW) $(STATIC_LIBVIEW2) $(STATIC_LIBWIDG) $(STATIC_LIBWIDG2) $(STATIC_LIBUI)
+
+#
+# development components
+#   all that is needed for typical GUI applications PLUS development classes
+#
+DEVELOP_DIR        = $(FUNDAMENTAL_DIR) $(LIBBASIC3DIR) $(REFACTORY_DIR) $(LIBTOOLDIR) $(LIBSCM_DIR) $(SUNITDIR)
+DEVELOP_RELDIR     = $(FUNDAMENTAL_RELDIR) $(LIBBASIC3_RELDIR) $(REFACTORY_RELDIR) $(LIBTOOL_RELDIR) $(LIBSCM_RELDIR) $(SUNIT_RELDIR)
+DEVELOP_LIB        = $(FUNDAMENTAL_LIB) $(LIBBASIC3) $(REFACTORY_LIB) $(LIBTOOL) $(LIBSCM_LIB) $(SUNIT_LIB)
+DEVELOP_LIST       = $(FUNDAMENTAL_LIST) libstx_libbasic3 $(REFACTORY_LIST) libstx_libtool $(LIBSCM_LIST) $(SUNIT_LIST)
+LINK_DEVELOP_LIB   = $(LINK_FUNDAMENTAL_LIB) $(LINK_LIBBASIC3) $(LINK_REFACTORY_LIB) $(LINK_LIBTOOL) $(LINK_LIBSCM_LIB) $(LINK_SUNIT_LIB)
+STATIC_DEVELOP_LIB = $(STATIC_FUNDAMENTAL_LIB) $(STATIC_LIBBASIC3) $(STATIC_REFACTORY_LIB) $(STATIC_LIBTOOL) $(STATIC_LIBSCM_LIB) $(STATIC_SUNIT_LIB)
+
+#
+# standard components
+#   all that is needed for typical GUI applications PLUS development classes
+#   PLUS persistency PLUS html stuff PLUS some less frequently used classes
+#
+STANDARD_DIR        = $(DEVELOP_DIR) $(LIBTOOL2DIR) $(LIBHTMLDIR) $(LIBBOSSDIR)
+STANDARD_RELDIR     = $(DEVELOP_RELDIR) $(LIBTOOL2_RELDIR) $(LIBHTML_RELDIR) $(LIBBOSS_RELDIR)
+STANDARD_LIB        = $(DEVELOP_LIB) $(LIBTOOL2) $(LIBHTML) $(LIBBOSS) $(ADDITIONAL_STANDARD_LIB)
+STANDARD_LIST       = $(DEVELOP_LIST) libstx_libtool2 libstx_libhtml libstx_libboss $(ADDITIONAL_STANDARD_LIST)
+LINK_STANDARD_LIB   = $(LINK_DEVELOP_LIB) $(LINK_LIBTOOL2) $(LINK_LIBHTML) $(LINK_LIBBOSS) $(ADDITIONAL_LINK_STANDARD_LIB)
+STATIC_STANDARD_LIB = $(STATIC_DEVELOP_LIB) $(STATIC_LIBTOOL2) $(STATIC_LIBHTML) $(STATIC_LIBBOSS) $(ADDITIONAL_STATIC_STANDARD_LIB)
+
+
+#
+# all components
+#   also includes very seldom used additional widgets
+#
+EXTENDED_DIR        = $(STANDARD_DIR) $(LIBTABLEDIR) $(LIBWIDG3DIR) $(LIBDBASEDIR) $(LIBCOMPATDIR)
+EXTENDED_RELDIR     = $(STANDARD_RELDIR) $(LIBTABLE_RELDIR) $(LIBWIDG3_RELDIR) $(LIBDBASE_RELDIR) $(LIBCOMPAT_RELDIR)
+EXTENDED_LIB        = $(STANDARD_LIB) $(LIBTABLE) $(LIBWIDG3) $(LIBDBASE) $(LIBCOMPAT)
+EXTENDED_LIST       = $(STANDARD_LIST) libstx_libtable libstx_libwidg3 libstx_goodies_libdbase libstx_libcompat
+LINK_EXTENDED_LIB   = $(LINK_STANDARD_LIB) $(LINK_LIBTABLE) $(LINK_LIBWIDG3) $(LINK_LIBDBASE) $(LINK_LIBCOMPAT)
+STATIC_EXTENDED_LIB = $(STATIC_STANDARD_LIB) $(STATIC_LIBTABLE) $(STATIC_LIBWIDG3) $(STATIC_LIBDBASE) $(STATIC_LIBCOMPAT)
+
+# -------------------------------------------
+# default class package list
+# -------------------------------------------
+#
+# should make all libs req'd by Smalltalk
+#
+CLASSLIBDIRS     = $(STANDARD_DIR)
+CLASSLIB_RELDIRS = $(STANDARD_RELDIR)
+
+LIBOBJS        = $(STANDARD_LIB)
+LINK_LIBOBJS   = $(LINK_STANDARD_LIB)
+LIBLIST        = $(STANDARD_LIST)
+STATIC_LIBLIST = $(LIBLIST)
+LINKLIST       = $(LINK_STANDARD_LIB)
+
+#
+# those are set to the default values
+# (in case no STATIC_ defs are found in a PACKS file)
+#
+STATIC_OBJS               = $(LINK_OBJS)
+STATIC_LIBOBJS            = $(LIBOBJS)
+STATIC_ADDITIONAL_OBJS    = $(ADDITIONAL_OBJS)
+STATIC_ADDITIONAL_CLASSES = $(ADDITIONAL_CLASSES)
+STATIC_EXTRA_OBJ          = $(EXTRA_OBJ)
+STATIC_EXTRA_UI_OBJ       = $(EXTRA_UI_OBJ)
+LINK_ADDITIONAL_OBJS      = $(ADDITIONAL_OBJS)
+
+
+# --------------------------------------
+# system and other (non-class) libraries
+# --------------------------------------
+
+X_LIB_DIR=/usr/lib
+STATIC_X_LIB_DIR=$(X_LIB_DIR)
+#X_LIB_DIR=/usr/X11/lib
+
+LIB_X          = -lX11
+LIB_XEXT       = -lXext
+LIB_XAW        = -lXaw
+LIB_XT         = -lXt
+LIB_XMU        = -lXmu
+LIB_XINERAMA   = -lXinerama
+LIB_XFT        = -lXft
+
+STATIC_LIB_X   = $(LIB_X)
+STATIC_LIB_XEXT= $(LIB_XEXT)
+STATIC_LIB_XAW = $(LIB_XAW)
+STATIC_LIB_XT  = $(LIB_XT)
+STATIC_LIB_XMU = $(LIB_XMU)
+
+# used with sparc only:
+# OSI-ACSE library
+# redefined to non-empty in sparc config
+LIB_OSINET_APLI=
+LIB_OSINET_OSI=
+
+WHICH_ODBC=unixodbc
+
+#
+# used when building libxt (wdget lib)
+# PRELINK is used whith ld -r to form libxt.o
+# SO_LINK is used with shared lib generation
+#
+LIB_XT_PRELINK = $(STATIC_LIB_XAW) $(STATIC_LIB_XMU) $(STATIC_LIB_XT)
+LIB_XT_SO_LINK =
+
+#
+# libraries to link in at the end
+#
+LIBXEXT     = $(LIB_XEXT)
+LIBX        = $(LIB_X)
+LIBXT       = $(LIB_XT)
+LIBXAW      = $(LIB_XAW)
+LIBXMU      = $(LIB_XMU)
+LIBXINERAMA = $(LIB_XINERAMA)
+LIBXFT      = $(LIB_XFT)
+
+STATIC_LIBXEXT = $(STATIC_LIB_XEXT)
+STATIC_LIBX    = $(STATIC_LIB_X)
+STATIC_LIBXT   = $(STATIC_LIB_XT)
+STATIC_LIBXAW  = $(STATIC_LIB_XAW)
+STATIC_LIBXMU  = $(STATIC_LIB_XMU)
+
+#
+# in a package definition file, add the following:
+#
+#OPTIONAL_LIBXAW = $(LIB_XAW)
+#OPTIONAL_LIBXT  = $(LIB_XT)
+#OPTIONAL_LIBXMU = $(LIB_XMU)
+#OPTIONAL_LIBXM  = $(LIB_XM)
+
+OPTIONAL_LIBS= \
+	$(OPTIONAL_LIBXM) \
+	$(OPTIONAL_LIBXAW) \
+	$(OPTIONAL_LIBXMU) \
+	$(OPTIONAL_LIBXT)
+
+MATHLIB     = -lm
+SYSLIBS     = \
+	$(OTHERLIBS1) \
+	$(OPTIONAL_LIBS) \
+	$(OTHERLIBS2) \
+	$(MATHLIB)
+
+OTHERLIBS1  =
+OTHERLIBS2  = $(OTHERLIBS)
+
+
+STATIC_OPTIONAL_LIBS= \
+	$(STATIC_OPTIONAL_LIBXM) \
+	$(STATIC_OPTIONAL_LIBXAW) \
+	$(STATIC_OPTIONAL_LIBXMU) \
+	$(STATIC_OPTIONAL_LIBXT)
+
+STATIC_MATHLIB=/usr/lib/libm.a
+STATIC_SYSLIBS     = \
+	$(STATIC_OTHERLIBS1) \
+	$(STATIC_OPTIONAL_LIBS) \
+	$(STATIC_LIBXEXT) $(STATIC_LIBX) \
+	$(STATIC_OTHERLIBS2) \
+	$(STATIC_MATHLIB)
+STATIC_OTHERLIBS1  = $(OTHERLIBS1)
+STATIC_OTHERLIBS2  = $(OTHERLIBS2)
+
+SUPPORT_DIR=$(TOP)/support
+
+#
+# the makefile to use when building the db1.6 library
+#
+MAKEFILE_DB  = Makefile.$(MAKEFILE_EXTENSION)
+
+#
+# the CTAGS command (for ca's CBrowser, taglist in Filebrowser and cg's STXGDB)
+#
+#CTAGS_VSN=ctags-3.2.2
+CTAGS_VSN=ctags-5.8
+CTAGS_DIR=$(TOP)/support/tools/$(CTAGS_VSN)
+# CTAGS=$(CTAGS_DIR)/ctags
+
+#
+# the CSCOPE command (for cg's STXGDB)
+#
+CSCOPE_VSN=cscope-15.8a
+CSCOPE_DIR=$(TOP)/support/tools/$(CSCOPE_VSN)
+# CSCOPE=$(CSCOPE_DIR)/cscope
+
+#
+# the SPLINT command (for cg's STXGDB)
+#
+SPLINT_VSN=splint-3.1.2
+SPLINT_DIR=$(TOP)/support/tools/$(SPLINT_VSN)
+# SPLINT=$(SPLINT_DIR)/cscope
+
+#
+# the JPEG library
+#
+# undefine this in arch-specific config, if you cannot compile libjpeg
+# or if you want to link against a system dll
+JPEGREADER_precompiled=JPEGReader.$(O)
+LIBJPEG_CC=$(CC)
+LIBJPEG_OPT=$(OPT)
+
+LIBJPEG_DIR=$(TOP)/support/libjpeg-6a
+# LIBJPEG_DIR=$(TOP)/support/libjpeg-7
+LIBJPEG=$(LIBJPEG_DIR)/libjpeg.a
+LIBJPEG_RULE=$(LIBJPEG)
+LIBJPEG_FOR_COPY=$(LIBJPEG_DIR)/libjpeg.a
+LIBJPEG_FOR_LINK=$(LIBJPEG_DIR)/libjpeg.a
+
+# the following defs are for using the provided (not the system) libjpeg;
+# should work everywhere
+JPEGLIB_LD_ARG=-L$(LIBJPEG_DIR) -ljpeg
+JPEGLIB_MAKE_TARGET=libjpeg
+JPEGREADER_PRELINKED=JPEGReader_prelinked
+JPEG_INCLUDE=
+
+# --------------------------------------------------
+# the MSQL library
+#
+# those may be redefined in an architecture specific
+# defines file, to whereever the stuff is found
+#
+MSQLDIR=$(TOP)/support/msql/msql-1.0.14
+
+MSQL_INCLUDE_DIR=$(MSQLDIR)/include
+MSQL_LIB_DIR=$(MSQLDIR)/lib
+
+#MSQL_INCLUDE_DIR=/usr/local/include
+#MSQL_LIB_DIR=/usr/local/lib
+
+
+# --------------------------------------------------
+# the VGL library
+#
+# has to be explicitely added in the defines file,
+# by defining
+#       EXTRA_LIBS= ... $(LIB_VOGL) ...
+# and
+#       CC_GL_FLAGS= ... $(CC_VGL_FLAGS) ...
+#
+# Late note: these defs are now all in the PACKS definitions
+#
+VOGL_DIR     =$(SUPPORT_DIR)/VGL/vogl/src
+LIB_VOGL     =$(VOGL_DIR)/libvogl.a
+LIB_VOGL_SO  =$(VOGL_DIR)/libvogl$(SO_NAME)
+MAKEFILE_VOGL=Makefile.$(MAKEFILE_EXTENSION)
+CC_VOGL_INCLUDE=-I$(VOGL_DIR)
+CC_VOGL_FLAGS  =-DVGL $(CC_VOGL_INCLUDE)
+
+#
+# only redefined for systems which have a real GL (SGI, AIX)
+# or have an openGL (mesa, openGL)
+#
+LIB_GL=$(LIB_VOGL)
+LIB_GL_TARGET=libvogl
+
+#
+# the mesa (openGL) library (optional)
+#
+MESA_VSN=3.0
+MESA_VSNDEF=3_0
+
+MESA_REL_DIR =Mesa-$(MESA_VSN)
+
+MESA_DIR     =$(SUPPORT_DIR)/MESA/$(MESA_REL_DIR)
+MESA_LIB_DIR =$(MESA_DIR)/lib
+LIB_MESA     =$(MESA_LIB_DIR)/libMesaGL.a
+LIB_MESA_SO  =$(MESA_LIB_DIR)/libMesaGL$(SO_NAME)
+CC_MESA_INCLUDE=-I$(MESA_DIR)/include
+CC_MESA_FLAGS=-DMESA -DMESA$(MESA_VSNDEF) $(CC_MESA_INCLUDE)
+MAKEFILE_MESA=Makefile
+
+#
+# the next two should be redefined in architecture-specific
+# config files of systems which have true GL/openGL (i.e. SGI)
+# or have those includes somewhere else.
+#
+# the default here is to use VGL/MESA
+#
+CC_GL_FLAGS=$(CC_VOGL_FLAGS)
+CC_OPENGL_FLAGS=$(CC_MESA_FLAGS)
+
+# the next one should be defined in a packs file
+# to choose between GL/VGL and OpenGL/MESA
+#
+# for GL/VOGL:
+#   CC_3D_FLAGS=$(CC_GL_FLAGS)
+# for openGL/MESA:
+#   CC_3D_FLAGS=$(CC_OPENGL_FLAGS)
+#
+
+
+# Systems which have true GL/OpenGL, mnay redefine the above
+# for true GL:
+#   CC_GL_FLAGS=-DGLX -I<gl-include-path-if-any>
+#
+# for true OpenGL:
+#   CC_OPENGL_FLAGS=-DOPENGL -I<openGL-include-path-if-any>
+
+#
+# redefine this to the Makefile target in Mesa/Makefile
+# for your machine
+MAKE_MESA_TARGET=$(ARCH)
+
+#
+# only redefined for systems which have a real openGL (SGI, NT)
+#
+LIB_OPENGL=$(LIB_MESA)
+LIB_OPENGL_TARGET=libmesa
+
+OPENGL_INCLUDE=
+
+#
+# a netsnmp library
+#
+# if already in /usr/lib:
+# DYNAMIC_LINK_LIB_NETSNMP=-lnetsnmp
+# STATIC_LINK_LIB_NETSNMP=
+# TARGET_LIB_NETSNMP=
+#
+# if a local one should be built and used:
+# DYNAMIC_LINK_LIB_NETSNMP=
+# STATIC_LINK_LIB_NETSNMP=-L$(NETSNMP_LIBDIR) -L$(NETSNMP_LIBDIR)/.libs $(NETSNMP_LIBDIR)/.libs/libnetsnmp.a
+# TARGET_LIB_NETSNMP=$(NETSNMP_LIBDIR)/.libs/libnetsnmp.a
+
+# to not build libsnmp, comment this (or redefine as empty)
+ARCH_LIBSNMP=libsnmp
+
+# --------------------------------------------------
+#
+# the GNU dld library (only works with linux-aout)
+#
+# has to be explicitely added in the defines file,
+# by defining
+#       OPTIONAL_LIBDL_TARGET= libdld ...
+#       EXTRA_LIBS= ... $(LIB_DLD) ...
+# and
+#       DLINCLUDE=$(DLD_DIR)
+#       DLDEFS= ... -DDLD -I$(DLD_DIR) ...
+#
+#DLD_REL_DIR  =DLD/dld-3.2.5
+DLD_REL_DIR  =dld-3.2.5
+DLD_DIR      =$(SUPPORT_DIR)/DLD/$(DLD_REL_DIR)
+LIB_DLD      =$(DLD_DIR)/libdld.a
+LIB_DLD_SO   =$(DLD_DIR)/libdld$(SO_NAME)
+MAKEFILE_DLD =Makefile.$(MAKEFILE_EXTENSION)
+
+# --------------------------------------------------
+#
+# the gnu BFD binary loader library (not working & EXPERIMENTAL)
+#
+# has to be explicitely added in the defines file,
+# by defining
+#       OPTIONAL_LIBDL_TARGET= libbfd
+#       EXTRA_LIBS= ... $(LIB_BFD) ...
+# and
+#       DLINCLUDE=$(BFD_DIR)
+#       DLDEFS= ... -DBFD -I$(BFD_DIR) ...
+#
+#BFD_REL_DIR    =DLD/binutils/bfd
+BFD_REL_DIR    =binutils/bfd
+BFD_DIR        =$(SUPPORT_DIR)/DLD/$(BFD_REL_DIR)
+LIB_BFD        =$(BFD_DIR)/libbfd.a
+LIB_BFD_SO     =$(BFD_DIR)/libbfd$(SO_NAME)
+MAKEFILE_BFD   =Makefile.$(MAKEFILE_EXTENSION)
+
+# --------------------------------------------------
+#
+# the dl1.6 COFF loader library (not working & EXPERIMENTAL)
+#
+# has to be explicitely added in the defines file,
+# by defining
+#       LIBRUN_EXTRA= ... libdl1_6 ...
+#       EXTRA_LIBS= ... $(LIB_DL1_6) ...
+# and
+#       DLINCLUDE=$(DL1_6_DIR)
+#       DLDEFS= ... -DDL1_6 -I$(DLD_DIR) ...
+#
+#DL1_6_REL_DIR=DLD/dl-1.6
+DL1_6_REL_DIR=dl-1.6
+DL1_6_DIR    =$(SUPPORT_DIR)/DLD/$(DL1_6_REL_DIR)
+LIB_DL1_6    =$(DL1_6_DIR)/libdl.a
+LIB_DL1_6_SO =$(DL1_6_DIR)/libdl$(SO_NAME)
+MAKEFILE_DL1_6 =Makefile.$(MAKEFILE_EXTENSION)
+
+DLLIB=
+DLLIB_SO=
+#
+# in a vendor configuration, add:
+#    DLLIB=$(LIB_DLD)
+#    DLLIB_SO=$(LIB_DLD_SO)
+
+#
+# additional libs
+# undefined elsewhere - should be defined where used, instead of undefined where not
+#
+ML_LD_OBJ_LIBS=-Lml/lib -lmxlin260 -L/usr/lib -lusb
+
+#
+# possible extra arch-specific libraries to be linked in the ld -r pass
+#
+LD_REL_OBJ_LIBS=
+
+MAKEFILE_SUBX=Makefile.$(MAKEFILE_EXTENSION)
+
+#
+# extra targets made in support (old: librun) / libview
+#
+SUPPORT_EXTRA_TARGETS=$(OPTIONAL_LIBGL_TARGET) $(OPTIONAL_LIBDL_TARGET)
+
+LIBVIEW_EXTRA_TARGETS=
+
+#
+# extra asm file in librun
+#
+LIBRUN_MORE=asmhelp.o
+
+#
+# classes from individual objects (not in library-packages)
+#
+#
+# EXTRA_UI_CLASSES    = $(WORKSTAT1) $(WORKSTAT2)
+# EXTRA_UI_OBJ        = $(OPTIONAL_XWORKSTATION_OBJ) $(OPTIONAL_GLXWORKSTATION_OBJ)
+# STATIC_EXTRA_UI_OBJ = $(STATIC_OPTIONAL_XWORKSTATION_OBJ) $(STATIC_OPTIONAL_GLXWORKSTATION_OBJ)
+# EXTRA_LINK_UI_OBJ   = $(OPTIONAL_LINK_XWORKSTATION_OBJ) $(OPTIONAL_LINK_GLXWORKSTATION_OBJ)
+
+#
+# default display classes
+#
+# these are reset in the Make.proto (or PACK-config), as desired
+#
+WORKSTAT1=XWorkstation
+WORKSTAT2=GLXWorkstation
+
+OPTIONAL_XWORKSTATION_OBJ=$(LIBVIEWDIR)/XWorkstation$(BIN_O)
+OPTIONAL_GLXWORKSTATION_OBJ=$(LIBVIEWDIR)/GLXWorkstation$(BIN_O)
+OPTIONAL_OPENGLWORKSTATION_OBJ=$(LIBVIEWDIR)/OGLWorkstation$(BIN_O)
+OPTIONAL_WINWORKSTATION_OBJ=$(LIBVIEWDIR)/WinWorkstation$(BIN_O)
+OPTIONAL_NXWORKSTATION_OBJ=$(LIBVIEWDIR)/NXWorkstation$(BIN_O)
+
+# STATIC_OPTIONAL_XWORKSTATION_OBJ=$(LIBVIEWDIR)/XWorkstation$(STATIC_O_EXT)
+# STATIC_OPTIONAL_GLXWORKSTATION_OBJ=$(LIBVIEWDIR)/GLXWorkstation$(STATIC_O_EXT)
+STATIC_OPTIONAL_WINWORKSTATION_OBJ=$(LIBVIEWDIR)/WinWorkstation$(STATIC_O_EXT)
+STATIC_OPTIONAL_NXWORKSTATION_OBJ=$(LIBVIEWDIR)/NXWorkstation$(STATIC_O_EXT)
+
+# OPTIONAL_LINK_XWORKSTATION_OBJ=$(LINK_LIBDIR)XWorkstation$(BIN_O)
+# OPTIONAL_LINK_GLXWORKSTATION_OBJ=$(LINK_LIBDIR)GLXWorkstation$(BIN_O)
+OPTIONAL_LINK_OPENGLWORKSTATION_OBJ=$(LINK_LIBDIR)OGLWorkstation$(BIN_O)
+OPTIONAL_LINK_WINWORKSTATION_OBJ=$(LINK_LIBDIR)WinWorkstation$(BIN_O)
+OPTIONAL_LINK_NXWORKSTATION_OBJ=$(LINK_LIBDIR)NXWorkstation$(BIN_O)
+
+# misc optional stuff
+#
+# these are set in the Make.proto (or PACKS) config, to include those libs
+# or left undefined, to exclude them.
+# The concrete libs (for example gl vs. vgl) are set in the architecture
+# specific configurations.
+
+OPTIONAL_LIBGL_TARGET=
+OPTIONAL_GL_LIB=
+STATIC_OPTIONAL_GL_LIB=$(OPTIONAL_GL_LIB)
+OPTIONAL_LINK_GL_LIB=
+
+OPTIONAL_LIBOPENGL_TARGET=
+OPTIONAL_OPENGL_LIB=
+STATIC_OPTIONAL_OPENGL_LIB=$(OPTIONAL_OPENGL_LIB)
+OPTIONAL_LINK_OPENGL_LIB=
+
+OPTIONAL_DL_LIB=
+STATIC_OPTIONAL_DL_LIB=$(OPTIONAL_DL_LIB)
+OPTIONAL_LINK_DL_LIB=
+
+#
+# to get GL/VGL, add in a packageList:
+#    OPTIONAL_LIBGL_TARGET=$(LIB_GL_TARGET)
+#    OPTIONAL_GL_LIB=$(LIB_GL)
+#
+# in addition, you have to decide which gl to use;
+# for vogl, add to the architecture config file:
+#    LIB_GL_TARGET=$(LIB_VOGL_TARGET)
+#    LIB_GL=$(LIB_VOGL)
+# for a real gl, add in an architecture config file:
+#    LIB_GL_TARGET=
+#    LIB_GL=-lgl_s
+
+OPTIONAL_LIBGL_TARGET=$(LIB_GL_TARGET)
+OPTIONAL_GL_LIB=$(LIB_GL)
+OPTIONAL_LINK_GL_LIB=$(LINK_LIB_GL)
+OPTIONAL_GL_DEFINE=$(CC_GL_DEFINE)
+CC_3D_FLAGS=$(CC_GL_FLAGS)
+
+#
+# to get openGL/mesa, add in a packageList:
+#    OPTIONAL_LIBOPENGL_TARGET=$(LIB_OPENGL_TARGET)
+#    OPTIONAL_OPENGL_LIB=$(LIB_OPENGL)
+#    OPTIONAL_LINK_OPENGL_LIB=$(LINK_LIB_OPENGL)
+#
+# in addition, you have to decide which openGL to use;
+# for mesa, add to the architecture config file:
+#    LIB_OPENGL_TARGET=$(LIB_MESA_TARGET)
+#    LIB_OPENGL=$(LIB_MESA)
+# for a real gl, add in an architecture config file:
+#    LIB_GL_TARGET=
+#    LIB_GL=-lopenGL_s
+
+# to get an ObjectFileLoader,
+# you have to decide which dynamic load facility to use;
+# for sys5.4 like dlopen, add to the architecture config:
+#
+#    OPTIONAL_LIBDL_TARGET=
+#    OPTIONAL_DL_LIB=-ldl
+#
+# for GNU dld3.2.5, add to the architecture config:
+#
+#    OPTIONAL_LIBDL_TARGET=libdld
+#    OPTIONAL_DL_LIB=$(LIB_DLD)
+#    DLDEFS=-DGNU_DL -I$(DLD_DIR)
+#
+# for GNU BFD loading (which does not work yet):
+#
+#    OPTIONAL_LIBDL_TARGET=libbfd
+#    OPTIONAL_DL_LIB=$(LIB_BFD)
+#    DLDEFS=-DBFD_DL -I$(BFD_DIR)
+
+
+#extra user C-libraries
+EXTRA_C_LIBS=
+
+#EXTRA_LIBS=\
+#       $(OPTIONAL_GL_LIB) \
+#       $(OPTIONAL_OPENGL_LIB) \
+#       $(OPTIONAL_DL_LIB) \
+#       $(EXTRA_C_LIBS)
+
+EXTRA_LIBS=\
+	$(OPTIONAL_DL_LIB) \
+	$(EXTRA_C_LIBS)
+
+#STATIC_EXTRA_LIBS=\
+#       $(STATIC_OPTIONAL_GL_LIB) \
+#       $(STATIC_OPTIONAL_OPENGL_LIB) \
+#       $(STATIC_OPTIONAL_DL_LIB) \
+#       $(EXTRA_C_LIBS)
+
+STATIC_EXTRA_LIBS=\
+	$(STATIC_OPTIONAL_DL_LIB) \
+	$(EXTRA_C_LIBS)
+
+#EXTRA_LINK_LIBS=\
+#       $(OPTIONAL_LINK_GL_LIB) \
+#       $(OPTIONAL_LINK_OPENGL_LIB) \
+#       $(OPTIONAL_LINK_DL_LIB) \
+#       $(EXTRA_C_LIBS)
+
+EXTRA_LINK_LIBS=\
+	$(OPTIONAL_LINK_DL_LIB) \
+	$(EXTRA_C_LIBS)
+
+# -------------
+# default rules
+# -------------
+
+# rule to generate a self-installing deployable
+# setup is for backward compatibility;
+# see linux*/COMMON/defines
+# and mac/COMMON/defines
+SETUP_RULE=setup
+
+#
+# rule (from stdRules) for library building
+#
+OBJTARGET=obj$(TARGET_RULE_EXTENSION)
+LIBTARGET=all
+LIBRUNTARGET=librun.$(A)
+
+#
+# rule for target building
+# TARGET_RULE_EXTENSION will be appended
+#
+TARGET_RULE_EXTENSION=_static
+TARGET=stx
+
+# -------------
+# default flags
+# -------------
+
+# collected compiler flags
+
+ASFLAGS=
+
+#
+# rule hooks for vendor specific rules
+#
+
+PRE_LD_ACTION=emptyRule
+POST_LD_ACTION=emptyRule
+
+
+BIG_STFILE_RULE=__NORMAL_RULE__
+VERYBIG_STFILE_RULE=__NORMAL_RULE__
+LONGNAME_RULE=__NORMAL_RULE__
+
+__NORMAL_RULE__:
+	$(MAKE) $(O_RULE) STFILE=$(BIG_FILE) CC="$(CC)" STC_OPT="$(STC_OPT)" OPT="$(OPT)" SEPINITCODE="$(SEPINITCODE)" XDEFS="$(XDEFS)"
+
+
+#------------------ end of COMMON/defines ---------------------
--- a/pipeline.groovy	Sat Dec 31 22:47:53 2016 +0000
+++ b/pipeline.groovy	Wed Feb 01 22:20:35 2017 +0000
@@ -90,7 +90,21 @@
     stage ( "Test" ) {
         matrix ( configurations ) {
             stage ( "Test - {${env.NODE}-${env.ARCH}}") {
-                sh "ruby Jenkinsfile.rb --project \"stx:jv-branch\" test"
+                /*
+                 * Some tests requires display, so:
+                 *
+                 *  * on *NIX hosts, launch Xvfb
+                 *  * on Windows, do nothing. Windows slave must be configured
+                 *    so it has an access to interactive window station (which
+                 *    means it has to run under user session, not as a service)
+                 */
+                if ( isUnix() ) {
+                    wrap([$class: 'Xvfb', additionalOptions: '-screen 0 1024x768x24 -pixdepths 24 4 8 15 16 32', parallelBuild: true]) {
+                        sh "ruby Jenkinsfile.rb --project \"stx:jv-branch\" test"
+                    }
+                } else {
+                    sh "ruby Jenkinsfile.rb --project \"stx:jv-branch\" test"
+                }
                 junit allowEmptyResults: true, testResults: "reports/*build${env.BUILD_NUMBER}*.xml"
             }
         }
@@ -206,7 +220,7 @@
              *
              * So, here we go:
              */
-            def id1 = "workflow:push-upstream";
+            def id1 = "workflow-push-upstream";
             def id2 = scm.getCredentialsId();
             def credentials = null;
 
--- a/rakelib/compile.rake	Sat Dec 31 22:47:53 2016 +0000
+++ b/rakelib/compile.rake	Wed Feb 01 22:20:35 2017 +0000
@@ -204,10 +204,12 @@
 
 
   case
-  when linux?
-    task :'config' => [ STX_CONF_DIR / 'vendorConf',
-      STX_CONF_DIR / 'myConf' ,
-      STX_RULES_DIR / 'stdRules' ]
+  when unix?
+    task :'config' => [ STX_CONF_DIR / 'COMMON' / 'defines',
+                        STX_CONF_DIR / 'vendorConf',
+                        STX_CONF_DIR / 'myConf' ,
+
+                        STX_RULES_DIR / 'stdRules' ]
 
 
     task STX_RULES_DIR / 'stdRules' do
@@ -225,64 +227,52 @@
       sed(' $(STFILE)', ' $(PWD)/$(STFILE)', STX_RULES_DIR / 'stdRules', true) 
     end
 
-    task STX_CONF_DIR / 'vendorConf' do
-      cp STX_CONF_DIR / 'linux-elf' / 'COMMON' / 'defines' , STX_CONF_DIR / 'vendorConf'
-      # Sigh, another hack here. For an unknown reason eXept added -Wl,--wrap=memcpy linker
-      # flag. This not only hinders performace [*] but also causes infinite recursion when
-      # in use. Wonder if it ever worked. So, yet another hack here: remove the 
-      # `--wrap=memcpy` from linker flags.
-      #
-      # [*] under GCC, memcpy() translates to a rather fast intrinsic. 
-      sed(',--wrap=memcpy', '', STX_CONF_DIR / 'vendorConf', true)
+    directory STX_CONF_DIR do | t |
+      mkdir_p t.name()
+    end
+
+    directory STX_CONF_DIR / 'COMMON' do | t |
+      mkdir_p t.name()
     end
 
-    task STX_CONF_DIR / 'myConf' do
-      if x86_64? 
-        if ARCH == 'x86_64'
-          cp STX_CONF_DIR / 'linux-elf' / 'x86_64' / 'defines' , STX_CONF_DIR / 'myConf'
-        else
-          cp STX_CONF_DIR / 'linux-elf' / 'amd64_mode32' / 'defines' , STX_CONF_DIR / 'myConf'
-        end
+    directory STX_CONF_DIR / 'COMMON' / 'defines' => STX_CONF_DIR / 'COMMON' do | t |
+      File.open(t.name(), "w") do | f |
+        f.puts <<-CONTENTS
+          # Do not edit! Automatically generated by rake (rakelib/#{__FILE__})
+          # 
+          # Nothing here, all "common" definitions are included in config file
+          # (`config-<OS>-<ARCH>.make`)
+          CONTENTS
+      end
+    end
+
+    file STX_CONF_DIR / 'vendorConf' => STX_CONF_DIR  do | t |
+      makelib_dir = Pathname.new(File.expand_path('makelib')).relative_path_from(Pathname.new(BUILD_DIR / 'stx' ))
+      os = nil
+      case 
+      when linux? 
+        os = 'linux'
       else
-        cp STX_CONF_DIR / 'linux-elf' / 'opt-cs-oc' / 'defines' , STX_CONF_DIR / 'myConf'
+        raise Exveption.new("Unssuported operating system")
       end
 
-      # Make sure OPT and LIBRUN_OPT is not set forcibly in myConf/vendorConf so it can be
-      # set on a command line. We need to tweak them ocasionally, for example to
-      # harden options when compiling various librun sources - basically for 
-      # source files that have been cleaned up to prevent bugs creeping back!.
-      # 
-      # This used to work some time ago but then somebody at eXept hacked 
-      # makefiles and broke this. Sigh. Sigh. Sigh.       
-      sed(/^OPT=/, '#OPT=', STX_CONF_DIR / 'myConf', true)
-      sed(/^LIBRUN_OPT=/, '#LIBRUN_OPT=', STX_CONF_DIR / 'myConf', true)      
-      sed(/^OPT=/, '#OPT=', STX_CONF_DIR / 'vendorConf', true)
-      sed(/^LIBRUN_OPT=/, '#LIBRUN_OPT=', STX_CONF_DIR / 'vendorConf', true)
+      File.open(t.name(), "w") do | f |
+        f.puts <<-CONTENTS      
+          # 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          
+          CONTENTS
+      end
+    end
 
-      File.open(STX_CONF_DIR / 'myConf', 'a') do | f |
-        if defined? STCCOMMONOPT
-          f.puts "STCCOMMONOPT=#{STCCOMMONOPT}"
-        end
-        f.puts "#"
-        f.puts "# following flags are defined in rakelib/compile.rake"
-        f.puts "#"
-        f.puts "OPT?=#{GCC_CFLAGS}"
-        f.puts "LIBRUN_OPT?=$(OPT)"
-        f.puts "O_RULE=__STANDARD_O_RULE__"
-        f.puts "EXTRA_LIBS=-ldl -lX11 -lXext"
-        f.puts "XDEFS+=-DHAVE_FONTCONFIG -DXFT"
-        f.puts "XINCLUDE+=$(shell pkg-config --cflags xft)"
-        f.puts "LIB_XFT=-l:libXft.so.2 -l:libfontconfig.so.1"
-        if x86_64? and ARCH == 'x86_64' then
-          f.puts 'MAKE_ZLIB_ARG= "CFLAGS=-fPIC -O3 -DUSE_MMAP"'
-          # Hack to build FFI for 64-bit Linux builds
-          f.puts 'FFI_OBJS=$(FFI_DIR)/build/src/*.o $(FFI_DIR)/build/src/x86/*.o'
-          f.puts 'FFI_DIR=libffi-3.0.10rc8'
-          f.puts 'OPTIONAL_HAVE_FFI_ARG=-DHAVE_FFI -I$(TOP)/librun/$(FFI_DIR)/build/include'
-          f.puts 'OPTIONAL_FFI_TARGET_IN_LIBRUN=ffi'
-          f.puts 'FFI_CC="$(CC) -m64 -fPIC"'
-          f.puts 'FFI_LD="ld -m elf_x84_64"'
-        end
+    file STX_CONF_DIR / 'myConf' => STX_CONF_DIR  do | t |
+      File.open(t.name(), "w") do | f |
+        f.puts <<-CONTENTS
+          # Local modifications / additions specific to this very build, if needed. 
+          #           
+          CONTENTS
       end
     end
   when win32?
--- a/rakelib/extensions.rb	Sat Dec 31 22:47:53 2016 +0000
+++ b/rakelib/extensions.rb	Wed Feb 01 22:20:35 2017 +0000
@@ -214,29 +214,13 @@
   end
 
   def make(args = '')
-    if win32?
-      #sh "make.exe -N -f bc.mak #{args}"
-      if win32_wine?
-        def make_objdir(directory)              
-          if File.exist? directory / 'bmake.bat'
-            #puts "Making objbc in #{directory}"      
-            if not File.exist?(directory / OBJ_DIR)
-              #puts "Made objbc in #{directory}"      
-              mkdir directory / OBJ_DIR
-            end            
-            Dir.entries(directory).each do | each |              
-              if each != '.' and each != '..' and File.directory?(directory / each)
-                #puts "  recursing into #{directory / each}"
-                make_objdir(directory / each)
-              end
-            end
-          end
-        end
-        make_objdir('.')
-        sh "wine cmd /c #{MAKE} #{args}"
-      else         
-        sh "#{MAKE} #{args}"
-      end
+    if win32? 
+      # As of 2017-01-13, mingwmake no longer makes sure objdir exists,
+      # causing mingwmake.bat to fail. To workaround that, make sure
+      # objdir exists. 
+      # How could eXept mess up things so badly?
+      mkdir_p OBJ_DIR
+      sh "#{MAKE} #{args}"    
     else      
       sh "#{MAKE} #{args}"
     end
--- a/rakelib/hglib.rb	Sat Dec 31 22:47:53 2016 +0000
+++ b/rakelib/hglib.rb	Wed Feb 01 22:20:35 2017 +0000
@@ -302,6 +302,10 @@
 
     def initialize(directory)
       @path = directory
+      initialize_config()
+    end
+
+    def initialize_config() 
       config_file = hgrc()      
       if File.exist? ( config_file ) 
         $LOGGER.debug("Loading repository config from \"#{config_file}\"")
@@ -311,6 +315,19 @@
       end
     end
 
+    # Add / replace given config options and write back
+    # .hg/hgrc    
+    def config_set(**options) 
+      config = IniFile.new(:filename => self.hgrc())
+      options.each do | section , keys_and_values |         
+        keys_and_values.each do | key, value |
+          config[section][key] = value.to_s
+        end
+      end
+      config.write()
+      initialize_config()
+    end
+
     # Return a hashmap with defined paths (alias => uri)
     def paths() 
       return @config['paths'].clone
@@ -318,9 +335,7 @@
 
     # Set paths for given repository
     def paths=(paths)
-      config = IniFile.new(:filename => self.hgrc())
-      config['paths'] = paths
-      config.write()
+      config_set( paths: paths)      
     end
 
     def log(revset, template = "{node|short}\n")      
--- a/rakelib/scm.rb	Sat Dec 31 22:47:53 2016 +0000
+++ b/rakelib/scm.rb	Wed Feb 01 22:20:35 2017 +0000
@@ -267,24 +267,28 @@
     if repository.staging then
       paths['staging'] = "#{repository.staging}/#{directory.gsub('/', separator)}"
     end
+    paths['default'] = paths['staging'] || paths['upstream'] || paths['canonical']
 
     begin
-      if repository.staging then
-        paths['default'] = paths['staging']
-        hg = HG::Repository.clone(paths['staging'], root / directory, noupdate: true)        
-        hg.paths = paths
-        hg.pull('upstream') if paths['upstream'] 
-        hg.pull('canonical')
-      elsif repository.upstream then
-        paths['default'] = paths['upstream']
-        hg = HG::Repository.clone(paths['upstream'], root / directory, noupdate: true)        
-        hg.paths = paths
-        hg.pull('canonical')
-      else
-        paths['default'] = paths['canonical']
-        hg = HG::Repository.clone(paths['canonical'], root / directory, noupdate: true)
-        hg.paths = paths
-      end
+      hg = HG::Repository.init(root / directory)      
+      # Configure path aliases. 
+      # 
+      # Set the repository as non-publishing, This way when cloning from a staging 
+      # repo changes in draft phase would remain drafs. This is  essential to 
+      # employ evolve extension and being able to fix & evolve changes in clones
+      # (on a CI server, for instance) and being able to push back without need to
+      # fiddle around phases. 
+      # 
+      # The downside is that we cannot do an `uncompressed` pull. This is the price
+      # we have to pay. 
+      hg.config_set(
+        phases: { 'publish' => 'false' },
+        paths:  paths
+      )
+
+      hg.pull('staging') if repository.staging
+      hg.pull('upstream') if repository.upstream
+      hg.pull('canonical') if repository.canonical      
       # If revision is not specified, then look for bookmark
       # `master`. If it exist, then check out `master`. If it 
       # does not, then checkout tip or throw an error.
@@ -309,8 +313,16 @@
   end
 
   def self._checkout_cvs(repository, directory, branch, root, **kwargs)    
+    revision =  kwargs[:revision] || nil
+    revision_arg = ''
+    if revision then
+      if not revision.match(/^\d\d\d\d-\d\d-\d\d$/) 
+        raise Exception.new("CVS only support date spec as revision: option (YYYY-MM-DD)")
+      end
+      revision_arg = " -D #{revision}"
+    end
     ensure_cvs_rsh_set()
-    if not sh %W{cvs -z 9 -d #{repository.canonical} co #{directory}}, cwd: root
+    if not sh "cvs -z 9 -d #{repository.canonical} co #{revision_arg} #{directory}", cwd: root
       raise CheckoutException.new("CVS: Cannot checkout #{directory}from #{repository.url}")
     end
   end
--- a/rakelib/test.rake	Sat Dec 31 22:47:53 2016 +0000
+++ b/rakelib/test.rake	Wed Feb 01 22:20:35 2017 +0000
@@ -102,14 +102,28 @@
   project.packages.each do | pkg |
     if pkg.test
       task "test:package:#{pkg.name}" => [ 'stx:goodies/builder/reports', REPORT_DIR ] do
-        if pkg.coverage
-          run_report(app, [ pkg.name ], TESTREPORT_CLASS,  '', '--coverage')
-        else
-          run_report(app, [ pkg.name ], TESTREPORT_CLASS)
-	      end
-        # Extract summary from XML report and keep it. Yeah, parsing XML
-        # using regexps is a bad thing, but it's quick and lot less code!
         report_file = File.expand_path(REPORT_DIR) / "#{pkg.name_components.join('_')}-#{BUILD_ID}-Test.xml"
+        # Sigh, sigh. On CI server, sometimes it happen that tests are simply not run. 
+        # I was not able to debug the issue anyhow, any attempt to attach a debugger,
+        # add a debug print or run it manually failed as the problem did not manifest.
+        # 
+        # This is a feeble and horrible attempt to just cover up the problem by
+        # trying multiple times. I don't want to spend more time chasing issues
+        # like this. Sorry. 
+        #
+        # Let's see if it helps. 
+        for i in 1..5 do
+          if pkg.coverage
+            run_report(app, [ pkg.name ], TESTREPORT_CLASS,  '', '--coverage')
+          else
+            run_report(app, [ pkg.name ], TESTREPORT_CLASS)
+          end
+          # Extract summary from XML report and keep it. Yeah, parsing XML
+          # using regexps is a bad thing, but it's quick and lot less code!          
+          if File.exist? report_file then            
+            break
+          end          
+        end
         report_summary = TestReportSummary.new(pkg.name, report_file);
         TestReportSummary::SUMMARIES << report_summary    
       end
--- a/rakelib/workflow.rake	Sat Dec 31 22:47:53 2016 +0000
+++ b/rakelib/workflow.rake	Wed Feb 01 22:20:35 2017 +0000
@@ -24,11 +24,12 @@
         :pass => pass,
       }   
       paths = hg.paths
-      if remote == 'upstream' 
+      remote_used = remote
+      if remote_used == 'upstream' 
         if not paths['upstream'] then
-          remote = 'canonical'
+          remote_used = 'canonical'
         end
-      elsif remote == 'staging'
+      elsif remote_used == 'staging'
         if not paths['staging'] then
           puts ""
           puts "!! repository #{hg.path} has not staging repository defined - skipping !!"
@@ -41,36 +42,33 @@
       # to upstream / canonical repo, must be done manually. This is 
       # mainly beacuse there are on separate protected repositories 
       # not accessible without a special setup. Sigh...
-      if (remote == 'upstream') or (remote == 'canonical') then
-        if (pkg.name == 'stx:stc') or (pkg.name == 'stx:librun') then
-          puts ""
-          puts "== Skipping push of #{pkg.name} - you must push manually =="
-          puts ""          
-          return
-        end
-      end      
-      
-      if review_only then
-        opts[:rev] = '.'
-        remote_url = hg.paths[remote] || remote
-        bookmark = hg.bookmark()
+      if ((pkg.name == 'stx:stc') or (pkg.name == 'stx:librun')) and ((remote_used == 'upstream') or (remote_used == 'canonical')) then        
         puts ""
-        puts "== changes going to #{remote_url} =="
-        puts ""
-        hg.outgoing(remote, **opts)
-        puts ""
-        if push_bookmark and bookmark then
-          puts "Will update bookmark '#{bookmark}"
+        puts "== Skipping push of #{pkg.name} - you must push manually =="
+        puts ""                  
+      else      
+        if review_only then
+          opts[:rev] = '.'
+          remote_url = hg.paths[remote_used] || remote_used
+          bookmark = hg.bookmark()
+          puts ""
+          puts "== changes going to #{remote_url} =="
+          puts ""
+          hg.outgoing(remote_used, **opts)
+          puts ""
+          if push_bookmark and bookmark then
+            puts "Will update bookmark '#{bookmark}"
+          end
+          puts "===================================="
+          puts ""
+        else
+          if push_bookmark && bookmark then
+            opts[:bookmarks] = ['.']
+          else
+            opts[:rev] = '.'
+          end        
+          hg.push(remote_used, **opts)
         end
-        puts "===================================="
-        puts ""
-      else
-        if push_bookmark && bookmark then
-          opts[:bookmarks] = ['.']
-        else
-          opts[:rev] = '.'
-        end        
-        hg.push(remote, **opts)
       end
     end
   end
--- a/specs/baseline.rbspec	Sat Dec 31 22:47:53 2016 +0000
+++ b/specs/baseline.rbspec	Wed Feb 01 22:20:35 2017 +0000
@@ -35,11 +35,10 @@
 
   tasks do
 
-    task :'checkout:buildtools' => [ BUILD_DIR / 'stx' / "rules",
-				     BUILD_DIR / 'stx' / "configurations",
-				     BUILD_DIR / 'stx' / "support",
-				     BUILD_DIR / 'stx' / "RELEASE",
-				     # needed by applications for *.rc stuff
+    task :'checkout:buildtools' => [ BUILD_DIR / 'stx' / "rules",				     
+                        				     BUILD_DIR / 'stx' / "support",
+                        				     BUILD_DIR / 'stx' / "RELEASE",
+				                             # needed by applications for *.rc stuff
                                      BUILD_DIR / 'stx' / 'projects' / 'smalltalk',
                                      # documentation
                                      BUILD_DIR / 'stx' / 'doc' / 'online' / 'english',
@@ -47,7 +46,7 @@
                                      BUILD_DIR / 'stx' / 'doc' / 'online' / 'icons',
                                      # various icons (country flags etc)
                                      BUILD_DIR / 'stx' / 'goodies' / 'bitmaps'
-				   ]
+				                           ]
 
     file BUILD_DIR / 'stx' / 'rules'  => BUILD_DIR do | t |
       checkout :'exept:public', 'stx/rules'
@@ -61,12 +60,6 @@
       t.clear()
     end
 
-    file BUILD_DIR / 'stx' / 'configurations' => BUILD_DIR do | t |
-      checkout :'exept:public', 'stx/configurations'
-      # the clear is here to avoid multiple checkouts
-      t.clear()
-    end
-
     file BUILD_DIR / 'stx' / 'doc' / 'online' / 'english'  => BUILD_DIR do | t |
       checkout :'exept:public', 'stx/doc/online/english'
       # the clear is here to avoid multiple checkouts
--- a/specs/stx-jv.rbspec	Sat Dec 31 22:47:53 2016 +0000
+++ b/specs/stx-jv.rbspec	Wed Feb 01 22:20:35 2017 +0000
@@ -88,6 +88,7 @@
   package "stx:libbasic3", :repository => :'bitbucket:janvrany', :branch => 'jv'
   package "stx:libcomp", :repository => :'bitbucket:janvrany', :branch => 'jv'
   package "stx:libtool", :repository => :'bitbucket:janvrany', :branch => 'jv'
+  package "stx:libtool2",:repository => :'bitbucket:janvrany', :branch => 'jv'
  
   package "stx:libview", :repository => :'bitbucket:janvrany', :branch => 'jv'
   package "stx:libview2", :repository => :'bitbucket:janvrany', :branch => 'jv'