1*00b67f09SDavid van Moolenbroek#! /bin/sh 2*00b67f09SDavid van Moolenbroek# 3*00b67f09SDavid van Moolenbroek# Automated Testing Framework (atf) 4*00b67f09SDavid van Moolenbroek# 5*00b67f09SDavid van Moolenbroek# Copyright (c) 2007 The NetBSD Foundation, Inc. 6*00b67f09SDavid van Moolenbroek# All rights reserved. 7*00b67f09SDavid van Moolenbroek# 8*00b67f09SDavid van Moolenbroek# Redistribution and use in source and binary forms, with or without 9*00b67f09SDavid van Moolenbroek# modification, are permitted provided that the following conditions 10*00b67f09SDavid van Moolenbroek# are met: 11*00b67f09SDavid van Moolenbroek# 1. Redistributions of source code must retain the above copyright 12*00b67f09SDavid van Moolenbroek# notice, this list of conditions and the following disclaimer. 13*00b67f09SDavid van Moolenbroek# 2. Redistributions in binary form must reproduce the above copyright 14*00b67f09SDavid van Moolenbroek# notice, this list of conditions and the following disclaimer in the 15*00b67f09SDavid van Moolenbroek# documentation and/or other materials provided with the distribution. 16*00b67f09SDavid van Moolenbroek# 17*00b67f09SDavid van Moolenbroek# THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND 18*00b67f09SDavid van Moolenbroek# CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 19*00b67f09SDavid van Moolenbroek# INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 20*00b67f09SDavid van Moolenbroek# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 21*00b67f09SDavid van Moolenbroek# IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY 22*00b67f09SDavid van Moolenbroek# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23*00b67f09SDavid van Moolenbroek# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 24*00b67f09SDavid van Moolenbroek# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 25*00b67f09SDavid van Moolenbroek# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 26*00b67f09SDavid van Moolenbroek# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 27*00b67f09SDavid van Moolenbroek# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 28*00b67f09SDavid van Moolenbroek# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 29*00b67f09SDavid van Moolenbroek# 30*00b67f09SDavid van Moolenbroek 31*00b67f09SDavid van Moolenbroek# 32*00b67f09SDavid van Moolenbroek# Generates a header file with information about the revision used to 33*00b67f09SDavid van Moolenbroek# build ATF. 34*00b67f09SDavid van Moolenbroek# 35*00b67f09SDavid van Moolenbroek 36*00b67f09SDavid van Moolenbroekset -e 37*00b67f09SDavid van Moolenbroek 38*00b67f09SDavid van MoolenbroekProg_Name=${0##*/} 39*00b67f09SDavid van Moolenbroek 40*00b67f09SDavid van MoolenbroekGIT= 41*00b67f09SDavid van MoolenbroekROOT= 42*00b67f09SDavid van Moolenbroek 43*00b67f09SDavid van Moolenbroek# 44*00b67f09SDavid van Moolenbroek# err message 45*00b67f09SDavid van Moolenbroek# 46*00b67f09SDavid van Moolenbroekerr() { 47*00b67f09SDavid van Moolenbroek echo "${Prog_Name}: ${@}" 1>&2 48*00b67f09SDavid van Moolenbroek exit 1 49*00b67f09SDavid van Moolenbroek} 50*00b67f09SDavid van Moolenbroek 51*00b67f09SDavid van Moolenbroek# 52*00b67f09SDavid van Moolenbroek# call_git args 53*00b67f09SDavid van Moolenbroek# 54*00b67f09SDavid van Moolenbroekcall_git() { 55*00b67f09SDavid van Moolenbroek ( cd "${ROOT}" && "${GIT}" "${@}" ) 56*00b67f09SDavid van Moolenbroek} 57*00b67f09SDavid van Moolenbroek 58*00b67f09SDavid van Moolenbroek# 59*00b67f09SDavid van Moolenbroek# generate_from_dist revfile version 60*00b67f09SDavid van Moolenbroek# 61*00b67f09SDavid van Moolenbroekgenerate_from_dist() { 62*00b67f09SDavid van Moolenbroek revfile=${1}; shift 63*00b67f09SDavid van Moolenbroek version=${1}; shift 64*00b67f09SDavid van Moolenbroek 65*00b67f09SDavid van Moolenbroek >${revfile} 66*00b67f09SDavid van Moolenbroek 67*00b67f09SDavid van Moolenbroek echo "#define PACKAGE_REVISION_TYPE_DIST" >>${revfile} 68*00b67f09SDavid van Moolenbroek} 69*00b67f09SDavid van Moolenbroek 70*00b67f09SDavid van Moolenbroek# 71*00b67f09SDavid van Moolenbroek# generate_from_git revfile 72*00b67f09SDavid van Moolenbroek# 73*00b67f09SDavid van Moolenbroekgenerate_from_git() { 74*00b67f09SDavid van Moolenbroek revfile=${1} 75*00b67f09SDavid van Moolenbroek 76*00b67f09SDavid van Moolenbroek rev_base_id=$(call_git rev-parse HEAD) 77*00b67f09SDavid van Moolenbroek rev_branch=$(call_git branch | grep '^\* ' | cut -d ' ' -f 2-) 78*00b67f09SDavid van Moolenbroek rev_date=$(call_git log -1 | grep '^Date:' | sed -e 's,^Date:[ \t]*,,') 79*00b67f09SDavid van Moolenbroek if [ -z "$(call_git status -s)" ]; then 80*00b67f09SDavid van Moolenbroek rev_modified=false 81*00b67f09SDavid van Moolenbroek else 82*00b67f09SDavid van Moolenbroek rev_modified=true 83*00b67f09SDavid van Moolenbroek fi 84*00b67f09SDavid van Moolenbroek 85*00b67f09SDavid van Moolenbroek >${revfile} 86*00b67f09SDavid van Moolenbroek 87*00b67f09SDavid van Moolenbroek echo "#define PACKAGE_REVISION_TYPE_GIT" >>${revfile} 88*00b67f09SDavid van Moolenbroek 89*00b67f09SDavid van Moolenbroek echo "#define PACKAGE_REVISION_BRANCH \"${rev_branch}\"" >>${revfile} 90*00b67f09SDavid van Moolenbroek echo "#define PACKAGE_REVISION_BASE \"${rev_base_id}\"" >>${revfile} 91*00b67f09SDavid van Moolenbroek 92*00b67f09SDavid van Moolenbroek if [ ${rev_modified} = true ]; then 93*00b67f09SDavid van Moolenbroek echo "#define PACKAGE_REVISION_MODIFIED 1" >>${revfile} 94*00b67f09SDavid van Moolenbroek fi 95*00b67f09SDavid van Moolenbroek 96*00b67f09SDavid van Moolenbroek echo "#define PACKAGE_REVISION_DATE \"${rev_date}\"" >>${revfile} 97*00b67f09SDavid van Moolenbroek} 98*00b67f09SDavid van Moolenbroek 99*00b67f09SDavid van Moolenbroek# 100*00b67f09SDavid van Moolenbroek# main 101*00b67f09SDavid van Moolenbroek# 102*00b67f09SDavid van Moolenbroek# Entry point. 103*00b67f09SDavid van Moolenbroek# 104*00b67f09SDavid van Moolenbroekmain() { 105*00b67f09SDavid van Moolenbroek outfile= 106*00b67f09SDavid van Moolenbroek version= 107*00b67f09SDavid van Moolenbroek while getopts :g:r:o:v: arg; do 108*00b67f09SDavid van Moolenbroek case ${arg} in 109*00b67f09SDavid van Moolenbroek g) 110*00b67f09SDavid van Moolenbroek GIT=${OPTARG} 111*00b67f09SDavid van Moolenbroek ;; 112*00b67f09SDavid van Moolenbroek o) 113*00b67f09SDavid van Moolenbroek outfile=${OPTARG} 114*00b67f09SDavid van Moolenbroek ;; 115*00b67f09SDavid van Moolenbroek r) 116*00b67f09SDavid van Moolenbroek ROOT=${OPTARG} 117*00b67f09SDavid van Moolenbroek ;; 118*00b67f09SDavid van Moolenbroek v) 119*00b67f09SDavid van Moolenbroek version=${OPTARG} 120*00b67f09SDavid van Moolenbroek ;; 121*00b67f09SDavid van Moolenbroek *) 122*00b67f09SDavid van Moolenbroek err "Unknown option ${arg}" 123*00b67f09SDavid van Moolenbroek ;; 124*00b67f09SDavid van Moolenbroek esac 125*00b67f09SDavid van Moolenbroek done 126*00b67f09SDavid van Moolenbroek [ -n "${ROOT}" ] || \ 127*00b67f09SDavid van Moolenbroek err "Must specify the top-level source directory with -r" 128*00b67f09SDavid van Moolenbroek [ -n "${outfile}" ] || \ 129*00b67f09SDavid van Moolenbroek err "Must specify an output file with -o" 130*00b67f09SDavid van Moolenbroek [ -n "${version}" ] || \ 131*00b67f09SDavid van Moolenbroek err "Must specify a version number with -v" 132*00b67f09SDavid van Moolenbroek 133*00b67f09SDavid van Moolenbroek if [ -n "${GIT}" -a -d ${ROOT}/.git ]; then 134*00b67f09SDavid van Moolenbroek generate_from_git ${outfile} 135*00b67f09SDavid van Moolenbroek else 136*00b67f09SDavid van Moolenbroek generate_from_dist ${outfile} ${version} 137*00b67f09SDavid van Moolenbroek fi 138*00b67f09SDavid van Moolenbroek} 139*00b67f09SDavid van Moolenbroek 140*00b67f09SDavid van Moolenbroekmain "${@}" 141*00b67f09SDavid van Moolenbroek 142*00b67f09SDavid van Moolenbroek# vim: syntax=sh:expandtab:shiftwidth=4:softtabstop=4 143