diff options
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 342 |
1 files changed, 342 insertions, 0 deletions
diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..51163a5 --- /dev/null +++ b/configure.ac @@ -0,0 +1,342 @@ +# Process this file with autoconf to create configure. + +AC_PREREQ([2.65]) + +# ==================== +# Version informations +# ==================== +m4_define([libsdw_version_major],[0]) +m4_define([libsdw_version_minor],[2]) +m4_define([libsdw_version_micro],[9]) +m4_define([libsdw_version],[libsdw_version_major.libsdw_version_minor.libsdw_version_micro]) + +# ============= +# Automake init +# ============= +AC_INIT([libsdw],[libsdw_version]) +AC_CONFIG_MACRO_DIR([m4]) +AC_CONFIG_HEADER([config.h]) +AM_INIT_AUTOMAKE([1.11 foreign dist-xz dist-bzip2]) +AM_SILENT_RULES([yes]) +AC_LANG([C++]) + +# =========================== +# Find required base packages +# =========================== +m4_ifdef([AM_PROG_AR], [AM_PROG_AR]) +AC_PROG_CC +AC_PROG_CPP +AC_PROG_CXX +AC_PROG_INSTALL +AC_PROG_LN_S +AC_PROG_MAKE_SET +LT_INIT([win32-dll disable-static pic-only]) +AC_CANONICAL_HOST + +PKG_PROG_PKG_CONFIG([0.20]) + +# ==================== +# Find additional apps +# ==================== +PKG_CHECK_MODULES([WPD],[ + libwpd-0.9 + libwpd-stream-0.9 +]) +AC_SUBST(WPD_CFLAGS) +AC_SUBST(WPD_LIBS) + +# ================================= +# Libtool/Version Makefile settings +# ================================= +AC_SUBST(SDW_MAJOR_VERSION, [libsdw_version_major]) +AC_SUBST(SDW_MINOR_VERSION, [libsdw_version_minor]) +AC_SUBST(SDW_MICRO_VERSION, [libsdw_version_micro]) +AC_SUBST(SDW_VERSION, [libsdw_version]) +# AC_SUBST(LT_RELEASE, [libsdw_version_major.libsdw_version_minor]) +LT_CURRENT=`expr 100 '*' libsdw_version_major + libsdw_version_minor` +# For 1.0.0 comment the first line and uncomment the second +LT_AGE=0 +# LT_AGE=libwpd_version_minor +AC_SUBST(LT_CURRENT) +AC_SUBST(LT_REVISION, [libsdw_version_micro]) +AC_SUBST(LT_AGE) + +# ========================== +# Platform check for windows +# ========================== +AC_MSG_CHECKING([for native Win32]) +AS_CASE([$host], + [*-*-mingw*], [ + native_win32=yes + LIBSDW_WIN32_RESOURCE=libsdw-win32res.lo + LIBSDW_STREAM_WIN32_RESOURCE=libsdw-stream-win32res.lo + SDW2HTML_WIN32_RESOURCE=sdw2html-win32res.lo + SDW2TEXT_WIN32_RESOURCE=sdw2text-win32res.lo + SDW2RAW_WIN32_RESOURCE=sdw2raw-win32res.lo + ], [ + native_win32=no + LIBSDW_WIN32_RESOURCE= + LIBSDW_STREAM_WIN32_RESOURCE= + SDW2HTML_WIN32_RESOURCE= + SDW2TEXT_WIN32_RESOURCE= + SDW2RAW_WIN32_RESOURCE= + ] +) +AM_CONDITIONAL(OS_WIN32, [test "x$native_win32" = "xyes"]) +AC_SUBST(LIBSDW_WIN32_RESOURCE) +AC_SUBST(LIBSDW_STREAM_WIN32_RESOURCE) +AC_SUBST(SDW2HTML_WIN32_RESOURCE) +AC_SUBST(SDW2TEXT_WIN32_RESOURCE) +AC_SUBST(SDW2RAW_WIN32_RESOURCE) + +AC_MSG_CHECKING([for Win32 platform in general]) +AS_CASE([$host], + [*-*-mingw*|*-*-cygwin*], [platform_win32=yes], + [platform_win32=no] +) +AC_MSG_RESULT([$platform_win32]) +AM_CONDITIONAL([PLATFORM_WIN32], [test "x$platform_win32" = "xyes"]) + +# ========================= +# Platform check for darwin +# ========================= +AC_MSG_CHECKING([for Darwin (Mac OS X) platform]) +AS_CASE([$host], + [*-*-darwin*], [platform_darwin=yes], + [platform_darwin=no] +) +AC_MSG_RESULT([$platform_darwin]) +AM_CONDITIONAL(PLATFORM_DARWIN, [test "x$platform_darwin" = "xyes"]) + +# ================ +# Check for cflags +# ================ +AC_ARG_ENABLE([werror], + [AS_HELP_STRING([--disable-werror], [Treat all warnings as errors, usefull for development])], + [enable_werror="$enableval"], + [enable_werror=yes] +) +AS_IF([test x"$enable_werror" != "xno"], [ + CFLAGS="$CFLAGS -Werror" + CXXFLAGS="$CXXFLAGS -Werror" +]) +AC_ARG_ENABLE([weffc], + [AS_HELP_STRING([--disable-weffc], [ Disable -Weffc++ warnings, usefull when using an old version of gcc or of boost])], + [enable_weffc="$enableval"], + [enable_weffc=yes] +) +AC_ARG_ENABLE([wparanoic], + [AS_HELP_STRING([--enable-wparanoic], [Enable a lot of warnings...])], + [enable_wparanoic="$enableval"], + [enable_wparanoic=no] +) +# Courtesy of Glib: Ensure MSVC-compatible struct packing convention +# is used when compiling for Win32 with gcc. +AS_IF([test "x$native_win32" = "xyes"], [ + AC_CHECK_TOOL(WINDRES, windres) + AS_IF([test x"$GCC" = xyes], [ + AC_MSG_CHECKING([how to get MSVC-compatible struct packing]) + AS_IF([test -z "$ac_cv_prog_CC"], [ + our_gcc="$CC" + ], [ + our_gcc="$ac_cv_prog_CC" + ]) + AS_IF([$our_gcc -v --help 2>/dev/null | grep ms-bitfields >/dev/null], [ + msnative_struct="-mms-bitfields" + CFLAGS="$CFLAGS $msnative_struct" + CXXFLAGS="$CXXFLAGS $msnative_struct" + AC_MSG_RESULT([${msnative_struct}]) + ], [ + AC_MSG_RESULT([no way]) + AC_MSG_WARN([produced libraries might be incompatible with MSVC-compiled code]) + ]) + ]) + CFLAGS="$CFLAGS -Wall -Wextra -pedantic" + CXXFLAGS="$CXXFLAGS -Wall -Wextra -pedantic" +], [ + AS_IF([test x"$GCC" = xyes], [ + # Be tough with warnings and produce less careless code + CFLAGS="$CFLAGS -Wall -Wextra -pedantic" + CXXFLAGS="$CXXFLAGS -Wall -Wextra -pedantic -Wshadow -Wunused-variable" + AS_IF([test x"$enable_weffc" != "xno"], [ + CXXFLAGS="$CXXFLAGS -Weffc++" + ]) + AS_IF([test x"$enable_wparanoic" != "xno"], [ + CXXFLAGS="$CXXFLAGS -Wcast-align -Wcast-qual -Wchar-subscripts" + CXXFLAGS="$CXXFLAGS -Wcomment -Wconversion -Wdisabled-optimization" + CXXFLAGS="$CXXFLAGS -Wfloat-equal -Wformat -Wformat=2" + CXXFLAGS="$CXXFLAGS -Wformat-nonliteral -Wformat-security" + CXXFLAGS="$CXXFLAGS -Wformat-y2k -Wimport -Winit-self -Winvalid-pch" + CXXFLAGS="$CXXFLAGS -Wmissing-braces -Wmissing-field-initializers" + CXXFLAGS="$CXXFLAGS -Wmissing-format-attribute -Wmissing-include-dirs" + CXXFLAGS="$CXXFLAGS -Wmissing-noreturn -Wpacked -Wparentheses" + CXXFLAGS="$CXXFLAGS -Wpointer-arith -Wredundant-decls -Wreturn-type" + CXXFLAGS="$CXXFLAGS -Wsequence-point -Wsign-compare -Wstrict-aliasing" + CXXFLAGS="$CXXFLAGS -Wstrict-aliasing=2 -Wswitch -Wswitch-default" + CXXFLAGS="$CXXFLAGS -Wswitch-enum -Wtrigraphs -Wunknown-pragmas -Wunused" + CXXFLAGS="$CXXFLAGS -Wunused-function -Wunused-label -Wunused-parameter" + CXXFLAGS="$CXXFLAGS -Wunused-value -Wvariadic-macros" + CXXFLAGS="$CXXFLAGS -Wvolatile-register-var -Wwrite-strings" + ]) + ]) +]) + +# ============ +# Debug switch +# ============ +AC_ARG_ENABLE([debug], + [AS_HELP_STRING([--enable-debug], [Turn on debugging])], + [enable_debug="$enableval"], + [enable_debug=no] +) +AC_ARG_ENABLE([full-debug], + [AS_HELP_STRING([--enable-full-debug], [Turn on debugging and debug files' creation ])], + [enable_full_debug="$enableval"], + [enable_full_debug=no] +) +AS_IF([test "x$enable_full_debug" = "xyes"], + [ DEBUG_CXXFLAGS="-DDEBUG -DDEBUG_WITH_FILES -g" ], + [ AS_IF([test "x$enable_debug" = "xyes"], + [DEBUG_CXXFLAGS="-DDEBUG -g"], + [DEBUG_CXXFLAGS="-DNDEBUG"]) + ] +) +AC_SUBST(DEBUG_CXXFLAGS) + +# ============ +# Static tools +# ============ +AC_ARG_ENABLE([static-tools], + [AS_HELP_STRING([--enable-static-tools], [Link tools (binaries) statically])], + [enable_static_tools="$enableval"], + [enable_static_tools=no] +) +AS_IF([test "x$enable_static_tools" = "xyes"], [ + enable_static="yes" +], [ + AC_DISABLE_STATIC +]) +AM_CONDITIONAL(STATIC_TOOLS, [test "x$enable_static_tools" = "xyes"]) + +# ======== +# shared_ptr implementation +# ======== +AC_ARG_WITH(sharedptr, + [AS_HELP_STRING([--with-sharedptr=boost|c++11|tr1], + [Use Boost|std::memory|std::tr1::memory for shared ptr implementation])], + [with_sharedptr="$withval"], + [with_sharedptr=boost] +) +AS_CASE([$with_sharedptr], + [boost|c++11|tr1], [], + [AC_MSG_ERROR([Unknown value of shared_ptr provider: $with_sharedptr])] +) + +AS_IF([test "x$with_sharedptr" = "xc++11"], [ + AC_MSG_CHECKING([for c++11 shared ptr]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM( + [[#include <memory>]], + [[std::shared_ptr<int> p;]] + ) + ], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([SHAREDPTR_STD],[1],[Use C++11 implementation of shared_ptr]) + ], [ + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Could not find C++11 implementation of shared_ptr]) + ], [ + [#include <memory>] + ]) +]) +AS_IF([test "x$with_sharedptr" = "xtr1"], [ + AC_MSG_CHECKING([for tr1 shared ptr]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM( + [[#include <tr1/memory>]], + [[std::tr1::shared_ptr<int> p;]] + ) + ], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([SHAREDPTR_TR1],[1],[Use TR1 implementation of shared_ptr]) + ], [ + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Could not find TR1 implementation of shared_ptr]) + ], [ + [#include <tr1/memory>] + ]) +]) +AS_IF([test "x$with_sharedptr" = "xboost"], [ + AC_MSG_CHECKING([for boost shared ptr]) + AC_COMPILE_IFELSE([ + AC_LANG_PROGRAM( + [[#include <boost/shared_ptr.hpp>]], + [[boost::shared_ptr<int> p;]] + ) + ], [ + AC_MSG_RESULT([yes]) + AC_DEFINE([SHAREDPTR_BOOST],[1],[Use Boost implementation of shared_ptr]) + ], [ + AC_MSG_RESULT([no]) + AC_MSG_ERROR([Could not find Boost implementation of shared_ptr]) + ]) +]) + +# ============= +# Documentation +# ============= +AC_ARG_WITH(docs, + [AS_HELP_STRING([--without-docs], [Do not build documentation])], + [with_docs="$withval"], + [AS_IF([test "x$native_win32" = "xyes"], [with_docs=no], [with_docs=yes])] +) +AS_IF([test "x$with_docs" != "xno"], [ + AC_PATH_PROG(DOXYGEN, [doxygen]) + AS_IF([test -z "$DOXYGEN"], [ + AC_MSG_WARN([*** Could not find doxygen in your PATH.]) + AC_MSG_WARN([*** The documentation will not be built.]) + build_docs=no + ], [build_docs=yes]) +], [build_docs=no]) +AM_CONDITIONAL([WITH_LIBSDW_DOCS], [test "x$build_docs" != "xno"]) + +# ===================== +# Prepare all .in files +# ===================== +AC_CONFIG_FILES([ +Makefile +inc/Makefile +inc/libsdw/Makefile +src/Makefile +src/conv/Makefile +src/conv/html/Makefile +src/conv/html/sdw2html.rc +src/conv/raw/Makefile +src/conv/raw/sdw2raw.rc +src/conv/text/Makefile +src/conv/text/sdw2text.rc +src/lib/Makefile +src/lib/libsdw.rc +docs/Makefile +docs/doxygen/Makefile +build/Makefile +build/win32/Makefile +libsdw-$SDW_MAJOR_VERSION.$SDW_MINOR_VERSION.pc:libsdw.pc.in +libsdw-zip +]) +AC_OUTPUT + +# ============================================== +# Display final informations about configuration +# ============================================== +AC_MSG_NOTICE([ +============================================================================== +Build configuration: + debug: ${enable_debug} + full-debug: ${enable_full_debug} + docs: ${build_docs} + shared_ptr: ${with_sharedptr} + static-tools: ${enable_static_tools} + werror: ${enable_werror} +============================================================================== +]) |