Windows binary distribution II



The attached makefile builds a windows binary distribution.
It is similar to the script I posted earlier this week,
but I have found the makefile easier to work with as it allows 
incremental development.

It also has rules to:
 - patch a couple of demo files
 - generate .html from .texi files

Again, this is more proof of concept than finished product, but 
the result is broadly comparable to the maxima-5.5 windows binary
distribution, at least on win2k.

Raw materials are:
 - full cygwin distribution
 - mingw-1.1 distribution for gcc
 - gcl cvs
 - maxima cvs
 - utexas maxima-5.5 windows binary (for winkill.exe and tclwinkill.dll)
 - windows freewrap5.0 from freewrap.sourceforge.com

Build mingw gcl and maxima using Mike Thomas's recipe
Install freewrap and maxima-5.5 binary somewhere
Create a new directory
Copy the attached makefile into it and update the paths at the top
make

>From the windows gui create a shortcut in root of binary distribution,
assumed to be whatever, with
  - name: xmaxima
  - target: whatever\src\xmaxima.exe
  - Start in: whatever\
  - Icon: whatever\src\max.ico

#################### Makefile #############################
# Create a windows binary distribution - just working notes

# maxima-5.5 binary distribution
BINDIR_55=/cygdrive/c/Programs/maxima

# Freewap 5.0 for windows
FREEWRAP=/cygdrive/c/Programs/freewrap5.0

# Maxima source/build tree
MAXIMA_BUILD=/cygdrive/c/temp/maxima

# Location of mingw gcc.exe
GCC_EXE = \"C:\\\\Programs\\\\mingw\\\\bin\\\\gcc\"

SUBDIRS = src doc demo info share

all: dirs root src_ doc_ demo_ info_

dirs: 
	for D in $(SUBDIRS); \
	do \
	  [  -d $$D ] || mkdir $$D; \
	done

########### root directory #################################
root: maxima.gif intro.html tclpip83.dll init.lsp

maxima.gif: ${MAXIMA_BUILD}/archive/maxima.gif
	cp -p $< $@

tclpip83.dll: ${FREEWRAP}/tclpip83.dll
	cp -p $< $@

intro.html: ${MAXIMA_BUILD}/interfaces/xmaxima/intro.html
	cp -p $< $@

# This should generate a file containing a line like
# (setq compiler::*cc* "c:\\programs\\mingw\\bin\\gcc" )
# which points to the mingw gcc.exe
init.lsp:
	@echo "(setq compiler::*cc* $(GCC_EXE) )" > $@

########## src directory ###################################
src_: dirs src/maxima.exe src/plot.o src/server.lisp \
  src/max.ico src/tclwinkill.dll \
  src/winkill.exe src/xmaxima.exe

src/maxima.exe: ${MAXIMA_BUILD}/src/binary-gcl/maxima.exe
	cp -p $< $@

# An empty file will do
src/plot.o: 
	touch $@

src/server.lisp: ${MAXIMA_BUILD}/archive/src/server.lisp
	cp -p $< $@

src/max.ico: ${MAXIMA_BUILD}/archive/src/max.ico
	cp -p $< $@

src/tclwinkill.dll:  ${BINDIR_55}/src/tclwinkill.dll
	cp -p $< $@

src/winkill.exe: ${BINDIR_55}/src/winkill.exe
	cp -p $< $@

src/xmaxima.exe: ${MAXIMA_BUILD}/interfaces/xmaxima/xmaxima
	sed -e 's/saved_maxima/maxima/' < $< > src/xmaxima.tcl
	(cd src; ${FREEWRAP}/freewrap xmaxima.tcl -e; rm xmaxima.tcl)

########## doc ##############################
doc_: dirs doc_html doc_tests doc/manual.demo

doc_html: doc/examples.html doc/demos.html doc/plotmaxima.html \
  doc/demo.html

doc/examples.html: ${MAXIMA_BUILD}/interfaces/xmaxima/examples.html
	cp -p $< $@

doc/demos.html: ${MAXIMA_BUILD}/interfaces/xmaxima/demos.html
	cp -p $< $@

doc/plotmaxima.html: ${MAXIMA_BUILD}/interfaces/xmaxima/plotmaxima.html
	cp -p $< $@

doc/manual.demo: ${MAXIMA_BUILD}/demo/manual.demo
	cp -p $< $@

# The tests can be run from xmaxima interface.  Looks in doc
doc_tests: doc/rtest1.mac doc/rtest1a.mac doc/rtest2.mac doc/rtest3.mac \
	doc/rtest4.mac doc/rtest5.mac doc/rtest6.mac doc/rtest6a.mac \
	doc/rtest6b.mac doc/rtest7.mac doc/rtest8.mac doc/rtest9.mac \
	doc/rtest9a.mac doc/rtest10.mac doc/rtest11.mac doc/rtest12.mac \
	doc/rtest13.mac doc/rtest13s.mac doc/rtest14.mac doc/tests.lisp

doc/rtest%.mac: ${MAXIMA_BUILD}/tests/rtest%.mac
	cp -p $< $@

doc/tests.lisp: ${MAXIMA_BUILD}/tests/tests.lisp
	cp -p $< $@

############### demo ##################################
# These demos are listed in demos.html
demo_: demo/cf.dem demo/ezgcd.dem demo/macex.dem demo/macro.dem \
  demo/eigen.dem share/eigen.mac \
  demo/functs.dem share/functs.mac \
  demo/simpsn.dem

demo/%.dem: ${MAXIMA_BUILD}/demo/%.dem
	cp -p $< $@

demo/ezgcd.dem: ${MAXIMA_BUILD}/demo/ezgcd.dem
	cp -p $< $@

demo/macex.dem: ${MAXIMA_BUILD}/demo/macex.dem
	cp -p $< $@

demo/macro.dem: ${MAXIMA_BUILD}/demo/macro.dem
	cp -p $< $@

# Need to change .mc to .mac (grep to confirm still required)
demo/eigen.dem: ${MAXIMA_BUILD}/share/matrix/eigen.dem
	grep -q .mc $<
	sed -e 's/\.mc/.mac/' < $< > $@

# Need to change .mc to .mac (grep to confirm still required)
demo/functs.dem: ${MAXIMA_BUILD}/share/simplification/functs.dem
	grep -q .mc $<
	sed -e 's/\.mc/.mac/' < $< > $@	

demo/simpsn.dem: ${MAXIMA_BUILD}/share/numeric/simpsn.dem
	cp -p $< $@

##### info #####

info_: info_info info_html

info_info: info/maxima.info info/maxima.info-1 info/maxima.info-2 info/maxima.info-3 \
  info/maxima.info-4 info/maxima.info-5 info/maxima.info-6 info/maxima.info-7 \
  info/maxima.info-8 info/maxima.info-9 info/maxima.info-10 info/maxima.info-11 \
  info/maxima.info-12 info/maxima.info-13 info/maxima.info-14 info/maxima.info-15

INFO_HTML = info/maxima_toc.html info/maxima_1.html info/maxima_2.html info/maxima_3.html \
  info/maxima_4.html info/maxima_5.html info/maxima_6.html info/maxima_7.html \
  info/maxima_8.html info/maxima_9.html info/maxima_10.html info/maxima_11.html \
  info/maxima_12.html info/maxima_13.html info/maxima_14.html info/maxima_15.html \
  info/maxima_16.html info/maxima_17.html info/maxima_18.html info/maxima_19.html \
  info/maxima_20.html info/maxima_21.html info/maxima_22.html info/maxima_23.html \
  info/maxima_24.html info/maxima_25.html info/maxima_26.html info/maxima_27.html \
  info/maxima_28.html info/maxima_29.html \
  info/maxima_30.html info/maxima_31.html info/maxima_32.html info/maxima_33.html \
  info/maxima_34.html info/maxima_35.html info/maxima_36.html info/maxima_37.html \
  info/maxima_38.html info/maxima_39.html \
  info/maxima_40.html info/maxima_41.html info/maxima_42.html

info_html: $(INFO_HTML)

info/maxima.inf%: ${MAXIMA_BUILD}/doc/info/maxima.inf%
	cp -p $< $@

# Fudge this - ignore depenence on other texi files at present
$(INFO_HTML): ${MAXIMA_BUILD}/doc/info/maxima.texi 
	(cd info; texi2html -number -split_chapter -I ${MAXIMA_BUILD}/doc/info $< )

#### share #####
#
# Needed for demos
share/eigen.mac: ${MAXIMA_BUILD}/share/matrix/eigen.mac
	cp -p $< $@

share/functs.mac: ${MAXIMA_BUILD}/share/simplification/functs.mac
	cp -p $< $@