[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bug#752159: [ijs] Move docs to libijs-doc, move doc tools to B-D-I



Source: ijs
Version: 0.35-10
Severity: wishlist
Tags: patch

Hi,

Thanks a lot for taking care of ijs in Debian, and thanks a lot to
Daniel Schepler for all of his work on bootstrapping Debian and teaching
source packages about build profiles!

I came across ijs as part of this year's "Bootstrappable Debian" GSoC
project, where I try to modify the packages from the Type 2 Self-Cycles
and the Feedback Arc Set tables shown at
http://bootstrap.debian.net/amd64/ - and ijs with its dependencies on
ghostscript and docbook-utils comes up in both.  This patch is kind of a
follow-up to #738332 in spirit (thanks a lot, Daniel!), but it provides
a slightly different means of solving the circular build dependency
problem.

As described in the "Profile-built binary packages" section of
https://wiki.debian.org/BuildProfileSpec#Profile_built_binary_packages
one of the goals of the introduction of build profiles is to have the
same binary package have the same contents (thus making sure that it
provides the same functionality needed by other packages) in all
profiles that it is built in.  Hence, here's a patch that breaks the
documentation out into a new arch:all package, just as Andreas Metzler
already did with libtasn1-6 in response to #749854, and moves the doc
build tools to Build-Depends-Indep.  This makes sure that during
bootstrap builds, when only arch-dependent packages are built, the doc
tools will not be needed and the build dependency cycle will be broken.

If something goes wrong with the patch, it is also available at
https://gitorious.org/roam-debian-bootstrap/ijs-debian/commits/roam-stage1-indep

Of course, in this particular case it's a bit of a stretch to imagine a
package depending on the presence of a PDF file in the libijs-dev binary
package, but IMHO it would still be a worthwhile change, if only for the
reason that it may be uploaded to the archive and become functional
right now.  If the stage1 profile route is used, there would either be
an additional step needed in the bootstrapping (remove the ghostscript,
docbook, and docbook-utils dependencies), or the debian/control file
would have to be modified to include <!profile.stage1> annotations for
these build dependencies - and, as witnessed by #744246, the Debian
buildd and archive infrastructure is still not ready for that, so such a
change would have to wait for the release of Jessie.  The B-D-I way,
at the cost of an additional binary package, solves this problem nicely
with the already-available tools and infrastructure.

Of course, as package maintainers, it's your call in the end; if you
have any concerns or additional questions, please do not hesitate to let
me know!

Thanks in advance for your time, and thanks again for your Debian work!

G'luck,
Peter

-- System Information:
Debian Release: jessie/sid
  APT prefers testing
  APT policy: (990, 'testing')
Architecture: amd64 (x86_64)
Foreign Architectures: i386

Kernel: Linux 3.14-1-amd64 (SMP w/4 CPU cores)
Locale: LANG=bg_BG.UTF-8, LC_CTYPE=bg_BG.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash

-- 
Peter Pentchev  roam@ringlet.net roam@FreeBSD.org p.penchev@storpool.com
PGP key:        http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint 2EE7 A7A5 17FC 124C F115  C354 651E EFB0 2527 DF13
From eaab0819d13ea08126ff93d9ac8a10b7f98c3f93 Mon Sep 17 00:00:00 2001
From: Peter Pentchev <roam@ringlet.net>
Date: Fri, 20 Jun 2014 12:45:40 +0300
Subject: [PATCH] Break the PDF documentation out into libijs-doc.

One of the goals of the introduction of build profiles is that the
changes made to the packages should be at binary package level
granularity, that is, if a binary package is built at all in a build
profile, it should have exactly the same contents as the same binary
package built in any other build profile, including the default one.
For more information, see
https://wiki.debian.org/BuildProfileSpec#Profile_built_binary_packages

Thus, it would be much preferable if the contents of the libijs-dev
package were not different in the default build profile and the stage1
one.  The best way to achieve that is to break the documentation out
into an architecture-independent binary package of its own, then move
the documentation tools into Build-Depends-Indep, so that they will not
be required for the architecture-specific bootstrap build - the
bootstrap build process will not attempt to build arch:all packages if
it can avoid it, the ones already built in the Debian archive will be
used.

Hence:
- create a new binary package, libijs-doc
- have libijs-dev recommend libijs-doc, so that it will be installed in
  the "install recommended packages by default" Debian setup
- move ghostscript, docbook, and docbook-utils to B-D-I
- move ijs_spec.pdf to debian/libijs-doc.docs
- rework the rules file to build the documentation depending on whether
  arch:all packages are built, not on the build profile anymore.
---
 debian/control         | 31 +++++++++++++++++++++++++++----
 debian/libijs-doc.docs |  1 +
 debian/rules           | 11 +++++------
 3 files changed, 33 insertions(+), 10 deletions(-)
 create mode 100644 debian/libijs-doc.docs

diff --git a/debian/control b/debian/control
index 66d49fc..08fbe31 100644
--- a/debian/control
+++ b/debian/control
@@ -10,10 +10,10 @@ Build-Depends: cdbs,
  autoconf,
  debhelper (>= 9~),
  dh-buildinfo,
- devscripts,
- ghostscript,
- docbook,
+ devscripts
+Build-Depends-Indep: docbook,
  docbook-utils,
+ ghostscript
 Standards-Version: 3.9.5
 Homepage: http://www.linuxprinting.org/ijs/
 Vcs-Git: https://alioth.debian.org/anonscm/git/printing/ijs.git
@@ -26,6 +26,7 @@ Multi-Arch: same
 Depends: ${misc:Depends},
  libc6-dev,
  libijs-0.35 (= ${binary:Version})
+Recommends: libijs-doc
 Description: IJS raster image transport protocol: development files
  IJS (InkJet Server) is, first and foremost, a protocol for transmission of
  raster page images. This snapshot provides a reference implementation of
@@ -40,7 +41,7 @@ Description: IJS raster image transport protocol: development files
  is used by the hpijs and ijsgimpprint drivers.
  .
  Code for both the client- and server-side is included in the library. This
- package provides a static library, development headers and documentation.
+ package provides a static library and development headers.
 
 Package: libijs-0.35
 Section: libs
@@ -64,3 +65,25 @@ Description: IJS raster image transport protocol: shared library
  .
  Code for both the client- and server-side is included in the library. This
  package provides the shared library.
+
+Package: libijs-doc
+Section: doc
+Architecture: all
+Breaks: libijs-dev (<< 0.35-11~)
+Replaces: libijs-dev (<< 0.35-11~)
+Depends: ${misc:Depends}
+Description: IJS raster image transport protocol: documentation
+ IJS (InkJet Server) is, first and foremost, a protocol for transmission of
+ raster page images. This snapshot provides a reference implementation of
+ the protocol, the design of which is still in flux. When the protocol
+ specification is published, it will be authoritative. Applications should
+ feel free to link against the library provided in this package, adapt that
+ code for their own needs, or roll a completely new implementation.
+ .
+ IJS is a client-server protocol, used to write ghostscript drivers. The
+ drivers are separate programs. The client and server communicate via pipes,
+ though shared memory may be used additionally in the future. Currently IJS
+ is used by the hpijs and ijsgimpprint drivers.
+ .
+ Code for both the client- and server-side is included in the library. This
+ package provides documentation.
diff --git a/debian/libijs-doc.docs b/debian/libijs-doc.docs
new file mode 100644
index 0000000..8ed0dde
--- /dev/null
+++ b/debian/libijs-doc.docs
@@ -0,0 +1 @@
+ijs_spec.pdf
diff --git a/debian/rules b/debian/rules
index cbb8c12..3c79816 100755
--- a/debian/rules
+++ b/debian/rules
@@ -30,17 +30,16 @@ libpkgname = libijs-$(DEB_UPSTREAM_VERSION)
 DEB_COPYRIGHT_CHECK_IGNORE_REGEX = ^(ijs_spec\.pdf|debian/(changelog|copyright(|_hints|_newhints)))$
 
 DEB_CONFIGURE_EXTRA_FLAGS += --enable-shared --libdir=/usr/lib/$(DEB_HOST_MULTIARCH)
-DEB_MAKE_BUILD_TARGET = all
-ifeq (,$(findstring stage1,$(DEB_BUILD_PROFILES)))
+DEB_MAKE_BUILD_TARGET =
+ifneq (,$(filter libijs-dev,$(shell dh_listpackages)))
+DEB_MAKE_BUILD_TARGET += all
+endif
+ifneq (,$(filter libijs-doc,$(shell dh_listpackages)))
 DEB_MAKE_BUILD_TARGET += doc
 endif
 
 DEB_DH_MAKESHLIBS_ARGS_$(libpkgname) = -V'$(libpkgname) (>= $(DEB_UPSTREAM_VERSION))'
 
-ifeq (,$(findstring stage1,$(DEB_BUILD_PROFILES)))
-DEB_INSTALL_DOCS_libijs-dev += ijs_spec.pdf
-endif
-
 # put aside upstream-shipped temp files during build but after copyright-check
 upstreamtmpfiles = ltmain.sh configure aclocal.m4 Makefile.in ijs_spec.pdf
 pre-build:: debian/stamp-upstreamtmpstuff
-- 
2.0.0

Attachment: signature.asc
Description: Digital signature


Reply to: