(Previous | Contents | Next)

## Compiling LAMARC

We provide executables of LAMARC for many systems, but if you cannot use these, or wish to compile the program yourself, we provide source code as well. This article discusses our experience compiling LAMARC. We welcome your comments on the use of other compilers and computing environments.

LAMARC is written in C++. We tried to avoid advanced or new features of the language, but very old compilers will probably not work. We recommend the use of GNU g++ on any machine which supports it; this is the compiler we used to develop LAMARC, and it works well on most systems.

### Compilation and Testing of Released Executables

Here is a list of machine/compiler combinations we have tried, with comments on our success or lack of it.

OS Family | Compiler Used | Compiled On | Tested On | Notes
Linux | GNU g++ 4.5.1 | red hat 2.6.18-128.1.1.el5 x86_64 | Our code should compile on any Linux- or Unix-based system. If you are using a compiler other than g++, the GNU C++ compiler, you may need to give our configure script and makefiles some extra help Previous releases have successfully compiled on 32 bit red hat machines, but we did not have one at our disposal for this release.
GNU g++ 4.3.3 (released 64-bit executables) | red hat 2.6.18-128.1.1.el5 x86_64
GNU g++ 4.1.2 | red hat 2.6.18-128.1.1.el5 x86_64
GNU g++ 4.3.2 | debian 2.6.18-4-k7 32 bit i686
Windows | MinGW cross compile GNU g++ 3.4.2 MinGW runtime 3.7 w32 API 3.2 (released 32-bit lam_conv executable) | red hat 2.6.18-128.1.1.el5 x86_64 | 64-bit Windows 7 Professional | We create our Windows executables by cross compiling from Linux and/or Windows using a Mingw-w64 toolchain of g++.
MinGW64 cross compile GNU g++ 4.5.1 i686 Cygwin 1.7.7 (released 64-bit lamarc executable) | 64-bit Windows 7 Professional
MacOS X | GNU g++ 4.0.1 | 32 bit intel-mac OS X 10.4.11 Darwin Kernel 8.11.1 | 32 bit intel-mac OS X 10.4.11 Darwin Kernel 8.11.1 | As of Lamarc version 2.0, we have stopped supporting the Mac OS 9 platform. We no longer distribute 32-bit executables for the Mac but are still able to compile them. If you have a 32-bit machine, and cannot compile your own executables, please contact us at lamarc@u.washington.edu and we'll see if we can get you an executable that works for you. The distributed wxWidgets code will not compile with g++ 4.0.0. `lam_conv`, the lamarc file converter does not compile on Mac OS X 10.6 in its current form. However, `lamarc` will. We recommend you use a copy of `lam_conv` provided in the .dmg file and compile `lamarc` to run on your newer Mac. The `lamarc` in the .dmg should also run on your machine, but a natively compiled version may be faster.
32 bit powerpc OS X 10.4.11 Darwin Kernel 8.11.0
GNU g++ 4.0.1 (released 64-bit executables) | 64 bit intel-mac OS X 10.5.8 Kernel 9.8.0 | 64 bit intel-mac OS X 10.5.8 Kernel 9.8.0
64 bit intel-mac OS X 10.6.2 Kernel 10.2.0

### Basic Instructions for Compiling and Installing LAMARC on *-nix Systems

Here are basic instructions for compiling on Linux/Unix/Mac OSX systems.

Begin by un-taring the distribution and creating a sub-directory to compile in. This will keep your object files from cluttering up a listing of the top level of the distribution.

        tar xfvz lamarc-2.1.9-src.tar.gz
        cd lamarc-2.1.9
        mkdir release
        cd release

The configure script queries your system and produces a Makefile tailored to your computing environment. Try invoking it like this:

        ../configure

or, if that doesn't work, like this:

        sh ../configure

The configure script will probably complain that you don't have wxWidgets installed. (wxWidgets is a free, open source toolkit for GUI applications. Through it, we provide native look-and-feel Linux, Mac OS X, and Windows GUI interfaces to our file converter using a single code base.) If you already have wxWidgets, you can invoke `configure` like this:

        sh ../configure --with-wx-config=/path/to/wx-config

If you don't have wxWidgets, or your current version is too old, the following invocation should build a wxWidgets distribution for you. (Be warned that this may take some time.)

        ../configure --enable-buildwx

If none of these variations for invoking the configure script worked for you, skip ahead to Advanced Configuration Options.

You are now ready to make lamarc. (It is recommended that you use the GNU make utility. On some systems it may be called gmake.)

        make

This will produce executables lamarc and lam_conv if you're running on a Unix or Linux system. If you're running under Mac OS X, you should get clickable executables.

To install the executables and html documentation (you may need sysadmin privilidges to do this, and it is not required to use the program) type either

        make install

or

        make install-strip

Either of these should install the executables in /usr/local/bin and the documentation under /usr/local/html/lamarc. Executables installed either way have the same compute time performance. The install-strip versions are smaller but provide no debugging information, should you run into problems.

### Advanced Configuration Options

For most users, the configure script provided with the distribution should work as described above. However, there are several situations in which you may wish to change the behavior of the configure script. These include when:

- the configure declares it cannot proceed without LAMARC_CODE_OSTYPE,
- the configure declares it cannot proceed without GUI_TOOLKIT, or
- you wish to use a non-default compiler, or override variables such as CXXFLAGS and LDFLAGS.

If these techniques are not adequate to solve your problems, you may wish to:

- compile a batch only version of the lamarc converter,
- default to an ancient version of the lamarc converter, or
- edit the configure script and Makefile yourself.

#### Setting LAMARC_CODE_OSTYPE

While most of the lamarc code is not dependent on the user's operating system, there are a few minor differences in I/O handling and standard library headers. These differences require the setting of the variable LAMARC_CODE_OSTYPE so that appropriate code can be exercised for each operating system.

Under normal circumstances, the configure script should be able to guess the correct value for LAMARC_CODE_OSTYPE. If it cannot, you may set the value by including an assignment to it when you invoke the configure script. For example

        ../configure LAMARC_CODE_OSTYPE=LAMARC_COMPILE_MACOSX
        make

The assignment to LAMARC_CODE_OSTYPE should come after any other arguments to the configure script, for example:

        ../configure --enable-debug LAMARC_CODE_OSTYPE=LAMARC_COMPILE_LINUX
        make

Legal values for LAMARC_CODE_OSTYPE are:

- LAMARC_COMPILE_LINUX
- LAMARC_COMPILE_MACOSX
- LAMARC_COMPILE_WINDOWS

#### Setting GUI_TOOLKIT

Under normal circumstances, the configure script should be able to guess the correct value for GUI_TOOLKIT. If it cannot, or you wish to use a different toolkit, you should set the value for GUI_TOOLKIT. As with setting LAMARC_CODE_OSTYPE, the assignment is made at the end of the invocation of configure. For example:

        ../configure GUI_TOOLKIT=gtk2
        make

The assignment to GUI_TOOLKIT should come after any other arguments to the configure script, and is most likely to be needed when you are also setting LAMARC_CODE_OSTYPE. For example:

        ../configure --enable-debug LAMARC_CODE_OSTYPE=LAMARC_COMPILE_MACOSX GUI_TOOLKIT=mac
        make

Tested values for GUI_TOOLKIT are:

- gtk2 -- tested on linux systems
- mac -- tested on OS X systems
- msw -- tested on a Windows system

It is possible that other toolkit values supported by wxWidgets work, including x11, Motif, and OS/2. If you wish to build for one of these toolkits, we suggest you start with wxWidget's information on supported platforms (http://www.wxwidgets.org/docs/platform.htm).

#### Specifying non-standard compiler and/or build flags

The configure script is designed to allow you to specify a compiler or to pass options to the compiler or preprocessor. For example, if you are testing out a new C++ compiler you might invoke it like this:

        ../configure CXX=/path/to/my/compiler CXXFLAGS="I /path/to/my/include/files"
        make

For more information on options and environment variables that effect the configure script type

        ../configure --help

#### Compiling a batch only version of the converter

If you cannot successfully build for any GUI_TOOLKIT, or if you wish to run the lamarc file converter as part of a batch process, you can build a batch only version of the converter with the following commands (add CXX and CXXFLAGS, etc at the end if you need them):

        ../configure --disable-gui --enable-buildwx
        make

#### Compiling a wxWidgets-less converter

We recommend the following step only as a last resort. If you are going to attempt it, we recommend that you email us at lamarc@u.washington.edu. to make sure there isn't a better solution.

If you unable to build wxWidgets at all (and therefore not have access to the converter) you may instead configure and make as follows:

        ../configure --disable-converter
        make old_lam_conv
        make

You must explicitly give the argument to "make old_lam_conv" -- it will not otherwise be built. Please be warned that old_lam_conv is no longer maintained and will not have all features of the new converter.

#### Editing the configure script and Makefile yourself

If none of the above techniques allows you to build the lamarc programs, you have one further option -- edit the configure script and Makefiles yourself.

The easiest way to do this is to edit them the same way we do, using autoconf and automake. These tools are available at the following locations:

- http://www.gnu.org/software/autoconf/
- http://www.gnu.org/software/automake/

You may also wish to read additonal documentation available at

- http://sources.redhat.com/autobook/
- http://seul.org/docs/autotut/

Make any edits you need to Makefile.am or configure.ac and then issue the following series of commands

        aclocal
        autoconf
        autoheader
        automake --add-missing

You may then proceed to configure and make as in the section Basic Instructions... above.

(Previous | Contents | Next)