tizen 2.4 release
[external/libjson-glib.git] / configure.ac
1 # bump micro_version to the next even number for each point release
2 # bump micro_version to the next odd number after each release
3 m4_define([json_major_version], [1])
4 m4_define([json_minor_version], [0])
5 m4_define([json_micro_version], [2])
6
7 m4_define([json_version], [json_major_version.json_minor_version.json_micro_version])
8
9 m4_define([json_release_status],
10           [m4_if(m4_eval(json_micro_version % 2), [1], [git],
11                  [m4_if(m4_eval(json_minor_version % 2), [1], [snapshot],
12                                                               [release])])])
13
14 # bump up by 1 for every micro release with no API changes, otherwise
15 # set to 0. after release, bump up by 1
16 m4_define([json_interface_age], [2])
17 m4_define([json_binary_age], [m4_eval(100 * json_minor_version + json_micro_version)])
18
19 m4_define([lt_current], [m4_eval(100 * json_minor_version + json_micro_version - json_interface_age)])
20 m4_define([lt_revision], [json_interface_age])
21 m4_define([lt_age], [m4_eval(json_binary_age - json_interface_age)])
22
23 m4_define([glib_req_version], [2.37.6])
24
25 AC_PREREQ([2.63])
26
27 AC_INIT([json-glib],
28         [json_version],
29         [http://bugzilla.gnome.org/enter_bug.cgi?product=json-glib],
30         [json-glib],
31         [http://live.gnome.org/JsonGlib])
32
33 AC_CONFIG_HEADER([config.h])
34 AC_CONFIG_SRCDIR([json-glib/json-glib.h])
35 AC_CONFIG_AUX_DIR([build])
36 AC_CONFIG_MACRO_DIR([build/autotools])
37
38 AM_INIT_AUTOMAKE([1.11 no-define foreign -Wno-portability dist-xz no-dist-gzip tar-ustar])
39
40 AM_SILENT_RULES([yes])
41 AM_PATH_GLIB_2_0
42 AM_PROG_CC_C_O
43
44 LT_PREREQ([2.2.6])
45 LT_INIT([disable-static])
46
47 # Honor aclocal flags
48 ACLOCAL="$ACLOCAL $ACLOCAL_FLAGS"
49
50 dnl === Versioning ============================================================
51
52 JSON_MAJOR_VERSION=json_major_version
53 JSON_MINOR_VERSION=json_minor_version
54 JSON_MICRO_VERSION=json_micro_version
55 JSON_VERSION=json_version
56 JSON_RELEASE_STATUS=json_release_status
57 AC_SUBST(JSON_MAJOR_VERSION)
58 AC_SUBST(JSON_MICRO_VERSION)
59 AC_SUBST(JSON_MINOR_VERSION)
60 AC_SUBST(JSON_VERSION)
61 AC_SUBST(JSON_RELEASE_STATUS)
62
63 JSON_LT_CURRENT=lt_current
64 JSON_LT_REVISION=lt_revision
65 JSON_LT_AGE=lt_age
66 JSON_LT_VERSION="$JSON_LT_CURRENT:$JSON_LT_REVISION:$JSON_LT_AGE"
67 JSON_LT_LDFLAGS="-version-info $JSON_LT_VERSION"
68
69 dnl === Platform checks =======================================================
70
71 platform_linux=no
72 platform_win32=no
73
74 AC_CANONICAL_HOST
75 AC_MSG_CHECKING([if building for some Win32 platform])
76 AS_CASE([$host],
77
78         [*-*-mingw*|*-*-cygwin*],
79         [
80           JSON_LT_LDFLAGS="$JSON_LT_LDFLAGS -no-undefined"
81           platform_win32=yes
82         ],
83
84         [*-*-linux*],
85         [
86           platform_linux=yes
87         ],
88
89         []
90 )
91 AC_MSG_RESULT([$platform_win32])
92
93 AM_CONDITIONAL(OS_LINUX, [test "$platform_linux" = "yes"])
94 AM_CONDITIONAL(OS_WIN32, [test "$platform_win32" = "yes"])
95
96 # Check for -Bsymbolic-functions to avoid intra-library PLT jumps
97 AC_ARG_ENABLE([Bsymbolic],
98               [AS_HELP_STRING([--disable-Bsymbolic],
99                               [Avoid linking with -Bsymbolic])],
100               [],
101               [
102                 saved_LDFLAGS="${LDFLAGS}"
103                 AC_MSG_CHECKING([for -Bsymbolic-functions linker flag])
104                 LDFLAGS=-Wl,-Bsymbolic-functions
105                 AC_TRY_LINK([], [int main (void) { return 0; }],
106                             [
107                               AC_MSG_RESULT([yes])
108                               enable_Bsymbolic=yes
109                             ],
110                             [
111                               AC_MSG_RESULT([no])
112                               enable_Bsymbolic=no
113                             ])
114                 LDFLAGS="${saved_LDFLAGS}"
115               ])
116
117 AS_IF([test "x$enable_Bsymbolic" = "xyes"], [JSON_LINK_FLAGS=-Wl[,]-Bsymbolic-functions])
118 JSON_LT_LDFLAGS="$JSON_LT_LDFLAGS $JSON_LINK_FLAGS"
119
120 AC_SUBST(JSON_LT_LDFLAGS)
121
122 dnl === Visibility ============================================================
123
124 JSON_HIDDEN_VISIBILITY_CFLAGS=""
125 case "$host" in
126   *-*-mingw*)
127     dnl on mingw32 we do -fvisibility=hidden and __declspec(dllexport)
128     AC_DEFINE([_JSON_EXTERN], [__attribute__((visibility("default"))) __declspec(dllexport) extern],
129               [defines how to decorate public symbols while building])
130     CFLAGS="${CFLAGS} -fvisibility=hidden"
131     ;;
132   *)
133     dnl on other compilers, check if we can do -fvisibility=hidden
134     SAVED_CFLAGS="${CFLAGS}"
135     CFLAGS="-fvisibility=hidden"
136     AC_MSG_CHECKING([for -fvisibility=hidden compiler flag])
137     AC_TRY_COMPILE([], [int main (void) { return 0; }],
138                    AC_MSG_RESULT(yes)
139                    enable_fvisibility_hidden=yes,
140                    AC_MSG_RESULT(no)
141                    enable_fvisibility_hidden=no)
142     CFLAGS="${SAVED_CFLAGS}"
143
144     AS_IF([test "${enable_fvisibility_hidden}" = "yes"], [
145       AC_DEFINE([_JSON_EXTERN], [__attribute__((visibility("default"))) extern],
146                 [defines how to decorate public symbols while building])
147       JSON_HIDDEN_VISIBILITY_CFLAGS="-fvisibility=hidden"
148     ])
149     ;;
150 esac
151 AC_SUBST(JSON_HIDDEN_VISIBILITY_CFLAGS)
152
153 dnl === Dependencies ==========================================================
154
155 GLIB_PREFIX="`$PKG_CONFIG --variable=prefix glib-2.0`"
156 AC_SUBST(GLIB_PREFIX)
157
158 PKG_CHECK_MODULES(JSON, [gobject-2.0 >= glib_req_version gio-2.0])
159
160 dnl === Enable debug level ====================================================
161
162 m4_define([debug_default], [m4_if(m4_eval(json_minor_version % 2), [1], [yes], [minimum])])
163
164 AC_ARG_ENABLE([debug],
165               [AS_HELP_STRING([--enable-debug=@<:@no/minimum/yes@:>@],
166                               [turn on debugging @<:@default=]debug_default[@:>@])],
167               [],
168               [enable_debug=debug_default])
169
170 AS_CASE([$enable_debug],
171
172         [yes],
173         [
174           test "$cflags_set" = set || CFLAGS="$CFLAGS -g"
175           JSON_DEBUG_CFLAGS="-DJSON_ENABLE_DEBUG"
176         ],
177
178         [minimum],
179         [
180           JSON_DEBUG_CFLAGS="-DJSON_ENABLE_DEBUG -DG_DISABLE_CAST_CHECKS"
181         ],
182
183         [no],
184         [
185           JSON_DEBUG_CFLAGS="-DG_DISABLE_ASSERT -DG_DISABLE_CHECKS -DG_DISABLE_CAST_CHECKS"
186         ],
187
188         [AC_MSG_ERROR([Unknown argument to --enable-debug])]
189 )
190
191 AC_SUBST(JSON_DEBUG_CFLAGS)
192
193 dnl === Enable strict compiler flags ==========================================
194
195 # use strict compiler flags only on development releases
196 m4_define([maintainer_flags_default], [m4_if(m4_eval(json_minor_version % 2), [1], [yes], [no])])
197 AC_ARG_ENABLE([maintainer-flags],
198               [AS_HELP_STRING([--enable-maintainer-flags=@<:@no/yes@:>@],
199                               [Use strict compiler flags @<:@default=]maintainer_flags_default[@:>@])],
200               [],
201               [enable_maintainer_flags=maintainer_flags_default])
202
203 AS_IF([test "x$enable_maintainer_flags" = "xyes" && test "x$GCC" = "xyes"],
204       [
205         AS_COMPILER_FLAGS([MAINTAINER_CFLAGS],
206                           ["-Wall -Wshadow -Wcast-align
207                             -Wno-uninitialized -Wformat -Wformat-security
208                             -Wno-strict-aliasing -Winit-self
209                             -Wempty-body -Wdeclaration-after-statement
210                             -Wno-strict-aliasing"])
211       ]
212 )
213 MAINTAINER_CFLAGS="${MAINTAINER_CFLAGS#*  }"
214 AC_SUBST([MAINTAINER_CFLAGS])
215
216 dnl === Test suite ============================================================
217
218 GLIB_TESTS
219
220 dnl === Test coverage =========================================================
221
222 AC_ARG_ENABLE([gcov],
223               [AS_HELP_STRING([--enable-gcov], [Enable gcov])],
224               [use_gcov=$enableval],
225               [use_gcov=no])
226
227 AS_IF([test "x$use_gcov" = "xyes"],
228       [
229         dnl we need gcc:
230         AS_IF([test "$GCC" != "yes"], [AC_MSG_ERROR([GCC is required for --enable-gcov])])
231
232         dnl Check if ccache is being used
233         AC_CHECK_PROG(SHTOOL, shtool, shtool)
234         AS_CASE([`$SHTOOL path $CC`],
235                 [*ccache*], [gcc_ccache=yes],
236                 [gcc_ccache=no])
237
238         if test "$gcc_ccache" = "yes" && (test -z "$CCACHE_DISABLE" || test "$CCACHE_DISABLE" != "1"); then
239           AC_MSG_ERROR([ccache must be disabled when --enable-gcov option is used. You can disable ccache by setting environment variable CCACHE_DISABLE=1.])
240         fi
241
242         ltp_version_list="1.6 1.7 1.8 1.9 1.10"
243         AC_CHECK_PROG(LTP, lcov, lcov)
244         AC_CHECK_PROG(LTP_GENHTML, genhtml, genhtml)
245
246         if test "$LTP"; then
247           AC_CACHE_CHECK([for ltp version], json_cv_ltp_version,
248                          [
249                            json_cv_ltp_version=invalid
250                            ltp_version=`$LTP -v 2>/dev/null | $SED -e 's/^.* //'`
251                            for ltp_check_version in $ltp_version_list; do
252                              if test "$ltp_version" = "$ltp_check_version"; then
253                                json_cv_ltp_version="$ltp_check_version (ok)"
254                              fi
255                            done
256                          ])
257         else
258           ltp_msg="To enable code coverage reporting you must have one of the following LTP versions installed: $ltp_version_list"
259           AC_MSG_ERROR([$ltp_msg])
260         fi
261
262         case $json_cv_ltp_version in
263           ""|invalid[)]
264           ltp_msg="You must have one of the following versions of LTP: $ltp_version_list (found: $ltp_version)."
265           AC_MSG_ERROR([$ltp_msg])
266           LTP="exit 0;"
267           ;;
268         esac
269
270         if test -z "$LTP_GENHTML"; then
271           AC_MSG_ERROR([Could not find genhtml from the LTP package])
272         fi
273
274         AC_DEFINE(HAVE_GCOV, 1, [Whether you have gcov])
275
276         dnl Remove all optimization flags from CFLAGS
277         changequote({,})
278         CFLAGS=`echo "$CFLAGS" | $SED -e 's/-O[0-9]*//g'`
279         JSON_CFLAGS=`echo "$JSON_CFLAGS" | $SED -e 's/-O[0-9]*//g'`
280         changequote([,])
281
282         dnl Define the special gcc flags
283         JSON_GCOV_CFLAGS="-O0 -fprofile-arcs -ftest-coverage"
284         JSON_GCOV_LDADD="-lgcov"
285
286         AC_SUBST(JSON_GCOV_CFLAGS)
287         AC_SUBST(JSON_GCOV_LDADD)
288
289         JSON_CFLAGS="$JSON_CFLAGS $CLUTTER_GCOV_CFLAGS"
290         JSON_LIBS="$JSON_LIBS $CLUTTER_GCOV_LDADD"
291       ])
292
293 AM_CONDITIONAL(ENABLE_GCOV, test "x$use_gcov" = "xyes")
294
295 dnl === Documentation =========================================================
296
297 # GTK_DOC_CHECK([1.20], [--flavour no-tmpl])
298
299 AC_ARG_ENABLE([man,],
300               [AS_HELP_STRING([--enable-man], [generate man pages @<:@default=auto@:>@])],
301               [],
302               [enable_man=maybe])
303
304 AS_IF([test "$enable_man" != no], [
305   AC_PATH_PROG([XSLTPROC], [xsltproc])
306   AS_IF([test -z "$XSLTPROC"], [
307     AS_IF([test "$enable_man" = yes], [
308       AC_MSG_ERROR([xsltproc is required for --enable-man])
309     ])
310     enable_man=no
311   ])
312 ])
313
314 AS_IF([ test "$enable_man" != no ], [
315   dnl check for DocBook DTD in the local catalog
316   JH_CHECK_XML_CATALOG([-//OASIS//DTD DocBook XML V4.1.2//EN],
317      [DocBook XML DTD V4.1.2], [have_docbook_dtd=yes], [have_docbook_dtd=no])
318   AS_IF([test "$have_docbook_dtd" != yes], [
319     AS_IF([test "$enable_man" = yes ], [
320       AC_MSG_ERROR([DocBook DTD is required for --enable-man])
321     ])
322     enable_man=no
323   ])
324 ])
325
326 AS_IF([test "$enable_man" != no], [
327   dnl check for DocBook XSL stylesheets in the local catalog
328   JH_CHECK_XML_CATALOG([http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl],
329      [DocBook XSL Stylesheets], [have_docbook_style=yes],[have_docbook_style=no])
330   AS_IF([ test "$have_docbook_dtd" != yes ], [
331     AS_IF([ test "$enable_man" = yes ], [
332       AC_MSG_ERROR([DocBook XSL Stylesheets are required for --enable-man])
333     ])
334     enable_man=no
335   ])
336 ])
337
338 AM_CONDITIONAL(ENABLE_MAN, test "$enable_man" != no)
339
340 AC_MSG_CHECKING([whether to generate man pages])
341 AS_IF([ test "$enable_man" != no ], [
342   enable_man=yes
343   AC_MSG_RESULT([yes])
344 ], [
345   AC_MSG_RESULT([no])
346 ])
347
348 dnl === Introspection =========================================================
349
350 GOBJECT_INTROSPECTION_CHECK([0.9.5])
351
352 dnl === Localization ==========================================================
353
354 AM_GNU_GETTEXT_VERSION([0.18])
355 AM_GNU_GETTEXT([external])
356
357 GETTEXT_PACKAGE="json-glib-1.0"
358 AC_SUBST(GETTEXT_PACKAGE)
359 AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE],
360                    ["$GETTEXT_PACKAGE"],
361                    [The prefix for our gettext translation domains.])
362 AS_ALL_LINGUAS
363
364 dnl === Output ================================================================
365
366 AC_SUBST(JSON_CFLAGS)
367 AC_SUBST(JSON_LIBS)
368
369 AC_CONFIG_FILES([
370         Makefile
371
372         build/Makefile
373         build/autotools/Makefile
374         build/win32/Makefile
375         build/win32/config.h.win32
376         build/win32/vs9/Makefile
377         build/win32/vs10/Makefile
378
379         json-glib/Makefile
380         json-glib/json-glib.pc
381         json-glib/json-version.h
382         json-glib/tests/Makefile
383
384         po/Makefile.in
385 ])
386
387 AC_OUTPUT
388
389 dnl === Summary ===============================================================
390
391 echo ""
392 echo " Json-GLib - $VERSION (${JSON_RELEASE_STATUS})"
393 echo ""
394 echo " • Prefix: ${prefix}"
395 echo ""
396 echo " • Debug level: ${enable_debug}"
397 echo " • Compiler flags: ${CFLAGS} ${MAINTAINER_CFLAGS}"
398 echo ""
399 echo " • API reference: ${enable_gtk_doc}"
400 echo " • Manual pages: ${enable_man}"
401 echo ""
402 echo " • Install tests: ${ENABLE_INSTALLED_TESTS}"
403 echo " • Build introspection data: ${enable_introspection}"
404 echo " • Enable test coverage: ${use_gcov}"
405 echo ""