From 874ea99492024af22080ffd86b4e33bd18516078 Mon Sep 17 00:00:00 2001 From: deepend Date: Sat, 14 Feb 2026 15:57:41 -0700 Subject: [PATCH] =?UTF-8?q?win32/copy/copy.vcxproj=20=20=20Switched=20hard?= =?UTF-8?q?coded=20DLL=20names=20to=20wildcard=20patterns=20(ex:=20atk-1.0?= =?UTF-8?q?-0.dll=20=E2=86=92=20*atk-1.0-0.dll,=20iconv.dll=20=E2=86=92=20?= =?UTF-8?q?*iconv*.dll,=20etc.)=20so=20it=20correctly=20picks=20up=20lib*?= =?UTF-8?q?=20prefixed=20builds.=20=20=20Made=20Enchant=20provider=20copyi?= =?UTF-8?q?ng=20resilient=20by=20copying=20lib\enchant\*.dll=20instead=20o?= =?UTF-8?q?f=20a=20single=20hardcoded=20libenchant=5Fmyspell.dll.=20=20=20?= =?UTF-8?q?Added=20optional=20copy=20support=20for=20LuaJIT=20DLLs=20(luaj?= =?UTF-8?q?it*.dll)=20alongside=20lua51.dll.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit win32/installer/zoitechat.iss.tt Updated DLL Source: entries to match real-world names from dependency bundles using wildcards (*glib-2*.dll, *gtk-3*.dll, etc.). Added optional LuaJIT inclusion (skip if missing) and wildcarded girepository. win32/zoitechat.props Added env overrides so CI (and humans) can actually control paths: ZOITECHAT_DEPS_PATH ZOITECHAT_PYTHON3_PATH already supported ISCC_EXE and now it actually matters. Fixed glib-genmarshal handling to prefer glib-genmarshal.exe if present (and only use Python script path if needed). Added library-name auto-detection for MSVC import libs (gtk-3.lib vs gtk-3.0.lib vs libgtk-3.lib, etc.) so linking doesn’t die just because the bundle names differ. Ensured InstallerEnabled gets re-evaluated after IsccPath is resolved (GTK3 had the order wrong, so installer builds could be silently disabled). .github/workflows/windows-build.yml Made artifact collection and plugin validation tolerate win32 vs Win32 output directory naming, instead of assuming humans are consistent (they aren’t). --- .github/workflows/windows-build.yml | 15 +- win32/copy/copy.vcxproj | 224 +++++++++++---------- win32/installer/zoitechat.iss.tt | 51 ++--- win32/zoitechat.props | 302 +++++++++++++++------------- 4 files changed, 318 insertions(+), 274 deletions(-) diff --git a/.github/workflows/windows-build.yml b/.github/workflows/windows-build.yml index b26fbd0e..d1f596b4 100644 --- a/.github/workflows/windows-build.yml +++ b/.github/workflows/windows-build.yml @@ -212,7 +212,10 @@ jobs: msbuild win32\zoitechat.sln /m /verbosity:minimal /p:Configuration=Release /p:Platform=${{ matrix.platform }} - set "PLUGIN_DIR=..\zoitechat-build\${{ matrix.platform }}\rel\plugins" + set "BUILD_DIR=..\zoitechat-build\${{ matrix.platform }}" + if not exist "%BUILD_DIR%" if /I "${{ matrix.platform }}"=="win32" set "BUILD_DIR=..\zoitechat-build\Win32" + if not exist "%BUILD_DIR%" if /I "${{ matrix.platform }}"=="win32" set "BUILD_DIR=..\zoitechat-build\WIN32" + set "PLUGIN_DIR=%BUILD_DIR%\rel\plugins" for %%F in (hcchecksum.dll hcexec.dll hcfishlim.dll hcsysinfo.dll hcupd.dll hcwinamp.dll hcperl.dll hcpython3.dll hclua.dll) do ( if not exist "%PLUGIN_DIR%\%%F" ( if /I "%%F"=="hclua.dll" ( @@ -230,7 +233,15 @@ jobs: - name: Preparing Artifacts run: | - move ..\zoitechat-build\${{ matrix.platform }}\ZoiteChat*.exe .\ + set "BUILD_DIR=..\zoitechat-build\${{ matrix.platform }}" + if not exist "%BUILD_DIR%" if /I "${{ matrix.platform }}"=="win32" set "BUILD_DIR=..\zoitechat-build\Win32" + if not exist "%BUILD_DIR%" if /I "${{ matrix.platform }}"=="win32" set "BUILD_DIR=..\zoitechat-build\WIN32" + if not exist "%BUILD_DIR%" ( + echo Missing build output dir: %BUILD_DIR% + dir ..\zoitechat-build + exit /b 1 + ) + move "%BUILD_DIR%\ZoiteChat*.exe" .\ move ..\zoitechat-build .\ shell: cmd diff --git a/win32/copy/copy.vcxproj b/win32/copy/copy.vcxproj index d7dc6f25..bd3e7b69 100644 --- a/win32/copy/copy.vcxproj +++ b/win32/copy/copy.vcxproj @@ -1,111 +1,113 @@ - - - - v143 - Application - - - - Release - Win32 - - - Release - x64 - - - - {C9B735E4-75BC-45AC-A5E3-39A6D076F912} - copy - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + v143 + Application + + + + Release + Win32 + + + Release + x64 + + + + {C9B735E4-75BC-45AC-A5E3-39A6D076F912} + copy + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/win32/installer/zoitechat.iss.tt b/win32/installer/zoitechat.iss.tt index 98a98e64..06a43100 100644 --- a/win32/installer/zoitechat.iss.tt +++ b/win32/installer/zoitechat.iss.tt @@ -114,17 +114,17 @@ Source: "share\themes\MS-Windows\*"; DestDir: "{app}\share\themes\MS-Windows"; F Source: "share\locale\*"; DestDir: "{app}\share\locale"; Flags: ignoreversion createallsubdirs recursesubdirs; Components: translations Source: "etc\fonts\*"; DestDir: "{app}\etc\fonts"; Flags: ignoreversion createallsubdirs recursesubdirs; Components: libs -Source: "atk-1.0-0.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs -Source: "cairo*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs -Source: "freetype-*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs -Source: "fribidi-0.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs -Source: "fontconfig-*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs -Source: "gdk_pixbuf-2.0-0.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs -Source: "gdk-3-*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs -Source: "gio-2.0-0.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs -Source: "glib-2.0-0.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs -Source: "gmodule-2.0-0.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs -Source: "gobject-2.0-0.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs +Source: "*atk-1.0-0.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs +Source: "*cairo*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs +Source: "*freetype*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs +Source: "*fribidi*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs +Source: "*fontconfig*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs +Source: "*gdk_pixbuf*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs +Source: "*gdk-3*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs +Source: "*gio-2*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs +Source: "*glib-2*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs +Source: "*gmodule-2*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs +Source: "*gobject-2*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs #if APPARCH == "x64" Source: "gspawn-win64-helper.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: libs Source: "gspawn-win64-helper-console.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: libs @@ -132,24 +132,24 @@ Source: "gspawn-win64-helper-console.exe"; DestDir: "{app}"; Flags: ignoreversio Source: "gspawn-win32-helper.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: libs Source: "gspawn-win32-helper-console.exe"; DestDir: "{app}"; Flags: ignoreversion; Components: libs #endif -Source: "gthread-2.0-0.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs -Source: "gtk-3-*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs -Source: "iconv.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs +Source: "*gthread-2*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs +Source: "*gtk-3*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs +Source: "*iconv*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs Source: "libcrypto-*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs Source: "libssl-*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs Source: "libenchant.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs -Source: "ffi-*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs -Source: "intl.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs +Source: "*ffi*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs +Source: "*intl*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs Source: "jpeg*.dll"; DestDir: "{app}"; Flags: ignoreversion skipifsourcedoesntexist; Components: libs -Source: "libpng16.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs +Source: "*png*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs Source: "libjpeg*.dll"; DestDir: "{app}"; Flags: ignoreversion skipifsourcedoesntexist; Components: libs -Source: "libxml2-*.dll"; DestDir: "{app}"; Flags: ignoreversion skipifsourcedoesntexist; Components: libs +Source: "*xml2*.dll"; DestDir: "{app}"; Flags: ignoreversion skipifsourcedoesntexist; Components: libs Source: "xml2-*.dll"; DestDir: "{app}"; Flags: ignoreversion skipifsourcedoesntexist; Components: libs -Source: "pango-1.0-0.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs -Source: "pangocairo-1.0-0.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs -Source: "pangoft2-1.0-0.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs -Source: "pangowin32-1.0-0.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs -Source: "zlib1.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs +Source: "*pango-1.0-0.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs +Source: "*pangocairo-1.0-0.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs +Source: "*pangoft2-1.0-0.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs +Source: "*pangowin32-1.0-0.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs +Source: "*zlib*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: libs Source: "plugins\hcnotifications-winrt.dll"; DestDir: "{app}\plugins"; Flags: ignoreversion; Components: libs @@ -160,8 +160,9 @@ Source: "lib\enchant\*"; DestDir: "{app}\lib\enchant"; Flags: ignoreversion; Com Source: "lib\gtk-3.0\3.0.0\immodules\*"; DestDir: "{app}\lib\gtk-3.0\3.0.0\immodules"; Flags: ignoreversion createallsubdirs recursesubdirs skipifsourcedoesntexist; Components: libs Source: "lib\gtk-3.0\3.0.0\printbackends\*"; DestDir: "{app}\lib\gtk-3.0\3.0.0\printbackends"; Flags: ignoreversion createallsubdirs recursesubdirs skipifsourcedoesntexist; Components: libs -Source: "girepository-2.0-0.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: langs\lua -Source: "lua51.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: langs\lua +Source: "*girepository*.dll"; DestDir: "{app}"; Flags: ignoreversion; Components: langs\lua +Source: "lua51.dll"; DestDir: "{app}"; Flags: ignoreversion skipifsourcedoesntexist; Components: langs\lua +Source: "luajit*.dll"; DestDir: "{app}"; Flags: ignoreversion skipifsourcedoesntexist; Components: langs\lua Source: "lib\lua\2.1\lgi\*.dll"; DestDir: "{app}\lib\lua\2.1\lgi"; Flags: ignoreversion; Components: langs\lua Source: "lib\girepository-1.0\*.typelib"; DestDir: "{app}\lib\girepository-1.0"; Flags: ignoreversion; Components: langs\lua Source: "share\lua\2.1\*.lua"; DestDir: "{app}\share\lua\2.1"; Flags: ignoreversion; Components: langs\lua diff --git a/win32/zoitechat.props b/win32/zoitechat.props index 5b90366b..919c6e08 100644 --- a/win32/zoitechat.props +++ b/win32/zoitechat.props @@ -1,136 +1,166 @@ - - - - - - - c:\gtk-build\gtk - c:\gtk-build\gendef - c:\gtk-build\perl-5.20 - c:\gtk-build\python-3.14 - c:\gtk-build\WinSparkle - - - - - - GTK_DISABLE_DEPRECATED;GDK_PIXBUF_DISABLE_DEPRECATED;G_DISABLE_SINGLE_INCLUDES;GDK_PIXBUF_DISABLE_SINGLE_INCLUDES;GTK_DISABLE_SINGLE_INCLUDES;HAVE_X509_GET_SIGNATURE_NID;HAVE_SSL_CTX_GET_SSL_METHOD;DEFAULT_CERT_FILE="cert.pem";HAVE_STRTOULL;strtoull=_strtoui64;strcasecmp=stricmp;strncasecmp=strnicmp;__inline__=__inline;$(GtkDefines) - - $(YourDepsPath)\$(PlatformName)\release - $(YourGendefPath) - $(YourWinSparklePath)\$(PlatformName) - $(YourPerlPath)\$(PlatformName) - perl520 - $(YourPython3Path)\$(PlatformName) - python314 - hcpython3 - true - false - true - false - true - false - $(DepsRoot)\include\luajit-2.1 - $(DepsRoot)\include\luajit - $(DepsRoot)\include\lua5.1 - $(DepsRoot)\include\lua51 - hclua - lua51 - luajit-5.1 - luajit - true - false - "$(Python3Path)\python.exe" "$(DepsRoot)\bin\glib-genmarshal" - "$(Python3Path)\python.exe" "$(DepsRoot)\bin\glib-genmarshal" - $(DepsRoot)\include\glib-2.0;$(DepsRoot)\lib\glib-2.0\include;$(DepsRoot)\include\libxml2 - true - HAVE_GTK3 - $(DepsRoot)\include\gtk-3.0;$(DepsRoot)\lib\gtk-3.0\include - $(DepsRoot)\include\atk-1.0;$(DepsRoot)\include\cairo;$(DepsRoot)\include\pango-1.0;$(DepsRoot)\include\gdk-pixbuf-2.0;$(DepsRoot)\include\harfbuzz - $(Gtk3);$(GtkCommon) - ssleay32.lib - libeay32.lib - libssl.lib - libcrypto.lib - $(SslModernLib);$(CryptoModernLib) - $(SslLegacyLib);$(CryptoLegacyLib) - $(DepsRoot)\include - gtk-3.lib;gdk-3.lib;wininet.lib;winmm.lib;ws2_32.lib;atk-1.0.lib;gio-2.0.lib;gdk_pixbuf-2.0.lib;pangowin32-1.0.lib;pangocairo-1.0.lib;pango-1.0.lib;cairo.lib;gobject-2.0.lib;gmodule-2.0.lib;glib-2.0.lib;intl.lib;iconv.lib;zlib1.lib;xml2.lib;jpeg.lib;libpng16.lib;$(OpenSslLibs) - $(SolutionDir)..\data\\ - $(SolutionDir)..\..\zoitechat-build - $(ZoiteChatBuild)\$(PlatformName)\bin\ - $(ZoiteChatBuild)\$(PlatformName)\obj\ - $(ZoiteChatBuild)\$(PlatformName)\lib\ - $(ZoiteChatBuild)\$(PlatformName)\pdb\ - $(ZoiteChatBuild)\$(PlatformName)\rel\ - $(ISCC_EXE) - $(ProgramFiles(x86))\Inno Setup 5\iscc.exe - $(ProgramFiles(x86))\Inno Setup 6\iscc.exe - $(ProgramFiles)\Inno Setup 5\iscc.exe - $(ProgramFiles)\Inno Setup 6\iscc.exe - - - - false - $(ZoiteChatObj)$(ProjectName)\ - false - true - MultiByte - - - - - Level3 - NotUsing - 4996 - /d2Zi+ %(AdditionalOptions) - true - - - MaxSpeed - - - true - true - true - NTDDI_VERSION=NTDDI_WIN8;_WIN32_WINNT=_WIN32_WINNT_WIN8;%(PreProcessorDefinitions) - - - true - - - $(ZoiteChatLib)$(TargetName).lib - $(ZoiteChatPdb)$(TargetName).pdb - Windows - Debug - true - true - UseLinkTimeCodeGeneration - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + $(ZOITECHAT_DEPS_PATH) + c:\gtk-build\gtk + c:\gtk-build\gendef + c:\gtk-build\perl-5.20 + $(ZOITECHAT_PYTHON3_PATH) + c:\gtk-build\python-3.14 + c:\gtk-build\WinSparkle + + + + + + GTK_DISABLE_DEPRECATED;GDK_PIXBUF_DISABLE_DEPRECATED;G_DISABLE_SINGLE_INCLUDES;GDK_PIXBUF_DISABLE_SINGLE_INCLUDES;GTK_DISABLE_SINGLE_INCLUDES;HAVE_X509_GET_SIGNATURE_NID;HAVE_SSL_CTX_GET_SSL_METHOD;DEFAULT_CERT_FILE="cert.pem";HAVE_STRTOULL;strtoull=_strtoui64;strcasecmp=stricmp;strncasecmp=strnicmp;__inline__=__inline;$(GtkDefines) + + $(YourDepsPath)\$(PlatformName)\release + $(YourGendefPath) + $(YourWinSparklePath)\$(PlatformName) + $(YourPerlPath)\$(PlatformName) + perl520 + $(YourPython3Path)\$(PlatformName) + python314 + hcpython3 + true + false + true + false + true + false + $(DepsRoot)\include\luajit-2.1 + $(DepsRoot)\include\luajit + $(DepsRoot)\include\lua5.1 + $(DepsRoot)\include\lua51 + hclua + lua51 + luajit-5.1 + luajit + true + false + "$(DepsRoot)\bin\glib-genmarshal.exe" + "$(Python3Path)\python.exe" "$(DepsRoot)\bin\glib-genmarshal" + $(DepsRoot)\include\glib-2.0;$(DepsRoot)\lib\glib-2.0\include;$(DepsRoot)\include\libxml2 + true + HAVE_GTK3 + $(DepsRoot)\include\gtk-3.0;$(DepsRoot)\lib\gtk-3.0\include + $(DepsRoot)\include\atk-1.0;$(DepsRoot)\include\cairo;$(DepsRoot)\include\pango-1.0;$(DepsRoot)\include\gdk-pixbuf-2.0;$(DepsRoot)\include\harfbuzz + $(Gtk3);$(GtkCommon) + ssleay32.lib + libeay32.lib + libssl.lib + libcrypto.lib + $(SslModernLib);$(CryptoModernLib) + $(SslLegacyLib);$(CryptoLegacyLib) + $(DepsRoot)\include + + gtk-3.lib + gtk-3.0.lib + libgtk-3.lib + libgtk-3.0.lib + gdk-3.lib + gdk-3.0.lib + libgdk-3.lib + libgdk-3.0.lib + intl.lib + libintl.lib + iconv.lib + libiconv.lib + zlib1.lib + zlib.lib + libxml2.lib + xml2.lib + libxml2-2.lib + jpeg.lib + libjpeg.lib + libjpeg-8.lib + libjpeg-9.lib + libpng16.lib + libpng16_static.lib + libpng.lib + $(Gtk3Lib);$(Gdk3Lib);wininet.lib;winmm.lib;ws2_32.lib;atk-1.0.lib;gio-2.0.lib;gdk_pixbuf-2.0.lib;pangowin32-1.0.lib;pangocairo-1.0.lib;pango-1.0.lib;cairo.lib;gobject-2.0.lib;gmodule-2.0.lib;glib-2.0.lib;$(IntlLib);$(IconvLib);$(ZlibLib);$(Xml2Lib);$(JpegLib);$(PngLib);$(OpenSslLibs) + $(SolutionDir)..\data\\ + $(SolutionDir)..\..\zoitechat-build + $(ZoiteChatBuild)\$(PlatformName)\bin\ + $(ZoiteChatBuild)\$(PlatformName)\obj\ + $(ZoiteChatBuild)\$(PlatformName)\lib\ + $(ZoiteChatBuild)\$(PlatformName)\pdb\ + $(ZoiteChatBuild)\$(PlatformName)\rel\ + $(ISCC_EXE) + $(ProgramFiles(x86))\Inno Setup 5\iscc.exe + $(ProgramFiles(x86))\Inno Setup 6\iscc.exe + $(ProgramFiles)\Inno Setup 5\iscc.exe + $(ProgramFiles)\Inno Setup 6\iscc.exe + true + + + + false + $(ZoiteChatObj)$(ProjectName)\ + false + true + MultiByte + + + + + Level3 + NotUsing + 4996 + /d2Zi+ %(AdditionalOptions) + true + + + MaxSpeed + + + true + true + true + NTDDI_VERSION=NTDDI_WIN8;_WIN32_WINNT=_WIN32_WINNT_WIN8;%(PreProcessorDefinitions) + + + true + + + $(ZoiteChatLib)$(TargetName).lib + $(ZoiteChatPdb)$(TargetName).pdb + Windows + Debug + true + true + UseLinkTimeCodeGeneration + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +