4 +AC_DEFUN([_MM_PRE_INIT], [m4_pattern_forbid([^_?MM_])])
6 +m4_define([_MM_PREREQ],
8 +m4_if(m4_quote(m4_version_compare([$2], [$3])), [-1],
9 + [m4_fatal([$4 requires $1 $3 (version $2 is installed)])])[]dnl
12 +AC_DEFUN([MM_PREREQ],
14 +m4_assert([$# >= 1])[]dnl
15 +AC_REQUIRE([_MM_PRE_INIT])[]dnl
16 +_MM_PREREQ([mm-common], [0.9.2], [$1], m4_defn([AC_PACKAGE_NAME]))[]dnl
22 +m4_define([_MM_CONFIG_DOCTOOL_DIR],
24 +AC_PROVIDE([$0])[]dnl
25 +AC_REQUIRE([PKG_PROG_PKG_CONFIG])[]dnl
27 +AC_MSG_CHECKING([location of documentation utilities])
28 +AS_IF([test "x$MMDOCTOOLDIR" = x],
30 + MMDOCTOOLDIR=`$PKG_CONFIG --variable=doctooldir glibmm-2.4 2>&AS_MESSAGE_LOG_FD`
31 + AS_IF([test "[$]?" -ne 0],
32 + [AC_MSG_ERROR([[not found
33 +The required module glibmm could not be found on this system. If you
34 +are running a binary distribution and the glibmm package is installed,
35 +make sure that any separate development package for glibmm is installed
36 +as well. If you built glibmm yourself, it may be necessary to adjust
37 +the PKG_CONFIG_PATH environment variable for pkg-config to find it.
40 +AC_MSG_RESULT([$MMDOCTOOLDIR])[]dnl
43 +AC_DEFUN([MM_CONFIG_DOCTOOL_DIR],
45 +AC_REQUIRE([_MM_PRE_INIT])[]dnl
46 +AC_REQUIRE([MM_CHECK_GNU_MAKE])[]dnl
47 +m4_ifval([$1], [MMDOCTOOLDIR='[$]{top_srcdir}/$1'], [AC_REQUIRE([_MM_CONFIG_DOCTOOL_DIR])])
48 +AC_SUBST([MMDOCTOOLDIR])[]dnl
51 +m4_define([_MM_ARG_ENABLE_DOCUMENTATION],
53 +AC_PROVIDE([$0])[]dnl
55 +AC_ARG_VAR([DOT], [path to dot utility])[]dnl
56 +AC_ARG_VAR([DOXYGEN], [path to Doxygen utility])[]dnl
57 +AC_ARG_VAR([XSLTPROC], [path to xsltproc utility])[]dnl
59 +AC_PATH_PROG([DOT], [dot], [dot])
60 +AC_PATH_PROG([DOXYGEN], [doxygen], [doxygen])
61 +AC_PATH_PROG([XSLTPROC], [xsltproc], [xsltproc])
63 +AC_ARG_ENABLE([documentation],
64 + [AS_HELP_STRING([--disable-documentation],
65 + [do not build or install the documentation])],
66 + [ENABLE_DOCUMENTATION=$enableval],
67 + [ENABLE_DOCUMENTATION=auto])
68 +AS_IF([test "x$ENABLE_DOCUMENTATION" != xno],
71 + AS_IF([test "x$MMDOCTOOLDIR" = x], [mm_err='dnl
72 +The glibmm module is available, but the installation of glibmm on this
73 +machine is missing the shared documentation utilities of the GNOME C++
74 +bindings. It may be necessary to upgrade to a more recent release of
75 +glibmm in order to build '$PACKAGE_NAME' and install the documentation.'],
76 + [test "x$PERL" = xperl], [mm_err='Perl is required for installing the documentation.'],
77 + [test "x$USE_MAINTAINER_MODE" != xno],
79 + test "x$DOT" != xdot || mm_err=' dot'
80 + test "x$DOXYGEN" != xdoxygen || mm_err="$mm_err doxygen"
81 + test "x$XSLTPROC" != xxsltproc || mm_err="$mm_err xsltproc"
82 + test -z "$mm_err" || mm_err='The documentation cannot be generated because
83 +not all of the required tools are available:'$mm_err
85 + AS_IF([test -z "$mm_err"], [ENABLE_DOCUMENTATION=yes],
86 + [test "x$ENABLE_DOCUMENTATION" = xyes], [AC_MSG_FAILURE([[$mm_err]])],
87 + [ENABLE_DOCUMENTATION=no; AC_MSG_WARN([[$mm_err]])])
89 +AM_CONDITIONAL([ENABLE_DOCUMENTATION], [test "x$ENABLE_DOCUMENTATION" = xyes])
90 +AC_SUBST([DOXYGEN_TAGFILES], [[]])
91 +AC_SUBST([DOCINSTALL_FLAGS], [[]])[]dnl
94 +AC_DEFUN([MM_ARG_ENABLE_DOCUMENTATION],
96 +AC_BEFORE([$0], [MM_ARG_WITH_TAGFILE_DOC])[]dnl
97 +AC_REQUIRE([_MM_PRE_INIT])[]dnl
98 +AC_REQUIRE([MM_CONFIG_DOCTOOL_DIR])[]dnl
99 +AC_REQUIRE([MM_PATH_PERL])[]dnl
100 +AC_REQUIRE([_MM_ARG_ENABLE_DOCUMENTATION])[]dnl
103 +m4_define([_MM_TR_URI],
105 +[`expr "X$1" : 'X\(.*[^\\/]\)[\\/]*' 2>&]AS_MESSAGE_LOG_FD[ |]dnl
106 +[ sed 's|[\\]|/|g;s| |%20|g;s|^/|file:///|;s|^.:/|file:///&|' 2>&]AS_MESSAGE_LOG_FD[`]dnl
109 +m4_define([_MM_ARG_WITH_TAGFILE_DOC],
111 + AC_MSG_CHECKING([for $1 documentation])
112 + AC_ARG_WITH([$1-doc],
113 + [AS_HELP_STRING([[--with-$1-doc=[TAGFILE@]HTMLREFDIR]],
114 + [Link to external $1 documentation]m4_ifval([$4], [[ [auto]]]))],
116 + mm_htmlrefdir=`[expr "X@$withval" : '.*@\(.*\)' 2>&]AS_MESSAGE_LOG_FD`
117 + mm_tagname=`[expr "X/$withval" : '[^@]*[\\/]\([^\\/@]*\)@' 2>&]AS_MESSAGE_LOG_FD`
118 + mm_tagpath=`[expr "X$withval" : 'X\([^@]*\)@' 2>&]AS_MESSAGE_LOG_FD`
119 + test "x$mm_tagname" != x || mm_tagname="$3"
120 + test "x$mm_tagpath" != x || mm_tagpath=$mm_tagname[]dnl
124 + mm_tagpath=$mm_tagname[]dnl
126 + # Prepend working direcory if the tag file path starts with ./ or ../
127 + AS_CASE([$mm_tagpath], [[.[\\/]*|..[\\/]*]], [mm_tagpath=`pwd`/$mm_tagpath])
130 + # If no local directory was specified, get the default from the .pc file
131 + AS_IF([test "x$mm_htmlrefdir" = x],
133 + mm_htmlrefdir=`$PKG_CONFIG --variable=htmlrefdir "$4" 2>&AS_MESSAGE_LOG_FD`dnl
135 + # If the user specified a Web URL, allow it to override the public location
136 + AS_CASE([$mm_htmlrefdir], [[http://*|https://*]], [mm_htmlrefpub=$mm_htmlrefdir],
138 + mm_htmlrefpub=`$PKG_CONFIG --variable=htmlrefpub "$4" 2>&AS_MESSAGE_LOG_FD`
139 + test "x$mm_htmlrefpub" != x || mm_htmlrefpub=$mm_htmlrefdir
140 + test "x$mm_htmlrefdir" != x || mm_htmlrefdir=$mm_htmlrefpub
142 + # The user-supplied tag-file name takes precedence if it includes the path
143 + AS_CASE([$mm_tagpath], [[*[\\/]*]],,
145 + mm_doxytagfile=`$PKG_CONFIG --variable=doxytagfile "$4" 2>&AS_MESSAGE_LOG_FD`
146 + test "x$mm_doxytagfile" = x || mm_tagpath=$mm_doxytagfile
148 + # Remove trailing slashes and translate to URI
149 + mm_htmlrefpub=_MM_TR_URI([$mm_htmlrefpub])
151 + mm_htmlrefdir=_MM_TR_URI([$mm_htmlrefdir])
153 + AC_MSG_RESULT([$mm_tagpath@$mm_htmlrefdir])
155 + AS_IF([test "x$USE_MAINTAINER_MODE" != xno && test ! -f "$mm_tagpath"],
156 + [AC_MSG_WARN([Doxygen tag file $3 not found])])
157 + AS_IF([test "x$mm_htmlrefdir" = x],
158 + [AC_MSG_WARN([Location of external $1 documentation not set])],
159 + [AS_IF([test "x$DOCINSTALL_FLAGS" = x],
160 + [DOCINSTALL_FLAGS="-l '$mm_tagname@$mm_htmlrefdir/'"],
161 + [DOCINSTALL_FLAGS="$DOCINSTALL_FLAGS -l '$mm_tagname@$mm_htmlrefdir/'"])])
163 + AS_IF([test "x$mm_$2" = x], [mm_val=$mm_tagpath], [mm_val="$mm_tagpath=$mm_$2"])
164 + AS_IF([test "x$DOXYGEN_TAGFILES" = x],
165 + [DOXYGEN_TAGFILES=[\]"$mm_val[\]"],
166 + [DOXYGEN_TAGFILES="$DOXYGEN_TAGFILES "[\]"$mm_val[\]"])[]dnl
169 +AC_DEFUN([MM_ARG_WITH_TAGFILE_DOC],
171 +m4_assert([$# >= 1])[]dnl
172 +m4_ifval([$2], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])])[]dnl
173 +AC_REQUIRE([MM_CONFIG_DOCTOOL_DIR])[]dnl
174 +AC_REQUIRE([_MM_ARG_ENABLE_DOCUMENTATION])[]dnl
176 +AS_IF([test "x$ENABLE_DOCUMENTATION" != xno],
177 + [_MM_ARG_WITH_TAGFILE_DOC(m4_quote(m4_bpatsubst([$1], [[+]*\([-+][0123456789]\|[._]\).*$])),
178 + [htmlref]m4_ifval([$2], [[pub]], [[dir]]), [$1], [$2])])[]dnl
184 +m4_define([_MM_INIT_MODULE_VERSION],
187 +[AC_SUBST([$2][_MAJOR_VERSION], [$3])
188 +AC_DEFINE([$2][_MAJOR_VERSION], [$3], [Major version number of $1.])
191 +[AC_SUBST([$2][_MINOR_VERSION], [$4])
192 +AC_DEFINE([$2][_MINOR_VERSION], [$4], [Minor version number of $1.])
195 +[AC_SUBST([$2][_MICRO_VERSION], [$5])
196 +AC_DEFINE([$2][_MICRO_VERSION], [$5], [Micro version number of $1.])
200 +m4_define([_MM_INIT_MODULE_SUBST],
202 +AC_SUBST([$5][_MODULE_NAME], ['$1'])
203 +AC_SUBST([$5][_VERSION], ['$2'])
205 +[AC_SUBST([$5][_API_VERSION], ['$4'])
207 +_MM_INIT_MODULE_VERSION([$3], [$5], m4_bpatsubst([$2], [[^0123456789]+], [,]))[]dnl
210 +m4_define([_MM_INIT_MODULE_BASENAME],
211 + [_MM_INIT_MODULE_SUBST([$1], [$2], [$3], [$4],
212 + m4_quote(AS_TR_CPP(m4_quote(m4_translit([$3], [+], [X])))))])
214 +AC_DEFUN([MM_INIT_MODULE],
216 +m4_assert([$# >= 1])[]dnl
217 +AC_REQUIRE([_MM_PRE_INIT])[]dnl
218 +AC_REQUIRE([MM_CHECK_GNU_MAKE])[]dnl
219 +_MM_INIT_MODULE_BASENAME([$1],
220 + m4_quote(m4_ifval([$2], [$2], m4_defn([AC_PACKAGE_VERSION]))),
221 + m4_quote(m4_bpatsubst([$1], [[-.0123456789]+$])),
222 + m4_quote(m4_bregexp([$1], [-?\([.0123456789]+\)$], [\1])))[]dnl
228 +m4_define([_MM_CHECK_GNU_MAKE],
230 +AC_PROVIDE([$0])[]dnl
231 +AC_MSG_CHECKING([whether [$]{MAKE-make} supports GNU make features])
232 +cat >conftest.make <<'_MMEOF'
233 +override reverse = [$](2)[$](subst ,, )[$](1)
234 +override result := [$](word 2,[$](call reverse,success,failure))
235 +all: ; test '[$](result)' = success
238 +AS_IF([[$]{MAKE-make} -f conftest.make >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD],
239 + [mm_gnu_make=yes], [mm_gnu_make=no])
241 +AC_MSG_RESULT([$mm_gnu_make])
242 +AS_IF([test "x$mm_gnu_make" != xyes],
243 + [AC_MSG_FAILURE([[The GNU make program is required to build $PACKAGE_NAME.]])])[]dnl
246 +AC_DEFUN([MM_CHECK_GNU_MAKE],
248 +AC_REQUIRE([_MM_PRE_INIT])[]dnl
249 +AC_REQUIRE([_MM_CHECK_GNU_MAKE])[]dnl
252 +m4_define([_MM_PATH_PERL],
254 +AC_PROVIDE([$0])[]dnl
255 +AC_ARG_VAR([PERL], [path to Perl interpreter])[]dnl
256 +AC_PATH_PROG([PERL], [perl], [perl])[]dnl
259 +AC_DEFUN([MM_PATH_PERL],
261 +AC_REQUIRE([_MM_PRE_INIT])[]dnl
262 +AC_REQUIRE([_MM_PATH_PERL])[]dnl
265 +m4_define([_MM_CHECK_PERL],
267 +AS_IF([$PERL -e "require v$1; exit 0;" >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD],
268 + [$2], m4_ifval([$2$3], [[$3]],
269 + [[AC_MSG_FAILURE([[At least Perl ]$1[ is required to build $PACKAGE_NAME.]])]]))[]dnl
272 +AC_DEFUN([MM_CHECK_PERL],
274 +AC_REQUIRE([_MM_PRE_INIT])[]dnl
275 +AC_REQUIRE([_MM_PATH_PERL])[]dnl
276 +_MM_CHECK_PERL(m4_ifval([$1], [[$1]], [[5.6.0]]), [$2], [$3])[]dnl
279 +AC_DEFUN([MM_PKG_CONFIG_SUBST],
281 +m4_assert([$# >= 2])[]dnl
282 +AC_REQUIRE([_MM_PRE_INIT])[]dnl
283 +AC_REQUIRE([PKG_PROG_PKG_CONFIG])[]dnl
284 +AC_MSG_CHECKING([for $1])
286 +AS_IF([test -z "[$]{$1+set}"],
287 + [$1=`$PKG_CONFIG $2 2>&AS_MESSAGE_LOG_FD`
288 + AS_IF([test "[$]?" -eq 0], [$3], [$4])])
290 +AC_MSG_RESULT([[$]$1])
297 +m4_define([_MM_ARG_ENABLE_WARNINGS_OPTION],
299 +AC_PROVIDE([$0])[]dnl
300 +AC_ARG_ENABLE([warnings],
301 + [AS_HELP_STRING([[--enable-warnings[=min|max|fatal|no]]],
302 + [set compiler pedantry level [default=min]])],
303 + [mm_enable_warnings=$enableval],
304 + [mm_enable_warnings=min])[]dnl
307 +AC_DEFUN([MM_ARG_ENABLE_WARNINGS],
309 +m4_assert([$# >= 3])[]dnl
310 +AC_REQUIRE([_MM_PRE_INIT])[]dnl
311 +AC_REQUIRE([_MM_ARG_ENABLE_WARNINGS_OPTION])[]dnl
313 +AS_CASE([$ac_compile],
314 + [[*'$CXXFLAGS '*]], [mm_lang='C++' mm_cc=$CXX mm_conftest="conftest.[$]{ac_ext-cc}"],
315 + [[*'$CFLAGS '*]], [mm_lang=C mm_cc=$CC mm_conftest="conftest.[$]{ac_ext-c}"],
316 + [AC_MSG_ERROR([[current language is neither C nor C++]])])
318 +AC_MSG_CHECKING([which $mm_lang compiler warning flags to use])
319 +m4_ifval([$4], [mm_deprecation_flags=
322 +AS_CASE([$mm_enable_warnings],
323 + [no], [mm_warning_flags=],
324 + [max], [mm_warning_flags="$3"],
325 + [fatal], [mm_warning_flags="$3 -Werror"[]m4_ifval([$4], [
326 + for mm_prefix in $4
328 + mm_deprecation_flags="$mm_deprecation_flags-D[$]{mm_prefix}_DISABLE_DEPRECATED "
330 + [mm_warning_flags="$2"])
332 +AS_IF([test "x$mm_warning_flags" != x],
334 + # Keep in mind that the dummy source must be devoid of any
335 + # problems that might cause diagnostics.
336 + AC_LANG_CONFTEST([AC_LANG_SOURCE([[
337 +int main(int argc, char** argv) { return (argv != 0) ? argc : 0; }
339 + for mm_flag in $mm_warning_flags
341 + # Test whether the compiler accepts the flag. Look at standard output,
342 + # since GCC only shows a warning message if an option is not supported.
343 + mm_cc_out=`$mm_cc $mm_tested_flags $mm_flag -c "$mm_conftest" 2>&1 || echo failed`
344 + rm -f "conftest.[$]{OBJEXT-o}"
346 + AS_IF([test "x$mm_cc_out" = x],
347 + [AS_IF([test "x$mm_tested_flags" = x],
348 + [mm_tested_flags=$mm_flag],
349 + [mm_tested_flags="$mm_tested_flags $mm_flag"])],
350 +[cat <<_MMEOF >&AS_MESSAGE_LOG_FD
355 + rm -f "$mm_conftest"
357 +mm_all_flags=m4_ifval([$4], [$mm_deprecation_flags])$mm_tested_flags
358 +AC_SUBST([$1], [$mm_all_flags])
360 +test "x$mm_all_flags" != x || mm_all_flags=none
361 +AC_MSG_RESULT([$mm_all_flags])[]dnl
364 +m4_include([build/cxx.m4])
365 +m4_include([build/cxx_std.m4])
366 +m4_include([build/libtool.m4])
367 +m4_include([build/ltoptions.m4])
368 +m4_include([build/ltsugar.m4])
369 +m4_include([build/ltversion.m4])
370 +m4_include([build/lt~obsolete.m4])