mirror of
https://github.com/json-c/json-c.git
synced 2026-11-05 21:20:16 +08:00
187 lines
5.0 KiB
Bash
Executable File
187 lines
5.0 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
|
|
set -e -o pipefail
|
|
trap 'echo "ERROR: Unexpected exit in $0"' EXIT
|
|
|
|
RUNDIR=$(dirname "$0")
|
|
RUNDIR=$(realpath "${RUNDIR}")
|
|
. "${RUNDIR}/reltools.subr"
|
|
|
|
usage()
|
|
{
|
|
local exitval="$1" ; shift
|
|
local errmsg="$1"
|
|
if [ "${exitval}" -ne 0 ] ; then
|
|
exec 1>&2
|
|
fi
|
|
if [ -n "${errmsg}" ] ; then
|
|
echo "ERROR: ${errmsg}" 1>&2
|
|
fi
|
|
cat <<EOF
|
|
Usage: $0 --help|--dev|--release
|
|
|
|
Bump version in all necessary locations, to either a release or dev version
|
|
|
|
Run this script from the top-level directory of a json-c clone.
|
|
|
|
EOF
|
|
trap - EXIT
|
|
exit "${exitval}"
|
|
}
|
|
|
|
|
|
bump_release_ver()
|
|
{
|
|
echo "ERROR: bump_release_ver() not yet implemented in $0" 1>&2
|
|
echo "See RELEASE_CHECKLIST.txt for steps to take" 1>&2
|
|
return 1
|
|
}
|
|
|
|
bump_dev_ver()
|
|
{
|
|
# Update the working directory to get it ready for the next release.
|
|
# This runs just _after_ a release has been done
|
|
|
|
# shellcheck disable=SC2143
|
|
if [ -n "$(git status --porcelain | grep -v reltools/bump_version.sh)" ] ; then
|
|
usage 1 "local changes in working directory, aborting"
|
|
fi
|
|
|
|
RELVER=$(get_most_recent_relver)
|
|
NEXTVER=$(get_next_relver)
|
|
|
|
if ! grep -q "^${NEXTVER}" ChangeLog ; then
|
|
# Add new section to ChangeLog for ${release}+1
|
|
cat <<EOF > ChangeLog.new
|
|
${NEXTVER} (future release)
|
|
========================================
|
|
Deprecated and removed features:
|
|
--------------------------------
|
|
* none yet
|
|
|
|
New features
|
|
------------
|
|
* none yet
|
|
|
|
Significant changes and bug fixes
|
|
---------------------------------
|
|
* none yet
|
|
|
|
EOF
|
|
cat ChangeLog >> ChangeLog.new
|
|
mv ChangeLog.new ChangeLog
|
|
else
|
|
echo "Warning: ChangeLog already contains a ${NEXTVER} section" 1>&2
|
|
fi
|
|
|
|
|
|
# Use ${release}.99 to indicate a version "newer" than anything on the branch:
|
|
if ! grep -q "${RELVER}.99" json_c_version.h ; then
|
|
local MAJOR MINOR
|
|
MAJOR=${RELVER%%.*}
|
|
MINOR=${RELVER#*.}
|
|
echo "Updating json_c_version.h to ${RELVER}.99"
|
|
sed -i \
|
|
-e "s/#define JSON_C_MAJOR_VERSION .*/#define JSON_C_MAJOR_VERSION ${MAJOR}/" \
|
|
-e "s/#define JSON_C_MINOR_VERSION .*/#define JSON_C_MINOR_VERSION ${MINOR}/" \
|
|
-e "s/#define JSON_C_MICRO_VERSION .*/#define JSON_C_MICRO_VERSION 99/" \
|
|
-e "s/#define JSON_C_VERSION \".*\"/#define JSON_C_VERSION \"${RELVER}.99\"/" \
|
|
json_c_version.h
|
|
else
|
|
echo "Warning: json_c_version.h already contains ${RELVER}.99" 1>&2
|
|
fi
|
|
|
|
if ! grep -q "${RELVER}.99" CMakeLists.txt ; then
|
|
echo "Updating CMakeLists.txt to ${RELVER}.99"
|
|
sed -i \
|
|
-e "s/project(\(.*\) VERSION .*)/project(\1 VERSION ${RELVER}.99)/" \
|
|
CMakeLists.txt
|
|
else
|
|
echo "Warning: CMakeLists.txt already contains ${RELVER}.99" 1>&2
|
|
fi
|
|
|
|
local RELTAG
|
|
RELTAG=$(get_most_recent_reltag "")
|
|
echo "Extracting VERSION, SOVERSION from ${RELTAG}:CMakeLists.txt"
|
|
|
|
local REL_SOVER REL_SOVERNUM
|
|
REL_SOVER=$(git show "${RELTAG}:CMakeLists.txt" | awk '/set_target_prop.*PROJECT_NAME/,/)/')
|
|
REL_VERNUM=$(echo "${REL_SOVER}" | grep " VERSION " | sed -e's/ *VERSION *//' )
|
|
REL_SOVERNUM=$(echo "${REL_SOVER}" | grep " SOVERSION " | sed -e's/ *SOVERSION *//' -e's/)//' )
|
|
echo " VERSION=${REL_VERNUM}"
|
|
echo " SOVERSION=${REL_SOVERNUM}"
|
|
if ! grep -q " VERSION ${REL_VERNUM}" CMakeLists.txt ; then
|
|
echo "Updating VERSION=${REL_VERNUM}, SOVERSION=${REL_VERNUM} in CMakeLists.txt to match release branch"
|
|
# Paste in the whole block from the releaes copy of CMakeLists.txt:
|
|
awk -v REL_SOVER="${REL_SOVER}" \
|
|
'/set_target_prop.*PROJECT_NAME/,/)/ {
|
|
if (REL_SOVER) print REL_SOVER;
|
|
REL_SOVER=null;
|
|
next;
|
|
}
|
|
{ print; }' \
|
|
CMakeLists.txt > CMakeLists.txt.new
|
|
mv -f CMakeLists.txt.new CMakeLists.txt
|
|
else
|
|
echo "Warning: CMakeLists.txt already contains VERSION ${REL_VERNUM}" 1>&2
|
|
fi
|
|
|
|
if ! grep -q "${RELVER}.99" meson.build ; then
|
|
echo "Updating project version in meson.build to ${RELVER}.99"
|
|
sed -i -e"s/project(\(.*\)version:.*/project(\1version: '${RELVER}.99',/" meson.build
|
|
else
|
|
echo "Warning: meson.build already contains ${RELVER}.99" 1>&2
|
|
fi
|
|
|
|
if ! grep -q "version: *'${REL_SOVERNUM}'" meson.build ; then
|
|
echo "Updating soversion in meson.build to ${REL_VERNUM}, ${REL_SOVERNUM}"
|
|
awk -v version="'${REL_VERNUM}'" -v soversion="'${REL_SOVERNUM}'" \
|
|
'/library\(.json-c/,/\)/ {
|
|
if ($1 == "version:") { gsub("'\''.*", version ","); }
|
|
if ($1 == "soversion:") { gsub("'\''.*", soversion ","); }
|
|
}
|
|
{ print; }' < meson.build > meson.build.new
|
|
mv -f meson.build.new meson.build
|
|
else
|
|
echo "Warning: meson.build already contains soversion ${REL_VERNUM}, ${REL_SOVERNUM}" 1>&2
|
|
fi
|
|
|
|
if ! grep -q "JSONC_${NEXTVER}" json-c.sym; then
|
|
echo "Add a new empty section to the json-c.sym file, for ${NEXTVER}"
|
|
cat <<EOF >> json-c.sym
|
|
|
|
JSONC_${NEXTVER} {
|
|
# global:
|
|
} JSONC_${RELVER};
|
|
EOF
|
|
else
|
|
echo "Warning: json-c-sym already has JSONC_${NEXTVER}" 1>&2
|
|
fi
|
|
|
|
git commit -a -m "Update the master branch to version ${RELVER}.99"
|
|
}
|
|
|
|
while [ $# -gt 0 ] ; do
|
|
case "$1" in
|
|
--dev)
|
|
bump_dev_ver
|
|
trap - EXIT
|
|
exit 0
|
|
;;
|
|
--release)
|
|
bump_release_ver
|
|
trap - EXIT
|
|
exit 0
|
|
;;
|
|
-h|--help)
|
|
usage 0
|
|
;;
|
|
*)
|
|
usage 1 "Unknown args: $*"
|
|
;;
|
|
esac
|
|
done
|
|
|
|
usage 1 "Need at least one argument"
|