Ricompilazione con ServBay
ServBay offre agli utenti macOS un potente ed esaustivo ambiente di sviluppo Web locale, completo di numerosi pacchetti e strumenti. Oltre alle versioni dei pacchetti preinstallati, può capitare che gli sviluppatori abbiano esigenze particolari che richiedono una ricompilazione, ad esempio:
- Abilitare opzioni di compilazione specifiche per un pacchetto.
- Aggiungere moduli o estensioni non inclusi per impostazione predefinita in ServBay (come nuove estensioni PHP o moduli PostgreSQL).
- Compilare utilizzando librerie di versioni diverse da quelle predefinite di ServBay.
- Modificare e personalizzare i pacchetti forniti da ServBay.
ServBay mette a disposizione l’ambiente di compilazione e la toolchain necessari per gestire facilmente queste attività di ricompilazione.
Per procedere senza intoppi, è consigliabile avere una conoscenza di base dei flussi di compilazione tipici in ambienti Unix/Linux (come configure
, make
, make install
).
Prerequisiti
Prima di ricompilare, assicurati di aver soddisfatto i seguenti requisiti:
Installare la ServBay Development Library: Questo è il requisito essenziale per la ricompilazione. Il pacchetto contiene tutte le librerie (
.so
,.a
), i file header (.h
) e altre risorse necessarie per la compilazione nell’ambiente ServBay. Puoi trovarlo e installarlo tramite il pannello Pacchetti dell’interfaccia ServBay.Installare gli Xcode Command Line Tools: Questo è il set di strumenti di sviluppo di base fornito da macOS, che include compilatori (Clang), linker e altri strumenti essenziali. Apri il terminale ed esegui il seguente comando:
bashxcode-select --install
1Se sono già installati, il sistema lo segnalerà.
Installare strumenti di compilazione aggiuntivi: Per la compilazione della maggior parte dei software open source, occorre anche installare
autoconf
,automake
,libtool
e strumenti simili. In genere è possibile utilizzare Homebrew come gestore dei pacchetti per l’installazione:bashbrew install autoconf automake libtool cmake
1Se non hai ancora installato Homebrew, consulta prima le istruzioni ufficiali sul sito web di Homebrew.
Configurazione dell’ambiente di compilazione
Dopo aver installato la ServBay Development Library e gli strumenti necessari, occorre inizializzare l’ambiente di compilazione del terminale. Questo passaggio consiste principalmente nell’impostare una serie di variabili d’ambiente (come PATH
, CFLAGS
, LDFLAGS
, CPPFLAGS
) per informare il compilatore e il sistema di build su dove trovare librerie, header e file binari di ServBay, assicurando che tutte le dipendenze vengano trovate e collegate correttamente.
L’ambiente runtime di ServBay è differente a seconda dell’architettura CPU del tuo Mac: chip Intel (x86_64) o Apple Silicon (Arm64). Scegli quindi il comando di inizializzazione appropriato in base all’architettura corrente di ServBay Runtime.
Verificare l’architettura CPU di ServBay Runtime
Puoi determinare l’architettura controllando uno qualsiasi degli eseguibili nella cartella bin
di ServBay. Ad esempio, verificando bison
:
# Esegui questo comando nel terminale
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable arm64
2
3
# Esegui questo comando nel terminale
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable x86_64
2
3
Una volta identificata l’architettura, scegli lo script di inizializzazione ambientale corrispondente.
Inizializzare le variabili d’ambiente per la compilazione
Apri una nuova finestra di terminale, copia e incolla lo script corrispondente all’architettura della CPU e fallo partire. Questi script imposteranno appropriati percorsi e flag necessari all’ambiente di compilazione di ServBay.
# Imposta il numero di core CPU per compilazione parallela
CPU_NUMBER=$(sysctl -n hw.ncpu)
# Percorso base dell’installazione di ServBay
SERVBAY_BASE_FULL_PATH="/Applications/ServBay"
# Nome della cartella dei pacchetti
SERVBAY_PACKAGE_DIR_NAME="package"
# Percorso completo della cartella pacchetti
SERVBAY_PACKAGE_FULL_PATH="${SERVBAY_BASE_FULL_PATH}/${SERVBAY_PACKAGE_DIR_NAME}"
# Percorsi binari ServBay
SERVBAY_BIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/bin"
SERVBAY_SBIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/sbin"
# Percorso configurazione ServBay
SERVBAY_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
# Cartella dei dati variabili
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# Percorso di installazione della ServBay Development Library
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
# Percorso header della ServBay Development Library
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
# Percorso libreria della ServBay Development Library
SERVBAY_COMMON_LIB_PATH="${SERVBAY_COMMON_PATH}/lib"
SERVBAY_COMMON_LIBEXEC_PATH="${SERVBAY_COMMON_PATH}/libexec"
SERVBAY_COMMON_SHARE_PATH="${SERVBAY_COMMON_PATH}/share"
SERVBAY_COMMON_MAN_PATH="${SERVBAY_COMMON_PATH}/man"
SERVBAY_COMMON_DOC_PATH="${SERVBAY_COMMON_PATH}/doc"
# Cartella corrente di build
SERVBAY_BUILD_DIR=$(pwd)
SERVBAY_BUILD_SRC_DIR=${SERVBAY_BUILD_DIR}/src
# Informazioni sulla versione di OpenSSL
OPENSSL_SELECTED_VERSION="3.2"
OPENSSL_VERSION="3.2.1"
# Versione minima del sistema operativo di destinazione
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey o superiore
# Flag architettura CPU di build
BUILD_CPU_ARCH="-arch arm64"
BUILD_CPU_ARCH_CMAKE="arm64"
BUILD_MACOS_TARGET="" # Su Arm64 di solito non si usa il flag -target
# Imposta flag compilatore C: livello ottimizzazione, min macOS, architettura
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Imposta flag linker: rpath, percorsi librerie, min macOS, architettura
export LDFLAGS="-Wl,-rpath -Wl,${SERVBAY_COMMON_LIB_PATH} -L${SERVBAY_COMMON_LIB_PATH} -L${SERVBAY_PACKAGE_FULL_PATH} -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Imposta flag pre-processore C e compilatore CXX: percorsi header
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
# Imposta flag compilatore C++: stesso di CFLAGS
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Imposta percorsi ricerca eseguibili: dà priorità a bin/sbin ServBay
export PATH="${SERVBAY_BIN_PATH}:${SERVBAY_SBIN_PATH}:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
# Percorso ricerca pkg-config
export PKG_CONFIG_PATH="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# Imposta percorso strumento pkg-config
export PKG_CONFIG="${SERVBAY_BIN_PATH}/pkg-config"
# Imposta directory delle librerie pkg-config
export PKG_CONFIG_LIBDIR="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# Aggiunge bin/sbin di sistema e Homebrew alla PATH come alternative
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # Percorso predefinito Homebrew
# Aggiungi librerie e header di OpenSSL a LDFLAGS e CPPFLAGS
export LDFLAGS="-L${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib ${LDFLAGS}"
export CPPFLAGS="-I${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/include ${CPPFLAGS}"
# Aggiungi percorso pkgconfig di OpenSSL
export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib/pkgconfig"
export PKG_CONFIG_LIBDIR="${PKG_CONFIG_LIBDIR}:${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib/pkgconfig"
# Ambiente configurato: ora puoi compilare in questa finestra di terminale
echo "Ambiente di compilazione ServBay Arm64 configurato."
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
# Imposta il numero di core CPU per compilazione parallela
CPU_NUMBER=$(sysctl -n hw.ncpu)
# Percorso base dell’installazione di ServBay
SERVBAY_BASE_FULL_PATH="/Applications/ServBay"
# Nome della cartella dei pacchetti
SERVBAY_PACKAGE_DIR_NAME="package"
# Percorso completo della cartella pacchetti
SERVBAY_PACKAGE_FULL_PATH="${SERVBAY_BASE_FULL_PATH}/${SERVBAY_PACKAGE_DIR_NAME}"
# Percorsi binari ServBay
SERVBAY_BIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/bin"
SERVBAY_SBIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/sbin"
# Percorso configurazione ServBay
SERVBAY_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
# Cartella dei dati variabili
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# Percorso di installazione della ServBay Development Library
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
# Percorso header della ServBay Development Library
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
# Percorso libreria della ServBay Development Library
SERVBAY_COMMON_LIB_PATH="${SERVBAY_COMMON_PATH}/lib"
SERVBAY_COMMON_LIBEXEC_PATH="${SERVBAY_COMMON_PATH}/libexec"
SERVBAY_COMMON_SHARE_PATH="${SERVBAY_COMMON_PATH}/share"
SERVBAY_COMMON_MAN_PATH="${SERVBAY_COMMON_PATH}/man"
SERVBAY_COMMON_DOC_PATH="${SERVBAY_COMMON_PATH}/doc"
# Cartella corrente di build
SERVBAY_BUILD_DIR=$(pwd)
SERVBAY_BUILD_SRC_DIR=${SERVBAY_BUILD_DIR}/src
# Informazioni sulla versione di OpenSSL
OPENSSL_SELECTED_VERSION="1.1.1u"
OPENSSL_VERSION="1.1.1u"
# Versione minima del sistema operativo di destinazione
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey o superiore
# Flag architettura CPU di build
BUILD_CPU_ARCH="-arch x86_64"
BUILD_CPU_ARCH_CMAKE="x86_64"
# Flag piattaforma obiettivo (su Intel si usa di solito)
BUILD_MACOS_TARGET="-target x86_64-apple-macos${BUILD_OS_MIN_VERSION}"
# Imposta flag compilatore C: livello ottimizzazione, min macOS, architettura, piattaforma
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Imposta flag linker: rpath, percorsi librerie, min macOS, architettura, piattaforma
export LDFLAGS="-Wl,-rpath -Wl,${SERVBAY_COMMON_LIB_PATH} -L${SERVBAY_COMMON_LIB_PATH} -L${SERVBAY_PACKAGE_FULL_PATH} -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Imposta flag pre-processore C e compilatore CXX: percorsi header
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
# Imposta flag compilatore C++: stesso di CFLAGS
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Imposta percorsi ricerca eseguibili: dà priorità a bin/sbin ServBay
export PATH="${SERVBAY_BIN_PATH}:${SERVBAY_SBIN_PATH}:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
# Percorso ricerca pkg-config
export PKG_CONFIG_PATH="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# Imposta percorso strumento pkg-config
export PKG_CONFIG="${SERVBAY_BIN_PATH}/pkg-config"
# Imposta directory delle librerie pkg-config
export PKG_CONFIG_LIBDIR="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# Aggiunge bin/sbin di sistema e Homebrew alla PATH come alternative
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # Percorso predefinito Homebrew
# Aggiungi librerie e header di OpenSSL a LDFLAGS e CPPFLAGS
export LDFLAGS="-L${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib ${LDFLAGS}"
export CPPFLAGS="-I${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/include ${CPPFLAGS}"
# Aggiungi percorso pkgconfig di OpenSSL
export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}:${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib/pkgconfig"
export PKG_CONFIG_LIBDIR="${PKG_CONFIG_LIBDIR}:${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib/pkgconfig"
# Ambiente configurato: ora puoi compilare in questa finestra di terminale
echo "Ambiente di compilazione ServBay x86_64 configurato."
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Nota importante: Queste variabili d’ambiente sono valide solo per la sessione corrente del terminale. Se chiudi o apri una nuova finestra del terminale, ricorda di rieseguire lo script appropriato per ripristinare l’ambiente di compilazione.
Esempi di compilazione
Nella finestra di terminale in cui hai configurato gli ambienti, puoi ora scaricare il codice sorgente e procedere alla compilazione. Di seguito, alcuni esempi pratici.
Compilazione di ImageMagick
ImageMagick è una potente libreria di elaborazione delle immagini, indispensabile per l’estensione PHP imagick
. ServBay include già ImageMagick di default, quindi non è generalmente necessario compilarlo manualmente. Questo esempio serve solo a mostrare la procedura tipica di compilazione di un progetto Autotools (configure/make) con l’ambiente ServBay.
Scarica ed estrai i sorgenti di ImageMagick:
bash# Sostituisci il numero di versione con quello desiderato wget https://imagemagick.org/archive/releases/ImageMagick-7.1.1-33.tar.gz tar zxvf ImageMagick-7.1.1-33.tar.gz cd ImageMagick-7.1.1-33
1
2
3
4Esegui lo script
./configure
: Utilizza le variabili d’ambiente configurate in precedenza ed esegui lo script di configurazione. Le opzioni--prefix
,--libdir
,--includedir
e simili servono a specificare i percorsi di installazione, che vanno impostati sulle rispettive directory all’interno della ServBay Development Library (${SERVBAY_COMMON_PATH}
e sotto-directory); in questo modo, le librerie e gli header compilati saranno accessibili agli altri software dell’ambiente ServBay, come le estensioni PHPimagick
. Le opzioni aggiuntive sono relative ai requisiti specifici di ImageMagick.bash./configure \ --prefix=${SERVBAY_COMMON_PATH} \ --libdir=${SERVBAY_COMMON_LIB_PATH} \ --includedir=${SERVBAY_COMMON_INCLUDE_PATH} \ --oldincludedir=${SERVBAY_COMMON_INCLUDE_PATH} \ --bindir=${SERVBAY_BIN_PATH} \ --sbindir=${SERVBAY_SBIN_PATH} \ --sysconfdir=${SERVBAY_ETC_PATH} \ --datarootdir=${SERVBAY_COMMON_SHARE_PATH} \ --enable-osx-universal-binary=no \ --disable-silent-rules \ --disable-opencl \ --enable-shared \ --enable-static \ --with-freetype=yes \ --with-gvc=no \ --with-modules \ --with-webp=yes \ --with-heic=no \ --without-gslib \ --with-fpx=no \ --without-openexexr \ --with-raw=yes \ --without-lqr \ --without-djvu \ --without-fftw \ --without-pango \ --without-wmf \ --without-x \ --with-gs-font-dir=${SERVBAY_COMMON_SHARE_PATH}/ghostscript/10.02.1/Resource/Font
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30Esegui
make
emake install
: Il comandomake
compila il sorgente in base alla configurazione. L’opzione-j ${CPU_NUMBER}
abilita la compilazione parallela sfruttando tutti i core del processore, accelerando il processo. Il comandomake install
provvede a installare gli artefatti compilati nelle directory specificate con--prefix
nella Development Library di ServBay.bashmake -j ${CPU_NUMBER} make install
1
2
Compilare pacchetti con cmake
Per i pacchetti che usano il sistema di build cmake
, il flusso di lavoro è leggermente diverso. Si prenda ad esempio protobuf
(Protocol Buffers):
Scarica il sorgente di protobuf ed entra nella cartella.
Configura il progetto con
cmake
:-S .
indica che il sorgente è nella directory attuale,-B builddir
specifica la directory di costruzione. Le opzioni come-DCMAKE_INSTALL_PREFIX
sono equivalenti a--prefix
di Autotools; tutte puntano alle directory della ServBay Development Library. Le altre opzioni-D
sono personalizzate per la compilazione diprotobuf
.-DCMAKE_MACOSX_RPATH=1
e-DCMAKE_INSTALL_RPATH
garantiscono che le librerie possano trovare correttamente le altre librerie di ServBay.bash# Assicurati di essere nella cartella sorgente di protobuf cmake -S . -B builddir \ -DCMAKE_INSTALL_PREFIX=${SERVBAY_COMMON_PATH} \ -DCMAKE_INSTALL_LIBDIR=${SERVBAY_COMMON_LIB_PATH} \ -DCMAKE_INSTALL_INCLUDEDIR=${SERVBAY_COMMON_INCLUDE_PATH} \ -DCMAKE_INSTALL_BINDIR=${SERVBAY_BIN_PATH} \ -DCMAKE_INSTALL_SBINDIR=${SERVBAY_SBIN_PATH} \ -DCMAKE_INSTALL_SYSCONFDIR=${SERVBAY_ETC_PATH} \ -DCMAKE_INSTALL_DATAROOTDIR=${SERVBAY_COMMON_SHARE_PATH} \ -DCMAKE_MACOSX_RPATH=1 \ -DCMAKE_INSTALL_RPATH=${SERVBAY_COMMON_LIB_PATH} \ -DCMAKE_BUILD_WITH_INSTALL_RPATH=TRUE \ -DCMAKE_PREFIX_PATH=${SERVBAY_COMMON_PATH} \ -DBUILD_SHARED_LIBS=ON \ -Dprotobuf_BUILD_LIBPROTOC=ON \ -Dprotobuf_BUILD_SHARED_LIBS=ON \ -Dprotobuf_INSTALL_EXAMPLES=OFF \ -Dprotobuf_BUILD_TESTS=OFF \ -Dprotobuf_ABSL_PROVIDER=package \ -Dprotobuf_JSONCPP_PROVIDER=module \ -DCMAKE_CXX_STANDARD=17
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21Esegui
cmake --build
ecmake --install
:cmake --build builddir
avvia la compilazione all’interno dibuilddir
.cmake --install builddir
provvede a installare i file nelle sottodirectory della ServBay Development Library definite da-DCMAKE_INSTALL_PREFIX
.bashcmake --build builddir -j ${CPU_NUMBER} cmake --install builddir
1
2
Compilare moduli PHP
Se desideri compilare estensioni PHP aggiuntive per una data versione di PHP in ServBay (ad esempio swoole
, redis
, mongodb
ecc.), consulta la documentazione dedicata:
Compilare moduli PostgreSQL
Se hai bisogno di compilare moduli aggiuntivi per una certa versione di PostgreSQL in ServBay, consulta la relativa documentazione:
Come compilare un modulo PostgreSQL
Conclusione
Grazie alla ServBay Development Library e alle precise configurazioni delle variabili d’ambiente, gli sviluppatori possono ricompilare e personalizzare facilmente pacchetti software su macOS. Ciò offre una grande flessibilità per soddisfare i requisiti specifici dei progetti o adottare le ultime versioni delle librerie. Ricordati sempre di leggere attentamente le linee guida di compilazione ufficiali di ogni pacchetto e di modificare la configurazione secondo quanto indicato dai rispettivi autori.