

                             Installing Magick++

General

In order to compile Magick++ you must have access to a standard C++
implementation and have ImageMagick installed
(ftp://ftp.wizards.dupont.com/pub/ImageMagick/). Magick++ is co-packaged as
a subdirectory of ImageMagick as of ImageMagick version 4.2.2 and later. The
author uses the egcs 1.1.2 version of 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 for Microsoft
Visual C++ 6.0).

The compiler must support the following recent C++ standard features:

   * bool type
   * string class (<string>)
   * exceptions (<exception>)
   * namespaces
   * C++ versions of standard C headers (e.g. <cstring>)
   * Standard Template Library (STL) (e.g. <list>, <vector>)

I have personally verified that Magick++ compiles and runs using the
following compiler/platform combinations:

                            Tested Configurations

   Operating System      Architecture                 Compiler
 Solaris 2.6          SPARC             egcs 1.1.1
 Solaris 2.6          SPARC             egcs 1.1.2
 FreeBSD 2.2.7        Intel Pentium II  egcs 1.1.2
 Windows NT 4.0 SP3   Intel Pentium II  Visual C++ 6.0 Standard Edition

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

                        Other Working Configurations

 Operating
  System   Architecture Compiler Reported By
 Red Hat               egcs      Dr. Alexander Zimmermann
 Linux 6.0 i386        1.1.2     <Alexander.Zimmermann@fmi.uni-passau.de>
 Red Hat               egcs      Dr. Alexander Zimmermann
 Linux 5.2 Alpha       1.1.2     <Alexander.Zimmermann@fmi.uni-passau.de>

 SGI IRIX  MIPS        IRIX C++  Albert Chin-A-Young
                       7.2.1.2m  <china@thewrittenword.com>

 SGI IRIX  MIPS        IRIX C++  Albert Chin-A-Young
                       7.2.1.3m  <china@thewrittenword.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

To install the package under Unix, installation should be similar to

./configure [ --prefix=/prefix ]
make
make install

The configure script uses the compiler/linker flags it obtains from the
installed 'Magick-config' script when performing the build. This means that
ImageMagick must be installed before Magick++ is configured. The library is
currently named similar to 'libMagick++.a' 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++.

While it is currently possible to select building a shared Magick++ library
(using the configure option --enable-shared), the resulting library may not
be fully functional (exceptions fail to work) because libtool does not yet
properly initialize static constructors when creating C++ shared libraries
on most systems. A known workaround when using GNU C++ is to cd into the
'lib' subdirectory and execute an incantation similar to "c++ -shared -o
.libs/libMagick++.so.0.0.0 *.lo -L/usr/local/lib -L/usr/openwin/lib -lMagick
-ljbig -ldf -ltiff -lttf -ljpeg -lpng -ldpstk -ldps -lXext -lXt -lX11
-lsocket -lnsl -lbz2 -lz -lm -lc". The exact incantation to use is derived
from the one that libtool itself used. Obviously this is not for the faint
of heart. If you plan to write many programs with Magick++, this effort may
be worth it since it makes the executables much smaller.

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


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

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

             Environment Variables That Effect Configure

 Environment 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
                     Library paths (-L/somedir) to look for
                     libraries. Systems that support the notion of
       LDFLAGS       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++. Egcs 1.1.2 is strongly recommended under Linux.
  ------------------------------------------------------------------------

                         Windows '9X, and Windows NT

Visual C++

To build using Visual C++, extract the contents of Magick++-version.zip
(preserving sub-directories) in the ImageMagick distribution directory. This
will create the directory Magick++-version containing the sub-directories
'demo', 'doc', 'lib', and 'tests'. Open the workspace file Magick++.dsw and
build the project Magick++ in order to build the library. The library is
output to the same directory as the ImageMagick libraries.
The available projects are:

     Magick++
         the Magick++ library
     attributes
         test setting image attributes
     manipulate
         test manipulating images
     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
     shapes
         program to demonstrate use of the drawing primitives

Test and demonstration programs are built in the directory which contains
their sources. The Magick++ library is placed in the ImageMagick/lib
directory alongside the ImageMagick library.

Cygwin & EGCS

It is 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 EGCS compiler
from http://www.xraylith.wisc.edu/~khan/software/gnu-win32/egcs.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.
