X-Git-Url: https://git.openssl.org/?p=openssl.git;a=blobdiff_plain;f=Configurations%2Funix-Makefile.tmpl;h=b591c4da20529d28c46671b500c7e7eb829c8ef7;hp=9dc6d7dfe89097592ae846aca2b1791db491a299;hb=f8d9d6e48b7ce50aee32d151e5dc7253594e01ed;hpb=874efa9f81c1414725088324b2b602d17dc291db diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tmpl index 9dc6d7dfe8..b591c4da20 100644 --- a/Configurations/unix-Makefile.tmpl +++ b/Configurations/unix-Makefile.tmpl @@ -3,6 +3,15 @@ ## ## {- join("\n## ", @autowarntext) -} {- + our $objext = $target{obj_extension} || ".o"; + our $depext = $target{dep_extension} || ".d"; + our $exeext = $target{exe_extension} || ""; + our $libext = $target{lib_extension} || ".a"; + our $shlibext = $target{shared_extension} || ".so"; + our $shlibextsimple = $target{shared_extension_simple} || ".so"; + our $shlibextimport = $target{shared_import_extension} || ""; + our $dsoext = $target{dso_extension} || ".so"; + sub windowsdll { $config{target} =~ /^(?:Cygwin|mingw)/ } # shlib and shlib_simple both take a static library name and figure @@ -27,27 +36,27 @@ sub shlib { return () if $config{no_shared}; my $lib = shift; - return $unified_info{sharednames}->{$lib} . '$(SHLIB_EXT)'; + return $unified_info{sharednames}->{$lib} . $shlibext; } sub shlib_simple { return () if $config{no_shared}; my $lib = shift; if (windowsdll()) { - return $lib . '$(SHLIB_EXT_IMPORT)'; + return $lib . $shlibextimport; } - return $lib . '$(SHLIB_EXT_SIMPLE)'; + return $lib . $shlibextsimple; } # 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)'; + return $engine . $dsoext; } + ''; -} PLATFORM={- $config{target} -} OPTIONS={- $config{options} -} @@ -64,22 +73,13 @@ SHLIB_MAJOR={- $config{shlib_major} -} SHLIB_MINOR={- $config{shlib_minor} -} SHLIB_TARGET={- $target{shared_target} -} -EXE_EXT={- $target{exe_extension} || "" -} -LIB_EXT={- $target{lib_extension} || ".a" -} -SHLIB_EXT={- $target{shared_extension} || ".so" -} -SHLIB_EXT_SIMPLE={- $target{shared_extension_simple} || ".so" -} -SHLIB_EXT_IMPORT={- $target{shared_import_extension} || "" -} -DSO_EXT={- $target{dso_extension} || ".so" -} -OBJ_EXT={- $target{obj_extension} || ".o" -} -DEP_EXT={- $target{dep_extension} || ".d" -} - -LIBS={- join(" ", map { $_."\$(LIB_EXT)" } @{$unified_info{libraries}}) -} +LIBS={- join(" ", map { $_.$libext } @{$unified_info{libraries}}) -} 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}}) -} +PROGRAMS={- join(" ", map { $_.$exeext } grep { !m|^test/| } @{$unified_info{programs}}) -} +TESTPROGS={- join(" ", map { $_.$exeext } grep { m|^test/| } @{$unified_info{programs}}) -} SCRIPTS={- join(" ", @{$unified_info{scripts}}) -} -DEPS={- join(" ", map { (my $x = $_) =~ s|\.o$|\$(DEP_EXT)|; $x; } +DEPS={- join(" ", map { (my $x = $_) =~ s|\.o$|$depext|; $x; } grep { $unified_info{sources}->{$_}->[0] =~ /\.c$/ } keys %{$unified_info{sources}}); -} @@ -149,6 +149,7 @@ CFLAGS_Q={- $cflags2 =~ s|([\\"])|\\$1|g; $cflags2 -} {- $config{cflags} -} LDFLAGS= {- $config{lflags} -} PLIB_LDFLAGS= {- $config{plib_lflags} -} EX_LIBS= {- $config{ex_libs} -} +SHARED_CFLAGS={- $target{shared_cflag} || "" -} SHARED_LDFLAGS={- $target{shared_ldflag} # Unlike other OSes (like Solaris, Linux, Tru64, # IRIX) BSD run-time linkers (tested OpenBSD, NetBSD @@ -164,6 +165,8 @@ SHARED_LDFLAGS={- $target{shared_ldflag} . ($config{target} =~ m|^BSD-| && $prefix !~ m|^/usr/.*$| ? " -Wl,-rpath,\$\$(LIBRPATH)" : "") -} SHARED_RCFLAGS={- $target{shared_rcflag} -} +DSO_CFLAGS={- $target{shared_cflag} || "" -} +BIN_CFLAGS={- "" -} PERL={- $config{perl} -} @@ -212,7 +215,7 @@ test tests: build_tests_nodep build_apps_nodep build_engines_nodep depend rehash ( cd test; \ SRCTOP=../$(SRCDIR) \ BLDTOP=../$(BLDDIR) \ - EXE_EXT=$(EXE_EXT) \ + EXE_EXT={- $exeext -} \ $(PERL) ../$(SRCDIR)/test/run_tests.pl $(TESTS) ) list-tests: @@ -237,8 +240,8 @@ uninstall: uninstall_docs uninstall_sw clean: libclean rm -f $(PROGRAMS) $(TESTPROGS) - rm -f `find $(BLDDIR) -name '*$(DEP_EXT)'` - rm -f `find $(BLDDIR) -name '*$(OBJ_EXT)'` + rm -f `find $(BLDDIR) -name '*{- $depext -}'` + rm -f `find $(BLDDIR) -name '*{- $objext -}'` rm -f $(BLDDIR)/core $(BLDDIR)/rehash.time rm -f $(BLDDIR)/tags $(BLDDIR)/TAGS rm -f $(BLDDIR)/openssl.pc $(BLDDIR)/libcrypto.pc $(BLDDIR)/libssl.pc @@ -246,18 +249,39 @@ clean: libclean rm -f $(TARFILE) # This exists solely for those who still type 'make depend' -depend: Makefile -Makefile: FORCE - @( sed -e '/^# DO NOT DELETE THIS LINE.*/,$$d' < Makefile; \ - echo '# DO NOT DELETE THIS LINE -- make depend depends on it.'; \ - echo; \ +# +# We check if any depfile is newer than Makefile and decide to +# concatenate only if that is true, or if 'test' (a.k.a [ ) +# doesn't have the option to figure it out (-nt). +# +# To check if test has the file age comparison operator, we +# simply try, and rely test to exit with 0 if the comparison +# was true, 1 if false, and most importantly, 2 if it doesn't +# recognise the operator. +depend: + @catdepends=false; \ + if [ Makefile -nt Makefile ] 2>/dev/null || [ $$? = 1 ]; then \ for d in $(DEPS); do \ - if [ -f $$d ]; then cat $$d; fi; \ - done ) > Makefile.new - @if ! cmp Makefile.new Makefile >/dev/null 2>&1; then \ - mv -f Makefile.new Makefile; \ + if [ $$d -nt Makefile ]; then \ + catdepends=true; \ + break; \ + fi; \ + done; \ else \ - rm -f Makefile.new; \ + catdepends=true; \ + fi; \ + if [ $$catdepends = true ]; then \ + ( sed -e '/^# DO NOT DELETE THIS LINE.*/,$$d' < Makefile; \ + echo '# DO NOT DELETE THIS LINE -- make depend depends on it.'; \ + echo; \ + for d in $(DEPS); do \ + if [ -f $$d ]; then cat $$d; fi; \ + done ) > Makefile.new; \ + if ! cmp Makefile.new Makefile >/dev/null 2>&1; then \ + mv -f Makefile.new Makefile; \ + else \ + rm -f Makefile.new; \ + fi; \ fi # Install helper targets ############################################# @@ -809,7 +833,7 @@ configdata.pm: {- $config{build_file_template} -} $(SRCDIR)/Configure $(SRCDIR)/ # It takes a list of library names and outputs a list of dependencies sub compute_lib_depends { if ($config{no_shared}) { - return map { $_."\$(LIB_EXT)" } @_; + return map { $_.$libext } @_; } # Depending on shared libraries: @@ -823,25 +847,29 @@ configdata.pm: {- $config{build_file_template} -} $(SRCDIR)/Configure $(SRCDIR)/ my $obj = $args{obj}; my $srcs = join(" ", @{$args{srcs}}); my $deps = join(" ", @{$args{srcs}}, @{$args{deps}}); - my $incs = join(" ", map { " -I".$_ } @{$args{incs}}); + my $incs = join("", map { " -I".$_ } @{$args{incs}}); + my $ecflags = { lib => '$(SHARED_CFLAGS)', + dso => '$(DSO_CFLAGS)', + bin => '$(BIN_CFLAGS)' } -> {$args{intent}}; my $makedepprog = $config{makedepprog}; if ($makedepprog eq "makedepend") { return <<"EOF"; -$obj\$(DEP_EXT): $deps +$obj$depext: $deps rm -f \$\@.tmp; touch \$\@.tmp - \$(MAKEDEPEND) -f\$\@.tmp -o"|$obj" -- \$(CFLAGS)$incs -- $srcs \\ + \$(MAKEDEPEND) -f\$\@.tmp -o"|$obj" -- \$(CFLAGS) $ecflags$incs -- $srcs \\ 2>/dev/null sed -e 's/^.*|//' -e 's/ \\/\\(\\\\.\\|[^ ]\\)*//g' -e '/: *\$\$/d' -e '/^\\(#.*\\| *\\)\$\$/d' \$\@.tmp > \$\@ rm \$\@.tmp -$obj\$(OBJ_EXT): $obj\$(DEP_EXT) - \$(CC) \$(CFLAGS)$incs -c -o \$\@ $srcs +$obj$objext: $obj$depext + \$(CC) \$(CFLAGS) $ecflags$incs -c -o \$\@ $srcs EOF } return <<"EOF"; -$obj\$(DEP_EXT): $deps - \$(CC) \$(CFLAGS)$incs -MM -MF \$\@ -MQ $obj $srcs -$obj\$(OBJ_EXT): $obj\$(DEP_EXT) - \$(CC) \$(CFLAGS)$incs -c -o \$\@ $srcs +$obj$depext: $deps + \$(CC) \$(CFLAGS) $ecflags$incs -MM -MF \$\@ -MQ $obj$objext $srcs + touch \$\@ +$obj$objext: $obj$depext + \$(CC) \$(CFLAGS) $ecflags$incs -c -o \$\@ $srcs EOF } # On Unix, we build shlibs from static libs, so we're ignoring the @@ -868,9 +896,9 @@ EOF # With all other Unix platforms, we often build a shared library with the # SO version built into the file name and a symlink without the SO version # 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. -$target : $lib\$(LIB_EXT) $deps $ordinalsfile +# simplest, {libname}$shlibextimport for Windows POSIX layers and +# {libname}$shlibextsimple for the Unix platforms. +$target: $lib$libext $deps $ordinalsfile \$(MAKE) -f \$(SRCDIR)/Makefile.shared -e \\ PLATFORM=\$(PLATFORM) \\ PERL=\$(PERL) SRCDIR="\$(SRCDIR)" DSTDIR="$libd" \\ @@ -880,15 +908,15 @@ $target : $lib\$(LIB_EXT) $deps $ordinalsfile LIBCOMPATVERSIONS=";\$(SHLIB_VERSION_HISTORY)" \\ CC="\$(CC)" CFLAGS="\$(CFLAGS)" LDFLAGS="\$(LDFLAGS)" \\ CROSS_COMPILE="\$(CROSS_COMPILE)" \\ - SHARED_LDFLAGS="\$(SHARED_LDFLAGS)" SHLIB_EXT=\$(SHLIB_EXT) \\ + SHARED_LDFLAGS="\$(SHARED_LDFLAGS)" SHLIB_EXT=$shlibext \\ SHARED_RCFLAGS="\$(SHARED_RCFLAGS)" \\ link_shlib.$shlib_target EOF . (windowsdll() ? <<"EOF" : ""); - rm -f apps/$shlib\$(SHLIB_EXT) - rm -f test/$shlib\$(SHLIB_EXT) - cp -p $shlib\$(SHLIB_EXT) apps/ - cp -p $shlib\$(SHLIB_EXT) test/ + rm -f apps/$shlib$shlibext + rm -f test/$shlib$shlibext + cp -p $shlib$shlibext apps/ + cp -p $shlib$shlibext test/ EOF } sub obj2dso { @@ -903,7 +931,7 @@ EOF " -L$d -l$l" } @{$args{deps}}); my $deps = join(" ",compute_lib_depends(@{$args{deps}})); my $shlib_target = $target{shared_target}; - my $objs = join(" ", map { $_."\$(OBJ_EXT)" } @{$args{objs}}); + my $objs = join(" ", map { $_.$objext } @{$args{objs}}); my $target = dso($lib); return <<"EOF"; $target: $objs $deps @@ -914,7 +942,7 @@ $target: $objs $deps LIBNAME=$libname LDFLAGS="\$(LDFLAGS)" \\ CC="\$(CC)" CFLAGS="\$(CFLAGS)" \\ SHARED_LDFLAGS="\$(SHARED_LDFLAGS)" \\ - SHLIB_EXT=\$(DSO_EXT) \\ + SHLIB_EXT=$dsoext \\ LIBEXTRAS="$objs" \\ link_dso.$shlib_target EOF @@ -922,9 +950,9 @@ EOF sub obj2lib { my %args = @_; my $lib = $args{lib}; - my $objs = join(" ", map { $_."\$(OBJ_EXT)" } @{$args{objs}}); + my $objs = join(" ", map { $_.$objext } @{$args{objs}}); return <<"EOF"; -$lib\$(LIB_EXT): $objs +$lib$libext: $objs \$(AR) \$\@ $objs \$(RANLIB) \$\@ || echo Never mind. EOF @@ -934,7 +962,7 @@ EOF my $bin = $args{bin}; my $bind = dirname($bin); my $binn = basename($bin); - my $objs = join(" ", map { $_."\$(OBJ_EXT)" } @{$args{objs}}); + my $objs = join(" ", map { $_.$objext } @{$args{objs}}); my $deps = join(" ",compute_lib_depends(@{$args{deps}})); my $linklibs = join("", map { my $d = dirname($_); my $f = basename($_); @@ -943,11 +971,11 @@ EOF " -L$d -l$l" } @{$args{deps}}); my $shlib_target = $config{no_shared} ? "" : $target{shared_target}; return <<"EOF"; -$bin\$(EXE_EXT): $objs $deps - \$(RM) $bin\$(EXE_EXT) +$bin$exeext: $objs $deps + \$(RM) $bin$exeext \$(MAKE) -f \$(SRCDIR)/Makefile.shared -e \\ PERL=\$(PERL) SRCDIR=\$(SRCDIR) \\ - APPNAME=$bin\$(EXE_EXT) OBJECTS="$objs" \\ + APPNAME=$bin$exeext OBJECTS="$objs" \\ LIBDEPS="\$(PLIB_LDFLAGS) $linklibs \$(EX_LIBS)" \\ CC="\$(CC)" CFLAGS="\$(CFLAGS)" LDFLAGS="\$(LDFLAGS)" \\ LIBRPATH="\$(INSTALLTOP)/\$(LIBDIR)" \\