Full Description of the compilation of Scilab
Description
Scilab 4 and previous versions compilation process were using an outdated compilation method based on the include of series of Makefiles, I was hard and painful to maintain but also to port the Scilab build process on new platform. Scilab 5 is fully based on the autotools. There are programs which greatly simplify the conception, maintenance and portability of a multi-platform project.
Autotools are composed by a few programs :
autoconf (at least version 2.61)
automake (at least version 1.10)
libtool
Each one is designed for a specific task.
autoconf
From configure.ac (formely configure.in), autoconf creates the configure script which will check if libraries are available on the computer (or not), set a few flags for the compiler... In theory, if the configure is successful, that ensure that all the mandatory dependencies of Scilab 5 are available on the operating system.
automake
From Makefile.am and indirectly from configure.ac, for each Makefile.am declared in the configure.ac (see the macro AC_CONFIG_FILES) , automake will create the file Makefile.in. It specifies which file must be compiled, with which libs... The autogenerated makefiles contain the directive for the compilation for many compilers, operating systems & archs.
libtool
libtool, as its name says, is the tool used to create libraries (static and dynamic) managing the inherent constraints.
Advantages
There are many advantages to this migration:
LSB & FHS compatibly works are greatly simplified
- Simplify the portage to new architectures and compilers
- Facilitate the work of distribution packagers
Technical description
Important files
File |
Description |
configure.ac |
Transformed by autoconf to create the famous ./configure, this program handles: |
m4/* |
Contains all the various macros used to perform dedicated checks |
Makefile.am |
Defines a few important operations: |
Makefile.incl.am |
This file is included in each Makefile.am of a Scilab module. |
modules/Makefile.am |
This file contains the list of the module to build, the creation of the libscilab library |
How to regenerate all the files
The best way is to call autoreconf, this command will call all the other commands (aclocal, autoconf, automake...). Otherwise, when working on the source tree, adding the option --enable-maintainer-mode to the ./configure will automatically rebuild Makefile & configure when any changes occurs
Howto
Add a new source file for compilation
- Go into the module you want to edit
Edit Makefile.am and add the file where it belongs (*_C_SOURCES, *_FORTRAN_SOURCES, GATEWAY_C_SOURCES, GATEWAY_FORTRAN_SOURCES...)
Go into the root of the scilab source tree (cd \$SCI)
Type automake
This command should rebuild Makefile.in from Makefile.am
Add a new module to Scilab
Create your tree in \$SCI/modules/
Copy an already existing Makefile.am from an other module
- Modify it in order to match your changes (sources, libraries dependencies...)
Edit \$SCI/modules/Makefile.am
Add in the variable SUBDIRS the name of your directory you just created & and add the library to the variable ALL_LIBS
In configure.ac, look for AC_CONFIG_FILES and add your future Makefile
Go into the root of the Scilab source tree (cd \$SCI)
Type autoreconf (make sure that you have the right versions of the autotools).
Relaunch the ./configure file in order to create your Makefile from your brand new Makefile.in
Upgrade the autotools
Download setup-debian-chroot to create a Debian chroot or setup-centos-chroot Fedora/CentOS chroot depending on the choosen target system.
- Edit the downloaded file to set the new target version
Execute: AUTOPOINT=true autoreconf -xif
This command should at least rebuild aclocal, Makefile.in, configure. Other files might also be generated.