Re: [AUR] Darling : couche d'émulation Darwin/OSX pour GNU/L
Publié : sam. 19 oct. 2013, 13:24
Oui, c'est clairement plus élégant à présent.
Forum d'entraide ! Posez vos questions ici
https://forums.archlinux.fr/
ldconfig
, il y a sans doute moyen de faire quelque chose de plus "propre".Code : Tout sélectionner
/usr/share/GNUstep/lib
ld
trouvera automatiquement les bibliothèques, et je n'aurais plus besoin d'utiliser des exécutables alternatifs comme celui-ci :
Code : Tout sélectionner
#!/usr/bin/sh
export LD_LIBRARY_PATH=/usr/share/GNUstep/lib
/usr/share/$pkgname/mon_executable
Code : Tout sélectionner
LDFLAGS="-L/usr/share/GNUstep/lib -L/usr/lib"
ldconfig
soit très utilisé de cette façon dans ArchLinux. Il faut dire que je viens de regarder, et aucun paquet a des bibliothèques (du moins, des .so) dans le /usr/share. Autrement dit, je pense que ma méthode pour éviter les conflits de bibliothèques était maladroite.ld
les prendrait en compte et je pourrais simplifier mes paquets, non ? Peut-être oui (on a parfois tendance à prendre la solution de facilité de tout caser dans /usr/share ou /opt mais dans ton cas, ça ne me choque pas outre mesure puisqu'il suffit de faire l'export qui va bien).Xorg a écrit :Donc je me demandais : et si ça n'était pas plus simple si je mettais ces bibliothèques dans le répertoire /usr/lib/GNUstep ? Au moins, ld les prendrait en compte et je pourrais simplifier mes paquets, non ?
Techniquement rien ne l'empêche... après il faut voir le détail de ces variables.Xorg a écrit :Alors la nouvelle question serait plutôt : est-ce mal vu que les variables GNUSTEP_SYSTEM_LIBRARY et GNUSTEP_SYSTEM_LIBRARIES soient les mêmes (/usr/lib/GNUstep pour les deux) ? Si tel est le cas, je n'aurais pas trop de difficultés à modifier la variable GNUSTEP_SYSTEM_LIBRARIES pour qu'elle vaille /usr/lib/gnustep-clang-svn par exemple. Mais dans le cas contraire, ça me permettrait de mieux exploiter un répertoire qui existe déjà, au risque de provoquer une nouvelle confusion dans la compréhension de mes paquets.
Si je fais ceci ;http://www.gnustep.org/resources/documentation/Developer/Base/Reference a écrit :GNUSTEP_SYSTEM_LIBRARY
This is where System resources get installed. This directory will contain a lot of executable code since *step traditionally likes to bundle executables and resources together.
Traditionally it is /usr/GNUstep/System/Library.
GNUSTEP_SYSTEM_LIBRARIES
This is where System libraries get installed. By libraries we mean the shared/static object files that you can link into programs.
Traditionally it is /usr/GNUstep/System/Library/Libraries.
ldconfig
ne recherche pas dans les sous-répertoires de /usr/lib, donc mettre les bibliothèques dans /usr/lib/gnustep-clang-svn n'a pas fonctionné. LDFLAGS="$LDFLAGS,-l:libobjc.so.4.6"
Code : Tout sélectionner
_svnname=gnustep-make
pkgbase=$_svnname-clang-svn
pkgname=("$_svnname-clang-svn")
[[ $CARCH == "x86_64" ]] && pkgname+=("$_svnname-multilib-clang-svn")
pkgver=38296
pkgrel=1
pkgdesc="The GNUstep make package, using Clang"
arch=('any')
url="http://www.gnustep.org/"
license=('GPL3')
groups=('gnustep-clang-svn')
depends=('bash')
makedepends=('svn')
makedepends_i686=('gcc-libs>=4.9.0' 'clang')
makedepends_x86_64=('gcc-libs-multilib>=4.9.0' 'lib32-clang')
conflicts=('gnustep-make')
options=('!emptydirs')
source=("$_svnname::svn://svn.gna.org/svn/gnustep/tools/make/trunk/"
'arch'
'arch32')
md5sums=('SKIP'
'0daa9a592d808306193540bda0980673'
'2a6ac6a4b3feac708d3272829cfcdc37')
pkgver() {
cd "$srcdir/$_svnname"
svnversion | tr -d [A-z]
}
prepare() {
if [[ $CARCH == "x86_64" ]]; then
msg2 "Make a clone of $_svnname"
cp -Rv "$srcdir/$_svnname" "$srcdir/$_svnname-32"
cp -v "$srcdir/arch32" "$srcdir/$_svnname-32/FilesystemLayouts/"
fi
msg2 "Copy new file system layouts for Arch..."
cp -v "$srcdir/arch" "$srcdir/$_svnname/FilesystemLayouts/"
}
build() {
cd "$srcdir/$_svnname"
msg2 "Run 'configure'..."
CC="clang" CXX="clang++" ./configure --prefix=/usr --sysconfdir=/etc/GNUstep --with-layout=arch --with-objc-lib-flag=-l:libobjc.so.4.6
if [[ $CARCH == "x86_64" ]]; then
cd "$srcdir/$_svnname-32"
export PKG_CONFIG_PATH="/usr/lib32/pkgconfig"
msg2 "Run 'configure' (32-bit)..."
CC="clang -m32" CXX="clang++ -m32" ./configure --prefix=/usr --libdir=/usr/lib32 --sysconfdir=/etc/GNUstep --with-layout=arch32 \
--with-objc-lib-flag=-l:libobjc.so.4.6 --with-config-file=/etc/GNUstep/GNUstep32.conf
fi
}
package_gnustep-make-clang-svn() {
cd "$srcdir/$_svnname"
msg2 "Install..."
make DESTDIR="$pkgdir" install
echo -e "# Added by $pkgname package\nexport PATH=$PATH" >> "$pkgdir/usr/share/GNUstep/Makefiles/GNUstep-reset.sh"
}
package_gnustep-make-multilib-clang-svn() {
pkgdesc="The GNUstep make package for multilib, using Clang"
arch=('x86_64')
groups=('gnustep-multilib-clang-svn')
conflitcs=('gnustep-make-clang-svn')
provides=('gnustep-make-clang-svn')
# 64-bit install
package_gnustep-make-clang-svn
# 32-bit install
cd "$srcdir/$_svnname-32"
msg2 "Install (32-bit)..."
make DESTDIR="$pkgdir" install
echo -e "# Added by $pkgname package\nexport PATH=$PATH" >> "$pkgdir/usr/share/GNUstep32/Makefiles/GNUstep-reset.sh"
}
makepkg -s
ne lit pas les variables propres aux paquets splittés, comme depends=()
, ce qui fait que ça n'installe pas les dépendances nécessaires avant l'installation, et donc la compilation échoue.depends_x86_64=()
qui contient les dépendances propres à la version multilib en haut du PKGBUILD, ça va installer trop de dépendances inutiles dans le cas d'une installation monolib sur architecture x86_64, mais si je mets cette variables dans la fonction package_pkg-multilib()
, cela n'a pas d'effet. Je n'ai pas trop compris ton problème (je ne vois pas ce qui t'empêche de définir des dépendances globales et/ou modifier, rajouter ce qui va bien dans les fonctions package() de tes différentes composantes...)... et je ne vois pas pourquoi tu parles d'une installation monolib puisque tu ne le fais pas non plus, si j'ai suivi...Xorg a écrit :Du coup pour en revenir à mon problème, si je déclaredepends_x86_64=()
qui contient les dépendances propres à la version multilib en haut du PKGBUILD, ça va installer trop de dépendances inutiles dans le cas d'une installation monolib sur architecture x86_64, mais si je mets cette variables dans la fonctionpackage_pkg-multilib()
, cela n'a pas d'effet.
Je ne sais pas quoi faire.
Code : Tout sélectionner
_svnname=gnustep-base
pkgbase=$_svnname-clang-svn
pkgname=("$_svnname-clang-svn")
[[ $CARCH == "x86_64" ]] && pkgname+=("$_svnname-multilib-clang-svn")
epoch=1
pkgver=r38296
pkgrel=1
pkgdesc="The GNUstep base package, using Clang"
arch=('i686' 'x86_64')
url="http://www.gnustep.org/"
license=('GPL2' 'GPL3' 'LGPL2.1')
groups=('gnustep-clang-svn')
depends=('libffi' 'libxml2' 'libxslt' 'openssl' 'gnutls' 'icu' 'gnustep-libobjc2-clang-svn')
makedepends=('svn' 'gnustep-make-clang-svn')
makedepends_i686=('clang')
makedepends_x86_64=('lib32-clang')
optdepends=('iconv: only if you don`t have glibc'
'ffcall: alternative for libffi'
'avahi: enable NSNetServices support')
optdepends_i686=('libdispatch-clang-git: enable dispatching blocks via libdispatch')
optdepends_x86_64=('lib32-avahi: enable 32-bit NSNetServices support'
'lib32-libdispatch-clang-git: enable dispatching blocks via libdispatch')
conflicts=('gnustep-base' 'gnustep-base-svn')
options=('!emptydirs')
source=("$_svnname::svn://svn.gna.org/svn/gnustep/libs/base/trunk/")
md5sums=('SKIP')
pkgver() {
cd "$srcdir/$_svnname"
local ver="$(svnversion)"
printf "r%s" "${ver//[[:alpha:]]}"
}
prepare() {
msg2 "Fix permissions..."
sed -i 's/tar -xf $(TIMEZONE_ARCHIVE);/tar -xf $(TIMEZONE_ARCHIVE);chown -R root:root * ;/' "$srcdir/$_svnname/NSTimeZones/Makefile.postamble"
if [[ $CARCH == "x86_64" ]]; then
msg2 "Make a clone of $_svnname"
cp -Rv "$srcdir/$_svnname" "$srcdir/$_svnname-32"
fi
}
build() {
cd "$srcdir/$_svnname"
msg2 "Run 'configure'..."
OBJCFLAGS="-fblocks" CC="clang" CXX="clang++" ./configure --prefix=/usr --sysconfdir=/etc/GNUstep \
--disable-unicodeconstants --with-ffi-include=/usr/lib/libffi-`pacman -Q libffi | cut -f2 -d\ |cut -f1 -d-`/include/
msg2 "Run 'make'..."
make
if [[ $CARCH == "x86_64" ]]; then
# 32-bit build on x86_64
cd "$srcdir/$_svnname-32"
source "/usr/share/GNUstep32/Makefiles/GNUstep.sh"
export PKG_CONFIG_PATH="/usr/lib32/pkgconfig"
msg2 "Run 'configure' (32-bit)..."
OBJCFLAGS="-fblocks" CC="clang -m32" CXX="clang++ -m32" ./configure --prefix=/usr --libdir=/usr/lib32 --sysconfdir=/etc/GNUstep \
--disable-unicodeconstants --with-ffi-include=/usr/lib32/libffi-`pacman -Q lib32-libffi | cut -f2 -d\ |cut -f1 -d-`/include/
msg2 "Run 'make' (32-bit)..."
make
fi
}
check() {
cd "$srcdir/$_svnname"
make check || true
if [[ $CARCH == "x86_64" ]]; then
# 32-bit check on x86_64
cd "$srcdir/$_svnname-32"
make check || true
fi
}
package_gnustep-base-clang-svn() {
cd "$srcdir/$_svnname"
msg2 "Install..."
make DESTDIR="$pkgdir" install
}
package_gnustep-base-multilib-clang-svn() {
pkgdesc="The GNUstep base package for multilib, using Clang"
arch=('x86_64')
groups=('gnustep-multilib-clang-svn')
depends_x86_64=('lib32-libffi' 'lib32-libxml2' 'lib32-libxslt' 'lib32-openssl' 'lib32-gnutls' 'lib32-icu' 'lib32-libao' 'gnustep-libobjc2-multilib-clang-svn')
provides=('gnustep-base-clang-svn')
conflicts+=('gnustep-base-clang-svn')
# 64-bit install
package_gnustep-base-clang-svn
# 32-bit install on x86_64
cd "$srcdir/$_svnname-32"
msg2 "Install (32-bit)..."
GNUSTEP_CONFIG_FILE="/etc/GNUstep/GNUstep32.conf" make DESTDIR="$pkgdir" install
}
makepkg -s
, c'est que ça n'installe pas les dépendances définis dans la variable depends_x86_64=
de la fonction package_gnustep-base-multilib-clang-svn()
.Code : Tout sélectionner
[...]
depends=('libffi' 'libxml2' 'libxslt' 'openssl' 'gnutls' 'icu' 'gnustep-libobjc2-clang-svn')
depends_x86_64=('lib32-libffi' 'lib32-libxml2' 'lib32-libxslt' 'lib32-openssl' 'lib32-gnutls' 'lib32-icu' 'lib32-libao' 'gnustep-libobjc2-multilib-clang-svn')
makedepends=('svn' 'gnustep-make-clang-svn')
makedepends_i686=('clang')
makedepends_x86_64=('lib32-clang')
[...]
package_gnustep-base-clang-svn() {
depends_x86_64=() # Rendre cette variable vide
[...]
}
package_gnustep-base-multilib-clang-svn() {
pkgdesc="The GNUstep base package for multilib, using Clang"
arch=('x86_64')
groups=('gnustep-multilib-clang-svn')
[...]
}
_depends=()
contient les dépendances pour i686 et x86_64, et depends=()
pour i686 contient _depends=()
moins les paquets préfixés par lib32.depends=()
ou depends_x86_64=()
dans la fonction package_gnustep-base-multilib-clang-svn()
car dans les deux cas, cette variable n'est pas lue lors de makepkg -s
. Même avec makepkg -s --pkg gnustep-base-multilib-clang-svn
ça ne fonctionne pas mieux.Code : Tout sélectionner
_svnname=gnustep-base
pkgbase=$_svnname-clang-svn
pkgname=("$_svnname-clang-svn")
[[ $CARCH == "x86_64" ]] && pkgname+=("$_svnname-multilib-clang-svn")
epoch=1
pkgver=r38296
pkgrel=1
pkgdesc="The GNUstep base package, using Clang"
arch=('i686' 'x86_64')
url="http://www.gnustep.org/"
license=('GPL2' 'GPL3' 'LGPL2.1')
groups=('gnustep-clang-svn')
depends=('libffi' 'libxml2' 'libxslt' 'openssl' 'gnutls' 'icu' 'gnustep-libobjc2-clang-svn')
makedepends=('svn' 'gnustep-make-clang-svn')
makedepends_i686=('clang')
makedepends_x86_64=('lib32-clang')
optdepends=('iconv: only if you don`t have glibc'
'ffcall: alternative for libffi'
'avahi: enable NSNetServices support')
optdepends_i686=('libdispatch-clang-git: enable dispatching blocks via libdispatch')
optdepends_x86_64=('lib32-avahi: enable 32-bit NSNetServices support'
'lib32-libdispatch-clang-git: enable dispatching blocks via libdispatch')
conflicts=('gnustep-base' 'gnustep-base-svn')
options=('!emptydirs')
source=("$_svnname::svn://svn.gna.org/svn/gnustep/libs/base/trunk/")
md5sums=('SKIP')
pkgver() {
cd "$srcdir/$_svnname"
local ver="$(svnversion)"
printf "r%s" "${ver//[[:alpha:]]}"
}
prepare() {
msg2 "Fix permissions..."
sed -i 's/tar -xf $(TIMEZONE_ARCHIVE);/tar -xf $(TIMEZONE_ARCHIVE);chown -R root:root * ;/' "$srcdir/$_svnname/NSTimeZones/Makefile.postamble"
if [[ $CARCH == "x86_64" ]]; then
msg2 "Make a clone of $_svnname"
cp -Rv "$srcdir/$_svnname" "$srcdir/$_svnname-32"
fi
}
build() {
cd "$srcdir/$_svnname"
msg2 "Run 'configure'..."
OBJCFLAGS="-fblocks" CC="clang" CXX="clang++" ./configure --prefix=/usr --sysconfdir=/etc/GNUstep \
--disable-unicodeconstants --with-ffi-include=/usr/lib/libffi-`pacman -Q libffi | cut -f2 -d\ |cut -f1 -d-`/include/
msg2 "Run 'make'..."
make
if [[ $CARCH == "x86_64" ]]; then
# 32-bit build on x86_64
cd "$srcdir/$_svnname-32"
source "/usr/share/GNUstep32/Makefiles/GNUstep.sh"
export PKG_CONFIG_PATH="/usr/lib32/pkgconfig"
msg2 "Run 'configure' (32-bit)..."
OBJCFLAGS="-fblocks" CC="clang -m32" CXX="clang++ -m32" ./configure --prefix=/usr --libdir=/usr/lib32 --sysconfdir=/etc/GNUstep \
--disable-unicodeconstants --with-ffi-include=/usr/lib32/libffi-`pacman -Q lib32-libffi | cut -f2 -d\ |cut -f1 -d-`/include/
msg2 "Run 'make' (32-bit)..."
make
fi
}
check() {
cd "$srcdir/$_svnname"
make check || true
if [[ $CARCH == "x86_64" ]]; then
# 32-bit check on x86_64
cd "$srcdir/$_svnname-32"
make check || true
fi
}
package_gnustep-base-clang-svn() {
cd "$srcdir/$_svnname"
msg2 "Install..."
make DESTDIR="$pkgdir" install
}
package_gnustep-base-multilib-clang-svn() {
pkgdesc="The GNUstep base package for multilib, using Clang"
arch=('x86_64')
groups=('gnustep-multilib-clang-svn')
depends=('lib32-libffi' 'lib32-libxml2' 'lib32-libxslt' 'lib32-openssl' 'lib32-gnutls' 'lib32-icu' 'lib32-libao' 'gnustep-libobjc2-multilib-clang-svn')
provides=('gnustep-base-clang-svn')
conflicts+=('gnustep-base-clang-svn')
# 64-bit install
package_gnustep-base-clang-svn
# 32-bit install on x86_64
cd "$srcdir/$_svnname-32"
msg2 "Install (32-bit)..."
GNUSTEP_CONFIG_FILE="/etc/GNUstep/GNUstep32.conf" make DESTDIR="$pkgdir" install
}
makepkg
ne me permet pas de faire ce que je veux faire de toute façon. J'ai deux solutions : soit je vois avec les développeurs de Pacman, ou soit j'arrête cette idée stupide.build()
se termine correctement si on cherche à installer le paquet gnustep-base-clang-svn sur x86_64. Donc je crois que je vais la faire "à la Wine" et virer la version de Darling qui supporte uniquement que le 64 bits. Merci pour ta patience FoolEcho. darling
)darling shell
)installer
dans le shell de Darling)hdiutil
dans le shell de Darling)