From 059c32e59cd4df60e5c1ae36a35daddfebf8d67b Mon Sep 17 00:00:00 2001 From: DubbleClick Date: Mon, 18 Sep 2023 13:43:58 +0200 Subject: [PATCH] add ext-ldap (openldap) support --- config/ext.json | 8 +++++- config/lib.json | 7 +++++ config/source.json | 10 +++++++ src/SPC/builder/linux/library/ldap.php | 12 +++++++++ src/SPC/builder/macos/library/ldap.php | 12 +++++++++ src/SPC/builder/unix/library/curl.php | 4 +-- src/SPC/builder/unix/library/ldap.php | 29 +++++++++++++++++++++ src/SPC/builder/unix/library/postgresql.php | 3 +-- src/SPC/doctor/item/LinuxMuslCheck.php | 11 ++++++-- src/SPC/doctor/item/LinuxToolCheckList.php | 14 ++++++++-- 10 files changed, 101 insertions(+), 9 deletions(-) create mode 100644 src/SPC/builder/linux/library/ldap.php create mode 100644 src/SPC/builder/macos/library/ldap.php create mode 100644 src/SPC/builder/unix/library/ldap.php diff --git a/config/ext.json b/config/ext.json index d5234e4e..92ad0598 100644 --- a/config/ext.json +++ b/config/ext.json @@ -153,9 +153,15 @@ }, "ldap": { "type": "builtin", - "arg-type": "with", + "arg-type": "with-prefix", "lib-depends": [ "ldap" + ], + "lib-suggests": [ + "openssl" + ], + "ext-suggests": [ + "openssl" ] }, "mbregex": { diff --git a/config/lib.json b/config/lib.json index 606a1be4..bc11d36c 100644 --- a/config/lib.json +++ b/config/lib.json @@ -139,6 +139,13 @@ "libxml2" ] }, + "ldap": { + "source": "ldap", + "static-libs-unix": [ + "liblber.a", + "libldap.a" + ] + }, "libavif": { "source": "libavif", "static-libs-unix": [ diff --git a/config/source.json b/config/source.json index 95bb0a13..498e72a8 100644 --- a/config/source.json +++ b/config/source.json @@ -42,6 +42,16 @@ "path": "COPYING" } }, + "ldap": { + "type": "filelist", + "url": "https://www.openldap.org/software/download/OpenLDAP/openldap-release/", + "regex": "/href=\"(?openldap-(?[^\"]+)\\.tgz)\"/", + "path": "php-src/ext/ldap", + "license": { + "type": "file", + "path": "LICENSE" + } + }, "ext-event": { "type": "url", "url": "https://bitbucket.org/osmanov/pecl-event/get/3.0.8.tar.gz", diff --git a/src/SPC/builder/linux/library/ldap.php b/src/SPC/builder/linux/library/ldap.php new file mode 100644 index 00000000..2d3f591b --- /dev/null +++ b/src/SPC/builder/linux/library/ldap.php @@ -0,0 +1,12 @@ +builder->getLib('ldap') ? '-DCURL_DISABLE_LDAP=OFF ' : '-DCURL_DISABLE_LDAP=ON '; // lib:zstd $extra .= $this->builder->getLib('zstd') ? '-DCURL_ZSTD=ON ' : '-DCURL_ZSTD=OFF '; // lib:idn2 diff --git a/src/SPC/builder/unix/library/ldap.php b/src/SPC/builder/unix/library/ldap.php new file mode 100644 index 00000000..63463432 --- /dev/null +++ b/src/SPC/builder/unix/library/ldap.php @@ -0,0 +1,29 @@ +cd($this->source_dir) + ->exec( + $this->builder->configure_env . ' ' . + 'LDFLAGS="-static"' . + ' ./configure ' . + '--enable-static ' . + '--disable-shared ' . + '--disable-slapd ' . + '--without-systemd ' . + ($this->builder->getLib('openssl') ? '--with-tls=openssl ' : '') . + '--prefix=' + ) + ->exec('make clean') + ->exec('make depend') + ->exec("make -j{$this->builder->concurrency}") + ->exec('make install DESTDIR=' . BUILD_ROOT_PATH); + $this->patchPkgconfPrefix(['ldap.pc', 'lber.pc']); + } +} diff --git a/src/SPC/builder/unix/library/postgresql.php b/src/SPC/builder/unix/library/postgresql.php index b2fa4b27..b02f46a7 100644 --- a/src/SPC/builder/unix/library/postgresql.php +++ b/src/SPC/builder/unix/library/postgresql.php @@ -57,15 +57,14 @@ trait postgresql '--with-ssl=openssl ' . '--with-readline ' . '--with-libxml ' . + ($this->builder->getLib('ldap') ? '--with-ldap ' : '--without-ldap ') . ($this->builder->getLib('icu') ? '--with-icu ' : '--without-icu ') . - '--without-ldap ' . '--without-libxslt ' . '--without-lz4 ' . '--without-zstd ' . '--without-perl ' . '--without-python ' . '--without-pam ' . - '--without-ldap ' . '--without-bonjour ' . '--without-tcl ' ); diff --git a/src/SPC/doctor/item/LinuxMuslCheck.php b/src/SPC/doctor/item/LinuxMuslCheck.php index 860a23be..0fc94a34 100644 --- a/src/SPC/doctor/item/LinuxMuslCheck.php +++ b/src/SPC/doctor/item/LinuxMuslCheck.php @@ -36,11 +36,18 @@ class LinuxMuslCheck #[AsFixItem('fix-musl')] public function fixMusl(array $distro): bool { + $rhel_install = 'dnf install tar wget git zip bison flex bzip2 cmake patch && \ + wget https://musl.libc.org/releases/musl-1.2.4.tar.gz && tar -zxvf musl-1.2.4.tar.gz && \ + rm -f musl-1.2.4.tar.gz && cd musl-1.2.4 && + if [[ ! "$PATH" =~ (^|:)"/usr/local/musl/bin"(:|$) ]]; then export PATH="/usr/local/musl/bin:$PATH" + fi && \ + ./configure --disable-shared --enable-wrapper=gcc && \ + make -j && make install && cd ..'; $install_cmd = match ($distro['dist']) { 'ubuntu', 'debian' => 'apt-get install musl musl-tools -y', 'alpine' => 'apk add musl musl-utils musl-dev', - 'rhel' => 'dnf install tar wget git zip bison flex bzip2 cmake patch && wget https://musl.libc.org/releases/musl-1.2.4.tar.gz && tar -zxvf musl-1.2.4.tar.gz && rm musl-1.2.4.tar.gz && cd musl-1.2.4 && ./configure && make -j && make install && cd ..', - 'almalinux' => 'dnf install bison flex bzip2 cmake patch && wget https://musl.libc.org/releases/musl-1.2.4.tar.gz && tar -zxvf musl-1.2.4.tar.gz && rm musl-1.2.4.tar.gz && cd musl-1.2.4 && ./configure && make -j && make install && export PATH="/usr/local/musl/bin:$PATH" cd ..', + 'rhel' => $rhel_install, + 'almalinux' => $rhel_install, default => throw new RuntimeException('Current linux distro does not have an auto-install script for musl packages yet.'), }; $prefix = ''; diff --git a/src/SPC/doctor/item/LinuxToolCheckList.php b/src/SPC/doctor/item/LinuxToolCheckList.php index e4d6951c..0e483f2d 100644 --- a/src/SPC/doctor/item/LinuxToolCheckList.php +++ b/src/SPC/doctor/item/LinuxToolCheckList.php @@ -16,7 +16,7 @@ class LinuxToolCheckList use UnixSystemUtilTrait; public const TOOLS_ALPINE = [ - 'perl', 'make', 'bison', 'flex', + 'make', 'bison', 'flex', 'git', 'autoconf', 'automake', 'tar', 'unzip', 'gzip', 'bzip2', 'cmake', 'gcc', @@ -24,13 +24,21 @@ class LinuxToolCheckList ]; public const TOOLS_DEBIAN = [ - 'perl', 'make', 'bison', 'flex', + 'make', 'bison', 'flex', 'git', 'autoconf', 'automake', 'tar', 'unzip', 'gzip', 'bzip2', 'cmake', 'patch', 'xz', ]; + public const TOOLS_RHEL = [ + 'perl', 'make', 'bison', 'flex', + 'git', 'autoconf', 'automake', + 'tar', 'unzip', 'gzip', 'gcc', + 'bzip2', 'cmake', 'patch', + 'xz', + ]; + /** @noinspection PhpUnused */ #[AsCheckItem('if necessary tools are installed', limit_os: 'Linux')] public function checkCliTools(): ?CheckResult @@ -39,6 +47,8 @@ class LinuxToolCheckList $required = match ($distro['dist']) { 'alpine' => self::TOOLS_ALPINE, + 'almalinux' => self::TOOLS_RHEL, + 'rhel' => self::TOOLS_RHEL, default => self::TOOLS_DEBIAN, }; $missing = [];