You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
tdesdk/scripts/cheatmake

81 lines
2.6 KiB

#!/bin/sh
# Helper for saving time when recompiling, skipping files that haven't
# changed in a meaningful way (e.g. if you only change a comment...)
#
# LGPL v2, David Faure <david@mandrakesoft.com>
usage()
{
echo "Usage:"
echo " $0 hidechange file Hides the fact that file was changed (use with care!)"
echo " $0 show Lists what make currently has to rebuild"
echo " $0 why file Explains why make must rebuild file"
exit 1;
}
if [ $# -eq 0 ]; then usage; fi
CDPATH=
builddir=$PWD
# 'srcdir != builddir' stuff
if test ! -f Makefile && test -n "$OBJ_SUBDIR"; then
builddir=$OBJ_SUBDIR
else
if test ! -f Makefile && test -n "$OBJ_REPLACEMENT"; then
builddir=`pwd | sed -e "$OBJ_REPLACEMENT"`
fi
fi
if test ! -f Makefile && test -n "$OBJ_SUBDIR"; then
builddir=$OBJ_SUBDIR
fi
cd $builddir
srcdir=`egrep '^srcdir *=' Makefile | sed -e "s#srcdir *= *##"`
UNSERMAKE=`type -p unsermake`
using_unsermake=
if head -n 1 Makefile | grep unsermake >/dev/null; then
using_unsermake=new
fi
if head -n 1 Makefile | grep automake >/dev/null; then
using_unsermake=old
fi
case $1 in
hidechange )
if [ $# -ne 2 ]; then usage; fi
## TODO: unsermake support (or support in unsermake itself)
deps=`make SUBDIRS='' -n | grep '\-o' | sed -e 's/.*-o \([^ ]*\).*/\1/'`;
if [ -n "$deps" ]; then
oldestdep=`ls -t $deps 2>/dev/null | tail -1`
thefile=$2
if [ -f $srcdir/$thefile ]; then
thefile=$srcdir/$thefile
fi
echo
echo "Setting date of $thefile back in time with:"
echo "touch -r $oldestdep $thefile" ; touch -r $oldestdep $thefile
fi
;;
show )
if [ $# -ne 1 ]; then usage; fi
if test "$using_unsermake" != "new"; then
# Look at the commands that make will issue, and extract "-o output".
# The only trouble, with libtool, is that this gives us .libs/foo.o instead of foo.lo
make SUBDIRS='' -n | grep '\-o' | sed -e 's/.*-o \([^ ]*\).*/\1/'
else
# Solve the above problem (when using new-unsermake) by watching the "echo" lines for creating .lo files
# separately from the rest of the "-o target" lines (for libs and binaries)
# (For libs and bins another way would be to grep for "linking")
# The "ls" is for sorting by date
$UNSERMAKE -n | perl -e 'while(<>) { if (/by libtool/) { s/.*> //; print; } if (m/-o ([^ ]*)/ && $1!~/\.o$/) { print "$1\n"; } }' | xargs --no-run-if-empty ls -t -1
fi
;;
why )
if [ $# -ne 2 ]; then usage; fi
## TODO: unsermake support (or support in unsermake itself)
make SUBDIRS='' -n -d $2 | egrep -e "(newer than target \`$2'|Must)"
;;
* ) usage ;;
esac