summaryrefslogtreecommitdiffstats
path: root/librpc/build_idl.sh
diff options
context:
space:
mode:
authorDavid Disseldorp <ddiss@samba.org>2012-04-16 01:00:46 +0200
committerDavid Disseldorp <ddiss@samba.org>2012-04-16 16:29:45 +0200
commit8405fee41d93cb5a44690213c3086f3a4a275cb0 (patch)
tree4d4c64ecc31cb7e6e3acb6ea335a4bf44ccdf4c7 /librpc/build_idl.sh
parent51e3bbd3e0a29171f4ed9e6fb933f4d124400de7 (diff)
downloadsamba-8405fee41d93cb5a44690213c3086f3a4a275cb0.tar.gz
samba-8405fee41d93cb5a44690213c3086f3a4a275cb0.tar.xz
samba-8405fee41d93cb5a44690213c3086f3a4a275cb0.zip
build: rebuild idl if the pidl compiler is changed
In determining whether to compile a given .idl source file, build_idl.sh currently checks: a) that all build output files exist b) build output files are newer than their corresponding .idl source The .idl is rebuilt if either of the above conditions is false. This logic does not catch the case where the pidl compiler itself is changed. An IDL rebuild should occur in such a case. https://bugzilla.samba.org/show_bug.cgi?id=8865 Autobuild-User: David Disseldorp <ddiss@samba.org> Autobuild-Date: Mon Apr 16 16:29:45 CEST 2012 on sn-devel-104
Diffstat (limited to 'librpc/build_idl.sh')
-rwxr-xr-xlibrpc/build_idl.sh25
1 files changed, 20 insertions, 5 deletions
diff --git a/librpc/build_idl.sh b/librpc/build_idl.sh
index afab91044b..e028bc6831 100755
--- a/librpc/build_idl.sh
+++ b/librpc/build_idl.sh
@@ -15,17 +15,28 @@ cd ${srcdir}
[ -d $PIDL_OUTPUTDIR ] || mkdir -p $PIDL_OUTPUTDIR || exit 1
-PIDL="$PIDL $ARGS"
+PIDL_DIR=`dirname $PIDL`
+PIDL_CMD="$PIDL $ARGS"
if [ $FULL = 1 ]; then
echo "Rebuilding all idl files"
- $PIDL $IDL_FILES || exit 1
+ $PIDL_CMD $IDL_FILES || exit 1
exit 0
fi
##
-## Find newer files rather than rebuild all of them
+## Find newer files rather than rebuild all of them. Also handle the case
+## where the pidl compiler itself is newer.
##
+PIDL_NEWEST=`find $PIDL_DIR -type f -printf "%p\0%T@\n" \
+ | perl -e '$ts_newest = 0;
+ while (<STDIN>) {
+ ($f, $ts) = split(/\0/);
+ next if ($ts <= $ts_newest);
+ $ts_newest = $ts;
+ $f_newest = $f;
+ }
+ print $f_newest'` || exit 1
list=""
for f in ${IDL_FILES}; do
@@ -42,6 +53,10 @@ for f in ${IDL_FILES}; do
list="$list $f"
break
}
+ test "`find $PIDL_NEWEST -newer $PIDL_OUTPUTDIR/$o`" != "" && {
+ list="$list $f"
+ break
+ }
done
done
@@ -50,8 +65,8 @@ done
##
if [ "x$list" != x ]; then
- # echo "${PIDL} ${list}"
- $PIDL $list || exit 1
+ # echo "${PIDL_CMD} ${list}"
+ $PIDL_CMD $list || exit 1
fi
cd ${oldpwd}