在Emperor项目中,在进行树外构建时,我遇到了一些使intltool工作的问题。当运行make check
out 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
如果您愿意,可以查看public git repository中的所有详细信息。
我能以某种方式告诉intltool这个文件将位于构建树中,而不是源代码树中吗?否则,我的选项似乎是要打破make distcheck
(不是很好)选项),或者发送不包含完整路径的桌面文件,并假定可执行文件安装在PATH中。 (同样麻烦,恕我直言) - 还有其他选择吗?
答案 0 :(得分: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将知道如何处理。
答案 1 :(得分:0)
进一步的挖掘让我相信答案是:intltool不支持项目中不是源文件的源文件。因此,任何额外的处理必须在intltool通过
之后完成 Intltool要求POTFILES
中的行相对于(构建时)工作目录。文件POTFILES
由POTFILES.in
的配置脚本生成,并在sed
autoconf宏(由IT_PO_SUBDIR
调用)中定义了一个简单的IT_PROG_INTLTOOL
脚本。顶级源目录与路径的相对位置。唉,修改POTFILES
没有帮助:intltool-extract
脚本尽其所能使源目录正确。我不相信有时在内部,有时在源树之外的文件可以支持,而无需修改intltool本身。