[gnome-utils] [build] Use Shave



commit dde8661d7c781c0a77e2dc25258f16c1dcea2086
Author: Emmanuele Bassi <ebassi gnome org>
Date:   Sat Apr 18 12:57:07 2009 +0100

    [build] Use Shave
    
    Shave is a neat little tool that removes the libtool and gcc incantations
    from the build output, making it useful again for spotting warnings and
    errors that would otherwise be drowned by the excessive verbosity.
    
    It can be toggled by simply using:
    
            make V=1
    
    instead of the usual 'make'.
---
 .gitignore          |    3 ++
 Makefile.am         |   22 +++++++-------
 configure.ac        |    6 ++++
 m4/Makefile.am      |    8 +++++
 m4/shave-libtool.in |   69 ++++++++++++++++++++++++++++++++++++++++++++
 m4/shave.in         |   79 +++++++++++++++++++++++++++++++++++++++++++++++++++
 m4/shave.m4         |   77 +++++++++++++++++++++++++++++++++++++++++++++++++
 7 files changed, 253 insertions(+), 11 deletions(-)

diff --git a/.gitignore b/.gitignore
index 5fae5cd..f0e0b98 100644
--- a/.gitignore
+++ b/.gitignore
@@ -27,6 +27,8 @@ ltmain.sh
 /m4/gnome-doc-utils.m4
 /m4/gtk-doc.m4
 /m4/intltool.m4
+/m4/shave-libtool
+/m4/shave
 missing
 mkinstalldirs
 omf.make
@@ -34,5 +36,6 @@ omf.make
 /po/Makefile.in.in
 /po/POTFILES
 /po/stamp-it
+/po/*.gmo
 stamp-h1
 xmldocs.make
diff --git a/Makefile.am b/Makefile.am
index 8e931df..a9144b8 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -15,20 +15,20 @@
 # distuninstallcheck_listfiles = find . -type f -print | grep -v 'scrollkeeper' | grep -v 'omf' | grep -v 'figures'
 distuninstallcheck:
 	@:
-                                                                                                                                                             
-distcleancheck_listfiles = find . -type f -print | grep -v 'omf\.out' | grep -v 'legal.xml'
 
-always_built_SUBDIRS =   \
-	po 		 \
-	logview 	 \
-	gsearchtool	 \
-	gnome-dictionary \
-	gnome-screenshot \
-	baobab
+distcleancheck_listfiles = find . -type f -print | grep -v 'omf\.out' | grep -v 'legal.xml'
 
-SUBDIRS = $(always_built_SUBDIRS)
+ACLOCAL_AMFLAGS = -I m4
 
-DIST_SUBDIRS = $(always_built_SUBDIRS)
+SUBDIRS = \
+	m4			\
+	po			\
+	baobab			\
+	gnome-dictionary	\
+	gnome-screenshot	\
+	gsearchtool		\
+	logview			\
+	$(NULL)
 
 EXTRA_DIST = \
 	omf.make \
diff --git a/configure.ac b/configure.ac
index 787a3ea..f6c0fda 100644
--- a/configure.ac
+++ b/configure.ac
@@ -336,9 +336,15 @@ GTK_DOC_CHECK([1.10])
 dnl gnome-doc-utils stuff
 GNOME_DOC_INIT
 
+SHAVE_INIT([m4], [enable])
+
 AC_CONFIG_FILES([
         Makefile
 
+        m4/Makefile
+        m4/shave-libtool
+        m4/shave
+
         po/Makefile.in
 
         baobab/Makefile
diff --git a/m4/Makefile.am b/m4/Makefile.am
new file mode 100644
index 0000000..fc4900b
--- /dev/null
+++ b/m4/Makefile.am
@@ -0,0 +1,8 @@
+EXTRA_DIST = \
+	shave-libtool.in 	\
+	shave.in		\
+	shave.m4
+
+DISTCLEANFILES = \
+	shave-libtool		\
+	shave
diff --git a/m4/shave-libtool.in b/m4/shave-libtool.in
new file mode 100644
index 0000000..1f3a720
--- /dev/null
+++ b/m4/shave-libtool.in
@@ -0,0 +1,69 @@
+#!/bin/sh
+
+# we need sed
+SED= SED@
+if test -z "$SED" ; then
+SED=sed
+fi
+
+lt_unmangle ()
+{
+   last_result=`echo $1 | $SED -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 $opt | $SED -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/m4/shave.in b/m4/shave.in
new file mode 100644
index 0000000..5c16f27
--- /dev/null
+++ b/m4/shave.in
@@ -0,0 +1,79 @@
+#!/bin/sh
+
+# we need sed
+SED= SED@
+if test -z "$SED" ; then
+SED=sed
+fi
+
+lt_unmangle ()
+{
+   last_result=`echo $1 | $SED -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 $opt | $SED -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,$tool" in
+link,*)
+    pass_through=1
+    ;;
+*,cxx)
+    Q="  CXX   "
+    ;;
+*,cc)
+    Q="  CC    "
+    ;;
+*,fc)
+    Q="  FC    "
+    ;;
+*,f77)
+    Q="  F77   "
+    ;;
+*,objc)
+    Q="  OBJC   "
+    ;;
+*,*)
+    # should not happen
+    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/m4/shave.m4 b/m4/shave.m4
new file mode 100644
index 0000000..0a3509e
--- /dev/null
+++ b/m4/shave.m4
@@ -0,0 +1,77 @@
+dnl Make automake/libtool output more friendly to humans
+dnl  Damien Lespiau <damien lespiau gmail com>
+dnl
+dnl SHAVE_INIT([shavedir],[default_mode])
+dnl
+dnl shavedir: the directory where the shave scripts are, it defaults to
+dnl           $(top_builddir)
+dnl default_mode: (enable|disable) default shave mode.  This parameter
+dnl               controls shave's behaviour when no option has been
+dnl               given to configure.  It defaults to disable.
+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 rewrites 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_ARG_ENABLE],
+[
+  AC_ARG_ENABLE([shave],
+    AS_HELP_STRING(
+      [--enable-shave],
+      [use shave to make the build pretty [[default=$1]]]),,
+      [enable_shave=$1]
+    )
+])
+
+AC_DEFUN([SHAVE_INIT],
+[
+  dnl you can tweak the default value of enable_shave
+  m4_if([$2], [enable], [_SHAVE_ARG_ENABLE(yes)], [_SHAVE_ARG_ENABLE(no)])
+
+  if test x"$enable_shave" = xyes; then
+    dnl where can we find the shave scripts?
+    m4_if([$1],,
+      [shavedir="$ac_pwd"],
+      [shavedir="$ac_pwd/$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
+    LIBTOOL="${SHELL} ${shavedir}/shave-libtool '${SHAVE_SAVED_LIBTOOL}'"
+    AC_SUBST(LIBTOOL)
+
+    dnl substitute cc/cxx
+    SHAVE_SAVED_CC=$CC
+    SHAVE_SAVED_CXX=$CXX
+    SHAVE_SAVED_FC=$FC
+    SHAVE_SAVED_F77=$F77
+    SHAVE_SAVED_OBJC=$OBJC
+    CC="${SHELL} ${shavedir}/shave cc ${SHAVE_SAVED_CC}"
+    CXX="${SHELL} ${shavedir}/shave cxx ${SHAVE_SAVED_CXX}"
+    FC="${SHELL} ${shavedir}/shave fc ${SHAVE_SAVED_FC}"
+    F77="${SHELL} ${shavedir}/shave f77 ${SHAVE_SAVED_F77}"
+    OBJC="${SHELL} ${shavedir}/shave objc ${SHAVE_SAVED_OBJC}"
+    AC_SUBST(CC)
+    AC_SUBST(CXX)
+    AC_SUBST(FC)
+    AC_SUBST(F77)
+    AC_SUBST(OBJC)
+
+    V=@
+  else
+    V=1
+  fi
+  Q='$(V:1=)'
+  AC_SUBST(V)
+  AC_SUBST(Q)
+])
+



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]