Home | Chi sono | Contattami
 

Progr. lineare

Delphi
 
Componenti
  Database
 
Miei articoli

Windows

Miei articoli 

 

Compilare il software p2p OpenSource ARES


ARES è un ottimo software p2p ed in più è anche Open Source e scritto in Delphi. Allora ho deciso di scaricarmi i sorgenti e procedere alla compilazione (sicuro fin dall'inizio che non sarebbe stata una semplice questione di apertura del progetto e suo Build). Di seguito i vari passaggi seguiti in data 25 Aprile 2007 per compilare la versione corrente del programma ossia la 2.0.8.3029.

1. Scarichiamo il programma

Come prima cosa, per chi non lo avesse già installato, è opportuno scaricarsi l'installer del programma; l'eseguibile che otterremo nei passaggi successivi lo andremo a sostituire all'eseguibile copiato dall'installer. Siamo il 25 Aprile 2007 e la versione corrente è la 2.0.8.3029: la home page del progetto è la seguente

http://aresgalaxy.sourceforge.net

2. Scarichiamo i sorgenti

I sorgenti del programma si trovano su sourceforge all'indirizzo

http://sourceforge.net/project/showfiles.php?group_id=112366&package_id=121627

3. Creiamoci l'eseguibile

Ora che abbiamo i sorgenti, vediamo come arrivare all'eseguibile

3.1 Componenti necessari

I sorgenti di Ares utilizzano vari componenti: nel seguito vedremo uno ad uno i vari pacchetti.

3.1.1 JEDI components

Incluso coi sorgenti c'è anche un file di testo che elenca le dipendenze, ossia le librerie esterne usate dal programma. In primo luogo c'è la JEDI Library: questa immensa libreria OpenSource che personalmente considero fondamentale, è continuamente aggiornata e sono disponibili, oltre alla versione più recente, anche versioni precedenti. La libreria è composta principalmente dalla Jedi Code Library (JCL) e dalla Jedi Visual Component Library (JVCL). La homepage del progetto è all'indirizzo

http://sourceforge.net/project/showfiles.php?group_id=45786

A questo indirizzo si possono trovare tutte le versioni pubblicate (a partire dalla più recente); per ogni versione esistono vari file da scaricare: il file completo di tutto è il primo (.7z) (o in alternativa il secondo ossia il .zip; l'unica cosa che cambia tra i 2 è il formato di compressione usato, il contenuto è il medesimo). Il nome del file contiene il numero di versione di JCL , il numero di versione di JVCL ed un numero di Build: ad esempio in data 25 Aprile 2007 si ha

JVCL331CompleteJCL199-Build2551.7z

ossia JCL 1.99 e JVCL 3.31

In alternativa si può usare anche l'indirizzo diretto:

http://prdownloads.sourceforge.net/jvcl/JVCL331CompleteJCL199-Build2551.7z?download

(al posto di .7z si può mettere .zip per scaricare il medesimo pacchetto compresso con lo zip classico)

La versione indicata tra i requisiti di ARES è quella presente all'indirizzo

http://prdownloads.sourceforge.net/jvcl/JVCL300CompleteJCL195-Build1848.zip?download

Include: JCL 1.95 e JVCL 3.00 (come si può vedere dal nome del file .zip)

(anch'essa la possiamo trovare nella home page del progetto, andando alla sezione JVCL 3.00)

Come già detto, la versione più recente in data 25 Aprile 2007 è all'indirizzo

http://prdownloads.sourceforge.net/jvcl/JVCL331CompleteJCL199-Build2551.zip?download

Include: JCL 1.99 e JVCL 3.31

Sul mio Delphi ho la seguente versione:

JCL 1.96 e JVCL 3.10

(ossia una versione intermedia)

Per curiosità mi sono installato l'ultima versione (dopo avere disinstallato quella attualmente installata). Successivamente come prima cosa sono andato a verificare che i vari programmi già sviluppati e che usano la JEDI Library continuassero a compilare correttamente (non si sa mai, meglio verificare che tutto quello che andava fino ad oggi continui ad andare). Behh ... tutto OK. Così mi sono detto "behh, visto che continua a funzionare tutto, procediamo con la versione più recente".

I pacchetti che si scaricano agli indirizzi sopra, contengono essenzialmente 2 cartelle:

1) jcl: cartella contenente la JCL
2) jvcl: cartella contenente la JVCL

L'installazione avviene nel seguente modo:

1) Installazione JCL: entrare nella cartella jcl e lanciare install.bat; si aprirà un installer che guiderà l'utente nell'installazione di JCL

2) Installazione JVCL: entrare nella cartella jvcl e lanciare install.bat; si aprirà un installer che guiderà l'utente nell'installazione di JVCL

In ogni caso, se si ha un'altra versione già installata, quest'ultima va obbligatoriamente disinstallata manualmente, ossia vanno disinstallati i componenti relativi (Component --> Install Packages).

3.1.2 DSPack

Questo formidabile pacchetto di componenti consente una eccezionale gestione di contenuti multimediali (filmati etc...). Anche in questo caso si tratta di un pacchetto Open Source: VCL in Delphi costruite su una traduzione in Delphi degli header .h relativi al DirectX 9. Si va da un controllo per riprodurre video e audio ad un componente per la cattura audio e video (senza però prevedere l'utilizzo di codec per la compressione) ed altro, tutto molto interessante e ben fatto. L'indirizzo è il seguente:

http://www.progdigy.com/modules.php?name=DSPack

3.1.3 TNT Unicode Controls

Si tratta di una riscrittura di quasi tutti i controlli VCL di Delphi, per supportare il sistema di caratteri UNICODE. L'home page del progetto è

http://www.tntware.com/delphicontrols/unicode/

La realizzazione è pregevole ed infatti la TMS Software ha acquisito il pacchetto in questione che quindi dal 26 Marzo 2007 non è più Open Source e richiede una licenza per l'utilizzo in applicazioni: adesso il pacchetto si chiama TMSUnicode. Tuttavia, alla pari di tutti gli altri pacchetti della TMS Software, sono liberamente scaricabili i .dcu per tutte le versioni di Delphi e C++ Builder. L'indirizzo è il seguente

http://www.tmssoftware.com/go.asp?tmsuni

Frugando tra i miei backup ho però rimediato una vecchia versione Open Source dei TNT Controls che poi tanto vecchia non è trattandosi appunto della versione 2.2.5 del 15 Maggio 2006

TntUnicodeControls_2_2_5.7z

Le ho installate entrambe (separatamente l'una dall'altra) e ho verificato che ciò che compilava con la vecchia versione, compila correttamente anche con la nuova. Personalmente penso che la cosa migliore sia usare la versione OpenSource.

3.1.4 Ares VCLs

Sotto questo nome viene indicato un pacchetto di VCL di vario tipo create appositamente per ARES. L'indirizzo per scaricarle è il seguente:

http://prdownloads.sourceforge.net/aresgalaxy/Ares_VCLs_03032007.zip?download

Il pacchetto ha una dipendenza dal pacchetto dei TNT Unicode Controls (con precisione la vecchia versione OpenSource).

Il pacchetto include una versione modificata della Virtual TreeView di Mike Lischke ed include le unit CometTrees.pas e VCHeaderPopup.pas che sono versioni modificate delle unit VirtualTrees.pas e VtHeaderPopup.pas della Virtual TreeView. La unit CometTreesReg.pas contiene le procedure di registrazione: vi sono dei conflitti di nome con la VirtualTreeView (viene registrato un controllo di nome TVirtualStringTree che è già previsto dalla Virtual TreeView, etc...) ed allora, avendo già installata la Virtual TreeView che uso in vari programmi, ho fatto una rinomina dei componenti in questione. Esaminando il sorgente di Ares ho constatato che questi controlli non vengono usati, per cui si potrebbe anche commentare la registrazione; tuttavia rinominare mi sembra la scelta migliore. Poi dato che c'ero ho rinominato anche il componente TTrayIcon in uTrayIcon.pas che andava in conflitto col mio componentino che fa la stessa cosa. Bene, per non dilungarci troppo, allego la mia versione delle Ares VCLs:

Ares_VCLs

Come ultima cosa, ho provato a compilare il pacchetto con la versione attuale dei TNT Unicode Controls (quella non più OpenSource che appunto si chiama TMSUnicode) e la compilazione è corretta.

3.2 Compilazione del sorgente e creazione del .exe finale

Una volta installati i pacchetti descritti ai punti precedenti, la compilazione dei sorgenti di Ares non richiede sforzi biblici; il sorgente è contenuto in una cartella e nelle 2 sottocartelle di nome BitTorrent e DHT (che vanno aggiunte al percorso di ricerca del progetto: Project -> Options -> Directories/Conditionals -> Search Path);ho riscontrato un errore nel sorgente all'interno della unit helper_chatroom.pas: viene chiamata la funzione WideInputQuery (implementata nella unit TntDialogs.pas dei TNT Uncidoce Controls) con un numero sbagliato di argomenti; la funzione corrisponde alla funzione InputQuery che appunto visualizza una dialog box che consente l'inserimento di caratteri alfanumerici. Rispetto all'implementazione in TntDialogs.pas, la WideInputQuery chiamata in helper_chatroom.pas contiene 2 parametri in più: si tratta dei primi 2 parametri che, a quanto pare definiscono la posizione Left-Top della dialog box da visualizzare. Purtroppo non sono riuscito a trovare implementazioni overloaded della WideInputQuery di questo tipo e allora ho eliminato questi primi 2 parametri e la compilazione è andata OK. Ho provato anche con la nuova versione dei TNT Unicode Controls (i controlli TMSUnicode di cui si è parlato abbondantemente in precedenza) ed anche stavolta OK, tuttavia la scelta finale va per i TNT Unicode Controls OpenSource. Infine, è degna di nota la sottocartella TcpIPPatcher che contiene i sorgenti della dll TcpIPPatcher.dll che, se inserita nella cartella che contiene l'eseguibile di Ares, consente il caricamento del driver tcpip_patcher.sys (incluso nella cartella di installazione di Ares). Dal Service Pack 2 di Windows, tcpip.sys (nella cartella "c:\windows\system32\drivers") contiene una limitazione sul numero di connessioni contemporanee (limitando di fatto le performance di un software p2p): tcpip_patcher.sys  consente di leggere e modificare tale limite. Le funzioni esportate dalla dll TcpIPPatcher.dll consentono di caricare il driver tcpip_patcher.sys e, tramite esso, ottenere il limite attuale e settarne uno nuovo.     

3.3 Considerazioni sul .exe generato

A questo punto ho sostituito il .exe originale dell'installazione di Ares con il .exe che mi sono creato come descritto nei punti precedenti: behh, .. tutto OK. L'unica differenza è la dimensione: quello originale risulta molto più piccolo. E' sicuramente il risultato dell'utilizzo di qualche exe-compressor: mi sono scaricato WinUpack ed ho ottenuto un .exe di dimensioni analoghe a quello incluso dall'installer.

4. Per concludere

1) scaricare ed installare la Jedi Library:

http://prdownloads.sourceforge.net/jvcl/JVCL331CompleteJCL199-Build2551.7z?download

2) scaricare ed installare DSPack

http://www.progdigy.com/modules.php?name=DSPack

3) scaricare ed installare TNT Unicode Controls (versione Open Source)

TntUnicodeControls_2_2_5.7z

4) scaricare ed installare Ares VCLs

Ares_VCLs

5) scaricare i sorgenti di Ares

http://sourceforge.net/project/showfiles.php?group_id=112366&package_id=121627

andare nella unit helper_chatroom.pas ed eliminare i primi 2 parametri nella chiamata alla funzione WindeInputQuery. Inoltre includere le sottocartelle BitTorrent e DHT nel Search Path del progetto (Project -> Options -> Directories/Conditionals -> Search Path)

Per testare l'eseguibile, scaricarsi l'installer di Ares all'indirizzo

http://aresgalaxy.sourceforge.net/

(click su download)

e sostituire all'eseguibile copiato dall'installer, quello che ci siamo creati.

Altra cosa che si può fare è crearsi la dll TcpIPPatcher.dll: nei sorgenti, andiamo nella sottocartella TcpIPPatcher e buildiamo il progetto TcpIpPatcherDll.dpr. Andremo a mettere TcpIPPatcher.dll nella cartella di installazione di Ares. Tramite tale dll, Ares andrà a caricare il driver tcpip_patcher.sys (presente appunto nella cartella di installazione) e, tramite esso, leggerà e modificherà il limite sul numero di connessioni concorrenti attualmente presente sul sistema (bypassando quindi il limite di 10 imposto da tcpip.sys così come definito a partire dal Service Pack 2 di Windows XP).

  

 

 
 
Your Ad Here