2

Emperorプロジェクトでは、out-of-tree ビルドを行うときに intltool を機能させるのにいくつか問題があります。実行make checkすることの 1 つであるツリー外で実行するとmake distcheck、intltool は次のように失敗します。

INTLTOOL_EXTRACT="/usr/bin/intltool-extract" XGETTEXT="/usr/bin/xgettext" srcdir=../../po /usr/bin/intltool-update --gettext-package emperor --pot
can't open ../../po/../data/emperor.desktop.in: No such file or directory at /usr/bin/intltool-extract line 212.

emperor.desktop.inintltool は、 にリストされpo/POTFILES.inている をソース ツリーで探します。ただし、ユーザーが構成したインストール済みの実行可能パスを挿入するためにemperor.desktop.in、configure スクリプトによって というファイルから生成されemperor.desktop.in.in、ビルド ツリーに配置されます。

関連するbootstrap.sh行は次のとおりです。

echo +++ Running intltoolize ... &&
intltoolize --force --copy &&
cat >>po/Makefile.in.in <<EOF

../data/_column_names.h:
    cd ../data && \$(MAKE) _column_names.h

EOF

のセットアップ コードconfigure.ac:

IT_PROG_INTLTOOL([0.35.0])

GETTEXT_PACKAGE=emperor
AC_SUBST(GETTEXT_PACKAGE)
AC_DEFINE_UNQUOTED([GETTEXT_PACKAGE], ["$GETTEXT_PACKAGE"],
                                      [The domain to use with gettext])
AM_GLIB_GNU_GETTEXT

data/emperor.desktop.inに記載されていAC_CONFIG_FILESます。

data/Makefile.am次の行が含まれます。

desktopdir = $(datadir)/applications
desktop_in_files = emperor.desktop.in
desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
@INTLTOOL_DESKTOP_RULE@

行がpo/POTFILES.in含まれています

data/emperor.desktop.in

必要に応じて、パブリック git リポジトリですべての詳細を確認できます。

このファイルがソース ツリーではなくビルド ツリーにあることを intltool に伝えることはできますか? それ以外の場合、私のオプションは壊れるmake distcheck(優れたオプションではない) か、完全なパスを含まず、実行可能ファイルが PATH にインストールされていると想定するデスクトップ ファイルを出荷するようです。(同じくらい面倒です、私見) - 他に選択肢はありますか?

4

2 に答える 2

0

さらに掘り下げてみると、答えは次のようになりました。intltoolは、プロジェクトのソースファイルではないソースファイルをサポートしていません。エルゴ、intltoolが完了した後、追加の処理を行う必要があります

Intltoolでは、の行がPOTFILES(ビルド時の)作業ディレクトリを基準にしている必要があります。このファイルは、 autoconfマクロ(によって呼び出される)で定義された単純なスクリプトPOTFILESを使用してconfigureスクリプトによって生成されます。このスクリプトは、最上位のソースディレクトリの相対位置をパスの前に追加するだけです。残念ながら、変更は役に立ちません。スクリプトは、ソースディレクトリを正しく取得するためにできる限りのことを行います。intltool自体を変更せずに、ソースツリーの内側と外側にあるファイルをサポートできるとは思いません。POTFILES.insedIT_PO_SUBDIRIT_PROG_INTLTOOLPOTFILESintltool-extract

于 2012-09-06T21:41:39.753 に答える
0

ソースコードには がありますがemperor.desktop.in.in、これは依存関係としてどのルールにもないようです。そのファイルは最初に に変換しemperor.desktop.in、後で に変換するemperor.desktop必要がありますが、data/Makefile.am.

desktopdir = $(datadir)/applications
desktop_in_in_files = emperor.desktop.in.in
desktop_in_files = $(desktop_in_in_files:.desktop.in.in=.desktop.in)
desktop_DATA = $(desktop_in_files:.desktop.in=.desktop)
@INTLTOOL_DESKTOP_RULE@

[...]
EXTRA_DIST =  \
    $(desktop_in_in_files) \
    [...]

$(desktop_in_in_files)が含まれて$(desktop_in_in_files)おり、Makefile はそれを処理する方法を知っています。

于 2012-09-03T22:17:19.767 に答える