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