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