SETUP instructions for the Independent JPEG Group's JPEG software
=================================================================

This file explains how to configure and compile the JPEG software.  We have
tried to make this software extremely portable and flexible, so that it can be
adapted to almost any environment.  The downside of this decision is that the
installation process is not very automatic; you will need at least a little
familiarity with C programming and program build procedures for your system.

This file contains general instructions, then sections of specific hints for
certain systems.  You may save yourself considerable time if you scan the
whole file before starting to do anything.

Before installing the software you must unpack the distributed source code.
Since you are reading this file, you have probably already succeeded in this
task.  However, there is one potential trap if you are on a non-Unix system:
you may need to convert these files to the local standard text file format
(for example, if you are on MS-DOS you probably have to convert LF end-of-line
to CR/LF).  If so, apply the conversion to all the files EXCEPT those whose
names begin with "test".  The test files contain binary data; if you change
them in any way then the self-test will give bad results.


STEP 1: PREPARE A MAKEFILE
==========================

First, select a makefile and copy it to "Makefile" (or whatever your version
of make uses as the default makefile name; for example, "makefile.mak" for
old versions of Borland C).  We include several standard makefiles in the
distribution:

	makefile.ansi:	for Unix systems with ANSI-compatible C compilers.
	makefile.unix:	for Unix systems with non-ANSI C compilers.
	makefile.mc5:	for Microsoft C 5.x under MS-DOS.
	makefile.mc6:	for Microsoft C 6.x and up under MS-DOS.
	makefile.bcc:	for Borland C (Turbo C) under MS-DOS.
	makefile.manx:	for Manx Aztec C on Amigas.
	makefile.sas:	for SAS C on Amigas.
	makcjpeg.st:	project file for Atari ST/STE/TT Pure C or Turbo C.
	makdjpeg.st:	project file for Atari ST/STE/TT Pure C or Turbo C.
	makljpeg.st:	project file for Atari ST/STE/TT Pure C or Turbo C.
	makefile.mms:	for VAX/VMS systems with MMS.
	makefile.vms:	for VAX/VMS systems without MMS.

If you don't see a makefile for your system, we recommend starting from either
makefile.ansi or makefile.unix, depending on whether your compiler accepts
ANSI C or not.  Actually you should start with makefile.ansi whenever your
compiler supports ANSI-style function definitions; you don't need full ANSI
compatibility.  The difference between the two makefiles is that makefile.unix
preprocesses the source code to convert function definitions to old-style C.
(Our thanks to Peter Deutsch of Aladdin Enterprises for the ansi2knr program.)

If you don't know whether your compiler supports ANSI-style function
definitions, then take a look at ckconfig.c.  It is a test program that will
help you figure out this fact, as well as some other facts you'll need in
later steps.  You must compile and execute ckconfig.c by hand; the makefiles
don't provide any support for this.  ckconfig.c may not compile the first try
(in fact, the whole idea is for it to fail if anything is going to).  If you
get compile errors, fix them by editing ckconfig.c according to the directions
given in ckconfig.c.  Once you get it to run, select a makefile according to
the advice it prints out, and make any other changes it recommends.

Look over the selected Makefile and adjust options as needed.  In particular
you may want to change the CC and CFLAGS definitions.  For instance, if you
are using GCC, set CC=gcc.  If you had to use any compiler switches to get
ckconfig.c to work, make sure the same switches are in CFLAGS.

If you are on a system that doesn't use makefiles, you'll need to set up
project files (or whatever you do use) to compile all the source files and
link them into executable files cjpeg and djpeg.  See the file lists in any of
the makefiles to find out which files go into each program.  As a last resort,
you can make a batch script that just compiles everything and links it all
together; makefile.vms is an example of this (it's for VMS systems that have
no make-like utility).


STEP 2: EDIT JCONFIG.H
======================

Look over jconfig.h and adjust #defines to reflect the properties of your
system and C compiler.  If you prefer, you can usually leave jconfig.h
unmodified and add -Dsymbol switches to the Makefile's CFLAGS definition.
(This is already done if you used a compiler-specific makefile in step 1.)
However, putting the switches in the Makefile is a bad idea if you are going
to incorporate the JPEG software into other programs --- you'd need to include
the same -D switches in the other programs' Makefiles.  Better to change
jconfig.h.

If you have an ANSI-compliant C compiler, no changes should be necessary
except perhaps for RIGHT_SHIFT_IS_UNSIGNED and TWO_FILE_COMMANDLINE.  For
older compilers other changes may be needed, depending on what ANSI features
are supported.

If you don't know enough about C programming to understand the questions in
jconfig.h, then use ckconfig.c to figure out what to change.  (See description
of ckconfig.c in step 1.)

A note about TWO_FILE_COMMANDLINE: defining this selects the command line
syntax in which the input and output files are both named on the command line.
If it's not defined, the output image goes to standard output, and the input
can optionally come from standard input.  You MUST use two-file style on any
system that doesn't cope well with binary data fed through stdin/stdout; this
is true for most MS-DOS compilers, for example.  If you're not on a Unix
system, it's probably safest to assume you need two-file style.


STEP 3: SELECT SYSTEM-DEPENDENT FILES
=====================================

A few places in the JPEG software are so system-dependent that we have to
provide several different implementations and let you select the one you need.

The only system-dependent file in the current version is jmemsys.c.  This file
controls use of temporary files for big images that won't fit in main memory.
You'll notice there is no file named jmemsys.c in the distribution; you must
select one of the provided versions and copy, rename, or link it to jmemsys.c.
Here are the provided versions:

	jmemansi.c	This is a reasonably portable version that should
			work on most ANSI and near-ANSI C compilers.  It uses
			the ANSI-standard library routine tmpfile(), which not
			all non-ANSI systems have.  On some systems tmpfile()
			may put the temporary file in a non-optimal location;
			if you don't like what it does, use jmemname.c.

	jmemname.c	This version constructs the temp file name by itself.
			For anything except a Unix machine, you'll need to
			configure the select_file_name() routine appropriately;
			see the comments near the head of jmemname.c.
			If you use this version, define NEED_SIGNAL_CATCHER
			in jconfig.h or in the Makefile to make sure the temp
			files are removed if the program is aborted.

	jmemnobs.c	(That stands for No Backing Store :-).  This will
			compile on almost any system, but it assumes you
			have enough main memory or virtual memory to hold
			the biggest images you need to work with.

	jmemdos.c	This should be used in most MS-DOS installations; see
			the system-specific notes about MS-DOS for more info.
			IMPORTANT: if you use this, also copy jmemdos.h to
			jmemsys.h, replacing the standard version.  ALSO,
			include the assembly file jmemdosa.asm in the programs.
			(This last is already done if you used one of the
			supplied MS-DOS-specific makefiles.)

If you have plenty of (real or virtual) main memory, just use jmemnobs.c.
"Plenty" means at least ten bytes for every pixel in the largest images
you plan to process, so a lot of systems don't meet this criterion.
If yours doesn't, try jmemansi.c first.  If that doesn't compile, you'll have
to use jmemname.c; be sure to adjust select_file_name() for local conditions.
You may also need to change unlink() to remove() in close_backing_store().

Except with jmemnobs.c, you need to adjust the #define DEFAULT_MAX_MEM to a
reasonable value for your system (either by editing jmemsys.c, or by adding
a -D switch to the Makefile).  This value limits the amount of data space the
program will attempt to allocate.  Code and static data space isn't counted,
so the actual memory needs for cjpeg or djpeg are typically 100 to 150Kb more
than the max-memory setting.  Larger max-memory settings reduce the amount of
I/O needed to process a large image, but too large a value can result in
"insufficient memory" failures.  On most Unix machines (and other systems with
virtual memory), just set DEFAULT_MAX_MEM to several million and forget it.
At the other end of the spectrum, for MS-DOS machines you probably can't go
much above 300K to 400K.  (On MS-DOS the value refers to conventional memory;
extended/expanded memory is handled separately by jmemdos.c.)


STEP 4: MAKE
============

Now you should be able to "make" the software.

If you have trouble with missing system include files or inclusion of the
wrong ones, look at jinclude.h (or use ckconfig.c, if you are not a C expert).

If your compiler complains about big_sarray_control and big_barray_control
being undefined structures, you should be able to shut it up by adding
-DINCOMPLETE_TYPES_BROKEN to CFLAGS (or add #define INCOMPLETE_TYPES_BROKEN
to jconfig.h).  If you don't have a getenv() library routine, define NO_GETENV.

There are a fair number of routines that do not use all of their parameters;
some compilers will issue warnings about this, which you can ignore.  Any
other warning deserves investigation.


STEP 5: TEST
============

As a quick test of functionality we've included a small sample image in
several forms:
	testorig.jpg	A reduced section of the well-known Lenna picture.
	testimg.ppm	The output of djpeg testorig.jpg
	testimg.gif	The output of djpeg -gif testorig.jpg
	testimg.jpg	The output of cjpeg testimg.ppm
(The two .jpg files aren't identical since JPEG is lossy.)  If you can
generate duplicates of the testimg.* files then you probably have working
programs.

With most of the makefiles, "make test" will perform the necessary
comparisons.  If you're using a makefile that doesn't provide this option, run
djpeg and cjpeg to generate testout.ppm, testout.gif, and testout.jpg, then
compare these to testimg.* with whatever binary file comparison tool you have.
The files should be bit-for-bit identical.

If the cjpeg test run fails with "Missing Huffman code table entry", it's a
good bet that you needed to define RIGHT_SHIFT_IS_UNSIGNED.  Go back to step 2
and run ckconfig.c.  (This is a good plan for any other test failure, too.)

If your choice of jmemsys.c was anything other than jmemnobs.c, you should
test that temporary-file usage works.  Try "djpeg -gif -max 0 testorig.jpg"
and make sure its output matches testimg.gif.  If you have any really large
images handy, try compressing them with -optimize and/or decompressing with
-gif to make sure your DEFAULT_MAX_MEM setting is not too large.

NOTE: this is far from an exhaustive test of the JPEG software; some modules,
such as 1-pass color quantization, are not exercised at all.  It's just a quick
test to give you some confidence that you haven't missed something major.


STEP 6: INSTALLATION
====================

Once you're done with the above steps, you can install the software by copying
the executable files (cjpeg and djpeg) to wherever you normally install
programs.  On Unix systems, you'll also want to put cjpeg.1 and djpeg.1 in the
corresponding manual directory.  (The makefiles don't support this step since
there's such a wide variety of installation procedures on different systems.)

To learn to use the programs, read the file USAGE (or manual pages cjpeg(1)
and djpeg(1) on Unix).


OPTIMIZATION
============

Unless you own a Cray, you'll probably be interested in making the JPEG
software go as fast as possible.  This section covers some machine-dependent
optimizations you may want to try.  We suggest that before trying any of this,
you first get the basic installation to pass the self-test (step 5 above).
Repeat the self-test after any optimization to make sure that you haven't
broken anything.

The JPEG DCT routines perform a lot of multiplications.  These multiplications
must yield 32-bit results, but none of their input values are more than 16
bits wide.  On many machines, notably the 680x0 and 80x86 CPUs, a 16x16=>32
bit multiply instruction is faster than a full 32x32=>32 bit multiply.
Unfortunately there is no portable way to specify such a multiplication in C,
but some compilers can generate one when you use the right combination of
casts.  See the MULTIPLY macro definitions in jfwddct.c and jrevdct.c.
If your compiler makes "int" be 32 bits and "short" be 16 bits, defining
SHORTxSHORT_32 is fairly likely to work.  When experimenting with alternate
definitions, be sure to test not only whether the code still works (use the
self-test step), but also whether it is actually faster --- on some compilers,
alternate definitions may compute the right answer, yet be slower than the
default.  Timing cjpeg on a large PPM input file is the best way to check
this, as the DCT will be the largest fraction of the runtime in that mode.
(Note: some of the distributed compiler-specific makefiles already contain
-D switches to select an appropriate MULTIPLY definition.)

If access to "short" arrays is slow on your machine, it may be a win to define
type DCTELEM as int rather than as JCOEF (which is normally defined as short).
This will cause the DCT routines to operate on int arrays instead of short
arrays.  If shorts are slow and you have lots of memory to burn, you might
even make JCOEF itself be int.

If your compiler can compile function calls in-line, make sure the INLINE
macro in jconfig.h is defined as the keyword that marks a function
inline-able.  Some compilers have a switch that tells the compiler to inline
any function it thinks is profitable (e.g., -finline-functions for gcc).
Enabling such a switch is likely to make the compiled code bigger but faster.

In general, it's worth trying the maximum optimization level of your compiler,
and experimenting with any optional optimizations such as loop unrolling.
(Unfortunately, far too many compilers have optimizer bugs ... be prepared to
back off if the code fails self-test.)  If you do any experimentation along
these lines, please report the optimal settings to jpeg-info@uunet.uu.net so
we can mention them in future releases.  Be sure to specify your machine and
compiler version.


OPTIONAL STUFF
==============

Progress monitor:

If you like, you can #define PROGRESS_REPORT (in jconfig.h or in the Makefile)
to enable display of percent-done progress reports.  The routines provided in
jcmain.c/jdmain.c merely print percentages to stderr, but you can customize
them to do something fancier.

Utah RLE file format support:

We distribute the software with support for RLE image files (Utah Raster
Toolkit format) disabled, because the RLE support won't compile without the
Utah library.  If you have URT version 3.0, you can enable RLE support as
follows:
	1.  #define RLE_SUPPORTED in jconfig.h or in the Makefile.
	2.  Add a -I option to CFLAGS in the Makefile for the directory
	    containing the URT .h files (typically the "include"
	    subdirectory of the URT distribution).
	3.  Add -L... -lrle to LDLIBS in the Makefile, where ... specifies
	    the directory containing the URT "librle.a" file (typically the
	    "lib" subdirectory of the URT distribution).

JPEG library:

If you want to incorporate the JPEG code as subroutines in a larger program,
we recommend that you make libjpeg.a, then link that into your surrounding
program.  See file README for more info.

CAUTION: When you use the JPEG code as subroutines, we recommend that you make
any required configuration changes by modifying jconfig.h, not by adding -D
switches to the Makefile.  Otherwise you must be sure to provide the same -D
switches when compiling any program that includes the JPEG .h files, to ensure
that the parameter structures are interpreted the same way.  (This is only
critical for the first few symbols mentioned in jconfig.h, down through
NEED_FAR_POINTERS.)

Removing code:

If you need to make a smaller version of the JPEG software, some optional
functions can be removed at compile time.  See the xxx_SUPPORTED #defines in
jconfig.h.  If at all possible, we recommend that you leave in decoder support
for all valid JPEG files, to ensure that you can read anyone's output.
Restricting your encoder, or removing optional functions like block smoothing,
won't hurt compatibility.  Taking out support for image file formats that you
don't use is the most painless way to make the programs smaller.


NOTES FOR SPECIFIC SYSTEMS
==========================

We welcome reports on changes needed for systems not mentioned here.
Submit 'em to jpeg-info@uunet.uu.net.  Also, if ckconfig.c is wrong about
how to configure the JPEG software for your system, please let us know.


Amiga:

Makefiles are provided for Manx Aztec C and SAS C.  I have also heard from
people who have compiled with the free DICE compiler, using makefile.ansi as a
starting point (set "CC= dcc" and "CFLAGS= -c -DAMIGA -DTWO_FILE_COMMANDLINE
-DNEED_SIGNAL_CATCHER" in the makefile).  For all compilers, we recommend you
use jmemname.c as the system-dependent memory manager.  Assuming you have
-DAMIGA in the makefile, jmemname.c will put temporary files in JPEGTMP:.
Change jmemname.c if you don't like this.


Atari:

The project files provided should work as-is with Pure C.  For Turbo C, change
library filenames "PC..." to "TC..." in the project files for cjpeg.ttp and
djpeg.ttp.  Don't forget to select a jmemsys.c file, see Step 3 (we recommend
jmemansi.c).  Also adjust the DEFAULT_MAX_MEM setting --- you probably want it
to be a couple hundred K less than your normal free memory.  Note that you
must make jpeg.lib before making cjpeg.ttp or cjpeg.ttp.  You'll have to
perform the self-test (Step 5) by hand.

There is a bug in some older versions of the Turbo C library which causes the
space used by temporary files created with "tmpfile()" not to be freed after
an abnormal program exit.  If you check your disk afterwards, you will find
cluster chains that are allocated but not used by a file.  This should not
happen in cjpeg or djpeg, since we enable a signal catcher to explicitly close
temp files before exiting.  But if you use the JPEG library with your own
code, be sure to supply a signal catcher, or else use a different
system-dependent memory manager.


Cray:

Should you be so fortunate as to be running JPEG on a Cray YMP, there is a
compiler bug in Cray's Standard C versions prior to 3.1.  You'll need to
insert a line reading "#pragma novector" just before the loop	
    for (i = 1; i <= (int) htbl->bits[l]; i++)
      huffsize[p++] = (char) l;
in fix_huff_tbl (in V3, line 42 of jchuff.c and line 38 of jdhuff.c).  The
usual symptom of not adding this line is a core-dump.  See Cray's SPR 48222.


HP/Apollo DOMAIN:

With system release 10.4 or later, makefile.ansi should work OK.  If you have
version 10.3.anything, you need to figure out whether you have the ANSI C
compiler (version 6.7 or later) and whether you've installed the ANSI C
include files (if so, the first line of <stdio.h> will mention ANSI C).
If you have the ANSI C compiler but not the ANSI C include files, use
makefile.ansi and add -DNONANSI_INCLUDES to CFLAGS.  If you have both,
then makefile.ansi should work as is.  If neither, use makefile.unix.


HP-UX:

If you have HP-UX 7.05 or later with the "software development" C compiler,
then you can use makefile.ansi.  Add "-Aa" to the CFLAGS line in the makefile
to make the compiler work in ANSI mode.  If you have a pre-7.05 system, or if
you are using the non-ANSI C compiler delivered with a minimum HP-UX 8.0
system, then you must use makefile.unix (and do NOT add -Aa).  Also, adding
"-lmalloc" to LDLIBS is recommended if you have libmalloc.a (it seems not to
be present in minimum 8.0).

On HP 9000 series 800 machines, the HP C compiler is buggy in revisions prior
to A.08.07.  If you get complaints about "not a typedef name", you'll have to
convert the code to K&R style (i.e., use makefile.unix).


Macintosh MPW:

We don't directly support MPW in the current release, but Larry Rosenstein
reports that the JPEG code can be ported without very much trouble.  There's
useful notes and conversion scripts in his kit for porting PBMPLUS to MPW.
You can obtain the kit by FTP to ftp.apple.com, file /pub/lsr/pbmplus-port*.


Macintosh Think C:

You'll have to prepare project files for cjpeg and djpeg; we don't include
those in the distribution since they are not text files.  The COBJECTS and
DOBJECTS lists in makefile.unix show which files should be included in each
project.  Also add the ANSI and Unix C libraries in a separate segment.  You
may need to divide the JPEG files into more than one segment; you can do this
pretty much as you please.

If you have Think C version 5.0 you need not modify jconfig.h; instead you
should turn on both the ANSI Settings and Language Extensions option buttons
(so that both __STDC__ and THINK_C are predefined).  With version 4.0 you must
edit jconfig.h.  (You can #define HAVE_STDC to do the right thing for all
options except const; you must also #define const.)

jcmain and jdmain are set up to provide the usual command-line interface
by means of Think's ccommand() library routine.  A more Mac-like interface
is in the works.


MS-DOS, generic comments:

The JPEG code is designed to be compiled with 80x86 "small" or "medium" memory
models (i.e., data pointers are 16 bits unless explicitly declared "far"; code
pointers can be either size).  You should be able to use small model to
compile cjpeg or djpeg by itself, but you will probably have to go to medium
model if you include the JPEG code in a larger application.  This shouldn't
hurt performance much.  You *will* take a noticeable performance hit if you
compile in a large-data memory model, and you should avoid "huge" model if at
all possible.  Be sure that NEED_FAR_POINTERS is defined by jconfig.h or by
the Makefile if you use a small-data model; be sure it is NOT defined if you
use a large-data memory model.  (As distributed, jconfig.h defines
NEED_FAR_POINTERS if MSDOS is defined.)

The DOS-specific memory manager, jmemdos.c, should be used if possible.
(Be sure to install jmemdos.h and jmemdosa.asm along with it.)  If you
can't use jmemdos.c for some reason --- for example, because you don't have
a Microsoft-compatible assembler to assemble jmemdosa.asm --- you'll have
to fall back to jmemansi.c or jmemname.c.  IMPORTANT: if you use either of
the latter two files, you will have to compile in a large-data memory model
in order to get the right stdio library.  Too bad.

None of the above advice applies if you are using a 386 flat-memory-space
environment, such as DJGPP or Watcom C.  (And you should use one if you have
it, as performance will be much better than 8086-compatible code!)  For
flat-memory-space compilers, do NOT define NEED_FAR_POINTERS, and do NOT use
jmemdos.c.  Use jmemnobs.c if the environment supplies adequate virtual
memory, otherwise use jmemansi.c or jmemname.c.

Most MS-DOS compilers treat stdin/stdout as text files, so you must use
two-file command line style.  But if your compiler has the setmode() library
routine, you can define USE_SETMODE to get one-file style.  (Don't forget to
change the "make test" script in the Makefile if you do so.)

If you add more switches to CFLAGS in the DOS-specific makefiles, you are
likely to run up against DOS' 128-byte command line length limit.  In that
case, remove some "-Dsymbol" switches from CFLAGS and instead put
corresponding "#define symbol" lines at the head of jinclude.h.


MS-DOS, Borland C:

Be sure to convert all the source files to DOS text format (CR/LF newlines).
Although Borland C will often work OK with unmodified Unix (LF newlines)
source files, sometimes it will give bogus compile errors.
"Illegal character '#'" is the most common such error.

Some versions of Borland's MAKE erroneously display the warning message about
creating jmemsys.c, even after you have done so.  If this happens to you,
delete the four lines beginning with "jmemsys.c:" from the Makefile.


MS-DOS, DJGPP:

Use makefile.ansi and jmemnobs.c, and put "-UMSDOS" in CFLAGS to undo the
compiler's automatic definition of MSDOS.  Also put either "-DUSE_SETMODE" or
"-DTWO_FILE_COMMANDLINE" in CFLAGS, depending on whether you prefer one-file
or two-file command line style.  (If you choose two-file style, change the
"make test" section of the Makefile accordingly.)  You'll also need to put the
object-file lists into response files in order to circumvent DOS's 128-byte
command line length limit at the final linking step.


MS-DOS, Microsoft C:

Old versions of MS C fail with an "out of macro expansion space" error
because they can't cope with the macro TRACEMS8 (defined in jpegdata.h).
If this happens to you, the easiest solution is to change TRACEMS8 to
expand to nothing.  You'll lose the ability to dump out JPEG coefficient
tables with djpeg -debug -debug, but at least you can compile.

Original MS C 6.0 is buggy; it compiles incorrect code unless you turn off
optimization (remove -O from CFLAGS).  That problem seems to have been fixed
in 6.00A and later versions.  6.00A still generates a bogus "conditional
expression is constant" warning in jrdppm.c, but the emitted code seems OK.


SGI:

Use makefile.ansi, but set "AR2= ar -ts" rather than "AR2= ranlib".  Also
make any changes recommended by ckconfig.c.


Sun:

Don't forget to add -DBSD to CFLAGS.  If you are using GCC on SunOS 4.0.1 or
earlier, you will need to add -DNONANSI_INCLUDES to CFLAGS (your compiler may
be ANSI, but your system include files aren't).  I've gotten conflicting
reports on whether this is still necessary on SunOS 4.1 or later.
