[GNC-dev] broken build dependencies within Gnucash on Windows project

John Ralls jralls at ceridwen.us
Mon May 27 10:52:43 EDT 2019

> On May 27, 2019, at 4:31 AM, Dale Phurrough via gnucash-devel <gnucash-devel at gnucash.org> wrote:
> Hi all. I found a philosophical issue that leads to an ongoing series of
> Windows build process bugs. Want to bring it to this forum. I believe it
> needs discussion on approach, so that bugs can be created and holistically
> fixed for now/future.
> The Windows build process at
> https://github.com/Gnucash/gnucash-on-windows since
> Gnucash 3.5 (didn't look further back) relies on a single bootstrap file.
> The bootstrap downloads resources (scripts, patches, repos) within the
> control (and hosted by) the Gnucash project.
> The issue is a favorite -- dependency management. This bootstrap is
> downloaded from GitHub. Naturally, the bootstrap changes over time and
> therefore has an inherit version. That bootstrap is downloading resources
> within this project using *unversioned* URIs.
> Bad news====
> The bootstrap used for Windows GnuCash 3.5 doesn't work because it relies
> on GitHub URIs that no longer exist in the current master branch. :-( The
> more current bootstraps on master don't work also because of related URI
> not found bugs and patches that don't match other downloaded resources.
> Currently, the Windows build setup is broken. It is not possible to
> bootstrap and setup a new Windows Gnucash build for 3.5 or later.
> Everyone following? Here's one of the series of bugs
> https://bugs.gnucash.org/show_bug.cgi?id=797252
> The fixes (like in that bug above) still have the versioning problem. These
> fixes are fragile and break easily.
> Good news====
> This issue is inside the project. We can fix it. This community controls
> the project, the code, and the download resources. :-)
> Brainstorming ideas (not ready for implementation)...
>   1. Put the commit version needed in the URI. For example, if your
>   bootstrap is from commit 123abc, then download resources from that same
>   commit.
>   2. Use git clone, checkout, etc. with versions.
>   3. Put the download in a package manager and the bootstrap downloads the
>   specific version it needs.

I'm not sure that there's any benefit to retrospectively building old releases; we keep a long history of releases and nightly builds at https://code.gnucash.org/builds/win32, and all of the releases for both Windows and MacOS are at https://sourceforge.net/projects/gnucash/files.

For normal use, just keep your local gnucash-on-windows repo current. If you want to automate builds, e.g. in your docker, use buildserver/build-package.ps1. Before building that gets both your MinGW64 and gnucash-on-windows repo up-to-date.

It *would* be nice to be able to easily build from an arbitrary checkout of gnucash-on-windows but jhbuild wants URIs or absolute paths to the patch files, so the choice is to either be able to put gnucash-on-windows wherever you want or to get patches locally instead of from Github.

John Ralls

More information about the gnucash-devel mailing list