Source: proteinortho
Version: 6.3.1+dfsg-1
Tags: patch
User: [email protected]
Usertags: ftcbfs

When trying to cross build proteinortho using sbuild, the result is a
150 minute build timeout via inactivity. What actually happens is that
after linking proteinortho_clustering, the build system runs it and as
that fails proceeds to silently rebuilding lapack. Given that lapack is
non-trivial to compile and all of its output is hidden, this times out
the build.

We cannot expect to run this test during cross compilation. I therefore
propose to make the build system aware of cross compilation. Then, it
trusts that a successful link is ok. Once doing so, proteinortho quickly
cross builds successfully saving a lot of QA resources. The failure mode
has wasted around 9 CPU days so far. Please consider applying the
attached patch.

Helmut
diff -Nru proteinortho-6.3.1+dfsg/debian/changelog 
proteinortho-6.3.1+dfsg/debian/changelog
--- proteinortho-6.3.1+dfsg/debian/changelog    2024-01-12 06:50:22.000000000 
+0100
+++ proteinortho-6.3.1+dfsg/debian/changelog    2026-10-14 09:17:54.000000000 
+0200
@@ -1,3 +1,10 @@
+proteinortho (6.3.1+dfsg-1.1) UNRELEASED; urgency=medium
+
+  * Non-maintainer upload.
+  * Fix FTCBFS: Avoid running tests during cross builds. (Closes: #-1)
+
+ -- Helmut Grohne <[email protected]>  Wed, 14 Oct 2026 09:17:54 +0200
+
 proteinortho (6.3.1+dfsg-1) unstable; urgency=medium
 
   * New upstream version
diff -Nru proteinortho-6.3.1+dfsg/debian/patches/cross.patch 
proteinortho-6.3.1+dfsg/debian/patches/cross.patch
--- proteinortho-6.3.1+dfsg/debian/patches/cross.patch  1970-01-01 
01:00:00.000000000 +0100
+++ proteinortho-6.3.1+dfsg/debian/patches/cross.patch  2026-10-14 
09:17:03.000000000 +0200
@@ -0,0 +1,41 @@
+--- proteinortho-6.3.1+dfsg.orig/Makefile
++++ proteinortho-6.3.1+dfsg/Makefile
+@@ -36,6 +36,7 @@
+ # compile statically
+ STATIC=FALSE
+ DEPLOY=FALSE
++CROSS_COMPILING=FALSE
+ 
+ ifdef static
+ STATIC=$(static)
+@@ -189,6 +190,9 @@
+ ifeq ($(USEPRECOMPILEDLAPACK),TRUE)
+ ifeq ($(STATIC),TRUE)
+       @echo "[ 20%] Building **proteinortho_clustering** with LAPACK (static 
linking)";
++ifeq ($(CROSS_COMPILING),TRUE)
++      $(CXX) -std=c++11 -O3 -funroll-loops -static $(CPPFLAGS) $(CXXFLAGS) 
$(MTUNEARCHFLAGS) -fopenmp -o $@ $< $(LDFLAGS) $(LDLIBS) 
-Wl,--allow-multiple-definition -llapack -lblas -lgfortran -pthread 
-Wl,--whole-archive -lpthread -Wl,--no-whole-archive -lquadmath
++else
+       @echo "$(CXX) -std=c++11 -O3 -funroll-loops -static $(CPPFLAGS) 
$(CXXFLAGS) $(MTUNEARCHFLAGS) -fopenmp -o $@ $< $(LDFLAGS) $(LDLIBS) 
-Wl,--allow-multiple-definition -llapack -lblas -lgfortran -pthread 
-Wl,--whole-archive -lpthread -Wl,--no-whole-archive -lquadmath" && $(CXX) 
-std=c++11 -O3 -funroll-loops -static $(CPPFLAGS) $(CXXFLAGS) $(MTUNEARCHFLAGS) 
-fopenmp -o $@ $< $(LDFLAGS) $(LDLIBS) -Wl,--allow-multiple-definition -llapack 
-lblas -lgfortran -pthread -Wl,--whole-archive -lpthread -Wl,--no-whole-archive 
-lquadmath && ([ $$? -eq 0 ] && $@ -test && [ $$? -eq 0 ] ) || ( \
+               echo "......$(ORANGE)dynamic linking failed too, now I try 
dynamic linking without -WL,-whole-archive... (this should now work for 
OSX).$(NC)"; \
+                       echo "$(CXX) -std=c++11 -O3 -funroll-loops -static 
$(CPPFLAGS) $(CXXFLAGS) $(MTUNEARCHFLAGS) -fopenmp  -o $@ $< $(LDFLAGS) 
$(LDLIBS) -Wl,--allow-multiple-definition -llapack -lblas -lgfortran -pthread 
-Wl,--whole-archive -lpthread -Wl,--no-whole-archive -lquadmath" && $(CXX) 
-std=c++11 -O3 -funroll-loops -static $(CPPFLAGS) $(CXXFLAGS) $(MTUNEARCHFLAGS) 
-fopenmp  -o $@ $< $(LDFLAGS) $(LDLIBS) -Wl,--allow-multiple-definition 
-llapack -lblas -lgfortran -pthread -Wl,--whole-archive -lpthread 
-Wl,--no-whole-archive -lquadmath && ([ $$? -eq 0 ] && $@ -test && [ $$? -eq 0 
] ) || ( \
+@@ -205,8 +209,12 @@
+                                                       if [ ! -f 
src/lapack-3.8.0/build/lib/liblapack.a ]; then echo " mkdir 
src/lapack-3.8.0/build; cd src/lapack-3.8.0/build; cmake .. 
-DCMAKE_CXX_COMPILER=$(CXX) > /dev/null; make all -j4 "; mkdir 
src/lapack-3.8.0/build 2> /dev/null; cd src/lapack-3.8.0/build; cmake .. 
-DCMAKE_CXX_COMPILER=$(CXX) > /dev/null; make all -j4 > /dev/null 2>&1; cd 
../../.. ; fi; \
+                                                       echo "......[ 99%] 
Building **proteinortho_clustering** with LAPACK (dynamic linking)"; \
+                                                       echo "$(CXX) -std=c++11 
-O3 -funroll-loops $(CPPFLAGS) $(CXXFLAGS) $(MTUNEARCHFLAGS) -fopenmp -o $@ $< 
-Isrc/lapack-3.8.0/build/include/ -Lsrc/lapack-3.8.0/build/lib/ -llapack -lblas 
$(LDFLAGS) $(LDLIBS) -lgfortran" && $(CXX) -std=c++11 -O3 -funroll-loops 
$(CPPFLAGS) $(CXXFLAGS) $(MTUNEARCHFLAGS) -fopenmp -o $@ $< 
-Isrc/lapack-3.8.0/build/include/ -Lsrc/lapack-3.8.0/build/lib/ -llapack -lblas 
$(LDFLAGS) $(LDLIBS) -lgfortran && echo "......OK dynamic linking was 
successful for proteinortho_clustering!" || ( echo "" ) ; ) ) ) ) ) 
++endif
+ else
+       @echo "[ 20%] Building **proteinortho_clustering** with LAPACK (dynamic 
linking)";
++ifeq ($(CROSS_COMPILING),TRUE)
++      $(CXX) -std=c++11 -O3 -funroll-loops $(CPPFLAGS) $(CXXFLAGS) 
$(MTUNEARCHFLAGS) -fopenmp -o $@ $< $(LDFLAGS) $(LDLIBS) -llapack -lblas 
-pthread -Wl,--whole-archive -lpthread -Wl,--no-whole-archive
++else
+       @echo "$(CXX) -std=c++11 -O3 -funroll-loops $(CPPFLAGS) $(CXXFLAGS) 
$(MTUNEARCHFLAGS) -fopenmp  -o $@ $< $(LDFLAGS) $(LDLIBS) -llapack -lblas 
-pthread -Wl,--whole-archive -lpthread -Wl,--no-whole-archive" && $(CXX) 
-std=c++11 -O3 -funroll-loops $(CPPFLAGS) $(CXXFLAGS) $(MTUNEARCHFLAGS) 
-fopenmp -o $@ $< $(LDFLAGS) $(LDLIBS) -llapack -lblas -pthread 
-Wl,--whole-archive -lpthread -Wl,--no-whole-archive && ([ $$? -eq 0 ] && $@ 
-test && [ $$? -eq 0 ] && echo "......OK dynamic linking was successful for 
proteinortho_clustering!";) || ( \
+                       echo "......$(ORANGE)dynamic linking failed too, now I 
try dynamic linking without -WL,-whole-archive (this should now work for 
OSX).$(NC)"; \
+                       echo "$(CXX) -std=c++11 -O3 -funroll-loops $(CPPFLAGS) 
$(CXXFLAGS) $(MTUNEARCHFLAGS) -fopenmp  -o $@ $< $(LDFLAGS) $(LDLIBS) -llapack 
-lblas -pthread -lpthread" && $(CXX) -std=c++11 -O3 -funroll-loops $(CPPFLAGS) 
$(CXXFLAGS) $(MTUNEARCHFLAGS) -fopenmp  -o $@ $< $(LDFLAGS) $(LDLIBS) -llapack 
-lblas -pthread -lpthread && ([ $$? -eq 0 ] && $@ -test && [ $$? -eq 0 ] && 
echo "......OK dynamic linking was successful for proteinortho_clustering!";) 
|| ( \
+@@ -220,6 +228,7 @@
+                                       echo "......[ 99%] Building 
**proteinortho_clustering** with LAPACK (dynamic linking)"; \
+                                       echo "$(CXX) -std=c++11 -O3 
-funroll-loops $(CPPFLAGS) $(CXXFLAGS) $(MTUNEARCHFLAGS) -fopenmp -o $@ $< 
-Isrc/lapack-3.8.0/build/include/ -Lsrc/lapack-3.8.0/build/lib/ -llapack -lblas 
$(LDFLAGS) $(LDLIBS) -lgfortran" && $(CXX) -std=c++11 -O3 -funroll-loops 
$(CPPFLAGS) $(CXXFLAGS) $(MTUNEARCHFLAGS) -fopenmp -o $@ $< 
-Isrc/lapack-3.8.0/build/include/ -Lsrc/lapack-3.8.0/build/lib/ -llapack -lblas 
$(LDFLAGS) $(LDLIBS) -lgfortran && echo "......OK dynamic linking was 
successful for proteinortho_clustering!" || ( echo "" ) ; ) ) ) 
+ endif
++endif
+       @if [ ! -e $(BUILDDIR)/proteinortho_clustering ]; then echo 
"proteinortho_clustering compilation failed. Please visit 
https://gitlab.com/paulklemm_PHD/proteinortho/wikis/Error%20Codes";; false; fi
+ else
+       @echo "[ 15%] Extracting the LAPACK library";
diff -Nru proteinortho-6.3.1+dfsg/debian/patches/series 
proteinortho-6.3.1+dfsg/debian/patches/series
--- proteinortho-6.3.1+dfsg/debian/patches/series       2024-01-12 
06:50:22.000000000 +0100
+++ proteinortho-6.3.1+dfsg/debian/patches/series       2026-10-14 
09:10:57.000000000 +0200
@@ -1 +1,2 @@
 deb_diamond
+cross.patch
diff -Nru proteinortho-6.3.1+dfsg/debian/rules 
proteinortho-6.3.1+dfsg/debian/rules
--- proteinortho-6.3.1+dfsg/debian/rules        2024-01-12 06:50:22.000000000 
+0100
+++ proteinortho-6.3.1+dfsg/debian/rules        2026-10-14 09:17:47.000000000 
+0200
@@ -9,6 +9,11 @@
 %:
        dh $@
 
+ifneq ($(DEB_BUILD_ARCH),$(DEB_HOST_ARCH))
+override_dh_auto_build:
+       dh_auto_build -- CROSS_COMPILING=TRUE
+endif
+
 override_dh_auto_test:
 ifeq (,$(filter nocheck,$(DEB_BUILD_OPTIONS)))
        dh_auto_test --no-parallel

Reply via email to