diff --git a/make/rpmdist.mk b/make/rpmdist.mk index a213e562..e25c0259 100644 --- a/make/rpmdist.mk +++ b/make/rpmdist.mk @@ -33,7 +33,7 @@ FTP_HOST_LOGIN ?= root RPM_PROJECT ?= $(PROJECT) RPM_VERSION ?= $(DIST_VERSION) LAST_RPM_VERSION_FILE = $(TOPDIR)/LAST_RPM_VERSION$(FLAVOUR_SUFFIX) -LAST_RPM_VERSION ?= $(shell sh $(MOD_SCRIPT_DIR)/platform-map-file.sh \ +LAST_RPM_VERSION ?= $(shell sh $(MOD_SCRIPT_DIR)/pkg.sh version \ -p $(OS)/$(RPM_ARCH) $(LAST_RPM_VERSION_FILE) read | $(SED) 's/-dev//') RPMBUILD ?= pkgbuild CHECK_CVS_SYNC_BEFORE_RPM_RELEASE ?= true diff --git a/scripts/pkg.sh b/scripts/pkg.sh index e402bb61..16320bd3 100644 --- a/scripts/pkg.sh +++ b/scripts/pkg.sh @@ -66,12 +66,12 @@ abspath() read_map() { - sh $MOD_SCRIPT_DIR/platform-map-file.sh -m $MOD_SCRIPT_DIR -p `platform` $@ read | sed 's/-dev//' + cmd_version -m $MOD_SCRIPT_DIR -p `platform` $@ read | sed 's/-dev//' } write_map() { - sh $MOD_SCRIPT_DIR/platform-map-file.sh -m $MOD_SCRIPT_DIR -p `platform` $1 write $2 + cmd_version -m $MOD_SCRIPT_DIR -p `platform` $1 write $2 } find_path() @@ -287,6 +287,107 @@ check_update_version() ) } +cmd_version() +{ + cmd_version_usage() + { + cat <<- EOT | sed 's/ |//' + |usage: $myname version filename cmd [args] + EOT + [ "$1" ] && exit $1 + } + + cmd_version_strip_dev_dummy() + { + cat + } + + cmd_version_strip_dev_real() + { + sed 's/-dev//' + } + + # -- here we go + local mod_script_dir=/opt/ytools/bin/get_os.sh + local strip_dev=cmd_version_strip_dev_dummy + local platform_patt="\(^debian-[0-9.]\+\|^suse-[0-9.]\+\)/\(i.86\|x86_64\): *" + local no_compat= + + [ $# -lt 2 ] && cmd_version_usage 1 + + set -- `getopt 'hsnp:m:' "$@"` + while [ "$1" != -- ] ; do + case "$1" in + -n) + no_compat=true;; + -s) + strip_dev=cmd_version_strip_dev_real;; + -p) + platform="$2"; shift;; + -m) + mod_script_dir="$2"; shift;; + -h) + cmd_version_usage 0;; + *) + cmd_version_usage 1;; + esac + shift + done + shift + + local file="$1" + shift + + local cmd=$1 + shift + + local platform + [ "$platform" ] || platform=`bash $mod_script_dir/get_os.sh`/`arch` + + case $cmd in + read) + local p=`echo $platform | sed 's%/%\\\/%g'` + local v=`sed "/$p:/ !d; s/$p: *//" $file` + [ "$v" ] && { + echo "$v" | $strip_dev + return + } + [ "$no_compat" = true ] && { + return + } + grep -q "$platform_patt" $file || { + cat $file | $strip_dev + return + } + local pp=`echo $platform_patt | sed 's%/%\\\/%g'` + sed "/$pp/ !d; s/$pp//; 2,$ d" $file | $strip_dev + ;; + write) + local val=$1 + local p=$platform + [ -f $file ] || { + echo "$p: $val" > $file + return + } + grep -q "$platform_patt" $file || { + echo "$p: $val" > $file + return + } + grep -q "^$p:" $file || { + echo "$p: $val" >> $file + return + } + p=`echo $p | sed 's%/%\\\/%g'` + val=`echo $val | sed 's%/%\\\/%g'` + sed "s/$p:.*/$p: $val/" $file > $file.tmp + mv $file.tmp $file + ;; + *) + echo unknown command $cmd >&2 + cmd_version_usage 1;; + esac +} + build_pkg() { set -e @@ -864,6 +965,9 @@ need-release) update-version) check_update_version || exit 0 ;; +version) + eval cmd_version "$@" + ;; build) check_cwd rm -rf ./$DIST_SRC_DIR ./$DIST_PCKG_DIR