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 31-07-2010 17:30:22

g4tsu
Membre
Date d'inscription: 26-07-2010
Messages: 22

[Slackbuild] Yakuake

Bonjour,

Le code ci-dessous.
Merci de me dire les amliorations apporter.

Code:

#!/bin/bash
# by: g4tsu - http://www.slackware-fr.org <vion.nico@gmail.com>
#
# Build script for Slackware - Based on Generic SlackBuild
#
# Latest Software sourcecode is available at:
# http://kde-apps.org/content/show.php?content=29153 
#
# Depends: /
# Suggest: /

# Variables Obligatoires
NAMESRC=${NAMESRC:-yakuake}
VERSION=${VERSION:-2.9.7}  
EXT=${EXT:-tar.bz2} 
NAMEPKG=${NAMEPKG:-yakuake}
PKGEXT=${PKGEXT:-tgz}
BUILD=${BUILD:-1sfo} 
 
# Variables de construction
TMP=${TMP:-/tmp}  
OUT=${OUT:-$TMP/build}  
TARGET=${TARGET:-$ARCH} 
WGET=${WGET:-http://download.berlios.de/yakuake/yakuake-2.9.7.tar.bz2} 
SUM=${SUM:-yakuake-2.9.7.tar.bz2.sha1}
DOC=${DOC:-AUTHORS ChangeLog COPYING COPYING.DOC KDE4FAQ NEWS README TODO}
if [ -z "$ARCH" ]; then
  case "$( uname -m )" in
    i?86) export ARCH=i486 ;;
    arm*) export ARCH=arm ;;
    # Unless $ARCH is already set, use uname -m for all other archs:
       *) export ARCH=$( uname -m ) ;;
  esac
fi

set -e  # Le Slackbuild s arrete des qu il y a une erreur
umask 022  # Les repertoires et fichiers crees auront respectivement les droits 755 et 644
 
# Le SlackBuild verifie que vous ne le lancez pas en root.
if [ "$(id -u)" = "0" ]; then
  echo "You shouldn't run this SlackBuild as ROOT !"
  sleep 10
fi

# Telechargement des sources si ces-dernieres ne sont pas presentes.
if [ ! -r $NAMESRC-$VERSION.$EXT ]; then
  wget -vc $WGET -O $NAMESRC-$VERSION.$EXT.part
  mv $NAMESRC-$VERSION.$EXT.part $NAMESRC-$VERSION.$EXT
fi

# Verification de la somme sha1
if [ -n $SUM ]; then
 #echo "$SUM  $NAMESRC-$VERSION.$EXT" > $NAMESRC-$VERSION.$EXT.sha1
 sha1sum -c $NAMESRC-$VERSION.$EXT.sha1
elif [ -f $NAMESRC-$VERSION.$EXT.sha1 ]; then
 sha1sum -c $NAMESRC-$VERSION.$EXT.sha1
fi

# Variables temporaires
CWD=$(pwd)
PKG=$TMP/build/$NAMEPKG
NAME=$(tar ft $NAMESRC-$VERSION.$EXT | head -n 1 | awk -F/ '{ print $1 }')

# Verification du repertoire.
if [ ! -d $TMP ]; then
  echo "$TMP doesn't exist or is not a directory !"
  exit 1
fi

# On passe a la compilation. 
cd $TMP
echo "Building $NAMESRC-$VERSION.$EXT..."
tar xf $CWD/$NAMESRC-$VERSION.$EXT
cd $NAME

# La compilation de yakuake
mkdir -p build
cd build
mkdir -p $PKG/usr
cmake -DCMAKE_INSTALL_PREFIX=$PKG/usr ../
make
make install

if [ -r $CWD/doinst.sh ]; then
  cat $CWD/doinst.sh > $PKG/install/doinst.sh
fi

# Pour la DOC
mkdir -p $PKG/usr/doc/$NAMEPKG-$VERSION
for i in $DOC
do
        cp -a $TMP/$NAME/$i $PKG/usr/doc/$NAMEPKG-$VERSION
done
# Optimisation avant creation du package
find $PKG -type f | xargs file | grep "LSB executable" | cut -f 1 -d : | xargs \
  strip --strip-unneeded 2> /dev/null || echo "No binaries to strip"
find $PKG -type f | xargs file | grep "shared object" | cut -f 1 -d : | xargs \
  strip --strip-unneeded 2> /dev/null || echo "No shared objects to strip"
find $PKG -type f | xargs file | grep "current ar archive" | cut -f 1 -d : | \
  xargs strip -g 2> /dev/null || echo "No archives to strip"

# Creation du paquet
# rm -rf $CWD/$NAMESRC-$VERSION.$EXT
cd $PKG
mkdir -p $OUT
PACKAGING="
chown root:root . -R
/sbin/makepkg -l y -c n $OUT/$NAMEPKG-$VERSION-$ARCH-$BUILD.$PKGEXT
rm -rf $PKG
rm -rf $TMP/$NAME
"
if [ "$(which fakeroot 2> /dev/null)" ]; then
  echo "$PACKAGING" | fakeroot
else
  su -c "$PACKAGING"
fi

Hors ligne

 

#2 31-07-2010 21:05:00

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

Re: [Slackbuild] Yakuake

Hello,

a m'a l'air OK avec les recommandations actuelles, le seul soucis semble tre du ct de ton utilisation de cmake. Normalement on donne toujours "/usr" comme prfixe et ensuite on appelle "make install" avec la variable DESTDIR pour l'installer dans /tmp/build/*.

Comme ceci, en fait :

Code:

cmake \
  -DCMAKE_C_FLAGS:STRING="$SLKCFLAGS" \
  -DCMAKE_CXX_FLAGS:STRING="$SLKCFLAGS" \
  -DCMAKE_BUILD_TYPE=Release \
  -DCMAKE_INSTALL_PREFIX=/usr

# Compilation:
make -j3
# Installation:
make install DESTDIR=$PKG

Hors ligne

 

#3 31-07-2010 23:56:12

g4tsu
Membre
Date d'inscription: 26-07-2010
Messages: 22

Re: [Slackbuild] Yakuake

Lo smile

Voici ce que l'on trouve dans le README :

Basic build and installation instructions:

1. tar xfvj yakuake-<version>.tar.bz2
2. cd yakuake-<version>
3. mkdir build
4. cd build
5. cmake -DCMAKE_INSTALL_PREFIX=<path to install to> ../
6. make
7. sudo make install

Encore une fois, j'essaie de rester le plus proche possible des sources smile
Dois-je modifier ou laisser comme a ? (Sachant que le DESTDIR semble "inutile")

Merci @+

Hors ligne

 

#4 03-08-2010 00:06:55

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

Re: [Slackbuild] Yakuake

En fait, la plupart du temps, les README ne donnent des instructions que pour ceux qui souhaitent installer directement le soft sur leur systme. Donc sans passer par le gestionnaire de paquets de leur distribution, etc. C'est d'ailleurs de l que vient la commande ./configure && make && make install, qui, en fait, est loin d'tre optimale.

Et l, quand ils disent "path to install to", ils parlent de l'emplacement du systme dans lequel on souhaite installer le paquet. Gnralement /usr ou /usr/local. C'est /usr qui est utilis sur Slackware.

Mais ensuite, on veut installer le soft dans un rpertoire temporaire pour crer le paquet. Et c'est l qu'intervient DESTDIR.

Et il ne faut pas confondre les deux. Le prfixe, /usr, c'est l'endroit o sera install le paquet. DESTDIR, c'est le rpertoire temporaire utilis pour le crer.

Alors, oui, souvent, utiliser $PKG/usr comme prfixe, a marchera. Il y a mme des fois o on est obligs de procder ainsi parce que les Makefile sont vraiment mal faits (tu peux regarder le SlackBuild officiel de a/elvis).
Mais a peut crer des problmes : la configuration, les fichiers .pc/.la (souvent ncessaires quand le paquet contient des bibliothques), la doc, les manpages, etc. ont parfois tendance contenir des "/tmp/build/<nom_du_soft>/usr" un peu partout (d'ailleurs c'est qui arrive avec a/elvis).

Bref, quand on peut utiliser DESTDIR (avec cmake ou les ./configure, a marche quasiment tout le temps), c'est toujours une bonne ide de le faire. a permet tout simplement d'viter certains soucis wink .

Cela dit, tu as entirement raison de vouloir rester le plus proche possible des sources , c'est la philosophie de la distribution. Mais les instructions que l'on trouve dans les README au sujet de l'empaquetage sont gnralement incompltes (ils ne prennent pas en compte les CFLAGS, par exemple). Donc les README ne sont pas toujours prendre pour argent comptant..

(Je vois aussi que le README conseille l'utilisation d'un rpertoire build, comme tu l'as fait. Je n'ai jamais eu de problmes ne pas l'utiliser (quand c'est un projet cmake) mais tu as probablement raison de vouloir l'utiliser)

Hors ligne

 

#5 03-08-2010 10:02:52

g4tsu
Membre
Date d'inscription: 26-07-2010
Messages: 22

Re: [Slackbuild] Yakuake

Ok.

Je modifierai le SB en consquence. smile
Merci pour les infos.

@+

Hors ligne

 

#6 03-08-2010 10:18:21

Thom1
Administrateur
Date d'inscription: 21-09-2007
Messages: 524
Site web

Re: [Slackbuild] Yakuake

Salut,

Juste pour info, il existe un moyen de dfinir l'arch automatiquement en une seule ligne :

Code:

ARCH=${ARCH:-$(uname -m | sed 's/^i.86$/i486/;s/^arm.*/arm/')}

au lieu de ce long morceau de code :

Code:

if [ -z "$ARCH" ]; then
  case "$( uname -m )" in
    i?86) export ARCH=i486 ;;
    arm*) export ARCH=arm ;;
    # Unless $ARCH is already set, use uname -m for all other archs:
       *) export ARCH=$( uname -m ) ;;
  esac
fi

Hors ligne

 

#7 03-08-2010 13:21:31

g4tsu
Membre
Date d'inscription: 26-07-2010
Messages: 22

Re: [Slackbuild] Yakuake

OK smile

Hors ligne

 

#8 03-08-2010 13:55:39

g4tsu
Membre
Date d'inscription: 26-07-2010
Messages: 22

Re: [Slackbuild] Yakuake

Modification effectue.
Je n'ai pas pu tester encore (pas sur une slack).

Prsent sur mon svn en ro :

Code:

svn checkout svn://linuxspirit.fr/slackbuilds

Hors ligne

 

#9 05-08-2010 21:32:52

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

Re: [Slackbuild] Yakuake

Thom1 a crit:

Salut,

Juste pour info, il existe un moyen de dfinir l'arch automatiquement en une seule ligne :

Code:

ARCH=${ARCH:-$(uname -m | sed 's/^i.86$/i486/;s/^arm.*/arm/')}

au lieu de ce long morceau de code :

Code:

if [ -z "$ARCH" ]; then
  case "$( uname -m )" in
    i?86) export ARCH=i486 ;;
    arm*) export ARCH=arm ;;
    # Unless $ARCH is already set, use uname -m for all other archs:
       *) export ARCH=$( uname -m ) ;;
  esac
fi

Ah tiens, sympa, a. Cela dit, comme dans le bout de code original, il manque aussi un cas pour l'archi powerpc : ppc* devrait devenir powerpc (eh voui j'ai rcupr un vieux G3 B&W sur lequel j'ai mis une Slackintosh big_smile ).

Code:

ARCH=${ARCH:-$(uname -m | sed 's/^i.86$/i486/;s/^arm.*/arm/;s/^ppc.*/powerpc/')}

Mais il y a toujours la partie qui dfinit LIBDIRSUFFIX/SLKCFLAGS qui doit se faire avec un case...


g4tsu a crit:

Modification effectue.
Je n'ai pas pu tester encore (pas sur une slack).

Prsent sur mon svn en ro :

Code:

svn checkout svn://linuxspirit.fr/slackbuilds

Sympa aussi, a.

Hors ligne