#
# Source Version: 2.1
# Software Release #: UCRL-CODE-155969
#
A Field Guide to Installing PACT
on UNIX Systems
configure/make version
PACT (Portable Application Code Toolkit) is a set of libraries and utilities to facilitate the development of portable software systems. It has a bias toward scientific and engineering applications especially in terms of the data handling services. It also supports shared memory and distributed parallelism (although this is incomplete it is maturing and you may find what support there is to be useful).
Consult the PACT User's Guide which is included in the document distribution for some additional information.
PACT Web Site: http://pact.llnl.gov
The PACT team can be reached at 925-423-4889 during business hours (9am - 5pm Pacific Time), if you have questions on PACT and its installation.
TO INSTALL PACT
- Obtain the distribution file (e.g. pact-2.0.12.tar.gz) by some means, then do
-> tar xzvf pact-2.0.12.tar.gz
- OR -
gunzip pact-2.0.12.tar.gz && tar xf pact-2.0.12.tar
-> cd pact-2.0.12
2) Next, run the configure script as
-> ./configure --help
.
<usage summary>
.
.
Determine what options you would like to set, such as the install prefix and run the configure script again with those options. For example, to do a serial build that will be installed to /usr/local/pact you would run
-> ./configure --prefix=/usr/local/pact
Once PACT is configured, run make. On most systems, you should use 'gmake' instead of 'make' to make sure you are using GNU Make. At any time you may use 'gmake help' to see a help screen. To build PACT, proceed as follows:
-> gmake
OR
-> gmake -j N
where N is some small integer value (e.g., N can be 8) representing the number of processes to use to compile PACT (a parallel make speeds up the build).
Once PACT has been installed, you can run the test suite to determine if it has been built successfully
-> gmake check
Then PACT can be installed by doing
-> gmake install
Although the amount of disk space which PACT takes up varies here are some rough guidelines for a RISC system (CISC systems will use less space):
PACT Executables: 8 MBytes
PACT Libraries: 12 MBytes
Other PACT Files: 1 MByte
3) If the installation failed skip over to step (4).
Now that PACT is installed. You need to set two environment variables in order to use ULTRA, SCHEME, SX, PDBVIEW, or PDBDIFF. The SCHEME and ULTRA environment variables must be set to point to the directory in which the scheme files were installed. The default for this directory is /usr/local/scheme and in the above example it would be /usr/local/pact/scheme
C Shell:
-> setenv SCHEME /usr/local/pact/scheme
-> setenv ULTRA /usr/local/pact/scheme
Bourne Shell:
-> export SCHEME="/usr/local/pact/scheme"
-> export ULTRA="/usr/local/pact/scheme"
These should probably be put into your .cshrc or your .profile so that they appear when you log into your system.
The PACT documentation has additional information about these environment variables. This example will serve to get you started.
4) If everything has completed successfully, you are done and PACT is
installed on your system. Otherwise you have some work cut out for you. Here is some guidance for trouble shooting. We start off with a partial list of assumptions (we try to have as few of these as possible).
ASSUMPTIONS ABOUT UNIX SYSTEMS
- You have configured your environment for code development. This means that you have your path set to find compilers and debuggers, that your manpath is right to access man pages on development tools such as the compiler.
- You have the Bourne Shell (/bin/sh) on your system.
- You have X Windows on your system.
- You have GNU Make (or a make that is GNU compatible) on your system.
WHAT TO DO TO GET PACT TO BUILD
- Read the sections below to orient yourself to the organization of PACT. If you can't get PACT to configure you can try to modify the Makefiles in each sub-directory, and run make over them by hand. This should be done in the order stated below with SCORE first and ULTRA last.
- If PACT fails to configure itself, you will need to determine what parts failed and rectify them. If a library was not found, try specifying the root path to the include and lib directories, such as
-> ./configure --with-pthread=/usr/local
if libpthread is installed in /usr/local/{include,lib} on your system.
C) If there is a problem compiling some part of PACT and you change the
sources to correct the problem, then just re-run gmake from the top
level directory.
D) Once PACT is built properly, test the distribution as follows:
-> gmake check
PARALLEL PACT ISSUES
PACT can be built with or without knowledge of parallel programming considerations. With regard to SMP parallelism it can be: unaware of threads; simply thread safe; or actively using threads. It turns out that two common SMP standards, pthreads and OpenMP, do not always work well together. This seems to be mainly due to vendor implementation issues. Nevertheless, when you are building PACT you should be aware of this so that you can build the PACT libraries to suit your needs.
To configure PACT to use MPI, specify this during configuration
-> ./configure --with-mpi
You must have an MPI library installed on your system to do the above. If it is installed in a non-standard location you may need to specify this to configure
-> ./configure --with-mpi=/usr/local/mpi
Similarly for pthread and mp (OpenMP), you may use --with-pthread and --with-mp to build in threading support using one of those libraries. See the configure help screen for all available configuration options
-> ./configure --help
If PACT has been configured for pthreads, then the libraries will have names like, libscore_r.a where the "_r" follows a common convention employed by vendors. On the other hand, if PACT is configured for compatibility with OpenMP compilers/libraries, then the libraries will have names like, libscore_s.a where the "_s" indicates the distinction. A non-SMP version of PACT will have libraries with names like libscore.a.
BUILDING SHARED LIBRARIES
TODO: Make libtool builds support shared libs
MULTIPLE PLATFORM INSTALLATIONS
If you have a network setup in which you have a single network path (independent of node) to the PACT sources, you can build PACT for each machine type on your net by doing configuring and building in a different directory on each platform. This creates separate bin, lib, include, and scheme directories for each platform and keeps machine dependent files (libraries, executables, etc) out of the source directories and in the machine dependent ones.
Perform the following steps (assuming for example that the sources are in some/path/here/pact-2.0.6 on all platforms):
- Create the build dir
-> cd some/path/here/pact-2.0.6 -> mkdir build
- For each platform:
- log onto the platform
- go into the build directory you created
(assumes cross mounted NFS or similar)
-> cd some/path/here/pact-2.0.6/build
- create a local build directory
-> mkdir machine-name-here -> cd machine-name-here
- configure the local build
-> ../../configure --prefix=path/to/install/dir
- compile, install, and test PACT
-> gmake -> gmake install -> gmake check
the last two can go in either order
If any there are any problems with (2-e) see the trouble shooting discussion in the TO INSTALL PACT section.
BACKGROUND AND ORGANIZATION OF PACT
PACT includes the following software libraries and applications:
SCORE - a low level, environment balancing library
PML - a portable math library PDB - a portable binary data base management library PPC - a portable process control library PGS - a portable graphics library
PANACEA - a portable numerical simulation code development system SCHEME - a portable Scheme interpreter SX - Scheme with extensions (PDBVIEW is an SX program) ULTRA - a 1d presentation, analysis, and manipulation application
In the standard distribution each of the components resides in a subdirectory of the main pact directory. In addition there is a subdirectory called config which contains various configuration files and shell scripts to automate the installation of PACT. In the following discussion, it will be assumed that there is a base directory called pact which is a subdirectory of some other directory such as /usr/local/src, so that when the directory score is referred to as pact/score, the directory /usr/local/src/pact/score is meant.
C ENVIRONMENT PARAMETERS
For those parties interested in altering the configure.in file, we will define the meaning of each of the MACROs used in conditional compilation of PACT.
ANSI
Conforming to ANSI C (this is the default).
ANSI_F77
Conforming to ANSI FORTRAN 77. Specifically, this means that when calling FORTRAN routines from C or C routines from FORTRAN, the compiler maps names to all upper-case.
byte
Type is "void" if supported (default for ANSI compilers), type is "char" if no voids
UNIX
UNIX/POSIX Operating System (as opposed to DOS or MAC).
X11R4
PACT uses X11 R4 or later graphics
AIX
This indicates the IBM UNIX variant.
BINARY_MODE_R
Binary file mode parameter for read only mode. Default is "rb".
BINARY_MODE_RPLUS
Binary file mode parameter for open for update mode. Default is "r+b".
BINARY_MODE_W
Binary file mode parameter for create mode. Default is "wb".
BINARY_MODE_WPLUS
Binary file mode parameter for create for update. Default is "w+b".
BSD
This indicates the presence of BSD UNIX 4.2 or later.
DOS
This indicates the presence of IBM or Microsoft DOS.
FIXNUM
C type corresponding to FORTRAN integer. Defaults to long. Don't set this.
HAVE_MPI
Indicate the presence of the MPI parallel message passing system. This tells PACT to use MPI for some internal purposes as well as supporting applications which want to use PACT in a distributed parallel mode.
HAVE_NO_RUSAGE
Indicate the absence of the "getrusage" utility which provides information about resource utilization.
HAVE_NO_SIGFPE
Indicate the absence of the floating point exception handler package.
HAVE_SELECT_P
Indicate the presence of a working "select" system call iff there is no working STREAMS package available.
HAVE_SOCKETS_P
Indicate the presence of a working socket library. If you have X windows you have this.
HAVE_STREAMS_P
Indicate the presence of a working STREAMS package.
HPUX
This indicates the HP UNIX variant.
HYPOT
This allows the user to specify a routine to be used in place of the standard math library's "hypot". The PACT routine PM_hypot may be used here, or the user may provide their own.
LINUX
This indicates the presence of the LINUX OS.
MAC
This indicates the presence of Apple Macintosh OS.
MPW
This indicates the presence of MPW C 3.0 or later.
MSC
This indicates the presence of Microsoft C 5.0 DOS (16 bit) or later.
OSF
This indicates the presence of the OSF OS.
OSFG
This indicates the presence of the OSF OS with GCC.
POW
This allows the user to specify a routine to be used in place of the standard math library's "pow". The PACT routine PM_pow may be used here, or the user may provide their own.
PTHREAD_DRAFT4
This indicates the presence of a POSIX DRAFT 4 compliant thread library for the system. This is one of the thread standards which PACT can use to support shared memory parallel applications.
PTHREAD_POSIX
This indicates the presence of a POSIX compliant thread library for the system. This is one of the thread standards which PACT can use to support shared memory parallel applications.
PTHREAD_PSEUDO_SGI_SROC
This directs the use of the SGI sproc facility to emulate the pthread functionality used by PACT. This is one of the thread "standards" which PACT can use to support shared memory parallel applications.
RAND_MAX
This allows the user to set a value for the maximum value returned by the random number generator. It should only be used on systems where this value is not already defined. Check the man pages for "rand" to be sure.
REMOVE
This allows the user to specify a routine to be used in place of the standard i/o library's "remove". The PACT routine SC_remove may be used here, or the user may provide their own.
SGI
This indicates the presence of an SGI machine.
SIGNAL_FUNCTION
This allows the user to specify a routine to be used in place of the standard signal library's "signal". The PACT routine SC_signal may be used here, or the user may provide their own. (NOTE: SC_signal is a stub routine provided to prevent unsatisfied externals; it does not perform any actual signal handling.)
SOLARIS
This indicates the presence of the SOLARIS OS.
STRTOD_FUNCTION
This allows the user to specify a routine to be used in place of the standard math library's "strtod". The PACT routine _SC_strtod may be used here, or the user may provide their own.
SYSTEM
This allows the user to specify a routine to be used in place of the standard i/o library's "system". The PACT routine SC_system may be used here, or the user may provide their own. (NOTE: SC_system is a stub routine provided to prevent unsatisfied externals; it does not perform any actual system calls.)
SYSV
This indicates the presence of UNIX System V.
THINK_C
This indicates the presence of Symantec THINK C 5.0 or later.
TURBOC
This indicates the presence of Borland C++ 3.0 DOS (16 bit) or later.
UNICOS
This indicates the presence of Cray Research C for UNICOS.
