1260684Skaiw#!/bin/sh 2260684Skaiw# 3260684Skaiw# This script generates a project-wide version identifier for use by 4260684Skaiw# the `elftc_version()' API. 5260684Skaiw# 6300311Semaste# $Id: make-toolchain-version 3414 2016-02-16 22:55:28Z jkoshy $ 7260684Skaiw 8260684Skaiw# 9260684Skaiw# Defaults. 10260684Skaiw# 11260684Skaiwbuildhost=`uname -s` 12260684Skaiwelftcname="elftoolchain" 13260684Skaiwoptions="e:h:o:r:t:" 14260684Skaiwtop="" 15260684Skaiwversion="HEAD" 16260684Skaiwversionfile="elftc_version.c" 17260684Skaiwprogname=`basename ${0}` 18260684Skaiw 19260684Skaiwusage() 20260684Skaiw{ 21260684Skaiw exec >&2 22260684Skaiw 23260684Skaiw # Print a message, if supplied. 24260684Skaiw if [ -n "${*}" ]; then echo "##${@}"; fi 25260684Skaiw 26260684Skaiw echo "Usage: ${progname} [options]" 27260684Skaiw echo " Generate a toolchain-wide version number" 28260684Skaiw echo " -e PROJECTNAME Set the project name [default: ${elftcname}]." 29260684Skaiw echo " -h HOSTOS Set the build OS [default: ${buildhost}]." 30260684Skaiw echo " -o OUTPUT Set the output file [default: ${versionfile}]." 31260684Skaiw echo " -r VERSION Set the version string [default: ${version}]." 32260684Skaiw echo " -t TOPDIR Set the top-of-tree directory [required]." 33260684Skaiw exit 1 34260684Skaiw} 35260684Skaiw 36260684Skaiw# 37260684Skaiw# Parse options. 38260684Skaiw# 39260684Skaiw 40260684Skaiwwhile getopts ${options} option 41260684Skaiwdo 42260684Skaiw case ${option} in 43260684Skaiw 'e') elftcname="${OPTARG}" ;; 44260684Skaiw 'h') buildhost="${OPTARG}" ;; 45260684Skaiw 'o') versionfile="${OPTARG}" ;; 46260684Skaiw 'r') version="${OPTARG}" ;; 47260684Skaiw 't') top="${OPTARG}" ;; 48260684Skaiw '?') usage ;; 49260684Skaiw esac 50260684Skaiwdone 51260684Skaiw 52260684Skaiw[ -n "${top}" ] || usage 53260684Skaiw 54260684Skaiw# Try to determine the in-tree revision number. 55260684Skaiw# 56260684Skaiw# This script attempts to handle the case where our sources have been 57260684Skaiw# incorporated into an operating system's base sources. 58260684Skaiw# 59260684Skaiw# - If SVN is detected, we use the `svninfo' tool to determine the 60260684Skaiw# in-tree revision number. 61260684Skaiw# - If CVS is detected, we use the string `unknown'. 62260684Skaiw# - Otherwise, we use `git --describe'. 63260684Skaiw 64260684Skaiwcurdir=`pwd` 65260684Skaiwcd ${top} || usage "ERROR: Cannot change directory to \"${top}\"." 66260684Skaiw 67300311Semasteif [ -d CVS ]; then # Look for CVS (NetBSD). 68260684Skaiw versionstring=" cvs:unknown" 69300311Semasteelse # Try git (DragonFlyBSD). 70300311Semaste gitversion="$(git describe --all --dirty --long 2> /dev/null)" 71300311Semaste if [ -n "${gitversion}" ]; then 72300311Semaste versionstring=" git:${gitversion}" 73300311Semaste else # Assume an SVN checkout (SourceForge or FreeBSD). 74300311Semaste svnversion="$(svnversion)" 75300311Semaste if [ -n "${svnversion}" ]; then 76300311Semaste versionstring=" svn:$(svnversion)" 77300311Semaste fi 78260684Skaiw fi 79260684Skaiwfi 80260684Skaiw 81300311Semasteif [ -z "${versionstring}" ]; then 82300311Semaste echo "ERROR: cannot determine a revision number." 1>&2 83300311Semaste exit 1 84300311Semastefi 85300311Semaste 86260684Skaiwcd ${curdir} || usage "Cannot change back to ${curdir}." 87260684Skaiw 88260684Skaiw# 89260684Skaiw# Only replace the source file if its content has changed. 90260684Skaiw# 91260684Skaiwtmpfile=`mktemp ${TMPDIR:-/tmp}/MV.XXXXXXX` 92260684Skaiwtrap "rm -f ${tmpfile};" 0 1 2 3 15 93260684Skaiw 94260684Skaiwcat > ${tmpfile} <<EOF 95260684Skaiw/* WARNING: Generated by "${progname}". */ 96260684Skaiw 97260684Skaiw#include <sys/types.h> 98260684Skaiw#include <libelftc.h> 99260684Skaiw 100260684Skaiwconst char * 101260684Skaiwelftc_version(void) 102260684Skaiw{ 103260684Skaiw return "${elftcname} ${version} ${buildhost}${versionstring}"; 104260684Skaiw} 105260684SkaiwEOF 106260684Skaiw 107260684Skaiwif ! cmp -s ${tmpfile} ${versionfile}; then 108260684Skaiw echo "@ ${progname}: building \"${versionfile}\"." 109260684Skaiw cp ${tmpfile} ${versionfile} || exit ${?} 110260684Skaiwfi 111