| #! /bin/sh |
| # Copyright 2020 The OpenSSL Project Authors. All Rights Reserved. |
| # |
| # Licensed under the Apache License 2.0 (the "License"). You may not use |
| # this file except in compliance with the License. You can obtain a copy |
| # in the file LICENSE in the source distribution or at |
| # https://www.openssl.org/source/license.html |
| |
| # These functions load, manipulate and store the current version information |
| # for OpenSSL 3.0 and on. |
| # They are meant to be minimalistic for easy refactoring depending on OpenSSL |
| # version. |
| # |
| # Version information is stored in the following variables: |
| # |
| # |MAJOR|, |MINOR|, |PATCH| are the three parts of a version number. |
| # |MAJOR| is to be increased for new major releases, |MINOR| for new |
| # minor releases, and |PATCH| for update releases. |
| # |
| # |SERIES| tells what release series the current version belongs to, and |
| # is composed from |MAJOR| and |MINOR|. |
| # |VERSION| tells what the current version is, and is composed from |MAJOR|, |
| # |MINOR| and |PATCH|. |
| # |TYPE| tells what state the source is in. It may have an empty value |
| # for released source, or 'dev' for "in development". |
| # |PRE_LABEL| may be "alpha" or "beta" to signify an ongoing series of |
| # alpha or beta releases. |PRE_NUM| is a pre-release counter for the |
| # alpha and beta release series, but isn't necessarily strictly tied |
| # to the prerelease label. |
| # |
| # Scripts loading this file are not allowed to manipulate these |
| # variables directly. They must use functions such as fixup_version() |
| # below, or next_release_state(), found in release-state-fn.sh. |
| |
| # These functions depend on |SOURCEDIR|, which must have the intended |
| # OpenSSL source directory as value. |
| |
| get_version () { |
| eval $(git cat-file blob HEAD:VERSION.dat) |
| VERSION="$MAJOR.$MINOR.$PATCH" |
| SERIES="$MAJOR.$MINOR" |
| TYPE=$( echo "$PRE_RELEASE_TAG" \ |
| | sed -E \ |
| -e 's|^dev$|dev|' \ |
| -e 's|^alpha([0-9]+)(-(dev))?$|\3|' \ |
| -e 's|^beta([0-9]+)(-(dev))?$|\3|' ) |
| PRE_LABEL=$( echo "$PRE_RELEASE_TAG" \ |
| | sed -E \ |
| -e 's|^dev$||' \ |
| -e 's|^alpha([0-9]+)(-(dev))?$|alpha|' \ |
| -e 's|^beta([0-9]+)(-(dev))?$|beta|' ) |
| PRE_NUM=$( echo "$PRE_RELEASE_TAG" \ |
| | sed -E \ |
| -e 's|^dev$|0|' \ |
| -e 's|^alpha([0-9]+)(-(dev))?$|\1|' \ |
| -e 's|^beta([0-9]+)(-(dev))?$|\1|' ) |
| } |
| |
| # $1 is one of "alpha", "beta", "final", "", or "minor" |
| fixup_version () { |
| local new_label="$1" |
| |
| case "$new_label" in |
| alpha | beta ) |
| if [ "$new_label" != "$PRE_LABEL" ]; then |
| PRE_LABEL="$new_label" |
| PRE_NUM=1 |
| elif [ "$TYPE" = 'dev' ]; then |
| PRE_NUM=$(expr $PRE_NUM + 1) |
| fi |
| ;; |
| final | '' ) |
| if [ "$TYPE" = 'dev' ]; then |
| PATCH=$(expr $PATCH + 1) |
| fi |
| PRE_LABEL= |
| PRE_NUM=0 |
| ;; |
| minor ) |
| if [ "$TYPE" = 'dev' ]; then |
| MINOR=$(expr $MINOR + 1) |
| PATCH=0 |
| fi |
| PRE_LABEL= |
| PRE_NUM=0 |
| ;; |
| esac |
| |
| VERSION="$MAJOR.$MINOR.$PATCH" |
| SERIES="$MAJOR.$MINOR" |
| } |
| |
| set_version () { |
| case "$TYPE+$PRE_LABEL+$PRE_NUM" in |
| *++* ) |
| PRE_RELEASE_TAG="$TYPE" |
| ;; |
| dev+* ) |
| PRE_RELEASE_TAG="$PRE_LABEL$PRE_NUM-dev" |
| ;; |
| +* ) |
| PRE_RELEASE_TAG="$PRE_LABEL$PRE_NUM" |
| ;; |
| esac |
| cat > "$SOURCEDIR/VERSION.dat" <<EOF |
| MAJOR=$MAJOR |
| MINOR=$MINOR |
| PATCH=$PATCH |
| PRE_RELEASE_TAG=$PRE_RELEASE_TAG |
| BUILD_METADATA=$BUILD_METADATA |
| RELEASE_DATE="$RELEASE_DATE" |
| SHLIB_VERSION=$SHLIB_VERSION |
| EOF |
| } |