diff options
-rw-r--r-- | Configurations/10-main.conf | 8 | ||||
-rw-r--r-- | Configurations/README | 9 | ||||
-rw-r--r-- | Configurations/descrip.mms.tmpl | 21 | ||||
-rw-r--r-- | Configurations/shared-info.pl | 2 | ||||
-rw-r--r-- | Configurations/unix-Makefile.tmpl | 25 | ||||
-rw-r--r-- | Configurations/windows-makefile.tmpl | 24 | ||||
-rwxr-xr-x | Configure | 19 | ||||
-rw-r--r-- | build.info | 47 | ||||
-rwxr-xr-x | util/mkdef.pl | 7 |
9 files changed, 90 insertions, 72 deletions
diff --git a/Configurations/10-main.conf b/Configurations/10-main.conf index 8360bb3671..e3cc34c14b 100644 --- a/Configurations/10-main.conf +++ b/Configurations/10-main.conf @@ -211,7 +211,7 @@ my %targets = ( ex_libs => add("-lsocket -lnsl -ldl"), dso_scheme => "dlfcn", thread_scheme => "pthreads", - shared_target => "self", + shared_target => "solaris", shared_extension => ".so.\$(SHLIB_VERSION_NUMBER)", shared_ldflag => "-Wl,-Bsymbolic", shared_defflag => "-Wl,-M,", @@ -1113,7 +1113,7 @@ my %targets = ( lflags => "-Wl,-bsvr4", thread_scheme => "pthreads", dso_scheme => "dlfcn", - shared_target => "self", + shared_target => "aix", module_ldflags => "-Wl,-G,-bsymbolic,-bexpall", shared_ldflag => "-Wl,-G,-bsymbolic", shared_defflag => "-Wl,-bE:", @@ -1230,6 +1230,8 @@ my %targets = ( lib_defines => add("L_ENDIAN"), dso_cflags => "/Zi /Fddso.pdb", bin_cflags => "/Zi /Fdapp.pdb", + # def_flag made to empty string so a .def file gets generated + shared_defflag => '', shared_ldflag => "/dll", shared_target => "win-shared", # meaningless except it gives Configure a hint thread_scheme => "winthreads", @@ -1743,6 +1745,8 @@ my %targets = ( dso_cflags => "", ex_libs => add(sub { return vms_info()->{zlib} || (); }), shared_target => "vms-shared", + # def_flag made to empty string so a .opt file gets generated + shared_defflag => '', dso_scheme => "vms", thread_scheme => "pthreads", diff --git a/Configurations/README b/Configurations/README index a03d445aea..9fd4922fd0 100644 --- a/Configurations/README +++ b/Configurations/README @@ -169,7 +169,14 @@ In each table entry, the following keys are significant: assembler files used when compiling with assembler implementations. shared_target => The shared library building method used. - This is a target found in Makefile.shared. + This serves multiple purposes: + - as index for targets found in shared_info.pl. + - as linker script generation selector. + To serve both purposes, the index for shared_info.pl + should end with '-shared', and this suffix will be + removed for use as a linker script generation + selector. Note that the latter is only used if + 'shared_defflag' is defined. build_scheme => The scheme used to build up a Makefile. In its simplest form, the value is a string with the name of the build scheme. diff --git a/Configurations/descrip.mms.tmpl b/Configurations/descrip.mms.tmpl index b1c00b7dc3..7393e225bc 100644 --- a/Configurations/descrip.mms.tmpl +++ b/Configurations/descrip.mms.tmpl @@ -132,7 +132,10 @@ DEPS={- our @deps = map { (my $x = $_) =~ s|\.o$|\$(DEP_EXT)|; $x; } {- output_on() if $disabled{makedepend}; "" -} GENERATED_MANDATORY={- join(", ", map { "-\n\t".$_ } @{$unified_info{depends}->{""}} ) -} GENERATED={- # common0.tmpl provides @generated - join(", ", map { (my $x = $_) =~ s|\.[sS]$|.asm|; "-\n\t".$x } + join(", ", map { my $x = $_; + $x =~ s|\.[sS]$|.asm|; + $x =~ s|\.ld$|.OPT|; + "-\n\t".$x } @generated) -} INSTALL_LIBS={- join(", ", map { "-\n\t".$_.".OLB" } @install_libs) -} @@ -748,12 +751,19 @@ reconfigure reconf : sub generatesrc { my %args = @_; - (my $target = $args{src}) =~ s/\.[sS]$/.asm/; my $generator = join(" ", @{$args{generator}}); my $generator_incs = join("", map { ' "-I'.$_.'"' } @{$args{generator_incs}}); my $deps = join(", -\n\t\t", @{$args{generator_deps}}, @{$args{deps}}); - if ($target !~ /\.asm$/) { + if ($args{src} =~ /\.ld$/) { + (my $target = $args{src}) =~ s/\.ld$/.OPT/; + my $mkdef = sourcefile('util', 'mkdef.pl'); + return <<"EOF"; +$target : $args{generator}->[0] $deps + \$(PERL) $mkdef $args{generator}->[1] "VMS" > $target +EOF + } elsif ($target !~ /\.[sS]$/) { + my $target = $args{src}; if ($args{generator}->[0] =~ m|^.*\.in$|) { my $dofile = abs2rel(rel2abs(catfile($config{sourcedir}, "util", "dofile.pl")), @@ -770,6 +780,7 @@ $target : $args{generator}->[0] $deps EOF } } else { + (my $target = $args{src}) =~ s/\.[sS]$/.asm/; if ($args{generator}->[0] =~ /\.pl$/) { $generator = '$(PERL)'.$generator_incs.' '.$generator; } elsif ($args{generator}->[0] =~ /\.S$/) { @@ -913,7 +924,9 @@ EOF my @objs = map { (my $x = $_) =~ s|\.o$|.OBJ|; $x } grep { $_ =~ m|\.o$| } @{$args{objs}}; - my @defs = grep { $_ =~ /\.opt$/ } @{$args{objs}}; + my @defs = map { (my $x = $_) =~ s|\.ld$|.OPT|; $x } + grep { $_ =~ /\.ld$/ } + @{$args{objs}}; my @deps = compute_lib_depends(@{$args{deps}}); die "More than one symbol vector" if scalar @defs > 1; my $deps = join(", -\n\t\t", @objs, @defs, @deps); diff --git a/Configurations/shared-info.pl b/Configurations/shared-info.pl index 47eddd6835..e3a40a92cb 100644 --- a/Configurations/shared-info.pl +++ b/Configurations/shared-info.pl @@ -53,7 +53,7 @@ my %shared_info; 'mingw-shared' => sub { return { %{$shared_info{'cygwin-shared'}}, - # def_flag made to empty string so it still generates + # def_flag made to empty string so it still generates # something shared_defflag => '', }; diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl index 17f76a5654..f67eae59e3 100644 --- a/Configurations/unix-Makefile.tmpl +++ b/Configurations/unix-Makefile.tmpl @@ -4,6 +4,7 @@ ## {- join("\n## ", @autowarntext) -} {- our $objext = $target{obj_extension} || ".o"; + our $defext = $target{def_extension} || ".ld"; our $depext = $target{dep_extension} || ".d"; our $exeext = $target{exe_extension} || ""; our $libext = $target{lib_extension} || ".a"; @@ -112,7 +113,10 @@ DEPS={- join(" ", map { (my $x = $_) =~ s|\.o$|$depext|; $x; } {- output_on() if $disabled{makedepend}; "" -} GENERATED_MANDATORY={- join(" ", @{$unified_info{depends}->{""}}) -} GENERATED={- # common0.tmpl provides @generated - join(" ", @generated ) -} + join(" ", map { my $x = $_; + $x =~ s|\.ld$|$defext|; + $x } + @generated ) -} INSTALL_LIBS={- join(" ", map { lib($_) } @{$unified_info{install}->{libraries}}) -} INSTALL_SHLIBS={- join(" ", map { shlib($_) } @{$unified_info{install}->{libraries}}) -} @@ -408,7 +412,7 @@ libclean: fi; \ done $(RM) $(LIBS) - $(RM) *.map + $(RM) *.{- $defext -} clean: libclean $(RM) $(PROGRAMS) $(TESTPROGS) $(ENGINES) $(SCRIPTS) @@ -956,7 +960,14 @@ reconfigure reconf: my $incs = join("", map { " -I".$_ } @{$args{incs}}); my $deps = join(" ", @{$args{generator_deps}}, @{$args{deps}}); - if ($args{src} !~ /\.[sS]$/) { + if ($args{src} =~ /\.ld$/) { + (my $target = $args{src}) =~ s/\.ld$/${defext}/; + (my $mkdef_os = $target{shared_target}) =~ s|-shared$||; + return <<"EOF"; +$target: $args{generator}->[0] $deps + \$(PERL) \$(SRCDIR)/util/mkdef.pl $args{generator}->[1] $mkdef_os > $target +EOF + } elsif ($args{src} !~ /\.[sS]$/) { if ($args{generator}->[0] =~ m|^.*\.in$|) { my $dofile = abs2rel(rel2abs(catfile($config{sourcedir}, "util", "dofile.pl")), @@ -1102,9 +1113,11 @@ EOF (my $l = $f) =~ s/^lib//; " -l$l" } @{$args{deps}}); my @objs = map { (my $x = $_) =~ s|\.o$||; "$x$objext" } - grep { $_ !~ m/\.(?:def|map)$/ } + grep { $_ !~ m/\.ld$/ } + @{$args{objs}}; + my @defs = map { (my $x = $_) =~ s|\.ld$||; "$x$defext" } + grep { $_ =~ /\.ld$/ } @{$args{objs}}; - my @defs = grep { $_ =~ /\.(?:def|map)$/ } @{$args{objs}}; my @deps = compute_lib_depends(@{$args{deps}}); die "More than one exported symbol map" if scalar @defs > 1; my $objs = join(" ", @objs); @@ -1169,7 +1182,7 @@ EOF (my $l = $f) =~ s/^lib//; " -l$l" } @{$args{deps}}); my @objs = map { (my $x = $_) =~ s|\.o$||; "$x$objext" } - grep { $_ !~ m/\.(?:def|map)$/ } + grep { $_ !~ m/\.ld$/ } @{$args{objs}}; my @deps = compute_lib_depends(@{$args{deps}}); my $objs = join(" ", @objs); diff --git a/Configurations/windows-makefile.tmpl b/Configurations/windows-makefile.tmpl index 148ddf4c60..fb7ddca016 100644 --- a/Configurations/windows-makefile.tmpl +++ b/Configurations/windows-makefile.tmpl @@ -6,6 +6,7 @@ our $objext = $target{obj_extension} || ".obj"; our $resext = $target{res_extension} || ".res"; our $depext = $target{dep_extension} || ".d"; + our $defext = $target{dep_extension} || ".def"; our $exeext = $target{exe_extension} || ".exe"; our $libext = $target{lib_extension} || ".lib"; our $shlibext = $target{shared_extension} || ".dll"; @@ -89,7 +90,10 @@ DEPS={- join(" ", map { (my $x = $_) =~ s|\.o$|$depext|; $x; } {- output_on() if $disabled{makedepend}; "" -} GENERATED_MANDATORY={- join(" ", @{$unified_info{depends}->{""}} ) -} GENERATED={- # common0.tmpl provides @generated - join(" ", map { (my $x = $_) =~ s|\.[sS]$|.asm|; $x } + join(" ", map { my $x = $_; + $x =~ s|\.[sS]$|.asm|; + $x =~ s|\.ld$|$defext|; + $x } @generated) -} INSTALL_LIBS={- join(" ", map { quotify1(lib($_)) } @{$unified_info{install}->{libraries}}) -} @@ -496,7 +500,6 @@ reconfigure reconf: sub generatesrc { my %args = @_; - (my $target = $args{src}) =~ s/\.[sS]$/.asm/; my ($gen0, @gens) = @{$args{generator}}; my $generator = '"'.$gen0.'"'.join('', map { " $_" } @gens); my $generator_incs = join("", map { " -I \"$_\"" } @{$args{generator_incs}}); @@ -504,7 +507,17 @@ reconfigure reconf: my $deps = @{$args{deps}} ? '"'.join('" "', @{$args{generator_deps}}, @{$args{deps}}).'"' : ''; - if ($target !~ /\.asm$/) { + if ($args{src} =~ /\.ld$/) { + (my $target = $args{src}) =~ s/\.ld$/$defext/; + my $mkdef = abs2rel(rel2abs(catfile($config{sourcedir}, + "util", "mkdef.pl")), + rel2abs($config{builddir})); + return <<"EOF"; +$target: $args{generator}->[0] $deps + \$(PERL) $mkdef $args{generator}->[1] 32 > $target +EOF + } elsif ($args{src} !~ /\.[sS]$/) { + my $target = $args{src}; if ($args{generator}->[0] =~ m|^.*\.in$|) { my $dofile = abs2rel(rel2abs(catfile($config{sourcedir}, "util", "dofile.pl")), @@ -521,6 +534,7 @@ $target: "$args{generator}->[0]" $deps EOF } } else { + (my $target = $args{src}) =~ s/\.[sS]$/.asm/; if ($args{generator}->[0] =~ /\.pl$/) { $generator = '"$(PERL)"'.$generator_incs.' '.$generator; } elsif ($args{generator}->[0] =~ /\.S$/) { @@ -623,7 +637,9 @@ EOF my @objs = map { (my $x = $_) =~ s|\.o$|$objext|; $x } grep { $_ =~ m/\.(?:o|res)$/ } @{$args{objs}}; - my @defs = grep { $_ =~ /\.def$/ } @{$args{objs}}; + my @defs = map { (my $x = $_) =~ s|\.ld$||; "$x$defext" } + grep { $_ =~ /\.ld$/ } + @{$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); @@ -1121,7 +1121,9 @@ $target{exe_extension}=""; $target{exe_extension}=".exe" if ($config{target} eq "DJGPP" || $config{target} =~ /^(?:Cygwin|mingw)/); $target{exe_extension}=".pm" if ($config{target} =~ /vos/); - +$target{def_extension}=".ld"; +$target{def_extension}=".def" if $config{target} =~ /^mingw|VC-/; +$target{def_extension}=".opt" if $config{target} =~ /^vms/; ($target{shared_extension_simple}=$target{shared_extension}) =~ s|\.\$\(SHLIB_VERSION_NUMBER\)|| unless defined($target{shared_extension_simple}); @@ -2074,11 +2076,11 @@ EOF my $o = cleanfile($buildd, $o, $blddir); $unified_info{shared_sources}->{$ddest}->{$o} = -1; $unified_info{sources}->{$o}->{$s} = -1; - } elsif ($s =~ /\.(def|map|opt)$/) { - # We also recognise .def / .map / .opt files + } elsif ($s =~ /\.ld$/) { + # We also recognise linker scripts (or corresponding) # We know they are generated files - my $def = cleanfile($buildd, $s, $blddir); - $unified_info{shared_sources}->{$ddest}->{$def} = 1; + my $ld = cleanfile($buildd, $s, $blddir); + $unified_info{shared_sources}->{$ddest}->{$ld} = 1; } else { die "unrecognised source file type for shared library: $s\n"; } @@ -2189,7 +2191,7 @@ EOF } } - # Go through all object files and change their names to something that + # Go through all intermediary files and change their names to something that # reflects what they will be built for. Note that for some source files, # this leads to duplicate object files because they are used multiple times. # the goal is to rename all object files according to this scheme: @@ -2246,8 +2248,9 @@ EOF map { keys %{$unified_copy{$_}->{$prod}} } @src; foreach (keys %prod_sources) { - # Only affect object or resource files, the others - # simply get a new value (+1 instead of -1) + # Only affect object files and resource files, + # the others simply get a new value + # (+1 instead of -1) if ($_ =~ /\.(o|res)$/) { (my $prodname = $prod) =~ s|\.a$||; my $newobj = diff --git a/build.info b/build.info index 3dda4e89bf..16e587e0ad 100644 --- a/build.info +++ b/build.info @@ -25,50 +25,11 @@ DEPEND[crypto/include/internal/dso_conf.h]=configdata.pm GENERATE[crypto/include/internal/dso_conf.h]=crypto/include/internal/dso_conf.h.in IF[{- defined $target{shared_defflag} -}] - IF[{- $config{target} =~ /^mingw/ -}] - GENERATE[libcrypto.def]=util/mkdef.pl crypto 32 - DEPEND[libcrypto.def]=util/libcrypto.num - GENERATE[libssl.def]=util/mkdef.pl ssl 32 - DEPEND[libssl.def]=util/libssl.num + SHARED_SOURCE[libcrypto]=libcrypto.ld + SHARED_SOURCE[libssl]=libssl.ld - SHARED_SOURCE[libcrypto]=libcrypto.def - SHARED_SOURCE[libssl]=libssl.def - ELSIF[{- $config{target} =~ /^aix/ -}] - GENERATE[libcrypto.map]=util/mkdef.pl crypto aix - DEPEND[libcrypto.map]=util/libcrypto.num - GENERATE[libssl.map]=util/mkdef.pl ssl aix - DEPEND[libssl.map]=util/libssl.num - - SHARED_SOURCE[libcrypto]=libcrypto.map - SHARED_SOURCE[libssl]=libssl.map - ELSE - GENERATE[libcrypto.map]=util/mkdef.pl crypto linux - DEPEND[libcrypto.map]=util/libcrypto.num - GENERATE[libssl.map]=util/mkdef.pl ssl linux - DEPEND[libssl.map]=util/libssl.num - - SHARED_SOURCE[libcrypto]=libcrypto.map - SHARED_SOURCE[libssl]=libssl.map - ENDIF -ENDIF -# VMS and VC don't have parametrised .def / .symvec generation, so they get -# special treatment, since we know they do use these files -IF[{- $config{target} =~ /^VC-/ -}] - GENERATE[libcrypto.def]=util/mkdef.pl crypto 32 - DEPEND[libcrypto.def]=util/libcrypto.num - GENERATE[libssl.def]=util/mkdef.pl ssl 32 - DEPEND[libssl.def]=util/libssl.num - - SHARED_SOURCE[libcrypto]=libcrypto.def - SHARED_SOURCE[libssl]=libssl.def -ELSIF[{- $config{target} =~ /^vms/ -}] - GENERATE[libcrypto.opt]=util/mkdef.pl crypto "VMS" - DEPEND[libcrypto.opt]=util/libcrypto.num - GENERATE[libssl.opt]=util/mkdef.pl ssl "VMS" - DEPEND[libssl.opt]=util/libssl.num - - SHARED_SOURCE[libcrypto]=libcrypto.opt - SHARED_SOURCE[libssl]=libssl.opt + GENERATE[libcrypto.ld]=util/libcrypto.num crypto + GENERATE[libssl.ld]=util/libssl.num ssl ENDIF IF[{- $config{target} =~ /^(?:Cygwin|mingw|VC-)/ -}] diff --git a/util/mkdef.pl b/util/mkdef.pl index bcbb475832..6523a057ee 100755 --- a/util/mkdef.pl +++ b/util/mkdef.pl @@ -167,12 +167,13 @@ foreach (@ARGV, split(/ /, $config{options})) $debug=1 if $_ eq "debug"; $trace=1 if $_ eq "trace"; $verbose=1 if $_ eq "verbose"; - $W32=1 if $_ eq "32"; die "win16 not supported" if $_ eq "16"; - if($_ eq "NT") { + if ($_ eq "32" || $_ eq "mingw") { + $W32=1; + } elsif ($_ eq "NT") { $W32 = 1; $NT = 1; - } elsif ($_ eq "linux") { + } elsif ($_ eq "linux" || $_ eq "solaris") { $linux=1; $UNIX=1; } elsif ($_ eq "aix") { |