config.site Fedora 上的供应商库 x86_64

config.site for vendor libs on Fedora x86_64

我在 Fedora 26 上构建一些基于 Autotool 的库时遇到问题,x86_64。 64 位 Fedora 将第三方和供应商库放在 /usr/local/lib64 中。 Ubuntu 17 使用 /usr/local/lib 所以相同的项目可以构建。

我一直在使用 --libdir=/usr/local/lib64 但三个图书馆拒绝使用它。 /usr/local 缺少 config.site,所以我想添加一个。在讨论 usr/localconfig.site 时,站点默认值上的 Autoconf manual 让我有点困惑。它说:

[discussion of /usr version of confg.site] ...

Likewise, on platforms where 64-bit libraries are built by default, then installed in /usr/local/lib64 instead of /usr/local/lib, it is appropriate to install /usr/local/share/config.site:

# /usr/local/share/config.site for platforms that prefer
# the directory /usr/local/lib64 over /usr/local/lib.
test "$libdir" = '${exec_prefix}/lib' && libdir='${exec_prefix}/lib64'

我遇到的问题是,上面的修改是否附加到 config.site/usr/local 版本?或者它会取代现有的代码块吗?或者我可以不加修改直接复制到原来的地方吗?

或者,/usr/local/share/config.site的猫长什么样?


这是 /usrconfig.site。我不清楚是否需要修改或如何修改。

$ cat /usr/share/config.site
# This is the config.site file to satisfy FHS defaults when installing below
# /usr.
#
# You may override this file by your config.site using the CONFIG_SITE env
# variable.
#
# Note: This file includes also RHEL/Fedora fix for installing libraries into
# "/lib/lib64" on 64bit systems.

if test -n "$host"; then
    # skip when cross-compiling
    return 0
fi

if test "$prefix" = /usr \
   || { test "$prefix" = NONE && test "$ac_default_prefix" = /usr ; }
then
    test "$sysconfdir" = '${prefix}/etc' && sysconfdir=/etc
    test "$sharedstatedir" = '${prefix}/com' && sharedstatedir=/var
    test "$localstatedir" = '${prefix}/var' && localstatedir=/var

    ARCH=`uname -m`
    for i in x86_64 ppc64 s390x aarch64; do
        if test $ARCH = $i; then
            test "$libdir" = '${exec_prefix}/lib' && libdir='${exec_prefix}/lib64'
            break
        fi
    done
fi

config.site for vendor libs on Fedora x86_64

这回答了 config.site 看起来像 /usr/local/share/config.site 的问题。正如@John Bollinger 在评论中指出的那样,它没有回答为什么 --libdir=/usr/local/lib64 无法设置目录的问题。

/usr/local/share/config.site 是错误的。虽然它是从 Fedora 的 config.site 复制并放在 /usr/local/share 中,但前缀目录是错误的。前缀测试应该使用 /usr/local 而不是 /usr.

下面是更正后的。

$ cat /usr/local/share/config.site
...

if test -n "$host"; then
    # skip when cross-compiling
    return 0
fi

if test "$prefix" = /usr/local \
   || { test "$prefix" = NONE && test "$ac_default_prefix" = /usr/local ; }
then
    test "$sysconfdir" = '${prefix}/etc' && sysconfdir=/etc
    test "$sharedstatedir" = '${prefix}/com' && sharedstatedir=/var
    test "$localstatedir" = '${prefix}/var' && localstatedir=/var

    ARCH=`uname -m`
    for i in x86_64 ppc64 s390x aarch64; do
        if test $ARCH = $i; then
            test "$libdir" = '${exec_prefix}/lib' && libdir='${exec_prefix}/lib64'
            break
        fi
    done
fi

不过,我不确定这些是否正确。他们没有被修改。

test "$sysconfdir" = '${prefix}/etc' && sysconfdir=/etc
test "$sharedstatedir" = '${prefix}/com' && sharedstatedir=/var
test "$localstatedir" = '${prefix}/var' && localstatedir=/var

现在,下一个问题是,为什么 Fedora 的 /usr/share/config.site 没有正确处理 prefix=/usr/local。这是 Issue 1510073 : Autoconf does not honor libdir in config.site for "libdir=@libdir@" in *.pc file 上的一个悬而未决的问题,已作为 NOT A BUG.

关闭