Configuration options in libmng
===============================

The library is fairly configurable through the use of a number of defines.
Please note however that certain defines are for internal use only.
The following list gives a summary of options that can be used externally to
define the functionality of the library:

========================================

#define MNG_BUILD_DLL

This is used to indicate that a "standard" DLL should result from compiling
the library. Please note the remarks in README.dll if you intend to work
with the library as a DLL. The purpose of this option is to ensure that
DLL builds have the same set of functions.

#define MNG_BUILD_SO

This is used to indicate that a "standard" shared library (SO) should result
from a compilation. The purpose of this option is to ensure that all
shared libraries generated this way will have the same set of functions.

#define MNG_USE_DLL / #define MNG_USE_SO

These should be used when including the library header in the compilation
of an application to indicate that the compiler/linker must take the
necessary steps to make the binary executable to use the standard DLL
or shared library (SO).

#define MNG_SKIP_ZLIB / #define MNG_SKIP_LCMS / #define MNG_SKIP_IJG6B

Use these in conjunction with MNG_USE_DLL / MNG_USE_SO. This is useful if
you only need the external definitions of the MNG library and not the others,
which will speed up the compilation process.

#define MNG_SUPPORT_FULL / #define MNG_SUPPORT_LC / #define MNG_SUPPORT_VLC

These can be used to indicate the level of MNG spec compliance required.
Currently only full MNG compliance is supported.

#define MNG_SUPPORT_IJG6B

This can be used to indicate if JNG support is required. This option will
include the IJG JPEG-library. Note that MNG_SUPPORT_FULL will automatically
set this option. Use this only if you need JNG support with MNG-(V)LC.

#define MNG_FULL_CMS / #define MNG_GAMMA_ONLY / #define MNG_NO_CMS /
#define MNG_APP_CMS

These indicate the color-correction support level of the library.
If you are on a platform that supports lcms (Little CMS by Marti Maria Saguar)
then it is highly recommended to define MNG_FULL_CMS.
If your platform has it's own CMS then select MNG_APP_CMS and be sure to
include the appropriate callbacks in your app.
In all other cases it is recommended to define MNG_GAMMA_ONLY.

#define MNG_SUPPORT_READ / #define MNG_SUPPORT_WRITE /
#define MNG_SUPPORT_DISPLAY

These indicate the high-level support for reading, writing and/or
displaying files. Note that in order to display a file, you'll need to read
it first. (yes, really!)

#define MNG_STORE_CHUNKS

This indicates that the library should store chunk-information when reading
a file. This information can then be processed through the
MNG_ITERATE_CHUNKS() function. Note that you must specify this option if
you want to create and write a new file.

#define MNG_ACCESS_CHUNKS

This is used to indicate that the app may need access to internally stored
chunk information. MNG_STORE_CHUNKS must be defined as well for this option
to function properly.

#define MNG_INTERNAL_MEMMNGMT

You can use this to have the library handle it's own memory allocation and
deallocation through the "standard" memory functions. This option is turned
off by default, which means your app must define the memory callbacks.

#define MNG_ERROR_TELLTALE

Set this on to allow human-readable error-messages to be included in the
library and the error function and callback.

#define MNG_BIGENDIAN_SUPPORTED

This option should be used to indicate the hardware is based on big endian
integers.

#define MNG_SUPPORT_TRACE / #define MNG_TRACE_TELLTALE

These two can be used when debugging an app. You'll need to have the trace
callback setup also. This allows for a rather thorough investigation of the
libraries function paths.

========================================

Any other optional defines you may encounter are for internal use only.
please do not specify them externally. In case of doubt, consult the
support email lists. More info can be found on http://www.libmng.com
