mirror of
https://github.com/apache/nuttx.git
synced 2026-06-06 00:14:22 +08:00
tools/ and fs/procfs: Simplify .version file generation
1.merge CONFIG_GIT_REVISION_STR into CONFIG_VERSION_BUILD 2.merge gen_getrev.sh into version.sh 3.generate version number if needed Here is a sample output: nsh> uname -a NuttX 8.2 59fd8e12d3-dirty Dec 12 2019 15:48:00 sim sim nsh> cat /proc/version NuttX version 8.2 59fd8e12d3-dirty Dec 12 2019 15:48:01
This commit is contained in:
@@ -220,13 +220,7 @@ static ssize_t version_read(FAR struct file *filep, FAR char *buffer,
|
|||||||
|
|
||||||
if (filep->f_pos == 0)
|
if (filep->f_pos == 0)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_GIT_REVISION_STR
|
#if defined(__DATE__) && defined(__TIME__)
|
||||||
linesize = snprintf(attr->line, VERSION_LINELEN,
|
|
||||||
"NuttX version %s %s\n"
|
|
||||||
"%s\n",
|
|
||||||
CONFIG_VERSION_STRING, CONFIG_VERSION_BUILD,
|
|
||||||
CONFIG_GIT_REVISION_STR);
|
|
||||||
#elif defined(__DATE__) && defined(__TIME__)
|
|
||||||
linesize = snprintf(attr->line, VERSION_LINELEN,
|
linesize = snprintf(attr->line, VERSION_LINELEN,
|
||||||
"NuttX version %s %s %s %s\n",
|
"NuttX version %s %s %s %s\n",
|
||||||
CONFIG_VERSION_STRING, CONFIG_VERSION_BUILD,
|
CONFIG_VERSION_STRING, CONFIG_VERSION_BUILD,
|
||||||
|
|||||||
+2
-13
@@ -36,17 +36,9 @@
|
|||||||
|
|
||||||
TOPDIR := ${shell echo $(CURDIR) | sed -e 's/ /\\ /g'}
|
TOPDIR := ${shell echo $(CURDIR) | sed -e 's/ /\\ /g'}
|
||||||
-include $(TOPDIR)/.config
|
-include $(TOPDIR)/.config
|
||||||
-include $(TOPDIR)/.version
|
|
||||||
include $(TOPDIR)/tools/Config.mk
|
include $(TOPDIR)/tools/Config.mk
|
||||||
-include $(TOPDIR)/Make.defs
|
-include $(TOPDIR)/Make.defs
|
||||||
|
|
||||||
# In case .version file does not exist
|
|
||||||
|
|
||||||
CONFIG_VERSION_STRING ?= "Unversioned"
|
|
||||||
CONFIG_VERSION_MAJOR ?= 0
|
|
||||||
CONFIG_VERSION_MINOR ?= 0
|
|
||||||
CONFIG_VERSION_BUILD ?= "0"
|
|
||||||
|
|
||||||
# Control build verbosity
|
# Control build verbosity
|
||||||
#
|
#
|
||||||
# V=1,2: Enable echo of commands
|
# V=1,2: Enable echo of commands
|
||||||
@@ -187,7 +179,7 @@ NUTTXNAME = nuttx
|
|||||||
BIN = $(NUTTXNAME)$(EXEEXT)
|
BIN = $(NUTTXNAME)$(EXEEXT)
|
||||||
|
|
||||||
all: $(BIN)
|
all: $(BIN)
|
||||||
.PHONY: dirlinks context clean_context check_context config oldconfig menuconfig nconfig qconfig gconfig export subdir_clean clean subdir_distclean distclean apps_clean apps_distclean version_info
|
.PHONY: dirlinks context clean_context check_context config oldconfig menuconfig nconfig qconfig gconfig export subdir_clean clean subdir_distclean distclean apps_clean apps_distclean
|
||||||
ifeq ($(GIT_DIR),y)
|
ifeq ($(GIT_DIR),y)
|
||||||
.PHONY: $(TOPDIR)/.version
|
.PHONY: $(TOPDIR)/.version
|
||||||
endif
|
endif
|
||||||
@@ -271,10 +263,7 @@ tools/mkversion$(HOSTEXEEXT):
|
|||||||
|
|
||||||
$(TOPDIR)/.version:
|
$(TOPDIR)/.version:
|
||||||
$(Q) echo "Create .version"
|
$(Q) echo "Create .version"
|
||||||
$(Q) tools/version.sh -s $(CONFIG_VERSION_STRING) -v $(CONFIG_VERSION_MAJOR).$(CONFIG_VERSION_MINOR) -b $(CONFIG_VERSION_BUILD) .version
|
$(Q) tools/version.sh .version
|
||||||
ifeq ($(GIT_DIR),y)
|
|
||||||
$(Q) tools/gen_gitrev.sh -t $(TOPDIR) >> .version
|
|
||||||
endif
|
|
||||||
$(Q) chmod 755 .version
|
$(Q) chmod 755 .version
|
||||||
|
|
||||||
include/nuttx/version.h: $(TOPDIR)/.version tools/mkversion$(HOSTEXEEXT)
|
include/nuttx/version.h: $(TOPDIR)/.version tools/mkversion$(HOSTEXEEXT)
|
||||||
|
|||||||
@@ -78,13 +78,6 @@ discover.py
|
|||||||
Example script for discovering devices in the local network.
|
Example script for discovering devices in the local network.
|
||||||
It is the counter part to apps/netutils/discover
|
It is the counter part to apps/netutils/discover
|
||||||
|
|
||||||
gen_getrev.sh
|
|
||||||
-------------
|
|
||||||
|
|
||||||
Creates a GIT revision string and echos the string to stdout. This is
|
|
||||||
used by the top-level Makefile to generate part of the information in
|
|
||||||
the .version file.
|
|
||||||
|
|
||||||
gencromfs.c
|
gencromfs.c
|
||||||
-----------
|
-----------
|
||||||
|
|
||||||
|
|||||||
@@ -1,188 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
###########################################################################
|
|
||||||
#
|
|
||||||
# Copyright 2017, 2018, 2019 David S. Alessio, All rights reserved.
|
|
||||||
# Author: David S. Alessio <david.s.alessio@gmail.com>
|
|
||||||
#
|
|
||||||
# Redistribution and use in source and binary forms, with or without
|
|
||||||
# modification, are permitted provided that the following conditions
|
|
||||||
# are met:
|
|
||||||
#
|
|
||||||
# 1. Redistributions of source code must retain the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer.
|
|
||||||
# 2. Redistributions in binary form must reproduce the above copyright
|
|
||||||
# notice, this list of conditions and the following disclaimer in
|
|
||||||
# the documentation and/or other materials provided with the
|
|
||||||
# distribution.
|
|
||||||
# 3. Neither the name NuttX nor the names of its contributors may be
|
|
||||||
# used to endorse or promote products derived from this software
|
|
||||||
# without specific prior written permission.
|
|
||||||
#
|
|
||||||
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
||||||
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
||||||
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
||||||
# FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
|
|
||||||
# COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
||||||
# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
||||||
# BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
|
||||||
# OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
|
||||||
# AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
|
|
||||||
# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
|
|
||||||
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
|
|
||||||
# POSSIBILITY OF SUCH DAMAGE.
|
|
||||||
#
|
|
||||||
###########################################################################
|
|
||||||
#
|
|
||||||
# This bash script queries the git repo for info/status
|
|
||||||
# and generates a header file with version info #defs
|
|
||||||
#
|
|
||||||
# Date : 25-Aug-2019
|
|
||||||
|
|
||||||
|
|
||||||
###########################################################################
|
|
||||||
#
|
|
||||||
# Global Vars
|
|
||||||
#
|
|
||||||
|
|
||||||
# full pathname to utils used
|
|
||||||
declare WHO=/usr/bin/whoami
|
|
||||||
declare GIT=/usr/bin/git
|
|
||||||
declare TR=/usr/bin/tr
|
|
||||||
declare WC=/usr/bin/wc
|
|
||||||
|
|
||||||
declare DATE=date
|
|
||||||
declare HOSTNAME=hostname
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
###########################################################################
|
|
||||||
#
|
|
||||||
# define -- helper function to define vars with HEREDOC
|
|
||||||
#
|
|
||||||
define() { IFS='\n' read -r -d '' ${1} || true; }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
###########################################################################
|
|
||||||
#
|
|
||||||
# usage
|
|
||||||
#
|
|
||||||
usage() {
|
|
||||||
define usage_str <<EOT
|
|
||||||
|
|
||||||
Usage: $0 [option...]
|
|
||||||
|
|
||||||
-f <fname> version info filename
|
|
||||||
-t <dir> top directory
|
|
||||||
-h show usage
|
|
||||||
-v increase verbosity
|
|
||||||
EOT
|
|
||||||
|
|
||||||
echo "$usage_str" >&2
|
|
||||||
exit 1
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
###########################################################################
|
|
||||||
#
|
|
||||||
# parse args
|
|
||||||
#
|
|
||||||
declare -i verbosity=0
|
|
||||||
declare TOP_DIR=
|
|
||||||
|
|
||||||
while getopts ":ht:v" opt; do
|
|
||||||
case $opt in
|
|
||||||
h) usage
|
|
||||||
;;
|
|
||||||
|
|
||||||
t) TOP_DIR=$OPTARG
|
|
||||||
;;
|
|
||||||
|
|
||||||
v) verbosity=$(($verbosity+1))
|
|
||||||
;;
|
|
||||||
|
|
||||||
\?) echo "Invalid option: -$OPTARG" >&2
|
|
||||||
usage
|
|
||||||
;;
|
|
||||||
|
|
||||||
:) echo "Option -$OPTARG requires an argument." >&2
|
|
||||||
usage
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
done
|
|
||||||
|
|
||||||
shift $((OPTIND-1))
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[[ $OPTIND -gt 1 ]] || usage
|
|
||||||
|
|
||||||
if [[ -z "$TOP_DIR" ]]; then
|
|
||||||
echo "@@@"
|
|
||||||
echo "@@@ TOP DIR not specified"
|
|
||||||
echo "@@@ Exiting with Error!"
|
|
||||||
echo "@@@"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# bail out if .git directory doesn't exist
|
|
||||||
[[ -d $TOP_DIR/.git ]] || exit 0
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
###########################################################################
|
|
||||||
#
|
|
||||||
# Git info vars
|
|
||||||
#
|
|
||||||
declare BUILD_DATE=`$DATE +"%a %d-%b-%Y %T %Z" | $TR -d '\n'`
|
|
||||||
declare BUILD_MACH=`$HOSTNAME | $TR -d '\n'`
|
|
||||||
declare BUILD_USER=`$WHO`
|
|
||||||
declare GIT_BRANCH=`$GIT rev-parse --abbrev-ref HEAD`
|
|
||||||
declare GIT_FW_DESCR=`$GIT describe --long --tags --dirty='+' --always`
|
|
||||||
declare GIT_SHORT_HASH=`$GIT rev-parse --short HEAD`
|
|
||||||
|
|
||||||
# Create the git revision string
|
|
||||||
|
|
||||||
declare GIT_REVISION_STR="$GIT_FW_DESCR, $GIT_BRANCH, $BUILD_MACH/$BUILD_USER, $BUILD_DATE"
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
###########################################################################
|
|
||||||
#
|
|
||||||
# Dump vars to stderr
|
|
||||||
#
|
|
||||||
show_vars() {
|
|
||||||
define vars <<EOT
|
|
||||||
|
|
||||||
Branch : $GIT_BRANCH
|
|
||||||
Hash : $GIT_SHORT_HASH
|
|
||||||
|
|
||||||
Build Machine : $BUILD_MACH
|
|
||||||
Build User : $BUILD_USER
|
|
||||||
Build Date : $BUILD_DATE
|
|
||||||
|
|
||||||
FW Version : $GIT_FW_DESCR
|
|
||||||
|
|
||||||
Git Rev str : $GIT_REVISION_STR
|
|
||||||
EOT
|
|
||||||
|
|
||||||
echo "$vars" >&2
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if [[ verbosity -ge 1 ]]; then
|
|
||||||
show_vars
|
|
||||||
fi
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
###########################################################################
|
|
||||||
#
|
|
||||||
# update .version file with the following:
|
|
||||||
#
|
|
||||||
|
|
||||||
echo "CONFIG_GIT_REVISION_STR=\"$GIT_REVISION_STR\""
|
|
||||||
+10
-19
@@ -36,13 +36,12 @@ WD=`pwd`
|
|||||||
|
|
||||||
# Get command line parameters
|
# Get command line parameters
|
||||||
|
|
||||||
USAGE="USAGE: $0 [-d|-h] [-b <build>] [-s <version-string>] -v <major.minor> <outfile-path>"
|
USAGE="USAGE: $0 [-d|-h] [-b <build>] [-v <major.minor>] <outfile-path>"
|
||||||
ADVICE="Try '$0 -h' for more information"
|
ADVICE="Try '$0 -h' for more information"
|
||||||
|
|
||||||
unset VERSION
|
unset VERSION
|
||||||
unset BUILD
|
unset BUILD
|
||||||
unset OUTFILE
|
unset OUTFILE
|
||||||
unset VERSION_STRING
|
|
||||||
|
|
||||||
while [ ! -z "$1" ]; do
|
while [ ! -z "$1" ]; do
|
||||||
case $1 in
|
case $1 in
|
||||||
@@ -53,10 +52,6 @@ while [ ! -z "$1" ]; do
|
|||||||
-d )
|
-d )
|
||||||
set -x
|
set -x
|
||||||
;;
|
;;
|
||||||
-s )
|
|
||||||
shift
|
|
||||||
VERSION_STRING=$1
|
|
||||||
;;
|
|
||||||
-v )
|
-v )
|
||||||
shift
|
shift
|
||||||
VERSION=$1
|
VERSION=$1
|
||||||
@@ -90,6 +85,10 @@ done
|
|||||||
|
|
||||||
OUTFILE=$1
|
OUTFILE=$1
|
||||||
|
|
||||||
|
if [ -z ${VERSION} ] ; then
|
||||||
|
VERSION=`git tag --sort=taggerdate | tail -1 | cut -d'-' -f2`
|
||||||
|
fi
|
||||||
|
|
||||||
# Make sure we know what is going on
|
# Make sure we know what is going on
|
||||||
|
|
||||||
if [ -z ${VERSION} ] ; then
|
if [ -z ${VERSION} ] ; then
|
||||||
@@ -106,12 +105,6 @@ if [ -z ${OUTFILE} ] ; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# If the version string was not provided, then set it to the version
|
|
||||||
|
|
||||||
if [ -z "${VERSION_STRING}" ]; then
|
|
||||||
VERSION_STRING=${VERSION}
|
|
||||||
fi
|
|
||||||
|
|
||||||
# Get the major and minor version numbers
|
# Get the major and minor version numbers
|
||||||
|
|
||||||
MAJOR=`echo ${VERSION} | cut -d'.' -f1`
|
MAJOR=`echo ${VERSION} | cut -d'.' -f1`
|
||||||
@@ -126,15 +119,13 @@ MINOR=`echo ${VERSION} | cut -d'.' -f2`
|
|||||||
# Get GIT information (if not provided on the command line)
|
# Get GIT information (if not provided on the command line)
|
||||||
|
|
||||||
if [ -z "${BUILD}" ]; then
|
if [ -z "${BUILD}" ]; then
|
||||||
GITINFO=`git log 2>/dev/null | head -1`
|
BUILD=`git log --oneline -1 | cut -d' ' -f1 2>/dev/null`
|
||||||
if [ -z "${GITINFO}" ]; then
|
if [ -z "${BUILD}" ]; then
|
||||||
echo "GIT version information is not available"
|
echo "GIT version information is not available"
|
||||||
exit 3
|
exit 3
|
||||||
fi
|
fi
|
||||||
BUILD=`echo ${GITINFO} | cut -d' ' -f2`
|
if [ -n "`git diff-index --name-only HEAD | head -1`" ]; then
|
||||||
if [ -z "${BUILD}" ]; then
|
BUILD=${BUILD}-dirty
|
||||||
echo "GIT build information not found"
|
|
||||||
exit 4
|
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -143,7 +134,7 @@ fi
|
|||||||
|
|
||||||
echo "#!/bin/bash" >${OUTFILE}
|
echo "#!/bin/bash" >${OUTFILE}
|
||||||
echo "" >>${OUTFILE}
|
echo "" >>${OUTFILE}
|
||||||
echo "CONFIG_VERSION_STRING=\"${VERSION_STRING}\"" >>${OUTFILE}
|
echo "CONFIG_VERSION_STRING=\"${VERSION}\"" >>${OUTFILE}
|
||||||
echo "CONFIG_VERSION_MAJOR=${MAJOR}" >>${OUTFILE}
|
echo "CONFIG_VERSION_MAJOR=${MAJOR}" >>${OUTFILE}
|
||||||
echo "CONFIG_VERSION_MINOR=${MINOR}" >>${OUTFILE}
|
echo "CONFIG_VERSION_MINOR=${MINOR}" >>${OUTFILE}
|
||||||
echo "CONFIG_VERSION_BUILD=\"${BUILD}\"" >>${OUTFILE}
|
echo "CONFIG_VERSION_BUILD=\"${BUILD}\"" >>${OUTFILE}
|
||||||
|
|||||||
Reference in New Issue
Block a user