# Installing Magics

## Overview

For Magics the GNU autotools were chosen for the installation routine. These are the standard installation tools for most free and commercial software packages to date on Unix.

Autotools’ main task is to generate Makefiles for the desired platform on which Magics will be used. This is necessary, because the various platforms differ from each other in various ways, such as compiler options and library/include paths.

Autotools themselves do not need to be installed on the system of the customer. A Unix shell script called configure is supplied with Magics which is executed by the person installing Magics. The script will then 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 the script produces the Makefiles needed to compile and install Magics.

### 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” in chapter 2.

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. GhostScript (especially the fonts!)

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.8 or higher ) - www.ecmwf.int/products/data/software/grib_api.html

2. EmosLib ( 376 or higher) - www.ecmwf.int/products/data/software/download/interpolation.html

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

To compile and install the Magics graphics library, the installer must first unpack the *.tar.gz file, provided by ECMWF, to a temporary location.

`tar -xzvf Magics++-2.14.0.tar.gz`

### Generating the Makefiles with configure

After changing into the unpacked Magics directory, the user then has to run the configure script. The script gives the user feedback on what requirements are fulfilled and what software is still required. Table 1 gives an overview of the different options of configure. More options of the script are available and can be listed by typing `./configure --help` in the console. The default (without any options) will compile a shared library only and install it in /usr/local/.

Option | Explanation | Default
--- | --- | ---
--help | Outputs all options of configure. |
--prefix=/your/path/ | Directory in which Magics will be installed. | /usr/local
--enable-metview | Required if Magics is build to be used for Metview 4. | no
--enable-raster | Enables raster image output (GIF, GD_PNG, JPEG). | yes
--enable-cairo | Enables the Cairo output driver (PNG, EPS, PDF) | yes
--enable-bufr | Enables BUFR support (Emoslib is required) | no
--enable-grib | Enables GRIB 1/2 support | yes
--with-grib-api=<path> | Gives the location where GribAPI is installed | /usr/local
--enable-netcdf --with-netcdf=<path> | Enables netCDF support Set location of NetCDF libs | yes /usr/local
--enable-static --disable-shared | Compiles static library instead of shared one. | no yes
--enable-python --with-python-include-dir --with-python-lib-dir --with-numpy | Enables Python interface. | no
--libdir=<path> | Directory where libs are installed (on some 64bit it needs to be $prefix/lib64) | $prefix/lib

Even if a feature is enabled by the installer it might be still disabled by the `configure` script if the necessary dependent software cannot be detected. Installers should check carefully the output of the `configure` script.

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

The most important option is --prefix. Setting the prefix defines where your Magics library and executables will be installed. This path is later important for the user setup.

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. The GD and Cairo libraries are responsible for most third-party dependencies.

Be aware when using Portland Fortran compilers and g++: The PGF90 compiler cannot handle C++ exceptions from the GNU compiler in static libraries. In this case we suggest to first build only the static library, using

./configure --disable-exceptions --disable-shared --enable-static F77=pgf90

plus any other configure option you want, and compile afterwards the shared version of the library. By setting the variable F77 the user can hard code the Fortran compiler chosen by configure (in this case pgf90 ).

### Compiling the code

After the configure script 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 subdirectories, tests for the various interfaces of Magics are provided. Test programs in Fortran, 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 (see chapter 2) is correct, but the code in test can be used to do so. More examples of source code and MagML files can be found on the Magics web page.

### 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 deinstalled by `sudo rpm -e name`.

## 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, as described in chapter 2.

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 NetCDF format. Have a look at the directory gshhs in the main Magics directory. There you will find the program which produces the NetCDF files. You can create your own data files gshhs files at http://rimmer.ngdc.noaa.gov/coast/ .

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.

>tar -xzf Magics++-2.14.0.tar.gz

>cd Magics++-2.14.0

>./configure –prefix=/path/to/where/you/install/Magics++-2.14.0

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

> make

> make install

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

> make check << running the test programs

> cd test/fortran

> ./coast

## Licence

Copyright 2008-2011 European Centre for Medium-Range Weather Forecasts (ECMWF)

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

See the License for the specific language governing permissions and limitations under the License.