windows-makefile.tmpl 29.6 KB
Newer Older
1 2 3 4 5 6
##
## Makefile for OpenSSL
##
## {- join("\n## ", @autowarntext) -}
{-
 our $objext = $target{obj_extension} || ".obj";
7
 our $resext = $target{res_extension} || ".res";
8 9 10 11 12 13 14
 our $depext = $target{dep_extension} || ".d";
 our $exeext = $target{exe_extension} || ".exe";
 our $libext = $target{lib_extension} || ".lib";
 our $shlibext = $target{shared_extension} || ".dll";
 our $shlibextimport = $target{shared_import_extension} || ".lib";
 our $dsoext = $target{dso_extension} || ".dll";

15
 (our $sover_dirname = $config{shlib_version_number}) =~ s|\.|_|g;
16

17 18
 my $build_scheme = $target{build_scheme};
 my $install_flavour = $build_scheme->[$#$build_scheme]; # last element
19
 my $win_installenv =
20 21
     $install_flavour eq "VC-WOW" ? "ProgramFiles(x86)"
                                  : "ProgramW6432";
22
 my $win_commonenv =
23 24
     $install_flavour eq "VC-WOW" ? "CommonProgramFiles(x86)"
                                  : "CommonProgramW6432";
25
 our $win_installroot =
26
     defined($ENV{$win_installenv}) ? $win_installenv : 'ProgramFiles';
27
 our $win_commonroot =
28
     defined($ENV{$win_commonenv}) ? $win_commonenv : 'CommonProgramFiles';
29 30 31 32

 # expand variables early
 $win_installroot = $ENV{$win_installroot};
 $win_commonroot = $ENV{$win_commonroot};
33

34 35
 sub shlib {
     my $lib = shift;
36 37
     return () if $disabled{shared} || $lib =~ /\.a$/;
     return () unless defined $unified_info{sharednames}->{$lib};
38 39 40
     return $unified_info{sharednames}->{$lib} . $shlibext;
 }

41 42 43 44 45
 sub lib {
     (my $lib = shift) =~ s/\.a$//;
     return $lib . $libext;
 }

46 47
 sub shlib_import {
     my $lib = shift;
48
     return () if $disabled{shared} || $lib =~ /\.a$/;
49 50 51 52 53 54 55 56
     return $lib . $shlibextimport;
 }

 sub dso {
     my $dso = shift;

     return $dso . $dsoext;
 }
57 58 59 60 61
 # This makes sure things get built in the order they need
 # to. You're welcome.
 sub dependmagic {
     my $target = shift;

62
     return "$target: build_generated\n\t\$(MAKE) /\$(MAKEFLAGS) depend && \$(MAKE) /\$(MAKEFLAGS) _$target\n_$target";
63
 }
64 65 66 67 68 69 70 71 72 73 74 75 76
 '';
-}

PLATFORM={- $config{target} -}
SRCDIR={- $config{sourcedir} -}
BLDDIR={- $config{builddir} -}

VERSION={- $config{version} -}
MAJOR={- $config{major} -}
MINOR={- $config{minor} -}

SHLIB_VERSION_NUMBER={- $config{shlib_version_number} -}

77
LIBS={- join(" ", map { lib($_) } @{$unified_info{libraries}}) -}
78
SHLIBS={- join(" ", map { shlib($_) } @{$unified_info{libraries}}) -}
79
SHLIBPDBS={- join(" ", map { local $shlibext = ".pdb"; shlib($_) } @{$unified_info{libraries}}) -}
80
ENGINES={- join(" ", map { dso($_) } @{$unified_info{engines}}) -}
81
ENGINEPDBS={- join(" ", map { local $dsoext = ".pdb"; dso($_) } @{$unified_info{engines}}) -}
82
PROGRAMS={- our @PROGRAMS = map { $_.$exeext } @{$unified_info{programs}}; join(" ", @PROGRAMS) -}
83
PROGRAMPDBS={- join(" ", map { $_.".pdb" } @{$unified_info{programs}}) -}
84
SCRIPTS={- join(" ", @{$unified_info{scripts}}) -}
85
{- output_off() if $disabled{makedepend}; "" -}
86 87 88
DEPS={- join(" ", map { (my $x = $_) =~ s|\.o$|$depext|; $x; }
                  grep { $unified_info{sources}->{$_}->[0] =~ /\.c$/ }
                  keys %{$unified_info{sources}}); -}
89
{- output_on() if $disabled{makedepend}; "" -}
90
GENERATED_MANDATORY={- join(" ", @{$unified_info{depends}->{""}} ) -}
91 92 93 94 95 96
GENERATED={- join(" ",
                  ( map { (my $x = $_) =~ s|\.[sS]$|\.asm|; $x }
                    grep { defined $unified_info{generate}->{$_} }
                    map { @{$unified_info{sources}->{$_}} }
                    grep { /\.o$/ } keys %{$unified_info{sources}} ),
                  ( grep { /\.h$/ } keys %{$unified_info{generate}} )) -}
97

98
INSTALL_LIBS={- join(" ", map { lib($_) } @{$unified_info{install}->{libraries}}) -}
99 100 101 102 103 104 105 106 107 108 109
INSTALL_SHLIBS={- join(" ", map { shlib($_) } @{$unified_info{install}->{libraries}}) -}
INSTALL_SHLIBPDBS={- join(" ", map { local $shlibext = ".pdb"; shlib($_) } @{$unified_info{install}->{libraries}}) -}
INSTALL_ENGINES={- join(" ", map { dso($_) } @{$unified_info{install}->{engines}}) -}
INSTALL_ENGINEPDBS={- join(" ", map { local $dsoext = ".pdb"; dso($_) } @{$unified_info{install}->{engines}}) -}
INSTALL_PROGRAMS={- join(" ", map { $_.$exeext } grep { !m|^test\\| } @{$unified_info{install}->{programs}}) -}
INSTALL_PROGRAMPDBS={- join(" ", map { $_.".pdb" } grep { !m|^test\\| } @{$unified_info{install}->{programs}}) -}
{- output_off() if $disabled{apps}; "" -}
BIN_SCRIPTS=$(BLDDIR)\tools\c_rehash.pl
MISC_SCRIPTS=$(BLDDIR)\apps\CA.pl $(BLDDIR)\apps\tsget.pl
{- output_on() if $disabled{apps}; "" -}

R
Richard Levitte 已提交
110 111 112
APPS_OPENSSL={- use File::Spec::Functions;
                catfile("apps","openssl") -}

113 114
# Do not edit these manually. Use Configure with --prefix or --openssldir
# to change this!  Short explanation in the top comment in Configure
R
Richard Levitte 已提交
115 116 117
INSTALLTOP_dev={- # $prefix is used in the OPENSSLDIR perl snippet
                  #
                  use File::Spec::Functions qw(:DEFAULT splitpath);
118 119
                  our $prefix = canonpath($config{prefix}
                                          || "$win_installroot\\OpenSSL");
R
Richard Levitte 已提交
120
                  our ($prefix_dev, $prefix_dir, $prefix_file) =
121
                      splitpath($prefix, 1);
R
Richard Levitte 已提交
122
                  $prefix_dev -}
123
INSTALLTOP_dir={- canonpath($prefix_dir) -}
R
Richard Levitte 已提交
124 125
OPENSSLDIR_dev={- #
                  # The logic here is that if no --openssldir was given,
126
                  # OPENSSLDIR will get the value "$win_commonroot\\SSL".
R
Richard Levitte 已提交
127 128 129 130 131 132 133
                  # If --openssldir was given and the value is an absolute
                  # path, OPENSSLDIR will get its value without change.
                  # If the value from --openssldir is a relative path,
                  # OPENSSLDIR will get $prefix with the --openssldir
                  # value appended as a subdirectory.
                  #
                  use File::Spec::Functions qw(:DEFAULT splitpath);
134
                  our $openssldir =
R
Richard Levitte 已提交
135 136
                      $config{openssldir} ?
                          (file_name_is_absolute($config{openssldir}) ?
137
                               canonpath($config{openssldir})
R
Richard Levitte 已提交
138
                               : catdir($prefix, $config{openssldir}))
139
                          : canonpath("$win_commonroot\\SSL");
R
Richard Levitte 已提交
140 141 142
                  our ($openssldir_dev, $openssldir_dir, $openssldir_file) =
                      splitpath($openssldir, 1);
                  $openssldir_dev -}
143
OPENSSLDIR_dir={- canonpath($openssldir_dir) -}
144
LIBDIR={- our $libdir = $config{libdir} || "lib";
145
          file_name_is_absolute($libdir) ? "" : $libdir -}
R
Richard Levitte 已提交
146
ENGINESDIR_dev={- use File::Spec::Functions qw(:DEFAULT splitpath);
147
                  our $enginesdir = catdir($prefix,$libdir,"engines-$sover_dirname");
R
Richard Levitte 已提交
148 149 150
                  our ($enginesdir_dev, $enginesdir_dir, $enginesdir_file) =
                      splitpath($enginesdir, 1);
                  $enginesdir_dev -}
151
ENGINESDIR_dir={- canonpath($enginesdir_dir) -}
R
Richard Levitte 已提交
152 153 154 155 156 157 158 159 160
!IF "$(DESTDIR)" != ""
INSTALLTOP=$(DESTDIR)$(INSTALLTOP_dir)
OPENSSLDIR=$(DESTDIR)$(OPENSSLDIR_dir)
ENGINESDIR=$(DESTDIR)$(ENGINESDIR_dir)
!ELSE
INSTALLTOP=$(INSTALLTOP_dev)$(INSTALLTOP_dir)
OPENSSLDIR=$(OPENSSLDIR_dev)$(OPENSSLDIR_dir)
ENGINESDIR=$(ENGINESDIR_dev)$(ENGINESDIR_dir)
!ENDIF
161

162 163 164 165
# $(libdir) is chosen to be compatible with the GNU coding standards
libdir={- file_name_is_absolute($libdir)
          ? $libdir : '$(INSTALLTOP)\$(LIBDIR)' -}

166 167 168 169 170 171 172 173 174 175 176 177
##### User defined commands and flags ################################

CC={- $config{CC} -}
CPP={- $config{CPP} -}
CPPFLAGS={- our $cppflags1 = join(" ",
                                  (map { "-D".$_} @{$config{CPPDEFINES}}),
                                  (map { " /I ".$_} @{$config{CPPINCLUDES}}),
                                  @{$config{CPPFLAGS}}) -}
CFLAGS={- join(' ', @{$config{CFLAGS}}) -}
LD={- $config{LD} -}
LDFLAGS={- join(' ', @{$config{LDFLAGS}}) -}
EX_LIBS={- join(' ', @{$config{LDLIBS}}) -}
178 179 180

PERL={- $config{perl} -}

181 182 183 184 185 186 187 188
AR={- $config{AR} -}
ARFLAGS= {- join(' ', @{$config{ARFLAGS}}) -}

MT={- $config{MT} -}
MTFLAGS= {- join(' ', @{$config{MTFLAGS}}) -}

AS={- $config{AS} -}
ASFLAGS={- join(' ', @{$config{ASFLAGS}}) -}
189

190
RC={- $config{RC} -}
191

192 193 194 195 196 197 198
##### Special command flags ##########################################

COUTFLAG={- $target{coutflag} -}$(OSSL_EMPTY)
LDOUTFLAG={- $target{ldoutflag} -}$(OSSL_EMPTY)
AROUTFLAG={- $target{aroutflag} -}$(OSSL_EMPTY)
MTINFLAG={- $target{mtinflag} -}$(OSSL_EMPTY)
MTOUTFLAG={- $target{mtoutflag} -}$(OSSL_EMPTY)
199
ASOUTFLAG={- $target{asoutflag} -}$(OSSL_EMPTY)
200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232
RCOUTFLAG={- $target{rcoutflag} -}$(OSSL_EMPTY)

##### Project flags ##################################################

# Variables starting with CNF_ are common variables for all product types

CNF_ASFLAGS={- join(' ', $target{asflags} || (),
                         @{$config{asflags}}) -}
CNF_CPPFLAGS={- our $cppfags2 =
                    join(' ', $target{cppflags} || (),
                              (map { quotify_l("-D".$_) } @{$target{defines}},
                                                          @{$config{defines}}),
                              (map { quotify_l("-I".$_) } @{$target{includes}},
                                                          @{$config{includes}}),
                              @{$config{cppflags}}) -}
CNF_CFLAGS={- join(' ', $target{cflags} || (),
                        @{$config{cflags}}) -}
CNF_CXXFLAGS={- join(' ', $target{cxxflags} || (),
                          @{$config{cxxflags}}) -}
CNF_LDFLAGS={- join(' ', $target{lflags} || (),
                         @{$config{lflags}}) -}
CNF_EX_LIBS={- join(' ', $target{ex_libs} || (),
                         @{$config{ex_libs}}) -}

# Variables starting with LIB_ are used to build library object files
# and shared libraries.
# Variables starting with DSO_ are used to build DSOs and their object files.
# Variables starting with BIN_ are used to build programs and their object
# files.

LIB_ASFLAGS={- join(' ', $target{lib_asflags} || (),
                         @{$config{lib_asflags}},
                         '$(CNF_ASFLAGS)', '$(ASFLAGS)') -}
233 234
LIB_CPPFLAGS={- our $lib_cppflags =
                join(' ', $target{lib_cppflags} || (),
235 236 237 238 239
                          $target{shared_cppflag} || (),
                          (map { quotify_l("-D".$_) }
                               @{$target{lib_defines}},
                               @{$target{shared_defines}},
                               @{$config{lib_defines}},
240
                               @{$config{shared_defines}}),
241 242 243 244 245 246
                          (map { quotify_l("-I".$_) }
                               @{$target{lib_includes}},
                               @{$target{shared_includes}},
                               @{$config{lib_includes}},
                               @{$config{shared_includes}}),
                          @{$config{lib_cppflags}},
247 248 249 250 251
                          @{$config{shared_cppflag}});
                join(' ', $lib_cppflags,
                          (map { quotify_l("-D".$_) }
                               "OPENSSLDIR=\"$openssldir\"",
                               "ENGINESDIR=\"$enginesdir\""),
252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299
                          '$(CNF_CPPFLAGS)', '$(CPPFLAGS)') -}
LIB_CFLAGS={- join(' ', $target{lib_cflags} || (),
                        $target{shared_cflag} || (),
                        @{$config{lib_cflags}},
                        @{$config{shared_cflag}},
                        '$(CNF_CFLAGS)', '$(CFLAGS)') -}
LIB_LDFLAGS={- join(' ', $target{shared_ldflag} || (),
                         $config{shared_ldflag} || (),
                         '$(CNF_LDFLAGS)', '$(LDFLAGS)') -}
LIB_EX_LIBS=$(CNF_EX_LIBS) $(EX_LIBS)
DSO_ASFLAGS={- join(' ', $target{dso_asflags} || (),
                         $target{module_asflags} || (),
                         @{$config{dso_asflags}},
                         @{$config{module_asflags}},
                         '$(CNF_ASFLAGS)', '$(ASFLAGS)') -}
DSO_CPPFLAGS={- join(' ', $target{dso_cppflags} || (),
                          $target{module_cppflags} || (),
                          @{$config{dso_cppflags}},
                          @{$config{module_cppflags}},
                          '$(CNF_CPPFLAGS)', '$(CPPFLAGS)') -}
DSO_CFLAGS={- join(' ', $target{dso_cflags} || (),
                        $target{module_cflags} || (),
                        @{$config{dso_cflags}},
                        @{$config{module_cflags}},
                        '$(CNF_CFLAGS)', '$(CFLAGS)') -}
DSO_LDFLAGS={- join(' ', $target{dso_lflags} || (),
                         $target{module_ldflags} || (),
                         @{$config{dso_lflags}},
                         @{$config{module_ldflags}},
                         '$(CNF_LDFLAGS)', '$(LDFLAGS)') -}
DSO_EX_LIBS=$(CNF_EX_LIBS) $(EX_LIBS)
BIN_ASFLAGS={- join(' ', $target{bin_asflags} || (),
                         @{$config{bin_asflags}},
                         '$(CNF_ASFLAGS)', '$(ASFLAGS)') -}
BIN_CPPFLAGS={- join(' ', $target{bin_cppflags} || (),
                          @{$config{bin_cppflags}},
                          '$(CNF_CPPFLAGS)', '$(CPPFLAGS)') -}
BIN_CFLAGS={- join(' ', $target{bin_cflags} || (),
                        @{$config{bin_cflags}},
                        '$(CNF_CFLAGS)', '$(CFLAGS)') -}
BIN_LDFLAGS={- join(' ', $target{bin_lflags} || (),
                         @{$config{bin_lflags}},
                         '$(CNF_LDFLAGS)', '$(LDFLAGS)') -}
BIN_EX_LIBS=$(CNF_EX_LIBS) $(EX_LIBS)

# CPPFLAGS_Q is used for one thing only: to build up buildinf.h
CPPFLAGS_Q={- $cppflags1 =~ s|([\\"])|\\$1|g;
              $cppflags2 =~ s|([\\"])|\\$1|g;
300 301
              join(' ', $lib_cppflags || (), $cppflags2 || (),
                        $cppflags1 || ()) -}
302

303 304 305 306 307 308
PERLASM_SCHEME= {- $target{perlasm_scheme} -}

PROCESSOR= {- $config{processor} -}

# The main targets ###################################################

309 310 311 312
{- dependmagic('all'); -}: build_libs_nodep build_engines_nodep build_programs_nodep
{- dependmagic('build_libs'); -}: build_libs_nodep
{- dependmagic('build_engines'); -}: build_engines_nodep
{- dependmagic('build_programs'); -}: build_programs_nodep
313

314
build_generated: $(GENERATED_MANDATORY)
315
build_libs_nodep: $(LIBS) {- join(" ",map { shlib_import($_) } @{$unified_info{libraries}}) -}
316
build_engines_nodep: $(ENGINES)
317
build_programs_nodep: $(PROGRAMS) $(SCRIPTS)
318

319 320 321
# Kept around for backward compatibility
build_apps build_tests: build_programs

322 323 324 325
# Convenience target to prebuild all generated files, not just the mandatory
# ones
build_all_generated: $(GENERATED_MANDATORY) $(GENERATED)

326
test: tests
327
{- dependmagic('tests'); -}: build_programs_nodep build_engines_nodep
M
Matt Caswell 已提交
328
	@rem {- output_off() if $disabled{tests}; "" -}
329
	-mkdir $(BLDDIR)\test\test-runs
330 331
	set SRCTOP=$(SRCDIR)
	set BLDTOP=$(BLDDIR)
332
	set RESULT_D=$(BLDDIR)\test\test-runs
333
	set PERL=$(PERL)
B
Bernd Edlinger 已提交
334
	set OPENSSL_ENGINES=$(MAKEDIR)\engines
335
	set OPENSSL_DEBUG_MEMORY=on
336
	"$(PERL)" "$(SRCDIR)\test\run_tests.pl" $(TESTS)
M
Matt Caswell 已提交
337 338 339
	@rem {- if ($disabled{tests}) { output_on(); } else { output_off(); } "" -}
	@echo "Tests are not supported with your chosen Configure options"
	@rem {- output_on() if !$disabled{tests}; "" -}
340 341

list-tests:
342 343
	@rem {- output_off() if $disabled{tests}; "" -}
	@set SRCTOP=$(SRCDIR)
344
	@"$(PERL)" "$(SRCDIR)\test\run_tests.pl" list
345 346 347
	@rem {- if ($disabled{tests}) { output_on(); } else { output_off(); } "" -}
	@echo "Tests are not supported with your chosen Configure options"
	@rem {- output_on() if !$disabled{tests}; "" -}
348

349 350 351 352
install: install_sw install_ssldirs install_docs

uninstall: uninstall_docs uninstall_sw

353
libclean:
354 355 356
	"$(PERL)" -e "map { m/(.*)\.dll$$/; unlink glob """$$1.*"""; } @ARGV" $(SHLIBS)
	"$(PERL)" -e "map { m/(.*)\.dll$$/; unlink glob """apps/$$1.*"""; } @ARGV" $(SHLIBS)
	"$(PERL)" -e "map { m/(.*)\.dll$$/; unlink glob """test/$$1.*"""; } @ARGV" $(SHLIBS)
M
Matt Caswell 已提交
357
	"$(PERL)" -e "map { m/(.*)\.dll$$/; unlink glob """fuzz/$$1.*"""; } @ARGV" $(SHLIBS)
358
	-del /Q /F $(LIBS)
R
Richard Levitte 已提交
359
	-del /Q ossl_static.pdb
360 361

clean: libclean
362 363 364
	{- join("\n\t", map { "-del /Q /F $_" } @PROGRAMS) -}
	-del /Q /F $(ENGINES)
	-del /Q /F $(SCRIPTS)
365
	-del /Q /F $(GENERATED)
366 367 368
	-del /Q /S /F *.d
	-del /Q /S /F *.obj
	-del /Q /S /F *.pdb
F
FdaSilvaYY 已提交
369 370 371
	-del /Q /F *.exp
	-del /Q /F apps\*.exp
	-del /Q /F engines\*.exp
372 373
	-del /Q /S /F engines\*.ilk
	-del /Q /S /F engines\*.lib
374 375 376
	-del /Q /S /F apps\*.lib
	-del /Q /S /F engines\*.manifest
	-del /Q /S /F apps\*.manifest
377
	-del /Q /S /F test\*.manifest
378

379 380 381 382
distclean: clean
	-del /Q /F configdata.pm
	-del /Q /F makefile

383 384
depend:

385 386 387 388 389 390
# Install helper targets #############################################

install_sw: all install_dev install_engines install_runtime

uninstall_sw: uninstall_runtime uninstall_engines uninstall_dev

391
install_docs: install_html_docs
392

393
uninstall_docs: uninstall_html_docs
394 395

install_ssldirs:
R
Richard Levitte 已提交
396 397 398
	@"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(OPENSSLDIR)\certs"
	@"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(OPENSSLDIR)\private"
	@"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(OPENSSLDIR)\misc"
399
	@"$(PERL)" "$(SRCDIR)\util\copy.pl" "$(SRCDIR)\apps\openssl.cnf" \
400 401 402 403
                                        "$(OPENSSLDIR)\openssl.cnf.dist"
	@IF NOT EXIST "$(OPENSSLDIR)\openssl.cnf" \
         "$(PERL)" "$(SRCDIR)\util\copy.pl" "$(SRCDIR)\apps\openssl.cnf" \
                                        "$(OPENSSLDIR)\openssl.cnf"
404
	@"$(PERL)" "$(SRCDIR)\util\copy.pl" $(MISC_SCRIPTS) \
R
Richard Levitte 已提交
405
                                        "$(OPENSSLDIR)\misc"
R
Rich Salz 已提交
406 407 408 409 410
	@"$(PERL)" "$(SRCDIR)\util\copy.pl" "$(SRCDIR)\apps\ct_log_list.cnf" \
                                        "$(OPENSSLDIR)\ct_log_list.cnf.dist"
	@IF NOT EXIST "$(OPENSSLDIR)\ct_log_list.cnf" \
         "$(PERL)" "$(SRCDIR)\util\copy.pl" "$(SRCDIR)\apps\ct_log_list.cnf" \
                                        "$(OPENSSLDIR)\ct_log_list.cnf"
411 412 413 414

install_dev:
	@if "$(INSTALLTOP)"=="" ( echo INSTALLTOP should not be empty & exit 1 )
	@echo *** Installing development files
R
Richard Levitte 已提交
415
	@"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(INSTALLTOP)\include\openssl"
416
	@rem {- output_off() unless grep { $_ eq "OPENSSL_USE_APPLINK" } @{$config{defines}}; "" -}
417 418
	@"$(PERL)" "$(SRCDIR)\util\copy.pl" "$(SRCDIR)\ms\applink.c" \
				       "$(INSTALLTOP)\include\openssl"
419
	@rem {- output_on() unless grep { $_ eq "OPENSSL_USE_APPLINK" } @{$config{defines}}; "" -}
420
	@"$(PERL)" "$(SRCDIR)\util\copy.pl" "$(SRCDIR)\include\openssl\*.h" \
R
Richard Levitte 已提交
421
				       "$(INSTALLTOP)\include\openssl"
422
	@"$(PERL)" "$(SRCDIR)\util\copy.pl" $(BLDDIR)\include\openssl\*.h \
R
Richard Levitte 已提交
423
				       "$(INSTALLTOP)\include\openssl"
424 425
	@"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(libdir)"
	@"$(PERL)" "$(SRCDIR)\util\copy.pl" $(INSTALL_LIBS) "$(libdir)"
426
	@if "$(SHLIBS)"=="" \
427
	 "$(PERL)" "$(SRCDIR)\util\copy.pl" ossl_static.pdb "$(libdir)"
428 429 430 431 432 433

uninstall_dev:

install_engines:
	@if "$(INSTALLTOP)"=="" ( echo INSTALLTOP should not be empty & exit 1 )
	@echo *** Installing engines
R
Richard Levitte 已提交
434
	@"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(ENGINESDIR)"
435
	@if not "$(ENGINES)"=="" \
436
	 "$(PERL)" "$(SRCDIR)\util\copy.pl" $(INSTALL_ENGINES) "$(ENGINESDIR)"
437
	@if not "$(ENGINES)"=="" \
438
	 "$(PERL)" "$(SRCDIR)\util\copy.pl" $(INSTALL_ENGINEPDBS) "$(ENGINESDIR)"
439 440 441 442 443 444

uninstall_engines:

install_runtime:
	@if "$(INSTALLTOP)"=="" ( echo INSTALLTOP should not be empty & exit 1 )
	@echo *** Installing runtime files
R
Richard Levitte 已提交
445
	@"$(PERL)" "$(SRCDIR)\util\mkdir-p.pl" "$(INSTALLTOP)\bin"
446
	@if not "$(SHLIBS)"=="" \
447
	 "$(PERL)" "$(SRCDIR)\util\copy.pl" $(INSTALL_SHLIBS) "$(INSTALLTOP)\bin"
448
	@if not "$(SHLIBS)"=="" \
449
	 "$(PERL)" "$(SRCDIR)\util\copy.pl" $(INSTALL_SHLIBPDBS) \
R
Richard Levitte 已提交
450
                                        "$(INSTALLTOP)\bin"
451
	@"$(PERL)" "$(SRCDIR)\util\copy.pl" $(INSTALL_PROGRAMS) \
R
Richard Levitte 已提交
452
                                        "$(INSTALLTOP)\bin"
453
	@"$(PERL)" "$(SRCDIR)\util\copy.pl" $(INSTALL_PROGRAMPDBS) \
R
Richard Levitte 已提交
454
                                        "$(INSTALLTOP)\bin"
455
	@"$(PERL)" "$(SRCDIR)\util\copy.pl" $(BIN_SCRIPTS) \
R
Richard Levitte 已提交
456
                                        "$(INSTALLTOP)\bin"
457 458 459

uninstall_runtime:

460 461
install_html_docs:
        "$(PERL)" "$(SRCDIR)\util\process_docs.pl" \
R
Richard Levitte 已提交
462
                "--destdir=$(INSTALLTOP)\html" --type=html
463 464 465

uninstall_html_docs:

466 467
# Building targets ###################################################

468
configdata.pm: "$(SRCDIR)\Configure" {- join(" ", map { '"'.$_.'"' } @{$config{build_file_templates}}, @{$config{build_infos}}, @{$config{conf_files}}) -}
469
	@echo "Detected changed: $?"
470
	"$(PERL)" configdata.pm -r
471 472 473 474 475
	@echo "**************************************************"
	@echo "***                                            ***"
	@echo "***   Please run the same make command again   ***"
	@echo "***                                            ***"
	@echo "**************************************************"
A
Andy Polyakov 已提交
476
	@exit 1
477

478
reconfigure reconf:
479
	"$(PERL)" configdata.pm -r
480

481 482 483 484 485 486 487 488
{-
 use File::Basename;
 use File::Spec::Functions qw/:DEFAULT abs2rel rel2abs/;

 # Helper function to figure out dependencies on libraries
 # It takes a list of library names and outputs a list of dependencies
 sub compute_lib_depends {
     if ($disabled{shared}) {
489
	 return map { lib($_) } @_;
490
     }
491 492 493 494 495 496
     foreach (@_) {
         (my $l = $_) =~ s/\.a$//;
         die "Linking with static variants of shared libraries is not supported in this configuration\n"
             if $l ne $_ && shlib($l);
     }
     return map { shlib_import($_) or lib($_) } @_;
497 498
 }

499 500 501
  sub generatesrc {
      my %args = @_;
      (my $target = $args{src}) =~ s/\.[sS]$/.asm/;
502 503
      my ($gen0, @gens) = @{$args{generator}};
      my $generator = '"'.$gen0.'"'.join('', map { " $_" } @gens);
504 505 506 507
      my $generator_incs = join("", map { " -I \"$_\"" } @{$args{generator_incs}});
      my $incs = join("", map { " /I \"$_\"" } @{$args{incs}});
      my $deps = @{$args{deps}} ?
          '"'.join('" "', @{$args{generator_deps}}, @{$args{deps}}).'"' : '';
508 509

      if ($target !~ /\.asm$/) {
510 511 512 513 514 515 516 517 518 519 520
          if ($args{generator}->[0] =~ m|^.*\.in$|) {
              my $dofile = abs2rel(rel2abs(catfile($config{sourcedir},
                                                   "util", "dofile.pl")),
                                   rel2abs($config{builddir}));
              return <<"EOF";
$target: "$args{generator}->[0]" $deps
	"\$(PERL)" "-I\$(BLDDIR)" -Mconfigdata "$dofile" \\
	    "-o$target{build_file}" $generator > \$@
EOF
	  } else {
              return <<"EOF";
521 522
$target: "$args{generator}->[0]" $deps
	"\$(PERL)"$generator_incs $generator > \$@
523
EOF
524
	  }
525 526
      } else {
          if ($args{generator}->[0] =~ /\.pl$/) {
527
              $generator = '"$(PERL)"'.$generator_incs.' '.$generator;
528 529 530 531 532 533
          } elsif ($args{generator}->[0] =~ /\.S$/) {
              $generator = undef;
          } else {
              die "Generator type for $src unknown: $generator\n";
          }

534
          my $cppflags = $incs;
535 536 537 538 539
          $cppflags .= {
              lib => ' $(LIB_CFLAGS) $(LIB_CPPFLAGS)',
              dso => ' $(DSO_CFLAGS) $(DSO_CPPFLAGS)',
              bin => ' $(BIN_CFLAGS) $(BIN_CPPFLAGS)'
          } -> {$args{intent}};
540 541 542 543 544
          if (defined($generator)) {
              # If the target is named foo.S in build.info, we want to
              # end up generating foo.s in two steps.
              if ($args{src} =~ /\.S$/) {
                   return <<"EOF";
545
$target: "$args{generator}->[0]" $deps
546 547
	set ASM=\$(AS)
	$generator \$@.S
R
Richard Levitte 已提交
548
	\$(CPP) $cppflags \$@.S > \$@.i && move /Y \$@.i \$@
549 550 551 552 553
        del /Q \$@.S
EOF
              }
              # Otherwise....
              return <<"EOF";
554
$target: "$args{generator}->[0]" $deps
555 556 557 558 559
	set ASM=\$(AS)
	$generator \$@
EOF
          }
          return <<"EOF";
560
$target: "$args{generator}->[0]" $deps
R
Richard Levitte 已提交
561
	\$(CPP) $incs $cppflags "$args{generator}->[0]" > \$@.i && move /Y \$@.i \$@
562 563 564 565
EOF
      }
  }

566 567
 sub src2obj {
     my %args = @_;
A
Andy Polyakov 已提交
568 569
     my @srcs = map { (my $x = $_) =~ s/\.s$/.asm/; $x
                    } ( @{$args{srcs}} );
570 571 572
     my $srcs = '"'.join('" "',  @srcs).'"';
     my $deps = '"'.join('" "', @srcs, @{$args{deps}}).'"';
     my $incs = join("", map { ' /I "'.$_.'"' } @{$args{incs}});
573 574 575
     my $cflags = { lib => ' $(LIB_CFLAGS)',
		    dso => ' $(DSO_CFLAGS)',
		    bin => ' $(BIN_CFLAGS)' } -> {$args{intent}};
576 577 578 579
     $cflags .= $incs;
     $cflags .= { lib => ' $(LIB_CPPFLAGS)',
		  dso => ' $(DSO_CPPFLAGS)',
		  bin => ' $(BIN_CPPFLAGS)' } -> {$args{intent}};
580 581 582
     my $asflags = { lib => ' $(LIB_ASFLAGS)',
		     dso => ' $(DSO_ASFLAGS)',
		     bin => ' $(BIN_ASFLAGS)' } -> {$args{intent}};
583
     my $makedepprog = $config{makedepprog};
584 585 586 587 588 589 590
     if ($srcs[0] =~ /\.rc$/) {
         return <<"EOF";
$args{obj}: $deps
	\$(RC) \$(RCOUTFLAG)\$\@ $srcs
EOF
     }
     (my $obj = $args{obj}) =~ s|\.o$||;
591 592 593
     if ($srcs[0] =~ /\.asm$/) {
         return <<"EOF";
$obj$objext: $deps
594
	\$(AS) $asflags \$(ASOUTFLAG)\$\@ $srcs
595 596
EOF
     }
597
     return <<"EOF"	if (!$disabled{makedepend});
598
$obj$depext: $deps
599
	\$(CC) $cflags /Zs /showIncludes $srcs 2>&1 | \\
600
	    "\$(PERL)" -n << > $obj$depext
601 602 603 604
chomp;
s/^Note: including file: *//;
\$\$collect{\$\$_} = 1;
END { print '$obj$objext: ',join(" ", sort keys \%collect),"\\n" }
605
<<
606
$obj$objext: $obj$depext
607
	\$(CC) $cflags -c \$(COUTFLAG)\$\@ @<<
608
$srcs
609
<<
610 611 612
EOF
    return <<"EOF"	if ($disabled{makedepend});
$obj$objext: $deps
613
	\$(CC) $cflags -c \$(COUTFLAG)\$\@ $srcs
614 615 616 617 618 619 620 621 622 623
EOF
 }

 # On Unix, we build shlibs from static libs, so we're ignoring the
 # object file array.  We *know* this routine is only called when we've
 # configure 'shared'.
 sub libobj2shlib {
     my %args = @_;
     my $lib = $args{lib};
     my $shlib = $args{shlib};
624
     my @objs = map { (my $x = $_) =~ s|\.o$|$objext|; $x }
625
                grep { $_ =~ m/\.(?:o|res)$/ }
626 627 628 629 630 631 632
                @{$args{objs}};
     my @defs = grep { $_ =~ /\.def$/ } @{$args{objs}};
     my @deps = compute_lib_depends(@{$args{deps}});
     die "More than one exported symbols list" if scalar @defs > 1;
     my $linklibs = join("", map { "$_\n" } @deps);
     my $objs = join("\n", @objs);
     my $deps = join(" ", @objs, @defs, @deps);
633
     my $target = shlib_import($lib);
634
     my $shared_def = join("", map { " /def:$_" } @defs);
635
     return <<"EOF"
636
$target: $deps
637
	IF EXIST $shlib$shlibext.manifest DEL /F /Q $shlib$shlibext.manifest
638
	\$(LD) \$(LDFLAGS) \$(LIB_LDFLAGS) \\
639 640
		/implib:\$@ \$(LDOUTFLAG)$shlib$shlibext$shared_def @<< || (DEL /Q \$(\@B).* $shlib.* && EXIT 1)
$objs
641
$linklibs\$(LIB_EX_LIBS)
642
<<
643
	IF EXIST $shlib$shlibext.manifest \\
644
	   \$(MT) \$(MTFLAGS) \$(MTINFLAG)$shlib$shlibext.manifest \$(MTOUTFLAG)$shlib$shlibext
R
Richard Levitte 已提交
645 646
	IF EXIST apps\\$shlib$shlibext DEL /Q /F apps\\$shlib$shlibext
	IF EXIST test\\$shlib$shlibext DEL /Q /F test\\$shlib$shlibext
M
Matt Caswell 已提交
647
	IF EXIST fuzz\\$shlib$shlibext DEL /Q /F fuzz\\$shlib$shlibext
648 649
	COPY $shlib$shlibext apps
	COPY $shlib$shlibext test
M
Matt Caswell 已提交
650
	COPY $shlib$shlibext fuzz
651 652 653 654 655
EOF
 }
 sub obj2dso {
     my %args = @_;
     my $dso = $args{lib};
656
     my $dso_n = basename($dso);
657 658 659 660 661
     my @objs = map { (my $x = $_) =~ s|\.o$|$objext|; $x } @{$args{objs}};
     my @deps = compute_lib_depends(@{$args{deps}});
     my $objs = join("\n", @objs);
     my $linklibs = join("", map { "$_\n" } @deps);
     my $deps = join(" ", @objs, @deps);
662 663
     return <<"EOF";
$dso$dsoext: $deps
664
	IF EXIST $dso$dsoext.manifest DEL /F /Q $dso$dsoext.manifest
665 666
	\$(LD) \$(LDFLAGS) \$(DSO_LDFLAGS) \$(LDOUTFLAG)$dso$dsoext /def:<< @<<
LIBRARY         $dso_n
667 668 669 670
EXPORTS
    bind_engine		@1
    v_check		@2
<<
671
$objs
672
$linklibs \$(DSO_EX_LIBS)
673
<<
674
	IF EXIST $dso$dsoext.manifest \\
675
	   \$(MT) \$(MTFLAGS) \$(MTINFLAG)$dso$dsoext.manifest \$(MTOUTFLAG)$dso$dsoext
676 677 678
EOF
 }
 sub obj2lib {
679 680 681
     my %args = @_;
     my $lib = $args{lib};

682 683 684
     # Because static libs and import libs are both named the same in native
     # Windows, we can't have both.  We skip the static lib in that case,
     # as the shared libs are what we use anyway.
685
     return "" unless $disabled{"shared"} || $lib =~ /\.a$/;
686

687
     $lib =~ s/\.a$//;
688 689 690
     my @objs = map { (my $x = $_) =~ s|\.o$|$objext|; $x } @{$args{objs}};
     my $objs = join("\n", @objs);
     my $deps = join(" ", @objs);
691 692 693
     return <<"EOF";
$lib$libext: $deps
	\$(AR) \$(ARFLAGS) \$(AROUTFLAG)$lib$libext @<<
694
$objs
695 696 697 698 699 700
<<
EOF
 }
 sub obj2bin {
     my %args = @_;
     my $bin = $args{bin};
701 702 703 704 705
     my @objs = map { (my $x = $_) =~ s|\.o$|$objext|; $x } @{$args{objs}};
     my @deps = compute_lib_depends(@{$args{deps}});
     my $objs = join("\n", @objs);
     my $linklibs = join("", map { "$_\n" } @deps);
     my $deps = join(" ", @objs, @deps);
706 707
     return <<"EOF";
$bin$exeext: $deps
708
	IF EXIST $bin$exeext.manifest DEL /F /Q $bin$exeext.manifest
709
	\$(LD) \$(LDFLAGS) \$(BIN_LDFLAGS) \$(LDOUTFLAG)$bin$exeext @<<
710 711
$objs
setargv.obj
712
$linklibs\$(BIN_EX_LIBS)
713
<<
714
	IF EXIST $bin$exeext.manifest \\
715
	   \$(MT) \$(MTFLAGS) \$(MTINFLAG)$bin$exeext.manifest \$(MTOUTFLAG)$bin$exeext
716 717 718 719 720
EOF
  }
  sub in2script {
      my %args = @_;
      my $script = $args{script};
721
      my $sources = '"'.join('" "', @{$args{sources}}).'"';
722 723 724 725 726
      my $dofile = abs2rel(rel2abs(catfile($config{sourcedir},
                                           "util", "dofile.pl")),
                           rel2abs($config{builddir}));
      return <<"EOF";
$script: $sources
727
	"\$(PERL)" "-I\$(BLDDIR)" -Mconfigdata "$dofile" \\
728
	    "-o$target{build_file}" $sources > "$script"
729 730 731 732 733 734 735 736 737 738 739 740 741
EOF
  }
  sub generatedir {
      my %args = @_;
      my $dir = $args{dir};
      my @deps = map { s|\.o$|$objext|; $_ } @{$args{deps}};
      my @actions = ();
      my %extinfo = ( dso => $dsoext,
                      lib => $libext,
                      bin => $exeext );

      foreach my $type (("dso", "lib", "bin", "script")) {
          next unless defined($unified_info{dirinfo}->{$dir}->{products}->{$type});
742 743 744 745
          # For lib object files, we could update the library.  However,
          # LIB on Windows doesn't work that way, so we won't create any
          # actions for it, and the dependencies are already taken care of.
          if ($type ne "lib") {
746 747 748 749
              foreach my $prod (@{$unified_info{dirinfo}->{$dir}->{products}->{$type}}) {
                  if (dirname($prod) eq $dir) {
                      push @deps, $prod.$extinfo{$type};
                  } else {
750
                      push @actions, "\t@rem No support to produce $type ".join(", ", @{$unified_info{dirinfo}->{$dir}->{products}->{$type}});
751 752 753 754 755 756 757 758 759
                  }
              }
          }
      }

      my $deps = join(" ", @deps);
      my $actions = join("\n", "", @actions);
      return <<"EOF";
$args{dir} $args{dir}\\ : $deps$actions
760 761 762 763
EOF
  }
  ""    # Important!  This becomes part of the template result.
-}