1
0
mirror of https://github.com/profanity-im/profanity.git synced 2024-09-22 19:45:54 -04:00
profanity/configure.ac
j.r 5676159aa5
Fix python executed during configure
Previously it relied on AX_PYTHON_DEVEL, which in turn executes
python-config to get the build flags. However this does not work while
cross compiling because we can't execute the python-config build for the
target platform. To circumvent this problem the python build flags are
now queried via pkgconfig, which has the drawback of not having some
extra build flags, but they do not seem to be needed.

I tested this patch with the termux build system and it build without
their existing hack of injecting python after the configure step. I also
tested non cross compile build on Arch Linux and it also still works.

Fixes #851
2022-02-18 19:45:31 +01:00

388 lines
15 KiB
Plaintext

# Process this file with autoconf to produce a configure script.
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])
AC_PROG_CC
LT_INIT
AC_SYS_LARGEFILE
## Determine platform
AC_CANONICAL_TARGET
PLATFORM="unknown"
AS_CASE([$target_os],
[freebsd*], [PLATFORM="freebsd"],
[netbsd*], [PLATFORM="netbsd"],
[openbsd*], [PLATFORM="openbsd"],
[darwin*], [PLATFORM="osx"],
[cygwin], [PLATFORM="cygwin"],
[PLATFORM="nix"])
PACKAGE_STATUS="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])
else
AM_CONDITIONAL([INCLUDE_GIT_VERSION], [false])
fi
AC_DEFINE_UNQUOTED([PACKAGE_STATUS], ["$PACKAGE_STATUS"], [Status of this build])
AS_IF([test "x$PLATFORM" = xcygwin],
[AC_DEFINE([PLATFORM_CYGWIN], [1], [Cygwin])])
AS_IF([test "x$PLATFORM" = xosx],
[AC_DEFINE([PLATFORM_OSX], [1], [OSx])])
## Environment variables
AC_ARG_VAR([PYTHON_FRAMEWORK], [Set base directory for Python Framework])
## Options
AC_ARG_ENABLE([notifications],
[AS_HELP_STRING([--enable-notifications], [enable desktop notifications])])
AC_ARG_ENABLE([python-plugins],
[AS_HELP_STRING([--enable-python-plugins], [enable Python plugins])])
AC_ARG_ENABLE([c-plugins],
[AS_HELP_STRING([--enable-c-plugins], [enable C plugins])])
AC_ARG_ENABLE([plugins],
[AS_HELP_STRING([--enable-plugins], [enable plugins])])
AC_ARG_ENABLE([otr],
[AS_HELP_STRING([--enable-otr], [enable otr encryption])])
AC_ARG_ENABLE([pgp],
[AS_HELP_STRING([--enable-pgp], [enable pgp])])
AC_ARG_ENABLE([omemo],
[AS_HELP_STRING([--enable-omemo], [enable OMEMO encryption])])
AC_ARG_WITH([xscreensaver],
[AS_HELP_STRING([--with-xscreensaver], [use libXScrnSaver to determine idle time])])
AC_ARG_WITH([themes],
[AS_HELP_STRING([--with-themes[[=PATH]]], [install themes (default yes)])])
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
if test "x$enable_plugins" = xno; then
AM_CONDITIONAL([BUILD_PYTHON_API], [false])
elif test "x$enable_python_plugins" != xno; then
AS_IF([test "x$PLATFORM" = xosx], [
AS_IF([test "x$PYTHON_FRAMEWORK" = x], [ PYTHON_FRAMEWORK="/Library/Frameworks/Python.framework" ])
AC_MSG_NOTICE([Symlinking Python.framework to $PYTHON_FRAMEWORK])
rm -f Python.framework
ln -s $PYTHON_FRAMEWORK Python.framework ])
PKG_CHECK_MODULES([python], [python-embed], [PYTHON_CONFIG_EXISTS=yes], [PYTHON_CONFIG_EXISTS=no])
PKG_CHECK_MODULES([python], [python3-embed], [PYTHON3_CONFIG_EXISTS=yes; AC_DEFINE(PY_IS_PYTHON3, [1], [Is Python version 3])], [PYTHON3_CONFIG_EXISTS=no])
if test "$PYTHON_CONFIG_EXISTS" = "yes" || test "$PYTHON3_CONFIG_EXISTS" = "yes"; then
AM_CONDITIONAL([BUILD_PYTHON_API], [true])
AC_DEFINE([HAVE_PYTHON], [1], [Python support])
else
if test "x$enable_python_plugins" = xyes; then
AC_MSG_ERROR([Python not found, cannot enable Python plugins.])
else
AM_CONDITIONAL([BUILD_PYTHON_API], [false])
AC_MSG_NOTICE([Python development package not found, Python plugin support disabled.])
fi
fi
AS_IF([test "x$PLATFORM" = xosx], [rm -f Python.framework])
# set path to look for global python plugins
GLOBAL_PYTHON_PLUGINS_PATH='${pkgdatadir}/plugins'
AC_SUBST(GLOBAL_PYTHON_PLUGINS_PATH)
else
AM_CONDITIONAL([BUILD_PYTHON_API], [false])
fi
## C
if test "x$PLATFORM" = xcygwin; then
AM_CONDITIONAL([BUILD_C_API], [false])
else
LT_INIT
if test "x$enable_plugins" = xno; then
AM_CONDITIONAL([BUILD_C_API], [false])
elif test "x$enable_c_plugins" != xno; then
# libdl doesn't exist as a separate library in the BSDs and is
# provided in the standard libraries.
AS_IF([test "x$PLATFORM" = xopenbsd -o "x$PLATFORM" = xfreebsd -o "x$PLATFORM" = xnetbsd],
[AM_CONDITIONAL([BUILD_C_API], [true]) AC_DEFINE([HAVE_C], [1], [C support])],
[AC_CHECK_LIB([dl], [main],
[AM_CONDITIONAL([BUILD_C_API], [true]) LIBS="$LIBS -ldl" AC_DEFINE([HAVE_C], [1], [C support])],
[AS_IF(
[test "x$enable_c_plugins" = xyes],
[AC_MSG_ERROR([dl library needed to run C plugins])],
[AM_CONDITIONAL([BUILD_C_API], [false])])
])])
# set path to look for global c plugins
GLOBAL_C_PLUGINS_PATH='${pkglibdir}/plugins'
AC_SUBST(GLOBAL_C_PLUGINS_PATH)
else
AM_CONDITIONAL([BUILD_C_API], [false])
fi
fi
## Check for libstrophe
PKG_CHECK_MODULES([libstrophe], [libstrophe >= 0.11.0],
[LIBS="$libstrophe_LIBS $LIBS" CFLAGS="$CFLAGS $libstrophe_CFLAGS"])
AC_MSG_CHECKING([whether libstrophe works])
AC_LINK_IFELSE([AC_LANG_SOURCE([[
#include <strophe.h>
int main() {
xmpp_initialize();
return 0;
}
]])],
[AC_MSG_RESULT([yes])],
[AC_MSG_ERROR([libstrophe is broken, check config.log for details])])
## Check for curses library
PKG_CHECK_MODULES([ncursesw], [ncursesw],
[NCURSES_CFLAGS="$ncursesw_CFLAGS"; NCURSES_LIBS="$ncursesw_LIBS"; CURSES="ncursesw"],
[PKG_CHECK_MODULES([ncurses], [ncurses],
[NCURSES_CFLAGS="$ncurses_CFLAGS"; NCURSES_LIBS="$ncurses_LIBS"; CURSES="ncurses"],
[AC_CHECK_LIB([ncursesw], [main], [],
[AC_CHECK_LIB([ncurses], [main], [],
[AC_CHECK_LIB([curses], [main],
[LIBS="$LIBS -lcurses"; CURSES="curses"],
[AC_MSG_ERROR([ncurses or curses is required for profanity])])])])])])
AM_CFLAGS="$AM_CFLAGS $NCURSES_CFLAGS"
LIBS="$NCURSES_LIBS $LIBS"
## 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,
[AC_LINK_IFELSE([AC_LANG_SOURCE([
void wget_wch(void);
int main() {
wget_wch();
return 0;
}
])],
[ncurses_cv_wget_wch=yes],
[ncurses_cv_wget_wch=no])
])
CFLAGS="$CFLAGS_RESTORE"
AS_IF([test "x$ncurses_cv_wget_wch" != xyes],
[AC_MSG_ERROR([ncurses does not support wide characters])])
## 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])
AS_IF([test "x$BREW" = xfailed],
[AC_CHECK_FILE([/opt/local/lib/libreadline.dylib],
[READLINE_PREFIX="/opt/local"],
[READLINE_PREFIX="/usr/local"])],
[READLINE_PREFIX="`$BREW --prefix readline`"])])
AS_IF([test "x$PLATFORM" = xosx],
[AC_CHECK_FILE([$READLINE_PREFIX/lib/libreadline.dylib],
[LIBS="-lreadline $LIBS"
AM_CPPFLAGS="-I$READLINE_PREFIX/include $AM_CPPFLAGS"
AM_LDFLAGS="-L$READLINE_PREFIX/lib $AM_LDFLAGS"
AC_SUBST(AM_LDFLAGS)],
[AC_MSG_ERROR([libreadline is required for profanity. Install it with Homebrew, MacPorts, or manually into /usr/local])])],
[test "x$PLATFORM" = xopenbsd],
[AC_CHECK_FILE([/usr/local/include/ereadline],
[LIBS="-lereadline $LIBS"
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 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],
[NOTIFIER_PATH="no"
AC_PATH_PROG(NOTIFIER_PATH, terminal-notifier, no)
AS_IF([test "x$NOTIFIER_PATH" = xno],
[AS_IF([test "x$enable_notifications" = xyes],
[AC_MSG_ERROR([terminal-notifier not found, required for desktop notifications.])],
[AC_MSG_NOTICE([Desktop notifications not supported.])])],
[AC_DEFINE([HAVE_OSXNOTIFY], [1], [terminal notifier])])])],
[test "x$PLATFORM" = xnix -o "x$PLATFORM" = xfreebsd],
[AS_IF([test "x$enable_notifications" != xno],
[PKG_CHECK_MODULES([libnotify], [libnotify],
[AC_DEFINE([HAVE_LIBNOTIFY], [1], [libnotify module])],
[AS_IF([test "x$enable_notifications" = xyes],
[AC_MSG_ERROR([libnotify is required but does not exist])],
[AC_MSG_NOTICE([libnotify support will be disabled])])])])])
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],
[AM_CONDITIONAL([BUILD_PGP], [true])
AC_DEFINE([HAVE_LIBGPGME], [1], [Have libgpgme])
AC_PATH_PROG([GPGME_CONFIG], [gpgme-config], ["failed"])
AS_IF([test "x$GPGME_CONFIG" = xfailed],
[LIBS="-lgpgme $LIBS"],
[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])
if test "x$enable_otr" != xno; then
AM_CONDITIONAL([BUILD_OTR], [true])
PKG_CHECK_MODULES([libotr], [libotr >= 4.0],
[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-protocol-c >= 2.3.2 not found, OMEMO support not enabled])])
AC_CHECK_LIB([gcrypt], [gcry_md_extract],
[LIBS="-lgcrypt $LIBS"],
[AM_CONDITIONAL([BUILD_OMEMO], [false])
AS_IF([test "x$enable_omemo" = xyes],
[AC_MSG_ERROR([gcrypt >= 1.7.0 is required for OMEMO support])],
[AC_MSG_NOTICE([gcrypt >= 1.7.0 not found, OMEMO support not enabled])])])
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"])
AS_IF([test "x$with_themes" = xno -o "x$with_themes" = xyes -o "x$with_themes" = x],
[THEMES_PATH='${pkgdatadir}/themes'],
[THEMES_PATH="$with_themes"])
AC_SUBST(THEMES_PATH)
AM_CONDITIONAL([THEMES_INSTALL], "$THEMES_INSTALL")
## Tests
# 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])])
AM_CONDITIONAL([HAVE_STABBER], [false])
AC_CHECK_LIB([stabber], [stbbr_start], [AM_CONDITIONAL([HAVE_STABBER], [true])],
[AC_MSG_NOTICE([libstabber not found, will not be able to run functional tests])])
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])])
## 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_CFLAGS="$AM_CFLAGS $PTHREAD_CFLAGS $glib_CFLAGS $gio_CFLAGS $curl_CFLAGS ${SQLITE_CFLAGS}"
AM_CFLAGS="$AM_CFLAGS $libnotify_CFLAGS ${GTK_CFLAGS} $python_CFLAGS" 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 ${GTK_LIBS} ${SQLITE_LIBS} $LIBS"
AC_SUBST(AM_LDFLAGS)
AC_SUBST(AM_CFLAGS)
AC_SUBST(AM_CPPFLAGS)
## Output
AC_CONFIG_FILES([Makefile])
AC_OUTPUT
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