FILES		= ./include \
		  libid$(OBJEXT_O) \
		  _object$(OBJEXT_SO) \
		  Array$(OBJEXT_SO) \
		  ArrayedCollection$(OBJEXT_SO) \
		  Association$(OBJEXT_SO) \
		  AVLTree$(OBJEXT_SO) \
		  BlockClosure$(OBJEXT_SO) \
		  ByteArray$(OBJEXT_SO) \
		  Character$(OBJEXT_SO) \
		  Collection$(OBJEXT_SO) \
		  Dictionary$(OBJEXT_SO) \
		  Fraction$(OBJEXT_SO) \
		  Float$(OBJEXT_SO) \
		  GetOpt$(OBJEXT_SO) \
		  IdentityDictionary$(OBJEXT_SO) \
		  IdentitySet$(OBJEXT_SO) \
		  Integer$(OBJEXT_SO) \
		  LargeInteger$(OBJEXT_SO) \
		  LargeNegativeInteger$(OBJEXT_SO) \
		  LargePositiveInteger$(OBJEXT_SO) \
		  LookupKey$(OBJEXT_SO) \
		  Magnitude$(OBJEXT_SO) \
		  Number$(OBJEXT_SO) \
		  Object$(OBJEXT_SO) \
		  OrderedCollection$(OBJEXT_SO) \
		  PositionableStream$(OBJEXT_SO) \
		  ReadStream$(OBJEXT_SO) \
		  SequenceableCollection$(OBJEXT_SO) \
		  Set$(OBJEXT_SO) \
		  SmallInteger$(OBJEXT_SO) \
		  Smalltalk$(OBJEXT_SO) \
		  Stream$(OBJEXT_SO) \
		  String$(OBJEXT_SO) \
		  Symbol$(OBJEXT_SO) \
		  WordArray$(OBJEXT_SO) \
		  WriteStream$(OBJEXT_SO) \
		  perform$(OBJEXT_SO) \
		  tokenization$(OBJEXT_SO) \
		  st80$(OBJEXT_SO) \
		  ArgumentVariableNode$(OBJEXT_SO) \
		  ArrayLiteralNode$(OBJEXT_SO) \
		  ArrayNode$(OBJEXT_SO) \
		  AssignmentNode$(OBJEXT_SO) \
		  BlockNode$(OBJEXT_SO) \
		  ByteArrayNode$(OBJEXT_SO) \
		  CodeGenerator$(OBJEXT_SO) \
		  CCodeGenerator$(OBJEXT_SO) \
		  CManagedCodeGenerator$(OBJEXT_SO) \
		  CharacterNode$(OBJEXT_SO) \
		  Compiler$(OBJEXT_SO) \
		  CompilerOptions$(OBJEXT_SO) \
		  DefinitionNode$(OBJEXT_SO) \
		  EncodedVariableNode$(OBJEXT_SO) \
		  Encoder$(OBJEXT_SO) \
		  ExecNode$(OBJEXT_SO) \
		  ExternNode$(OBJEXT_SO) \
		  FloatNode$(OBJEXT_SO) \
		  GlobalVariableNode$(OBJEXT_SO) \
		  ImportNode$(OBJEXT_SO) \
		  IncludeNode$(OBJEXT_SO) \
		  IntegerNode$(OBJEXT_SO) \
		  LiteralNode$(OBJEXT_SO) \
		  LocalVariableNode$(OBJEXT_SO) \
		  MethodNode$(OBJEXT_SO) \
		  ParseNode$(OBJEXT_SO) \
		  Parser$(OBJEXT_SO) \
		  PrimitiveNode$(OBJEXT_SO) \
		  PrototypeNode$(OBJEXT_SO) \
		  ReturnNode$(OBJEXT_SO) \
		  Scanner$(OBJEXT_SO) \
		  ScannerContext$(OBJEXT_SO) \
		  ScannerPosition$(OBJEXT_SO) \
		  Scope$(OBJEXT_SO) \
		  SendNode$(OBJEXT_SO) \
		  SequenceNode$(OBJEXT_SO) \
		  SlotVariableNode$(OBJEXT_SO) \
		  StringIO$(OBJEXT_SO) \
		  StringNode$(OBJEXT_SO) \
		  SymbolNode$(OBJEXT_SO) \
		  TemporaryVariableNode$(OBJEXT_SO) \
		  VariableNode$(OBJEXT_SO) \
		  WordArrayNode$(OBJEXT_SO) \
		  idc1$(OBJEXT) \
		  idc \
		  gc.a

PREFIX		= /usr/local/lib/idc/i686-pc-linux-gnu/
CC		= cc
CFLAGS		= -g -Wall -Wreturn-type -Werror -D_GNU_SOURCE=1 
MFLAGS		= 
OFLAGS		= -O
O3FLAGS		= -O3
CCFLAGS		= 
CCFLAGS_O	= -c
CCFLAGS_SO	=  -fpic
LDFLAGS		= -export-dynamic
LDFLAGS_O	= 
LDFLAGS_SO	= -shared
LDLIBS		= -ldl
LDLIBS_O	= 
LDLIBS_SO	= 
OBJEXT		= 
OBJEXT_O	= .o
OBJEXT_SO	= .so
GCDIR		= gc6.7

all : $(FILES)

libid.o : src/libid.c
	$(CC) -Iinclude -DPREFIX='"$(PREFIX)"' $(CFLAGS) $(O3FLAGS) $(CCFLAGS_O) $(LDFLAGS_O) $< $(LDLIBS_O) -o $@

idc : src/idc
	cp -p $< .

.SUFFIXES :

%$(OBJEXT_SO) : src/%$(OBJEXT_SO).c
	$(CC) -Iinclude $(CFLAGS) $(OFLAGS) $(CCFLAGS_SO) $(LDFLAGS_SO) $< $(LDLIBS_SO) -o $@

%$(OBJEXT_O) : src/%$(OBJEXT_O).c
	$(CC) -Iinclude $(CFLAGS) $(OFLAGS) $(CCFLAGS_O) $(LDFLAGS_O) $< $(LDLIBS_O) -o $@

%$(OBJEXT) : src/%.c gc.a libid.o
	$(CC) -Iinclude $(CFLAGS) $(OFLAGS) $(CCFLAGS) $(LDFLAGS) $< $(LDLIBS) -o $@ libid.o gc.a -lm

./include :
	-$(SHELL) -ec '( mkdir include; cd include; ln -s ../../$(GCDIR)/include gc )'

gc.a : 
	$(SHELL) -ec 'cd ../$(GCDIR)/; $(MAKE) ABI_FLAG="$(MFLAGS)"'
	-$(SHELL) -ec 'ln -s ../$(GCDIR)/gc.a .'

install : all .FORCE
	-rm -rf $(PREFIX)
	-mkdir -p $(PREFIX)
	-cp -pr include gc.a libid.o idc idc1 *$(OBJEXT_SO) $(PREFIX)/.
	-cp -pr ../st80/*.st $(PREFIX)/.
	-cp -pr ../idc/*.st $(PREFIX)/.
	-cp -pr idc /usr/local/bin/.
	-find $(PREFIX)/. -name .svn -exec rm -rf {} \;

tidy : .FORCE
	-rm -f *.d *~ .gdb* *.stackdump

clean : tidy
	-$(SHELL) -ec 'cd ../$(GCDIR)/; $(MAKE) clean'
	-rm -rf include
	-rm -f $(FILES) idc1$(OBJEXT) gc.a *$(OBJEXT_O) *$(OBJEXT_SO)

distclean spotless : clean
	-rm -f Makefile

.FORCE :
