From 8eec75efded2269a2b067175b2bdade03a022905 Mon Sep 17 00:00:00 2001 From: Damien Lespiau Date: Tue, 17 Feb 2009 14:56:35 +0000 Subject: [PATCH] [build] Beautify autotools' output Use shave (http://git.lespiau.name/cgit/shave) to make compilation more human friendly. --- Makefile.am | 2 + build/Makefile.am | 1 + build/autotools/.gitignore | 8 ++++ build/autotools/Makefile.am | 11 +++++ build/autotools/shave-libtool.in | 70 ++++++++++++++++++++++++++++++++ build/autotools/shave.in | 70 ++++++++++++++++++++++++++++++++ build/autotools/shave.m4 | 36 ++++++++++++++++ clutter/Makefile.am | 13 +++--- configure.ac | 7 ++++ tests/conform/Makefile.am | 2 +- 10 files changed, 214 insertions(+), 6 deletions(-) create mode 100644 build/Makefile.am create mode 100644 build/autotools/.gitignore create mode 100644 build/autotools/Makefile.am create mode 100644 build/autotools/shave-libtool.in create mode 100644 build/autotools/shave.in create mode 100644 build/autotools/shave.m4 diff --git a/Makefile.am b/Makefile.am index f7dc24cf9..07a014a25 100644 --- a/Makefile.am +++ b/Makefile.am @@ -8,6 +8,8 @@ endif DIST_SUBDIRS = clutter tests doc po +ACLOCAL_AMFLAGS = -I build/autotools + pcfiles = \ clutter-$(CLUTTER_API_VERSION).pc \ clutter-$(CLUTTER_FLAVOUR)-$(CLUTTER_API_VERSION).pc \ diff --git a/build/Makefile.am b/build/Makefile.am new file mode 100644 index 000000000..8c902377b --- /dev/null +++ b/build/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = autotools diff --git a/build/autotools/.gitignore b/build/autotools/.gitignore new file mode 100644 index 000000000..b7e485538 --- /dev/null +++ b/build/autotools/.gitignore @@ -0,0 +1,8 @@ +gtk-doc.m4 +libtool.m4 +ltoptions.m4 +ltsugar.m4 +ltversion.m4 +lt~obsolete.m4 +shave +shave-libtool diff --git a/build/autotools/Makefile.am b/build/autotools/Makefile.am new file mode 100644 index 000000000..739ee0efc --- /dev/null +++ b/build/autotools/Makefile.am @@ -0,0 +1,11 @@ +null= + +EXTRA_DIST= gtk-doc.m4 \ + libtool.m4 \ + ltoptions.m4 \ + ltsugar.m4 \ + ltversion.m4 \ + lt~obsolete.m4 \ + shave.in \ + shave-libtool.in \ + $(null) diff --git a/build/autotools/shave-libtool.in b/build/autotools/shave-libtool.in new file mode 100644 index 000000000..02de5adea --- /dev/null +++ b/build/autotools/shave-libtool.in @@ -0,0 +1,70 @@ +#!/bin/sh + +# we need sed +SED=@SED@ +if test -z "$SED" ; then +SED=sed +fi +Xsed="$SED -e s/^X//" + +lt_unmangle () +{ + last_result=`echo -n X$1 | $Xsed -e 's#.libs/##' -e 's#[^0-9a-zA-Z_]\+_la##'` +} + +# the real libtool to use +LIBTOOL="$1" +shift + +# if 1, don't print anything, the underlaying wrapper will do it +pass_though=0 + +# scan the arguments, keep the right ones for libtool, and discover the mode +preserved_args= +while test "$#" -gt 0; do + opt="$1" + shift + + case $opt in + --mode=*) + mode=`echo "X$opt" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` + preserved_args="$preserved_args $opt" + ;; + -o) + lt_output="$1" + preserved_args="$preserved_args $opt" + ;; + *) + preserved_args="$preserved_args $opt" + ;; + esac +done + +case "$mode" in +compile) + # shave will be called and print the actual CC/CXX/LINK line + preserved_args="$preserved_args --shave-mode=$mode" + pass_though=1 + ;; +link) + preserved_args="$preserved_args --shave-mode=$mode" + Q=" LINK " + ;; +*) + # let's u + # echo "*** libtool: Unimplemented mode: $mode, fill a bug report" + ;; +esac + +lt_unmangle "$lt_output" +output=$last_result + +if test -z $V; then + if test $pass_though -eq 0; then + echo "$Q$output" + fi + $LIBTOOL --silent $preserved_args +else + echo $LIBTOOL $preserved_args + $LIBTOOL $preserved_args +fi diff --git a/build/autotools/shave.in b/build/autotools/shave.in new file mode 100644 index 000000000..5098f6f15 --- /dev/null +++ b/build/autotools/shave.in @@ -0,0 +1,70 @@ +#!/bin/sh + +# we need sed +SED=@SED@ +if test -z "$SED" ; then +SED=sed +fi +Xsed="$SED -e s/^X//" + +lt_unmangle () +{ + last_result=`echo -n X$1 | $Xsed -e 's#.libs/##' -e 's#[^0-9a-zA-Z_]\+_la##'` +} + +# the tool to wrap (cc, cxx, ar, ranlib, ..) +tool="$1" +shift + +# the reel tool (to call) +REEL_TOOL="$1" +shift + +pass_through=0 +preserved_args= +while test "$#" -gt 0; do + opt="$1" + shift + + case $opt in + --shave-mode=*) + mode=`echo "X$opt" | $Xsed -e 's/[-_a-zA-Z0-9]*=//'` + ;; + -o) + lt_output="$1" + preserved_args="$preserved_args $opt" + ;; + *) + preserved_args="$preserved_args $opt" + ;; + esac +done + +# mode=link is handled in the libtool wrapper +case "$mode" in +compile) + Q=" CC " + ;; +link) + pass_through=1 + ;; +*) + # no "libtool" mode has been given, we are called by the Makefile: + # -> assume compilation + mode=compile + Q=" CC " + ;; +esac + +lt_unmangle "$lt_output" +output=$last_result + +if test -z $V; then + if test $pass_through -eq 0; then + echo "$Q$output" + fi + $REEL_TOOL $preserved_args +else + echo $REEL_TOOL $preserved_args + $REEL_TOOL $preserved_args +fi diff --git a/build/autotools/shave.m4 b/build/autotools/shave.m4 new file mode 100644 index 000000000..54482db5d --- /dev/null +++ b/build/autotools/shave.m4 @@ -0,0 +1,36 @@ +dnl Make automake/libtool output more friendly to humans +dnl +dnl SHAVE_INIT([shavedir]) +dnl +dnl shavedir: the directory where the shave script is, it defaults to +dnl $(top_builddir) +dnl +dnl * SHAVE_INIT should be called late in your configure.(ac|in) file (just +dnl before AC_CONFIG_FILE/AC_OUTPUT is perfect. This macro rewrite CC and +dnl LIBTOOL, you don't want the configure tests to have these variables +dnl re-defined. +dnl * This macro requires GNU make's -s option. + +AC_DEFUN([SHAVE_INIT], [ +dnl where can we find the shave scripts? +m4_if([$1],, + [shavedir='$(top_builddir)'], + [shavedir='$(top_builddir)'/$1]) +AC_SUBST(shavedir) +dnl make is now quiet +AC_SUBST([MAKEFLAGS], [-s]) +AC_SUBST([AM_MAKEFLAGS], ['`test -z $V && echo -s`']) +dnl we need sed +AC_CHECK_PROG(SED,sed,sed,false) +dnl substitute libtool +SHAVE_SAVED_LIBTOOL=$LIBTOOL +AC_SUBST(SHAVE_SAVED_LIBTOOL) +LIBTOOL="\$(SHELL) \$(shavedir)/shave-libtool '\$(SHAVE_SAVED_LIBTOOL)'" +AC_SUBST(LIBTOOL) +dnl substitute cc +SHAVE_SAVED_CC=$CC +AC_SUBST(SHAVE_SAVED_CC) +CC="\$(SHELL) \$(shavedir)/shave cc '\$(SHAVE_SAVED_CC)'" +AC_SUBST(CC) +]) + diff --git a/clutter/Makefile.am b/clutter/Makefile.am index 4478aa841..c63e25ffb 100644 --- a/clutter/Makefile.am +++ b/clutter/Makefile.am @@ -1,4 +1,7 @@ -NULL = +NULL = +V = @ +Q = $(V:1=) +QUIET_GEN = $(Q:@=@echo ' GEN '$@;) SUBDIRS = cogl pango $(backendextra) $(clutterbackend) @@ -98,7 +101,7 @@ source_h = \ clutter-marshal.h: stamp-clutter-marshal.h @true stamp-clutter-marshal.h: clutter-marshal.list - $(GLIB_GENMARSHAL) \ + $(QUIET_GEN)$(GLIB_GENMARSHAL) \ --prefix=clutter_marshal \ --header \ $(srcdir)/clutter-marshal.list > xgen-cmh \ @@ -107,7 +110,7 @@ stamp-clutter-marshal.h: clutter-marshal.list && echo timestamp > $(@F) clutter-marshal.c: clutter-marshal.h Makefile - ( echo "#include \"clutter-marshal.h\"" ; \ + $(QUIET_GEN)( echo "#include \"clutter-marshal.h\"" ; \ $(GLIB_GENMARSHAL) \ --prefix=clutter_marshal \ --body \ @@ -118,7 +121,7 @@ clutter-marshal.c: clutter-marshal.h Makefile clutter-enum-types.h: stamp-clutter-enum-types.h @true stamp-clutter-enum-types.h: $(source_h) Makefile - ( $(GLIB_MKENUMS) \ + $(QUIET_GEN)( $(GLIB_MKENUMS) \ --template $(srcdir)/clutter-enum-types.h.in \ $(source_h) ) >> xgen-ceth && \ (cmp xgen-ceth clutter-enum-types.h || cp xgen-ceth clutter-enum-types.h) && \ @@ -126,7 +129,7 @@ stamp-clutter-enum-types.h: $(source_h) Makefile echo timestamp > $(@F) clutter-enum-types.c: clutter-enum-types.h - ( $(GLIB_MKENUMS) \ + $(QUIET_GEN)( $(GLIB_MKENUMS) \ --template $(srcdir)/clutter-enum-types.c.in \ $(source_h) ) >> xgen-cetc && \ cp xgen-cetc clutter-enum-types.c && \ diff --git a/configure.ac b/configure.ac index 503ecd9d9..197844e8e 100644 --- a/configure.ac +++ b/configure.ac @@ -22,6 +22,7 @@ AC_PREREQ(2.53) AC_INIT([clutter], [clutter_version], [http://bugzilla.o-hand.com/enter_bug.cgi?product=Clutter]) +AC_CONFIG_MACRO_DIR([build/autotools]) AC_CONFIG_SRCDIR([clutter/clutter.h]) AM_CONFIG_HEADER([config.h]) @@ -650,8 +651,14 @@ ALL_LINGUAS="" AM_GLIB_GNU_GETTEXT GLIB_DEFINE_LOCALEDIR(LOCALEDIR) +SHAVE_INIT([build/autotools]) + AC_CONFIG_FILES([ Makefile + build/Makefile + build/autotools/Makefile + build/autotools/shave + build/autotools/shave-libtool clutter/Makefile clutter/clutter-version.h clutter/clutter-json.h diff --git a/tests/conform/Makefile.am b/tests/conform/Makefile.am index cc54053d2..adbb22070 100644 --- a/tests/conform/Makefile.am +++ b/tests/conform/Makefile.am @@ -39,7 +39,7 @@ wrappers: test-conformance$(EXEEXT) @for i in $(UNIT_TESTS); \ do \ unit=`basename $$i | sed -e s/_/-/g`; \ - echo "GEN $$unit"; \ + echo " GEN $$unit"; \ ( echo "#!/bin/sh" ; echo "$(top_srcdir)/tests/conform/test-launcher.sh '$$i'" ) > $$unit$(EXEEXT) ; \ chmod +x $$unit$(EXEEXT); \ done