mirror of
https://github.com/avrdudes/avrdude.git
synced 2026-09-28 12:06:59 +03:00
Get AC_INIT version number from CMakeLists.txt
Generate the version number used in the Autotools builds
via a script from the top-level CMakeLists.txt and git
information instead of manual editing.
This script mimics what the avrdude top-level CMakeLists.txt
does for composing AVRDUDE_FULL_VERSION.
Consequently, maintainers do not need to edit the version numbers
in the "src/configure.ac" file's "AC_INIT(...)" line any more.
However, unlike the cmake based builds, this does not print the
commit hash in the "avrdude --help" message or in the "avrdude.conf"
file's "avrdude_conf_version = " line. That will come later.
These are the six build types supported and what avrdude
versions cmake and the autoconf builds actually produce:
cmake autoconf
git clone release 7.2 7.2
git clone non-release 7.2-DATE+HASH 7.2-DATE
git archive release 7.2 7.2
git archive non-release 7.2 7.2
dist tarball release N/A 7.2
dist tarball non-release N/A 7.2-DATE
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -41,6 +41,7 @@ ylwrap
|
|||||||
tags
|
tags
|
||||||
cscope.out
|
cscope.out
|
||||||
/src/avrdude-[1-9].*.tar.*
|
/src/avrdude-[1-9].*.tar.*
|
||||||
|
/src/GNUmakefile
|
||||||
|
|
||||||
*.o
|
*.o
|
||||||
*.lo
|
*.lo
|
||||||
|
|||||||
15
src/GNUmakefile.in
Normal file
15
src/GNUmakefile.in
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
# Helps update the version number automatically if using GNU make.
|
||||||
|
include Makefile
|
||||||
|
|
||||||
|
AUTORECONF ?= autoreconf
|
||||||
|
AUTORECONF_OPTS ?= -vis
|
||||||
|
|
||||||
|
script_version := $(shell $(top_srcdir)/build-helpers/package-version $(top_srcdir) version-stamp)
|
||||||
|
ifneq ($(PACKAGE_VERSION),$(script_version))
|
||||||
|
$(info autoconf and script versions do not match: $(PACKAGE_VERSION) vs $(script_version))
|
||||||
|
$(info Removing autom4te.cache and related files and re-running autoreconf)
|
||||||
|
dummy1 := $(shell rm -rf $(top_srcdir)/autom4te.cache)
|
||||||
|
dummy2 := $(shell $(AUTORECONF) $(AUTORECONF_OPTS) $(top_srcdir))
|
||||||
|
endif
|
||||||
|
|
||||||
|
# vim: syntax=make
|
||||||
@@ -40,6 +40,8 @@ CLEANFILES = \
|
|||||||
config_gram.h \
|
config_gram.h \
|
||||||
lexer.c
|
lexer.c
|
||||||
|
|
||||||
|
include build-helpers/package-version.mk
|
||||||
|
|
||||||
BUILT_SOURCES = $(CLEANFILES)
|
BUILT_SOURCES = $(CLEANFILES)
|
||||||
|
|
||||||
#SUBDIRS = doc
|
#SUBDIRS = doc
|
||||||
|
|||||||
102
src/build-helpers/package-version
Executable file
102
src/build-helpers/package-version
Executable file
@@ -0,0 +1,102 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
# Syntax:
|
||||||
|
# $0 <path-to-top_srcdir> <version-stamp-file>
|
||||||
|
#
|
||||||
|
# <path-to-top_srcdir> may be relative
|
||||||
|
# <version-stamp-file> is relative to the dist top_srcdir
|
||||||
|
#
|
||||||
|
# Test this script by running
|
||||||
|
# rm -rf autom4te.cache/ && autoreconf -vis . && sed -n "/^# Generated by GNU/p" configure
|
||||||
|
#
|
||||||
|
# If we run into an error, we cannot abort the "autoreconf" run by
|
||||||
|
# exiting with a non-0 error code. (We do exit non-0 in that case
|
||||||
|
# anyway for help when testing this script.)
|
||||||
|
# The only thing we can do to report an error is to write to stderr
|
||||||
|
# which appears as "autoreconf" output, and to write a version number
|
||||||
|
# to stdout which indicates an error. The "configure" script can
|
||||||
|
# then check whether $PACKAGE_VERSION indicates such an error.
|
||||||
|
|
||||||
|
# Parse the command line arguments
|
||||||
|
prog="$(basename "$0")"
|
||||||
|
top_srcdir="${1-.}"
|
||||||
|
test -d "$top_srcdir" || { \
|
||||||
|
echo "$prog: Error: Could not change to top_srcdir '$1'" >&2; \
|
||||||
|
echo "version_error_1" | ${TR-tr} -d '\012'
|
||||||
|
exit 2; \
|
||||||
|
}
|
||||||
|
version_stamp="${2-version-stamp}"
|
||||||
|
|
||||||
|
# echo "$prog: Error: Some error happend." >&2
|
||||||
|
# echo "version_error_2" | ${TR-tr} -d '\012'
|
||||||
|
# exit 2
|
||||||
|
|
||||||
|
# Is this a dist source tree?
|
||||||
|
# If so, use the version number from the version_stamp file.
|
||||||
|
if test -f "$top_srcdir/$version_stamp"; then
|
||||||
|
cat "$top_srcdir/$version_stamp" | ${TR-tr} -d '\012'
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Is this part of a git checkout or an expanded github snapshot tarball?
|
||||||
|
test -f "$top_srcdir/../CMakeLists.txt" || { \
|
||||||
|
echo "$prog: Error: top-level avrdude CMakeLists.txt file not found" >&2; \
|
||||||
|
echo "version_error_3" | ${TR-tr} -d '\012'
|
||||||
|
exit 2; \
|
||||||
|
}
|
||||||
|
|
||||||
|
if PROJECT_VERSION="$(${SED-sed} -n 's/project(avrdude[[:space:]]\{1,\}VERSION[[:space:]]\{1,\}\([0-9\.]\{1,\}\)[[:space:]]\{1,\}.*/\1/p' "$top_srcdir/../CMakeLists.txt")"; then
|
||||||
|
:
|
||||||
|
else
|
||||||
|
echo "$prog: Error parsing top-level avrdude 'CMakeLists.txt'." >&2
|
||||||
|
echo "version_error_4" | ${TR-tr} -d '\012'
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
test -n "$PROJECT_VERSION" || { \
|
||||||
|
echo "$prog: Error: Could not find project(...) in top-level avrdude 'CMakeLists.txt'" >&2; \
|
||||||
|
echo "version_error_5" | ${TR-tr} -d '\012'
|
||||||
|
exit 2; \
|
||||||
|
}
|
||||||
|
|
||||||
|
# If GIT_DIR is set, use it. If not, try "$top_srcdir/../.git".
|
||||||
|
test -n "$GIT_DIR" || { \
|
||||||
|
GIT_DIR="$top_srcdir/../.git"; \
|
||||||
|
export GIT_DIR; \
|
||||||
|
}
|
||||||
|
|
||||||
|
# Working with a git source tree
|
||||||
|
if test -d "$GIT_DIR"; then
|
||||||
|
GIT_COMMIT_HASH="$(${GIT-git} log -1 --format=%h)" || { \
|
||||||
|
echo "$prog: Error: Cannot run 'git log' for commit hash" >&2; \
|
||||||
|
echo "version_error_71" | ${TR-tr} -d '\012'; \
|
||||||
|
exit 2; \
|
||||||
|
}
|
||||||
|
GIT_COMMIT_DATE="$(${GIT-git} log -1 --format=%ad --date=format:%Y%m%d)" || { \
|
||||||
|
echo "$prog: Error: Cannot run 'git log' for commit date" >&2; \
|
||||||
|
echo "version_error_72" | ${TR-tr} -d '\012'; \
|
||||||
|
exit 2; \
|
||||||
|
}
|
||||||
|
GIT_TAG_HASH="$(${GIT-git} log -1 --tags --format=%h)" || { \
|
||||||
|
echo "$prog: Error: Cannot run 'git log' for tag hash" >&2; \
|
||||||
|
echo "version_error_73" | ${TR-tr} -d '\012'; \
|
||||||
|
exit 2; \
|
||||||
|
}
|
||||||
|
if test "x$GIT_COMMIT_HASH" = "x$GIT_TAG_HASH"; then
|
||||||
|
echo "${PROJECT_VERSION}" | ${TR-tr} -d '\012'
|
||||||
|
exit
|
||||||
|
else
|
||||||
|
echo "${PROJECT_VERSION}-${GIT_COMMIT_DATE}" | ${TR-tr} -d '\012'
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
# Building a github release tarball or github snapshot tarball.
|
||||||
|
#
|
||||||
|
# Presume this is a release version, because who would build a
|
||||||
|
# non-release version from a snapshot tarball?
|
||||||
|
echo "${PROJECT_VERSION}" | ${TR-tr} -d '\012'
|
||||||
|
exit
|
||||||
|
fi
|
||||||
|
|
||||||
|
# If everything else has failed, call this version "devel"
|
||||||
|
echo "devel" | ${TR-tr} -d '\012'
|
||||||
|
exit 2
|
||||||
26
src/build-helpers/package-version.mk
Normal file
26
src/build-helpers/package-version.mk
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
BUILD_SCRIPT_DIR = build-helpers
|
||||||
|
|
||||||
|
# Check that package version matches git version before creating dist tarballs
|
||||||
|
dist-hook: cur-version-check cur-version-stamp
|
||||||
|
distcheck-hook: cur-version-check
|
||||||
|
|
||||||
|
# Note: We cannot run autoreconf from here, because we would need some way to
|
||||||
|
# restart the whole dist process from the start and there is none.
|
||||||
|
EXTRA_DIST += $(top_srcdir)/$(BUILD_SCRIPT_DIR)/package-version
|
||||||
|
cur-version-check:
|
||||||
|
@cur_ver=`$(top_srcdir)/$(BUILD_SCRIPT_DIR)/package-version $(top_srcdir) version-stamp`; \
|
||||||
|
if test "x$${cur_ver}" = "x$(PACKAGE_VERSION)"; then :; else \
|
||||||
|
echo "ERROR: Recorded PACKAGE_VERSION and current version do not match:"; \
|
||||||
|
echo " current version: $${cur_ver}"; \
|
||||||
|
echo " recorded PACKAGE_VERSION: $(PACKAGE_VERSION)"; \
|
||||||
|
rm -rf "$(top_srcdir)/autom4te.cache"; \
|
||||||
|
echo "Update PACKAGE_VERSION by running autoreconf(1)."; \
|
||||||
|
exit 1; \
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Version stamp files can only exist in tarball source trees.
|
||||||
|
#
|
||||||
|
# So there is no need to generate them anywhere else or to clean them
|
||||||
|
# up anywhere.
|
||||||
|
cur-version-stamp:
|
||||||
|
echo "$(PACKAGE_VERSION)" > "$(distdir)/version-stamp"
|
||||||
@@ -24,7 +24,7 @@
|
|||||||
|
|
||||||
AC_PREREQ(2.60)
|
AC_PREREQ(2.60)
|
||||||
AC_INIT([avrdude],
|
AC_INIT([avrdude],
|
||||||
[7.2-20230720],
|
m4_esyscmd([./build-helpers/package-version . version-stamp]),
|
||||||
[https://github.com/avrdudes/avrdude/issues])
|
[https://github.com/avrdudes/avrdude/issues])
|
||||||
|
|
||||||
AC_CANONICAL_BUILD
|
AC_CANONICAL_BUILD
|
||||||
@@ -36,6 +36,21 @@ AM_INIT_AUTOMAKE([foreign])
|
|||||||
AC_CONFIG_HEADERS(ac_cfg.h)
|
AC_CONFIG_HEADERS(ac_cfg.h)
|
||||||
AC_CONFIG_MACRO_DIR([m4])
|
AC_CONFIG_MACRO_DIR([m4])
|
||||||
|
|
||||||
|
# Check that the build-helpers/package-version script has worked properly.
|
||||||
|
case "$PACKAGE_VERSION" in
|
||||||
|
devel|version_error_*)
|
||||||
|
AC_MSG_ERROR([
|
||||||
|
Autogenerating the package version (${PACKAGE_VERSION}) has failed.
|
||||||
|
|
||||||
|
Please file an issue at ${PACKAGE_BUGREPORT}
|
||||||
|
|
||||||
|
You can write some version number to the file version-stamp as a
|
||||||
|
workaround to allow building avrdude until the filed issue has been
|
||||||
|
fixed.
|
||||||
|
])
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
LT_INIT()
|
LT_INIT()
|
||||||
|
|
||||||
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
|
||||||
@@ -545,9 +560,23 @@ AC_CONFIG_FILES([
|
|||||||
Makefile
|
Makefile
|
||||||
])
|
])
|
||||||
|
|
||||||
|
AC_CONFIG_FILES([
|
||||||
|
GNUmakefile
|
||||||
|
])
|
||||||
|
dnl TODO: Add GIT_COMMIT_HASH to the AVRDUDE_FULL_VERSION like cmake build does
|
||||||
|
dnl # Detect GIT
|
||||||
|
dnl AC_ARG_VAR([GIT], [git revision control system])
|
||||||
|
dnl AS_VAR_IF([GIT], [], [dnl
|
||||||
|
dnl AC_PATH_PROG([GIT], [git], [no])
|
||||||
|
dnl ])
|
||||||
|
dnl AM_CONDITIONAL([HAVE_GIT], [test "x$GIT" != xno])
|
||||||
|
dnl AS_IF([test -d "../.git/info/exclude"], [dnl
|
||||||
|
dnl GIT_COMMIT_HASH="$(${GIT} --version)"
|
||||||
|
dnl ])
|
||||||
|
|
||||||
# Pass version number into avrdude.conf
|
# Pass version number into avrdude.conf
|
||||||
AVRDUDE_FULL_VERSION=$PACKAGE_VERSION
|
dnl AVRDUDE_FULL_VERSION="${PACKAGE_VERSION} (${GIT_COMMIT_HASH})"
|
||||||
AC_SUBST(AVRDUDE_FULL_VERSION, $AVRDUDE_FULL_VERSION)
|
AC_SUBST([AVRDUDE_FULL_VERSION], ["$PACKAGE_VERSION"])
|
||||||
|
|
||||||
# The procedure to create avrdude.conf involves two steps. First,
|
# The procedure to create avrdude.conf involves two steps. First,
|
||||||
# normal autoconf substitution will be applied, resulting in
|
# normal autoconf substitution will be applied, resulting in
|
||||||
|
|||||||
Reference in New Issue
Block a user