Commit | Line | Data |
---|---|---|
6f32e5c7 | 1 | # libunistring-base.m4 serial 5 |
5e69ceb7 | 2 | dnl Copyright (C) 2010-2014 Free Software Foundation, Inc. |
a927b6c1 LC |
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 | ||
6f32e5c7 LC |
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. | |
a927b6c1 LC |
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 | |
6f32e5c7 | 19 | dnl functions defined in Module (even if the sources of Module itself do not |
a927b6c1 LC |
20 | dnl change). |
21 | ||
6f32e5c7 | 22 | AC_DEFUN([gl_LIBUNISTRING_MODULE], |
a927b6c1 LC |
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. | |
6f32e5c7 LC |
27 | AM_CONDITIONAL(AS_TR_CPP([LIBUNISTRING_COMPILE_$2]), |
28 | [gl_LIBUNISTRING_VERSION_CMP([$1])]) | |
a927b6c1 LC |
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 | |
6f32e5c7 LC |
39 | dnl (via gl_LIBUNISTRING_MODULE above) that are not contained in the installed |
40 | dnl version. | |
a927b6c1 LC |
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. | |
6f32e5c7 | 53 | if gl_LIBUNISTRING_VERSION_CMP([$1]); then |
a927b6c1 LC |
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 | [ | |
6f32e5c7 LC |
65 | dnl Ensure that HAVE_LIBUNISTRING is fully determined at this point. |
66 | m4_ifdef([gl_LIBUNISTRING], [AC_REQUIRE([gl_LIBUNISTRING])]) | |
67 | ||
a927b6c1 LC |
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 | } | |
6f32e5c7 | 137 | }]) |
a927b6c1 LC |
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])]) |