1: # libunistring-base.m4 serial 5
2: dnl Copyright (C) 2010-2019 Free Software Foundation, Inc.
3: dnl This file is free software; the Free Software Foundation
4: dnl gives unlimited permission to copy and/or distribute it,
5: dnl with or without modifications, as long as this notice is preserved.
6:
7: dnl From Paolo Bonzini and Bruno Haible.
8:
9: dnl gl_LIBUNISTRING_MODULE([VERSION], [Module])
10: dnl Declares that the source files of Module should be compiled, unless we
11: dnl are linking with libunistring and its version is >= the given VERSION.
12: dnl Defines an automake conditional LIBUNISTRING_COMPILE_$MODULE that is
13: dnl true if the source files of Module should be compiled.
14: dnl This macro is to be used for public libunistring API, not for
15: dnl undocumented API.
16: dnl
17: dnl You have to bump the VERSION argument to the next projected version
18: dnl number each time you make a change that affects the behaviour of the
19: dnl functions defined in Module (even if the sources of Module itself do not
20: dnl change).
21:
22: AC_DEFUN([gl_LIBUNISTRING_MODULE],
23: [
24: AC_REQUIRE([gl_LIBUNISTRING_LIB_PREPARE])
25: dnl Use the variables HAVE_LIBUNISTRING, LIBUNISTRING_VERSION from
26: dnl gl_LIBUNISTRING_CORE if that macro has been run.
27: AM_CONDITIONAL(AS_TR_CPP([LIBUNISTRING_COMPILE_$2]),
28: [gl_LIBUNISTRING_VERSION_CMP([$1])])
29: ])
30:
31: dnl gl_LIBUNISTRING_LIBHEADER([VERSION], [HeaderFile])
32: dnl Declares that HeaderFile should be created, unless we are linking
33: dnl with libunistring and its version is >= the given VERSION.
34: dnl HeaderFile should be relative to the lib directory and end in '.h'.
35: dnl Prepares for substituting LIBUNISTRING_HEADERFILE (to HeaderFile or empty).
36: dnl
37: dnl When we are linking with the already installed libunistring and its version
38: dnl is < VERSION, we create HeaderFile here, because we may compile functions
39: dnl (via gl_LIBUNISTRING_MODULE above) that are not contained in the installed
40: dnl version.
41: dnl When we are linking with the already installed libunistring and its version
42: dnl is > VERSION, we don't create HeaderFile here: it could cause compilation
43: dnl errors in other libunistring header files if some types are missing.
44: dnl
45: dnl You have to bump the VERSION argument to the next projected version
46: dnl number each time you make a non-comment change to the HeaderFile.
47:
48: AC_DEFUN([gl_LIBUNISTRING_LIBHEADER],
49: [
50: AC_REQUIRE([gl_LIBUNISTRING_LIB_PREPARE])
51: dnl Use the variables HAVE_LIBUNISTRING, LIBUNISTRING_VERSION from
52: dnl gl_LIBUNISTRING_CORE if that macro has been run.
53: if gl_LIBUNISTRING_VERSION_CMP([$1]); then
54: LIBUNISTRING_[]AS_TR_CPP([$2])='$2'
55: else
56: LIBUNISTRING_[]AS_TR_CPP([$2])=
57: fi
58: AC_SUBST([LIBUNISTRING_]AS_TR_CPP([$2]))
59: ])
60:
61: dnl Miscellaneous preparations/initializations.
62:
63: AC_DEFUN([gl_LIBUNISTRING_LIB_PREPARE],
64: [
65: dnl Ensure that HAVE_LIBUNISTRING is fully determined at this point.
66: m4_ifdef([gl_LIBUNISTRING], [AC_REQUIRE([gl_LIBUNISTRING])])
67:
68: AC_REQUIRE([AC_PROG_AWK])
69:
70: dnl Sed expressions to extract the parts of a version number.
71: changequote(,)
72: gl_libunistring_sed_extract_major='/^[0-9]/{s/^\([0-9]*\).*/\1/p;q;}
73: i\
74: 0
75: q
76: '
77: gl_libunistring_sed_extract_minor='/^[0-9][0-9]*[.][0-9]/{s/^[0-9]*[.]\([0-9]*\).*/\1/p;q;}
78: i\
79: 0
80: q
81: '
82: gl_libunistring_sed_extract_subminor='/^[0-9][0-9]*[.][0-9][0-9]*[.][0-9]/{s/^[0-9]*[.][0-9]*[.]\([0-9]*\).*/\1/p;q;}
83: i\
84: 0
85: q
86: '
87: changequote([,])
88:
89: if test "$HAVE_LIBUNISTRING" = yes; then
90: LIBUNISTRING_VERSION_MAJOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_major"`
91: LIBUNISTRING_VERSION_MINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_minor"`
92: LIBUNISTRING_VERSION_SUBMINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_subminor"`
93: fi
94: ])
95:
96: dnl gl_LIBUNISTRING_VERSION_CMP([VERSION])
97: dnl Expands to a shell statement that evaluates to true if LIBUNISTRING_VERSION
98: dnl is less than the VERSION argument.
99: AC_DEFUN([gl_LIBUNISTRING_VERSION_CMP],
100: [ { test "$HAVE_LIBUNISTRING" != yes \
101: || {
102: dnl AS_LITERAL_IF exists and works fine since autoconf-2.59 at least.
103: AS_LITERAL_IF([$1],
104: [dnl This is the optimized variant, that assumes the argument is a literal:
105: m4_pushdef([requested_version_major],
106: [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^\([0-9]*\).*], [\1]), [])])
107: m4_pushdef([requested_version_minor],
108: [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^[0-9]*[.]\([0-9]*\).*], [\1]), [$1])])
109: m4_pushdef([requested_version_subminor],
110: [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^[0-9]*[.][0-9]*[.]\([0-9]*\).*], [\1]), [$1])])
111: test $LIBUNISTRING_VERSION_MAJOR -lt requested_version_major \
112: || { test $LIBUNISTRING_VERSION_MAJOR -eq requested_version_major \
113: && { test $LIBUNISTRING_VERSION_MINOR -lt requested_version_minor \
114: || { test $LIBUNISTRING_VERSION_MINOR -eq requested_version_minor \
115: && test $LIBUNISTRING_VERSION_SUBMINOR -lt requested_version_subminor
116: }
117: }
118: }
119: m4_popdef([requested_version_subminor])
120: m4_popdef([requested_version_minor])
121: m4_popdef([requested_version_major])
122: ],
123: [dnl This is the unoptimized variant:
124: requested_version_major=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_major"`
125: requested_version_minor=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_minor"`
126: requested_version_subminor=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_subminor"`
127: test $LIBUNISTRING_VERSION_MAJOR -lt $requested_version_major \
128: || { test $LIBUNISTRING_VERSION_MAJOR -eq $requested_version_major \
129: && { test $LIBUNISTRING_VERSION_MINOR -lt $requested_version_minor \
130: || { test $LIBUNISTRING_VERSION_MINOR -eq $requested_version_minor \
131: && test $LIBUNISTRING_VERSION_SUBMINOR -lt $requested_version_subminor
132: }
133: }
134: }
135: ])
136: }
137: }])
138:
139: dnl gl_LIBUNISTRING_ARG_OR_ZERO([ARG], [ORIG]) expands to ARG if it is not the
140: dnl same as ORIG, otherwise to 0.
141: m4_define([gl_LIBUNISTRING_ARG_OR_ZERO], [m4_if([$1], [$2], [0], [$1])])
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>