source: git/ntl/src/DoConfig @ 54e84ca

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