wxWidgets 2.6.2 for MGL installation
------------------------------------

IMPORTANT NOTE:

  If you experience problems installing, please re-read these
  instructions and other related files (todo.txt, bugs.txt and
  osname.txt for your platform if it exists) carefully before
  mailing wxwin-users or the author. Preferably, try to fix the
  problem first and then send a patch to the author.
  
  When sending bug reports tell us what version of wxWidgets you are 
  using (including the beta) and what compiler on what system. One 
  example: wxMGL 2.6.2, gcc 2.95.3, Redhat 7.0

First steps
-----------

- Download SciTech MGL library (version 5.0) from http://www.scitechsoft.com.
  The downloads page is here (you need MGL version 5.0beta7 or newer):
  http://scitechsoft.com/products/dev/mgl_download/mgl_down.html
  
  Install MGL according to provided instructions. In particular, make sure that
  MGL_ROOT and NUCLEUS_PATH environment variables are set before attempting to
  build wxMGL.

  Make sure you installed all MGL components, including the "fonts" package
  (it's called mgl50b7-font.tar.gz in Linux version). It is important to have
  SciTech's basic fonts in $(MGL_ROOT)/fonts directory (you may want to add
  Arial TrueType font for better output quality) and basic cursors in 
  $(MGL_ROOT)/cursors. wxMGL depends on their presence.

- Download wxMGL-x.y.z.tgz, where x.y.z is the version number.
  Download documentation in a preferred format, such as
  wxWidgets-HTML.zip or wxWidgets-PDF.zip.

- Make a directory such as ~/wx and unarchive the files into this
  directory.

- It is recommended that you install bison and flex; using yacc
  and lex may require tweaking of the makefiles.

- You can now use configure or makefiles to build wxWidgets and the samples.
  In case of problems, please use GNU make.


COMPILING
=========

Following systems are supported by wxMGL so far:
 - Unix (Linux etc.)
 - MS-DOS (DJGPP and Watcom compilers)


* Compiling using configure
----------------------------

These instructions apply to installation on a Unix system (such as Linux). Please
see bellow for information on using configure on non-Unix platforms.

If you compile wxWidgets on Linux for the first time and don't like to read 
install instructions just do (in the base dir):

> ./configure --with-mgl
> make
> su <type root password>
> make install
> ldconfig
> exit

Afterwards you can continue with

> make
> su <type root password>
> make install
> ldconfig
> exit

If you want to remove wxWidgets on Unix you can do this:

> su <type root password>
> make uninstall
> ldconfig
> exit

You can set many options to configure. Type

> ./configure --help

and you will get a list of supported options.


* Using wxMGL library built with configure
-------------------------------------------

'make install' will install wx-config script that can (and should) be used
to get compiler flags that are needed to build your program. wx-config --cxxflags
will output necessary C++ compiler flags and wx-config --libs will list all
needed libraries. See an example of wxWidgets application makefile:

minimal: minimal.o
	$(CC) -o minimal minimal.o `wx-config --libs`

minimal.o: minimal.cpp mondrian.xpm
	$(CC) `wx-config --cxxflags` -c minimal.cpp -o minimal.o


* Using configure to build MS-DOS version
------------------------------------------

Even though configure is a Unix script, you can use it to build MS-DOS version
of the wxMGL library. There are two possible ways to achieve this: you can
either cross-compile from Unix or compile natively. Either way you will needed
the DJGPP port of GCC compiler freely available from:
    http://www.delorie.com/djgpp/getting.html

Scitech MGL must be compiled natively, and to do this you will need to download
the following files (from the current/v2 and current/v2gnu directories). You
should get the latest versions available rather than the exact versions shown
below, they are just an example of what to look for:

djdev203.zip B   1,530,778 020811 DJGPP development kit 2.03
bnu2161b.zip B   3,483,132 050708 GNU Binutils 2.16.1 for DJGPP V2
gcc344b.zip  B   3,772,211 050527 GNU GCC 3.4.4 for DJGPP V2
gpp344b.zip  B   4,026,725 050527 GNU C++ Compiler 3.4.4 for DJGPP V2

If you want to build wxMGL natively using the DJGPP compiler, you will have to
install a couple of Unix utilities. I think the following is the minimum that
will work:

bsh204b.zip  B     454,308 020106 GNU Bash shell 2.04 for DJGPP V2
fil41b.zip   B   1,738,170 030830 GNU fileutils 4.1 for DJGPP V2
find41b.zip  B     306,826 010505 GNU findutils 4.1 for DJGPP V2
grep24b.zip  B     254,997 000116 GNU Grep 2.4 for DJGPP V2
mak3791b.zip B     272,798 020106 GNU Make 3.79.1 for DJGPP V2
sed414b.zip  B     159,920 050331 GNU Sed 4.1.4 for DJGPP V2
shl2011b.zip B   1,195,021 020419 GNU sh-utils 2.01 for DJGPP V2

You'll probably also want a debugger:
gdb611b.zip  B   1,585,648 040629 GNU GDB Debugger 6.1.1 for DJGPP V2

And maybe some of these:
faq230b.zip  B     679,865 000203 FAQ 2.30 for DJGPP v2.03
dif281b.zip  B     402,859 040911 GNU Diffutils 2.8.1 for DJGPP V2
gwk314b.zip  B     968,667 050321 GNU Awk 3.1.4 for DJGPP V2
gzip135b.zip B     146,138 041215 GNU gzip 1.3.5 for DJGPP V2
lss374b.zip  B     199,805 020405 GNU Less 374 for DJGPP V2
pat254b.zip  B     114,250 040326 GNU Patch 2.5.4 for DJGPP V2
tar112ab.zip B     236,427 000305 GNU Tar 1.12a for DJGPP V2
whic211b.zip B      86,296 000911 GNU which 2.11 for DJGPP V2

The system you compile on must support long file names. You can use Windows 9x
or Windows 2000/XP or later. For example:

C:\>set MGL_ROOT=c:/scitech
C:\>set DJGPP=c:/djgpp/djgpp.env
C:\>PATH=c:\djgpp\bin
C:\>set PS1=\w\$
C:\>bash
c:/$ mkdir build
c:/$ cd build
c:/build$ ../wxWidgets/configure
c:/build$ make
c:/build$ cd samples/minimal
c:/build/samples/minimal$ make

Cross-compilation is very easy. It works like ordinary compilation with
configure, you only have to specify the target:

> ./configure --with-mgl --build=i586-linux --host=i586-pc-msdosdjgpp
> make

For this to work, you must have installed a cross compiler on your system. Ready
made binaries are not available for very many systems, so usually this means you
must obtain the djgpp sources and compile them yourself.

NetBSD does have a binary package which can be installed with:
    # pkg_add cross-i386-msdosdjgpp

You can also try asking on the wx-dev mailing list. If someone else has already
built a cross-compiler for you platform they may be willing to send you the
binaries.


* Building wxMGL for MS-DOS using Watcom C/C++
-----------------------------------------------

You will need Watcom C/C++ compiler version 11 or newer (Watcom is going to be 
OpenSourced by SciTech, check out http://www.openwatcom.org).

1. Edit $(WXDIR)\include\wx\univ\setup.h to suit your needs (in same way as you
   do when compiling wxMSW).

2. Go to $(WXDIR)\src\mgl and run
   > wmake -f makefile.wat all

3. You can compile the samples by typing 'wmake -f makefile.mgl all' in sample
   directory if this file is available. If it is not, copy makefile.wat to 
   makefile.mgl and replace the line that says

       !include $(WXDIR)\src\makeprog.wat

   with

       !include $(WXDIR)\src\mgl\makeprog.wat


Compilation notes for MGL 5.1
-----------------------------

The mvis library doesn't compile with current versions of gcc. However wxMGL
does not use this part of MGL, so it can be taken out of the compile, e.g.:

--- scitech/src/makefile.orig	2004-04-15 20:36:32.000000000 +0100
+++ scitech/src/makefile	2005-04-26 01:50:12.000000000 +0100
@@ -88,7 +88,7 @@
 
 # Target to build libraries for one compiler for SciTech MGL Graphics Library
 
-all_mgl:    $(T_PM) $(T_GCONSOLE) $(T_SNAP) $(T_TECH) $(T_MVIS) $(T_FIXED) \
+all_mgl:    $(T_PM) $(T_GCONSOLE) $(T_SNAP) $(T_TECH) $(T_FIXED) \
             $(T_GM) $(T_GLUT) $(T_MGL)
     @$(ECHO) =============================================================================
     @$(ECHO) DONE: Single compiler MGL build completed successfully!

The dos version of _lztimer.asm can't be assembled by the GNU assember. A
newer version is available from Scitech, a patch between the version in MGL
5.1 and the newer version is included below:

--- scitech/src/pm/dos/_lztimer.asm.orig	2004-04-15 20:36:33.000000000 +0100
+++ scitech/src/pm/dos/_lztimer.asm	2005-04-26 18:39:57.000000000 +0100
@@ -4,11 +4,11 @@
 ;*
 ;*  ========================================================================
 ;*
-;*   Copyright (C) 1991-2002 SciTech Software, Inc. All rights reserved.
+;*   Copyright (C) 1991-2004 SciTech Software, Inc. All rights reserved.
 ;*
 ;*   This file may be distributed and/or modified under the terms of the
-;*   GNU Lesser General Public License version 2.1 as published by the Free
-;*   Software Foundation and appearing in the file LICENSE.LGPL included
+;*   GNU General Public License version 2.0 as published by the Free
+;*   Software Foundation and appearing in the file LICENSE.GPL included
 ;*   in the packaging of this file.
 ;*
 ;*   Licensees holding a valid Commercial License for this product from
@@ -288,8 +288,8 @@
 ; Convert the BIOS time to microseconds
 
 @@CalcBIOSTime:
-        mov     ax,[WORD EndBIOSCount]
-        sub     ax,[WORD StartBIOSCount]
+        mov     ax,[EndBIOSCount]
+        sub     ax,[StartBIOSCount]
         mov     dx,54925            ; Number of microseconds each
                                     ;  BIOS count represents.
         mul     dx
@@ -352,17 +352,17 @@
 ; See if more than an hour passed during timing. If so, notify the user.
 
 @@CheckForHour:
-        mov     ax,[WORD StartBIOSCount+2]
-        cmp     ax,[WORD EndBIOSCount+2]
+        mov     ax,[StartBIOSCount+2]
+        cmp     ax,[EndBIOSCount+2]
         jz      @@CalcBIOSTime      ; Hour count didn't change, so
                                     ;  everything is fine
 
         inc     ax
-        cmp     ax,[WORD EndBIOSCount+2]
+        cmp     ax,[EndBIOSCount+2]
         jnz     @@TestTooLong       ; Two hour boundaries passed, so the
                                     ;  results are no good
-        mov     ax,[WORD EndBIOSCount]
-        cmp     ax,[WORD StartBIOSCount]
+        mov     ax,[EndBIOSCount]
+        cmp     ax,[StartBIOSCount]
         jb      @@CalcBIOSTime      ; a single hour boundary passed. That's
                                     ; OK, so long as the total time wasn't
                                     ; more than an hour.
@@ -384,8 +384,8 @@
 ; Convert the BIOS time to microseconds
 
 @@CalcBIOSTime:
-        mov     ax,[WORD EndBIOSCount]
-        sub     ax,[WORD StartBIOSCount]
+        mov     ax,[EndBIOSCount]
+        sub     ax,[StartBIOSCount]
         mov     dx,54925            ; Number of microseconds each
                                     ;  BIOS count represents.
         mul     dx
     

Bug reports
-----------

Please send bug reports with a description of your environment,
compiler and the error message(s) to the wxwin-developers mailing list at:

    wx-dev@lists.wxwindows.org

Vaclav Slavik, Julian Smart, Robert Roebling and Vadim Zeitlin, February 2002.
