--- /dev/null
+#! /usr/bin/env perl -pi
+
+BEGIN {
+ our $count = 1; # Only the first one
+ our $RELEASE_TEXT = $ENV{RELEASE_TEXT};
+ our $PREV_RELEASE_DATE = $ENV{PREV_RELEASE_DATE} || 'xx XXX xxxx';
+ our $PREV_RELEASE_TEXT = $ENV{PREV_RELEASE_TEXT};
+}
+
+if (/^ Changes between (\S+) and (\S+) \[xx XXX xxxx\]/
+ && $count-- > 0) {
+ my $v1 = $1;
+ my $v2 = $PREV_RELEASE_TEXT || $2;
+
+ $_ = <<_____
+ Changes between $v2 and $RELEASE_TEXT [xx XXX xxxx]
+
+ *)
+
+ Changes between $v1 and $v2 [$PREV_RELEASE_DATE]
+_____
+}
--- /dev/null
+#! /usr/bin/env perl -p
+
+BEGIN {
+ our $count = 1; # Only the first one
+ our $RELEASE_TEXT = $ENV{RELEASE_TEXT};
+ our $RELEASE_DATE = $ENV{RELEASE_DATE};
+}
+
+if (/^ Changes between (\S+) and (\S+) \[xx XXX xxxx\]/
+ && $count-- > 0) {
+ $_ = " Changes between $1 and $RELEASE_TEXT [$RELEASE_DATE]$'";
+}
--- /dev/null
+#! /usr/bin/env perl -pi
+
+BEGIN {
+ our $count = 1; # Only the first one
+ our $RELEASE_TEXT = $ENV{RELEASE_TEXT};
+ our $PREV_RELEASE_DATE = $ENV{PREV_RELEASE_DATE} || 'under development';
+ our $PREV_RELEASE_TEXT = $ENV{PREV_RELEASE_TEXT};
+}
+
+if (/^ Major changes between OpenSSL (\S+) and OpenSSL (\S+) \[under development\]/
+ && $count-- > 0) {
+ my $v1 = $1;
+ my $v2 = $PREV_RELEASE_TEXT || $2;
+
+ $_ = <<_____
+ Major changes between OpenSSL $v2 and OpenSSL $RELEASE_TEXT [under development]
+
+ o
+
+ Major changes between OpenSSL $v1 and OpenSSL $v2 [$PREV_RELEASE_DATE]
+_____
+}
--- /dev/null
+#! /usr/bin/env perl -p
+
+BEGIN {
+ our $count = 1; # Only the first one
+ our $RELEASE_TEXT = $ENV{RELEASE_TEXT};
+ our $RELEASE_DATE = $ENV{RELEASE_DATE};
+}
+
+if (/^ Major changes between OpenSSL (\S+) and OpenSSL (\S+) \[under development\]/
+ && $count-- > 0) {
+ $_ = " Major changes between OpenSSL $1 and OpenSSL $RELEASE_TEXT [$RELEASE_DATE]$'";
+}
--- /dev/null
+#! /usr/bin/env perl -p
+
+BEGIN {
+ our $count = 1; # Only the first one
+ our $RELEASE = $ENV{RELEASE};
+}
+
+if (/^ OpenSSL.*$/ && $count-- > 0) {
+ $_ = " OpenSSL $RELEASE$'";
+}
--- /dev/null
+#! /usr/bin/env perl -p
+
+BEGIN {
+ our $count = 1; # Only the first one
+ our $RELEASE = $ENV{RELEASE};
+ our $RELEASE_TEXT = $ENV{RELEASE_TEXT};
+ our $RELEASE_DATE = $ENV{RELEASE_DATE};
+}
+
+if (/^ OpenSSL.*$/ && $count-- > 0) {
+ $_ = " OpenSSL $RELEASE $RELEASE_DATE$'";
+}
--- /dev/null
+#! /usr/bin/env perl -p
+
+BEGIN {
+ our $count = 1; # Only the first one
+ our $RELEASE = $ENV{RELEASE};
+ our $ispre = $RELEASE =~ /-pre/;
+
+ $RELEASE =~ s/-dev$//;
+}
+
+if (!$ispre && /^Version:\s+(\S+)$/ && $count-- > 0) {
+ $_ = "Version: $RELEASE$'";
+}
--- /dev/null
+#! /usr/bin/env perl -p
+
+BEGIN {
+ our $count = 1; # Only the first one
+ our $RELEASE = $ENV{RELEASE};
+ our $ispre = $RELEASE =~ /-pre/;
+
+ $RELEASE =~ s/-dev$//;
+}
+
+if (!$ispre && /^Version:\s+(\S+)$/ && $count-- > 0) {
+ $_ = "Version: $RELEASE$'";
+}
# is found and should be stored. If this is empty,
# no version information was found, and the release
# should be aborted.
+# RELEASE_FILES The set of files that must be manipulated during a
+# release, separated by semicolons. Other scripts are
+# used to actually manipulate these files.
#
# MAJOR, MINOR, FIX, PATCH
# The three or four parts of a version number, depending
_PRE_RELEASE_TAG=
_BUILD_METADATA=
+ RELEASE_FILES=
+
# Detect possible version files.
# OpenSSL 3.0 and on use VERSION.dat.
# OpenSSL 1.1.y use include/openssl/opensslv.h
-e 's|^dev$|0|' \
-e 's|^alpha([0-9]+)(-(dev))?$|\1|' \
-e 's|^beta([0-9]+)(-(dev))?$|\1|' )
+ RELEASE_FILES='CHANGES.md;NEWS.md'
;;
*/opensslv.h )
# opensslv.h is a bit more difficult to get version data from,
TYPE=$PRE_RELEASE_TAG
PRE_LABEL=
PRE_NUM=0
+
+ if [ -n "$(git ls-files openssl.spec)" ]; then
+ # 1.0.x
+ RELEASE_FILES='README;CHANGES;NEWS;openssl.spec'
+ else
+ # 1.1.x
+ RELEASE_FILES='README;CHANGES;NEWS'
+ fi
;;
* )
;;
esac
}
-# $1 is one of "alpha", "beta", "final", "", or "minor"
fixup_version () {
local new_label="$1"
[FULL_VERSION]=3.2.0-dev
[PRE_RELEASE_TAG]=dev
[SHLIB_VERSION]=3
+ [RELEASE_FILES]='CHANGES.md;NEWS.md'
)
get_version
check
[FULL_VERSION]=1.0.2zh-dev
[PRE_RELEASE_TAG]=dev
[SHLIB_VERSION]=1.0.0
+ [RELEASE_FILES]='README;CHANGES;NEWS;openssl.spec'
)
get_version
check
fi
orig_HEAD=$(git rev-parse HEAD)
+# Make sure that we have fixup scripts for all the files that need
+# to be modified for a release. We trust this, because we're not
+# going to change versioning scheme in the middle of a release.
+save_IFS=$IFS
+IFS=';'
+found=true
+for fn in $RELEASE_FILES; do
+ for file in "$RELEASE_AUX/fixup-$fn-release.pl" \
+ "$RELEASE_AUX/fixup-$fn-postrelease.pl"; do
+ if ! [ -f "$file" ]; then
+ echo >&2 "'$file' is missing"
+ found=false
+ fi
+ done
+done
+IFS=$save_IFS
+if ! $found; then
+ exit 1
+fi
+
# Initialize #########################################################
echo "== Initializing work tree"
$VERBOSE "== Updated version information to $release"
$VERBOSE "== Updating files with release date for $release : $RELEASE_DATE"
-for fixup in "$RELEASE_AUX"/fixup-*-release.pl; do
- file="$(basename "$fixup" | sed -e 's|^fixup-||' -e 's|-release\.pl$||')"
- $VERBOSE "> $file"
- RELEASE="$release" RELEASE_TEXT="$release_text" RELEASE_DATE="$RELEASE_DATE" \
- perl -pi $fixup $file
-done
+(
+ IFS=';'
+ for file in $RELEASE_FILES; do
+ fixup="$RELEASE_AUX/fixup-$(basename "$file")-release.pl"
+ $VERBOSE "> $file"
+ RELEASE="$release" RELEASE_TEXT="$release_text" RELEASE_DATE="$RELEASE_DATE" \
+ perl -pi $fixup $file
+ done
+)
$VERBOSE "== Committing updates and tagging"
git add -u
$VERBOSE "== Updated version information to $release"
$VERBOSE "== Updating files for $release :"
-for fixup in "$RELEASE_AUX"/fixup-*-postrelease.pl; do
- file="$(basename "$fixup" | sed -e 's|^fixup-||' -e 's|-postrelease\.pl$||')"
- $VERBOSE "> $file"
- RELEASE="$release" RELEASE_TEXT="$release_text" \
- PREV_RELEASE_TEXT="$prev_release_text" \
- PREV_RELEASE_DATE="$prev_release_date" \
- perl -pi $fixup $file
-done
+(
+ IFS=';'
+ for file in $RELEASE_FILES; do
+ fixup="$RELEASE_AUX/fixup-$(basename "$file")-postrelease.pl"
+ $VERBOSE "> $file"
+ RELEASE="$release" RELEASE_TEXT="$release_text" \
+ PREV_RELEASE_TEXT="$prev_release_text" \
+ PREV_RELEASE_DATE="$prev_release_date" \
+ perl -pi $fixup $file
+ done
+)
$VERBOSE "== Committing updates"
git add -u
$VERBOSE "== Updated version information to $release"
$VERBOSE "== Updating files for $release :"
- for fixup in "$RELEASE_AUX"/fixup-*-postrelease.pl; do
- file="$(basename "$fixup" | sed -e 's|^fixup-||' -e 's|-postrelease\.pl$||')"
- $VERBOSE "> $file"
- RELEASE="$release" RELEASE_TEXT="$release_text" \
- perl -pi $fixup $file
- done
+ (
+ IFS=';'
+ for file in $RELEASE_FILES; do
+ fixup="$RELEASE_AUX/fixup-$(basename "$file")-postrelease.pl"
+ $VERBOSE "> $file"
+ RELEASE="$release" RELEASE_TEXT="$release_text" \
+ perl -pi $fixup $file
+ done
+ )
$VERBOSE "== Committing updates"
git add -u