Difference between revisions of "Haskell package guidelines (Italiano)"

From ArchWiki
Jump to: navigation, search
m
(rm out of date translation)
(Tag: Replaced)
 
(18 intermediate revisions by 6 users not shown)
Line 1: Line 1:
 
[[Category:Package development (Italiano)]]
 
[[Category:Package development (Italiano)]]
{{i18n|Haskell package guidelines}}
+
[[en:Haskell package guidelines]]
 
+
[[ja:Haskell パッケージガイドライン]]
{{Article summary start|Sommario}}
+
[[pt:Haskell package guidelines]]
{{Article summary text|Creazione di [[PKGBUILD (Italiano)|PKGBUILD]] per software scritto in [[Wikipedia:Haskell|Haskell]].}}
+
{{Package Guidelines (Italiano)}}
{{Package Guidelines}}
 
{{Article summary end}}
 
 
 
'''Haskell in Arch Linux'''
 
 
 
Haskell è ben supportato su Arch Linux, poichè GHC ed altri tools fondamentali sono disponibili nei [[Official Repositories (Italiano)|repository ufficiali]]; inoltre, un numero sempre maggiore di pacchetti vengono creati dal gruppo ArchHaskell, così come un'ampia parte del database di librerie di [http://hackage.haskell.org hackage.haskell.org] è [https://aur.archlinux.org/packages.php?O=0&L=0&C=0&K=arch-haskell&SeB=m&SB=n&SO=a&PP=100&do_Search=Go disponibile su AUR].
 
 
 
Come avrete notato, la community che si occupa di Haskell su Arch Linux è attiva e ben organizzata, ma il vostro aiuto è sempre ben accetto.
 
 
 
==Community==
 
È possibile consultare [[ArchHaskell]] per ulteriori informazioni sul gruppo.
 
 
 
==Pacchetti Haskell==
 
I tools fondamentali per Haskell, sono disponibili nel repository [extra]:
 
 
 
====[extra]====
 
* [http://www.archlinux.org/packages/?arch=x86_64&repo=Extra&q=haskell&last_update=&limit=50 Elenco pacchetti Haskell contenuti in <nowiki>[extra]</nowiki>]
 
 
 
Il repository <nowiki>[extra]</nowiki> conterrà la piattaforma Haskell e le applicazioni più popolari.
 
 
 
====<nowiki>[community]</nowiki>====
 
* [http://www.archlinux.org/packages/?arch=x86_64&repo=Community&q=haskell&last_update=&limit=50 altri pacchetti Haskell]
 
 
 
Il repository [community] fornisce pacchetti aggiuntivi che non fanno parte della piattaforma Haskell, come [[xmonad|xmonad]].
 
 
 
====[Haskell]====
 
[haskell] è il repository ufficiale dell'ArchHaskell team. È l'ultimo luogo dove poter reperire pacchetti stabili, prima di utilizzare AUR o di compilare un pacchetto autonomamente con cabal2arch.
 
 
 
È possibile utilizzare il suddetto repostitory aggiungendo la seguente linea al proprio {{ic|/etc/pacman.conf}}:
 
 
 
[haskell]
 
Server = http://xsounds.org/~haskell/$arch
 
 
 
I pacchetti contenuti nel repository [haskell], derivano dal tree dell'utente '''habs''', reperibile [https://github.com/archhaskell/habs qui]. È possibile usare un tool chiamato [https://github.com/magthe/cblrepo cblrepo] per sincronizzare il tree di '''habs''' con i pacchetti Haskell ufficiali provenienti da [http://hackage.haskell.org/packages/hackage.html Hackage].
 
 
 
====AUR====
 
* [https://aur.archlinux.org/packages.php?O=0&L=0&C=0&K=arch-haskell&SeB=m&SB=n&SO=a&PP=100&do_Search=Go Pacchetti Haskell in AUR]
 
 
 
AUR contiene un grande numero di pacchetti (quasi 2000) compilati da [http://hackage.haskell.org hackage.haskell.org]
 
 
 
È preferibile installarli direttamente da AUR, invece che da Hackage, poichè vengono installate automaticamente tutte le librerie necessarie. Ad esempio:
 
 
 
# paktahn -S haskell-csv
 
 
 
Tutto ciò che non è possibile trovare su AUR, può essere installato tramite {{pkg|cabal-install}}, che preleva il pacchetto direttamente da Hackage.
 
 
 
Sfortunatamente, molti dei pacchetti su AUR non sono aggiornati a causa della mancanza di risorse. In sostanza, è possibile utilizzare cabal2arch per creare dei PKGBUILD direttamente da Hackage.
 
 
 
==Linee guida==
 
Nella quasi totalità dei casi, è possibile convertire i pacchetti "cabalizzati" nel formato pacchetti usato da Arch, attraverso {{AUR|cabal2arch}}. È caldamente raccomandato usare sempre l'ultima versione disponibile di questo software, poichè rispetta le politiche di impacchettamento dei pacchetti Haskell. È possibile ottenere questo tool in diversi modi:
 
 
 
* Aggiungendo il repository <nowiki>[haskell]</nowiki> a {{ic|/etc/pacman.conf}}, e usando [[Pacman (Italiano)|pacman]] per installare l'ultima versione
 
* Scaricando e compilando i sorgenti del pacchetto {{AUR|cabal2arch}} da [[AUR (Italiano)|AUR]].
 
* Installandolo direttamente da hackage usando "cabal install cabal2arch".
 
 
 
===cabal2arch: un esempio===
 
Questo esempio spiega come creare un nuovo pacchetto usando cabal2arch. Nello specifico, si creerà un pacchetto per la libreria CC-delcont:
 
 
 
Innanzitutto, impostare il nome e l'indirizzo email da usare nel PKGBUILD che verrà generato:
 
 
 
export ARCH_HASKELL='My Name <my.name@domain.org>'
 
 
 
Poi, cercare la [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/pandoc pagina di Hackage relativa a pandoc] ed identificare il link al file .cabal. Si passi il suddetto come argomento a cabal2arch:
 
 
 
{{bc|<nowiki>
 
% cd /tmp
 
% cabal2arch http://hackage.haskell.org/packages/archive/pandoc/1.6.0.1/pandoc.cabal
 
Using /tmp/tmp.D7HAJJx2js/pandoc.cabal
 
Feeding the PKGBUILD to `makepkg -g`...
 
==> Retrieving Sources...
 
  -> Downloading pandoc-1.6.0.1.tar.gz...
 
--2011-05-14 07:25:39--  http://hackage.haskell.org/packages/archive/pandoc/1.6.0.1/pandoc-1.6.0.1.tar.gz
 
Resolving hackage.haskell.org... 69.30.63.204
 
Connecting to hackage.haskell.org|69.30.63.204|:80... connected.
 
HTTP request sent, awaiting response... 200 OK
 
Length: 355477 (347K) [application/x-tar]
 
Saving to: “pandoc-1.6.0.1.tar.gz.part”
 
 
 
    0K .......... .......... .......... .......... .......... 14%  210K 1s
 
    50K .......... .......... .......... .......... .......... 28%  393K 1s
 
  100K .......... .......... .......... .......... .......... 43%  338K 1s
 
  150K .......... .......... .......... .......... .......... 57%  419K 0s
 
  200K .......... .......... .......... .......... .......... 72%  404K 0s
 
  250K .......... .......... .......... .......... .......... 86%  554K 0s
 
  300K .......... .......... .......... .......... .......  100%  506K=0.9s
 
 
 
2011-05-14 07:25:40 (369 KB/s) - “pandoc-1.6.0.1.tar.gz.part” saved [355477/355477]
 
 
 
==> Generating checksums for source files...
 
</nowiki>}}
 
 
 
Si controlli cosa è stato generato:
 
 
 
haskell-pandoc
 
% cd haskell-pandoc
 
% ls
 
haskell-pandoc.install PKGBUILD
 
 
 
È ora possibile esaminare il PKGBUILD e lo script .install relativo alla libreria:
 
 
 
{{bc|<nowiki>
 
# Maintainer:
 
_hkgname=pandoc
 
pkgname=haskell-pandoc
 
pkgver=1.6.0.1
 
pkgrel=1
 
pkgdesc="Conversion between markup formats"
 
url="http://hackage.haskell.org/package/${_hkgname}"
 
license=('GPL')
 
arch=('i686' 'x86_64')
 
makedepends=()
 
depends=('ghc' 'haskell-http=4000.1.1' 'haskell-bytestring=0.9.1.10' 'haskell-containers=0.4.0.0' 'haskell-directory=1.1.0.0' 'haskell-extensible-exceptions=0.1.1.2' 'haskell-filepath=1.2.0.0' 'haskell-mtl=2.0.1.0' 'haskell-network=2.3.0.2' 'haskell-old-time=1.0.0.6' 'haskell-parsec=3.1.1' 'haskell-pretty=1.0.1.2' 'haskell-process=1.0.1.5' 'haskell-random=1.0.0.3' 'haskell-syb=0.3' 'haskell-texmath<0.5' 'haskell-utf8-string>=0.3' 'haskell-xhtml=3000.2.0.1' 'haskell-xml<1.4' 'haskell-zip-archive<0.2')
 
options=('strip')
 
source=(http://hackage.haskell.org/packages/archive/${_hkgname}/${pkgver}/${_hkgname}-${pkgver}.tar.gz)
 
install=${pkgname}.install
 
md5sums=('d19a630462595941b3100dff6f839aa3')
 
build() {
 
    cd ${srcdir}/${_hkgname}-${pkgver}
 
    runhaskell Setup configure -O ${PKGBUILD_HASKELL_ENABLE_PROFILING:+-p } --enable-split-objs --enable-shared \
 
      --prefix=/usr --docdir=/usr/share/doc/${pkgname} --libsubdir=\$compiler/site-local/\$pkgid
 
    runhaskell Setup build
 
    runhaskell Setup haddock
 
    runhaskell Setup register  --gen-script
 
    runhaskell Setup unregister --gen-script
 
    sed -i -r -e "s|ghc-pkg.*unregister[^ ]* |&'--force' |" unregister.sh
 
}
 
package() {
 
    cd ${srcdir}/${_hkgname}-${pkgver}
 
    install -D -m744 register.sh  ${pkgdir}/usr/share/haskell/${pkgname}/register.sh
 
    install    -m744 unregister.sh ${pkgdir}/usr/share/haskell/${pkgname}/unregister.sh
 
    install -d -m755 ${pkgdir}/usr/share/doc/ghc/html/libraries
 
    ln -s /usr/share/doc/${pkgname}/html ${pkgdir}/usr/share/doc/ghc/html/libraries/${_hkgname}
 
    runhaskell Setup copy --destdir=${pkgdir}
 
}
 
 
 
</nowiki>}}
 
 
 
Si noti come vengono rispettate le convenzioni per i pacchetti Haskell:
 
* Le librerie hanno il prefisso {{ic|haskell-}}
 
* Tutte le librerie da cui il pacchetto dipende sono inserite in depends=() (quelle incluse nel pacchetto {{pkg|ghc}} sono, per ovvi motivi, omesse, essendo fornite da quest'ultimo)
 
* Utilizza cabal per generare uno script di installazione per la registrazione/deregistrazione, con un nome standard
 
* Si usa haddock per generare la documentazione.
 
 
 
Tutte le librerie Haskel dovrebbero segure queste convenzioni, e l'uso dell'ultima versione di cabal2arch, assicura che vengano rispettate.
 
 
 
{{Nota|A partire da {{AUR|cabal2arch}} 1.1-2, viene generata nel PKGBUILD una nuova variabile d'ambiente: {{ic|PKGBUILD_HASKELL_ENABLE_PROFILING}}. Se questa ha un valore diverso da zero, come ad esempio {{ic|true}} o {{ic|1}}, verrà effettuata una build con il profiling abilitato. Per questo motivo, se un utente desidera attivarlo, si consiglia di esportare la suddetta variabile tramite {{ic|~/.bashrc}} o {{ic|~/.zshrc}}.}}
 
 
 
===Linee guida per librerie===
 
Solitamente, ad ogni file .cabal dovrebbe corrispondere un PKGBUILD. Rimangono le seguenti convenzioni:
 
 
 
* Le librerie devono avere il prefisso {{ic|haskell-}}
 
* Tutte le librerie devono dipendere da {{pkg|ghc}}
 
* Tutte le dipendenze devono essere incluse nell'array {{ic|depends}} del PKGBUILD
 
* Si faccia attenzione alle librerie che dipendono da gtk2hs: cairo, svg, glib, gtk sono fornite dal pacchetto {{pkg|gtk2hs}}, non ad esempio da "haskell-cairo"
 
 
 
La registrazione delle librerie Haskell viene effettuata tramite l'hook register. A tal proposito, si veda sopra.
 
 
 
===Linee guida per i programmi===
 
* Mantengono il nome originale
 
* Si faccia attenzione alle librerie C richieste come dipendenze a runtime. Ad esempio, tutti i binari prodotti con GHC, dipenderanno da 'gmp, così come quelli che usano OpenGL o sono basati sulla versione -git del pacchetto da compilare, avranno dipendenze addizionali. cabal2arch cercherà di risolvere questi problemi autonomamente, ma potrebbero esserci dipendenze addizionali che non vengono risolte, nel qual caso spetterà all'utente far fronte a questa evenienza.
 
* Utilizzare lo stripping degli eseguibili ({{ic |--enable-executable-stripping}}). cabal2arch effettua questa operazione automaticamente.
 

Latest revision as of 15:25, 14 October 2018