Newsgroup: it.comp.sicurezza.pgp
Titolo: GnuPG 1.0.7 per Win32: ce l'ho fatta!

Salve a tutti!
Ebbene si'! Finalmente sono riuscito a compilare GnuPG 1.0.7 per
Win32!!!! :-D
In questo post vorrei evidenziare un paio di cose, di cui mi sono
accorto durante la compilazione, che spero siano di aiuto per chi
volesse provarci a sua volta.
Tanto per cominciare, NON ho usato Cygwin. Infatti volevo ottenere un
eseguibile Win32 "nativo", senza dipendenze da cygwin1.dll e simili,
esattamente come nelle release ufficiali. Il supporto a MinGW32 sotto
Cygwin mi ha sempre dato un po' di problemi, quindi ho deciso di usare
MinGW32 direttamente. Tra l'altro, MinGW usa gia' GCC 3.1, mentre Cygwin
e' ancora ferma al 2.95.x. Anche MinGW include un porting dei comandi
Unix strettamente necessari per fare girare uno script di configurazione
(si chiama MSYS=Minimal SYStem), quindi non ci sono stati problemi da
quel punto di vista. Ho usato MSYS 1.0.7-2 con le ultime versioni ad
oggi disponibili di GCC 3.1 (3.1-20020516), binutils
(2.12.90-20020518-1), make (3.79.1-20010722), W32api (1.4-2) e MinGW
runtime (2.0-20020430). Tutto e' disponibile al sito 
www.mingw.org
. 
GnuPG 1.0.7 puo' essere compilato per Win32 sotto Linux, usando una
particolare versione di MinGW e uno script di configurazione ad-hoc. Io
lo volevo compilare direttamente sotto Windows, anche perche' la
versione ad-hoc per Linux di MinGW comincia ad essere vecchiotta. Quindi
ho dovuto modificare lo script (scripts/autogen.sh). Non ho usato il
comando "./configure" perche', se c'e' una versione apposita dello
script di configurazione per Win32, un motivo ci deve essere. 
Ho dovuto modificare le path e un paio di altri comandi in
scripts/autogen.sh, ma niente di particolare. Tra le altre cose, in
questo modo il processo di compilazione funziona perfettamente, senza
dover dare piu' volte il comando "make" in seguito agli errori. Credo
che sia dovuto al fatto che scripts/autogen.sh mette automaticamente a
posto le path con la sintassi corretta per Win32. 
Ho dovuto fare solo un altro paio di modifiche:
1) In cipher/rndw32.c, proprio all'inizio, c'e' un comando
   #ifdef __CYGWIN32__
   # include <winioctl.h>
   #endif
   che viene quindi eseguito solo se e' presente Cygwin. Quel comando
   serve anche sotto MinGW, quindi ho rimosso l'ifdef e il relativo
   endif lasciando solo:
   # include <winioctl.h>
2) In util/strgutil.c c'e' un pezzo:
   #ifndef HAVE_STRCASECMP
   int
   strcasecmp( const char *a, const char *b )
   {
       for( ; *a && *b; a++, b++ ) {
	   if( *a != *b && toupper(*a) != toupper(*b) )
	       break;
       }
       return *(const byte*)a - *(const byte*)b;
   }
   #endif
   che ho dovuto rimuovere perche' in MinGW32 la funzione strcasecmp e'
   presente anche se lo script di configurazione non se ne accorge.
3) In include/util.h ho dovuto rimuovere le seguenti righe:
   #ifndef HAVE_STRCASECMP
   int strcasecmp( const char *, const char *b);
   #endif
   per lo stesso motivo del punto 2.
4) Poi c'e' il solito problema del makefile mancante nella cartella
   "po". Quindi ho copiato 
makefile.in
 col nome di makefile come
   suggerito da Antonio.
Con questo modifiche ho dato "make" e tutto ha girato bene fino alla
fine, autotest inclusi. Tra le altre cose ho anche attivato in fase di
compilazione le ottimizzazioni per Athlon presenti in GCC 3.1 e non in
GCC 2.95. 
Il programma gira (nel senso che se scrivo "gpg --help" mi mostra la
lista dei comandi). Non gli ho ancora dato in pasto i miei keyrings di
GnuPG 1.0.6 perche' volevo prima controllare bene i problemi di
compatibilita' tra i due (se devo esportare e reimportare il tutto, o se
basta farglieli trovare e li converte lui). Visto che stanotte erano le
2 passate ho preferito andare a letto... ;-) 
Nei prossimi giorni vi faro' sapere i risultati dei test. Intanto
qulcuno di voi ha informazioni sulla funzione strcasecmp fornita di
serie con MinGW32? E' valida, si'? Puo' essere usata senza problemi per
GnuPG, no? Fatemi sapere... 
-- 
Carlo Luciano
GPG ElG/DSA 4096/1024 Key: 
http://web.tiscali.it/clbianco/clbianco.asc
ID: 0x5324A0DA - Fingerprint: 8B00C61034120506111B143DEDBF71B45324A0DA

 per GnuPG, no? Fatemi sapere...
La domanda e' sempre valida, nel caso qualcuno sapesse qualcosa...
