source: git/ntl/src/DoConfig @ 26e030

spielwiese
Last change on this file since 26e030 was 26e030, checked in by Hans Schönemann <hannes@…>, 14 years ago
*hannes: update to 5.5.1 git-svn-id: file:///usr/local/Singular/svn/trunk@11949 2c84dea3-7e68-4137-9b89-c4e89433aadc
  • Property mode set to 100644
File size: 5.9 KB
Line 
1# This is a perl script, invoked from a shell
2
3# use warnings;  # this doesn't work on older versions of perl
4
5
6%MakeFlag = (
7
8'WIZARD'  => 'on',
9'SHARED'  => 'off',
10
11);
12
13%MakeVal = (
14
15'CC'          => 'gcc',
16'CXX'         => 'g++',
17'CFLAGS'      => '-O2',
18'CXXFLAGS'    => '$(CFLAGS)',
19'AR'          => 'ar',
20'ARFLAGS'     => 'ruv',
21'RANLIB'      => 'ranlib',
22'LIBTOOL'     => 'libtool',
23
24'LDFLAGS'     => '',
25'LDFLAGS_CXX' => '$(LDFLAGS)',
26'LDLIBS'      => '-lm',
27'LDLIBS_CXX'  => '$(LDLIBS)',
28'CPPFLAGS'    => '',
29
30'DEF_PREFIX'  => '/usr/local',
31
32'PREFIX'      => '$(DEF_PREFIX)',
33'LIBDIR'      => '$(PREFIX)/lib',
34'INCLUDEDIR'  => '$(PREFIX)/include',
35'DOCDIR'      => '$(PREFIX)/share/doc',
36
37'GMP_PREFIX'  => '$(DEF_PREFIX)',
38'GMP_INCDIR'  => '$(GMP_PREFIX)/include',
39'GMP_LIBDIR'  => '$(GMP_PREFIX)/lib',
40
41'GF2X_PREFIX'  => '$(DEF_PREFIX)',
42'GF2X_INCDIR'  => '$(GF2X_PREFIX)/include',
43'GF2X_LIBDIR'  => '$(GF2X_PREFIX)/lib',
44
45);
46
47
48
49
50%ConfigFlag = (
51
52'NTL_STD_CXX'           => 'on',
53'NTL_PSTD_NNS'          => 'off',
54'NTL_PSTD_NHF'          => 'off',
55'NTL_PSTD_NTN'          => 'off',
56'NTL_GMP_LIP'           => 'off',
57'NTL_GMP_HACK'          => 'off',
58'NTL_GF2X_LIB'          => 'off',
59'NTL_CXX_ONLY'          => 'off',
60'NTL_X86_FIX'           => 'off',
61'NTL_NO_X86_FIX'        => 'off',
62'NTL_AVOID_FLOAT'       => 'off',
63'NTL_LONG_LONG'         => 'off',
64'NTL_SPMM_ULL'          => 'off',
65'NTL_SPMM_UL'           => 'off',
66'NTL_SPMM_ASM'          => 'off',
67'NTL_AVOID_BRANCHING'   => 'off',
68'NTL_TBL_REM'           => 'off',
69'NTL_GF2X_NOINLINE'     => 'off',
70'NTL_GF2X_ALTCODE'      => 'off',
71'NTL_GF2X_ALTCODE1'     => 'off',
72'NTL_NO_INIT_TRANS'     => 'off',
73'NTL_CLEAN_INT'         => 'off',
74'NTL_CLEAN_PTR'         => 'off',
75'NTL_RANGE_CHECK'       => 'off',
76
77);
78
79
80%ConfigVal = (
81
82'NTL_LONG_LONG_TYPE' => undef,
83'NTL_UNSIGNED_LONG_LONG_TYPE' => undef,
84
85);
86
87
88foreach $arg (@ARGV) {
89
90   if ($arg =~ '-h|help|-help|--help') {
91      system("more ../doc/config.txt");
92      exit;
93   }
94
95   if (($name, $val) = ($arg =~ /(.*?)=(.*)/)) {
96     
97      if (exists($MakeFlag{$name}) && ($val =~ 'on|off')) {
98         $MakeFlag{$name} = $val;
99         next;
100      }
101      elsif (exists($MakeVal{$name})) {
102         $MakeVal{$name} = $val;
103         next;
104      }
105      elsif (exists($ConfigFlag{$name}) && ($val =~ 'on|off')) {
106         $ConfigFlag{$name} = $val;
107         next;
108      }
109      elsif (exists($ConfigVal{$name})) {
110         $ConfigVal{$name} = $val;
111         next;
112      }
113   }
114
115   die "Error: unrecognized option: $arg\ntype \"./configure -h\" for help\n";
116
117}
118
119# some special MakeVal values that are determined by SHARED
120
121if ($MakeFlag{'SHARED'} eq 'off') {
122
123   $MakeVal{'LSTAT'} = '';
124   $MakeVal{'LSHAR'} = '# ';
125
126} else {
127
128   # sanity check for libtool
129
130   print("***** checking for libtool *****\n");
131   if (system("$MakeVal{'LIBTOOL'} --version")) {
132      die "Error: bad libtool ($MakeVal{'LIBTOOL'}) -- try glibtool?";
133   }
134   print("***** libtool OK *****\n\n");
135
136   $MakeVal{'LSTAT'} = '# ';
137   $MakeVal{'LSHAR'} = '';
138
139}
140
141# a special MakeVal value that is determined by NTL_GMP_LIP
142# and NTL_GMP_HACK
143
144
145if ($ConfigFlag{'NTL_GMP_LIP'} eq 'on' || $ConfigFlag{'NTL_GMP_HACK'} eq 'on') {
146   $MakeVal{'GMP'} = '';
147}
148else {
149   $MakeVal{'GMP'} = '# ';
150}
151
152# a special MakeVal value that is determined by NTL_GF2X_LIB
153
154
155if ($ConfigFlag{'NTL_GF2X_LIB'} eq 'on') {
156   $MakeVal{'GF2X'} = '';
157}
158else {
159   $MakeVal{'GF2X'} = '# ';
160}
161
162
163# copy %MakeVal and %MakeFlag as is into %MakeSub
164
165%MakeSub = (%MakeVal, %MakeFlag);
166
167
168# copy %ConfigFlag into %ConfigSub, substituting 0 for off and 1 of on
169
170
171%ConfigSub = ( );
172
173foreach $name (keys %ConfigFlag) {
174
175   if ($ConfigFlag{$name} eq 'on') {
176      $ConfigSub{$name} = 1;
177   }
178   else {
179      $ConfigSub{$name} = 0;
180   }
181
182}
183
184# special logic for NTL_LONG_LONG_TYPE
185
186if (defined($ConfigVal{'NTL_LONG_LONG_TYPE'})) {
187
188   $ConfigSub{'NTL_LONG_LONG_TYPE'} = $ConfigVal{'NTL_LONG_LONG_TYPE'};
189   $ConfigSub{'FLAG_LONG_LONG_TYPE'} = 1;
190
191}
192else {
193   
194   $ConfigSub{'NTL_LONG_LONG_TYPE'} = 'long long';
195   $ConfigSub{'FLAG_LONG_LONG_TYPE'} = 0;
196
197}
198
199
200# special logic for NTL_UNSIGNED_LONG_LONG_TYPE
201
202if (defined($ConfigVal{'NTL_UNSIGNED_LONG_LONG_TYPE'})) {
203
204   $ConfigSub{'NTL_UNSIGNED_LONG_LONG_TYPE'} = $ConfigVal{'NTL_UNSIGNED_LONG_LONG_TYPE'};
205   $ConfigSub{'FLAG_UNSIGNED_LONG_LONG_TYPE'} = 1;
206
207}
208else {
209   
210   $ConfigSub{'NTL_UNSIGNED_LONG_LONG_TYPE'} = 'unsigned long long';
211   $ConfigSub{'FLAG_UNSIGNED_LONG_LONG_TYPE'} = 0;
212
213}
214
215# special logic for WIZARD_HACK
216
217$ConfigSub{'WIZARD_HACK'} = '';
218
219
220# some extra logic consistency checks
221
222if ($ConfigSub{'NTL_X86_FIX'} + $ConfigSub{'NTL_NO_X86_FIX'} > 1) {
223
224   die "Error: at most one of NTL_X86_FIX and NTL_NO_X86_FIX may be on\n";
225
226}
227
228if ($ConfigSub{'NTL_GMP_HACK'} + $ConfigSub{'NTL_GMP_LIP'} > 1) {
229
230   die "Error: at most one of NTL_GMP_HACK and NTL_GMP_LIP may be on\n";
231
232}
233
234if ($ConfigSub{'NTL_AVOID_FLOAT'} + $ConfigSub{'NTL_LONG_LONG'} > 1) {
235
236   die "Error: at most one of NTL_AVOID_FLOAT and NTL_LONG_LONG may be on\n";
237
238}
239
240
241if ($ConfigSub{'NTL_SPMM_UL'} + $ConfigSub{'NTL_SPMM_ULL'} +
242    $ConfigSub{'NTL_SPMM_ASM'} > 1) {
243
244   die "Error: at most one of NTL_SPMM_UL, NTL_SPMM_ULL and NTL_SPMM_ASM may be on\n";
245
246}
247
248
249if ($ConfigSub{'NTL_GF2X_ALTCODE'} + $ConfigSub{'NTL_GF2X_ALTCODE1'} > 1) {
250
251   die "Error: at most one of NTL_GF2X_ALTCODE and NTL_GF2X_ALTCODE1 may be on\n";
252
253}
254
255
256
257######################################
258
259# all tests pass -- generate files
260
261######################################
262
263# generate makefile
264
265open(MFILE, "< mfile");
266open(MFILEOUT, "> mfileout");
267
268while ($line = <MFILE>) {
269
270   $line =~ s/@\{(.*?)\}/$MakeSub{$1}/ge;
271
272   print MFILEOUT $line;
273
274}
275
276close(MFILE);
277close(MFILEOUT);
278
279
280# generate config.h
281
282open(CFILE, "< cfile");
283open(CFILEOUT, "> cfileout");
284
285while ($line = <CFILE>) {
286
287   $line =~ s/@\{(.*?)\}/$ConfigSub{$1}/ge;
288
289   print CFILEOUT $line;
290
291}
292
293close(CFILE);
294close(CFILEOUT);
295
296print("writing makefile\n");
297system("cp mfileout makefile");
298
299print("writing ../include/NTL/config.h\n");
300system("cp cfileout ../include/NTL/config.h");
301
Note: See TracBrowser for help on using the repository browser.