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