Help us understand the problem. What is going on with this article?

sys-devel/automake:1.11 の emerge 失敗を修正

More than 3 years have passed since last update.

sys-devel/automake-1.11.6* の emerge が失敗する現象を修正しました。

3 行で

  • sys-deve/automake-1.11.6 の emerge に失敗する
  • info ファイルのソースの書き方が原因
  • パッチ と、それを使う portageツリー 作った

はじめに

sys-devel/automake には記事執筆時点で 1.4 ~ 1.15 (と 9999) のスロットがあります。
automake は、常に最新版が使われるわけではなく、パッケージによっては古いバージョンの automake が要求される場合があります。

先日、新規にインストールした Gentoo に各種パッケージをインストールしていたのですが、そこで automake:1.11 が要求され、その emerge に失敗してしまいました 1。後に確認したところ、この問題が発生するスロットは 1.11 のみでした (9999は未確認)。

エラー内容の抜粋:

...
Making install in doc
make[1]: Entering directory '/var/tmp/portage/sys-devel/automake-1.11.6-r1/work/automake-1.11.6/doc'
restore=: && backupdir=".am$$" && \
am__cwd=`pwd` && CDPATH="${ZSH_VERSION+.}:" && cd . && \
rm -rf $backupdir && mkdir $backupdir && \
if (/bin/sh /var/tmp/portage/sys-devel/automake-1.11.6-r1/work/automake-1.11.6/lib/missing --run makeinfo --version) >/dev/null 2>&1; then \
  for f in automake.info automake.info-[0-9] automake.info-[0-9][0-9] automake.i[0-9] automake.i[0-9][0-9]; do \
    if test -f $f; then mv $f $backupdir; restore=mv; else :; fi; \
  done; \
else :; fi && \
cd "$am__cwd"; \
if /bin/sh /var/tmp/portage/sys-devel/automake-1.11.6-r1/work/automake-1.11.6/lib/missing --run makeinfo   -I . \
 -o automake.info automake.texi; \
then \
  rc=0; \
  CDPATH="${ZSH_VERSION+.}:" && cd .; \
else \
  rc=$?; \
  CDPATH="${ZSH_VERSION+.}:" && cd . && \
  $restore $backupdir/* `echo "./automake.info" | sed 's|[^/]*$||'`; \
fi; \
rm -rf $backupdir; exit $rc
automake.texi:13092: @itemx must follow @item
automake.texi:13109: @itemx must follow @item
automake.texi:13115: @itemx must follow @item
Makefile:320: recipe for target 'automake.info' failed
make[1]: *** [automake.info] Error 1
make[1]: Leaving directory '/var/tmp/portage/sys-devel/automake-1.11.6-r1/work/automake-1.11.6/doc'
Makefile:534: recipe for target 'install-recursive' failed
make: *** [install-recursive] Error 1
...

どうやらドキュメントのインストールのタイミングでコケているようです2

原因

エラーメッセージ

automake.texi:13092: @itemx must follow @item

が出ているあたりのソースを見てみると以下のようになっています (行番号を付与してあります)。

automake.texi
        ...
 13085  Automake also has seen its guts rewritten.  Although this rewriting
 13086  took a lot of efforts, it is only apparent to the users in that some
 13087  constructions previously disallowed by the implementation now work
 13088  nicely.  Conditionals, Locations, Variable and Rule definitions,
 13089  Options: these items on which Automake works have been rewritten as
 13090  separate Perl modules, and documented.
 13091
 13092  @itemx 2004-01-11 Automake 1.8.1
 13093  @itemx 2004-01-12 Automake 1.8.2
 13094  @itemx 2004-03-07 Automake 1.8.3
 13095  @itemx 2004-04-25 Automake 1.8.4
 13096  @itemx 2004-05-16 Automake 1.8.5
 13097
 13098  @item 2004-07-28 Automake 1.9
 13099
 13100  This release tries to simplify the compilation rules it outputs to
 13101  reduce the size of the Makefile.  The complaint initially come from
 13102  the libgcj developers.  Their @file{Makefile.in} generated with
 13103  Automake 1.4 and custom build rules (1.4 did not support compiled
 13104  Java) is 250KB@.  The one generated by 1.8 was over 9MB@!  1.9 gets it
 13105  down to 1.2MB@.
        ...

ここに現れている @itemx は項目を列挙するためのコマンドです。同様のコマンドに @item というものもありますが、 @itemx は直前の項目との行間を空けないという特徴があります。
さて、 @itemx@item の直後か他の @itemx の直後にしか置けないという制限があります。しかし、エラーの出ている 13092 行目の @itemx の直前には @item がありません。実は抜粋した範囲よりさらに前に @item があるのですが、パラグラフが変わっているため、 @item の直後と見做されずエラーとなっているのです。

他の行についても同様に、@item の直後ではない @itemx があるためにエラーとなっています。

修正

パッチ

エラーの出ている @itemx コマンドを @item に書き換えます。

automake-1.11.6-texi-fixes.patch
diff -urN -x '*~' automake-1.11.6.orig/doc/automake.texi automake-1.11.6/doc/automake.texi
--- automake-1.11.6.orig/doc/automake.texi      2012-07-10 00:39:57.000000000 +0900
+++ automake-1.11.6/doc/automake.texi   2016-10-20 01:07:57.171078537 +0900
@@ -13089,7 +13089,7 @@
 Options: these items on which Automake works have been rewritten as
 separate Perl modules, and documented.

-@itemx 2004-01-11 Automake 1.8.1
+@item 2004-01-11 Automake 1.8.1
 @itemx 2004-01-12 Automake 1.8.2
 @itemx 2004-03-07 Automake 1.8.3
 @itemx 2004-04-25 Automake 1.8.4
@@ -13106,13 +13106,13 @@

 Aside from this it contains mainly minor changes and bug-fixes.

-@itemx 2004-08-11 Automake 1.9.1
+@item 2004-08-11 Automake 1.9.1
 @itemx 2004-09-19 Automake 1.9.2

 Automake has ten years.  This chapter of the manual was initially
 written for this occasion.

-@itemx 2007-10-29 Automake repository moves to @code{savannah.gnu.org} and uses
+@item 2007-10-29 Automake repository moves to @code{savannah.gnu.org} and uses
 git as primary repository.

 @end table

portage ツリー

作りました: https://github.com/yoh2/portage-yoh2-priv

これを git clone して、 /etc/portage/make.conf の PORTDIR_OVERLAY に指定するとツリーが使えるようになります。
なお、このツリーには、今回の修正のみではなく、他の私的修正・変更なんかも入れていく予定ですのでご注意を。


  1. 以前はきちんとインストールできていました。makeinfo の仕様が変わったのか automake のソースがこっそり変わったのか。 

  2. プログラム本体のビルドはきっちり成功しているだけに余計悔しい。 

yoh2
Gentoo好きプログラマ。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away