fpcup: installazioni parallele di lazarus e fpc

fpcup

Introduzione

Lazarus e FPC sono due progetti complementari e - tutti e due - sono in costante fase di sviluppo.
Ogni OS ha il suo sistema di installazione più o meno allineato all'ultima versione stabile sia del compilatore che dell'IDE.
Però cosa accade se abbiamo già un ambiente lazarus/fpc installato e:
- abbiamo bisogno di una versione precedente
- vogliamo provare lazarus nella versione in fase di sviluppo per dare il nostro contributo
- vogliamo provare una nuova caratteristica del compilatore fpc che è stata implementata ma non rilasciata
- abbiamo la necessità di provare un nostro progetto con una nuova versione appena rilasciata
- tramite il forum ufficiale sappiamo che un bug che è stato fixato ma non possiamo aspettare il prossimo installer
- sappiamo che nella nostra versione è stato introdotto un nuovo componente ma questo è nella versione fixed
- vogliamo un ambiente lazarus/fpc compilato dai sorgenti (ma siamo semplici esseri umani...)
- qualsiasi altro motivo che si risolva con una seconda installazione di lazarus sul nostro sistema (a patto che non interferisca con l'installazione in uso)

Ovviamente ci sono parecchie strade per rimediare a quanto sopra, una su tutte una macchina virtuale.
Però ce un'altra strada molto comoda e funzionale allo stesso tempo: fpcup.
Se volete approfondire, i sorgenti e la documentazione li trovate al link https://bitbucket.org/reiniero/fpcup.

Cos'è fpcup
fpcup è uno strumento che permette di scaricare una determinata versione dei sorgenti del compilatore FreePascal e dell'IDE Lazarus con lo scopo di compilarli ed ottenere così il relativo ambiente di sviluppo.

E' pensato per ottenere installazioni parallele ad altre, senza nessun tipo di interferenza, a prescindere dalla modalità del processo di installazione di quelle già presenti.
Per ottenere questo risultato, compilatore fpc, ide Lazarus e cartella delle impostazioni vengono installate in cartelle isolate. Il compilatore fpc è sostituito da uno script (sotto linux fpc.sh) in modo da non interferire con quello eventualmente installato con  un installer che mette il compilatore sotto PATH.
Riassumendo il lavoro di fpcup:
- scarica (se non lo trova) il compilatore bootstrap adatto alla nostra versione dell'OS (fpc è scritto in pascal e il bootstrap è un compilatore pascal di base)
- scarica i sorgenti di fpc
- scarica i sorgenti di lazarus
- tramite il compilatore bootstrap si compilano i sorgenti fpc per ottenere il compilatore fpc stesso alla versione voluta
- con il compilatore fpc ottenuto dal punto sopra, si compilano i sorgenti dell'IDE e cioè di Lazarus
- vengono create delle impostazioni isolate
- viene creato uno script per il lancio di lazarus
- viene creato uno script per aggiornare i sorgenti in qualsiasi momento e ricostruire tutto
Ci sono molte guide in giro per fare questo a mano ma con questo strumento in 20/30 minuti (dipende dal sistema) abbiamo il nostro ambiente pronto!

A corredo ci sono molte funzionalità come la possibilità di installare l'help, di impostare dei cross-compiler ed addirittura di installare automaticamente alcuni package (questa ultima caratteristica da Lazarus 1.1).
In questa breve introduzione si sceglierà una combinazione Lazarus/FPC la si installerà e verrà mostrato come mantenere il tutto aggiornato direttamente dai repository.
Non ci sono problemi se l'installazione non dovesse andare a buon fine o non dovesse soddisfarci: basterà eliminare la cartella principale con tutte le sottocartelle ed il gioco è fatto! Non rimarrà nulla di sporco in nessun OS.

Una nota abbastanza importante per chi proverà fpcup sotto linux.
Prerequisiti per l'installazione di fpc/lazarus sono:
- binutils (make ecc...)
- bunzip2
- unzip
- subversion client: svn
ed io aggiungo anche:
- il debugger gdb
Quindi, prima di continuare, accertatevi di avere installati i pacchetti elencati sopra. Se non vi sentite troppo esperti del mondo linux vi consiglio un semplice workaround: installate l'ultimo lazarus che il vostro sistema di gestione di pacchetti vi propone. Con questo trucco avrete sistemato tutte le dipendenze necessarie ;).

Quale versione di FPC e Lazarus?
Nel momento in cui scrivo, ci sono 4 versioni del compilatore FreePascal più interessanti delle altre:
- stabile precedente: 2.6.0
- stabile corrente: 2.6.2
- stabile corrente con fix: 2.6.3
- trunk (in fase di sviluppo): 2.7.1
Per una lista completa, è possibile dare un'occhiata in:
http://svn.freepascal.org/svn/fpc/

Per quanto riguarda Lazarus, le versioni più gettonate sono:
- stabile precedente: 1.0.6
- stabile corrente: 1.0.8
- trunk (in fase di sviluppo): 1.1
Per una lista completa, è possibile dare un'occhiata in:
http://svn.freepascal.org/svn/lazarus/

Già solo guardando le versioni disponibili si intuiscono le potenzialità di fpcup. Ad esempio l'installazione che preferisco (che tra l'altro è quella proposta di default) è una installazione con la versione fixed di fpc con la quale compilo l'IDE Lazarus. In questo modo posso aggiornare in qualsiasi momento la mia installazione principale con la certezza di avere tutti i fix del compilatore fpc.
Alla versione sopra ne aggiungo spesso una seconda con fpc e lazarus ambedue nella versione trunk.
Ovviamente, leggete la documentazione ufficiale per sapere la versione minima di fpc necessaria per compilare una certa versione di Lazarus.

Passiamo ai fatti

1) La cartella di installazione.
Ho deciso di installare tutto ciò che riguarda lo sviluppo in una sottocartella 'dev' della home del mio utente.
Al suo interno farò una installazione di lazarus/fpc.

Quindi apro una shell e digito i seguenti comandi:
Codice: [Seleziona]

user@host ~ $ mkdir ~/dev
user@host ~ $ mkdir ~/dev/lazfpc01
user@host ~ $ mkdir ~/dev/lazfpc01/fpcup


L'ultima cartella creata (~/dev/lazfpc01/fpcup) sarà la cartella di lavoro di fpcup.

2) Ottenere una copia di fpcup

Se siete impazienti ed avete un sistema linux x64 potete eseguire la seguente lista di comandi.
Codice: [Seleziona]

user@host ~ $ cd ~/dev/lazfpc01/fpcup
user@host ~ $ wget https://bitbucket.org/reiniero/fpcup/downloads/fpcup_linux_x64
user@host ~ $ chmod 744 fpcup_linux_x64

Se tutto è andato a buon fine, potete passare al punto successivo.

In alternativa, potete aprire un browser su https://bitbucket.org/reiniero/fpcup/downloads per individuare la versione di fpcup adatta al vostro OS.
Date sempre un'occhiata alle date di compilazione delle varie versioni di fpcup: se quella che interessa non è recentissima possiamo sempre scaricare i sorgenti e compilare fpcup con le ultimissime modifiche.
Una volta scaricato fpcup, copiamolo in una cartella dedicata ad esso e apriamo una shell sulla cartella.

3) Pronti al lancio
Fpcup ha tutta una serie di parametri per configurare l'installazione di cui abbiamo bisogno e tutti questi parametri hanno un default. E' quindi possibile lanciare fpcup senza alcun parametro ma, credetemi, ci prenderete gusto a personalizzare la vostra installazione e quindi iniziamo con il seguente comando:

Codice: [Seleziona]

./fpcup_linux_x64 --installdir=~/dev/lazfpc01 --fpcURL=fixes --lazURL=trunk


Con questo comando installo un ambiente dove:
- fpc: versione stabile attuale più fixes
- lazarus: versione in fase di sviluppo (trunk)
I valori che ho passato ai parametri --fpcURL e --lazURL sono degli alias che potete trovare nel file fpcup.ini. Questi alias corrispondono a degli url svn, esattamente quelli visti sopra nella sezione "Quale versione di FPC e Lazarus?". Se quindi non trovate gli alias che vi soddisfano potete tranquillamente mettere gli URL che prefetite.
Per il parametro installdir, potete consultare la documentazione di fpcup ma sappiate che serve a definire una cartella in cui isolare compilatore, ide ed impostazioni.

Ci vorrà un po' di tempo perché il lavoro termini. Alla fine dovrete ottenere un log simile al seguente.

Codice: [Seleziona]

fpcup
An FPC/Lazarus downloader/updater/installer
Open source freeware (modified LGPL/BSD), see:
https://bitbucket.org/reiniero/fpcup

This program will download the FPC and Lazarus sources
from the source Subversion/SVN repositories,
compile, and install.
Result: you get a fresh, up-to-date Lazarus/FPC installation.

Version: based on commit 16105d7c3ec3 (Mon Jun 10 08:58:32 2013 +0200)
Build date: 2013/06/10 09:12:05
Compiled for CPU: x86_64 on linux

The "binutilsdir" parameter (currently set to /home/user/dev/lazfpc01/fpcup) is not necessary or supported on this system.
The parameter will be ignored.

Options:
Bootstrap compiler dir: /home/user/dev/lazfpc01/fpcbootstrap
Lazarus shortcut name:  Lazarus_lazfpc01
Shortcut fpcup name:    fpcup_lazfpc01_update
FPC URL:                http://svn.freepascal.org/svn/fpc/branches/fixes_2_6
FPC options:            
FPC directory:          /home/user/dev/lazfpc01/fpc
Lazarus directory:      /home/user/dev/lazfpc01/lazarus
Lazarus primary config path:
(Lazarus settings path) /home/psuser/dev/lazfpc01/config_lazarus
Lazarus URL:            http://svn.freepascal.org/svn/lazarus/trunk
Lazarus options:        
Keep local changes:     no
Log file name:          /home/user/fpcup.log
Additional modules:    
Parameter list:         --installdir="~/dev/lazfpc01" --fpcURL="fixes" --lazURL="trunk"



Continue (Y/n):
Info: 3-9-13 09:03:20: fpcup 16105d7c3ec3 (Mon Jun 10 08:58:32 2013 +0200) started.
Info: /home/user/dev/lazfpc01/fpcbootstrap/x86_64-linux-ppcx64 is not a valid x86_64-linux-ppcx64 application (x86_64-linux-ppcx64 result code was: -1)
Info: Going to download /tmp/TMP00000.tmp from URL: ftp.freepascal.org/pub/fpc/dist/2.6.0/bootstrap/x86_64-linux-ppcx64.bz2
Info: Going to move /tmp/TMP00000.tmp.out to /home/user/dev/lazfpc01/fpcbootstrap/x86_64-linux-ppcx64
Info: FPC: running make distclean:
Info: Checking out/updating FPC sources...
Info: FPC was at: branch revision FRET_UNKNOWN_REVISION (repository revision )
Info: FPC is now at: branch revision 25401 (repository revision 25402)
Info: TFPCInstaller: building module FPC...
Info: Running make all for FPC:
Info: Running make install for FPC:
Info: Created launcher script for FPC:/home/user/dev/lazfpc01/fpc/bin/x86_64-linux/fpc.sh
Info: Creating fpc.cfg:
Info: Checking out/updating Lazarus sources:
Info: Lazarus was at: branch revision FRET_UNKNOWN_REVISION (repository revision )
Info: Lazarus is now at: revision 42568
Info: TLazarusNativeInstaller: building module BIGIDE...
Info: BIGIDE: running make bigide:
Info: Created Lazarus primary config directory: /home/user/dev/lazfpc01/config_lazarus
Info: Lazarus: creating desktop shortcut:
Info: helplazarus: documentation directory: /home/user/dev/lazfpc01/lazarus/docs/chm/
Info: Going to download /tmp/TMP00000.tmp.zip from URL: http://sourceforge.net/projects/lazarus/files/Lazarus%20Documentation/Lazarus%201.0/fpc-lazarus-doc-chm-1.0.zip/download
Info: helplazarus: documentation directory: /home/user/dev/lazfpc01/lazarus/docs/chm/
Info: /home/user/dev/lazfpc01/lazarus/docs/html/build_lcl_docs is not a valid build_lcl_docs application (build_lcl_docs result code was: -1)
Info: helplazarus: compiling build_lcl_docs help compiler:
Info: helplazarus: compiling chm help docs:
Info: helplazarus: WARNING: /home/user/dev/lazfpc01/lazarus/docs/chm/lcl/lcl.chm was created but is empty (perhaps due to FPC bugs). Lcl.chm may be out of date! Try running with --verbose to see build_lcl_docs error messages.
Info: Getting module lazdatadesktop
Info: TUniversalInstaller: building module lazdatadesktop...
Info: Getting module doceditor
Info: TUniversalInstaller: building module doceditor...
Info: Getting module suggestedpackages
Info: TUniversalInstaller: building module suggestedpackages...
Info: Getting module fpcdocs
Info: TUniversalInstaller: building module fpcdocs...
Info: Getting module lazres
Info: TUniversalInstaller: building module lazres...
Info: TLazarusNativeInstaller: building module USERIDE...
Info: Lazarus: running lazbuild to get IDE with user-specified packages:
Info: Lazarus: creating desktop shortcut:
Info: 3-9-13 09:21:16: fpcup finished.
Info: Checking out/updating FPC sources...

Info: FPC: WARNING: found modified files.
/home/user/dev/lazfpc01/fpc/utils/fpcmkcfg/fppkg.inc
Diff with last revision stored in /home/user/dev/lazfpc01/fpc/REV25401.diff
FPC: reverting before updating.

Info: FPC was at: branch revision 25401 (repository revision 25402)
Info: No updates for FPC found.
Info: TFPCInstaller: building module FPC...
Info: Running make all for FPC:
Info: Running make install for FPC:
Info: fpc.sh launcher script already exists (/home/user/dev/lazfpc01/fpc/bin/x86_64-linux/fpc.sh); trying to overwrite it.
Info: Created launcher script for FPC:/home/user/dev/lazfpc01/fpc/bin/x86_64-linux/fpc.sh
Info: fpc.cfg already exists; leaving it alone.
Info: Checking out/updating Lazarus sources:
Info: Lazarus was at: revision 42568
Info: No updates for Lazarus found.
Info: TLazarusNativeInstaller: building module BIGIDE...
Info: BIGIDE: running make bigide:
Info: Lazarus: creating desktop shortcut:
Info: helplazarus: documentation directory: /home/user/dev/lazfpc01/lazarus/docs/chm/
Info: helplazarus: skipping docs download: FPC rtl.chm and fcl.chm already present in docs directory /home/user/dev/lazfpc01/lazarus/docs/chm/
Info: helplazarus: documentation directory: /home/user/dev/lazfpc01/lazarus/docs/chm/
Info: helplazarus: compiling chm help docs:
Info: helplazarus: WARNING: /home/user/dev/lazfpc01/lazarus/docs/chm/lcl/lcl.chm was created but is empty (perhaps due to FPC bugs). Lcl.chm may be out of date! Try running with --verbose to see build_lcl_docs error messages.
Info: Getting module lazdatadesktop
Info: TUniversalInstaller: building module lazdatadesktop...
Info: Getting module doceditor
Info: TUniversalInstaller: building module doceditor...
Info: Getting module suggestedpackages
Info: TUniversalInstaller: building module suggestedpackages...
Info: Getting module fpcdocs
Info: TUniversalInstaller: building module fpcdocs...
Info: Getting module lazres
Info: TUniversalInstaller: building module lazres...
Info: TLazarusNativeInstaller: building module USERIDE...
Info: Lazarus: running lazbuild to get IDE with user-specified packages:
Info: Lazarus: creating desktop shortcut:
Info: 3-9-13 09:23:53: fpcup finished.
Info: Checking out/updating FPC sources...
Info: FPC was at: branch revision 25401 (repository revision 25403)
Info: No updates for FPC found.
Info: TFPCInstaller: building module FPC...
Info: Running make all for FPC:
Info: Running make install for FPC:
Info: fpc.sh launcher script already exists (/home/user/dev/lazfpc01/fpc/bin/x86_64-linux/fpc.sh); trying to overwrite it.
Info: Created launcher script for FPC:/home/user/dev/lazfpc01/fpc/bin/x86_64-linux/fpc.sh
Info: fpc.cfg already exists; leaving it alone.
Info: Checking out/updating Lazarus sources:
Info: Lazarus was at: revision 42568
Info: No updates for Lazarus found.
Info: TLazarusNativeInstaller: building module BIGIDE...
Info: BIGIDE: running make bigide:
Info: Lazarus: creating desktop shortcut:
Info: helplazarus: documentation directory: /home/user/dev/lazfpc01/lazarus/docs/chm/
Info: helplazarus: skipping docs download: FPC rtl.chm and fcl.chm already present in docs directory /home/user/dev/lazfpc01/lazarus/docs/chm/
Info: helplazarus: documentation directory: /home/user/dev/lazfpc01/lazarus/docs/chm/
Info: helplazarus: compiling chm help docs:
Info: helplazarus: WARNING: /home/psuser/dev/lazfpc01/lazarus/docs/chm/lcl/lcl.chm was created but is empty (perhaps due to FPC bugs). Lcl.chm may be out of date! Try running with --verbose to see build_lcl_docs error messages.
Info: Getting module lazdatadesktop
Info: TUniversalInstaller: building module lazdatadesktop...
Info: Getting module doceditor
Info: TUniversalInstaller: building module doceditor...
Info: Getting module suggestedpackages
Info: TUniversalInstaller: building module suggestedpackages...
Info: Getting module fpcdocs
Info: TUniversalInstaller: building module fpcdocs...
Info: Getting module lazres
Info: TUniversalInstaller: building module lazres...
Info: TLazarusNativeInstaller: building module USERIDE...
Info: Lazarus: running lazbuild to get IDE with user-specified packages:
Info: Lazarus: creating desktop shortcut:
Info: 3-9-13 09:28:23: fpcup finished.



Andiamo ad osservare cosa abbiamo ottenuto nella cartella lazfpc01:
config_lazarus : cartella di settings per lazarus, isolata da quella standard dell'installer ufficiale
extras         : cartella extras di fpc
fpc            : installazione del compilatore fpc (quì troverete fpc.sh con cui compilare i vostri progetti)
fpcbootstrap   : compilatore di bootstrap (tramite porametro potremo impedire nuovi download)
fpcup          : la nostra cartella di lavoro di fpcup
lazarus        : installazione dell'ide lazarus

In aggiunta:
- sul desktop abbiamo un link 'Lazarus_lazfpc01' col quale lanciare il nuovo ambiente
- nella cartella home dell'utente abbiamo lo script fpcupdate con il quale ricostruire il tutto con i nuovi sorgenti che verranno scaricati da snv
- nella cartella home dell'utente abbiamo un secondo script per lanciare il nuovo ambiente
- nella cartella home dell'utente abbiamo il log fpcup.log
Consiglio vivamente di spostare i 3 file (fpcupdate.sh, Lazarus_lazfpc01.sh e fpcup.log) nella home dell'utente in "~/dev/lazfpc01/fpcup" poichè se installerete altre combinazioni fpc/lazarus potreste vederli sovrascrivere.

Tra questi, molto importante è lo script fpcupdate .sh. Grazie a questo script potrete infatti aggiornare il vostro ambiente di sviluppo con gli ultimi sorgenti scaricati da svn!

In aggiunta a tutto questo devo dire che fpcup è un tool in costante sviluppo e possono capitare dei piccoli malfunzionamenti. E' anche vero che ad oggi di bug seri non ne ho notati (anche perchè non uso proprio tutti i parametri) e comunque sia gli autori sono sempre pronti a sistemare eventuali bug.

Buon divertimento.

SMF 2.0.8 | SMF © 2011, Simple Machines
Privacy Policy
SMFAds for Free Forums
TinyPortal © 2005-2012

Go back to article