2017-10-20 12 views
1

J'ai des difficultés à créer quelques bibliothèques Autotool sur Fedora 26, x86_64. La version 64 bits de Fedora place les bibliothèques tierces et fournisseurs dans /usr/local/lib64. Ubuntu 17 utilise /usr/local/lib pour que les mêmes projets soient construits correctement.config.site pour les librairies fournisseur sur Fedora x86_64

J'ai utilisé --libdir=/usr/local/lib64 mais trois bibliothèques y résistent. Je n'ai pas de config.site pour /usr/local alors j'essaie d'en ajouter un. Le Autoconf manual sur Site Defaults est un peu confus pour moi quand il traite usr/localconfig.site. Il dit:

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

De même, sur les plates-formes où les bibliothèques 64 bits sont compilés par défaut, puis installé dans/usr/local/lib64 au lieu de/usr/local/lib, il est approprié pour installer /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' 

le problème que j'ai est, est la modification ci-dessus joint au /usr/local version de config.site? Ou remplace-t-il un bloc de code existant? Ou puis-je simplement le copier où il appartient sans modification?

Ou peut-être, à quoi ressemble un chat de /usr/local/share/config.site?


Voici le config.site pour /usr. Ce n'est pas clair pour moi si cela doit être modifié ou comment le modifier.

$ 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 
+2

J'ai commencé à écrire une réponse à la question posée, mais je pense que ce serait une perte de temps. Si la spécification explicite de l'option '--libdir' ne permet pas à vos bibliothèques d'aller là où vous les voulez, il semble peu probable que l'ajout ou la modification de paramètres par défaut fasse l'affaire.Le but des valeurs par défaut est en grande partie de vous éviter de devoir spécifier les emplacements d'installation à la main, mais vous l'avez déjà dépassé. –

+0

Je recommande de regarder le Makefile.am (en supposant que Automake est en jeu) qui dirige la construction des bibliothèques impliquées. Il ne devrait pas être trop difficile de le modifier pour honorer la libdir que vous spécifiez. Examinez toutefois s'il peut être utile de ne pas le faire déjà. –

+0

Merci @John. J'ai rassemblé plus d'informations. Voici un fichier de spécifications Fedora pour l'un des programmes. Notez l'utilisation de 'sed' pour patcher'% {_ libdir} 'dans [' gnutls.spec'] (http://pkgs.fedoraproject.org/cgit/rpms/gnutls.git/tree/gnutls.spec). Je suppose que ma prochaine question est, est-ce que GnuTLS fait la bonne chose en définissant 'sys_lib_dlsearch_path_spec' en premier lieu? Il semble que Autotools/Autoconf devrait piloter tout le processus. Autrement dit, le "sys_lib_dlsearch_path_spec" ne doit pas être utilisé et '% {libdir}' devrait être utilisé tout le temps. – jww

Répondre

0

config.site pour libs des fournisseurs sur Fedora x86_64

Cela répond à la question de ce qui ressemble à config.site pour /usr/local/share/config.site. Il ne répond pas à la question de savoir pourquoi --libdir=/usr/local/lib64 ne parvient pas à définir le répertoire, comme l'a souligné @John Bollinger dans les commentaires. Le /usr/local/share/config.site est erroné. Bien qu'il ait été copié à partir de config.site de Fedora et placé dans /usr/local/share, les répertoires de préfixe sont faux. Le test de préfixe doit utiliser /usr/local et non /usr.

Ci-dessous est corrigé.

$ 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 

Cependant, je ne suis pas sûr que ce soit correct. Ils n'ont pas été modifiés.

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

Maintenant, la question suivante est, pourquoi Fedora est de /usr/share/config.site la manipulation ne prefix=/usr/local correctement. C'est une question ouverte à Issue 1510073 : Autoconf does not honor libdir in config.site for "[email protected]@" in *.pc file, qui a été fermé comme PAS UN BUG.