#!/bin/sh
set -e
TARGET_DIR=$1
TARGET_SKELETON=$2
PLATFORM_PREFIX=$3

# Returns true if the string $1 starts with the string $2.
startswith() {
  [ "${1#"$2"}" != "$1" ]
}

case "$PLATFORM_PREFIX" in
  gflt*)
    PLATFORM_SUFFIX=gfiberlt
    ;;
  gfsc*)
    PLATFORM_SUFFIX=gfibersc
    ;;
  gfmn*)
    PLATFORM_SUFFIX=gfiberwc
    ;;
  gftv*|gfrg*|gfibertv|kvm|gjcb*|gfex*|gffrenzy|gfch*)
    PLATFORM_SUFFIX=gfibertv
    ;;
  *)
    echo "$0 exiting, bad platform prefix: '$PLATFORM_PREFIX'"
    exit 1
    ;;
esac

if [ -d "$TARGET_SKELETON" ]; then \
  if [ "$PLATFORM_SUFFIX" != "" ]; then
    find "$TARGET_SKELETON" ! \( -type d -name CVS -o -name .svn -o  -type f \( -name .empty -o -name .gitignore -o -name '*~' \) \) |
        sort | while read line; do
      ORIG_TARGET_FILE=$(echo $line | sed 's#'"$TARGET_SKELETON"'#'"$TARGET_DIR"'#')
      NEW_TARGET_FILE=$(echo $ORIG_TARGET_FILE | sed -Ee 's#.platform_'"$PLATFORM_SUFFIX"'(/|$)#\1#g')
      PLATFORM_SUFFIX_REMOVED=$(echo $NEW_TARGET_FILE | sed -Ee 's#.platform_[^/]*(/|$)#\1#g')
      if [ "$NEW_TARGET_FILE" = "$PLATFORM_SUFFIX_REMOVED" ]; then
        if [ -h "$line" ]; then
          cp -dfT --preserve=all "$line" "$NEW_TARGET_FILE"
        elif [ -d "$line" ]; then
          [ ! -e "$NEW_TARGET_FILE" ] && mkdir -p "$NEW_TARGET_FILE" &&
          touch --reference="$line" "$NEW_TARGET_FILE" &&
          chmod --reference="$line" "$NEW_TARGET_FILE"
        else
          cp -f --preserve=all "$line" "$NEW_TARGET_FILE"
        fi
      fi
    done
  else
    cp -f --preserve=all "$TARGET_SKELETON/." "$TARGET_DIR/"
  fi
fi

