Linux instructions using make
This is a guide to building cmgui from source on linux. (For building on windows see Windows instructions ). If all goes smoothly it should take less than an hour and a half to build cmgui from source the first time. Much of that time will be spent twiddling your thumbs waiting for things to download or compile.
Some provisos: I am also assuming that you a trying to compile on a 32 bit linux machine. Which gives us the string 'i686-linux' as your architecture string.
If you have access to the CMISS server you can skip some steps by copying precompiled binaries/libraries directly. I have used 'scp' for file transfer, although if you can mount /hpc/cmiss from bioeng22 on you computer you can just use 'cp'.
- Step 0: Install any missing packages
You will need certain packages installed to build cmgui. A basic ubuntu installation is unlikely to have all the required packages installed by default. Here is a list of commands I ran to install required packages that I was missing when building cmgui from source on a basic ubuntu installation:
sudo apt-get install libmotif-dev sudo apt-get install libmotif3 sudo apt-get install subversion sudo apt-get install build-essential sudo apt-get install libgtk2.0-dev sudo apt-get install libglut3-dev sudo apt-get install libxp-dev sudo apt-get install libxmu-dev sudo apt-get install libgtkglext1-dev sudo apt-get install libxxf86vm-dev
Or in one massive hit:
sudo apt-get install libmotif-dev libmotif3 subversion \ build-essential libgtk2.0-dev libglut3-dev libxp-dev \ libxmu-dev libgtkglext1-dev libxxf86vm-dev cmake
If you don't have root access or are unfamiliar with installing packages get your sysadmin to install these for you. Note that you can check which packages and what versions are installed on your system using 'dpkg -l'. Piping the command through grep can be convenient to check on several packages, eg 'dpkg -l | grep libmotif'.
Part of the build process also uses CMake, please also make sure you have CMake install:
sudo apt-get install cmake
- Step 1: check openmotif is installed
If you ran the commands in Step 0 it should be installed. Note that you will need to have openmotif as lesstif is no good (the uil compiler in lesstif is broken). To check whether openmotif is installed see if you have the motif library file libXm.so by typing:
locate libXm.so
If you do not have root access you may need to sudo this command 'sudo locate libXm.so'. If nothing comes up have a look in /usr/lib to see if it is there (the locate database may not have updated yet). You can install openmotif via apt-get. If you need more info on openmotif see http://www.openmotif.org/
The latest version of openmotif is 2.3.0 beta which provides better support for wide character sets (unicode etc) than previous versions. If you have an earlier version of openmotif you may need to change your LANG environment variable to use ascii rather than utf-8. To do this in a shell:
export LANG=en_NZ
Consider adding this to your .profile file.
Note that eventually the motif version of cmgui will be superceded by the wx widgets version.
- Step 2: set up an svn client
You will need a subversion client, normally called svn on linux. To check if you have one installed type:
svn --help
You should see an appropriate help message if you have svn installed. Our server is currently version 1.4.x
- Step 3: create a cmiss root directory
A root directory for cmiss needs to be made where all code and libraries will be placed. You can create the cmiss directory wherever you wish. Tocreate one in the default home directory one up a shell and type:
cd ~ mkdir cmiss
You also need to set up an environment variable specifying the location of cmiss root and your bioeng username (replace 'bob' with your username), the easiest way is to do this in your .profile file. Edit your .profile file to include the line:
export CMISS_ROOT=~/cmiss export CMISS_USERNAME=bob
Now start up a new bash shell or source your .profile file. Some people will have a ~/.bash_profile file that calls ~/.bashrc, or vice versa, if you do put the above line in your ~/.bashrc file
- Step 4: check out the source from subversion
Assuming you have a subversion client you can check out cmgui source:
cd $CMISS_ROOT svn checkout https://svn.physiomeproject.org/svn/cmiss/cmgui/trunk cmgui
Note this is not all the code as you will also need various other libraries that cmgui depends on. These following libraries are required:
- perl_interpreter
- third_party
- itk
- mesa (if your OpenGL headers don't match)
Instructions on setting these libraries up are given below.
- Step 5: perl_interpreter
For building the perl interpreter from source follow Building the perl interpreter libraries. Be aware that if you build your own shared library based perl interpreter (which is probably what building from source will do) means that the cmgui you make will only run on your computer and others that have a binary compatible perl shared library. The CMISS server builds actually includes bindings to many different version of perl libraries and a static fallback perl so that the executable will still function even if the end user has no perl installed.
If you have access to the CMISS server you can do the following
Copy over the appropriate lib files for your operating system and the source header file. Someone with username bob on an i686 linux system would do:
cd $CMISS_ROOT/perl_interpreter mkdir lib scp -r ${CMISS_USERNAME}@bioeng22.bioeng.auckland.ac.nz:/hpc/cmiss/perl_interpreter/lib/i686-linux/ lib mkdir source scp ${CMISS_USERNAME}@bioeng22.bioeng.auckland.ac.nz:/hpc/cmiss/perl_interpreter/source/perl_interpreter.h source
- Step 6: third_party
Get the third_party libraries:
cd $CMISS_ROOT svn checkout https://svn.physiomeproject.org/svn/cmiss/third_party/trunk/ third_party
Known issue: The version of libxml2 included in the checkout may be outdated. Check in the folder $CMISS_ROOT/third_party/libxml2. Version 2.6.30 did not build in Ubuntu 8.10. The latest version can be downloaded from ftp://xmlsoft.org/libxml2/. Extract the tar.gz into $CMISS_ROOT/third_party/libxml2/, keeping the files in its libxml2-(version) folder, e.g. $CMISS_ROOT/third_oart/libxml2/libxml2-2.7.2.
Next, edit the Makefile in $CMISS_ROOT/third_party/libxml2/. Alter the first line to update your libxml2 version, e.g.:
VERSION = libxml2-2.7.2
Save, close, and finally:
cd $CMISS_ROOT/third_party make
- Step 7: itk
Cmgui is currently tested against InsightToolkit-3.12.0 version of the itk library. To build the itk library do the following:
cd $CMISS_ROOT/third_party/insighttoolkit tar -xzf InsightToolkit-3.12.0.tar.gz
InsightToolkit uses cmake to configure the build, under linux you can use the ncurses version ccmake. To configure the build:
mkdir build cd build ccmake ../InsightToolkit-3.12.0
Note: you can have the build directory anywhere you like, just give ccmake the relative path between your build directory and the source tree as the first argument. But don't build in the source tree, anywhere but there. Type "c" to run configure. Then configure the build with:
- BUILD_DOXYGEN OFF
- BUILD_EXAMPLES OFF
- BUILD_SHARED_LIBS OFF
- BUILD_TESTING OFF
- CMAKE_BACKWARDS_COMPATIBILITY 2.4
- CMAKE_BUILD_TYPE Release
- CMAKE_INSTALL_PREFIX /home/bob/cmiss/third_party/i686-linux (which should be equivalent to $CMISS_ROOT/third_party/i686-linux)
- ITK_USE_KWSTYLE OFF
Then type "c" to configure the changes and when this is complete type "g" to generate makefiles and exit. Then run make and make install:
make make install
If you have access to the CMISS server you can get the appropriate itk code for your os (eg i686-linux) directly:
cd $CMISS_ROOT mkdir -p itk/i686-linux scp -r ${CMISS_USERNAME}@bioeng22.bioeng.auckland.ac.nz:/hpc/cmiss/itk/i686-linux/lib itk/i686-linux scp -r ${CMISS_USERNAME}@bioeng22.bioeng.auckland.ac.nz:/hpc/cmiss/itk/i686-linux/include itk/i686-linux
- Step 8: wxWidgets
wxWidgets will eventually replace the motif version of cmgui, providing an environment which should run on different operating systems. It is currently still possible to build the motif version. If you wish to build the wxWidgets version you will need to do the following.
Download the wxWidgets from http://www.wxwidgets.org/downloads#latest_stable, click on the wxAll option (e.g., wxWidgets-2.8.9.tar.gz). Then do:
cd $CMISS_ROOT tar -xzf /whereever/you/saved/the/file/wxWidgets-2.8.9.tar.gz cd wxWidgets-2.8.9 mkdir buildgtk cd buildgtk
Now you need to build the static libaries for the debug version, specifying the location of the target/install directory using the prefix flag:
../configure --disable-shared --enable-debug --with-opengl --prefix=$CMISS_ROOT/wxWidgets make make install
If you get an error building wxWidgets under Ubuntu Karmic Koala check out the following bug: http://trac.wxwidgets.org/ticket/10883 - patching the file works.
If you like to keep a tidy house run:
make distclean
Now build the static libaries for the optimised version, specifying the location of the target directory using the prefix flag:
../configure --disable-shared --disable-debug --with-opengl --prefix=$CMISS_ROOT/wxWidgets make make install
We are building wxWidgets and expat statically to try and reduce the number of runtime dependencies for the built executable.
For more information or if you have problems see Building Cmgui with wxWidgets
- Step 9: mesa
Mesa is required if you intend to do testing with your Cmgui build. Mesa may be required if the compiler is trying to link against openGL headers that do not match. Skip this step and if your code does not compile come back to it. If you don't have mesa already installed then go to http://www.mesa3d.org/ and download the latest stable release.
If you have access to bioeng network you can:
cd $CMISS_ROOT mkdir -p mesa/lib mkdir mesa/include scp -r ${CMISS_USERNAME}@bioeng22.bioeng.auckland.ac.nz:/hpc/cmiss/mesa/lib/i686-linux/ mesa/lib scp -r ${CMISS_USERNAME}@bioeng22.bioeng.auckland.ac.nz:/hpc/cmiss/mesa/include/i686-linux/ mesa/include
- Step 10: compile cmgui
Now you are ready to make cmgui:
cd $CMISS_ROOT/cmgui make
By default it will build cmgui-motif-debug and place it in a bin directory under a subdirectory of the operating system name. Check that compilation has created an executible by looking at this directory:
ls $CMISS_ROOT/cmgui/bin/i686-linx
You should see an executable file 'cmgui-motif-debug'
You can specify other targets such as
- cmgui-motif (optimised version)
- cmgui-gtk (gtk toolkit version)
- cmgui-console (no graphics, just command line)
- cmgui-motif-debug-memorycheck (keeps track of all memory access and deaccess and reports leaks etc.)
If you wish to compile the wxWidgets version use:
cd $CMISS_ROOT/cmgui make cmgui-wx-debug WX_DIR=${CMISS_ROOT}/wxWidgets/bin/
(If compiling the wx version a lot, you may want to set the WX_DIR variable in your cmgui makefiles. Edit '$CMISS_ROOT/cmgui/source/developer.Makefile', and add a line like 'DEVELOPER_OPTIONS += WX_DIR=/home/bob/cmiss/wxWidgets/bin/').
Known issue on Ubuntu Karmic Koala: /usr/bin/ld fails when compiling cmgui. Binutils 2.20 is the guilty package, downgrade this to 2.18 for it to work. Download the downgraded package from www.debian.org and run 'sudo dpkg -i binutils_2.18.1~cvs20080103-7_i386.deb' - Duane Malcolm (26/11/2009)
If you encounter a linker problem(s) try applying one (or both) of these patches depending on the missing dependency(ies).
Hopefully it will be obvious which one is needed
- Cross compiling
If you are using the Cross compilers environment from /hpc/cmiss you MUST have CMISS_ROOT set to /hpc/cmiss for the cmgui makefile to set up various variables correctly for the cross compile environment.