2002-03-25 23:16:26 +03:00
# Makefile for rpm scripts.
AUTOMAKE_OPTIONS = 1.4 foreign
EXTRA_DIST = \
2002-03-26 00:51:30 +03:00
brp-adjust_libraries brp-alt brp-bytecompile_python \
2002-10-02 19:08:15 +04:00
brp-cleanup brp-compress brp-fix-perms brp-fixup brp-strip brp-verify_elf \
2003-11-08 22:46:35 +03:00
compress_files check-files convertrpmrc.sh cross-build \
2002-03-26 00:51:30 +03:00
delayed_rebuilddb find-lang find-package find-prov.pl find-req.pl \
2002-10-02 19:08:15 +04:00
cpanflute cpanflute2 Specfile.pm find-provides.perl find-requires.perl \
2003-11-26 12:01:23 +03:00
fixup-binconfig fixup-pkgconfig fixup-libtool fixup-libraries \
2002-10-02 19:08:15 +04:00
get_magic.pl getpo.sh http.req \
2007-03-07 15:24:04 +03:00
files.req files.req.files files.req.list \
functions magic.prov magic.req \
2007-03-06 23:32:51 +03:00
ldd lib.req lib.req.files lib.prov lib.prov.files shlib.req.awk \
2007-03-09 17:52:09 +03:00
pam.req pam.req.files pam.prov pam.prov.files perl.prov perl.req \
2007-10-29 14:16:35 +03:00
pkgconfig.req pkgconfiglib.req pkgconfig.req.files \
2006-02-02 04:51:38 +03:00
rpmdiff rpmdiff.cgi rpm.daily rpm.log rpm.xinetd rpm2cpio.sh \
factored shebang.req
This is the dependency generator for #! lines.
shebang.req.files makes sure that only executable scripts are processed.
Here is why I chose the "shebang" name.
From Jargon File (4.3.1, 29 Jun 2001) [jargon]:
shebang /sh*-bang/ n. The character sequence "#!" that frequently
begins executable shell scripts under Unix. Probably derived from "shell
bang" under the influence of American slang "the whole shebang"
(everything, the works).
$ cd /usr/lib/perl5/pod
$ grep -i sharpbang *
perltoc.pod:C<shar>, C<sharpbang>, C<shmattype>, C<shortsize>, C<shrpenv>, C<shsharp>,
$ grep -i shebang *
perl58delta.pod:The command-line options -s and -F are now recognized on the shebang
perlbs2000.pod:BS2000 POSIX doesn't support the shebang notation
perlfaq3.pod:batch file and codify it in C<ALTERNATE_SHEBANG> (see the
perlfaq7.pod:line in your perl script (the "shebang" line) does not contain the
perlfaq7.pod:where you expect it so you need to adjust your shebang line.
perlfaq8.pod:but my shebang line is not the path to perl, so the shell runs the
perlglossary.pod:=item shebang
perljp.pod: "shebang"ѹǡJperlѤscriptΤۤȤɤѹʤѲǽȻפޤ
perlplan9.pod:such as "#!/usr/local/bin/perl". This is known as a shebang
perlplan9.pod:shebang path from config information located in Plan 9
perlport.pod:sub-systems do not support the C<#!> shebang trick for script invocation.
perlport.pod:OS/390 will support the C<#!> shebang trick in release 2.8 and beyond.
perlrun.pod:C<ALTERNATE_SHEBANG> (see the F<dosish.h> file in the source
perltoc.pod:serialization, server, service, setgid, setuid, shared memory, shebang,
perlwin32.pod:Perl scripts on UNIX use the "#!" (a.k.a "shebang") line to
$
2007-03-06 02:20:57 +03:00
shebang.req shebang.req.files \
2007-03-06 00:40:45 +03:00
shell.req shell.req.files shell.prov shell.prov.files \
2007-03-06 23:32:51 +03:00
sql.prov sql.req strip_files \
2007-03-07 12:36:29 +03:00
static.req static.req.files \
implemented symlinks.req
Consider R-devel package, which has its own private bin/ directory,
where it keeps certain scripts.
$ rpm -ql R-devel |grep libtool
/usr/lib/R/bin/libtool
$ rpm -ql R-devel |grep texi2dvi
/usr/lib/R/bin/texi2dvi
$
I replace some scripts, such as libtool, with wrappers:
$ tail -1 /usr/lib/R/bin/libtool
exec /usr/bin/libtool "$@"
$
R-devel now has a libtool dependency, generated by shell.req:
$ rpm -qR R-devel |grep libtool
libtool-common
$ rpm -qf /usr/bin/libtool
libtool-common-0.2-alt1
$
However, I want the very same dependency SIMPLY BY PLACING SYMBOLIC LINK
to /usr/bin/libtool. My new script symlinks.req implements this idea.
It works as follows:
1) We check all absolute symbolic links, e.g. -> /usr/bin/libtool.
If symbolic link is absolute, we fetch its value and feed to FindPackage.
Note that FindPackage will first check whether e.g. /usr/bin/libtool is
available under RPM_BUILD_ROOT.
2) We also check all broken symbolic links, e.g. -> ../../../bin/libtool.
The fact that symbolic link is broken means that it cannot be resolved into
buildroot and otherwise must be resolved in the host system after the package
is installed, which is the dependency on where it would point to after install.
This means we must canonicalize the link value, strip RPM_BUILD_ROOT,
and then call FindPackage. Here is what happens:
$ cd `mktemp -d`
$ RPM_BUILD_ROOT=$PWD
$ mkdir -p ./usr/lib/R/bin/
$ ln -s `relative /usr/bin/libtool /usr/lib/R/bin/libtool` $RPM_BUILD_ROOT/usr/lib/R/bin/libtool
$ l $RPM_BUILD_ROOT/usr/lib/R/bin/libtool
lrwxrwxrwx 1 at at 20 Mar 9 22:14 /tmp/.private/at/tmp.AHnBX26473/usr/lib/R/bin/libtool -> ../../../bin/libtool
$ [ -e $RPM_BUILD_ROOT/usr/lib/R/bin/libtool ] || echo broken
broken
$ readlink -vm $RPM_BUILD_ROOT/usr/lib/R/bin/libtool
/tmp/.private/at/tmp.AHnBX26473/usr/bin/libtool
$ to=`!!`; echo ${to#$RPM_BUILD_ROOT}
/usr/bin/libtool
$
And then FindPackage is called with "/usr/bin/libtool".
Now note that if FindPackage is not able to associate e.g. /usr/bin/libtool
with any particular rpm package, it will just place raw dependency on
/usr/bin/libtool. So, this new type of dependencies is a bit dangerous:
basically for each really broken symbolic link there will be an unmet
dependency. On the other hand, this can be viewed as a means of protection
from packages with really broken symbolic links.
If you are frightened with this brand new and dangerous type of dependencies,
please also note that this new type of dependencies is not much more dangerous
than absolute paths to executables in plain shell scripts.
$ /usr/lib/rpm/shell.req -v /dev/stdin <<</i/am/unmet
error: file /i/am/unmet: No such file or directory
shell.req: /dev/stdin: /i/am/unmet -> /i/am/unmet (raw, not found)
/i/am/unmet
$
2007-03-09 21:11:03 +03:00
symlinks.req symlinks.req.files \
2006-01-11 03:39:39 +03:00
tcl.req trpm u_pkg.sh verify-elf vpkg-provides.sh vpkg-provides2.sh
2002-03-25 23:16:26 +03:00
installprefix = $( DESTDIR)
all :
configdir = ${ prefix } /lib/rpm
config_SCRIPTS = \
2002-03-26 00:51:30 +03:00
brp-adjust_libraries brp-alt brp-bytecompile_python \
2002-10-02 19:08:15 +04:00
brp-cleanup brp-compress brp-fix-perms brp-fixup brp-strip brp-verify_elf \
2003-11-08 22:46:35 +03:00
compress_files check-files convertrpmrc.sh cross-build \
2002-03-26 00:51:30 +03:00
delayed_rebuilddb find-lang find-package find-prov.pl find-req.pl \
2002-10-02 19:08:15 +04:00
cpanflute cpanflute2 Specfile.pm find-provides.perl find-requires.perl \
2003-11-26 12:01:23 +03:00
fixup-binconfig fixup-pkgconfig fixup-libtool fixup-libraries \
2002-10-02 19:08:15 +04:00
get_magic.pl getpo.sh http.req \
2007-03-07 15:24:04 +03:00
files.req files.req.files files.req.list \
functions magic.prov magic.req \
2007-03-06 23:32:51 +03:00
ldd lib.req lib.req.files lib.prov lib.prov.files shlib.req.awk \
2007-03-09 17:52:09 +03:00
pam.req pam.req.files pam.prov pam.prov.files perl.prov perl.req \
2007-10-29 14:16:35 +03:00
pkgconfig.req pkgconfiglib.req pkgconfig.req.files \
2006-02-02 04:51:38 +03:00
rpmdiff rpmdiff.cgi rpm.daily rpm.log rpm.xinetd rpm2cpio.sh \
factored shebang.req
This is the dependency generator for #! lines.
shebang.req.files makes sure that only executable scripts are processed.
Here is why I chose the "shebang" name.
From Jargon File (4.3.1, 29 Jun 2001) [jargon]:
shebang /sh*-bang/ n. The character sequence "#!" that frequently
begins executable shell scripts under Unix. Probably derived from "shell
bang" under the influence of American slang "the whole shebang"
(everything, the works).
$ cd /usr/lib/perl5/pod
$ grep -i sharpbang *
perltoc.pod:C<shar>, C<sharpbang>, C<shmattype>, C<shortsize>, C<shrpenv>, C<shsharp>,
$ grep -i shebang *
perl58delta.pod:The command-line options -s and -F are now recognized on the shebang
perlbs2000.pod:BS2000 POSIX doesn't support the shebang notation
perlfaq3.pod:batch file and codify it in C<ALTERNATE_SHEBANG> (see the
perlfaq7.pod:line in your perl script (the "shebang" line) does not contain the
perlfaq7.pod:where you expect it so you need to adjust your shebang line.
perlfaq8.pod:but my shebang line is not the path to perl, so the shell runs the
perlglossary.pod:=item shebang
perljp.pod: "shebang"ѹǡJperlѤscriptΤۤȤɤѹʤѲǽȻפޤ
perlplan9.pod:such as "#!/usr/local/bin/perl". This is known as a shebang
perlplan9.pod:shebang path from config information located in Plan 9
perlport.pod:sub-systems do not support the C<#!> shebang trick for script invocation.
perlport.pod:OS/390 will support the C<#!> shebang trick in release 2.8 and beyond.
perlrun.pod:C<ALTERNATE_SHEBANG> (see the F<dosish.h> file in the source
perltoc.pod:serialization, server, service, setgid, setuid, shared memory, shebang,
perlwin32.pod:Perl scripts on UNIX use the "#!" (a.k.a "shebang") line to
$
2007-03-06 02:20:57 +03:00
shebang.req shebang.req.files \
2007-03-06 00:40:45 +03:00
shell.req shell.req.files shell.prov shell.prov.files \
2007-03-06 23:32:51 +03:00
sql.prov sql.req strip_files \
2007-03-07 12:36:29 +03:00
static.req static.req.files \
implemented symlinks.req
Consider R-devel package, which has its own private bin/ directory,
where it keeps certain scripts.
$ rpm -ql R-devel |grep libtool
/usr/lib/R/bin/libtool
$ rpm -ql R-devel |grep texi2dvi
/usr/lib/R/bin/texi2dvi
$
I replace some scripts, such as libtool, with wrappers:
$ tail -1 /usr/lib/R/bin/libtool
exec /usr/bin/libtool "$@"
$
R-devel now has a libtool dependency, generated by shell.req:
$ rpm -qR R-devel |grep libtool
libtool-common
$ rpm -qf /usr/bin/libtool
libtool-common-0.2-alt1
$
However, I want the very same dependency SIMPLY BY PLACING SYMBOLIC LINK
to /usr/bin/libtool. My new script symlinks.req implements this idea.
It works as follows:
1) We check all absolute symbolic links, e.g. -> /usr/bin/libtool.
If symbolic link is absolute, we fetch its value and feed to FindPackage.
Note that FindPackage will first check whether e.g. /usr/bin/libtool is
available under RPM_BUILD_ROOT.
2) We also check all broken symbolic links, e.g. -> ../../../bin/libtool.
The fact that symbolic link is broken means that it cannot be resolved into
buildroot and otherwise must be resolved in the host system after the package
is installed, which is the dependency on where it would point to after install.
This means we must canonicalize the link value, strip RPM_BUILD_ROOT,
and then call FindPackage. Here is what happens:
$ cd `mktemp -d`
$ RPM_BUILD_ROOT=$PWD
$ mkdir -p ./usr/lib/R/bin/
$ ln -s `relative /usr/bin/libtool /usr/lib/R/bin/libtool` $RPM_BUILD_ROOT/usr/lib/R/bin/libtool
$ l $RPM_BUILD_ROOT/usr/lib/R/bin/libtool
lrwxrwxrwx 1 at at 20 Mar 9 22:14 /tmp/.private/at/tmp.AHnBX26473/usr/lib/R/bin/libtool -> ../../../bin/libtool
$ [ -e $RPM_BUILD_ROOT/usr/lib/R/bin/libtool ] || echo broken
broken
$ readlink -vm $RPM_BUILD_ROOT/usr/lib/R/bin/libtool
/tmp/.private/at/tmp.AHnBX26473/usr/bin/libtool
$ to=`!!`; echo ${to#$RPM_BUILD_ROOT}
/usr/bin/libtool
$
And then FindPackage is called with "/usr/bin/libtool".
Now note that if FindPackage is not able to associate e.g. /usr/bin/libtool
with any particular rpm package, it will just place raw dependency on
/usr/bin/libtool. So, this new type of dependencies is a bit dangerous:
basically for each really broken symbolic link there will be an unmet
dependency. On the other hand, this can be viewed as a means of protection
from packages with really broken symbolic links.
If you are frightened with this brand new and dangerous type of dependencies,
please also note that this new type of dependencies is not much more dangerous
than absolute paths to executables in plain shell scripts.
$ /usr/lib/rpm/shell.req -v /dev/stdin <<</i/am/unmet
error: file /i/am/unmet: No such file or directory
shell.req: /dev/stdin: /i/am/unmet -> /i/am/unmet (raw, not found)
/i/am/unmet
$
2007-03-09 21:11:03 +03:00
symlinks.req symlinks.req.files \
2006-01-11 03:39:39 +03:00
tcl.req trpm u_pkg.sh verify-elf vpkg-provides.sh vpkg-provides2.sh
2007-08-28 18:05:30 +04:00
install-data-local :
@LN_S@ pkgconfig.req $( DESTDIR) $( configdir) /pkgconfig.prov
@LN_S@ pkgconfig.req.files $( DESTDIR) $( configdir) /pkgconfig.prov.files
2007-10-29 14:16:35 +03:00
@LN_S@ pkgconfig.req.files $( DESTDIR) $( configdir) /pkgconfiglib.req.files