Download & Unpack
  
  ImageMagick builds on a variety of Unix and Unix-like operating systems
  including Linux, Solaris, FreeBSD, Mac OS X, and others. A compiler is
  required and fortunately almost all modern Unix systems have one. Download
  ImageMagick.tar.gz from ftp.imagemagick.org or its mirrors and verify the
  distribution against its message digest.
  
  Unpack the distribution it with this command:
  
    $magick> tar xvfz ImageMagick.tar.gz
  
  Now that you have the ImageMagick Unix/Linux source distribution unpacked,
  let's configure it.
  
Configure
  
  The configure script looks at your environment and decides what it can cobble
  together to get ImageMagick compiled and installed on your system. This
  includes finding a compiler, where your compiler header files are located
  (e.g. stdlib.h), and if any delegate libraries are available for ImageMagick
  to use (e.g. JPEG, PNG, TIFF, etc.). If you are willing to accept configure's
  default options, and build from within the source directory, you can simply
  type:
  
    $magick> cd ImageMagick-7.0.9
    $magick> ./configure
  
  Watch the configure script output to verify that it finds everything that
  you think it should. Pay particular attention to the last lines of the script
  output. For example, here is a recent report from our system:
  
  ImageMagick is configured as follows. Please verify that this configuration
  matches your expectations.
  
    Host system type: x86_64-unknown-linux-gnu
    Build system type: x86_64-unknown-linux-gnu
    
                      Option                     Value
    ----------------------------------------------------------------------------
    Shared libraries  --enable-shared=yes		yes
    Static libraries  --enable-static=yes		yes
    Module support    --with-modules=yes		yes
    GNU ld            --with-gnu-ld=yes		yes
    Quantum depth     --with-quantum-depth=16	16
    High Dynamic Range Imagery
                      --enable-hdri=no		no
    
    Delegate Configuration:
    BZLIB             --with-bzlib=yes		yes
    Autotrace         --with-autotrace=yes	yes
    DJVU              --with-djvu=yes		no
    DPS               --with-dps=yes		no
    FlashPIX          --with-fpx=yes		no
    FontConfig        --with-fontconfig=yes	yes
    FreeType          --with-freetype=yes		yes
    GhostPCL          None			pcl6 (unknown)
    GhostXPS          None			gxps (unknown)
    Ghostscript       None			gs (8.63)
    result_ghostscript_font_dir='none'
    Ghostscript fonts --with-gs-font-dir=default
    Ghostscript lib   --with-gslib=yes		no (failed tests)
    Graphviz          --with-gvc=yes		yes
    JBIG              --with-jbig=		no
    JPEG v1           --with-jpeg=yes		yes
    JPEG-2000         --with-jp2=yes		yes
    LCMS v1           --with-lcms=yes		yes
    LCMS v2           --with-lcms2=yes		yes
    LQR               --with-lqr=yes		no
    Magick++          --with-magick-plus-plus=yes	yes
    OpenEXR           --with-openexr=yes		yes
    PERL              --with-perl=yes		/usr/bin/perl
    PNG               --with-png=yes		yes
    RSVG              --with-rsvg=yes		yes
    TIFF              --with-tiff=yes		yes
    result_windows_font_dir='none'
    Windows fonts     --with-windows-font-dir=
    WMF               --with-wmf=yes		yes
    X11               --with-x=			yes
    XML               --with-xml=yes		yes
    ZLIB              --with-zlib=yes		yes
    
    X11 Configuration:
          X_CFLAGS        =
          X_PRE_LIBS      = -lSM -lICE
          X_LIBS          =
          X_EXTRA_LIBS    =
    
    Options used to compile and link:
      PREFIX          = /usr/local
      EXEC-PREFIX     = /usr/local
      VERSION         = 6.4.8
      CC              = gcc -std=gnu99
      CFLAGS          = -fopenmp -g -O2 -Wall -W -pthread
      MAGICK_CFLAGS   = -fopenmp -g -O2 -Wall -W -pthread
      CPPFLAGS        = -I/usr/local/include/ImageMagick
      PCFLAGS         = -fopenmp
      DEFS            = -DHAVE_CONFIG_H
      LDFLAGS         = -lfreetype
      MAGICK_LDFLAGS  = -L/usr/local/lib -lfreetype
      LIBS            = -lMagickCore -llcms -ltiff -lfreetype -ljpeg
                        -lfontconfig -lXext -lSM -lICE -lX11 -lXt -lbz2 -lz
                        -lm -lgomp -lpthread -lltdl
      CXX             = g++
      CXXFLAGS        = -g -O2 -Wall -W -pthread
  
  You can influence choice of compiler, compilation flags, or libraries of the
  configure script by setting initial values for variables in the configure
  command line. These include, among others:
  
    CC
        Name of C compiler (e.g. cc -Xa) to use.

    CXX
        Name of C++ compiler to use (e.g. CC).

    CFLAGS
        Compiler flags (e.g. -g -O2) to compile C code.

    CXXFLAGS
        Compiler flags (e.g. -g -O2) to compile C++ code.

    CPPFLAGS
        Include paths (.e.g. -I/usr/local) to look for header files.

    LDFLAGS
        Library paths (.e.g. -L/usr/local) to look for libraries systems that
        support the notion of a library run-path may require an additional
        argument in order to find shared libraries at run time. For example,
        the Solaris linker requires an argument of the form -R/path. Some
        Linux systems will work with -rpath /usr/local/lib, while some other
        Linux systems who's gcc does not pass -rpath to the linker, require
        an argument of the form -Wl,-rpath,/usr/local/lib.

    LIBS
        Extra libraries (.e.g. -l/usr/local/lib) required to link.
  
  Here is an example of setting configure variables from the command line:
  
    $magick> ./configure CC=c99 CFLAGS=-O2 LIBS=-lposix
  
  Any variable (e.g. CPPFLAGS or LDFLAGS) which requires a directory path must
  specify an absolute path rather than a relative path.
  
  Configure can usually find the X include and library files automagically,
  but if it doesn't, you can use the --x-includes=path and --x-libraries=path
  options to specify their locations.
  
  The configure script provides a number of ImageMagick specific
  options. When disabling an option --disable-something is equivalent to
  specifying --enable-something=no and --without-something is equivalent to
  --with-something=no. The configure options are as follows (execute configure
  --help to see all options).
  
  ImageMagick options represent either features to be enabled, disabled,
  or packages to be included in the build. When a feature is enabled (via
  --enable-something), it enables code already present in ImageMagick. When a
  package is enabled (via --with-something), the configure script will search
  for it, and if is properly installed and ready to use (headers and built
  libraries are found by compiler) it will be included in the build. The
  configure script is delivered with all features disabled and all packages
  enabled. In general, the only reason to disable a package is if a package
  exists but it is unsuitable for the build (perhaps an old version or not
  compiled with the right compilation flags).
  
  Here are the optional features you can configure:
  
    --enable-shared
      build the shared libraries and support for loading coder and process
      modules. Shared libraries are preferred because they allow programs
      to share common code, making the individual programs much smaller. In
      addition shared libraries are required in order for PerlMagick to be
      dynamically loaded by an installed PERL (otherwise an additional PERL
      (PerlMagick) must be installed.
  
      ImageMagick built with delegates (see MAGICK PLUG-INS below) can pose
      additional challenges. If ImageMagick is built using static libraries (the
      default without --enable-shared) then delegate libraries may be built as
      either static libraries or shared libraries. However, if ImageMagick is
      built using shared libraries, then all delegate libraries must also be
      built as shared libraries. Static libraries usually have the extension
      .a, while shared libraries typically have extensions like .so, .sa, or
      .dll. Code in shared libraries normally must compiled using a special
      compiler option to produce Position Independent Code (PIC). The only
      time this not necessary is if the platform compiles code as PIC by
      default.
  
      PIC compilation flags differ from vendor to vendor (gcc's is
      -fPIC). However, you must compile all shared library source with the
      same flag (for gcc use -fPIC rather than -fpic). While static libraries
      are normally created using an archive tool like ar, shared libraries
      are built using special linker or compiler options (e.g. -shared for gcc).
  
      If --enable-shared is not specified, a new PERL interpreter (PerlMagick)
      is built which is statically linked against the PerlMagick extension. This
      new interpreter is installed into the same directory as the ImageMagick
      utilities. If --enable-shared is specified, the PerlMagick extension is
      built as a dynamically loadable object which is loaded into your current
      PERL interpreter at run-time. Use of dynamically-loaded extensions is
      preferable over statically linked extensions so use --enable-shared if
      possible (note that all libraries used with ImageMagick must be shared
      libraries!).
  
    --disable-static
      static archive libraries (with extension .a) are not built. If you
      are building shared libraries, there is little value to building static
      libraries. Reasons to build static libraries include: 1) they can be
      easier to debug; 2) clients do not have external dependencies (i.e.
      libMagick.so); 3) building PIC versions of the delegate libraries may
      take additional expertise and effort; 4) you are unable to build shared
      libraries.
  
    --disable-installed
      disable building an installed ImageMagick (default enabled).
  
      By default the ImageMagick build is configured to formally install
      into a directory tree. This the most secure and reliable way to install
      ImageMagick. Use this option to configure ImageMagick so that it doesn't
      use hard-coded paths and locates support files by computing an offset path
      from the executable (or from the location specified by the MAGICK_HOME
      environment variable. The uninstalled configuration is ideal for binary
      distributions which are expected to extract and run in any location.
  
    --enable-ccmalloc
      enable 'ccmalloc' memory debug support (default disabled).
  
    --enable-prof
      enable 'prof' profiling support (default disabled).
  
    --enable-gprof
      enable 'gprof' profiling support (default disabled).
  
    --enable-gcov
      enable 'gcov' profiling support (default disabled).

    --disable-openmp
      disable OpenMP (default enabled).
  
      Certain ImageMagick algorithms, for example convolution, can achieve
      a significant speed-up with the assistance of the OpenMP API when
      running on modern dual and quad-core processors.
  
    --disable-largefile
      disable support for large (64 bit) file offsets.
  
      By default, ImageMagick is compiled with support for large files (>
      2GB on a 32-bit CPU) if the operating system supports large files. Some
      applications which use the ImageMagick library may also require support
      for large files. By disabling support for large files via
      --disable-largefile, dependent applications do not require special
      compilation options for large files in order to use the library.
  
  Here are the optional packages you can configure:

    --enable-legacy-support
      install legacy command-line utilities (default disabled).
  
    --with-quantum-depth
      number of bits in a pixel quantum (default 16).
  
      Use this option to specify the number of bits to use per pixel quantum
      (the size of the red, green, blue, and alpha pixel components). For
      example, --with-quantum-depth=8 builds ImageMagick using 8-bit quantums.
      Most computer display adapters use 8-bit quantums. Currently supported
      arguments are 8, 16, or 32. We recommend the default of 16 because
      some image formats support 16 bits-per-pixel. However, this option is
      important in determining the overall run-time performance of ImageMagick.
  
      The number of bits in a quantum determines how many values it may
      contain. Each quantum level supports 256 times as many values as the
      previous level. The following table shows the range available for various
      quantum sizes.
  
        Quantum Depth  Valid Range (Decimal)  Valid Range (Hex)
            8             0-255                  00-FF
           16             0-65535                0000-FFFF
           32             0-4294967295           00000000-FFFFFFFF
        
      Larger pixel quantums can cause ImageMagick to run more slowly and to
      require more memory. For example, using sixteen-bit pixel quantums can
      cause ImageMagick to run 15% to 50% slower (and take twice as much memory)
      than when it is built to support eight-bit pixel quantums.
  
      The amount of virtual memory consumed by an image can be computed by
      the equation (5 * Quantum Depth * Rows * Columns) / 8. This an important
      consideration when resources are limited, particularly since processing
      an image may require several images to be in memory at one time. The
      following table shows memory consumption values for a 1024x768 image:
  
        Quantum Depth   Virtual Memory
             8               3MB
            16               8MB
            32              15MB
  
    --enable-hdri
      accurately represent the wide range of intensity levels (experimental).
  
    --enable-osx-universal-binary
      build a universal binary on OS X.
  
    --without-modules
      disable support for dynamically loadable modules.
  
      Image coders and process modules are built as loadable modules which are
      installed under the directory [prefix]/lib/ImageMagick-X.X.X/modules-QN
      (where 'N' equals 8, 16, or 32 depending on the quantum depth) in the
      subdirectories coders and filters respectively. The modules build option
      is only available in conjunction with --enable-shared. If --enable-shared
      is not also specified, support for building modules is disabled. Note that
      if --enable-shared and --disable-modules are specified, the module loader
      is active (allowing extending an installed ImageMagick by simply copying
      a module into place) but ImageMagick itself is not built using modules.
  
    --with-cache
      set pixel cache threshold (defaults to available memory).
  
      Specify a different image pixel cache threshold with this option. This
      sets the maximum amount of heap memory that ImageMagick is allowed to
      consume before switching to using memory-mapped temporary files to store
      raw pixel data.
  
    --without-threads
      disable threads support.
  
      By default, the ImageMagick library is compiled with multi-thread
      support. If this undesirable, specify --without-threads.
  
    --with-frozenpaths
      enable frozen delegate paths.
  
      Normally, external program names are substituted into the delegates.xml
      configuration file without full paths. Specify this option to enable
      saving full paths to programs using locations determined by configure.
      This useful for environments where programs are stored under multiple
      paths, and users may use different PATH settings than the person who
      builds ImageMagick.
  
    --without-magick-plus-plus
      disable build/install of Magick++.
  
      Disable building Magick++, the C++ application programming interface
      to ImageMagick. A suitable C++ compiler is required in order to build
      Magick++. Specify the CXX configure variable to select the C++ compiler
      to use (default g++), and CXXFLAGS to select the desired compiler
      optimization and debug flags (default -g -O2). Antique C++ compilers
      will normally be rejected by configure tests so specifying this option
      should only be necessary if Magick++ fails to compile.

    --with-package-release-name
      encode this name into the shared library name (see libtools -release
      option).
  
    --without-perl
      disable build/install of PerlMagick, or
  
      By default, PerlMagick is conveniently compiled and installed as part
      of ImageMagick's normal configure, make, sudo make install process. When
      --without-perl is specified, you must first install ImageMagick, change to
      the PerlMagick subdirectory, build, and finally install PerlMagick. Note,
      PerlMagick is configured even if --without-perl is specified. If the
      argument --with-perl=/path/to/perl is supplied, /../path/to/perl is be
      taken as the PERL interpreter to use. This important in case the perl
      executable in your PATH is not PERL5, or is not the PERL you want to use.
  
    --with-perl=PERL
      use specified Perl binary to configure PerlMagick.
  
    --with-perl-options=OPTIONS
      options to pass on command-line when generating PerlMagick's Makefile
      from Makefile.PL.
  
      The PerlMagick module is normally installed using the Perl interpreter's
      installation PREFIX, rather than ImageMagick's. If ImageMagick's
      installation prefix is not the same as PERL's PREFIX, then you
      may find that PerlMagick's sudo make install step tries to install
      into a directory tree that you don't have write permissions to. This
      common when PERL is delivered with the operating system or on Internet
      Service Provider (ISP) web servers. If you want PerlMagick to install
      elsewhere, then provide a PREFIX option to PERL's configuration step
      via "--with-perl-options=PREFIX=/some/place". Other options accepted by
      MakeMaker are 'LIB', 'LIBPERL_A', 'LINKTYPE', and 'OPTIMIZE'. See the
      ExtUtils::MakeMaker(3) manual page for more information on configuring
      PERL extensions.
  
    --without-bzlib
      disable BZLIB support.
  
    --without-dps
      disable Display Postscript support.
  
    --with-fpx
      enable FlashPIX support.
  
    --without-freetype
      disable TrueType support.
  
    --with-gslib
      enable Ghostscript library support.
  
    --without-jbig
      disable JBIG support.
  
    --without-jpeg
      disable JPEG support.
  
    --without-jp2
      disable JPEG v2 support.
  
    --without-lcms
      disable lcms (v1.1X) support

    --without-lcms2
      disable lcms (v2.X) support
  
    --without-lzma
      disable LZMA support.

    --without-png
      disable PNG support.
  
    --without-tiff
      disable TIFF support.
  
    --without-wmf
      disable WMF support.
  
    --with-fontpath
      prepend to default font search path.
  
    --with-gs-font-dir
      directory containing Ghostscript fonts.
  
      Specify the directory containing the Ghostscript Postscript Type 1 font
      files (e.g. n022003l.pfb) so that they can be rendered using the FreeType
      library. If the font files are installed using the default Ghostscript
      installation paths (${prefix}/share/ghostscript/fonts), they should
      be discovered automagically by configure and specifying this option is
      not necessary. Specify this option if the Ghostscript fonts fail to be
      located automagically, or the location needs to be overridden.
  
    --with-windows-font-dir
      directory containing MS-Windows fonts.
  
      Specify the directory containing MS-Windows-compatible fonts. This not
      necessary when ImageMagick is running under MS-Windows.
  
    --without-xml
      disable XML support.
  
    --without-zlib
      disable ZLIB support.
  
    --without-x
      don't use the X Window System.
  
      By default, ImageMagick uses the X11 delegate libraries if they are
      available. When --without-x is specified, use of X11 is disabled. The
      display, animate, and import sub-commands are not included. The remaining
      sub-commands have reduced functionality such as no access to X11 fonts
      (consider using Postscript or TrueType fonts instead).
  
    --with-share-path=DIR
      Alternate path to share directory (default share/ImageMagick).
  
    --with-libstdc=DIR
      use libstdc++ in DIR (for GNU C++).
  
  While configure is designed to ease installation of ImageMagick, it often
  discovers problems that would otherwise be encountered later when compiling
  ImageMagick. The configure script tests for headers and libraries by
  executing the compiler (CC) with the specified compilation flags (CFLAGS),
  pre-processor flags (CPPFLAGS), and linker flags (LDFLAGS). Any errors are
  logged to the file config.log. If configure fails to discover a header or
  library please review this log file to determine why, however, please be
  aware that *errors in the config.log are normal* because configure works by
  trying something and seeing if it fails. An error in config.log is only a
  problem if the test should have passed on your system.
  
  Common causes of configure failures are: 1) a delegate header is not in the
  header include path (CPPFLAGS -I option); 2) a delegate library is not in
  the linker search/run path (LDFLAGS -L/-R option); 3) a delegate library is
  missing a function (old version?); or 4) compilation environment is faulty.
  
  If all reasonable corrective actions have been tried and the problem appears
  be due to a flaw in the configure script, please send a bug report to the
  ImageMagick Defect Support Forum. All bug reports should contain the operating
  system type (as reported by uname -a) and the compiler/compiler-version. A
  copy of the configure script output and/or the relevant portion of config.log
  file may be valuable in order to find the problem. If you post portions
  of config.log, please also send a script of the configure output and a
  description of what you expected to see (and why) so the failure you are
  observing can be identified and resolved.
  
  ImageMagick is now configured and ready to build
  
Build
  
  Once ImageMagick is configured, these standard build targets are available
  from the generated make files:
  
    make
      build ImageMagick.
  
    sudo make install
      install ImageMagick.
  
    make check
      Run tests using the installed ImageMagick (sudo make install must be
      done first). Ghostscript is a prerequisite, otherwise the EPS, PS,
      and PDF tests will fail.
  
    make clean
      Remove everything in the build directory created by make.
  
    make distclean
      remove everything in the build directory created by configure and
      make. This useful if you want to start over from scratch.
  
    make uninstall
      Remove all files from the system which are (or would be) installed by sudo
      make install using the current configuration. Note that this target is
      imperfect for PerlMagick since Perl no longer supports an uninstall
      target.
  
  In most cases you will simply want to compile ImageMagick with this command:
  
    $magick> make
  
  Once built, you can optionally install ImageMagick on your system as
  discussed below.
  
Install
  
  Now that ImageMagick is configured and built, type:
  
    $magick> make install
  
  to install it.
  
  By default, ImageMagick is installs binaries in /../usr/local/bin, libraries
  in /../usr/local/lib, header files in /../usr/local/include and documentation
  in /../usr/local/share. You can specify an alternative installation prefix
  other than /../usr/local by giving configure the option --prefix=PATH. This
  valuable in case you don't have privileges to install under the default
  paths or if you want to install in the system directories instead.
  
  To confirm your installation of the ImageMagick distribution was successful,
  ensure that the installation directory is in your executable search path
  and type:
  
    $magick> display
  
  The ImageMagick logo is displayed on your X11 display.
  
  To verify the ImageMagick build configuration, type:
  
    $magick> identify -list configure
  
  To list which image formats are supported , type:
  
    $magick> identify -list format
  
  For a more comprehensive test, you run the ImageMagick test suite by typing:
  
    $magick> make check
  
  Ghostscript is a prerequisite, otherwise the EPS, PS, and PDF tests will
  fail. Note that due to differences between the developer's environment and
  your own it is possible that a few tests may fail even though the results are
  ok. Differences between the developer's environment environment and your own
  may include the compiler, the CPU type, and the library versions used. The
  ImageMagick developers use the current release of all dependent libraries.

Linux-specific Build instructions
  
  Download ImageMagick.src.rpm from ftp.imagemagick.org or its mirrors and
  verify the distribution against its message digest.
  
  Build ImageMagick with this command:
  
    $magick> rpmbuild --rebuild ImageMagick.src.rpm
  
  After the build you, locate the RPMS folder and install the ImageMagick
  binary RPM distribution:
  
    $magick> rpm -ivh ImageMagick-7.0.0-?.*.rpm
  
MinGW-specific Build instructions
  
  Although you can download and install delegate libraries yourself, many
  are already available in the GnuWin32 distribution. Download and install
  whichever delegate libraries you require such as JPEG, PNG, TIFF, etc. Make
  sure you specify the development headers when you install a package. Next
  type,
  
    $magick> tar jxvf ImageMagick-7.0.0-?.tar.bz2
    $magick> cd ImageMagick-7.0.0
    $magick> export CPPFLAGS="-Ic:/Progra~1/GnuWin32/include"
    $magick> export LDFLAGS="-Lc:/Progra~1/GnuWin32/lib"
    $magick> ./configure --without-perl
    $magick> make $magick> sudo make install
  
Dealing with Unexpected Problems
  
  Chances are the download, configure, build, and install of ImageMagick went
  flawlessly as it is intended, however, certain systems and environments may
  cause one or more steps to fail. We discuss a few problems we've run across
  and how to take corrective action to ensure you have a working release
  of ImageMagick
  
  Build Problems
  
  If the build complains about missing dependencies (e.g. .deps/source.PLO),
  add --disable-dependency-tracking to your configure command line.
  
  Some systems may fail to link at build time due to unresolved symbols. Try
  adding the LDFLAGS to the configure command line:
  
    $magick> configure LDFLAGS='-L/usr/local/lib -R/usr/local/lib'
  
  Dynamic Linker Run-time Bindings
  
  On some systems, ImageMagick may not find its shared library, libMagick.so. Try
  running the ldconfig with the library path:
  
    $magick> /sbin/ldconfig /usr/local/lib
  
  Solaris and Linux systems have the ldd command which is useful to track which
  libraries ImageMagick depends on:
  
    $magick> ldd `which convert`
  
  Delegate Libraries
  
  On occasion you may receive these warnings:
  
    no decode delegate for this image format
    no encode delegate for this image format
  
  This exception indicates that an external delegate library or its headers
  were not available when ImageMagick was built. To add support for the image
  format, download and install the requisite delegate library and its header
  files and reconfigure, rebuild, and reinstall ImageMagick. As an example,
  lets add support for the JPEG image format. First we install the JPEG RPMS:
  
    $magick> yum install libjpeg libjpeg-devel
  
  Now reconfigure, rebuild, and reinstall ImageMagick. To verify JPEG is now
  properly supported within ImageMagick, use this command:
  
    $magick> identify -list format
  
  You should see a mode of rw- associated with the JPEG tag. This mode means
  the image can be read or written and can only support one image per image
  file.
  
PerlMagick
  
  If PerlMagick fails to link with a message similar to libperl.a is not found,
  rerun configure with the --enable-shared or --enable-shared --with-modules
  options.
