Eliot Horowitz | de72cdc | 2009-08-21 10:31:23 -0400 | [diff] [blame] | 1 | # -*- mode: python; -*- |
| 2 | |
Mathias Stearn | 5e282b7 | 2009-11-11 14:25:09 -0500 | [diff] [blame] | 3 | |
| 4 | # --- options ---- |
| 5 | AddOption('--test-server', |
| 6 | dest='test_server', |
| 7 | default='127.0.0.1', |
| 8 | type='string', |
| 9 | nargs=1, |
| 10 | action='store', |
| 11 | help='IP address of server to use for testing') |
| 12 | |
Mathias Stearn | 0e16c82 | 2009-11-16 14:22:17 -0500 | [diff] [blame] | 13 | AddOption('--c99', |
| 14 | dest='use_c99', |
| 15 | default=False, |
| 16 | action='store_true', |
| 17 | help='Compile with c99 (recommended for gcc)') |
| 18 | |
Mathias Stearn | 6870e7b | 2009-11-17 23:43:54 -0500 | [diff] [blame] | 19 | AddOption('--d', |
| 20 | dest='optimize', |
| 21 | default=True, |
| 22 | action='store_false', |
| 23 | help='disable optimizations') |
| 24 | |
Eliot Horowitz | de72cdc | 2009-08-21 10:31:23 -0400 | [diff] [blame] | 25 | import os |
Mathias Stearn | 71f302c | 2009-11-09 17:44:33 -0500 | [diff] [blame] | 26 | import sys |
Eliot Horowitz | de72cdc | 2009-08-21 10:31:23 -0400 | [diff] [blame] | 27 | |
Mathias Stearn | 58e403e | 2010-02-04 14:32:14 -0500 | [diff] [blame] | 28 | env = Environment( ENV=os.environ ) |
Eliot Horowitz | de72cdc | 2009-08-21 10:31:23 -0400 | [diff] [blame] | 29 | |
Mathias Stearn | 0827f40 | 2010-02-04 18:01:19 -0500 | [diff] [blame] | 30 | if os.sys.platform in ["darwin", "linux2"]: |
Mathias Stearn | 32121ad | 2010-01-25 14:58:49 -0500 | [diff] [blame] | 31 | env.Append( CPPFLAGS=" -pedantic -Wall -ggdb " ) |
Eliot Horowitz | 43b65ea | 2009-10-05 19:15:35 -0400 | [diff] [blame] | 32 | env.Append( CPPPATH=["/opt/local/include/"] ) |
| 33 | env.Append( LIBPATH=["/opt/local/lib/"] ) |
Mathias Stearn | 32121ad | 2010-01-25 14:58:49 -0500 | [diff] [blame] | 34 | |
Mathias Stearn | 0e16c82 | 2009-11-16 14:22:17 -0500 | [diff] [blame] | 35 | if GetOption('use_c99'): |
Mathias Stearn | 32121ad | 2010-01-25 14:58:49 -0500 | [diff] [blame] | 36 | env.Append( CFLAGS=" -std=c99 " ) |
Mathias Stearn | 58e403e | 2010-02-04 14:32:14 -0500 | [diff] [blame] | 37 | env.Append( CXXDEFINES="MONGO_HAVE_STDINT" ) |
Mathias Stearn | 32121ad | 2010-01-25 14:58:49 -0500 | [diff] [blame] | 38 | else: |
| 39 | env.Append( CFLAGS=" -ansi " ) |
| 40 | |
Mathias Stearn | 6870e7b | 2009-11-17 23:43:54 -0500 | [diff] [blame] | 41 | if GetOption('optimize'): |
| 42 | env.Append( CPPFLAGS=" -O3 " ) |
| 43 | # -O3 benchmarks *significantly* faster than -O2 when disabling networking |
Mathias Stearn | 0827f40 | 2010-02-04 18:01:19 -0500 | [diff] [blame] | 44 | elif 'win32' == os.sys.platform: |
| 45 | env.Append( LIBS='ws2_32' ) |
Mathias Stearn | 0e16c82 | 2009-11-16 14:22:17 -0500 | [diff] [blame] | 46 | |
Eliot Horowitz | de72cdc | 2009-08-21 10:31:23 -0400 | [diff] [blame] | 47 | |
Mathias Stearn | 0e16c82 | 2009-11-16 14:22:17 -0500 | [diff] [blame] | 48 | #we shouldn't need these options in c99 mode |
| 49 | if not GetOption('use_c99'): |
| 50 | conf = Configure(env) |
Mathias Stearn | b1058ca | 2009-11-12 19:13:32 -0500 | [diff] [blame] | 51 | |
Mathias Stearn | 0e16c82 | 2009-11-16 14:22:17 -0500 | [diff] [blame] | 52 | if not conf.CheckType('int64_t'): |
| 53 | if conf.CheckType('int64_t', '#include <stdint.h>\n'): |
Mathias Stearn | 58e403e | 2010-02-04 14:32:14 -0500 | [diff] [blame] | 54 | conf.env.Append( CPPDEFINES="MONGO_HAVE_STDINT" ) |
Mathias Stearn | 0e16c82 | 2009-11-16 14:22:17 -0500 | [diff] [blame] | 55 | elif conf.CheckType('int64_t', '#include <unistd.h>\n'): |
Mathias Stearn | 58e403e | 2010-02-04 14:32:14 -0500 | [diff] [blame] | 56 | conf.env.Append( CPPDEFINES="MONGO_HAVE_UNISTD" ) |
Mathias Stearn | 0e16c82 | 2009-11-16 14:22:17 -0500 | [diff] [blame] | 57 | elif conf.CheckType('__int64'): |
Mathias Stearn | 58e403e | 2010-02-04 14:32:14 -0500 | [diff] [blame] | 58 | conf.env.Append( CPPDEFINES="MONGO_USE__INT64" ) |
Mathias Stearn | 0e16c82 | 2009-11-16 14:22:17 -0500 | [diff] [blame] | 59 | elif conf.CheckType('long long int'): |
Mathias Stearn | 58e403e | 2010-02-04 14:32:14 -0500 | [diff] [blame] | 60 | conf.env.Append( CPPDEFINES="MONGO_USE_LONG_LONG_INT" ) |
Mathias Stearn | 0e16c82 | 2009-11-16 14:22:17 -0500 | [diff] [blame] | 61 | else: |
| 62 | print "*** what is your 64 bit int type? ****" |
| 63 | Exit(1) |
Mathias Stearn | 3df607a | 2009-11-16 13:56:34 -0500 | [diff] [blame] | 64 | |
Mathias Stearn | 0e16c82 | 2009-11-16 14:22:17 -0500 | [diff] [blame] | 65 | env = conf.Finish() |
Mathias Stearn | b1058ca | 2009-11-12 19:13:32 -0500 | [diff] [blame] | 66 | |
Mathias Stearn | 0827f40 | 2010-02-04 18:01:19 -0500 | [diff] [blame] | 67 | have_libjson = False |
| 68 | conf = Configure(env) |
| 69 | if conf.CheckLib('json'): |
| 70 | have_libjson = True |
| 71 | env = conf.Finish() |
| 72 | |
Mathias Stearn | 71f302c | 2009-11-09 17:44:33 -0500 | [diff] [blame] | 73 | if sys.byteorder == 'big': |
Mathias Stearn | 58e403e | 2010-02-04 14:32:14 -0500 | [diff] [blame] | 74 | env.Append( CPPDEFINES="MONGO_BIG_ENDIAN" ) |
Mathias Stearn | 71f302c | 2009-11-09 17:44:33 -0500 | [diff] [blame] | 75 | |
Eliot Horowitz | de72cdc | 2009-08-21 10:31:23 -0400 | [diff] [blame] | 76 | env.Append( CPPPATH=["src/"] ) |
| 77 | |
Mathias Stearn | 2490576 | 2009-11-24 18:33:36 -0500 | [diff] [blame] | 78 | coreFiles = ["src/md5.c" ] |
Richard Kreuter | 34560e3 | 2010-03-02 09:25:28 -0500 | [diff] [blame] | 79 | mFiles = [ "src/mongo.c"] |
| 80 | bFiles = [ "src/bson.c", "src/numbers.c"] |
| 81 | mLibFiles = coreFiles + mFiles + bFiles |
| 82 | bLibFiles = coreFiles + bFiles |
| 83 | m = env.Library( "mongoc" , mLibFiles ) |
| 84 | b = env.Library( "bson" , bLibFiles ) |
Eliot Horowitz | f3fb0f2 | 2009-10-05 21:29:58 -0400 | [diff] [blame] | 85 | env.Default( env.Alias( "lib" , [ m[0] , b[0] ] ) ) |
Richard Kreuter | 34560e3 | 2010-03-02 09:25:28 -0500 | [diff] [blame] | 86 | dynm = env.SharedLibrary( "mongoc" , mLibFiles ) |
| 87 | dynb = env.SharedLibrary( "bson" , bLibFiles ) |
| 88 | env.Default( env.Alias( "sharedlib" , [ dynm[0] , dynb[0] ] ) ) |
Eliot Horowitz | 43b65ea | 2009-10-05 19:15:35 -0400 | [diff] [blame] | 89 | |
Mathias Stearn | 6870e7b | 2009-11-17 23:43:54 -0500 | [diff] [blame] | 90 | benchmarkEnv = env.Clone() |
Mathias Stearn | 0827f40 | 2010-02-04 18:01:19 -0500 | [diff] [blame] | 91 | benchmarkEnv.Append( CPPDEFINES=[('TEST_SERVER', r'\"%s\"'%GetOption('test_server'))] ) |
Mathias Stearn | 6870e7b | 2009-11-17 23:43:54 -0500 | [diff] [blame] | 92 | benchmarkEnv.Append( LIBS=[m, b] ) |
| 93 | benchmarkEnv.Prepend( LIBPATH=["."] ) |
Mathias Stearn | 2490576 | 2009-11-24 18:33:36 -0500 | [diff] [blame] | 94 | benchmarkEnv.Program( "benchmark" , [ "test/benchmark.c"] ) |
Mathias Stearn | 6870e7b | 2009-11-17 23:43:54 -0500 | [diff] [blame] | 95 | |
| 96 | testEnv = benchmarkEnv.Clone() |
Mathias Stearn | 2490576 | 2009-11-24 18:33:36 -0500 | [diff] [blame] | 97 | testCoreFiles = [ ] |
Eliot Horowitz | 673f6a6 | 2009-10-07 15:03:30 -0400 | [diff] [blame] | 98 | |
Mathias Stearn | 0827f40 | 2010-02-04 18:01:19 -0500 | [diff] [blame] | 99 | tests = Split('sizes resize endian_swap all_types simple update errors count_delete auth pair') |
| 100 | |
| 101 | if have_libjson: |
| 102 | tests.append('json') |
| 103 | testEnv.Append( LIBS=["json"] ) |
| 104 | |
| 105 | for name in tests: |
Mathias Stearn | c7b7691 | 2009-11-11 12:14:26 -0500 | [diff] [blame] | 106 | filename = "test/%s.c" % name |
Mathias Stearn | 2a09ec8 | 2009-11-17 15:12:53 -0500 | [diff] [blame] | 107 | exe = "test_" + name |
Mathias Stearn | c7b7691 | 2009-11-11 12:14:26 -0500 | [diff] [blame] | 108 | test = testEnv.Program( exe , testCoreFiles + [filename] ) |
Mathias Stearn | 0827f40 | 2010-02-04 18:01:19 -0500 | [diff] [blame] | 109 | test_alias = testEnv.Alias('test', [test], test[0].abspath + ' 2> ' + os.path.devnull) |
Mathias Stearn | c7b7691 | 2009-11-11 12:14:26 -0500 | [diff] [blame] | 110 | AlwaysBuild(test_alias) |
Mathias Stearn | fe9cba1 | 2009-12-03 19:19:10 -0500 | [diff] [blame] | 111 | |
| 112 | # special case for cpptest |
| 113 | test = testEnv.Program( 'test_cpp' , testCoreFiles + ['test/cpptest.cpp'] ) |
Mathias Stearn | 6c6af36 | 2010-02-04 18:34:07 -0500 | [diff] [blame] | 114 | test_alias = testEnv.Alias('test', [test], test[0].abspath + ' 2> '+ os.path.devnull) |
Mathias Stearn | fe9cba1 | 2009-12-03 19:19:10 -0500 | [diff] [blame] | 115 | AlwaysBuild(test_alias) |