[pkg-boost-devel] Bug#710413: src:boost1.53: multi-arch

Helmut Grohne helmut at subdivi.de
Thu May 30 15:20:45 UTC 2013


Package: src:boost1.53
Version: 1.53.0-5
Severity: normal
User: multiarch-devel at lists.alioth.debian.org
Usertags: multiarch

You might have heard of this multi-arch thingy. Now it comes to you as
well. For details see http://wiki.debian.org/Multiarch/Implementation.

What?
~~~~~
To facilitate mixing packages from multiple architectures the
dependencies need to either be able to satisfy dependencies of foreign
architectures or be co-installable with itself. For libraries usually
the latter is done. This is mainly useful for packages with a big number
of reverse dependencies or packages involved with bootstrapping a new
architecture. The former case is true for boost. So here we go.

How?
~~~~
You can find a patch attached, that should do most of the work. The
first goal is to get the commonly used shared libraries be Multi-Arch:
same. This is what the patch does. I omitted the python-related
libraries, because they are non-trivial and have fewer reverse
dependencies. Also the python multiarch situation is a bit messy at this
point. The patch succeeds a build and succeeds piuparts. Testing of
building for reverse build dependencies is still needed. This is why I
did not tag this bug report with patch. Nevertheless my patch should
serve as a starting point for a multi arch conversion.

boost1.49
~~~~~~~~~
Since there will likely be a transition from boost1.49 to boost1.53 (or
later) at some point, I suggest not to bother with boost1.49 and just
change boost1.53 before doing the transition. That way issues with the
multiarch changes will be highlighted during the transition.


Problems / Questions
~~~~~~~~~~~~~~~~~~~~
Should there be any questions, feel free to ask me. You can also stop by
in oftc #multiarch to sort things out interactively.

Helmut
-------------- next part --------------
diff -Nru boost1.53-1.53.0/debian/changelog boost1.53-1.53.0/debian/changelog
--- boost1.53-1.53.0/debian/changelog	2013-05-28 09:52:24.000000000 +0200
+++ boost1.53-1.53.0/debian/changelog	2013-05-30 12:15:47.000000000 +0200
@@ -1,3 +1,13 @@
+boost1.53 (1.53.0-5.1) UNRELEASED; urgency=low
+
+  * Non-maintainer upload.
+  * Convert to Multi-Arch.
+    + Add ${misc:Pre-Depends} to shared libraries.
+    + Switch to multi-arch paths.
+    + Mark shared libraries as Multi-Arch:same except for python related ones.
+
+ -- Helmut Grohne <helmut at subdivi.de>  Thu, 30 May 2013 11:54:25 +0200
+
 boost1.53 (1.53.0-5) unstable; urgency=low
 
   * control: Boost.Thread depends on some non header-only libraries:
diff -Nru boost1.53-1.53.0/debian/control boost1.53-1.53.0/debian/control
--- boost1.53-1.53.0/debian/control	2013-05-26 04:44:14.000000000 +0200
+++ boost1.53-1.53.0/debian/control	2013-05-30 12:15:15.000000000 +0200
@@ -146,6 +146,8 @@
 Architecture: any
 Section: libs
 Depends: ${misc:Depends}, ${shlibs:Depends}
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
 Description: atomic data types, operations, and memory ordering constraints
  This package forms part of the Boost C++ Libraries collection.
  .
@@ -193,6 +195,8 @@
 Architecture: any
 Section: libs
 Depends: ${misc:Depends}, ${shlibs:Depends}
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
 Description: C++ representation of time duration, time point, and clocks
  This package forms part of the Boost C++ Libraries collection.
  .
@@ -281,6 +285,8 @@
 Architecture: any
 Section: libs
 Depends: ${misc:Depends}, ${shlibs:Depends}
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
 Description: provides a sort of cooperative multitasking on a single thread
  This package forms part of the Boost C++ Libraries collection.
  .
@@ -318,6 +324,8 @@
 Architecture: any
 Section: libs
 Depends: ${misc:Depends}, ${shlibs:Depends}
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
 Description: set of date-time libraries based on generic programming concepts
  This package forms part of the Boost C++ Libraries collection.
  .
@@ -358,6 +366,8 @@
 Architecture: any
 Section: libs
 Depends: ${misc:Depends}, ${shlibs:Depends}
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
 Description: filesystem operations (portable paths, iteration over directories, etc) in C++
  This package forms part of the Boost C++ Libraries collection.
  .
@@ -386,6 +396,8 @@
 Architecture: any
 Section: libs
 Depends: ${misc:Depends}, ${shlibs:Depends}
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
 Suggests: graphviz
 Description: generic graph components and algorithms in C++
  This package forms part of the Boost C++ Libraries collection.
@@ -420,6 +432,8 @@
 Architecture: any
 Section: libs
 Depends: ${misc:Depends}, ${shlibs:Depends}
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
 Suggests: graphviz
 Description: generic graph components and algorithms in C++
  This package forms part of the Boost C++ Libraries collection.
@@ -457,6 +471,8 @@
 Section: libs
 Priority: important
 Depends: ${misc:Depends}, ${shlibs:Depends}
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
 Description: Boost.Iostreams Library
  This package forms part of the Boost C++ Libraries collection.
  .
@@ -485,6 +501,8 @@
 Architecture: any
 Section: libs
 Depends: ${misc:Depends}, ${shlibs:Depends}
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
 Description: C++ facilities for localization
  This package forms part of the Boost C++ Libraries collection.
  .
@@ -544,6 +562,8 @@
 Architecture: any
 Section: libs
 Depends: ${misc:Depends}, ${shlibs:Depends}
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
 Description: Boost.Math Library
  This package forms part of the Boost C++ Libraries collection.
  .
@@ -585,6 +605,8 @@
 Architecture: any
 Section: libs
 Depends: ${misc:Depends}, ${shlibs:Depends}
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
 Description: C++ interface to the Message Passing Interface (MPI)
  This package forms part of the Boost C++ Libraries collection.
  .
@@ -619,6 +641,7 @@
 Architecture: any
 Section: python
 Depends: ${misc:Depends}, ${shlibs:Depends}, ${python:Depends}, mpi-default-bin
+Pre-Depends: ${misc:Pre-Depends}
 Suggests: python, python3
 Breaks: ${python:Breaks}
 Conflicts: libboost-mpi-python1.40.0,
@@ -662,6 +685,8 @@
 Architecture: any
 Section: libs
 Depends: ${misc:Depends}, ${shlibs:Depends}
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
 Description: program options library for C++
  This package forms part of the Boost C++ Libraries collection.
  .
@@ -689,6 +714,7 @@
 Architecture: any
 Section: python
 Depends: ${misc:Depends}, ${shlibs:Depends}, ${python:Depends}
+Pre-Depends: ${misc:Pre-Depends}
 Suggests: python, python3
 Breaks: ${python:Breaks}
 Description: Boost.Python Library 
@@ -748,6 +774,8 @@
 Architecture: any
 Section: libs
 Depends: ${misc:Depends}, ${shlibs:Depends}
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
 Description: Boost Random Number Library
  This package forms part of the Boost C++ Libraries collection.
  .
@@ -775,6 +803,8 @@
 Architecture: any
 Section: libs
 Depends: ${misc:Depends}, ${shlibs:Depends}
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
 Description: regular expression library for C++
  This package forms part of the Boost C++ Libraries collection.
  .
@@ -817,6 +847,8 @@
 Architecture: any
 Section: libs
 Depends: ${misc:Depends}, ${shlibs:Depends}
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
 Description: serialization library for C++
  This package forms part of the Boost C++ Libraries collection,
  containing the following functionalities:
@@ -860,6 +892,8 @@
 Architecture: any
 Section: libs
 Depends: ${misc:Depends}, ${shlibs:Depends}
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
 Description: managed signals and slots library for C++
  This package forms part of the Boost C++ Libraries collection.
  .
@@ -891,6 +925,8 @@
 Architecture: any
 Section: libs
 Depends: ${misc:Depends}, ${shlibs:Depends}
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
 Description: Operating system (e.g. diagnostics support) library
  This package forms part of the Boost C++ Libraries collection.
  .
@@ -926,6 +962,8 @@
 Architecture: any
 Section: libs
 Depends: ${misc:Depends}, ${shlibs:Depends}
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
 Description: components for writing and executing test suites
  This package forms part of the Boost C++ Libraries collection.  The
  library contains several components.
@@ -955,6 +993,8 @@
 Architecture: any
 Section: libs
 Depends: ${misc:Depends}, ${shlibs:Depends}
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
 Description: portable C++ multi-threading
  This package forms part of the Boost C++ Libraries collection.
  .
@@ -987,6 +1027,8 @@
 Architecture: any
 Section: libs
 Depends: ${misc:Depends}, ${shlibs:Depends}
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
 Description: C++ wall clock and CPU process timers
  This package forms part of the Boost C++ Libraries collection.
  .
@@ -1024,6 +1066,8 @@
 Architecture: any
 Section: libs
 Depends: ${misc:Depends}, ${shlibs:Depends}
+Pre-Depends: ${misc:Pre-Depends}
+Multi-Arch: same
 Description: C99/C++ preprocessor library
  This package forms part of the Boost C++ Libraries collection.
  .
diff -Nru boost1.53-1.53.0/debian/rules boost1.53-1.53.0/debian/rules
--- boost1.53-1.53.0/debian/rules	2013-04-27 08:11:58.000000000 +0200
+++ boost1.53-1.53.0/debian/rules	2013-05-30 13:44:36.000000000 +0200
@@ -28,6 +28,8 @@
 DPKG_EXPORT_BUILDFLAGS = 1
 include /usr/share/dpkg/buildflags.mk
 
+DEB_HOST_MULTIARCH ?= $(shell dpkg-architecture -qDEB_HOST_MULTIARCH)
+
 %:
 	dh $@ --with python2 --with python3
 
@@ -68,14 +70,18 @@
 	dh_compress -Xlibboost$(PKGVERSION)-doc/HTML
 
 override_dh_install:
-	$(JAM) --prefix=$(CURDIR)/debian/tmp/usr $(JAM_WITHOUT) --without-python install
+	$(JAM) --prefix=$(CURDIR)/debian/tmp/usr $(JAM_WITHOUT) \
+		--libdir=$(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH) \
+		--without-python install
 	for pyver in $(pyversions); do \
 		pyid=`echo $$pyver | tr -d .`; \
-		$(JAM) --prefix=$(CURDIR)/debian/tmp/usr install --with-python --with-mpi --python-buildid=py$$pyid python=$$pyver; \
+		$(JAM) --prefix=$(CURDIR)/debian/tmp/usr \
+			--libdir=$(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH) \
+			install --with-python --with-mpi --python-buildid=py$$pyid python=$$pyver; \
 	done
 
 	# Install Boost.Build v2 & jam
-	cd $(bbv2dir) && ./bjam install --prefix=$(CURDIR)/debian/tmp/usr
+	cd $(bbv2dir) && ./bjam install --prefix=$(CURDIR)/debian/tmp/usr --libdir=$(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH)
 	mv debian/tmp/usr/share/boost-build/example debian/boost-build-examples
 
 	install --mode=755 -D debian/rtupdate debian/tmp/usr/share/python/runtime.d/libboost-python$(PKGVERSION)-dev.rtupdate
@@ -178,7 +184,7 @@
 # Helpers to make basic and decorated library names
 # Input: library, variant, suffix
 # Return: base library filename for short or full name
-mk_base_name = usr/lib/libboost_$(subst -,_,$(1))$(2)$(3)
+mk_base_name = usr/lib/$(DEB_HOST_MULTIARCH)/libboost_$(subst -,_,$(1))$(2)$(3)
 
 # Input: component, variant
 # Return: package name for shared library or development
@@ -320,6 +326,7 @@
 
 $(bjam):
 	./bootstrap.sh --with-icu --prefix=$(CURDIR)/debian/tmp/usr \
+		--libdir=$(CURDIR)/debian/tmp/usr/lib/$(DEB_HOST_MULTIARCH) \
 	  || cat bootstrap.log
 
 debian/bjam.1: $(bjam)


More information about the pkg-boost-devel mailing list