]> git.ipfire.org Git - thirdparty/curl.git/commitdiff
windows: drop code and curl manifest targeting W2K and older
authorViktor Szakats <commit@vsz.me>
Mon, 24 Feb 2025 15:25:38 +0000 (16:25 +0100)
committerViktor Szakats <commit@vsz.me>
Mon, 24 Feb 2025 20:00:31 +0000 (21:00 +0100)
curl requires Windows XP since 2023. Drop version detection code using
`GetVersionEx()` aimed to support earlier Windows versions. With that
call deleted, the embedded manifest in `curl.rc` becomes unnecessary.
Delete it too, along with the enabler logic in build systems.

This allows to stop forcing `/MANIFEST:NO` for MSVC builds. Dropping it
fixes VS2008 shared builds, that require an auto-generated SxS
(side-by-side assembly) manifest to find their CRT DLLs. This was the
issue that prevented VS2008 `curl.exe` launching on AppVeyor CI:
```
src/curl.exe: error while loading shared libraries: ?: cannot open shared object file: No such file or directory
```
Ref: https://ci.appveyor.com/project/curlorg/curl/builds/51577006/job/eitypvwlb1rxr11d#L261

FWIW the `curl.rc` embedded manifest wasn't ever enabled for VS2008 CI
builds either, because CMake did not pass our custom macro via
`CMAKE_RC_FLAGS` to `rc.exe`. For reasons I could not figure out.

After this patch the curl build no longer inject its own manifest, and
lets the default be applied by linkers and toolchains. It fixes VS2008
shared builds. curl continues to detect the real Windows version via
`RtlVerifyVersionInfo()` from `ntdll`.

Follow-up to 960d601481eed46d7b46391380c4869bcf0d9f19 #12225
Follow-up to 5044909ca251d3d190d8c5cc45243a04d244eaed #7810
Follow-up to ebd213270a017a6830928ee2e1f4a9cabc799898 #1221
Ref: #15972
Cherry-picked from #16394

Closes #16453

CMakeLists.txt
lib/setup-win32.h
lib/version_win32.c
src/Makefile.am
src/curl.rc
winbuild/MakefileBuild.vc

index dcba09d539fd81a0e3d88eb383dad92dc0c2b84f..af0ce66650e3749603ee6ea8e593abc378aac7c4 100644 (file)
@@ -1983,9 +1983,6 @@ if(WIN32)
     set(USE_WIN32_LARGE_FILES ON)
   endif()
 
-  # Use the manifest embedded in the Windows Resource
-  string(APPEND CMAKE_RC_FLAGS " -DCURL_EMBED_MANIFEST")
-
   # We use crypto functions that are not available for UWP apps
   if(NOT WINDOWS_STORE)
     set(USE_WIN32_CRYPTO ON)
@@ -2001,9 +1998,6 @@ if(WIN32)
 endif()
 
 if(MSVC)
-  # Disable default manifest added by CMake
-  string(APPEND CMAKE_EXE_LINKER_FLAGS " -MANIFEST:NO")
-
   string(APPEND CMAKE_C_FLAGS " -MP")  # Parallel compilation
 endif()
 
index 70d83ad8e96fd9029b4bdcdbd495313a2f644cc2..35fe513a84206091654fe6eeedc4aa588cd3ae34 100644 (file)
  * newer symbols.
  */
 
-#ifndef _WIN32_WINNT_NT4
-#define _WIN32_WINNT_NT4            0x0400   /* Windows NT 4.0 */
-#endif
-#ifndef _WIN32_WINNT_WIN2K
-#define _WIN32_WINNT_WIN2K          0x0500   /* Windows 2000 */
-#endif
 #ifndef _WIN32_WINNT_WINXP
 #define _WIN32_WINNT_WINXP          0x0501   /* Windows XP */
 #endif
index 21a122f2a628c4a8e40ddcc95772afb46f0a9e4f..d58dbec724a1d371508eb430515112012baee0f9 100644 (file)
@@ -113,88 +113,12 @@ bool curlx_verify_windows_version(const unsigned int majorVersion,
     /* we are always running on PLATFORM_WINNT */
     matched = FALSE;
   }
-#elif !defined(_WIN32_WINNT) || !defined(_WIN32_WINNT_WIN2K) || \
-    (_WIN32_WINNT < _WIN32_WINNT_WIN2K)
-  OSVERSIONINFO osver;
-
-  memset(&osver, 0, sizeof(osver));
-  osver.dwOSVersionInfoSize = sizeof(osver);
-
-  /* Find out Windows version */
-  if(GetVersionEx(&osver)) {
-    /* Verify the Operating System version number */
-    switch(condition) {
-    case VERSION_LESS_THAN:
-      if(osver.dwMajorVersion < majorVersion ||
-        (osver.dwMajorVersion == majorVersion &&
-         osver.dwMinorVersion < minorVersion) ||
-        (buildVersion != 0 &&
-         (osver.dwMajorVersion == majorVersion &&
-          osver.dwMinorVersion == minorVersion &&
-          osver.dwBuildNumber < buildVersion)))
-        matched = TRUE;
-      break;
-
-    case VERSION_LESS_THAN_EQUAL:
-      if(osver.dwMajorVersion < majorVersion ||
-        (osver.dwMajorVersion == majorVersion &&
-         osver.dwMinorVersion < minorVersion) ||
-        (osver.dwMajorVersion == majorVersion &&
-         osver.dwMinorVersion == minorVersion &&
-         (buildVersion == 0 ||
-          osver.dwBuildNumber <= buildVersion)))
-        matched = TRUE;
-      break;
-
-    case VERSION_EQUAL:
-      if(osver.dwMajorVersion == majorVersion &&
-         osver.dwMinorVersion == minorVersion &&
-        (buildVersion == 0 ||
-         osver.dwBuildNumber == buildVersion))
-        matched = TRUE;
-      break;
-
-    case VERSION_GREATER_THAN_EQUAL:
-      if(osver.dwMajorVersion > majorVersion ||
-        (osver.dwMajorVersion == majorVersion &&
-         osver.dwMinorVersion > minorVersion) ||
-        (osver.dwMajorVersion == majorVersion &&
-         osver.dwMinorVersion == minorVersion &&
-         (buildVersion == 0 ||
-          osver.dwBuildNumber >= buildVersion)))
-        matched = TRUE;
-      break;
-
-    case VERSION_GREATER_THAN:
-      if(osver.dwMajorVersion > majorVersion ||
-        (osver.dwMajorVersion == majorVersion &&
-         osver.dwMinorVersion > minorVersion) ||
-        (buildVersion != 0 &&
-         (osver.dwMajorVersion == majorVersion &&
-          osver.dwMinorVersion == minorVersion &&
-          osver.dwBuildNumber > buildVersion)))
-        matched = TRUE;
-      break;
-    }
-
-    /* Verify the platform identifier (if necessary) */
-    if(matched) {
-      switch(platform) {
-      case PLATFORM_WINDOWS:
-        if(osver.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS)
-          matched = FALSE;
-        break;
-
-      case PLATFORM_WINNT:
-        if(osver.dwPlatformId != VER_PLATFORM_WIN32_NT)
-          matched = FALSE;
-        break;
-
-      default: /* like platform == PLATFORM_DONT_CARE */
-        break;
-      }
-    }
-  }
+#elif defined(UNDER_CE)
+  (void)majorVersion;
+  (void)minorVersion;
+  (void)buildVersion;
+  (void)platform;
+  (void)condition;
 #else
   ULONGLONG cm = 0;
   struct OUR_OSVERSIONINFOEXW osver;
index 0969d816507afbd84cd332980c1f6edbb3d6835e..b3b4fd0535a97ecd89fabad5c68941db75f9f433 100644 (file)
@@ -213,7 +213,7 @@ listhelp:
 
 if HAVE_WINDRES
 .rc.o:
-       $(RC) -I$(top_srcdir)/include -DCURL_EMBED_MANIFEST $(RCFLAGS) -i $< -o $@
+       $(RC) -I$(top_srcdir)/include $(RCFLAGS) -i $< -o $@
 endif
 
 dist-hook:
index 475dfbe89652c5664c8eecae6c765923ac7232d9..389b483b4b99a88bc4911d744d30dd0181aa7cc0 100644 (file)
@@ -63,51 +63,3 @@ BEGIN
     VALUE "Translation", 0x409, 1200
   END
 END
-
-/* Manifest */
-
-#if defined(CURL_EMBED_MANIFEST)
-
-/* String escaping rules:
-     https://msdn.microsoft.com/library/aa381050
-   Application Manifest doc, including the list of 'supportedOS Id's:
-     https://msdn.microsoft.com/library/aa374191 */
-
-#ifndef CREATEPROCESS_MANIFEST_RESOURCE_ID
-#define CREATEPROCESS_MANIFEST_RESOURCE_ID  1
-#endif
-#ifndef RT_MANIFEST
-#define RT_MANIFEST  24
-#endif
-
-#define _STR(macro)   _STR_(macro)
-#define _STR_(macro)  #macro
-
-CREATEPROCESS_MANIFEST_RESOURCE_ID RT_MANIFEST
-BEGIN
-  "<?xml version=""1.0"" encoding=""UTF-8"" standalone=""yes""?>"
-  "<assembly xmlns=""urn:schemas-microsoft-com:asm.v1"" manifestVersion=""1.0"">"
-    "<assemblyIdentity name=""The curl executable"" version="""
-      _STR(LIBCURL_VERSION_MAJOR) "."
-      _STR(LIBCURL_VERSION_MINOR) "."
-      _STR(LIBCURL_VERSION_PATCH) ".0"" type=""win32""/>"
-    "<compatibility xmlns=""urn:schemas-microsoft-com:compatibility.v1"">"
-      "<application>"
-        "<supportedOS Id=""{e2011457-1546-43c5-a5fe-008deee3d3f0}""/>"  /* Vista / Server 2008 */
-        "<supportedOS Id=""{35138b9a-5d96-4fbd-8e2d-a2440225f93a}""/>"  /* 7 / Server 2008 R2 */
-        "<supportedOS Id=""{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}""/>"  /* 8 / Server 2012 */
-        "<supportedOS Id=""{1f676c76-80e1-4239-95bb-83d0f6d0da78}""/>"  /* 8.1 / Server 2012 R2 */
-        "<supportedOS Id=""{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}""/>"  /* 10 / Server 2016 */
-      "</application>"
-    "</compatibility>"
-    "<trustInfo xmlns=""urn:schemas-microsoft-com:asm.v3"">"
-      "<security>"
-        "<requestedPrivileges>"
-          "<requestedExecutionLevel level=""asInvoker"" uiAccess=""false""/>"
-        "</requestedPrivileges>"
-      "</security>"
-    "</trustInfo>"
-  "</assembly>"
-END
-
-#endif
index 06fec81ee73353eb3ad858e497dfa087326ea32e..cb3d0fef4372716ee1a7a840351b04c2a8a19e5a 100644 (file)
@@ -415,8 +415,6 @@ GEN_PDB = true
 
 !IFDEF EMBED_MANIFEST
 MANIFESTTOOL = $(MT) -manifest $(DIRDIST)\bin\$(PROGRAM_NAME).manifest -outputresource:$(DIRDIST)\bin\$(PROGRAM_NAME);1
-!ELSE
-CURL_RC_FLAGS = $(CURL_RC_FLAGS) /dCURL_EMBED_MANIFEST
 !ENDIF
 
 # Runtime library configuration