Support for *-config scripts in dpkg-cross
Dear dpkg-cross maintainers,
since my lasting posting was ignored, I try it again.
I implemented support for /usr/bin/*-config scripts within dpkg-cross.
I touched the dpkg-buildpackage wrapper to ensure the right *-config scripts
are run when cross compiling a package (e.g. /usr/i586-.../bin/sdl-config
instead of /usr/bin/sdl-config).
I also touched dpkg-cross to correct the library and include paths which
the *-config file returns.
Additionally, some minor bug and typos are fixed.
I didn't correct the version number to 1.28, because it will have to be
changed anyway before the next upload.
I hope you like that patch and include it into the next upload of
dpkg-cross.
Greets,
Volker
--
Volker Grabsch
---<<(())>>---
Administrator
NotJustHosting GbR
diff -r a8bec60c5eab -r 030818358c74 dpkg-cross-1.28/dpkg-buildpackage
--- a/dpkg-cross-1.28/dpkg-buildpackage Sun Jun 04 20:57:12 2006 +0200
+++ b/dpkg-cross-1.28/dpkg-buildpackage Thu Jun 08 02:09:43 2006 +0200
@@ -83,7 +83,8 @@ else {
}
# Set up gccross usage. Create a temporary directory, put symlinks for gccross there,
-# and prepent it to PATH
+# and prepend it to PATH. Also, put the *-config scripts there and set the *_CONFIG
+# environment variables.
if ($do_setup) {
$gccrossdir = create_tmpdir('gccross');
die "$progname: failed to create temporary directory: $!\n" unless $gccrossdir;
@@ -98,6 +99,14 @@ if ($do_setup) {
closedir(D);
}
}
+ if (opendir(D, $crossbin)) {
+ for $f_ (readdir(D)) {
+ next unless ($f_ =~ /^([a-z0-9]+)-config$/);
+ symlink("$crossbin/$f_", "$gccrossdir/$f_");
+ $ENV{uc($1).'_CONFIG'} = "$crossbin/$f_";
+ }
+ closedir(D);
+ }
$ENV{'PATH'} = "$gccrossdir:" . $ENV{'PATH'};
}
diff -r a8bec60c5eab -r 030818358c74 dpkg-cross-1.28/dpkg-cross
--- a/dpkg-cross-1.28/dpkg-cross Sun Jun 04 20:57:12 2006 +0200
+++ b/dpkg-cross-1.28/dpkg-cross Thu Jun 08 02:09:43 2006 +0200
@@ -356,7 +356,7 @@ sub sub_build {
#
# *.la files in library directories are also copied, and library
# and paths are modified there. Same about usr/lib/pkgconfig/*.pc
- # files.
+ # files and usr/bin/*-config scripts.
#
# Symlinks are copied (and modified appropriately) if their
# destanation is copied. Also, symlinks to non-existing shared libraries
@@ -502,6 +502,41 @@ sub sub_build {
}
close(FROM);
close(TO);
+ return 1;
+ }
+
+ # Helper: fix *-config script.
+ # Change any occurance of
+ # * /lib, /usr/lib, /usr/X11R6/lib -> $crosslib
+ # * /usr/include -> $crossinc
+ # * /usr -> $crossdir
+ sub fix_config_script ($$) {
+ my ($from, $to) = @_;
+ ensure_dir($to) or return 0;
+ if (! open(FROM, $from)) {
+ warn "$progname: failed to open $from: $!\n";
+ return 0;
+ }
+ if (! open(TO, ">$to")) {
+ warn "$progname: failed to open $to for writing: $!\n";
+ close(FROM);
+ return 0;
+ }
+ while (<FROM>) {
+ s/$crosslib/\@crosslib\@/g;
+ s/$crossinc/\@crossinc\@/g;
+ s/$crossdir/\@crossdir\@/g;
+ s/(\/usr|\$(exec_)?prefix|\${(exec_)?prefix})(\/X11R6)?\/lib/\@crosslib\@/g;
+ s/(\/usr|\$(exec_)?prefix|\${(exec_)?prefix})\/include/\@crossinc\@/g;
+ s/\/usr/\@crossdir\@/g;
+ s/\@crosslib\@/$crosslib/g;
+ s/\@crossinc\@/$crossinc/g;
+ s/\@crossdir\@/$crossdir/g;
+ print TO;
+ }
+ close(FROM);
+ close(TO);
+ chmod(0755, $to);
return 1;
}
@@ -524,14 +559,14 @@ sub sub_build {
# regular .a or .o file under /usr/lib64 or /usr/X11R6/lib64
link_file("$src$_", "$dst$crosslib64/$2") or goto fail;
} elsif (/^(\/usr(\/X11R6)?)?\/lib\/([^\/]+\.so[^\/]*)$/) {
- # regilar .so* file under /lib, /usr/lib or /usr/X11R6/lib
+ # regular .so* file under /lib, /usr/lib or /usr/X11R6/lib
if (is_ldscript("$src$_")) {
fix_ldscript("$src$_", "$dst$crosslib/$3") or goto fail;
} else {
link_file("$src$_", "$dst$crosslib/$3") or goto fail;
}
} elsif (/^(\/usr(\/X11R6)?)?\/lib64\/([^\/]+\.so[^\/]*)$/) {
- # regilar .so* file under /lib64, /usr/lib64 or /usr/X11R6/lib64
+ # regular .so* file under /lib64, /usr/lib64 or /usr/X11R6/lib64
if (is_ldscript("$src$_")) {
fix_ldscript("$src$_", "$dst$crosslib64/$3") or goto fail;
} else {
@@ -543,10 +578,13 @@ sub sub_build {
} elsif (/^\/usr(\/X11R6)?\/lib64\/([^\/]+\.la)$/) {
# regular .la file under /usr/lib64 or /usr/X11R6/lib64
fix_la_file("$src$_", "$dst$crosslib64/$2", $crosslib64) or goto fail;
- } elsif (/\/usr\/lib\/(pkgconfig\/[^\/]+.pc)$/) {
+ } elsif (/^\/usr\/lib\/(pkgconfig\/[^\/]+.pc)$/) {
# regular .pc file in /usr/lib/pkgconfig
fix_pc_file("$src$_", "$dst$crosslib/$1") or goto fail;
# not for lib64: I don't know if there is any rationale
+ } elsif (/^\/usr\/bin\/([^\/]+-config)$/) {
+ # regular *-config file in /usr/bin
+ fix_config_script("$src$_", "$dst$crossbin/$1") or goto fail;
} else {
# everything else
next;
Reply to: