Repository 32bit  Forum
Repository 64bit  Wiki

slackBuild racket

Postate qui se avete consigli per migliorare i pacchetti disponibili in questo sito o se avete problemi con installazione, funzionamento o altro.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il nome del pacchetto.
2) Specificare se discussione/suggerimento o richiesta d'aiuto.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.

slackBuild racket

Messaggioda boh » dom mar 25, 2012 0:57

Metto a disposizione lo slackBuild di racket per chi ne avesse bisogno.
E' il primo slackbuild che scrivo, ma è abbastanza standard avendo preso spunto dal wiki :D
Il pacchetto è stato creato correttamente :)

Avrei comunque alcune domande:
  • il pacchetto creato pesa ben 40MB, nonostante lo stripping effettuato; c'è qualche possibilità che lo stripping non sia avvenuto? :-k
  • nei CFLAGS per la compilazione a 32 bit ho visto che si specificano le opzioni -march e -mtune, mentre a 64bit si usa -fPIC; ho fatto qualche ricerca in google, ma con poco successo. Cos'è -fPIC? E a cosa serve? Non sembra avere molti riferimenti all'architettura del sistema...
  • c'è qualche ottimizzazione o trick da aggiungere allo slackBuild?

Grazie in anticipo :)

Codice: Seleziona tutto
#!/bin/sh
#
# Written by Alberto Coletta (alby dot coletta at gmail dot com)
#
# http://racket-lang.org/

CWD=`pwd`
if ["$TMP" = ""]; then
TMP=/tmp
fi
PKG=$TMP/package-racket
NAME=racket
VERSION=5.2.1
ARCH=x86_64
BUILD=1boh

if [ ! -d $TMP ]; then
mkdir -p $TMP
fi

 if [ ! -d $PKG ]; then
mkdir -p $PKG
fi

cd $TMP
tar xzvf $CWD/$NAME-$VERSION.tgz

cd $NAME-$VERSION
chown -R root.root .
find . -perm 775 -exec chmod 755 {} \;
find . -perm 664 -exec chmod 644 {} \;

cd src

CFLAGS="-O2 -fPIC" ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var
make
make install DESTDIR=$PKG

mkdir -p $PKG/usr/doc/$NAME-$VERSION

cp -a README $PKG/usr/doc/$NAME-$VERSION

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

gzip -9 $PKG/usr/man/*/*
gzip -9 $PKG/usr/info/*

chown -R root.bin $PKG/usr/bin

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

cd $PKG
makepkg -l y -c n $TMP/$NAME-$VERSION-$ARCH-$BUILD.txz

if [ "$1" = "--cleanup" ]; then
rm -rf $TMP/$NAME-$VERSION
rm -rf $PKG
fi


Posto anche lo slack-desc, in caso qualcuno volesse provare a compilarlo:
Codice: Seleziona tutto
# HOW TO EDIT THIS FILE:
# The "handy ruler" below makes it easier to edit a package description.  Line
# up the first '|' above the ':' following the base package name, and the '|'
# on the right side marks the last column you can put a character in.  You must
# make exactly 11 lines for the formatting to be correct.  It's also
# customary to leave one space after the ':'.

          |-----handy-ruler------------------------------------------------------|
racket: racket (programming language)
racket:
racket: Racket is a scheme-based programming language
racket:
racket: http://racket-lang.org/
racket:
racket:
racket:
racket:
racket:
racket:
"Be yourself. Everyone else is already taken." ~ Oscar Wilde
Avatar utente
boh
Linux 2.6
Linux 2.6
 
Messaggi: 943
Iscritto il: gio set 15, 2005 23:00
Località: Milano
Slackware: 14.1 (x64)
Kernel: 3.10.17
Desktop: KDE 4.10.5

Re: slackBuild racket

Messaggioda hashbang » dom mar 25, 2012 10:36

boh ha scritto:[*]il pacchetto creato pesa ben 40MB, nonostante lo stripping effettuato; c'è qualche possibilità che lo stripping non sia avvenuto? :-k
Beh la dimensione del pacchetto, deriva anche dalla dimensione dell'applicazione.
Comunque nel nostro SB usiamo anche lo strip per le librerie statiche. Aggiungici anche quello, non si sa mai. ;)

[*]nei CFLAGS per la compilazione a 32 bit ho visto che si specificano le opzioni -march e -mtune, mentre a 64bit si usa -fPIC; ho fatto qualche ricerca in google, ma con poco successo. Cos'è -fPIC? E a cosa serve? Non sembra avere molti riferimenti all'architettura del sistema...
GCC Documentation

GCC Documentation ha scritto:-fPIC
If supported for the target machine, emit position-independent code, suitable for dynamic linking and avoiding any limit on the size of the global offset table. This option makes a difference on the m68k, PowerPC and SPARC.

Position-independent code requires special support, and therefore works only on certain machines.

When this flag is set, the macros __pic__ and __PIC__ are defined to 2.


[*]c'è qualche ottimizzazione o trick da aggiungere allo slackBuild?[/list]
Di solito, quando compilo per me uso i parametri native ai flag -march e -mtune, così ottengo binari "cuciti addosso" alla mia architettura.

Ho una domanda da farti: perchè hai messo una condizione if/then su $TMP?
Se togli la condizione, lasciando TMP=/tmp, la variabile sarà comunque sovrascrivibile precedendola allo SlackBuild.
Esempio:
Codice: Seleziona tutto
TMP=/path/che/più/ti/garba ./pippo.SlackBuild


Altra cosa: se proprio vuoi fare una condizione sul contenuto di una variabile, io non userei la sintassi da te usata.
Io userei il parametro -z di test(1), che serve proprio a controllare se la variabile è nulla (o meglio, controlla se la dimensione della stringa è zero).
Codice: Seleziona tutto
if [ -z $PIPPO ]; then
    PIPPO=pluto
fi
Adoro il pragmatismo della lingua giapponese, è l'unica in cui per dire ad una ragazza che la ami le dici "suki". (cit.)
Avatar utente
hashbang
Packager
Packager
 
Messaggi: 1824
Iscritto il: ven giu 04, 2010 9:27
Località: Lecce
Nome Cognome: Luca De Pandis
Distribuzione: Windows 8.1 Pro

Re: slackBuild racket

Messaggioda boh » dom mar 25, 2012 13:41

Intanto grazie per la risposta!

Per lo stripping delle librerie statiche una soluzione così va bene?
Codice: Seleziona tutto
( cd $PKG
  find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs -r strip --strip-unneeded 2> /dev/null || true
  find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs -r strip --strip-unneeded 2> /dev/null || true
  find . | xargs file | grep "current ar archive" | cut -f 1 -d : | xargs -r strip --strip-unneeded 2> /dev/null || true
)


L'opzione -fPIC l'ho usata perchè veniva usata nel wiki e anche in uno slackBuild su SBo. Mi sorgono quindi altre domande:
  • per un'architettura a 32 bit generica -march=i486 -mtune=i686 vanno bene? Ho letto sulla documentazione che è possibile anche un -march=atom -mtune=atom; il problema è che c'è scritto che l'atom abbia l'estensione per i 64bit, cosa che il mio (N280) non ha. Devo quindi convergere sulla soluzione generica?
  • per un'architettura a 64bit generica -march=k8 -mtune=k8 vanno bene? Perchè ho letto che x86_64 non è accettato come valori di quei parametri. Inoltre sul mio Intel Corei7 posso usare -march=corei7 -mtune=corei7?
  • Infine ho letto dalla documentazinone che:
    Specifying -march=cpu-type implies -mtune=cpu-type.
    Ciò significa che è sufficiente specificare -march?

Chiedo scusa per le tante domande, ma vorrei dissipare tutti i dubbi!
Le varie opzioni le ho prese da http://gcc.gnu.org/onlinedocs/gcc/i386-and-x86_002d64-Options.html

Per rispondere alla tua ultima domanda sulle variabili, anche in quel caso ho usato quel controllo perchè il wiki lo faceva e anche su molti slackbuild di SBo :)
"Be yourself. Everyone else is already taken." ~ Oscar Wilde
Avatar utente
boh
Linux 2.6
Linux 2.6
 
Messaggi: 943
Iscritto il: gio set 15, 2005 23:00
Località: Milano
Slackware: 14.1 (x64)
Kernel: 3.10.17
Desktop: KDE 4.10.5

Re: slackBuild racket

Messaggioda hashbang » dom mar 25, 2012 18:01

boh ha scritto:Per lo stripping delle librerie statiche una soluzione così va bene?
Codice: Seleziona tutto
( cd $PKG
  find . | xargs file | grep "executable" | grep ELF | cut -f 1 -d : | xargs -r strip --strip-unneeded 2> /dev/null || true
  find . | xargs file | grep "shared object" | grep ELF | cut -f 1 -d : | xargs -r strip --strip-unneeded 2> /dev/null || true
  find . | xargs file | grep "current ar archive" | cut -f 1 -d : | xargs -r strip --strip-unneeded 2> /dev/null || true
)
Si. È una soluzione abbastanza completa.

L'opzione -fPIC l'ho usata perchè veniva usata nel wiki e anche in uno slackBuild su SBo. Mi sorgono quindi altre domande:
  • per un'architettura a 32 bit generica -march=i486 -mtune=i686 vanno bene? Ho letto sulla documentazione che è possibile anche un -march=atom -mtune=atom; il problema è che c'è scritto che l'atom abbia l'estensione per i 64bit, cosa che il mio (N280) non ha. Devo quindi convergere sulla soluzione generica?
Se vuoi compilare per la tua macchina e sai che l'applicazione deve funzionare sulla tua macchina, io convergerei su native ad -march.
Codice: Seleziona tutto
-march=native

In questo modo compilerai il binario per il tuo processore.
Se vuoi compilare genericamene, potresti comunque optare per
Codice: Seleziona tutto
-march=i686 -mtune=generic

oppure
Codice: Seleziona tutto
-march=i686 -mtune=i686


  • per un'architettura a 64bit generica -march=k8 -mtune=k8 vanno bene? Perchè ho letto che x86_64 non è accettato come valori di quei parametri. Inoltre sul mio Intel Corei7 posso usare -march=corei7 -mtune=corei7?
  • Dovresti controllare tra i flag di compilazione.
    Anche in quel caso io preferisco il native, perchè in questo modo il compilatore terrà conto delle istruzioni della tua CPU e creerà un binario specifico per la tua CPU.

  • Infine ho letto dalla documentazinone che:
    Specifying -march=cpu-type implies -mtune=cpu-type.
    Ciò significa che è sufficiente specificare -march?
  • Potrebbe bastare -march, a patto che -mtune non debba contenere un parametro diverso.
    Diciamo che march stabilisce l'architettura target, mentre mtune stabilisce l'ottimizzazione per una specifica architettura.
    In altre parole,
    Codice: Seleziona tutto
    -O2 -march=i486 -mtune=i686

    vuol dire che i binari saranno ottimizzati per essere più veloci (-O2), quindi meno ottimizzati per dimensione (come lo sarebbero col flag -Os), compilati per i486 (-march=i486) e ottimizzati per i686 (-mtune=i686). Se devi compilare per la tua sola architettura è inutile specificare mtune.
    Però, ripeto, per evitare di perdere tempo coi flag per cercare di ottimizzare il binario per tutte le istruzioni supportate dalla CPU, fai prima a settare march a native.

    Per rispondere alla tua ultima domanda sulle variabili, anche in quel caso ho usato quel controllo perchè il wiki lo faceva e anche su molti slackbuild di SBo :)
    Non mi piace molto come soluzione. La trovo inutile.
    Come ho detto, se la variabile la setti senza condizione, la puoi comunque sovrascrivere al lancio dello script. In altre parole, la condizione if/then risulta solo essere un inutile ingombro di codice che l'interprete dovrà farsi carico di leggere.
    Adoro il pragmatismo della lingua giapponese, è l'unica in cui per dire ad una ragazza che la ami le dici "suki". (cit.)
    Avatar utente
    hashbang
    Packager
    Packager
     
    Messaggi: 1824
    Iscritto il: ven giu 04, 2010 9:27
    Località: Lecce
    Nome Cognome: Luca De Pandis
    Distribuzione: Windows 8.1 Pro

    Re: slackBuild racket

    Messaggioda boh » lun mar 26, 2012 10:31

    Grazie delle risposte! :D
    "Be yourself. Everyone else is already taken." ~ Oscar Wilde
    Avatar utente
    boh
    Linux 2.6
    Linux 2.6
     
    Messaggi: 943
    Iscritto il: gio set 15, 2005 23:00
    Località: Milano
    Slackware: 14.1 (x64)
    Kernel: 3.10.17
    Desktop: KDE 4.10.5


    Torna a Packages

    Chi c’è in linea

    Visitano il forum: Bing [Bot] e 3 ospiti