diff options
-rw-r--r-- | Makefile | 16 | ||||
-rw-r--r-- | VERSION | 1 | ||||
-rw-r--r-- | doc/meson.build | 4 | ||||
-rw-r--r-- | meson.build | 28 | ||||
-rwxr-xr-x | util/getrevision.sh | 238 | ||||
-rwxr-xr-x | util/getversion.sh | 71 |
6 files changed, 24 insertions, 334 deletions
@@ -398,13 +398,11 @@ LIB_OBJS = libflashrom.o layout.o erasure_layout.o flashrom.o udelay.o parallel. CLI_OBJS = cli_classic.o cli_output.o cli_common.o print.o -# versioninfo.inc stores metadata required to build a packaged flashrom. It is generated by the export rule and -# imported below. If versioninfo.inc is not found and the variables are not defined by the user, the info will -# be obtained using util/getrevision.sh, which is the common case during development. --include versioninfo.inc -VERSION ?= $(shell ./util/getrevision.sh --revision) - -SCMDEF := -D'FLASHROM_VERSION="$(VERSION)"' +VERSION ?= $(shell cat ./VERSION) +VERSION_GIT ?= $(shell git describe 2>/dev/null) +ifdef VERSION_GIT + VERSION := "$(VERSION) (git:$(VERSION_GIT))" +endif # No spaces in release names unless set explicitly RELEASENAME ?= $(shell echo "$(VERSION)" | sed -e 's/ /_/') @@ -1021,7 +1019,7 @@ config: fi %.o: %.c | config - $(CC) -MMD $(CFLAGS) $(CPPFLAGS) $(FLASHROM_CFLAGS) $(FEATURE_FLAGS) $(SCMDEF) -o $@ -c $< + $(CC) -MMD $(CFLAGS) $(CPPFLAGS) $(FLASHROM_CFLAGS) $(FEATURE_FLAGS) -D'FLASHROM_VERSION=$(VERSION)' -o $@ -c $< $(PROGRAM)$(EXEC_SUFFIX): $(CLI_OBJS) libflashrom.a $(CC) -o $@ $^ $(LDFLAGS) @@ -1101,7 +1099,7 @@ libpayload: clean make CC="CC=i386-elf-gcc lpgcc" AR=i386-elf-ar RANLIB=i386-elf-ranlib gitconfig: - ./util/getrevision.sh -c 2>/dev/null && ./util/git-hooks/install.sh + git rev-parse 2>/dev/null && ./util/git-hooks/install.sh .PHONY: all install clean distclean config _export export tarball libpayload diff --git a/VERSION b/VERSION new file mode 100644 index 000000000..90e4bc277 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +1.4.0-devel diff --git a/doc/meson.build b/doc/meson.build index 70c3280d3..aca73d8a9 100644 --- a/doc/meson.build +++ b/doc/meson.build @@ -14,7 +14,7 @@ if sphinx.found() custom_target( 'man-pages', - command : [sphinx, '-b', 'man', '-q', '-d', '@PRIVATE_DIR@', '-Drelease=' + meson.project_version(),'@CURRENT_SOURCE_DIR@', '@OUTDIR@'], + command : [sphinx, '-b', 'man', '-q', '-d', '@PRIVATE_DIR@', '-Drelease=' + flashrom_version,'@CURRENT_SOURCE_DIR@', '@OUTDIR@'], build_always_stale : true, # sphinx handles rebuilds output : man_outputs, install : true, @@ -25,7 +25,7 @@ if sphinx.found() if get_option('documentation').auto() or get_option('documentation').enabled() custom_target( 'documentation', - command : [sphinx, '-b', 'html', '-q', '-d', '@PRIVATE_DIR@', '-Drelease=' + meson.project_version(),'@CURRENT_SOURCE_DIR@', '@OUTDIR@/html'], + command : [sphinx, '-b', 'html', '-q', '-d', '@PRIVATE_DIR@', '-Drelease=' + flashrom_version,'@CURRENT_SOURCE_DIR@', '@OUTDIR@/html'], build_always_stale : true, # sphinx handles rebuilds output : 'html', install : true, diff --git a/meson.build b/meson.build index 2784c346b..87f78091e 100644 --- a/meson.build +++ b/meson.build @@ -1,5 +1,5 @@ project('flashromutils', 'c', - version : run_command('util/getversion.sh', '--version', check : true).stdout().strip(), + version : run_command('cat', 'VERSION', check: true).stdout().strip(), license : 'GPL-2.0', meson_version : '>=0.53.0', default_options : [ @@ -19,14 +19,23 @@ if get_option('classic_cli').enabled() and get_option('default_library') == 'sha ''') endif -subdir('doc') - # libtool versioning lt_current = '1' lt_revision = '0' lt_age = '0' lt_version = '@0@.@1@.@2@'.format(lt_current, lt_age, lt_revision) +flashrom_version = meson.project_version() +git = find_program('git', native : true, required : false) +if git.found() + version_git = run_command('git', 'describe', check : false) + if version_git.returncode() == 0 + flashrom_version += ' (git:@0@)'.format(version_git.stdout().strip()) + endif +endif + +subdir('doc') + # hide/enable some warnings warning_flags = [ '-Wshadow', @@ -47,7 +56,7 @@ add_project_arguments('-D__BSD_VISIBLE', language : 'c') # required for u_char, add_project_arguments('-D__XSI_VISIBLE', language : 'c') # required for gettimeofday() on FreeBSD add_project_arguments('-D_NETBSD_SOURCE', language : 'c') # required for indirect include of strings.h on NetBSD add_project_arguments('-D_DARWIN_C_SOURCE', language : 'c') # required for indirect include of strings.h on MacOS -add_project_arguments('-DFLASHROM_VERSION="' + meson.project_version() + '"', language : 'c') +add_project_arguments('-DFLASHROM_VERSION="' + flashrom_version + '"', language : 'c') # get defaults from configure config_print_wiki= get_option('classic_cli_print_wiki') @@ -614,19 +623,10 @@ libflashrom = library( link_depends : mapfile, ) -version = meson.project_version() -#strip leading characters -if version.startswith('v') - version = version.split('v')[1] -endif -if version.startswith('p') - version = version.split('p')[1] -endif - pkgg = import('pkgconfig') pkgg.generate( libraries : libflashrom, - version : version, + version : flashrom_version.split()[0], # cut off the git version name : 'flashrom', filebase : 'flashrom', description : 'library to interact with flashrom', diff --git a/util/getrevision.sh b/util/getrevision.sh deleted file mode 100755 index f7d6bf3b2..000000000 --- a/util/getrevision.sh +++ /dev/null @@ -1,238 +0,0 @@ -#!/bin/sh -# NB: Supposed to be POSIX compatible but at least the usage of 'local' is not. -# -# This file is part of the flashrom project. -# -# Copyright (C) 2005 coresystems GmbH <stepan@coresystems.de> -# Copyright (C) 2009,2010 Carl-Daniel Hailfinger -# Copyright (C) 2010 Chromium OS Authors -# Copyright (C) 2013-2016 Stefan Tauner -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# - -EXIT_SUCCESS=0 -EXIT_FAILURE=1 - -# Make sure we don't get translated output -export LC_ALL=C -# nor local times or dates -export TZ=UTC0 - -# Helper functions -# First argument is the path to inspect (usually optional; without -# it the whole repository will be considered) -git_has_local_changes() { - git update-index -q --refresh >/dev/null - ! git diff-index --quiet HEAD -- "$1" -} - -git_last_commit() { - # git rev-parse --short HEAD would suffice if repository as a whole is of interest (no $1) - git log --pretty=format:"%h" -1 -- "$1" -} - -git_is_file_tracked() { - git ls-files --error-unmatch -- "$1" >/dev/null 2>&1 -} - -is_file_tracked() { - git_is_file_tracked "$1" -} - -# Tries to find a remote source for the changes committed locally. -# This includes the URL of the remote repository including the last commit and a suitable branch name. -# Takes one optional argument: the path to inspect -git_url() { - last_commit=$(git_last_commit "$1") - # get all remote branches containing the last commit (excluding origin/HEAD) - branches=$(git branch -r --contains $last_commit | sed '/\//!d;/.*->.*/d;s/[\t ]*//') - if [ -z "$branches" ] ; then - echo "No remote branch contains a suitable commit">&2 - return - fi - - # find "nearest" branch - local mindiff=9000 - local target= - for branch in $branches ; do - curdiff=$(git rev-list --count $last_commit..$branch) - if [ $curdiff -ge $mindiff ] ; then - continue - fi - mindiff=$curdiff - target=$branch - done - - echo "$(git ls-remote --exit-code --get-url ${target%/*}) ${target#*/}" -} - -# Returns a string indicating where others can get the current source code (excluding uncommitted changes). -# Takes one optional argument: the path to inspect -scm_url() { - local url= - - if git_is_file_tracked "$1" ; then - url="$(git_url "$1")" - else - return ${EXIT_FAILURE} - fi - - echo "${url}" -} - -# Retrieve timestamp since last modification. If the sources are pristine, -# then the timestamp will match that of the SCM's most recent modification -# date. -timestamp() { - local t - - # date syntaxes are manifold: - # gnu date [-d input]... [+FORMAT] - # netbsd date [-ajnu] [-d date] [-r seconds] [+format] [[[[[[CC]yy]mm]dd]HH]MM[.SS]] - # freebsd date [-jnu] [-d dst] [-r seconds] [-f fmt date | [[[[[cc]yy]mm]dd]HH]MM[.ss]] [+format] [...] - # dragonflybsd date [-jnu] [-d dst] [-r seconds] [-f fmt date | [[[[[cc]yy]mm]dd]HH]MM[.ss]] [+format] [...] - # openbsd date [-aju] [-d dst] [-r seconds] [+format] [[[[[[cc]yy]mm]dd]HH]MM[.SS]] [...] - if git_is_file_tracked "$2" ; then - # are there local changes? - if git_has_local_changes "$2" ; then - t=$(date -u "${1}") - else - # No local changes, get date of the last commit - case $(uname) in - # Most BSD dates do not support parsing date values from user input with -d but all of - # them support parsing epoch seconds with -r. Thanks to git we can easily use that: - NetBSD|OpenBSD|DragonFly|FreeBSD) - t=$(date -u -r "$(git log --pretty=format:%ct -1 -- $2)" "$1" 2>/dev/null);; - *) - t=$(date -d "$(git log --pretty=format:%cD -1 -- $2)" -u "$1" 2>/dev/null);; - esac - fi - else - t=$(date -u "$1") - fi - - if [ -z "$t" ]; then - echo "Warning: Could not determine timestamp." 2>/dev/null - fi - echo "${t}" -} - -revision() { - local r - if git_is_file_tracked "$1" ; then - r=$(git describe --always $(git_last_commit "$1")) - if git_has_local_changes "$1" ; then - r="$r-dirty" - fi - else - r="unknown" - fi - - echo "${r}" -} - -is_tracked() { - is_file_tracked "$1" -} - -show_help() { - echo "Usage: - ${0} <command> [path] - -Commands - -h or --help - this message - -c or --check - test if path is under version control at all - -r or --revision - return unique revision information including an indicator for - uncommitted changes - -U or --url - URL associated with the latest commit - -d or --date - date of most recent modification - -t or --timestamp - timestamp of most recent modification -" - return -} - -check_action() { - if [ -n "$action" ]; then - echo "Error: Multiple actions given.">&2 - exit ${EXIT_FAILURE} - fi -} - -main() { - local query_path= - local action= - - # Argument parser loop - while [ $# -gt 0 ]; - do - case ${1} in - -h|--help) - action=show_help; - shift;; - -U|--url) - check_action $1 - action=scm_url - shift;; - -d|--date) - check_action $1 - action="timestamp +%Y-%m-%d" # refrain from suffixing 'Z' to indicate it's UTC - shift;; - -r|--revision) - check_action $1 - action=revision - shift;; - -t|--timestamp) - check_action $1 - action="timestamp +%Y-%m-%dT%H:%M:%SZ" # There is only one valid time format! ISO 8601 - shift;; - -c|--check) - check_action $1 - action=is_tracked - shift;; - -*) - show_help; - echo "Error: Invalid option: ${1}" - exit ${EXIT_FAILURE};; - *) - if [ -z "$query_path" ] ; then - if [ ! -e "$1" ] ; then - echo "Error: Path \"${1}\" does not exist.">&2 - exit ${EXIT_FAILURE} - fi - query_path=$1 - else - echo "Warning: Ignoring overabundant parameter: \"${1}\"">&2 - fi - shift;; - esac; - done - - # default to current directory (usually equals the whole repository) - if [ -z "$query_path" ] ; then - query_path=. - fi - if [ -z "$action" ] ; then - show_help - echo "Error: No actions specified" - exit ${EXIT_FAILURE} - fi - - $action "$query_path" -} - -main $@ diff --git a/util/getversion.sh b/util/getversion.sh deleted file mode 100755 index d3810d29b..000000000 --- a/util/getversion.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/bin/sh -# -# This file is part of the flashrom project. -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License as published by -# the Free Software Foundation; either version 2 of the License, or -# (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# - -version() { - if [ -r versioninfo.inc ]; then - v=$(sed -n 's/^VERSION = //p' versioninfo.inc) - else - v=$($(dirname ${0})/getrevision.sh --revision) - if [ $? -ne 0 ]; then - v='unknown' - fi - fi - - echo ${v} -} - -mandate() { - if [ -r versioninfo.inc ]; then - d=$(sed -n 's/^MAN_DATE = //p' versioninfo.inc) - else - d=$($(dirname ${0})/getrevision.sh --date flashrom.8.tmpl) - if [ $? -ne 0 ]; then - d='unknown' - fi - fi - - echo ${d} -} - -show_help() { - echo "Usage: - ${0} <command> - -Commands - -h or --help - this message - -v or --version - return current/release flashrom version - -m or --man-date - return current/release date of the manual page -" -} - -if [ $# -ne 1 ]; then - show_help - echo "Error: Only exactly one command allowed.">&2 - exit 1 -fi - -case $1 in - -h|--help) show_help;; - -m|--man-date) mandate;; - -v|--version) version;; - *) - show_help - echo "Error: Invalid option: $1" - exit 1 - ;; -esac |