VineSeed にて Requires: 2005-02-02 って何じゃこりゃ?

某所より.

22 login:Penguin [sage] Date:2008/03/01(土) 22:04:17
    # apt-get faac-1.25-0vl1.i386.rpm

    以下のパッケージは解決できない依存関係を持っています:
      faac: 依存: 2005-02-02 それをインストールすることができません
    E: 壊れたパッケージです

    Seed にて 2005-02-02 に依存って何?

42 login:Penguin [sage] Date:2008/03/02(日) 03:02:36
    >>41
    出る。
    うちでも出る。何じゃこれ。

    $ rpmbuild -ba ./rpm/SPECS/faac-vl.spec
    $ rpm -qp --requires ./rpm/RPMS/i386/faac-1.25-0vl1.i386.rpm | grep 2005
    2005-02-02

    すまんかった。ようやく本筋に入れるレベルまでおまいさんと同期した。
    (つか、おまいさんも言葉足らないと思うぞ。色々酌まなきゃならん身にもなってくれ)
    だがここまで。
    もう眠い…。
    役立たずで申し訳ない。
    明日以降時間があれば見てみるが、そっちもわかったら報告よろしく。

    # 本スレじゃなくて隔離スレでまともな(?)話題があるとは正直意外だったぞ。

48 22 [sage] Date:2008/03/02(日) 09:39:30
    faac 1.25 を Seed で普通に rpm をビルドすると
    $ rpm -qp --requires ./rpm/RPMS/i386/faac-1.25-0vl1.i386.rpm | grep 2005
    2005-02-02
    となってしまう件ですが,根本的な原因がまだ追求できていないが,
    応急処置をとりあえず発見した.それは

      ChangeLog の頭に空行を入れる

    つまり,以下のようにする:

    %install
    %{__rm} -rf %{buildroot}
    %{__make} install DESTDIR=%{buildroot}

    + mv ChangeLog ChangeLog.tmp
    + echo "" > ChangeLog
    + cat ChangeLog.tmp >> ChangeLog

    >>46-47 両氏,追試していただき有り難く存ずる 

49 login:Penguin [sage] Date:2008/03/02(日) 10:49:03
    chmod 644 ChangeLog 

50 login:Penguin [sage] Date:2008/03/02(日) 11:10:14
    ChangeLog周りで細工して色々な回避方法があるみたい。
    パッケージに含めないとか中身加工するとか。
    でも単に回避法なだけで、根本的な原因もわからんしなあ。 

51 login:Penguin [sage] Date:2008/03/02(日) 11:13:16
    >>49
    これでも 2005-02-02 が無くなった
    でもこれは根本解決なん?
    他のファイル COPYING, README, TODO も +x がついてるけど
    どうして ChangeLog の 1 行目の 2005-02-02 が沸いてくるのか? 

52 login:Penguin [sage] Date:2008/03/02(日) 11:29:56
    AutoReqの誤動作だと思う。 

faac-vl.spec は以下の通り.

%define name faac
%define version 1.25
%define release 0vl1

Summary: Reference encoder and encoding library for MPEG2/4 AAC
Name: %{name}
Version: %{version}
Release: %{release}
Source: http://dl.sf.net/faac/faac-%{version}.tar.gz
License: LGPL
Group: Applications/Multimedia
URL: http://www.audiocoding.com/

#Requires: 
BuildRequires: autoconf, automake, libtool, gcc-c++ 
BuildRoot: %{_tmppath}/%{name}-%{version}-root

%description
FAAC is an AAC audio encoder. 

%package devel
Summary: Development libraries of the FAAC AAC encoder
Group: Development/Libraries
Requires: %{name} = %{version}

%description devel
FAAC is an AAC audio encoder. 


%prep
%setup -q -n %{name}
find . -type f -print|xargs nkf --unix --overwrite 
cp configure.in configure.in.org
sed -e 's/^CFLAGS=.*$/CFLAGS="-O2 -Wall"/' configure.in.org > configure.in

%build
sh bootstrap
%configure
%{__make} %{?_smp_mflags}


%install
%{__rm} -rf %{buildroot}
%{__make} install DESTDIR=%{buildroot}

%clean
%{__rm} -rf %{buildroot}


%post
/sbin/ldconfig 2>/dev/null

%postun
/sbin/ldconfig 2>/dev/null


%files 
%defattr(-,root,root,-)
%doc COPYING ChangeLog README TODO
%{_bindir}/*
%{_libdir}/*.so.*

%files devel
%defattr(-,root,root,-)
%{_libdir}/*.la
%{_libdir}/*.a
%{_libdir}/*.so
%{_includedir}/*.h

回避策は見つかったんやけど,根本的な解決に至っていない.

2005-02-02 が沸いてくる理由(2008/03/06 追記)

某所より.

57 login:Penguin [sage] Date:2008/03/06(木) 12:38:22
    Fedoraでreview requestに提出されるsrpmを審査しているけど、

    >>22 あたりからのfaac-vl.specの議論について
    もうdownloaderにspec fileが残っていないのでこのスレの話から
    推察するに、結局>>49 が原因
    例えばFedoraの場合 rpm --eval %__find_requiresとすると
    /usr/lib/rpm/redhat/find-requiresが帰ってくる。でそのファイルをみると、
    -----------------------------------------------
    73 # --- Script interpreters.
    74 for f in $scriptlist; do
    75 [ -r $f -a -x $f ] || continue
    76 interp=`head -n 1 $f | sed -e 's/^\#\![ ]*//' | cut -d" " -f1`
    77 interplist="$interplist $interp"
    78 case $interp in
    79 */perl) perllist="$perllist $f" ;;
    80 esac
    81 done
    82 [ -n "$interplist" ] && { echo "$interplist" | tr '[:blank:]' \\n | sort -u ; }
    -----------------------------------------------
    つまりは「+xなスクリプト」があると、「一行目に」#!/bin/shshebangが書いてあれば
    rpmbuildが勝手に/bin/shdependencyに加える。で、これは%docにマークされている
    ファイルに対してもチェックされるので、結局問題が生じるわけ

    Fedoraにはrpmlintという道具があって、こういう事をしていると
    doc-file-dependencyという警告が出る

最も適切な解決は,

chmod 644 ChangeLog

ということになった.