1253893Speter# -*- python -*- 2253893Speter# 3362181Sdim# ==================================================================== 4362181Sdim# Licensed to the Apache Software Foundation (ASF) under one 5362181Sdim# or more contributor license agreements. See the NOTICE file 6362181Sdim# distributed with this work for additional information 7362181Sdim# regarding copyright ownership. The ASF licenses this file 8362181Sdim# to you under the Apache License, Version 2.0 (the 9362181Sdim# "License"); you may not use this file except in compliance 10362181Sdim# with the License. You may obtain a copy of the License at 11362181Sdim# 12362181Sdim# http://www.apache.org/licenses/LICENSE-2.0 13362181Sdim# 14362181Sdim# Unless required by applicable law or agreed to in writing, 15362181Sdim# software distributed under the License is distributed on an 16362181Sdim# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 17362181Sdim# KIND, either express or implied. See the License for the 18362181Sdim# specific language governing permissions and limitations 19362181Sdim# under the License. 20362181Sdim# ==================================================================== 21253893Speter# 22253893Speter 23253893Speterimport sys 24253893Speterimport os 25253893Speterimport re 26253893Speter 27262324SpeterEnsureSConsVersion(2,3,0) 28262324Speter 29253893SpeterHEADER_FILES = ['serf.h', 30253893Speter 'serf_bucket_types.h', 31253893Speter 'serf_bucket_util.h', 32253893Speter ] 33253893Speter 34253893Speter# where we save the configuration variables 35253893SpeterSAVED_CONFIG = '.saved_config' 36253893Speter 37253893Speter# Variable class that does no validation on the input 38253893Speterdef _converter(val): 39253893Speter """ 40253893Speter """ 41253893Speter if val == 'none': 42253893Speter val = [] 43253893Speter else: 44262324Speter val = val.split(' ') 45253893Speter return val 46253893Speter 47253893Speterdef RawListVariable(key, help, default): 48253893Speter """ 49253893Speter The input parameters describe a 'raw string list' option. This class 50262324Speter accepts a space-separated string and converts it to a list. 51253893Speter """ 52253893Speter return (key, '%s' % (help), default, None, lambda val: _converter(val)) 53253893Speter 54262324Speter# Custom path validator, creates directory when a specified option is set. 55262324Speter# To be used to ensure a PREFIX directory is only created when installing. 56262324Speterdef createPathIsDirCreateWithTarget(target): 57262324Speter def my_validator(key, val, env): 58262324Speter build_targets = (map(str, BUILD_TARGETS)) 59262324Speter if target in build_targets: 60262324Speter return PathVariable.PathIsDirCreate(key, val, env) 61262324Speter else: 62262324Speter return PathVariable.PathAccept(key, val, env) 63262324Speter return my_validator 64262324Speter 65253893Speter# default directories 66253893Speterif sys.platform == 'win32': 67262324Speter default_incdir='..' 68253893Speter default_libdir='..' 69253893Speter default_prefix='Debug' 70253893Speterelse: 71262324Speter default_incdir='/usr' 72262324Speter default_libdir='$PREFIX/lib' 73253893Speter default_prefix='/usr/local' 74253893Speter 75253893Speteropts = Variables(files=[SAVED_CONFIG]) 76253893Speteropts.AddVariables( 77253893Speter PathVariable('PREFIX', 78253893Speter 'Directory to install under', 79253893Speter default_prefix, 80262324Speter createPathIsDirCreateWithTarget('install')), 81262324Speter PathVariable('LIBDIR', 82262324Speter 'Directory to install architecture dependent libraries under', 83262324Speter default_libdir, 84262324Speter createPathIsDirCreateWithTarget('install')), 85253893Speter PathVariable('APR', 86253893Speter "Path to apr-1-config, or to APR's install area", 87262324Speter default_incdir, 88253893Speter PathVariable.PathAccept), 89253893Speter PathVariable('APU', 90253893Speter "Path to apu-1-config, or to APR's install area", 91262324Speter default_incdir, 92253893Speter PathVariable.PathAccept), 93253893Speter PathVariable('OPENSSL', 94253893Speter "Path to OpenSSL's install area", 95262324Speter default_incdir, 96253893Speter PathVariable.PathIsDir), 97253893Speter PathVariable('ZLIB', 98253893Speter "Path to zlib's install area", 99262324Speter default_incdir, 100253893Speter PathVariable.PathIsDir), 101253893Speter PathVariable('GSSAPI', 102253893Speter "Path to GSSAPI's install area", 103253893Speter None, 104253893Speter None), 105253893Speter BoolVariable('DEBUG', 106253893Speter "Enable debugging info and strict compile warnings", 107253893Speter False), 108253893Speter BoolVariable('APR_STATIC', 109253893Speter "Enable using a static compiled APR", 110253893Speter False), 111253893Speter RawListVariable('CC', "Command name or path of the C compiler", None), 112262324Speter RawListVariable('CFLAGS', "Extra flags for the C compiler (space-separated)", 113253893Speter None), 114253893Speter RawListVariable('LIBS', "Extra libraries passed to the linker, " 115262324Speter "e.g. \"-l<library1> -l<library2>\" (space separated)", None), 116262324Speter RawListVariable('LINKFLAGS', "Extra flags for the linker (space-separated)", 117253893Speter None), 118253893Speter RawListVariable('CPPFLAGS', "Extra flags for the C preprocessor " 119262324Speter "(space separated)", None), 120253893Speter ) 121253893Speter 122253893Speterif sys.platform == 'win32': 123253893Speter opts.AddVariables( 124253893Speter # By default SCons builds for the host platform on Windows, when using 125253893Speter # a supported compiler (E.g. VS2010/VS2012). Allow overriding 126253893Speter 127253893Speter # Note that Scons 1.3 only supports this on Windows and only when 128253893Speter # constructing Environment(). Later changes to TARGET_ARCH are ignored 129253893Speter EnumVariable('TARGET_ARCH', 130253893Speter "Platform to build for (x86|x64|win32|x86_64)", 131253893Speter 'x86', 132253893Speter allowed_values=('x86', 'x86_64', 'ia64'), 133253893Speter map={'X86' : 'x86', 134253893Speter 'win32': 'x86', 135253893Speter 'Win32': 'x86', 136253893Speter 'x64' : 'x86_64', 137253893Speter 'X64' : 'x86_64' 138253893Speter }), 139253893Speter 140253893Speter EnumVariable('MSVC_VERSION', 141253893Speter "Visual C++ to use for building (E.g. 11.0, 9.0)", 142253893Speter None, 143362181Sdim allowed_values=('14.0', '12.0', 144362181Sdim '11.0', '10.0', '9.0', '8.0', '6.0') 145253893Speter ), 146253893Speter 147253893Speter # We always documented that we handle an install layout, but in fact we 148253893Speter # hardcoded source layouts. Allow disabling this behavior. 149253893Speter # ### Fix default? 150253893Speter BoolVariable('SOURCE_LAYOUT', 151253893Speter "Assume a source layout instead of install layout", 152253893Speter True), 153253893Speter ) 154253893Speter 155253893Speterenv = Environment(variables=opts, 156253893Speter tools=('default', 'textfile',), 157253893Speter CPPPATH=['.', ], 158253893Speter ) 159253893Speter 160253893Speterenv.Append(BUILDERS = { 161253893Speter 'GenDef' : 162253893Speter Builder(action = sys.executable + ' build/gen_def.py $SOURCES > $TARGET', 163253893Speter suffix='.def', src_suffix='.h') 164253893Speter }) 165253893Speter 166253893Spetermatch = re.search('SERF_MAJOR_VERSION ([0-9]+).*' 167253893Speter 'SERF_MINOR_VERSION ([0-9]+).*' 168253893Speter 'SERF_PATCH_VERSION ([0-9]+)', 169253893Speter env.File('serf.h').get_contents(), 170253893Speter re.DOTALL) 171253893SpeterMAJOR, MINOR, PATCH = [int(x) for x in match.groups()] 172253893Speterenv.Append(MAJOR=str(MAJOR)) 173262324Speterenv.Append(MINOR=str(MINOR)) 174262324Speterenv.Append(PATCH=str(PATCH)) 175253893Speter 176253893Speter# Calling external programs is okay if we're not cleaning or printing help. 177253893Speter# (cleaning: no sense in fetching information; help: we may not know where 178253893Speter# they are) 179253893SpeterCALLOUT_OKAY = not (env.GetOption('clean') or env.GetOption('help')) 180253893Speter 181253893Speter 182253893Speter# HANDLING OF OPTION VARIABLES 183253893Speter 184253893Speterunknown = opts.UnknownVariables() 185253893Speterif unknown: 186362181Sdim print 'Warning: Used unknown variables:', ', '.join(unknown.keys()) 187253893Speter 188253893Speterapr = str(env['APR']) 189253893Speterapu = str(env['APU']) 190253893Speterzlib = str(env['ZLIB']) 191253893Spetergssapi = env.get('GSSAPI', None) 192253893Speter 193253893Speterif gssapi and os.path.isdir(gssapi): 194253893Speter krb5_config = os.path.join(gssapi, 'bin', 'krb5-config') 195253893Speter if os.path.isfile(krb5_config): 196253893Speter gssapi = krb5_config 197253893Speter env['GSSAPI'] = krb5_config 198253893Speter 199253893Speterdebug = env.get('DEBUG', None) 200253893Speteraprstatic = env.get('APR_STATIC', None) 201253893Speter 202253893SpeterHelp(opts.GenerateHelpText(env)) 203253893Speteropts.Save(SAVED_CONFIG, env) 204253893Speter 205253893Speter 206253893Speter# PLATFORM-SPECIFIC BUILD TWEAKS 207253893Speter 208253893Speterthisdir = os.getcwd() 209262324Speterlibdir = '$LIBDIR' 210253893Speterincdir = '$PREFIX/include/serf-$MAJOR' 211253893Speter 212262324Speter# This version string is used in the dynamic library name, and for Mac OS X also 213262324Speter# for the current_version and compatibility_version options in the .dylib 214262324Speter# 215262324Speter# Unfortunately we can't set the .dylib compatibility_version option separately 216262324Speter# from current_version, so don't use the PATCH level to avoid that build and 217262324Speter# runtime patch levels have to be identical. 218362181Sdimif sys.platform != 'sunos5': 219362181Sdim env['SHLIBVERSION'] = '%d.%d.%d' % (MAJOR, MINOR, 0) 220262324Speter 221262324SpeterLIBNAME = 'libserf-%d' % (MAJOR,) 222253893Speterif sys.platform != 'win32': 223253893Speter LIBNAMESTATIC = LIBNAME 224253893Speterelse: 225253893Speter LIBNAMESTATIC = 'serf-${MAJOR}' 226253893Speter 227253893Speterenv.Append(RPATH=libdir, 228253893Speter PDB='${TARGET.filebase}.pdb') 229253893Speter 230253893Speterif sys.platform == 'darwin': 231253893Speter# linkflags.append('-Wl,-install_name,@executable_path/%s.dylib' % (LIBNAME,)) 232362181Sdim env.Append(LINKFLAGS=['-Wl,-install_name,%s/%s.dylib' % (thisdir, LIBNAME,)]) 233253893Speter 234253893Speterif sys.platform != 'win32': 235362181Sdim def CheckGnuCC(context): 236362181Sdim src = ''' 237362181Sdim #ifndef __GNUC__ 238362181Sdim oh noes! 239362181Sdim #endif 240362181Sdim ''' 241362181Sdim context.Message('Checking for GNU-compatible C compiler...') 242362181Sdim result = context.TryCompile(src, '.c') 243362181Sdim context.Result(result) 244362181Sdim return result 245253893Speter 246362181Sdim conf = Configure(env, custom_tests = dict(CheckGnuCC=CheckGnuCC)) 247362181Sdim have_gcc = conf.CheckGnuCC() 248362181Sdim env = conf.Finish() 249362181Sdim 250362181Sdim if have_gcc: 251362181Sdim env.Append(CFLAGS=['-std=c89']) 252262324Speter env.Append(CCFLAGS=['-Wdeclaration-after-statement', 253262324Speter '-Wmissing-prototypes', 254262324Speter '-Wall']) 255253893Speter 256253893Speter if debug: 257362181Sdim env.Append(CCFLAGS=['-g']) 258253893Speter env.Append(CPPDEFINES=['DEBUG', '_DEBUG']) 259253893Speter else: 260362181Sdim env.Append(CCFLAGS=['-O2']) 261362181Sdim env.Append(CPPDEFINES=['NDEBUG']) 262253893Speter 263253893Speter ### works for Mac OS. probably needs to change 264253893Speter env.Append(LIBS=['ssl', 'crypto', 'z', ]) 265253893Speter 266253893Speter if sys.platform == 'sunos5': 267362181Sdim env.Append(LIBS=['m']) 268362181Sdim env.Append(PLATFORM='posix') 269253893Speterelse: 270253893Speter # Warning level 4, no unused argument warnings 271253893Speter env.Append(CCFLAGS=['/W4', '/wd4100']) 272253893Speter 273253893Speter # Choose runtime and optimization 274253893Speter if debug: 275253893Speter # Disable optimizations for debugging, use debug DLL runtime 276253893Speter env.Append(CCFLAGS=['/Od', '/MDd']) 277253893Speter env.Append(CPPDEFINES=['DEBUG', '_DEBUG']) 278253893Speter else: 279253893Speter # Optimize for speed, use DLL runtime 280253893Speter env.Append(CCFLAGS=['/O2', '/MD']) 281362181Sdim env.Append(CPPDEFINES=['NDEBUG']) 282362181Sdim env.Append(LINKFLAGS=['/RELEASE']) 283253893Speter 284253893Speter# PLAN THE BUILD 285253893SpeterSHARED_SOURCES = [] 286253893Speterif sys.platform == 'win32': 287253893Speter env.GenDef(['serf.h','serf_bucket_types.h', 'serf_bucket_util.h']) 288253893Speter SHARED_SOURCES.append(['serf.def']) 289253893Speter 290253893SpeterSOURCES = Glob('*.c') + Glob('buckets/*.c') + Glob('auth/*.c') 291253893Speter 292253893Speterlib_static = env.StaticLibrary(LIBNAMESTATIC, SOURCES) 293253893Speterlib_shared = env.SharedLibrary(LIBNAME, SOURCES + SHARED_SOURCES) 294253893Speter 295253893Speterif aprstatic: 296253893Speter env.Append(CPPDEFINES=['APR_DECLARE_STATIC', 'APU_DECLARE_STATIC']) 297253893Speter 298253893Speterif sys.platform == 'win32': 299253893Speter env.Append(LIBS=['user32.lib', 'advapi32.lib', 'gdi32.lib', 'ws2_32.lib', 300253893Speter 'crypt32.lib', 'mswsock.lib', 'rpcrt4.lib', 'secur32.lib']) 301253893Speter 302253893Speter # Get apr/apu information into our build 303253893Speter env.Append(CPPDEFINES=['WIN32','WIN32_LEAN_AND_MEAN','NOUSER', 304253893Speter 'NOGDI', 'NONLS','NOCRYPT']) 305253893Speter 306253893Speter if env.get('TARGET_ARCH', None) == 'x86_64': 307253893Speter env.Append(CPPDEFINES=['WIN64']) 308253893Speter 309253893Speter if aprstatic: 310253893Speter apr_libs='apr-1.lib' 311253893Speter apu_libs='aprutil-1.lib' 312362181Sdim env.Append(LIBS=['shell32.lib', 'xml.lib']) 313253893Speter else: 314253893Speter apr_libs='libapr-1.lib' 315253893Speter apu_libs='libaprutil-1.lib' 316253893Speter 317253893Speter env.Append(LIBS=[apr_libs, apu_libs]) 318253893Speter if not env.get('SOURCE_LAYOUT', None): 319253893Speter env.Append(LIBPATH=['$APR/lib', '$APU/lib'], 320253893Speter CPPPATH=['$APR/include/apr-1', '$APU/include/apr-1']) 321253893Speter elif aprstatic: 322253893Speter env.Append(LIBPATH=['$APR/LibR','$APU/LibR'], 323253893Speter CPPPATH=['$APR/include', '$APU/include']) 324253893Speter else: 325253893Speter env.Append(LIBPATH=['$APR/Release','$APU/Release'], 326253893Speter CPPPATH=['$APR/include', '$APU/include']) 327253893Speter 328253893Speter # zlib 329362181Sdim env.Append(LIBS=['zlib.lib']) 330253893Speter if not env.get('SOURCE_LAYOUT', None): 331362181Sdim env.Append(CPPPATH=['$ZLIB/include'], 332362181Sdim LIBPATH=['$ZLIB/lib']) 333253893Speter else: 334362181Sdim env.Append(CPPPATH=['$ZLIB'], 335362181Sdim LIBPATH=['$ZLIB']) 336253893Speter 337253893Speter # openssl 338253893Speter env.Append(LIBS=['libeay32.lib', 'ssleay32.lib']) 339253893Speter if not env.get('SOURCE_LAYOUT', None): 340362181Sdim env.Append(CPPPATH=['$OPENSSL/include/openssl'], 341362181Sdim LIBPATH=['$OPENSSL/lib']) 342253893Speter elif 0: # opensslstatic: 343362181Sdim env.Append(CPPPATH=['$OPENSSL/inc32'], 344362181Sdim LIBPATH=['$OPENSSL/out32']) 345253893Speter else: 346362181Sdim env.Append(CPPPATH=['$OPENSSL/inc32'], 347362181Sdim LIBPATH=['$OPENSSL/out32dll']) 348253893Speterelse: 349253893Speter if os.path.isdir(apr): 350253893Speter apr = os.path.join(apr, 'bin', 'apr-1-config') 351253893Speter env['APR'] = apr 352253893Speter if os.path.isdir(apu): 353253893Speter apu = os.path.join(apu, 'bin', 'apu-1-config') 354253893Speter env['APU'] = apu 355253893Speter 356253893Speter ### we should use --cc, but that is giving some scons error about an implict 357253893Speter ### dependency upon gcc. probably ParseConfig doesn't know what to do with 358253893Speter ### the apr-1-config output 359253893Speter if CALLOUT_OKAY: 360253893Speter env.ParseConfig('$APR --cflags --cppflags --ldflags --includes' 361253893Speter ' --link-ld --libs') 362253893Speter env.ParseConfig('$APU --ldflags --includes --link-ld --libs') 363253893Speter 364253893Speter ### there is probably a better way to run/capture output. 365253893Speter ### env.ParseConfig() may be handy for getting this stuff into the build 366253893Speter if CALLOUT_OKAY: 367253893Speter apr_libs = os.popen(env.subst('$APR --link-libtool --libs')).read().strip() 368253893Speter apu_libs = os.popen(env.subst('$APU --link-libtool --libs')).read().strip() 369253893Speter else: 370253893Speter apr_libs = '' 371253893Speter apu_libs = '' 372253893Speter 373362181Sdim env.Append(CPPPATH=['$OPENSSL/include']) 374362181Sdim env.Append(LIBPATH=['$OPENSSL/lib']) 375253893Speter 376253893Speter 377253893Speter# If build with gssapi, get its information and define SERF_HAVE_GSSAPI 378253893Speterif gssapi and CALLOUT_OKAY: 379262324Speter env.ParseConfig('$GSSAPI --cflags gssapi') 380262324Speter def parse_libs(env, cmd, unique=1): 381262324Speter env['GSSAPI_LIBS'] = cmd.strip() 382262324Speter return env.MergeFlags(cmd, unique) 383262324Speter env.ParseConfig('$GSSAPI --libs gssapi', parse_libs) 384362181Sdim env.Append(CPPDEFINES=['SERF_HAVE_GSSAPI']) 385253893Speterif sys.platform == 'win32': 386253893Speter env.Append(CPPDEFINES=['SERF_HAVE_SSPI']) 387253893Speter 388262324Speter# On some systems, the -R values that APR describes never make it into actual 389253893Speter# RPATH flags. We'll manually map all directories in LIBPATH into new 390253893Speter# flags to set RPATH values. 391262324Speterfor d in env['LIBPATH']: 392262324Speter env.Append(RPATH=':'+d) 393253893Speter 394253893Speter# Set up the construction of serf-*.pc 395253893Speterpkgconfig = env.Textfile('serf-%d.pc' % (MAJOR,), 396253893Speter env.File('build/serf.pc.in'), 397253893Speter SUBST_DICT = { 398253893Speter '@MAJOR@': str(MAJOR), 399253893Speter '@PREFIX@': '$PREFIX', 400262324Speter '@LIBDIR@': '$LIBDIR', 401253893Speter '@INCLUDE_SUBDIR@': 'serf-%d' % (MAJOR,), 402253893Speter '@VERSION@': '%d.%d.%d' % (MAJOR, MINOR, PATCH), 403262324Speter '@LIBS@': '%s %s %s -lz' % (apu_libs, apr_libs, 404262324Speter env.get('GSSAPI_LIBS', '')), 405253893Speter }) 406253893Speter 407253893Speterenv.Default(lib_static, lib_shared, pkgconfig) 408253893Speter 409253893Speterif CALLOUT_OKAY: 410253893Speter conf = Configure(env) 411253893Speter 412253893Speter ### some configuration stuffs 413253893Speter 414253893Speter env = conf.Finish() 415253893Speter 416253893Speter 417253893Speter# INSTALLATION STUFF 418253893Speter 419253893Speterinstall_static = env.Install(libdir, lib_static) 420262324Speterinstall_shared = env.InstallVersionedLib(libdir, lib_shared) 421253893Speter 422253893Speterif sys.platform == 'darwin': 423262324Speter # Change the shared library install name (id) to its final name and location. 424262324Speter # Notes: 425262324Speter # If --install-sandbox=<path> is specified, install_shared_path will point 426262324Speter # to a path in the sandbox. We can't use that path because the sandbox is 427262324Speter # only a temporary location. The id should be the final target path. 428262324Speter # Also, we shouldn't use the complete version number for id, as that'll 429262324Speter # make applications depend on the exact major.minor.patch version of serf. 430262324Speter 431253893Speter install_shared_path = install_shared[0].abspath 432262324Speter target_install_shared_path = os.path.join(libdir, '%s.dylib' % LIBNAME) 433253893Speter env.AddPostAction(install_shared, ('install_name_tool -id %s %s' 434262324Speter % (target_install_shared_path, 435253893Speter install_shared_path))) 436253893Speter 437253893Speterenv.Alias('install-lib', [install_static, install_shared, 438253893Speter ]) 439253893Speterenv.Alias('install-inc', env.Install(incdir, HEADER_FILES)) 440253893Speterenv.Alias('install-pc', env.Install(os.path.join(libdir, 'pkgconfig'), 441253893Speter pkgconfig)) 442253893Speterenv.Alias('install', ['install-lib', 'install-inc', 'install-pc', ]) 443253893Speter 444253893Speter 445253893Speter# TESTS 446253893Speter### make move to a separate scons file in the test/ subdir? 447253893Speter 448253893Spetertenv = env.Clone() 449253893Speter 450362181Sdim# MockHTTP requires C99 standard, so use it for the test suite. 451362181Sdimcflags = tenv['CFLAGS'] 452362181Sdimtenv.Replace(CFLAGS = [f.replace('-std=c89', '-std=c99') for f in cflags]) 453362181Sdim 454362181Sdimtenv.Append(CPPDEFINES=['MOCKHTTP_OPENSSL']) 455362181Sdim 456253893SpeterTEST_PROGRAMS = [ 'serf_get', 'serf_response', 'serf_request', 'serf_spider', 457253893Speter 'test_all', 'serf_bwtp' ] 458253893Speterif sys.platform == 'win32': 459253893Speter TEST_EXES = [ os.path.join('test', '%s.exe' % (prog)) for prog in TEST_PROGRAMS ] 460253893Speterelse: 461253893Speter TEST_EXES = [ os.path.join('test', '%s' % (prog)) for prog in TEST_PROGRAMS ] 462253893Speter 463253893Speter# Find the (dynamic) library in this directory 464253893Spetertenv.Replace(RPATH=thisdir) 465253893Spetertenv.Prepend(LIBS=[LIBNAMESTATIC, ], 466253893Speter LIBPATH=[thisdir, ]) 467253893Speter 468362181Sdimcheck_script = env.File('build/check.py').rstr() 469362181Sdimtest_dir = env.File('test/test_all.c').rfile().get_dir() 470362181Sdimsrc_dir = env.File('serf.h').rfile().get_dir() 471362181Sdimtest_app = ("%s %s %s %s") % (sys.executable, check_script, test_dir, 'test') 472362181Sdim 473362181Sdim# Set the library search path for the test programs 474362181Sdimtest_env = {'PATH' : os.environ['PATH'], 475362181Sdim 'srcdir' : src_dir} 476362181Sdimif sys.platform != 'win32': 477362181Sdim test_env['LD_LIBRARY_PATH'] = ':'.join(tenv.get('LIBPATH', [])) 478362181Sdimenv.AlwaysBuild(env.Alias('check', TEST_EXES, test_app, ENV=test_env)) 479362181Sdim 480253893Spetertestall_files = [ 481253893Speter 'test/test_all.c', 482253893Speter 'test/CuTest.c', 483253893Speter 'test/test_util.c', 484253893Speter 'test/test_context.c', 485253893Speter 'test/test_buckets.c', 486253893Speter 'test/test_auth.c', 487253893Speter 'test/mock_buckets.c', 488253893Speter 'test/test_ssl.c', 489253893Speter 'test/server/test_server.c', 490253893Speter 'test/server/test_sslserver.c', 491253893Speter ] 492253893Speter 493253893Speterfor proggie in TEST_EXES: 494253893Speter if 'test_all' in proggie: 495253893Speter tenv.Program(proggie, testall_files ) 496253893Speter else: 497253893Speter tenv.Program(target = proggie, source = [proggie.replace('.exe','') + '.c']) 498253893Speter 499253893Speter 500253893Speter# HANDLE CLEANING 501253893Speter 502253893Speterif env.GetOption('clean'): 503253893Speter # When we're cleaning, we want the dependency tree to include "everything" 504253893Speter # that could be built. Thus, include all of the tests. 505253893Speter env.Default('check') 506