source: SConstruct @ 191

Last change on this file since 191 was 191, checked in by tim, 14 years ago

updated scons build scripts to handle MinGW
added binaries for MinGW build dependencies

File size: 3.6 KB
Line 
1cflags = '-std=gnu99 -pedantic -Wall'
2
3libiconv_path='win32/libiconv/'
4libpthreads_path='win32/libpthreads/'
5libpthread_name='pthreadGC2'
6
7source_targets=('reglookup-trunk.tar.gz',)
8win32_targets=('reglookup-trunk-win32.zip',)
9
10def target2version(target):
11    return target.split('-')[1].split('.')[0]
12
13def version2input(version):
14    if version == 'trunk':
15        return 'trunk/'
16    else:
17        return 'releases/%s/' % version
18
19
20source_cmds='''
21rm -rf .release;
22svn export svn+ssh://sentinelchicken.org/home/projects/subversion/reglookup/$SOURCE .release/%s;
23cd .release/%s && scons doc
24cd .release && tar cf %s.tar %s && gzip -9 %s.tar;
25mv .release/%s.tar.gz . && rm -rf .release
26'''
27
28win32_cmds='''
29rm -rf .release && mkdir -p .release/%s
30cp %s/src/*.exe .release/%s
31cp win32/libiconv/bin/*.dll win32/libpthreads/bin/*.dll .release/%s
32cd .release && zip -r %s.zip %s
33mv .release/%s.zip . && rm -rf .release
34'''
35
36def generate_cmds(source, target, env, for_signature):
37    ret_val = ''
38    for t in target:
39        t = str(t)
40        t_base = t.split('.tar.gz')[0].split('.zip')[0]
41        if t in source_targets:
42            ret_val += source_cmds % (t_base,t_base,t_base,
43                                      t_base,t_base,t_base)
44        elif t in win32_targets:
45            version = target2version(t)
46            input_prefix = version2input(version)
47
48            env['platform']='cygwin'
49            env['CC']='i586-mingw32msvc-cc'
50            env['AR']='i586-mingw32msvc-ar'
51            env['RANLIB']='i586-mingw32msvc-ranlib'
52           
53            env['CFLAGS']=cflags
54            env['CPPPATH']=[input_prefix+'include',
55                            libiconv_path+'include',
56                            libpthreads_path+'include']
57            env['LIBPATH']=[input_prefix+'lib',
58                            libiconv_path+'lib',
59                            libpthreads_path+'lib']
60            env['LIBS']=['m', libpthread_name, 'iconv', 'regfi']
61
62           
63            # Libraries
64            lib_src = [input_prefix+'lib/regfi.c',
65                       input_prefix+'lib/talloc.c',
66                       input_prefix+'lib/winsec.c',
67                       input_prefix+'lib/range_list.c',
68                       input_prefix+'lib/lru_cache.c',
69                       input_prefix+'lib/void_stack.c']
70            libregfi_static = env.Library(lib_src)
71
72            extra_obj=['%s/lib/lib%s.a' % (libpthreads_path, libpthread_name),
73                       libiconv_path+'/lib/libiconv.dll.a',
74                       input_prefix+'lib/libregfi.a']
75
76            # Executables
77            reglookup = env.Program(input_prefix+'src/reglookup.exe',
78                                    [input_prefix+'src/reglookup.c']+extra_obj)
79            reglookup_recover = env.Program(input_prefix+'src/reglookup-recover.exe',
80                                            [input_prefix+'src/reglookup-recover.c']+extra_obj)
81
82            ret_val += win32_cmds % (t_base,input_prefix,
83                                     t_base,t_base,t_base,t_base,t_base)
84
85        else:
86            return '#ERROR: cannot build "%s".  Acceptable targets: %s' % (t, repr(buildable_files))
87       
88    return ret_val
89
90
91
92release_builder = Builder(generator = generate_cmds,
93                          suffix = '.tar.gz',
94                          src_suffix = '',
95                          prefix='reglookup-')
96
97
98env = Environment()
99env['BUILDERS']['Release'] = release_builder
100
101
102for target in source_targets:
103    env.Release(target, Dir(version2input(target2version(target))))
104
105for target in win32_targets:
106    env.Release(target, Dir(version2input(target2version(target))))
107
108
109Default(None)
Note: See TracBrowser for help on using the repository browser.