Bug#534162: ITP: python-pyneo -- pyneo mobile stack: basis libraries

2009-06-22 Thread Johannes Schauer
Package: wnpp
Severity: wishlist
Owner: Johannes Schauer j.scha...@email.de


* Package name: python-pyneo
  Version : 1.13
  Upstream Author : Michael Dietrich m...@pyneo.org
* URL : http://pyneo.org
* License : GPL3
  Programming Lang: Python
  Description : pyneo mobile stack: basis libraries

Helper modules to support development for and with pyneo in Python. It
contains common functions, modules and constants.

--
I already attempted to build a Debian package:
http://rabenfrost.net/pyneo/python-pyneo/python-pyneo_1.13-1.dsc

This ITP is related to the ITP of pyneod Bug#534160

-- System Information:
Debian Release: 5.0.1
  APT prefers stable
  APT policy: (500, 'stable')
Architecture: amd64 (x86_64)



-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Bug#534163: ITP: gsm0710muxd -- GSM 07.10 Multiplexer

2009-06-22 Thread Johannes Schauer
Package: wnpp
Severity: wishlist
Owner: Johannes Schauer j.scha...@email.de


* Package name: gsm0710muxd
  Version : 1.13
  Upstream Author : Michael Dietrich m...@pyneo.org
* URL : http://pyneo.org
* License : GPL2+
  Programming Lang: C
  Description : GSM 07.10 Multiplexer

pyneo mobile stack: muxer as GSM 07.10 describes.
A muxer for gsm modems to allow more than one channel to be used with
the modem. Each channel can be used to issue phonecalls, watch signal
strength, receiving sms or even doing ppp (gprs) at the same time.
Access to the multiplexer is managed via D-Bus.

-

I already attempted to build a Debian package:
http://rabenfrost.net/pyneo/gsm0710muxd/gsm0710muxd_1.13-1.dsc

This ITP relates to the ITP of pyneod Bug#534160

-- System Information:
Debian Release: 5.0.1
  APT prefers stable
  APT policy: (500, 'stable')
Architecture: amd64 (x86_64)



-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org



Re: thoughts on using multi-arch based cross-building

2012-10-01 Thread Johannes Schauer
Hi,

On Mon, Oct 01, 2012 at 01:05:11AM +0100, Wookey wrote:
  Build-depends installation: apt-get build-dep is fine if you are
  building an unmodified package from a repo but it's of no use if you
  have modified the build-dependencies to make them satisfiable.
 
 Annoying isn't it? This has been irritating me for years. 
 /usr/lib/pbuilder-satisfydepends-classic is very useful for the
 native-build case, but I am not aware of a multiarch-aware tool. A
 tool like this should really be in devscripts.

dpkg-dev has dpkg-checkbuilddeps which also has the -a switch for
foreign architectures. But it has two problems:

 - the string it outputs contains versions in a format not compatible
   with the apt-get command line.
 - even with -a it doesnt seem to append architecture qualifiers to
   package name (package:arch)

But dpkg-checkbuilddeps could probably easily be used as a template for
a script that is able to feed apt.

  Does a tool exist that can be told install the build-depends needed
  to build the debianised source tree in directory x for architecture
  y? if not IMO such a tool (or a new option in an existing tool)
  needs to be created.
 
 The dose3 tools can produce the same answers as apt for this problem,
 and could quite easily be modified to look at a local source package
 rather than only at packages files. Johannes Schauer was looking into
 doing this a couple of weeks ago. Any joy Johannes?

When we talked about it, I did some quick hacking and created some
patches for the dose3 parser so that it would also be able to read
debian/control files. When I was in Paris we didnt talk much about dose3
but more about my code. I will ask Pietro about the best way to
integrate this into dose3 on the debian-bootstrap list [1] today.

 I have just created (following on from PJ McDermott's GSOC work) a
 cross-build-essential source package that makes
 crossbuild-essential-arch packages to bring in cross-gcc, cross-g++,
 dpkg-cross (aka cross-support) pkg-config-triplet. That in this PPA:
 https://launchpad.net/~linaro-foundations/+archive/cross-build-tools
 and needs some dpkg-vendor foo adding to make it right for both debian
 and ubuntu.

And it needs wanna-build fixing (support for architecture qualifiers eg
package:arch) in Debian.

cheers, josch

[1] http://lists.mister-muffin.de/cgi-bin/mailman/listinfo/debian-bootstrap


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20121001083403.GB1682@hoothoot



History of Debian bootstrapping/porting efforts

2012-11-13 Thread Johannes Schauer
Dear list,

I am the student that did the Port bootstrap build-ordering tool
Google Summer of Code project this summer [1]. I am still continuing
that work and will turn it into my Master thesis. The tools I developed
are currently in use by wookey for doing the arm64 port [2]. A long list
of results of my programs as well as outstanding problems can be found
in the Debian wiki [3].

For the introduction of my thesis, I want to give a summary of how past
ports were accomplished.

Since there does not seem to be a mailinglist for general ports (but
only for each specific port), I am addressing this email to
debian-devel.

I created a wiki page to collect the information so that it would also
be available to everybody else:
http://wiki.debian.org/DebianBootstrap/History

If you were ever involved in porting Debian to a new architecture or
know how a port was done, please do not hesitate to either write me an
email or directly enter the information in the linked wiki page linked
above.

It assumes that arch labels are established and that gcc, glibc,
binutils etc understand the arch.

I basically would like to know things like:

 - did you cross compile parts of Debian? How much? How hard was it?
 - did you natively compile on another distribution (openembedded,
   gentoo)
 - how did you go about finding reduced build dependencies? What were
   the heuristics you used? How did you find dependency cycles to break
   and how did you pick a solution?
 - how long did the port take you?
 - what were the most common bugs you filed when introducing the new
   architecture?

Having an overview that answers above questions (and anything else
noteworthy or quantifiable) can also be useful for future porters to get
an overview or ideas how to go about it technically.

At the very best, I will get more ideas for heuristics that allow my
tools to get better at breaking build dependency cycles.

Thanks for your help!

cheers, josch

[1] http://wiki.debian.org/SummerOfCode2012/StudentApplications/JohannesSchauer
[2] http://wiki.debian.org/Arm64Port
[3] http://wiki.debian.org/DebianBootstrap/TODO


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20121113201924.GA16619@hoothoot



How to make port/bootstrapping work easier

2012-11-14 Thread Johannes Schauer
Hi Daniel,

thanks for your detailed report!

You also commented a lot on your actual practice (thanks!) so I changed
the subject to reflect the slight topic change of my reply.

On Wed, Nov 14, 2012 at 05:54:06PM -0800, Daniel Schepler wrote:
 I read your recent post to debian-devel with great interest, as I've
 done some bootstrapping efforts in the past, and I'm currently in the
 middle of a port for the x32 ABI.  In the past, what I've done
 (mostly privately) was to develop a script I called pbuildd which
 essentially just runs through the list of currently unbuilt packages
 and tries running pbuilder on them all, then installs anything that
 succeeds into a local repository and starts up the loop again.

This is what a small function does for me in the very early steps in a
theoretical manner. Naturally it quickly fails due to dependency cycles
;)

 Then, when things got stuck, I just did a manual inspection of the
 unsatisfied dependencies to find the cycles, and chose one to break.
 In fact, I've just started uploading my current iteration of this to
 http://87.98.215.228/debian/ -- you might want to especially look at
 scripts/pbuildd which is the central script to run this loop.  (And
 over time, it's gathered various optimizations to speed up the
 installation into local repository step, try to avoid invoking
 pbuilder if it can easily determine that certain Build-Depends aren't
 present at all, etc.)

What my tools try to do, is to figure out a build order for
bootstrapping Debian from nothing. This order can then be given to a
tool that does the actual compilation in that order.  The figuring out
the order part is purely theoretical. I only look at the Packages and
Sources files and the dependency relationships stored within to generate
a dependency graph which I then evaluate.

My tool doesnt know or care about whether or not a package can actually
be compiled on the new architecture. It does no compilation by itself
and can therefor not figure this out by itself. Running into compilation
problems is (as of now) still what the user would have to take care of
(from the point of view of my tools).

I call it my tools because there is no name for the project yet. The
git repository [6] and mailing list [7] just run under the name
debian-bootstrap. At this point I should also mention that everything
heavily depends on dose3 and Pietro Abate is a great help with this
project and I certainly wouldnt be where I am without dose3 and his
continuous help and additions to the project.

 Initially, when I needed to break a cycle, I would just build
 something by hand and stick it into the partial directory, but over
 time I started developing automated cycle-breaker scripts, which are
 currently under scripts/cb.inactive (the pbuildd script looks for them
 under scripts/cb).

I had a look at the files in scripts/cb.inactive and they seem to store
lots of information about which build dependencies can be dropped for a
huge number of source packages. This is, if I read lines like

inst_pkgs `get_control_re $PBUILDD_ROOT/build/a/antlr/*.dsc 
'build-(depends|depends-indep)' |
sed -e '/\gcj-native-helper\/d' -e '/\nant\/d' \
-e '/\cli-common-dev\/d' -e '/\mono-devel\/d' \
-e '/\libmono-winforms2\.0-cil\/d'`

correct in meaning that gcj-native-helper, nant, cli-common-dev etc can
be dropped, right?

Sadly, that information is stored in a turing complete format (bash
scripts) which makes the information badly machine readable. But if the
format '/\package\/d' is mostly used, then I guess a regex can extract
lots of the information with some tolerable uncertainty. I will try to
hack up a script that harvests the droppable build dependencies from the
files you have in scripts/cb.inactive. This information might be
immensely usable, thanks!

As a porter has to come up with those droppable build dependencies for
each new port, a new syntax has been proposed in [3] by Guillem Jover
called build profiles. Would this information be included in the build
dependencies of some core packages, bootstrapping would already become
much easier for a porter. An example of how the proposed format works:

Build-Depends: huge (= 1.0) [i386 arm] !embedded !bootstrap, tiny

The  and  brackets are used in the same way [ and ] are used for
architectures to denote the profile for which that dependency can be
dropped (or is exclusively required). Besides bootstrapping, such
profiles could also be used for embedded builds or for bootstrapping
compilers that need themselves to be built. The latter topic also
recently came up on debian-devel [8].

There exist trivial patches for dpkg [4] and dose3 [5] to implement this
functionality.

 The scripts tend to become outdated over time, though, with a moving
 target, and I'm sure the current state is no exception.  My personal
 heuristics for what I preferred were: first, prefer cycle-breaking
 which just removes Build-Depends which are there to build
 

Re: History of Debian bootstrapping/porting efforts

2012-11-20 Thread Johannes Schauer
Hi,

On Tue, Nov 20, 2012 at 09:22:40PM +, Thorsten Glaser wrote:
 For reviving m68k:

Thanks for your detailed explanations! I added a summary of it to the
m68k section of the wiki page [1], extending the notes entered there by
Ingo Jürgensmann. Thanks to both of you!

  - how did you go about finding reduced build dependencies? What were
  the heuristics you used? How did you find dependency cycles to break
  and how did you pick a solution?
 
 Fully manually. I mostly drew ASCII files like this:
 
 sourcepkg1
   sourcepkg2 sourcepkg3 sourcepkg4 sourcepkg5 sourcepkg3dup
   sourcepkg6 sourcepkg2cyc
 
 [...]
 
 Then I worked on them from right to left, occasionally patching a huge
 dependency out or breaking a B-D loop by hand, sometimes also
 installing older versions of B-Ds manually, or even building versions
 older than sid but newer than what I had.

Since yesterday, my tools can now finally turn the whole dependency
graph into an acyclic graph by braking only a small number of build
dependencies (using an approximative solution to the minimal feedback
arc set problem) and output a final build order to build all of Debian
starting from an initial minimal build system (priority:essential plus
build-essential plus debhelper).

Detailed explanations can be found in the email I wrote to our
debian-bootstrap mailinglist:

http://lists.mister-muffin.de/pipermail/debian-bootstrap/2012-November/000425.html

A summary: Using the results I got from Daniel Scheplers x32
bootstrapping work, droppable build dependencies from Thorsten Glaser,
Patrick McDermott and my Gentoo work, I was able to reduce the original
923 nodes SCC into one SCC with 159 nodes and another with 42 nodes:

http://mister-muffin.de/p/NRTs.png http://mister-muffin.de/p/myFd.png

Those two graphs were easily breakable into a DAG by just removing 4 and
2 build dependencies respectively using the feedback arc set algorithm I
wrote over the weekend.

The same algorithm can also be applied to the full 923 node SCC for
Debian Sid, resulting in 90 build dependencies to be dropped to make the
graph acyclic and making a final build order possible with (close to)
minimal changes. For this to happen, only 50 source packages have to be
modified.

  Build-Depends: huge (= 1.0) [i386 arm] !embedded !bootstrap, tiny
 
 Yeah, waiting for it…

As build profiles do not exist yet, there might be instances where my
algorithm chooses build dependencies that are not droppable in practice.

One obvious example is the dependency cycle:

src:pkg-config -- libglib2.0-dev

So I'm now implementing a facility that allows to explicitly mark build
dependencies as unbreakable so that the algorithm finds an alternative
solution or throws an error. The above case for example has no
alternative solution as the cycle is of length two and has no other way
of braking it than building pkg-config without libglib2.0-dev. Since
this is unlikely to be possible and since the assumption is that only
build dependencies might be dropped when necessary but not binary
dependencies, a possible solution might be cross compilation.

Looking at the cross build dependency graph and braking its dependency
cycles is the next step I will take.

cheers, josch

[1] http://wiki.debian.org/DebianBootstrap/History


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20121120225523.GA18533@hoothoot



Debian port bootstrap build ordering tool status

2012-11-23 Thread Johannes Schauer
Hi,

On Fri, Nov 23, 2012 at 03:48:04AM +, peter green wrote:
 Since yesterday, my tools can now finally turn the whole dependency
 graph
 Does this whole dependency graph include the implicit
 build-dependency every package has on build-essential?

For source packages for native compilation, yes. What is not included is
Build-Depends-Indep. I have been told that there are many problems with
Build-Depends-Indep but not considering those dependencies tremendously
helps to reduced the amount of cyclic dependency hell, so they should be
made working for better bootstrappability.

For binary packages, the implicit dependency on priority:essential is
kept.

For source packages for cross compilation, afaik wookey currently uses
an implicit dependency on crossbuild-essential-$arch but this is not yet
policy of course and has to be discussed still.

 The above case for example has no alternative solution as the cycle
 is of length two and has no other way of braking it than building
 pkg-config without libglib2.0-dev. Since this is unlikely to be
 possible
 I don't see why it would be impossible to hack up the glib source
 package to not rely on pkg-config. Whether that is a good idea or
 not is another matter.

It is not a dependency loop between the pkg-config source package and
the glib2.0 source package.

It is a dependency loop between src:pkg-config (we use the src: prefix
to never confuse source package names with binary package names) and
libglib2.0-dev. There is a loop because libglib2.0-dev has a binary
dependency on pkg-config but the source package that pkg-config builds
from (src:pkg-config) cannot be built without libglib2.0-dev. So even if
the glib2.0 source package can be built and therefor make libglib2.0-dev
available, libglib2.0-dev can never be installed because it has a binary
dependency on pkg-config. pkg-config builds from src:pkg-config but
src:pkg-config can never be compiled because it has a build dependency
on libglib2.0-dev, which cannot be installed - loop.

The assumption that this specific loop cannot trivially (without cross
compilation) be broken depends on the following two assumptions:

 - binary dependencies should never be modified
 - src:pkg-config cannot be built without libglib2.0-dev

  and since the assumption is that only
 build dependencies might be dropped when necessary but not binary
 dependencies, a possible solution might be cross compilation.
 It seems pretty clear to me that there is a core of software that
 will need to be cross-built as the first stage of bootstrapping a
 port. Obviously essential and build-essential fall into this
 category but while i'm sure there are ways one could hack away the
 cycles and make things like pkg-config and debhelper natively
 bootstrapable I don't think there is much point in doing so.

It is always the call of the user to decide what is easier:

 - to bootstrap package A natively by braking cycles or
 - to make all source packages that need to be cross compiled to have
   package A installable cross compile

Both tasks (finding out if the necessary source packages can be built
with reduced build dependencies and checking how easy it is to make them
cross compilable) can only be solved by a human.

My tools help the user in that task by allowing to analyze the
dependency graph situation for native compilation and also allow to
investigate the list of source packages that have otherwise to be cross
compiled to make the package installable. Comparing these two options
allows the user to make a better call when he has to decide for either
of those two choices.

But right now, debhelper is indeed taken as part of the packages to be
cross compiled to avoid a horribly messy initial dependency graph.

 What i'd ideally like to see is for a tool to be able to generate a
 directed acyclic graph of build jobs (some cross, some native, there
 should be an option in the tool as to whether to preffer native or
 cross-build jobs) that takes the user from having no packages for the
 target architecture to having a set of bootstrap packages that can be
 used to seed the regular building process.

This is the final goal of my project.

What is currently done is the native part of the above.

Given a minimal build system (build-essential, priority:essential) it
can devise said order of build jobs by braking the graph into a
directed acyclic graph (DAG). The tool helps the user to find build
dependencies that make most sense to be broken and uses a list of
brake-able build dependencies supplied by the user to break the graph
into DAG with a close to minimal number of source packages that have to
be built with reduced build dependencies.

Once Debian understands build profiles (see my last email) those will
of course be taken into account as well. Until this is the case, my tool
can help to identify those source packages that make sense to have build
dependencies dropped.

In a state where Debian understands build profiles, my current code

Bootstrappable Debian - proposal of needed changes

2013-01-15 Thread Johannes Schauer
Hi,

the following is an email written by Wookey and myself.

0. Introduction
===

The Debian bootstrap build ordering tool Google Summer of Code project
[1] was continued even after the summer ended and recently reached a new
milestone by being able to create a final build order from a dependency
graph [2] for Debian Sid.

By now, all important tools and algorithms have been written [5] to
solve the following problems:

 - find source packages to which build profiles (reduced build
   dependencies) should be added

 - given enough source packages annotated with build profiles, generate
   a final build order which produces a full Debian archive from zero,
   starting from cross compiling a minimal system and natively compiling
   the rest, breaking build dependencies as necessary (and as possible)

Since Debian source packages do not (yet) contain enough meta data to
decide whether or not a build dependency can be dropped, USE flags of
Gentoo source packages were harvested [3] [6]. On top of that,
suggestions from Thorsten Glaser, Patrick McDermott and Daniel Schepler
were used. This way, our current results are hopefully not too far away
from reality,

While the theoretical results do look consistent, this has so far not
been completed in practice due to the following open issues:

 1. missing multiarch annotations prevent the multiarch cross build
dependencies of some source packages from being resolved correctly

 2. not all source packages of the minimal build system are cross
compilable in practice yet

 3. no decision has been made on the syntax of the new control fields
(build profiles) which are required for automated bootstrapping

 4. not enough source packages implement build profiles (this depends on
3 being solved)


More details on this scheme are given at the DebianBootstrap wiki page
[8]. Work has been going on for a couple of years on this, evolving as
practical experience was gained, and input taken from more people.

We therefore make the following proposals (field names not set in stone)
in descending order of importance for us:


1. Build-Profiles
=

The build profile format was proposed by Guillem Jover together with
other solutions he presented in this document [7] as part of bug#661538.
Build profiles extend the Build-Depends format with a syntax similar to
architecture restrictions but using  and  instead.

  Build-Depends: huge (= 1.0) [i386 arm] !embedded !stage1, tiny

The build dependency huge would not be required by the source package
if it is built in the embedded or stage1 profile. This mechanism
neatly allows for removed build-deps, replaced build-deps and added
build-deps, and an arbitrary number of possible 'profiles'.

Besides bootstrapping, these build profiles could also be used for
embedded builds, and to allow for changed buil-deps when cross-building.
One could also imagine that DEB_BUILD_OPTIONS=nodocs could be replaced
by a profile called nodocs. Patches for dpkg (bug#661538) and dose3
implementing this syntax already exist.

This scheme supersedes an earlier version, (referred-to as 'staged'
builds), which used repeated Build-depends-StageN: lines. See the dpkg
bug#661538 for the evolution of this.

The profile labels are arbitrary but agreement on label usage is
necessary. For bootstrap automation we have been using 'stage1',
'stage2', etc which fits with existing custom in packages which already
have such internal mechanisms using DEB_STAGE (currently gcc, eglibc,
libselinux, gcj, gnat, gdc, linux [9]) These seem like sensible names so
we propose to stick with them. Other useful profiles can be defined in
the future.

The drawback of this syntax is that Build-Dep parsing tools need to be
updated to read/accept it, so uploads of source containing these
annotations cannot be done until the dpkg in buildds at least parses it.


2. Build-Profiles (extension 1)
===

When a source package is built with fewer build dependencies (cross,
embedded, stage1, nodocs...), then it often happens that it does not
build one or more of its binary packages at all (e.g. foo-gtk, foo-java,
foo-doc). While this is a minor nuisance during a half automated
bootstrap, a fully automated bootstrapping process needs to know which
binary packages a source package does not build if it is compiled in one
of its profiles. We therefore propose a new field for binary packages in
their control file which indicates for which profiles it builds.

  Builds-With-Profile: !stage1 !embedded

Different profile names are separated by spaces similar to the
Architecture field. A binary package with the above field would not be
built during the profile builds stage1 or embedded. Binary packages
which do not have this field would default to being built by every
profile. This field would mean a minor change to dpkg-gencontrol.


3. Build-profiles (extension 2)
===

A build profile is set either using a DEB_ 

Re: Bootstrappable Debian - proposal of needed changes

2013-01-16 Thread Johannes Schauer
Hi,

On Wed, Jan 16, 2013 at 01:50:17PM +, Ian Jackson wrote:
  5. Cross-Builds field
  =
  
  For even further automation and also for quality assurance, we propose
  another new field for source packages which indicates whether or not
  this source package is supposed to be cross compilable.
 
 Is it possible that packages might only cross build for certain
 targets ?  Or only for certain hosts ?

Yes. But for the intended purpose of this field, it does not make much
sense to encode the information on which architecture and for which
architecture a source package cross compiles.

If a source package would not compile on some architectures or for some
architectures, then it would be Cross-Builds:No.

If the Cross-Builds field is being introduced, then only a few base
source packages *must* carry this field. For all other source packages,
this field would be optional.

The tools we developed can always be used to calculate which source
packages are necessary to cross compile a minimal build system.
Therefor, this field would only be:

 - a more obvious way for the maintainer of a source package to know
   that his/her package is one of those that must be cross compilable
   for any upcoming architecture.

 - a more obvious way for a bootstrapper to see which native build
   dependency cycles could easily be solved by cross compiling some
   source packages

The field is therefor rather low priority compared to the other ideas.

 I haven't spotted anything hideously wrong.  I have three suggestions
 for changes:
 
  * Packages should explicitly declare which profiles they support.
This should be done with a Profile field in the source stanza
of debian/control.

Good idea - this would make it even more analogous to the Architecture
field and its meaning in source and binary stanzas in ./debian/control.

  * It should be made explicit in the spec that building occurs with
  zero or one profile, not several.

As far as I understood (but I'm not the one who actually cross-compiles
things in real life), different dependencies might be needed during
cross compilation of some source packages. If that source package must
be cross compiled for a minimal base system and if it also must be built
with reduced build dependencies, then two build profiles at the same
time are necessary. In this case a cross and stage1 profile.

  * The concrete syntax in build-depends should not use   but rather
  reuse the architecture qualification syntax.

You basically propose to extend the architecture qualification syntax
from a single disjunction into a conjunctive normal form expression. If
any number of disjunctions is allowed, your proposal will also support
more than one profile at the same time.

What would an example of a different namespace than profile: be?

From the perspective of dependency analysis, your proposal seems to be
able to carry all information that is needed for it. I leave it up to
you guys to decide on which you like better.

Thanks for your input!

cheers, josch


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130116160543.GA30841@hoothoot



Re: Bootstrappable Debian - proposal of needed changes

2013-01-16 Thread Johannes Schauer
Hi,

On Wed, Jan 16, 2013 at 04:00:15PM +0100, Matthias Klose wrote:
 this only takes care about packages with a reduced package set built,
 or packages with reduced functionality. There are same cases missing:
 
  - extra build dependencies for cross builds, like for gcc-4.7:
{gobjc++,gccgo,gfortran}-target-gnu-type
profile:cross?
 
  - build dependencies for running the check target. Usually these
dependencies can be ignored when cross-building packages, or when
building a package natively with DEB_BUILD_OPTIONS=nocheck.
profile:check? There are not few packages which can be easier
cross-built when identifying and dropping these build dependencies.
 
 So it does make sense to build with two profiles like stage1  check.

You probably mean a nocheck profile?

Your first example indeed demonstrates why multiple profiles are useful
to be enabled at once.

The second example can be accomplished with only one profile by marking
all dependencies that are not being needed by a nocheck profile as not
being needed by the stage1 profile as well.

So instead of:

  Build-Depends: foo !stage1, bar !nocheck

and then needing two profiles at the same time, one could have:

  Build-Depends: foo !stage1, bar !nocheck !stage1

Though I agree that the first option looks more maintainable.

There is also the idea of a nodocs profile which would work like
DEB_BUILD_OPTIONS=nodocs.

Whether or not nocheck and nodocs can/should become build profiles
is of course still to be debated.

An argument for them becoming build profiles is, that the analysis
algorithm would then be able to just choose the less dangerous nodocs
or nocheck profile instead of a stage1 profile if they break a
dependency cycle. How safe/dangerous choosing a profile is, could be
evaluated by the number of binary packages which are not built with a
given profile but which are needed as build dependencies by other source
packages. While a stage1 profile is likely to not build binary
packages which are needed somewhere else, the nodocs and nocheck
profiles will likely not lead to needed binary packages not being
compiled.

So nocheck and nodocs profiles could allow safer reduced builds.

An argument against nodocs might be, that since (most?) *-doc packages
are Architecture:all, the build dependencies that are needed by them to
be built are already/should be included in Build-Depends-Indep anyways.
The current algorithms discard the Build-Depends-Indep field as
Architecture:all binary packages do naturally not need to be built
during the bootstrapping process.

cheers, josch


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130116162652.GB30841@hoothoot



Re: Bootstrappable Debian - proposal of needed changes

2013-01-16 Thread Johannes Schauer
On Wed, Jan 16, 2013 at 05:41:31PM +, Colin Watson wrote:
  If Debian wants to incorporate the ability to being bootstrappable
  in its policy, then there *must* be some packages which are cross
  compiled for a minimal build system. Adding this header to those
  source packages would make it a bug if they do not actually cross
  compile. Without this header, cross compilation would be wishlist as
  usual.
 
 This would be better done by way of an external list of the packages
 that need to cross-build cleanly.

It will be possible for every developer to generate this external list
by using the tools that were developed during my GSoC.

Note, that a consistent list cannot be generated at this point, as some
source packages have conflicts in their multiarch cross build
dependencies. So (as pointed out in my initial email) the algorithms
exist but package meta data must still be fixed.

What we have right now is:

- the *minimum* list of source packages that must be cross compiled
- the *maximum* list of source packages that must be cross compiled

The actual list of source packages that must be cross compiled is
somewhere in between, closer to the minimum list of source packages and
depends on how multiarch cross dependencies will be resolved in
practice.

  Furthermore, cross compilation is one of the methods a porter can use to
  break build dependency cycles. If some packages carry this new field
  then not only could a porter decide quicker whether or not a source
  package is cross compilable, an algorithm could also incorporate this
  information to automatically break build dependency cycles for cross
  compilation.
 
 While this is true, having stared at similar things myself in the past,
 I've come to believe that it's a better use of time to just make
 everything in sight cross-buildable than to spend lots of effort trying
 to algorithmically decide what might work or not.

The only way to algorithmically decide this, is to actually attempt to
cross build the package in question. For example by using a buildd which
constantly tests source packages for cross buildability as you already
mentioned in your last email.

From what I was told by wookey and others, cross building should only be
the very last option and therefor the current version of the tools
tries to select as few source packages as possible for cross
compilation. Cross building is also currently regarded as only the last
resort for breaking native build dependency cycles.

From the perspective of the dependency analysis algorithms, deciding
that cross compilation is suddenly an easy thing which can and should be
done for most source packages, is just switching the dependency
resolution from native to cross. So the developed algorithms would still
all be valid if building things cross were suddenly preferred.

  The question remains of how many source packages would have to have the
  proposed new fields added to them to make a full bootstrap from zero
  possible. If the Gentoo USE flags were not too far off and assuming or
  tools do the correct thing so far, then:
  
   - the number of source packages that has to be modified with the new
 fields is at maximum 83 (there might be a smaller set).
 
 https://wiki.ubuntu.com/CrossBuilding/BuilddChroot (thanks, Matthias)
 suggests that we are not that far from being able to at least get to a
 sensible minimal chroot with a modicum of hacking.

Not sure whether you meant to reply to my paragraph above yours, but you
linked to a different selection of packages than I meant. The 83 source
packages I mentioned were not the minimal build system but those which
need to have build profile information added to break dependency cycles.

The ~300 source packages out of which the 83 are selected can be found
here:
http://wiki.debian.org/DebianBootstrap/TODO#Break_dependency_cycles_using_staged_builds

The list is of Debian Sid from (IIRC) August last year and consists of
the main build dependency problem. All those ~300 source packages depend
upon each other through their build dependencies.  Maximum 83 of them
must be modified to break this strongly connected component into a
directed acyclic graph.

cheers, josch


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130116195100.GA12783@hoothoot



Re: Bootstrappable Debian - proposal of needed changes

2013-01-17 Thread Johannes Schauer
Hi,

On Thu, Jan 17, 2013 at 08:33:57AM +0100, Wouter Verhelst wrote:
 If wanna-build is updated to support these two fields, then I imagine
 it can run the bootstrapping dependency algorithm. While you wouldn't
 want to upload a package to the debian.org archive when the
 architecture is as yet incomplete, the same isn't true for the
 debian-ports.org archive.
 
 It would require some patches for wanna-build to understand that package
 foo would need to be rebuilt once a particular profile is fully built
 and available, but I don't think that's impossible.

I'm not sure if wanna-build is the right tool to do this but we also did
not yet implement anything which would require a specific tool for the
build process.

The output of the current version of the algorithm produces is an ASCII,
comma separated list of source packages. All packages which can be built
in parallel are given on the same line. Source packages that need to be
built with reduced build dependencies are annotated as such. The
rebuilding of profile built packages is part of this output and
triggered after all source packages of a strongly connected component
finished building. After all profile built packages successfully rebuilt
fully, *all* source packages of the strongly connected component are
rebuilt. This is to make sure that every source package was built once
with all build dependencies available.

This list gave me so far an idea of the build order and a way to check
whether it made sense. By coming up with a more machine readable version
of this output, a tool can be triggered/controlled which then gives the
actual build jobs and does things like you mentioned above.

 However, to do that, there's one thing I'm missing in your mail: there
 will be cases where packages, when built in a particular profile do
 not support some functionality. That is, the package is available and
 does most of what the full package does, but because some
 build-dependency is missing, it doesn't support some feature or other
 -- for example, let's say that a document translation package (which
 we'll call foo) which supports many input formats does not support
 XML as an input format when built in the stage1 profile. The output of
 its stage1 build would not change the number of binary packages built
 with the source package, it would just build a binary package with
 reduced functionality.
 
 Now it might be that a package build-depends on our package foo because
 it needs to translate documents in that XML format into something else,
 With your proposal, there's no way for the build-depending package to
 declare that it needs a version of foo that was built at a richer
 profile than stage1.
 
 Is this something you've considered?

Glad you bring this up because we indeed forgot to mention this in our
initial email. Yes, what you mention can indeed happen and this is also
why extensive rebuilding is part of the build order: to make sure that
all features are always compiled into the binaries.

We have thought about this issue but did not manage to come up with a
global solution. A solution would require a way to depend on features
of a package and therefor create an overcomplicated dependency syntax
which would not justify its purpose.

There are two things that a developer could do to avoid such FTBFS
errors during the bootstrap process when he modifies a source package
with reduced stage1 build dependencies:

 - only remove build dependencies which do not modify the binary
   packages which are produced (instead, let some binary packages not be
   produced, like foo-doc, foo-java or foo-gtk)

 - look at the reverse dependencies in the generated dependency graph to
   make sure that features which are changed in built binary packages
   are not depended upon (naturally, those reverse dependencies will
   change over time...)

Both solutions are very fragile. This is also why the developed
algorithms try to build as few source packages as possible with reduced
build dependencies.

Do we have some experience of how common such errors are during a manual
bootstrap?

cheers, josch


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130117083416.GA26882@hoothoot



Re: Bootstrappable Debian - proposal of needed changes

2013-01-17 Thread Johannes Schauer
Hi,

On Thu, Jan 17, 2013 at 09:51:32PM +0100, Wouter Verhelst wrote:
  I'm not sure if wanna-build is the right tool to do this
 
 Why not?
 
 It already needs to do build-dependency tracking, marking packages as
 can't be built yet because build-depends aren't there yet all the
 time. That's exactly the sort of thing you need to be doing, no?

No. The tool that actually does the build, doesnt have to keep track of
which dependencies are met at any point (but is of course free to check
anyways). Which source package is compiled when and which binary
packages exist and are installable at which point is known by the
dependency analysis tools that produced the build order. If the
calculation of the build order went right, then at each compilation
step, all dependencies will be met.

So the tool doesnt have to have a way of knowing can't be built yet
because build-depends aren't there yet. The tool is of course free to
check anyways ;)

It is also entirely possible to include the algorithms *into* the build
tool and make them part of the process that figures out the can't be
built yet because build-depends aren't there yet. Maybe this is what
you meant.

I mean in theory you could even drive a trivial dpkg-buildpackage
wrapper or similar instead of something more fancy like wanna-build.

I didnt think much about the actual implementation of this step yet
(aka: what tools to use to do the actual compilation).

  After all profile built packages successfully rebuilt fully, *all*
  source packages of the strongly connected component are rebuilt.
  This is to make sure that every source package was built once with
  all build dependencies available.
 
 If you have enough information on what a package needs to build
 properly, you wouldn't need to do this.
 
 But I agree that's a pretty big if.

There is a higher guarantee of a source package having built properly if
it was built with all its dependencies in place because this is also how
it had been normally built for other arches for (possibly) years.
Bootstrapping is the exception and not the rule, so it is easy that the
additional information you mention goes out of sync.  By trading a bit
more CPU time for a recompilation, the bootstrapper will have to worry
less about having produced binary packages with a reduced feature set.

  We have thought about this issue but did not manage to come up with
  a global solution. A solution would require a way to depend on
  features of a package and therefor create an overcomplicated
  dependency syntax which would not justify its purpose.
 
 I'm not sure I agree with that.
 
 Your build profiles are essentially creating additional variants of a
 particular binary package. I imagine we should be able to come up with a
 syntax for the build-depends header which would allow one to declare you
 depend on a particular variant of a binary package.
 
 Let's say something like the following (extending the syntax as
 suggested by Ian Jackson earlier):
 
 Build-Depends: foo (profile:stage1 = 1.3) [profile:stage1], foo (= 1.3) 
 [!profile:stage1]
 
 Essentially, with this syntax I'm saying that to build a the package
 which contains this build-dependency header, under normal circumstances
 you'd need the package foo at version 1.3 or above, as built with no
 profiles enabled; but if you enable the stage1 profile for this
 package, you can use the stage1 version of the foo package instead.
 
 I don't think this is too confusing or complicated, and I think it makes
 sense to add the profile to the version information in this manner; a ()
 qualifier for a package could then be interpreted as a statement of
 *what* a package needs to comply with (version or profile of the
 build-dependency), whereas a [] qualifier would state *when* we need a
 particular build-dependency (architecture or profile of our *current*
 build).

Sure, anything is possible. I just again worry about this being too
fragile and the additional data not being maintained because it is only
seldom used.

But to go with your idea I have another proposal:

Ian Jackson was proposing a syntax which combined build profile names
and architecture names to create one format which describes restrictions
on both:

Build-Depends: foo [amd64 i386] [!profile:stage1 profile:stage2]

The MultiArchCross spec [1] already defines a syntax on how to
explicitly depend on a binary package of a specific architecture.
Namely, the : character is used as a separator of package name and
architecture in the same way it is used for the :any and :native
qualifiers needed for dependencies on M-A:allowed packages.

So somebody is able to write:

Build-Depends: bar:amd64, baz:native

This is not currently supported in Debian but I heard it is in Ubuntu
and I also heard cross compilers need to depend on binary packages of a
specific architecture, so I guess this syntax needs to be supported by
wanna-build sooner or later?

Ians proposal put profile names and architecture names in the same pot.

Re: Bootstrappable Debian - proposal of needed changes

2013-01-19 Thread Johannes Schauer
Hi,

On Fri, Jan 18, 2013 at 04:27:00PM -0800, Steve Langasek wrote:
 On Thu, Jan 17, 2013 at 08:33:57AM +0100, Wouter Verhelst wrote:
  Now it might be that a package build-depends on our package foo
  because it needs to translate documents in that XML format into
  something else, With your proposal, there's no way for the
  build-depending package to declare that it needs a version of foo
  that was built at a richer profile than stage1.
 
 The obviously correct solution to this is to strictly order the builds, by
 considering the stageX package builds as satisfying the build dependencies
 *only* of those packages that are part of the build loop.  All other revdeps
 should wait until the final version of the package is available.  In that
 case, misbuilds are only possible if there's an error in the bootstrapping
 metadata itself (or in the bootstrapping code).

Unfortunately, in practice the problem is a bit bigger than individual
cycles. We still call them cycles all the time because that's what
people can imagine best.  In reality, packages are involved in strongly
connected components.

When starting native compilation from a minimal build system
(priority:essential plus build-essential plus debhelper), then the
biggest problem is a strongly connected components with 900-1000 nodes.
This means that each of the involved nodes is part of millions/billions
of real cycles. This is partly why breaking this dependency graph with
minimal cuts is an NP-complete problem and only approximate solutions
are currently known. The approximate solution I came up with allows to
break this strongly connected component into a directed acyclic graph
with just modifying 83 source packages.

The problem here is, that any of the packages in that strongly connected
component is a (direct or indirect) reverse dependency of every other
package in it. And also depending on which source packages are selected
to be profile built, different orders are produced. And these different
orders can all behave differently due to the kind of problem Wouter
pointed out: because all packages in the SCC are potential (direct or
indirect) reverse dependencies.  And one can only reliably rebuilt all
source packages of an SCC once all profile built packages have been
rebuilt. But this again is only possible for all profile built source
packages after all of the SCC has been solved.

So there is no obvious solution of this problem to me because the size
of the problem is a 900-100 big graph. Unfortunately, the size of this
graph is also growing with Debian over time (as I already noted in our
inital email): http://blog.mister-muffin.de/images/dep_graph_scc.svg

cheers, josch


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130119104118.GA4367@hoothoot



Re: RFC declarative built-using field generation

2013-02-08 Thread Johannes Schauer
Hi,

On Fri, Feb 08, 2013 at 08:36:56AM +0100, Raphael Hertzog wrote:
 On Thu, 07 Feb 2013, Joey Hess wrote:
  Ben Hutchings wrote:
   What I mean is that a changes file for a sourceful upload has
   'source' (and maybe some real architecture names) in the Architecture
   field.  Therefore 'source' cannot be assigned as the name of a real
   architecture.
  
  Ah, sure.
  
  However, source in Build-Depends could be taken to mean that it
  Build-Depends on the source of the package. Which is not currently
  supported, but I'm sure everyone stuck maintaining foo-source binary
  packages would be happy if it were one day. So perhaps best not to
  overload it.

There are apparently currently 67 .*-source.* packages in Debian Sid:

$ grep-dctrl -P --pattern -source -c  Packages
67

 However, if this would get implemented, it would probably end up using
 the multiarch syntax foo:source (at least that seems to be the most
 logical choice to me).

Since source packages can't have an architecture by themselves (only the
architecture on which they are buildable), this seems sensible.

In other places (like the debian bugtracker) src:pkgname is used. We
also use src:pkgname in dose3. So this might be an alternative.

 So I don't believe that this would be in conflict with foo [source].
 It might be a bit confusing though to use the same keyword in
 different situations (and furthermore it should be foo [any source]
 if we don't want the build-dependency to be dropped...).

Another idea to mark source packages of build dependencies for inclusion
in the built-using field would be using the syntax proposed by ian
jackson in the Bootstrappable Debian thread:

His idea encoded the information about which build dependencies are
needed for a specific build profile like this:

Build-Depends: huge (= 1.0) [i386 arm] [!profile:embedded !profile:stage1]

He propose an extension to the architecture specification syntax using
scopes (like profile). This extension could be used to mark the source
packages of build dependencies for inclusion in the built-using field as
well.

Build-Depends: foobar (= 1.0) [i386 arm] [extras:built-using]

As an example, I put the information in an extras scope.

Maybe this makes sense.

cheers, josch


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130208081620.GA10547@hoothoot



Re: upstream advise page about circular dependencies (bootstrapping)

2013-02-12 Thread Johannes Schauer
Hi,

On Tue, Feb 12, 2013 at 07:55:42PM +0800, Paul Wise wrote:
 Which software is this and why does it need itself to build? Is it a compiler?

There are many examples of source packages that build depend on binary
packages they build. This includes languages like python, vala, sml,
freepascal and haskell.

But besides those simple cycles there are other cycles of length 2 when
taking whole installation sets into account. For example src:pkg-config
indirectly build depends on pkg-config because src:pkg-config build
depends on libglib2.0-dev which depends on pkg-config.

As the subject mentions bootstrapping, this extended type of self-cycle
is of just as much importance as the first type mentioned initially.

Here are all cycles of length two (both types) in Debian Sid as of
January 2013. Each cycle contains one source package and one of its
build dependencies. Sometimes those build dependencies are directly
built by the source package itself (first type) and sometimes those
build dependencies need binary packages the source package builds to be
installed.

texlive-latex-base - src:libtasn1-3
gtk-doc-tools - src:libtasn1-3
libldap2-dev - src:cyrus-sasl2
libpq-dev - src:cyrus-sasl2
heimdal-multidev - src:cyrus-sasl2
heimdal-dev - src:openldap
gtk-doc-tools - src:gnutls26
texlive-latex-base - src:libgcrypt11
texlive-generic-recommended - src:libgcrypt11
libdbus-glib-1-dev - src:dbus
python-dbus - src:dbus
libgtk2.0-dev - src:avahi
libgtk-3-dev - src:avahi
python-gtk2 - src:avahi
xfonts-utils - src:libfontenc
ghostscript - src:cups
default-jdk - src:java-atk-wrapper
src:python2.7 - python
lsb-release - src:python2.7
gdb - src:python2.7
openjade1.3 - src:opensp
docbook-dsssl - src:opensp
ghostscript - src:ijs
docbook-utils - src:ijs
src:colord - libgtk-3-dev
kdelibs5-dev - src:libproxy
libwebkitgtk-dev - src:libproxy
libphonon-dev - src:phonon-backend-gstreamer
libavformat-dev - src:x264
libffms2-dev - src:x264
libopencv-dev - src:libav
libcv-dev - src:libav
libgtk-3-dev - src:d-conf
valac - src:vala-0.16
gcj-jdk - src:ecj
gcj-4.7-jdk - src:ecj
python-matplotlib - src:python-numpy
fp-utils-2.6.0 - src:fpc
fp-compiler-2.6.0 - src:fpc
fp-units-base-2.6.0 - src:fpc
fp-units-fcl-2.6.0 - src:fpc
mlton - src:mlton
src:sbcl - sbcl
src:alex - alex
gnat - src:gnat-4.6
gforth - src:gforth
src:happy - happy
src:hscolour - haskell-devscripts
ghc - src:ghc
libglib2.0-dev - src:pkg-config

cheers, josch


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130212124038.GA28938@hoothoot



Re: upstream advise page about circular dependencies (bootstrapping)

2013-02-12 Thread Johannes Schauer
Hi,

On Tue, Feb 12, 2013 at 04:58:46PM +, Simon McVittie wrote:
 Either GLib or pkg-config should document how you can avoid this cycle
 by doing a stage 1 build of one project or the other.

You assume a dependency cycle between the src:pkg-config and
src:glib2.0. But instead I wrote that the cycle was:

libglib2.0-dev - src:pkg-config

So the only involved source package involved in the cycle is
src:pkg-config. To break the cycle, src:pkg-config has to be built
without libglib2.0-dev.

Even if a native version of libglib2.0-dev was magically appearing from
somewhere (for example by compiling src:glib2.0 without pkg-config as
you explained) it would *not* break this dependency cycle because
libglib2.0-dev would still depend on pkg-config which can only be
compiled if src:pkg-config can be compiled. And src:pkg-config can't be
compiled because it depends on libglib2.0-dev which we compiled
beforehand but we can't install it.

I also fell into the same trap countless times during the first weeks of
my GSoC last year. :)

A dependency cycle between two source packages (as you mentioned) would
always be of length four because in between both source packages there
would be a set of binary packages. Example:

src:doxygen - libqt4-dev - src:dbus - doxygen

This gives two possibilities to break the cycle: the dependency of
src:dbus on doxygen or the dependency of src:doxygen on libqt4-dev.

cheers, josch


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130212172613.GA21015@hoothoot



Bootstrapping: list of 81 self-cycles in Debian Sid

2013-03-05 Thread Johannes Schauer
Hi,

Since self-cycles in Debian are often unintuitive, maintainers might be unaware
that the source packages they maintain are actually forming a self cycle. I
therefore created a wiki page with the list of the 81 self-cycles in Debian Sid
as of 2013-01-01: http://wiki.debian.org/DebianBootstrap/SelfCycles Some extra
explanations follow.

During bootstrapping we must build some source packages with reduced build
dependencies (build profiles) to work around cyclic build dependencies. At the
same time we leave runtime dependencies of binary packages untouched. While the
build dependency graph contains thousands of nodes and there exist many
possible choices of build dependencies which would make the graph acyclic if
they were removed, some build dependencies are non-optional and *must* be
dropped: those which are part of self-cycles. Build dependencies which are part
of self-cycles are not optional because self-cycles consist of only a single
build dependency and a number of runtime dependencies. Since runtime
dependencies are not to be touched, this single build dependency *must* be
broken to be able to break the cycle. Since all cycles must be broken to make
the graph acyclic, breaking self-cycles is also not optional. Therefor, if we
enumerate a list of self-cycles in the build dependency graph, we automatically
have a list of source packages and their build dependencies which must be part
of a build profile (or be cross compiled).

Self-cycles can be divided into two classes:

 1. a build dependency on a binary package the source package builds (the
simple case)

 2. a build dependency on a binary package which needs one of the binary
packages the source package builds to be installable

The first class is easily detectable by checking whether any binary package is
part of the build dependencies of the source package that builds it. Such
cycles often appear in compilers that need themselves to be built.

The second class is harder to find because it is not enough to simply traverse
the dependency tree of a source package until one finds a dependency on one of
the binary packages the source package builds. Instead, the strong
dependencies [1] of a source package have to be calculated. If any of the
strong build dependencies of a source package are built by the source package
itself, a self-cycle is created. Such cycles are created by the
interdependencies between binary packages and are often very unintuitive.

Here two examples:

src:gnutls26 build depends on libgnutls26 because src:gnutls26 build depends on
gtk-doc-tools which needs libgnutls26 to be installable.

src:libproxy build depends on libproxy0 because src:libproxy build depends on
libwebkitgtk-dev which needs libproxy0 to be installable.

My code found 81 such cases in Debian Sid as of 2013-01-01. Due to this high
amount of results I pasted them into a wiki page instead of this email.

http://wiki.debian.org/DebianBootstrap/SelfCycles

If you find any inconsistencies, please dont hesitate to contact me or write to
our mailinglist at debian-bootst...@lists.mister-muffin.de

cheers, josch


[1] Abate P, Boender J, di Cosmo R, Zacchiroli S. Strong Dependencies between
Software Components ESEM 2009


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130305112246.25881.60404@hoothoot



Re: Bootstrapping: list of 81 self-cycles in Debian Sid

2013-03-05 Thread Johannes Schauer
Hi,

Quoting Samuel Thibault (2013-03-05 13:41:12)
 Maybe arch:all-only source packages should be shown in a different color:
 AIUI these do not pose a problem for bootstrapping a new Debian port, since
 one does not need to build the source package, and just pick up the existing
 _all.deb. They still pose a problem for bootstrapping debian from scratch, of
 course.

Can you give an example of a source package which you think is wrongly included
in the list?

The code generating that list is part of the debian bootstrap project [1] and
as such it would be a bug if architecture:all package were required to be
recompiled for the reason you mentioned.

cheers, josch

[1] https://gitorious.org/debian-bootstrap/bootstrap


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130305134151.25881.28816@hoothoot



Re: Bootstrapping: list of 81 self-cycles in Debian Sid

2013-03-05 Thread Johannes Schauer
Hi,

Quoting Wouter Verhelst (2013-03-05 14:47:20)
 On Tue, Mar 05, 2013 at 02:41:51PM +0100, Johannes Schauer wrote:
  The code generating that list is part of the debian bootstrap project [1]
  and as such it would be a bug if architecture:all package were required to
  be recompiled for the reason you mentioned.
 
 In that case, rather than putting this up on a wiki page, would it be
 possible to run this tool periodically and post the output somewhere
 (under the debian.net or debian.org domain, preferably)?
 
 This is interesting information, but only if kept up to date. Wiki pages
 need to be updated manually, so having this run from cron every so often
 would be much more interesting.

Yes, the information is likely to get outdated once some binary packages change
their dependencies.

Would it be possible to use existing Debian infrastructure to run this code
instead of my own server which would be too low-spec for this kind of task?

It would be trivial to write a shell script which runs the correct code for all
architectures and all suites and outputs static html with the relevant
information. Unfortunately, the code depends on some yet uncommitted fixes to
dose3 [1] so compiling it is not yet too trivial but requires applying my
patches first.

cheers, josch

[1] https://gforge.inria.fr/tracker/?atid=13808group_id=4395func=browse


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130305140743.25881.12276@hoothoot



Re: Bootstrapping: list of 81 self-cycles in Debian Sid

2013-03-05 Thread Johannes Schauer
Hi,

Quoting Samuel Thibault (2013-03-05 14:57:04)
 For instance commons-beanutils is only producing arch:all packages (I don't
 understand why it has separate Build-Depends and Build-Depends-Indep BTW), so
 AIUI, ports don't need to build it and thus do not have to care about the
 dependency loop.

Thanks, I was wondering why there was so much java stuff in this list all of a
sudden. The list is now updated to correctly take arch:all into account which
was not the case before because I passed some arguments incorrectly. Thanks for
the catch!

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130305141721.25881.15562@hoothoot



Re: Bootstrapping: list of 81 self-cycles in Debian Sid

2013-03-05 Thread Johannes Schauer
Hi,

Quoting The Wanderer (2013-03-05 15:35:37)
 You can build either one without a matching version of the other, but you
 won't get full functionality. In order to get the full functionality of both,
 from what I've been able to tell you need a minimum of three builds on every
 cross-matching-version update: x264 without libavformat support, then FFmpeg
 with x264 support, then x264 with libavformat support. (Or possibly the
 reverse, but x264 is faster to build than FFmpeg is.)

Assuming you build x264 without libavformat, the correct order is actually:

 1. src:x264 without libavformat-dev

 2. src:libav fully

 3. src:x264 fully

 4. src:libav fully again

We add the fourth step so that it is less likely that a libx264-dev with
limited functionality influences the binaries built by src:libav in some funny
way.

Though in practice, src:x264 as well as src:libav are part of a big 900-1000
vertices big strongly connected component. So the actual build order is:

 1. build tons of source packages (all source packages in the strongly
connected component, so about 380-400), some of them fully, some of them
with reduced dependencies

 2. rebuild all source packages fully which were earlier built with reduced
dependencies

 3. rebuild the rest of source packages fully

 At a glance, this looks to me like a variant of the self-cycle problem. Is it
 something which should/could be addressed as part of the same effort? Or is it
 already handled in Debian in a way I haven't noticed? Or none of the above?

Maybe I didnt understand you correctly but maybe it helps if I note that the
example you give is not a self-cycle but a cycle of length two (or four
depending on the type of dependency graph).

Go to this wiki page:

http://wiki.debian.org/DebianBootstrap/TODO

And search for this string:

src:libav - libx264-dev - src:x264 - libavformat-dev

This is the cycle that you took as an example earlier. So yes, we can also find
those cyclic dependencies but they are a different problem class because
instead of having just one way to break them, there are now two:

 1. either building src:libav without libx264-dev

 2. or building src:x264 without libavformat-dev

But those cycles are a bit less interesting because there are two possibilities
to break it. So a bootstrapper must go and decide which of the two to build
with reduced dependencies depending on which one is easier to modify, faster to
build or because the structure of the surrounding dependency graph indicates
that one build dependency has a much higher impact of the overall graph
structure than the other. Our tools help to make the latter decision easier.

I hope this helps a bit.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130305154626.25881.49802@hoothoot



Re: Bootstrapping: list of 81 self-cycles in Debian Sid

2013-03-05 Thread Johannes Schauer
Hi,

Quoting Simon McVittie (2013-03-05 16:54:00)
 This is useful information. Is there any way in which the maintainers of
 these packages can say yes, we know, and here is where you break the cycle
 without using unmerged dpkg features or breaking the freeze?

I'm afraid there is little one can do right now because of the two reasons you
mentioned.  If somebody is very eager to help out, then one way to help is by
expanding these lists:

https://gitorious.org/debian-bootstrap/bootstrap/trees/master/droppable

They are plain ascii text files which list the droppable build dependencies for
source packages until build profiles are supported by Debian. The lists
currently contain contributions from Thorsten Glaser, Patrick McDermott, Daniel
Schepler, Wookey and Gentoo USE flags. The more complete these lists are, the
better the current approximation of how a real Debian bootstrap would look like
is. We are currently down to only 11 build dependencies our algorithms suggest
to remove but of which we do not know whether this would be possible in
practice or not. Those lists become obsolete once Debian supports build
profiles and enough packages in the archive implement them.

 If not, now is not really the time to be doing anything about these cycles:
 wheezy has been frozen for well over 6 months, and maintainers who want to be
 able to fix 'important' bugs in wheezy are avoiding non-freeze-compatible
 changes to unstable.

Agreed. I am not saying anybody should implement any of the suggestions right
now (even creating patches for later would be a gamble until there is a
decision on the profile format). Instead, I wanted to report this new ability
of our bootstrap tools, raise awareness of the problem and educate maintainers
about this type of issue during a bootstrap of Debian. I should've better
explained my intentions in my initial email. :)

It is unfortunate that this work is being done during a freeze because it means
that nothing I implement right now can be tried out in practice without going
through a ridiculous amount of work. But I rather wanted to implement all this
functionality now than wait until the freeze is over. This way, once wheezy is
released, we already have a number of tools which at least should work on
paper. :D

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130305172517.26281.64856@hoothoot



Re: Bootstrapping: list of 81 self-cycles in Debian Sid

2013-03-06 Thread Johannes Schauer
Hi,

Quoting The Wanderer (2013-03-06 14:46:49)
 In that case, this (part of it) is a problem with my misunderstanding the
 terminology being used.

The terminology is based upon the dependency representation in the dependency
graph. We have two different types of graph, the source graph which only
contains source packages and the build graph which also contains binary package
nodes between source package nodes. My GSoC application contains a graphical
representation of the build graph:

http://wiki.debian.org/SummerOfCode2012/StudentApplications/JohannesSchauer

The term self-cycle is used in the same way as in any other graph and just
describes a self-edge: an edge which has the same start and end node.

Those self-cycles can only exist in the source graph. In the build graph
representation, self cycles are cycles of length two. If you look at the wiki
page I linked to earlier, then you will see that the smallest cycles are of
length two. This is because that wiki page and most of our work is based upon
the build graph.

  This is the cycle that you took as an example earlier. So yes, we can also
  find those cyclic dependencies but they are a different problem class
  because instead of having just one way to break them, there are now two:
 
 Thank you.
 
 On the face of it this doesn't seem to address the question I was actually
 trying to ask (does this cycle-detection effort also detect soft 
 dependencies
 which simply result in reduced functionality, as well as ones which result in
 build failures?), but the fact that this particular soft dependency is
 included in that - presumably automatically-generated - list implies that the
 answer is yes.

No it doesnt. The software can only work on existing meta data. As of now,
there exist no meta data about which build dependencies of a debian source
package are droppable. That this cycle was detected does not mean that the
software knows that it can be dropped. The cycle is a syntactic property of the
dependency graph. For this cycle to exist it doesnt matter whether or not a
dependency is droppable in practice. The fact that the build dependencies of
the cycle in your example can be dropped in practice is pure luck.

If you know any way to automatically generate these soft dependencies, dont
hesitate to tell. Right now, those soft dependencies are supplied either
manually or were harvested from Gentoo USE flags. I wrote another email in this
thread about that topic.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130306144410.26281.18657@hoothoot



Re: Bootstrapping: list of 81 self-cycles in Debian Sid

2013-03-06 Thread Johannes Schauer
Hi,

I wrote a shell script which outputs the following static html:

http://mister-muffin.de/bootstrap/selfcycles.html

If you guys find this useful, then I can see how to get this generated
periodically and published somewhere under the debian.org domain.

Quoting Joerg Jaspert (2013-03-06 09:07:44)
 That obviously depends a bit on what is actually needed to run (and then on
 talking to DSA, but they don't bite so much :) ).

If it is found useful, then I have to figure out who to contact about this.

 I guess you need a mirror (or at least packages/sources files) as input,
 though you might want to check if you can use an existing database within
 Debian to just use the already exsiting data.

Yes, the input to the code is just a pair of Packages.bz2 and Sources.bz2
files.

For the output you see in the link above, they total to a size of 500MB. If
they can be retrieve directly from somewhere on the same machine, then it would
naturally save lots of space.

 And then whatever $packages. And disk space, RAM, CPU requirements.

disk space:

Executables are only a few megabytes. Packages.bz2 and Sources.bz2 files total
to 500MB if they have to be downloaded from a mirror.

RAM:

The highest amount I observed was 260 MB of used resident memory. This value is
that high because the build dependency graph and the strong dependency graph of
the whole distribution has to be kept in memory at the same time.

CPU:

The whole script producing the output above took 7 hours to run on a 2.5GHz
Core i5 for all suites and all architectures (38 combinations). This is because
generating strong strong dependencies for all packages in the archive takes
8-10 minutes with current archive sizes.  I dont think this value can
considerably be lowered. On the other hand, the cron job doesnt have to be run
every day but maybe once a week or once a month?

 Now, your data input: What are you using? You might want to check if the
 buildd or archive databases don't already hold the data you need (or are
 easily extended to do so), and then just use that instead of duplicating the
 extraction.

Input is a pair of Packages.bz2 and Sources.bz2. From that a dependency graph
is generated. Strong dependencies are calculated and the graph is annotated
with them. I dont think that neither dependency graphs nor strong dependencies
are information which currently exist elsewhere.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130306175647.26281.72388@hoothoot



Re: Bootstrapping: list of 81 self-cycles in Debian Sid

2013-03-06 Thread Johannes Schauer
Hi,

Quoting Michael Tautschnig (2013-03-06 19:22:37)
 What about parallelizing parts of the job?

Sure, the html page I linked to contains 38 different data points:

 - 11 architectures from stable
 - 13 architectures from testing
 - 14 architectures from unstable

The most trivial way of parallelizing the generation would be to execute those
38 jobs in parallel. With 38 processors and enough RAM, the generation would
just take 12 minutes.

 It might be possible compute strongly connected components of the graph
 first, and then do the job for each component?

Strongly connected components do not play a role for this task. They are not
calculated at any point.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130306190056.26281.74543@hoothoot



Re: Bootstrapping: list of 81 self-cycles in Debian Sid

2013-03-08 Thread Johannes Schauer
Hi,

Quoting Simon McVittie (2013-03-05 16:54:00)
 On 05/03/13 11:22, Johannes Schauer wrote:
  Since self-cycles in Debian are often unintuitive, maintainers might be 
  unaware
  that the source packages they maintain are actually forming a self cycle.
 
 This is useful information. Is there any way in which the maintainers of
 these packages can say yes, we know, and here is where you break the
 cycle without using unmerged dpkg features or breaking the freeze?

Actually, yes. Here is the full list of things available to the bootstrapper
when encountering a build dependency cycle:

 1. Introduce reduced build dependencies
 2. Move dependencies from Build-Depends to Build-Depends-Indep
 3. Use Multi-Arch:foreign packages to satisfy dependencies
 4. Choose different installation sets for not-strong dependencies
 5. Split the source package in question
 6. Make binary packages available through cross compilation

The first item is obviously not implementable right now. But the second one is!
The third solution depends on the target the bootstrap is done for. The fourth
item is of no concern for this type of cycle. The fifth one is implementable
right now. The sixth is always the last resort.

So it is possible right now for maintainers to say yes, we know, and here is
where you break the cycle without using unmerged dpkg features or breaking the
freeze by either

 2. moving the dependency to Build-Depends-Indep (if the build dependency only
builds Architecture:all packages) or
 5. by splitting the source package into two

I was reminded of the option to split a source package by bug#702620 [1] which
splits colord-gtk from colord. Just note that splitting might not always be
sensible as cycles might simply vanish once some dependencies of binary
packages in the dependency chain change. Though in this case one can probably
be sure that libgtk-3-0 will always depend on libcolord1?

cheers, josch

[1] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=702620


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130309071856.3714.93257@hoothoot



Re: Generators for debian/* files?

2013-04-05 Thread Johannes Schauer
Hi,

Quoting Wookey (2013-04-05 12:17:42)
 Because it's an entirely unnecessary circular build-dependency. java
 is not part of build-essential and this doesn't seem like a good
 reason for making it so.

mh_make is part of the package maven-debian-helper (Thomas: I cant find the
package debian-java you were talking about) but according to the bootstrap
tools, maven-debian-helper is not part of any dependency cycle.

I would be glad if you can prove me wrong because then you found yet another
bug in my code. :)

A java helper which is part of many dependency cycles, is the package
javahelper which is part of the main SCC. It seems that 233 source packages
relevant for the bootstrap process build depend on javahelper (out of a total
of 290 source packages build depending on it).

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130405114542.14032.2997@hoothoot



Re: idea: generalized soft dependencies

2013-05-09 Thread Johannes Schauer
Hi,

Without discussing whether adding generalized soft dependencies would be a
good idea or not, let me give you my two cents about the syntax.

Quoting Eugene V. Lyubimkin (2013-05-08 20:51:54)
 Soft-Depends: a {90%}, b (= 1.2) {20%}, c (= 4) {99%}, c (= 6) {70%}
 Soft-Depends: iceweasel {50%,tag:desktop}, curl {95%,if_not_installed:wget}
 Soft-Depends: debdelta {10%,text:to enable automatic delta downloading}

We (myself+wookey) recently proposed a new syntax to tag build dependencies
with build profiles for bootstrapping [1] but it was deemed not to be a good
idea to introduce a new meta character. Instead, it seems that your proposal
can easily be implemented using the unified qualifier proposal that was made by
Ian Jackson in the same thread [2] which does not spend an additional meta
character but extends the architecture qualification syntax:

Soft-Depends: a [minthresh:90], b (= 1.2) [minthresh:20], c (= 4) 
[minthresh:99], c (= 6) [minthresh:70]
Soft-Depends: iceweasel [minthresh:50 tag:desktop], curl [minthresh:95 
!installed:wget]

I also started a thread to discuss Ian Jackson's proposal on d-dpkg@l.d.o [3]
where Raphael Hertzog gave a use case [4] for this syntax similar to the one
which you address here.

cheers, josch

[1] http://lists.debian.org/20130115181840.GA16417@hoothoot
[2] http://lists.debian.org/20726.45081.38709.233...@chiark.greenend.org.uk
[3] http://lists.debian.org/20130419194252.17205.76995@hoothoot
[4] http://lists.debian.org/20130421194955.gb2...@x230-buxy.home.ouaza.com


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130509070158.18633.47628@hoothoot



Re: Debian development and release: always releasable (essay)

2013-05-11 Thread Johannes Schauer
Hi,

Quoting Paul Wise (2013-05-11 10:40:18)
 Lucas created a script that displays a list of important packages, puppet
 isn't on that either:
 
 http://udd.debian.org/cgi-bin/important_packages.cgi

Not surprising as the algorithm (from what can be read in the comments)
executes what we call build_closure algorithm in this paper [1].  During
bootstrapping we execute the same algorithm with the only difference that we do
not pull in source packages that only contribute arch:all packages (for obvious
reasons).

While we also recognized this selection of packages as important from a
bootstrapping point of view (as it contains the largest strongly connected
component in the dependency graph) it is not surprising that puppet is not in
it. Instead, puppet is just a leaf package in the dependency graph.

So while the set of source packages found by the build_closure algorithm should
certainly be part of the important packages, this also shows an observation
that we made during dependency graph analysis: The syntax of the dependency
graph is not enough to make semantic conclusions of the contained packages.

So instead, the important packages should be the union of:

 - the result of the build_closure algorithm
 - the transitive dependencies of all tasks and all blends
 - ???

Maybe the puppet question can just be solved by introducing an openstack task?
Adding new tasks could help codify the set of features that are deemed
important.

cheers, josch

[1] http://mancoosi.org/~abate/bootstrapping-software-distributions


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130511093758.32278.6057@hoothoot



Re: Source build-dependencies

2013-05-11 Thread Johannes Schauer
Hi,

Quoting Paul Wise (2013-05-12 04:03:54)
 Another one I would like is to be able to depend or build-dep on
 foo:build-depends or foo [Build-Depends] (or by extension foo:depends), which
 would mean we could get rid of the ugly hack that is mk-build-deps.

Should a dependency of a source package src:A on src:foo not mean that src:A
also automatically build depends on the build dependencies of src:foo?

It would be weird if the transitive dependencies are taken into account for
build dependencies on binary packages but not for build dependencies on source
packages.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130512051516.32278.72480@hoothoot



Re: DebianBootstrap supported in which Debian suites?

2013-06-07 Thread Johannes Schauer
Hi,

I talked with Lisandro off-list. Apparently my idea applies to this problem so
I'm sharing it here for everybody. :)

Quoting Wookey (2013-06-07 17:55:48)
 In general we don't have a mechanism to do this _in the archive_ until
 build-profiles are supported (or at least ignored by B-D parsing tools)
 
 You can bootstrap happily using local builds and local tools that
 support profile builds. Existing patches here:
 http://people.debian.org/~wookey/bootstrap/patches/profiles/
 
 Then just upload the final builds, and sources with the profile info
 only encoded as comments.

As *-doc packages are arch:all you can also move the dependencies needed to
build the doc packages to Build-Depends-Indep.

One kind of build dependency which can be dropped in most cases to break
build dependency cycles are those build dependencies which only facilitate
building the documentation. But since binary packages containing documentation
packages are mostly arch:all, no build profiles and therefore no unsupported
!stage1 syntax is needed for this case. Adding the respective build
dependencies to Build-Depends-Indep solves the problem just as well. Using the
(yet unsupported and undecided upon) build profile syntax should be avoided if
the problem can also be solved by moving build dependencies to
Build-Depends-Indep.

So one thing every maintainer can do to help making bootstrapping of Debian
more simple is to make sure that all build dependencies which can go to
Build-Depends-Indep are also listed there. During bootstrapping we discard the
contents of the Build-Depends-Indep field as we are only interested in building
architecture dependent binary packages.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130607214206.3820.15475@hoothoot



Re: Candidates for removal from testing (2013-06-30)

2013-07-01 Thread Johannes Schauer
Hi,

Quoting Lucas Nussbaum (2013-07-01 08:21:30)
 Currently, the following criterias are used:
 | Key packages are:
 | - packages whose popcon is higher than 5% of the max popcon (that's
 |   7570 insts currently)
 | OR
 | - packages of priority = standard
 | OR
 | - packages of section debian-installer
 | OR
 | - debian-installer, debian-cd, piuparts
 | OR
 | - build-dependencies of key packages [binary dependencies are covered
 |   by the popcon criteria]

How are dependency disjunctions in direct or indirect build dependencies
handled? Which package is selected if a key package Build-Depends: A | B?

And are you only talking about direct build dependencies or also indirect build
dependencies? In the latter case, the amount of possible choices (installation
sets) becomes even higher.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130701130056.14706.49386@hoothoot



Bug#714956: ITP: brickutils -- Utility for organizing your collection of LEGO(R) bricks

2013-07-04 Thread Johannes Schauer
Package: wnpp
Severity: wishlist
Owner: Johannes Schauer j.scha...@email.de

* Package name: brickutils
  Version : 0.1.6.1
  Upstream Author : Mario Pascucci mpascucci gmail com
* URL : http://bricksnspace.wordpress.com/brickutils/
* License : GPL2+
  Programming Lang: Python
  Description : Utility for organizing your collection of LEGO(R) bricks

The main problem that BrickUtils tries to solve is to answer the question: can
I build this model with the bricks I own?

It allows one to import LEGO(R) models in different CAD formats (LDraw and
LEGO(R) Digital Designer) and check if one can build that model with the pieces
one owns. Parts lists can be exported in various formats, including printable
HTML or bricklink XML to easily buy missing pieces at bricklink.com.


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130704155436.14245.77281.reportbug@hoothoot



Bug#714999: ITP: ldraw-parts -- LDraw LEGO(R) parts library

2013-07-05 Thread Johannes Schauer
Package: wnpp
Severity: wishlist
Owner: Johannes Schauer j.scha...@email.de

* Package name: ldraw-parts
  Version : 1203
  Upstream Author : LDraw.org and others (see debian/copyright)
* URL : http://www.ldraw.org/parts/latest-parts.html
* License : CCAL-2.0
  Programming Lang: C
  Description : LDraw LEGO(R) parts library

The source package builds two binary packages. The package ldraw-parts
contains the (architecture independent) part library and the package
ldraw-mklist contains the (architecture dependent) program ldraw-mklist to
create a parts.lst file.

Package: ldraw-parts
Description: LDraw LEGO(R) parts library
 Library of LDraw parts, part primitives and two example models. This part
 library is needed by 3D CAD programs such as MLCAD, LeoCAD and Konstruktor
 which allow to construct LEGO(R) models from individual LDraw parts. It is
 also needed by rendering software such as LDView and LdGLite.

Package: ldraw-mklist
Description: LDraw mklist program
 3D CAD programs and rendering programs using the LDraw parts library of
 LEGO(R) parts rely on a file called parts.lst containing a list of all
 available parts. The program ldraw-mklist is used to generate this list from
 a directory of LDraw parts.

Having this package in Debian is the prerequisite for packaging more of the
tools mentioned above which depend on this part library.


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130705104216.1204.59555.reportbug@hoothoot



Bug#715053: ITP: ldglite -- Display, edit and render 3D LEGO(R) LDraw models

2013-07-05 Thread Johannes Schauer
Package: wnpp
Severity: wishlist
Owner: Johannes Schauer j.scha...@email.de

* Package name: ldglite
  Version : 1.2.6
  Upstream Author : Don Heyse dhe...@hotmail.com
* URL : http://ldglite.sourceforge.net/
* License : GPL2+
  Programming Lang: C
  Description : Display, edit and render 3D LEGO(R) LDraw models

The program ldglite allows one to open LDraw files to view 3D LEGO(R) models
using openGL. It also offers an editing mode to change and save those models.
In batch processing mode it allows one to render models to png images.

A program like ldglite or ldview is needed to render raster graphics of pieces
and models which can then be used by brickutils or lpub.


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130706011138.22247.62629.reportbug@hoothoot



Bug#715280: ITP: ldview -- OpenGL based viewer and renderer for LEGO LDraw 3D models

2013-07-07 Thread Johannes Schauer
Package: wnpp
Severity: wishlist
Owner: Johannes Schauer j.scha...@email.de

* Package name: ldview
  Version : 4.2 beta1
  Upstream Author : Travis Cobbs and Peter Bartfai
* URL : http://ldview.sourceforge.net/
* License : GPL2
  Programming Lang: C++
  Description : OpenGL based viewer and renderer for LEGO LDraw 3D models

The program can read LDraw dat and mpd files. It allows one to display
them and manipulate the perspective and rendering options using
commandline arguments as well as through a QT based GUI. It offers a
batch mode which allows one to produce PNG raster graphics from LDraw
models or pieces.


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130707152622.7715.19317.reportbug@hoothoot



Re: asking for advice: all dependencies incl. version numbers

2013-08-23 Thread Johannes Schauer
Hi,

Quoting FARKAS, Illes (2013-08-22 17:47:57)
 I'd like to download/parse for each version of each debian package which
 other package versions it depends on. 
 
 Do you think this information available in managable formats?

In addition to the information Joachim already gave, let me specifically point
you at dose3. It is a framework for working with dependencies and allows you to
parse Packages.bz2 and Sources.bz2 files, create all kinds of dependency graphs
and analyze them and includes a solver for package relationships.

 Have you seen similar work before?

Joachim was pointing you at edos. There exists the tool edos-debcheck (or
edos-distcheck as a more general tool) in the main archive. But instead you
might want to look at the dose3 tools which supersede the edos tools. More
specifically you want to look at the binary packages built from the source
package dose3. The dose-extra binary package contains a tool called ceve which
allows you to build many different kinds of dependency graphs from a
Packages.bz2 file. Maybe this gives you the information you need.

Contact me if you have any trouble.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130823094312.4755.71787@hoothoot



Re: asking for advice: all dependencies incl. version numbers

2013-08-27 Thread Johannes Schauer
Hi,

Quoting FARKAS, Illes (2013-08-27 10:17:47)
 According to the developer info page of the package (http://
 packages.qa.debian.org/0/0ad.html) there have been also previous versions of
 the package 0ad, for example, versions 0.0.12 and 0.0.11. I would be
 curious to know too the list of package versions that 0ad-0.0.12, 0ad-0.0.11,
 etc depend on.

You can find Packages.bz2 files from Debian all the way back to 2005 at
http://snapshot.debian.org by downloading a sample of these (say, every few
days), you can possibly get enough data for older versions of every package
maintained in Debian since then.

Unfortunately, older versions of Packages.b2 files on snapshot.d.o contain
errors which make it impossible for dose3 to parse them. Since later in your
email you said you might want to use dose3, you might want to have a look at
this script I wrote to clean up and repair old Packages.bz2 files from
snapshot.d.o so that dose3 can parse them:

https://gitorious.org/debian-bootstrap/botch/source/examples/snapshot/download.sh

That script downloads and cleans Packages.bz2 and Sources.bz2 from
snapshot.d.org in a five day interval starting in 2005. You can find a bit more
here:

http://blog.mister-muffin.de/2012/10/12/analyzing-packages-and-sources-from-snapshot.debian.org/

The result can then be parsed with dose3.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20130827084250.5326.87466@hoothoot



Re: UTF-8 in jessie

2013-10-14 Thread Johannes Schauer
Hi,

Quoting Adam Borowski (2013-08-12 02:51:52)
 On Mon, May 06, 2013 at 02:49:57PM +0200, Andreas Beckmann wrote:
  now might be the right time to start a discussion about release goals
  for jessie.
 
 I would like to propose full UTF-8 support.  I don't mean here full
 support for all of Unicode's finer points, merely complete eradication of
 mojibake.  That is, ensuring that /m.o/ matches möo, or that ä sorts
 as equal to acombining ¨ is out of scope of this proposal.
 
 I propose the following sub-goals:
 
 1. all programs should, in their default configuration, accept UTF-8 input
and pass it through uncorrupted.  Having to manually specify encoding
is acceptable only in a programmatic interface, GUI/std{in,out,err}/
command line/plain files should work with nothing but LC_CTYPE.

as an addendum to this release goal proposal, it is maybe also worth mentioning
working multibyte character support in coreutils as a possible goal.

From http://bugs.debian.org/139861 :

$ echo -e 日\n本\nで\nは | sort -u | wc -l
3
$ echo -e 日\n本\nで\nは | sort | wc -l
4

Or having head/tail which work character base instead of byte based would be
sweet as well.

While upstream doesnt seem to support this, it seems that Fedora has a patch
for coreutils:

http://pkgs.fedoraproject.org/cgit/coreutils.git/tree/coreutils-i18n.patch?id=6e10f376996b64f538259091a524df2249b653fb;id2=HEAD

or also:

http://trac.cross-lfs.org/browser/patches/coreutils-6.12-unicode-1.patch?rev=577dd2d59133e10bd32c58844293e93af0e6f162

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20131014105058.7934.26083@hoothoot



Bootstrappable Debian - a decision is needed, patches exist

2013-10-15 Thread Johannes Schauer
Hi,

This email is a follow up on the thread started January 2013 [1]. In summary:
it seems that the ability to bootstrap Debian from scratch and the requirement
to extend the Build-Depends syntax meet general agreement.

What is yet to be decided is the concrete format for the Build-Depends syntax 
extension. The first proposals suggested a syntax which looked like

Build-Depends: foo [amd64] !stage1

Which would indicate that the build dependency foo would not apply if the
build profile called stage1 is activated. It was critisized [2] that this
syntax wastes a meta character and thus prohibits future extensions of the
Build-Depends syntax. Therefore the second proposal (finalised at debconf13)
looked like this:

Build-Depends: foo [amd64] [!profile.stage1]

The rectangular brackets are reused and a prefixed namespace is used to
indicate that stage1 is a build profile name. We hoped this would be the
final spec, given the previous discussion, but those brackets also got some
pushback [3] and thus the third version was born:

Build-Depends: foo [amd64] !profile.stage1

We wrote down the last two options in form of a spec on the Debian wiki [11].

Patches for dpkg, python-debian, apt and sbuild implementing the original
format have existed for years [4]. Patches for the new formats have existed for
some time as well [5]. They are surely not perfect but we would like to get
them into a state in which they can be integrated into dpkg. But for that we
need some feedback from the dpkg devs as well as a final decision of the Debian
community about which syntax to choose. We are writing to d-devel this time
because the thread on d-dpkg [6,7] has been dormant for a month once again.
Maybe bringing this issue to a wider audience will help make a decision on this
problem. The results from two years of GSoC [8,9] as well as the year long
efforts of others [10] cannot bear any fruit without this issue finally being
taken care of.

Thank you!

josch  wookey

[1] http://lists.debian.org/20130115181840.GA16417@hoothoot
[2] http://lists.debian.org/20726.45081.38709.233...@chiark.greenend.org.uk
[3] http://lists.debian.org/20130816121504.gb20...@gaara.hadrons.org
[4] http://people.debian.org/~wookey/bootstrap/patches/profiles/tools/
[5] http://lists.debian.org/20130917103117.2726.40546@hoothoot
[6] http://lists.debian.org/20130419194252.17205.76995@hoothoot
[7] http://lists.debian.org/debian-dpkg/2013/08/msg00019.html
[8] http://www.alkmim.eti.br/~alkmim/gitrepo/autobootstrap.git
[9] https://gitorious.org/debian-bootstrap/botch
[10] http://people.debian.org/~wookey/bootstrap
[11] https://wiki.debian.org/BuildProfileSpec


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20131015060337.7934.42627@hoothoot



Re: Bootstrappable Debian - a decision is needed, patches exist

2013-10-15 Thread Johannes Schauer
Hi,

Quoting YunQiang Su (2013-10-15 08:08:52)
 On Tue, Oct 15, 2013 at 2:03 PM, Johannes Schauer j.scha...@email.de wrote:
  What is yet to be decided is the concrete format for the Build-Depends
  syntax extension. The first proposals suggested a syntax which looked like
 
  Build-Depends: foo [amd64] !stage1
 I'd prefer Build-Depends-Stage1 if possible.
 When bootstrap, dpkg only ask for these build-depends while for normal build,
 dpkg should merge Build-Depends-Stage1 and Build-Depends.

this approach does not work because it does not allow to specify additional
dependencies for when a source package is compiled with a certain profile
activated.

The Build-Depends-Stage1 field name was used in earlier proposals with a
different meaning. Instead of making the final build dependencies the union of
Build-Depends and Build-Depends-Stage1 as you proposed, Build-Depends-Stage1
contained all dependencies necessary for the build profile stage1. When doing
a normal build, only the Build-Depends would be used. When building with the
build profile stage1 activated only the Build-Depends-Stage1 would be used.
This solves the problem I explained above which your solution has.

This Build-Depends-Stage1 format was abolished in favor of the syntax additions
explained in my last email because of the following reasons:

 - it requires variable field names to match all possible profiles
 - it requires a near duplication of the Build-Depends field which is highly
   prone to bitrot
 - it does not work with multiple profiles activated at the same time

For a full history of the development of this see

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=661538

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20131015063400.7934.32962@hoothoot



Re: Bootstrappable Debian - a decision is needed, patches exist

2013-10-20 Thread Johannes Schauer
Hi Steve,

Quoting Steve Langasek (2013-10-20 05:46:15)
 My recollection is that the abolishing of the Build-Depends-Stage1 field
 was done by the same dpkg maintainer who you say is now not giving you
 feedback.

Correct.

 It's elegant that a general-purpose syntax has been proposed, but elegance
 isn't worth anything if it doesn't result in shipping code.
 
 Being able to automatically bootstrap the Debian archive is self-evidently
 useful to the project.  The other uses proposed for profiles are all corner
 cases that should be kept far, far away from the archive.  I don't think the
 implementation of automated bootstrapping should be allowed to block on such
 pie-in-the-sky plans for profiles.
 
 My understanding is that all build-dependency loops in the archive can be
 broken with a single additional stage (stage1), so only one added profile
 and one added build-dependency field would be required.  Yes, it could
 bitrot, but it's better than not having any of the data in the source
 packages at all.

I agree with you and from my talking to wookey, he probably agrees too, that
*any* solution is fine as long as it's accepted by dpkg devs and allows us to
finally make Debian bootstrappable.

You nicely summarized the situation and I dont think I have much more to add.
Yes, falling back to the Build-Depends-Stage1 proposal (for which patches also
existed for over a year, see bug#661538) would also fully satisfy our needs for
now until something fancier is needed.

In addition, my analysis from last year showed that probably below 70 source
packages have to be modified to make everything bootstrappable. If that is the
case, then any future switch to something different might still be managable.

 And if someone really finds this inelegant and insists that we should extend
 the syntax of the Build-Depends field, let them step up and make that happen
 instead of pointing at grandiose plans they're not making any effort to
 implement.  A Build-Depends-Stage1 field requires no support from dpkg in the
 archive to implement.

I would love if that person did.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20131020064754.10620.38358@hoothoot



Re: Bits from the Release Team (Jessie freeze info)

2013-10-26 Thread Johannes Schauer
Hi,

(I was not able to find the debian-ports list on lists.debian.org (so I
subscribed via email) did I just miss it?)

Quoting Steven Chamberlain (2013-10-23 22:04:59)
 I had a play with the 'botch' tool (see description[1]) for determining build
 order when bootstrapping an architecture.

botch author here. Just stumbled upon this already a few day old email in my
inbox :)

 To start off with it determines a minimum required set of packages - you'd
 normally cross-compile those from another system.  This set (see attached
 example list for kfreebsd-amd64 wheezy) looks to me like what constitutes the
 'toolchain'.

This minimum set of packages which has to be cross compiled (because no binary
package of the target architecture exists at this point) is what we call the
minimal native build system (the name is misleading as disjunct dependencies
make different choices of this set possible).

Currently it is not possible to present a correct selection of source packages
which have to be cross compiled to produce the minimal build system. What we
currently do is to just do:

grep-dctrl -X \( -FPackage build-essential --or -FPackage debhelper --or 
-FEssential yes)

and assume that the resulting list of packages (the one you attached to your
last email) is cross compilable from nothing. This is of course not the case in
practice but a formal analysis is not possible yet. This is because multiarch
annotations are missing in some packages and because of the problem of how to
handle source packages directly depending on gcc, g++, binutils etc in the
cross compilation case. While the first one is easy to fix there doesnt exist a
solution for the second one yet. Build profiles would be able to solve the
second problem.

Until these two issues are fixed we will not be able to get an algorithmic
answer to the question of what constitutes the minimum required set of
packages.

On the other hand wookey did lots of ubuntu crossing and identified that with
just (I think it was) a dozen modified packages (reducing their build
dependencies to break cross build dependency cycles) he was able to cross build
all of these packages:

http://people.linaro.org/~wookey/buildd/raring-arm64/status-bootstrap.html

So while an automated analysis is not possible right now, it also does not seem
to be necessary to have this automated. Having the to-be-crossed selection of
packages retrieved automatically becomes more interesting as more source
packages are known to be cross-compilable including all their required
recursive build dependencies.

 The list will be different for each port, and change over time.  This example
 included freebsd-libs, freebsd-utils and kfreebsd-kernel-headers but of
 course others won't.

Thanks for trying out botch for kfreebsd :)

 AIUI those packages should be able to rebuild each of themselves without any
 other dependencies.

Should but unfortunately they are not :(

In fact, to nativel rebuild the minimal build system for amd64 (just
essential:yes + build-essential + debhelper) one needs to be able to compile
383 source packages (excluding the source packages in the minimal build system
itself).

This is as of debconf13 when I last ran those scripts. You can look at the
numbers here as well:

http://mister-muffin.de/bootstrap/stats/

These 383 source packages include ugly ones like iceweasel, nautilus, webkit,
network-manager, mysql, kde4libs which as you can imagine draw in half of what
makes a modern desktop system and thus might naively have been dismissed as
non-essential for the bootstrapping purpose at all. But of course this list
will be different between arches.

 I think doing that regularly would be a good health check for a port's
 toolchain.  Probably these packages would be the focus of the
 reproducible-builds project, at least from a security point-of-view.  Any
 differences in output of subsequent builds are of interest, and would
 potentially reveal when significant changes or bugs were introduced too.

Being able to use botch to automatically bootstrap all arches from scratch has
always been one of botch's goals. Unfortunately the build profile discussion is
holding up the implementation of this in practice but guillem promised to look
into this for dpkg 1.17.2.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20131026213931.16796.6@hoothoot



on bootstrapping ports (was: Re: Bits from the Release Team (Jessie freeze info))

2013-10-27 Thread Johannes Schauer
Hi Peter,

Quoting peter green (2013-10-27 01:11:24)
 Johannes Schauer wrote:
  Until these two issues are fixed we will not be able to get an algorithmic
  answer to the question of what constitutes the minimum required set of
  packages.

 There is also the complication of what I will call non-key self 
 building compilers. fpc is an example

Yes, this is also an issue and the two issues I mentioned are only a necessity
but not a sufficiency for the whole bootstrap problem. In practice, it is of
course not only needed to know that one must be able to build src:fpc without
all the fp-* binaries (that's what my algorithms do right now) but also that
this is really possible in practice. Since I only work with the algorithmic
side of things I often forget to mention that one naturally needs more than
correct meta data (dependency relationships) to make everything work :)

You will find your example (fpc) in the section of Type 1 Self-Cycles on

http://mister-muffin.de/bootstrap/stats/

together with other compilers like for haskell, sml or lisp.

We call Type 1 Self-Cycles those where the source package directly build
depends on a binary package it builds. Those are the most obvious self cycles
and they are mostly made up of the non-key self building compilers as you
call them.

 These are not needed to bootstrap the core of debian but if one wants to
 bootstrap all of debian they will need to be built.

Indeed, none of the Type 1 Self-Cycles are needed to bootstrap the core of
Debian. Unfortunately though, most of the Type 2 Self-Cycles are. You will find
many surprising (at least to me) examples in the section of Type 2
Self-Cycles under the above link.

We call Type 2 Self-Cycles those where the source package indirectly and
strongly [1] build depends on a binary package it builds. They are hard to find
because the only tool which is able to compute strong dependencies (afaik) is
dose3 which is used by botch to do the required computations.

[1] www.mancoosi.org/papers/esem-2009.pdf

Surely every maintainer of source packages involved in a Type 1 Self-Cycle
knows about this issue. Because Type 2 Self-Cycles are non-obvious we could in
the future (once build profiles are available) embed this information in the
pts for the relevant packages. On the other hand, there only exist a small
number (26 for amd64) source packages involved in Type 2 Self-Cycles so it
might be enough to just post priority wishlist bug reports for each of them.

 Since the only way to build them is with themselves they cannot be
 bootstrapped natively even with the help of build profiles. So the only way
 to bootstrap them is to either cross-build them or start with a binary from
 upstream.

And even compilers which allow some way of bootstrapping them, do not have this
process automated (ghc [2], mlton [3]). This is fine under the assumption that
initial porting is rarely done and once it's done does not have to be repeated.
But it does not allow continuous testing of bootstrappability of the whole
archive.

[2] http://ghc.haskell.org/trac/ghc/wiki/Building/Porting
[3] http://mlton.org/PortingMLton

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20131027083354.16796.89806@hoothoot



Re: on bootstrapping ports (was: Re: Bits from the Release Team (Jessie freeze info))

2013-10-27 Thread Johannes Schauer
Hi Daniel,

Quoting Daniel Schepler (2013-10-27 16:06:43)
 Johannes Schauer wrote:
  Indeed, none of the Type 1 Self-Cycles are needed to bootstrap the core of
  Debian. Unfortunately though, most of the Type 2 Self-Cycles are. You will 
 find
  many surprising (at least to me) examples in the section of Type 2
  Self-Cycles under the above link.
 
 On the other hand, if you count Build-Depends-Indep and Architecture: all 
 packages as part of what you want to bootstrap, then gnat-4.6 does get pulled 
 in...
 
 gzip Build-Depends-Indep: mingw-w64
 mingw-w64 Build-Depends: gcc-mingw-w64-{i686,x86_64}
 gcc-mingw-w64 Build-Depends: gnat-4.6
 
 (And also, you have the issue that gcc-4.8 Build-Depends on libantlr-java and 
 libecj-java, whose builds require either gcj-4.8 from the same source 
 package, 
 or openjdk-7-jdk which also Build-Depends on ecj.)
 
 I realize that these sorts of issues aren't as important for the practical 
 problem of bootstrapping a new port; but ideally, from a philosophical point 
 of view we should be able to bootstrap all our packages.  (To be honest, the 
 Java packages are such a tangled mess that I've given up on trying to 
 bootstrap that part of the archive for now -- and many of those do get pulled 
 into the minimal set of ca. 1473 source packages I get with my criteria.)

you can easily use botch for an analysis of dependency cycles under your
conditions as well. Botch is a collection of tools doing some mangling with
sets of binary and source package metadata and creating and analyzing a graph
build from them. By calling the involved tools a bit differently than it is
done in the example shell script (which is to demonstrate the practical
bootstrap scenario and thus drops B-D-I and arch:all) you can also analyze the
situation you are talking about.

More specifically, you want to change how the create_graph binary is called.
The --available option expects a filename of a file containing the list of
packages which is expected to be available in the bootstrapping sense [1].
This file is currently compiled containing all arch:all and all cross compiled
binary packages. You are free to not add any arch:all packages or only some to
that list.

Secondly, per default B-D-I dependencies are ignored but you can pass the
--keep-indep argument to the create_graph binary to let them be considered
nevertheless.

cheers, josch

[1] https://gitorious.org/debian-bootstrap/pages/Terminology#Availability


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20131027152758.16796.78747@hoothoot



announcing bootstrap.debian.net

2013-11-05 Thread Johannes Schauer
Hi,

I cross posted the following message on my blog:

http://blog.mister-muffin.de/2013/11/05/announcing-bootstrap.debian.net/

While [botch][1] produces loads of valuable data to help maintainers modifying
the right source packages with build profiles and thus make Debian
bootstrappable, it has so far failed at producing this data in a format which
is:

 - human readable (nobody wants to manually go through 12 MB of JSON data)
 - generated automatically periodically and published somewhere (nobody wants
   to run botch on his own machine or update periodically update the [TODO wiki 
   page][2])
 - available on a per-source-package-basis (no maintainer wants to know about
   the 500 source packages he does NOT maintain)

While human readability is probably still lacking (it's hard to write in a
manner understandable by everybody about a complicated topic you are very
familiar with), the bootstrapping results are now generated automatically (on a 
daily basis) and published in a per-source-package-basis as well. Thus let me
introduce to you:

[bootstrap.debian.net][3]

Paul Wise encouraged me to set this up and also donated the debian.net CNAME to 
my server. Thanks a lot! The data is generated daily from the midnight
packages/sources records of [snapshot.debian.org][4] (I hope it's okay to grab
the data from there on a daily basis). The resulting data can be viewed in HTML 
format (with some javascript for to allow table sorting and paging in case you
use javascript) per architecture ([here][10] for amd64). In addition it also
produces HTML pages per source package for all source packages which are
involved in a dependency cycle in any architecture (for example [src:avahi][11] 
or [src:python2.7][12]). Currently there are 518 source packages involved in a
dependency cycle. While this number seems high, remember that estimations by
calculating a feedback arc set suggest that only 50-60 of these source packages 
have to be modified with build profiles to make the whole graph acyclic.

For now it is funny to see that the main architectures do not bootstrap (since
July, for different reasons) while less popular ones like ia64 and s390x
bootstrap right now without problems (at least in theory). According to the
logs (also accessible at above link, [here][13] for amd64) this is because
gcc-4.6 currently fails compiling due to a build-conflict (this has been
reported in [bug#724865][5]).  Once this bug is fixed, all arches should be
bootstrappable again. Let me remind you here that the whole analysis is done on 
the dependency relationships only (not a single source package is actually
compiled at any point) and compilation might fail for many other reasons in
practice.

It has been the idea of Paul Wise to integrate this data into the pts so that
maintainers of affected source packages can react to the heuristics suggested
by botch. For this purpose, the website also publishes the raw JSON data from
which the HTML pages are generated ([here][14] for amd64). The bugreport
against the bts can be found in [bug#728298][6].

I'm sure that a couple of things regarding understandability of the results are 
not yet sufficiently explained or outright missing. If you see any such
instance, please drop me a mail, suggesting what to change in the textual
description or presentation of the results.

I also created the following two wiki pages to give an overview of the utilized 
terminology:

 - [Explaining basic terminology][7]
 - [Explaining used heuristics][8]

Feel also free to tell me if anything in these pages is unclear.

Direct patches against the [python code][9] producing the HTML from the raw
JSON data are also always welcome.

cheers, josch

[1]: https://gitorious.org/debian-bootstrap/botch
[2]: https://wiki.debian.org/DebianBootstrap/TODO
[3]: http://bootstrap.debian.net
[4]: http://snapshot.debian.org
[5]: http://bugs.debian.org/724865
[6]: http://bugs.debian.org/728298
[7]: https://gitorious.org/debian-bootstrap/pages/Terminology
[8]: https://gitorious.org/debian-bootstrap/pages/Heuristics
[9]: https://gitorious.org/debian-bootstrap/bootstrap_debian_net
[10]: http://bootstrap.debian.net/amd64/
[11]: http://bootstrap.debian.net/source/avahi.html
[12]: http://bootstrap.debian.net/source/python2.7.html
[13]: http://bootstrap.debian.net/amd64/log.txt
[14]: http://bootstrap.debian.net/amd64/stats.json


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20131105101147.27416.81714@hoothoot



Bug#733518: ITP: libfixbuf -- Implementation of the IPFIX protocol

2013-12-29 Thread Johannes Schauer
Package: wnpp
Severity: wishlist
Owner: Johannes Schauer j.scha...@email.de

* Package name: libfixbuf
  Version : 1.4.0
  Upstream Author : Brian Trammell
* URL : http://tools.netsa.cert.org/fixbuf/index.html
* License : LGPL2
  Programming Lang: C
  Description : Implementation of the IPFIX protocol

libfixbuf is a compliant implementation of the IPFIX Protocol, as defined in
RFC 5101. It supports the information model defined in RFC 5102, extended as
proposed by RFC 5103 to support information elements for representing biflows. 
libfixbuf supports UDP, TCP, SCTP, TLS over TCP, and Spread as transport
protocols. It also supports operation as an IPFIX File Writer or IPFIX File
Reader.


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20131229170501.7901.12008.reportbug@hoothoot



Bug#735177: ITP: fuseloop -- loopback mount using FUSE

2014-01-13 Thread Johannes Schauer
Package: wnpp
Severity: wishlist
Owner: Johannes Schauer j.scha...@email.de

* Package name: fuseloop
  Version : 1.0.1
  Upstream Author : Johny Mattsson
* URL : https://github.com/jmattsson/fuseloop
* License : BSD
  Programming Lang: C
  Description : loopback mount using FUSE

Allows one to map parts of one file at a specific offset and with a specific
size to another file by using Filesystem in Userspace (FUSE). This allows one
to work around shortcomings of mke2fs or fuse-ext2 which allow to work on
regular files but do not allow to specify an offset or size that they should
work on. With fuseloop it is no longer necessary to create multiple files and
concatenate them together to create a full disk image (including a valid
partition table) in user space without superuser privileges.


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20140113142745.4166.82712.reportbug@hoothoot



Bug#735884: ITP: ocp-indent -- OCaml indentation tool for emacs and vim

2014-01-18 Thread Johannes Schauer
Package: wnpp
Severity: wishlist
Owner: Johannes Schauer j.scha...@email.de

* Package name: ocp-indent
  Version : 1.4.1
  Upstream Author : Thomas Gazagnaire, Fabrice Le Fessant
* URL : http://www.typerex.org/ocp-indent.html
* License : LGPL-3 with OCaml linking exception
  Programming Lang: OCaml
  Description : OCaml indentation tool for emacs and vim

ocp-indent is a command-line tool that allows one to indent a whole OCaml
source code file (or parts of it) either to standard output or in-place.
A configuration file allows user defaults as well as per-project parameters.
The ratio of correctly indented lines is comparable with emacs tuareg mode
while being an order of magnitude faster.


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20140118104121.2014.83206.reportbug@hoothoot



Bug#740087: ITP: python-efl -- Python bindings for the Enlightenment Foundation Libraries

2014-02-25 Thread Johannes Schauer
Package: wnpp
Severity: wishlist
Owner: Johannes Schauer j.scha...@email.de

* Package name: python-efl
  Version : 1.8.1
  Upstream Author : Gustavo Sverzut Barbieri barbi...@gmail.com and others
* URL : http://www.enlightenment.org
* License : LGPL-3
  Programming Lang: Python, Cython
  Description : Python bindings for the Enlightenment Foundation Libraries

This package provides Python bindings for the Enlightenment
Foundation Libraries. Provides bindings for evas, ecore
and edje. Support for elementary and emotion is disabled.


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140225162613.15711.10195.reportbug@hoothoot



Bug#741640: ITP: vcmi -- Free implementation of the Heroes of Might and Magic 3 game engine

2014-03-14 Thread Johannes Schauer
Package: wnpp
Severity: wishlist
Owner: Johannes Schauer j.scha...@email.de

* Package name: vcmi
  Version : 0.95
  Upstream Author : Micha³ Urbañczyk aka Tow imp...@gmail.com
Ivan Savenko saven.i...@gmail.com
Tom Zielinski aka Warmonger warmon...@vp.pl
AVS
Benjamin Gentner aka beegee
* URL : http://forum.vcmi.eu/portal.php
* License : GPL2.0+
  Programming Lang: C++
  Description : Free implementation of the Heroes of Might and Magic 3 game 
engine

VCMI is a free implementation of the Heroes of Might and Magic 3 game
engine as well as a platform for mods. VCMI is a turn-based strategy
game where the player controls a number of heroes commanding an army of
creatures. It extends the original capabilities of the game by
supporting maps of any size, greater display resolutions.

Since the game requires the graphics, videos and music of the original
game, can only go into contrib.


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140314190002.12745.94908.reportbug@hoothoot



Bug#742075: ITP: python-img2pdf -- Lossless conversion of JPEG, JPEG2000 and other raster graphic formats to PDF

2014-03-18 Thread Johannes Schauer
Package: wnpp
Severity: wishlist
Owner: Johannes Schauer j.scha...@email.de

* Package name: python-img2pdf
  Version : 0.1.0
  Upstream Author : Johannes Schauer j.scha...@email.de
* URL : https://github.com/josch/img2pdf
* License : GPL3+
  Programming Lang: Python
  Description : Lossless conversion of JPEG, JPEG2000 and other raster 
graphic formats to PDF

This tool is able to embed JPEG or JPEG2000 files into a PDF container without
re-encoding them. Files of other formats will be stored using the lossless
Flate/zlib encoding. In addition to JPEG and JPEG 2000, all formats supported
by the Python Imaging Library are supported as input.

There seems to be no tool (correct me if I'm wrong) which can embed an
image into a pdf without either loosing information due to JPEG
re-encoding or blowing up the filesize through Flate/zlib encoding. It
would thus be a useful tool to have in Debian.


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140318220600.8370.15162.reportbug@hoothoot



arch:all cross-build-deps in ubuntu (was: :any syntax in package names in jessie/sid Packages)

2014-04-20 Thread Johannes Schauer
Hi,

Quoting Wookey (2014-04-20 16:24:46)
 So far as I know that spec doc is correct for Debian and Ubuntu. The only
 significant difference is that Ubuntu has patched apt to assume that :all
 packages are M-A:foreign by default. Debian has not, and requires all
 packages to be so marked explicitly.

I think this bug is related:

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=666772

And as far as I understood the patch, this only makes arch:all packages used in
build dependencies m-a:foreign and not arch:all packages used as binary
dependency of other binary packages. Is this correct?

We would also like to have this situation clarified for a correct Ubuntu
specific implementation of this in dose3.

Thanks!

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140420144601.21059.95258@hoothoot



Advice for how to make new things policy (was: ':any' syntax in package names in jessie/sid Packages)

2014-04-20 Thread Johannes Schauer
Hi all,

Quoting Stuart Prescott (2014-04-20 16:58:21)
  As xnox says there is still some pending changes around the interpreter
  problem, as described here:
  https://wiki.debian.org/HelmutGrohne/MultiarchSpecChanges
  
  And that debate is part of the reason this stuff hasn't been
  considered 'finalised' and thus ready for policy. But I think the core
  stuff is now well-enough used that at the very least policy should not
  be inconsistent with it.
 
 pending changes, things still to be finalised, undocumented syntax changes 
 being pushed into jessie that broke wheezy→jessie upgrades (which had to be 
 fixed in both dh_python{2,3} and also required a stable update to apt 
 [1])... this worries me. It feels like it is being done backwards.
 
 This is the exact situation where I would like to see policy lead the way 
 and be part of the process to design and codify things *before* we start 
 implementing them on 21k packages. This is a general comment, not just about 
 multi-arch -- our policy editors have a huge amount of experience in 
 developing technical policies and documentation to go with them. Making use 
 of their expertise at the design stage would be much better for the project. 
 Currently, the project seems to tend towards policy documenting current 
 practice rather than policy leading us towards better (best!) practice; this 
 culture means that improving things can be very hard because you may have to 
 become policy non-compliant in order to develop the new standard practice 
 to then seek a change in policy. (And as observed recently, this also means 
 that when given a choice between A and B, we end up choosing A, B, C and Z 
 [2].)

One thing that makes me personally like to contribute to Debian in contrast to
other distribution is how much importance is being put on the Debian policy and
how well everything is documented in it. I was very alienated when I found that
something as important (well at least from the point of view of stuff that
I'm working on) as multiarch is not documented at policy at all but just in the
Ubuntu wiki.

Now together with wookey I have been pushing the build profile syntax extension
[1] forward and while it is already integrated in a number of important tools
(dpkg, apt, debhelper, lintian) it is also not yet in policy. The only
available documentation sits at [1] and is not even finished yet because of a
missing issue I raised at [2]. I would really *love* to have build profiles in
policy but how to proceed without the spec even being finished yet?  How to
finish a spec? How to get input from enough relevant people and people who know
what they are talking about? I should at least get approval of dpkg maintainers
before I document a Build-Depends syntax extension, right?  And if a decision
is taken elsewhere, should dpkg maintainers who probably know best not have a
veto?

On top of that there is yet another thing (potentially another build-depends
syntax extension, yes I know everybody must hate me now) that I want to discuss
on dpkg-devel. And for that I want to take the way most accepted by the
project. Should I first discuss it on debian-devel even though (as it happened
with build profiles) dpkg maintainers will make the final call anyways?

I wholeheartedly agree with Stuart's email. I would love to see policy lead the
way. But as somebody who comes up with new things that might end up in policy:
how to proceed? My current approach is to write countless mails to dpkg-devel
and over time, an agreement is formed, things get implemented in dpkg and
others follow because if dpkg does it, then it's probably nothing too wanky.
But that's not the process I'd like to follow. How to turn it around? I also
fear that turning the process around produces too much bureaucracy at the
expense of finding a technically excellent solution decided by the people who
have most experience? Is it not the way of Debian as a do-ocracy to first have
the tool support decided by the people maintaining the tool and *then* the
policy after stuff works? Maybe there is a middle ground?

cheers, josch

[1] https://wiki.debian.org/BuildProfileSpec
[2] https://lists.debian.org/debian-dpkg/2014/02/msg00029.html
[3] https://wiki.debian.org/HelmutGrohne/MultiarchSpecChanges
[4] https://wiki.debian.org/Multiarch/InterpreterProposal


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140420175357.21059.78687@hoothoot



Re: ':any' syntax in package names in jessie/sid Packages

2014-04-21 Thread Johannes Schauer
Hi,

Quoting Niko Tyni (2014-04-20 23:50:56)
 I thought so too, but it doesn't seem to be the case? 
 
 For example, I can't install cmake:i386 in an amd64 trusty chroot:
 
  The following packages have unmet dependencies:
   cmake:i386 : Depends: cmake-data:i386 (= 2.8.12.2) but it is not 
 installable
 
 (cmake-data is arch:all but not multi-arch annotated.)

the patch submitted to https://bugs.debian.org/666772 only affects the arch:all
packages that satisfy cross build dependencies - not the arch:all packages
satisfying other dependencies. Try to do:

apt-get build-dep -ai386 --simulate build-essential

This will fail on Debian because of dh-python which is arch:all and m-a:none.
But it will succeed in Ubuntu.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140421065907.21059.59698@hoothoot



Bug#748102: ITP: botch -- Bootstrapping helper

2014-05-14 Thread Johannes Schauer
Package: wnpp
Severity: wishlist
Owner: Johannes Schauer j.scha...@email.de

* Package name: botch
  Version : 0.1
  Upstream Author : Johannes Schauer j.scha...@email.de
* URL : https://gitorious.org/debian-bootstrap/pages/Home
* License : LGPL3+ with OCaml linking exception
  Programming Lang: OCaml, Python, Shell
  Description : Bootstrapping helper

Botch stands for bootstrap/build ordering tool chain and allows one to create
and analyze bootstrapping dependency graphs, creates suggestions how to break
dependency cycles and generates a build order.

It includes a range of utilities to:

 - transform Packages and Sources control files
 - set operations (union, intersection, difference)
 - adding and removing specific metadata
 - only pick latest version
 - Packages to Sources
 - Sources to Packages
 - generating self contained repositories (min and max)
 - analysis of Packages and Sources control files
 - diff tool
 - multiarch changes application
 - check multi-arch:same versions
 - create graphs of different types
 - installation sets
 - strong dependency sets
 - dependency closure
 - conversion of graphs
 - buildgraph to source graph
 - graphml to dot format
 - annotation with strong dependency information
 - extract neighborhood
 - extract strongly connected components
 - collapsing strongly connected components
 - analyze graphs
 - find all cycles
 - find selfcycles
 - find amount of cycles through edges
 - find feedback arc set
 - find feedback vertex set
 - find strong articulation points and strong bridges
 - general graph info
 - generating partial order
 - graph rendering
 - graph difference
 - calculate betweenness
 - calculate port metric
 - shell scripts connecting the tools for meaningful operations
 - analyzing cross bootstrap phase
 - analyzing native bootstrap phase
 - create a transition order


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140514093940.1746.50770.reportbug@hoothoot



Re: Bug#748102: ITP: botch -- Bootstrapping helper

2014-05-14 Thread Johannes Schauer
Hi,

Quoting Joachim Breitner (2014-05-14 12:39:41)
 cool. Can this also be used in a relative ad-hoc manner to replace the
 simple script at
 http://anonscm.debian.org/gitweb/?p=pkg-haskell/tools.git;a=blob;f=order-sources.pl
   which does
 
 Usage: $0 dir / control / dsc...
 
 Each argument is expected to be a Debian source package directory; 
 the debian
 directory in a Debian source package directory the control file or 
 the .dsc
 file of a Debian source. These will be ordered by “obvious” 
 build-dependencies
 and printed out again.
 
 or does will it require stuff like local repositories to be set up
 first?

I can't speak about your specific haskell use case but in general, the problem
is that dependencies of binary packages get autogenerated during build time and
are not explicitly expressed in debian/control. Thus, a debian/control file
doesnt help to find a correct solution in all cases.

That botch can create transition orders is just a side product of the other
things it does. I verify botch's output by comparing it with the output of ben.
But ben also needs a repository as input.

The best thing both tools can do is to give you an order for the old, existing
packages and hope that your new packages depend on each other in the same way.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140514133534.24634.2374@hoothoot



Re: Bug#748102: ITP: botch -- Bootstrapping helper

2014-05-14 Thread Johannes Schauer
Hi,

Quoting Niko Tyni (2014-05-14 13:15:59)
 Heh. FWIW we've been using
 http://anonscm.debian.org/gitweb/?p=pkg-perl/scripts.git;a=blob;f=perl-5.10-transition/find-rebuild-order
 
 for transition ordering when preparing Perl transitions. That one uses
 the system apt cache. I wonder if the Python and Ruby folks have rolled
 their own ones too.

from reading the DESCRIPTION section it seems that botch is able to do the
same thing but without the drawback listed in BUGS AND LIMITATIONS. In case
you ever run into trouble with that perl script and want to evaluate other
options, feel free to contact me.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140514134502.24634.29020@hoothoot



possible MBF: automatically detecting unused build dependencies

2014-07-07 Thread Johannes Schauer
Hi,

we would like to propose an MBF with severity wishlist to drop unused build
dependencies in a number of source packages indicated by the attached two text
files and the dd-list output.

TLDR; We searched a selection of source packages relevant to bootstrapping for
build dependencies which are never used during the package build. Fewer build
dependencies help making bootstrapping easier so we want to submit bugs for the
results we generated. The results were generated automatically by a script
using fatrace(1) and fake packages. It follows the MBF template email and a
detailed explanation of our procedures. Attached is the list of the unused
build dependencies we found and the output of dd-list. We would like you to
review the list, drop unused build dependencies or report errors.

MBF template email:

--%---
Subject: Please consider removing the build dependencies on $foo, $bar and $baz
Severity: wishlist
Usertag: unusedbd
User: bootst...@lists.debian.org

Dear Maintainer,

the build dependencies $foo, $bar and $baz of this source package do not seem
to be needed. Neither are any of their files accessed during the build nor are
their dependencies on other binary packages required. Please consider dropping
those build dependencies to make bootstrapping Debian easier.

You can find more detail about the procedures that were used to find this
problem in the MBF announcement on debian-devel: $email
--%---

Long version:

Our bootstrappable Debian GSoC student Peter Pentchev found a number of
source packages that did not make use of some of their build dependencies [1].
We thought we could automate this process so we set up a simple sbuild based
package builder. The machinery works in two passes. In the first pass, all
source packages are built normally but with fatrace(1) active. From the fatrace
output we determine all build dependencies of which no files were used during
the build.  In the second pass we go through all source packages for which
candidate droppable build dependencies where found with fatrace and test
whether those build dependencies are really droppable by replacing them with an
empty equivs package without dependencies one by one.

The first pass makes sure that the files of a specific build dependency are not
needed. This is to make sure not to produce false positives of build
dependencies which, if not installed on the build system, do not result in a
build failure but instead just in a reduction of functionality of the output
binary. The second pass makes sure that also the dependencies of a specific
build dependency are not needed. This makes sure to not produce false positives
of meta or virtual packages.

We executed the build on the amd64 snapshot 20140601T00Z of Debian Sid. A
selection of 549 source was made from the source packages that are involved in
the central strongly connected component of the bootstrapping dependency graph.
We needed to patch fatrace to be able to handle files larger than 2 GB (bug
#722901).

We ran the whole process with `sbuild --arch-all` and then again with `sbuild
--no-arch-all`. This way we can find build dependencies which can be dropped
from full package builds as well as those which can be moved to
Build-Depends-Indep. We did not use the results to also check for build
dependencies that can be removed from Build-Depends-Indep.

The source code to run the whole machinery can be found at [2].

Executing everything took two weeks and over 2000 package builds. We found 277
build dependencies could be dropped from the 549 tested source packages,
affecting 158 source packages.

We checked the impact on the bootstrap dependency graph. If all the found build
dependencies were really droppable, then the minimum (strong) dependency graph
would shrink from containing 483 source packages to 447 source packages.  More
importantly, the solution to the feedback arc set problem for making it acyclic
would shrink from 74 to 56 source packages. Thus, the generated results are
very relevant for making solving the bootstrap problem easier.

You can find the results per source package in the attachment together with the
dd-list output. The file drop-from-bd.txt lists the build dependencies that can
be dropped from Build-Depends while move-to-bdi lists the build dependencies
that can be moved from Build-Depends to Build-Depends-Indep.

Can you spot obvious mistakes in the results or in the procedure used to
generate them?

cheers, josch

[1] #749616 #749972 #751702 #751897 #752938
[2] https://github.com/josch/findunusedbd
Adam C. Powell, IV hazel...@debian.org
   mpi-defaults (U)

Adam Conrad adcon...@0c3.net
   cyrus-sasl2 (U)
   eglibc (U)
   freetds (U)

Agustin Martin Domingo agmar...@debian.org
   linuxdoc-tools (U)

Alan Woodland awoodl...@debian.org
   blcr

Alessandro Ghedini gh...@debian.org
   curl
   valgrind


Re: possible MBF: automatically detecting unused build dependencies

2014-07-07 Thread Johannes Schauer
Hi,

sorry I attached two wrong files containing the many false positives already
noticed by some of the replies. Here the actual results.

Sorry.

cheers, josch
== apache2_2.4.9-1.arch-all.unusedbd.real ==
libcap-dev:amd64=1:2.22-1.2

== apparmor_2.8.0-5.arch-all.unusedbd.real ==
dejagnu=1.5-3
texlive-latex-recommended=2014.20140528-3

== apr-util_1.5.3-2.arch-all.unusedbd.real ==
libpcre3-dev:amd64=1:8.31-5

== apt_1.0.3.arch-all.unusedbd.real ==
automake=1:1.14.1-3

== at-spi2-atk_2.10.2-3.arch-all.unusedbd.real ==
libglib2.0-bin=2.40.0-3

== avahi_0.6.31-4.arch-all.unusedbd.real ==
python-all-dev=2.7.6-2

== bc_1.06.95-8.arch-all.unusedbd.real ==
bison=2:3.0.2.dfsg-2
libreadline-dev:amd64=6.3-6

== bison_3.0.2.dfsg-2.arch-all.unusedbd.real ==
autotools-dev=20140510.1

== blcr_0.8.5-2.1.arch-all.unusedbd.real ==
autoconf=2.69-6
automake=1:1.14.1-3
autotools-dev=20140510.1
libtool=2.4.2-1.7

== bluez_4.101-4.1.arch-all.unusedbd.real ==
bison=2:3.0.2.dfsg-2
gstreamer-tools=0.10.36-1.2

== boost-defaults_1.55.0.2.arch-all.unusedbd.real ==
libboost1.55-dev:amd64=1.55.0+dfsg-1

== ceph_0.80.1-1.arch-all.unusedbd.real ==
libboost-dev:amd64=1.55.0.2
libboost-system-dev:amd64=1.55.0.2
python-all=2.7.6-2
uuid-runtime=2.20.1-5.7

== chicken_4.8.0.5-1.arch-all.unusedbd.real ==
texinfo=5.2.0.dfsg.1-3

== cloog_0.18.2-1.arch-all.unusedbd.real ==
texinfo=5.2.0.dfsg.1-3

== cpio_2.11+dfsg-2.arch-all.unusedbd.real ==
texinfo=5.2.0.dfsg.1-3

== cunit_2.1-2.dfsg-1.arch-all.unusedbd.real ==
quilt=0.63-2

== cups-filters_1.0.53-1.arch-all.unusedbd.real ==
sharutils=1:4.14-2

== curl_7.37.0-1.arch-all.unusedbd.real ==
ca-certificates=20140325
openssh-server=1:6.6p1-5
python=2.7.6-2

== db5.3_5.3.28-3.arch-all.unusedbd.real ==
gcj-native-helper=2:1.7-52

== dbus-python_1.2.0-2.arch-all.unusedbd.real ==
xmlto=0.0.25-2

== dbus_1.8.2-1.arch-all.unusedbd.real ==
python=2.7.6-2

== devscripts_2.14.4.arch-all.unusedbd.real ==
libjson-perl=2.61-1
libterm-size-perl=0.207-1+b1

== doxygen_1.8.7-1.arch-all.unusedbd.real ==
texlive-extra-utils=2014.20140528-2

== e2fsprogs_1.42.10-1.arch-all.unusedbd.real ==
m4=1.4.17-4

== ecj_3.9.0-2.arch-all.unusedbd.real ==
python=2.7.6-2

== eglibc_2.18-7.arch-all.unusedbd.real ==
autoconf=2.69-6
quilt=0.63-2

== exiv2_0.23-1.arch-all.unusedbd.real ==
autotools-dev=20140510.1
dh-linktree=0.4
libjs-jquery=1.7.2+dfsg-3

== fastjar_0.98-5.arch-all.unusedbd.real ==
texinfo=5.2.0.dfsg.1-3

== fftw3_3.3.4-1.arch-all.unusedbd.real ==
ghostscript=9.05~dfsg-8.1
transfig=1:3.2.5.e-3

== findlib_1.4.1-1.arch-all.unusedbd.real ==
gawk=1:4.1.1+dfsg-1

== flite_1.4-release-8.arch-all.unusedbd.real ==
ghostscript=9.05~dfsg-8.1

== fontconfig_2.11.0-5.arch-all.unusedbd.real ==
gperf=3.0.4-1

== freeglut_2.8.1-2.arch-all.unusedbd.real ==
libxt-dev:amd64=1:1.1.4-1

== freetds_0.91-6.arch-all.unusedbd.real ==
libreadline-dev:amd64=6.3-6

== gdb_7.6.2-1.1.arch-all.unusedbd.real ==
autoconf=2.69-6
flex=2.5.39-7
gcj-jdk=4:4.9.0-1
gobjc=4:4.8.2-4
libtool=2.4.2-1.7
procps=1:3.3.9-5

== geoclue-2.0_2.1.8-1.arch-all.unusedbd.real ==
geoip-database=20140509-1

== geoip_1.6.0-1.arch-all.unusedbd.real ==
zlib1g-dev:amd64=1:1.2.8.dfsg-1

== ghostscript_9.05~dfsg-8.1.arch-all.unusedbd.real ==
freeglut3-dev:amd64=2.8.1-2

== gnome-keyring_3.12.0-2.arch-all.unusedbd.real ==
ca-certificates=20140325
docbook-xml=4.5-7.2
libglib2.0-doc=2.40.0-3
libtasn1-3-dev=3.6-1

== gnome-vfs_2.24.4-4.arch-all.unusedbd.real ==
libattr1-dev:amd64=1:2.4.47-1

== gpac_0.5.0+svn5194~dfsg1-3.arch-all.unusedbd.real ==
libxmlrpc-c3-dev=1.16.33-3.2

== gpm_1.20.4-6.1.arch-all.unusedbd.real ==
texi2html=1.82+dfsg1-3
texlive-base=2014.20140528-3

== graphviz_2.26.3-17.arch-all.unusedbd.real ==
pdksh=49-2

== gsl_1.16+dfsg-1.arch-all.unusedbd.real ==
libtool=2.4.2-1.7

== gst-plugins-base0.10_0.10.36-1.1.arch-all.unusedbd.real ==
gir1.2-freedesktop=1.40.0-2
gir1.2-glib-2.0=1.40.0-2

== gst-plugins-base1.0_1.2.4-1.arch-all.unusedbd.real ==
gir1.2-freedesktop=1.40.0-2

== gstreamer1.0_1.2.4-1.arch-all.unusedbd.real ==
gir1.2-freedesktop=1.40.0-2
libgmp3-dev=2:6.0.0+dfsg-4

== gtest_1.7.0-3.arch-all.unusedbd.real ==
python=2.7.6-2

== gtk+2.0_2.24.23-1.arch-all.unusedbd.real ==
libatk1.0-doc=2.12.0-1
libcairo2-doc=1.12.16-2
libglib2.0-doc=2.40.0-3
libpango1.0-doc=1.36.3-1

== gtk+3.0_3.12.2-1.arch-all.unusedbd.real ==
gsettings-desktop-schemas=3.8.2-2

== gtkglext_1.2.0-3.1.arch-all.unusedbd.real ==
autotools-dev=20140510.1

== heimdal_1.6~rc2+dfsg-6.arch-all.unusedbd.real ==
libperl4-corelibs-perl=0.003-1

== hunspell_1.3.2-7.arch-all.unusedbd.real ==
libreadline-dev:amd64=6.3-6

== hwloc_1.9-3.arch-all.unusedbd.real ==
autotools-dev=20140510.1
doxygen-latex=1.8.7-1
help2man=1.45.1
transfig=1:3.2.5.e-3

== ijs_0.35-10.arch-all.unusedbd.real ==
docbook-utils=0.6.14-3
docbook=4.5-5.1
ghostscript=9.05~dfsg-8.1

== klibc_2.0.3-1.arch-all.unusedbd.real ==
bison=2:3.0.2.dfsg-2
m4=1.4.17-4

== lcms_1.19.dfsg1-1.3.arch-all.unusedbd.real ==

Re: possible MBF: automatically detecting unused build dependencies

2014-07-07 Thread Johannes Schauer
Hi,

Quoting Julian Taylor (2014-07-07 14:14:20)
 There seem to be a bunch of false positives for virtual/metapackages:
 
 == python-numpy_1.8.1-1.arch-all.unusedbd ==
 gfortran=4:4.8.2-4
 python-all-dbg=2.7.6-2
 python-all-dev=2.7.6-2
 python3-all-dbg=3.4.1~rc1-1
 python3-all-dev=3.4.1~rc1-1
 
 the -all packages are basically empty packages pulling in all python
 versions supported, those packages are definitely used during the
 build.
 Removing them during an arch-any build should fail the build.  does sbuild
 --arch-all only build the indep part?

Sorry, I attached the wrong files in my first email. I posted a follow up with
the correct results which correctly do not contain the empty packages anymore.

 If so that might explain why your pass2 did not remove these, but so far I
 know we have no way to declare this state in our control, we only have
 Build-Depends and Build-Depends-Indep, no Build-Depends-Arch.

Was Build-Depends-Arch not added with #629480?

 Similar fftw3:
 == fftw3_3.3.4-1.arch-all.unusedbd ==
 gfortran=4:4.8.2-4
 ghostscript=9.05~dfsg-8.1
 mpi-default-dev=1.0.2+nmu1
 transfig=1:3.2.5.e-3
 
 mpi-default-dev is not used directly but its dependencies are required
 for the fully featured arch any build.

Same story as above. Sorry for the confusion :(

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140707122328.14505.92338@hoothoot



Re: possible MBF: automatically detecting unused build dependencies

2014-07-07 Thread Johannes Schauer
Hi,

Quoting Henrique de Moraes Holschuh (2014-07-07 14:07:26)
 Please don't assume that the unused build dependency is always where the
 defect is.  Rather, the MBF text should account for the possibility that the
 unused build-dependency should have been used in the first place, but
 something is broken in the build and it is being left unused.

you are correct, this should be mentioned. Here the updated text:

--%---
Dear Maintainer,

the build dependencies $foo, $bar and $baz of this source package do not seem
to be needed. Neither are any of their files accessed during the build nor are
their dependencies on other binary packages required.

This can either mean that the build dependency is superfluous and should be
removed to make bootstrapping easier or it indicates a bug where a package
should be used but is in fact not. Please remove the build dependency from the
Build-Depends in the former case or fix the build procedure in the latter.

You can find more detail about the procedures that were used to find this
problem in the MBF announcement on debian-devel: $email

--%---

thank you!

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140707123210.14505.41481@hoothoot



Re: possible MBF: automatically detecting unused build dependencies

2014-07-07 Thread Johannes Schauer
and the updated dd-list

Sorry for not having attached the right files in my initial email :(

cheres, josch
Adam C. Powell, IV hazel...@debian.org
   mpi-defaults (U)

Adam Conrad adcon...@0c3.net
   eglibc (U)
   freetds (U)

Alan Woodland awoodl...@debian.org
   blcr

Alessandro Ghedini gh...@debian.org
   curl
   valgrind

Alessio Treglia ales...@debian.org
   gpac (U)

Alexander Wirt formo...@debian.org
   rrdtool (U)

Andreas Barth a...@not.so.argh.org
   netpbm-free

Andreas Henriksson andr...@fatal.se
   gnome-keyring (U)
   gtk+3.0 (U)
   libarchive (U)
   libgnome-keyring (U)
   libsecret (U)
   libsoup2.4 (U)

Andreas Metzler ametz...@debian.org
   libtasn1-6 (U)

Andreas Rottmann ro...@debian.org
   libglade2

Andres Mejia ame...@debian.org
   gpac (U)
   libarchive (U)

Andrew Moise ch...@demiurgestudios.com
   open-iscsi (U)

Anibal Monsalve Salazar ani...@debian.org
   cpio
   libidn (U)
   libmnl
   xfsprogs (U)

Anton Gladky gl...@debian.org
   freeglut

APT Development Team de...@lists.debian.org
   apt
   python-apt

Arnaud Fontaine ar...@debian.org
   xcb-util (U)
   xcb-util-image (U)
   xcb-util-keysyms (U)
   xcb-util-renderutil (U)
   xcb-util-wm (U)

Arno Töll a...@debian.org
   apache2 (U)

Aron Xu a...@debian.org
   libxml2 (U)
   netcat-openbsd

Atsuhito KOHDA ko...@debian.org
   lynx-cur

Aurelien Jarno aure...@debian.org
   eglibc (U)
   libusb
   libusb-1.0
   qemu (U)

Bart Martens ba...@debian.org
   gtkglext

Bastian Blank wa...@debian.org
   parted (U)
   redhat-cluster (U)
   xen (U)

Bastien ROUCARIÈS roucaries.bastien+deb...@gmail.com
   ghostscript (U)

Benjamin Drung bdr...@debian.org
   devscripts (U)

Benjamin Kaduk ka...@mit.edu
   krb5 (U)

Bernd Zeimetz b...@debian.org
   rrdtool (U)

Brian May b...@debian.org
   heimdal

Ceph Maintainers ceph-maintain...@lists.ceph.com
   ceph

Chris Halls ha...@debian.org
   hunspell (U)

Christian Perrier bubu...@debian.org
   apt (U)

Christoph Martin christoph.mar...@uni-mainz.de
   openssl (U)

Chuan-kai Lin ck...@debian.org
   bison

Clint Adams cl...@debian.org
   eglibc (U)

Colin Watson cjwat...@debian.org
   parted (U)

Craig Andrews candr...@integralblue.com
   geoclue-2.0 (U)

Cyril Brulebois k...@debian.org
   libxkbcommon (U)
   xfonts-utils (U)

Damien Raude-Morvan draz...@debian.org
   openjdk-7 (U)

Daniel Leidert (dale) daniel.leid...@wgdd.de
   libxml-parser-perl (U)
   xmlto (U)

Dave Beckett daj...@debian.org
   redland

Davide Puricelli (evo) e...@debian.org
   chicken

Debian Accessibility Team debian-accessibil...@lists.debian.org
   at-spi2-atk
   flite

Debian Apache Maintainers debian-apa...@lists.debian.org
   apache2
   apr-util

Debian Berkeley DB Group pkg-db-de...@lists.alioth.debian.org
   db5.3

Debian Bluetooth Maintainers pkg-bluetooth-maintain...@lists.alioth.debian.org
   bluez

Debian Boost Team pkg-boost-de...@lists.alioth.debian.org
   boost-defaults

Debian GCC Maintainers debian-...@lists.debian.org
   cloog
   libffi

Debian GNOME Maintainers pkg-gnome-maintain...@lists.alioth.debian.org
   gnome-keyring (U)
   gnome-vfs (U)
   gtk+2.0
   gtk+3.0
   libglade2 (U)
   libgnome-keyring
   libsecret
   libsoup2.4
   pango1.0
   pygobject-2 (U)
   pygtk (U)

Debian GnuTLS Maintainers pkg-gnutls-ma...@lists.alioth.debian.org
   libtasn1-6

Debian HA Maintainers debian-ha-maintain...@lists.alioth.debian.org
   redhat-cluster

Debian iSCSI Maintainers pkg-iscsi-maintain...@lists.alioth.debian.org
   open-iscsi

Debian Java Maintainers pkg-java-maintain...@lists.alioth.debian.org
   ecj
   zookeeper

Debian KDE Extras Team pkg-kde-ext...@lists.alioth.debian.org
   exiv2

Debian Libarchive Maintainers ah-libarch...@debian.org
   libarchive

Debian Libidn Team help-lib...@gnu.org
   libidn

Debian LibreOffice Maintainers debian-openoff...@lists.debian.org
   hunspell

Debian Multimedia Maintainers 
pkg-multimedia-maintain...@lists.alioth.debian.org
   gpac
   x264

Debian OCaml Maintainers debian-ocaml-ma...@lists.debian.org
   findlib
   ocaml

Debian OpenLDAP Maintainers pkg-openldap-de...@lists.alioth.debian.org
   openldap

Debian OpenSSL Team pkg-openssl-de...@lists.alioth.debian.org
   openssl

Debian Perl Group pkg-perl-maintain...@lists.alioth.debian.org
   libxml-parser-perl

Debian PHP Maintainers pkg-php-ma...@lists.alioth.debian.org
   php5

Debian Printing Team debian-print...@lists.debian.org
   cups-filters
   ghostscript
   ijs

Debian Python Modules Team python-modules-t...@lists.alioth.debian.org
   markupsafe (U)
   python-numpy

Debian QA Group packa...@qa.debian.org
   graphviz
   readline5

Debian QEMU Team pkg-qemu-de...@lists.alioth.debian.org
   qemu

Debian Qt/KDE Maintainers debian-qt-...@lists.debian.org
   qca2
   qt4-x11
   qtbase-opensource-src
   qtwebkit

Debian RRDtool Team rrdt...@ml.snow-crash.org
   rrdtool

Debian Samba Maintainers pkg-samba-ma...@lists.alioth.debian.org
   tdb

Debian Science Team debian-science-maintain...@lists.alioth.debian.org
   fftw3

Re: possible MBF: automatically detecting unused build dependencies

2014-07-07 Thread Johannes Schauer
Hi,

Quoting Jérémy Lal (2014-07-07 14:12:19)
 Consider also the case when arch:all package require a build dependency on a
 package that only builds on some archs, to prevent the arch:all package being
 available on archs where its dependencies are not.  nodejs and node-*
 packages are such an example.

could you clarify this case? An arch:all package cannot require a build
dependency because an arch:all package is a binary package. I can also not find
any nodejs packages in the lists I posted. In fact, nodejs package have not yet
been a problem with respect to bootstrapping - probably because they are mostly
arch:all?

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140707133254.14505.99230@hoothoot



Re: possible MBF: automatically detecting unused build dependencies

2014-07-07 Thread Johannes Schauer
Hi,

Quoting Steve Langasek (2014-07-07 18:36:50)
 There seem to still be some false positives here.  pam is on the list because
 of a build-dependency on libdb-dev, freetds and unixodbc are there because of
 a build-dependency on libreadline-dev.  Both of these are metapackages that
 pull in version-specific -dev packages.  So something seems to be wrong with
 the detection of empty packages yet?

Empty packages are not detected. The first phase will find empty packages
because they do not contain any files and thus they are detected as build
dependencies of which no files were used. Since empty packages are mostly meta
packages and we do not want to include them, we replace them by a fake equivs
package without dependencies. If the build still succeeds, that means that the
meta package is indeed not needed.

Lets find out what happens here. Steps to reproduce:

$ sudo debootstrap sid debian-sid
# the pam build needs /proc mounted
$ sudo mount -o bind /proc debian-sid/proc
$ sudo chroot debian-sid
$ echo deb-src http://ftp.us.debian.org/debian sid main  
/etc/apt/sources.list
$ apt-get update
$ apt-get install build-essential equivs
$ apt-cache show libdb-dev | grep -v ^Depends: | grep -v ^Conflicts: | 
equivs-build -
$ dpkg -i libdb-dev_5.3.0_amd64.deb
$ apt-get build-dep pam
$ dpkg -l | grep libdb
ii  libdb-dev  5.3.0amd64 Dummy package to fulfill package dependencies
ii  libdb5.3:amd64 5.3.28-5 amd64 Berkeley v5.3 Database Libraries [runtime]
$ apt-get source --build pam
[...]
$ echo $?
0

I get the same effect when replacing pam by freetds and unixodbc and libdb-dev
by libreadline-dev.

Can you point out at which step my error is?

Thanks!

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140707180506.14505.22612@hoothoot



Re: possible MBF: automatically detecting unused build dependencies

2014-07-07 Thread Johannes Schauer
Hi,

Quoting Don Armstrong (2014-07-07 20:33:37)
 On Mon, 07 Jul 2014, Johannes Schauer wrote:
  Empty packages are not detected. The first phase will find empty
  packages because they do not contain any files and thus they are
  detected as build dependencies of which no files were used. Since
  empty packages are mostly meta packages and we do not want to include
  them, we replace them by a fake equivs package without dependencies.
  If the build still succeeds, that means that the meta package is
  indeed not needed.
 
 Unfortunately, this is not necessarily the case; some builds systems
 disable optional functionality if the required build dependency is not
 present, and still let the build complete.

correct. The exact problem here is that a meta package without any actual files
depends on a package without which the build will still successfully complete.

Usually, optional build dependencies are not registered as false positives
because the first pass does a full build with all build dependencies present.
Even if a build dependency could be optional it will not register in this pass
because its files will still be used.

The problem here is that the optional build dependency is not a direct
dependency of the source package.

I cannot think of an automated way to catch dependencies of meta packages
without which the build will still succeed. This of course except if there was
an easy way to compare the build output against the original binary package.
But that's doesnt seem possible yet without reproducible builds.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140707190347.14505.76518@hoothoot



Re: possible MBF: automatically detecting unused build dependencies

2014-07-07 Thread Johannes Schauer
Hi,

Quoting Steve Langasek (2014-07-07 20:22:42)
 Ah.  No, it only means that the package build does not *fail* if the
 build-dependency is removed.  That is not the same thing as saying that the
 build-dependency is not used.

you are correct. I expanded more on this in my other reply to Don Armstrong.

 It would of course be better if packages were resilient against breakage in
 their build-dependencies, instead of misbuilding with features disabled or
 with wrong fallback code.  But this isn't easy to do in all build systems,
 and anyway this isn't something we routinely audit about our packages; we
 shouldn't regard this as a bug to be reported without a lot more discussion
 of how we're going to systematically stay on top of those issues in the
 future.

I agree that it should not be a bug if a package does not fail if a certain
build dependency is not installed.

Nevertheless, those false positives that were generated this way are still
useful to be later marked with !profile.stage1 once build profiles are
allowed in the archive because they are obviously droppable.

About systematically staying on top of those issues I do not know how to
proceed. I guess for that we would first need to know how many source packages
depend on meta packages which are not completely empty (besides /usr/share/doc)
and still silently fail and continue building with reduced features.

I did not plan to run this script more often yet. I'll probably do another run
after having added a detection for meta packages as suggested by you below.

Running it more regularly might not require any big discussion because the
problem size might be small enough that maintaining a white list would be
enough.

 For your purposes, a better method would be:
 
  - identify those build-dependencies which are empty except for
/usr/share/doc
  - for each such package, look at the contents of its direct dependencies
  - check the build against those contents

While this would often work it would still miss some meta packages which do
ship some more files than /usr/share/doc but are otherwise mostly important
because of the packages they depend on. Though I guess this would already
tremendously decrease the amount of false positive (however high their number
is) and I should implement that for the next time I recalculate this.

 For the case of pam, I would be interested in seeing the full build log to
 understand how in the world this built successfully without libdb.  That's
 definitely a packaging error on my part, because without libdb, pam_userdb.so
 should not build, which in turn *should* be treated as a build failure.  But
 I guess I'm not accounting for individual modules in the build output, since
 in general the greater risk is failing to keep this list in sync with new
 upstream modules, rather than misbuilding and losing a module from the tree.

Sorry, I already deleted my chroot :(

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140707191444.14505.34985@hoothoot



Re: possible MBF: automatically detecting unused build dependencies

2014-07-07 Thread Johannes Schauer
Hi,

Quoting Steve Langasek (2014-07-08 00:07:29)
 On Mon, Jul 07, 2014 at 09:14:44PM +0200, Johannes Schauer wrote:
  Nevertheless, those false positives that were generated this way are
  still useful to be later marked with !profile.stage1 once build profiles
  are allowed in the archive because they are obviously droppable.
 
 No, marking build-dependencies with build profiles should be driven by what
 is needed to break build-dep loops, not by what build-deps are droppable
 without further modification of the packages.  Excessive stage1 profile
 tagging will result in unnecessary extra builds during a bootstrap.

Bootstrapping should not get into the way of the normal packaging. There should
be strong reasons before a disruptive patch is applied to make a package build
with fewer build dependencies. This class of cases that is found by this script
(and it could be abused to find even more by omitting the first phase) sounds
to me as if only trivial changes were needed to build the package with fewer
build dependencies. Thus in case the maintainer does not have any strong
objections, there is no harm applying them.

The downside you list unnecessary extra builds are easy to avoid in practice.
Botch contains algorithms to find a close to minimum set of source packages to
modify to make a dependency graph acyclic (a feedback vertex set). Even if all
source packages in the dependency graph had removable build dependencies it
would only choose a small set of them (currently 60-70 are needed) to actually
build with a stage1 profile active.

Furthermore, the only time when there is a hard requirement to remove a
dependency without alternative are self cycles which currently involve only
about 30 source packages. For all other source packages there are always
alternatives. So you will mostly not get into a situation where you absolutely
need to break a build-dep loop as you describe it above (aside from these 30
source packages).

  I did not plan to run this script more often yet. I'll probably do another
  run after having added a detection for meta packages as suggested by you
  below.
 
  Running it more regularly might not require any big discussion because the
  problem size might be small enough that maintaining a white list would be
  enough.
 
 If you really want to systematically detect misbuilds on missing
 build-dependencies, it's a much bigger problem than just detecting this for
 the build-dependencies which are metapackages.

Why? The build dependencies which are not metapackages are not listed as false
positives because they get weeded out in the first phase.

 There certainly will be other cases that this technique won't cover, but it
 won't cause any false-negatives for your purposes.  I don't know what the
 numbers will look like overall, but 3 out of 4 packages listed by my name
 were false-positives that can be filtered out this way, so I definitely think
 it's worth a rerun before MBF.

You are right. I'll see what I can do.

Thanks a lot for your input!

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140708042249.14505.27900@hoothoot



Re: possible MBF: automatically detecting unused build dependencies

2014-07-08 Thread Johannes Schauer
Hi,

Quoting Steve Langasek (2014-07-07 20:22:42)
 Ah.  No, it only means that the package build does not *fail* if the
 build-dependency is removed.  That is not the same thing as saying that the
 build-dependency is not used.
 
 It would of course be better if packages were resilient against breakage in
 their build-dependencies, instead of misbuilding with features disabled or
 with wrong fallback code.  But this isn't easy to do in all build systems,
 and anyway this isn't something we routinely audit about our packages; we
 shouldn't regard this as a bug to be reported without a lot more discussion
 of how we're going to systematically stay on top of those issues in the
 future.
 
 For your purposes, a better method would be:
 
  - identify those build-dependencies which are empty except for
/usr/share/doc
  - for each such package, look at the contents of its direct dependencies
  - check the build against those contents

it turns out that 13% of my results are packages with no other content than in
/usr/share/doc. Namely:

libreadline-dev, default-jdk-doc, doxygen-latex, gcj-native-helper,
g++-multilib, gobjc, libboost-dev, libboost-system-dev, libgmp3-dev,
libgphoto2-2-dev, libopenais-dev, libtasn1-3-dev, libxmlrpc-c3-dev, lynx,
mysql-server, python3-all-dbg, python3-all-dev, libdb-dev, python-all,
python-gobject, python-all-dbg, python-all-dev

I'll re-run the whole caboodle later this year but consider the file content of
empty packages to be the sum of the content of packages it depends on. This
should reduce the number of this kind of false positives.

Do you think I should fill bugs for all non-empty packages that were already
found? Or do you think there is another high chance of false positives for that
kind of packages too?

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140708074302.14505.28772@hoothoot



Re: possible MBF: automatically detecting unused build dependencies

2014-07-08 Thread Johannes Schauer
Hi,

Quoting Kurt Roeckx (2014-07-09 00:36:37)
 On Mon, Jul 07, 2014 at 01:51:00PM +0200, Johannes Schauer wrote:
  Kurt Roeckx k...@roeckx.be
 libtool
 
 == libtool_2.4.2-1.7.arch-all.unusedbd ==
 gfortran=4:4.8.2-4
 
 gfortran Depends on gfortran-4.8, and that is being used.

indeed this is then a false positive of a nearly-meta package. Unfortunately
the gfortran package does ship some files besides /usr/share/doc (both
symlinks) and would thus not be classified as a meta package.

Maybe I should also check debtags. gfortran is tagged role::dummy. I also found
role::metapackage. Is there another debtag or method in general that would
allow to consider the dependencies of a package instead and avoid this kind of
false positive?

Maybe a package shipping only symlinks besides /usr/share/doc is another way of
finding meta packages. On the other hand it's harder to check the type of file
a package ships as it needs downloading and unpacking first. I'm not aware
whether tools like apt-file display information about the file type.

 
 openssl (U)
 == openssl_1.0.1g-4.arch-all.unusedbd ==
 m4=1.4.17-4
 
 From the changelog:
   * Add Build-Dependency on m4, since sparc needs it to generate
 it's assembler files.  (Closes: #334542)

Then it makes sense that my amd64 build caught that. Could you make m4 an
architecture specific dependency if it's only used on sparc?

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140709043719.14505.38892@hoothoot



Re: possible MBF: automatically detecting unused build dependencies

2014-07-09 Thread Johannes Schauer
Hi,

Quoting Maarten Lankhorst (2014-07-09 15:48:33)
 == llvm-toolchain-3.4_3.4.1-4.arch-all.unusedbd.real ==
 automake=1:1.14.1-3
 autotools-dev=20140510.1
 diffstat=1.58-1
 doxygen=1.8.7-1
 flex=2.5.39-7
 lcov=1.10-1
 libtool=2.4.2-1.7
 patchutils=0.3.3-1
 procps=1:3.3.9-5
 sharutils=1:4.14-2
 tcl=8.6.0+8
 texinfo=5.2.0.dfsg.1-3
 
 No, building with DEB_BUILD_OPTIONS=codecoverage enables at least some of 
 them,

should build dependencies which the source package only requires after setting
some DEB_BUILD_OPTIONS go into Build-Depends?

 and applying patches might require the autotools to be re-run, so I think
 lots of the requirements are sane.

My naive assumption was that the Build-Depends line contains a list of binary
packages needed to build the package. Not binary packages that might be needed
in some situations during the lifetime of a source package?

 doxygen is probably used for llvm-3.4-doc, so I think it might not be unused
 either.  texinfo probably the same.

The traces show that no file of the doxygen or texinfo package are run during a
normal build (including building architecture:all packages). You say they are
used. So maybe this indicates a bug where you think they should be used but are
in fact not? Could you make sure?

 diffutils, tcl, flex, patchutils, procps could possibly be unused, although
 not 100% sure. :-)

the only kind of false positive that was pointed out this method has is that it
discovers otherwise empty packages (meta packages) which depend on other
packages without which the build will nevertheless succeed because it will just
silently fail if the tools provided by them are found to not be present.

The package tcl is such a case and might thus be a false positive.

The other packages are containing actual usable content and should be
legitimate.

It would be great if you could point out if there was yet another undiscovered
flaw in my method.

Thank you!

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140709145041.14505.85252@hoothoot



Re: possible MBF: automatically detecting unused build dependencies

2014-07-10 Thread Johannes Schauer
Hi,

Quoting Jakub Wilk (2014-07-10 12:45:36)
 * Johannes Schauer j.scha...@email.de, 2014-07-09, 16:50:
 should build dependencies which the source package only requires after
 setting some DEB_BUILD_OPTIONS go into Build-Depends?
 
 Probably not, unless it's one of the optioned blessed by Policy §4.9.1. 
 :-)

And even those are probably options which, if enabled, require less build
dependencies than for a full build rather than more.

Once build profiles arrive in stable, it will be possible to add
!profile.nocheck to build dependencies which are not needed when specifying
DEB_BUILD_OPTIONS=nocheck.

 My naive assumption was that the Build-Depends line contains a list of
 binary packages needed to build the package. Not binary packages that might
 be needed in some situations during the lifetime of a source package?
 
 Agreed. But here I'd recommend regenerating auto* stuff unconditionally, 
 rather than dropping the build-dependencies.

Yes, of course.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140710110704.14505.27633@hoothoot



Re: possible MBF: automatically detecting unused build dependencies

2014-07-10 Thread Johannes Schauer
Hi,

Quoting Steve Langasek (2014-07-09 00:32:18)
 But it absolutely does have this effect if we add bootstrap-specific metadata
 unnecessarily, because:
 
  - it introduces a syntax incompatibility with older versions of the package
tools

we are currently trying to get a minimal change to dpkg, apt and python-apt
into wheezy backports to solve this problem:

http://lists.debian.org/20140706211617.14505.38487@hoothoot

  - it makes the packaging more complex to understand

While this is true in one sense, one could also argue that annotating build
dependencies with what they are used for (with !profile.nodoc or
!profile.nocheck) does also add some clarity. Though I guess you were mainly
talking about complexity in debian/rules. Sure, more conditionals add
complexity.

 The latter point is as likely to cause problems for the bootstrappers
 themselves as it is for the maintainers, since the more maintainers who have
 to get this metadata right and keep it up to date, the more it's going to
 bitrot.

If you are worried about bitrot, then we have to throw more continuous testing
at it. With botch we can create a build order and then verify it once enough
source packages have build profile information attached. Should Debian not have
sufficient resources for that I am willing to do those rebuilds on my own
hardware.

The bitrot will happen even if bootstrap data is added out of necessity. Due to
changing dependencies, some stage1 information might not be needed anymore at
some point because it becomes better to break cycles at another point of the
graph. So continuous testing is needed in any case.

 I'm happy that tools like botch exist and think botch has been a useful
 accelerator for bootstrappability of Debian.  However, my own goal is to see
 that future port bootstraps can be done using the standard buildd
 infrastructure (for each of Debian and Ubuntu), which doesn't currently make
 use of such techniques - rather, they work by building everything which is
 buildable.  If you plan to wire up botch to wanna-build for archive-friendly
 bootstrappability, that would be great to see!

I would need to know far more about wanna-build until I can do that. I'm also
not too sure whether wanna-build is the right machinery to do bootstraps from
scratch? Maybe it is in the sense that botch could provide the info of which
source package to best build with reduced build dependencies once nothing is
buildable anymore.

But it would probably be prudent to show that such an automated bootstrap is
possible without wanna-build in the first place. And we are still quite far
away from being able to do automated bootstraps, sadly :(

 But until that's happened, I stand by my claim that stage1 data not needed
 for breaking build-dep loops is counterproductive for bootstrapping ports.

I agree with you that it is unwise to add such extra information to more
packages than needed (currently about 60 source packages) before there is
enough infrastructure to run and test everything.

But again, except for self-cycles there are no hard requirements on a source
package needing stage1 annotations. Botch can show which source packages, if
modified accordingly could solve the problem with a (close to) minimal number
of source packages changed. But if one source package cannot be changed because
of technical reasons or because the maintainer refuses to implement these
changes, then there are ways to work around that by modifying other source
packages. But I guess that's what you meant by need.

I guess either once jessie is released or once the wheezy backport happens,
build profiles will slowly be introduced with the most obvious packages first.
Then will come the other, harder packages until we can for example do a native
amd64 bootstrap, starting from a minimal build system. Once we are that far
(and that will probably take another release at least) we can talk again about
adding bootstrap-specific metadata unnecessarily. :)

So let me retract my claim from my earlier email and instead say that I agree
that adding !profile.stage1 annotation should be done very selectively and
only if necessary.

Nevertheless the generated information should be stored somewhere so that a
bootstrapper can use it as a source of information which build dependencies can
be dropped without much effort from a source package if so necessary.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140710120943.14505.4470@hoothoot



Bug#754460: ITP: pdf2htmlex -- Converts PDF to HTML while retaining most formatting

2014-07-11 Thread Johannes Schauer
Package: wnpp
Severity: wishlist
Owner: Johannes Schauer j.scha...@email.de

* Package name: pdf2htmlex
  Version : 0.11
  Upstream Author : WANG Lu coolwan...@gmail.com
* URL : http://github.com/coolwanglu/pdf2htmlEX
* License : GPL3, MIT, CC-BY-3.0
  Programming Lang: C++
  Description : Converts PDF to HTML while retaining most formatting

pdf2htmlEX converts PDF to HTML while retaining text, format and style as much
as possible. In contrast to other converters like pdftohtml from
libpoppler-utils it makes use of HTML5, JavaScript and modern CSS features.
Even difficult content like PDFs with embedded fonts, multicolumn documents,
scientific papers with complicated figures and mathematical formulas will
mostly be represented correctly. Fallback mode generates HTML pages which
do not require any JavaScript to view them correctly at the expense of a
larger file size.

https://mentors.debian.net/package/pdf2htmlex


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/2014073622.19613.32108.reportbug@hoothoot



Bootstrapping also increases the package count (was: Re: Bug#754551: ITP: node-ms -- milliseconds conversion utility)

2014-07-12 Thread Johannes Schauer
Hi,

Quoting Russ Allbery (2014-07-12 19:19:16)
 I'd really like to see us solve this problem by figuring out a better
 metadata distribution system (and IIRC some progress was made on that
 front recently) than in making life more difficult for packagers.

which progress is that?

With bootstrapping we also have the problem that we often have to increase the
package count with very small packages as it is often required to split a
package so that

 - one part of it can be multiarched (to be able to satisfy cross build
   dependencies)
 - or so that the content of the produced binary package of a stage1 profile
   build is not different from the full build (for example by splitting a
   foo-plugins package into foo-plugins-nogtk and foo-plugins-gtk)

So we would also like to not run into the problem of making people's life
harder because we increase the amount of package meta data too much.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140712190136.31130.49432@hoothoot



Re: let missing-debian-source-format lintian tag be a warning!

2014-07-16 Thread Johannes Schauer
Hi Charles,

Quoting Charles Plessy (2014-07-16 02:58:58)
 viewed from the opposite side of the chain, I have the impression that in
 most cases where I receive a report that package X does not build on
 architecture Y, it is a pure waste of time, since that package has no user
 base on that architecture.

while that package might have no user base, it might be required to build other
source packages on that architecture. You can easily check whether this is the
case by doing:

curl --silent http://bootstrap.debian.net/importance_metric_all.txt \
| awk '$1 == src:$yoursrcpkgname { print $3; }'

The number that is printed is the amount of other source packages which need
$yoursrcpkgname to be buildable so that they can be built on Debian sid amd64.
The file is regenerated daily.

So if you feel wookey becomes too eager you can tell him that not only do the
binary packages that $yoursrcpkgname builds have no users but it also is likely
not needed to build more source packages.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140716060243.31130.14458@hoothoot



Re: Bug#754513: ITP: libressl -- SSL library, forked from OpenSSL

2014-07-18 Thread Johannes Schauer
Hi,

Quoting Russ Allbery (2014-07-16 22:17:23)
 Ben Hutchings b...@decadent.org.uk writes:
  On Wed, 2014-07-16 at 12:47 -0700, Russ Allbery wrote:
  It would be nice to have a reliable kernel interface for getting
  randomness rather than relying on proper chroot configuration.
  There is such an interface.  It happens to be a char device.  Expecting
  administrators to create /dev/urandom in a chroot is no more unreasonable
  than expecting them to create /dev/null or /dev/zero.
 I'm not a big fan of that either.  :)  Also, I think it's relatively rare for
 a library to require those devices exist for secure behavior, although
 perhaps I'm just not knowledgable in this area.

maybe this will help in the future:

http://lists.openwall.net/linux-kernel/2014/07/17/235

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140718120306.31130.41027@hoothoot



Re: possible MBF: automatically detecting unused build dependencies

2014-07-28 Thread Johannes Schauer
Hi,

Quoting Johannes Schauer (2014-07-07 13:51:00)
 we would like to propose an MBF with severity wishlist to drop unused build
 dependencies in a number of source packages

I fixed many of the previous false positives of build dependencies on meta
packages (not the file contents of the package are required for the build but
its dependencies) which, if not present during build, would make the build not
fail but just let the resulting binary be generated with less features.

In contrast to the initial results, this means that 70 fewer build dependencies
were found to be unneeded (25% of the original amount). The following binary
packages were found to be meta packages and are thus not false positives in the
result anymore:

bison, ca-certificates, default-jdk, doxygen-latex, g++-4.8-multilib,
gcc-multilib, gcj-jdk, gfortran, gir1.2-freedesktop, gir1.2-glib-2.0,
g++-multilib, iasl, jadetex, libblas-dev, libboost-dev, libcorosync-dev,
libdb-dev, libgmp3-dev, libgphoto2-2-dev, libkrb5-dev, libopenais-dev,
libpcap-dev, libreadline-dev, libsonic-dev, libtasn1-3-bin, libtasn1-3-dev,
libxi-dev, libxmlrpc-c3-dev, libxmu-dev, libxt-dev, lynx, mysql-server,
portaudio19-dev, python, python2.7-dev, python3, python3-all, python3-all-dbg,
python3-all-dev, python3-minimal, python-all, python-all-dbg, python-all-dev,
python-gobject, ruby, ruby-dev, swig, tcl-dev, texinfo, texlive,
texlive-latex-recommended, tk-dev, valac, x11-utils, zip

The classification is done automatically (without a blacklist) based on their
debtags (role::metapackage or role::dummy) or whether they ships any regular
file except for those in /usr/share/doc. If they were found to be a meta
package by this method, then they will be considered to contain the files of
the binary packages that were used to satisfy their dependencies.

 indicated by the attached two text files and the dd-list output.

I attached the updated list of droppable build dependencies and build
dependencies that can be moved to Build-Depends-Indep together with dd-list
output.

The results exclude python-defaults and python3-defaults (as requested by Scott
Kitterman) and openldap (as requested by Ryan Tandy) and lirc (as requested by
Stefan Lippers-Hollmann). Thank you Scott, Ryan and Stefan for already having
fixed your packaging!

Here is the updated MBF template email

--%---
Subject: Please consider removing the build dependencies on $foo, $bar and $baz
Severity: wishlist
Usertag: unusedbd
User: bootst...@lists.debian.org

Dear Maintainer,

the following build dependencies of this source package do not seem to be
needed during an --arch-all build with sbuild:

 - $foo
 - $bar

And the following do not seem to be needed during a --no-arch-all build with
sbuild:

 - $baz

Neither are any of their files accessed during the respective build nor are
their dependencies on other binary packages required. This can mean that either
one of those build dependencies

 1. is useless old cruft
 2. is architecture dependent and does not occur on amd64 but on other
architectures
 3. indicates a bug in the packaging where you intend to use the build
dependency but where that is not happening in practice during the build
 4. is a false positive of a dependency which is used as a meta package (only
its dependencies are used but not its files) but not detected as one and
for which the build does not fail if it is not installed

Depending on the case, you should

 1. remove the build dependency (if it was found in a --arch-all build) or move
it to Build-Depends-Indep (if it was found in a --no-arch-all build)
 2. add an architecture restriction
 3. fix your packaging to make use of the build dependency
 4. make the build fail when the contents of the binary package are not found
(for example by passing an explicit ./configure flag) or report the problem
to j.scha...@email.de (reply to this bugreport) so that this false positive
is not reported again

You can find more detail about the procedures that were used to find this
problem in the MBF announcement on debian-devel: $email
--%---

Is it missing anything?

Thank you!

cheers, josch
== apache2_2.4.9-1.arch-all.unusedbd ==
libcap-dev:amd64=1:2.22-1.2

== apparmor_2.8.0-5.arch-all.unusedbd ==
dejagnu=1.5-3
texlive-latex-recommended=2014.20140528-3

== apr-util_1.5.3-2.arch-all.unusedbd ==
libpcre3-dev:amd64=1:8.31-5
python=2.7.6-2

== apt_1.0.3.arch-all.unusedbd ==
automake=1:1.14.1-3

== at-spi2-atk_2.10.2-3.arch-all.unusedbd ==
libglib2.0-bin=2.40.0-3

== bc_1.06.95-8.arch-all.unusedbd ==
bison=2:3.0.2.dfsg-2

== bison_3.0.2.dfsg-2.arch-all.unusedbd ==
autotools-dev=20140510.1

== blcr_0.8.5-2.1.arch-all.unusedbd ==
autoconf=2.69-6
automake=1:1.14.1-3
autotools-dev=20140510.1
libtool=2.4.2-1.7

== bluez_4.101-4.1.arch-all.unusedbd ==
bison=2:3.0.2.dfsg-2
gstreamer-tools

Re: possible MBF: automatically detecting unused build dependencies

2014-07-28 Thread Johannes Schauer
Hi,

Quoting gregor herrmann (2014-07-28 11:45:14)
  == libxml-parser-perl_2.41-1.arch-all.unusedbd ==
  sharutils=1:4.14-2
 
 Already fixed in 2.41-2.

thanks!

 I assume you're planning to do a new run before actually filing the
 bugs?

I cannot do a new run before September because I'm moving places twice within
the next month and thus do not have a stable always-on machine available during
that time. The only thing that could change this would be if I found easily
accessible compute time elsewhere (I asked at debian-qa@l.d.o:
http://lists.debian.org/20140726090503.4150.56356@hoothoot )

I thought that hardly any build dependencies get removed over time so that it
would still be appropriate to fill bugreports for the June results now.

If that would not be appreciated then I'll re-run the whole thing once I
settled in at our new place some time in September.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140728100758.4150.21535@hoothoot



Re: possible MBF: automatically detecting unused build dependencies

2014-07-28 Thread Johannes Schauer
Hi,

I cannot believe I attached the wrong list once again. My sincere apologies to
fill up your inboxes like that :(

Attached are the right files and dd-list

Quoting Johannes Schauer (2014-07-28 11:34:24)
 bison, ca-certificates, default-jdk, doxygen-latex, g++-4.8-multilib,
 gcc-multilib, gcj-jdk, gfortran, gir1.2-freedesktop, gir1.2-glib-2.0,
 g++-multilib, iasl, jadetex, libblas-dev, libboost-dev, libcorosync-dev,
 libdb-dev, libgmp3-dev, libgphoto2-2-dev, libkrb5-dev, libopenais-dev,
 libpcap-dev, libreadline-dev, libsonic-dev, libtasn1-3-bin, libtasn1-3-dev,
 libxi-dev, libxmlrpc-c3-dev, libxmu-dev, libxt-dev, lynx, mysql-server,
 portaudio19-dev, python, python2.7-dev, python3, python3-all,
 python3-all-dbg, python3-all-dev, python3-minimal, python-all,
 python-all-dbg, python-all-dev, python-gobject, ruby, ruby-dev, swig,
 tcl-dev, texinfo, texlive, texlive-latex-recommended, tk-dev, valac,
 x11-utils, zip

and ignore this list. :(

Sorry...

josch
== apache2_2.4.9-1.arch-all.unusedbd.real ==
libcap-dev:amd64=1:2.22-1.2

== apparmor_2.8.0-5.arch-all.unusedbd.real ==
dejagnu=1.5-3
texlive-latex-recommended=2014.20140528-3

== apr-util_1.5.3-2.arch-all.unusedbd.real ==
libpcre3-dev:amd64=1:8.31-5

== at-spi2-atk_2.10.2-3.arch-all.unusedbd.real ==
libglib2.0-bin=2.40.0-3

== bc_1.06.95-8.arch-all.unusedbd.real ==
bison=2:3.0.2.dfsg-2

== bison_3.0.2.dfsg-2.arch-all.unusedbd.real ==
autotools-dev=20140510.1

== blcr_0.8.5-2.1.arch-all.unusedbd.real ==
autoconf=2.69-6
automake=1:1.14.1-3
autotools-dev=20140510.1
libtool=2.4.2-1.7

== bluez_4.101-4.1.arch-all.unusedbd.real ==
bison=2:3.0.2.dfsg-2
gstreamer-tools=0.10.36-1.2

== boost-defaults_1.55.0.2.arch-all.unusedbd.real ==
libboost1.55-dev:amd64=1.55.0+dfsg-1

== ceph_0.80.1-1.arch-all.unusedbd.real ==
uuid-runtime=2.20.1-5.7

== chicken_4.8.0.5-1.arch-all.unusedbd.real ==
texinfo=5.2.0.dfsg.1-3

== cloog_0.18.2-1.arch-all.unusedbd.real ==
texinfo=5.2.0.dfsg.1-3

== cpio_2.11+dfsg-2.arch-all.unusedbd.real ==
texinfo=5.2.0.dfsg.1-3

== cunit_2.1-2.dfsg-1.arch-all.unusedbd.real ==
quilt=0.63-2

== cups-filters_1.0.53-1.arch-all.unusedbd.real ==
sharutils=1:4.14-2

== curl_7.37.0-1.arch-all.unusedbd.real ==
ca-certificates=20140325
openssh-server=1:6.6p1-5
python=2.7.6-2

== dbus-python_1.2.0-2.arch-all.unusedbd.real ==
xmlto=0.0.25-2

== dbus_1.8.2-1.arch-all.unusedbd.real ==
python=2.7.6-2

== devscripts_2.14.4.arch-all.unusedbd.real ==
libjson-perl=2.61-1
libterm-size-perl=0.207-1+b1

== doxygen_1.8.7-1.arch-all.unusedbd.real ==
texlive-extra-utils=2014.20140528-2

== e2fsprogs_1.42.10-1.arch-all.unusedbd.real ==
m4=1.4.17-4

== eglibc_2.18-7.arch-all.unusedbd.real ==
autoconf=2.69-6
quilt=0.63-2

== exiv2_0.23-1.arch-all.unusedbd.real ==
autotools-dev=20140510.1
dh-linktree=0.4
libjs-jquery=1.7.2+dfsg-3

== fftw3_3.3.4-1.arch-all.unusedbd.real ==
ghostscript=9.05~dfsg-8.1
transfig=1:3.2.5.e-3

== flite_1.4-release-8.arch-all.unusedbd.real ==
ghostscript=9.05~dfsg-8.1
texlive=2014.20140528-3

== fontconfig_2.11.0-5.arch-all.unusedbd.real ==
gperf=3.0.4-1

== freeglut_2.8.1-2.arch-all.unusedbd.real ==
libxt-dev:amd64=1:1.1.4-1

== gdb_7.6.2-1.1.arch-all.unusedbd.real ==
autoconf=2.69-6
flex=2.5.39-7
gcj-jdk=4:4.9.0-1
libtool=2.4.2-1.7
procps=1:3.3.9-5
python3-dev=3.4.1~rc1-1

== geoclue-2.0_2.1.8-1.arch-all.unusedbd.real ==
geoip-database=20140509-1

== geoip_1.6.0-1.arch-all.unusedbd.real ==
zlib1g-dev:amd64=1:1.2.8.dfsg-1

== ghostscript_9.05~dfsg-8.1.arch-all.unusedbd.real ==
freeglut3-dev:amd64=2.8.1-2

== gnome-keyring_3.12.0-2.arch-all.unusedbd.real ==
ca-certificates=20140325
docbook-xml=4.5-7.2
libglib2.0-doc=2.40.0-3

== gnome-vfs_2.24.4-4.arch-all.unusedbd.real ==
libattr1-dev:amd64=1:2.4.47-1

== gpm_1.20.4-6.1.arch-all.unusedbd.real ==
texi2html=1.82+dfsg1-3
texlive-base=2014.20140528-3

== graphviz_2.26.3-17.arch-all.unusedbd.real ==
libgd2-noxpm-dev=2.1.0-3
pdksh=49-2

== gsl_1.16+dfsg-1.arch-all.unusedbd.real ==
libtool=2.4.2-1.7

== gst-plugins-base0.10_0.10.36-1.1.arch-all.unusedbd.real ==
gir1.2-freedesktop=1.40.0-2
gir1.2-glib-2.0=1.40.0-2

== gst-plugins-base1.0_1.2.4-1.arch-all.unusedbd.real ==
gir1.2-freedesktop=1.40.0-2

== gstreamer1.0_1.2.4-1.arch-all.unusedbd.real ==
gir1.2-freedesktop=1.40.0-2

== gtest_1.7.0-3.arch-all.unusedbd.real ==
python=2.7.6-2

== gtk+2.0_2.24.23-1.arch-all.unusedbd.real ==
libatk1.0-doc=2.12.0-1
libcairo2-doc=1.12.16-2
libglib2.0-doc=2.40.0-3
libpango1.0-doc=1.36.3-1

== gtk+3.0_3.12.2-1.arch-all.unusedbd.real ==
gsettings-desktop-schemas=3.8.2-2

== gtkglext_1.2.0-3.1.arch-all.unusedbd.real ==
autotools-dev=20140510.1

== heimdal_1.6~rc2+dfsg-6.arch-all.unusedbd.real ==
libperl4-corelibs-perl=0.003-1

== hwloc_1.9-3.arch-all.unusedbd.real ==
autotools-dev=20140510.1
help2man=1.45.1
transfig=1:3.2.5.e-3

== ijs_0.35-10.arch-all.unusedbd.real ==
docbook-utils=0.6.14-3
docbook=4.5-5.1
ghostscript=9.05~dfsg-8.1

== klibc_2.0.3-1.arch-all.unusedbd.real ==
bison=2:3.0.2.dfsg-2
m4=1.4.17-4

Re: possible MBF: automatically detecting unused build dependencies

2014-07-28 Thread Johannes Schauer
Hi,

Quoting Scott Kitterman (2014-07-28 14:54:29)
 It is quite common for people to fix things based on the initial discussion
 about an impending MBF, so I think it would be less than impolite to not
 acknowledge that by filing bugs on obsolete data.
 
 The two packages that I show up for are fixed as well.

I know. That's why I wrote a few emails up:

 The results exclude python-defaults and python3-defaults (as requested by
 Scott Kitterman) and openldap (as requested by Ryan Tandy) and lirc (as
 requested by Stefan Lippers-Hollmann). Thank you Scott, Ryan and Stefan for
 already having fixed your packaging!

Nevertheless, I'm currently talking with Holger Levsen and it seems that it
should be possible to implement the machinery on jenkins.debian.net. If you
think that I should not file bugs for the current results, then I'll wait until
the first jenkins runs come in with fresh data.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140728153328.4150.86639@hoothoot



Re: First steps towards source-only uploads

2014-08-05 Thread Johannes Schauer
Hi,

Quoting Ansgar Burchardt (2014-08-01 12:25:05)
  I want to understand purpose and syntax of this new field.
 
 The field was originally discussed in https://bugs.debian.org/619131 to
 allow easier processing of packages that build arch-specific binaries
 such as src:linux[1].
 
 The architecture information was only (re)introduced later, as far as I
 know to help with bootstrapping, but it turns out that I also want this
 for source-only uploads to catch uploads introducing NEW binary packages.

The field started out with the binary package name, type, section and priority.
For bootstrapping it is necessary to know for which architectures and build
profiles a binary package builds without having access to the unpacked source
package but just from looking at the Packages/Sources files. Thus this
information was added as optional fields. Every field that comes after the
first four will be of the form key=value. The arch information will always be
printed and the profile field only for a build with a build profile. Guillem
explains the new field here:

https://lists.debian.org/20140421140417.ga1...@gaara.hadrons.org

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140806051637.19236.26348@hoothoot



Re: First steps towards source-only uploads

2014-08-06 Thread Johannes Schauer
Hi,

Quoting Charles Plessy (2014-08-06 07:41:40)
 what do you think about the patch I sent to the Policy, for describing the
 syntax of the current optional fields of the Packages-List field ?  Do you
 think that modifications are needed ?  Would you second it ?
 
 https://bugs.debian.org/756835
 
 Have a nice day,

I had worded it a bit differently:

diff --git a/policy.sgml b/policy.sgml
index fbbe4a3..840951c 100644
--- a/policy.sgml
+++ b/policy.sgml
@@ -3824,10 +3824,17 @@ Checksums-Sha256:
the source package, considering every architecture.  The first line
of the field value is empty.  Each one of the next lines describes
one binary package, by listing its name, type, section and priority
-   separated by spaces.  Fifth and subsequent space-separated items
-   may be present and parsers must allow them.  See the
-   qref id=f-Package-TypePackage-Type/qref field for a list of
-   package types.
+   separated by spaces.
+   See the qref id=f-Package-TypePackage-Type/qref field for a
+   list of package types.
+   Fifth and subsequent space-separated items are key/value pairs of
+   the form ttkey=value1,value2/tt. The currently used keys are
+   the ttarch/tt key which lists the architectures a binary
+   package builds for and the ttprofile/tt key which lists the
+   build profiles a binary package builds in.
+   footnoteThe key/value syntax for all fields after the fourth was
+   introduced in prgndpkg/prgn version tt1.17.7/tt in
+   emJessie/em./footnote
  /p
/sect1
 


cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140806060316.19236.55079@hoothoot



Re: Bug#756835: First steps towards source-only uploads

2014-08-11 Thread Johannes Schauer
Hi,

Quoting Matthias Urlichs (2014-08-07 07:54:26)
 Also, build profiles are not explained anywhere in Policy (unless that's
 been added after 3.9.5), so how would I discover which values are allowed /
 make sense?

right. For the purpose of documenting the Package-List its usage for build
profiles can just be omitted until build profiles are documented.

Somehow I thought that a bug to document the restriction list syntax and build
profiles had long been filled but apparently that wasn't the case so now there
is #757760.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140811075507.14069.52073@hoothoot



Re: First steps towards source-only uploads

2014-08-15 Thread Johannes Schauer
Hi,

Quoting Guillem Jover (2014-08-13 13:48:11)
 On Tue, 2014-08-12 at 13:27:38 +0200, Ansgar Burchardt wrote:
  There are also other problems that need to be eventually addressed: as far
  as I know there are some source packages producing arch:all binaries that
  cannot be built on all architectures. A Build-Architecture-Indep field was
  proposed to indicate where it should be built in this case[1], but for now
  I think we can require that maintainers have to upload the arch:all
  packages in this case.
 
 I think all proposed field names in that thread are rather confusing.
 In Debian packaging lingo build means several things, it can mean at
 least the build machine (!= host machine), or it can mean the act of
 building.
 
 In the case of Build-Depends style fields, it's referring to the act
 of building, but Architecture is related to the host system/compiler,
 so mixing the different meanings would be messy, think for example
 about cross-compiling.

But is the question not *on* which architecture arch:all packages are built,
and would the term build in Build-Architecture-Indep thus not be correct in
both of its meanings (as the architecture I'm building *on* as well as the
act of building)?

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140815092700.14069.93664@hoothoot



Detecting more undeclared conflicts (was: Re: Bug#758234: Raising priority of Debian packages)

2014-09-07 Thread Johannes Schauer
Hi,

Quoting Paul Wise (2014-09-07 11:38:27)
 On Fri, Sep 5, 2014 at 3:35 AM, Jakub Wilk wrote:
 
  We should probably also monitor package conflicts. We made a big fuss about
  node vs nodejs (and rightly so); but I bet that we have lots of other
  package pairs in the archive that can't be co-installed for no good reason.
 
 We have this already:
 
 https://bugs.debian.org/cgi-bin/pkgreport.cgi?tag=edos-file-overwrite;users=trei...@debian.org
 https://qa.debian.org/dose/file-overwrites.html

would it make sense to extend this test and not only check whether packages
that share a file listed in Contents.gz can be co-installed but also packages
which access/change/create the same files in their pre/post-install maintainer
scripts do?

Is the information about which files are touched in any way by maintainer
scripts generated already somewhere? I think piuparts only takes two snapshots
before installation and after removal but not one in the middle and neither
runs a file system access tracer for all other changes to the filesystem?

If this could be useful, then I could run some tests locally, using fatrace
similar to how I used it to detect unneeded build dependencies.

Does this make sense?

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140907103606.3685.16945@hoothoot



Bug#761075: ITP: fuzzylite -- fuzzy logic control library

2014-09-10 Thread Johannes Schauer
Package: wnpp
Severity: wishlist
Owner: Johannes Schauer j.scha...@email.de

* Package name: fuzzylite
  Version : 5.0
  Upstream Author : Juan Rada-Vilela jcr...@fuzzylite.com
* URL : http://www.fuzzylite.com/cpp/
* License : LGPL3+
  Programming Lang: C++
  Description : fuzzy logic control library

fuzzylite is a fuzzy logic control library which allows one to easily
create fuzzy logic controllers in a few steps utilizing object-oriented
programming. It supports five controller types (Mamdani, Takagi-Sugeno,
Larsen, Tsukamoto, Inverse Tsukamoto), 20 linguistic terms, five
integral and two weighted defuzzifiers, six hedge types, three import
types (FuzzyLite Language, Fuzzy Inference System and Fuzzy Control
Language) and six export types (C++, Java, FuzzyLite Language, FuzzyLite
Dataset, Fuzzy Inference System, Fuzzy Control Language). It comes
bundled with more than thirty examples for Mamdani, Takagi-Sugeno and
Tsukamoto controllers from fuzzylite, octave and matlab, each in all
supported export formats.


-- 
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140910150609.8760.14056.reportbug@hoothoot



Re: ppc64 not in any-powerpc ?

2014-09-12 Thread Johannes Schauer
Hi,

Quoting Simon McVittie (2014-09-12 12:18:35)
 There might be situations where it would be useful to have a way to spell
 any member of the x86 family, any member of the PowerPC family, any
 member of the ARM family and any member of the MIPS family, but we
 currently don't.

There is something that spells some members of the ARM family:

$ dpkg-architecture -aarm -iany-arm  echo yes || echo no
yes
$ dpkg-architecture -aarmel -iany-arm  echo yes || echo no
yes
$ dpkg-architecture -aarmhf -iany-arm  echo yes || echo no
yes

It it doesn't match arm64 though.

$ dpkg-architecture -aarm64 -iany-arm  echo yes || echo no
no


The common fallacy is that the foo in any-foo is the name of a Debian
architecture while in fact it is the name of the CPU which is mapped to one or
more Debian architectures by /usr/share/dpkg/triplettable

This is even done wrongly by apt itself. See #748936.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140912131108.3685.97213@hoothoot



Re: ppc64 not in any-powerpc ?

2014-09-12 Thread Johannes Schauer
Hi,

Quoting Andrey Rahmatullin (2014-09-12 18:14:55)
 On Fri, Sep 12, 2014 at 03:11:08PM +0200, Johannes Schauer wrote:
  The common fallacy is that the foo in any-foo is the name of a Debian
  architecture while in fact it is the name of the CPU which is mapped to one 
  or
  more Debian architectures by /usr/share/dpkg/triplettable
 Indeed, maybe we need to spell this more explicitly in the Policy?

Either that (footnote 99 [1] gives some more explanation) or change the meaning
of architecture wildcards into something more intuitive like os-debianarch as
it is probably understood by most developers because the existing values for
cpu happen to be (or used to be) debian architecture names.

Another relevant bug about this topic is #694630. I think this and the apt bug
#748936 give a good overview about how the current system works, why it exists
and how alternatives could/should look like.

Lintian successfully warns when things like any-armel are used in an attempt
to let the second part be a debian architecture instead of a cpu name, so we
don't have many of these in the archive. This is the relevant thread where I
tried to identify packages with invalid architecture wildcards:
http://lists.debian.org/2014052314.20924.60609@hoothoot

cheers, josch

[1] https://www.debian.org/doc/debian-policy/footnotes.html#f99


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140912225415.3685.31745@hoothoot



Re: binary data file and endianness and multiarch

2014-09-28 Thread Johannes Schauer
Hi,

Quoting Thomas Goirand (2014-09-28 12:42:24)
 Just to be sure: is ppc64el also using little endian?

yes it is.

Here is a great overview which answers that question and others:

https://wiki.debian.org/ArchitectureSpecificsMemo

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20140928112602.3685.73@hoothoot



Re: inconsistent versions of M-A: same packages

2014-11-07 Thread Johannes Schauer
Hi Holger,

Quoting Holger Levsen (2014-11-07 15:46:31)
 On Mittwoch, 5. November 2014, Ralf Treinen wrote:
  yes, you did miss something :-)
  first link on the page: Non-installable packages
  https://qa.debian.org/dose/debcheck/unstable_main/index.html
 
 thanks! (+doh, I guessed I oversaw these links on the debcheck pages and then 
 didnt find anything for the outdated and file-overwrite checks so I didnt 
 check again.

but was your original question not about debcheck checking for multiarch
co-installability across architectures?

I agree with Ralf, that this would best be done not by debcheck but by a small
script which compares if the Packages files for all distributions ship M-A:same
packages in the same version.

  2) if you ask about co-installablity of packages with the same name but
  different architectictures (and which are M-A=same) : this is a completely
  different (and much more interesting) question. Since dose is now
  multi-arch aware we can do this, but there are some questions to discuss
  about the precise scenario. Is this what you meant ?
 
 yes, these are the interesting cases to discover (and fix)! 

One interesting scenario for which to detect co-installability problems is when
it comes to satisfying crossbuild dependencies.

The following page is regenerated daily:

http://bootstrap.debian.net/cross.html

I have new hardware now, so I plan to extend the set of source packages that I
check for crossbuild dependency satisfaction.

Furthermore, a current problem of debcheck is, that it will only tell you one
reason for non-installability but for fixing problems like this it is useful to
have more than one reason to be able to parallelize bugreports and to better
estimate how many packages are blocked by a certain multiarch problem. I'm
currently working on an enhanced dose-builddebcheck version which will provide
this functionality and when it's done, the web page above will show those
additional problems too.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20141107151612.6173.861@hoothoot



Re: inconsistent versions of M-A: same packages

2014-11-07 Thread Johannes Schauer
Hi Holger,

Quoting Holger Levsen (2014-11-07 16:31:09)
  I agree with Ralf, that this would best be done not by debcheck but by a
  small script which compares if the Packages files for all distributions
  ship M-A:same packages in the same version.
 
 I'd happily run this script on jenkins.debian.net... if someone gives it to 
 me ;-)

is jenkins not triggered by pushes to git and thus sub-optimal for jobs that
should be run like a cron job?

I thought I'd run such a script on bootstrap.debian.net because that one has
all Packages files for all architectures already and it would be trivial to run
such a script in addition.

But first I'd like to make sure what the interesting information would be.

Would it be interesting to get the highest version of a binary package across
all architectures and then check if that version exists in all architectures?

Or would it be interesting to make sure that all versions exist across all
architectures? (binary packages can exist in more than one version in unstable)

botch currently ships the program botch-check-ma-same-versions which checks
whether two Packages packages files agree on the M-A:same versions.  Running it
with amd64 and armhf unstable Packages files as input yields that all 25
version skews are due to binNMUs. I can extend the script to allow more than
two Packages files as input and make the output machine readable.

  One interesting scenario for which to detect co-installability problems is
  when it comes to satisfying crossbuild dependencies.
  
  The following page is regenerated daily:
  
  http://bootstrap.debian.net/cross.html
 
 cool, very nice!
  
  I have new hardware now, so I plan to extend the set of source packages
  that I check for crossbuild dependency satisfaction.
 
 not sure what ressources you need, but maybe jenkins.d.n can also help here? 
 (or alternatively, jenkins can also be used to just notify about problems 
 like 
 the d-i_overview* jobs from https://jenkins.debian.net/view/d-i_misc/ do...)

Gladly, dose3 is very fast and even checking the whole archive doesn't take
more than 3 minutes :)

The problem before was, that I was running the script on a shared server with
*very* limited resource constraints.

But thanks for the offer!

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20141107154739.6173.88256@hoothoot



Re: inconsistent versions of M-A: same packages

2014-11-07 Thread Johannes Schauer
Hi,

Quoting Ralf Treinen (2014-11-07 17:35:06)
 It just appeared to me that we probably do not have a syntax to pinpoint a
 package built for a specific architecture. We meaning in this case dpkg,
 apt, and dose (if I am not mistaken).

No. We do have it.

 The usual trick in dose would be, for all package names that exist on
 multiple architectures and that are M-A=same, to create a pseudo package like
 this:
 
 Package: p-multi
 Depends: amd64:p, i386:p
 
 and then to check installability of all these pseudo packages against a
 background of all the real Packages files.

If the above is a Debian Packages file, then it must be the other way round.
First the name and then the architecture. Dose3 internally does the encoding
the other way round which is very confusing because it exposes this in its yaml
output. If you wanted to write a cudf file, then your example is correct except
that your : must be encoded as %3a.

 However, dose does currently not allow this syntax in dependencies, nor does
 dpkg TTBOMK.

Dose distcheck does not allow it but dose buildcheck does. This is probably a
bug in the distcheck frontend.

Dpkg and apt allow this just fine. Try to do:

apt-get install --simulate gcc-4.9-arm-linux-gnueabihf

And you will end up with a number of armhf packages on your system (you have to
enable armhf beforehand of course).

 Internally, dose already identifies packages by a triple
 (architecture,name,version), so it should be only a question of extending the
 input language.
 
 Once we can teach dose to accept the pseudo packages as described above we
 could run it with all the Packages files for all archiectures, which makes
 roughly 500.000 packages.

This might fail not only because of M-A:same conflicts but also because some
packages just conflict with each other through a normal Conflicts:. You
probably need a clever way to partition dependencies.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20141108054124.6173.66236@hoothoot



Re: inconsistent versions of M-A: same packages

2014-11-09 Thread Johannes Schauer
Hi,

Quoting Ralf Treinen (2014-11-09 15:58:15)
 On Sat, Nov 08, 2014 at 06:41:24AM +0100, Johannes Schauer wrote:
  Dpkg and apt allow this just fine. Try to do:
  
  apt-get install --simulate gcc-4.9-arm-linux-gnueabihf
  
  And you will end up with a number of armhf packages on your system (you 
  have to
  enable armhf beforehand of course).
 
 Interesting, I did not know this. Is this documented somewhere? I just looked
 through apt-get(1) man page and couldn't find it there.

it should definitely be documented in deb-control(5) but is not. I filed
#768842.

Otherwise, this is documented in https://wiki.ubuntu.com/MultiarchCross in
sections Cross-architecture dependencies and Toolchains. There is an
ambiguity in the docs whether support for them was introduced in dpkg
1.16.2 or 1.16.7. Confusingly, support seems to have been implemented in dpkg
git commit 7acf7afa which was released with version 1.16.5. In any case, wheezy
has 1.16.15, so it definitely supports this.

  This might fail not only because of M-A:same conflicts but also because
  some packages just conflict with each other through a normal Conflicts:.
  You probably need a clever way to partition dependencies.
 
 In my understanding these are precisely the cases which we want to find: 
 packages which are supposed to be co-installable for different archiectures
 (since they are M-A=same), but which are not for some reason.

Ah okay! Somehow I misunderstood your initial email that you wanted to say:

Depends: foo:i386, foo:amd64, ..., bar:i386, bar:amd64,...

But instead you just want...

Depends: foo:i386, foo:amd64, ...

...in one package and...

Depends: bar:i386, bar:amd64,...

... in the other, right? This sounds very useful, because it does not make
sense to mark a package M-A:same if they cannot actually be co-installed across
architectures.

Instead of creating dummy packages for this task, you can also use
dose-deb-coinstall for this job.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20141109161810.6173.86072@hoothoot



Re: inconsistent versions of M-A: same packages

2014-11-09 Thread Johannes Schauer
Hi,

Quoting Ralf Treinen (2014-11-09 18:05:15)
 But this does only one co-installability check at a time, right ?

correct, this makes your solution the better choice.

 Anyway, the script is very simple (attached).

Nifty! I didn't know that dose-debcheck can read from stdin!

 The raw result of a run for amd64 together with i386 can be found at [1].
 What one can see from a cursery inspection of that result :
 
 We have 4415 MA=same packages that exist both in amd and i386 (main/sid).
 I didn't expect it to be that many.
 
 1033 of them are not co-installable.
 
 Where they are not co-installable, the reason seems mostly to be that
 the packages have dependencies which are not MA-enabled. The first case in
 the list, for instance:
 
 audacious-dbg-pseudo is MA=same but depends on audacious which is MA=no.

On top of that it seems that there are many instances where the reason for a
package not being co-installable is a package from the same source package.
Thus, it would probably be very helpful to generate this information regularly
and display in the pts/tracker if a package makes another one
un-co-installable.

Here some quick results of why packages are not co-installable:

Missing:

 import yaml
 from collections import Counter
 d = yaml.load(open(out))
 Counter([p['reasons'][0].get('missing', 
 {'pkg':{'unsat-dependency':0}})['pkg']['unsat-dependency'] for p in 
 d['report']])

Gives as the top 10:

[unsat dependency]   [X times encountered]
ttf-bitstream-vera   22
dh-python18
poppler-data (= 0.4.5-3~) | gs-cjk-resource 16
augeas-lenses15
libgsf-1-common (= 1.14.30-2)   9
lxmenu-data  8
openmpi-common (= 1.6.5-9)   6
krb5-config  4
vlc-plugin-pulse 4
gnat 3

From a purely dependency point of view, the above would be solved by making the
packages depended upon by the first column Multi-Arch:foreign. Of course this
is not the technically correct solution in many cases.

Conflict:

 Counter([p['reasons'][0].get('conflict', 
 {'pkg1':{'package':0}})['pkg1']['package'] for p in d['report']])

Gives as the top 10:

[packages][makes X packages not co-installable]
perl-base 147
libtbb2   43
libglib2.0-dev35
libglu1-mesa-dev  32
libatlas3-base24
liblog4cpp5   22
libboost1.54-dev  21
libevdev2 20
libopenmpi1.6 14
libgupnp-1.0-413

From a purely dependency point of view, the above would be solved by making the
packages in the first column Multi-Arch:same. Of cource this is not the
technically correct solution in many cases.

Incidentally, I was just producing very similar results in the realm of
crossbuild satisfiability today. Unsurprisingly, the results look very similar
to the above. I posted a message about this to the debian-cross list today:

https://lists.debian.org/20141109152937.6173.82192@hoothoot

The important links from that message:

 1. http://bootstrap.debian.net/cross.html (regenerated daily with 550 source
packages)
 2. https://mister-muffin.de/p/Lc4-.html (static but all of sid)
 3. https://mister-muffin.de/p/xOJO.html (static and package selection as in 1.
but multiple reasons)

The two sections in all three above links are also Missing and Conflicts,
just as I made the destinction above with Ralf's results.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/2014111009.6173.73845@hoothoot



Re: floating point testsuites on softfloat buildds

2014-12-01 Thread Johannes Schauer
Hi,

Quoting Michael Banck (2014-12-01 14:22:12)
 3. If 1 but not 2 are OK, should there be a way for packages to say I should
really be built on a buildd without softfloat?
 
 One proposal might be to add something like XS-Buildd-Flags: hardfloat
 to debian/control for packages, which ship a floating-point heavy
 testsuite as a first step.  This could possibly be extended for other
 buildd machine-specific features (though I am not sure off-hand which
 would benefit).

I was recently told in #debian-mentors that one can mail
${arch}@buildd.debian.org to restrict the buildd's on which a package is built
for architecture ${arch}. This might be able to solve your problem for now.

I would welcome a way that allows adding metadata to my source packages which
restricts the selection of buildd's it's built on.

For example I recently removed the --parallel argument from the dh invocation
in the d/rules of my package vcmi because individual calls to c++ easily eat
up to 2.3 GB of memory which leads to failures due to heavy swapping on buildds
that set DEB_BUILD_OPTIONS=parallel=5 but only have 4 GB of physical RAM.

So in addition to asking for hardfloat it would be handy if one could specify
the required memory consumption as a function of parallel jobs such that either
the right buildd can be selected or the number of jobs can be reduced
accordingly.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20141201144756.6173.44130@hoothoot



Re: Can/should we have an efi/efi-any platform architecture?

2014-12-12 Thread Johannes Schauer
Hi,

Quoting Simon McVittie (2014-12-11 21:49:55)
 At a source package granularity, you can fake it by having a (possibly
 spurious) Build-Depends on the required package, which will put the
 requiring package in BD-Uninstallable state (e.g.
 https://buildd.debian.org/status/package.php?p=gtk-sharp3 explains why
 gtk-sharp3 isn't built on mips, which doesn't have mono).

Either please don't add known-unused build dependencies as this will just make
the dependency graph bigger and life for bootstrappers harder or, once jessie
is released, if you feel you must, then add them with a !stage1 (or similar
- not sure what would best apply here) build profiles restriction.

 That doesn't work for individual binary packages unless you hard-code
 architecture lists, though (e.g. a C library with an optional Java or C#
 binding would need to hard-code the Java/C# architectures).
 
 Perhaps this could be a build-profile?
 
 Source: dbus
 Build-Depends: ..., valgrind-dev archfeature.valgrind, ...
 
 Source: libfoo
 ...
 Package: libfoo-sharp
 Architecture: any
 Build-Profiles: archfeature.mono

Firstly, the build profile spec was revised during the bootstrap sprint in
Paris and what will end up in Jessie now does not have namespaces anymore. The
reasoning is fully explained in the sprint result email section 6.2:

https://lists.debian.org/debian-devel-announce/2014/08/msg00013.html

 Maybe we could even use package names as the features, so each feature in the
 archfeature namespace is automatically said to be available iff the package
 exists in apt? That covers the common interpreter that needs porting case,
 although I don't know whether there's anything like an efi-dev that could act
 as the flag for EFI architectures.
 
 Other possible colours for this bike shed include pkgexists.valgrind,
 with.valgrind, or (with the opposite sense) without.valgrind,
 missing.valgrind.

Secondly, what you are expressing with:

valgrind-dev archfeature.valgrind

is that you do or do not depend on the package valgrind-dev depending on
whether or not archfeature.valgrind evaluates to true (however this is
resolved).

Build profiles are NOT meant for tagging purposes but for conditional
selection of build dependencies. The disjunctive normal form expression of
build profiles does not make sense for tagging purposes as needed for this
use case (archfeature.valgrind is used like a tag that adds meaning to the
build dependency valgrind-dev).

For this reason I don't think that build profiles will solve this problem.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20141212104050.15300.84986@hoothoot



Re: Can/should we have an efi/efi-any platform architecture?

2014-12-12 Thread Johannes Schauer
Hi,

Quoting Dimitri John Ledkov (2014-12-11 22:28:07)
 And it will require a long time to be used. Imho this smells more like
 a build profile e.g.
 BuildDepends: does-not-implement-efi !efi
 
 That way on non-efi implementing architectures the package will get
 stuck in a dep-wait state.

I wouldn't say it smells like a use for build profiles because it would
require builders to set the DEB_BUILD_PROFILES variable on known architectures.
Depending on whether or not you see it as one, this might open a can of worms
because this technique could then be abused for other non-efi source packages
which should also only be built on a certain set of architectures.  This in
turn will increase the amount of existing build profile names which is
currently a well defined set of cardinality six.

Depending on whether or not you want Debian to use build profiles more like
Gentoo USE flags (Debian build profiles are equally powerful in what they allow
to express) instead of limiting build profiles to special situations like
bootstrapping or cross building, this increase of build profile names might be
a good or a bad thing.

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/2014121232.15300.26065@hoothoot



Using build profiles beyond bootstrappingcross (was: Re: Can/should we have an efi/efi-any platform architecture?)

2014-12-12 Thread Johannes Schauer
Hi,

Quoting Simon McVittie (2014-12-12 12:09:05)
 Yes, but I think that's exactly what I want for dbus' use-case? I want
 to build-depend on valgrind (I thought it was valgrind-dev, but it's
 actually valgrind) on exactly those architectures to which valgrind has
 been ported, so that the debug flavour of libdbus can have its
 optional valgrind instrumentation on those architectures; but on
 architectures to which valgrind has not yet been ported, dbus still
 needs to produce working binaries.
 
 Some packages solve this by copying (a random snapshot of) the valgrind
 headers into their source code, but I'd prefer to minimize the number of
 embedded code copies.
 
 At the moment that's:
 
 Build-Depends: ..., valgrind [amd64 armhf i386 mips mipsel powerpc ppc64
 s390x], ...
 
 which is an inconvenient amount of hard-coding, and has led to one RC
 bug already (when valgrind dropped support for armel). With build
 profiles (which I'll reinstate in unstable when jessie becomes stable)
 it would be something like:
 
 Build-Depends: ..., valgrind [amd64 armhf i386 mips mipsel powerpc ppc64
 s390x] !stage1, ...
 
 but I'd rather have
 
 Build-Depends: ..., valgrind arch-where-valgrind-exists !stage1, ...
 
 or whatever spelling.

okay. I get you now.

Debian build profiles can express what USE flags do for Gentoo. What you
probably want is:

Build-Depends: ..., valgrind !without-valgrind, ...

No need for the !stage1 because you will probably have the without-valgrind
build profile activated during a bootstrap unless you already have valgrind.

Then buildds could set DEB_BUILD_PROFILES=without-valgrind on architectures
without valgrind.

Whether you call it valgrind or without-valgrind depends on what you want
the default to be. In this regard, Debian build profiles work opposite to
Gentoo USE flags. By default, no build profile is active which in Debian means:
build everything with all features active. If no USE flag is enabled in Gentoo
you get a very minimal build.

Thus, if you want the default build to build *with* valgrind, then your profile
should be named without-valgrind and only be set when you want to build
without it (for example during bootstrapping or on architectures that don't
have valgrind).

 Similarly, db5.3 has
 
 Build-Depends: ..., default-jdk [!m68k], ...
 (and other Java things on [!m68k])
 
 and gdcm has
 
 Build-Depends: ..., cli-common-dev (= 0.8~) [amd64 armel i386
 kfreebsd-amd64 kfreebsd-i386 powerpc ppc64 s390x], ...
 (and other Mono things on those architectures)
 
 but there'd be no need for the Java and Mono maintainers to coordinate
 these ad-hoc architecture lists with other maintainers via bugs like
 #719842, #575138, #541612, #477855, #699379, #657779 if packages like
 db5.3 and gdcm could instead say:
 
 Build-Depends: ..., default-jdk arch-where-java-exists, ...
 Build-Depends: ..., cli-common-dev arch-where-mono-exists, ...

It is entirely possible to add build profile names for a bunch of stuff like
valgrind, java and mono (they would probably just be called without-valgrind,
without-java and without-mono - or s/without/no/).

The question is, whether the Debian project wants to extend build profiles
beyond it's current limited use for bootstrapping and cross building and thus
make them more like Gentoo USE flags?

This also means that if somebody builds the package locally on an architecture
without valgrind, for example, then they must not forget to without-valgrind
build profile or they will trigger a FTBFS. Thus it probably makes more sense
to let the list of profiles that are active by default be stored somewhere on
the system (which is also how it's done in Gentoo for USE flags). A good place
for such a hypothetical list is probably dpkg. In that case, the buildds would
also not need to do anything special when building.

Should that be done, it probably also makes sense to add a facility to
overwrite the default. In Gentoo they prefix a minus. In Debian, the most
logical syntax would probably be the exclamation mark. So to enable valgrind on
an architecture that doesn't have it would then be like:

DEB_BUILD_PROFILES=!without-valgrind dpkg-buildpackage

or

dpkg-buildpckage -P!without-valgrind

You could then even go one step further and say: if dpkg stores a list of build
profiles that are activated by default on an architecture, then the default
list of active build profiles is not empty and there is no need to have a
without-valgrind profile because the valgrind profile could be active by
default on architectures with valgrind. This would make it quite a bit more
readable and even more similar to Gentoo :P

Thoughts?

cheers, josch


--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of unsubscribe. Trouble? Contact listmas...@lists.debian.org
Archive: https://lists.debian.org/20141212114840.15300.27739@hoothoot



  1   2   3   4   5   6   >