]> git.ipfire.org Git - thirdparty/openssl.git/blame - Configurations/windows-makefile.tmpl
Pass down inclusion directories to source file generators
[thirdparty/openssl.git] / Configurations / windows-makefile.tmpl
CommitLineData
7c0e1aa6
RL
1##
2## Makefile for OpenSSL
3##
4## {- join("\n## ", @autowarntext) -}
5{-
6 our $objext = $target{obj_extension} || ".obj";
7 our $depext = $target{dep_extension} || ".d";
8 our $exeext = $target{exe_extension} || ".exe";
9 our $libext = $target{lib_extension} || ".lib";
10 our $shlibext = $target{shared_extension} || ".dll";
11 our $shlibextimport = $target{shared_import_extension} || ".lib";
12 our $dsoext = $target{dso_extension} || ".dll";
13
14 sub shlib {
15 return () if $disabled{shared};
16 my $lib = shift;
17 return $unified_info{sharednames}->{$lib} . $shlibext;
18 }
19
20 sub shlib_import {
21 return () if $disabled{shared};
22 my $lib = shift;
23 return $lib . $shlibextimport;
24 }
25
26 sub dso {
27 my $dso = shift;
28
29 return $dso . $dsoext;
30 }
31 '';
32-}
33
34PLATFORM={- $config{target} -}
35SRCDIR={- $config{sourcedir} -}
36BLDDIR={- $config{builddir} -}
37
38VERSION={- $config{version} -}
39MAJOR={- $config{major} -}
40MINOR={- $config{minor} -}
41
42SHLIB_VERSION_NUMBER={- $config{shlib_version_number} -}
43
44LIBS={- join(" ", map { $_.$libext } @{$unified_info{libraries}}) -}
45SHLIBS={- join(" ", map { shlib($_) } @{$unified_info{libraries}}) -}
46ENGINES={- join(" ", map { dso($_) } @{$unified_info{engines}}) -}
47PROGRAMS={- join(" ", map { $_.$exeext } grep { !m|^test\\| } @{$unified_info{programs}}) -}
48TESTPROGS={- join(" ", map { $_.$exeext } grep { m|^test\\| } @{$unified_info{programs}}) -}
49SCRIPTS={- join(" ", @{$unified_info{scripts}}) -}
50
51DEPS={- join(" ", map { (my $x = $_) =~ s|\.o$|$depext|; $x; }
52 grep { $unified_info{sources}->{$_}->[0] =~ /\.c$/ }
53 keys %{$unified_info{sources}}); -}
54
55# Do not edit these manually. Use Configure with --prefix or --openssldir
56# to change this! Short explanation in the top comment in Configure
57INSTALLTOP={- # $prefix is used in the OPENSSLDIR perl snippet
58 #
59 our $prefix = $config{prefix} || "/usr/local";
60 $prefix -}
61OPENSSLDIR={- #
62 # The logic here is that if no --openssldir was given,
63 # OPENSSLDIR will get the value from $prefix plus "/ssl".
64 # If --openssldir was given and the value is an absolute
65 # path, OPENSSLDIR will get its value without change.
66 # If the value from --openssldir is a relative path,
67 # OPENSSLDIR will get $prefix with the --openssldir
68 # value appended as a subdirectory.
69 #
70 use File::Spec::Functions;
71 our $openssldir =
72 $config{openssldir} ?
73 (file_name_is_absolute($config{openssldir}) ?
74 $config{openssldir}
75 : catdir($prefix, $config{openssldir}))
76 : catdir($prefix, "ssl");
77 $openssldir -}
78LIBDIR={- #
79 # if $prefix/lib$target{multilib} is not an existing
80 # directory, then assume that it's not searched by linker
81 # automatically, in which case adding $target{multilib} suffix
82 # causes more grief than we're ready to tolerate, so don't...
83 our $multilib =
84 -d "$prefix/lib$target{multilib}" ? $target{multilib} : "";
85 our $libdir = $config{libdir} || "lib$multilib";
86 $libdir -}
87ENGINESDIR={- use File::Spec::Functions;
88 our $enginesdir = catdir($prefix,$libdir,"engines");
89 $enginesdir -}
90
91CC={- $target{cc} -}
92CFLAGS={- join(" ",(map { "-D".$_} @{$target{defines}}, @{$config{defines}})) -} {- join(" ", quotify_l("-DENGINESDIR=\"$enginesdir\"", "-DOPENSSLDIR=\"$openssldir\"")) -} {- $target{cflags} -} {- $config{cflags} -}
93COUTFLAG={- $target{coutflag} || "/Fo" -}
94LD={- $target{ld} || "link" -}
95LDFLAGS={- $target{lflags} -}
96LDOUTFLAG={- $target{loutflag} || "/out:" -}
2fe73036
RL
97EX_LIBS={- $target{ex_libs} -}
98LIB_CFLAGS={- join(" ", $target{lib_cflags}, $target{shared_cflag}) || "" -}
7c0e1aa6 99SHARED_LDFLAGS={- $target{shared_ldflag} || "" -}
2fe73036
RL
100DSO_CFLAGS={- join(" ", $target{dso_cflags}, $target{shared_cflag}) || "" -}
101DSO_LDFLAGS={- join(" ", $target{dso_lflags}, $target{shared_ldflag}) || "" -}
7c0e1aa6 102BIN_CFLAGS={- $target{bin_cflags} -}
2fe73036 103BIN_LDFLAGS={- $target{bin_lflags} -}
7c0e1aa6
RL
104
105PERL={- $config{perl} -}
106
107AR={- $target{ar} -}
108ARFLAGS= {- $target{arflags} -}
109AROUTFLAG={- $target{aroutflag} || "/out:" -}
110
111AS={- $target{as} -}
112ASFLAGS={- $target{asflags} -}
113ASOUTFLAG={- $target{asoutflag} -}
114PERLASM_SCHEME= {- $target{perlasm_scheme} -}
115
116PROCESSOR= {- $config{processor} -}
117
118# The main targets ###################################################
119
2fe73036 120all: configdata.pm build_libs_nodep build_engines_nodep build_apps_nodep depend
7c0e1aa6
RL
121
122build_libs: configdata.pm build_libs_nodep depend
123build_libs_nodep: $(LIBS)
124build_engines: configdata.pm build_engines_nodep depend
125build_engines_nodep: $(ENGINES)
126build_apps: configdata.pm build_apps_nodep depend
127build_apps_nodep: $(PROGRAMS) $(SCRIPTS)
128build_tests: configdata.pm build_tests_nodep depend
129build_tests_nodep: $(TESTPROGS)
130
2fe73036 131test tests: build_tests_nodep build_apps_nodep build_engines_nodep depend
7c0e1aa6
RL
132 set SRCTOP=$(SRCDIR)
133 set BLDTOP=$(BLDDIR)
134 set PERL=$(PERL)
135 $(PERL) $(SRCDIR)\test\run_tests.pl $(TESTS)
136
137list-tests:
138 @set TOP=$(SRCDIR)
139 @set PERL=$(PERL)
140 @$(PERL) $(SRCDIR)\test\run_tests.pl list
141
142depend:
143
144# Building targets ###################################################
145
146configdata.pm: {- $config{build_file_template} -} $(SRCDIR)\Configure
147 @echo "Detected changed: $?"
148 @echo "Reconfiguring..."
149 $(PERL) $(SRCDIR)\Configure reconf
150 @echo "**************************************************"
151 @echo "*** ***"
152 @echo "*** Please run the same make command again ***"
153 @echo "*** ***"
154 @echo "**************************************************"
155 @( exit 1 )
156
157{-
158 use File::Basename;
159 use File::Spec::Functions qw/:DEFAULT abs2rel rel2abs/;
160
161 # Helper function to figure out dependencies on libraries
162 # It takes a list of library names and outputs a list of dependencies
163 sub compute_lib_depends {
164 if ($disabled{shared}) {
165 return map { $_.$libext } @_;
166 }
167 return map { shlib_import($_) } @_;
168 }
169
9a1394c5
RL
170 sub generatesrc {
171 my %args = @_;
172 (my $target = $args{src}) =~ s/\.[sS]$/.asm/;
173 my $generator = join(" ", @{$args{generator}});
d4605727 174 my $incs = join("", map { " /I ".$_ } @{$args{incs}});
9a1394c5
RL
175
176 if ($target !~ /\.asm$/) {
177 return <<"EOF";
178$target: $args{generator}->[0]
179 \$(PERL) $generator > \$@
180EOF
181 } else {
182 if ($args{generator}->[0] =~ /\.pl$/) {
183 $generator = '$(PERL) '.$generator;
184 } elsif ($args{generator}->[0] =~ /\.S$/) {
185 $generator = undef;
186 } else {
187 die "Generator type for $src unknown: $generator\n";
188 }
189
190 if (defined($generator)) {
191 # If the target is named foo.S in build.info, we want to
192 # end up generating foo.s in two steps.
193 if ($args{src} =~ /\.S$/) {
194 return <<"EOF";
195$target: $args{generator}->[0]
196 set ASM=\$(AS)
197 set CC=\$(CC)
198 $generator \$@.S
d4605727 199 \$(CC) \$(CFLAGS) $incs /EP /C \$@.S > \$@
9a1394c5
RL
200 del /Q \$@.S
201EOF
202 }
203 # Otherwise....
204 return <<"EOF";
205$target: $args{generator}->[0]
206 set ASM=\$(AS)
207 set CC=\$(CC)
208 $generator \$@
209EOF
210 }
211 return <<"EOF";
212$target: $args{generator}->[0]
d4605727 213 \$(CC) \$(CFLAGS) $incs /EP /C \$< > \$@
9a1394c5
RL
214EOF
215 }
216 }
217
7c0e1aa6
RL
218 sub src2obj {
219 my %args = @_;
220 my $obj = $args{obj};
221 my @srcs = map { (my $x = $_) =~ s/\.[sS]$/.asm/; $x } ( @{$args{srcs}} );
222 my $srcs = join(" ", @srcs);
223 my $deps = join(" ", @srcs, @{$args{deps}});
224 my $incs = join("", map { " /I ".$_ } @{$args{incs}});
2fe73036 225 my $ecflags = { lib => '$(LIB_CFLAGS)',
7c0e1aa6
RL
226 dso => '$(DSO_CFLAGS)',
227 bin => '$(BIN_CFLAGS)' } -> {$args{intent}};
228 my $makedepprog = $config{makedepprog};
229 if ($srcs[0] =~ /\.asm$/) {
230 return <<"EOF";
231$obj$objext: $deps
232 \$(AS) \$(ASFLAGS) \$(ASOUTFLAG)\$\@ $srcs
233EOF
234 }
235 return <<"EOF";
236$obj$depext: $deps
237 \$(CC) \$(CFLAGS) $ecflags$inc /Zs /showIncludes $srcs 2>&1 | \\
238 \$(PERL) -n << > $obj$depext
239chomp;
240s/^Note: including file: *//;
241\$\$collect{\$\$_} = 1;
242END { print '$obj$objext: ',join(" ", sort keys \%collect),"\\n" }
243<<KEEP
244$obj$objext: $obj$depext
245 \$(CC) \$(CFLAGS) $ecflags$incs -c \$(COUTFLAG)\$\@ @<<
246$srcs
247<<KEEP
248EOF
249 }
250
251 # On Unix, we build shlibs from static libs, so we're ignoring the
252 # object file array. We *know* this routine is only called when we've
253 # configure 'shared'.
254 sub libobj2shlib {
255 my %args = @_;
256 my $lib = $args{lib};
257 my $shlib = $args{shlib};
258 (my $mkdef_key = $lib) =~ s/^lib//i;
259 my $objs = join("\n", map { $_.$objext } @{$args{objs}});
260 my $linklibs = join("",
261 map { "\n$_" } compute_lib_depends(@{$args{deps}}));
262 my $deps = join(" ",
263 (map { $_.$objext } @{$args{objs}}),
264 compute_lib_depends(@{$args{deps}}));
265 my $ordinalsfile = defined($args{ordinals}) ? $args{ordinals}->[1] : "";
266 my $mkdef_pl = abs2rel(rel2abs(catfile($config{sourcedir},
267 "util", "mkdef.pl")),
268 rel2abs($config{builddir}));
269 my $target = shlib_import($lib);
270 return <<"EOF"
271$target: $deps $ordinalsfile
272 \$(PERL) $mkdef_pl "$mkdef_key" 32 > $shlib.def
2fe73036
RL
273 \$(LD) \$(LDFLAGS) \$(SHARED_LDFLAGS) \\
274 /implib:$target \$(LDOUTFLAG)$shlib$shlibext /def:$shlib.def @<<
7c0e1aa6
RL
275$objs$linklibs \$(EX_LIBS)
276<<
277EOF
278 }
279 sub obj2dso {
280 my %args = @_;
281 my $dso = $args{lib};
2fe73036 282 my $dso_n = basename($dso);
7c0e1aa6
RL
283 my $objs = join("\n", map { $_.$objext } @{$args{objs}});
284 my $linklibs = join("",
285 map { "\n$_" } compute_lib_depends(@{$args{deps}}));
286 my $deps = join(" ",
287 (map { $_.$objext } @{$args{objs}}),
288 compute_lib_depends(@{$args{deps}}));
289 return <<"EOF";
290$dso$dsoext: $deps
2fe73036
RL
291 \$(LD) \$(LDFLAGS) \$(DSO_LDFLAGS) \$(LDOUTFLAG)$dso$dsoext /def:<< @<<
292LIBRARY $dso_n
7c0e1aa6
RL
293EXPORTS
294 bind_engine @1
295 v_check @2
296<<
297$objs$linklibs \$(EX_LIBS)
298<<
299EOF
300 }
301 sub obj2lib {
b805b444
RL
302 # Because static libs and import libs are both named the same in native
303 # Windows, we can't have both. We skip the static lib in that case,
304 # as the shared libs are what we use anyway.
305 return "" unless $disabled{"shared"};
306
7c0e1aa6
RL
307 my %args = @_;
308 my $lib = $args{lib};
309 my $objs = join("\n", map { $_.$objext } @{$args{objs}});
310 my $deps = join(" ", map { $_.$objext } @{$args{objs}});
311 return <<"EOF";
312$lib$libext: $deps
313 \$(AR) \$(ARFLAGS) \$(AROUTFLAG)$lib$libext @<<
314$objs
315<<
316EOF
317 }
318 sub obj2bin {
319 my %args = @_;
320 my $bin = $args{bin};
321 my $objs = join("\n", map { $_.$objext } @{$args{objs}});
322 my $linklibs = join("",
323 map { "\n$_" } compute_lib_depends(@{$args{deps}}));
324 my $deps = join(" ",
325 (map { $_.$objext } @{$args{objs}}),
326 compute_lib_depends(@{$args{deps}}));
327 return <<"EOF";
328$bin$exeext: $deps
2fe73036 329 \$(LD) \$(LDFLAGS) \$(BIN_LDFLAGS) \$(LDOUTFLAG)$bin$exeext @<<
7c0e1aa6
RL
330$objs setargv.obj$linklibs \$(EX_LIBS)
331<<
332EOF
333 }
334 sub in2script {
335 my %args = @_;
336 my $script = $args{script};
337 my $sources = join(" ", @{$args{sources}});
338 my $dofile = abs2rel(rel2abs(catfile($config{sourcedir},
339 "util", "dofile.pl")),
340 rel2abs($config{builddir}));
341 return <<"EOF";
342$script: $sources
343 \$(PERL) "-I\$(BLDDIR)" -Mconfigdata "$dofile" \\
344 "-o$target{build_file}" $sources > "$script"
345EOF
346 }
347 "" # Important! This becomes part of the template result.
348-}