The albert-x.x packages are now distributed using GNU autoconf 2.53, automake 1.6, and libtool 1.4.2. Since some unusual compilation was necessary, a few hints seemed like a good idea. Here is the general structure of the albert-1.2 packages:
We keep track of the "Makefile.am"s, which are processed by automake
to create "Makefile.in"s. Two exceptions:
1) The "Makefile.in"s in DEMO/src/*d are independently maintained. They have a
simple structure compared to "real" "Makefile.in"s produced by automake.
We keep track of the "Makefile.am"s, which are processed by automake to create "Makefile.in"s. Two exceptions:
1) The "Makefile.in"s in DEMO/src/*d are independently maintained. They have a simple structure compared to "real" "Makefile.in"s produced by automake.
2) The "Makefile.albert.in" in ALBERT/src/Common/, see below.
The file "configure.ac" is processed by autoconf to create "configure". The script "configure" then processes "Makefile.in"s to create proper Makefiles. The created Makefiles can then be used by us to test compilation and the demo programs. All Makefiles can be called independently from any subdirectory. The "install"-target is used to install a package (defaults for maintenance: albert-x.x/lib/ and albert-x.x/include/ as installation paths for libraries and headers, no shared libraries). There are also several variations of "clean" targets.
The file "configure.ac" is processed by autoconf to create "configure". The
script "configure" then processes "Makefile.in"s to create proper
Makefiles. The created Makefiles can then be used by us to test compilation
and the demo programs. All Makefiles can be called independently from any
subdirectory. The "install"-target is used to install a package (defaults
for maintenance: albert-x.x/lib/ and albert-x.x/include/ as installation
paths for libraries and headers, no shared libraries). There are also
several variations of "clean" targets.
II) Package contents
...
...
@@ -39,13 +54,22 @@ The following subpackages are included in albert-1.2:
The main package.
2) BLAS
Basic Linear Algebra Subroutines, these are compiled if the system on which ALBERT will run does not supply them.
Basic Linear Algebra Subroutines, these are compiled if the system on which
ALBERT will run does not supply them.
3) DEMO
A few demonstration programs. This package is not touched by automake and includes several small Makefile.in's in which configure substitutes values like installation paths for libraries and headers. This directory can be copied elsewhere by the user after installation. The Makefiles include "Makefile.albert" which resides in $installdir/include together with the C-header files. They are meant to faciliate the first steps with ALBERT.
A few demonstration programs. This package is not touched by automake and
includes several small Makefile.in's in which configure substitutes values
like installation paths for libraries and headers. This directory can be
copied elsewhere by the user after installation. The Makefiles include
"Makefile.albert" which resides in $installdir/include together with the
C-header files. They are meant to faciliate the first steps with ALBERT.
4) ALBERT_UTIL
This package contains the old ALBERT util.c file, now split into several smaller source files. It is compiled to form a separate utility library (message macros, ALBERT memory allocation routines, etc.) and should linked to any program using the ALBERT package.
This package contains the old ALBERT util.c file, now split into several
smaller source files. It is compiled to form a separate utility library
(message macros, ALBERT memory allocation routines, etc.) and should linked
to any program using the ALBERT package.
It can also be used as a standalone utility library.
5) PLOT_ANSI
...
...
@@ -54,68 +78,169 @@ PLOT_ANSI provides tools for displaying X11 graphics, if gltools is not used.
6) SOLVER
Linear and nonlinear solver routines for ALBERT.
7) GRAPE
GRAPE interface for ALBERT
III) External packages
======================
The gltools package is not part of ALBERT. If it is detected during installation, the file ALBERT/src/Common/gltools.c is included in the ALBERT libraries. The user can specify the path of an already installed gltools-package as a configure option, see INSTALL.
The gltools package is not part of ALBERT. If it is detected during
installation, the file ALBERT/src/Common/gltools.c is included in the ALBERT
libraries. The user can specify the path of an already installed
gltools-package as a configure option, see INSTALL.
IV) Checking into CVS directory tree
====================================
Step 0)
Become familiar with CVS.
Step 0a)
Make sure the stuff you are checkingin at least builds without errors.
Step 1)
Do [g]make clean cvs-clean. This deletes all files which are not part of the CVS directory tree, but are in the CVS-maintained directories. Also does "chgrp -R albert *"
Do [g]make clean cvs-clean. This deletes all files which are not part of the
CVS directory tree, but are in the CVS-maintained directories. Also does
"chgrp -R albert *"
Step 2)
cvs commit
BIG FAT WARNING: this commits _all_ changed files. It is probably bette
to commit on a file-per-file basis.
ALSO: it is required that all commits are properly documented. The comments
must be written in a way that other people can understand them.
There are a couple of front-end for CVS, e.g. an Emacs mode, a TCL interface,
and even when using CVS from the command-line, it is not necessary to commit
everything at once. So maybe better do:
Step 2-preferred)
cvs commit FILE1 .... FILEN
with a selected collection of file you really want to commit.
Step (1 and 2-preferred)-alternative)
Check out the "cvs.sh" script:
cvs co admin-utils/cvs.sh
Then do the follwing
mkdir $HOME/bin
mv admin-utils/cvs.sh $HOME/bin/cvs
Then edit your rc-scripts and modify your PATH variable:
bash-flavour: add the following to the end of $HOME/.bashrc
export PATH=$HOME/bin:$PATH
csh or tcsh flavour: add the following to the end of $HOME/.cshrc
setenv PATH ${HOME}/bin:${PATH}
For the settings to take affect you have to re-source the rc-files:
This will take care of setting the correct permissions and group id's in
the ALBERT CVS repository. It will fail if you are not a member of the
access group "albert", but then you shouldn't attempt to commit changes
at all, ask one of the ALBERT maintainers for help.
V) How to create a distribution
===============================
Step 0)
Become familiar with CVS.
Step 1)
At the moment, the subpackages ALBERT, BLAS, DEMO, ALBERT_UTIL, PLOT_ANSI, and SOLVER are maintained using the version control system CVS. To prepare a distribution, one must first check out the distribution version of these packages. The CVS-module "admin" contains the main administration files like "configure.ac" and the main "Makefile.am" from the root directory. Using
At the moment, the subpackages ALBERT, BLAS, DEMO, ALBERT_UTIL, PLOT_ANSI,
GRAPE and SOLVER are maintained using the version control system CVS. To
prepare a distribution, one must first check out the distribution version of
these packages. To this aim there exists an "albertdist" module. Checking it
out will create the ALBERT package with the directory structure describe
right at the beginning of this file.
cvs co ALBERT BLAS DEMO ALBERT_UTIL PLOT_ANSI SOLVER admin
cvs co albertdist
also checks out CVS administration directories in each module. This is ok, since
Makefiles produced by configure have a fixed set of directories to be included in a distribution. Another possibility is
also checks out CVS administration directories in each module. This is ok,
since Makefiles produced by configure have a fixed set of directories to be
included in a distribution. Another possibility is
cvs export ALBERT BLAS ...
cvs export albertdist
which strips the CVS directories.
Actually, when making a _real_ distribution (i.e. you are not only playing
with "make dist", you should set a symbolic tag with cvs _first_, e.g.
cvs rtag ALBERT_2_0 abertdist
Afterwards, check out _that_ version of ALBERT
cvs co -r ALBERT_2_0 albertdist
Step 2)
The next step is to adjust the desired libraries, especially the ALBERT libraries. Each ALBERT library has its own directory of the form "ALBERT[DIM][DIM_OF_WORLD]_[DEBUG=0 or 1][EL_INDEX=nothing or 1]" since compilation is different for each library version. If these settings are to be changed, make a new directory (as in ALBERT13_0[1]) for example, create a copy of the Makefile.am from another directory and adjust the obvious settings like "DIM", "DIM_OF_WORLD", etc. The Makefile.am in these directories uses VPATH to find sources in src/?d and src/Common.
The next step is to adjust the desired libraries, especially the ALBERT
libraries. Each ALBERT library has its own directory of the form
"ALBERT[DIM][DIM_OF_WORLD]_[DEBUG=0 or 1][EL_INDEX=nothing or 1]" since
compilation is different for each library version. If these settings are to
be changed, make a new directory (as in ALBERT13_0[1]) for example, create a
copy of the Makefile.am from another directory and adjust the obvious
settings like "DIM", "DIM_OF_WORLD", etc. The Makefile.am in these
directories uses VPATH to find sources in src/?d and src/Common.
Step 3a)
Make sure you have a recent version of GNU automake, autoconf and libtool
and run "autoreconf" in the "albertdist" directory.
Step 3)
Do "[g]make dist" at the top level.
This creates albert-1.2.tar.gz in which all CVS-directories, ~-files, and other unnecessary components are stripped. To be a bit preciser:
This creates albert-1.2.tar.gz in which all CVS-directories, ~-files, and
other unnecessary components are stripped. To be a bit preciser:
a) All sources and headers are included, of course.
b) All "Makefile.am"s and "Makefile.in"s are included. Ideally, the user simply
enters "configure" followed by "[g]make", "[g]make install" to install everything.
b) All "Makefile.am"s and "Makefile.in"s are included. Ideally, the user
simply enters "configure" followed by "[g]make", "[g]make install" to
install everything.
c) "configure" AND "configure.ac" are included, so that possible installation problems can (hopefully) be corrected after feedback with us.
c) "configure" AND "configure.ac" are included, so that possible
installation problems can (hopefully) be corrected after feedback with us.
V) Possible problems and tested platforms
================================
Some things are already explained in "configure.ac". If not explicitly stated otherwise below, "configure" will run without extra command line options.
Choosing not to use libtool would require many changes, the first would be to change all "LTLIBRARIES" to "LIBRARIES" in all "Makefile.am"s.
Some things are already explained in "configure.ac". If not explicitly
stated otherwise below, "configure" will run without extra command line
options.
Choosing not to use libtool would require many changes, the first would be
to change all "LTLIBRARIES" to "LIBRARIES" in all "Makefile.am"s.
1) mips-sgi-irix6.5:
a) The -lgl and -lGL libraries are required.
b) The GNU Fortran compiler g77 distributed by SGI produced n32-style code, which was not default for
the gcc. Recommended solutions:
b) The GNU Fortran compiler g77 distributed by SGI produced n32-style
code, which was not default for the gcc. Recommended solutions:
i) Adding -n32 option to "CFLAGS" and "LDFLAGS", if $CC == gcc and %F77 = g77.
ii) Using the system compilers cc and f77.
2) i686-suse-linux:
a) We used MesaGL and a BLAS lib included in our distribution. If MesaGL is not found, "configure" will also try "GL". The BLAS lib needed -lg2c to process FORTRAN code properly.
a) We used MesaGL and a BLAS lib included in our distribution. If MesaGL
is not found, "configure" will also try "GL". The BLAS lib needed -lg2c
to process FORTRAN code properly.
3) sparc-sun-SunOS:
a) For the xdr-Routines, the library -lnsl seemed necessary.
b) In our case, "configure" did not automatically recognize the canonical system triplet. Calling "configure --build=sparc" worked.
\ No newline at end of file
b) In our case, "configure" did not automatically recognize the canonical
system triplet. Calling "configure --build=sparc" worked.
@@ -44,6 +48,14 @@ PLOT_ANSI provides tools for displaying X11 graphics, if gltools is not used.
6) SOLVER
Linear and nonlinear solver routines for ALBERT.
7) GRAPE
GRAPE interface for ALBERT. Only for non-parametric FE of dimension 2 and 3.
"make" will create "albert_grapeXX" and albert_moviXX" where XX is in {22, 33}.
"make install" will install those programs below PREFIX/bin.
The GRAPE interface is only installed when the GRAPE library and header file
are available on your system (determined at configure time, use
"configure --help" for apropriate command line switches for "configure").
II) External packages
=====================
...
...
@@ -54,24 +66,45 @@ The gltools package is not part of ALBERT. If it is detected during installation
III) Configure options
======================
The configure file accepts an option called
"configure --help" will give you a summary of available options. The file
"INSTALL" contains generic configuration instructions and a description of
generic command line options for configure.
--with-gltools=PATH
The remaining (i.e. ALBERT specific) options are explained here:
where PATH is the path of a gltools-2-4 directory possible installed on the system. The default value where gltools-2-4 is searched is the build directory.
The default installation path is also the build directory. This can be changed via
--with-gltools=PATH
PATH is the path of a gltools-2-4 directory possible installed
on the system. The default value where gltools-2-4 is searched
is the build directory. The default installation path is also
the build directory. This can be changed via
--prefix=PREFIX install architecture-independent files in PREFIX.
Default library mode is to install static and shared libraries. Change this via
NOTE: this is different from the default GNU installation prefix,
which would be "/usr/local/".
--enable-shared=?? and/or --enable-static=??
where ?? is "yes" or "no". Finally, the option
Default library mode is to install static and shared libraries.
This can be changed using these switches,
where ?? is "yes" or "no".
--enable-el_index
builds versions of the ALBERT libraries with C Preprocessor macro "EL_INDEX" set to 1. See the ALBERT documentation for details.
builds versions of the ALBERT libraries with C Preprocessor
macro "EL_INDEX" set to 1. See the ALBERT documentation for
details.
--without-GRAPE
do not even attempt to detect GRAPE. As a result, the GRAPE
interface will not be compiled.
--with-GRAPE-lib=DIR
Location of "libgr.a" or "libgr.so" on your system. If
"libgr.so" is installed at "/foo/bar/lib/libgr.so", then DIR
should be set to "/foo/bar/lib/".
--with-GRAPE-headers=DIR
Location of the GRAPE header file "grape.h". If "grape.h" is
installed at "/foo/bar/include/grape.h", then DIR should be
set to "/foo/bar/include/".
We recommend setting the environment variables "CFLAGS" and "FFLAGS" to "", so that "configure" does NOT automatically substitute a "-g" debugging option while compiling, as well as using the highest possible optimization flag "-O???" during a build of (non-debug) libraries.