Automatic 'make depend' for the unified build scheme

This isn't the fully featured combination of compiler generated
dependency files and Makefile include directives, but a cheaper
variant of the same.

The dependency files are generated automatically, but then we have the
usual "depend" target.  However, we depend on it in the bigger phony
targets that are the most likely to be used.  That make this feature
automatic enough.

A side effect is that we can't use the build file's timestamp to check
if reconfiguring might be in order.  In its place, we use a flag file
that depends on Configure and the build file template and depend on it
in spots where it makes sense to check for the need to reconfigure.

Reviewed-by: Rich Salz <rsalz@openssl.org>
This commit is contained in:
Richard Levitte 2016-02-18 19:41:57 +01:00
parent df302cdce7
commit c058fcd798
2 changed files with 72 additions and 54 deletions

View File

@ -105,6 +105,10 @@ ENGINES={- join(", ", map { "-\n\t".$_.".EXE" } @{$unified_info{engines}}) -}
PROGRAMS={- join(", ", map { "-\n\t".$_.".EXE" } grep { !m|^\[\.test\]| } @{$unified_info{programs}}) -} PROGRAMS={- join(", ", map { "-\n\t".$_.".EXE" } grep { !m|^\[\.test\]| } @{$unified_info{programs}}) -}
TESTPROGS={- join(", ", map { "-\n\t".$_.".EXE" } grep { m|^\[\.test\]| } @{$unified_info{programs}}) -} TESTPROGS={- join(", ", map { "-\n\t".$_.".EXE" } grep { m|^\[\.test\]| } @{$unified_info{programs}}) -}
SCRIPTS={- join(", ", map { "-\n\t".$_ } @{$unified_info{scripts}}) -} SCRIPTS={- join(", ", map { "-\n\t".$_ } @{$unified_info{scripts}}) -}
DEPS={- our @deps = map { (my $x = $_) =~ s|\.o$|\$(DEP_EXT)|; $x; }
grep { $unified_info{sources}->{$_}->[0] =~ /\.c$/ }
keys %{$unified_info{sources}};
join(", ", map { "-\n\t".$_ } @deps); -}
# DESTDIR is for package builders so that they can configure for, say, # DESTDIR is for package builders so that they can configure for, say,
# SYS$COMMON:[OPENSSL] and yet have everything installed in STAGING:[USER]. # SYS$COMMON:[OPENSSL] and yet have everything installed in STAGING:[USER].
@ -200,14 +204,22 @@ NODEBUG=@
# The main targets ################################################### # The main targets ###################################################
all : descrip.mms, build_libs, build_engines, build_apps all : config.timestamp, -
build_libs_nodep, build_engines_nodep, build_apps_nodep, -
depend
build_libs : $(LIBS) build_libs : config.timestamp, build_libs_nodep, depend
build_engines : $(ENGINES) build_libs_nodep : $(LIBS)
build_apps : $(PROGRAMS), $(SCRIPTS) build_engines : config.timestamp, build_engines_nodep, depend
build_tests : $(TESTPROGS) build_engines_nodep : $(ENGINES)
build_apps : config.timestamp, build_apps_nodep, depend
build_apps_nodep : $(PROGRAMS), $(SCRIPTS)
build_tests : config.timestamp, build_tests_nodep, depend
build_tests_nodep : $(TESTPROGS)
test tests : build_apps, build_engines, build_tests, rehash test tests : config.timestamp, -
build_apps_nodep, build_engines_nodep, build_tests_nodep, -
depend, rehash
SET DEFAULT [.test]{- move("test") -} SET DEFAULT [.test]{- move("test") -}
DEFINE SRCTOP {- sourcedir() -} DEFINE SRCTOP {- sourcedir() -}
DEFINE BLDTOP {- builddir() -} DEFINE BLDTOP {- builddir() -}
@ -242,24 +254,18 @@ clean : libclean
- DELETE [.test]*.LOG;* - DELETE [.test]*.LOG;*
- DELETE []*.MAP;* - DELETE []*.MAP;*
DCLEAN_CMD=$(PERL) -pe "if (/^# DO NOT DELETE.*/) { exit(0); }" depend : descrip.mms
dclean : descrip.mms : FORCE
$(DCLEAN_CMD) < descrip.mms > descrip.mms.new @ $(PERL) -pe "if (/^# DO NOT DELETE.*/) { exit(0); }" -
RENAME descrip.mms.new descrip.mms < descrip.mms > descrip.mms-new
PURGE descrip.mms @ OPEN/APPEND DESCRIP descrip.mms-new
@ WRITE DESCRIP "# DO NOT DELETE THIS LINE -- make depend depends on it."
{- our @deps = map { (my $x = $_) =~ s|\.o$|\$(DEP_EXT)|; $x; } @ {- join("\n\t", map { "IF F\$SEARCH(\"$_\") .NES. \"\" THEN TYPE $_ /OUTPUT=DESCRIP:" } @deps); -}
grep { $unified_info{sources}->{$_}->[0] =~ /\.c$/ } @ CLOSE DESCRIP
keys %{$unified_info{sources}}; @ DIFF/OUTPUT=NLA0: descrip.mms,descrip.mms-new
""; -} @ IF $SEVERITY .EQ. 3 THEN RENAME descrip.mms-new descrip.mms
depend : {- join(",-\n\t", @deps); -} @ IF F$SEARCH("descrip.mms-new") .NES. "" THEN DELETE descrip.mms-new;*
$(DCLEAN_CMD) < descrip.mms > descrip.mms.new -@ SPAWN/OUTPUT=NLA0: PURGE/NOLOG descrip.mms
OPEN/APPEND DESCRIP descrip.mms.new
WRITE DESCRIP "# DO NOT DELETE THIS LINE -- make depend depends on it."
{- join("\n\t", map { "TYPE $_ /OUTPUT=DESCRIP:" } @deps); -}
CLOSE DESCRIP
RENAME descrip.mms.new descrip.mms
PURGE descrip.mms
# Install helper targets ############################################# # Install helper targets #############################################
@ -345,7 +351,7 @@ install_config : [.VMS]openssl_startup.com [.VMS]openssl_shutdown.com -
{- sourcefile("VMS", "openssl_shutdown.com.in") -} - {- sourcefile("VMS", "openssl_shutdown.com.in") -} -
> [.VMS]openssl_shutdown.com > [.VMS]openssl_shutdown.com
vmsconfig.pm : descrip.mms vmsconfig.pm : config.timestamp
OPEN/WRITE/SHARE=READ CONFIG []vmsconfig.pm OPEN/WRITE/SHARE=READ CONFIG []vmsconfig.pm
WRITE CONFIG "package vmsconfig;" WRITE CONFIG "package vmsconfig;"
WRITE CONFIG "use strict; use warnings;" WRITE CONFIG "use strict; use warnings;"
@ -377,7 +383,7 @@ check_INSTALLTOP :
# Helper targets ##################################################### # Helper targets #####################################################
rehash : [.apps]openssl.exe, copy-certs rehash : copy-certs, build_apps_nodep
!MCR [.apps]openssl.exe rehash {- builddir("certs", "demo") -} !MCR [.apps]openssl.exe rehash {- builddir("certs", "demo") -}
$(PERL) [.tools]c_rehash. [.certs.demo] $(PERL) [.tools]c_rehash. [.certs.demo]
@ -396,8 +402,8 @@ debug_logicals :
# Building targets ################################################### # Building targets ###################################################
descrip.mms : {- sourcefile("Configurations", "descrip.mms.tmpl") -} $(SRCDIR)Configure ! $(SRCDIR)config.com config.timestamp : {- sourcefile("Configurations", "descrip.mms.tmpl") -} $(SRCDIR)Configure ! $(SRCDIR)config.com
@ WRITE SYS$OUTPUT "descrip.mms is older than $?." @ WRITE SYS$OUTPUT "Detected changed: $?"
@ WRITE SYS$OUTPUT "Reconfiguring..." @ WRITE SYS$OUTPUT "Reconfiguring..."
perl $(SRCDIR)Configure reconf perl $(SRCDIR)Configure reconf
@ WRITE SYS$OUTPUT "*************************************************" @ WRITE SYS$OUTPUT "*************************************************"
@ -405,6 +411,11 @@ descrip.mms : {- sourcefile("Configurations", "descrip.mms.tmpl") -} $(SRCDIR)Co
@ WRITE SYS$OUTPUT "*** Please run the same mms command again ***" @ WRITE SYS$OUTPUT "*** Please run the same mms command again ***"
@ WRITE SYS$OUTPUT "*** ***" @ WRITE SYS$OUTPUT "*** ***"
@ WRITE SYS$OUTPUT "*************************************************" @ WRITE SYS$OUTPUT "*************************************************"
@ IF F$SEARCH("config.timestamp",1) .NES. "" THEN -
OPEN/APPEND TIMESTAMP "config.timestamp"
@ IF F$SEARCH("config.timestamp",2) .EQS. "" THEN -
OPEN/WRITE TIMESTAMP "config.timestamp"
@ close TIMESTAMP
@ exit %10000000 @ exit %10000000
{- {-

View File

@ -37,6 +37,10 @@ ENGINES={- join(" ", map { $_."\$(SHLIB_EXT_SIMPLE)" } @{$unified_info{engines}}
PROGRAMS={- join(" ", map { $_."\$(EXE_EXT)" } grep { !m|^test/| } @{$unified_info{programs}}) -} PROGRAMS={- join(" ", map { $_."\$(EXE_EXT)" } grep { !m|^test/| } @{$unified_info{programs}}) -}
TESTPROGS={- 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}}) -} SCRIPTS={- join(" ", @{$unified_info{scripts}}) -}
DEPS={- join(" ", map { (my $x = $_) =~ s|\.o$|\$(DEP_EXT)|; $x; }
grep { $unified_info{sources}->{$_}->[0] =~ /\.c$/ }
keys %{$unified_info{sources}}); -}
BIN_SCRIPTS=$(BLDDIR)/tools/c_rehash BIN_SCRIPTS=$(BLDDIR)/tools/c_rehash
MISC_SCRIPTS=$(SRCDIR)/tools/c_hash $(SRCDIR)/tools/c_info \ MISC_SCRIPTS=$(SRCDIR)/tools/c_hash $(SRCDIR)/tools/c_info \
$(SRCDIR)/tools/c_issuer $(SRCDIR)/tools/c_name \ $(SRCDIR)/tools/c_issuer $(SRCDIR)/tools/c_name \
@ -146,15 +150,19 @@ PROCESSOR= {- $config{processor} -}
# The main targets ################################################### # The main targets ###################################################
all: build_libs build_engines build_apps link-utils all: config.timestamp build_libs_nodep build_engines_nodep build_apps_nodep \
depend link-utils
# The pkg-config files depend on the libraries as well as Makefile build_libs: config.timestamp build_libs_nodep depend
build_libs: libcrypto.pc libssl.pc openssl.pc build_libs_nodep: libcrypto.pc libssl.pc openssl.pc
build_engines: $(ENGINES) build_engines: config.timestamp build_engines_nodep depend
build_apps: $(PROGRAMS) $(SCRIPTS) build_engines_nodep: $(ENGINES)
build_tests: $(TESTPROGS) build_apps: config.timestamp build_apps_nodep depend
build_apps_nodep: $(PROGRAMS) $(SCRIPTS)
build_tests: config.timestamp build_tests_nodep depend
build_tests_nodep: $(TESTPROGS)
test tests: build_tests build_apps build_engines rehash test tests: build_tests_nodep build_apps_nodep build_engines_nodep depend rehash
( cd test; \ ( cd test; \
SRCTOP=../$(SRCDIR) \ SRCTOP=../$(SRCDIR) \
BLDTOP=../$(BLDDIR) \ BLDTOP=../$(BLDDIR) \
@ -181,20 +189,18 @@ clean: libclean
-rm -f `find $(BLDDIR) -type l` -rm -f `find $(BLDDIR) -type l`
rm -f $(TARFILE) rm -f $(TARFILE)
DCLEAN_CMD=sed -e '/^. DO NOT DELETE.*/,$$d' # This exists solely for those who still type 'make depend'
dclean: depend: Makefile
$(DCLEAN_CMD) < Makefile >Makefile.new Makefile: FORCE
mv -f Makefile.new Makefile @( sed -e '/^# DO NOT DELETE THIS LINE.*/,$$d' < Makefile; \
DEPS={- join(" ", map { (my $x = $_) =~ s|\.o$|\$(DEP_EXT)|; $x; }
grep { $unified_info{sources}->{$_}->[0] =~ /\.c$/ }
keys %{$unified_info{sources}}); -}
depend: $(DEPS)
( $(DCLEAN_CMD) < Makefile; \
echo '# DO NOT DELETE THIS LINE -- make depend depends on it.'; \ echo '# DO NOT DELETE THIS LINE -- make depend depends on it.'; \
echo; \ echo; \
cat `find . -name '*$(DEP_EXT)'` ) > Makefile.new for d in $(DEPS); do \
mv -f Makefile.new Makefile 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; \
fi
# Install helper targets ############################################# # Install helper targets #############################################
@ -579,7 +585,7 @@ dist:
# Helper targets ##################################################### # Helper targets #####################################################
rehash: link-utils copy-certs build_apps rehash: link-utils copy-certs build_apps_nodep
@if [ -z "$(CROSS_COMPILE)" ]; then \ @if [ -z "$(CROSS_COMPILE)" ]; then \
(OPENSSL="$(BLDDIR)/util/shlib_wrap.sh apps/openssl"; \ (OPENSSL="$(BLDDIR)/util/shlib_wrap.sh apps/openssl"; \
[ -x "$(BLDDIR)/openssl.exe" ] && OPENSSL="$(BLDDIR)/openssl.exe" || :; \ [ -x "$(BLDDIR)/openssl.exe" ] && OPENSSL="$(BLDDIR)/openssl.exe" || :; \
@ -592,12 +598,12 @@ rehash: link-utils copy-certs build_apps
link-utils: $(BLDDIR)/util/opensslwrap.sh $(BLDDIR)/util/shlib_wrap.sh link-utils: $(BLDDIR)/util/opensslwrap.sh $(BLDDIR)/util/shlib_wrap.sh
$(BLDDIR)/util/opensslwrap.sh: Makefile $(BLDDIR)/util/opensslwrap.sh: config.timestamp
@if [ "$(SRCDIR)" != "$(BLDDIR)" ]; then \ @if [ "$(SRCDIR)" != "$(BLDDIR)" ]; then \
mkdir -p "$(BLDDIR)/util"; \ mkdir -p "$(BLDDIR)/util"; \
ln -sf "../$(SRCDIR)/util/opensslwrap.sh" "$(BLDDIR)/util"; \ ln -sf "../$(SRCDIR)/util/opensslwrap.sh" "$(BLDDIR)/util"; \
fi fi
$(BLDDIR)/util/shlib_wrap.sh: Makefile $(BLDDIR)/util/shlib_wrap.sh: config.timestamp
@if [ "$(SRCDIR)" != "$(BLDDIR)" ]; then \ @if [ "$(SRCDIR)" != "$(BLDDIR)" ]; then \
mkdir -p "$(BLDDIR)/util"; \ mkdir -p "$(BLDDIR)/util"; \
ln -sf "../$(SRCDIR)/util/shlib_wrap.sh" "$(BLDDIR)/util"; \ ln -sf "../$(SRCDIR)/util/shlib_wrap.sh" "$(BLDDIR)/util"; \
@ -651,11 +657,11 @@ $(SRCDIR)/crypto/objects/obj_xref.h: $(SRCDIR)/crypto/objects/objxref.pl \
> $(SRCDIR)/crypto/objects/obj_xref.h > $(SRCDIR)/crypto/objects/obj_xref.h
@sleep 1; touch $(SRCDIR)/crypto/objects/obj_xref.h; sleep 1 @sleep 1; touch $(SRCDIR)/crypto/objects/obj_xref.h; sleep 1
FORCE : FORCE:
# Building targets ################################################### # Building targets ###################################################
libcrypto.pc libssl.pc openssl.pc: Makefile $(LIBS) libcrypto.pc libssl.pc openssl.pc: config.timestamp $(LIBS)
libcrypto.pc: libcrypto.pc:
@ ( echo 'prefix=$(INSTALLTOP)'; \ @ ( echo 'prefix=$(INSTALLTOP)'; \
echo 'exec_prefix=$${prefix}'; \ echo 'exec_prefix=$${prefix}'; \
@ -698,8 +704,8 @@ openssl.pc:
# wasn't passed down automatically. It's quite safe to use it like we do # wasn't passed down automatically. It's quite safe to use it like we do
# below; if it doesn't exist, the result will be empty and 'make' will pick # below; if it doesn't exist, the result will be empty and 'make' will pick
# up $(MAKEFLAGS) which is passed down as an environment variable. # up $(MAKEFLAGS) which is passed down as an environment variable.
Makefile: {- $config{build_file_template} -} $(SRCDIR)/Configure $(SRCDIR)/config config.timestamp: {- $config{build_file_template} -} $(SRCDIR)/Configure $(SRCDIR)/config
@echo "Makefile is older than {- $config{build_file_template} -}, $(SRCDIR)/Configure or $(SRCDIR)/config." @echo "Detected that {- $config{build_file_template} -}, $(SRCDIR)/Configure or $(SRCDIR)/config may have changed."
@echo "Reconfiguring..." @echo "Reconfiguring..."
$(SRCDIR)/Configure reconf $(SRCDIR)/Configure reconf
@echo "**************************************************" @echo "**************************************************"
@ -707,6 +713,7 @@ Makefile: {- $config{build_file_template} -} $(SRCDIR)/Configure $(SRCDIR)/confi
@echo "*** Please run the same make command again ***" @echo "*** Please run the same make command again ***"
@echo "*** ***" @echo "*** ***"
@echo "**************************************************" @echo "**************************************************"
@touch config.timestamp
@false @false
{- {-