1eda14cbcSMatt Macydnl # 2eda14cbcSMatt Macydnl # DESCRIPTION: 3eda14cbcSMatt Macydnl # Read meta data from the META file. When building from a git repository 4eda14cbcSMatt Macydnl # the ZFS_META_RELEASE field will be overwritten if there is an annotated 5eda14cbcSMatt Macydnl # tag matching the form ZFS_META_NAME-ZFS_META_VERSION-*. This allows 6eda14cbcSMatt Macydnl # for working builds to be uniquely identified using the git commit hash. 7eda14cbcSMatt Macydnl # 8eda14cbcSMatt Macydnl # The META file format is as follows: 9eda14cbcSMatt Macydnl # ^[ ]*KEY:[ \t]+VALUE$ 10eda14cbcSMatt Macydnl # 11eda14cbcSMatt Macydnl # In other words: 12eda14cbcSMatt Macydnl # - KEY is separated from VALUE by a colon and one or more spaces/tabs. 13eda14cbcSMatt Macydnl # - KEY and VALUE are case sensitive. 14eda14cbcSMatt Macydnl # - Leading spaces are ignored. 15eda14cbcSMatt Macydnl # - First match wins for duplicate keys. 16eda14cbcSMatt Macydnl # 17eda14cbcSMatt Macydnl # A line can be commented out by preceding it with a '#' (or technically 18eda14cbcSMatt Macydnl # any non-space character since that will prevent the regex from 19eda14cbcSMatt Macydnl # matching). 20eda14cbcSMatt Macydnl # 21eda14cbcSMatt Macydnl # WARNING: 22eda14cbcSMatt Macydnl # Placing a colon followed by a space or tab (ie, ":[ \t]+") within the 23eda14cbcSMatt Macydnl # VALUE will prematurely terminate the string since that sequence is 24eda14cbcSMatt Macydnl # used as the awk field separator. 25eda14cbcSMatt Macydnl # 26eda14cbcSMatt Macydnl # KEYS: 27eda14cbcSMatt Macydnl # The following META keys are recognized: 28eda14cbcSMatt Macydnl # Name, Version, Release, Date, Author, LT_Current, LT_Revision, LT_Age 29eda14cbcSMatt Macydnl # 30eda14cbcSMatt Macydnl # Written by Chris Dunlap <cdunlap@llnl.gov>. 31eda14cbcSMatt Macydnl # Modified by Brian Behlendorf <behlendorf1@llnl.gov>. 32eda14cbcSMatt Macydnl # 33eda14cbcSMatt MacyAC_DEFUN([ZFS_AC_META], [ 34eda14cbcSMatt Macy 35eda14cbcSMatt Macy AH_BOTTOM([ 36eda14cbcSMatt Macy#undef PACKAGE 37eda14cbcSMatt Macy#undef PACKAGE_BUGREPORT 38eda14cbcSMatt Macy#undef PACKAGE_NAME 39eda14cbcSMatt Macy#undef PACKAGE_STRING 40eda14cbcSMatt Macy#undef PACKAGE_TARNAME 41eda14cbcSMatt Macy#undef PACKAGE_VERSION 42eda14cbcSMatt Macy#undef STDC_HEADERS 43eda14cbcSMatt Macy#undef VERSION]) 44eda14cbcSMatt Macy 45eda14cbcSMatt Macy AC_PROG_AWK 46eda14cbcSMatt Macy AC_MSG_CHECKING([metadata]) 47eda14cbcSMatt Macy 48eda14cbcSMatt Macy META="$srcdir/META" 49eda14cbcSMatt Macy _zfs_ac_meta_type="none" 50eda14cbcSMatt Macy if test -f "$META"; then 51eda14cbcSMatt Macy _zfs_ac_meta_type="META file" 52eda14cbcSMatt Macy 53eda14cbcSMatt Macy ZFS_META_NAME=_ZFS_AC_META_GETVAL([(Name|Project|Package)]); 54eda14cbcSMatt Macy if test -n "$ZFS_META_NAME"; then 55eda14cbcSMatt Macy AC_DEFINE_UNQUOTED([ZFS_META_NAME], ["$ZFS_META_NAME"], 56eda14cbcSMatt Macy [Define the project name.] 57eda14cbcSMatt Macy ) 58eda14cbcSMatt Macy AC_SUBST([ZFS_META_NAME]) 59eda14cbcSMatt Macy fi 60eda14cbcSMatt Macy 61eda14cbcSMatt Macy ZFS_META_VERSION=_ZFS_AC_META_GETVAL([Version]); 62eda14cbcSMatt Macy if test -n "$ZFS_META_VERSION"; then 63eda14cbcSMatt Macy AC_DEFINE_UNQUOTED([ZFS_META_VERSION], 64eda14cbcSMatt Macy ["$ZFS_META_VERSION"], 65eda14cbcSMatt Macy [Define the project version.]) 66eda14cbcSMatt Macy AC_DEFINE_UNQUOTED([SPL_META_VERSION], 67eda14cbcSMatt Macy [ZFS_META_VERSION], 68eda14cbcSMatt Macy [Defined for legacy compatibility.]) 69eda14cbcSMatt Macy AC_SUBST([ZFS_META_VERSION]) 70eda14cbcSMatt Macy fi 71eda14cbcSMatt Macy 72eda14cbcSMatt Macy ZFS_META_RELEASE=_ZFS_AC_META_GETVAL([Release]); 73eda14cbcSMatt Macy if test ! -f ".nogitrelease" && git rev-parse --git-dir > /dev/null 2>&1; then 74eda14cbcSMatt Macy _match="${ZFS_META_NAME}-${ZFS_META_VERSION}" 75eda14cbcSMatt Macy _alias=$(git describe --match=${_match} 2>/dev/null) 76*dae17134SMartin Matuska _release=$(echo ${_alias}|sed "s/${ZFS_META_NAME}//"|cut -f3- -d'-'|tr - _) 77eda14cbcSMatt Macy if test -n "${_release}"; then 78eda14cbcSMatt Macy ZFS_META_RELEASE=${_release} 79eda14cbcSMatt Macy _zfs_ac_meta_type="git describe" 80eda14cbcSMatt Macy else 81eda14cbcSMatt Macy _match="${ZFS_META_NAME}-${ZFS_META_VERSION}-${ZFS_META_RELEASE}" 82eda14cbcSMatt Macy _alias=$(git describe --match=${_match} 2>/dev/null) 83*dae17134SMartin Matuska _release=$(echo ${_alias}|sed 's/${ZFS_META_NAME}//'|cut -f3- -d'-'|tr - _) 84eda14cbcSMatt Macy if test -n "${_release}"; then 85eda14cbcSMatt Macy ZFS_META_RELEASE=${_release} 86eda14cbcSMatt Macy _zfs_ac_meta_type="git describe" 87eda14cbcSMatt Macy fi 88eda14cbcSMatt Macy fi 89eda14cbcSMatt Macy fi 90eda14cbcSMatt Macy 91eda14cbcSMatt Macy if test -n "$ZFS_META_RELEASE"; then 92eda14cbcSMatt Macy AC_DEFINE_UNQUOTED([ZFS_META_RELEASE], 93eda14cbcSMatt Macy ["$ZFS_META_RELEASE"], 94eda14cbcSMatt Macy [Define the project release.]) 95eda14cbcSMatt Macy AC_DEFINE_UNQUOTED([SPL_META_RELEASE], 96eda14cbcSMatt Macy [ZFS_META_RELEASE], 97eda14cbcSMatt Macy [Defined for legacy compatibility.]) 98eda14cbcSMatt Macy AC_SUBST([ZFS_META_RELEASE]) 99eda14cbcSMatt Macy 100eda14cbcSMatt Macy RELEASE="$ZFS_META_RELEASE" 101eda14cbcSMatt Macy AC_SUBST([RELEASE]) 102eda14cbcSMatt Macy fi 103eda14cbcSMatt Macy 104eda14cbcSMatt Macy ZFS_META_LICENSE=_ZFS_AC_META_GETVAL([License]); 105eda14cbcSMatt Macy if test -n "$ZFS_META_LICENSE"; then 106eda14cbcSMatt Macy AC_DEFINE_UNQUOTED([ZFS_META_LICENSE], ["$ZFS_META_LICENSE"], 107eda14cbcSMatt Macy [Define the project license.] 108eda14cbcSMatt Macy ) 109eda14cbcSMatt Macy AC_SUBST([ZFS_META_LICENSE]) 110eda14cbcSMatt Macy fi 111eda14cbcSMatt Macy 112eda14cbcSMatt Macy if test -n "$ZFS_META_NAME" -a -n "$ZFS_META_VERSION"; then 113eda14cbcSMatt Macy ZFS_META_ALIAS="$ZFS_META_NAME-$ZFS_META_VERSION" 114eda14cbcSMatt Macy test -n "$ZFS_META_RELEASE" && 115eda14cbcSMatt Macy ZFS_META_ALIAS="$ZFS_META_ALIAS-$ZFS_META_RELEASE" 116eda14cbcSMatt Macy AC_DEFINE_UNQUOTED([ZFS_META_ALIAS], 117eda14cbcSMatt Macy ["$ZFS_META_ALIAS"], 118eda14cbcSMatt Macy [Define the project alias string.]) 119eda14cbcSMatt Macy AC_DEFINE_UNQUOTED([SPL_META_ALIAS], 120eda14cbcSMatt Macy [ZFS_META_ALIAS], 121eda14cbcSMatt Macy [Defined for legacy compatibility.]) 122eda14cbcSMatt Macy AC_SUBST([ZFS_META_ALIAS]) 123eda14cbcSMatt Macy fi 124eda14cbcSMatt Macy 125eda14cbcSMatt Macy ZFS_META_DATA=_ZFS_AC_META_GETVAL([Date]); 126eda14cbcSMatt Macy if test -n "$ZFS_META_DATA"; then 127eda14cbcSMatt Macy AC_DEFINE_UNQUOTED([ZFS_META_DATA], ["$ZFS_META_DATA"], 128eda14cbcSMatt Macy [Define the project release date.] 129eda14cbcSMatt Macy ) 130eda14cbcSMatt Macy AC_SUBST([ZFS_META_DATA]) 131eda14cbcSMatt Macy fi 132eda14cbcSMatt Macy 133eda14cbcSMatt Macy ZFS_META_AUTHOR=_ZFS_AC_META_GETVAL([Author]); 134eda14cbcSMatt Macy if test -n "$ZFS_META_AUTHOR"; then 135eda14cbcSMatt Macy AC_DEFINE_UNQUOTED([ZFS_META_AUTHOR], ["$ZFS_META_AUTHOR"], 136eda14cbcSMatt Macy [Define the project author.] 137eda14cbcSMatt Macy ) 138eda14cbcSMatt Macy AC_SUBST([ZFS_META_AUTHOR]) 139eda14cbcSMatt Macy fi 140eda14cbcSMatt Macy 141eda14cbcSMatt Macy ZFS_META_KVER_MIN=_ZFS_AC_META_GETVAL([Linux-Minimum]); 142eda14cbcSMatt Macy if test -n "$ZFS_META_KVER_MIN"; then 143eda14cbcSMatt Macy AC_DEFINE_UNQUOTED([ZFS_META_KVER_MIN], 144eda14cbcSMatt Macy ["$ZFS_META_KVER_MIN"], 145eda14cbcSMatt Macy [Define the minimum compatible kernel version.] 146eda14cbcSMatt Macy ) 147eda14cbcSMatt Macy AC_SUBST([ZFS_META_KVER_MIN]) 148eda14cbcSMatt Macy fi 149eda14cbcSMatt Macy 150eda14cbcSMatt Macy ZFS_META_KVER_MAX=_ZFS_AC_META_GETVAL([Linux-Maximum]); 151eda14cbcSMatt Macy if test -n "$ZFS_META_KVER_MAX"; then 152eda14cbcSMatt Macy AC_DEFINE_UNQUOTED([ZFS_META_KVER_MAX], 153eda14cbcSMatt Macy ["$ZFS_META_KVER_MAX"], 154eda14cbcSMatt Macy [Define the maximum compatible kernel version.] 155eda14cbcSMatt Macy ) 156eda14cbcSMatt Macy AC_SUBST([ZFS_META_KVER_MAX]) 157eda14cbcSMatt Macy fi 158eda14cbcSMatt Macy 159eda14cbcSMatt Macy m4_pattern_allow([^LT_(CURRENT|REVISION|AGE)$]) 160eda14cbcSMatt Macy ZFS_META_LT_CURRENT=_ZFS_AC_META_GETVAL([LT_Current]); 161eda14cbcSMatt Macy ZFS_META_LT_REVISION=_ZFS_AC_META_GETVAL([LT_Revision]); 162eda14cbcSMatt Macy ZFS_META_LT_AGE=_ZFS_AC_META_GETVAL([LT_Age]); 163eda14cbcSMatt Macy if test -n "$ZFS_META_LT_CURRENT" \ 164eda14cbcSMatt Macy -o -n "$ZFS_META_LT_REVISION" \ 165eda14cbcSMatt Macy -o -n "$ZFS_META_LT_AGE"; then 166eda14cbcSMatt Macy test -n "$ZFS_META_LT_CURRENT" || ZFS_META_LT_CURRENT="0" 167eda14cbcSMatt Macy test -n "$ZFS_META_LT_REVISION" || ZFS_META_LT_REVISION="0" 168eda14cbcSMatt Macy test -n "$ZFS_META_LT_AGE" || ZFS_META_LT_AGE="0" 169eda14cbcSMatt Macy AC_DEFINE_UNQUOTED([ZFS_META_LT_CURRENT], 170eda14cbcSMatt Macy ["$ZFS_META_LT_CURRENT"], 171eda14cbcSMatt Macy [Define the libtool library 'current' 172eda14cbcSMatt Macy version information.] 173eda14cbcSMatt Macy ) 174eda14cbcSMatt Macy AC_DEFINE_UNQUOTED([ZFS_META_LT_REVISION], 175eda14cbcSMatt Macy ["$ZFS_META_LT_REVISION"], 176eda14cbcSMatt Macy [Define the libtool library 'revision' 177eda14cbcSMatt Macy version information.] 178eda14cbcSMatt Macy ) 179eda14cbcSMatt Macy AC_DEFINE_UNQUOTED([ZFS_META_LT_AGE], ["$ZFS_META_LT_AGE"], 180eda14cbcSMatt Macy [Define the libtool library 'age' 181eda14cbcSMatt Macy version information.] 182eda14cbcSMatt Macy ) 183eda14cbcSMatt Macy AC_SUBST([ZFS_META_LT_CURRENT]) 184eda14cbcSMatt Macy AC_SUBST([ZFS_META_LT_REVISION]) 185eda14cbcSMatt Macy AC_SUBST([ZFS_META_LT_AGE]) 186eda14cbcSMatt Macy fi 187eda14cbcSMatt Macy fi 188eda14cbcSMatt Macy 189eda14cbcSMatt Macy AC_MSG_RESULT([$_zfs_ac_meta_type]) 190eda14cbcSMatt Macy ] 191eda14cbcSMatt Macy) 192eda14cbcSMatt Macy 193eda14cbcSMatt Macydnl # _ZFS_AC_META_GETVAL (KEY_NAME_OR_REGEX) 194eda14cbcSMatt Macydnl # 195eda14cbcSMatt Macydnl # Returns the META VALUE associated with the given KEY_NAME_OR_REGEX expr. 196eda14cbcSMatt Macydnl # 197eda14cbcSMatt Macydnl # Despite their resemblance to line noise, 198eda14cbcSMatt Macydnl # the "@<:@" and "@:>@" constructs are quadrigraphs for "[" and "]". 199eda14cbcSMatt Macydnl # <www.gnu.org/software/autoconf/manual/autoconf.html#Quadrigraphs> 200eda14cbcSMatt Macydnl # 201eda14cbcSMatt Macydnl # The "$[]1" and "$[]2" constructs prevent M4 parameter expansion 202eda14cbcSMatt Macydnl # so a literal $1 and $2 will be passed to the resulting awk script, 203eda14cbcSMatt Macydnl # whereas the "$1" will undergo M4 parameter expansion for the META key. 204eda14cbcSMatt Macydnl # 205eda14cbcSMatt MacyAC_DEFUN([_ZFS_AC_META_GETVAL], 206eda14cbcSMatt Macy [`$AWK -F ':@<:@ \t@:>@+' '$[]1 ~ /^ *$1$/ { print $[]2; exit }' $META`]dnl 207eda14cbcSMatt Macy) 208