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

Re: Using perl to build perl



On 16 April 2016 at 19:20, Niko Tyni <ntyni@debian.org> wrote:
> For a long time, src:perl has had some limited support for bootstrapping a
> new architecture without /usr/bin/perl.  We've gone to quite some trouble
> to avoid needing perl to build perl as far as possible, including quite
> a few sed scripts and a 600-line monstrous debian/rules file so we don't
> need debhelper. However, things like dpkg-shlibdeps and dpkg-gencontrol
> which are required for building .deb packages are #!/usr/bin/perl scripts,
> so this is arguably somewhat ineffective.

This was added at the request of porters in 2001 or so.  I can't find
anything in my mail archives from the time, so I suspect that the
conversation was on IRC and would guess one of ia64 or hppa which were
the ports in flight around that time.

Initially I just included a subset of debhelper, which I updated
periodically to break a circular build-dependency b/w perl and
debhelper, but eventually removed the debhelper bits entirely, and
arranged debian/rules such that perl was not used at all until
perl.static was available, and checkperl was run prior to any indirect
execution (dpkg-shlibdeps, dpkg-gencontrol) with instructions to make
those work: in hindsight, those could have probably been silently
handled by executing them using the built perl.static.

At the time this was definitely tested in a chroot, but skimming the
rules file now I can see that there are places where stuff has crept
in: use of dpkg-architecture and dpkg-parsechangelog stick out
immediately.

> So if we started to build-depend on debhelper and therefore transitively
> perl, would anybody actually care?

I'm fairly confident that there would be complaints if you made that change:

  https://wiki.debian.org/DebianBootstrap
  https://wiki.debian.org/CircularBuildDependencies

This looks interesting though:

  https://wiki.debian.org/BuildProfileSpec

It appears that it may be possible to do something like this:

  Package: perl-stage1
  Build-Profiles: <stage1>
  Architecture: any
  ...

  Package: perl-base
  Build-Profiles: <!stage1>
  Architecture: any
  Conflicts: perl-stage1
  Replaces: perl-stage1
  ...

similarly add "Build-Profiles: <!stage1>" to all other packages.  Then
change debian/rules to contain:

  ifneq ($(filter stage1,$(DEB_BUILD_PROFILES)),)
    include debian/rules.stage1
  else
    include debian/rules.standard
  endif

debian/rules.standard would contain what debian/rules does now, but
cleaned up to use debhelper.

A basic debian/rules.stage1 is attached.  It's not particularly
pretty, but appears to work and shouldn't need to change much.

I presume that once all of this is done, debhelper can then depend on
"perl | perl-stage1", which would allow the normal perl packages to
build-depend on debhelper.

Looping in Wookey who from the authorship of some of those documents
may be able to add more knowledgeable suggestions.

--bod

Attachment: rules.stage1
Description: Binary data


Reply to: