Questo testo descrive i passi necessari per compilare GnuPG per Win32 usando MinGW in maniera "nativa" sotto Windows, senza effettuare cross-compilazioni da Linux. Queste istruzioni si riferiscono a GnuPG 1.4.9 [lo so, alcune immagini riportano 1.4.0 o addirittura 1.2.6, ma sono troppo pigro per rifarle da capo ogni volta... ;-)], ma dovrebbero comunque funzionare, con qualche adattamento, anche con tutte le altre versioni della serie 1.x a partire dalla 1.2.0. Per le versioni future, dalla 1.5.0 compresa in poi, non posso ovviamente garantire nulla...
Ovviamente questa vuole essere solo la descrizione della procedura che io ho seguito per compilare GnuPG per Win32. Non è detto che in certi punti non si possa fare di meglio. Non è neanche detto che la procedura funzioni sui vostri computer così come ha funzionato sul mio e che non vi crei nessun problema. Tutto quello che posso dire è contenuto nel sottotitolo: seguendo questa procedura "a me ha compilato, a voi non so". Se trovate errori, omissioni e/o imprecisioni di qualunque genere all'interno di questo testo, non esitate a segnalarmeli.
Detto questo, se non siete più che sicuri di quello che fate e/o avete dei dubbi sulla correttezza del risultato ottenuto, il consiglio è di lasciare perdere le compilazioni "fatte in casa" ed usare i binari ufficiali presenti sul sito di GnuPG.
Se, invece, nonostante tutto, siete arrivati a leggere fin qui e volete provare, allora tirate un bel respiro, contante fino a 10, ripetete l'alfabeto ad alta voce al contrario (dalla "z" alla "a") un paio di volte, ripensateci di nuovo, e, se siete proprio decisi... beh... allora... qui sotto c'è scritto tutto quello che dovete fare!
Prima di cominciare, l'autore di questa pagina desidera ringraziare TJL73 che ha testato sulla sua macchina l'effettivo funzionamento della procedura qui descritta e la sua completezza. Il sottotitolo può quindi essere letto come un "a noi ha compilato, a voi non so"... ;-)
L'autore desidera ringraziare altresì Joe Vender e Maxine Brandt, per il loro aiuto nel risolvere i problemi di compatibilità tra GnuPG e le librerie esterne per Win32, principalmente gettext nella compilazione "completa" e Bzip2, Tom Pegios, per i suoi suggerimenti sulla semplicifazione della procedura di rimozione dei simboli di debug, e Michel Nallino aka WinTerMiNator che, oltre a curare la versione francese della pagina, ha dato moltissimi suggerimenti per renderne più chiaro e completo il contenuto anche nelle altre lingue... ;-)
Eccovi le istruzioni. In bocca al lupo e non dite che non vi ho avvertito... ;-)
1.1) Create la cartella C:\MinGW
1.2) Collegatevi al sito http://sourceforge.net/project/showfiles.php?group_id=2435 e scaricate i seguenti pacchetti:
a) gcc-core-3.4.5-20060117-1.tar.gz
b) binutils-2.18.50-20080109.tar.gz
c) mingw-runtime-3.14.tar.gz
d) w32api-3.11.tar.gz
e) mingw-utils-0.3.tar.gz
I numeri all'interno dei nomi dei file sono la versione dei pacchetti, e
potranno quindi essere diversi quando leggerete queste note. In genere è
sempre meglio scaricare la versione più aggiornata di ogni pacchetto.
Ovviamente potete anche scaricare altri pacchetti, ma per compilare GnuPG
(scopo di queste note) questi sono più che sufficienti.
1.3) Scompattate i pacchetti all'interno della cartella MinGW creata al punto 1, nell'ordine dal più vecchio al più nuovo (la data è sul sito da cui li avete scaricati, accanto al nome del file). Attenzione a scompattare i file mantenendo la struttura delle directory esistente all'interno dei file compressi. Se tutto andrà bene, alla fine vi ritroverete con molte cartelle all'interno di MinGW: "bin", "include", "lib", ecc. Se durate l'operazione vi viene chiesta la conferma per sovrascrivere un file già esistente, rispondete in maniera affermativa. Visto che state scompattando i pacchetti dal più vecchio al più nuovo, siete sicuri che in questo modo avrete la versione più recente di ogni file.
2.1) Ora potete installare MSYS. Ricollegatevi al sito http://sourceforge.net/project/showfiles.php?group_id=2435 e scaricate MSYS-1.0.10.exe (o la versione che sarà disponibile al momento in cui leggerete). È un normale file eseguibile autoinstallante per Windows. Dovrete rispondere "next" un paio di volte e l'installazione sarà completata in pochi istanti:

2.2) Alla fine dell'installazione, MSYS avvierà una procedura per autoconfigurarsi sulla base dei pacchetti MinGW che avete installato al punto 1:

Dovrete rispondere affermativamente (con "y") alla richiesta di eseguire questa procedura, dire (con un altro "y") di avere già installato MinGW

e indicare la cartella in cui risiede.

Se avete fatto come scritto al punto 1, dovrete indicare "c:/mingw", senza le virgolette. L'uso dei caratteri minuscoli e del carattere "/" al posto di "\" è assolutamente obbligatorio.

La procedura di post-installazione di MSYS si concluderà con una finestra simile alla seguente:

Non fatevi ingannare dall'avviso sulla mancanza di "make", NON è assolutamente un errore. Il "make" originale di MinGW può dare dei problemi e per questo MSYS contiene una versione appositamente riveduta e corretta di "make". Durante la post-installazione, MSYS controlla l'eventuale presenza del "make" di MinGW e, se lo trova, lo rinomina per renderlo inattivo e innocuo. Nel nostro caso, "make" non figura proprio tra i pacchetti MinGW scaricati al punto 1, benché presente sulla stessa pagina di tutti gli altri, e quindi non è stato proprio installato. Pertanto MSYS non lo trova in fase di post-installazione e avverte che va bene così. Il messaggio di avviso tradotto in italiano suona infatti più o meno come "Splendido, non hai installato c:/mingw/bin/make. Mi raccomando, continua così.", riferendosi al fatto che una eventuale installazione successiva del "make" di MinGW manderebbe tutto all'aria. Non preoccupatevi quindi dell'avviso e premete pure un tasto per proseguire, come suggerito dall'ultima riga della finestra.
2.3) Ora potete lanciare MSYS con l'apposita icona nel menù avvio o con quella sul desktop.
2.4) Scrivete al prompt di MSYS "gcc -v" e premete invio. Se vi appaiono messaggi simili a quelli che vedete in questa figura:

allora congratulazioni: GCC funziona!
3.1) Ora, per la compilazione di GnuPG, vi possono servire
alcune librerie aggiuntive. Collegatevi quindi al sito http://sourceforge.net/project/showfiles.php?group_id=23617,
scaricate i seguenti pacchetti:
a) bzip2-1.0.5-bin.zip
b) bzip2-1.0.5-lib.zip
c) libiconv-1.9.2-1-bin.zip
d) libiconv-1.9.2-1-dep.zip
e) zlib-1.2.3-bin.zip
f) zlib-1.2.3-lib.zip
e scompattateli all'interno di MinGW secondo la stessa modalità del punto 1
(dal più vecchio al più nuovo),
controllando che la struttura delle directory venga mantenuta. Al solito, i
numeri di versione potranno essere diversi quando leggerete queste note.
Nessuna di queste librerie è realmente indispensabile alle funzioni
di base di GnuPG. I pacchetti "a" e "b" sono necessari per aggiungere il
supporto al formato di compressione Bzip2. I pacchetti "c" e "d" sono
necessari per il supporto multi-lingue. I pacchetti "e" e "f" sarebbero
necessari per il supporto al formato di compressione zlib ma, se non sono
presenti nel sistema, lo script di compilazione usa una versione ad hoc di
zlib inclusa nel sorgenti di GnuPG; tale versione ad-hoc verrà comunque
collegata al file eseguibile di GnuPG in maniera statica, indipendentemente
da quanto specificato in LDFLAGS (vedi punto 5.1b).
3.2) Se avete scelto di usare libiconv, avviate ora MSYS e inserite il seguente comando:
cp /mingw/bin/libiconv2.dll /mingw/bin/iconv.dll
3.3) Scaricate anche il file coreutils-5.2.1-1-bin.zip (o quello che sarà disponibile quando leggerete queste note, considerando che la versione 5.3.0 spesso provoca un crash sulla mia macchina) e scompattatelo in una cartella temporanea (NON in MinGW). Si scompatteranno varie sottocartelle, tra cui una chiamata "bin". Copiate il file dd.exe da questa sottocartella "bin" a "C:\MinGW\bin" e poi cancellate la cartella temporanea in cui avete scompattato il file zip. NON copiate altri file oltre dd.exe, tutti gli altri comandi sono già presenti in MSYS e averne una copia in MinGW può solo causare problemi.
3.4) Infine, se desiderate attivare anche il
supporto per libcurl, potete collegarvi al sito http://curl.haxx.se/download.html
e scaricare, sotto la voce "Win32 - Generic", l'ultima versione per il vostro
sistema operativo (a seconda che si tratti o meno di 2000/XP)
definita "libcurl" (non "binary")
senza supporto SSL (la versione 7.17.1, nel momento in cui scrivo). Dovrete
ora seguire la procedura seguente:
a) Scompattare questo file in una cartella temporanea
(NON in MinGW). Saranno create varie sottocartelle.
b) Copiare il contenuto della sottocartella "bin"
in C:\MinGW\bin.
c) Copiare il contenuto della sottocartella "include"
in C:\MinGW\include.
d) Copiare il contenuto della sottocartella "lib" in
C:\MinGW\lib, tranne eventuali file .dll che dovrete copiare in
C:\MinGW\bin.
e) Aprire, con il vostro editor di testi preferito, il file
"curl-config" in C:\Mingw\bin, sostituite alla riga 28 "/usr/local" con
"/mingw" e rimuovete "-L/home/dast/src/win32" dalle righe 198, 200 e 205.
f) Aprire, con il vostro editor di testi preferito, il file
"libcurl.la" in C:\Mingw\lib, rimuovete "-L/home/dast/src/win32" dalla riga 17
e sostituite alla riga 35 "/usr/local/lib" con "/mingw/lib".
g) Cancellare la cartella temporanea.
Prima di cominciare la compilazione, è necessario fare un minimo adattamento ai sorgenti di GnuPG.
4.1) Se non lo avete già fatto, scaricate i sorgenti di GnuPG 1.4.9 (ovviamente da http://www.gnupg.org). Nella cartella in cui è stato installato MSYS, c'è una sottocartella "home" al cui interno si trova una ulteriore cartella il cui nome è il vostro nome utente sotto Windows. Al suo interno dovete scompattare i sorgenti di GnuPG, mantenendo la struttura delle directory presente nel file compresso. Se tutto va bene, vi ritroverete con una ulteriore sottocartella chiamata "gnupg-1.4.9" con tutti i sorgenti al suo interno.
4.2) Aprite ora il file "seat.test" nella sottocartella "checks" e portatevi alla linea 9.

Modificate "$i y" in "z y" e aggiungete subito prima di essa una nuova linea con in seguente comando: "unix2dos -c 7bit -n $i z". Salvate e chiudete il file.

5.1) Scrivete i seguenti comandi al prompt di MSYS,
appena lo avete avviato:
a) cd gnupg-1.4.9
b) CFLAGS='-O3 -mtune=i386 -march=i386
-mfpmath=387 -mno-mmx -mno-sse -mno-3dnow -mno-sse2'
LDFLAGS='-s' ./configure

Altre opzioni possono essere aggiunte alla fine della riga di comando di "./configure". Ad esempio, si può aggiungere "--enable-camellia" per abilitare il supporto sperimentale all'algoritmo di cifratura "Camellia". Una lista delle possibili opzioni è visualizzabile con il comando "./configure --help". Con questa procedura si otterrà un eseguibile in grado di girare su qualunque macchina i386. Nel caso in cui vogliate invece attivare delle ottimizzazioni particolari per la vostra macchina, potete sostituire i parametri all'interno della variabile CFLAGS con quelli che preferite. Ad esempio, per una macchina Pentium III potete specificare:
CFLAGS='-O3 -mtune=pentium3 -march=pentium3 -mfpmath=sse -mmmx -msse'
oppure, per un Athlon-XP:
CFLAGS='-O3 -mtune=athlon-xp -march=athlon-xp -mfpmath=sse -mmmx -msse -m3dnow'.
L'eseguibile così creato necessiterà, per poter funzionare, dei file .dll relativi alle librerie esterne che avrete deciso di usare nel punto 3 (bzip2, zlib, ecc.). Tali file dovranno essere copiati nella stessa cartella di gpg.exe o in un altra cartella contenuta nella %path% di sistema (vedi punto 5.2). Nel caso in cui vogliate invece un eseguibile indipendente e in grado di funzionare senza file .dll aggiuntivi, dovrete specificare:
LDFLAGS='-s -static'
invece di:
LDFLAGS='-s'.
Bisogna notare, però, che questa procedura non funziona necessariamente
con tutte le librerie. In particolare, libiconv non può essere collegata
all'eseguibile in maniera statica, e pertanto il file iconv.dll
sarà comunque necessario per usare il supporto multilingue.
Per una lista completa di tutti i parametri che potete passare al
compilatore per attivare particolari ottimizzazioni, vi rimando al manuale di GCC. A questo punto vi
apparirà una lunga serie di messaggi mentre vengono impostati i parametri
della compilazione. Alla fine dovrebbe apparirvi il messaggio riportato
nella figura qui sotto. Se non avviene, vuole dire che c'è stato un errore
di qualche tipo.
c) make

Vi apparirà una lunga serie di messaggi durante la compilazione. Se tutto
funziona bene, vi ritroverete nella situazione mostrata nella figura qui
sotto. Se no la compilazione si interromperà segnalando un errore.
d) make check

Questo non è un passaggio obbligatorio, ma è utile per controllare che tutto abbia funzionato bene e la copia di GnuPG appena compilata sia perfettamente funzionante.

e) iconv -f LATIN1 -t cp850 po/it.po > po/it2.po
&& mv po/it2.po po/it.po && msgfmt -o po/it.gmo po/it.po
ove "it" può essere sostituito con il file di localizzazione che vi
interessa (ad esempio, "fr" per il francese, "es" per lo spagnolo, ecc.) e
"cp850" deve naturalmente essere sostituito con l'effettiva codepage (una
sorta di "tabella dei caratteri") usata dalla vostra versione di Windows
nelle finestre del prompt dei comandi. La codepage 850 è quella, cosiddetta,
dell'Europa occidentale, e viene usata dalle versioni italiane. Per sapere
la codepage usata dalla vostra versione di Windows, aprite una finestra del
prompt dei comandi e usate il comando "chcp". Se siete interessati a più di
una localizzazione di GnuPG, ripetete questo punto "e" per tutti i file di
localizzazione che vi interessano. Se avete saltato il punto 3.2, allora
saltate anche questo punto "e".
5.2) Se tutto è andato bene e non avete avuto errori, allora troverete gpg.exe e gpgv.exe nella sottocartella g10, gpgkeys_hkp.exe, gpgkeys_ldap.exe, gpgkeys_finger.exe e gpgkeys_http.exe nella cartella keyserver e gpgsplit.exe nella sottocartella tools. A questo punto potete copiarli in una cartella apposita (ad esempio C:\Programmi\GnuPG), insieme alle librerie dinamiche che avrete scelto di usare durante la compilazione (ad es. bzip2, iconv, libcurl, zlib, ecc.) e che troverete in C:\MinGW\bin. Potete anche copiare il file "it.gmo" (o quello che avete creato al punto 5.1g qui sopra), che troverete nella cartella "po", nella cartella dei file di localizzazione di GnuPG (ad esempio C:\Programmi\GnuPG\gnupg.nls) rinominandolo in "it.mo". Potete a questo punto seguire la normale procedura di installazione di GnuPG per Windows, perfettamente descritta nel sito di Stefano a cui vi rimando e nel file README-W32.txt.