1
1
mirror of https://github.com/profanity-im/profanity.git synced 2025-02-02 15:08:15 -05:00

Merge pull request #1641 from profanity-im/clean-configure

Clean up configure.ac
This commit is contained in:
Michael Vetter 2022-02-18 18:09:37 +01:00 committed by GitHub
commit 5957b757ce
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 117 additions and 386 deletions

View File

@ -187,9 +187,6 @@ pgp_sources = \
pgp_unittest_sources = \
tests/unittests/pgp/stub_gpg.c
otr3_sources = \
src/otr/otrlib.h src/otr/otrlibv3.c src/otr/otr.h src/otr/otr.c
otr4_sources = \
src/otr/otrlib.h src/otr/otrlibv4.c src/otr/otr.h src/otr/otr.c
@ -229,13 +226,8 @@ endif
if BUILD_OTR
unittest_sources += $(otr_unittest_sources)
if BUILD_OTR3
core_sources += $(otr3_sources)
endif
if BUILD_OTR4
core_sources += $(otr4_sources)
endif
endif
if BUILD_OMEMO
core_sources += $(omemo_sources)
@ -244,7 +236,7 @@ endif
all_c_sources = $(core_sources) $(unittest_sources) \
$(pgp_sources) $(pgp_unittest_sources) \
$(otr3_sources) $(otr4_sources) $(otr_unittest_sources) \
$(otr4_sources) $(otr_unittest_sources) \
$(omemo_sources) $(omemo_unittest_sources) \
$(c_sources) $(python_sources) \
$(main_source)

View File

@ -1,3 +0,0 @@
#!/bin/sh
./configure --enable-python-plugins --enable-c-plugins CFLAGS='-g -O0' CXXFLAGS='-g -O0'

View File

@ -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])])])
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 >= 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

View File

@ -68,15 +68,9 @@ identity_key_store_new(identity_key_store_t* identity_key_store)
identity_key_store->public = NULL;
}
#ifdef HAVE_LIBSIGNAL_LT_2_3_2
int
load_session(signal_buffer** record, const signal_protocol_address* address,
void* user_data)
#else
int
load_session(signal_buffer** record, signal_buffer** user_record,
const signal_protocol_address* address, void* user_data)
#endif
{
GHashTable* session_store = (GHashTable*)user_data;
GHashTable* device_store = NULL;
@ -124,17 +118,11 @@ get_sub_device_sessions(signal_int_list** sessions, const char* name,
return SG_SUCCESS;
}
#ifdef HAVE_LIBSIGNAL_LT_2_3_2
int
store_session(const signal_protocol_address* address, uint8_t* record,
size_t record_len, void* user_data)
#else
int
store_session(const signal_protocol_address* address,
uint8_t* record, size_t record_len,
uint8_t* user_record, size_t user_record_len,
void* user_data)
#endif
{
GHashTable* session_store = (GHashTable*)user_data;
GHashTable* device_store = NULL;

View File

@ -68,11 +68,7 @@ void identity_key_store_new(identity_key_store_t* identity_key_store);
* @param address the address of the remote client
* @return 1 if the session was loaded, 0 if the session was not found, negative on failure
*/
#ifdef HAVE_LIBSIGNAL_LT_2_3_2
int load_session(signal_buffer** record, const signal_protocol_address* address, void* user_data);
#else
int load_session(signal_buffer** record, signal_buffer** user_record, const signal_protocol_address* address, void* user_data);
#endif
/**
* Returns all known devices with active sessions for a recipient
@ -94,11 +90,7 @@ int get_sub_device_sessions(signal_int_list** sessions, const char* name, size_t
* @param record_len length of the serialized session record
* @return 0 on success, negative on failure
*/
#ifdef HAVE_LIBSIGNAL_LT_2_3_2
int store_session(const signal_protocol_address* address, uint8_t* record, size_t record_len, void* user_data);
#else
int store_session(const signal_protocol_address* address, uint8_t* record, size_t record_len, uint8_t* user_record, size_t user_record_len, void* user_data);
#endif
/**
* Determine whether there is a committed session record for a

View File

@ -1,231 +0,0 @@
/*
* otrlibv3.c
* vim: expandtab:ts=4:sts=4:sw=4
*
* Copyright (C) 2012 - 2019 James Booth <boothj5@gmail.com>
*
* This file is part of Profanity.
*
* Profanity is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Profanity is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Profanity. If not, see <https://www.gnu.org/licenses/>.
*
* In addition, as a special exception, the copyright holders give permission to
* link the code of portions of this program with the OpenSSL library under
* certain conditions as described in each individual source file, and
* distribute linked combinations including the two.
*
* You must obey the GNU General Public License in all respects for all of the
* code used other than OpenSSL. If you modify file(s) with this exception, you
* may extend this exception to your version of the file(s), but you are not
* obligated to do so. If you do not wish to do so, delete this exception
* statement from your version. If you delete this exception statement from all
* source files in the program, then also delete it here.
*
*/
#include "config.h"
#include <libotr/proto.h>
#include <libotr/privkey.h>
#include <libotr/message.h>
#include "otr/otr.h"
#include "otr/otrlib.h"
#include "ui/ui.h"
#include "ui/window_list.h"
OtrlPolicy
otrlib_policy(void)
{
return OTRL_POLICY_ALLOW_V1 | OTRL_POLICY_ALLOW_V2;
}
void
otrlib_init_timer(void)
{
}
void
otrlib_poll(void)
{
}
char*
otrlib_start_query(void)
{
return "?OTR?v2? This user has requested an Off-the-Record private conversation. However, you do not have a plugin to support that. See http://otr.cypherpunks.ca/ for more information.";
}
static int
cb_display_otr_message(void* opdata, const char* accountname,
const char* protocol, const char* username, const char* msg)
{
cons_show_error("%s", msg);
return 0;
}
void
otrlib_init_ops(OtrlMessageAppOps* ops)
{
ops->display_otr_message = cb_display_otr_message;
}
ConnContext*
otrlib_context_find(OtrlUserState user_state, const char* const recipient, char* jid)
{
return otrl_context_find(user_state, recipient, jid, "xmpp", 0, NULL, NULL, NULL);
}
void
otrlib_end_session(OtrlUserState user_state, const char* const recipient, char* jid, OtrlMessageAppOps* ops)
{
ConnContext* context = otrl_context_find(user_state, recipient, jid, "xmpp",
0, NULL, NULL, NULL);
if (context) {
otrl_message_disconnect(user_state, ops, NULL, jid, "xmpp", recipient);
}
}
gcry_error_t
otrlib_encrypt_message(OtrlUserState user_state, OtrlMessageAppOps* ops, char* jid, const char* const to,
const char* const message, char** newmessage)
{
gcry_error_t err;
err = otrl_message_sending(
user_state,
ops,
NULL,
jid,
"xmpp",
to,
message,
0,
newmessage,
NULL,
NULL);
return err;
}
int
otrlib_decrypt_message(OtrlUserState user_state, OtrlMessageAppOps* ops, char* jid, const char* const from,
const char* const message, char** decrypted, OtrlTLV** tlvs)
{
return otrl_message_receiving(
user_state,
ops,
NULL,
jid,
"xmpp",
from,
message,
decrypted,
tlvs,
NULL,
NULL);
}
void
otrlib_handle_tlvs(OtrlUserState user_state, OtrlMessageAppOps* ops, ConnContext* context, OtrlTLV* tlvs, GHashTable* smp_initiators)
{
NextExpectedSMP nextMsg = context->smstate->nextExpected;
OtrlTLV* tlv = otrl_tlv_find(tlvs, OTRL_TLV_SMP1);
if (tlv) {
if (nextMsg != OTRL_SMP_EXPECT1) {
otrl_message_abort_smp(user_state, ops, NULL, context);
} else {
ProfChatWin* chatwin = wins_get_chat(context->username);
if (chatwin) {
chatwin_otr_smp_event(chatwin, PROF_OTR_SMP_INIT, NULL);
}
g_hash_table_insert(smp_initiators, strdup(context->username), strdup(context->username));
}
}
tlv = otrl_tlv_find(tlvs, OTRL_TLV_SMP1Q);
if (tlv) {
if (nextMsg != OTRL_SMP_EXPECT1) {
otrl_message_abort_smp(user_state, ops, NULL, context);
} else {
ProfChatWin* chatwin = wins_get_chat(context->username);
if (chatwin) {
char* question = (char*)tlv->data;
char* eoq = memchr(question, '\0', tlv->len);
if (eoq) {
chatwin_otr_smp_event(chatwin, PROF_OTR_SMP_INIT_Q, question);
}
}
}
}
tlv = otrl_tlv_find(tlvs, OTRL_TLV_SMP2);
if (tlv) {
if (nextMsg != OTRL_SMP_EXPECT2) {
otrl_message_abort_smp(user_state, ops, NULL, context);
} else {
context->smstate->nextExpected = OTRL_SMP_EXPECT4;
}
}
tlv = otrl_tlv_find(tlvs, OTRL_TLV_SMP3);
if (tlv) {
if (nextMsg != OTRL_SMP_EXPECT3) {
otrl_message_abort_smp(user_state, ops, NULL, context);
} else {
context->smstate->nextExpected = OTRL_SMP_EXPECT1;
ProfChatWin* chatwin = wins_get_chat(context->username);
if (chatwin) {
if (context->smstate->received_question == 0) {
if (context->active_fingerprint->trust && (context->active_fingerprint->trust[0] != '\0')) {
chatwin_otr_smp_event(chatwin, PROF_OTR_SMP_SUCCESS, NULL);
chatwin_otr_trust(chatwin);
} else {
chatwin_otr_smp_event(chatwin, PROF_OTR_SMP_SENDER_FAIL, NULL);
chatwin_otr_untrust(chatwin);
}
} else {
if (context->smstate->sm_prog_state == OTRL_SMP_PROG_SUCCEEDED) {
chatwin_otr_smp_event(chatwin, PROF_OTR_SMP_SUCCESS_Q, NULL);
} else {
chatwin_otr_smp_event(chatwin, PROF_OTR_SMP_FAIL_Q, NULL);
}
}
}
}
}
tlv = otrl_tlv_find(tlvs, OTRL_TLV_SMP4);
if (tlv) {
if (nextMsg != OTRL_SMP_EXPECT4) {
otrl_message_abort_smp(user_state, ops, NULL, context);
} else {
context->smstate->nextExpected = OTRL_SMP_EXPECT1;
ProfChatWin* chatwin = wins_get_chat(context->username);
if (chatwin) {
if (context->active_fingerprint->trust && (context->active_fingerprint->trust[0] != '\0')) {
chatwin_otr_smp_event(chatwin, PROF_OTR_SMP_SUCCESS, NULL);
chatwin_otr_trust(chatwin);
} else {
chatwin_otr_smp_event(chatwin, PROF_OTR_SMP_RECEIVER_FAIL, NULL);
chatwin_otr_untrust(chatwin);
}
}
}
}
tlv = otrl_tlv_find(tlvs, OTRL_TLV_SMP_ABORT);
if (tlv) {
context->smstate->nextExpected = OTRL_SMP_EXPECT1;
ProfChatWin* chatwin = wins_get_chat(context->username);
if (chatwin) {
chatwin_otr_smp_event(chatwin, PROF_OTR_SMP_ABORT, NULL);
chatwin_otr_untrust(chatwin);
}
otr_untrust(context->username);
}
}