#!/bin/bash # version.sh: openocd version process automation # Copyright (C) 2009 by Zachary T Welch <zw@superlucidity.net> # Release under the GNU GPL v2 (or later versions). # FIXME Remove more bash-isms. Fix errors making "ash -e" lose. # NOTE Use with care! "RC" should only follow x.x.x, with # vendor tags after that. Be traditional; avoid "rc0". # NOTE: This *ONLY* updates the "configure.in" version tag. # It does not affect GIT tags. Use this script immediately # before making a release, to remove the "-dev" tag and to # update the version label. Then commit the change and tag # that commit to match the version label. . "tools/release/helpers.sh" do_version_usage() { cat << USAGE usage: $0 <command> Version Commands: tag {add|remove} <label> Add or remove the specified tag. bump {major|minor|micro|rc} Bump the specified version number, and reset less-significant numbers to zero. bump tag <label> Add or bump a versioned tag (e.g. -rcN). bump final <label> Remove a versioned tag (e.g. -rcN). USAGE # REVISIT ... "commit" not listed. } do_version_sed() { local OLD_VERSION="${PACKAGE_VERSION}" local NEW_VERSION="$1" local MSG="$2" sed -i -e "/AC_INIT/ s|${OLD_VERSION}|${NEW_VERSION}|" configure.in package_info_load echo "${MSG}: ${OLD_VERSION} -> ${NEW_VERSION}" } do_version_bump_sed() { local NEW_VERSION="$1" [ -z "${PACKAGE_VERSION_TAGS}" ] || \ NEW_VERSION="${NEW_VERSION}${PACKAGE_VERSION_TAGS}" do_version_sed "${NEW_VERSION}" \ "Bump ${CMD} package version number" } do_version_bump_major() { do_version_bump_sed "$((PACKAGE_MAJOR + 1)).0.0" } do_version_bump_minor() { do_version_bump_sed "${PACKAGE_MAJOR}.$((PACKAGE_MINOR + 1)).0" } do_version_bump_micro() { do_version_bump_sed "${PACKAGE_MAJOR_AND_MINOR}.$((PACKAGE_MICRO + 1))" } do_version_bump_tag() { local TAG="$1" [ "${TAG}" ] || die "TAG argument is missing" local TAGS="${PACKAGE_VERSION_TAGS}" if has_version_tag "${TAG}"; then local RC=$(do_version_tag_value "${TAG}") RC=$((${RC} + 1)) TAGS=$(echo ${TAGS} | perl -npe "s/-${TAG}[\\d]*/-${TAG}${RC}/") else TAGS="-${TAG}0${PACKAGE_VERSION_TAGS}" fi PACKAGE_VERSION_TAGS="${TAGS}" do_version_bump_sed "${PACKAGE_VERSION_BASE}" } do_version_bump_final() { local TAG="$1" [ "${TAG}" ] || die "TAG argument is missing" has_version_tag "${TAG}" || die "-${TAG} tag is missing" do_version_tag_remove "${TAG}$(do_version_tag_value "${TAG}")" } do_version_bump() { CMD="$1" shift case "${CMD}" in major|minor|micro|final|tag) "do_version_bump_${CMD}" "$@" ;; rc) do_version_bump_tag "rc" ;; *) do_version_usage ;; esac } has_version_tag() { test "${PACKAGE_VERSION/-${1}/}" != "${PACKAGE_VERSION}" } do_version_tag_value() { local TAG="$1" echo ${PACKAGE_VERSION_TAGS} | perl -ne "/-${TAG}"'(\d+)/ && print $1' } do_version_tag_add() { local TAG="$1" has_version_tag "${TAG}" && \ die "error: tag '-${TAG}' exists in '${PACKAGE_VERSION}'" do_version_sed "${PACKAGE_VERSION}-${TAG}" \ "Add '-${TAG}' version tag" } do_version_tag_remove() { local TAG="$1" has_version_tag "${TAG}" || \ die "error: tag '-${TAG}' missing from '${PACKAGE_VERSION}'" do_version_sed "${PACKAGE_VERSION/-${TAG}/}" \ "Remove '-${TAG}' version tag" } do_version_tag() { CMD="$1" shift case "${CMD}" in add|remove) local i= for i in "$@"; do "do_version_tag_${CMD}" "${i}" done ;; *) do_version_usage ;; esac } do_version() { CMD="$1" shift case "${CMD}" in tag|bump) "do_version_${CMD}" "$@" ;; commit) do_version_commit "$@" ;; *) do_version_usage ;; esac } package_info_load do_version "$@"