Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: update version numbers of dependencies and links

Binary versions

Before you install from source code you might want to check that already compiled binary versions are available to you.

Overview

From the 2.22.0 version,  Magics will be using CMake for its compilation and installation. This is a first step towards an homogenisation of the installation procedures for all ECMWF packages. 

As configure, CMake  will run some tests on the customer's system to find out if required third-party software libraries are available and notes their locations (paths). Based on this information it will produces the Makefiles needed to compile and install Magics.

CMake is a cross-platform free software program for managing the build process of software using a compiler-independent method.

Binary versions

Magics and third-party dependent software packages might also be available as binary packages for you platform in form of RPMs . You might find them by going to the software search services, such as for OpenSuSE and SLES at http://software.opensuse.org/search (select "Search options" - "Include users' home projects").

Static versus shared library

Magics can be built as a static library and as a shared library. Using Magics as a shared library has an impact on how it is used. With a shared library it is not only necessary that the library is accessible at the time of compilation but also at run-time. Changes to the system, such as the removal of an old shared library might cause programs linked with this library to fail. For more information about the use of the shared library please read section “User setup” below.

The advantages of using shared libraries are that the size of executables will be smaller and that a different version of Magics can be used without recompiling the executable (if the libraries are binary compatible).

Requirements

Third-party software

The following list of software should be installed on your system before you try to install Magics. If you use a package manager, such as RPM, to install software make sure to include the corresponding development packages with the header files. The configure script will test for these libraries and give error messages if one of them is missing.

  1. NetCDF library with C++ interface (http://www.unidata.ucar.edu/software/netcdf/)

  2. Expat XML parser

  3. Perl XML-Parser (most of the time it comes with Perl, but if not: XML-Parser)
  4. GhostScript (especially the fonts!)

  5. Boost C++ library (http://www.boost.org )

  6. Proj4 projection library (http://trac.osgeo.org/proj/)
  7. SWIG to build the Python interface

Optional for raster output (PNG) you should also install:

  1. Cairo graphics library (1.4.10 or later - www.cairographics.org)

  2. gd library (2.0.32 or later - www.libgd.org )

ECMWF support libraries

To read GRIB and BUFR data formats these two libraries, provided by ECMWF without charge, need to be installed on your system before Magics is installed:

  1. GribAPI ( 1.9.9 or higher ) - https://software.ecmwf.int/wiki/display/GRIB/Releases

  2. EmosLib ( 376 or higher) - https://software.ecmwf.int/wiki/display/EMOS/Releases

When installing these two packages please be aware of the following:

  • GribAPI should be installed first

  • Magics internally works only in double floating point precision and therefore requires the double precision version of EmosLib.

  • EmosLib requires a Fortran 90 compiler with Cray pointer support (Portland Pgf90 7.2 and GFortran 4.2 and newer).

  • We strongly recommend to use the -fPIC compiler options to compile 64 bit version of GribAPI and Emoslib.

Compilation environment

At ECMWF, OpenSuSE 10.3/11.3 Linux systems (32 and 64bit) were used for testing. Any C++ Compiler which supports features required for the ANSI C++ standard from 1998 (STL, namespaces, templates) should work. At ECMWF we tested GCC’s g++ 4.x successfully. A Fortran compiler is not required for the compilation of Magics, but is needed if you want to use the Fortran interface or compile a dependent Fortran library (Emoslib).

Compilation and installation

During a build with CMake there are three different directories involved: The source dir, the build dir and the install dir.

Source directory:   (ex: tar zvxf Magics2.22.0.tar.gz in /tmp/.../src) 

The source dir is where the project's sources are stored. In This the directory to which you extract  the project's source archive. The source dir also contains the files which describe the build to CMake.

Build directory: (Ex: /tmp/.../build/magics)

This directory is where all compiler outputs are stored, which includes both object files as well as final executables and libraries. CMake also stores several files of its own here, including its cache. The location of the build dir is entirely up to you.

Install director: (Ex: /usr/local/magics)

Traditionally Unix builds are finished with a call of 'make install' which copies all relevant files from the built project you need for your everyday use to a clean place. Basically it separates all necessary files from the "garbage" which is output in the build directory. The location of the install directory is governed by the CMake cache variable CMAKE_INSTALL_PREFIX. Of course, installation is entirely optional and only takes place if you build the install target.

or Debian packages for Linux. Ubuntu maintains a Magics version in their system default repository

Installing Magics through conda and pip

If you want to use Magics only through Python you have now choices to install Magics with your favourite Python package manager. With the release of Magics 4.0.0 (Feb 2019), the Python interface is separated from the library. This allowed the packaging through pip and conda.

Using pip

When using pip it is required to have the Magics library installed on the system!

Code Block
pip install Magics

Ref: https://pypi.org/project/Magics/

Using conda

Conda will install the Magics library and all its dependencies for you. Please make sure to  activate you conda environment  before running your python program.

Code Block
conda install -c conda-forge Magics
conda activate
python my-magics-script.py


Building Magics from source yourself

Requirements

The following table lists the dependency Magics requires to be build from source. Please note, if you install this package from source you also might have to install the respective "-devel" packages of dependencies. 

Compilers
C++http://gcc.gnu.org/The compiler must support C++ 17. GCC supports it from version 7
Fortranhttp://gcc.gnu.org/fortran/Only needed to run Fortran tests
Utilities
cmakehttps://cmake.orgversion > 3.12
Third party libraries
projhttps://proj.orgto handle projections
netcdfhttp://www.unidata.ucar.edu/software/netcdf/

for netcdf support needed

Please note: You also need to install the legacy C++ interface and HDF5

cairo + pangohttps://www.cairographics.org
http://www.pango.org/
for png/pdf support needed
expathttp://expat.sourceforge.net/for XML parsing
ECMWF libraries
ecCodesECCEnables GRIB and BUFR support 
odcodc on GitHubif ODB support needed

Include Page
SUP:General CMake installation instructions
SUP:General CMake installation instructions

Magics specific CMake options

...

After changing into the build Magics directory, the user  user has to run CMake with his/her own options. The command gives feedback on what requirements are fulfilled and what software is still required. Table 1 below gives an overview of the different options of configure.   The default (without any options) will compile a share library only and install it in /usr/local/.

cmake optionsdocdefault
ECMWF

WITH_GRIB

enable grib supportononGRIB_API_
ECCODES_PATHwhere to find
grib-api /usr/local/lib/metaps/lib/grib_api/1.11.0
eccodes ( if non-standard installation  )
ENABLE_
WITH_
NETCDFenable netcdf supporton
on
NETCDF_PATHwhere to find
netcdf  
netcdf  ( if non-standard installation  )
ENABLE
WITH
_ODBenable odb support
off
off
ODB_API_PATHwhere to find odb
 

/usr/local/apps/odb_api/0.9.28

WITH_BUFRenable bufr supportoffoff
(
but if on we have to set  PGI_PATH to /usr/local/apps/pgi/pgi-10.8/linux86-64/10.8/libso)
if non-standard installation  )
ENABLE_
BUFR_LIB   WITH_PYTHONenable python supportononWITH_
FORTRANenable fortran
support
interfaceon
onWITHWITH
ENABLE_METVIEWenable metview support(and Qt support)off

off

ENABLE_CAIROenable
cairo BOOST_ROOTwhere to find boost ( if non-standard installation (wink) ) /usr/local/apps/boost/1.50.0 ( for the worksation)
Cairo supporton
on
PROJ4_PATHwhere to find proj4 ( if non-standard
installation (wink) ) /usr/local/apps/proj4/4.8.0/LP64CMAKE_BUILD_TYPE

to select the type of compilation:

    • Production(-O2 -g)
    • Debug (-g)
?DebugCMAKE_CXX_FLAGS   CMAKE_CXX   

 

The C, C++ and Fortran compilers are chosen by CMake. (This can be overwritten by setting the variables CC, CXX and F77, on the configure command line, to the preferred compiler). Further the variable CMAKE_CXX_FLAGS can be used to set compiler flags for optimisation or debugging. For example, it is recommended to use CMAKE_CXX_FLAGS="-O2 -mtune=native" or any other optimisation to compile Magics.

The options to enable/disable output formats allow you to customise your installation. For example, if you have problems on your system with support libraries (see previous section), you might want to try to disable the raster output. Cairo libraries are responsible for most third-party dependencies.

 

Compiling the code

installation  )

To make sure that a feature is really enabled, you will have to specify with the option ex: -DENABLE_NETCDF=ON. In that case CMake will fail if the NetCDF support cannot be enabledAfter the CMake command has run successfully, the user can compile the library by typing make in the same directory.

Testing your build

The Magics code contains a directory called test in which, in separate sub-directories, tests for the various interfaces of Magics are provided. Test programs in Fortran , and C , Python and MagML are compiled and run if MAGPLUS_HOME=$PWD make check is invoked from the root directory. (Note that the MAGPLUS_HOME needs to be set!)

The output of the tests should verified before the library is installed. This setup does not check if the user setup is correct, but the code in test can be used to do so. More examples of source code can be found on the Magics web gallery

Installing the library

Once the build and tests have been successfully completed, the command make install copies the library into the correct location on the system. Administrator permission might be required, depending on the installation directory. You might want to run make -n install first, which will show you what will be installed where, without performing any changes to your system.

To free space, the temporary unpacked source directory can be cleaned of the object files with make clean after a successful installation.

Building RPMS

To ease installations over multiple systems or to enable easy re-installation, Magics allows the building of RPMS. By typing the command make rpms a tarball is build and the binary package generated this requires a full compilation. The generated RPMS can be installed with the command sudo rpm -i name.rpm and de-installed by sudo rpm -e name.

Installation FAQ

Why do I get the error message while loading shared libraries: libMagPlus.so.1: cannot open shared object file: No such file or directory when running a Magics executable?

You need to alter your $LD_LIBRARY_PATH variable, as described in section “User setup”. The variable needs to contain the path to your Magics library.

Why do I get a message about a missing / not found libpgc.so when trying to run a Magics executable?

If your EmosLib is compiled with Portland’s Pgf90, it requires this library as shared library at run-time. You need to alter your $LD_LIBRARY_PATH variable.

Can I install Magics++ in the same directory as I have installed Magics 6?

Yes, it should be possible. The libraries have different names for configuration files and use different directories (share instead of coast). You might however prefer a clear separation if you start to phase out Magics 6.

How can I change the coastline files?

Coastline files are given in Shape file format. Have a look at the directory share/magics/ in the main Magics directory. The GIS data was taken from http://www.naturalearthdata.com.

Can I add GIS information, such as rivers and borders to my plots?

Yes. Information about political borders and rivers have been added with the new coastline files.

Why have the Printercap file and the frame in my PostScript disappeared?

With version 2.4 of Magics we have changed the set-up of how the PostScript driver was internally organised. The Printercap configuration file was created in the past to accommodate differences between printers. This is nowadays no issue any more. Out of the same reason PostScript output was scaled down to 95% to allow room for Printer alignment problems. From version 2.4 onwards the scaling is, as in all other drivers, set back to 100% of the page size.

Why did version 2.6 of Magics was followed by version 2.8?

With Magics 2.4 we introduced a new numbering scheme where the sub version indicates how stable the version of Magics is. Odd numbers (2.5, 2.7, …) indicate unstable development versions and even numbers (2.4, 2.6, 2.8, …) indicate versions we think are stable and tested enough to be used in your applications.

How can I report bugs or ask for help?

Please write an email to magics@ecmwf.int . Please compress any larger files you might need to attach with gzip.

Quick installation guide

This is a list of commands needed to install Magics. It is assumed “>” is the shell prompt. The Magics version number may vary.

...

 

...

      > mkdir build

...

.

...

>cd build

>cmake –DCMAKE_INSTALL_PREFIX. =/path/to/where/you/install/Magics++-2.22.0

checking build system type... i686-suse-linux

...

> make

> make install

> setenv MAGPLUS_HOME /path/to/where/you/install/Magics++-2.22.0

> make check                                                          << running the test programs

> cd test/fortran

> ./coast

...