1# Process this file with autoconf to create configure.
2
3AC_PREREQ([2.65])
4
5# ====================
6# Version informations
7# ====================
8m4_define([libodfgen_version_major],[0])
9m4_define([libodfgen_version_minor],[1])
10m4_define([libodfgen_version_micro],[8])
11m4_define([libodfgen_version],[libodfgen_version_major.libodfgen_version_minor.libodfgen_version_micro])
12
13# =============
14# Automake init
15# =============
16AC_INIT([libodfgen],[libodfgen_version])
17AC_CONFIG_MACRO_DIR([m4])
18AC_CONFIG_HEADER([config.h])
19AM_INIT_AUTOMAKE([1.11 foreign dist-xz dist-bzip2])
20AM_SILENT_RULES([yes])
21AC_LANG([C++])
22
23# ===========================
24# Find required base packages
25# ===========================
26AC_PROG_CC
27AC_PROG_CPP
28AC_PROG_CXX
29AC_PROG_INSTALL
30AC_PROG_LN_S
31AC_PROG_MAKE_SET
32LT_INIT([win32-dll disable-static pic-only])
33AC_CANONICAL_HOST
34PKG_PROG_PKG_CONFIG([0.20])
35
36AX_CXX_COMPILE_STDCXX_11
37AX_GCC_FUNC_ATTRIBUTE([format])
38
39# ====================
40# Find additional apps
41# ====================
42PKG_CHECK_MODULES([REVENGE],[
43    librevenge-0.0
44    librevenge-stream-0.0
45])
46AC_SUBST([REVENGE_CFLAGS])
47AC_SUBST([REVENGE_LIGS])
48
49PKG_CHECK_MODULES([XML], [libxml-2.0])
50
51# =================================
52# Libtool/Version Makefile settings
53# =================================
54AC_SUBST(LIBODFGEN_MAJOR_VERSION, [libodfgen_version_major])
55AC_SUBST(LIBODFGEN_MINOR_VERSION, [libodfgen_version_minor])
56AC_SUBST(LIBODFGEN_MICRO_VERSION, [libodfgen_version_micro])
57# AC_SUBST(LT_RELEASE, [libodfgen_version_major.libodfgen_version_minor])
58LT_CURRENT=`expr 100 '*' libodfgen_version_major + libodfgen_version_minor`
59# For 1.0.0 comment the first line and uncomment the second
60LT_AGE=0
61# LT_AGE=libodfgen_version_minor
62AC_SUBST(LT_CURRENT)
63AC_SUBST(LT_REVISION, [libodfgen_version_micro])
64AC_SUBST(LT_AGE)
65
66# ==========================
67# Platform check for windows
68# ==========================
69AC_MSG_CHECKING([for native Win32])
70AS_CASE([$host],
71    [*-*-mingw*], [
72        native_win32=yes
73        LIBODFGEN_WIN32_RESOURCE=libodfgen-win32res.lo
74    ], [
75        native_win32=no
76        LIBODFGEN_WIN32_RESOURCE=
77    ]
78)
79AC_MSG_RESULT([$native_win32])
80AM_CONDITIONAL([OS_WIN32], [test "x$native_win32" = "xyes"])
81AC_SUBST(LIBODFGEN_WIN32_RESOURCE)
82
83AC_MSG_CHECKING([for Win32 platform in general])
84AS_CASE([$host],
85    [*-*-mingw*|*-*-cygwin*], [platform_win32=yes],
86    [platform_win32=no]
87)
88AC_MSG_RESULT([$platform_win32])
89AM_CONDITIONAL([PLATFORM_WIN32], [test "x$platform_win32" = "xyes"])
90
91AS_IF([test "x$platform_win32" = "xyes"],
92    [
93	AM_CONDITIONAL([HAVE_VISIBILITY], [ test "x" != "x" ] )
94    ],
95    [
96        AC_MSG_CHECKING([for -fvisibility=hidden compiler flag])
97        saved_CXXFLAGS="$CXXFLAGS"
98        CXXFLAGS="$CXXFLAGS -fvisibility=hidden"
99        AC_TRY_COMPILE([], [], [have_visibility=yes], [have_visibility=no])
100        AC_MSG_RESULT([$have_visibility])
101        CXXFLAGS="$saved_CXXFLAGS"
102        AX_GCC_FUNC_ATTRIBUTE([visibility])
103        AM_CONDITIONAL([HAVE_VISIBILITY], [
104            test "$have_visibility" = "yes" && test "$ax_cv_have_func_attribute_visibility" = "yes"])
105    ]
106)
107
108# ================
109# Check for cflags
110# ================
111AC_ARG_ENABLE([werror],
112    [AS_HELP_STRING([--enable-werror], [Treat all warnings as errors, usefull for development])],
113    [enable_werror="$enableval"],
114    [enable_werror=no]
115)
116AS_IF([test x"$enable_werror" != "xno"], [
117    CFLAGS="$CFLAGS -Werror"
118    CXXFLAGS="$CXXFLAGS -Werror"
119])
120AC_ARG_ENABLE([weffc],
121    [AS_HELP_STRING([--disable-weffc], [ Disable -Weffc++ warnings, usefull when using an old version of gcc])],
122    [enable_weffc="$enableval"],
123    [enable_weffc=yes]
124)
125AC_ARG_ENABLE([wparanoic],
126    [AS_HELP_STRING([--enable-wparanoic], [Enable a lot of warnings...])],
127    [enable_wparanoic="$enableval"],
128    [enable_wparanoic=no]
129)
130# Courtesy of Glib: Ensure MSVC-compatible struct packing convention
131# is used when compiling for Win32 with gcc.
132AS_IF([test "x$native_win32" = "xyes"], [
133    AC_CHECK_TOOL(WINDRES, windres)
134    AS_IF([test x"$GCC" = xyes], [
135        AC_MSG_CHECKING([how to get MSVC-compatible struct packing])
136        AS_IF([test -z "$ac_cv_prog_CC"], [
137            our_gcc="$CC"
138        ], [
139            our_gcc="$ac_cv_prog_CC"
140        ])
141        AS_IF([$our_gcc -v --help 2>/dev/null | grep ms-bitfields >/dev/null], [
142            msnative_struct="-mms-bitfields"
143            CFLAGS="$CFLAGS $msnative_struct"
144            CXXFLAGS="$CXXFLAGS $msnative_struct"
145            AC_MSG_RESULT([${msnative_struct}])
146        ], [
147            AC_MSG_RESULT([no way])
148            AC_MSG_WARN([produced libraries might be incompatible with MSVC-compiled code])
149        ])
150    ])
151    CFLAGS="$CFLAGS -Wall -Wextra -pedantic"
152    CXXFLAGS="$CXXFLAGS -Wall -Wextra -Wshadow -pedantic"
153], [
154    AS_IF([test x"$GCC" = xyes], [
155        # Be tough with warnings and produce less careless code
156        CFLAGS="$CFLAGS -Wall -Wextra -pedantic"
157        CXXFLAGS="$CXXFLAGS -Wall -Wextra -pedantic -Wshadow -Wunused-variable"
158        AS_IF([test x"$enable_weffc" != "xno"], [
159            CXXFLAGS="$CXXFLAGS -Weffc++"
160        ])
161        AS_IF([test x"$enable_wparanoic" != "xno"], [
162            CXXFLAGS="$CXXFLAGS -Wcast-align -Wcast-qual -Wchar-subscripts"
163            CXXFLAGS="$CXXFLAGS -Wcomment -Wconversion -Wdisabled-optimization"
164            CXXFLAGS="$CXXFLAGS -Wfloat-equal -Wformat -Wformat=2 -Wformat-security"
165            CXXFLAGS="$CXXFLAGS -Wno-format-extra-args -Wno-format-zero-length"
166            CXXFLAGS="$CXXFLAGS -Wformat-y2k -Wimport -Winit-self -Winvalid-pch"
167            CXXFLAGS="$CXXFLAGS -Wmissing-braces -Wmissing-field-initializers"
168            CXXFLAGS="$CXXFLAGS -Wmissing-format-attribute -Wmissing-include-dirs"
169            CXXFLAGS="$CXXFLAGS -Wmissing-noreturn -Wpacked -Wparentheses"
170            CXXFLAGS="$CXXFLAGS -Wpointer-arith -Wredundant-decls -Wreturn-type"
171            CXXFLAGS="$CXXFLAGS -Wsequence-point -Wsign-compare -Wstrict-aliasing"
172            CXXFLAGS="$CXXFLAGS -Wstrict-aliasing=2 -Wswitch -Wswitch-default"
173            CXXFLAGS="$CXXFLAGS -Wswitch-enum -Wtrigraphs -Wunknown-pragmas -Wunused"
174            CXXFLAGS="$CXXFLAGS -Wunused-function -Wunused-label -Wunused-parameter"
175            CXXFLAGS="$CXXFLAGS -Wunused-value -Wvariadic-macros"
176            CXXFLAGS="$CXXFLAGS -Wvolatile-register-var -Wwrite-strings"
177        ])
178    ])
179])
180
181# ============
182# Debug switch
183# ============
184AC_ARG_ENABLE([debug],
185    [AS_HELP_STRING([--enable-debug], [Turn on debugging])],
186    [enable_debug="$enableval"],
187    [enable_debug=no]
188)
189AS_IF([test "x$enable_debug" = "xyes"], [
190    DEBUG_CXXFLAGS="-DDEBUG -g"
191], [
192    DEBUG_CXXFLAGS="-DNDEBUG"
193])
194AC_SUBST(DEBUG_CXXFLAGS)
195
196# ============
197# Test switch
198# ============
199AC_ARG_ENABLE([test],
200    [AS_HELP_STRING([--enable-test], [Compile extra test executables])],
201    [enable_test="$enableval"],
202    [enable_test=no]
203)
204AM_CONDITIONAL([COMPILE_TEST], [test "x$enable_test" = "xyes"])
205
206# =============
207# Documentation
208# =============
209AC_ARG_WITH(docs,
210    [AS_HELP_STRING([--without-docs], [Do not build documentation])],
211    [with_docs="$withval"],
212    [AS_IF([test "x$native_win32" = "xyes"], [with_docs=no], [with_docs=yes])]
213)
214AS_IF([test "x$with_docs" != "xno"], [
215    AC_PATH_PROG(DOXYGEN, [doxygen])
216    AS_IF([test -z "$DOXYGEN"], [
217        AC_MSG_WARN([*** Could not find doxygen in your PATH.])
218        AC_MSG_WARN([*** The documentation will not be built.])
219        build_docs=no
220    ], [build_docs=yes])
221], [build_docs=no])
222AM_CONDITIONAL([WITH_LIBEBOOK_DOCS], [test "x$build_docs" != "xno"])
223
224# =====================
225# Prepare all .in files
226# =====================
227AC_CONFIG_FILES([
228libodfgen-$LIBODFGEN_MAJOR_VERSION.$LIBODFGEN_MINOR_VERSION.pc:libodfgen.pc.in
229Makefile
230build/Makefile
231build/win32/Makefile
232docs/Makefile
233docs/doxygen/Makefile
234inc/Makefile
235inc/libodfgen/Makefile
236src/Makefile
237src/libodfgen.rc
238test/Makefile
239])
240AC_OUTPUT
241
242# ==============================================
243# Display final informations about configuration
244# ==============================================
245AC_MSG_NOTICE([
246==============================================================================
247Build configuration:
248    debug:           ${enable_debug}
249    docs:            ${build_docs}
250    werror:          ${enable_werror}
251==============================================================================
252])
253
254dnl vim:set shiftwidth=4 softtabstop=4 expandtab:
255