Add "pretty" build option
authorAndrew Deason <adeason@sinenomine.net>
Wed, 13 Apr 2011 18:15:57 +0000 (13:15 -0500)
committerDerrick Brashear <shadow@dementix.org>
Wed, 9 Nov 2011 03:39:46 +0000 (19:39 -0800)
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 <rra@stanford.edu>
Tested-by: BuildBot <buildbot@rampaginggeek.com>
Reviewed-by: Derrick Brashear <shadow@dementix.org>

14 files changed:
src/butc/Makefile.in
src/comerr/Makefile.in
src/config/Makefile.config.in
src/config/Makefile.lwp.in
src/config/Makefile.pthread.in
src/config/Makefile.shared.in
src/export/Makefile.in
src/kopenafs/Makefile.in
src/lwp/Makefile.in
src/pam/Makefile.in
src/ptserver/Makefile.in
src/venus/Makefile.in
src/viced/Makefile.in
src/vol/Makefile.in

index 8555428..8de4bbf 100644 (file)
@@ -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
index 5712f2e..104ba8b 100644 (file)
@@ -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
index 23f2902..031bb54 100644 (file)
@@ -144,6 +144,51 @@ 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 $@
 
index 89bb957..0025968 100644 (file)
@@ -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) $<
index 420ee6a..f4af720 100644 (file)
@@ -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) $<
index 1aee0de..9a43895 100644 (file)
@@ -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) $<
index ae10dd7..ba5446e 100644 (file)
@@ -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:
index 2506e0c..f8b28b6 100644 (file)
@@ -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; \
index c9cf827..af5bdab 100644 (file)
@@ -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
index 0d3027a..1f92502 100644 (file)
@@ -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
index c40c11d..e979428 100644 (file)
@@ -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
 
index a33b222..dd76819 100644 (file)
@@ -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);; \
index 706433d..84bf59d 100644 (file)
@@ -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
 
index fd7bf9e..ac094f8 100644 (file)
@@ -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