diff options
Diffstat (limited to 'configure.ac')
-rw-r--r-- | configure.ac | 239 |
1 files changed, 116 insertions, 123 deletions
diff --git a/configure.ac b/configure.ac index 4a6a8ba2..d260ce50 100644 --- a/configure.ac +++ b/configure.ac @@ -1,24 +1,21 @@ -# -*- Autoconf -*- # Process this file with autoconf to produce a configure script. -AC_INIT([profanity],[0.12.0],[jubalh@iodoru.org]) +AC_PREREQ([2.69]) +AC_INIT([profanity],[0.12.0],[jubalh@iodoru.org],[profanity],[https://profanity-im.github.io/]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_SRCDIR([src/main.c]) AC_CONFIG_HEADERS([src/config.h]) AM_INIT_AUTOMAKE([foreign subdir-objects]) -### Checks for programs. AC_PROG_CC LT_INIT - -## Check for LFS AC_SYS_LARGEFILE -### Get canonical host -AC_CANONICAL_HOST +## Determine platform +AC_CANONICAL_TARGET PLATFORM="unknown" -AS_CASE([$host_os], +AS_CASE([$target_os], [freebsd*], [PLATFORM="freebsd"], [netbsd*], [PLATFORM="netbsd"], [openbsd*], [PLATFORM="openbsd"], @@ -28,7 +25,7 @@ AS_CASE([$host_os], PACKAGE_STATUS="development" -### Get git branch and revision if in development +## Get git branch and revision if in development if test "x$PACKAGE_STATUS" = xdevelopment; then AM_CONDITIONAL([INCLUDE_GIT_VERSION], [true]) AC_DEFINE([HAVE_GIT_VERSION], [1], [Include git info]) @@ -43,10 +40,10 @@ AS_IF([test "x$PLATFORM" = xcygwin], AS_IF([test "x$PLATFORM" = xosx], [AC_DEFINE([PLATFORM_OSX], [1], [OSx])]) -### Environment variables +## Environment variables AC_ARG_VAR([PYTHON_FRAMEWORK], [Set base directory for Python Framework]) -### Options +## Options AC_ARG_ENABLE([notifications], [AS_HELP_STRING([--enable-notifications], [enable desktop notifications])]) AC_ARG_ENABLE([python-plugins], @@ -68,9 +65,31 @@ AC_ARG_WITH([themes], AC_ARG_ENABLE([icons-and-clipboard], [AS_HELP_STRING([--enable-icons-and-clipboard], [enable GTK tray icons and clipboard paste support])]) +# Required dependencies + +AC_CHECK_FUNCS([atexit memset strdup strstr]) + +PKG_CHECK_MODULES([glib], [glib-2.0 >= 2.62.0], [], + [AC_MSG_ERROR([glib 2.62.0 or higher is required])]) +PKG_CHECK_MODULES([gio], [gio-2.0], [], + [AC_MSG_ERROR([libgio-2.0 from glib-2.0 is required])]) + +AC_SEARCH_LIBS([fmod], [m], [], + [AC_MSG_ERROR([math.h is required])], []) + +PKG_CHECK_MODULES([curl], [libcurl >= 7.62.0], [], + [AC_CHECK_LIB([curl], [main], [], + [AC_MSG_ERROR([libcurl 7.62.0 or higher is required])])]) + +PKG_CHECK_MODULES([SQLITE], [sqlite3 >= 3.22.0], [], + [AC_MSG_ERROR([sqlite3 3.22.0 or higher is required])]) + +ACX_PTHREAD([], [AC_MSG_ERROR([pthread is required])]) +AS_IF([test "x$PTHREAD_CC" != x], [ CC="$PTHREAD_CC" ]) + ### plugins -# python +## python if test "x$enable_plugins" = xno; then AM_CONDITIONAL([BUILD_PYTHON_API], [false]) elif test "x$enable_python_plugins" != xno; then @@ -101,7 +120,7 @@ else AM_CONDITIONAL([BUILD_PYTHON_API], [false]) fi -# c +## C if test "x$PLATFORM" = xcygwin; then AM_CONDITIONAL([BUILD_C_API], [false]) else @@ -128,18 +147,11 @@ else fi fi -# threading -ACX_PTHREAD([], [AC_MSG_ERROR([pthread is required])]) -LIBS="$PTHREAD_LIBS $LIBS" -CFLAGS="$CFLAGS $PTHREAD_CFLAGS" -AS_IF([test "x$PTHREAD_CC" != x], [ CC="$PTHREAD_CC" ]) - -### Check for libstrophe +## Check for libstrophe PKG_CHECK_MODULES([libstrophe], [libstrophe >= 0.11.0], - [LIBS="$libstrophe_LIBS $LIBS" CFLAGS="$CFLAGS $libstrophe_CFLAGS" XMPP_LIB="libstrophe" AC_DEFINE([HAVE_LIBSTROPHE], [1], [libstrophe])], - [XMPP_LIB=""]) + [LIBS="$libstrophe_LIBS $LIBS" CFLAGS="$CFLAGS $libstrophe_CFLAGS"]) -AC_MSG_CHECKING([whether ${XMPP_LIB} works]) +AC_MSG_CHECKING([whether libstrophe works]) AC_LINK_IFELSE([AC_LANG_SOURCE([[ #include <strophe.h> @@ -149,9 +161,9 @@ AC_LINK_IFELSE([AC_LANG_SOURCE([[ } ]])], [AC_MSG_RESULT([yes])], - [AC_MSG_ERROR([${XMPP_LIB} is broken, check config.log for details])]) + [AC_MSG_ERROR([libstrophe is broken, check config.log for details])]) -### Check for curses library +## Check for curses library PKG_CHECK_MODULES([ncursesw], [ncursesw], [NCURSES_CFLAGS="$ncursesw_CFLAGS"; NCURSES_LIBS="$ncursesw_LIBS"; CURSES="ncursesw"], [PKG_CHECK_MODULES([ncurses], [ncurses], @@ -161,10 +173,10 @@ PKG_CHECK_MODULES([ncursesw], [ncursesw], [AC_CHECK_LIB([curses], [main], [LIBS="$LIBS -lcurses"; CURSES="curses"], [AC_MSG_ERROR([ncurses or curses is required for profanity])])])])])]) -AM_CPPFLAGS="$AM_CPPFLAGS $NCURSES_CFLAGS" +AM_CFLAGS="$AM_CFLAGS $NCURSES_CFLAGS" LIBS="$NCURSES_LIBS $LIBS" -### Check wide characters support in curses library +## Check wide characters support in curses library CFLAGS_RESTORE="$CFLAGS" CFLAGS="$CFLAGS $NCURSES_CFLAGS" AC_CACHE_CHECK([for wget_wch support in $CURSES], ncurses_cv_wget_wch, @@ -183,32 +195,12 @@ CFLAGS="$CFLAGS_RESTORE" AS_IF([test "x$ncurses_cv_wget_wch" != xyes], [AC_MSG_ERROR([ncurses does not support wide characters])]) -### Check for glib libraries -PKG_CHECK_MODULES([glib], [glib-2.0 >= 2.62.0], [], - [AC_MSG_ERROR([glib 2.62.0 or higher is required for profanity])]) -PKG_CHECK_MODULES([gio], [gio-2.0], [], - [AC_MSG_ERROR([libgio-2.0 from glib-2.0 is required for profanity])]) - -### Check for other profanity dependencies -AC_SEARCH_LIBS([fmod], [m], [], - [AC_MSG_ERROR([math.h is required])], []) - -PKG_CHECK_MODULES([curl], [libcurl >= 7.62.0], [], - [AC_CHECK_LIB([curl], [main], [], - [AC_MSG_ERROR([libcurl is required for profanity])])]) - -PKG_CHECK_MODULES([SQLITE], [sqlite3 >= 3.22.0], [], - [AC_MSG_ERROR([sqlite3 3.22.0 or higher is required for profanity])]) - -AS_IF([test "x$enable_icons_and_clipboard" != xno], - [PKG_CHECK_MODULES([GTK], [gtk+-3.0 >= 3.24.0], - [AC_DEFINE([HAVE_GTK], [1], [libgtk module])], - [AS_IF([test "x$enable_icons_and_clipboard" = xyes], - [PKG_CHECK_MODULES([GTK], [gtk+-2.0 >= 2.24.10], - [AC_DEFINE([HAVE_GTK], [1], [libgtk module])], - [AC_MSG_ERROR([gtk+-2.0 >= 2.24.10 or gtk+-3.0 >= 3.24.0 is required for icons and clipboard])], - [AC_MSG_NOTICE([gtk+-3.0/gtk+2.0 not found, icons and clipboard not enabled])])])])]) +## Check for ncursesw/ncurses.h first, Arch linux uses ncurses.h for ncursesw +AC_CHECK_HEADERS([ncursesw/ncurses.h], [], []) +AC_CHECK_HEADERS([ncurses.h], [], []) +AC_CHECK_HEADERS([curses.h], [], []) +# Check for readline AS_IF([test "x$PLATFORM" = xosx], [AC_PATH_PROG([BREW], [brew], ["failed"], [$PATH:/opt/homebrew/bin:/usr/local/bin]) @@ -229,17 +221,34 @@ AS_IF([test "x$PLATFORM" = xosx], [test "x$PLATFORM" = xopenbsd], [AC_CHECK_FILE([/usr/local/include/ereadline], [LIBS="-lereadline $LIBS" - AM_CPPFLAGS="-I/usr/local/include/ereadline $AM_CPPFLAGS" + AM_CFLAGS="-I/usr/local/include/ereadline $AM_CFLAGS" AM_LDFLAGS="-L/usr/local/lib $AM_LDFLAGS" AC_SUBST(AM_LDFLAGS)])], [AC_CHECK_LIB([readline], [main], [], [AC_MSG_ERROR([libreadline is required for profanity])])]) -### Check for desktop notification support -### Linux/FreeBSD require libnotify -### Windows uses native OS calls -### OSX requires terminal-notifier +## Check for optional dependencies depending on feature flags + +dnl feature: icons-and-clipboard +AS_IF([test "x$enable_icons_and_clipboard" != xno], + [PKG_CHECK_MODULES([GTK], [gtk+-3.0 >= 3.24.0], + [AC_DEFINE([HAVE_GTK], [1], [libgtk module])], + [AS_IF([test "x$enable_icons_and_clipboard" = xyes], + [PKG_CHECK_MODULES([GTK], [gtk+-2.0 >= 2.24.10], + [AC_DEFINE([HAVE_GTK], [1], [libgtk module])], + [AC_MSG_ERROR([gtk+-2.0 >= 2.24.10 or gtk+-3.0 >= 3.24.0 is required for icons and clipboard])], + [AC_MSG_NOTICE([gtk+-3.0/gtk+2.0 not found, icons and clipboard not enabled])])])])]) + +ICONS_PATH='${pkgdatadir}/icons' +AC_SUBST(ICONS_PATH) + +dnl feature: notifications + +## Check for desktop notification support +## Linux/FreeBSD require libnotify +## Windows uses native OS calls +## OSX requires terminal-notifier AS_IF([test "x$PLATFORM" = xosx], [AS_IF([test "x$enable_notifications" != xno], @@ -258,19 +267,15 @@ AS_IF([test "x$PLATFORM" = xosx], [AC_MSG_ERROR([libnotify is required but does not exist])], [AC_MSG_NOTICE([libnotify support will be disabled])])])])]) -# TODO: rewrite this -if test "x$with_xscreensaver" = xyes; then - AC_CHECK_LIB([Xss], [main], [], - [AC_MSG_ERROR([libXss is required for x autoaway support])]) - AC_CHECK_LIB([X11], [main], [], - [AC_MSG_ERROR([libX11 is required for x autoaway support])]) -elif test "x$with_xscreensaver" = x; then - AC_CHECK_LIB([Xss], [main], [], - [AC_MSG_NOTICE([libXss not found, falling back to profanity auto-away])]) - AC_CHECK_LIB([X11], [main], [], - [AC_MSG_NOTICE([libX11 not found, falling back to profanity auto-away])]) -fi +dnl feature: xscreensaver +AS_IF([test "x$enable_xscreensaver" != xno], + [PKG_CHECK_MODULES([xscrnsaver], [xscrnsaver], + [AC_MSG_NOTICE([xscreensaver support is enabled])], + [AS_IF([test "x$enable_xscreensaver" = xyes], + [AC_MSG_ERROR([xscreensaver is required but does not exist])], + [AC_MSG_NOTICE([xscreensaver support is disabled])])])]) +dnl feature: pgp AM_CONDITIONAL([BUILD_PGP], [false]) if test "x$enable_pgp" != xno; then AC_CHECK_LIB([gpgme], [main], @@ -279,45 +284,34 @@ if test "x$enable_pgp" != xno; then AC_PATH_PROG([GPGME_CONFIG], [gpgme-config], ["failed"]) AS_IF([test "x$GPGME_CONFIG" = xfailed], [LIBS="-lgpgme $LIBS"], - [LIBS="`$GPGME_CONFIG --libs` $LIBS" AM_CPPFLAGS="`$GPGME_CONFIG --cflags` $AM_CPPFLAGS"])], + [LIBS="`$GPGME_CONFIG --libs` $LIBS" AM_CFLAGS="`$GPGME_CONFIG --cflags` $AM_CFLAGS"])], [AS_IF([test "x$enable_pgp" = xyes], [AC_MSG_ERROR([libgpgme is required for pgp support])], [AC_MSG_NOTICE([libgpgme not found, pgp support not enabled])])]) fi +dnl feature: otr AM_CONDITIONAL([BUILD_OTR], [false]) -AM_CONDITIONAL([BUILD_OTR3], [false]) -AM_CONDITIONAL([BUILD_OTR4], [false]) if test "x$enable_otr" != xno; then AM_CONDITIONAL([BUILD_OTR], [true]) + PKG_CHECK_MODULES([libotr], [libotr >= 4.0], - [AM_CONDITIONAL([BUILD_OTR4], [true])], - [AC_MSG_NOTICE([libotr >= 4.0 not found, checking for libotr-3.x...]) - PKG_CHECK_MODULES([libotr], [libotr >= 3.0], - [AM_CONDITIONAL([BUILD_OTR3], [true])], - [AM_CONDITIONAL([BUILD_OTR], [false])])]) - - AM_COND_IF([BUILD_OTR], - [LIBS="$libotr_LIBS $LIBS" CFLAGS="$CFLAGS $libotr_CFLAGS" - AC_DEFINE([HAVE_LIBOTR], [1], [Have libotr])], - [AS_IF([test "x$enable_otr" = xyes], - [AC_MSG_ERROR([libotr is required for otr encryption support])], - [AC_MSG_NOTICE([libotr not found, otr encryption support not enabled])])]) + [LIBS="$libotr_LIBS $LIBS" CFLAGS="$libotr_CFLAGS $cflags"], + [AM_CONDITIONAL([BUILD_OTR], [false]) + AS_IF([test "x$enable_otr" = xyes], + [AC_MSG_ERROR([libotr >= 4.0 is required for OTR support])], + [AC_MSG_NOTICE([libotr >= 4.0 not found, OTR support not enabled])])]) + + AM_COND_IF([BUILD_OTR], [AC_DEFINE([HAVE_LIBOTR], [1], [Have libotr])]) fi +dnl feature: omemo AM_CONDITIONAL([BUILD_OMEMO], [false]) if test "x$enable_omemo" != xno; then AM_CONDITIONAL([BUILD_OMEMO], [true]) PKG_CHECK_MODULES([libsignal], [libsignal-protocol-c >= 2.3.2], [LIBS="-lsignal-protocol-c $LIBS"], - [AC_MSG_NOTICE([libsignal >= 2.3.2 not found, checking for libsignal 2.3.x...]) - PKG_CHECK_MODULES([libsignal], [libsignal-protocol-c >= 2.3.0], - [LIBS="-lsignal-protocol-c $LIBS" - AC_DEFINE([HAVE_LIBSIGNAL_LT_2_3_2], [1], [Have libsignal-protocol-c < 2.3.2])], - [AM_CONDITIONAL([BUILD_OMEMO], [false]) - AS_IF([test "x$enable_omemo" = xyes], - [AC_MSG_ERROR([libsignal-protocol-c is required for OMEMO support])], - [AC_MSG_NOTICE([libsignal-protocol-c not found, OMEMO support not enabled])])])]) + [AC_MSG_NOTICE([libsignal-protocol-c >= 2.3.2 not found, OMEMO support not enabled])]) AC_CHECK_LIB([gcrypt], [gcry_md_extract], [LIBS="-lgcrypt $LIBS"], @@ -329,6 +323,7 @@ if test "x$enable_omemo" != xno; then AM_COND_IF([BUILD_OMEMO], [AC_DEFINE([HAVE_OMEMO], [1], [Have OMEMO])]) fi +dnl feature: themes AS_IF([test "x$with_themes" = xno], [THEMES_INSTALL="false"], [THEMES_INSTALL="true"]) @@ -338,11 +333,10 @@ AS_IF([test "x$with_themes" = xno -o "x$with_themes" = xyes -o "x$with_themes" = AC_SUBST(THEMES_PATH) AM_CONDITIONAL([THEMES_INSTALL], "$THEMES_INSTALL") -ICONS_PATH='${pkgdatadir}/icons' -AC_SUBST(ICONS_PATH) +## Tests -### cmocka is required only for tests, profanity shouldn't be linked with it -### TODO: pass cmocka_CFLAGS and cmocka_LIBS to Makefile.am +# cmocka is required only for tests, profanity shouldn't be linked with it +# TODO: pass cmocka_CFLAGS and cmocka_LIBS to Makefile.am PKG_CHECK_MODULES([cmocka], [cmocka], [], [AC_MSG_NOTICE([cmocka is not found, will not be able to run tests])]) @@ -353,43 +347,42 @@ AM_CONDITIONAL([HAVE_EXPECT], [false]) AC_CHECK_LIB([expect], [exp_expectl], [AM_CONDITIONAL([HAVE_EXPECT], [true])], [AC_MSG_NOTICE([libexpect not found, will not be able to run functional tests])]) -### Check for ncursesw/ncurses.h first, Arch linux uses ncurses.h for ncursesw -AC_CHECK_HEADERS([ncursesw/ncurses.h], [], []) -AC_CHECK_HEADERS([ncurses.h], [], []) -AC_CHECK_HEADERS([curses.h], [], []) - -### Default parameters +## Default parameters AM_CFLAGS="-Wall -Wno-deprecated-declarations -std=gnu99" +AM_LDFLAGS="$AM_LDFLAGS -export-dynamic" + AS_IF([test "x$PACKAGE_STATUS" = xdevelopment], [AM_CFLAGS="$AM_CFLAGS -Wunused -Werror"]) AS_IF([test "x$PLATFORM" = xosx], [AM_CFLAGS="$AM_CFLAGS -Qunused-arguments"]) -AM_LDFLAGS="$AM_LDFLAGS -export-dynamic" -AM_CPPFLAGS="$AM_CPPFLAGS $glib_CFLAGS $gio_CFLAGS $curl_CFLAGS $libnotify_CFLAGS $PYTHON_CPPFLAGS ${GTK_CFLAGS} ${SQLITE_CFLAGS}" -AM_CPPFLAGS="$AM_CPPFLAGS -DTHEMES_PATH=\"\\\"$THEMES_PATH\\\"\" -DICONS_PATH=\"\\\"$ICONS_PATH\\\"\" -DGLOBAL_PYTHON_PLUGINS_PATH=\"\\\"$GLOBAL_PYTHON_PLUGINS_PATH\\\"\" -DGLOBAL_C_PLUGINS_PATH=\"\\\"$GLOBAL_C_PLUGINS_PATH\\\"\"" -LIBS="$glib_LIBS $gio_LIBS $curl_LIBS $libnotify_LIBS $PYTHON_LIBS $PYTHON_EXTRA_LIBS $PYTHON_LDFLAGS ${GTK_LIBS} ${SQLITE_LIBS} $LIBS" + +AM_CFLAGS="$AM_CFLAGS $PTHREAD_CFLAGS $glib_CFLAGS $gio_CFLAGS $curl_CFLAGS ${SQLITE_CFLAGS}" +AM_CFLAGS="$AM_CFLAGS $libnotify_CFLAGS ${GTK_CFLAGS} $PYTHON_CPPFLAGS" dnl https://bugs.python.org/issue15018 +AM_CFLAGS="$AM_CFLAGS -DTHEMES_PATH=\"\\\"$THEMES_PATH\\\"\" -DICONS_PATH=\"\\\"$ICONS_PATH\\\"\" -DGLOBAL_PYTHON_PLUGINS_PATH=\"\\\"$GLOBAL_PYTHON_PLUGINS_PATH\\\"\" -DGLOBAL_C_PLUGINS_PATH=\"\\\"$GLOBAL_C_PLUGINS_PATH\\\"\"" +LIBS="$glib_LIBS $gio_LIBS $PTHREAD_LIBS $curl_LIBS $libnotify_LIBS $PYTHON_LIBS $PYTHON_EXTRA_LIBS $PYTHON_LDFLAGS ${GTK_LIBS} ${SQLITE_LIBS} $LIBS" AC_SUBST(AM_LDFLAGS) AC_SUBST(AM_CFLAGS) AC_SUBST(AM_CPPFLAGS) -### Checks for library functions. -AC_CHECK_FUNCS([atexit memset strdup strstr]) - +## Output AC_CONFIG_FILES([Makefile]) AC_OUTPUT -echo "" -echo "PLATFORM : $host_os" -echo "PACKAGE_STATUS : $PACKAGE_STATUS" -echo "AM_CFLAGS : $AM_CFLAGS" -echo "AM_CPPFLAGS : $AM_CPPFLAGS" -echo "AM_LDFLAGS : $AM_LDFLAGS" -echo "LIBS : $LIBS" -echo "Install themes : $THEMES_INSTALL" -echo "Themes path : $THEMES_PATH" -echo "Icons path : $ICONS_PATH" -echo "Global Python plugins path : $GLOBAL_PYTHON_PLUGINS_PATH" -echo "Global C plugins path : $GLOBAL_C_PLUGINS_PATH" -echo "" -echo "Now you can run \`make' to build profanity" +AC_MSG_NOTICE([Summary of build options: +PLATFORM : $target_os +PACKAGE_STATUS : $PACKAGE_STATUS +LIBS : $LIBS +Install themes : $THEMES_INSTALL +Themes path : $THEMES_PATH +Icons path : $ICONS_PATH +Global Python plugins path : $GLOBAL_PYTHON_PLUGINS_PATH +Global C plugins path : $GLOBAL_C_PLUGINS_PATH +CFLAGS : $AM_CFLAGS +CPPFLAGS : $AM_CPPFLAGS +LDFLAGS : $AM_LDFLAGS +LIBS : $LIBS + +Run `make' to build profanity]) + +dnl vim: expandtab:ts=4:sts=4:sw=4 |