From aff498128785ef2f4bba104840c0758de4553132 Mon Sep 17 00:00:00 2001 From: Ezra Kissel Date: Wed, 9 Dec 2015 19:02:53 -0500 Subject: [PATCH] Adding pkg-config support. Remove usnic special case. Fix erroneous indentation. Also include provider LDFLAGS in case library dependencies are in non-system paths. Remove unused pkg-config Requires variables. Signed-off-by: Ezra Kissel --- Makefile.am | 3 +++ config/fi_provider.m4 | 43 +++++++++++++++++++++++++++++++++++++++++++ configure.ac | 2 ++ libfabric.pc.in | 14 ++++++++++++++ 4 files changed, 62 insertions(+) create mode 100644 libfabric.pc.in diff --git a/Makefile.am b/Makefile.am index cf12f03dfb6..d3a3042c906 100644 --- a/Makefile.am +++ b/Makefile.am @@ -239,6 +239,9 @@ dummy_man_pages = \ man/man3/fi_writemsg.3 \ man/man3/fi_writev.3 +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = libfabric.pc + nroff: @for file in $(real_man_pages); do \ source=`echo $$file | sed -e 's@/man[0-9]@@'`; \ diff --git a/config/fi_provider.m4 b/config/fi_provider.m4 index 2839fb284d5..ce2e753931b 100644 --- a/config/fi_provider.m4 +++ b/config/fi_provider.m4 @@ -89,6 +89,7 @@ AC_DEFUN([FI_PROVIDER_SETUP],[ AS_IF([test $$1_happy -eq 1], [PROVIDERS_TO_BUILD="$PROVIDERS_TO_BUILD $1" PROVIDERS_COUNT=$((PROVIDERS_COUNT+1)) + _FI_PROVIDER_PC_ADD($1) AS_IF([test $$1_dl -eq 1], [PROVIDERS_DL="prov/$1/lib$1.la $PROVIDERS_DL" AS_IF([test x"$enable_static" = x"yes" && @@ -202,3 +203,45 @@ AC_DEFUN([_FI_PROVIDER_INVOKE],[ [])] ) ]) + +dnl +dnl Internal; should not be called from provder .m4 scripts. +dnl Helper macro that appends each providers build flags for pkg-config +dnl +dnl Arguments: +dnl +dnl $1: name of the provider +dnl +AC_DEFUN([_FI_PROVIDER_PC_ADD],[ + FI_PC_CFLAGS="$FI_PC_CFLAGS $$1_CFLAGS $$1_CPPFLAGS" + FI_PC_PRIVATE_LIBS="$FI_PC_PRIVATE_LIBS $$1_LDFLAGS $$1_LIBS" +]) + +dnl +dnl Substitute pkg-config variables after all providers have been initialized +dnl +AC_DEFUN([FI_PROVIDER_SETUP_PC],[ + FI_PC_PRIVATE_LIBS="$FI_PC_PRIVATE_LIBS $LIBS" + + dnl Try and avoid duplication of private library flags + dnl Inefficient but easier than tracking within each provider macro + seen="" + for arg in $FI_PC_PRIVATE_LIBS + do + found=no + for s in $seen + do + AS_IF([test "$s" = "$arg"], [found=yes]) + done + AS_IF([test "$found" = "no"], [seen="$seen $arg"]) + done + FI_PC_PRIVATE_LIBS=$seen + + AS_IF([test "x$enable_shared" != xyes], + [FI_PC_PUBLIC_LIBS="$FI_PC_PUBLIC_LIBS $FI_PC_PRIVATE_LIBS"]) + AC_SUBST(FI_PC_CFLAGS) + AC_SUBST(FI_PC_PUBLIC_LIBS) + AC_SUBST(FI_PC_PRIVATE_LIBS) + + AC_CONFIG_FILES([libfabric.pc]) +]) diff --git a/configure.ac b/configure.ac index 3ea07660734..6a5541fdeb6 100644 --- a/configure.ac +++ b/configure.ac @@ -219,6 +219,8 @@ FI_PROVIDER_SETUP([usnic]) FI_PROVIDER_SETUP([mxm]) FI_PROVIDER_SETUP([gni]) FI_PROVIDER_FINI +dnl Configure the .pc file +FI_PROVIDER_SETUP_PC # If the user requested to build in direct mode, but # we have more than one provider, error. diff --git a/libfabric.pc.in b/libfabric.pc.in new file mode 100644 index 00000000000..d17c6eb984f --- /dev/null +++ b/libfabric.pc.in @@ -0,0 +1,14 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@ + +Name: libfabric +Description: OFI-WG libfabric +URL: https://github.com/ofiwg/libfabric.git +Version: @VERSION@ +Requires: +Cflags: -I${includedir} +Libs: -L${libdir} -lfabric @FI_PC_PUBLIC_LIBS@ +Libs.private: @FI_PC_PRIVATE_LIBS@ +Requires.private: \ No newline at end of file