xref: /libtiff-4.0.7/SConstruct (revision ef833c65)
1*ef833c65SAndrey Kiselev# $Id: SConstruct,v 1.4 2007-02-24 15:03:47 dron Exp $
2c0719189SAndrey Kiselev
3c0719189SAndrey Kiselev# Tag Image File Format (TIFF) Software
4c0719189SAndrey Kiselev#
5b90b47e6SAndrey Kiselev# Copyright (C) 2005, Andrey Kiselev <[email protected]>
6c0719189SAndrey Kiselev#
7c0719189SAndrey Kiselev# Permission to use, copy, modify, distribute, and sell this software and
8c0719189SAndrey Kiselev# its documentation for any purpose is hereby granted without fee, provided
9c0719189SAndrey Kiselev# that (i) the above copyright notices and this permission notice appear in
10c0719189SAndrey Kiselev# all copies of the software and related documentation, and (ii) the names of
11c0719189SAndrey Kiselev# Sam Leffler and Silicon Graphics may not be used in any advertising or
12c0719189SAndrey Kiselev# publicity relating to the software without the specific, prior written
13c0719189SAndrey Kiselev# permission of Sam Leffler and Silicon Graphics.
14c0719189SAndrey Kiselev#
15c0719189SAndrey Kiselev# THE SOFTWARE IS PROVIDED "AS-IS" AND WITHOUT WARRANTY OF ANY KIND,
16c0719189SAndrey Kiselev# EXPRESS, IMPLIED OR OTHERWISE, INCLUDING WITHOUT LIMITATION, ANY
17c0719189SAndrey Kiselev# WARRANTY OF MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE.
18c0719189SAndrey Kiselev#
19c0719189SAndrey Kiselev# IN NO EVENT SHALL SAM LEFFLER OR SILICON GRAPHICS BE LIABLE FOR
20c0719189SAndrey Kiselev# ANY SPECIAL, INCIDENTAL, INDIRECT OR CONSEQUENTIAL DAMAGES OF ANY KIND,
21c0719189SAndrey Kiselev# OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
22c0719189SAndrey Kiselev# WHETHER OR NOT ADVISED OF THE POSSIBILITY OF DAMAGE, AND ON ANY THEORY OF
23c0719189SAndrey Kiselev# LIABILITY, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
24c0719189SAndrey Kiselev# OF THIS SOFTWARE.
25c0719189SAndrey Kiselev
26c0719189SAndrey Kiselev# This file contains rules to build software with the SCons tool
27c0719189SAndrey Kiselev# (see the http://www.scons.org/ for details on SCons).
28c0719189SAndrey Kiselev
29c0719189SAndrey Kiselevimport os
30c0719189SAndrey Kiselev
31c0719189SAndrey Kiselevenv = Environment()
32c0719189SAndrey Kiselev
33c0719189SAndrey Kiselev# Read the user supplied options
34c0719189SAndrey Kiselevopts = Options('libtiff.conf')
35c0719189SAndrey Kiselevopts.Add(PathOption('PREFIX', \
36c0719189SAndrey Kiselev    'install architecture-independent files in this directory', \
37c0719189SAndrey Kiselev    '/usr/local', PathOption.PathIsDirCreate))
38c0719189SAndrey Kiselevopts.Add(BoolOption('ccitt', \
39c0719189SAndrey Kiselev    'enable support for CCITT Group 3 & 4 algorithms', \
40c0719189SAndrey Kiselev    'yes'))
41c0719189SAndrey Kiselevopts.Add(BoolOption('packbits', \
42c0719189SAndrey Kiselev    'enable support for Macintosh PackBits algorithm', \
43c0719189SAndrey Kiselev    'yes'))
44c0719189SAndrey Kiselevopts.Add(BoolOption('lzw', \
45c0719189SAndrey Kiselev    'enable support for LZW algorithm', \
46c0719189SAndrey Kiselev    'yes'))
47c0719189SAndrey Kiselevopts.Add(BoolOption('thunder', \
48c0719189SAndrey Kiselev    'enable support for ThunderScan 4-bit RLE algorithm', \
49c0719189SAndrey Kiselev    'yes'))
50c0719189SAndrey Kiselevopts.Add(BoolOption('next', \
51c0719189SAndrey Kiselev    'enable support for NeXT 2-bit RLE algorithm', \
52c0719189SAndrey Kiselev    'yes'))
53c0719189SAndrey Kiselevopts.Add(BoolOption('logluv', \
54c0719189SAndrey Kiselev    'enable support for LogLuv high dynamic range encoding', \
55c0719189SAndrey Kiselev    'yes'))
56c0719189SAndrey Kiselevopts.Add(BoolOption('strip_chopping', \
57c0719189SAndrey Kiselev    'support for strip chopping (whether or not to convert single-strip uncompressed images to mutiple strips of ~8Kb to reduce memory usage)', \
58c0719189SAndrey Kiselev    'yes'))
59c0719189SAndrey Kiselevopts.Add(BoolOption('extrasample_as_alpha', \
60c0719189SAndrey Kiselev    'the RGBA interface will treat a fourth sample with no EXTRASAMPLE_ value as being ASSOCALPHA. Many packages produce RGBA files but don\'t mark the alpha properly', \
61c0719189SAndrey Kiselev    'yes'))
62c0719189SAndrey Kiselevopts.Add(BoolOption('check_ycbcr_subsampling', \
63c0719189SAndrey Kiselev    'disable picking up YCbCr subsampling info from the JPEG data stream to support files lacking the tag', \
64c0719189SAndrey Kiselev    'yes'))
65c0719189SAndrey Kiselevopts.Update(env)
66c0719189SAndrey Kiselevopts.Save('libtiff.conf', env)
67c0719189SAndrey KiselevHelp(opts.GenerateHelpText(env))
68c0719189SAndrey Kiselev
69c0719189SAndrey Kiselev# Here are our installation paths:
70c0719189SAndrey Kiselevidir_prefix = '$PREFIX'
71c0719189SAndrey Kiselevidir_lib = '$PREFIX/lib'
72c0719189SAndrey Kiselevidir_bin = '$PREFIX/bin'
73c0719189SAndrey Kiselevidir_inc = '$PREFIX/include'
74c0719189SAndrey Kiselevidir_doc = '$PREFIX/doc'
75c0719189SAndrey KiselevExport([ 'env', 'idir_prefix', 'idir_lib', 'idir_bin', 'idir_inc', 'idir_doc' ])
76c0719189SAndrey Kiselev
77c0719189SAndrey Kiselev# Now proceed to system feature checks
78c0719189SAndrey Kiselevtarget_cpu, target_vendor, target_kernel, target_os = \
79*ef833c65SAndrey Kiselev    os.popen("./config/config.guess").readlines()[0].split("-")
80c0719189SAndrey Kiselev
81c0719189SAndrey Kiselevdef Define(context, key, have):
82c0719189SAndrey Kiselev    import SCons.Conftest
83c0719189SAndrey Kiselev    SCons.Conftest._Have(context, key, have)
84c0719189SAndrey Kiselev
85c0719189SAndrey Kiselevdef CheckCustomOption(context, name):
86c0719189SAndrey Kiselev    context.Message('Checking is the ' + name + ' option set... ')
87c0719189SAndrey Kiselev    ret = env[name]
88c0719189SAndrey Kiselev    Define(context, name + '_SUPPORT', ret)
89c0719189SAndrey Kiselev    context.Result(ret)
90c0719189SAndrey Kiselev    return ret
91c0719189SAndrey Kiselev
92c0719189SAndrey Kiselevdef CheckFillorderOption(context):
93c0719189SAndrey Kiselev    context.Message('Checking for the native cpu bit order... ')
94c0719189SAndrey Kiselev    if target_cpu[0] == 'i' and target_cpu[2:] == '86':
95c0719189SAndrey Kiselev	Define(context, 'HOST_FILLORDER', 'FILLORDER_LSB2MSB')
96c0719189SAndrey Kiselev	context.Result('lsb2msb')
97c0719189SAndrey Kiselev    else:
98c0719189SAndrey Kiselev	Define(context, 'HOST_FILLORDER', 'FILLORDER_MSB2LSB')
99c0719189SAndrey Kiselev	context.Result('msb2lsb')
100c0719189SAndrey Kiselev    return 1
101c0719189SAndrey Kiselev
102c0719189SAndrey Kiselevdef CheckIEEEFPOption(context):
103c0719189SAndrey Kiselev    context.Message('Checking for the IEEE floating point format... ')
104c0719189SAndrey Kiselev    Define(context, 'HAVE_IEEEFP', 1)
105c0719189SAndrey Kiselev    context.Result(1)
106c0719189SAndrey Kiselev    return 1
107c0719189SAndrey Kiselev
108c0719189SAndrey Kiselevdef CheckOtherOption(context, name):
109c0719189SAndrey Kiselev    context.Message('Checking is the ' + name + ' option set... ')
110c0719189SAndrey Kiselev    ret = env[name]
111c0719189SAndrey Kiselev    Define(context, 'HAVE_' + name, ret)
112c0719189SAndrey Kiselev    context.Result(ret)
113c0719189SAndrey Kiselev    return ret
114c0719189SAndrey Kiselev
115c0719189SAndrey Kiselevcustom_tests = { \
116c0719189SAndrey Kiselev    'CheckCustomOption' : CheckCustomOption, \
117c0719189SAndrey Kiselev    'CheckFillorderOption' : CheckFillorderOption, \
118c0719189SAndrey Kiselev    'CheckIEEEFPOption' : CheckIEEEFPOption, \
119c0719189SAndrey Kiselev    'CheckOtherOption' : CheckOtherOption \
120c0719189SAndrey Kiselev    }
121c0719189SAndrey Kiselevconf = Configure(env, custom_tests = custom_tests, \
122c0719189SAndrey Kiselev    config_h = 'libtiff/tif_config.h')
123c0719189SAndrey Kiselev
124c0719189SAndrey Kiselev# Check for standard library
125c0719189SAndrey Kiselevconf.CheckLib('c')
126c0719189SAndrey Kiselevif target_os != 'cygwin' \
127c0719189SAndrey Kiselev    and target_os != 'mingw32' \
128c0719189SAndrey Kiselev    and target_os != 'beos' \
129c0719189SAndrey Kiselev    and target_os != 'darwin':
130c0719189SAndrey Kiselev    conf.CheckLib('m')
131c0719189SAndrey Kiselev
132c0719189SAndrey Kiselev# Check for system headers
133c0719189SAndrey Kiselevconf.CheckCHeader('assert.h')
134c0719189SAndrey Kiselevconf.CheckCHeader('fcntl.h')
13555bd0128SAndrey Kiselevconf.CheckCHeader('io.h')
136c0719189SAndrey Kiselevconf.CheckCHeader('limits.h')
137c0719189SAndrey Kiselevconf.CheckCHeader('malloc.h')
138c0719189SAndrey Kiselevconf.CheckCHeader('search.h')
139c0719189SAndrey Kiselevconf.CheckCHeader('sys/time.h')
140c0719189SAndrey Kiselevconf.CheckCHeader('unistd.h')
141c0719189SAndrey Kiselev
142c0719189SAndrey Kiselev# Check for standard library functions
143c0719189SAndrey Kiselevconf.CheckFunc('floor')
144c0719189SAndrey Kiselevconf.CheckFunc('isascii')
145c0719189SAndrey Kiselevconf.CheckFunc('memmove')
146c0719189SAndrey Kiselevconf.CheckFunc('memset')
147c0719189SAndrey Kiselevconf.CheckFunc('mmap')
148c0719189SAndrey Kiselevconf.CheckFunc('pow')
14955bd0128SAndrey Kiselevconf.CheckFunc('setmode')
150c0719189SAndrey Kiselevconf.CheckFunc('sqrt')
151c0719189SAndrey Kiselevconf.CheckFunc('strchr')
152c0719189SAndrey Kiselevconf.CheckFunc('strrchr')
153c0719189SAndrey Kiselevconf.CheckFunc('strstr')
154c0719189SAndrey Kiselevconf.CheckFunc('strtol')
155c0719189SAndrey Kiselev
156c0719189SAndrey Kiselevconf.CheckFillorderOption()
157c0719189SAndrey Kiselevconf.CheckIEEEFPOption()
158c0719189SAndrey Kiselevconf.CheckCustomOption('ccitt')
159c0719189SAndrey Kiselevconf.CheckCustomOption('packbits')
160c0719189SAndrey Kiselevconf.CheckCustomOption('lzw')
161c0719189SAndrey Kiselevconf.CheckCustomOption('thunder')
162c0719189SAndrey Kiselevconf.CheckCustomOption('next')
163c0719189SAndrey Kiselevconf.CheckCustomOption('logluv')
164c0719189SAndrey Kiselevconf.CheckOtherOption('strip_chopping')
165c0719189SAndrey Kiselevconf.CheckOtherOption('extrasample_as_alpha')
166c0719189SAndrey Kiselevconf.CheckOtherOption('check_ycbcr_subsampling')
167c0719189SAndrey Kiselev
168c0719189SAndrey Kiselevenv = conf.Finish()
169c0719189SAndrey Kiselev
170c0719189SAndrey Kiselev# Ok, now go to build files in the subdirectories
171c0719189SAndrey KiselevSConscript(dirs = [ 'libtiff' ], name = 'SConstruct')
172