VirtualBox

source: vbox/trunk/src/libs/openssl-3.4.1/Configurations/unix-Makefile.tmpl

Last change on this file was 109052, checked in by vboxsync, 3 weeks ago

openssl-3.4.1: Applied our changes, regenerated files, added missing files and functions. This time with a three way merge. ​bugref:10890

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 81.7 KB
Line 
1##
2## Makefile for OpenSSL
3##
4## {- join("\n## ", @autowarntext) -}
5{-
6 use OpenSSL::Util;
7
8 our $makedep_scheme = $config{makedep_scheme};
9 our $makedepcmd = platform->makedepcmd();
10
11 sub windowsdll { $config{target} =~ /^(?:Cygwin|mingw)/ }
12
13 # Shared AIX support is special. We put libcrypto[64].so.ver into
14 # libcrypto.a and use libcrypto_a.a as static one, unless using
15 # shared_target style aix-solib. In that mode, create
16 # libcrypto.so as a link-import library that inserts runtime
17 # dependencies on libcrypto.so.ver, and the static library is
18 # named libcrypto.a.
19 sub sharedaix { !$disabled{shared} && $target{shared_target} =~ /^aix(?!-solib$)/ }
20 sub sharedaix_solib { !$disabled{shared} && $target{shared_target} =~ /^aix-solib$/ }
21
22 our $sover_dirname = platform->shlib_version_as_filename();
23
24 # This makes sure things get built in the order they need
25 # to. You're welcome.
26 sub dependmagic {
27 my $target = shift;
28 my $help = shift;
29
30 return "$target: build_generated ## $help\n\t\"\$(MAKE)\" depend && \"\$(MAKE)\" _$target\n_$target";
31 }
32
33 our $COLUMNS = $ENV{COLUMNS};
34 if ($COLUMNS =~ /^\d+$/) {
35 $COLUMNS = int($COLUMNS) - 2; # 2 to leave space for ending ' \'
36 } else {
37 $COLUMNS = 76;
38 }
39
40 sub fill_lines {
41 my $item_sep = shift; # string
42 my $line_length = shift; # number of chars
43
44 my @result = ();
45 my $resultpos = 0;
46
47 foreach (@_) {
48 my $fill_line = $result[$resultpos] // '';
49 my $newline =
50 ($fill_line eq '' ? '' : $fill_line . $item_sep) . $_;
51
52 if (length($newline) > $line_length) {
53 # If this is a single item and the intended result line
54 # is empty, we put it there anyway
55 if ($fill_line eq '') {
56 $result[$resultpos++] = $newline;
57 } else {
58 $result[++$resultpos] = $_;
59 }
60 } else {
61 $result[$resultpos] = $newline;
62 }
63 }
64 return @result;
65 }
66 '';
67-}
68PLATFORM={- $config{target} -}
69OPTIONS={- $config{options} -}
70CONFIGURE_ARGS=({- join(", ",quotify_l(@{$config{perlargv}})) -})
71SRCDIR={- $config{sourcedir} -}
72BLDDIR={- $config{builddir} -}
73FIPSKEY={- $config{FIPSKEY} -}
74
75VERSION={- "$config{full_version}" -}
76VERSION_NUMBER={- "$config{version}" -}
77MAJOR={- $config{major} -}
78MINOR={- $config{minor} -}
79SHLIB_VERSION_NUMBER={- $config{shlib_version} -}
80SHLIB_TARGET={- $target{shared_target} -}
81
82LIBS={- join(" \\\n" . ' ' x 5,
83 fill_lines(" ", $COLUMNS - 5,
84 map { platform->staticlib($_) // () }
85 @{$unified_info{libraries}})) -}
86SHLIBS={- join(" \\\n" . ' ' x 7,
87 fill_lines(" ", $COLUMNS - 7,
88 map { platform->sharedlib($_) // () }
89 @{$unified_info{libraries}})) -}
90SHLIB_INFO={- join(" \\\n" . ' ' x 11,
91 fill_lines(" ", $COLUMNS - 11,
92 map { my $x = platform->sharedlib($_);
93 my $y = platform->sharedlib_simple($_) // '';
94 my $z = platform->sharedlib_import($_) // '';
95 $x ? "\"$x;$y;$z\"" : () }
96 @{$unified_info{libraries}})) -}
97MODULES={- join(" \\\n" . ' ' x 8,
98 fill_lines(" ", $COLUMNS - 8,
99 map { platform->dso($_) }
100 # Drop all modules that are dependencies, they will
101 # be processed through their dependents
102 grep { my $x = $_;
103 !grep { grep { $_ eq $x } @$_ }
104 values %{$unified_info{depends}} }
105 @{$unified_info{modules}})) -}
106FIPSMODULE={- # We do some extra checking here, as there should be only one
107 use File::Basename;
108 our @fipsmodules =
109 grep { !$unified_info{attributes}->{modules}->{$_}->{noinst}
110 && $unified_info{attributes}->{modules}->{$_}->{fips} }
111 @{$unified_info{modules}};
112 die "More that one FIPS module" if scalar @fipsmodules > 1;
113 join(" ", map { platform->dso($_) } @fipsmodules) -}
114FIPSMODULENAME={- die "More that one FIPS module" if scalar @fipsmodules > 1;
115 join(" ", map { basename(platform->dso($_)) } @fipsmodules) -}
116
117PROGRAMS={- join(" \\\n" . ' ' x 9,
118 fill_lines(" ", $COLUMNS - 9,
119 map { platform->bin($_) }
120 @{$unified_info{programs}})) -}
121SCRIPTS={- join(" \\\n" . ' ' x 8,
122 fill_lines(" ", $COLUMNS - 8, @{$unified_info{scripts}})) -}
123{- output_off() if $disabled{makedepend}; "" -}
124DEPS={- join(" \\\n" . ' ' x 5,
125 fill_lines(" ", $COLUMNS - 5,
126 map { platform->isobj($_) ? platform->dep($_) : () }
127 grep { $unified_info{sources}->{$_}->[0] =~ /\.c$/ }
128 keys %{$unified_info{sources}})); -}
129{- output_on() if $disabled{makedepend}; "" -}
130GENERATED_MANDATORY={- join(" \\\n" . ' ' x 20,
131 fill_lines(" ", $COLUMNS - 20,
132 @{$unified_info{depends}->{""}})) -}
133GENERATED_PODS={- # common0.tmpl provides @generated
134 join(" \\\n" . ' ' x 15,
135 fill_lines(" ", $COLUMNS - 15,
136 map { my $x = $_;
137 (
138 grep {
139 $unified_info{attributes}->{depends}
140 ->{$x}->{$_}->{pod} // 0
141 }
142 keys %{$unified_info{attributes}->{depends}->{$x}}
143 ) ? $x : ();
144 }
145 @generated)) -}
146GENERATED={- # common0.tmpl provides @generated
147 join(" \\\n" . ' ' x 5,
148 fill_lines(" ", $COLUMNS - 5,
149 map { platform->convertext($_) } @generated )) -}
150
151INSTALL_LIBS={-
152 join(" \\\n" . ' ' x 13,
153 fill_lines(" ", $COLUMNS - 13,
154 map { platform->staticlib($_) // () }
155 grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} }
156 @{$unified_info{libraries}}))
157-}
158INSTALL_SHLIBS={-
159 join(" \\\n" . ' ' x 15,
160 fill_lines(" ", $COLUMNS - 15,
161 map { platform->sharedlib($_) // () }
162 grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} }
163 @{$unified_info{libraries}}))
164-}
165INSTALL_SHLIB_INFO={-
166 join(" \\\n" . ' ' x 19,
167 fill_lines(" ", $COLUMNS - 19,
168 map { my $x = platform->sharedlib($_);
169 my $y = platform->sharedlib_simple($_) // '';
170 my $z = platform->sharedlib_import($_) // '';
171 $x ? "\"$x;$y;$z\"" : () }
172 grep { !$unified_info{attributes}->{libraries}->{$_}->{noinst} }
173 @{$unified_info{libraries}}))
174-}
175INSTALL_ENGINES={-
176 join(" \\\n" . ' ' x 16,
177 fill_lines(" ", $COLUMNS - 16,
178 map { platform->dso($_) }
179 grep { !$unified_info{attributes}->{modules}->{$_}->{noinst}
180 && $unified_info{attributes}->{modules}->{$_}->{engine} }
181 @{$unified_info{modules}}))
182-}
183INSTALL_MODULES={-
184 join(" \\\n" . ' ' x 16,
185 fill_lines(" ", $COLUMNS - 16,
186 map { platform->dso($_) }
187 grep { !$unified_info{attributes}->{modules}->{$_}->{noinst}
188 && !$unified_info{attributes}->{modules}->{$_}->{engine}
189 && !$unified_info{attributes}->{modules}->{$_}->{fips} }
190 @{$unified_info{modules}}))
191-}
192INSTALL_FIPSMODULE={-
193 join(" \\\n" . ' ' x 16,
194 fill_lines(" ", $COLUMNS - 16,
195 map { platform->dso($_) }
196 grep { !$unified_info{attributes}->{modules}->{$_}->{noinst}
197 && $unified_info{attributes}->{modules}->{$_}->{fips} }
198 @{$unified_info{modules}}))
199-}
200INSTALL_FIPSMODULECONF=providers/fipsmodule.cnf
201INSTALL_PROGRAMS={-
202 join(" \\\n" . ' ' x 16,
203 fill_lines(" ", $COLUMNS - 16, map { platform->bin($_) }
204 grep { !$unified_info{attributes}->{programs}->{$_}->{noinst} }
205 @{$unified_info{programs}}))
206-}
207INSTALL_EXPORTERS_PKGCONFIG={-
208 join(" \\\n" . ' ' x 28,
209 fill_lines(" ", $COLUMNS - 28,
210 grep { $unified_info{attributes}->{generate}->{$_}->{exporter} eq 'pkg-config'}
211 sort keys %{$unified_info{generate}}))
212-}
213INSTALL_EXPORTERS_CMAKE={-
214 join(" \\\n" . ' ' x 24,
215 fill_lines(" ", $COLUMNS - 24,
216 grep { $unified_info{attributes}->{generate}->{$_}->{exporter} eq 'cmake'}
217 sort keys %{$unified_info{generate}}))
218-}
219BIN_SCRIPTS={-
220 join(" \\\n" . ' ' x 12,
221 fill_lines(" ", $COLUMNS - 12,
222 map { my $x = $unified_info{attributes}->{scripts}->{$_}->{linkname};
223 $x ? "$_:$x" : $_ }
224 grep { !$unified_info{attributes}->{scripts}->{$_}->{noinst}
225 && !$unified_info{attributes}->{scripts}->{$_}->{misc} }
226 @{$unified_info{scripts}}))
227-}
228MISC_SCRIPTS={-
229 join(" \\\n" . ' ' x 13,
230 fill_lines(" ", $COLUMNS - 13,
231 map { my $x = $unified_info{attributes}->{scripts}->{$_}->{linkname};
232 $x ? "$_:$x" : $_ }
233 grep { !$unified_info{attributes}->{scripts}->{$_}->{noinst}
234 && $unified_info{attributes}->{scripts}->{$_}->{misc} }
235 @{$unified_info{scripts}}))
236-}
237IMAGEDOCS1={-
238 join(" \\\n" . ' ' x 10,
239 fill_lines(" ", $COLUMNS - 10,
240 @{$unified_info{imagedocs}->{man1}})) -}
241IMAGEDOCS3={-
242 join(" \\\n" . ' ' x 10,
243 fill_lines(" ", $COLUMNS - 10,
244 @{$unified_info{imagedocs}->{man3}})) -}
245IMAGEDOCS5={-
246 join(" \\\n" . ' ' x 10,
247 fill_lines(" ", $COLUMNS - 10,
248 @{$unified_info{imagedocs}->{man5}})) -}
249IMAGEDOCS7={-
250 join(" \\\n" . ' ' x 10,
251 fill_lines(" ", $COLUMNS - 10,
252 @{$unified_info{imagedocs}->{man7}})) -}
253HTMLDOCS1={-
254 join(" \\\n" . ' ' x 10,
255 fill_lines(" ", $COLUMNS - 10,
256 @{$unified_info{htmldocs}->{man1}})) -}
257HTMLDOCS3={-
258 join(" \\\n" . ' ' x 10,
259 fill_lines(" ", $COLUMNS - 10,
260 @{$unified_info{htmldocs}->{man3}})) -}
261HTMLDOCS5={-
262 join(" \\\n" . ' ' x 10,
263 fill_lines(" ", $COLUMNS - 10,
264 @{$unified_info{htmldocs}->{man5}})) -}
265HTMLDOCS7={-
266 join(" \\\n" . ' ' x 10,
267 fill_lines(" ", $COLUMNS - 10,
268 @{$unified_info{htmldocs}->{man7}})) -}
269MANDOCS1={-
270 join(" \\\n" . ' ' x 9,
271 fill_lines(" ", $COLUMNS - 9,
272 @{$unified_info{mandocs}->{man1}})) -}
273MANDOCS3={-
274 join(" \\\n" . ' ' x 9,
275 fill_lines(" ", $COLUMNS - 9,
276 @{$unified_info{mandocs}->{man3}})) -}
277MANDOCS5={-
278 join(" \\\n" . ' ' x 9,
279 fill_lines(" ", $COLUMNS - 9,
280 @{$unified_info{mandocs}->{man5}})) -}
281MANDOCS7={-
282 join(" \\\n" . ' ' x 9,
283 fill_lines(" ", $COLUMNS - 9,
284 @{$unified_info{mandocs}->{man7}})) -}
285
286APPS_OPENSSL="{- use File::Spec::Functions;
287 catfile("apps","openssl") -}"
288
289# DESTDIR is for package builders so that they can configure for, say,
290# /usr/ and yet have everything installed to /tmp/somedir/usr/.
291# Normally it is left empty.
292DESTDIR=
293
294# Do not edit these manually. Use Configure with --prefix or --openssldir
295# to change this! Short explanation in the top comment in Configure
296INSTALLTOP={- # $prefix is used in the OPENSSLDIR perl snippet
297 #
298 our $prefix = $config{prefix} || "/usr/local";
299 $prefix -}
300OPENSSLDIR={- #
301 # The logic here is that if no --openssldir was given,
302 # OPENSSLDIR will get the value from $prefix plus "/ssl".
303 # If --openssldir was given and the value is an absolute
304 # path, OPENSSLDIR will get its value without change.
305 # If the value from --openssldir is a relative path,
306 # OPENSSLDIR will get $prefix with the --openssldir
307 # value appended as a subdirectory.
308 #
309 use File::Spec::Functions;
310 our $openssldir =
311 $config{openssldir} ?
312 (file_name_is_absolute($config{openssldir}) ?
313 $config{openssldir}
314 : catdir($prefix, $config{openssldir}))
315 : catdir($prefix, "ssl");
316 $openssldir -}
317LIBDIR={- our $libdir = $config{libdir};
318 unless ($libdir) {
319 $libdir = "lib$target{multilib}";
320 }
321 file_name_is_absolute($libdir) ? "" : $libdir -}
322# $(libdir) is chosen to be compatible with the GNU coding standards
323libdir={- file_name_is_absolute($libdir)
324 ? $libdir : '$(INSTALLTOP)/$(LIBDIR)' -}
325ENGINESDIR=$(libdir)/engines-{- $sover_dirname -}
326MODULESDIR=$(libdir)/ossl-modules
327
328# Convenience variable for those who want to set the rpath in shared
329# libraries and applications
330LIBRPATH=$(libdir)
331
332BINDIR={- our $bindir = $config{bindir};
333 unless ($bindir) {
334 $bindir = "bin$target{multibin}";
335 }
336 file_name_is_absolute($bindir) ? "" : $bindir -}
337bindir={- file_name_is_absolute($bindir)
338 ? $bindir : '$(INSTALLTOP)/$(BINDIR)' -}
339
340PKGCONFIGDIR=$(libdir)/pkgconfig
341CMAKECONFIGDIR=$(libdir)/cmake/OpenSSL
342
343MANDIR=$(INSTALLTOP)/share/man
344DOCDIR=$(INSTALLTOP)/share/doc/$(BASENAME)
345HTMLDIR=$(DOCDIR)/html
346
347# MANSUFFIX is for the benefit of anyone who may want to have a suffix
348# appended after the manpage file section number. "ssl" is popular,
349# resulting in files such as config.5ssl rather than config.5.
350MANSUFFIX=ossl
351HTMLSUFFIX=html
352
353# For "optional" echo messages, to get "real" silence
354ECHO = echo
355
356##### User defined commands and flags ################################
357
358# We let the C compiler driver to take care of .s files. This is done in
359# order to be excused from maintaining a separate set of architecture
360# dependent assembler flags. E.g. if you throw -mcpu=ultrasparc at SPARC
361# gcc, then the driver will automatically translate it to -xarch=v8plus
362# and pass it down to assembler. In any case, we do not define AS or
363# ASFLAGS for this reason.
364
365CROSS_COMPILE={- $config{CROSS_COMPILE} -}
366CC=$(CROSS_COMPILE){- $config{CC} -}
367CXX={- $config{CXX} ? "\$(CROSS_COMPILE)$config{CXX}" : '' -}
368CPPFLAGS={- our $cppflags1 = join(" ",
369 (map { "-D".$_} @{$config{CPPDEFINES}}),
370 (map { "-I".$_} @{$config{CPPINCLUDES}}),
371 @{$config{CPPFLAGS}}) -}
372CFLAGS={- join(' ', @{$config{CFLAGS}}) -}
373CXXFLAGS={- join(' ', @{$config{CXXFLAGS}}) -}
374LDFLAGS= {- join(' ', @{$config{LDFLAGS}}) -}
375EX_LIBS= {- join(' ', @{$config{LDLIBS}}) -}
376OBJCOPY={- $config{OBJCOPY} -}
377
378MAKEDEPEND={- $config{makedepcmd} -}
379
380PERL={- $config{PERL} -}
381
382AR=$(CROSS_COMPILE){- $config{AR} -}
383ARFLAGS= {- join(' ', @{$config{ARFLAGS}}) -}
384RANLIB={- $config{RANLIB} ? "\$(CROSS_COMPILE)$config{RANLIB}" : "true"; -}
385RC= $(CROSS_COMPILE){- $config{RC} -}
386RCFLAGS={- join(' ', @{$config{RCFLAGS}}) -} {- $target{shared_rcflag} -}
387
388RM= rm -f
389RMDIR= rmdir
390TAR= {- $target{TAR} || "tar" -}
391TARFLAGS= {- $target{TARFLAGS} -}
392
393BASENAME= openssl
394NAME= $(BASENAME)-$(VERSION)
395# Relative to $(SRCDIR)
396TARFILE= ../$(NAME).tar
397
398##### Project flags ##################################################
399
400# Variables starting with CNF_ are common variables for all product types
401
402CNF_CPPFLAGS={- our $cppflags2 =
403 join(' ', $target{cppflags} || (),
404 (map { "-D".$_} @{$target{defines}},
405 @{$config{defines}}),
406 (map { "-I".$_} @{$target{includes}},
407 @{$config{includes}}),
408 @{$config{cppflags}}) -}
409CNF_CFLAGS={- join(' ', $target{cflags} || (),
410 @{$config{cflags}}) -}
411CNF_CXXFLAGS={- join(' ', $target{cxxflags} || (),
412 @{$config{cxxflags}}) -}
413CNF_LDFLAGS={- join(' ', $target{lflags} || (),
414 @{$config{lflags}}) -}
415CNF_EX_LIBS={- join(' ', $target{ex_libs} || (),
416 @{$config{ex_libs}}) -}
417
418# Variables starting with LIB_ are used to build library object files
419# and shared libraries.
420# Variables starting with DSO_ are used to build DSOs and their object files.
421# Variables starting with BIN_ are used to build programs and their object
422# files.
423
424LIB_CPPFLAGS={- our $lib_cppflags =
425 join(' ', $target{lib_cppflags} || (),
426 $target{shared_cppflag} || (),
427 (map { '-D'.$_ }
428 @{$target{lib_defines} || ()},
429 @{$target{shared_defines} || ()},
430 @{$config{lib_defines} || ()},
431 @{$config{shared_defines} || ()}),
432 (map { '-I'.quotify1($_) }
433 @{$target{lib_includes}},
434 @{$target{shared_includes}},
435 @{$config{lib_includes}},
436 @{$config{shared_includes}}),
437 @{$config{lib_cppflags}},
438 @{$config{shared_cppflag}});
439 join(' ', $lib_cppflags,
440 (map { '-D'.$_ }
441 'OPENSSLDIR="\"$(OPENSSLDIR)\""',
442 'ENGINESDIR="\"$(ENGINESDIR)\""',
443 'MODULESDIR="\"$(MODULESDIR)\""'),
444 '$(CNF_CPPFLAGS)', '$(CPPFLAGS)') -}
445LIB_CFLAGS={- join(' ', $target{lib_cflags} || (),
446 $target{shared_cflag} || (),
447 @{$config{lib_cflags}},
448 @{$config{shared_cflag}},
449 '$(CNF_CFLAGS)', '$(CFLAGS)') -}
450LIB_CXXFLAGS={- join(' ', $target{lib_cxxflags} || (),
451 $target{shared_cxxflag} || (),
452 @{$config{lib_cxxflags}},
453 @{$config{shared_cxxflag}},
454 '$(CNF_CXXFLAGS)', '$(CXXFLAGS)') -}
455LIB_LDFLAGS={- join(' ', $target{shared_ldflag} || (),
456 $config{shared_ldflag} || (),
457 '$(CNF_LDFLAGS)', '$(LDFLAGS)') -}
458LIB_EX_LIBS=$(CNF_EX_LIBS) $(EX_LIBS)
459DSO_CPPFLAGS={- join(' ', $target{dso_cppflags} || (),
460 $target{module_cppflags} || (),
461 (map { '-D'.$_ }
462 @{$target{dso_defines}},
463 @{$target{module_defines}},
464 @{$config{dso_defines} || ()},
465 @{$config{module_defines} || ()}),
466 (map { '-I'.quotify1($_) }
467 @{$target{dso_includes}},
468 @{$target{module_includes}},
469 @{$config{dso_includes}},
470 @{$config{module_includes}}),
471 @{$config{dso_cppflags}},
472 @{$config{module_cppflags}},
473 '$(CNF_CPPFLAGS)', '$(CPPFLAGS)') -}
474DSO_CFLAGS={- join(' ', $target{dso_cflags} || (),
475 $target{module_cflags} || (),
476 @{$config{dso_cflags}},
477 @{$config{module_cflags}},
478 '$(CNF_CFLAGS)', '$(CFLAGS)') -}
479DSO_CXXFLAGS={- join(' ', $target{dso_cxxflags} || (),
480 $target{module_cxxflags} || (),
481 @{$config{dso_cxxflags}},
482 @{$config{module_cxxflag}},
483 '$(CNF_CXXFLAGS)', '$(CXXFLAGS)') -}
484DSO_LDFLAGS={- join(' ', $target{dso_ldflags} || (),
485 $target{module_ldflags} || (),
486 @{$config{dso_ldflags}},
487 @{$config{module_ldflags}},
488 '$(CNF_LDFLAGS)', '$(LDFLAGS)') -}
489DSO_EX_LIBS=$(CNF_EX_LIBS) $(EX_LIBS)
490BIN_CPPFLAGS={- join(' ', $target{bin_cppflags} || (),
491 (map { '-D'.$_ } @{$config{bin_defines} || ()}),
492 @{$config{bin_cppflags}},
493 '$(CNF_CPPFLAGS)', '$(CPPFLAGS)') -}
494BIN_CFLAGS={- join(' ', $target{bin_cflags} || (),
495 @{$config{bin_cflags}},
496 '$(CNF_CFLAGS)', '$(CFLAGS)') -}
497BIN_CXXFLAGS={- join(' ', $target{bin_cxxflags} || (),
498 @{$config{bin_cxxflags}},
499 '$(CNF_CXXFLAGS)', '$(CXXFLAGS)') -}
500BIN_LDFLAGS={- join(' ', $target{bin_lflags} || (),
501 @{$config{bin_lflags}},
502 '$(CNF_LDFLAGS)', '$(LDFLAGS)') -}
503BIN_EX_LIBS=$(CNF_EX_LIBS) $(EX_LIBS)
504
505# CPPFLAGS_Q is used for one thing only: to build up buildinf.h
506CPPFLAGS_Q={- $cppflags1 =~ s|([\\"])|\\$1|g;
507 $cppflags2 =~ s|([\\"])|\\$1|g;
508 $lib_cppflags =~ s|([\\"])|\\$1|g;
509 join(' ', $lib_cppflags || (), $cppflags2 || (),
510 $cppflags1 || ()) -}
511
512PERLASM_SCHEME= {- $target{perlasm_scheme} -}
513
514# For x86 assembler: Set PROCESSOR to 386 if you want to support
515# the 80386.
516PROCESSOR= {- $config{processor} -}
517
518# We want error [and other] messages in English. Trouble is that make(1)
519# doesn't pass macros down as environment variables unless there already
520# was corresponding variable originally set. In other words we can only
521# reassign environment variables, but not set new ones, not in portable
522# manner that is. That's why we reassign several, just to be sure...
523LC_ALL=C
524LC_MESSAGES=C
525LANG=C
526
527# The main targets ###################################################
528
529##@ Software
530
531{- dependmagic('build_sw', 'Build all the software (default target)'); -}: build_libs_nodep build_modules_nodep build_programs_nodep link-utils
532{- dependmagic('build_libs', 'Build the libraries libssl and libcrypto'); -}: build_libs_nodep
533{- dependmagic('build_modules', 'Build the modules (i.e. providers and engines)'); -}: build_modules_nodep
534{- dependmagic('build_programs', 'Build the openssl executables and scripts'); -}: build_programs_nodep
535
536all: build_sw {- "build_docs" if !$disabled{docs}; -} ## Build software and documentation
537debuginfo: $(SHLIBS)
538 @set -e; for i in $(SHLIBS); do \
539 $(OBJCOPY) --only-keep-debug $$i $$i.debug; \
540 $(OBJCOPY) --strip-debug --add-gnu-debuglink=$$i.debug $$i; \
541 done;
542
543##@ Documentation
544build_generated_pods: $(GENERATED_PODS)
545build_docs: build_man_docs build_html_docs ## Create documentation
546build_man_docs: $(MANDOCS1) $(MANDOCS3) $(MANDOCS5) $(MANDOCS7) ## Create manpages
547build_html_docs: $(HTMLDOCS1) $(HTMLDOCS3) $(HTMLDOCS5) $(HTMLDOCS7) ## Create HTML documentation
548
549build_generated: $(GENERATED_MANDATORY)
550build_libs_nodep: $(LIBS) {- join(" ",map { platform->sharedlib_simple($_) // platform->sharedlib_import($_) // platform->sharedlib($_) // () } @{$unified_info{libraries}}) -}
551build_modules_nodep: $(MODULES)
552build_programs_nodep: $(PROGRAMS) $(SCRIPTS)
553
554# Kept around for backward compatibility
555build_apps build_tests: build_programs
556
557# Convenience target to prebuild all generated files, not just the mandatory
558# ones
559build_all_generated: $(GENERATED_MANDATORY) $(GENERATED) build_docs
560 @ : {- output_off() if $disabled{makedepend}; "" -}
561 @echo "Warning: consider configuring with no-makedepend, because if"
562 @echo " target system doesn't have $(PERL),"
563 @echo " then make will fail..."
564 @ : {- output_on() if $disabled{makedepend}; "" -}
565
566##@ Help
567.PHONY: help
568help: ## Show this help screen
569 @$(PERL) $(SRCDIR)/util/help.pl $(BLDDIR)/Makefile
570
571##@ Testing
572test: tests ## Run tests (alias of "tests")
573{- dependmagic('tests', 'Run tests'); -}: build_programs_nodep build_modules_nodep link-utils
574 "$(MAKE)" run_tests
575run_tests: FORCE
576 @ : {- output_off() if $disabled{tests}; "" -}
577 ( SRCTOP=$(SRCDIR) \
578 BLDTOP=$(BLDDIR) \
579 PERL="$(PERL)" \
580 FIPSKEY="$(FIPSKEY)" \
581 EXE_EXT={- platform->binext() -} \
582 $(PERL) $(SRCDIR)/test/run_tests.pl $(TESTS) )
583 @ : {- if ($disabled{tests}) { output_on(); } else { output_off(); } "" -}
584 @echo "Tests are not supported with your chosen Configure options"
585 @ : {- output_on() if !$disabled{tests}; "" -}
586
587list-tests: ## List available tests that can be invoked via "make test TESTS=<name>"
588 @ : {- output_off() if $disabled{tests}; "" -}
589 "$(MAKE)" run_tests TESTS=list
590 @ : {- if ($disabled{tests}) { output_on(); } else { output_off(); } "" -}
591 @echo "Tests are not supported with your chosen Configure options"
592 @ : {- output_on() if !$disabled{tests}; "" -}
593
594##@ Workspace cleaning
595
596libclean:
597 @set -e; for s in $(SHLIB_INFO); do \
598 if [ "$$s" = ";" ]; then continue; fi; \
599 s1=`echo "$$s" | cut -f1 -d";"`; \
600 s2=`echo "$$s" | cut -f2 -d";"`; \
601 s3=`echo "$$s" | cut -f3 -d";"`; \
602 $(ECHO) $(RM) $$s1; {- output_off() unless windowsdll(); "" -}\
603 $(RM) apps/$$s1; \
604 $(RM) test/$$s1; \
605 $(RM) fuzz/$$s1; {- output_on() unless windowsdll(); "" -}\
606 $(RM) $$s1; \
607 if [ "$$s2" != "" ]; then \
608 $(ECHO) $(RM) $$s2; \
609 $(RM) $$s2; \
610 fi; \
611 if [ "$$s3" != "" ]; then \
612 $(ECHO) $(RM) $$s3; \
613 $(RM) $$s3; \
614 fi; \
615 done
616 $(RM) $(LIBS)
617 $(RM) *{- platform->defext() -}
618
619clean: libclean ## Clean the workspace, keep the configuration
620 $(RM) $(HTMLDOCS1)
621 $(RM) $(HTMLDOCS3)
622 $(RM) $(HTMLDOCS5)
623 $(RM) $(HTMLDOCS7)
624 $(RM) $(MANDOCS1)
625 $(RM) $(MANDOCS3)
626 $(RM) $(MANDOCS5)
627 $(RM) $(MANDOCS7)
628 $(RM) $(PROGRAMS) $(TESTPROGS) $(MODULES) $(FIPSMODULE) $(SCRIPTS)
629 $(RM) $(GENERATED_MANDATORY) $(GENERATED)
630 -find . -name '*{- platform->depext() -}' \! -name '.*' \! -type d -exec $(RM) {} \;
631 -find . -name '*{- platform->objext() -}' \! -name '.*' \! -type d -exec $(RM) {} \;
632 $(RM) core
633 $(RM) tags TAGS doc-nits md-nits
634 $(RM) -r test/test-runs
635 $(RM) providers/fips*.new
636 -find . -type l \! -name '.*' -exec $(RM) {} \;
637
638distclean: clean ## Clean and remove the configuration
639 $(RM) include/openssl/configuration.h
640 $(RM) configdata.pm
641 $(RM) Makefile
642
643# We check if any depfile is newer than Makefile and decide to
644# concatenate only if that is true.
645depend: Makefile
646 @: {- output_off() if $disabled{makedepend}; "" -}
647 @$(PERL) $(SRCDIR)/util/add-depends.pl "{- $makedep_scheme -}"
648 @: {- output_on() if $disabled{makedepend}; "" -}
649
650# Install helper targets #############################################
651##@ Installation
652
653install: install_sw install_ssldirs {- "install_docs" if !$disabled{docs}; -} {- $disabled{fips} ? "" : "install_fips" -} ## Install software and documentation, create OpenSSL directories
654
655uninstall: {- "uninstall_docs" if !$disabled{docs}; -} uninstall_sw {- $disabled{fips} ? "" : "uninstall_fips" -} ## Uninstall software and documentation
656
657install_sw: install_dev install_engines install_modules install_runtime ## Install just the software and libraries
658
659uninstall_sw: uninstall_runtime uninstall_modules uninstall_engines uninstall_dev ## Uninstall the software and libraries
660
661install_docs: install_man_docs install_html_docs ## Install manpages and HTML documentation
662
663uninstall_docs: uninstall_man_docs uninstall_html_docs ## Uninstall manpages and HTML documentation
664 $(RM) -r "$(DESTDIR)$(DOCDIR)"
665
666{- output_off() if $disabled{fips}; "" -}
667install_fips: build_sw $(INSTALL_FIPSMODULECONF)
668 @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1)
669 @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(MODULESDIR)"
670 @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(OPENSSLDIR)"
671 @$(ECHO) "*** Installing FIPS module"
672 @$(ECHO) "install $(INSTALL_FIPSMODULE) -> $(DESTDIR)$(MODULESDIR)/$(FIPSMODULENAME)"
673 @cp "$(INSTALL_FIPSMODULE)" "$(DESTDIR)$(MODULESDIR)/$(FIPSMODULENAME).new"
674 @chmod 755 "$(DESTDIR)$(MODULESDIR)/$(FIPSMODULENAME).new"
675 @mv -f "$(DESTDIR)$(MODULESDIR)/$(FIPSMODULENAME).new" \
676 "$(DESTDIR)$(MODULESDIR)/$(FIPSMODULENAME)"
677 @$(ECHO) "*** Installing FIPS module configuration"
678 @$(ECHO) "install $(INSTALL_FIPSMODULECONF) -> $(DESTDIR)$(OPENSSLDIR)/fipsmodule.cnf"
679 @cp $(INSTALL_FIPSMODULECONF) "$(DESTDIR)$(OPENSSLDIR)/fipsmodule.cnf"
680
681uninstall_fips:
682 @$(ECHO) "*** Uninstalling FIPS module configuration"
683 $(RM) "$(DESTDIR)$(OPENSSLDIR)/fipsmodule.cnf"
684 @$(ECHO) "*** Uninstalling FIPS module"
685 $(RM) "$(DESTDIR)$(MODULESDIR)/$(FIPSMODULENAME)"
686{- if ($disabled{fips}) { output_on(); } else { output_off(); } "" -}
687install_fips:
688 @$(ECHO) "The 'install_fips' target requires the 'enable-fips' option"
689
690uninstall_fips:
691 @$(ECHO) "The 'uninstall_fips' target requires the 'enable-fips' option"
692{- output_on() if !$disabled{fips}; "" -}
693
694
695install_ssldirs:
696 @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(OPENSSLDIR)/certs"
697 @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(OPENSSLDIR)/private"
698 @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(OPENSSLDIR)/misc"
699 @set -e; for x in dummy $(MISC_SCRIPTS); do \
700 if [ "$$x" = "dummy" ]; then continue; fi; \
701 x1=`echo "$$x" | cut -f1 -d:`; \
702 x2=`echo "$$x" | cut -f2 -d:`; \
703 fn=`basename $$x1`; \
704 $(ECHO) "install $$x1 -> $(DESTDIR)$(OPENSSLDIR)/misc/$$fn"; \
705 cp $$x1 "$(DESTDIR)$(OPENSSLDIR)/misc/$$fn.new"; \
706 chmod 755 "$(DESTDIR)$(OPENSSLDIR)/misc/$$fn.new"; \
707 mv -f "$(DESTDIR)$(OPENSSLDIR)/misc/$$fn.new" \
708 "$(DESTDIR)$(OPENSSLDIR)/misc/$$fn"; \
709 if [ "$$x1" != "$$x2" ]; then \
710 ln=`basename "$$x2"`; \
711 : {- output_off() unless windowsdll(); "" -}; \
712 $(ECHO) "copy $(DESTDIR)$(OPENSSLDIR)/misc/$$ln -> $(DESTDIR)$(OPENSSLDIR)/misc/$$fn"; \
713 cp "$(DESTDIR)$(OPENSSLDIR)/misc/$$fn" "$(DESTDIR)$(OPENSSLDIR)/misc/$$ln"; \
714 : {- output_on() unless windowsdll();
715 output_off() if windowsdll(); "" -}; \
716 $(ECHO) "link $(DESTDIR)$(OPENSSLDIR)/misc/$$ln -> $(DESTDIR)$(OPENSSLDIR)/misc/$$fn"; \
717 ln -sf $$fn "$(DESTDIR)$(OPENSSLDIR)/misc/$$ln"; \
718 : {- output_on() if windowsdll(); "" -}; \
719 fi; \
720 done
721 @$(ECHO) "install $(SRCDIR)/apps/openssl.cnf -> $(DESTDIR)$(OPENSSLDIR)/openssl.cnf.dist"
722 @cp $(SRCDIR)/apps/openssl.cnf "$(DESTDIR)$(OPENSSLDIR)/openssl.cnf.new"
723 @chmod 644 "$(DESTDIR)$(OPENSSLDIR)/openssl.cnf.new"
724 @mv -f "$(DESTDIR)$(OPENSSLDIR)/openssl.cnf.new" "$(DESTDIR)$(OPENSSLDIR)/openssl.cnf.dist"
725 @if [ ! -f "$(DESTDIR)$(OPENSSLDIR)/openssl.cnf" ]; then \
726 $(ECHO) "install $(SRCDIR)/apps/openssl.cnf -> $(DESTDIR)$(OPENSSLDIR)/openssl.cnf"; \
727 cp $(SRCDIR)/apps/openssl.cnf "$(DESTDIR)$(OPENSSLDIR)/openssl.cnf"; \
728 chmod 644 "$(DESTDIR)$(OPENSSLDIR)/openssl.cnf"; \
729 fi
730 @$(ECHO) "install $(SRCDIR)/apps/ct_log_list.cnf -> $(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf.dist"
731 @cp $(SRCDIR)/apps/ct_log_list.cnf "$(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf.new"
732 @chmod 644 "$(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf.new"
733 @mv -f "$(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf.new" "$(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf.dist"
734 @if [ ! -f "$(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf" ]; then \
735 $(ECHO) "install $(SRCDIR)/apps/ct_log_list.cnf -> $(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf"; \
736 cp $(SRCDIR)/apps/ct_log_list.cnf "$(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf"; \
737 chmod 644 "$(DESTDIR)$(OPENSSLDIR)/ct_log_list.cnf"; \
738 fi
739
740install_dev: install_runtime_libs
741 @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1)
742 @$(ECHO) "*** Installing development files"
743 @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(INSTALLTOP)/include/openssl"
744 @ : {- output_off() if $disabled{uplink}; "" -}
745 @$(ECHO) "install $(SRCDIR)/ms/applink.c -> $(DESTDIR)$(INSTALLTOP)/include/openssl/applink.c"
746 @cp $(SRCDIR)/ms/applink.c "$(DESTDIR)$(INSTALLTOP)/include/openssl/applink.c"
747 @chmod 644 "$(DESTDIR)$(INSTALLTOP)/include/openssl/applink.c"
748 @ : {- output_on() if $disabled{uplink}; "" -}
749 @set -e; for i in $(SRCDIR)/include/openssl/*.h \
750 $(BLDDIR)/include/openssl/*.h; do \
751 fn=`basename $$i`; \
752 $(ECHO) "install $$i -> $(DESTDIR)$(INSTALLTOP)/include/openssl/$$fn"; \
753 cp $$i "$(DESTDIR)$(INSTALLTOP)/include/openssl/$$fn"; \
754 chmod 644 "$(DESTDIR)$(INSTALLTOP)/include/openssl/$$fn"; \
755 done
756 @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(libdir)"
757 @set -e; for l in $(INSTALL_LIBS); do \
758 fn=`basename $$l`; \
759 $(ECHO) "install $$l -> $(DESTDIR)$(libdir)/$$fn"; \
760 cp $$l "$(DESTDIR)$(libdir)/$$fn.new"; \
761 $(RANLIB) "$(DESTDIR)$(libdir)/$$fn.new"; \
762 chmod 644 "$(DESTDIR)$(libdir)/$$fn.new"; \
763 mv -f "$(DESTDIR)$(libdir)/$$fn.new" \
764 "$(DESTDIR)$(libdir)/$$fn"; \
765 done
766 @ : {- output_off() if $disabled{shared}; "" -}
767 @set -e; for s in $(INSTALL_SHLIB_INFO); do \
768 s1=`echo "$$s" | cut -f1 -d";"`; \
769 s2=`echo "$$s" | cut -f2 -d";"`; \
770 s3=`echo "$$s" | cut -f3 -d";"`; \
771 fn1=`basename "$$s1"`; \
772 fn2=`basename "$$s2"`; \
773 fn3=`basename "$$s3"`; \
774 : {- output_off(); output_on() unless windowsdll() or sharedaix() or sharedaix_solib(); "" -}; \
775 if [ "$$fn2" != "" ]; then \
776 $(ECHO) "link $(DESTDIR)$(libdir)/$$fn2 -> $(DESTDIR)$(libdir)/$$fn1"; \
777 ln -sf $$fn1 "$(DESTDIR)$(libdir)/$$fn2"; \
778 fi; \
779 : {- output_off() unless windowsdll() or sharedaix() or sharedaix_solib(); output_on() if windowsdll() or sharedaix_solib(); "" -}; \
780 if [ "$$fn3" != "" ]; then \
781 $(ECHO) "install $$s3 -> $(DESTDIR)$(libdir)/$$fn3"; \
782 cp $$s3 "$(DESTDIR)$(libdir)/$$fn3.new"; \
783 chmod 755 "$(DESTDIR)$(libdir)/$$fn3.new"; \
784 mv -f "$(DESTDIR)$(libdir)/$$fn3.new" \
785 "$(DESTDIR)$(libdir)/$$fn3"; \
786 fi; \
787 : {- output_off() if windowsdll() or sharedaix_solib(); output_on() if sharedaix(); "" -}; \
788 a="$(DESTDIR)$(libdir)/$$fn2"; \
789 $(ECHO) "install $$s1 -> $$a"; \
790 if [ -f $$a ]; then ( trap "rm -rf /tmp/ar.$$$$" INT 0; \
791 mkdir /tmp/ar.$$$$; ( cd /tmp/ar.$$$$; \
792 cp -f $$a $$a.new; \
793 for so in `$(AR) t $$a`; do \
794 $(AR) x $$a $$so; \
795 chmod u+w $$so; \
796 strip -X32_64 -e $$so; \
797 $(AR) r $$a.new $$so; \
798 done; \
799 )); fi; \
800 $(AR) r $$a.new $$s1; \
801 mv -f $$a.new $$a; \
802 : {- output_off() if sharedaix(); output_on(); "" -}; \
803 done
804 @ : {- output_on() if $disabled{shared}; "" -}
805 @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(PKGCONFIGDIR)"
806 @for e in $(INSTALL_EXPORTERS_PKGCONFIG); do \
807 fn=`basename $$e`; \
808 $(ECHO) "install $$e -> $(DESTDIR)$(PKGCONFIGDIR)/$$fn"; \
809 cp $$e "$(DESTDIR)$(PKGCONFIGDIR)/$$fn"; \
810 chmod 644 "$(DESTDIR)$(PKGCONFIGDIR)/$$fn"; \
811 done
812 @$(PERL) $(SRCDIR)/util/mkdir-p.pl $(DESTDIR)$(CMAKECONFIGDIR)
813 @for e in $(INSTALL_EXPORTERS_CMAKE); do \
814 fn=`basename $$e`; \
815 $(ECHO) "install $$e -> $(DESTDIR)$(CMAKECONFIGDIR)/$$fn"; \
816 cp $$e $(DESTDIR)$(CMAKECONFIGDIR)/$$fn; \
817 chmod 644 $(DESTDIR)$(CMAKECONFIGDIR)/$$fn; \
818 done
819
820uninstall_dev: uninstall_runtime_libs
821 @$(ECHO) "*** Uninstalling development files"
822 @ : {- output_off() if $disabled{uplink}; "" -}
823 @$(ECHO) "$(RM) $(DESTDIR)$(INSTALLTOP)/include/openssl/applink.c"
824 @$(RM) "$(DESTDIR)$(INSTALLTOP)/include/openssl/applink.c"
825 @ : {- output_on() if $disabled{uplink}; "" -}
826 @set -e; for i in $(SRCDIR)/include/openssl/*.h \
827 $(BLDDIR)/include/openssl/*.h; do \
828 fn=`basename $$i`; \
829 $(ECHO) "$(RM) $(DESTDIR)$(INSTALLTOP)/include/openssl/$$fn"; \
830 $(RM) "$(DESTDIR)$(INSTALLTOP)/include/openssl/$$fn"; \
831 done
832 -$(RMDIR) "$(DESTDIR)$(INSTALLTOP)/include/openssl"
833 -$(RMDIR) "$(DESTDIR)$(INSTALLTOP)/include"
834 @set -e; for l in $(INSTALL_LIBS); do \
835 fn=`basename $$l`; \
836 $(ECHO) "$(RM) $(DESTDIR)$(libdir)/$$fn"; \
837 $(RM) "$(DESTDIR)$(libdir)/$$fn"; \
838 done
839 @ : {- output_off() if $disabled{shared}; "" -}
840 @set -e; for s in $(INSTALL_SHLIB_INFO); do \
841 s1=`echo "$$s" | cut -f1 -d";"`; \
842 s2=`echo "$$s" | cut -f2 -d";"`; \
843 s3=`echo "$$s" | cut -f3 -d";"`; \
844 fn1=`basename "$$s1"`; \
845 fn2=`basename "$$s2"`; \
846 fn3=`basename "$$s3"`; \
847 : {- output_off() if windowsdll(); "" -}; \
848 $(ECHO) "$(RM) $(DESTDIR)$(libdir)/$$fn1"; \
849 $(RM) "$(DESTDIR)$(libdir)/$$fn1"; \
850 if [ -n "$$fn2" ]; then \
851 $(ECHO) "$(RM) $(DESTDIR)$(libdir)/$$fn2"; \
852 $(RM) "$(DESTDIR)$(libdir)/$$fn2"; \
853 fi; \
854 : {- output_on() if windowsdll(); "" -}{- output_off() unless windowsdll(); "" -}; \
855 if [ -n "$$fn3" ]; then \
856 $(ECHO) "$(RM) $(DESTDIR)$(libdir)/$$fn3"; \
857 $(RM) "$(DESTDIR)$(libdir)/$$fn3"; \
858 fi; \
859 : {- output_on() unless windowsdll(); "" -}; \
860 done
861 @ : {- output_on() if $disabled{shared}; "" -}
862 @for e in $(INSTALL_EXPORTERS_PKGCONFIG); do \
863 fn=`basename "$$e"`; \
864 $(RM) "$(DESTDIR)$(PKGCONFIGDIR)/$$fn"; \
865 done
866 @for e in $(INSTALL_EXPORTERS_CMAKE); do \
867 fn=`basename "$$e"`; \
868 $(RM) "$(DESTDIR)$(CMAKECONFIGDIR)/$$fn"; \
869 done
870 -$(RMDIR) "$(DESTDIR)$(PKGCONFIGDIR)"
871 -$(RMDIR) "$(DESTDIR)$(CMAKECONFIGDIR)"
872 -$(RMDIR) "$(DESTDIR)$(libdir)"
873
874_install_modules_deps: install_runtime_libs build_modules
875
876install_engines: _install_modules_deps
877 @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1)
878 @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(ENGINESDIR)/"
879 @$(ECHO) "*** Installing engines"
880 @set -e; for e in dummy $(INSTALL_ENGINES); do \
881 if [ "$$e" = "dummy" ]; then continue; fi; \
882 fn=`basename $$e`; \
883 $(ECHO) "install $$e -> $(DESTDIR)$(ENGINESDIR)/$$fn"; \
884 cp $$e "$(DESTDIR)$(ENGINESDIR)/$$fn.new"; \
885 chmod 755 "$(DESTDIR)$(ENGINESDIR)/$$fn.new"; \
886 mv -f "$(DESTDIR)$(ENGINESDIR)/$$fn.new" \
887 "$(DESTDIR)$(ENGINESDIR)/$$fn"; \
888 done
889
890uninstall_engines:
891 @$(ECHO) "*** Uninstalling engines"
892 @set -e; for e in dummy $(INSTALL_ENGINES); do \
893 if [ "$$e" = "dummy" ]; then continue; fi; \
894 fn=`basename $$e`; \
895 $(ECHO) "$(RM) $(DESTDIR)$(ENGINESDIR)/$$fn"; \
896 $(RM) "$(DESTDIR)$(ENGINESDIR)/$$fn"; \
897 done
898 -$(RMDIR) "$(DESTDIR)$(ENGINESDIR)"
899
900install_modules: _install_modules_deps
901 @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1)
902 @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(MODULESDIR)/"
903 @$(ECHO) "*** Installing modules"
904 @set -e; for e in dummy $(INSTALL_MODULES); do \
905 if [ "$$e" = "dummy" ]; then continue; fi; \
906 fn=`basename $$e`; \
907 $(ECHO) "install $$e -> $(DESTDIR)$(MODULESDIR)/$$fn"; \
908 cp $$e "$(DESTDIR)$(MODULESDIR)/$$fn.new"; \
909 chmod 755 "$(DESTDIR)$(MODULESDIR)/$$fn.new"; \
910 mv -f "$(DESTDIR)$(MODULESDIR)/$$fn.new" \
911 "$(DESTDIR)$(MODULESDIR)/$$fn"; \
912 done
913
914uninstall_modules:
915 @$(ECHO) "*** Uninstalling modules"
916 @set -e; for e in dummy $(INSTALL_MODULES); do \
917 if [ "$$e" = "dummy" ]; then continue; fi; \
918 fn=`basename $$e`; \
919 $(ECHO) "$(RM) $(DESTDIR)$(MODULESDIR)/$$fn"; \
920 $(RM) "$(DESTDIR)$(MODULESDIR)/$$fn"; \
921 done
922 -$(RMDIR) "$(DESTDIR)$(MODULESDIR)"
923
924install_runtime: install_programs
925
926install_runtime_libs: build_libs
927 @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1)
928 @ : {- output_off() if windowsdll(); "" -}
929 @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(libdir)"
930 @ : {- output_on() if windowsdll(); output_off() unless windowsdll(); "" -}
931 @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(bindir)/"
932 @ : {- output_on() unless windowsdll(); "" -}
933 @$(ECHO) "*** Installing runtime libraries"
934 @set -e; for s in dummy $(INSTALL_SHLIBS); do \
935 if [ "$$s" = "dummy" ]; then continue; fi; \
936 fn=`basename $$s`; \
937 : {- output_off() unless windowsdll(); "" -}; \
938 $(ECHO) "install $$s -> $(DESTDIR)$(bindir)/$$fn"; \
939 cp $$s "$(DESTDIR)$(bindir)/$$fn.new"; \
940 chmod 755 "$(DESTDIR)$(bindir)/$$fn.new"; \
941 mv -f "$(DESTDIR)$(bindir)/$$fn.new" \
942 "$(DESTDIR)$(bindir)/$$fn"; \
943 : {- output_on() unless windowsdll(); "" -}{- output_off() if windowsdll(); "" -}; \
944 $(ECHO) "install $$s -> $(DESTDIR)$(libdir)/$$fn"; \
945 cp $$s "$(DESTDIR)$(libdir)/$$fn.new"; \
946 chmod 755 "$(DESTDIR)$(libdir)/$$fn.new"; \
947 mv -f "$(DESTDIR)$(libdir)/$$fn.new" \
948 "$(DESTDIR)$(libdir)/$$fn"; \
949 : {- output_on() if windowsdll(); "" -}; \
950 done
951
952install_programs: install_runtime_libs build_programs
953 @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1)
954 @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(bindir)"
955 @$(ECHO) "*** Installing runtime programs"
956 @set -e; for x in dummy $(INSTALL_PROGRAMS); do \
957 if [ "$$x" = "dummy" ]; then continue; fi; \
958 fn=`basename $$x`; \
959 $(ECHO) "install $$x -> $(DESTDIR)$(bindir)/$$fn"; \
960 cp $$x "$(DESTDIR)$(bindir)/$$fn.new"; \
961 chmod 755 "$(DESTDIR)$(bindir)/$$fn.new"; \
962 mv -f "$(DESTDIR)$(bindir)/$$fn.new" \
963 "$(DESTDIR)$(bindir)/$$fn"; \
964 done
965 @set -e; for x in dummy $(BIN_SCRIPTS); do \
966 if [ "$$x" = "dummy" ]; then continue; fi; \
967 fn=`basename $$x`; \
968 $(ECHO) "install $$x -> $(DESTDIR)$(bindir)/$$fn"; \
969 cp $$x "$(DESTDIR)$(bindir)/$$fn.new"; \
970 chmod 755 "$(DESTDIR)$(bindir)/$$fn.new"; \
971 mv -f "$(DESTDIR)$(bindir)/$$fn.new" \
972 "$(DESTDIR)$(bindir)/$$fn"; \
973 done
974
975uninstall_runtime: uninstall_programs uninstall_runtime_libs
976
977uninstall_programs:
978 @$(ECHO) "*** Uninstalling runtime programs"
979 @set -e; for x in dummy $(INSTALL_PROGRAMS); \
980 do \
981 if [ "$$x" = "dummy" ]; then continue; fi; \
982 fn=`basename $$x`; \
983 $(ECHO) "$(RM) $(DESTDIR)$(bindir)/$$fn"; \
984 $(RM) "$(DESTDIR)$(bindir)/$$fn"; \
985 done;
986 @set -e; for x in dummy $(BIN_SCRIPTS); \
987 do \
988 if [ "$$x" = "dummy" ]; then continue; fi; \
989 fn=`basename $$x`; \
990 $(ECHO) "$(RM) $(DESTDIR)$(bindir)/$$fn"; \
991 $(RM) "$(DESTDIR)$(bindir)/$$fn"; \
992 done
993 -$(RMDIR) "$(DESTDIR)$(bindir)"
994
995uninstall_runtime_libs:
996 @$(ECHO) "*** Uninstalling runtime libraries"
997 @ : {- output_off() unless windowsdll(); "" -}
998 @set -e; for s in dummy $(INSTALL_SHLIBS); do \
999 if [ "$$s" = "dummy" ]; then continue; fi; \
1000 fn=`basename $$s`; \
1001 $(ECHO) "$(RM) $(DESTDIR)$(bindir)/$$fn"; \
1002 $(RM) "$(DESTDIR)$(bindir)/$$fn"; \
1003 done
1004 @ : {- output_on() unless windowsdll(); "" -}
1005
1006
1007install_man_docs: build_man_docs
1008 @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1)
1009 @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(MANDIR)/man1"
1010 @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(MANDIR)/man3"
1011 @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(MANDIR)/man5"
1012 @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(MANDIR)/man7"
1013 @$(ECHO) "*** Installing manpages"
1014 @set -e; for x in dummy $(MANDOCS1); do \
1015 if [ "$$x" = "dummy" ]; then continue; fi; \
1016 fn=`basename $$x`; \
1017 $(ECHO) "install $$x -> $(DESTDIR)$(MANDIR)/man1/$${fn}$(MANSUFFIX)"; \
1018 cp $$x "$(DESTDIR)$(MANDIR)/man1/$${fn}$(MANSUFFIX)"; \
1019 chmod 644 "$(DESTDIR)$(MANDIR)/man1/$${fn}$(MANSUFFIX)"; \
1020 $(PERL) $(SRCDIR)/util/write-man-symlinks install $(SRCDIR)/doc/man1 $(BLDDIR)/doc/man1 $${fn}$(MANSUFFIX) "$(DESTDIR)$(MANDIR)/man1"; \
1021 done
1022 @set -e; for x in dummy $(MANDOCS3); do \
1023 if [ "$$x" = "dummy" ]; then continue; fi; \
1024 fn=`basename $$x`; \
1025 $(ECHO) "install $$x -> $(DESTDIR)$(MANDIR)/man3/$${fn}$(MANSUFFIX)"; \
1026 cp $$x "$(DESTDIR)$(MANDIR)/man3/$${fn}$(MANSUFFIX)"; \
1027 chmod 644 "$(DESTDIR)$(MANDIR)/man3/$${fn}$(MANSUFFIX)"; \
1028 $(PERL) $(SRCDIR)/util/write-man-symlinks install $(SRCDIR)/doc/man3 $(BLDDIR)/doc/man3 $${fn}$(MANSUFFIX) "$(DESTDIR)$(MANDIR)/man3"; \
1029 done
1030 @set -e; for x in dummy $(MANDOCS5); do \
1031 if [ "$$x" = "dummy" ]; then continue; fi; \
1032 fn=`basename $$x`; \
1033 $(ECHO) "install $$x -> $(DESTDIR)$(MANDIR)/man5/$${fn}$(MANSUFFIX)"; \
1034 cp $$x "$(DESTDIR)$(MANDIR)/man5/$${fn}$(MANSUFFIX)"; \
1035 chmod 644 "$(DESTDIR)$(MANDIR)/man5/$${fn}$(MANSUFFIX)"; \
1036 $(PERL) $(SRCDIR)/util/write-man-symlinks install $(SRCDIR)/doc/man5 $(BLDDIR)/doc/man5 $${fn}$(MANSUFFIX) "$(DESTDIR)$(MANDIR)/man5"; \
1037 done
1038 @set -e; for x in dummy $(MANDOCS7); do \
1039 if [ "$$x" = "dummy" ]; then continue; fi; \
1040 fn=`basename $$x`; \
1041 $(ECHO) "install $$x -> $(DESTDIR)$(MANDIR)/man7/$${fn}$(MANSUFFIX)"; \
1042 cp $$x "$(DESTDIR)$(MANDIR)/man7/$${fn}$(MANSUFFIX)"; \
1043 chmod 644 "$(DESTDIR)$(MANDIR)/man7/$${fn}$(MANSUFFIX)"; \
1044 $(PERL) $(SRCDIR)/util/write-man-symlinks install $(SRCDIR)/doc/man7 $(BLDDIR)/doc/man7 $${fn}$(MANSUFFIX) "$(DESTDIR)$(MANDIR)/man7"; \
1045 done
1046
1047uninstall_man_docs: build_man_docs
1048 @$(ECHO) "*** Uninstalling manpages"
1049 @set -e; for x in dummy $(MANDOCS1); do \
1050 if [ "$$x" = "dummy" ]; then continue; fi; \
1051 fn=`basename $$x`; \
1052 $(ECHO) "$(RM) $(DESTDIR)$(MANDIR)/man1/$${fn}$(MANSUFFIX)"; \
1053 $(RM) "$(DESTDIR)$(MANDIR)/man1/$${fn}$(MANSUFFIX)"; \
1054 $(PERL) $(SRCDIR)/util/write-man-symlinks uninstall $(SRCDIR)/doc/man1 $(BLDDIR)/doc/man1 $${fn}$(MANSUFFIX) "$(DESTDIR)$(MANDIR)/man1"; \
1055 done
1056 @set -e; for x in dummy $(MANDOCS3); do \
1057 if [ "$$x" = "dummy" ]; then continue; fi; \
1058 fn=`basename $$x`; \
1059 $(ECHO) "$(RM) $(DESTDIR)$(MANDIR)/man3/$${fn}$(MANSUFFIX)"; \
1060 $(RM) "$(DESTDIR)$(MANDIR)/man3/$${fn}$(MANSUFFIX)"; \
1061 $(PERL) $(SRCDIR)/util/write-man-symlinks uninstall $(SRCDIR)/doc/man3 $(BLDDIR)/doc/man3 $${fn}$(MANSUFFIX) "$(DESTDIR)$(MANDIR)/man3"; \
1062 done
1063 @set -e; for x in dummy $(MANDOCS5); do \
1064 if [ "$$x" = "dummy" ]; then continue; fi; \
1065 fn=`basename $$x`; \
1066 $(ECHO) "$(RM) $(DESTDIR)$(MANDIR)/man5/$${fn}$(MANSUFFIX)"; \
1067 $(RM) "$(DESTDIR)$(MANDIR)/man5/$${fn}$(MANSUFFIX)"; \
1068 $(PERL) $(SRCDIR)/util/write-man-symlinks uninstall $(SRCDIR)/doc/man5 $(BLDDIR)/doc/man5 $${fn}$(MANSUFFIX) "$(DESTDIR)$(MANDIR)/man5"; \
1069 done
1070 @set -e; for x in dummy $(MANDOCS7); do \
1071 if [ "$$x" = "dummy" ]; then continue; fi; \
1072 fn=`basename $$x`; \
1073 $(ECHO) "$(RM) $(DESTDIR)$(MANDIR)/man7/$${fn}$(MANSUFFIX)"; \
1074 $(RM) "$(DESTDIR)$(MANDIR)/man7/$${fn}$(MANSUFFIX)"; \
1075 $(PERL) $(SRCDIR)/util/write-man-symlinks uninstall $(SRCDIR)/doc/man7 $(BLDDIR)/doc/man7 $${fn}$(MANSUFFIX) "$(DESTDIR)$(MANDIR)/man7"; \
1076 done
1077
1078install_html_docs: install_image_docs build_html_docs
1079 @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1)
1080 @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(HTMLDIR)/man1"
1081 @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(HTMLDIR)/man3"
1082 @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(HTMLDIR)/man5"
1083 @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(HTMLDIR)/man7"
1084 @$(ECHO) "*** Installing HTML manpages"
1085 @set -e; for x in dummy $(HTMLDOCS1); do \
1086 if [ "$$x" = "dummy" ]; then continue; fi; \
1087 fn=`basename $$x`; \
1088 $(ECHO) "install $$x -> $(DESTDIR)$(HTMLDIR)/man1/$$fn"; \
1089 cp $$x "$(DESTDIR)$(HTMLDIR)/man1/$$fn"; \
1090 chmod 644 "$(DESTDIR)$(HTMLDIR)/man1/$$fn"; \
1091 done
1092 @set -e; for x in dummy $(HTMLDOCS3); do \
1093 if [ "$$x" = "dummy" ]; then continue; fi; \
1094 fn=`basename $$x`; \
1095 $(ECHO) "install $$x -> $(DESTDIR)$(HTMLDIR)/man3/$$fn"; \
1096 cp $$x "$(DESTDIR)$(HTMLDIR)/man3/$$fn"; \
1097 chmod 644 "$(DESTDIR)$(HTMLDIR)/man3/$$fn"; \
1098 done
1099 @set -e; for x in dummy $(HTMLDOCS5); do \
1100 if [ "$$x" = "dummy" ]; then continue; fi; \
1101 fn=`basename $$x`; \
1102 $(ECHO) "install $$x -> $(DESTDIR)$(HTMLDIR)/man5/$$fn"; \
1103 cp $$x "$(DESTDIR)$(HTMLDIR)/man5/$$fn"; \
1104 chmod 644 "$(DESTDIR)$(HTMLDIR)/man5/$$fn"; \
1105 done
1106 @set -e; for x in dummy $(HTMLDOCS7); do \
1107 if [ "$$x" = "dummy" ]; then continue; fi; \
1108 fn=`basename $$x`; \
1109 $(ECHO) "install $$x -> $(DESTDIR)$(HTMLDIR)/man7/$$fn"; \
1110 cp $$x "$(DESTDIR)$(HTMLDIR)/man7/$$fn"; \
1111 chmod 644 "$(DESTDIR)$(HTMLDIR)/man7/$$fn"; \
1112 done
1113
1114uninstall_html_docs: uninstall_image_docs
1115 @$(ECHO) "*** Uninstalling HTML manpages"
1116 @set -e; for x in dummy $(HTMLDOCS1); do \
1117 if [ "$$x" = "dummy" ]; then continue; fi; \
1118 fn=`basename $$x`; \
1119 $(ECHO) "$(RM) $(DESTDIR)$(HTMLDIR)/man1/$$fn"; \
1120 $(RM) "$(DESTDIR)$(HTMLDIR)/man1/$$fn"; \
1121 done
1122 @set -e; for x in dummy $(HTMLDOCS3); do \
1123 if [ "$$x" = "dummy" ]; then continue; fi; \
1124 fn=`basename $$x`; \
1125 $(ECHO) "$(RM) $(DESTDIR)$(HTMLDIR)/man3/$$fn"; \
1126 $(RM) "$(DESTDIR)$(HTMLDIR)/man3/$$fn"; \
1127 done
1128 @set -e; for x in dummy $(HTMLDOCS5); do \
1129 if [ "$$x" = "dummy" ]; then continue; fi; \
1130 fn=`basename $$x`; \
1131 $(ECHO) "$(RM) $(DESTDIR)$(HTMLDIR)/man5/$$fn"; \
1132 $(RM) "$(DESTDIR)$(HTMLDIR)/man5/$$fn"; \
1133 done
1134 @set -e; for x in dummy $(HTMLDOCS7); do \
1135 if [ "$$x" = "dummy" ]; then continue; fi; \
1136 fn=`basename $$x`; \
1137 $(ECHO) "$(RM) $(DESTDIR)$(HTMLDIR)/man7/$$fn"; \
1138 $(RM) "$(DESTDIR)$(HTMLDIR)/man7/$$fn"; \
1139 done
1140
1141install_image_docs:
1142 @$(PERL) $(SRCDIR)/util/mkdir-p.pl "$(DESTDIR)$(HTMLDIR)/man7/img"
1143 @set -e; for x in dummy $(IMAGEDOCS7); do \
1144 if [ "$$x" = "dummy" ]; then continue; fi; \
1145 fn=`basename $$x`; \
1146 $(ECHO) "install $$x -> $(DESTDIR)$(HTMLDIR)/man7/img/$$fn"; \
1147 cp $(SRCDIR)/$$x "$(DESTDIR)$(HTMLDIR)/man7/img/$$fn"; \
1148 chmod 644 "$(DESTDIR)$(HTMLDIR)/man7/img/$$fn"; \
1149 done
1150
1151uninstall_image_docs:
1152 @set -e; for x in dummy $(IMAGEDOCS7); do \
1153 if [ "$$x" = "dummy" ]; then continue; fi; \
1154 fn=`basename $$x`; \
1155 $(ECHO) "$(RM) $(DESTDIR)$(HTMLDIR)/man7/img/$$fn"; \
1156 $(RM) "$(DESTDIR)$(HTMLDIR)/man7/img/$$fn"; \
1157 done
1158
1159# Developer targets (note: these are only available on Unix) #########
1160##@ Code maintenance
1161
1162# It's important that generate_buildinfo comes after ordinals, as ordinals
1163# is sensitive to build.info changes.
1164update: generate errors ordinals generate_buildinfo ## Update errors, ordinals and build info
1165
1166.PHONY: generate generate_apps generate_crypto_bn generate_crypto_objects \
1167 generate_crypto_conf generate_crypto_asn1 generate_fuzz_oids
1168generate: generate_apps generate_crypto_bn generate_crypto_objects \
1169 generate_crypto_conf generate_crypto_asn1 generate_fuzz_oids
1170
1171.PHONY: generate_buildinfo generate_doc_buildinfo
1172generate_buildinfo: generate_doc_buildinfo
1173
1174.PHONY: doc-nits md-nits
1175doc-nits: build_generated_pods ## Evaluate OpenSSL documentation
1176 $(PERL) $(SRCDIR)/util/find-doc-nits -c -n -l -e
1177
1178# This uses "mdl", the markdownlint application, which is written in ruby.
1179# The source is at https://github.com/markdownlint/markdownlint
1180# If you have ruby installed, "gem install mdl" should work.
1181# Another option is at https://snapcraft.io/install/mdl/debian
1182# Finally, there's a Node.js version, which we haven't tried, that
1183# can be found at https://github.com/DavidAnson/markdownlint
1184md-nits: ## Evaluate markdown files via "mdl"
1185 mdl -s $(SRCDIR)/util/markdownlint.rb .
1186
1187# Test coverage is a good idea for the future
1188#coverage: $(PROGRAMS) $(TESTPROGRAMS)
1189# ...
1190
1191.PHONY: lint
1192lint: ## Evaluate C code via "splint"
1193 @( cd $(SRCDIR); \
1194 echo splint -DLINT -posixlib -preproc -D__gnuc_va_list=void \
1195 -I. -Iinclude -Iapps/include $(CRYPTOHEADERS) $(SSLHEADERS) $(SRCS) )
1196
1197.PHONY: check-format
1198check-format: ## Evaluate C code according to OpenSSL coding standards
1199 ( cd $(SRCDIR); $(PERL) util/check-format.pl \
1200 $(SRCS) \$(CRYPTOHEADERS) $(SSLHEADERS) )
1201
1202generate_apps:
1203 ( cd $(SRCDIR); $(PERL) VMS/VMSify-conf.pl \
1204 < apps/openssl.cnf > apps/openssl-vms.cnf )
1205
1206generate_crypto_bn:
1207 ( cd $(SRCDIR); $(PERL) crypto/bn/bn_prime.pl > crypto/bn/bn_prime.h )
1208
1209generate_crypto_objects:
1210 ( cd $(SRCDIR); $(PERL) crypto/objects/objects.pl -n \
1211 crypto/objects/objects.txt \
1212 crypto/objects/obj_mac.num \
1213 > crypto/objects/obj_mac.new && \
1214 mv crypto/objects/obj_mac.new crypto/objects/obj_mac.num )
1215 ( cd $(SRCDIR); $(PERL) crypto/objects/objects.pl \
1216 crypto/objects/objects.txt \
1217 crypto/objects/obj_mac.num \
1218 > include/openssl/obj_mac.h )
1219 ( cd $(SRCDIR); $(PERL) crypto/objects/obj_dat.pl \
1220 include/openssl/obj_mac.h \
1221 > crypto/objects/obj_dat.h )
1222 ( cd $(SRCDIR); $(PERL) crypto/objects/objxref.pl \
1223 crypto/objects/obj_mac.num \
1224 crypto/objects/obj_xref.txt \
1225 > crypto/objects/obj_xref.h )
1226 ( cd $(SRCDIR); sed -e '1,8d' crypto/objects/obj_compat.h >> include/openssl/obj_mac.h )
1227
1228generate_crypto_conf:
1229 ( cd $(SRCDIR); $(PERL) crypto/conf/keysets.pl \
1230 > crypto/conf/conf_def.h )
1231
1232generate_crypto_asn1:
1233 ( cd $(SRCDIR); $(PERL) crypto/asn1/charmap.pl \
1234 > crypto/asn1/charmap.h )
1235
1236generate_fuzz_oids:
1237 ( cd $(SRCDIR); $(PERL) fuzz/mkfuzzoids.pl \
1238 crypto/objects/obj_dat.h \
1239 > fuzz/oids.txt )
1240
1241generate_doc_buildinfo:
1242 ( $(PERL) -I$(BLDDIR) -Mconfigdata \
1243 $(SRCDIR)/util/dofile.pl -o Makefile \
1244 $(SRCDIR)/doc/build.info.in \
1245 > $(SRCDIR)/doc/build.info.new; \
1246 if ( test -e $(SRCDIR)/doc/build.info \
1247 && cmp $(SRCDIR)/doc/build.info.new $(SRCDIR)/doc/build.info \
1248 > /dev/null ); \
1249 then \
1250 rm $(SRCDIR)/doc/build.info.new; \
1251 else \
1252 mv $(SRCDIR)/doc/build.info.new $(SRCDIR)/doc/build.info; \
1253 fi )
1254
1255generate_fips_sources: providers/fips.module.sources.new
1256providers/fips.module.sources.new: configdata.pm
1257 rm -rf sources-tmp
1258 mkdir sources-tmp
1259 ( \
1260 srcdir=`cd $(SRCDIR); pwd`; \
1261 cd sources-tmp \
1262 && $$srcdir/Configure --banner=Configured enable-fips -O0 \
1263 && ./configdata.pm --query 'get_sources("providers/fips")' > sources1 \
1264 && "$(MAKE)" -sj 4 build_generated providers/fips.so \
1265 && find . -name '*.d' | xargs cat > dep1 \
1266 && "$(MAKE)" distclean \
1267 && $$srcdir/Configure --banner=Configured enable-fips no-asm -O0 \
1268 && ./configdata.pm --query 'get_sources("providers/fips")' > sources2 \
1269 && "$(MAKE)" -sj 4 build_generated providers/fips.so \
1270 && find . -name '*.d' | xargs cat > dep2 \
1271 && cat sources1 sources2 \
1272 | grep -v ' : \\$$' | grep -v util/providers.num \
1273 | sed -e 's/^ *//' -e 's/ *\\$$//' \
1274 | sort | uniq > sources \
1275 && cat dep1 dep2 \
1276 | $(PERL) -p -e 's/\\\n//' \
1277 | sed -e 's/^.*: *//' -e 's/ */ /g' \
1278 | fgrep -f sources \
1279 | tr ' ' '\n' \
1280 | sort | uniq > deps.raw \
1281 && cat deps.raw \
1282 | xargs ./configdata.pm --query 'get_sources(@ARGV)' \
1283 | $(PERL) -p -e 's/\\\n//' \
1284 | sed -e 's/\./\\\./g' -e 's/ : */:/' -e 's/^/s:/' -e 's/$$/:/' \
1285 > deps.sed \
1286 && cat deps.raw | sed -f deps.sed > deps \
1287 )
1288 ( \
1289 cat sources-tmp/sources sources-tmp/deps \
1290 | $(PERL) -p -e 's:^ *\Q../\E:: ;' \
1291 -e 's:^\Q$(SRCDIR)/\E:: if "$(SRCDIR)" ne "." ;' \
1292 -e 'my $$x; do { $$x = $$_; s:(^|/)((?!\Q../\E)[^/]*/)\Q..\E($$|/):$$1: } while ($$x ne $$_) ;' ; \
1293 cd $(SRCDIR); \
1294 for x in crypto/bn/asm/*.pl crypto/bn/asm/*.S \
1295 crypto/aes/asm/*.pl crypto/aes/asm/*.S \
1296 crypto/ec/asm/*.pl \
1297 crypto/modes/asm/*.pl \
1298 crypto/sha/asm/*.pl \
1299 crypto/*cpuid.pl crypto/*cpuid.S \
1300 crypto/*cap.c; do \
1301 echo "$$x"; \
1302 done \
1303 ) | grep -v sm2p256 | sort | uniq > providers/fips.module.sources.new
1304 rm -rf sources-tmp
1305
1306# Set to -force to force a rebuild
1307ERROR_REBUILD=
1308errors:
1309 ( b=`pwd`; set -e; cd $(SRCDIR); \
1310 $(PERL) util/ck_errf.pl -strict -internal; \
1311 $(PERL) -I$$b util/mkerr.pl $(ERROR_REBUILD) -internal )
1312 ( b=`pwd`; set -e; cd $(SRCDIR)/engines; \
1313 for E in *.ec ; do \
1314 $(PERL) ../util/ck_errf.pl -strict \
1315 -conf $$E `basename $$E .ec`.c; \
1316 $(PERL) -I$$b ../util/mkerr.pl $(ERROR_REBUILD) -static \
1317 -conf $$E `basename $$E .ec`.c ; \
1318 done )
1319
1320{- use File::Basename;
1321
1322 my @sslheaders_tmpl =
1323 qw( include/openssl/ssl.h
1324 include/openssl/ssl2.h
1325 include/openssl/ssl3.h
1326 include/openssl/sslerr.h
1327 include/openssl/tls1.h
1328 include/openssl/dtls1.h
1329 include/openssl/srtp.h
1330 include/openssl/quic.h
1331 include/openssl/sslerr_legacy.h );
1332 my @cryptoheaders_tmpl =
1333 qw( include/internal/dso.h
1334 include/internal/o_dir.h
1335 include/internal/err.h
1336 include/internal/evp.h
1337 include/internal/pem.h
1338 include/internal/asn1.h
1339 include/internal/sslconf.h );
1340 my @cryptoskipheaders = ( @sslheaders_tmpl,
1341 qw( include/openssl/asn1_mac.h
1342 include/openssl/conf_api.h
1343 include/openssl/ebcdic.h
1344 include/openssl/opensslconf.h
1345 include/openssl/symhacks.h ) );
1346 our %cryptoheaders = ();
1347 our %sslheaders = ();
1348 foreach my $d ( qw( include/openssl include/internal ) ) {
1349 my @header_patterns =
1350 map { catfile($config{sourcedir}, $d, $_) } ( '*.h', '*.h.in' );
1351 foreach my $f ( map { glob($_) } @header_patterns ) {
1352 my $base = basename($f);
1353 my $base_in = basename($f, '.in');
1354 my $dir = catfile($config{sourcedir}, $d);
1355 if ($base ne $base_in) {
1356 # We have a .h.in file, which means the header file is in the
1357 # build tree.
1358 $base = $base_in;
1359 $dir = catfile($config{builddir}, $d);
1360 }
1361 my $new_f = catfile($dir, $base);
1362 my $fn = "$d/$base";
1363 # The logic to add files to @cryptoheaders is a bit complex. The
1364 # file to be added must be either in the public header directory
1365 # or one of the pre-declared internal headers, and must under no
1366 # circumstances be one of those that must be skipped.
1367 $cryptoheaders{$new_f} = 1
1368 if (($d eq 'include/openssl'
1369 || ( grep { $_ eq $fn } @cryptoheaders_tmpl ))
1370 && !( grep { $_ eq $fn } @cryptoskipheaders ));
1371 # The logic to add files to @sslheaders is much simpler...
1372 $sslheaders{$new_f} = 1 if grep { $_ eq $fn } @sslheaders_tmpl;
1373 }
1374 }
1375 "";
1376-}
1377SRCS={-
1378sub uniq { my %seen; grep !$seen{$_}++, @_; }
1379sub flat(@) { return map { ref eq 'ARRAY' ? @$_ : $_ } @_; }
1380join(" \\\n" . ' ' x 5, fill_lines(" ", $COLUMNS - 5,
1381 uniq(grep /\.(c|cc|cpp)$/,
1382 flat (map { $unified_info{sources}->{$_} }
1383 (sort keys %{$unified_info{sources}})))))
1384-}
1385CRYPTOHEADERS={- join(" \\\n" . ' ' x 14,
1386 fill_lines(" ", $COLUMNS - 14, sort keys %cryptoheaders)) -}
1387SSLHEADERS={- join(" \\\n" . ' ' x 11,
1388 fill_lines(" ", $COLUMNS - 11, sort keys %sslheaders)) -}
1389
1390renumber: build_generated
1391 $(PERL) $(SRCDIR)/util/mknum.pl --version $(VERSION_NUMBER) --no-warnings \
1392 --ordinals $(SRCDIR)/util/libcrypto.num \
1393 --symhacks $(SRCDIR)/include/openssl/symhacks.h \
1394 --renumber \
1395 $(CRYPTOHEADERS)
1396 $(PERL) $(SRCDIR)/util/mknum.pl --version $(VERSION_NUMBER) --no-warnings \
1397 --ordinals $(SRCDIR)/util/libssl.num \
1398 --symhacks $(SRCDIR)/include/openssl/symhacks.h \
1399 --renumber \
1400 $(SSLHEADERS)
1401
1402.PHONY: ordinals
1403ordinals: build_generated
1404 $(PERL) $(SRCDIR)/util/mknum.pl --version $(VERSION_NUMBER) --no-warnings \
1405 --ordinals $(SRCDIR)/util/libcrypto.num \
1406 --symhacks $(SRCDIR)/include/openssl/symhacks.h \
1407 $(CRYPTOHEADERS)
1408 $(PERL) $(SRCDIR)/util/mknum.pl --version $(VERSION_NUMBER) --no-warnings \
1409 --ordinals $(SRCDIR)/util/libssl.num \
1410 --symhacks $(SRCDIR)/include/openssl/symhacks.h \
1411 $(SSLHEADERS)
1412
1413test_ordinals:
1414 "$(MAKE)" run_tests TESTS=test_ordinals
1415
1416tags TAGS: FORCE
1417 rm -f TAGS tags
1418 -( cd $(SRCDIR); util/ctags.sh )
1419 -etags `find . -name '*.[ch]' -o -name '*.pm'`
1420
1421providers/fips.checksum.new: providers/fips.module.sources.new
1422 @which unifdef > /dev/null || \
1423 ( echo >&2 "ERROR: unifdef not in your \$$PATH, FIPS checksums not calculated"; \
1424 false )
1425 ( sources=`pwd`/providers/fips.module.sources.new; \
1426 cd $(SRCDIR) \
1427 && cat $$sources \
1428 | xargs ./util/fips-checksums.sh ) \
1429 > providers/fips-sources.checksums.new \
1430 && sha256sum providers/fips-sources.checksums.new \
1431 | sed -e 's|\.new||' > providers/fips.checksum.new
1432
1433fips-checksums: providers/fips.checksum.new
1434
1435$(SRCDIR)/providers/fips.checksum: providers/fips.checksum.new
1436 cp -p providers/fips.module.sources.new $(SRCDIR)/providers/fips.module.sources
1437 cp -p providers/fips-sources.checksums.new $(SRCDIR)/providers/fips-sources.checksums
1438 cp -p providers/fips.checksum.new $(SRCDIR)/providers/fips.checksum
1439
1440update-fips-checksums: $(SRCDIR)/providers/fips.checksum
1441
1442diff-fips-checksums: fips-checksums
1443 diff -u $(SRCDIR)/providers/fips.module.sources providers/fips.module.sources.new
1444 diff -u $(SRCDIR)/providers/fips-sources.checksums providers/fips-sources.checksums.new
1445 diff -u $(SRCDIR)/providers/fips.checksum providers/fips.checksum.new
1446
1447# Release targets (note: only available on Unix) #####################
1448
1449tar:
1450 (cd $(SRCDIR); ./util/mktar.sh --name='$(NAME)' --tarfile='$(TARFILE)')
1451
1452# Helper targets #####################################################
1453
1454link-utils: $(BLDDIR)/util/opensslwrap.sh $(BLDDIR)/apps/openssl.cnf
1455
1456$(BLDDIR)/util/opensslwrap.sh: Makefile
1457 @if [ "$(SRCDIR)" != "$(BLDDIR)" ]; then \
1458 mkdir -p "$(BLDDIR)/util"; \
1459 ln -sf "../$(SRCDIR)/util/`basename "$@"`" "$(BLDDIR)/util"; \
1460 fi
1461
1462$(BLDDIR)/apps/openssl.cnf: Makefile
1463 @if [ "$(SRCDIR)" != "$(BLDDIR)" ]; then \
1464 mkdir -p "$(BLDDIR)/apps"; \
1465 ln -sf "../$(SRCDIR)/apps/`basename "$@"`" "$(BLDDIR)/apps"; \
1466 fi
1467
1468FORCE:
1469
1470# Building targets ###################################################
1471
1472Makefile: configdata.pm \
1473 {- join(" \\\n" . ' ' x 10,
1474 fill_lines(" ", $COLUMNS - 10,
1475 @{$config{build_file_templates}})) -}
1476 @echo "Detected changed: $?"
1477 $(PERL) configdata.pm
1478 @echo "**************************************************"
1479 @echo "*** ***"
1480 @echo "*** Please run the same make command again ***"
1481 @echo "*** ***"
1482 @echo "**************************************************"
1483 @false
1484
1485configdata.pm: $(SRCDIR)/Configure $(SRCDIR)/config \
1486 {- join(" \\\n" . ' ' x 15,
1487 fill_lines(" ", $COLUMNS - 15,
1488 @{$config{build_infos}},
1489 @{$config{conf_files}})) -}
1490 @echo "Detected changed: $?"
1491 $(PERL) configdata.pm -r
1492 @echo "**************************************************"
1493 @echo "*** ***"
1494 @echo "*** Please run the same make command again ***"
1495 @echo "*** ***"
1496 @echo "**************************************************"
1497 @false
1498
1499reconfigure reconf:
1500 $(PERL) configdata.pm -r
1501
1502{-
1503 use File::Basename;
1504 use File::Spec::Functions qw/:DEFAULT abs2rel rel2abs/;
1505
1506 # Helper function to convert dependencies in platform agnostic form to
1507 # dependencies in platform form.
1508 sub compute_platform_depends {
1509 map { my $x = $_;
1510
1511 grep { $x eq $_ } @{$unified_info{programs}} and platform->bin($x)
1512 or grep { $x eq $_ } @{$unified_info{modules}} and platform->dso($x)
1513 or grep { $x eq $_ } @{$unified_info{libraries}} and platform->lib($x)
1514 or platform->convertext($x); } @_;
1515 }
1516
1517 # Helper function to figure out dependencies on libraries
1518 # It takes a list of library names and outputs a list of dependencies
1519 sub compute_lib_depends {
1520 # Depending on shared libraries:
1521 # On Windows POSIX layers, we depend on {libname}.dll.a
1522 # On Unix platforms, we depend on {shlibname}.so
1523 return map { platform->sharedlib_simple($_)
1524 // platform->sharedlib_import($_)
1525 // platform->sharedlib($_)
1526 // platform->staticlib($_)
1527 } @_;
1528 }
1529
1530 sub generatetarget {
1531 my %args = @_;
1532 my $deps = join(" ", compute_platform_depends(@{$args{deps}}));
1533 return <<"EOF";
1534$args{target}: $deps
1535EOF
1536 }
1537
1538 sub generatesrc {
1539 my %args = @_;
1540 my $gen0 = $args{generator}->[0];
1541 my $gen_args = join('', map { " $_" }
1542 @{$args{generator}}[1..$#{$args{generator}}]);
1543 my $gen_incs = join("", map { " -I".$_ } @{$args{generator_incs}});
1544 my $incs = join("", map { " -I".$_ } @{$args{incs}});
1545 my $defs = join("", map { " -D".$_ } @{$args{defs}});
1546 my $deps = join(" ", compute_platform_depends(@{$args{generator_deps}},
1547 @{$args{deps}}));
1548
1549 if ($args{src} =~ /\.html$/) {
1550 #
1551 # HTML generator
1552 #
1553 my $title = basename($args{src}, ".html");
1554 my $pod = $gen0;
1555 return <<"EOF";
1556$args{src}: $pod
1557 \$(PERL) \$(SRCDIR)/util/mkpod2html.pl -i "$pod" -o \$\@ -t "$title" -r "\$(SRCDIR)/doc"
1558EOF
1559 } elsif ($args{src} =~ /\.(\d)$/) {
1560 #
1561 # Man-page generator
1562 #
1563 my $section = $1;
1564 my $name = uc basename($args{src}, ".$section");
1565 my $pod = $gen0;
1566 return <<"EOF";
1567$args{src}: $pod
1568 pod2man --name=$name --section=$section\$(MANSUFFIX) --center=OpenSSL \\
1569 --release=\$(VERSION) $pod >\$\@
1570EOF
1571 } elsif (platform->isdef($args{src})) {
1572 #
1573 # Linker script-ish generator
1574 #
1575 my $target = platform->def($args{src});
1576 (my $mkdef_os = $target{shared_target}) =~ s|-shared$||;
1577 my $ord_ver = $args{intent} eq 'lib' ? ' --version $(VERSION_NUMBER)' : '';
1578 my $ord_name = $args{generator}->[1] || $args{product};
1579 return <<"EOF";
1580$target: $gen0 $deps \$(SRCDIR)/util/mkdef.pl
1581 \$(PERL) \$(SRCDIR)/util/mkdef.pl$ord_ver --type $args{intent} --ordinals $gen0 --name $ord_name --OS $mkdef_os > $target
1582EOF
1583 } elsif (platform->isasm($args{src})
1584 || platform->iscppasm($args{src})) {
1585 #
1586 # Assembler generator
1587 #
1588 my $cppflags = {
1589 shlib => '$(LIB_CFLAGS) $(LIB_CPPFLAGS)',
1590 lib => '$(LIB_CFLAGS) $(LIB_CPPFLAGS)',
1591 dso => '$(DSO_CFLAGS) $(DSO_CPPFLAGS)',
1592 bin => '$(BIN_CFLAGS) $(BIN_CPPFLAGS)'
1593 } -> {$args{intent}};
1594
1595 my $generator;
1596 if ($gen0 =~ /\.pl$/) {
1597 $generator = 'CC="$(CC)" $(PERL)'.$gen_incs.' '.$gen0.$gen_args
1598 .' "$(PERLASM_SCHEME)"'.$incs.' '.$cppflags.$defs.' $(PROCESSOR)';
1599 } elsif ($gen0 =~ /\.m4$/) {
1600 $generator = 'm4 -B 8192'.$gen_incs.' '.$gen0.$gen_args.' >'
1601 } elsif ($gen0 =~ /\.S$/) {
1602 $generator = undef;
1603 } else {
1604 die "Generator type for $args{src} unknown: $gen0\n";
1605 }
1606
1607 if (defined($generator)) {
1608 return <<"EOF";
1609$args{src}: $gen0 $deps
1610 $generator \$@
1611EOF
1612 }
1613 return <<"EOF";
1614$args{src}: $gen0 $deps
1615 \$(CC) $incs $cppflags $defs -E $gen0 | \\
1616 \$(PERL) -ne '/^#(line)?\\s*[0-9]+/ or print' > \$@
1617EOF
1618 } elsif ($gen0 =~ m|^.*\.in$|) {
1619 #
1620 # "dofile" generator (file.in -> file)
1621 #
1622 my $dofile = abs2rel(rel2abs(catfile($config{sourcedir},
1623 "util", "dofile.pl")),
1624 rel2abs($config{builddir}));
1625 my @perlmodules = ();
1626 my %perlmoduleincs = ();
1627 my %perlmoduledeps = ();
1628 foreach my $x (('configdata.pm', @{$args{deps}})) {
1629 # Compute (i)nclusion directory, (m)odule name and (d)ependency
1630 my $i, $m, $d;
1631 if ($x =~ /\|/) {
1632 $i = $`;
1633 $d = $';
1634
1635 # Massage the module part to become a real perl module spec
1636 $m = $d;
1637 $m =~ s|\.pm$||;
1638 # Directory specs are :: in perl package names
1639 $m =~ s|/|::|g;
1640
1641 # Full file name of the dependency
1642 $d = catfile($i, $d) if $i;
1643 } elsif ($x =~ /\.pm$/) {
1644 $i = dirname($x);
1645 $m = basename($x, '.pm');
1646 $d = $x;
1647 } else {
1648 # All other dependencies are simply collected
1649 $d = $x;
1650 }
1651 push @perlmodules, '"-M'.$m.'"' if $m;
1652 $perlmoduledeps{$d} = 1;
1653 $perlmoduleincs{'"-I'.$i.'"'} = 1 if $i;
1654 }
1655
1656 # Because of the special treatment of dependencies, we need to
1657 # recompute $deps completely
1658 my $deps
1659 = join(" ", compute_platform_depends(@{$args{generator_deps}},
1660 sort keys %perlmoduledeps));
1661 my $perlmodules = join(' ', '', ( sort keys %perlmoduleincs ), @perlmodules);
1662
1663 return <<"EOF";
1664$args{src}: $gen0 $deps
1665 \$(PERL)$perlmodules "$dofile" "-o$target{build_file}" $gen0$gen_args > \$@
1666EOF
1667 } elsif (grep { $_ eq $gen0 } @{$unified_info{programs}}) {
1668 #
1669 # Generic generator using OpenSSL programs
1670 #
1671
1672 # Redo $gen0, to ensure that we have the proper extension where
1673 # necessary.
1674 $gen0 = platform->bin($gen0);
1675 # Use $(PERL) to execute wrap.pl directly to avoid calling env
1676 return <<"EOF";
1677$args{src}: $gen0 $deps \$(BLDDIR)/util/wrap.pl
1678 \$(PERL) \$(BLDDIR)/util/wrap.pl $gen0$gen_args > \$@
1679EOF
1680 } else {
1681 #
1682 # Generic generator using Perl
1683 #
1684 return <<"EOF";
1685$args{src}: $gen0 $deps
1686 \$(PERL)$gen_incs $gen0$gen_args > \$@
1687EOF
1688 }
1689 }
1690
1691 # Should one wonder about the end of the Perl snippet, it's because this
1692 # second regexp eats up line endings as well, if the removed path is the
1693 # last in the line. We may therefore need to put back a line ending.
1694 sub src2obj {
1695 my %args = @_;
1696 my $obj = platform->convertext($args{obj});
1697 my $dep = platform->dep($args{obj});
1698 my @srcs = @{$args{srcs}};
1699 my $srcs = join(" ", @srcs);
1700 my $deps = join(" ", @srcs, @{$args{deps}});
1701 my $incs = join("", map { " -I".$_ } @{$args{incs}});
1702 my $defs = join("", map { " -D".$_ } @{$args{defs}});
1703 my $cmd;
1704 my $cmdflags;
1705 my $cmdcompile;
1706 if (grep /\.rc$/, @srcs) {
1707 $cmd = '$(RC)';
1708 $cmdflags = '$(RCFLAGS)';
1709 $cmdcompile = '';
1710 } elsif (grep /\.(cc|cpp)$/, @srcs) {
1711 $cmd = '$(CXX)';
1712 $cmdcompile = ' -c';
1713 $cmdflags = {
1714 shlib => '$(LIB_CXXFLAGS) $(LIB_CPPFLAGS)',
1715 lib => '$(LIB_CXXFLAGS) $(LIB_CPPFLAGS)',
1716 dso => '$(DSO_CXXFLAGS) $(DSO_CPPFLAGS)',
1717 bin => '$(BIN_CXXFLAGS) $(BIN_CPPFLAGS)'
1718 } -> {$args{intent}};
1719 } else {
1720 $cmd = '$(CC)';
1721 $cmdcompile = ' -c';
1722 $cmdflags = {
1723 shlib => '$(LIB_CFLAGS) $(LIB_CPPFLAGS)',
1724 lib => '$(LIB_CFLAGS) $(LIB_CPPFLAGS)',
1725 dso => '$(DSO_CFLAGS) $(DSO_CPPFLAGS)',
1726 bin => '$(BIN_CFLAGS) $(BIN_CPPFLAGS)'
1727 } -> {$args{intent}};
1728 }
1729 my $recipe;
1730 # extension-specific rules
1731 if (grep /\.s$/, @srcs) {
1732 $recipe .= <<"EOF";
1733$obj: $deps
1734 $cmd $cmdflags -c -o \$\@ $srcs
1735EOF
1736 } elsif (grep /\.S$/, @srcs) {
1737 # Originally there was multi-step rule with $(CC) -E file.S
1738 # followed by $(CC) -c file.s. It compensated for one of
1739 # legacy platform compiler's inability to handle .S files.
1740 # The platform is long discontinued by vendor so there is
1741 # hardly a point to drag it along...
1742 $recipe .= <<"EOF";
1743$obj: $deps
1744 $cmd $incs $defs $cmdflags -c -o \$\@ $srcs
1745EOF
1746 } elsif ($makedep_scheme eq 'gcc' && !grep /\.rc$/, @srcs) {
1747 $recipe .= <<"EOF";
1748$obj: $deps
1749 $cmd $incs $defs $cmdflags -MMD -MF $dep.tmp -c -o \$\@ $srcs
1750 \@touch $dep.tmp
1751 \@if cmp $dep.tmp $dep > /dev/null 2> /dev/null; then \\
1752 rm -f $dep.tmp; \\
1753 else \\
1754 mv $dep.tmp $dep; \\
1755 fi
1756EOF
1757 } else {
1758 $recipe .= <<"EOF";
1759$obj: $deps
1760 $cmd $incs $defs $cmdflags $cmdcompile -o \$\@ $srcs
1761EOF
1762 if ($makedep_scheme eq 'makedepend') {
1763 $recipe .= <<"EOF";
1764 \$(MAKEDEPEND) -f- -Y -- $incs $cmdflags -- $srcs 2>/dev/null \\
1765 > $dep
1766EOF
1767 }
1768 }
1769 return $recipe;
1770 }
1771 # We *know* this routine is only called when we've configure 'shared'.
1772 sub obj2shlib {
1773 my %args = @_;
1774 my @linkdirs = ();
1775 my @linklibs = ();
1776 foreach (@{$args{deps}}) {
1777 if (platform->isstaticlib($_)) {
1778 push @linklibs, platform->convertext($_);
1779 } else {
1780 my $d = "-L" . dirname($_);
1781 my $l = basename($_);
1782 $l =~ s/^lib//;
1783 $l = "-l" . $l;
1784 push @linklibs, $l;
1785 push @linkdirs, $d unless grep { $d eq $_ } @linkdirs;
1786 }
1787 }
1788 my $linkflags = join("", map { $_." " } @linkdirs);
1789 my $linklibs = join("", map { $_." " } @linklibs);
1790 my @objs = map { platform->convertext($_) }
1791 grep { !platform->isdef($_) }
1792 @{$args{objs}};
1793 my @defs = map { platform->def($_) }
1794 grep { platform->isdef($_) }
1795 @{$args{objs}};
1796 my @deps = compute_lib_depends(@{$args{deps}});
1797 die "More than one exported symbol map" if scalar @defs > 1;
1798
1799 my $full = platform->sharedlib($args{lib});
1800 # $import is for Windows and subsystems thereof, where static import
1801 # libraries for DLLs are a thing. On platforms that have this mechanism,
1802 # $import has the name of this import library. On platforms that don't
1803 # have this mechanism, $import will be |undef|.
1804 # It's also used on AIX in solib mode, which creates import libraries
1805 # for the shared libraries.
1806 my $import = platform->sharedlib_import($args{lib});
1807 # $simple is for platforms where full shared library names include the
1808 # shared library version, and there's a simpler name that doesn't include
1809 # that version. On such platforms, $simple has the simpler name. On
1810 # other platforms, it will be |undef|.
1811 my $simple = platform->sharedlib_simple($args{lib});
1812
1813 my $argfile = defined $target{shared_argfileflag} ? $full.".args" : undef;
1814 my $shared_soname = "";
1815 $shared_soname .= ' '.$target{shared_sonameflag}.basename($full)
1816 if defined $target{shared_sonameflag};
1817 my $shared_imp = "";
1818 $shared_imp .= ' '.$target{shared_impflag}.basename($import)
1819 if defined $target{shared_impflag} && defined $import;
1820 my $shared_def = join("", map { ' '.$target{shared_defflag}.$_ } @defs);
1821
1822 # There is at least one platform where the compiler-as-linker needs to
1823 # have one object file directly on the command line. That won't hurt
1824 # any other platform, so we do that for everyone when there's an argfile
1825 # to be had. This depends heavily on splice, which removes elements from
1826 # the given array, and returns them so they can be captured.
1827 my @argfileobjs = $argfile
1828 ? splice(@objs, 1)
1829 : ();
1830 my $argfilecmds = $argfile
1831 ? join("\n\t", map { "echo $_ >> $argfile" } @argfileobjs)
1832 : undef;
1833 my $argfiledeps = $argfile
1834 ? join(" \\\n" . ' ' x (length($argfile) + 2),
1835 fill_lines(' ', $COLUMNS - length($full) - 2, @argfileobjs))
1836 : undef;
1837 my @fulldeps = (@objs, ($argfile ? $argfile : ()), @defs, @deps);
1838 my @fullobjs = (
1839 @objs,
1840 ($argfile ? $target{shared_argfileflag}.$argfile : ())
1841 );
1842 my $fulldeps =
1843 join(" \\\n" . ' ' x (length($full) + 2),
1844 fill_lines(' ', $COLUMNS - length($full) - 2, @fulldeps));
1845 my $fullobjs =
1846 join(" \\\n\t\t", fill_lines(' ', $COLUMNS - 16, @fullobjs));
1847
1848 my $recipe = '';
1849
1850 if (defined $simple && $simple ne $full) {
1851 if (sharedaix()) {
1852 $recipe .= <<"EOF";
1853$simple: $full
1854 rm -f $simple && \\
1855 \$(AR) r $simple $full
1856EOF
1857 } else {
1858 $recipe .= <<"EOF";
1859$simple: $full
1860 rm -f $simple && \\
1861 ln -s $full $simple
1862EOF
1863 }
1864 }
1865 if (defined $import) {
1866 if (sharedaix_solib()) {
1867 $recipe .= <<"EOF";
1868$import: $full $defs[0]
1869 rm -f $import && \\
1870 echo \\#!$full > $import && \\
1871 cat $defs[0] >>$import
1872EOF
1873 } else {
1874 $recipe .= <<"EOF";
1875$import: $full
1876EOF
1877 }
1878 }
1879 $recipe .= <<"EOF";
1880$full: $fulldeps
1881 \$(CC) \$(LIB_CFLAGS) $linkflags\$(LIB_LDFLAGS)$shared_soname$shared_imp \\
1882 -o $full$shared_def \\
1883 $fullobjs \\
1884 $linklibs \$(LIB_EX_LIBS)
1885EOF
1886 if (windowsdll()) {
1887 $recipe .= <<"EOF";
1888 rm -f apps/$full
1889 rm -f fuzz/$full
1890 cp -p $full apps/
1891 cp -p $full fuzz/
1892EOF
1893 if (!$disabled{tests}) {
1894 $recipe .= <<"EOF";
1895 rm -f test/$full
1896 cp -p $full test/
1897EOF
1898 }
1899 }
1900 $recipe .= <<"EOF" if defined $argfile;
1901$argfile: $argfiledeps
1902 \$(RM) $argfile
1903 $argfilecmds
1904EOF
1905 return $recipe;
1906 }
1907 sub obj2dso {
1908 my %args = @_;
1909 my $dso = platform->dso($args{module});
1910 my @linkdirs = ();
1911 my @linklibs = ();
1912 foreach (@{$args{deps}}) {
1913 next unless defined $_;
1914 if (platform->isstaticlib($_)) {
1915 push @linklibs, platform->convertext($_);
1916 } else {
1917 my $d = "-L" . dirname($_);
1918 my $l = basename($_);
1919 $l =~ s/^lib//;
1920 $l = "-l" . $l;
1921 push @linklibs, $l;
1922 push @linkdirs, $d unless grep { $d eq $_ } @linkdirs;
1923 }
1924 }
1925 my $linkflags = join("", map { $_." " } @linkdirs);
1926 my $linklibs = join("", map { $_." " } @linklibs);
1927 my @objs = map { platform->convertext($_) }
1928 grep { !platform->isdef($_) }
1929 @{$args{objs}};
1930 my @defs = map { platform->def($_) }
1931 grep { platform->isdef($_) }
1932 @{$args{objs}};
1933 my @deps = compute_lib_depends(@{$args{deps}});
1934 my $shared_def = join("", map { ' '.$target{shared_defflag}.$_ } @defs);
1935 # Next line needs to become "less magic" (see PR #11950)
1936 $shared_def .= ' '.$target{shared_fipsflag} if (defined $target{shared_fipsflag} && $shared_def =~ m/providers\/fips/);
1937 my $objs = join(" \\\n\t\t", fill_lines(' ', $COLUMNS - 16, @objs));
1938 my $deps = join(" \\\n" . ' ' x (length($dso) + 2),
1939 fill_lines(' ', $COLUMNS - length($dso) - 2,
1940 @objs, @defs, @deps));
1941
1942 return <<"EOF";
1943$dso: $deps
1944 \$(CC) \$(DSO_CFLAGS) $linkflags\$(DSO_LDFLAGS) \\
1945 -o $dso$shared_def \\
1946 $objs \\
1947 $linklibs\$(DSO_EX_LIBS)
1948EOF
1949 }
1950 sub obj2lib {
1951 my %args = @_;
1952 my $lib = platform->staticlib($args{lib});
1953 my @objs = map { platform->obj($_) } @{$args{objs}};
1954 my $deps = join(" \\\n" . ' ' x (length($lib) + 2),
1955 fill_lines(' ', $COLUMNS - length($lib) - 2, @objs));
1956 my $max_per_call = 500;
1957 my @objs_grouped;
1958 push @objs_grouped, join(" ", splice @objs, 0, $max_per_call) while @objs;
1959 my $fill_lib =
1960 join("\n\t", (map { "\$(AR) \$(ARFLAGS) $lib $_" } @objs_grouped));
1961 return <<"EOF";
1962$lib: $deps
1963 \$(RM) $lib
1964 $fill_lib
1965 \$(RANLIB) \$\@ || echo Never mind.
1966EOF
1967 }
1968 sub obj2bin {
1969 my %args = @_;
1970 my $bin = platform->bin($args{bin});
1971 my @objs = map { platform->obj($_) } @{$args{objs}};
1972 my @deps = compute_lib_depends(@{$args{deps}});
1973 my $objs = join(" \\\n" . ' ' x (length($bin) + 2),
1974 fill_lines(' ', $COLUMNS - length($bin) - 2, @objs));
1975 my @linkdirs = ();
1976 my @linklibs = ();
1977 foreach (@{$args{deps}}) {
1978 next unless defined $_;
1979 if (platform->isstaticlib($_)) {
1980 push @linklibs, platform->convertext($_);
1981 } else {
1982 my $d = "-L" . dirname($_);
1983 my $l = basename($_);
1984 $l =~ s/^lib//;
1985 $l = "-l" . $l;
1986 push @linklibs, $l;
1987 push @linkdirs, $d unless grep { $d eq $_ } @linkdirs;
1988 }
1989 }
1990 my $linkflags = join("", map { $_." " } @linkdirs);
1991 my $linklibs = join("", map { $_." " } @linklibs);
1992 my $cmd = '$(CC)';
1993 my $cmdflags = '$(BIN_CFLAGS)';
1994 if (grep /_cc\.o$/, @{$args{objs}}) {
1995 $cmd = '$(CXX)';
1996 $cmdflags = '$(BIN_CXXFLAGS)';
1997 }
1998
1999 my $objs = join(" \\\n\t\t", fill_lines(' ', $COLUMNS - 16, @objs));
2000 my $deps = join(" \\\n" . ' ' x (length($bin) + 2),
2001 fill_lines(' ', $COLUMNS - length($bin) - 2,
2002 @objs, @deps));
2003
2004 return <<"EOF";
2005$bin: $deps
2006 rm -f $bin
2007 \$\${LDCMD:-$cmd} $cmdflags $linkflags\$(BIN_LDFLAGS) \\
2008 -o $bin \\
2009 $objs \\
2010 $linklibs\$(BIN_EX_LIBS)
2011EOF
2012 }
2013 sub in2script {
2014 my %args = @_;
2015 my $script = $args{script};
2016 my $sources = join(" ", @{$args{sources}});
2017 my $dofile = abs2rel(rel2abs(catfile($config{sourcedir},
2018 "util", "dofile.pl")),
2019 rel2abs($config{builddir}));
2020 return <<"EOF";
2021$script: $sources configdata.pm
2022 \$(RM) "$script"
2023 \$(PERL) "-I\$(BLDDIR)" -Mconfigdata "$dofile" \\
2024 "-o$target{build_file}" $sources > "$script"
2025 chmod a+x $script
2026EOF
2027 }
2028 sub generatedir {
2029 my %args = @_;
2030 my $dir = $args{dir};
2031 my @deps = compute_platform_depends(@{$args{deps}});
2032 my @comments = ();
2033
2034 # We already have a 'test' target, and the top directory is just plain
2035 # silly
2036 return if $dir eq "test" || $dir eq ".";
2037
2038 foreach my $type (("dso", "lib", "bin", "script")) {
2039 next unless defined($unified_info{dirinfo}->{$dir}->{products}->{$type});
2040 # For lib object files, we could update the library. However, it
2041 # was decided that it's enough to build the directory local object
2042 # files, so we don't need to add any actions, and the dependencies
2043 # are already taken care of.
2044 if ($type ne "lib") {
2045 foreach my $prod (@{$unified_info{dirinfo}->{$dir}->{products}->{$type}}) {
2046 if (dirname($prod) eq $dir) {
2047 push @deps, compute_platform_depends($prod);
2048 } else {
2049 push @comments, "# No support to produce $type ".join(", ", @{$unified_info{dirinfo}->{$dir}->{products}->{$type}});
2050 }
2051 }
2052 }
2053 }
2054
2055 my $target = "$dir $dir/";
2056 my $deps = join(" \\\n\t",
2057 fill_lines(' ', $COLUMNS - 8, @deps));
2058 my $comments = join("\n", "", @comments);
2059 return <<"EOF";
2060$target: \\
2061 $deps$comments
2062EOF
2063 }
2064 "" # Important! This becomes part of the template result.
2065-}
Note: See TracBrowser for help on using the repository browser.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette