From 49cb0d00909693b85f52d87a26d5df69a829d9d5 Mon Sep 17 00:00:00 2001 From: Andrew Deason Date: Wed, 13 Apr 2011 13:15:57 -0500 Subject: [PATCH] Add "pretty" build option Add the capability to do a "pretty" build, where we output something like " CC /path/to/foo.o" to build foo.o, instead of the entire compiler invocation, similarly to how the Linux kernel build appears. Add the "pretty" building for CC and LD rules. This also prints out some helpful information when a command fails, which can sometimes otherwise be annoying to figure out post-mortem. To enable the pretty building, make with V=0. To output everything that is actually run with V=0, make with 'V=0 Q=' . Note that this does not work with all makes, since not all makes will propagate command-line-specified variables to sub-makes without -e. Non-working makes include /usr/ccs/bin/make on HP-UX and Solaris. However, GNU make will work, as will /usr/xpg4/bin/make on Solaris. Change-Id: Idce0afffe7d5be88b0743ec3f926a52efb1a6a74 Reviewed-on: http://gerrit.openafs.org/4486 Reviewed-by: Russ Allbery Tested-by: BuildBot Reviewed-by: Derrick Brashear --- src/butc/Makefile.in | 4 +-- src/comerr/Makefile.in | 6 ++-- src/config/Makefile.config.in | 57 +++++++++++++++++++++++++++++++--- src/config/Makefile.lwp.in | 3 +- src/config/Makefile.pthread.in | 4 ++- src/config/Makefile.shared.in | 4 ++- src/export/Makefile.in | 8 ++--- src/kopenafs/Makefile.in | 2 +- src/lwp/Makefile.in | 6 ++-- src/pam/Makefile.in | 10 +++--- src/ptserver/Makefile.in | 4 +-- src/venus/Makefile.in | 8 ++--- src/viced/Makefile.in | 4 +-- src/vol/Makefile.in | 4 +-- 14 files changed, 89 insertions(+), 35 deletions(-) diff --git a/src/butc/Makefile.in b/src/butc/Makefile.in index 855542844..8de4bbf82 100644 --- a/src/butc/Makefile.in +++ b/src/butc/Makefile.in @@ -63,9 +63,9 @@ tdump: tdump.c AFS_component_version_number.c butc: ${SOBJS} ${LIBS} ${INCLS} ${HACKS} @case ${SYS_NAME} in \ - rs_aix*) $(AFS_LDRULE) ${SOBJS} ${LIBS} $(LIB_roken) ${XLIBS} \ + rs_aix*) $(AFS_LDRULE_NOQ) ${SOBJS} ${LIBS} $(LIB_roken) ${XLIBS} \ /usr/lib/libc_r.a ;; \ - *) $(AFS_LDRULE) ${SOBJS} ${LIBS} $(LIB_roken) ${XLIBS} ;; \ + *) $(AFS_LDRULE_NOQ) ${SOBJS} ${LIBS} $(LIB_roken) ${XLIBS} ;; \ esac tcmain.o: tcmain.c ${INCLS} AFS_component_version_number.c diff --git a/src/comerr/Makefile.in b/src/comerr/Makefile.in index 5712f2e87..104ba8b12 100644 --- a/src/comerr/Makefile.in +++ b/src/comerr/Makefile.in @@ -30,11 +30,11 @@ et_lex.lex.c: et_lex.lex.l $(LEX) -t $(srcdir)/et_lex.lex.l > et_lex.lex.c compile_et: compile_et.o error_table.o - case $(SYS_NAME) in \ + $(Q)case $(SYS_NAME) in \ *_linux* | *_umlinux* ) \ - $(AFS_LDRULE) compile_et.o error_table.o -L${TOP_LIBDIR} -lopr;; \ + $(AFS_LDRULE_NOQ) compile_et.o error_table.o -L${TOP_LIBDIR} -lopr;; \ * ) \ - $(AFS_LDRULE) compile_et.o error_table.o -L${TOP_LIBDIR} -lopr -ll;; \ + $(AFS_LDRULE_NOQ) compile_et.o error_table.o -L${TOP_LIBDIR} -lopr -ll;; \ esac libafscom_err.a: error_msg.o et_name.o com_err.o AFS_component_version_number.o diff --git a/src/config/Makefile.config.in b/src/config/Makefile.config.in index 23f29021a..031bb5421 100644 --- a/src/config/Makefile.config.in +++ b/src/config/Makefile.config.in @@ -143,6 +143,51 @@ COMPILE_ET = ${TOP_OBJDIR}/src/comerr/compile_et RXGEN = ${TOP_OBJDIR}/src/rxgen/rxgen SHELL = /bin/sh +# +# "Pretty" build line stuff +# + +# Default to disabling the "pretty" build lines +# If the user specifies 'V=0', the variables below expand to their _V0 +# variants, which enable the "pretty" build lines +V=1 + +RUNCMD=RUNCMD () { \ + echo " $$1 $$2"; \ + shift; shift; \ + "$$@" || failcode=$$?; \ + if [ x"$$failcode" != x ] ; then \ + echo >&2; \ + echo "FAILED COMMAND: $$@" >&2; \ + echo >&2; \ + echo "In dir:" >&2; \ + pwd >&2; \ + echo >&2; \ + exit $$failcode; \ + fi; \ + exit 0; \ +} ; RUNCMD + +RUN_CC_NOQ_V0=${RUNCMD} CC "`pwd`/$@" +RUN_LD_NOQ_V0=${RUNCMD} LD "`pwd`/$@" + +# Prefixing a command with $(Q) will suppress that line from being printed +# during a "pretty" make, so the RUNCMD function above can decide itself how +# much to print. The Q is just for "quiet", and Q kinda looks like @. +# +# The _NOQ variants of the RUN_ commands are for when a compiler invocation is +# in the middle of e.g. a switch/case or an if/else, etc. In those cases, we +# want to prefix the _entire_ command with $(Q), not just the compiler, linker, +# etc. +Q_V0=@ +Q=$(Q_V$(V)) + +RUN_CC=$(Q)$(RUN_CC_NOQ_V$(V)) +RUN_LD=$(Q)$(RUN_LD_NOQ_V$(V)) + +RUN_CC_NOQ=$(RUN_CC_NOQ_V$(V)) +RUN_LD_NOQ=$(RUN_LD_NOQ_V$(V)) + # # Common/standard cflags/paths/etc # Cflags defaults, will be overridden later if necessary @@ -162,20 +207,24 @@ COMMON_LDFLAGS=$(LDFLAGS) $(LDFLAGS_hcrypto) $(LDFLAGS_roken) $(DBG) $(OPTMZ) # LWP Flags LWP_CFLAGS=$(COMMON_CFLAGS) $(MODULE_CFLAGS) LWP_LDFLAGS=$(COMMON_LDFLAGS) $(MODULE_LDFLAGS) $(XLDFLAGS) $(ARCHFLAGS) -LWP_CCRULE=$(CCOBJ) $(LWP_CFLAGS) $(CFLAGS_$(@)) -o $@ -c +LWP_CCRULE =$(RUN_CC) $(CCOBJ) $(LWP_CFLAGS) $(CFLAGS_$(@)) -o $@ -c +LWP_CCRULE_NOQ=$(RUN_CC_NOQ) $(CCOBJ) $(LWP_CFLAGS) $(CFLAGS_$(@)) -o $@ -c # Pthreaded PTH_CFLAGS=$(COMMON_CFLAGS) $(MODULE_CFLAGS) $(MT_CFLAGS) PTH_LDFLAGS=$(COMMON_LDFLAGS) $(MODULE_LDFLAGS) $(MT_LDFLAGS) -PTH_CCRULE=$(MT_CC) $(PTH_CFLAGS) $(CFLAGS_$(@)) -o $@ -c +PTH_CCRULE =$(RUN_CC) $(MT_CC) $(PTH_CFLAGS) $(CFLAGS_$(@)) -o $@ -c +PTH_CCRULE_NOQ=$(RUN_CC_NOQ) $(MT_CC) $(PTH_CFLAGS) $(CFLAGS_$(@)) -o $@ -c # Shared SHD_CFLAGS=$(COMMON_CFLAGS) $(MODULE_CFLAGS) $(MT_CFLAGS) $(SHLIB_CFLAGS) SHD_LDFLAGS=$(COMMON_LDFLAGS) $(MODULE_LDFLAGS) $(SHLIB_LDFLAGS) -SHD_CCRULE=$(MT_CC) $(SHD_CFLAGS) $(CFLAGS_$(@)) -o $@ -c +SHD_CCRULE =$(RUN_CC) $(MT_CC) $(SHD_CFLAGS) $(CFLAGS_$(@)) -o $@ -c +SHD_CCRULE_NOQ=$(RUN_CC_NOQ) $(MT_CC) $(SHD_CFLAGS) $(CFLAGS_$(@)) -o $@ -c # Default rules. These will be overriden if the module Makefile specifically # includes a particular type (lwp, pthread, or shared) -AFS_LDRULE =$(CC) $(AFS_LDFLAGS) $(AFS_CFLAGS) $(LDFLAGS_$(@)) -o $@ +AFS_LDRULE =$(RUN_LD) $(CC) $(AFS_LDFLAGS) $(AFS_CFLAGS) $(LDFLAGS_$(@)) -o $@ +AFS_LDRULE_NOQ =$(RUN_LD_NOQ) $(CC) $(AFS_LDFLAGS) $(AFS_CFLAGS) $(LDFLAGS_$(@)) -o $@ diff --git a/src/config/Makefile.lwp.in b/src/config/Makefile.lwp.in index 89bb9571f..002596806 100644 --- a/src/config/Makefile.lwp.in +++ b/src/config/Makefile.lwp.in @@ -1,6 +1,7 @@ AFS_CFLAGS = $(LWP_CFLAGS) AFS_LDFLAGS = $(LWP_LDFLAGS) -AFS_CCRULE =$(LWP_CCRULE) +AFS_CCRULE =$(LWP_CCRULE) +AFS_CCRULE_NOQ =$(LWP_CCRULE_NOQ) .c.o: $(AFS_CCRULE) $< diff --git a/src/config/Makefile.pthread.in b/src/config/Makefile.pthread.in index 420ee6ade..f4af720d7 100644 --- a/src/config/Makefile.pthread.in +++ b/src/config/Makefile.pthread.in @@ -1,8 +1,10 @@ AFS_CFLAGS=$(PTH_CFLAGS) AFS_LDFLAGS=$(PTH_LDFLAGS) AFS_CCRULE=$(PTH_CCRULE) +AFS_CCRULE_NOQ=$(PTH_CCRULE_NOQ) -AFS_LDRULE=$(MT_CC) $(AFS_LDFLAGS) $(AFS_CFLAGS) $(LDFLAGS_$(@)) -o $@ +AFS_LDRULE=$(RUN_LD) $(MT_CC) $(AFS_LDFLAGS) $(AFS_CFLAGS) $(LDFLAGS_$(@)) -o $@ +AFS_LDRULE_NOQ=$(RUN_LD_NOQ) $(MT_CC) $(AFS_LDFLAGS) $(AFS_CFLAGS) $(LDFLAGS_$(@)) -o $@ .c.o: $(AFS_CCRULE) $< diff --git a/src/config/Makefile.shared.in b/src/config/Makefile.shared.in index 1aee0de40..9a43895a7 100644 --- a/src/config/Makefile.shared.in +++ b/src/config/Makefile.shared.in @@ -2,8 +2,10 @@ AFS_CFLAGS=$(SHD_CFLAGS) AFS_LDFLAGS=$(SHD_LDFLAGS) AFS_CCRULE=$(SHD_CCRULE) +AFS_CCRULE_NOQ=$(SHD_CCRULE_NOQ) -AFS_LDRULE=$(MT_CC) $(AFS_CFLAGS) $(AFS_LDFLAGS) $(LDFLAGS_$(@)) -o $@ +AFS_LDRULE=$(RUN_LD) $(MT_CC) $(AFS_CFLAGS) $(AFS_LDFLAGS) $(LDFLAGS_$(@)) -o $@ +AFS_LDRULE_NOQ=$(RUN_LD_NOQ) $(MT_CC) $(AFS_CFLAGS) $(AFS_LDFLAGS) $(LDFLAGS_$(@)) -o $@ .c.o: $(AFS_CCRULE) $< diff --git a/src/export/Makefile.in b/src/export/Makefile.in index ae10dd711..ba5446e0c 100644 --- a/src/export/Makefile.in +++ b/src/export/Makefile.in @@ -164,8 +164,8 @@ cfgafs64: cfgafs64.o CFLAGS_cfgexport64.o = -g -q64 -D__XCOFF64__ cfgexport64.o: ${srcdir}/cfgexport.c AFS_component_version_number.c - if [ "x$(AIX64)" = "xyes" ]; then \ - $(AFS_CCRULE) $(srcdir)/cfgexport.c ; \ + $(Q)if [ "x$(AIX64)" = "xyes" ]; then \ + $(AFS_CCRULE_NOQ) $(srcdir)/cfgexport.c ; \ fi cfgexport.o: ${srcdir}/cfgexport.c AFS_component_version_number.c @@ -173,8 +173,8 @@ cfgafs.o: ${srcdir}/cfgafs.c AFS_component_version_number.c CFLAGS_cfgafs64.o = -q64 cfgafs64.o: ${srcdir}/cfgafs.c AFS_component_version_number.c - if [ "x$(AIX64)" = "xyes" ]; then \ - $(AFS_CCRULE) $(srcdir)/cfgafs.c ; \ + $(Q)if [ "x$(AIX64)" = "xyes" ]; then \ + $(AFS_CCRULE_NOQ) $(srcdir)/cfgafs.c ; \ fi clean: diff --git a/src/kopenafs/Makefile.in b/src/kopenafs/Makefile.in index 2506e0c99..f8b28b6fd 100644 --- a/src/kopenafs/Makefile.in +++ b/src/kopenafs/Makefile.in @@ -54,7 +54,7 @@ setpag.o: ${SYS}/setpag.c ${SYS}/afssyscalls.h syscall.o: ${SYS}/syscall.s @set -e; set -x; case "$(SYS_NAME)" in \ sgi_*) \ - $(AFS_CCRULE) ${SYS}/syscall.s; \ + $(AFS_CCRULE_NOQ) ${SYS}/syscall.s; \ ;; \ rs_aix* | hp_ux10*) \ $(PATH_CPP) -P ${SFLAGS} ${SYS}/syscall.s > syscall.ss; \ diff --git a/src/lwp/Makefile.in b/src/lwp/Makefile.in index c9cf827c8..af5bdab87 100644 --- a/src/lwp/Makefile.in +++ b/src/lwp/Makefile.in @@ -148,12 +148,12 @@ process.o : process.s process.i386.s process.amd64.s process.c lwp.o ${AS} -o process.o process.ss; \ $(RM) process.ss ;; \ hp* | *_linux* | *_umlinux* | sgi_64 | sgi_65 ) \ - $(AFS_CCRULE) -c ${srcdir}/process.c;; \ + $(AFS_CCRULE_NOQ) -c ${srcdir}/process.c;; \ alpha_osf1 | alpha_osf20 | alpha_osf30 | alpha_osf32 | alpha_osf32c | alpha_dux?? ) \ ${AS} -v -P -DOSF -I${TOP_INCDIR} -DASSEMBLER ${srcdir}/process.s; \ ${AS} -v process.i -o process.o;; \ ia64_hpux11* | hp_ux11* ) \ - $(AFS_CCRULE) -c ${srcdir}/process.c;; \ + $(AFS_CCRULE_NOQ) -c ${srcdir}/process.c;; \ i386_*) \ $(PATH_CPP) -P -I${TOP_INCDIR} -I${srcdir} ${srcdir}/process.i386.s > process.ss; \ ${AS} process.ss -o process.o; \ @@ -171,7 +171,7 @@ lwp.o : lwp.c lwp.h rs_aix*) \ $(CCOBJ) ${LWP_DBG} ${LWP_OPTMZ} -I${srcdir} -I. -I${TOP_OBJDIR}/src/config -I${TOP_INCDIR} -c ${srcdir}/lwp.c;; \ *) \ - $(AFS_CCRULE) ${srcdir}/lwp.c;; \ + $(AFS_CCRULE_NOQ) ${srcdir}/lwp.c;; \ esac lock.o : lock.c lock.h lwp.h timer.o : timer.c diff --git a/src/pam/Makefile.in b/src/pam/Makefile.in index 0d3027aff..1f92502c8 100644 --- a/src/pam/Makefile.in +++ b/src/pam/Makefile.in @@ -69,16 +69,16 @@ pam_afs.krb.so.1: $(SHOBJS) afs_setcred_krb.o afs_auth_krb.o afs_util_krb.o \ $(LIB_hcrypto) $(LIB_roken) test_pam: test_pam.o - set -x; \ + $(Q)set -x; \ case "$(SYS_NAME)" in \ hp_ux* | ia64_hpux*) \ - $(AFS_LDRULE) test_pam.o ${PAM_LIBS};; \ + $(AFS_LDRULE_NOQ) test_pam.o ${PAM_LIBS};; \ sun*_5*) \ - $(AFS_LDRULE) test_pam.o ${PAM_LIBS};; \ + $(AFS_LDRULE_NOQ) test_pam.o ${PAM_LIBS};; \ *linux*) \ - $(AFS_LDRULE) -rdynamic test_pam.o -lpam -ldl;; \ + $(AFS_LDRULE_NOQ) -rdynamic test_pam.o -lpam -ldl;; \ *fbsd*| *nbsd*) \ - $(AFS_LDRULE) -rdynamic test_pam.o -lpam ;; \ + $(AFS_LDRULE_NOQ) -rdynamic test_pam.o -lpam ;; \ *) \ echo No link line for system $(SYS_NAME). ;; \ esac diff --git a/src/ptserver/Makefile.in b/src/ptserver/Makefile.in index c40c11d10..e97942855 100644 --- a/src/ptserver/Makefile.in +++ b/src/ptserver/Makefile.in @@ -184,10 +184,10 @@ readpwd.o: readpwd.c ${LINCLS} AFS_component_version_number.c testpt: testpt.o libprot.a ${TOP_LIBDIR}/libcmd.a $(LIBS) case "$(SYS_NAME)" in \ *_darwin_12 ) \ - $(AFS_LDRULE) testpt.o ${TOP_LIBDIR}/libcmd.a \ + $(AFS_LDRULE_NOQ) testpt.o ${TOP_LIBDIR}/libcmd.a \ libprot.a $(LIBS) $(LIB_roken) ;; \ * ) \ - $(AFS_LDRULE) testpt.o -lm ${TOP_LIBDIR}/libcmd.a \ + $(AFS_LDRULE_NOQ) testpt.o -lm ${TOP_LIBDIR}/libcmd.a \ libprot.a $(LIBS) $(LIB_roken) ${XLIBS} ;; \ esac diff --git a/src/venus/Makefile.in b/src/venus/Makefile.in index a33b22265..dd7681945 100644 --- a/src/venus/Makefile.in +++ b/src/venus/Makefile.in @@ -115,23 +115,23 @@ whatfid: whatfid.o ${LIBS} $(AFS_LDRULE) whatfid.o ${LIBS} $(LIB_roken) ${XLIBS} fstrace.o: fstrace.c AFS_component_version_number.c - case ${SYS_NAME} in \ + $(Q)case ${SYS_NAME} in \ sun4_411 | sun4c_411 | sun4m_412 ) \ ${CCXPG2} ${DBG} ${OPTMZ} -I${TOP_OBJDIR}/src/config -I${TOP_INCDIR} -I${TOP_INCDIR} -c ${srcdir}/fstrace.c ;; \ sun*_4* ) \ ${CC} ${DBG} ${OPTMZ} -I/usr/xpg2include -I/usr/5include -g -I${TOP_SRCDIR}/config -I${TOP_INCDIR} -I${TOP_INCDIR} -c fstrace.c ;; \ * ) \ - $(AFS_CCRULE) $(srcdir)/fstrace.c ;; \ + $(AFS_CCRULE_NOQ) $(srcdir)/fstrace.c ;; \ esac fstrace: fstrace.o - case ${SYS_NAME} in \ + $(Q)case ${SYS_NAME} in \ sun4_411 | sun4c_411 | sun4m_412 ) \ ${CCXPG2} ${AFS_CFLAGS} -o fstrace fstrace.o ${TOP_LIBDIR}/libsys.a ${TOP_LIBDIR}/libcmd.a ${TOP_LIBDIR}/util.a $(TOP_LIBDIR)/libopr.a;; \ sun*_4* ) \ ${CC} -L/usr/xpg2lib -L/usr/5lib ${AFS_CFLAGS} -g -o fstrace fstrace.o ${TOP_LIBDIR}/libsys.a ${TOP_LIBDIR}/libcmd.a ${TOP_LIBDIR}/util.a $(TOP_LIBDIR)/libopr.a -lxpg ;; \ * ) \ - $(AFS_LDRULE) fstrace.o ${TOP_LIBDIR}/libsys.a \ + $(AFS_LDRULE_NOQ) fstrace.o ${TOP_LIBDIR}/libsys.a \ ${TOP_LIBDIR}/libcmd.a ${TOP_LIBDIR}/util.a \ $(TOP_LIBDIR)/libopr.a ${XLIBS} \ $(LIB_roken);; \ diff --git a/src/viced/Makefile.in b/src/viced/Makefile.in index 706433dfa..84bf59d59 100644 --- a/src/viced/Makefile.in +++ b/src/viced/Makefile.in @@ -70,13 +70,13 @@ check_sysid: check_sysid.c ${srcdir}/check_sysid.c fileserver: ${objects} ${headers} ${LIBS} - set -x; \ + $(Q)set -x; \ case ${SYS_NAME} in \ rs_aix*) \ ${CC} -K ${AFS_LDFLAGS} -o fileserver ${objects} \ ${TOP_LIBDIR}/libaudit.a ${LIBS} $(LIB_roken) ${XLIBS} ;; \ *) \ - $(AFS_LDRULE) ${objects} ${TOP_LIBDIR}/libaudit.a \ + $(AFS_LDRULE_NOQ) ${objects} ${TOP_LIBDIR}/libaudit.a \ ${LIBS} $(LIB_roken) ${XLIBS} ;; \ esac diff --git a/src/vol/Makefile.in b/src/vol/Makefile.in index fd7bf9e4a..ac094f8c5 100644 --- a/src/vol/Makefile.in +++ b/src/vol/Makefile.in @@ -201,13 +201,13 @@ listinodes.o: listinodes.c AFS_component_version_number.c esac gi: ${TOP_LIBDIR}/libsys.a - case ${SYS_NAME} in \ + $(Q)case ${SYS_NAME} in \ *linux* | sgi_* | *fbsd* ) \ echo "Don't build gi on ${SYS_NAME}";; \ *) \ ${CC} $(AFS_CPPFLAGS) $(AFS_CFLAGS) \ -c ${srcdir}/gi.c ; \ - $(AFS_LDRULE) gi.o ${TOP_LIBDIR}/libsys.a;; \ + $(AFS_LDRULE_NOQ) gi.o ${TOP_LIBDIR}/libsys.a;; \ esac namei_map: ${TOP_LIBDIR}/libsys.a namei_map.o -- 2.39.5