*******************************************************************************
**     Building on Unix Platforms, Cygwin, and MinGW
*******************************************************************************

==================
Build Requirements
==================

-- autoconf 2.56 or later
   * If using MinGW, this can be obtained by installing the MSYS DTK

-- automake 1.7 or later
   * If using MinGW, this can be obtained by installing the MSYS DTK

-- libtool 1.4 or later
   * If using MinGW, this can be obtained by installing the MSYS DTK

-- NASM
   * 0.98 or later is required for a 32-bit build
   * NASM 2.05 or later is required for a 64-bit build
   * NASM 2.07 or later is required for a 64-bit build on OS/X (10.6 "Snow
     Leopard" or later.)  This can be obtained from MacPorts
     (http://www.macports.org/).

   The NASM 2.05 RPMs do not work on older Linux systems, such as Enterprise
   Linux 4.  On such systems, you can easily build and install NASM 2.05
   from the source RPM by executing the following as root:

     ARCH=`uname -m`
     wget http://www.nasm.us/pub/nasm/releasebuilds/2.05.01/nasm-2.05.01-1.src.rpm
     rpmbuild --rebuild nasm-2.05.01-1.src.rpm
     rpm -Uvh /usr/src/redhat/RPMS/$ARCH/nasm-2.05.01-1.$ARCH.rpm

-- GCC v4 or later recommended for best performance

======================
Building libjpeg-turbo
======================

The following procedure will build libjpeg-turbo on Linux, 32-bit OS X, and
Solaris/x86 systems (on Solaris, this generates a 32-bit library.  See below
for 64-bit build instructions.)

  cd libjpeg-turbo
  autoreconf -fiv
  sh ./configure
  make

NOTE: Running autoreconf is only necessary if building libjpeg-turbo from the
SVN repository.

This will generate the following files under .libs/

  libjpeg.a
      Static link library for libjpeg-turbo

  libjpeg.so.62.0.0 (Linux, Solaris)
  libjpeg.62.dylib (OS X)
  libjpeg-62.dll (MinGW)
  cygjpeg-62.dll (Cygwin)
      Shared library for libjpeg-turbo

  libjpeg.so (Linux, Solaris)
  libjpeg.dylib (OS X)
  libjpeg.dll.a (Cygwin, MinGW)
      Development stub for libjpeg-turbo shared library

  libturbojpeg.a
      Static link library for TurboJPEG/OSS

  libturbojpeg.so (Linux, Solaris)
  libturbojpeg.dylib (OS X)
      Shared library and development stub for TurboJPEG/OSS

  libturbojpeg.dll (MinGW)
  cygturbojpeg.dll (Cygwin)
      Shared library for TurboJPEG/OSS

  libturbojpeg.dll.a (Cygwin, MinGW)
      Development stub for TurboJPEG/OSS shared library

========================
Installing libjpeg-turbo
========================

If you intend to install these libraries and the associated header files, then
replace 'make' in the instructions above with

  make install prefix={base dir} libdir={library directory}

For example,

  make install prefix=/usr/local libdir=/usr/local/lib64

will install the header files in /usr/local/include and the library files in
/usr/local/lib64.  If 'prefix' and 'libdir' are not specified, then the default
is to install the header files in /opt/libjpeg-turbo/include and the library
files in /opt/libjpeg-turbo/lib.

NOTE: You can specify a prefix of /usr and a libdir of, for instance,
/usr/lib64 to overwrite the system's version of libjpeg.  If you do this,
however, then be sure to BACK UP YOUR SYSTEM'S INSTALLATION OF LIBJPEG before
overwriting it.  It is recommended that you instead install libjpeg-turbo into
a non-system directory and manipulate the LD_LIBRARY_PATH or create sym links
to force applications to use libjpeg-turbo instead of libjpeg.  See
README-turbo.txt for more information.

=============
Build Recipes
=============

32-bit Library Build on 64-bit Linux
------------------------------------

Add

  --host i686-pc-linux-gnu CFLAGS='-O3 -m32' CXXFLAGS='-O3 -m32'

to the configure command line.


64-bit Library Build on 64-bit OS/X
-----------------------------------

Add

  --host x86_64-apple-darwin10.0.0 NASM=/opt/local/bin/nasm

to the configure command line.  NASM 2.07 from MacPorts must be installed.


32-bit Library Build on 64-bit OS/X
-----------------------------------

Add

  CFLAGS='-O3 -m32' CXXFLAGS='-O3 -m32' LDFLAGS=-m32

to the configure command line.


32-bit Backward-Compatible Library Build on 64-bit OS/X
-------------------------------------------------------

Add

  CC=gcc-4.0 CXX=g++-4.0 CFLAGS='-isysroot /Developer/SDKs/MacOSX10.4u.sdk \
    -mmacosx-version-min=10.4 -O3 -m32' CXXFLAGS='-isysroot \
    /Developer/SDKs/MacOSX10.4u.sdk -mmacosx-version-min=10.4 -O3 -m32' \
    LDFLAGS='-isysroot /Developer/SDKs/MacOSX10.4u.sdk \
    -mmacosx-version-min=10.4 -m32'

to the configure command line.  The OS X 10.4 SDK must be installed.


64-bit Library Build on 64-bit Solaris
--------------------------------------

Add

  --host x86_64-pc-solaris CFLAGS='-O3 -m64' CXXFLAGS='-O3 -m64' LDFLAGS=-m64

to the configure command line.


MinGW Build on Cygwin
---------------------

Add

  --host mingw32

to the configure command line.  This will produce libraries which do not
depend on cygwin1.dll or other Cygwin DLL's.


Sun Studio
----------

Add

  CC=cc CXX=CC

to the configure command line.  libjpeg-turbo will automatically be built with
the maximum optimization level (-xO5) unless you override CFLAGS and CXXFLAGS.

To build a 64-bit version of libjpeg-turbo using Sun Studio, add

  --host x86_64-pc-solaris CC=cc CXX=CC CFLAGS='-xO5 -m64' \
    CXXFLAGS='-xO5 -m64' LDFLAGS=-m64

to the configure command line.


*******************************************************************************
**     Building on Windows (Visual C++)
*******************************************************************************

==================
Build Requirements
==================

-- GNU Make v3.7 or later
   * Can be found in MSYS (http://www.mingw.org/download.shtml) or
     Cygwin (http://www.cygwin.com/)

-- Windows SDK for Windows Server 2008 and .NET Framework 3.5 (or a later
   version)

   http://msdn.microsoft.com/en-us/windows/dd146047.aspx

   * The Windows SDK includes both 32-bit and 64-bit Visual C++ compilers and
     everything necessary to build libjpeg-turbo.  If you do not already have
     Visual C++ installed, then this is the recommended solution.  Also tested
     with Microsoft Visual C++ 2008 Express Edition (both are free downloads.)
   * Add the compiler and SDK binary directories (for instance,
     c:\Program Files\Microsoft Visual Studio 9.0\VC\BIN;
     c:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE;
     c:\Program Files\Microsoft SDKs\Windows\v6.1\bin)
     to the system or user PATH environment variable prior to building
     libjpeg-turbo.
   * Add the compiler and SDK include directories (for instance,
     c:\Program Files\Microsoft Visual Studio 9.0\VC\INCLUDE;
     c:\Program Files\Microsoft SDKs\Windows\v6.1\include)
     to the system or user INCLUDE environment variable prior to building
     libjpeg-turbo.
   * Add the compiler library directory (for instance,
     c:\Program Files\Microsoft Visual Studio 9.0\VC\LIB;
     c:\Program Files\Microsoft SDKs\Windows\v6.1\lib)
     to the system or user LIB environment variable prior to building
     libjpeg-turbo.

-- NASM (http://www.nasm.us/) 0.98 or later

======================
Building libjpeg-turbo
======================

  cd libjpeg-turbo
  make -f win/Makefile

This will generate the following files under libjpeg-turbo\windows\:

  jpeg-static.lib        Static link library for libjpeg-turbo
  jpeg62.dll             Shared library for libjpeg-turbo
  jpeg.lib               Development stub for libjpeg-turbo shared library
  turbojpeg-static.lib   Static link library for TurboJPEG/OSS
  turbojpeg.dll          Shared library for TurboJPEG/OSS
  turbojpeg.lib          Development stub for TurboJPEG/OSS shared library

#If a 64-bit Windows platform is detected, then the build system will attempt
#to build a 64-bit version of libjpeg-turbo.  You can override this by running
#
#  make -f win/Makefile WIN64=no

Win64 doesn't work yet


*******************************************************************************
**     Creating Release Packages
*******************************************************************************

The following commands can be used to create various types of release packages:

make rpm

  Create RedHat-style binary RPM package.  Requires RPM v4 or later.

make srpm

  This runs 'make dist' to create a pristine source tarball, then creates a
  RedHat-style source RPM package from the tarball.  Requires RPM v4 or later.

make deb

  Create Debian-style binary package.  Requires dpkg.

make dmg

  Create Macintosh package/disk image.  This requires the PackageMaker
  application, which must be installed in /Developer/Applications/Utilities.

make udmg

  On 64-bit OS X (10.6 "Snow Leopard" or later), this creates a version of the
  Macintosh package/disk image which contains universal i386/x86-64 binaries.
  The 32-bit fork of these binaries is backward compatible with OS X 10.4 and
  later, whereas the 64-bit fork is compatible with OS X 10.6 and later.  OS X
  10.4 compatibility SDK required.

make -f win/Makefile dist

  This creates a Win32 installer for the libjpeg-turbo SDK.  This requires the
  Nullsoft Install System (http://nsis.sourceforge.net/.)  makensis.exe should
  be in your PATH.
