Author: Bob Friesenhahn
Description: C++ API for ImageMagick

# Installing Magick++

### General

In order to compile Magick++ you must have access to a standard C++ implementation. Magick++ is co-packaged as a subdirectory of ImageMagick as of ImageMagick version 4.2.2 and later. The author uses gcc 2.95.2 (GNU C++) which is available under UNIX and under the Cygwin UNIX-emulation environment for Windows. Standards compliant commercial C++ compilers should also work fine. Most modern C++ compilers for PCs should also work (project files are provided in the VisualMagick package for Microsoft Visual C++ 6.0).

It was decided that Magick++ will be around for the long-haul, so its API definition depends on valuable C++ features which should be common in all current and future C++ compilers. The compiler must support the following C++ standard features:

- templates
- static constructors
- C++-style casts (e.g. static_cast)
- bool type
- string class (`<string>`)
- exceptions (`<exception>`)
- namespaces
- Standard Template Library (STL) (e.g. `<list>`, `<vector>`)

The author has personally verified that Magick++ compiles and runs using the following compiler/platform combinations:

Tested Configurations
Operating System | Architecture | Compiler
SunOS 5.6 | SPARC | egcs 1.1.2
SunOS 5.6, 5.7, 5.8 | SPARC | GCC 2.95.2
SunOS 5.7 | SPARC | Sun Workshop 5.0 C++
SunOS 5.7 | SPARC | GCC 3.X snapshot (20001023)
SunOS 5.8 | SPARC | Sun Forte 6.0 C++
FreeBSD 2.2.7 | Intel Pentium II | egcs 1.1.2
Windows NT 4.0 SP6a | Intel Pentium II | Visual C++ 6.0 Standard Edition

User's of Magick++ have reported that the following configurations work with Magick++:

Other Known Working Configurations
Operating System | Architecture | Compiler | Reported By
Red Hat Linux 5.2 | i386 | EGCS 1.1.2 (updated from SRPM) | Dr. Alexander Zimmermann <Alexander.Zimmermann@fmi.uni-passau.de>
Red Hat Linux 5.2 | Alpha | EGCS 1.1.2 (updated from SRPM) | Dr. Alexander Zimmermann <Alexander.Zimmermann@fmi.uni-passau.de>
Red Hat Linux 6.0 | i386 | EGCS 1.1.2 | Dr. Alexander Zimmermann <Alexander.Zimmermann@fmi.uni-passau.de>
Red Hat Linux 7.0 | i386 | GCC 2.95.2 | Dr. Alexander Zimmermann <Alexander.Zimmermann@fmi.uni-passau.de>
Red Hat Linux 7.0 | i386 | GCC "2.96" snapshot | ???
SGI IRIX | MIPS | IRIX C++ 7.3.1.1m | Albert Chin-A-Young <china@thewrittenword.com>
HP-UX 11.00 | PA-RISC | HP ANSI C++ A.03.30 | Albert Chin-A-Young <china@thewrittenword.com>
Mac OS 9 | PowerPC | CodeWarrior Professional Release 6 | Leonard Rosenthol <leonardr@digapp.com>

Please let me know if you have successfully built and executed Magick++ using a different configuration so that I can add to the table of verified configurations.

###

### Unix/Linux

#### Building From Source

Magick++ is now built using the ImageMagick configure script and Makefiles. Please follow the installation instructions provided by its README.txt file. The following instructions pertain to the Magick++ specific configuration and build options.

To install Magick++ under Unix, installation should be similar to

`./configure --with-magick-plus-plus [ --prefix=/prefix ]`
`make`
`make install`

The library is currently named similar to 'libMagick++.a' (and/or libMagick++.so.5.0.26) and is installed under prefix/lib while the headers are installed with Magick++.h being installed in prefix/include and the remaining headers in prefix/include/Magick++.

To influence the options the configure script chooses, you may specify 'make' option variables when running the configure script. For example, the command

> `./configure CXX=CC CXXFLAGS=-O2 LIBS=-lposix`

specifies additional options to the configure script. The following table shows the available options.

Environment Variables That Effect Configure
Make Option Variable | Description
CXX | Name of C++ compiler (e.g. 'CC -Xa') to use compiler 'CC -Xa'
CXXFLAGS | Compiler flags (e.g. '-g -O2') to compile with
CPPFLAGS | Include paths (-I/somedir) to look for header files
LDFLAGS | Library paths (-L/somedir) to look for libraries. Systems that support the notion of a library run-path may additionally require -R/somedir or '-rpath /somedir' in order to find shared libraries at run time.
LIBS | Extra libraries (-lsomelib) required to link

#### Installing Linux RPMs

Dr. Alexander Zimmermann maintains Linux RPMs of ImageMagick and Magick++. These may be downloaded from ftp://ftp.forwiss.uni-passau.de/pub/linux/local/ImageMagick/. This site is mirrored periodically to the ImageMagick linux directory and from there to the many ImageMagick and Linux mirror sites. Please note that the default version of the C++ compiler delivered with the system may not be sufficient to support Magick++. Use of EGCS 1.1.2 or GCC 2.95.2 is strongly recommended under Linux.

### Windows '9X, and Windows NT

#### Visual C++

Windows NT is supported by an ImageMagick source package for NT available in the 'nt' subdirectory of the ImageMagick ftp site (and mirrors). The ImageMagick source package for NT provides sources to ImageMagick, Magick++, add-on libraries (e.g. JPEG), and a ready-made Visual C++ build environment. Please read the configuration and build instructions for the NT source package in order to build Magick++.

##### Magick++ Demos

Available demos are:

> button
> program to create a simple rectangular button with an annotation
> flip
> program to invert and morph images in an existing GIF animation
> demo
> program to demonstrate the image manipulation primitives
> piddle
> program to demonstrate use of the drawing primitives
> shapes
> program to demonstrate use of the drawing primitives

##### Magick++ Tests

The available tests are:

> appendImages
> test STL appendImages function
> attributes
> tests for setting/getting Magick::Image attributes
> averageImages
> test STL averageImages function
> coalesceImages
> test STL coalesceImages function
> color
> test Magick::Color classes
> montageImages
> test STL montageImages function
> morphImages
> test STL morphImages function
> readWriteBlob
> test reading/writing BLOBs
> readWriteImages
> test STL readImages and writeImages functions

#### Cygwin & EGCS

It should be possible to build both ImageMagick and Magick++ under the Cygwin Unix-emulation environment for Windows NT. Obtain and install Cgywin from http://sourceware.cygnus.com/cygwin/ and update to the latest GNU compiler from http://www.xraylith.wisc.edu/~khan/software/gnu-win32/gcc.html. X11R6.4 libraries are available from http://dao.gsfc.nasa.gov/software/grads/win32/X11R6.4/. To build using Cygwin and EGCS, follow the instructions for building under Unix. ImageMagick and Magick++ do not yet include support for building Windows DLLs under Cygwin so do not enable dynamic libraries when building ImageMagick.