Recompiler avec ServBay
ServBay offre aux utilisateurs macOS un environnement de développement Web local puissant et complet, enrichi en paquets et outils divers. Au-delà des versions de paquets préinstallées par ServBay, il peut arriver que les développeurs aient besoin de procéder à une recompilation personnalisée pour des besoins spécifiques, tels que :
- Activer certaines options de compilation pour un paquet donné.
- Ajouter des modules ou extensions non inclus par défaut par ServBay (ex : une nouvelle extension PHP ou un module PostgreSQL).
- Compiler avec une bibliothèque spécifique différente de la version par défaut de ServBay.
- Modifier et personnaliser les paquets fournis par ServBay.
ServBay met à disposition l'environnement et la chaîne d’outils nécessaires pour permettre facilement de telles recompilations.
Pour aborder sereinement ce processus, il est recommandé d’avoir des notions de base sur la compilation de logiciels sous environnements Unix/Linux (par exemple avec configure
, make
, make install
).
Prérequis
Avant de commencer la recompilation, assurez-vous de remplir les conditions suivantes :
Installer la ServBay Development Library : Il s’agit de la dépendance clé pour la recompilation. Ce paquet fournit toutes les bibliothèques (
.so
,.a
), fichiers d’en-tête (.h
) et autres ressources de développement requises dans l’environnement ServBay. Vous pouvez l’installer via le panneau Paquets de l’interface de l’application ServBay.Installer les Outils en ligne de commande de Xcode : Il s'agit de la boîte à outils de base de macOS pour le développement, incluant le compilateur (Clang), l’éditeur de liens, etc. Pour l’installer, ouvrez le terminal et lancez :
bashxcode-select --install
1Si déjà installé, un message d’information s'affichera.
Installer des outils de compilation supplémentaires : Pour gérer la majorité des logiciels open source, vous aurez également besoin de
autoconf
,automake
,libtool
et d’autres outils. Utilisez Homebrew pour une installation aisée :bashbrew install autoconf automake libtool cmake
1Si Homebrew n’est pas encore installé, suivez les instructions officielles sur le site de Homebrew.
Configuration de l’environnement de compilation
Après avoir installé la ServBay Development Library et les outils requis, il faut initialiser l’environnement de compilation dans votre terminal. Cette étape consiste à définir plusieurs variables d’environnement (PATH
, CFLAGS
, LDFLAGS
, CPPFLAGS
, etc.) afin d’indiquer aux outils de compilation et de construction où trouver les bibliothèques, fichiers d’en-tête et exécutables de ServBay, pour résoudre et lier correctement les dépendances.
L’environnement d’exécution de ServBay dépend de l’architecture CPU de votre Mac : puce Intel (x86_64) ou Apple Silicon (Arm64). Choisissez la commande d’initialisation adéquate en fonction de l’architecture du Runtime actuel de ServBay.
Vérifier l’architecture CPU du Runtime ServBay
Pour déterminer l’architecture, vérifiez n’importe quel fichier exécutable dans le répertoire bin
de ServBay. Par exemple, avec bison
:
bash
# Exécutez la commande suivante dans le terminal pour vérifier
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable arm64
1
2
3
2
3
bash
# Exécutez la commande suivante dans le terminal pour vérifier
$ file /Applications/ServBay/bin/bison
/Applications/ServBay/bin/bison: Mach-O 64-bit executable x86_64
1
2
3
2
3
Après avoir identifié l’architecture, exécutez le script d’initialisation correspondant.
Initialiser les variables d’environnement de compilation
Ouvrez une nouvelle fenêtre de terminal et collez le script adapté à votre architecture CPU. Ces scripts configurent tous les chemins et options nécessaires pour l’environnement de compilation ServBay.
bash
# Définir le nombre de cœurs CPU pour la compilation en parallèle
CPU_NUMBER=$(sysctl -n hw.ncpu)
# Chemin d’installation de base de ServBay
SERVBAY_BASE_FULL_PATH="/Applications/ServBay"
# Nom du dossier des paquets
SERVBAY_PACKAGE_DIR_NAME="package"
# Chemin complet du dossier des paquets
SERVBAY_PACKAGE_FULL_PATH="${SERVBAY_BASE_FULL_PATH}/${SERVBAY_PACKAGE_DIR_NAME}"
# Chemins des binaires ServBay
SERVBAY_BIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/bin"
SERVBAY_SBIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/sbin"
# Chemin des fichiers de configuration
SERVBAY_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
# Chemin des données variables
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# Chemin d’installation de la ServBay Development Library
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
# Chemin des en-têtes de la Dev Library
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
# Chemin des bibliothèques de la Dev 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"
# Répertoire de compilation courant
SERVBAY_BUILD_DIR=$(pwd)
SERVBAY_BUILD_SRC_DIR=${SERVBAY_BUILD_DIR}/src
# Informations OpenSSL
OPENSSL_SELECTED_VERSION="3.2"
OPENSSL_VERSION="3.2.1"
# Version minimale de macOS visée
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey ou plus récent
# Indicateur d’architecture CPU pour la construction
BUILD_CPU_ARCH="-arch arm64"
BUILD_CPU_ARCH_CMAKE="arm64"
BUILD_MACOS_TARGET="" # Arm64 n’a généralement pas besoin du flag -target
# Définir les options du compilateur C : niveau d'optimisation, version minimale de macOS, architecture
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Définir les flags de l’éditeur de liens : rpath, chemins des libs, version macOS, arch
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}"
# Définir les options du préprocesseur et du compilateur : chemins d'inclusion
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
# Définir les options du compilateur C++ (identiques à CFLAGS)
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Prioriser les binaires/sbinaires ServBay dans le PATH
export PATH="${SERVBAY_BIN_PATH}:${SERVBAY_SBIN_PATH}:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
# Chemin de recherche pkg-config
export PKG_CONFIG_PATH="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# Emplacement de l’outil pkg-config
export PKG_CONFIG="${SERVBAY_BIN_PATH}/pkg-config"
# Spécifier le répertoire des libs pkg-config
export PKG_CONFIG_LIBDIR="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# Ajouter les chemins bin/sbin système et Homebrew en seconde intention
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # Chemin Homebrew par défaut
# Ajouter les chemins libs/en-têtes d’OpenSSL
export LDFLAGS="-L${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib ${LDFLAGS}"
export CPPFLAGS="-I${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/include ${CPPFLAGS}"
# Ajouter le chemin pkgconfig d’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"
# Une fois l’environnement configuré, vous pouvez compiler dans ce terminal
echo "Environnement de compilation ServBay Arm64 configuré."
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
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
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
bash
# Définir le nombre de cœurs CPU pour la compilation en parallèle
CPU_NUMBER=$(sysctl -n hw.ncpu)
# Chemin d’installation de base de ServBay
SERVBAY_BASE_FULL_PATH="/Applications/ServBay"
# Nom du dossier des paquets
SERVBAY_PACKAGE_DIR_NAME="package"
# Chemin complet du dossier des paquets
SERVBAY_PACKAGE_FULL_PATH="${SERVBAY_BASE_FULL_PATH}/${SERVBAY_PACKAGE_DIR_NAME}"
# Chemins des binaires ServBay
SERVBAY_BIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/bin"
SERVBAY_SBIN_PATH="${SERVBAY_PACKAGE_FULL_PATH}/sbin"
# Chemin des fichiers de configuration
SERVBAY_ETC_PATH="${SERVBAY_PACKAGE_FULL_PATH}/etc"
# Chemin des données variables
SERVBAY_VAR_PATH="${SERVBAY_PACKAGE_FULL_PATH}/var"
# Chemin d’installation de la ServBay Development Library
SERVBAY_COMMON_PATH="${SERVBAY_PACKAGE_FULL_PATH}/common"
# Chemin des en-têtes de la Dev Library
SERVBAY_COMMON_INCLUDE_PATH="${SERVBAY_COMMON_PATH}/include"
# Chemin des bibliothèques de la Dev 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"
# Répertoire de compilation courant
SERVBAY_BUILD_DIR=$(pwd)
SERVBAY_BUILD_SRC_DIR=${SERVBAY_BUILD_DIR}/src
# Informations OpenSSL
OPENSSL_SELECTED_VERSION="1.1.1u"
OPENSSL_VERSION="1.1.1u"
# Version minimale de macOS visée
BUILD_OS_MIN_VERSION="12.00" # macOS Monterey ou plus récent
# Indicateur d’architecture CPU pour la construction
BUILD_CPU_ARCH="-arch x86_64"
BUILD_CPU_ARCH_CMAKE="x86_64"
# Flag cible plateforme (nécessaire sur Intel)
BUILD_MACOS_TARGET="-target x86_64-apple-macos${BUILD_OS_MIN_VERSION}"
# Définir les options du compilateur C : niveau d'optimisation, version minimale de macOS, architecture, cible
export CFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Définir les flags de l’éditeur de liens : rpath, chemins des libs, version macOS, arch, cible
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}"
# Définir les options du préprocesseur et du compilateur : chemins d'inclusion
export CPPFLAGS="-I${SERVBAY_COMMON_INCLUDE_PATH}"
# Définir les options du compilateur C++ (identiques à CFLAGS)
export CXXFLAGS="-Qunused-arguments -O3 -mmacosx-version-min=${BUILD_OS_MIN_VERSION} ${BUILD_CPU_ARCH} ${BUILD_MACOS_TARGET}"
# Prioriser les binaires/sbinaires ServBay dans le PATH
export PATH="${SERVBAY_BIN_PATH}:${SERVBAY_SBIN_PATH}:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin"
# Chemin de recherche pkg-config
export PKG_CONFIG_PATH="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# Emplacement de l’outil pkg-config
export PKG_CONFIG="${SERVBAY_BIN_PATH}/pkg-config"
# Spécifier le répertoire des libs pkg-config
export PKG_CONFIG_LIBDIR="${SERVBAY_COMMON_LIB_PATH}/pkgconfig"
# Ajouter les chemins bin/sbin système et Homebrew en seconde intention
export PATH=$PATH:"/usr/local/bin:/usr/local/sbin"
export PATH=$PATH:"/opt/homebrew/bin/" # Chemin Homebrew par défaut
# Ajouter les chemins libs/en-têtes d’OpenSSL
export LDFLAGS="-L${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/lib ${LDFLAGS}"
export CPPFLAGS="-I${SERVBAY_COMMON_PATH}/openssl/${OPENSSL_SELECTED_VERSION}/include ${CPPFLAGS}"
# Ajouter le chemin pkgconfig d’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"
# Une fois l’environnement configuré, vous pouvez compiler dans ce terminal
echo "Environnement de compilation ServBay x86_64 configuré."
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
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
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
Remarque importante : Ces variables d'environnement ne s'appliquent qu'à la session de terminal en cours. Si vous fermez le terminal ou ouvrez une nouvelle fenêtre, vous devrez de nouveau exécuter le script pour réinitialiser l’environnement de compilation.
Exemples de compilation
Une fois l’environnement configuré, vous pouvez télécharger les sources et compiler ce que vous souhaitez. Voici quelques exemples courants.
Compiler ImageMagick
ImageMagick est une bibliothèque puissante pour le traitement d’images, utilisée notamment comme dépendance de l’extension PHP imagick
. ServBay inclut ImageMagick dans son installation par défaut, il n'est donc en principe pas nécessaire de la compiler vous-même. Cet exemple illustre seulement l’utilisation typique de l'environnement ServBay pour un projet Autotools (configure/make).
Télécharger puis extraire les sources d’ImageMagick :
bash# Remplacez par la version désirée si besoin 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
4Lancer le script
./configure
: À l’aide des variables d’environnement précédemment définies, lancez le script. Les options--prefix
,--libdir
,--includedir
, etc., spécifient les chemins d’installation dans les sous-dossiers appropriés de la ServBay Development Library (${SERVBAY_COMMON_PATH}
), ce qui permet à l’environnement ServBay et à ses modules complémentaires (ex : extension PHPimagick
) de retrouver ces ressources. Adaptez les autres options à la configuration requise d’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
30Exécuter
make
puismake install
: La commandemake
compile les exécutables et bibliothèques selon la configuration spécifiée ;-j ${CPU_NUMBER}
tire parti du multicœur de votre CPU pour aller plus vite. La commandemake install
place les fichiers générés dans le dossier défini par--prefix
(soit la ServBay Development Library).bashmake -j ${CPU_NUMBER} make install
1
2
Compiler un paquet avec cmake
Pour les paquets utilisant cmake
, le processus diffère légèrement. On prend ici l’exemple de protobuf
(Protocol Buffers).
Téléchargez les sources de protobuf et rendez-vous dans le dossier correspondant.
Configurez le projet avec
cmake
:-S .
indique le dossier courant comme source,-B builddir
stipule où générer les fichiers de build. L’option-DCMAKE_INSTALL_PREFIX
(et les autres ressemblant aux options d’Autotools) désigne l’emplacement destiné à recevoir l'installation dans la ServBay Development Library. Les autres-D
correspondent aux préférences spécifiques àprotobuf
. Les options-DCMAKE_MACOSX_RPATH=1
et-DCMAKE_INSTALL_RPATH
garantissent que les bibliothèques dynamiques lient correctement les dépendances dans ServBay.bash# Supposons que vous êtes déjà dans le dossier source de 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
21Exécutez
cmake --build
puiscmake --install
: La commandecmake --build builddir
compile dans le dossierbuilddir
, puiscmake --install builddir
installe les fichiers générés dans le dossier désigné par-DCMAKE_INSTALL_PREFIX
.bashcmake --build builddir -j ${CPU_NUMBER} cmake --install builddir
1
2
Compiler un module PHP
Si vous souhaitez compiler une extension supplémentaire pour une version PHP spécifique de ServBay (ex : swoole
, redis
, mongodb
, etc.), veuillez consulter la documentation dédiée :
Comment compiler un module PHP
Compiler un module PostgreSQL
Pour compiler un module supplémentaire pour une version PostgreSQL de ServBay, référez-vous à la documentation suivante :
Comment compiler un module PostgreSQL
Conclusion
Grâce à la ServBay Development Library et à une configuration rigoureuse des variables d’environnement, les développeurs peuvent aisément procéder à la recompilation et à la personnalisation de paquets sous macOS. Cela vous donne une grande flexibilité pour répondre à vos besoins projets ou pour exploiter les dernières versions de bibliothèques. Veillez toujours à consulter la documentation officielle de chaque paquet à compiler, et ajustez la configuration et les étapes selon leurs recommandations.