# Makefile for X11 version of Golly using wxWidgets.
# It assumes you've built and installed wxWidgets with commands like these:
#
# cd WX_DIR
# ./configure --with-x11 --disable-shared --enable-unicode
# (depending on your g++ version you might also need --disable-precomp-headers)
# make

# change next line to specify where you installed wxX11
WX_DIR = ~/wxX11-2.8.4

VERSION = 1.4
RELEASENAME = golly-$(VERSION)
SHAREDFILES = Help Patterns Scripts README LICENSE
SRCFILES = BUILD TODO CHANGES makefile-gtk makefile-x11 makefile-mac makefile-win \
   bitmaps golly.rc *.ico appicon.xpm Info.plist.in *.icns *.h *.cpp
BINFILES = golly bgolly

CXXC = g++

# for Perl script support
PERL_INCLUDE = `perl -MExtUtils::Embed -e ccopts`
PERL_LINK = `perl -MExtUtils::Embed -e ldopts`
#!!! dynamically load Perl lib (yuk: still have to link DynaLoader.a for boot_DynaLoader)
#!!! PERL_LINK = --unresolved-symbols=ignore-all /usr/lib/perl/5.8/auto/DynaLoader/DynaLoader.a

# for Python script support
PYTHON_INCLUDE = -I`python -c "import distutils.sysconfig; print distutils.sysconfig.get_python_inc()"`

# use --inplace to force wxX11 build in case wxGTK is installed
CXXFLAGS = `$(WX_DIR)/wx-config --cxxflags --inplace` -O5 -DZLIB -DVERSION=$(VERSION) \
   -Wall -Wno-non-virtual-dtor -fno-strict-aliasing
LDFLAGS = `$(WX_DIR)/wx-config --libs --inplace` -lz
# we don't want to link against a specific library: PYTHON_LINK = -lpython2.3
# following generates "-Xlinker -export-dynamic" but doesn't seem to be needed
# PYTHON_LINK = `python -c "import distutils.sysconfig; print distutils.sysconfig.get_config_var('LINKFORSHARED')"`
PYTHON_LINK = 

### put .o files in an X11-specific subdir to avoid conflict with .o files created by GTK build
OBJDIR = ObjX11
BASEOBJ = $(OBJDIR)/bigint.o $(OBJDIR)/lifealgo.o $(OBJDIR)/hlifealgo.o $(OBJDIR)/hlifedraw.o \
   $(OBJDIR)/qlifealgo.o $(OBJDIR)/qlifedraw.o $(OBJDIR)/liferender.o $(OBJDIR)/viewport.o \
   $(OBJDIR)/readpattern.o $(OBJDIR)/writepattern.o $(OBJDIR)/liferules.o $(OBJDIR)/util.o \
   $(OBJDIR)/lifepoll.o
WXOBJ = $(OBJDIR)/wxutils.o $(OBJDIR)/wxprefs.o $(OBJDIR)/wxrule.o \
   $(OBJDIR)/wxinfo.o $(OBJDIR)/wxhelp.o $(OBJDIR)/wxstatus.o $(OBJDIR)/wxview.o \
   $(OBJDIR)/wxrender.o $(OBJDIR)/wxscript.o $(OBJDIR)/wxperl.o $(OBJDIR)/wxpython.o \
   $(OBJDIR)/wxfile.o $(OBJDIR)/wxedit.o $(OBJDIR)/wxcontrol.o $(OBJDIR)/wxundo.o \
   $(OBJDIR)/wxlayer.o $(OBJDIR)/wxmain.o $(OBJDIR)/wxgolly.o

all: $(OBJDIR) golly bgolly

$(OBJDIR):
	mkdir -p $(OBJDIR)

clean: 
	rm -f $(OBJDIR)/*.o
	rm -f golly bgolly

golly: $(BASEOBJ) $(WXOBJ)
	$(CXXC) $(CXXFLAGS) -o golly $(BASEOBJ) $(WXOBJ) $(LDFLAGS) $(PYTHON_LINK) $(PERL_LINK)

bgolly: $(BASEOBJ) $(OBJDIR)/bgolly.o
	$(CXXC) $(CXXFLAGS) -o bgolly $(BASEOBJ) $(OBJDIR)/bgolly.o $(LDFLAGS)

$(OBJDIR)/bigint.o: bigint.cpp bigint.h util.h
	$(CXXC) $(CXXFLAGS) -c -o $@ bigint.cpp

$(OBJDIR)/lifealgo.o: lifealgo.cpp lifealgo.h platform.h bigint.h viewport.h \
liferender.h lifepoll.h readpattern.h
	$(CXXC) $(CXXFLAGS) -c -o $@ lifealgo.cpp

$(OBJDIR)/hlifealgo.o: hlifealgo.cpp hlifealgo.h platform.h lifealgo.h bigint.h \
viewport.h liferender.h lifepoll.h readpattern.h liferules.h util.h
	$(CXXC) $(CXXFLAGS) -c -o $@ hlifealgo.cpp

$(OBJDIR)/hlifedraw.o: hlifedraw.cpp hlifealgo.h platform.h lifealgo.h bigint.h \
viewport.h liferender.h lifepoll.h readpattern.h liferules.h
	$(CXXC) $(CXXFLAGS) -c -o $@ hlifedraw.cpp

$(OBJDIR)/qlifealgo.o: qlifealgo.cpp qlifealgo.h platform.h lifealgo.h bigint.h \
viewport.h liferender.h lifepoll.h readpattern.h liferules.h util.h
	$(CXXC) $(CXXFLAGS) -c -o $@ qlifealgo.cpp

$(OBJDIR)/qlifedraw.o: qlifedraw.cpp qlifealgo.h platform.h lifealgo.h bigint.h \
viewport.h liferender.h lifepoll.h readpattern.h liferules.h util.h
	$(CXXC) $(CXXFLAGS) -c -o $@ qlifedraw.cpp

$(OBJDIR)/liferules.o: liferules.cpp liferules.h util.h
	$(CXXC) $(CXXFLAGS) -c -o $@ liferules.cpp

$(OBJDIR)/liferender.o: liferender.cpp liferender.h
	$(CXXC) $(CXXFLAGS) -c -o $@ liferender.cpp

$(OBJDIR)/readpattern.o: readpattern.cpp readpattern.h bigint.h platform.h lifealgo.h \
viewport.h liferender.h lifepoll.h util.h
	$(CXXC) $(CXXFLAGS) -c -o $@ readpattern.cpp

$(OBJDIR)/writepattern.o: writepattern.cpp writepattern.h platform.h lifealgo.h \
bigint.h viewport.h liferender.h lifepoll.h readpattern.h util.h
	$(CXXC) $(CXXFLAGS) -c -o $@ writepattern.cpp

$(OBJDIR)/util.o: util.cpp util.h
	$(CXXC) $(CXXFLAGS) -c -o $@ util.cpp

$(OBJDIR)/viewport.o: viewport.cpp viewport.h bigint.h platform.h lifealgo.h \
liferender.h lifepoll.h readpattern.h
	$(CXXC) $(CXXFLAGS) -c -o $@ viewport.cpp

$(OBJDIR)/lifepoll.o: lifepoll.cpp lifepoll.h util.h
	$(CXXC) $(CXXFLAGS) -c -o $@ lifepoll.cpp

$(OBJDIR)/wxutils.o: wxutils.cpp wxutils.h \
platform.h lifealgo.h bigint.h viewport.h liferender.h lifepoll.h readpattern.h \
wxgolly.h wxview.h wxmain.h wxscript.h
	$(CXXC) $(CXXFLAGS) -c -o $@ wxutils.cpp

$(OBJDIR)/wxprefs.o: wxprefs.cpp wxprefs.h \
Help/about.html \
bitmaps/hand_curs.xpm bitmaps/zoomin_curs.xpm bitmaps/zoomout_curs.xpm \
platform.h lifealgo.h bigint.h viewport.h liferender.h lifepoll.h readpattern.h \
wxgolly.h wxmain.h wxutils.h wxhelp.h wxinfo.h wxundo.h wxlayer.h wxscript.h
	$(CXXC) $(CXXFLAGS) -c -o $@ wxprefs.cpp

$(OBJDIR)/wxrule.o: wxrule.cpp wxrule.h \
platform.h lifealgo.h bigint.h viewport.h liferender.h lifepoll.h readpattern.h liferules.h \
wxgolly.h wxutils.h wxprefs.h wxundo.h wxlayer.h
	$(CXXC) $(CXXFLAGS) -c -o $@ wxrule.cpp

$(OBJDIR)/wxinfo.o: wxinfo.cpp wxinfo.h \
readpattern.h bigint.h wxgolly.h wxmain.h wxutils.h wxprefs.h
	$(CXXC) $(CXXFLAGS) -c -o $@ wxinfo.cpp

$(OBJDIR)/wxhelp.o: wxhelp.cpp wxhelp.h \
platform.h lifealgo.h bigint.h viewport.h liferender.h lifepoll.h readpattern.h \
wxgolly.h wxmain.h wxutils.h wxprefs.h wxscript.h wxundo.h wxlayer.h
	$(CXXC) $(CXXFLAGS) -c -o $@ wxhelp.cpp

$(OBJDIR)/wxstatus.o: wxstatus.cpp wxstatus.h \
platform.h lifealgo.h bigint.h viewport.h liferender.h lifepoll.h readpattern.h \
wxgolly.h wxutils.h wxprefs.h wxview.h wxmain.h wxscript.h wxundo.h wxlayer.h
	$(CXXC) $(CXXFLAGS) -c -o $@ wxstatus.cpp

$(OBJDIR)/wxview.o: wxview.cpp wxview.h \
platform.h lifealgo.h bigint.h viewport.h liferender.h lifepoll.h readpattern.h \
qlifealgo.h liferules.h hlifealgo.h \
wxgolly.h wxutils.h wxprefs.h wxhelp.h wxmain.h wxstatus.h wxrender.h \
wxscript.h wxundo.h wxlayer.h wxedit.h
	$(CXXC) $(CXXFLAGS) -c -o $@ wxview.cpp

$(OBJDIR)/wxrender.o: wxrender.cpp wxrender.h \
platform.h lifealgo.h bigint.h viewport.h liferender.h lifepoll.h readpattern.h \
qlifealgo.h liferules.h hlifealgo.h \
wxgolly.h wxutils.h wxprefs.h wxhelp.h wxstatus.h wxview.h wxundo.h wxlayer.h
	$(CXXC) $(CXXFLAGS) -c -o $@ wxrender.cpp

$(OBJDIR)/wxperl.o: wxperl.cpp wxperl.h \
platform.h lifealgo.h bigint.h viewport.h liferender.h lifepoll.h \
qlifealgo.h hlifealgo.h readpattern.h writepattern.h \
wxgolly.h wxmain.h wxview.h wxstatus.h wxutils.h wxprefs.h \
wxinfo.h wxhelp.h wxundo.h wxlayer.h wxscript.h wxedit.h
	$(CXXC) $(CXXFLAGS) $(PERL_INCLUDE) -c -o $@ wxperl.cpp

$(OBJDIR)/wxpython.o: wxpython.cpp wxpython.h \
platform.h lifealgo.h bigint.h viewport.h liferender.h lifepoll.h \
qlifealgo.h hlifealgo.h readpattern.h writepattern.h \
wxgolly.h wxmain.h wxview.h wxstatus.h wxutils.h wxprefs.h \
wxinfo.h wxhelp.h wxundo.h wxlayer.h wxscript.h wxedit.h
	$(CXXC) $(CXXFLAGS) $(PYTHON_INCLUDE) -c -o $@ wxpython.cpp

$(OBJDIR)/wxscript.o: wxscript.cpp wxscript.h \
liferules.h \
wxgolly.h wxmain.h wxview.h wxrender.h wxstatus.h wxutils.h wxprefs.h \
wxundo.h wxlayer.h wxperl.h wxpython.h wxedit.h
	$(CXXC) $(CXXFLAGS) -c -o $@ wxscript.cpp

$(OBJDIR)/wxfile.o: wxfile.cpp \
platform.h lifealgo.h bigint.h viewport.h liferender.h lifepoll.h readpattern.h \
qlifealgo.h liferules.h hlifealgo.h writepattern.h \
wxgolly.h wxutils.h wxprefs.h wxrule.h wxinfo.h wxstatus.h \
wxview.h wxrender.h wxscript.h wxmain.h wxundo.h wxlayer.h
	$(CXXC) $(CXXFLAGS) -c -o $@ wxfile.cpp

$(OBJDIR)/wxedit.o: wxedit.cpp wxedit.h \
platform.h lifealgo.h bigint.h viewport.h liferender.h lifepoll.h readpattern.h \
qlifealgo.h liferules.h hlifealgo.h \
wxgolly.h wxutils.h wxprefs.h wxmain.h wxstatus.h wxscript.h wxview.h \
wxundo.h wxlayer.h
	$(CXXC) $(CXXFLAGS) -c -o $@ wxedit.cpp

$(OBJDIR)/wxcontrol.o: wxcontrol.cpp \
platform.h lifealgo.h bigint.h viewport.h liferender.h lifepoll.h readpattern.h \
qlifealgo.h liferules.h hlifealgo.h \
wxgolly.h wxutils.h wxprefs.h wxrule.h wxstatus.h wxview.h wxscript.h wxmain.h \
wxhelp.h wxundo.h wxlayer.h wxedit.h
	$(CXXC) $(CXXFLAGS) -c -o $@ wxcontrol.cpp

$(OBJDIR)/wxundo.o: wxundo.cpp wxundo.h \
platform.h lifealgo.h bigint.h qlifealgo.h hlifealgo.h viewport.h writepattern.h \
wxgolly.h wxmain.h wxview.h wxutils.h wxscript.h wxlayer.h wxprefs.h wxedit.h
	$(CXXC) $(CXXFLAGS) -c -o $@ wxundo.cpp

$(OBJDIR)/wxlayer.o: wxlayer.cpp wxlayer.h \
bitmaps/add.xpm bitmaps/clone.xpm bitmaps/duplicate.xpm bitmaps/delete.xpm \
bitmaps/stack.xpm bitmaps/stack_down.xpm bitmaps/tile.xpm bitmaps/tile_down.xpm \
platform.h lifealgo.h bigint.h qlifealgo.h hlifealgo.h viewport.h \
wxgolly.h wxmain.h wxview.h wxstatus.h wxutils.h wxprefs.h wxscript.h \
wxundo.h wxedit.h
	$(CXXC) $(CXXFLAGS) -c -o $@ wxlayer.cpp

$(OBJDIR)/wxmain.o: wxmain.cpp wxmain.h \
bitmaps/play.xpm bitmaps/stop.xpm bitmaps/hash.xpm bitmaps/hash_down.xpm \
bitmaps/reset.xpm bitmaps/new.xpm bitmaps/open.xpm bitmaps/save.xpm \
bitmaps/patterns.xpm bitmaps/patterns_down.xpm bitmaps/scripts.xpm bitmaps/scripts_down.xpm \
bitmaps/draw.xpm bitmaps/draw_down.xpm bitmaps/select.xpm bitmaps/select_down.xpm \
bitmaps/move.xpm bitmaps/move_down.xpm bitmaps/zoomin.xpm bitmaps/zoomin_down.xpm \
bitmaps/zoomout.xpm bitmaps/zoomout_down.xpm bitmaps/info.xpm bitmaps/help.xpm \
platform.h lifealgo.h bigint.h viewport.h liferender.h lifepoll.h readpattern.h \
qlifealgo.h liferules.h hlifealgo.h writepattern.h \
wxgolly.h wxutils.h wxprefs.h wxinfo.h wxhelp.h wxstatus.h \
wxview.h wxrender.h wxscript.h wxundo.h wxlayer.h
	$(CXXC) $(CXXFLAGS) -c -o $@ wxmain.cpp

$(OBJDIR)/wxgolly.o: wxgolly.cpp wxgolly.h \
Help/about.html appicon.xpm \
platform.h lifealgo.h bigint.h viewport.h liferender.h lifepoll.h readpattern.h util.h \
wxmain.h wxstatus.h wxview.h wxutils.h wxprefs.h
	$(CXXC) $(CXXFLAGS) -c -o $@ wxgolly.cpp

$(OBJDIR)/bgolly.o: bgolly.cpp \
platform.h lifealgo.h bigint.h viewport.h liferender.h lifepoll.h readpattern.h \
hlifealgo.h liferules.h qlifealgo.h writepattern.h util.h
	$(CXXC) $(CXXFLAGS) -c -o $@ bgolly.cpp

srcdist:
	-rm -rf $(RELEASENAME)-src
	mkdir $(RELEASENAME)-src
	cp -rp $(SRCFILES) $(SHAREDFILES) $(RELEASENAME)-src
	find $(RELEASENAME)-src -name CVS | xargs rm -rf
	tar -cf - ./$(RELEASENAME)-src | gzip > $(RELEASENAME)-src.tar.gz

bindist: all
	-rm -rf $(RELEASENAME)-x11
	mkdir $(RELEASENAME)-x11
	cp -rp $(BINFILES) $(SHAREDFILES) $(RELEASENAME)-x11
	find $(RELEASENAME)-x11 -name CVS | xargs rm -rf
	tar -cf - ./$(RELEASENAME)-x11 | gzip > $(RELEASENAME)-x11.tar.gz
