Skip to content
The Electronic Structure Library Bundle. Please note that this is a mirror of
Python Roff Shell Dockerfile
Branch: master
Clone or download
micaeljtoliveira Merge branch 'hotfix-0.3.1-2' into 'master'
Hotfix 0.3.1-2

See merge request ElectronicStructureLibrary/esl-bundle!84
Latest commit 24502b4 Jan 29, 2019
Type Name Latest commit message Commit time
Failed to load latest commit information.
.gitlab/issue_templates [gitlab] fixing gitlab bug-templates Jan 12, 2019
checkouts Had source tarballs and checkouts stored in separate directories Mar 12, 2018
docker [ci] clean opensuse image Jan 15, 2019
jhbuild Had source tarballs and checkouts stored in separate directories Mar 12, 2018
patches Merge remote-tracking branch 'origin/64-gridxc-update-to-0-8-4-1' int… Jan 14, 2019
rcfiles [ci] add centos docker images for testing Jan 15, 2019
tarballs [bundle] update and align psolver/futile to upstream versions Jan 17, 2019
.gitignore Make git aware of all tarballs. Jun 6, 2018
.gitlab-ci.yml [ci] disable centos till a more uptodate toolchain is provided Jan 15, 2019
AUTHORS Add elpa as a stand-alone library. Jul 9, 2018
COPYING Add elpa as a stand-alone library. Jul 9, 2018
ChangeLog.rst Added info about doc to changelog. Jan 18, 2019
README.rst Fixed formatting issues in README.rst Jan 18, 2019
distfiles Wrote basic script to unpack-repack all object files into a single li… Feb 10, 2018
esl.modules [bundle] update and align psolver/futile to upstream versions Jan 17, 2019 Initial commit, adding jhbuild infrastrusture. Feb 7, 2018


The ESL Bundle

The ESL Bundle is a collection of libraries and utilities broadly used in electronic structure calculations, put together to make their use easier by researchers and scientific software developers. It includes a building framework helping users, developers and packagers in obtaining a working installation of complex combinations of software packages without having to track the dependencies themselves.

ESL stands for Electronic Structure Library, an initiative which distributes quality software and promotes open standards for high-performance computing applications in the field of electronic structure calculations. More details can be found on the ESL Wiki.


To work properly, the ESL Bundle requires Python 2.7 (JHBuild is not available for Python 3.X). Fortran and C compilers are also required, as most modules are written in one or both of these programming languages. Some modules also provide bindings for other languages. Depending on the modules you wish to build, some additional packages might be required. These are packages that are found in most Linux distributions and/or commonly available in HPC facilities, and therefore it was not deemed necessary to include them in the ESL Bundle.

Some modules support parallelization through MPI. A working MPI installation is necessary to build modules with MPI support.


This is a complete list of packages included in the ESL Bundle.

Package Version Language Bindings Other dependencies Website
Fdict 0.6.0 Fortran
Flook 0.7.0 Fortran   Lua
Futile 1.8.3 Fortran C
Libfdf 0.1.1 Fortran
Libpsml 1.1.7 Fortran
Libxc 4.2.3 C Fortran, C++
libGridXC Fortran
libvdwxc 0.3.2 C Fortran FFTW
NTPoly 2.1 Fortran
PSolver 1.8.3 Fortran
pspio 0.2.4 C Fortran GSL
xmlf90 1.5.4 Fortran
ELSI 2.1.0 Fortran C
ELPA 2018.11.001
PEXSI 1.0.3 C++ Fortran
SuperLU_DIST 5.3.0
scotch 6.0.0


The ESL Bundle comes with a version of JHBuild which has been tuned to fit the context of the ESL. JHBuild supports a wide variety of build systems, although it is not a build system itself. It is rather a tool designed to ease the build of collections of related source packages, that it calls "modules". It was originally written for the Gnome Project, but its use has then been extended to other situations.

Most of the operations are performed by executing the script with appropriate parameters. The command line syntax is the following: [global-options] command [command-arguments]

The following global options are available:

-f, --file config
 Use an alternative configuration file instead of the default ~/.config/jhbuildrc.
-m, --moduleset moduleset
 Use a module set other than the module set listed in the configuration file. This option can be a relative path if the module set is located in the JHBuild moduleset folder, or an absolute path if located elsewhere.
--no-interact Do not prompt the user for any input. This option is useful if leaving a build unattended, in order to ensure the build is not interrupted.

In the ESL Bundle, the default module set is esl. This module set provides a meta-module called esl-bundle, which builds and installs all the packages included in the bundle. A second meta-module called esl-bundle-mpi is provided, that builds the packages with MPI support. Note that not all packages can be compiled with MPI support. In that case they will be built without it.

The script does not need to be invoked from the directory where it is located.


To keep the source directory clean, we highly recommended the use of a build directory.

Therefore, a typical way of installing the collection of ESL libraries is the following:

mkdir my_build_dir
cd my_build_dir
../ build

By default, the build command will compile all the modules from the esl-bundle meta-module and install them in the current directory. This, and a few other options, can be changed in the configuration file. Several sample configuration files are provided in the rcfiles directory. These files should be suitable to build the bundle in a variety of systems, but they can also be used as a starting point to write configuration files more suited to your needs.

The configuration files use Python syntax. Here is a list of some important options:

  • modules: dictionary of modules to build.
  • prefix: directory where the modules should be installed.
  • checkoutroot: where to unpack the module's sources.

Configuration options to be passed to the modules build systems can also be specified in the configuration file. Here is an example of how to do this:

# Set the FC variable when invoking the configure script for all modules

# Run make in parallel with two threads

# Here the futile module requires an extra configuration option.
# Note that this will overwrite the global options set by autogenargs, so we
# have to add it here explicitly.
module_autogenargs['futile'] = "--with-ext-linalg='-lopenblas' " + autogenargs


The ESL Bundle provides pkg-config files for all the modules. These can be used to make the installed packages available to other applications.

To use this feature, a working installation of pkg-config is necessary. To make the installed packages available to other applications, the most important is to set the PKG_CONFIG_PATH environment variable. For a Bourne-like shell, the command is:

export PKG_CONFIG_PATH="/path/to/esl-bundle/my_build_dir/install/lib/pkgconfig:${PKG_CONFIG_PATH}"
while for a C-like shell it is::
setenv PKG_CONFIG_PATH "/path/to/esl-bundle/my_build_dir/install/lib/pkgconfig:${PKG_CONFIG_PATH}"

where you replace /path/to/esl-bundle/my_build_dir by the full path to your actual build directory.

Provided the application you wish to build is aware of pkg-config, this command will let it automatically configure all the libraries it needs to build and run.


Please read the pkg-config documentation on how to use pkg-config to compile your application.

You can’t perform that action at this time.