Executive Summary
=================

Maxima can now be built under Windows without recourse to any
Unix-like utilities. To do so, follow the purely lisp-based build
procedure in INSTALL.lisp.

Maxima can be simply compiled and installed under MSYS or Cygwin by
following the GNU Autotools instructions in INSTALL. With a few more
steps, Maxima will create a windows installer executable.  The
instructions for doing so are contained in this file. Note, however,
that this process is not as polished as the Unix-like install process.

In order to create the Maxima Windows installer from the maxima tarball 
distribution, I do the following in a MSYS window:
----------------------------------------------------
./configure --prefix=c:/maxima \
    --enable-lang-es --enable-lang-pt --enable-lang-pt_BR
make
make install
make iss
----------------------------------------------------
Then run Inno Setup on the generated maxima.iss file. That is all it
takes.


External Requirements
=====================

1) MSYS+MinGW, including mktemp
2) msysDTK
3) GCL
4) Tcl/Tk
5) Starkit, TclKit and img.kit
6) InnoSetup
7) gnuplot
8) wxMaxima
9) Microsoft HTML Help Workshop
10) Perl 5.8 (ActivePerl)
11) Python

Detailed Instructions
=====================

The instructions below apply to the maxima release tarball. In order
to build from the cvs repository, cvs, autoconf and automake are also
required. Follow the directions in INSTALL.cvs before proceeding.

1) Get a working msys+mingw installation from www.mingw.org. At this
time (November 2006) it is essential to install the versions of gcc and
binutils listed here to obtain a working gcl.  The files are available
from <http://sourceforge.net/project/showfiles.php?group_id=2435>:
   a) Get and install MinGW-3.1.0-1.exe
   b) Install MSYS-1.0.10.exe 
      The installer should magically find your mingw installation
      and add it to your path.
   c) Install tcltk-8.4.1-1.exe
      Install it into directory where MSYS/MinGW can find it,
      for example mingw/bin directory.
   d) Install gcc-3.3.1
   e) Install binutils-2.14.90 from 
      ftp://ftp.sf.net/m/mi/mingw/binutils-2.14.90-20030807-1.tar.gz
   f) Install msysDTK-1.0.1.exe
      It provides Perl and autotools (autoconf/automake).
      msysDTK-1.0.1 comes with Perl version 5.6.  This is now too old.
      Since Maxima 5.11 we require version 5.8. 

      or install

      - automake msys-autoconf-2.59.tar.bz2
      - autoconf msys-automake-1.8.2.tar.bz2
      - libtool msys-libtool-1.5.tar.bz2
   g) Download the MinGW implementation of mktemp from: 
      http://downloads.sourceforge.net/mingw/mktemp-1.5-MSYS.tar.bz2 (4 Kb)
      Install by (cd /; tar xjf /path/to/mktemp-1.5-MSYS.tar.bz2)

NOTE: gcc 3.3.3 and gcc 3.4.0 do NOT work; likewise binutils 2.13.90
and 2.15.90, but 2.17.50-20060824 is OK.

This is output of msysinfo command for MSYS system with
all required components:
-----------------------------------------------------------------
MSYS 1.0.10(0.46/3/2) 2004-03-15 07:17 i686 unknown; targ=MINGW32
GNU bash, version 2.04.0(1)-release (i686-pc-msys); ENV=.profile
GNU Make version 3.79.1,Built for i686-pc-msys; MAKE_MODE=unix
gcc.exe (GCC) 3.3.1 (mingw special 20030804-1); targ=MINGW32
GNU ld version 2.14.90 20040120
   789320 Tue Mar 16 10:32:49 2004 /bin/msys-1.0.dll
    52064 Thu Jan 02 05:05:27 2003 /bin/msysltdl-3.dll
   135680 Tue Mar 16 10:32:48 2004 /bin/make.exe
    84992 Thu Aug 07 23:29:00 2003 /mingw/bin/gcc.exe
   617472 Tue Jan 20 21:57:52 2004 /mingw/bin/ld.exe
-----------------------------------------------------------------

2) Get a working GCL 

Get the GCL 2.6.7 release tarball from any GNU mirror or 
GCL 2.6.8pre from CVS.  CVS date must be November 2006 or later.  
See  <http://savannah.gnu.org/projects/gcl/>. 
Install GCL sources in your MSYS user home directory ~/gcl-2.6.8

Then compile and install it with

cd ~/gcl-2.6.8
./configure --enable-ansi --prefix="c:/gcl"
make
make install

Exact value of --prefix does not matter but make sure that
c:\gcl\bin is in the MSYS path.

Check that gcl works by typing gcl at MSYS command line
-----------------------------------------------------------------------
$ gcl
GCL (GNU Common Lisp)  2.6.8 ANSI    Nov 11 2006 23:08:49
Source License: LGPL(gcl,gmp), GPL(unexec,bfd,xgcl)
Binary License:  GPL due to GPL'ed components: (UNEXEC)
Modifications of this banner must retain notice of a compatible license
Dedicated to the memory of W. Schelter

Use (help) to get some basic information on how to use GCL.
Temporary directory for compiler files set to C:/DOCUME~1/user/LOCALS~1/Temp/

>(quit)
-----------------------------------------------------------------------

3) Get and install TclKit and Starkit sdx from <http://www.equi4.com>. 

Download sdx.bat and sdx.kit from <http://www.equi4.com/pub/sk/>. 
Download tclkit-win32.upx.exe and tclkitsh-win32.upx.exe from 
<http://www.equi4.com/pub/tk/8.5.2/>.

Install the following four files 
	sdx.bat  sdx.kit  tclkit-win32.upx.exe  tclkitsh-win32.upx.exe
in your MSYS user home directory in ~/programs/star

Download img.kit from <http://www.tcl.tk/starkits/> and put it in
~/programs/star

6) Get and install Inno Setup from
<http://www.jrsoftware.org/isinfo.php>. 

7) Download the gnuplot windows binary from <http://gnuplot.sourceforge.net>.
Version 4.0 patchlevel 0 works. 
Install in your MSYS user home directory in ~/programs/gnuplot 

8) Download the wxMaxima windows binary from <http://wxmaxima.sourceforge.net>.
Use wxMaxima 0.6.5 with Maxima 5.9.3 or earlier, 
wxMaxima 0.7.0 with Maxima 5.10.0,
and wxMaxima 0.7.1 with Maxima 5.11.0.

Install it to default location, say C:\Program Files\wxMaxima. 
Then copy contents of wxMaxima directory excluding \uninst subdirectory
to your MSYS user home directory ~/programs/wxMaxima

NOTE: Location of Starkit/TclKit, gnuplot and wxMaxima is controlled
by the override-able variables and their defaults are:
 
TCLKITSH = tclkitsh.exe
TCLKITDIR = ../../../../programs/star
SDXDIR = $(TCLKITDIR)
GCCPREFIX=/mingw
GNUPLOTDIR = ../../../../programs/gnuplot
WXMAXIMADIR = ../../../../programs/wxMaxima

To see how they are used, look in interfaces/xmaxima/win32/Makefile.in
and Makefile.am in the top level maxima directory.  You may change
their values according to your preferences.

9) Get Microsoft HTML Help Workshop from 
<http://www.microsoft.com/downloads/details.aspx?familyid=00535334-c8a6-452f-9aa0-d597d16580cc&displaylang=en>
and install it.  

Make sure that HHW directory is within PATH (edit PATH environment
variable with either Windows or MSYS approach), so the HTML Help Workshop
compiler command "hhc.exe" is available at the MSYS command prompt.

For reference, to change PATH within MSYS only, edit the file
c:\msys\1.0\etc\profile and add the following line after the initial
setting of PATH:
    export PATH="/c/gcl/bin:$PATH"

10) Install Perl 5.8.  ActivePerl binaries provided by
    http://www.activestate.com work.  Again add the perl bin
    directory to PATH.  Alternatively use a wrapper script like

    $ cat /usr/local/bin/perl
    #!/bin/sh
    exec /c/perl/bin/perl $@

11) Install Python 2.6. ActivePython binaries provided by
    http://www.activestate.com work.

11) Following components
    a) tcltk (e.g. wish84 command), 
    b) gcl (gcl command),
    c) HTML Help Workshop compiler (hhc command)
    d) perl
    e) python
should also be available at the MSYS command prompt.

If this is not the case, edit your PATH variable or add wrapper scripts.

12) You should now be ready to compile and install maxima. 
Configure maxima so that it will install in some sort of temporary
directory. The directory does not need to exist ahead of time.

./configure --prefix="c:/maxima" \
  --enable-lang-es --enable-lang-pt --enable-lang-pt_BR
make
make check
make install
make iss

The "check" should pass all tests except those listed as known
failures.

13) Once "make iss" is complete, run Inno Setup on the maxima.iss
file. It is recommended to remove the temporary maxima install
directory (c:/maxima above) before testing the installation.

14) Test the installed package.  For example
 o Run the maxima testsuite: run_testsuite()
 o Try compiling a function.  This has been a problem in the past
    - f(x):=x+2;
    - compile(f);
    - f(2);
 o Plot something
 o Try out the on-line help: describe(sin)

