From efab827fbd10eff06101a0ebc3ed24b4c2ff578a Mon Sep 17 00:00:00 2001 From: Takashi Menjo Date: Tue, 23 Mar 2021 13:32:27 +0900 Subject: [PATCH v2 1/6] Add --with-libpmem option for PMEM support --- configure | 99 ++++++++++++++++++++++++++++++++++++++ configure.ac | 17 +++++++ src/include/pg_config.h.in | 6 +++ 3 files changed, 122 insertions(+) diff --git a/configure b/configure index e9b98f442f..1b3928e383 100755 --- a/configure +++ b/configure @@ -699,6 +699,7 @@ with_gnu_ld LD LDFLAGS_SL LDFLAGS_EX +with_libpmem LZ4_LIBS LZ4_CFLAGS with_lz4 @@ -868,6 +869,7 @@ with_libxslt with_system_tzdata with_zlib with_lz4 +with_libpmem with_gnu_ld with_ssl with_openssl @@ -1576,6 +1578,7 @@ Optional Packages: use system time zone data in DIR --without-zlib do not use Zlib --with-lz4 build with LZ4 support + --with-libpmem build with PMEM support --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-ssl=LIB use LIB for SSL/TLS support (openssl) --with-openssl obsolete spelling of --with-ssl=openssl @@ -8713,6 +8716,41 @@ fi done fi +# +# libpmem +# +{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to build with PMEM support" >&5 +$as_echo_n "checking whether to build with PMEM support... " >&6; } + + + +# Check whether --with-libpmem was given. +if test "${with_libpmem+set}" = set; then : + withval=$with_libpmem; + case $withval in + yes) + +$as_echo "#define USE_LIBPMEM 1" >>confdefs.h + + ;; + no) + : + ;; + *) + as_fn_error $? "no argument expected for --with-libpmem option" "$LINENO" 5 + ;; + esac + +else + with_libpmem=no + +fi + + +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $with_libpmem" >&5 +$as_echo "$with_libpmem" >&6; } + + # # Assignments # @@ -13246,6 +13284,56 @@ fi fi +if test "$with_libpmem" = yes; then + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pmem_memcpy in -lpmem" >&5 +$as_echo_n "checking for pmem_memcpy in -lpmem... " >&6; } +if ${ac_cv_lib_pmem_pmem_memcpy+:} false; then : + $as_echo_n "(cached) " >&6 +else + ac_check_lib_save_LIBS=$LIBS +LIBS="-lpmem $LIBS" +cat confdefs.h - <<_ACEOF >conftest.$ac_ext +/* end confdefs.h. */ + +/* Override any GCC internal prototype to avoid an error. + Use char because int might match the return type of a GCC + builtin and then its argument prototype would still apply. */ +#ifdef __cplusplus +extern "C" +#endif +char pmem_memcpy (); +int +main () +{ +return pmem_memcpy (); + ; + return 0; +} +_ACEOF +if ac_fn_c_try_link "$LINENO"; then : + ac_cv_lib_pmem_pmem_memcpy=yes +else + ac_cv_lib_pmem_pmem_memcpy=no +fi +rm -f core conftest.err conftest.$ac_objext \ + conftest$ac_exeext conftest.$ac_ext +LIBS=$ac_check_lib_save_LIBS +fi +{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pmem_pmem_memcpy" >&5 +$as_echo "$ac_cv_lib_pmem_pmem_memcpy" >&6; } +if test "x$ac_cv_lib_pmem_pmem_memcpy" = xyes; then : + cat >>confdefs.h <<_ACEOF +#define HAVE_LIBPMEM 1 +_ACEOF + + LIBS="-lpmem $LIBS" + +else + as_fn_error $? "library 'libpmem' (version >= 1.5) is required for PMEM support" "$LINENO" 5 +fi + +fi + ## ## Header files @@ -13957,6 +14045,17 @@ fi done +fi + +if test "$with_libpmem" = yes ; then + ac_fn_c_check_header_mongrel "$LINENO" "libpmem.h" "ac_cv_header_libpmem_h" "$ac_includes_default" +if test "x$ac_cv_header_libpmem_h" = xyes; then : + +else + as_fn_error $? "header file is required for PMEM support" "$LINENO" 5 +fi + + fi ## diff --git a/configure.ac b/configure.ac index 3b42d8bdc9..9d8efa22ec 100644 --- a/configure.ac +++ b/configure.ac @@ -1011,6 +1011,15 @@ if test "$with_lz4" = yes; then done fi +# +# libpmem +# +AC_MSG_CHECKING([whether to build with PMEM support]) +PGAC_ARG_BOOL(with, libpmem, no, [build with PMEM support], + [AC_DEFINE([USE_LIBPMEM], 1, [Define to 1 to build with PMEM support. (--with-libpmem)])]) +AC_MSG_RESULT([$with_libpmem]) +AC_SUBST(with_libpmem) + # # Assignments # @@ -1341,6 +1350,10 @@ elif test "$with_uuid" = ossp ; then fi AC_SUBST(UUID_LIBS) +if test "$with_libpmem" = yes; then + AC_CHECK_LIB(pmem, pmem_memcpy, [], [AC_MSG_ERROR([library 'libpmem' (version >= 1.5) is required for PMEM support])]) +fi + ## ## Header files @@ -1527,6 +1540,10 @@ if test "$PORTNAME" = "win32" ; then AC_CHECK_HEADERS(crtdefs.h) fi +if test "$with_libpmem" = yes ; then + AC_CHECK_HEADER(libpmem.h, [], [AC_MSG_ERROR([header file is required for PMEM support])]) +fi + ## ## Types, structures, compiler characteristics ## diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in index 783b8fc1ba..8fe0472225 100644 --- a/src/include/pg_config.h.in +++ b/src/include/pg_config.h.in @@ -334,6 +334,9 @@ /* Define to 1 if you have the `pam' library (-lpam). */ #undef HAVE_LIBPAM +/* Define to 1 if you have the `pmem' library (-lpmem). */ +#undef HAVE_LIBPMEM + /* Define if you have a function readline library */ #undef HAVE_LIBREADLINE @@ -904,6 +907,9 @@ /* Define to 1 to build with LDAP support. (--with-ldap) */ #undef USE_LDAP +/* Define to 1 to build with PMEM support. (--with-libpmem) */ +#undef USE_LIBPMEM + /* Define to 1 to build with XML support. (--with-libxml) */ #undef USE_LIBXML -- 2.25.1