Difference between revisions of "PKGBUILD (Italiano)"

From ArchWiki
Jump to: navigation, search
(Variabili)
m (Added russian version)
(43 intermediate revisions by 11 users not shown)
Line 1: Line 1:
[[Category:About Arch (Italiano)]]
 
 
[[Category:Package development (Italiano)]]
 
[[Category:Package development (Italiano)]]
[[Category:Guidelines (Italiano)]]
+
[[cs:PKGBUILD]]
{{i18n|PKGBUILD}}
+
[[en:PKGBUILD]]
 
+
[[es:PKGBUILD]]
{{translateme}}
+
[[fa:PKGBUILD]]
{{note|Questo articolo è in fase di traduzione. Seguite per ora le istruzioni della versione inglese.}}
+
[[fr:PKGBUILD]]
 
+
[[pl:PKGBUILD]]
 +
[[pt:PKGBUILD]]
 +
[[ru:PKGBUILD]]
 +
[[sr:PKGBUILD]]
 +
[[zh-CN:PKGBUILD]]
 +
[[zh-TW:PKGBUILD]]
 
{{Article summary start}}
 
{{Article summary start}}
{{Article summary text|Una spiegazione delle variabili dei PKGBUILD usate durante la [[Creating Packages (Italiano)|creazione dei pacchetti]].}}
+
{{Article summary text|Una spiegazione delle variabili dei PKGBUILD usate durante la [[Creating Packages (Italiano)|creazione dei pacchetti]]. Un PKGBUILD è uno script che descrive come un software deve essere compilato e pacchettizzato.}}
 
{{Article summary heading|Overview}}
 
{{Article summary heading|Overview}}
{{Article summary text|I pacchetti in Arch Linux sono costruiti usando  [[makepkg (Italiano)|makepkg]] e uno script di costruzione personalizzato per ogni pacchetto noto come [[PKGBUILD (Italiano)|PKGBUILD]]. Una volta pacchettizzato, il software può essere installato e gestito con [[Pacman (Italiano)|pacman]]. I PKGBUILD per il software dei [[Official Repositories (Italiano)|repository ufficiali]] sono disponibili nell'albero [[Arch Build System (Italiano)|ABS]]; altre migliaia sono disponibili in (unsupported) [[Arch User Repository (Italiano)|AUR]].}}
+
{{Article summary text|{{Package management overview (Italiano)}}}}
 
{{Article summary heading|Related}}
 
{{Article summary heading|Related}}
 
{{Article summary wiki|Creating Packages (Italiano)|creazione dei pacchetti}}
 
{{Article summary wiki|Creating Packages (Italiano)|creazione dei pacchetti}}
{{Article summary wiki|VCS PKGBUILD Guidelines}}
+
{{Article summary wiki|Custom local repository}}
{{Article summary wiki|PKGBUILD Tricks}}
+
{{Article summary wiki|pacman Tips}}
 +
{{Article summary heading|Resources}}
 +
{{Article summary link|PKGBUILD(5) Manual Page|https://www.archlinux.org/pacman/PKGBUILD.5.html}}
 
{{Article summary end}}
 
{{Article summary end}}
  
Un {{Filename|PKGBUILD}} è un file di descrizione della costruzione di pacchetti di Arch Linux, usato durante la [[Creating Packages (Italiano)|creazione dei pacchetti]]. Questo articolo descrive le possibili variabili del {{Filename|PKGBUILD}}.
+
Un {{ic|PKGBUILD}} è un file di descrizione della costruzione di pacchetti di Arch Linux, usato durante la [[Creating Packages (Italiano)|creazione dei pacchetti]]. Questo articolo descrive le possibili variabili del {{ic|PKGBUILD}}.
  
==Costruire i pacchetti==
+
I pacchetti in Arch Linux sono costruiti utilizzando il comando [[makepkg]] e le informazioni sono memorizzate in un file {{ic|PKGBUILD}}. Quando {{Ic|makepkg}} viene eseguito, cerca un {{ic|PKGBUILD}} nella directory corrente e segue le istruzioni ivi contenute sia per compilare che per acquisire i file necessari al confezionamento di un pacchetto ({{ic|pkgname.pkg.tar.xz}}). Il pacchetto risultante contiene i file binari e le istruzioni di installazione e può essere facilmente installato tramite [[pacman]].
 
+
I pacchetti in Arch Linux sono costruiti utilizzando il comando [[makepkg]] e le informazioni sono memorizzate in un file {{filename|PKGBUILD}}. Quando {{codeline|makepkg}} viene eseguito, cerca un {{filename|PKGBUILD}} nella directory corrente e segue le istruzioni ivi contenute per compilare o altrimenti acquisire i file necessari per essere confezionati all'interno di un pacchetto ({{filename|pkgname.pkg.tar.gz}}). Il pacchetto risultante contiene i file binari e le istruzioni di installazione e può essere facilmente installato con pacman.
+
Vedere la [[Creating Packages (Italiano)|creazione dei pacchetti]] per ulteriori informazioni.
+
  
 
==Variabili==
 
==Variabili==
 +
Le seguenti variabili possono essere utilizzate nel file {{ic|PKGBUILD}}:
  
Seguono le variabili che si possono utilizzare nel file {{filename|PKGBUILD}}:
+
È pratica comune insewrire nel {{ic|PKGBUILD}} le variabili nello stesso ordine nel quale sono indicate in questa pagina, anche se ciò non è obbligatorio finchè viene rispettata la sintassi di Bash.
  
;{{codeline|pkgname}}: Il nome del pacchetto. Dovrebbe consistere nei soli '''caratteri alfanumerici''' e tutte le lettere dovrebbero essere in '''minuscolo'''. Per motivi di coerenza, il {{codeline|pkgname}} dovrebbe corrispondere al nome dell'archivio dei sorgenti del software che si sta impacchettando. Per esempio, se il software è in {{filename|foobar-2.5.tar.gz}}, il valore di {{codeline|pkgname}} dovrebbe essere ''foobar''. Anche la directory di lavoro in cui risiede il file {{filename|PKGBUILD}} dovrebbe corrispondere al  {{codeline|pkgname}}.
+
===pkgname===
 +
Il nome del pacchetto. Dovrebbe consistere nei soli '''caratteri alfanumerici e trattini ('-')''' e tutte le lettere dovrebbero essere in '''minuscolo'''. Per motivi di coerenza, il {{Ic|pkgname}} dovrebbe corrispondere al nome dell'archivio dei sorgenti del software che si sta impacchettando. Per esempio, se il software è in {{ic|foobar-2.5.tar.gz}}, il valore di {{Ic|pkgname}} dovrebbe essere ''foobar''. Anche la directory di lavoro in cui risiede il file {{ic|PKGBUILD}} dovrebbe corrispondere al  {{Ic|pkgname}}.
  
;{{codeline|pkgver}}: La versione del pacchetto. Il valore dovrebbe essere lo stesso della versione rilasciata dell'autore del pacchetto. Può contenere lettere, numeri e punti ma '''NON''' può contenere trattini. Se l'autore del pacchetto usa i trattini nello schema di numerazione della versione, si deve sostituirli con degli underscore. Per esempio, se la versione è ''0.99-10'', dovrebbe essere cambiata in ''0.99_10''. Se la variabile pkgver viene usata successivamente nel PKGBUILD, allora l'underscore può essere facilmente sostituito con un trattino, per esempio:
+
===pkgver===
 +
La versione del pacchetto. Il valore dovrebbe essere lo stesso della versione rilasciata dell'autore del pacchetto. Può contenere lettere, numeri e punti ma '''NON''' può contenere trattini. Se l'autore del pacchetto usa i trattini nello schema di numerazione della versione, si deve sostituirli con degli underscore. Per esempio, se la versione è ''0.99-10'', dovrebbe essere cambiata in ''0.99_10''. Se la variabile pkgver viene usata successivamente nel PKGBUILD, allora l'underscore può essere facilmente sostituito con un trattino, per esempio:
 
   source=($pkgname-${pkgver/_/-}.tar.gz)
 
   source=($pkgname-${pkgver/_/-}.tar.gz)
  
;{{codeline|pkgrel}}: Il numero della versione di rilascio del pacchetto specifico di Arch Linux. Questo valore permette agli utenti di distinguere tra build consecutive della stessa versione del pacchetto. Quando una nuova versione del pacchetto viene rilasciata, il '''numero di rilascio parte da 1'''. Nel caso in cui si apportino aggiustamenti e ottimizzazioni al file {{filename|PKGBUILD}}, allora il pacchetto verrà '''ri-rilasciato''' e il '''numero di rilascio''' verrà incrementato di 1. Nel caso in cui esca una nuova versione del pacchetto, il numero di rilascio verrà resettato a 1.
+
===pkgrel===
 +
Il numero della versione di rilascio del pacchetto specifico di Arch Linux. Questo valore permette agli utenti di distinguere tra build consecutive della stessa versione del pacchetto. Quando una nuova versione del pacchetto viene rilasciata, il '''numero di rilascio parte da 1'''. Nel caso in cui si apportino aggiustamenti e ottimizzazioni al file {{ic|PKGBUILD}}, allora il pacchetto verrà '''ri-rilasciato''' e il '''numero di rilascio''' verrà incrementato di 1. Nel caso in cui esca una nuova versione del pacchetto, il numero di rilascio verrà resettato a 1.
 +
 
 +
===epoch===
 +
Un valore intero, specifico di Archlinux, che rappresenta "l'età" tramite la quale effettuare un confronto tra numeri di versione. Questo valore consente di ignorare le normali regole di confronto di versione per pacchetti che hanno una numerazione di versione inconsistente, che richiedono un downgrade, che devono cambiare lo schema di numerazione, etc. Per impostazione predefinita, si assume che i pacchetti abbiano un valore di epoch pari a ''0''. Non utilizzare questa variabile a meno che non si sia assolutamente sicuri di ciò che si sta facendo.
 +
 
 +
===pkgdesc===
 +
La descrizione del pacchetto. La descrizione dovrebbe essere di circa 80 caratteri o meno e non dovrebbe includere il nome del pacchetto stesso.  Per esempio, "Nedit è un editor di testo per X11" si dovrebbe scrivere come "un editor di testo per X11."
 +
 
 +
{{Nota| Non seguire questa regola pedissequamente quando si inviano pacchetti ad [[AUR]]. Se per qualche motivo il nome del pacchetto differisce dal nome del programma, l'inclusione del nome completo all'interno della discrezione può essere l'unica maniera per renderlo reperibile tramite la ricerca.}}
 +
 
 +
===arch===
 +
Una array di architetture contro le quali il file  {{ic|PKGBUILD}} deve essere compilato ed utilizzato. Attualmente, può contenere {{ic|i686}} e/o {{ic|x86_64}}, {{Ic|<nowiki>arch=('i686' 'x86_64')</nowiki>}}. E' possibile utilizzare anche il valore {{ic|any}} per i pacchetti indipendenti dall'architettura.
 +
 
 +
È possibile accedere a questo valore durante la compilazione e durante la definizione di variabili, con la variabile {{Ic|$CARCH}}. Consultare {{bug|16352}}.
 +
Esempio:
 +
 
 +
<pre>
 +
depends=(foobar)
 +
if test "$CARCH" == x86_64; then
 +
  depends+=(lib32-glibc)
 +
fi
 +
</pre>
 +
 
 +
===url===
 +
L'URL del sito ufficiale del software che si sta pacchettizzando.
 +
 
 +
===license===
 +
La licenza con la quale il software è distribuito. Il pacchetto {{pkg|licenses}} presente in {{Ic|[core]}} fornisce le licenze più comuni in {{ic|/usr/share/licenses/common}}, per esempio {{ic|/usr/share/licenses/common/GPL}}. Se un pacchetto è munito di una di queste licenze, il valore dovrebbe essere impostato al nome della directory, per esempio {{Ic|<nowiki>license=('GPL')</nowiki>}}. Se la licenza appropriata non è inclusa del pacchetto ufficiale {{pkg|licenses}}, si devono fare alcune cose:
 +
# Il file della licenza dovrebbe essere incluso in: {{ic|/usr/share/licenses/'''pkgname'''/}}, per esempio {{ic|/usr/share/licenses/foobar/LICENSE}}.
 +
# Se l'archivio dei sorgenti '''NON''' contiene i dettagli della licenza ed essa è visualizzata altrove, ad esempio su un sito web, allora si doverbbe copiare la licenza su un file da includere.
 +
# Aggiungere {{ic|custom}} all'array delle {{Ic|license}}. Facoltativamente, si può rimpiazzare {{ic|custom}} con {{ic|custom:nome della licenza}}. Una volta che la licenza è utilizzata in due o più pacchetti dei repository ufficiali (incluso {{Ic|[community]}}), entrerà a far parte del pacchetto {{pkg|licenses}}.
 +
* Le licenze [[Wikipedia:BSD License|BSD]], [[Wikipedia:MIT License|MIT]], [[Wikipedia:ZLIB license|zlib/png]] e [[Wikipedia:Python License|Python]] sono casi speciali e potrebbero non essere inclusi nel pacchetto {{pkg|licenses}}. Per quanto riguarda l'array {{Ic|license}}, queste vengono trattate come licenze comuni ({{Ic|<nowiki>license=('BSD')</nowiki>}}, {{Ic|<nowiki>license=('MIT')</nowiki>}}, {{Ic|<nowiki>license=('ZLIB')</nowiki>}} e {{Ic|<nowiki>license=('Python')</nowiki>}}) ma tecnicamente ognuna è una licenza custom poiché ha il proprio copyright. Ogni pacchetto munito di una di queste quattro licenze dovrebbe avere la propria salvata in {{ic|/usr/share/licenses/'''pkgname'''}}. Alcuni pacchetti potrebbero non essere coperti da una sola licenza. In questi casi, sono possibili più voci nell'array license, ad esempio {{Ic|<nowiki>license=('GPL' 'custom:nome della licenza')</nowiki>}}.
 +
* Inoltre, le (L)GPL hanno diverse versioni e permutazioni di queste versioni. Per il software (L)GPL, la convenzione è:
 +
** (L)GPL - (L)GPLv2 o qualsiasi versione successiva
 +
** (L)GPL2 - (L)GPL2 solamente
 +
** (L)GPL3 - (L)GPL3 o qualsiasi versione successiva
 +
* Se non si riesce a determinare la licenza del software che si sta pacchettizzando, {{Ic|PKGBUILD.proto}} consiglia di utilizzare il valore {{Ic|unknown}}. Bisonga comunque contattare il creatore del software per sapere a quali condizioni il prodotto è disponibile (ed a quali non lo è)
 +
 
 +
{{Tip| Alcuni autori non forniscono un file separato per la licenza e descrivono le regole per la distribuzione all'interno del file ReadMe. Queste informazioni possono essere estratte in un file separato durante la fase di {{Ic|build}} con un comando simile a questo:
 +
{{Bc|sed -n '/'''This software'''/,/'''  thereof.'''/p' ReadMe.txt > LICENSE}}}}
 +
 
 +
===groups===
 +
Il gruppo al quale appartiene il pacchetto. Per esempio, quando si installa il pacchetto {{pkg|kdebase}}, si installano tutti i pacchetti che appartengono al gruppo ''kde''.
  
;{{codeline|pkgdesc}}: La descrizione del pacchetto. La descrizione dovrebbe essere di circa 80 caratteri o meno e non dovrebbe includere il nome del pacchetto The description should be about 80 characters or less and should not include the package name in modo autoreferenziale. Per esempio, "Nedit è un editor di testo per X11" si dovrebbe scrivere come "un editor di testo per X11."
+
===depends===
 +
Un array di nomi dei pacchetti che devono essere installati per poter poi lanciare questo software. Se il software richiede una versione minima di una dipendenza, si dovrebbe usare l'operatore {{ic|1=>=}} per sottolinearlo, ad esempio: {{Ic|<nowiki>depends=('foobar>=1.8.0')</nowiki>}}. Non è necessario elencare i pacchetti che il software richiede come dipendenza se questi sono già richiesti come tale dagli altri pacchetti elencati nell'array. Per esempio, {{pkg|gtk2}} dipende da {{pkg|glib2}} e {{pkg|glibc}}. Tuttavia, {{pkg|glibc}} non è necessita di essere elencato come dipendenza per {{pkg|gtk2}} visto che è dipendenza per {{pkg|glib2}}.
  
;{{codeline|arch}}: Una array di architetture contro le quali il file  {{Filename|PKGBUILD}} deve essere compilato ed utilizzato. Attualmente, può contenere '''i686''' e/o '''x86_64''', {{codeline|<nowiki>arch=('i686' 'x86_64')</nowiki>}}. E' possibile utilizzare anche il valore '''any''' per i pacchetti indipendenti dall'architettura. E' possibile accedere questo valore durante la compilazione con la variabile {{codeline|$CARCH}}.
+
===makedepends===
 +
Un array di nomi dei pacchetti che devono essere installati per poter compilare il software ma inutili per poter usare il software dopo l'installazione. E' possibile specificare la versione minima di dipendenza del pacchetto nello stesso formato ell'array {{Ic|depends}}.
  
;{{codeline|url}}: L'URL del sito ufficiale del software che si sta pacchettizzando.
+
{{Attenzione| Quando si compila con makepkg, si assume che si abbia già installato nel proprio sistema il gruppo "base-devel" . I membri di "base-devel" '''non''' devono essere inclusi nell'array {{ic|makedepends}}.}}
  
;{{codeline|license}}: La licenza con la quale il software è distribuito. Il pacchetto {{Package Official|licenses}} presente in {{codeline|[core]}} fornisce le licenze più comuni in {{filename|/usr/share/licenses/common}}, per esempio {{filename|/usr/share/licenses/common/GPL}}. Se un pacchetto è munito di una di queste licenze, il valore dovrebbe essere impostato al nome della directory, per esempio {{codeline|<nowiki>license=('GPL')</nowiki>}}. Se la licenza appropriata non è inclusa del pacchetto ufficiale {{Package Official|licenses}}, si devono fare alcune cose:
+
===checkdepends===
:# Il file della licenza dovrebbe essere incluso in: {{filename|/usr/share/licenses/'''pkgname'''/}}, per esempio {{filename|/usr/share/licenses/foobar/LICENSE}}.
+
:# Se l'archivio dei sorgenti '''NON''' contiene i dettagli della licenza ed essa è visualizzata altrove, ad esempio su un sito web, allora si doverbbe copiare la licenza su un file da includere.
+
:# Aggiungere '''custom''' all'array delle {{codeline|license}}. Facoltativamente, si può rimpiazzare '''custom''' con '''custom:nome della licenza'''. Una volta che la licenza è utilizzata in due o più pacchetti dei repository ufficiali (incluso {{codeline|[community]}}), entrerà a far parte del pacchetto {{Package Official|licenses}}.
+
:* Le licenze [[Wikipedia:BSD License|BSD]], [[Wikipedia:MIT License|MIT]], [[Wikipedia:ZLIB license|zlib/png]] and [[Wikipedia:Python License|Python]] sono casi speciali e potrebbero non essere inclusi nel pacchetto {{Package Official|licenses}}. Per quanto riguarda l'array {{Codeline|license}}, queste vengono trattate come licenze comuni ({{Codeline|<nowiki>license=('BSD')</nowiki>}}, {{Codeline|<nowiki>license=('MIT')</nowiki>}}, {{Codeline|<nowiki>license=('ZLIB')</nowiki>}} e {{Codeline|<nowiki>license=('Python')</nowiki>}}) ma tecnicamente ognuna è una licenza custom poiché ha il proprio copyright. Ogni pacchetto munito di una di queste quattro licenze dovrebbe avere la propria salvata in {{filename|/usr/share/licenses/'''pkgname'''}}. Alcuni pacchetti potrebbero non essere coperti da una sola licenza. In questi casi, sono possibili più voci nell'array license, ad esempio {{codeline|<nowiki>license=('GPL' 'custom:nome della licenza')</nowiki>}}.
+
:* Inoltre, le (L)GPL hanno diverse versioni e permutazioni di queste versioni. Per il software (L)GPL, la convenzione è:
+
:** (L)GPL - (L)GPLv2 o qualsiasi versione successiva
+
:** (L)GPL2 - (L)GPL2 solamente
+
:** (L)GPL3 - (L)GPL3 o qualsiasi versione successiva
+
  
;{{codeline|groups}}: Il gruppo al quale appartiene il pacchetto. Per esempio, quando si installa il pacchetto {{Package Official|kdebase}}, si installano tutti i pacchetti che appartengono al gruppo ''kde''.
+
Un array dipacchetti dai quali il pacchetto in oggetto dipende solo per l'esecuzione della sua suite di prova, e non per il suo corretto funzionamento. I pacchetti in questa lista seguono le stesse regole di quelli nell'array depends. Queste dipendenze sono prese in considerazione solo quando è presente la funzione {{ic|check()}} che deve essere esguita da makepkg.
  
;{{codeline|depends}}: An array of package names that must be installed before this software can be run. If a software requires a minimum version of a dependency, the '''>=''' operator should be used to point this out, e.g. {{Codeline|<nowiki>depends=('foobar>=1.8.0')</nowiki>}}. You do not need to list packages that your software depends on if other packages your software depends on already have those packages listed in their dependency. For instance, ''gtk2'' depends on ''glib2'' and ''glibc''. However, ''glibc'' does not need to be listed as a dependency for ''gtk2'' because it is a dependency for ''glib2''.
+
===optdepends===
 +
Un array di nomi dei pacchetti che non sono necessari al software per funzionare ma che forniscono funzionalità aggiuntive. Si dovrebbe aggiungere una piccola descrizione delle funzionalità che ogni pacchetto fornisce. Un'array {{Ic|optdepends}} deve assomigliare a questo:
 +
optdepends=('cups: supporto per la stampa'
 +
'sane: supporto per gli scanner'
 +
'libgphoto2: supporto per le fotocamere digitali'
 +
'alsa-lib: supporto per l'audio'
 +
'giflib: supporto per le immagini GIF'
 +
'libjpeg: supporto per le immagini JPEG'
 +
'libpng: supporto per le immagini PNG')
  
; {{Codeline|makedepends}} : An array of package names that must be installed to build the software but unnecessary for using the software after installation. You can specify the minimum version dependency of the packages in the same format as the {{Codeline|depends}} array.
+
===provides===
 +
Un array di nomi dei pacchetti dei quali questo software fornisce le funzionalità (oppure un pacchetto virtuale come ''cron'' o ''sh''). Se si usa questa variabile, si dovrebbe aggiungere la versione ({{Ic|pkgver}} e magari la {{Ic|pkgrel}}) che questo pacchetto fornisce se le dipendenze possono esserne influenzate. Per esempio, se si vuole fornire una versione modificata di ''qt'' chiamata ''qt-foobar'' versione 3.3.8 che fornisce ''qt'' allora l'array {{Ic|provides}} dovrebbe essere: {{Ic|<nowiki>provides=('qt=3.3.8')</nowiki>}}. Mettere {{Ic|<nowiki>provides=('qt')</nowiki>}} causerà il fallimento di quelle dipendenze che richiedono una specifica versione di ''qt''.  Non aggiungere {{Ic|pkgname}} all'array provide,  viene fatto in automatico.
  
: {{Warning| The group "base-devel" is assumed already installed when building with makepkg . Members of "base-devel" '''should not''' be included in makedepends arrays.}}
+
===conflicts===
 +
Un array di nomi dei pacchetti che possono causare problemi con questo pacchetto installato. I pacchetti con questo nome, e tutti quelli che includono questo nome nel loro array {{Ic|provides}} saranno rimossi. Si possono anche specificare le proprietà delle versioni dei pacchetti che vanno in conflitto nello stesso formato dell'array {{Ic|depends}}.
  
; {{Codeline|optdepends}} : An array of package names that are not needed for the software to function but provides additional features. A short description of what each package provides should also be noted. An {{Codeline|optdepends}} may look like this:
+
===replaces===
optdepends=('cups: printing support'
+
Un array di nomi dei pacchetti obsoleti che sono rimpiazzati da questo pacchetto, per esempio: {{Ic|<nowiki>replaces=('ethereal')</nowiki>}} per il pacchetto{{pkg|wireshark}}. Dopo aver aggiornato il database con {{Ic|pacman -Sy}}, rimpiazzerà immediatamente un pacchetto installato con un altro pacchetto dei repository, accoppiato relativamente a  {{Ic|replaces}}. Se si sta fornendo una versione sostitutiva di un pacchetto esistente, si dovrà usare la variabile {{Ic|conflicts}} la quale è valutata soltanto nel momento in cui si installerà il pacchetto in conflitto.
'sane: scanners support'
+
'libgphoto2: digital cameras support'
+
'alsa-lib: sound support'
+
'giflib: GIF images support'
+
'libjpeg: JPEG images support'
+
'libpng: PNG images support')
+
  
; {{Codeline|provides}} : An array of package names that this package provides the features of (or a virtual package such as ''cron'' or ''sh''). If you use this variable, you should add the version ({{Codeline|pkgver}} and perhaps the {{Codeline|pkgrel}}) that this package will provide if dependencies may be affected by it. For instance, if you are providing a modified ''qt'' package named ''qt-foobar'' version 3.3.8 which provides ''qt'' then the {{Codeline|provides}} array should look like {{Codeline|<nowiki>provides=('qt=3.3.8')</nowiki>}}. Putting {{Codeline|<nowiki>provides=('qt')</nowiki>}} will cause to fail those dependencies that require a specific version of ''qt''.  Do not add {{Codeline|pkgname}} to your provides array, this is done automatically.
+
===backup===
 +
Un array di file che potrebbero contenere personalizzazioni effettuate dall'utente e che dovrebbero essere cpnservati anche in caso di aggiornamento o rimozione di un pacchetto, pensato principalmente per il file di configurazione sotto /etc.  
 +
Quando si aggiorna, nuove versioni dei suddetti file potrebbero venire salvate sul disco con l'estensione {{ic|file.pacnew}} per evitare di sovrascrivere un file che già esiste ed è stato precedentemente modificato dall'utente. In maniera simile, quando il pacchetto viene rimosso, i file modificati dall'utente saranno mantenuti come {{ic|file.pacsave}}, a meno che il pacchetto non sia stato rimosso passando a pacman lo switch {{ic|-n}}.
 +
I percorsi dei file nell'array dovrebbero essere percorsi relativi (ad es. etc/pacman.conf)e non assoluti (/etc/pacman.conf). Consultare anche [[Pacnew and Pacsave Files (Italiano)]].
  
; {{Codeline|conflicts}} : An array of package names that may cause problems with this package if installed. You can also specify the version properties of the conflicting packages in the same format as the {{Codeline|depends}} array.
+
===options===
 +
Questo array permette di sovrascrivere alcuni dei comportamenti di default di {{Ic|makepkg}}. Per impostare un'opzione, si deve includere il nome dell'opzione nell'array. Per invertire il comportamento di default, si deve mettere un {{ic|!}} davanti l'opzione. Questo è un elenco delle opzioni che si possono mettere nell'array:
 +
* '''''strip''''' - Toglie i simboli dai binari e dalle librerie. Se si utilizzano spesso debugger su programmi e librerie, è più conveniente disabilitare questa opzione.
 +
* '''''docs''''' - Salva le directory {{ic|/doc}}.
 +
* '''''libtool''''' - Lascia i file di ''libtool'' ({{ic|.la}}) nel pacchetto.
 +
* '''''emptydirs''''' - Lascia le directory vuote nel pacchetto.
 +
* '''''zipman''''' - Comprime le pagine di ''man'' e ''info'' con ''gzip''.
 +
* '''''ccache''''' - Permette l'uso di {{Ic|ccache}} durante la compilazione. Utile principalmente nella sua forma negata {{Ic|!ccache}} con i pacchetti che hanno problemi nella compilazione con {{Ic|ccache}}.
 +
* '''''distcc''''' - Permette l'uso di {{Ic|distcc}} durante la compilazione. Utile principalmente nella sua forma negata {{Ic|!distcc}} con i pacchetti che hanno problemi nella compilazione con {{Ic|distcc}}.
 +
* '''''buildflags''''' - Consente l'utilizzo di {{ic|buildflags}} specifiche per l'utente (CFLAGS, CXXFLAGS, LDFLAGS) durante la compilazione. Utile principalmente nella sua forma negata {{ic|!buildflags}} con i pacchetti che hanno problemi nella compilazione con {{ic|buildflags}}. 
 +
* '''''makeflags''''' - Permette l'uso di {{Ic|makeflags}} specifiche per l'utente durante la compilazione. Utile principalmente nella sua forma negata {{Ic|!makeflags}} con i pacchetti che hanno problemi nella compilazione con {{Ic|makeflags}} personalizzate.
  
; {{Codeline|replaces}} : An array of obsolete package name that are replaced by this package, e.g. {{Codeline|<nowiki>replaces=('ethereal')</nowiki>}} for the {{Package Official|wireshark}} package. After syncing with {{Codeline|pacman -Sy}}, it will immediately replace an installed package upon encountering another package with the matching {{Codeline|replaces}} in the repositories. If you are providing an alternate version of an already existing package, use the {{Codeline|conflicts}} variable which is only evaluated when actually installing the conflicting package.
+
===install===
 +
Il nome dello script di {{ic|.install}} che deve essere incluso nel pacchetto. ''Pacman'' ha l'abilità di memorizzare ed eseguire uno script specifico per pacchetto quando installa, rimuove o aggiorna un pacchetto. Lo script contiene le seguenti istruzioni che vengono eseguite in tempi diversi:
 +
* '''''pre_install''''' - Lo script è lanciato appena prima dell'estrazione dei file. La nuova versione del pacchetto viene passata come argomento alla funzione.
 +
* '''''post_install''''' - Lo script è lanciato appena dopo l'estrazione dei file. La nuova versione del pacchetto viene passata come argomento alla funzione.
 +
* '''''pre_upgrade''''' - Lo script è lanciato appena prima dell'estrazione dei file. La nuova e la vecchia versione del pacchetto vengono passate come argomento alla funzione.
 +
* '''''post_upgrade''''' - Lo script è lanciato appena dopo dell'estrazione dei file. La nuova e la vecchia versione del pacchetto vengono passate come argomento alla funzione.
 +
* '''''pre_remove''''' - Lo script è lanciato appena che i file vengano rimossi. La vecchia versione del pacchetto viene passata come argomento alla funzione.
 +
* '''''post_remove''''' - Lo script è lanciato dopo che i file vengano rimossi. La vecchia versione del pacchetto viene passata come argomento alla funzione.
  
; {{Codeline|backup}} : An array of files to be backed up as {{Filename|file.pacsave}} when the package is removed. This is commonly used for packages placing configuration files in {{Filename|/etc}}. The file paths in this array should be relative paths (e.g. {{Filename|etc/pacman.conf}}) not absolute paths (e.g. {{Filename|/etc/pacman.conf}}).
+
Ogni funzione è eseguita in ambiente chroot all'interno della directory di installazione di pacman. Consultare [https://bbs.archlinux.org/viewtopic.php?pid=913891 questo thread].
 +
  
; {{Codeline|options}} : This array allows you to override some of the default behavior of {{Codeline|makepkg}}. To set an option, include the option name in the array. To reverse the default behavior, place an '''!''' at the front of the option. The following options may be placed in the array:
+
{{tip|Un prototipo {{ic|.install}} è disponibile al {{ic|/usr/share/pacman/proto.install}}.}}
:* '''''strip''''' - Strips symbols from binaries and libraries.
+
:* '''''docs''''' - Save {{Filename|/doc}} directories.
+
:* '''''libtool''''' - Leave ''libtool'' ({{Filename|.la}}) files in packages.
+
:* '''''emptydirs''''' - Leave empty directories in packages.
+
:* '''''zipman''''' - Compress ''man'' and ''info'' pages with ''gzip''.
+
:* '''''ccache''''' - Allow the use of {{Codeline|ccache}} during build. More useful in its negative form {{Codeline|!ccache}} with select packages that have problems building with {{Codeline|ccache}}.
+
:* '''''distcc''''' - Allow the use of {{Codeline|distcc}} during build. More useful in its negative form {{Codeline|!distcc}} with select packages that have problems building with {{Codeline|distcc}}.
+
:* '''''makeflags''''' - Allow the use of user-specific {{Codeline|makeflags}} during build. More useful in its negative form {{Codeline|!makeflags}} with select packages that have problems building with custom {{Codeline|makeflags}}.
+
:* '''''force''''' - Force the package to be upgraded by a ''pacman'' system upgrade operation, even if the version number would normally not trigger such an upgrade. This is useful when the version numbering scheme of a package changes (or is alphanumeric) or when a downgrade is required for security reasons.
+
  
; {{Codeline|install}} : The name of the {{Filename|.install}} script to be included in the package. ''pacman'' has the ability to store and execute a package-specific script when it installs, removes or upgrades a package. The script contains the following functions which run at different times:
+
===changelog===
:* '''''pre_install''''' - The script is run right before files are extracted. One argument is passed: new package version.
+
Il nome del changelog del pacchetto. Per vedere i changelog dei pacchetti installati (che lo forniscono):
:* '''''post_install''''' - The script is run right after files are extracted. One argument is passed: new package version.
+
{{Bc|pacman -Qc ''pkgname''}}
:* '''''pre_upgrade''''' - The script is run right before files are extracted. Two arguments are passed in the following order: new package version, old package version.
+
{{Tip| Un prototipo di file changelog è installato in {{ic|/usr/share/pacman/ChangeLog.proto}}.}}
:* '''''post_upgrade''''' - The script is run after files are extracted. Two arguments are passed in the following order: new package version, old package version.
+
:* '''''pre_remove''''' - The script is run right before files are removed. One argument is passed: old package version.
+
:* '''''post_remove''''' - The script is run right after files are removed. One argument is passed: old package version.
+
  
: {{Tip|A prototype {{Filename|.install}} is provided at {{Filename|/usr/share/pacman/proto.install}}.}}
+
===source===
 +
un array di file che sono necessari per compilare il pacchetto. Deve contenere la locazione dei sorgenti del software, che in quasi tutte le occasioni è un completo URL HTTP o FTP. Le variabili precendentemente impostatate {{Ic|pkgname}} e {{Ic|pkgver}} possono essere usate efficacemente qui (per esempio {{Ic|<nowiki>source=(http://example.com/$pkgname-$pkgver.tar.gz)</nowiki>}})
  
; {{Codeline|source}} : An array of files which are needed to build the package. It must contain the location of the software source, which in most cases is a full HTTP or FTP URL. The previously set variables {{Codeline|pkgname}} and {{Codeline|pkgver}} can be used effectively here (e.g. {{Codeline|<nowiki>source=(http://example.com/$pkgname-$pkgver.tar.gz)</nowiki>}})
+
{{Nota|Se si ha il bisogno di fornire file che non sono scaricabili al volo, per esempio patch fatte in proprio, è possibile mettere questi file nella stessa directory del proprio {{ic|PKGBUILD}} e aggiungere il nome del file a questo array. Qualsiasi percorso viene aggiunto qui è risolto relativamente alla directory in cui giace il {{ic|PKGBUILD}}. Prima che il processo di compilazione parta, tutti i file che sono riferiti in questo array, verranno scaricati o controllati in sussistenza, e {{Ic|makepkg}} non procederà oltre se qualcuno manca.}}
  
: {{Note|If you need to supply files which are not downloadable on the fly, e.g. self-made patches, you simply put those into the same directory where your {{Filename|PKGBUILD}} file is in and add the filename to this array. Any paths you add here are resolved relative to the directory where the {{Filename|PKGBUILD}} lies. Before the actual build process is started, all of the files referenced in this array will be downloaded or checked for existence, and {{Codeline|makepkg}} will not proceed if any are missing.}}
+
{{Nota|È possibile specificare un nome diverso per il file scaricato, nel caso tale file abbia per qualche motivo un nome diverso, come il parametro GET assegnato all'url, con la seguente sintassi: {{Ic|''filename''::''fileuri''}}, ad esempio {{Ic|$pkgname-$pkgver.zip::<nowiki>http://199.91.152.193/7pd0l2tpkidg/jg2e1cynwii/Warez_collection_16.4.exe</nowiki>}}}}
  
; {{Codeline|noextract}} : An array of files listed under the {{Codeline|source}} array which should not be extracted from their archive format by {{Codeline|makepkg}}. This most commonly applies to certain zip files which cannot be handled by ''bsdtar'' because ''libarchive'' processes all files as streams rather than random access as ''unzip'' does. In these situations ''unzip'' should be added in the {{Codeline|makedepends}} array and the first line of the {{Codeline|build()}} function should contain:
+
===noextract===
 +
Un array di file elencati nell'array {{Ic|source}} che non dovrebbero essere estratti dal loro archivio da {{Ic|makepkg}}. Per lo più si applica a certi file zip che non possono essere gestiti da {{ic|/usr/bin/bsdtar}} visto che {{pkg|libarchive}} processa tutti i file come flussi piuttosto che ad accesso casuale come fa {{pkg|unzip}}. In queste situazioni si dovrebbe aggiungere {{pkg|unzip}} all'array {{Ic|makedepends}} e le prime linee della funzione {{Ic|build()}} dovrebbero contenere:
 
  cd $srcdir/$pkgname-$pkgver
 
  cd $srcdir/$pkgname-$pkgver
 
  unzip [source].zip
 
  unzip [source].zip
 +
Bisogna tenere presente che mentre l'array {{ic|source}} accetta degli URL, {{ic|noextract}} richiede '''solo''' la porzione col nome del file. Se per esempio si vuole fare qualcosa del genere (semplificazione del [https://projects.archlinux.org/svntogit/packages.git/tree/trunk/PKGBUILD?h=packages/grub2&id=f054e33a0b5cbdfe7d81e91a8c4c807a9bfaa124 PKGBUILD di grub2]):
 +
source=(<nowiki>"http://ftp.archlinux.org/other/grub2/grub2_extras_lua_r20.tar.xz"</nowiki>)
 +
noextract=("grub2_extras_lua_r20.tar.xz")
 +
Per ''non estrarre nulla'', si può utilizzare un espediente come questo ( preso dal [https://projects.archlinux.org/svntogit/packages.git/tree/trunk/PKGBUILD?h=packages/firefox-i18n&id=cb10a40aeda9b444285d1ae6959c344110b4c936 PKGBUILD di firefox-i18n]):
 +
noextract=(${source[@]##*/})
 +
Da notare che una sostituzione di variabile più conservativa della sintassi Bash avrebbe incluso anche delle virgolette, o addirittura un ciclo che richiamasse {{ic|basename}}.
  
; {{Codeline|md5sums}} : An array of MD5 checksums of the files listed in the {{Codeline|source}} array. Once all files in the {{Codeline|source}} array are available, an MD5 hash of each file will be automatically generated and compared with the values of this array in the same order they appear in the {{Codeline|source}} array. While the order of the source files itself does not matter, it is important that it matches the order of this array since {{Codeline|makepkg}} cannot guess which checksum belongs to what source file. You can generate this array quickly and easily using the command {{Codeline|makepkg -g}} in the directory that contains the {{Filename|PKGBUILD}} file. Note that the MD5 algorithm is known to have weaknesses, so you should consider using a stronger alternative.
+
===md5sums===
 +
Un array di checksum MD5 dei file elencati nell'array {{Ic|source}}. Una volta che tutti i file presenti nell'array {{Ic|source}} saranno disponibili, per ogni file verrà generato automaticamente un hash MD5 e confrontato con il valore di questo array nello stesso ordine in cui appare nell'array {{Ic|source}}. Mentre l'ordine dell'array source non è rilevante, è importante che questo combaci con l'ordine di questo array dato che {{Ic|makepkg}} non può indovinare a quale file sorgente appartenga la checksum. E' possibile generare questo array rapidamente e facilmente usando il comando {{Ic|makepkg -g}} nella directory che contiene il file {{ic|PKGBUILD}}. Notare che l'algoritmo MD5 è noto per avere falle, quindi si dovrebbero considerare alternative più sicure.
  
; {{Codeline|sha1sums}} : An array of SHA-1 160-bit checksums. This is an alternative to md5sums described above, but is also known to have weaknesses, so you should consider using a stronger alternative. To enable use and generation of these checksums, be sure to set up the INTEGRITY_CHECK option in makepkg.conf. See man makepkg.conf.
+
===sha1sums===
 +
Un array di checksum SHA-1 a 160-bit. Questa è un'alternativa alle md5sums descritte in precedenza, ma anch'esse sono note per avere delle debolezze, quindi si dovrebbero considerare alternative più sicure. Per abilitare l'uso e la generazione di queste checksums, assicurarsi di impostare l'opzione {{ic|INTEGRITY_CHECK}} in {{ic|makepkg.conf}}. Consultare man {{ic|makepkg.conf}}.
  
; {{Codeline|sha256sums, sha384sums, sha512sums}} : An array of SHA-2 checksums with digest sizes 256, 384 and 512 bits respectively. These are alternatives to md5sums described above and are generally believed to be stronger. To enable use and generation of these checksums, be sure to set up the INTEGRITY_CHECK option in makepkg.conf. See man makepkg.conf.
+
===sha256sums, sha384sums, sha512sums===
 +
Un array di checksum SHA-2 con dimensione del digest di 256, 384 e 512 bit rispettivamente. Queste sono delle alternative alle md5sums descritte in precedenza e sono generalmente considerate più sicure. Per abilitare l'uso e la generazione di queste checksums, assicurarsi di impostare l'opzione INTEGRITY_CHECK in makepkg.conf. Vedere man makepkg.conf.
  
It is common practice to preserve the order of the {{Filename|PKGBUILD}} variables as shown above. However, this is not mandatory, as the only requirement in this context is correct [[Wikipedia:Bash|Bash]] syntax.
+
==Consultare anche==
 +
*[http://pastebin.com/MeXiLDV9 File PKGBUILD d'esempio]
 +
*[http://seberm.pastebin.com/gP0tBqvs File .install d'esempio]

Revision as of 03:05, 16 February 2013

Template:Article summary start Template:Article summary text Template:Article summary heading Template:Article summary text Template:Article summary heading Template:Article summary wiki Template:Article summary wiki Template:Article summary wiki Template:Article summary heading Template:Article summary link Template:Article summary end

Un PKGBUILD è un file di descrizione della costruzione di pacchetti di Arch Linux, usato durante la creazione dei pacchetti. Questo articolo descrive le possibili variabili del PKGBUILD.

I pacchetti in Arch Linux sono costruiti utilizzando il comando makepkg e le informazioni sono memorizzate in un file PKGBUILD. Quando makepkg viene eseguito, cerca un PKGBUILD nella directory corrente e segue le istruzioni ivi contenute sia per compilare che per acquisire i file necessari al confezionamento di un pacchetto (pkgname.pkg.tar.xz). Il pacchetto risultante contiene i file binari e le istruzioni di installazione e può essere facilmente installato tramite pacman.

Variabili

Le seguenti variabili possono essere utilizzate nel file PKGBUILD:

È pratica comune insewrire nel PKGBUILD le variabili nello stesso ordine nel quale sono indicate in questa pagina, anche se ciò non è obbligatorio finchè viene rispettata la sintassi di Bash.

pkgname

Il nome del pacchetto. Dovrebbe consistere nei soli caratteri alfanumerici e trattini ('-') e tutte le lettere dovrebbero essere in minuscolo. Per motivi di coerenza, il pkgname dovrebbe corrispondere al nome dell'archivio dei sorgenti del software che si sta impacchettando. Per esempio, se il software è in foobar-2.5.tar.gz, il valore di pkgname dovrebbe essere foobar. Anche la directory di lavoro in cui risiede il file PKGBUILD dovrebbe corrispondere al pkgname.

pkgver

La versione del pacchetto. Il valore dovrebbe essere lo stesso della versione rilasciata dell'autore del pacchetto. Può contenere lettere, numeri e punti ma NON può contenere trattini. Se l'autore del pacchetto usa i trattini nello schema di numerazione della versione, si deve sostituirli con degli underscore. Per esempio, se la versione è 0.99-10, dovrebbe essere cambiata in 0.99_10. Se la variabile pkgver viene usata successivamente nel PKGBUILD, allora l'underscore può essere facilmente sostituito con un trattino, per esempio:

 source=($pkgname-${pkgver/_/-}.tar.gz)

pkgrel

Il numero della versione di rilascio del pacchetto specifico di Arch Linux. Questo valore permette agli utenti di distinguere tra build consecutive della stessa versione del pacchetto. Quando una nuova versione del pacchetto viene rilasciata, il numero di rilascio parte da 1. Nel caso in cui si apportino aggiustamenti e ottimizzazioni al file PKGBUILD, allora il pacchetto verrà ri-rilasciato e il numero di rilascio verrà incrementato di 1. Nel caso in cui esca una nuova versione del pacchetto, il numero di rilascio verrà resettato a 1.

epoch

Un valore intero, specifico di Archlinux, che rappresenta "l'età" tramite la quale effettuare un confronto tra numeri di versione. Questo valore consente di ignorare le normali regole di confronto di versione per pacchetti che hanno una numerazione di versione inconsistente, che richiedono un downgrade, che devono cambiare lo schema di numerazione, etc. Per impostazione predefinita, si assume che i pacchetti abbiano un valore di epoch pari a 0. Non utilizzare questa variabile a meno che non si sia assolutamente sicuri di ciò che si sta facendo.

pkgdesc

La descrizione del pacchetto. La descrizione dovrebbe essere di circa 80 caratteri o meno e non dovrebbe includere il nome del pacchetto stesso. Per esempio, "Nedit è un editor di testo per X11" si dovrebbe scrivere come "un editor di testo per X11."

Nota: Non seguire questa regola pedissequamente quando si inviano pacchetti ad AUR. Se per qualche motivo il nome del pacchetto differisce dal nome del programma, l'inclusione del nome completo all'interno della discrezione può essere l'unica maniera per renderlo reperibile tramite la ricerca.

arch

Una array di architetture contro le quali il file PKGBUILD deve essere compilato ed utilizzato. Attualmente, può contenere i686 e/o x86_64, arch=('i686' 'x86_64'). E' possibile utilizzare anche il valore any per i pacchetti indipendenti dall'architettura.

È possibile accedere a questo valore durante la compilazione e durante la definizione di variabili, con la variabile $CARCH. Consultare FS#16352. Esempio:

depends=(foobar)
if test "$CARCH" == x86_64; then
  depends+=(lib32-glibc)
fi

url

L'URL del sito ufficiale del software che si sta pacchettizzando.

license

La licenza con la quale il software è distribuito. Il pacchetto licenses presente in [core] fornisce le licenze più comuni in /usr/share/licenses/common, per esempio /usr/share/licenses/common/GPL. Se un pacchetto è munito di una di queste licenze, il valore dovrebbe essere impostato al nome della directory, per esempio license=('GPL'). Se la licenza appropriata non è inclusa del pacchetto ufficiale licenses, si devono fare alcune cose:

  1. Il file della licenza dovrebbe essere incluso in: /usr/share/licenses/pkgname/, per esempio /usr/share/licenses/foobar/LICENSE.
  2. Se l'archivio dei sorgenti NON contiene i dettagli della licenza ed essa è visualizzata altrove, ad esempio su un sito web, allora si doverbbe copiare la licenza su un file da includere.
  3. Aggiungere custom all'array delle license. Facoltativamente, si può rimpiazzare custom con custom:nome della licenza. Una volta che la licenza è utilizzata in due o più pacchetti dei repository ufficiali (incluso [community]), entrerà a far parte del pacchetto licenses.
  • Le licenze BSD, MIT, zlib/png e Python sono casi speciali e potrebbero non essere inclusi nel pacchetto licenses. Per quanto riguarda l'array license, queste vengono trattate come licenze comuni (license=('BSD'), license=('MIT'), license=('ZLIB') e license=('Python')) ma tecnicamente ognuna è una licenza custom poiché ha il proprio copyright. Ogni pacchetto munito di una di queste quattro licenze dovrebbe avere la propria salvata in /usr/share/licenses/pkgname. Alcuni pacchetti potrebbero non essere coperti da una sola licenza. In questi casi, sono possibili più voci nell'array license, ad esempio license=('GPL' 'custom:nome della licenza').
  • Inoltre, le (L)GPL hanno diverse versioni e permutazioni di queste versioni. Per il software (L)GPL, la convenzione è:
    • (L)GPL - (L)GPLv2 o qualsiasi versione successiva
    • (L)GPL2 - (L)GPL2 solamente
    • (L)GPL3 - (L)GPL3 o qualsiasi versione successiva
  • Se non si riesce a determinare la licenza del software che si sta pacchettizzando, PKGBUILD.proto consiglia di utilizzare il valore unknown. Bisonga comunque contattare il creatore del software per sapere a quali condizioni il prodotto è disponibile (ed a quali non lo è)
Tip: Alcuni autori non forniscono un file separato per la licenza e descrivono le regole per la distribuzione all'interno del file ReadMe. Queste informazioni possono essere estratte in un file separato durante la fase di build con un comando simile a questo:
sed -n '/This software/,/  thereof./p' ReadMe.txt > LICENSE

groups

Il gruppo al quale appartiene il pacchetto. Per esempio, quando si installa il pacchetto kdebase, si installano tutti i pacchetti che appartengono al gruppo kde.

depends

Un array di nomi dei pacchetti che devono essere installati per poter poi lanciare questo software. Se il software richiede una versione minima di una dipendenza, si dovrebbe usare l'operatore >= per sottolinearlo, ad esempio: depends=('foobar>=1.8.0'). Non è necessario elencare i pacchetti che il software richiede come dipendenza se questi sono già richiesti come tale dagli altri pacchetti elencati nell'array. Per esempio, gtk2 dipende da glib2 e glibc. Tuttavia, glibc non è necessita di essere elencato come dipendenza per gtk2 visto che è dipendenza per glib2.

makedepends

Un array di nomi dei pacchetti che devono essere installati per poter compilare il software ma inutili per poter usare il software dopo l'installazione. E' possibile specificare la versione minima di dipendenza del pacchetto nello stesso formato ell'array depends.

Attenzione: Quando si compila con makepkg, si assume che si abbia già installato nel proprio sistema il gruppo "base-devel" . I membri di "base-devel" non devono essere inclusi nell'array makedepends.

checkdepends

Un array dipacchetti dai quali il pacchetto in oggetto dipende solo per l'esecuzione della sua suite di prova, e non per il suo corretto funzionamento. I pacchetti in questa lista seguono le stesse regole di quelli nell'array depends. Queste dipendenze sono prese in considerazione solo quando è presente la funzione check() che deve essere esguita da makepkg.

optdepends

Un array di nomi dei pacchetti che non sono necessari al software per funzionare ma che forniscono funzionalità aggiuntive. Si dovrebbe aggiungere una piccola descrizione delle funzionalità che ogni pacchetto fornisce. Un'array optdepends deve assomigliare a questo:

optdepends=('cups: supporto per la stampa'
'sane: supporto per gli scanner'
'libgphoto2: supporto per le fotocamere digitali'
'alsa-lib: supporto per l'audio'
'giflib: supporto per le immagini GIF'
'libjpeg: supporto per le immagini JPEG'
'libpng: supporto per le immagini PNG')

provides

Un array di nomi dei pacchetti dei quali questo software fornisce le funzionalità (oppure un pacchetto virtuale come cron o sh). Se si usa questa variabile, si dovrebbe aggiungere la versione (pkgver e magari la pkgrel) che questo pacchetto fornisce se le dipendenze possono esserne influenzate. Per esempio, se si vuole fornire una versione modificata di qt chiamata qt-foobar versione 3.3.8 che fornisce qt allora l'array provides dovrebbe essere: provides=('qt=3.3.8'). Mettere provides=('qt') causerà il fallimento di quelle dipendenze che richiedono una specifica versione di qt. Non aggiungere pkgname all'array provide, viene fatto in automatico.

conflicts

Un array di nomi dei pacchetti che possono causare problemi con questo pacchetto installato. I pacchetti con questo nome, e tutti quelli che includono questo nome nel loro array provides saranno rimossi. Si possono anche specificare le proprietà delle versioni dei pacchetti che vanno in conflitto nello stesso formato dell'array depends.

replaces

Un array di nomi dei pacchetti obsoleti che sono rimpiazzati da questo pacchetto, per esempio: replaces=('ethereal') per il pacchettowireshark. Dopo aver aggiornato il database con pacman -Sy, rimpiazzerà immediatamente un pacchetto installato con un altro pacchetto dei repository, accoppiato relativamente a replaces. Se si sta fornendo una versione sostitutiva di un pacchetto esistente, si dovrà usare la variabile conflicts la quale è valutata soltanto nel momento in cui si installerà il pacchetto in conflitto.

backup

Un array di file che potrebbero contenere personalizzazioni effettuate dall'utente e che dovrebbero essere cpnservati anche in caso di aggiornamento o rimozione di un pacchetto, pensato principalmente per il file di configurazione sotto /etc. Quando si aggiorna, nuove versioni dei suddetti file potrebbero venire salvate sul disco con l'estensione file.pacnew per evitare di sovrascrivere un file che già esiste ed è stato precedentemente modificato dall'utente. In maniera simile, quando il pacchetto viene rimosso, i file modificati dall'utente saranno mantenuti come file.pacsave, a meno che il pacchetto non sia stato rimosso passando a pacman lo switch -n. I percorsi dei file nell'array dovrebbero essere percorsi relativi (ad es. etc/pacman.conf)e non assoluti (/etc/pacman.conf). Consultare anche Pacnew and Pacsave Files (Italiano).

options

Questo array permette di sovrascrivere alcuni dei comportamenti di default di makepkg. Per impostare un'opzione, si deve includere il nome dell'opzione nell'array. Per invertire il comportamento di default, si deve mettere un ! davanti l'opzione. Questo è un elenco delle opzioni che si possono mettere nell'array:

  • strip - Toglie i simboli dai binari e dalle librerie. Se si utilizzano spesso debugger su programmi e librerie, è più conveniente disabilitare questa opzione.
  • docs - Salva le directory /doc.
  • libtool - Lascia i file di libtool (.la) nel pacchetto.
  • emptydirs - Lascia le directory vuote nel pacchetto.
  • zipman - Comprime le pagine di man e info con gzip.
  • ccache - Permette l'uso di ccache durante la compilazione. Utile principalmente nella sua forma negata !ccache con i pacchetti che hanno problemi nella compilazione con ccache.
  • distcc - Permette l'uso di distcc durante la compilazione. Utile principalmente nella sua forma negata !distcc con i pacchetti che hanno problemi nella compilazione con distcc.
  • buildflags - Consente l'utilizzo di buildflags specifiche per l'utente (CFLAGS, CXXFLAGS, LDFLAGS) durante la compilazione. Utile principalmente nella sua forma negata !buildflags con i pacchetti che hanno problemi nella compilazione con buildflags.
  • makeflags - Permette l'uso di makeflags specifiche per l'utente durante la compilazione. Utile principalmente nella sua forma negata !makeflags con i pacchetti che hanno problemi nella compilazione con makeflags personalizzate.

install

Il nome dello script di .install che deve essere incluso nel pacchetto. Pacman ha l'abilità di memorizzare ed eseguire uno script specifico per pacchetto quando installa, rimuove o aggiorna un pacchetto. Lo script contiene le seguenti istruzioni che vengono eseguite in tempi diversi:

  • pre_install - Lo script è lanciato appena prima dell'estrazione dei file. La nuova versione del pacchetto viene passata come argomento alla funzione.
  • post_install - Lo script è lanciato appena dopo l'estrazione dei file. La nuova versione del pacchetto viene passata come argomento alla funzione.
  • pre_upgrade - Lo script è lanciato appena prima dell'estrazione dei file. La nuova e la vecchia versione del pacchetto vengono passate come argomento alla funzione.
  • post_upgrade - Lo script è lanciato appena dopo dell'estrazione dei file. La nuova e la vecchia versione del pacchetto vengono passate come argomento alla funzione.
  • pre_remove - Lo script è lanciato appena che i file vengano rimossi. La vecchia versione del pacchetto viene passata come argomento alla funzione.
  • post_remove - Lo script è lanciato dopo che i file vengano rimossi. La vecchia versione del pacchetto viene passata come argomento alla funzione.

Ogni funzione è eseguita in ambiente chroot all'interno della directory di installazione di pacman. Consultare questo thread.


Tip: Un prototipo .install è disponibile al /usr/share/pacman/proto.install.

changelog

Il nome del changelog del pacchetto. Per vedere i changelog dei pacchetti installati (che lo forniscono):

pacman -Qc pkgname
Tip: Un prototipo di file changelog è installato in /usr/share/pacman/ChangeLog.proto.

source

un array di file che sono necessari per compilare il pacchetto. Deve contenere la locazione dei sorgenti del software, che in quasi tutte le occasioni è un completo URL HTTP o FTP. Le variabili precendentemente impostatate pkgname e pkgver possono essere usate efficacemente qui (per esempio source=(http://example.com/$pkgname-$pkgver.tar.gz))

Nota: Se si ha il bisogno di fornire file che non sono scaricabili al volo, per esempio patch fatte in proprio, è possibile mettere questi file nella stessa directory del proprio PKGBUILD e aggiungere il nome del file a questo array. Qualsiasi percorso viene aggiunto qui è risolto relativamente alla directory in cui giace il PKGBUILD. Prima che il processo di compilazione parta, tutti i file che sono riferiti in questo array, verranno scaricati o controllati in sussistenza, e makepkg non procederà oltre se qualcuno manca.
Nota: È possibile specificare un nome diverso per il file scaricato, nel caso tale file abbia per qualche motivo un nome diverso, come il parametro GET assegnato all'url, con la seguente sintassi: filename::fileuri, ad esempio $pkgname-$pkgver.zip::http://199.91.152.193/7pd0l2tpkidg/jg2e1cynwii/Warez_collection_16.4.exe

noextract

Un array di file elencati nell'array source che non dovrebbero essere estratti dal loro archivio da makepkg. Per lo più si applica a certi file zip che non possono essere gestiti da /usr/bin/bsdtar visto che libarchive processa tutti i file come flussi piuttosto che ad accesso casuale come fa unzip. In queste situazioni si dovrebbe aggiungere unzip all'array makedepends e le prime linee della funzione build() dovrebbero contenere:

cd $srcdir/$pkgname-$pkgver
unzip [source].zip

Bisogna tenere presente che mentre l'array source accetta degli URL, noextract richiede solo la porzione col nome del file. Se per esempio si vuole fare qualcosa del genere (semplificazione del PKGBUILD di grub2):

source=("http://ftp.archlinux.org/other/grub2/grub2_extras_lua_r20.tar.xz")
noextract=("grub2_extras_lua_r20.tar.xz")

Per non estrarre nulla, si può utilizzare un espediente come questo ( preso dal PKGBUILD di firefox-i18n):

noextract=(${source[@]##*/})

Da notare che una sostituzione di variabile più conservativa della sintassi Bash avrebbe incluso anche delle virgolette, o addirittura un ciclo che richiamasse basename.

md5sums

Un array di checksum MD5 dei file elencati nell'array source. Una volta che tutti i file presenti nell'array source saranno disponibili, per ogni file verrà generato automaticamente un hash MD5 e confrontato con il valore di questo array nello stesso ordine in cui appare nell'array source. Mentre l'ordine dell'array source non è rilevante, è importante che questo combaci con l'ordine di questo array dato che makepkg non può indovinare a quale file sorgente appartenga la checksum. E' possibile generare questo array rapidamente e facilmente usando il comando makepkg -g nella directory che contiene il file PKGBUILD. Notare che l'algoritmo MD5 è noto per avere falle, quindi si dovrebbero considerare alternative più sicure.

sha1sums

Un array di checksum SHA-1 a 160-bit. Questa è un'alternativa alle md5sums descritte in precedenza, ma anch'esse sono note per avere delle debolezze, quindi si dovrebbero considerare alternative più sicure. Per abilitare l'uso e la generazione di queste checksums, assicurarsi di impostare l'opzione INTEGRITY_CHECK in makepkg.conf. Consultare man makepkg.conf.

sha256sums, sha384sums, sha512sums

Un array di checksum SHA-2 con dimensione del digest di 256, 384 e 512 bit rispettivamente. Queste sono delle alternative alle md5sums descritte in precedenza e sono generalmente considerate più sicure. Per abilitare l'uso e la generazione di queste checksums, assicurarsi di impostare l'opzione INTEGRITY_CHECK in makepkg.conf. Vedere man makepkg.conf.

Consultare anche