X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=Configurations%2Funix-Makefile.tmpl;h=0e7ff81a9ad804792ce0034ec5e1dfc5f5220493;hp=0d4050d1a8880cb782ae362b74b7b3525e65c937;hb=f99f91f1218d12e2e3a0fe10bb97445984a830c8;hpb=e987f9f271a13558213e56659fba943df1578f98 diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl index 0d4050d1a8..0e7ff81a9a 100644 --- a/Configurations/unix-Makefile.tmpl +++ b/Configurations/unix-Makefile.tmpl @@ -4,6 +4,50 @@ ## {- join("\n## ", @autowarntext) -} {- sub windowsdll { $config{target} =~ /^(?:Cygwin|mingw)/ } + + # shlib and shlib_simple both take a static library name and figure + # out what the shlib name should be. + # + # When OpenSSL is configured "no-shared", these functions will just + # return empty lists, making them suitable to join(). + # + # With Windows DLL producers, shlib($libname) will return the shared + # library name (which usually is different from the static library + # name) with the default shared extension appended to it, while + # shlib_simple($libname) will return the static library name with + # the shared extension followed by ".a" appended to it. The former + # result is used as the runtime shared library while the latter is + # used as the DLL import library. + # + # On all Unix systems, shlib($libname) will return the library name + # with the default shared extension, while shlib_simple($libname) + # will return the name from shlib($libname) with any SO version number + # removed. On some systems, they may therefore return the exact same + # string. + sub shlib { + return () if $config{no_shared}; + my $lib = shift; + return $unified_info{sharednames}->{$lib} . '$(SHLIB_EXT)'; + } + sub shlib_simple { + return () if $config{no_shared}; + + my $lib = shift; + if (windowsdll()) { + return $lib . '$(SHLIB_EXT_IMPORT)'; + } + return $lib . '$(SHLIB_EXT_SIMPLE)'; + } + + # dso is a complement to shlib / shlib_simple that returns the + # given libname with the simple shared extension (possible SO version + # removed). This differs from shlib_simple() by being unconditional. + sub dso { + return () if $config{no_shared}; + my $engine = shift; + + return $engine . '$(DSO_EXT)'; + } -} PLATFORM={- $config{target} -} OPTIONS={- $config{options} -} @@ -30,8 +74,8 @@ OBJ_EXT={- $target{obj_extension} || ".o" -} DEP_EXT={- $target{dep_extension} || ".d" -} LIBS={- join(" ", map { $_."\$(LIB_EXT)" } @{$unified_info{libraries}}) -} -SHLIBS={- join(" ", map { $_."\$(SHLIB_EXT)" } map { $unified_info{sharednames}->{$_} || () } @{$unified_info{libraries}}) -} -ENGINES={- join(" ", map { $_."\$(DSO_EXT)" } @{$unified_info{engines}}) -} +SHLIBS={- join(" ", map { shlib($_) } @{$unified_info{libraries}}) -} +ENGINES={- join(" ", map { dso($_) } @{$unified_info{engines}}) -} PROGRAMS={- join(" ", map { $_."\$(EXE_EXT)" } grep { !m|^test/| } @{$unified_info{programs}}) -} TESTPROGS={- join(" ", map { $_."\$(EXE_EXT)" } grep { m|^test/| } @{$unified_info{programs}}) -} SCRIPTS={- join(" ", @{$unified_info{scripts}}) -} @@ -44,6 +88,8 @@ MISC_SCRIPTS=$(SRCDIR)/tools/c_hash $(SRCDIR)/tools/c_info \ $(SRCDIR)/tools/c_issuer $(SRCDIR)/tools/c_name \ $(BLDDIR)/apps/CA.pl $(SRCDIR)/apps/tsget +SHLIB_INFO={- join(" ", map { "\"".shlib($_).";".shlib_simple($_)."\"" } @{$unified_info{libraries}}) -} + # DESTDIR is for package builders so that they can configure for, say, # /usr/ and yet have everything installed to /tmp/somedir/usr/. # Normally it is left empty. @@ -126,6 +172,7 @@ AR=$(CROSS_COMPILE){- $target{ar} || "ar" -} $(ARFLAGS) r RANLIB= {- $target{ranlib} -} NM= $(CROSS_COMPILE){- $target{nm} || "nm" -} RM= rm -f +RMDIR= rmdir TAR= {- $target{tar} || "tar" -} TARFLAGS= {- $target{tarflags} -} MAKEDEPEND=$(CROSS_COMPILE){- $config{makedepprog} -} @@ -172,7 +219,17 @@ list-tests: @TOP=$(SRCDIR) PERL=$(PERL) $(PERL) $(SRCDIR)/test/run_tests.pl list libclean: - -rm -f `find $(BLDDIR) -name '*$(LIB_EXT)' -o -name '*$(SHLIB_EXT)'` + @set -e; for s in $(SHLIB_INFO); do \ + s1=`echo "$$s" | cut -f1 -d";"`; \ + s2=`echo "$$s" | cut -f2 -d";"`; \ + echo $(RM) $$s1; \ + $(RM) $$s1; \ + if [ "$$s1" != "$$s2" ]; then \ + echo $(RM) $$s2; \ + $(RM) $$s2; \ + fi; \ + done + $(RM) $(LIBS) install: install_sw install_ssldirs install_docs @@ -205,7 +262,7 @@ Makefile: FORCE install_sw: all install_dev install_engines install_runtime -uninstall_sw: uninstall_dev uninstall_engines uninstall_runtime +uninstall_sw: uninstall_runtime uninstall_engines uninstall_dev install_docs: install_man_docs install_html_docs @@ -238,25 +295,28 @@ install_dev: $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn; \ done @ : {- output_off() if $config{no_shared}; "" -} - @set -e; for s in $(SHLIBS); do \ - fn=`basename $$s`; \ - echo "install $$s -> $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn"; \ - cp $$s $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn.new; \ - chmod 644 $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn.new; \ - mv -f $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn.new \ - $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn; \ - if [ "$(SHLIB_EXT)" != "$(SHLIB_EXT_SIMPLE)" ]; then \ - echo "link $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn2 -> $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn"; \ - fn2=`basename $$fn $(SHLIB_EXT)`$(SHLIB_EXT_SIMPLE); \ - ln -sf $$fn $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn2; \ + @set -e; for s in $(SHLIB_INFO); do \ + s1=`echo "$$s" | cut -f1 -d";"`; \ + s2=`echo "$$s" | cut -f2 -d";"`; \ + fn1=`basename $$s1`; \ + fn2=`basename $$s2`; \ + : {- output_off() if windowsdll(); "" -}; \ + echo "install $$s1 -> $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn1"; \ + cp $$s1 $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn1.new; \ + chmod 644 $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn1.new; \ + mv -f $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn1.new \ + $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn1; \ + if [ "$$fn1" != "$$fn2" ]; then \ + echo "link $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn2 -> $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn1"; \ + ln -sf $$fn1 $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn2; \ fi; \ + : {- output_on() if windowsdll(); "" -}{- output_off() unless windowsdll(); "" -}; \ + echo "install $$s2 -> $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn2"; \ + cp $$s2 $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn2.new; \ + chmod 644 $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn2.new; \ + mv -f $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn2.new \ + $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn2; \ : {- output_off() unless windowsdll(); "" -}; \ - echo "install $$s.a -> $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn.a"; \ - cp $$s.a $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn.a.new; \ - chmod 644 $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn.a.new; \ - mv -f $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn.a.new \ - $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn.a; \ - : {- output_on() unless windowsdll(); "" -}; \ done @ : {- output_on() if $config{no_shared}; "" -} @$(PERL) $(SRCDIR)/util/mkdir-p.pl $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/pkgconfig @@ -278,31 +338,42 @@ uninstall_dev: echo "$(RM) $(DESTDIR)$(INSTALLTOP)/include/openssl/$$fn"; \ $(RM) $(DESTDIR)$(INSTALLTOP)/include/openssl/$$fn; \ done + -$(RMDIR) $(DESTDIR)$(INSTALLTOP)/include/openssl + -$(RMDIR) $(DESTDIR)$(INSTALLTOP)/include @set -e; for l in $(LIBS); do \ fn=`basename $$l`; \ echo "$(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn"; \ $(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn; \ done - @set -e; for s in $(SHLIBS); do \ - fn=`basename $$s`; \ - if [ "$(SHLIB_EXT)" != "$(SHLIB_EXT_SIMPLE)" ]; then \ - fn2=`basename $$fn $(SHLIB_EXT)`$(SHLIB_EXT_SIMPLE); \ + @ : {- output_off() if $config{no_shared}; "" -} + @set -e; for s in $(SHLIB_INFO); do \ + s1=`echo "$$s" | cut -f1 -d";"`; \ + s2=`echo "$$s" | cut -f2 -d";"`; \ + fn1=`basename $$s1`; \ + fn2=`basename $$s2`; \ + : {- output_off() if windowsdll(); "" -}; \ + echo "$(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn1"; \ + $(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn1; \ + if [ "$$fn1" != "$$fn2" ]; then \ echo "$(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn2"; \ $(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn2; \ fi; \ - echo "$(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn"; \ - $(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn; \ + : {- output_on() if windowsdll(); "" -}{- output_off() unless windowsdll(); "" -}; \ + echo "$(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn2"; \ + $(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn2; \ : {- output_off() unless windowsdll(); "" -}; \ - echo "$(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn.a"; \ - $(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/$$fn.a; \ - : {- output_on() unless windowsdll(); "" -}; \ done + @ : {- output_on() if $config{no_shared}; "" -} @echo "$(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libcrypto.pc" @$(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libcrypto.pc @echo "$(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libssl.pc" @$(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/libssl.pc @echo "$(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/openssl.pc" @$(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/pkgconfig/openssl.pc + @echo $(RMDIR) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/pkgconfig + -@$(RMDIR) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/pkgconfig + @echo $(RMDIR) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR) + -@$(RMDIR) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR) install_engines: @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1) @@ -330,6 +401,8 @@ uninstall_engines: echo "$(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/engines/$$fn"; \ $(RM) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/engines/$$fn; \ done + @echo "$(RMDIR) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/engines" + -@$(RMDIR) $(DESTDIR)$(INSTALLTOP)/$(LIBDIR)/engines install_runtime: @[ -n "$(INSTALLTOP)" ] || (echo INSTALLTOP should not be empty; exit 1) @@ -338,7 +411,7 @@ install_runtime: @echo "*** Installing runtime files" : {- output_off() unless windowsdll(); "" -}; @set -e; for s in $(SHLIBS); do \ - fn=`basename $$i`; \ + fn=`basename $$s`; \ echo "install $$s -> $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \ cp $$s $(DESTDIR)$(INSTALLTOP)/bin/$$fn.new; \ chmod 644 $(DESTDIR)$(INSTALLTOP)/bin/$$fn.new; \ @@ -397,12 +470,16 @@ uninstall_runtime: done : {- output_off() unless windowsdll(); "" -}; @set -e; for s in $(SHLIBS); do \ - fn=`basename $$i`; \ + fn=`basename $$s`; \ echo "$(RM) $(DESTDIR)$(INSTALLTOP)/bin/$$fn"; \ $(RM) $(DESTDIR)$(INSTALLTOP)/bin/$$fn; \ done : {- output_on() unless windowsdll(); "" -}; $(RM) $(DESTDIR)$(OPENSSLDIR)/openssl.cnf + @echo "$(RMDIR) $(DESTDIR)$(INSTALLTOP)/bin" + -@$(RMDIR) $(DESTDIR)$(INSTALLTOP)/bin + @echo "$(RMDIR) $(DESTDIR)$(OPENSSLDIR)/misc" + -@$(RMDIR) $(DESTDIR)$(OPENSSLDIR)/misc # A method to extract all names from a .pod file # The first sed extracts everything between "=head1 NAME" and the next =head1 @@ -736,13 +813,7 @@ configdata.pm: {- $config{build_file_template} -} $(SRCDIR)/Configure $(SRCDIR)/ # Depending on shared libraries: # On Windows POSIX layers, we depend on {libname}.dll.a # On Unix platforms, we depend on {shlibname}.so - return map { if (windowsdll()) { - "$_\$(SHLIB_EXT_IMPORT)" - } else { - my $libname = - $unified_info{sharednames}->{$_} || $_; - "$libname\$(SHLIB_EXT_SIMPLE)" - } } @_; + return map { shlib_simple($_) } @_; } sub src2obj { @@ -788,8 +859,7 @@ EOF my $deps = join(" ",compute_lib_depends(@{$args{deps}})); my $shlib_target = $target{shared_target}; my $ordinalsfile = defined($args{ordinals}) ? $args{ordinals}->[1] : ""; - my $shlibtarget = windowsdll() ? - "$lib\$(SHLIB_EXT_IMPORT)" : "$shlib\$(SHLIB_EXT_SIMPLE)"; + my $target = shlib_simple($lib); return <<"EOF" # With a build on a Windows POSIX layer (Cygwin or Mingw), we know for a fact # that two files get produced, {shlibname}.dll and {libname}.dll.a. @@ -798,7 +868,7 @@ EOF # It's not necessary to have both as targets. The choice falls on the # simplest, {libname}\$(SHLIB_EXT_IMPORT) for Windows POSIX layers and # {libname}\$(SHLIB_EXT_SIMPLE) for the Unix platforms. -$shlibtarget: $lib\$(LIB_EXT) $deps $ordinalsfile +$target : $lib\$(LIB_EXT) $deps $ordinalsfile \$(MAKE) -f \$(SRCDIR)/Makefile.shared -e \\ PLATFORM=\$(PLATFORM) \\ PERL=\$(PERL) SRCDIR="\$(SRCDIR)" DSTDIR="$libd" \\ @@ -810,7 +880,7 @@ $shlibtarget: $lib\$(LIB_EXT) $deps $ordinalsfile CROSS_COMPILE="\$(CROSS_COMPILE)" \\ SHARED_LDFLAGS="\$(SHARED_LDFLAGS)" SHLIB_EXT=\$(SHLIB_EXT) \\ SHARED_RCFLAGS="\$(SHARED_RCFLAGS)" \\ - link_a.$shlib_target + link_shlib.$shlib_target EOF . (windowsdll() ? <<"EOF" : ""); rm -f apps/$shlib\$(SHLIB_EXT) @@ -819,7 +889,7 @@ EOF cp -p $shlib\$(SHLIB_EXT) test/ EOF } - sub obj2dynlib { + sub obj2dso { my %args = @_; my $lib = $args{lib}; my $libd = dirname($lib); @@ -832,8 +902,9 @@ EOF my $deps = join(" ",compute_lib_depends(@{$args{deps}})); my $shlib_target = $target{shared_target}; my $objs = join(" ", map { $_."\$(OBJ_EXT)" } @{$args{objs}}); + my $target = dso($lib); return <<"EOF"; -$lib\$(DSO_EXT): $objs $deps +$target: $objs $deps \$(MAKE) -f \$(SRCDIR)/Makefile.shared -e \\ PLATFORM=\$(PLATFORM) \\ PERL=\$(PERL) SRCDIR="\$(SRCDIR)" DSTDIR="$libd" \\ @@ -843,7 +914,7 @@ $lib\$(DSO_EXT): $objs $deps SHARED_LDFLAGS="\$(SHARED_LDFLAGS)" \\ SHLIB_EXT=\$(DSO_EXT) \\ LIBEXTRAS="$objs" \\ - link_o.$shlib_target + link_dso.$shlib_target EOF } sub obj2lib {