Home | History | Annotate | Line # | Download | only in gen
      1  1.1  kre #! /bin/sh
      2  1.1  kre 
      3  1.3  kre # $NetBSD: grab-version.sh,v 1.3 2026/07/10 21:54:30 kre Exp $
      4  1.1  kre 
      5  1.1  kre # Free unlicensed public-domain code.
      6  1.1  kre # Found under a bush behind an outdoor dunny in Wagga Wagga (mid 1800's).
      7  1.1  kre # Your risk entirely if you use it.
      8  1.1  kre 
      9  1.1  kre case "$#" in
     10  1.3  kre 1)	;;
     11  1.3  kre *)	printf >&2 'Usage: %s NETBSDSRCDIR\n' "${0##*/}"; exit 1;;
     12  1.1  kre esac
     13  1.1  kre 
     14  1.3  kre # GEN='$NetBSD: grab-version.sh,v 1.3 2026/07/10 21:54:30 kre Exp $'
     15  1.3  kre # GEN=${GEN#'$NetBSD: '}
     16  1.3  kre # GEN=${GEN%' Exp $'}
     17  1.1  kre 
     18  1.1  kre VERSION_FILE="${1}/sys/sys/param.h"
     19  1.1  kre 
     20  1.1  kre : ${SED:=sed}
     21  1.1  kre : ${DATE:=date}
     22  1.1  kre 
     23  1.1  kre if ( O=$(eval "printf %s $'X\tY'") && [ "$O" = 'X	Y' ] ) >/dev/null 2>&1
     24  1.1  kre then
     25  1.1  kre 	# Use this when possible, it is more obvious what is happening.
     26  1.1  kre 	VERS_MATCH=$'^#define[ \t][ \t]*__NetBSD_Version__[ \t][ \t]*[1-9]'
     27  1.1  kre 	IFS=$' \t'
     28  1.1  kre else
     29  1.1  kre 	# The same as above, avoiding use of $'...' (for old shells)
     30  1.1  kre 	VERS_MATCH='^#define[ 	][ 	]*__NetBSD_Version__[ 	][ 	]*[1-9]'
     31  1.1  kre 	IFS=' 	'
     32  1.1  kre fi
     33  1.1  kre 
     34  1.1  kre VL=$( "${SED}" -n							\
     35  1.1  kre 	-e "/${VERS_MATCH}/ {"						\
     36  1.1  kre 	-e	p							\
     37  1.1  kre 	-e	q							\
     38  1.1  kre 	-e }			"${VERSION_FILE}"
     39  1.1  kre      )	||
     40  1.1  kre {
     41  1.1  kre 	printf >&2 '%s: No __NetBSD_Version__ in %s\n'			\
     42  1.1  kre 			"${0##*/}" "${VERSION_FILE}"
     43  1.1  kre 	exit 1
     44  1.1  kre }
     45  1.1  kre 
     46  1.1  kre # See IFS setting above (this is the sole occasion it is used)
     47  1.1  kre read -r def nbv version comment <<!EOF!
     48  1.1  kre ${VL}
     49  1.1  kre !EOF!
     50  1.1  kre 
     51  1.1  kre format()
     52  1.1  kre {
     53  1.1  kre 	printf >&2 '%s: Badly formatted version line from %s:\n\t%s\n'	\
     54  1.1  kre 		"${0##*/}" "${VERSION_FILE}" "${VL}"
     55  1.1  kre 	exit 1
     56  1.1  kre }
     57  1.1  kre 
     58  1.1  kre if [ "${def}" != '#define' ] || [ "${nbv}" != __NetBSD_Version__ ]
     59  1.1  kre then
     60  1.1  kre 	format
     61  1.1  kre fi
     62  1.1  kre 
     63  1.1  kre comment=${comment#* }
     64  1.1  kre comment=${comment% *}
     65  1.1  kre case "${comment}" in
     66  1.1  kre *[/*]*)	format		;;
     67  1.1  kre 'NetBSD '[1-9]*)	comment="${comment#NetBSD }";;
     68  1.1  kre *)	format		;;
     69  1.1  kre esac
     70  1.1  kre 
     71  1.1  kre case "${version}" in
     72  1.1  kre *[!0-9]*)	format	;;
     73  1.1  kre [1-9]*[0-9])		;;
     74  1.1  kre *)		format	;;
     75  1.1  kre esac
     76  1.1  kre 
     77  1.3  kre printf "'%s'\n" '-DUSER_OSTYPE_VALUE="NetBSD"'
     78  1.3  kre printf "'%s'\n" "-DUSER_OSREVISION_VALUE=${version}"
     79  1.3  kre printf "'-DUSER_OSRELEASE_VALUE=\"%s\"'\n" "${comment}"
     80  1.3  kre printf "'-DUSER_BUILDTIME_VALUE=\"%s%s\"'\n"			\
     81  1.3  kre     "$( TZ=UTC "${DATE}" -u					\
     82  1.3  kre 	${MKREPRO_TIMESTAMP:+-r "${MKREPRO_TIMESTAMP}"}		\
     83  1.3  kre 	'+%Y-%m-%d %T UTC' )"					\
     84  1.3  kre     "${MKREPRO_TIMESTAMP:+ !}"
     85