source: SConstruct@ 222

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

removed legacy Makefiles
mingw target now builds libregfi.dll

File size: 5.1 KB
Line 
1cflags = '-std=gnu99 -pedantic -Wall'
2
3libiconv_path='win32/libiconv/'
4libpthreads_path='win32/libpthreads/'
5libpthread_name='pthreadGC2'
6libtalloc_path='win32/libtalloc/'
7
8source_targets=('reglookup-src-trunk.tar.gz',)
9win32_targets=('reglookup-win32-trunk.zip',)
10doc_targets=('reglookup-doc-trunk.tar.gz',)
11all_targets = source_targets+win32_targets+doc_targets
12
13def target2version(target):
14 chunks = target.split('-')
15 if len(chunks) != 3:
16 return None
17 return chunks[2].split('.')[0]
18
19def version2input(version):
20 if version == 'trunk':
21 return 'trunk/'
22 else:
23 return 'releases/%s/' % version
24
25
26source_cmds='''
27rm -rf .release;
28svn export svn+ssh://sentinelchicken.org/home/projects/subversion/reglookup/$SOURCE .release/%s;
29cd .release/%s && scons doc
30cd .release && tar cf %s.tar %s && gzip -9 %s.tar;
31mv .release/%s.tar.gz . && rm -rf .release
32'''
33
34win32_cmds='''
35rm -rf .release && mkdir -p .release/%s
36cp %s/src/*.exe .release/%s
37cp win32/libiconv/bin/*.dll win32/libpthreads/bin/*.dll win32/libtalloc/bin/*.dll trunk/lib/*.dll .release/%s
38cd .release && zip -r %s.zip %s
39mv .release/%s.zip . && rm -rf .release
40'''
41
42doc_cmds='''
43rm -rf .release;
44svn export svn+ssh://sentinelchicken.org/home/projects/subversion/reglookup/ .release;
45cd .release && doxygen Doxyfile.regfi
46cd .release && doxygen Doxyfile.pyregfi
47mv .release/doc .release/%s
48cd .release && tar cf %s.tar %s && gzip -9 %s.tar;
49mv .release/%s.tar.gz . && rm -rf .release
50'''
51
52def generate_cmds(source, target, env, for_signature):
53 ret_val = ''
54 for t in target:
55 t = str(t)
56 t_base = t.split('.tar.gz')[0].split('.zip')[0]
57 if t in source_targets:
58 ret_val += source_cmds % (t_base,t_base,t_base,
59 t_base,t_base,t_base)
60 elif t in win32_targets:
61 version = target2version(t)
62 input_prefix = version2input(version)
63
64 env['platform']='cygwin'
65 env['CC']='i586-mingw32msvc-cc'
66 env['AR']='i586-mingw32msvc-ar'
67 env['RANLIB']='i586-mingw32msvc-ranlib'
68
69 env['CFLAGS']=cflags
70 env['CPPPATH']=[input_prefix+'include',
71 libiconv_path+'include',
72 libpthreads_path+'include',
73 libtalloc_path+'include']
74 env['LIBPATH']=[input_prefix+'lib',
75 libiconv_path+'lib',
76 libpthreads_path+'lib',
77 libtalloc_path+'lib']
78 env['LIBS']=['m', libpthread_name, 'iconv', 'regfi', 'talloc']
79
80 # Third-party dependencies
81 extra_obj=['%s/lib/lib%s.a' % (libpthreads_path, libpthread_name),
82 libiconv_path+'/lib/libiconv.dll.a',
83 libtalloc_path+'/lib/libtalloc.dll.a']
84
85 # Build libregfi.dll
86 # Core regfi source
87 lib_src = [input_prefix+'lib/regfi.c',
88 input_prefix+'lib/winsec.c',
89 input_prefix+'lib/range_list.c',
90 input_prefix+'lib/lru_cache.c',
91 input_prefix+'lib/void_stack.c']
92 regfi_o = env.Object(lib_src)
93
94 regfi_obj = []
95 for s in lib_src:
96 regfi_obj.append(s[0:-1]+'o')
97
98 env.Command(input_prefix+'lib/libregfi.o', regfi_o+extra_obj,
99 'i586-mingw32msvc-dlltool --export-all-symbols'
100 +' --dllname libregfi.dll -e $TARGET'
101 +' -l %slib/libregfi.dll.a %s'
102 % (input_prefix, ' '.join(regfi_obj)))
103
104 env.Command(input_prefix+'lib/libregfi.dll',
105 input_prefix+'lib/libregfi.o',
106 'i586-mingw32msvc-gcc --shared -o $TARGET $SOURCE %s'
107 % ' '.join(regfi_obj+extra_obj))
108
109 # Executables
110 reglookup = env.Program(input_prefix+'src/reglookup.exe',
111 [input_prefix+'src/reglookup.c']+extra_obj)
112 reglookup_recover = env.Program(input_prefix+'src/reglookup-recover.exe',
113 [input_prefix+'src/reglookup-recover.c']+extra_obj)
114
115 ret_val += win32_cmds % (t_base,input_prefix,
116 t_base,t_base,t_base,t_base,t_base)
117
118 elif t in doc_targets:
119 ret_val += doc_cmds % (t_base,t_base,t_base,t_base,t_base)
120
121 return ret_val
122
123
124
125release_builder = Builder(generator = generate_cmds,
126 suffix = '.tar.gz',
127 src_suffix = '',
128 prefix='reglookup-')
129
130
131env = Environment()
132env['BUILDERS']['Release'] = release_builder
133
134if len(COMMAND_LINE_TARGETS) == 0:
135 print('Acceptable targets: %s' % repr(all_targets))
136
137for target in COMMAND_LINE_TARGETS:
138 AlwaysBuild(target)
139 if target not in all_targets:
140 print('ERROR: cannot build "%s". Acceptable targets: %s'
141 % (target, repr(all_targets)))
142 break
143 env.Release(target, Dir(version2input(target2version(target))))
144
145Default(None)
Note: See TracBrowser for help on using the repository browser.