Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[libpq] mingw support #16740

Merged
merged 10 commits into from
Apr 20, 2021
17 changes: 10 additions & 7 deletions ports/libpq/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -4,19 +4,22 @@ include src/Makefile.global

.NOTPARALLEL:

ifeq ($(LIBPQ_LIBRARY_TYPE), shared)
LIBPQ_LIB_SUFFIX = _shlib
endif

ifeq ($(LIBPQ_LIBRARY_TYPE), static)
LIBPQ_INSTALL_LIBS = install-stlib
endif

ifeq ($(LIBPQ_LIBRARY_TYPE), shared)
ifeq ($(USING_MINGW), yes)
# The import library name is the same as the static library name
EXTRA_TARGET = install-lib-static
endif
endif

.PHONY: all
all:
$(MAKE) -C src/include MAKELEVEL=0
$(MAKE) -C src/common MAKELEVEL=0 libpgcommon$(LIBPQ_LIB_SUFFIX).a
$(MAKE) -C src/port MAKELEVEL=0 libpgport$(LIBPQ_LIB_SUFFIX).a
$(MAKE) -C src/common MAKELEVEL=0
$(MAKE) -C src/port MAKELEVEL=0
JackBoosY marked this conversation as resolved.
Show resolved Hide resolved
$(MAKE) -C src/interfaces/libpq MAKELEVEL=0 all-$(LIBPQ_LIBRARY_TYPE)-lib
$(MAKE) -C src/bin/pg_config MAKELEVEL=0

Expand All @@ -30,5 +33,5 @@ install-stlib:
.PHONY: install
install: $(LIBPQ_INSTALL_LIBS)
$(MAKE) -C src/include MAKELEVEL=0 install
$(MAKE) -C src/interfaces/libpq MAKELEVEL=0 install-lib-$(LIBPQ_LIBRARY_TYPE) install-lib-pc install -o all -o install-lib
$(MAKE) -C src/interfaces/libpq MAKELEVEL=0 $(EXTRA_TARGET) install-lib-$(LIBPQ_LIBRARY_TYPE) install-lib-pc install -o all -o install-lib
$(MAKE) -C src/bin/pg_config MAKELEVEL=0 install
186 changes: 186 additions & 0 deletions ports/libpq/patches/mingw/additional-zlib-names.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,186 @@
diff --git a/configure b/configure
index c22d3de..75210f0 100755
--- a/configure
+++ b/configure
@@ -11777,13 +11789,13 @@ Use --without-readline to disable readline support." "$LINENO" 5
fi

if test "$with_zlib" = yes; then
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inflate in -lz" >&5
-$as_echo_n "checking for inflate in -lz... " >&6; }
-if ${ac_cv_lib_z_inflate+:} false; then :
+ if test "$enable_debug" = yes; then
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing inflate" >&5
+$as_echo_n "checking for library containing inflate... " >&6; }
+if ${ac_cv_search_inflate+:} false; then :
$as_echo_n "(cached) " >&6
else
- ac_check_lib_save_LIBS=$LIBS
-LIBS="-lz $LIBS"
+ ac_func_search_save_LIBS=$LIBS
cat confdefs.h - <<_ACEOF >conftest.$ac_ext
/* end confdefs.h. */

@@ -11802,23 +11814,101 @@ return inflate ();
return 0;
}
_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
- ac_cv_lib_z_inflate=yes
-else
- ac_cv_lib_z_inflate=no
+for ac_lib in '' zd zlibd zlib1d z zlib zlib1; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_inflate=$ac_res
fi
rm -f core conftest.err conftest.$ac_objext \
- conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+ conftest$ac_exeext
+ if ${ac_cv_search_inflate+:} false; then :
+ break
fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_inflate" >&5
-$as_echo "$ac_cv_lib_z_inflate" >&6; }
-if test "x$ac_cv_lib_z_inflate" = xyes; then :
- cat >>confdefs.h <<_ACEOF
-#define HAVE_LIBZ 1
+done
+if ${ac_cv_search_inflate+:} false; then :
+
+else
+ ac_cv_search_inflate=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inflate" >&5
+$as_echo "$ac_cv_search_inflate" >&6; }
+ac_res=$ac_cv_search_inflate
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+$as_echo "#define HAVE_LIBZ 1" >>confdefs.h
+
+else
+ as_fn_error $? "zlib library not found
+If you have zlib already installed, see config.log for details on the
+failure. It is possible the compiler isn't looking in the proper directory.
+Use --without-zlib to disable zlib support." "$LINENO" 5
+fi
+
+ else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing inflate" >&5
+$as_echo_n "checking for library containing inflate... " >&6; }
+if ${ac_cv_search_inflate+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$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 inflate ();
+int
+main ()
+{
+return inflate ();
+ ;
+ return 0;
+}
_ACEOF
+for ac_lib in '' z zlib zlib1; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_inflate=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_inflate+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_inflate+:} false; then :

- LIBS="-lz $LIBS"
+else
+ ac_cv_search_inflate=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_inflate" >&5
+$as_echo "$ac_cv_search_inflate" >&6; }
+ac_res=$ac_cv_search_inflate
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+$as_echo "#define HAVE_LIBZ 1" >>confdefs.h

else
as_fn_error $? "zlib library not found
@@ -11827,6 +11917,7 @@ failure. It is possible the compiler isn't looking in the proper directory.
Use --without-zlib to disable zlib support." "$LINENO" 5
fi

+ fi
fi

if test "$enable_spinlocks" = yes; then
diff --git a/configure.in b/configure.in
index 976f90d..e3cd80b 100644
--- a/configure.in
+++ b/configure.in
@@ -1170,11 +1170,21 @@ Use --without-readline to disable readline support.])
fi

if test "$with_zlib" = yes; then
- AC_CHECK_LIB(z, inflate, [],
- [AC_MSG_ERROR([zlib library not found
+ if test "$enable_debug" = yes; then
+ AC_SEARCH_LIBS(inflate, [zd zlibd zlib1d z zlib zlib1],
+ [AC_DEFINE([HAVE_LIBZ], [1], [Define to 1 if you have the `z' library.])],
+ [AC_MSG_ERROR([zlib library not found
If you have zlib already installed, see config.log for details on the
failure. It is possible the compiler isn't looking in the proper directory.
Use --without-zlib to disable zlib support.])])
+ else
+ AC_SEARCH_LIBS(inflate, [z zlib zlib1],
+ [AC_DEFINE([HAVE_LIBZ], [1], [Define to 1 if you have the `z' library.])],
+ [AC_MSG_ERROR([zlib library not found
+If you have zlib already installed, see config.log for details on the
+failure. It is possible the compiler isn't looking in the proper directory.
+Use --without-zlib to disable zlib support.])])
+ fi
fi

if test "$enable_spinlocks" = yes; then
diff --git a/src/include/pg_config.h.in b/src/include/pg_config.h.in
index 244886a..29dd35b 100644
--- a/src/include/pg_config.h.in
+++ b/src/include/pg_config.h.in
@@ -374,7 +374,7 @@
/* Define to 1 if you have the `xslt' library (-lxslt). */
#undef HAVE_LIBXSLT

-/* Define to 1 if you have the `z' library (-lz). */
+/* Define to 1 if you have the `z' library. */
#undef HAVE_LIBZ

/* Define to 1 if the system has the type `locale_t'. */
79 changes: 79 additions & 0 deletions ports/libpq/patches/mingw/link-with-crypt32.patch
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
diff --git a/configure b/configure
index 75210f0..6ea5e1f 100755
--- a/configure
+++ b/configure
@@ -11708,6 +11708,62 @@ if test "$ac_res" != no; then :

fi

+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing CertOpenStore" >&5
+$as_echo_n "checking for library containing CertOpenStore... " >&6; }
+if ${ac_cv_search_CertOpenStore+:} false; then :
+ $as_echo_n "(cached) " >&6
+else
+ ac_func_search_save_LIBS=$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 CertOpenStore ();
+int
+main ()
+{
+return CertOpenStore ();
+ ;
+ return 0;
+}
+_ACEOF
+for ac_lib in '' crypt32; do
+ if test -z "$ac_lib"; then
+ ac_res="none required"
+ else
+ ac_res=-l$ac_lib
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
+ fi
+ if ac_fn_c_try_link "$LINENO"; then :
+ ac_cv_search_CertOpenStore=$ac_res
+fi
+rm -f core conftest.err conftest.$ac_objext \
+ conftest$ac_exeext
+ if ${ac_cv_search_CertOpenStore+:} false; then :
+ break
+fi
+done
+if ${ac_cv_search_CertOpenStore+:} false; then :
+
+else
+ ac_cv_search_CertOpenStore=no
+fi
+rm conftest.$ac_ext
+LIBS=$ac_func_search_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_CertOpenStore" >&5
+$as_echo "$ac_cv_search_CertOpenStore" >&6; }
+ac_res=$ac_cv_search_CertOpenStore
+if test "$ac_res" != no; then :
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
+
+fi
+

if test "$with_readline" = yes; then

diff --git a/configure.in b/configure.in
index 0832636..0911ec0 100644
--- a/configure.in
+++ b/configure.in
@@ -1158,6 +1158,7 @@ AC_SEARCH_LIBS(sched_yield, rt)
AC_SEARCH_LIBS(gethostbyname_r, nsl)
# Cygwin:
AC_SEARCH_LIBS(shmget, cygipc)
+AC_SEARCH_LIBS(CertOpenStore, crypt32)

if test "$with_readline" = yes; then
PGAC_CHECK_READLINE
38 changes: 30 additions & 8 deletions ports/libpq/portfile.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,15 @@ set(PATCHES
patches/windows/MSBuildProject_fix_gendef_perl.patch
patches/windows/msgfmt.patch
patches/windows/python_lib.patch
patches/windows/fix-compile-flag-Zi.patch
patches/linux/configure.patch)
patches/windows/fix-compile-flag-Zi.patch)

if(VCPKG_TARGET_IS_MINGW)
list(APPEND PATCHES patches/mingw/additional-zlib-names.patch)
list(APPEND PATCHES patches/mingw/link-with-crypt32.patch)
endif()
if(VCPKG_TARGET_IS_LINUX)
list(APPEND PATCHES patches/linux/configure.patch)
endif()
if(VCPKG_LIBRARY_LINKAGE STREQUAL static)
list(APPEND PATCHES patches/windows/MSBuildProject-static-lib.patch)
list(APPEND PATCHES patches/windows/Mkvcbuild-static-lib.patch)
Expand Down Expand Up @@ -107,7 +113,7 @@ endif()
file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/share/${PORT})

## Do the build
if(VCPKG_TARGET_IS_WINDOWS)
if(VCPKG_TARGET_IS_WINDOWS AND NOT VCPKG_TARGET_IS_MINGW)
file(GLOB SOURCE_FILES ${SOURCE_PATH}/*)
foreach(_buildtype ${port_config_list})
# Copy libpq sources.
Expand Down Expand Up @@ -274,13 +280,10 @@ else()
vcpkg_configure_make(
SOURCE_PATH ${SOURCE_PATH}
COPY_SOURCE
DETERMINE_BUILD_TRIPLET
OPTIONS
${BUILD_OPTS}
--with-includes=${CURRENT_INSTALLED_DIR}/include
OPTIONS_RELEASE
--with-libraries=${CURRENT_INSTALLED_DIR}/lib
OPTIONS_DEBUG
--with-libraries=${CURRENT_INSTALLED_DIR}/debug/lib
--enable-debug
)

Expand All @@ -289,6 +292,9 @@ else()
else()
set(ENV{LIBPQ_LIBRARY_TYPE} static)
endif()
if(VCPKG_TARGET_IS_MINGW)
set(ENV{USING_MINGW} yes)
endif()
vcpkg_install_make()

file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include)
Expand All @@ -300,7 +306,23 @@ else()
vcpkg_copy_tool_dependencies(${CURRENT_PACKAGES_DIR}/tools/${PORT}/bin)
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/tools/${PORT}/debug)
endif()
set(USE_DL ON)
if(VCPKG_TARGET_IS_MINGW AND VCPKG_LIBRARY_LINKAGE STREQUAL "dynamic")
if (NOT VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release")
file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/bin)
file(RENAME ${CURRENT_PACKAGES_DIR}/lib/libpq.a ${CURRENT_PACKAGES_DIR}/lib/libpq.dll.a)
file(RENAME ${CURRENT_PACKAGES_DIR}/lib/libpq.dll ${CURRENT_PACKAGES_DIR}/bin/libpq.dll)
endif()
if (NOT VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug")
file(MAKE_DIRECTORY ${CURRENT_PACKAGES_DIR}/debug/bin)
file(RENAME ${CURRENT_PACKAGES_DIR}/debug/lib/libpq.a ${CURRENT_PACKAGES_DIR}/debug/lib/libpq.dll.a)
file(RENAME ${CURRENT_PACKAGES_DIR}/debug/lib/libpq.dll ${CURRENT_PACKAGES_DIR}/debug/bin/libpq.dll)
endif()
endif()
if(VCPKG_TARGET_IS_MINGW)
set(USE_DL OFF)
else()
set(USE_DL ON)
endif()
endif()

configure_file(${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake ${CURRENT_PACKAGES_DIR}/share/postgresql/vcpkg-cmake-wrapper.cmake @ONLY)
Expand Down
2 changes: 1 addition & 1 deletion ports/libpq/vcpkg.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "libpq",
"version": "12.2",
"port-version": 13,
"port-version": 14,
"description": "The official database access API of postgresql",
"homepage": "https://www.postgresql.org/",
"supports": "!uwp",
Expand Down
2 changes: 1 addition & 1 deletion versions/baseline.json
Original file line number Diff line number Diff line change
Expand Up @@ -3366,7 +3366,7 @@
},
"libpq": {
"baseline": "12.2",
"port-version": 13
"port-version": 14
},
"libpqxx": {
"baseline": "7.3.1",
Expand Down
Loading