| 1 | # libunistring-base.m4 serial 5 |
| 2 | dnl Copyright (C) 2010-2014 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])]) |