1.1 --- a/tools/install.sh Fri May 18 15:35:58 2018 +0200
1.2 +++ b/tools/install.sh Fri May 18 17:19:28 2018 +0200
1.3 @@ -49,28 +49,89 @@
1.4 fi
1.5
1.6 for OBJTYPE in 'conf' 'pkg' ; do
1.7 - OBJDIR=`realpath "$L4DIR"`/$OBJTYPE
1.8 + TARGETDIR=`realpath "$L4DIR"`/$OBJTYPE
1.9 + SOURCEDIR="$DIRNAME/$OBJTYPE"
1.10 +
1.11 + # If cleaning, remove all objects.
1.12
1.13 - for OBJECT in "$DIRNAME/$OBJTYPE/"* ; do
1.14 - OBJNAME=`basename "$OBJECT"`
1.15 - ORIGIN=`realpath "$OBJECT"`
1.16 - TARGET="$OBJDIR/$OBJNAME"
1.17 + if [ "$CLEAN" ] ; then
1.18 + for OBJECT in "$SOURCEDIR/"* ; do
1.19 + OBJNAME=`basename "$OBJECT"`
1.20 + ORIGIN=`realpath "$OBJECT"`
1.21 + TARGET="$TARGETDIR/$OBJNAME"
1.22
1.23 - if [ "$CLEAN" ] ; then
1.24 if [ -d "$TARGET" ] ; then
1.25 rm -r --one-file-system "$TARGET"
1.26 else
1.27 rm "$TARGET"
1.28 fi
1.29 - else
1.30 - # With an existing target, attempt to update the installed objects.
1.31 - # Otherwise, just install the objects.
1.32 + done
1.33 +
1.34 + continue
1.35 + fi
1.36 +
1.37 + # Make directories.
1.38 +
1.39 + for OBJECT in `find "$SOURCEDIR" -type d -print` ; do
1.40 + ORIGIN=`realpath "$OBJECT"`
1.41 + RELPATH=${ORIGIN#$SOURCEDIR/}
1.42 +
1.43 + # Skip top-level directories.
1.44 +
1.45 + if [ "$RELPATH" = "$ORIGIN" ]; then
1.46 + continue
1.47 + fi
1.48
1.49 - if [ -d "$ORIGIN" ] ; then
1.50 - cp -u -R "$ORIGIN" `dirname "$TARGET"`
1.51 - else
1.52 - cp -u "$ORIGIN" "$TARGET"
1.53 - fi
1.54 + TARGET="$TARGETDIR/$RELPATH"
1.55 +
1.56 + if [ ! -e "$TARGET" ]; then
1.57 + mkdir "$TARGET"
1.58 + fi
1.59 + done
1.60 +
1.61 + # Copy new files.
1.62 +
1.63 + for OBJECT in `find "$SOURCEDIR" -type f -not -name '.*' -not -name '*.orig' -not -name '*.rej' -print` ; do
1.64 + ORIGIN=`realpath "$OBJECT"`
1.65 + RELPATH=${ORIGIN#$SOURCEDIR/}
1.66 + TARGET="$TARGETDIR/$RELPATH"
1.67 +
1.68 + if [ ! -e "$TARGET" ] || [ "$ORIGIN" -nt "$TARGET" ] ; then
1.69 + cp "$ORIGIN" "$TARGET"
1.70 fi
1.71 done
1.72 +
1.73 + # Remove obsolete files.
1.74 +
1.75 + for OBJECT in "$SOURCEDIR/"* ; do
1.76 + OBJNAME=`basename "$OBJECT"`
1.77 + ORIGIN=`realpath "$OBJECT"`
1.78 +
1.79 + # Examine the target object directory for files that are not provided
1.80 + # by the distribution.
1.81 +
1.82 + TARGET="$TARGETDIR/$OBJNAME"
1.83 +
1.84 + for FILENAME in `find "$TARGET" -type f -not -name '.*' -not -name '*.orig' -not -name '*.rej' -print` ; do
1.85 + PATHNAME=`realpath "$FILENAME"`
1.86 + RELPATH=${PATHNAME#$TARGET}
1.87 + SOURCE="$ORIGIN/$RELPATH"
1.88 +
1.89 + if [ ! -e "$SOURCE" ] ; then
1.90 + rm "$PATHNAME"
1.91 + fi
1.92 + done
1.93 +
1.94 + # Remove obsolete directories.
1.95 +
1.96 + for FILENAME in `find "$TARGET" -depth -type d -print` ; do
1.97 + PATHNAME=`realpath "$FILENAME"`
1.98 + RELPATH=${PATHNAME#$TARGET}
1.99 + SOURCE="$ORIGIN/$RELPATH"
1.100 +
1.101 + if [ ! -e "$SOURCE" ] ; then
1.102 + rmdir "$PATHNAME"
1.103 + fi
1.104 + done
1.105 + done
1.106 done