1 ###############################################################################
2 # Written by Chris Dunlap <cdunlap@llnl.gov>.
3 # Modified by Brian Behlendorf <behlendorf1@llnl.gov>.
4 ###############################################################################
5 # ZFS_AC_META: Read metadata from the META file. When building from a
6 # git repository the ZFS_META_RELEASE field will be overwritten if there
7 # is an annotated tag matching the form ZFS_META_NAME-ZFS_META_VERSION-*.
8 # This allows for working builds to be uniquely identified using the git
10 ###############################################################################
12 AC_DEFUN([ZFS_AC_META], [
16 #undef PACKAGE_BUGREPORT
19 #undef PACKAGE_TARNAME
20 #undef PACKAGE_VERSION
24 AC_MSG_CHECKING([metadata])
27 _zfs_ac_meta_type="none"
28 if test -f "$META"; then
29 _zfs_ac_meta_type="META file"
31 ZFS_META_NAME=_ZFS_AC_META_GETVAL([(?:NAME|PROJECT|PACKAGE)]);
32 if test -n "$ZFS_META_NAME"; then
33 AC_DEFINE_UNQUOTED([ZFS_META_NAME], ["$ZFS_META_NAME"],
34 [Define the project name.]
36 AC_SUBST([ZFS_META_NAME])
39 ZFS_META_VERSION=_ZFS_AC_META_GETVAL([VERSION]);
40 if test -n "$ZFS_META_VERSION"; then
41 AC_DEFINE_UNQUOTED([ZFS_META_VERSION], ["$ZFS_META_VERSION"],
42 [Define the project version.]
44 AC_SUBST([ZFS_META_VERSION])
47 ZFS_META_RELEASE=_ZFS_AC_META_GETVAL([RELEASE]);
48 if git rev-parse --git-dir > /dev/null 2>&1; then
49 _match="${ZFS_META_NAME}-${ZFS_META_VERSION}*"
50 _alias=$(git describe --match=${_match} 2>/dev/null)
51 _release=$(echo ${_alias}|cut -f3- -d'-'|sed 's/-/_/g')
52 if test -n "${_release}"; then
53 ZFS_META_RELEASE=${_release}
54 _zfs_ac_meta_type="git describe"
58 if test -n "$ZFS_META_RELEASE"; then
59 AC_DEFINE_UNQUOTED([ZFS_META_RELEASE], ["$ZFS_META_RELEASE"],
60 [Define the project release.]
62 AC_SUBST([ZFS_META_RELEASE])
64 RELEASE="$ZFS_META_RELEASE"
68 ZFS_META_LICENSE=_ZFS_AC_META_GETVAL([LICENSE]);
69 if test -n "$ZFS_META_LICENSE"; then
70 AC_DEFINE_UNQUOTED([ZFS_META_LICENSE], ["$ZFS_META_LICENSE"],
71 [Define the project license.]
73 AC_SUBST([ZFS_META_LICENSE])
76 if test -n "$ZFS_META_NAME" -a -n "$ZFS_META_VERSION"; then
77 ZFS_META_ALIAS="$ZFS_META_NAME-$ZFS_META_VERSION"
78 test -n "$ZFS_META_RELEASE" &&
79 ZFS_META_ALIAS="$ZFS_META_ALIAS-$ZFS_META_RELEASE"
80 AC_DEFINE_UNQUOTED([ZFS_META_ALIAS],
82 [Define the project alias string.]
84 AC_SUBST([ZFS_META_ALIAS])
87 ZFS_META_DATA=_ZFS_AC_META_GETVAL([DATE]);
88 if test -n "$ZFS_META_DATA"; then
89 AC_DEFINE_UNQUOTED([ZFS_META_DATA], ["$ZFS_META_DATA"],
90 [Define the project release date.]
92 AC_SUBST([ZFS_META_DATA])
95 ZFS_META_AUTHOR=_ZFS_AC_META_GETVAL([AUTHOR]);
96 if test -n "$ZFS_META_AUTHOR"; then
97 AC_DEFINE_UNQUOTED([ZFS_META_AUTHOR], ["$ZFS_META_AUTHOR"],
98 [Define the project author.]
100 AC_SUBST([ZFS_META_AUTHOR])
103 m4_pattern_allow([^LT_(CURRENT|REVISION|AGE)$])
104 ZFS_META_LT_CURRENT=_ZFS_AC_META_GETVAL([LT_CURRENT]);
105 ZFS_META_LT_REVISION=_ZFS_AC_META_GETVAL([LT_REVISION]);
106 ZFS_META_LT_AGE=_ZFS_AC_META_GETVAL([LT_AGE]);
107 if test -n "$ZFS_META_LT_CURRENT" \
108 -o -n "$ZFS_META_LT_REVISION" \
109 -o -n "$ZFS_META_LT_AGE"; then
110 test -n "$ZFS_META_LT_CURRENT" || ZFS_META_LT_CURRENT="0"
111 test -n "$ZFS_META_LT_REVISION" || ZFS_META_LT_REVISION="0"
112 test -n "$ZFS_META_LT_AGE" || ZFS_META_LT_AGE="0"
113 AC_DEFINE_UNQUOTED([ZFS_META_LT_CURRENT],
114 ["$ZFS_META_LT_CURRENT"],
115 [Define the libtool library 'current'
116 version information.]
118 AC_DEFINE_UNQUOTED([ZFS_META_LT_REVISION],
119 ["$ZFS_META_LT_REVISION"],
120 [Define the libtool library 'revision'
121 version information.]
123 AC_DEFINE_UNQUOTED([ZFS_META_LT_AGE], ["$ZFS_META_LT_AGE"],
124 [Define the libtool library 'age'
125 version information.]
127 AC_SUBST([ZFS_META_LT_CURRENT])
128 AC_SUBST([ZFS_META_LT_REVISION])
129 AC_SUBST([ZFS_META_LT_AGE])
133 AC_MSG_RESULT([$_zfs_ac_meta_type])
137 AC_DEFUN([_ZFS_AC_META_GETVAL],
139 -e "BEGIN { \\$key=shift @ARGV; }"\
140 -e "next unless s/^\s*\\$key@<:@:=@:>@//i;"\
141 -e "s/^((?:@<:@^'\"#@:>@*(?:(@<:@'\"@:>@)@<:@^\2@:>@*\2)*)*)#.*/\\@S|@1/;"\
144 -e "s/^(@<:@'\"@:>@)(.*)\1/\\@S|@2/;"\
146 -e "END { print \\$val if defined \\$val; }"\