build: rebuild idl if the pidl compiler is changed
authorDavid Disseldorp <ddiss@samba.org>
Sun, 15 Apr 2012 23:00:46 +0000 (01:00 +0200)
committerDavid Disseldorp <ddiss@samba.org>
Mon, 16 Apr 2012 14:29:45 +0000 (16:29 +0200)
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

librpc/build_idl.sh

index afab91044bebd535fe29b90bdfc34d9f3ac4044c..e028bc68311dd036fd724782e1cfa3ce2fd9d92c 100755 (executable)
@@ -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}