]> granicus.if.org Git - postgresql/commitdiff
MinGW: Link with shell32.dll instead of shfolder.dll.
authorNoah Misch <noah@leadboat.com>
Wed, 22 Oct 2014 02:55:43 +0000 (22:55 -0400)
committerNoah Misch <noah@leadboat.com>
Wed, 22 Oct 2014 02:56:28 +0000 (22:56 -0400)
This improves consistency with the MSVC build.  On buildfarm member
narwhal, since commit 846e91e0223cf9f2821c3ad4dfffffbb929cb027,
shfolder.dll:SHGetFolderPath() crashes when dblink calls it by way of
pqGetHomeDirectory().  Back-patch to 9.4, where that commit first
appeared.  How it caused this regression remains a mystery.  This is a
partial revert of commit 889f03812916b146ae504c0fad5afdc7bf2e8a2a, which
adopted shfolder.dll for Windows NT 4.0 compatibility.  PostgreSQL 8.2
dropped support for that operating system.

src/Makefile.global.in
src/interfaces/ecpg/ecpglib/Makefile
src/interfaces/libpq/Makefile
src/interfaces/libpq/win32.mak
src/port/path.c

index 7b6ccd5f9cb5d6b55eb2a7be6aee5f6b28a26a66..d347322233b5abcc40d3596cec8428a4af068734 100644 (file)
@@ -547,10 +547,9 @@ LIBOBJS = @LIBOBJS@
 
 LIBS := -lpgcommon -lpgport $(LIBS)
 
-# to make ws2_32.lib the last library, and always link with shfolder,
-# so SHGetFolderName isn't picked up from shell32.dll
+# to make ws2_32.lib the last library
 ifeq ($(PORTNAME),win32)
-LIBS += -lws2_32 -lshfolder
+LIBS += -lws2_32
 endif
 
 # Not really standard libc functions, used by the backend.
index ae4474f98848a0fdc9fa3988e340e3787ab9869b..e65fea93452cd780d47e741be184b558e91cf43e 100644 (file)
@@ -38,11 +38,6 @@ SHLIB_PREREQS = submake-libpq submake-pgtypeslib
 
 SHLIB_EXPORTS = exports.txt
 
-ifeq ($(PORTNAME), win32)
-# Link to shfolder.dll instead of shell32.dll
-SHLIB_LINK += -lshfolder
-endif
-
 PKG_CONFIG_REQUIRES_PRIVATE = libpq libpgtypes
 
 all: all-lib
index c794b9647c6362b136c8b03262ed0242c735535d..7fea34369fcc25e778563e0db5572538ac406077 100644 (file)
@@ -70,7 +70,7 @@ else
 SHLIB_LINK += $(filter -lcrypt -ldes -lcom_err -lcrypto -lk5crypto -lkrb5 -lgssapi32 -lssl -lsocket -lnsl -lresolv -lintl $(PTHREAD_LIBS), $(LIBS)) $(LDAP_LIBS_FE)
 endif
 ifeq ($(PORTNAME), win32)
-SHLIB_LINK += -lshfolder -lwsock32 -lws2_32 -lsecur32 $(filter -leay32 -lssleay32 -lcomerr32 -lkrb5_32, $(LIBS))
+SHLIB_LINK += -lshell32 -lwsock32 -lws2_32 -lsecur32 $(filter -leay32 -lssleay32 -lcomerr32 -lkrb5_32, $(LIBS))
 endif
 
 SHLIB_EXPORTS = exports.txt
index 23e09e981006bf11127d58910a92953814ae3deb..4e4a60e9b8b86cf5c91028d585a2eff8163b7c9c 100644 (file)
@@ -208,7 +208,7 @@ CPP_SBRS=.
 RSC_PROJ=/l 0x409 /fo"$(INTDIR)\libpq.res"
 
 LINK32=link.exe
-LINK32_FLAGS=kernel32.lib user32.lib advapi32.lib shfolder.lib wsock32.lib ws2_32.lib secur32.lib $(SSL_LIBS)  $(KFW_LIB) $(ADD_SECLIB) \
+LINK32_FLAGS=kernel32.lib user32.lib advapi32.lib shell32.lib wsock32.lib ws2_32.lib secur32.lib $(SSL_LIBS)  $(KFW_LIB) $(ADD_SECLIB) \
  /nologo /subsystem:windows /dll $(LOPT) /incremental:no \
  /pdb:"$(OUTDIR)\libpqdll.pdb" /machine:$(CPU) \
  /out:"$(OUTDIR)\$(OUTFILENAME).dll"\
index 378920597d0e07ddbd4154030dd2cafa586b0f5e..4f2b152fdc9421be55fc406a9c1d129d2d8fc472 100644 (file)
@@ -785,9 +785,11 @@ get_home_path(char *ret_path)
        char       *tmppath;
 
        /*
-        * Note: We use getenv here because the more modern
-        * SHGetSpecialFolderPath() will force us to link with shell32.lib which
-        * eats valuable desktop heap.
+        * Note: We use getenv() here because the more modern SHGetFolderPath()
+        * would force the backend to link with shell32.lib, which eats valuable
+        * desktop heap.  XXX This function is used only in psql, which already
+        * brings in shell32 via libpq.  Moving this function to its own file
+        * would keep it out of the backend, freeing it from this concern.
         */
        tmppath = getenv("APPDATA");
        if (!tmppath)