Building Lua, IM, CD and IUP in Linux

This is a guide to build all the Lua, IM, CD and IUP libraries in Linux. Notice that you may not use all the libraries, but this guide will build all of them. Later on it is explained how to build a single library.

System Configuration

You will have to download the development version of some packages installed on your system. Although the run time version of some of these packages are already installed, the development versions are usually not. The packages described here are for Ubuntu, but you will be able to identify them for other systems as well.

To build Lua you will need:

libreadline5-dev

To build IM you will need:

g++

To build CD you will need:

libx11-dev
libxpm-dev
libxmu-dev
  libxft-dev (for the XRender driver, OPTIONAL)
libgtk2.0-dev (for the GDK driver)

To build IUP you will need:

libgtk2.0-dev (for the GTK driver) [already installed for CD]
  libmotif-dev and x11proto-print-dev (for the Motif driver, OPTIONAL)
libgl1-mesa-dev and libglu1-mesa-dev (for the IupGLCanvas)

Download

Download the "xxx-X.X_Sources.tar.gz" package from the "Docs and Sources" folder for the version you want to build. Here are links for the Files section in Source Forge:

Lua - http://sourceforge.net/projects/luabinaries/files/
IM - http://sourceforge.net/projects/imtoolkit/files/
CD - http://sourceforge.net/projects/canvasdraw/files/
IUP - http://sourceforge.net/projects/iup/files/

Lua

Although we use Lua from LuaBinaries, any Lua installation can also be used. But you will have to define some environment variables before building IM, CD and IUP. Here is an example:

export LUA_SUFFIX=
export LUA_INC=/usr/local/include      [actually NOT necessary, this one is already used by gcc/g++]
export LUA_LIB=/usr/local/lib          [            "         ]
export LUA_BIN=/usr/local/bin          [necessary because luac will not be used from the PATH]

The tools bin2c and luac are necessary only if you need to rebuild LOH files. But since the source packages already includes them, those tools are in fact not necessary.

Unpacking

If you are going to build all the libraries, the makefiles and projects expect the following directory tree:

/xxxx/
      iup/
      cd/
      im/
      lua5.1/  [optional]

So, unpack all the source packages in the same folder that will do fine.

Building

As a general rule (excluding system dependencies): IUP depends on CD and IM, and CD depends on IM. So start by build IM, then CD, then IUP.

To start building go the the "src" folder and type "make". In IUP there are many "srcxxx" folders, so go to the up folder "iup" and type "make" that all the sub folders will be built.

Instead of building all the libraries, try building only the libraries you are going to use. The provided makefiles will build all the libraries, but take a look inside them and you will figure out how to build just one library.

Installation

After building you can copy the libraries files to the system folder. This is not necessary since you can use -I and -L on your makefiles, but it can be done. If you are inside one of the libraries main folder you can type:

cp lib/Linux26g4/* /usr/local/lib
cp include/* /usr/local/include

This will copy run time and development files. If you just want the run time, then do simply:

cp lib/Linux26g4/*.so /usr/local/lib

Also when coping development folders, if you want to keep the library headers in a separate folder, you can do:

cp -R iup/include /usr/local/include/iup
cp -R cd/include /usr/local/include/cd
cp -R im/include /usr/local/include/im

Then use in your makefile -Iiup -Icd -Iim.

This installation procedure also can be used for the pre-compiled binaries packages available for download. They contain the development and run time files you need.

If you don't want to copy the libraries to your system folder, you can still use them, but you will need to add the binaries folders to the LD_LIBRARY_PATH, for example:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/xxxx/iup/lib/Linux26g4:/xxxx/cd/lib/Linux26g4:/xxxx/im/lib/Linux26g4

In this case, in your makefile will will also need to specify those paths when linking using -L/xxxx/iup/lib/Linux26g4.

Lua

If you are NOT using LuaBinaries then you have two options to be able to use "require" with these libraries. You can create symbolic links in the Lua C modules folder to the installed libraries run time:

ln -s /usr/local/lib/lipiuplua51.so /usr/local/lib/lua/5.1/iuplua.so
ln -s /usr/local/lib/lipiupluacontrols51.so /usr/local/lib/lua/5.1/iupluacontrols.so
...

You can set the LUA_CPATH environment variable:

export LUA_CPATH=./\?.so\;./lib\?.so\;./lib\?51.so\;