xref: /freebsd/sys/contrib/openzfs/config/zfs-meta.m4 (revision dae1713419a669d4f6c7acddf81a21297c809741)
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