Nouveau forum : https://forum.slackware-fr.eu.org/

Annonce

29/01/2017 : Ce forum est dsormais en lecture seule. Merci d'utiliser le nouveau forum.

13/12/2014 : Inscriptions dsactives pour un moment en raison d'une recrudescence d'inscriptions plus que douteuses.

#1 20-07-2010 21:50:17

polux
Membre
Date d'inscription: 15-07-2010
Messages: 17

GNUstep-make

Bonjour,

J'ai rcupr un SlackBuild sur slackbuild.org pour installer GNUstep sur ma machine(slack13.1).

J'ai juste chang le numro de version de gnustep-make du script original pour installer la dernire version(2.4.0) mais si la compilation se faire, le paquet n'est pas cre, le script stoppe juste aprs make install DESTDIR=$PKG.

Pour continuer l'installation, je dois faire le reste la main car je ne trouve pas pourquoi le script stoppe.

pouvez-vous m'aider ?

voici le SlackBuild:

Code:

#!/bin/sh

# Slackware build script for GNUstep's make package.

# Written by Stefan Bidigaray

PRGNAM=gnustep-make
VERSION=2.4.0
ARCH=${ARCH:-i686}
BUILD=${BUILD:-01}
TAG=${TAG:-_SBo}

# Optional Parameter
FS_LAYOUT=${FS_LAYOUT:-fhs-system}

CWD=$(pwd)
TMP=${TMP:-/tmp/SBo}
PKG=$TMP/package-$PRGNAM
OUTPUT=${OUTPUT:-/tmp}

if [ "$ARCH" = "i486" ]; then
  SLKCFLAGS="-O2 -march=i486 -mtune=i686"
elif [ "$ARCH" = "i686" ]; then
  SLKCFLAGS="-O2 -march=i686 -mtune=i686"
fi

set -e

rm -rf $PKG
mkdir -p $TMP $PKG $OUTPUT
cd $TMP
rm -rf $PRGNAM-$VERSION
tar xvf $CWD/$PRGNAM-$VERSION.tar.gz
cd $PRGNAM-$VERSION
chown -R root:root .
find . \
 \( -perm 777 -o -perm 775 -o -perm 711 -o -perm 555 -o -perm 511 \) \
 -exec chmod 755 {} \; -o \
 \( -perm 666 -o -perm 664 -o -perm 600 -o -perm 444 -o -perm 440 -o -perm 400 \) \
 -exec chmod 644 {} \;

CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCLAGS" \
./configure \
  --enable-strip-makefiles \
  --with-layout=$FS_LAYOUT

make
make install DESTDIR=$PKG

( cd $PKG
  find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | \
    xargs strip --strip unneeded 2> /dev/null || true
  find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | \
    xargs strip --strip-unneeded 2> /dev/null
)

# Put the man pages in the correct place
mv $PKG/usr/share/man $PKG/usr

# Fixup a few paths in the GNUstep.conf
sed -i 's|/usr/share/man|/usr/man|g' $PKG/etc/GNUstep/GNUstep.conf
sed -i 's|/usr/local/share/man|/usr/local/man|g' $PKG/etc/GNUstep/GNUstep.conf
sed -i 's|/usr/share/info|/usr/info|g' $PKG/etc/GNUstep/GNUstep.conf
sed -i 's|/usr/local/share/info|/usr/local/info|g' $PKG/etc/GNUstep/GNUstep.conf

# Don't clobber the config file on upgrades
mv $PKG/etc/GNUstep/GNUstep.conf $PKG/etc/GNUstep/GNUstep.conf.new

mkdir -p $PKG/usr/doc/$PRGNAM-$VERSION
cp -a COPYING README NEWS $PKG/usr/doc/$PRGNAM-$VERSION
cat $CWD/$PRGNAM.SlackBuild > $PKG/usr/doc/$PRGNAM-$VERSION/$PRGNAM.SlackBuild

mkdir -p $PKG/install
cat $CWD/slack-desc > $PKG/install/slack-desc
cat $CWD/doinst.sh > $PKG/install/doinst.sh

cd $PKG
/sbin/makepkg -c n -l y $OUTPUT/$PRGNAM-$VERSION-$ARCH-$BUILD$TAG.tgz

pour ceux qui veulent se lancer dans l'aventure ftp://ftp.gnustep.org/pub/gnustep/core/ neutral

cordialement
polux

Dernire modification par polux (20-07-2010 21:58:17)

Hors ligne

 

#2 20-07-2010 23:55:28

Tsomi
Membre trs actif
Date d'inscription: 09-08-2006
Messages: 684

Re: GNUstep-make

Hello,

Trouv big_smile

Le bug est assez intressant .

En fait, le problme c'est qu'il y a des erreurs dans certains slackbuilds de SBo qui ne sont pas corriges depuis Slackware 13.0...

Tout d'abord, a utilise l'ancien format de paquets .tgz, et l'architecture 64 bits n'est pas prise en compte. Mais ce n'est pas a qui est l'origine de ton bug.

En fait, ils utilisent, dans ce slackbuild, l'instruction set -e au dbut du SlackBuild. D'ailleurs, c'est aussi ce que l'on fait. a demande au script de s'arrter la moindre erreur.

Le problme, c'est qu'ils utilisent a :

Code:

( cd $PKG
  find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | \
    xargs strip --strip unneeded 2> /dev/null || true
  find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | \
    xargs strip --strip-unneeded 2> /dev/null
)

Cette partie s'occupe de "stripper" les binaires/bibliothques, c'est--dire rduire leur taille en enlevant certaines informations (symboles de dbogage...). Le problme, c'est que s'il n'y a pas de binaires/bibliothques "stripper", la commande retourne une erreur, et le script s'arrte.

Sauf que le script est lanc dans un sous-shell ; il est plac entre parenthses. Et, jusqu' la version 4 de bash (le shell utilis par dfaut), un sous-shell n'hrite pas de la proprit set -e du shell parent. En gros, donc, quand on mettait des commandes entre ces parenthses, a permettait de dire "merci de ne pas stopper le script si ces commandes ne marchent pas". Sauf que bash 4, qui est l depuis Slackware 13.0, n'accepte plus ce comportement : la proprit set -e agit aussi dans le sous-shell, et donc, comme dit plus haut, s'il n'y a rien stripper : arrt du script.

Une autre solution -- qui elle, fonctionne toujours -- pour demander ce qu'une commande ne stoppe pas le script si elle choue, c'est de rajouter un || true la fin de celle-ci. Si la commande choue, on renvoie true, qui lui, par dfinition, est toujours vrai, donc le script ne s'arrte pas big_smile

D'ailleurs, le || true est utilis dans le premier find (du coup utiliser un sous-shell est redondant), mais pas dans le deuxime find ! Et c'est l qu'est l'erreur : le deuxime find ne trouve plus de bibliothques "stripper" dans cette version de gnustep-make, donc ton slackbuild s'arrte juste avant de faire un makepkg.

La solution est donc de modifier le second find de la sorte :

Code:

find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | \
    xargs strip --strip-unneeded 2> /dev/null || true

En esprant ne pas avoir t trop confus big_smile

Dernire modification par Tsomi (20-07-2010 23:57:34)

Hors ligne

 

#3 21-07-2010 00:27:04

polux
Membre
Date d'inscription: 15-07-2010
Messages: 17

Re: GNUstep-make

T'es trop bon Tsomi !!! lol

Tout s'claire,
oui le script fonctionne sous slack12.2, qui elle a bash3.
J'avais mme install cette version pour vrifier.

J'avais, aussi, justement enlev les parenthses car je ne voyais pas pourquoi faire faire cela dans un sous-shell...bien sur cela ne marchait pas plus ! hmm

Super les explications sur de || true je me posais la question de savoir quoi cela sert et j'avais laiss cela de cot sur le script que je fais.

J'ai pas encore essay, mais j'en sais suffisamment pour faire que cela marche.

cheers man !

polux

Hors ligne

 

#4 21-07-2010 13:00:11

dodo
Membre trs actif
Date d'inscription: 20-01-2006
Messages: 355

Re: GNUstep-make

Je crois que j'ai eu ce pb de strip avec mon SB de privoxy-3.0.16 sous 13.1, j'ai remplac avec un simple :

Code:

strip $PKG/usr/sbin/privoxy

Hors ligne

 

#5 25-07-2010 10:11:23

polux
Membre
Date d'inscription: 15-07-2010
Messages: 17

Re: GNUstep-make

Bonjour,
j'ai un problme avec un de ces deux slackbuild, l'un s'installe(lanc sous root, sans fakeroot):

Code:

#!/bin/sh
#
# Slackware build script for GNUstep's make package.

SRC_NAME=${SRC_NAME:-gnustep-make}
SRC_VERSION=${SRC_VERSION:-2.4.0}
SRC_EXT=${SRC_EXT:-tar.gz}

PKG_EXT=${PKG_EXT:-txz}

SRC_DOC=(ANNOUNCE COPYING FAQ GNUstep-HOWTO INSTALL NEWS \
         README README.Packaging RELEASENOTES Version)

SRC_URL=${SRC_URL:-ftp://ftp.gnustep.org/pub/gnustep/core/$SRC_NAME-$SRC_VERSION.$SRC_EXT}
SRC_SUM=${SRC_SUM:-afda14186394c65b0871dba93f92dc965b2fc724}   # sha1sum

C_COMP=${C_COMP:-gcc}                   # we might use "clang" someday

FS_LAYOUT=${FS_LAYOUT:-fhs-system}      # options are gnustep, fhs-system
LIB_COMBO=${LIB_COMBO:-gnu-gnu-gnu}     # options are gnu-gnu-gnu, apple-apple-apple

TMP=${TMP:-/tmp}
OUT=${OUT:-/tmp/build}
BUILD=${BUILD:-01}
ARCH=""                                 # options are i486, i686, x86_64

## we should be ready for battle by now !

set -e
umask 022
CUR_DIR=$( pwd )

if [ "$(whoami)" = root ]; then
   echo "You shouldn't be running this SlackBuild as ROOT user !"
   echo "I'm giving you 10 seconds to surrender yourself with \"Ctrl-c\""
   sleep 10
fi

if [ ! -r $SRC_NAME-$SRC_VERSION.$SRC_EXT ]; then
   wget -vc $SRC_URL -O $SRC_NAME-$SRC_VERSION.$SRC_EXT.part
   mv $SRC_NAME-$SRC_VERSION.$SRC_EXT.part $SRC_NAME-$SRC_VERSION.$SRC_EXT
fi

CHECK_SUM=$( sha1sum $SRC_NAME-$SRC_VERSION.$SRC_EXT | cut -d" " -f1 )
if [ ! $SRC_SUM = $CHECK_SUM ]; then
   echo "the sums don't match - aborting !"
   exit 1
fi

rm -rf $TMP/build
rm -rf $TMP/$SRC_NAME
mkdir $TMP/$SRC_NAME || exit 1

tar xvf ./$SRC_NAME-$SRC_VERSION.$SRC_EXT -C $TMP/$SRC_NAME
cd $TMP/$SRC_NAME/$SRC_NAME-$SRC_VERSION
chown root:root . -R

if [ "$ARCH" = "" ]; then
   ARCH=$( uname -m )
fi

case $ARCH in x86_64) C_FLAGS="-O2 -fPIC"; LIB_SUFFIX="64" ;;
                i486) C_FLAGS="-O2 -march=i486 -mtune=i686" ;;
                i686) C_FLAGS="-O2 -march=i686" ;;
                   *) C_FLAGS="-O2 -march=$ARCH"
esac

CC=$C_COMP \
CFLAGS=$C_FLAGS \
CXXFLAGS=$C_FLAGS \
./configure  --prefix=/usr \
             --with-library-combo=$LIB_COMBO \
             --libdir=/usr/lib${LIB_SUFFIX} \
             --build=$ARCH-slackware-linux \
             --enable-strip-makefiles \
             --with-layout=$FS_LAYOUT \
             --with-objc-lib-flag \
             --localstatedir=/var \
             --sysconfdir=/etc
             
mkdir -p $TMP/build/$SRC_NAME
make install DESTDIR=$TMP/build/$SRC_NAME

cd $CUR_DIR
   mkdir -p $TMP/build/$SRC_NAME/install
   cat ./doinst.sh > $TMP/build/$SRC_NAME/install/doinst.sh
   cat ./slack-desc > $TMP/build/$SRC_NAME/install/slack-desc
   
cd $TMP/$SRC_NAME/$SRC_NAME-$SRC_VERSION
   mkdir -p $TMP/build/$SRC_NAME/usr/doc/$SRC_NAME-$SRC_VERSION
   for files in ${SRC_DOC[*]}; do
       cp $files $TMP/build/$SRC_NAME/usr/doc/$SRC_NAME-$SRC_VERSION
   done

mv $TMP/build/$SRC_NAME/usr/share/man $TMP/build/$SRC_NAME/usr

# Fix man and info path in GNUstep.conf
sed -i 's|/usr/share/man|/usr/man|g' $TMP/build/$SRC_NAME/etc/GNUstep/GNUstep.conf
sed -i 's|/usr/local/share/man|/usr/local/man|g' $TMP/build/$SRC_NAME/etc/GNUstep/GNUstep.conf
sed -i 's|/usr/share/info|/usr/info|g' $TMP/build/$SRC_NAME/etc/GNUstep/GNUstep.conf
sed -i 's|/usr/local/share/info|/usr/local/info|g' $TMP/build/$SRC_NAME/etc/GNUstep/GNUstep.conf

# Don't clobber the config file on upgrades
mv /$TMP/build/$SRC_NAME/etc/GNUstep/GNUstep.conf $TMP/build/$SRC_NAME/etc/GNUstep/GNUstep.conf.new

/sbin/makepkg -l y -c n $OUT/$SRC_NAME-$SRC_VERSION-$ARCH-$BUILD.$PKG_EXT

if [ "$1" = "--cleanup" ]; then
    echo "cleaning up"
    rm -rf $TMP/build/$PKG_NAME
    rm -rf $TMP/$PKG_NAME
fi

exit 0

mais l'autre avec fakeroot, lanc en simple utilisateur, me balance tous les fichiers la racine du sytme( / )

Code:

#!/bin/sh
#
# Slackware build script for GNUstep's make package.

SRC_NAME=${SRC_NAME:-gnustep-make}
SRC_VERSION=${SRC_VERSION:-2.4.0}
SRC_EXT=${SRC_EXT:-tar.gz}

PKG_EXT=${PKG_EXT:-txz}

SRC_DOC=(ANNOUNCE COPYING FAQ GNUstep-HOWTO INSTALL NEWS \
         README README.Packaging RELEASENOTES Version)

SRC_URL=${SRC_URL:-ftp://ftp.gnustep.org/pub/gnustep/core/$SRC_NAME-$SRC_VERSION.$SRC_EXT}
SRC_SUM=${SRC_SUM:-afda14186394c65b0871dba93f92dc965b2fc724}   # sha1sum

C_COMP=${C_COMP:-gcc}                   # we might use "clang" someday

FS_LAYOUT=${FS_LAYOUT:-fhs-system}      # options are gnustep, fhs-system
LIB_COMBO=${LIB_COMBO:-gnu-gnu-gnu}     # options are gnu-gnu-gnu, apple-apple-apple

TMP=${TMP:-/tmp}
OUT=${OUT:-/tmp/build}
BUILD=${BUILD:-02}
ARCH=""                                 # options are i486, i686, x86_64

## we should be ready for battle by now !

set -e
umask 022
CUR_DIR=$( pwd )

if [ "$(whoami)" = root ]; then
   echo "You shouldn't be running this SlackBuild as ROOT user !"
   echo "I'm giving you 10 seconds to surrender yourself with \"Ctrl-c\""
   sleep 10
fi

if [ ! -r $SRC_NAME-$SRC_VERSION.$SRC_EXT ]; then
   wget -vc $SRC_URL -O $SRC_NAME-$SRC_VERSION.$SRC_EXT.part
   mv $SRC_NAME-$SRC_VERSION.$SRC_EXT.part $SRC_NAME-$SRC_VERSION.$SRC_EXT
fi

CHECK_SUM=$( sha1sum $SRC_NAME-$SRC_VERSION.$SRC_EXT | cut -d" " -f1 )
if [ ! $SRC_SUM = $CHECK_SUM ]; then
   echo "the sums don't match - aborting !"
   exit 1
fi

rm -rf $TMP/build
rm -rf $TMP/$SRC_NAME
mkdir $TMP/$SRC_NAME || exit 1

tar xvf ./$SRC_NAME-$SRC_VERSION.$SRC_EXT -C $TMP/$SRC_NAME
cd $TMP/$SRC_NAME/$SRC_NAME-$SRC_VERSION

if [ "$ARCH" = "" ]; then
   ARCH=$( uname -m )
fi

case $ARCH in x86_64) C_FLAGS="-O2 -fPIC"; LIB_SUFFIX="64" ;;
                i486) C_FLAGS="-O2 -march=i486 -mtune=i686" ;;
                i686) C_FLAGS="-O2 -march=i686" ;;
                   *) C_FLAGS="-O2 -march=$ARCH"
esac

CC=$C_COMP \
CFLAGS=$C_FLAGS \
CXXFLAGS=$C_FLAGS \
./configure  --prefix=/usr \
             --with-library-combo=$LIB_COMBO \
             --libdir=/usr/lib${LIB_SUFFIX} \
             --build=$ARCH-slackware-linux \
             --enable-strip-makefiles \
             --with-layout=$FS_LAYOUT \
             --with-objc-lib-flag \
             --localstatedir=/var \
             --sysconfdir=/etc
             
mkdir -p $TMP/build/$SRC_NAME
make install DESTDIR=$TMP/build/$SRC_NAME

cd $CUR_DIR
   mkdir -p $TMP/build/$SRC_NAME/install
   cat ./doinst.sh > $TMP/build/$SRC_NAME/install/doinst.sh
   cat ./slack-desc > $TMP/build/$SRC_NAME/install/slack-desc
   
cd $TMP/$SRC_NAME/$SRC_NAME-$SRC_VERSION
   mkdir -p $TMP/build/$SRC_NAME/usr/doc/$SRC_NAME-$SRC_VERSION
   for files in ${SRC_DOC[*]}; do
       cp $files $TMP/build/$SRC_NAME/usr/doc/$SRC_NAME-$SRC_VERSION
   done

mv $TMP/build/$SRC_NAME/usr/share/man $TMP/build/$SRC_NAME/usr

# Fix man and info path in GNUstep.conf
sed -i 's|/usr/share/man|/usr/man|g' $TMP/build/$SRC_NAME/etc/GNUstep/GNUstep.conf
sed -i 's|/usr/local/share/man|/usr/local/man|g' $TMP/build/$SRC_NAME/etc/GNUstep/GNUstep.conf
sed -i 's|/usr/share/info|/usr/info|g' $TMP/build/$SRC_NAME/etc/GNUstep/GNUstep.conf
sed -i 's|/usr/local/share/info|/usr/local/info|g' $TMP/build/$SRC_NAME/etc/GNUstep/GNUstep.conf

# Don't clobber the config file on upgrades
mv /$TMP/build/$SRC_NAME/etc/GNUstep/GNUstep.conf $TMP/build/$SRC_NAME/etc/GNUstep/GNUstep.conf.new

PACKAGING="
chown root:root . -R
/sbin/makepkg -l y -c n $OUT/$SRC_NAME-$SRC_VERSION-$ARCH-$BUILD.$PKG_EXT
"

if type -p fakeroot ; then
   echo "$PACKAGING" | fakeroot
 else
   su -c "$PACKAGING"
fi

if [ "$1" = "--cleanup" ]; then
    echo "cleaning up"
    rm -rf $TMP/build/$PKG_NAME
    rm -rf $TMP/$PKG_NAME
fi

exit 0

slack-desc

Code:

             |-----handy-ruler------------------------------------------------------|
gnustep-make:                       GNUstep makefile package.
gnustep-make:
gnustep-make:  The makefile package is a simple, powerful and extensible way
gnustep-make:  to write makefiles for a GNUstep-based project.
gnustep-make:
gnustep-make:  It allows the user to write a gnustep-make: project without having
gnustep-make:  to deal with the complex issues associated with configuration,
gnustep-make:  building, installation and packaging.
gnustep-make: 
gnustep-make:  It also allows the user to easily create cross-compiled binaries.
gnustep-make:

doinst.sh

Code:

config() {

 NEW_FILE="$1"
 OLD_FILE="$(dirname $NEW_FILE)/$(basename $NEW_FILE .new)"
                   # If there's no config file by that name, mv it over:
 if [ ! -r $OLD_FILE ]; then
    mv $NEW_FILE $OLD_FILE
  elif [ "$(cat $OLD_FILE | md5sum)" = "$(cat $NEW_FILE | md5sum)" ]; then 
    rm $NEW_FILE   # toss the redundant copy
 fi                # Otherwise, we leave the .new copy for the admin...
}

config etc/GNUstep/GNUstep.conf.new

quelqu'un saurait-il me dire pourquoi ?

polux

Hors ligne

 

#6 16-10-2010 18:56:27

farnese
Nouveau membre
Date d'inscription: 16-10-2010
Messages: 1

Re: GNUstep-make

Bon comme d'hab j'ai oubli de vrifier la date avant m'enfin tant pis.
Le problme est surement que tu est dans un mauvais rpertoire. Ajoute

Code:

cd $OUT/$SRC_NAME

juste avant PACKAGING= ...

Hors ligne