user debian-cr...@lists.debian.org usertags 910664 + ftcbfs tags 910664 + patch thanks
Hi, Given that the earlier bug about haskell-devscripts-minimal has been fixed, I happen to have looked into this. First and foremost, ghc now actively refuses being cross build with an $(error ...). Would you mind weakening this to a $(warning ...)? While that you don't want to support cross building of ghc, would you mind others (like me) supporting it? Yes, it would still fail, but then https://crossqa.debian.net/src/ghc could show a more useful reason for that failure. (patch attached) Then when you get past the $(error ...), stage1 tools are not found. In a cross build, ghc prefixes these with the host gnu triplet. A bit of renaming is required to make this work. (patch attached) And then we run into: On Tue, Oct 09, 2018 at 03:24:41PM +0200, John Paul Adrian Glaubitz wrote: > This change to the debian/rules file helps to get a bit further: > > --- debian/rules.orig 2018-09-26 11:08:46.000000000 +0200 > +++ debian/rules 2018-10-09 15:22:43.080942145 +0200 > @@ -126,6 +126,7 @@ > echo 'V=1' >> mk/build.mk > dh_auto_configure -- \ > $(EXTRA_CONFIGURE_FLAGS) \ > + --host=$(DEB_BUILD_GNU_TYPE) \ > --with-system-libffi --libdir=/usr/lib > > override_dh_auto_build: > > But it will still fail with: I think this is wrong. The current ghc packaging includes this flag, but ghc uses the same terminology as Debian, so when we say --host=$(DEB_BUILD_GNU_TYPE) we ask it to produce a cross compiler, but we really wanted a cross built ghc. One of the issues referenced from the earlier $(error ...) also hints that this value is wrong for --host: https://gitlab.haskell.org/ghc/ghc/-/issues/22006 Unless you have strong reasons for why that should be correct, I suggest that we change it to --host=$(DEB_HOST_GNU_TYPE). (not included in patch) So this is where we are. I think we can make progress here if you want to support this work. I'm also a big fan of actionable bug reports and in having a patch, this bug becomes actionable. Given that you (ghc maintainers) are evidently not interested in doing the work here, I also suggest that you close this bug when applying the patch and letting cross users file new bugs with new patches. Let me know what you think about this. Helmut
diff --minimal -Nru ghc-9.4.7/debian/changelog ghc-9.4.7/debian/changelog --- ghc-9.4.7/debian/changelog 2023-10-18 21:50:19.000000000 +0200 +++ ghc-9.4.7/debian/changelog 2023-12-10 20:03:52.000000000 +0100 @@ -1,3 +1,10 @@ +ghc (9.4.7-1.1) UNRELEASED; urgency=medium + + * Non-maintainer upload. + * Improve cross building. (Closes: #-1) + + -- Helmut Grohne <hel...@subdivi.de> Sun, 10 Dec 2023 20:03:52 +0100 + ghc (9.4.7-1) unstable; urgency=medium * Upload to unstable diff --minimal -Nru ghc-9.4.7/debian/rules ghc-9.4.7/debian/rules --- ghc-9.4.7/debian/rules 2023-10-18 21:49:38.000000000 +0200 +++ ghc-9.4.7/debian/rules 2023-12-10 20:03:52.000000000 +0100 @@ -47,8 +47,10 @@ EXTRA_HADRIAN_FLAGS += --flavour=quickest # Do not build docs *at all* (avoid dependency on Sphinx) EXTRA_HADRIAN_FLAGS += --docs=none + STAGE1_TOOL = _build/stage1/bin/$(DEB_HOST_GNU_TYPE)- BUILD_CROSS = YES else + STAGE1_TOOL = _build/stage1/bin/ BUILD_CROSS = NO endif @@ -149,7 +151,7 @@ ifeq (YES,$(BUILD_CROSS)) # See https://gitlab.haskell.org/ghc/ghc/-/issues/23975 # and https://gitlab.haskell.org/ghc/ghc/-/issues/22006 - $(error cross-compilation is not supported) + $(warning cross-compilation is not supported) endif hadrian/hadrian \ -V -j \ @@ -162,7 +164,7 @@ # correct), but we use ghc-pkg from stage2 when we generate our control file. # Maybe we should consider using ghc-pkg from binary-dist-dir instead. # As a work-around for now, regenerate the stage2 package cache. - _build/stage1/bin/ghc-pkg recache + $(STAGE1_TOOL)ghc-pkg recache # This rule is a superset of 'override_dh_auto_build-arch'. It builds everything # that the '-arch' rule builds, and then docs on top. @@ -185,7 +187,7 @@ # correct), but we use ghc-pkg from stage2 when we generate our control file. # Maybe we should consider using ghc-pkg from binary-dist-dir instead. # As a work-around for now, regenerate the stage2 package cache. - _build/stage1/bin/ghc-pkg recache + $(STAGE1_TOOL)ghc-pkg recache # -------------------------------------------------------------------- @@ -335,23 +337,23 @@ rm -rf debian/testghc mkdir debian/testghc echo 'main = putStrLn "Foo"' > debian/testghc/foo.hs - _build/stage1/bin/ghc debian/testghc/foo.hs -o debian/testghc/foo + $(STAGE1_TOOL)ghc debian/testghc/foo.hs -o debian/testghc/foo [ "$$(debian/testghc/foo)" = "Foo" ] rm debian/testghc/* echo 'main = putStrLn "Foo"' > debian/testghc/foo.hs - _build/stage1/bin/ghc debian/testghc/foo.hs -o debian/testghc/foo -O2 + $(STAGE1_TOOL)ghc debian/testghc/foo.hs -o debian/testghc/foo -O2 [ "$$(debian/testghc/foo)" = "Foo" ] rm debian/testghc/* # Test runghc echo 'main = putStrLn "Foo"' > debian/testghc/foo.hs - [ "$$(_build/stage1/bin/runghc debian/testghc/foo.hs)" = "Foo" ] + [ "$$($(STAGE1_TOOL)runghc debian/testghc/foo.hs)" = "Foo" ] rm debian/testghc/* # Output information about GHC @printf "====BEGIN GHC INFO OUTPUT====\n" - _build/stage1/bin/ghc --info + $(STAGE1_TOOL)ghc --info @printf "====END GHC INFO OUTPUT====\n" @printf "====BEGIN GHC-PKG OUTPUT====\n" - _build/stage1/bin/ghc-pkg list + $(STAGE1_TOOL)ghc-pkg list @printf "====END GHC-PKG OUTPUT====\n" endif