mirror of
https://github.com/microsoft/vcpkg.git
synced 2025-06-07 01:24:47 +08:00
[libpq] mingw support (#16740)
* [libpq] mingw support * [libpq] Let libpq decides whether to build _shlib or not libpqcommon.a and libpqport.a are internal libraries intended for sharing code between the frontend and the backend. It's best to let the build system decides if the _shlib variant should be built or not * [libpq] Always run install-lib-static on mingw * [libpq] Rename .a to .dll.a and move .dll to correct folder * [libpq] Create bin folder for mingw * [vcpkg baseline] Update libpq * [libpq] Link with crypt32 on mingw * [vcpkg baseline] Update libpq * [libpq] Fix release/debug only build * [vcpkg baseline] Update libpq
This commit is contained in:
parent
8f54f09957
commit
818cf25415
@ -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
|
||||
$(MAKE) -C src/interfaces/libpq MAKELEVEL=0 all-$(LIBPQ_LIBRARY_TYPE)-lib
|
||||
$(MAKE) -C src/bin/pg_config MAKELEVEL=0
|
||||
|
||||
@ -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
ports/libpq/patches/mingw/additional-zlib-names.patch
Normal file
186
ports/libpq/patches/mingw/additional-zlib-names.patch
Normal file
@ -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
ports/libpq/patches/mingw/link-with-crypt32.patch
Normal file
79
ports/libpq/patches/mingw/link-with-crypt32.patch
Normal file
@ -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
|
@ -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)
|
||||
@ -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.
|
||||
@ -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
|
||||
)
|
||||
|
||||
@ -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)
|
||||
@ -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)
|
||||
|
@ -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",
|
||||
|
@ -3382,7 +3382,7 @@
|
||||
},
|
||||
"libpq": {
|
||||
"baseline": "12.2",
|
||||
"port-version": 13
|
||||
"port-version": 14
|
||||
},
|
||||
"libpqxx": {
|
||||
"baseline": "7.3.1",
|
||||
|
@ -1,5 +1,10 @@
|
||||
{
|
||||
"versions": [
|
||||
{
|
||||
"git-tree": "212f71f4fc5edf570dece0822c7d9863dbe0c90c",
|
||||
"version": "12.2",
|
||||
"port-version": 14
|
||||
},
|
||||
{
|
||||
"git-tree": "740637e4b7da153db5afc1a568f6411ff88167c9",
|
||||
"version": "12.2",
|
||||
|
Loading…
Reference in New Issue
Block a user