From 55efc601cb7604aa8e93e3ac248b67c9a706e360 Mon Sep 17 00:00:00 2001 From: Fabian Freyer Date: Fri, 26 Sep 2014 01:41:00 +0200 Subject: [PATCH] Refactored configure.ac, added pkg-config support --- .gitignore | 1 + Makefile.am | 3 +++ configure.ac | 60 +++++++++++++++++++++++++++++++++++------------- libstrophe.pc.in | 14 +++++++++++ 4 files changed, 62 insertions(+), 16 deletions(-) create mode 100644 libstrophe.pc.in diff --git a/.gitignore b/.gitignore index 88cfc3a..2ea741d 100644 --- a/.gitignore +++ b/.gitignore @@ -25,6 +25,7 @@ examples/*.o tests/*.o tests/check_parser *.a +*.pc *.tar.gz *.zip docs/html diff --git a/Makefile.am b/Makefile.am index f942380..4f57481 100644 --- a/Makefile.am +++ b/Makefile.am @@ -36,6 +36,9 @@ endif include_HEADERS = strophe.h noinst_HEADERS = strophepp.h +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libstrophe.pc + EXTRA_DIST = docs ## Examples diff --git a/configure.ac b/configure.ac index 7caa7a7..461248e 100644 --- a/configure.ac +++ b/configure.ac @@ -12,8 +12,14 @@ AS_CASE([$host_os], [freebsd*], [PLATFORM="freebsd"], [PLATFORM="nix"]) -PKG_CHECK_MODULES([openssl], [openssl], [], - [AC_CHECK_HEADER(openssl/ssl.h, [openssl_LIBS="-lssl -lcrypto"], [AC_MSG_ERROR([openssl not found; openssl required])])]) +PKG_CHECK_MODULES([openssl], [openssl], [PC_REQUIRES+=(openssl)], + [AC_CHECK_HEADER([openssl/ssl.h], + [ + openssl_LIBS="-lssl -lcrypto" + PC_LIBS+=($openssl_LIBS) + ], + [AC_MSG_ERROR([openssl not found; openssl required])] + )]) PKG_CHECK_MODULES([check], [check >= 0.9.4], [], [AC_MSG_WARN([libcheck not found; unit tests will not be compilable])]) @@ -24,18 +30,35 @@ AC_ARG_WITH([libxml2], if test "x$with_libxml2" != xno; then PKG_CHECK_MODULES([libxml2], [libxml-2.0 >= 2.7], - [with_libxml2=yes], [dummy=1]) - if test "x$with_libxml2" != xyes; then - old_CFLAGS=$CFLAGS - CFLAGS="-I${includedir}/libxml2" - AC_CHECK_HEADER([libxml/parser.h], - [with_libxml2=yes; libxml2_CFLAGS="-I${includedir}/libxml2"; libxml2_LIBS="-lxml2"], - [AC_MSG_ERROR([libxml2 not found.])]) - CFLAGS=$old_CFLAGS - fi + [ + with_libxml2=yes + PC_REQUIRES+=(libxml-2.0) + ], + [ + old_CFLAGS=$CFLAGS + CFLAGS="-I${includedir}/libxml2" + AC_CHECK_HEADER([libxml/parser.h], + [ + with_libxml2=yes + libxml2_CFLAGS="-I${includedir}/libxml2" + libxml2_LIBS="-lxml2" + PC_LIBS+=($libxml2_LIBS) + PC_CFLAGS+=($libxml2_CFLAGS) + ], + [AC_MSG_ERROR([libxml2 not found.])]) + CFLAGS=$old_CFLAGS + ]) else - PKG_CHECK_MODULES([expat], [expat >= 2.0.0], [], - [AC_CHECK_HEADER(expat.h, [expat_LIBS="-lexpat"], [AC_MSG_ERROR([expat not found; expat required.])])]) + PKG_CHECK_MODULES([expat], [expat >= 2.0.0], + [PC_REQUIRES+=(expat)], + [AC_CHECK_HEADER([expat.h], + [ + expat_LIBS="-lexpat" + PC_LIBS+=($expat_LIBS) + ], + [AC_MSG_ERROR([expat not found; expat required.])] + ) + ]) fi if test "x$with_libxml2" = xyes; then @@ -54,8 +77,8 @@ AC_MSG_NOTICE([libstrophe will use the $with_parser XML parser]) AC_SEARCH_LIBS([socket], [socket]) if test "x$PLATFORM" != xfreebsd; then - AC_CHECK_LIB([resolv], [res_query], [], - [AC_CHECK_LIB([resolv], [__res_query], [], + AC_CHECK_LIB([resolv], [res_query], [LIBS="-lresolv $LIBS"; PC_LIBS+=(-lresolv)], + [AC_CHECK_LIB([resolv], [__res_query], [LIBS="-lresolv $LIBS"; PC_LIBS+=(-lresolv)], [AC_MSG_ERROR([libresolv not found; libresolv required. ])])]) else AC_MSG_NOTICE([skipping libresolv checks for freebsd]) @@ -64,8 +87,13 @@ fi AC_CHECK_HEADERS([arpa/nameser_compat.h]) AM_CONDITIONAL([PARSER_EXPAT], [test x$with_parser != xlibxml2]) + +AC_SUBST([PC_REQUIRES], [${PC_REQUIRES[[@]]}]) +AC_SUBST([PC_CFLAGS], [${PC_CFLAGS[[@]]}]) +AC_SUBST([PC_LIBS], [${PC_LIBS[[@]]}]) + AC_SUBST(PARSER_NAME) AC_SUBST(PARSER_CFLAGS) AC_SUBST(PARSER_LIBS) -AC_CONFIG_FILES([Makefile]) +AC_CONFIG_FILES([Makefile libstrophe.pc]) AC_OUTPUT diff --git a/libstrophe.pc.in b/libstrophe.pc.in new file mode 100644 index 0000000..483a04a --- /dev/null +++ b/libstrophe.pc.in @@ -0,0 +1,14 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: libstrophe +Description: A simple, lightweight C library for writing XMPP clients +URL: http://strophe.im/libstrophe/ +Version: @VERSION@ +Requires: +Requires.private: @PC_REQUIRES@ +Libs: -L${libdir} -lstrophe +Libs.private: @PC_LIBS@ +Cflags: -I${includedir} @PC_CFLAGS@