Source: equivs
Version: 2.0.9
Severity: wishlist
Tags: patch

It can be necessary for an equivs package to contain a link. For
example when the files it is pretending are present _are_ actually
present, but in the wrong place on the system. This patch gives it
support for a Links: section that will create such links in the
package, much as it already does for files. 

I have also added a section to the pod file, the template and included
an example control file using this feature.

Oh, and I fixed some typos in the README. 

The example where it is needed is for supplying fake multiarch
packages for things which have not yet been multiarched, such as
libraries supplied by cross-compilers (libgcc1, and libstdc++6). These
libraries do exist on the system if the cross-toolchain is installed,
but are in libstdc++6-dev-<arch>cross instead of in libstdc++6-dev:<arch>

An equivs package of libstdc++6-dev:<arch> needs a link pointing to the
real library so that builds expecting that library will find it.

This functionality is currently a vital part of the multiarch
cross-building mechanisms, at least until we get cross-toolchains with
fully multiarched internal libraries. And the mechanism is likely to
have many other uses too.

-- System Information:
Debian Release: 6.0.7
  APT prefers stable
  APT policy: (990, 'stable')
Architecture: i386 (i686)

Kernel: Linux 2.6.32.33-kvm-i386-20111128-dirty (SMP w/1 CPU core)
Locale: LANG=en_GB.UTF-8, LC_CTYPE=en_GB.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/bash
Description: Add Support for links
 This patch allows an equivs package to contain links, which can be
 useful for 'pointing' to the real files the fake dependency should be
 supplying.
 .
Author: Wookey <[email protected]>

diff -Nru equivs-2.0.9+multiarch2/debian/README.Debian 
equivs-2.0.9+multiarch3/debian/README.Debian
--- equivs-2.0.9+multiarch2/debian/README.Debian        2006-02-04 
07:57:15.000000000 +0000
+++ equivs-2.0.9+multiarch3/debian/README.Debian        2013-02-23 
21:19:01.000000000 +0000
@@ -19,11 +19,11 @@
 -----------------------
 
 I once made this package based on my preference to run my own
-installation of teTeX in "/usr/local/" because i didn't want to
+installation of teTeX in "/usr/local/" because I didn't want to
 depend on any package maintainer's update frequency. On the other
-hand i still wanted to take advantage of other TeX/LaTeX packages
+hand I still wanted to take advantage of other TeX/LaTeX packages
 which depend upon the Debian teTeX packages. While Debian's teTeX
-maintainer does an incredibly fine job i wanted to be able to
+maintainer does an incredibly fine job I wanted to be able to
 take advantage of Thomas Esser's update shell scripts as soon as
 they come out. In this very special case the needed "Provides:"
 field of the 'equivs' control file had to contain the entries
diff -Nru equivs-2.0.9+multiarch2/debian/equivs-build.pod 
equivs-2.0.9+multiarch3/debian/equivs-build.pod
--- equivs-2.0.9+multiarch2/debian/equivs-build.pod     2013-02-25 
12:51:17.000000000 +0000
+++ equivs-2.0.9+multiarch3/debian/equivs-build.pod     2013-02-25 
12:51:55.000000000 +0000
@@ -77,6 +77,17 @@
   Files: foo-cron /etc/cron.d/
    foo-cron-helper /usr/local/bin/
 
+=item Links:
+
+Links to be created in some directory of the created package. Each
+line contains two paths. The first is the path that the generated
+symlink points at; the second is the name of the symlink file (The
+same order as 'ln -s').  As with other multi-line headers, all lines
+but the first must be indented.  Example: 
+
+  Links: /usr/aarch64-linux-gnu/lib/libfoo.so 
/usr/lib/aarch64-linux-gnu/libfoo.so
+   /file/to/symlink/to  /symlink/file/name 
+
 =item File:
 
 Files to be copied into some directory of the created package,
diff -Nru equivs-2.0.9+multiarch2/examples/libstdc++6-dev.ctl 
equivs-2.0.9+multiarch3/examples/libstdc++6-dev.ctl
--- equivs-2.0.9+multiarch2/examples/libstdc++6-dev.ctl 1970-01-01 
00:00:00.000000000 +0000
+++ equivs-2.0.9+multiarch3/examples/libstdc++6-dev.ctl 2013-02-25 
12:35:06.000000000 +0000
@@ -0,0 +1,16 @@
+# Package to generate fake dependency (and links) for libraries provided by
+# cross-compilers. Built with equivs-build --arch <HOST arch>. 
+# e.g. equivs-build --arch armhf libstdc++6-dev
+Section: misc
+Priority: optional
+Standards-Version: 3.6.2
+
+Package: libstdc++6-dev
+Source: gcc-4.7
+Version: 4.7.2-22
+Maintainer: Wookey <[email protected]>
+Multi-Arch: same
+Description: Virtual package to satisfy build dependencies for arm64
+ The current toolchain contains the required libraries, but as -cross
+ packages. This suffices until things are fully multiarched.
+Links:  /usr/lib/gcc-cross/arm-linux-gnueabihf/4.7/libstdc++.so 
/usr/lib/arm-linux-gnueabihf/libstc++.so
diff -Nru equivs-2.0.9+multiarch2/usr/bin/equivs-build 
equivs-2.0.9+multiarch3/usr/bin/equivs-build
--- equivs-2.0.9+multiarch2/usr/bin/equivs-build        2013-02-23 
21:17:45.000000000 +0000
+++ equivs-2.0.9+multiarch3/usr/bin/equivs-build        2013-02-25 
12:52:17.000000000 +0000
@@ -69,6 +69,12 @@
         unless m:^\s*(\S+)\s+(\S+)/?\s*$:;
     $install_files{"$2/$1"} = $1;
 }
+my %create_links = ();
+for (split "\n", $control{'Links'} || "") {
+    die "Cannot parse Links line: '$_'\n"
+        unless m:^\s*(\S+)\s+(\S+)/?\s*$:;
+    $create_links{"$2"} = $1;
+}
 my %create_files = ();
 for (@{$control{'File'} || []}) {
   if (m/^\s*(\S+)(?:\s+(\d+))?\s*\n(.*)$/s) {
@@ -83,7 +89,7 @@
 mkdir "$builddir/install", 0755;
 open INSTALL, '>', "$builddir/debian/install" or
   die "Cannot open $builddir/debian/install for writing: $!\n";
-foreach my $target (keys %install_files, keys %create_files) {
+foreach my $target (keys %install_files, keys %create_files, keys 
%create_links) {
   $target =~ s/ +//g;
   my $dest;
   my $cnt = 0;
@@ -105,6 +111,10 @@
       or die "Cannot copy $file to $dest: $!\n";
     chmod -x $file ? 0755 : 0644, $dest
       or die "Cannod chmod $dest: $!\n";
+  } elsif (defined $create_links{$target}) {
+    my $file = $create_links{$target};
+    symlink ($file, $dest)
+      or die "Cannot create symlink $dest pointing to $file: $!\n";
   } else {
     my ($content, $mode) = @{$create_files{$target}};
     open CREATE, '>', $dest
diff -Nru equivs-2.0.9+multiarch2/usr/share/equivs/template.ctl 
equivs-2.0.9+multiarch3/usr/share/equivs/template.ctl
--- equivs-2.0.9+multiarch2/usr/share/equivs/template.ctl       2013-02-23 
21:17:45.000000000 +0000
+++ equivs-2.0.9+multiarch3/usr/share/equivs/template.ctl       2013-02-25 
12:45:52.000000000 +0000
@@ -21,6 +21,7 @@
 # Changelog: <changelog file; defaults to a generic changelog>
 # Readme: <README.Debian file; defaults to a generic one>
 # Extra-Files: <comma-separated list of additional files for the doc directory>
+# Links: <pair of space-separated paths; First is path symlink points at, 
second is filename of link>
 # Files: <pair of space-separated paths; First is file to include, second is 
destination>
 #  <more pairs, if there's more than one file to include. Notice the starting 
space>
 Description: <short description; defaults to some wise words> 

Reply via email to