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

From ArchWiki
Jump to: navigation, search
(translation)
(10 intermediate revisions by 2 users not shown)
Line 1: Line 1:
 
[[Category:Package development (Italiano)]]
 
[[Category:Package development (Italiano)]]
[[Category:Guidelines (Italiano)]]
+
[[en:OCaml Package Guidelines]]
{{i18n|OCaml Package Guidelines}}
+
{{Translateme}}
+
 
+
 
==Nominazione dei pacchetti==
 
==Nominazione dei pacchetti==
Per le librerie, si usi ''ocaml-modulename''. Per le applicazioni, si usi il nome del programma. In entrambi i casi, il nome del pacchetto dev'essere interamente in caratteri minuscoli.
+
Per le librerie, si usi {{ic|ocaml-modulename}}. Per le applicazioni, si usi il nome del programma. In entrambi i casi, il nome del pacchetto dev'essere interamente in caratteri minuscoli.
  
==OCaml Library Locations==
+
==Ubicazione delle librerie OCaml==
OCaml libraries should be installed under '''/usr/lib/ocaml'''. Libraries were previously installed under /usr/lib/ocaml or /usr/lib/ocaml/site-lib, depending on the package. This mixture prevented some packages from working with others and fragmented OCaml development on Arch Linux. The use of /usr/lib/ocaml/site-lib has therefore been discontinued.
+
Le librerie OCaml devono essere installate sotto {{ic|/usr/lib/ocaml}}. Precedentemente, le librerie venivano installate sia sotto {{ic|/usr/lib/ocaml}} che sotto {{ic|/usr/lib/ocaml/site-lib}}, a seconda del pacchetto. Questa confusione impediva ad alcuni pacchetti di funzionare con altri, ed inoltre frammentava lo sviluppo in OCaml su Arch Linux. Per questo l'uso di {{ic|/usr/lib/ocaml/site-lib}} è stato interrotto.
  
OCaml libraries should be installed using '''ocaml-findlib'''. ocaml-findlib includes library metadata in the package that makes it easy to manage libraries. It is a de-facto standard and a lot of OCaml software now requires it.
+
Le librerie OCaml devono essere installate utilizzando {{Pkg|ocaml-findlib}}. {{ic|ocaml-findlib}} include dei metadata nel pacchetto che facilitano la gestione delle librerie. È uno standard de-facto ed un requisito di gran parte dell'attuale software in OCaml.
  
ocaml-findlib extracts necessary data from a file named '''META''' that should be included in the source archive. If this file is not included, one should either be obtained from the corresponding Debian, Ubuntu, or Fedora package, or created for the package by the maintainer. A request to include the file should also be made to the upstream developers of the package.
+
{{ic|ocaml-findlib}} estrae i dati necessari da un file chiamato {{ic|META}} che deve essere incluso nell'archivio dei sorgenti. Se questo file non è incluso, è possibile ottenerne uno dal corrispondente pacchetto per Debian, Ubuntu o Fedora, altrimenti deve esserne creato uno apposito dal maintainer del pacchetto. La richiesta di includere tale file potrebbe anche essere fatta direttamente agli sviluppatori originali del pacchetto.
  
The '''OCAMLFIND_DESTDIR''' variable should be used when installing packages with ocaml-lib. See the example PKGBUILD below for details.
+
Quando si installano pacchetti con {{ic|ocaml-findlib}} è necessario usare la variabile {{ic|OCAMLFIND_DESTDIR}}. Vedere il PKGBUILD di esempio riportato sotto per i dettagli.
  
== OCaml Bytecode and Levels ==
+
==OASIS==
 +
I pacchetti OCaml che installano eseguibili usando OASIS ignorano {{ic|DESTDIR}}. Questa è una limitazione conosciuta di OASIS ([https://forge.ocamlcore.org/tracker/?func=detail&atid=294&aid=852&group_id=54 issue #852]). Una maniera per abilitare funzionalità simili a {{ic|DESTDIR}} è lanciare lo script {{ic|configure}} con l'argomento --destdir, ad esempio:
  
OCaml can run code on multiple "levels", the top level interprets OCaml Code without compiling, the bytecode level creates machine independent bytecode and the native level creates machine code binaries (just like C/C++).
+
<pre>build() {
 +
    cd "${srcdir}/${srcname}-${pkgver}"
 +
    ./configure --prefix /usr --destdir "$pkgdir"
  
When building OCaml Packages you need to be aware if the build process is compiling native machine code, bytecode, or as in many cases both. This creates a number of situations which can cause problems with package options and the right dependencies.
+
    # build commands
 +
}</pre>
  
If bytecode is produced at all then the PKGBUILD must contain the following to protect the bytecode:
+
== Bytecode e Livelli di OCaml ==
  
* options=('!strip')
+
OCaml può eseguire il codice su vari "livelli": il livello principale ("top level") interpreta il codice OCaml senza compilarlo, il livello bytecode crea appunto del bytecode indipendente dalla macchina, e il livello nativo crea dei binari con codice macchina (proprio come C/C++).
  
If the package does not contain bytecode and only distributes a binary, then ''ocaml'' is not needed as a dependency, but it of course is required as a makedepends since the ocaml package provides the OCaml compiler. If the package contains both native code and bytecode then ''ocaml'' should be a dependency and a makedepends.
+
Quando si compilano pacchetti OCaml è necessario sapere se il processo di build compila codice macchina nativo, bytecode, o, come in molti casi, entrambi. Questo genera svariate situazioni in cui possono crearsi problemi con le opzioni dei pacchetti e le loro corrette dipendenze.
  
OCaml code is rarely (if ever) distributed as bytecode only and will almost always include native code, the only case where using ''any'' as the arch is advisable is where only un compiled source code is distributed, usually with a library, but many libraries still distribute native code.
+
Se viene creato del bytecode, il PKGBUILD deve contenere la seguente linea per proteggerlo:
  
The moral of the story here is to be aware of what it is you are distributing, chances are your package contains native machine code and bytecode.
+
options=('!strip')
 +
 
 +
Se il pacchetto non contiene bytecode ma distribuisce solamente file binari, {{ic|ocaml}} non è richiesto come dipendenza, ma è invece ovviamente necessario come makedepends, dato che il compilatore di OCaml è fornito dal pacchetto {{ic|ocaml}}. Se il pacchetto contiene sia codice nativo che bytecode, {{ic|ocaml}} deve essere sia una dipendenza che un makedepends.
 +
 
 +
Il codice OCaml è molto raramente distribuito solo come bytecode, infatti quasi sempre include del codice nativo: l'unico caso in cui è consigliabile usare ''any'' come ''arch'' è quando viene distribuito solamente codice sorgente non compilato, di solito con una libreria, benché appunto molte librerie distribuiscano anche codice nativo.
 +
 
 +
Per riassumere, è bene essere sempre coscienti di ciò che si va a distribuire, la probabilità maggiore è che il proprio pacchetto contenga sia codice macchina nativo che bytecode.
 +
 
 +
== Esempio di PKGBUILD OCaml ==
  
== OCaml PKGBUILD Example ==
 
 
<pre>
 
<pre>
 
# Contributor: Your Name <youremail@domain.com>
 
# Contributor: Your Name <youremail@domain.com>
Line 64: Line 72:
 
     make install
 
     make install
 
}
 
}
 
 
</pre>
 
</pre>
  
Keep in mind that many OCaml Packages will often need extra parameters passed to make and make install. Also remember to remove the "!strip" option and change the architecture if the package does not produce bytecode.
+
Tenere sempre presente che molti pacchetti OCaml avranno spesso bisogno che siano passati ulteriori parametri a make e make install. Ricordarsi anche di rimuovere l'opzione'' '!strip' ''e cambiare l'architettura se il pacchetto non fornisce bytecode.

Revision as of 14:52, 13 June 2012

Nominazione dei pacchetti

Per le librerie, si usi ocaml-modulename. Per le applicazioni, si usi il nome del programma. In entrambi i casi, il nome del pacchetto dev'essere interamente in caratteri minuscoli.

Ubicazione delle librerie OCaml

Le librerie OCaml devono essere installate sotto /usr/lib/ocaml. Precedentemente, le librerie venivano installate sia sotto /usr/lib/ocaml che sotto /usr/lib/ocaml/site-lib, a seconda del pacchetto. Questa confusione impediva ad alcuni pacchetti di funzionare con altri, ed inoltre frammentava lo sviluppo in OCaml su Arch Linux. Per questo l'uso di /usr/lib/ocaml/site-lib è stato interrotto.

Le librerie OCaml devono essere installate utilizzando ocaml-findlib. ocaml-findlib include dei metadata nel pacchetto che facilitano la gestione delle librerie. È uno standard de-facto ed un requisito di gran parte dell'attuale software in OCaml.

ocaml-findlib estrae i dati necessari da un file chiamato META che deve essere incluso nell'archivio dei sorgenti. Se questo file non è incluso, è possibile ottenerne uno dal corrispondente pacchetto per Debian, Ubuntu o Fedora, altrimenti deve esserne creato uno apposito dal maintainer del pacchetto. La richiesta di includere tale file potrebbe anche essere fatta direttamente agli sviluppatori originali del pacchetto.

Quando si installano pacchetti con ocaml-findlib è necessario usare la variabile OCAMLFIND_DESTDIR. Vedere il PKGBUILD di esempio riportato sotto per i dettagli.

OASIS

I pacchetti OCaml che installano eseguibili usando OASIS ignorano DESTDIR. Questa è una limitazione conosciuta di OASIS (issue #852). Una maniera per abilitare funzionalità simili a DESTDIR è lanciare lo script configure con l'argomento --destdir, ad esempio:

build() {
    cd "${srcdir}/${srcname}-${pkgver}"
    ./configure --prefix /usr --destdir "$pkgdir"

    # build commands
}

Bytecode e Livelli di OCaml

OCaml può eseguire il codice su vari "livelli": il livello principale ("top level") interpreta il codice OCaml senza compilarlo, il livello bytecode crea appunto del bytecode indipendente dalla macchina, e il livello nativo crea dei binari con codice macchina (proprio come C/C++).

Quando si compilano pacchetti OCaml è necessario sapere se il processo di build compila codice macchina nativo, bytecode, o, come in molti casi, entrambi. Questo genera svariate situazioni in cui possono crearsi problemi con le opzioni dei pacchetti e le loro corrette dipendenze.

Se viene creato del bytecode, il PKGBUILD deve contenere la seguente linea per proteggerlo:

options=('!strip')

Se il pacchetto non contiene bytecode ma distribuisce solamente file binari, ocaml non è richiesto come dipendenza, ma è invece ovviamente necessario come makedepends, dato che il compilatore di OCaml è fornito dal pacchetto ocaml. Se il pacchetto contiene sia codice nativo che bytecode, ocaml deve essere sia una dipendenza che un makedepends.

Il codice OCaml è molto raramente distribuito solo come bytecode, infatti quasi sempre include del codice nativo: l'unico caso in cui è consigliabile usare any come arch è quando viene distribuito solamente codice sorgente non compilato, di solito con una libreria, benché appunto molte librerie distribuiscano anche codice nativo.

Per riassumere, è bene essere sempre coscienti di ciò che si va a distribuire, la probabilità maggiore è che il proprio pacchetto contenga sia codice macchina nativo che bytecode.

Esempio di PKGBUILD OCaml

# Contributor: Your Name <youremail@domain.com>

pkgname=ocaml-<package name>
pkgver=4.2
pkgrel=1
license=('')
arch=('i686' 'x86_64')
pkgdesc="An OCaml Package"
url=""
depends=('ocaml')
makedepends=('ocaml-findlib')
source=()
options=('!strip')
md5sums=()

OCAMLFIND_DESTDIR="${pkgdir}$(ocamlfind printconf destdir)"

build() {
  cd "${srcdir}/${pkgname}-${pkgver}"
  mkdir -p "$OCAMLFIND_DESTDIR"
  ./configure --prefix=/usr
  make
}

package() {
  cd "${srcdir}/${pkgname}-${pkgver}"
  env DESTDIR="${pkgdir}" \
    OCAMLFIND_DESTDIR="$OCAMLFIND_DESTDIR" \
    make install
}

Tenere sempre presente che molti pacchetti OCaml avranno spesso bisogno che siano passati ulteriori parametri a make e make install. Ricordarsi anche di rimuovere l'opzione '!strip' e cambiare l'architettura se il pacchetto non fornisce bytecode.