CLISP的interface至PARI配置了configure.in
AC_LIB_LINKFLAGS([pari])
来自lib-link.m4
。
构建过程还需要Makefile
知道datadir
PARI
的位置。为此,Makefile.in
已
prefix = @LIBPARI_PREFIX@
DATADIR = @datadir@
并期望找到$(DATADIR)/pari/pari.desc
(通常
/usr/share/pari/pari.desc
或/usr/local/share/pari/pari.desc
)。
这似乎适用于PARI
/usr/local
{和LIBPARI_PREFIX=/usr/local
PARI
安装了/usr
的Mac OS X,但{U}没有安装LIBPARI_PREFIX
}位于PARI
,datadir
为空。
如何将Makefile
的{{1}}的位置插入LIBPARI_PREFIX
?
PS。我也在homebrew上问了这个问题。
PPS。回应@ BrunoHaible的建议,这是在Linux上进行调试的微薄尝试(其中$ bash -x configure 2>&1 | grep found_dir
+ found_dir=
+ eval ac_val=$found_dir
+ eval ac_val=$found_dir
为空)。
List
答案 0 :(得分:2)
您正试图以无意的方式使用$(prefix)
。在基于Autotools的构建系统中,$(prefix)
表示您正在构建的软件的目标安装位置的前缀。通过在Makefile.in
中进行设置,您将覆盖configure
尝试分配的前缀。但是,由于你似乎没有任何安装目标,至少在那个级别,这可能更多的是形式不好而不是故障的原因。
如何将PARI数据库的位置插入Makefile?
我建议在configure脚本中计算或发现所需的目录,并通过自己的输出变量将其导出到生成的Makefile。让我们先来看第二部分,因为它很简单。在 configure.in
中,以某种方式找到所需数据目录并将其分配给变量
DATADIR=...
,你可以通过AC_SUBST
宏创建一个输出变量:
AC_SUBST([DATADIR])
由于您只使用Autoconf,而不是Automake,因此您可以通过更改 Makefile.in
中的作业来手动将其收到Makefile:
DATDIR = @DATADIR@
现在,至于首先查找数据目录,您必须知道在尝试实现之前要实现的目标。从你的问题和后续评论中,我觉得你想要这个:
使用用户明确指定的数据目录(如果有)。否则,
查找相对于共享库位置的数据目录。如果没有找到那么
(可选)查看指定给prefix
的{{1}},或特别是指定的datadir(两者都可能来自顶级configure
)。最后,如果还没有找到,那么
查看一些标准位置。
要创建configure
选项,用户可以通过该选项指定自定义数据目录,您可能会使用configure
宏,可能是这样的:
AC_ARG_WITH
感谢@BrunoHaible,我们看到虽然Gnulib手册没有记录它,但宏的内部文档指定如果AC_ARG_WITH([pari-datadir], [AS_HELP_STRING([--with-pari-datadir],
[explicitly specifies the PARI data directory])],
[], [with_pari_datadir=''])
找到libpari,那么它会将AC_LIB_LINKFLAGS
设置为库目录前缀。您发现当使用LIBPARI_PREFIX
选项为其提供另一个搜索位置时,这确实有效,因此我建议您使用它。您当然可以尝试调试--with-libpari
以使其在找到lib的所有情况下都设置为AC_LIB_LINKFLAGS
,但如果您不想这样做,那么您可以解决它(请参阅下文)。
虽然默认或指定的安装前缀可以LIBPARI_PREFIX
作为configure
访问,但我建议您转到指定的$prefix
。然而,这有点棘手,因为默认情况下它间接引用前缀。因此,您可以这样做:
$datadir
最后,您可以硬编码一组前缀,例如eval "datadir_expanded=${datadir}"
和/usr
。
继上述所有内容之后,您的/usr/local
可能会执行以下操作:
configure.in
答案 1 :(得分:0)
为什么不猜测datadir
的位置,为什么不问PARI / GP datadir
的位置呢?即
$ echo "default(datadir)" | gp -qf
"/usr/share/pari"
起到了作用。