wingtk / gvsbuild

GTK stack for Windows
GNU General Public License v2.0
447 stars 168 forks source link

GTK 3.20 and 3.22 are Failing for No hb.h File #474

Closed liudonghua123 closed 2 years ago

liudonghua123 commented 2 years ago

I tried to build gtk3 on GitHub action, however, I can build successfully on gtk3-ver "3.24", but failed on "3.20", "3.22".

The main command I execute is python build.py build --fast-build --keep-tools -p ${{matrix.arch}} --gtk3-ver ${{matrix.gtk3-ver}} --vs-ver 16 gtk3

And the build logs can be viewed on https://github.com/liudonghua123/gvsbuild-binaries/actions/runs/1661939701.

image

logs ```shell Building project gtk3 (3.20.10) Checking for 'C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gtk+.sln' Checking for 'C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs2019\gtk+.sln' Checking for 'C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk+.sln' Vs solution copy: 'C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15' -> 'C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16' File changed (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\broadwayd.vcxproj) same file (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\broadwayd.vcxproj.filters) File changed (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gailutil-3.vcxproj) same file (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gailutil-3.vcxproj.filters) File changed (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gdk-3.vcxproj) same file (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gdk-3.vcxproj.filters) File changed (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gdk3-broadway.vcxproj) same file (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gdk3-broadway.vcxproj.filters) File changed (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gdk3-win32.vcxproj) same file (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gdk3-win32.vcxproj.filters) same file (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk+.sln) File changed (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk-3.vcxproj) same file (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk-3.vcxproj.filters) File changed (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk-builder-tool.vcxproj) same file (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk-builder-tool.vcxproj.filters) File changed (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk-encode-symbolic-svg.vcxproj) same file (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk-encode-symbolic-svg.vcxproj.filters) File changed (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk-query-settings.vcxproj) same file (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk-query-settings.vcxproj.filters) File changed (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk-update-icon-cache.vcxproj) same file (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk-update-icon-cache.vcxproj.filters) same file (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk3-build-defines.props) same file (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk3-copy-gdk-broadway.props) File changed (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk3-demo-application.vcxproj) same file (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk3-demo-application.vcxproj.filters) File changed (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk3-demo.vcxproj) same file (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk3-demo.vcxproj.filters) same file (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk3-gen-srcs.props) File changed (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk3-icon-browser.vcxproj) same file (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk3-icon-browser.vcxproj.filters) same file (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk3-ignore-broadway.props) same file (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk3-install.props) File changed (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk3-install.vcxproj) File changed (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk3-prebuild.vcxproj) same file (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\gtk3-version-paths.props) same file (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\Makefile.am) same file (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\Makefile.in) Copying config.h from config.h.win32... 1 file(s) copied. Copying gdkconfig from gdkconfig.win32... Could Not Find C:\gtk-build\build\Win32\release\gtk3-20\MSVC_Debug 1 file(s) copied. 1 file(s) copied. Copying demos.h from demos.h.win32... 1 file(s) copied. gdkcursor-win32.c gdkdevicemanager-win32.c C:\gtk-build\gtk\Win32\Release\include\pango-1.0\pango\pango-coverage.h(28,10): fatal error C1083: Cannot open include file: 'hb.h': No such file or directory (compiling source file ..\..\..\gdk\win32\gdkcursor-win32.c) [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gdk3-win32.vcxproj] gdkdevice-virtual.c C:\gtk-build\gtk\Win32\Release\include\pango-1.0\pango\pango-coverage.h(28,10): fatal error C1083: Cannot open include file: 'hb.h': No such file or directory (compiling source file ..\..\..\gdk\win32\gdkdevicemanager-win32.c) [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gdk3-win32.vcxproj] gdkdevice-win32.c C:\gtk-build\gtk\Win32\Release\include\pango-1.0\pango\pango-coverage.h(28,10): fatal error C1083: Cannot open include file: 'hb.h': No such file or directory (compiling source file ..\..\..\gdk\win32\gdkdevice-virtual.c) [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gdk3-win32.vcxproj] gdkdevice-wintab.c C:\gtk-build\gtk\Win32\Release\include\pango-1.0\pango\pango-coverage.h(28,10): fatal error C1083: Cannot open include file: 'hb.h': No such file or directory (compiling source file ..\..\..\gdk\win32\gdkdevice-win32.c) [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gdk3-win32.vcxproj] gdkdisplay-win32.c C:\gtk-build\gtk\Win32\Release\include\pango-1.0\pango\pango-coverage.h(28,10): fatal error C1083: Cannot open include file: 'hb.h': No such file or directory (compiling source file ..\..\..\gdk\win32\gdkdevice-wintab.c) [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gdk3-win32.vcxproj] gdkdisplaymanager-win32.c C:\gtk-build\gtk\Win32\Release\include\pango-1.0\pango\pango-coverage.h(28,10): fatal error C1083: Cannot open include file: 'hb.h': No such file or directory (compiling source file ..\..\..\gdk\win32\gdkdisplay-win32.c) [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gdk3-win32.vcxproj] gdkdnd-win32.c C:\gtk-build\gtk\Win32\Release\include\pango-1.0\pango\pango-coverage.h(28,10): fatal error C1083: Cannot open include file: 'hb.h': No such file or directory (compiling source file ..\..\..\gdk\win32\gdkdisplaymanager-win32.c) [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gdk3-win32.vcxproj] gdkevents-win32.c C:\gtk-build\gtk\Win32\Release\include\pango-1.0\pango\pango-coverage.h(28,10): fatal error C1083: Cannot open include file: 'hb.h': No such file or directory (compiling source file ..\..\..\gdk\win32\gdkdnd-win32.c) [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gdk3-win32.vcxproj] gdkgeometry-win32.c C:\gtk-build\gtk\Win32\Release\include\pango-1.0\pango\pango-coverage.h(28,10): fatal error C1083: Cannot open include file: 'hb.h': No such file or directory (compiling source file ..\..\..\gdk\win32\gdkevents-win32.c) [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gdk3-win32.vcxproj] gdkglcontext-win32.c C:\gtk-build\gtk\Win32\Release\include\pango-1.0\pango\pango-coverage.h(28,10): fatal error C1083: Cannot open include file: 'hb.h': No such file or directory (compiling source file ..\..\..\gdk\win32\gdkgeometry-win32.c) [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gdk3-win32.vcxproj] gdkglobals-win32.c C:\gtk-build\gtk\Win32\Release\include\pango-1.0\pango\pango-coverage.h(28,10): fatal error C1083: Cannot open include file: 'hb.h': No such file or directory (compiling source file ..\..\..\gdk\win32\gdkglcontext-win32.c) [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gdk3-win32.vcxproj] gdkkeys-win32.c C:\gtk-build\gtk\Win32\Release\include\pango-1.0\pango\pango-coverage.h(28,10): fatal error C1083: Cannot open include file: 'hb.h': No such file or directory (compiling source file ..\..\..\gdk\win32\gdkglobals-win32.c) [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gdk3-win32.vcxproj] gdkmain-win32.c C:\gtk-build\gtk\Win32\Release\include\pango-1.0\pango\pango-coverage.h(28,10): fatal error C1083: Cannot open include file: 'hb.h': No such file or directory (compiling source file ..\..\..\gdk\win32\gdkkeys-win32.c) [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gdk3-win32.vcxproj] gdkproperty-win32.c C:\gtk-build\gtk\Win32\Release\include\pango-1.0\pango\pango-coverage.h(28,10): fatal error C1083: Cannot open include file: 'hb.h': No such file or directory (compiling source file ..\..\..\gdk\win32\gdkmain-win32.c) [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gdk3-win32.vcxproj] gdkscreen-win32.c C:\gtk-build\gtk\Win32\Release\include\pango-1.0\pango\pango-coverage.h(28,10): fatal error C1083: Cannot open include file: 'hb.h': No such file or directory (compiling source file ..\..\..\gdk\win32\gdkproperty-win32.c) [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gdk3-win32.vcxproj] gdkselection-win32.c C:\gtk-build\gtk\Win32\Release\include\pango-1.0\pango\pango-coverage.h(28,10): fatal error C1083: Cannot open include file: 'hb.h': No such file or directory (compiling source file ..\..\..\gdk\win32\gdkscreen-win32.c) [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gdk3-win32.vcxproj] gdktestutils-win32.c C:\gtk-build\gtk\Win32\Release\include\pango-1.0\pango\pango-coverage.h(28,10): fatal error C1083: Cannot open include file: 'hb.h': No such file or directory (compiling source file ..\..\..\gdk\win32\gdkselection-win32.c) [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gdk3-win32.vcxproj] gdkwin32id.c C:\gtk-build\gtk\Win32\Release\include\pango-1.0\pango\pango-coverage.h(28,10): fatal error C1083: Cannot open include file: 'hb.h': No such file or directory (compiling source file ..\..\..\gdk\win32\gdktestutils-win32.c) [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gdk3-win32.vcxproj] gdkwindow-win32.c C:\gtk-build\gtk\Win32\Release\include\pango-1.0\pango\pango-coverage.h(28,10): fatal error C1083: Cannot open include file: 'hb.h': No such file or directory (compiling source file ..\..\..\gdk\win32\gdkwin32id.c) [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gdk3-win32.vcxproj] C:\gtk-build\gtk\Win32\Release\include\pango-1.0\pango\pango-coverage.h(28,10): fatal error C1083: Cannot open include file: 'hb.h': No such file or directory (compiling source file ..\..\..\gdk\win32\gdkwindow-win32.c) [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gdk3-win32.vcxproj] updateiconcache.c C:\gtk-build\build\Win32\release\gtk3-20\gtk\gtkiconcachevalidator.c(139,17): warning C4018: '<': signed/unsigned mismatch [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gtk-update-icon-cache.vcxproj] C:\gtk-build\build\Win32\release\gtk3-20\gtk\gtkiconcachevalidator.c(206,17): warning C4018: '<': signed/unsigned mismatch [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gtk-update-icon-cache.vcxproj] C:\gtk-build\build\Win32\release\gtk3-20\gtk\gtkiconcachevalidator.c(313,17): warning C4018: '<': signed/unsigned mismatch [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gtk-update-icon-cache.vcxproj] C:\gtk-build\build\Win32\release\gtk3-20\gtk\gtkiconcachevalidator.c(357,17): warning C4018: '<': signed/unsigned mismatch [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gtk-update-icon-cache.vcxproj] C:\gtk-build\build\Win32\release\gtk3-20\gtk\updateiconcache.c(308,17): warning C4018: '<': signed/unsigned mismatch [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gtk-update-icon-cache.vcxproj] C:\gtk-build\build\Win32\release\gtk3-20\gtk\updateiconcache.c(1643,17): warning C4018: '<': signed/unsigned mismatch [C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\gtk-update-icon-cache.vcxproj] Generating code Previous IPDB not found, fall back to full compilation. All 51 functions were compiled because no usable IPDB/IOBJ from previous compilation was found. Finished generating code gtk-update-icon-cache.vcxproj -> C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs16\Release\Win32\bin\gtk-update-icon-cache.exe Traceback (most recent call last): File "C:\gtk-build\github\gvsbuild\gvsbuild\utils\builder.py", line 589, in build same file (C:\gtk-build\build\Win32\release\gtk3-20\build\win32\vs15\README.txt) if self.__build_one(p): File "C:\gtk-build\github\gvsbuild\gvsbuild\utils\builder.py", line 743, in __build_one skip_deps = proj.build() File "C:\gtk-build\github\gvsbuild\gvsbuild\projects.py", line 946, in build r"build\win32", "gtk+.sln", add_pars="/p:GtkPostInstall=rem" File "C:\gtk-build\github\gvsbuild\gvsbuild\utils\base_project.py", line 329, in exec_msbuild_gen self.exec_msbuild(cmd, configuration, add_path) File "C:\gtk-build\github\gvsbuild\gvsbuild\utils\base_project.py", line 121, in exec_msbuild add_path=add_path, File "C:\gtk-build\github\gvsbuild\gvsbuild\utils\base_project.py", line 109, in exec_vs cmd, working_dir=self._get_working_dir(), add_path=add_path File "C:\gtk-build\github\gvsbuild\gvsbuild\utils\builder.py", line 1048, in exec_vs env=self.vs_env, File "C:\gtk-build\github\gvsbuild\gvsbuild\utils\builder.py", line 1152, in __execute subprocess.check_call(args, cwd=working_dir, env=env, shell=True) File "C:\hostedtoolcache\windows\Python\3.7.9\x64\lib\subprocess.py", line 363, in check_call raise CalledProcessError(retcode, cmd) subprocess.CalledProcessError: Command 'msbuild build\win32\vs16\gtk+.sln /p:GtkPostInstall=rem /p:Configuration=release /nologo /p:Platform=Win32 /p:PythonPath="C:\gtk-build\tools\pythonx86.3.10.0\tools" /p:PythonDir="C:\gtk-build\tools\pythonx86.3.10.0\tools" /v:minimal /p:WindowsTargetPlatformVersion="10.0.22000.0"' returned non-zero exit status 1. Error: gtk3 build failed ```
danyeaw commented 2 years ago

@liudonghua123 I really like that you are providing the pre-built binaries! I had a similar idea, except I was working on creating installers of the binaries once built, with an end goal to eventually make GTK installable with Chocolatey. https://github.com/gaphor/gtk-win-installers

Maybe we could combine our efforts?

One question I have, do we really need to continue to support GTK 3.20 and 3.22? Those versions are now 5 years old and no longer maintained by the GTK team. I would rather see I drop support for this old stuff and put on focus on supporting GTK 4.4.1 and beyond.

liudonghua123 commented 2 years ago

@danyeaw Thanks for mentioning the old gtk 3.20/3.22 version. You are right, old and deprecated stuff should not support for the long run. However, I am just curious about why it failed and how can I fix this error. Maybe from the problem-solving process, I can learn a lot.

@liudonghua123 I really like that you are providing the pre-built binaries! I had a similar idea, except I was working on creating installers of the binaries once built, with an end goal to eventually make GTK installable with Chocolatey. https://github.com/gaphor/gtk-win-installers

Your project looks nice, I would like to participate, I saw you created a lot of iss config files. Did you want to make each component of gtk3 custom installable? I am new to Inno Setup, I will try to learn it.

danyeaw commented 2 years ago

hb.h is a HarfBuzz include file. It looks like this commit fixed an issue with hf.b missing for GTK 3.24 and a few other projects, but it didn't update the older GTK versions. I would recommend starting there: https://github.com/wingtk/gvsbuild/commit/eba43598d190a7130caf933ef94bb993de071a7d

Yes, my idea was to make each component or project its own installer, and then define them as dependencies of each other for Chocolatey.

liudonghua123 commented 2 years ago

@danyeaw Thanks, You saved me a lot of time, I made some patches for building 3.20, 3,22 successfully now. I also need to patch "C:\gtk-build\build\x64\release\gtk3-20\gtk\gtkcsscustomgadget.c" according https://github.com/GNOME/gtk/commit/35fee660ffc13565d1c304a2438125d3ccddfaaa.

C:\gtk-build>cat fix_hb.h_not_found.patch
diff --git a/gvsbuild/projects.py b/gvsbuild/projects.py
index 69e996d..3173b49 100644
--- a/gvsbuild/projects.py
+++ b/gvsbuild/projects.py
@@ -942,9 +942,10 @@ class Project_gtk3_20(Project_gtk_base):
             self.add_dependency("gobject-introspection")

     def build(self):
-        self.exec_msbuild_gen(
-            r"build\win32", "gtk+.sln", add_pars="/p:GtkPostInstall=rem"
+        self.builder.mod_env(
+            "INCLUDE", "{}\\include\\harfbuzz".format(self.builder.gtk_dir)
         )
+        self.exec_msbuild_gen(r"build\win32", "gtk+.sln", add_pars="/p:UseEnv=True /p:GtkPostInstall=rem")

         self.make_all_mo()

@@ -982,9 +983,10 @@ class Project_gtk3_22(Project_gtk_base):
             self.add_dependency("gobject-introspection")

     def build(self):
-        self.exec_msbuild_gen(
-            r"build\win32", "gtk+.sln", add_pars="/p:GtkPostInstall=rem"
+        self.builder.mod_env(
+            "INCLUDE", "{}\\include\\harfbuzz".format(self.builder.gtk_dir)
         )
+        self.exec_msbuild_gen(r"build\win32", "gtk+.sln", add_pars="/p:UseEnv=True /p:GtkPostInstall=rem")

         self.make_all_mo()

C:\gtk-build>cat fix_error_C4098.patch
--- "C:\\gtk-build\\build\\x64\\release\\gtk3-20\\gtk\\gtkcsscustomgadget.c"    2017-02-22 05:08:57.000000000 +0800
+++ "C:\\gtk-build\\build\\x64\\release\\gtk3-24\\gtk\\gtkcsscustomgadget.c"    2021-06-16 04:58:25.000000000 +0800
@@ -121,14 +121,14 @@
   GtkCssCustomGadgetPrivate *priv = gtk_css_custom_gadget_get_instance_private (GTK_CSS_CUSTOM_GADGET (gadget));

   if (priv->preferred_size_func)
-    return priv->preferred_size_func (gadget, orientation, for_size,
-                                      minimum, natural,
-                                      minimum_baseline, natural_baseline,
-                                      priv->data);
+    priv->preferred_size_func (gadget, orientation, for_size,
+                               minimum, natural,
+                               minimum_baseline, natural_baseline,
+                               priv->data);
   else
-    return GTK_CSS_GADGET_CLASS (gtk_css_custom_gadget_parent_class)->get_preferred_size (gadget, orientation, for_size,
-                                                                                          minimum, natural,
-                                                                                          minimum_baseline, natural_baseline);
+    GTK_CSS_GADGET_CLASS (gtk_css_custom_gadget_parent_class)->get_preferred_size (gadget, orientation, for_size,
+                                                                                   minimum, natural,
+                                                                                   minimum_baseline, natural_baseline);
 }

 static void
@@ -140,9 +140,9 @@
   GtkCssCustomGadgetPrivate *priv = gtk_css_custom_gadget_get_instance_private (GTK_CSS_CUSTOM_GADGET (gadget));

   if (priv->allocate_func)
-    return priv->allocate_func (gadget, allocation, baseline, out_clip, priv->data);
+    priv->allocate_func (gadget, allocation, baseline, out_clip, priv->data);
   else
-    return GTK_CSS_GADGET_CLASS (gtk_css_custom_gadget_parent_class)->allocate (gadget, allocation, baseline, out_clip);
+    GTK_CSS_GADGET_CLASS (gtk_css_custom_gadget_parent_class)->allocate (gadget, allocation, baseline, out_clip);
 }

 static gboolean

C:\gtk-build>
danyeaw commented 2 years ago

@liudonghua123 Great!

Definitely submit a pull request when you are ready.

Maybe a future PR is still to drop support for older GTK versions?

liudonghua123 commented 2 years ago

I submitted a pr on https://github.com/wingtk/gvsbuild/pull/476 and https://gitlab.gnome.org/GNOME/gtk/-/issues/4624.

danyeaw commented 2 years ago

Fixed by #476, nice one @liudonghua123 :tada: