maint: update copyright
[gnulib.git] / m4 / libunistring.m4
1 # libunistring.m4 serial 11
2 dnl Copyright (C) 2009-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 gl_LIBUNISTRING
8 dnl Searches for an installed libunistring.
9 dnl If found, it sets and AC_SUBSTs HAVE_LIBUNISTRING=yes and the LIBUNISTRING
10 dnl and LTLIBUNISTRING variables, sets the LIBUNISTRING_VERSION variable, and
11 dnl augments the CPPFLAGS variable, and #defines HAVE_LIBUNISTRING to 1.
12 dnl Otherwise, it sets and AC_SUBSTs HAVE_LIBUNISTRING=no and LIBUNISTRING and
13 dnl LTLIBUNISTRING to empty.
14
15 dnl Define gl_LIBUNISTRING using AC_DEFUN_ONCE for Autoconf >= 2.64, in order
16 dnl to avoid warnings like
17 dnl "warning: AC_REQUIRE: `gl_LIBUNISTRING' was expanded before it was required".
18 dnl This is tricky because of the way 'aclocal' is implemented:
19 dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN.
20 dnl   Otherwise aclocal's initial scan pass would miss the macro definition.
21 dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions.
22 dnl   Otherwise aclocal would emit many "Use of uninitialized value $1"
23 dnl   warnings.
24 m4_define([gl_libunistring_AC_DEFUN],
25   m4_version_prereq([2.64],
26     [[AC_DEFUN_ONCE(
27         [$1], [$2])]],
28     [m4_ifdef([gl_00GNULIB],
29        [[AC_DEFUN_ONCE(
30            [$1], [$2])]],
31        [[AC_DEFUN(
32            [$1], [$2])]])]))
33 gl_libunistring_AC_DEFUN([gl_LIBUNISTRING],
34 [
35   AC_BEFORE([$0], [gl_LIBUNISTRING_MODULE])
36   AC_BEFORE([$0], [gl_LIBUNISTRING_LIBHEADER])
37   AC_BEFORE([$0], [gl_LIBUNISTRING_LIB_PREPARE])
38
39   m4_ifdef([gl_LIBUNISTRING_OPTIONAL],
40     [
41       AC_MSG_CHECKING([whether included libunistring is requested])
42       AC_ARG_WITH([included-libunistring],
43         [  --with-included-libunistring  use the libunistring parts included here],
44         [gl_libunistring_force_included=$withval],
45         [gl_libunistring_force_included=no])
46       AC_MSG_RESULT([$gl_libunistring_force_included])
47       gl_libunistring_use_included="$gl_libunistring_force_included"
48       if test "$gl_libunistring_use_included" = yes; then
49         dnl Assume that libunistring is not installed until some other macro
50         dnl explicitly invokes gl_LIBUNISTRING_CORE.
51         if test -z "$HAVE_LIBUNISTRING"; then
52           HAVE_LIBUNISTRING=no
53         fi
54         LIBUNISTRING=
55         LTLIBUNISTRING=
56       else
57         gl_LIBUNISTRING_CORE
58         if test $HAVE_LIBUNISTRING = no; then
59           gl_libunistring_use_included=yes
60           LIBUNISTRING=
61           LTLIBUNISTRING=
62         fi
63       fi
64     ],
65     [gl_LIBUNISTRING_CORE])
66 ])
67
68 AC_DEFUN([gl_LIBUNISTRING_CORE],
69 [
70   AC_REQUIRE([AM_ICONV])
71   if test -n "$LIBICONV"; then
72     dnl First, try to link without -liconv. libunistring often depends on
73     dnl libiconv, but we don't know (and often don't need to know) where
74     dnl libiconv is installed.
75     AC_LIB_HAVE_LINKFLAGS([unistring], [],
76       [#include <uniconv.h>], [u8_strconv_from_locale((char*)0);],
77       [no, trying again together with libiconv])
78     if test "$ac_cv_libunistring" != yes; then
79       dnl Second try, with -liconv.
80       dnl We have to erase the cached result of the first AC_LIB_HAVE_LINKFLAGS
81       dnl invocation, otherwise the second one will not be run.
82       unset ac_cv_libunistring
83       glus_save_LIBS="$LIBS"
84       LIBS="$LIBS $LIBICONV"
85       AC_LIB_HAVE_LINKFLAGS([unistring], [],
86         [#include <uniconv.h>], [u8_strconv_from_locale((char*)0);],
87         [no, consider installing GNU libunistring])
88       if test -n "$LIBUNISTRING"; then
89         LIBUNISTRING="$LIBUNISTRING $LIBICONV"
90         LTLIBUNISTRING="$LTLIBUNISTRING $LTLIBICONV"
91       fi
92       LIBS="$glus_save_LIBS"
93     fi
94   else
95     AC_LIB_HAVE_LINKFLAGS([unistring], [],
96       [#include <uniconv.h>], [u8_strconv_from_locale((char*)0);],
97       [no, consider installing GNU libunistring])
98   fi
99   if test $HAVE_LIBUNISTRING = yes; then
100     dnl Determine the installed version.
101     AC_CACHE_CHECK([for libunistring version], [gl_cv_libunistring_version],
102       [AC_COMPUTE_INT([gl_libunistring_hexversion],
103                       [_LIBUNISTRING_VERSION],
104                       [#include <unistring/version.h>])
105        dnl Versions <= 0.9.3 had a hexversion of 0x0009.
106        dnl Use other tests to distinguish them.
107        if test $gl_libunistring_hexversion = 9; then
108          dnl Version 0.9.2 introduced the header <unistring/cdefs.h>.
109          AC_COMPILE_IFELSE(
110            [AC_LANG_PROGRAM([[#include <unistring/cdefs.h>]], [[]])],
111            [gl_cv_libunistring_version092=true],
112            [gl_cv_libunistring_version092=false])
113          if $gl_cv_libunistring_version092; then
114            dnl Version 0.9.3 changed a comment in <unistr.h>.
115            gl_ABSOLUTE_HEADER_ONE([unistr.h])
116            if test -n "$gl_cv_absolute_unistr_h" \
117               && grep 'Copy no more than N units of SRC to DEST.  Return a pointer' $gl_cv_absolute_unistr_h > /dev/null; then
118              dnl Detected version 0.9.3.
119              gl_libunistring_hexversion=2307
120            else
121              dnl Detected version 0.9.2.
122              gl_libunistring_hexversion=2306
123            fi
124          else
125            dnl Version 0.9.1 introduced the type casing_suffix_context_t.
126            AC_COMPILE_IFELSE(
127              [AC_LANG_PROGRAM(
128                 [[#include <unicase.h>
129                   casing_suffix_context_t ct;]],
130                 [[]])],
131              [gl_cv_libunistring_version091=true],
132              [gl_cv_libunistring_version091=false])
133            if $gl_cv_libunistring_version091; then
134              dnl Detected version 0.9.1.
135              gl_libunistring_hexversion=2305
136            else
137              dnl Detected version 0.9.
138              gl_libunistring_hexversion=2304
139            fi
140          fi
141        fi
142        dnl Transform into the usual major.minor.subminor notation.
143        gl_libunistring_major=`expr $gl_libunistring_hexversion / 65536`
144        gl_libunistring_minor=`expr $gl_libunistring_hexversion / 256 % 256`
145        gl_libunistring_subminor=`expr $gl_libunistring_hexversion % 256`
146        gl_cv_libunistring_version="$gl_libunistring_major.$gl_libunistring_minor.$gl_libunistring_subminor"
147       ])
148     LIBUNISTRING_VERSION="$gl_cv_libunistring_version"
149   fi
150 ])