2

Emperor项目中,在进行树外构建时,让 intltool 工作时遇到了一些问题。当运行make checkout-of-tree 时,这是其中一件事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.

intltool 正在源代码树中查找emperor.desktop.in中列出的。po/POTFILES.in但是,emperor.desktop.in它是由名为 的文件的配置脚本生成的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

在您的源代码中,您拥有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)contains $(desktop_in_in_files),并且 Makefile 将知道如何处理它。

于 2012-09-03T22:17:19.767 回答
0

一些进一步的挖掘让我相信答案是:intltool 不支持不是项目中源文件的源文件。因此,任何额外的处理都必须在 intltool 完成后进行

Intltool 要求输入的行POTFILES与(构建时)工作目录相关。该文件POTFILES由配置脚本生成,使用在autoconf 宏中定义POTFILES.in的简单脚本(由 调用)简单地将顶级源目录的相对位置添加到路径中。唉,修改无济于事:脚本尽其所能来正确地获取源目录。我不相信在不修改 intltool 本身的情况下可以支持有时在源树内部和有时在源树之外的文件。sedIT_PO_SUBDIRIT_PROG_INTLTOOLPOTFILESintltool-extract

于 2012-09-06T21:41:39.753 回答