Skip to content

Commit 7041e06

Browse files
committed
Add curl
1 parent 103b5b3 commit 7041e06

File tree

3 files changed

+96
-1
lines changed

3 files changed

+96
-1
lines changed

config/pkg/lib/curl.yml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
curl:
2+
type: library
3+
artifact:
4+
source:
5+
type: ghrel
6+
repo: curl/curl
7+
match: 'curl.+\.tar\.xz'
8+
prefer-stable: true
9+
metadata:
10+
license-files: [COPYING]
11+
license: curl
12+
static-libs@unix:
13+
- libcurl.a
14+
headers:
15+
- curl
16+
depends@unix:
17+
- openssl
18+
- zlib
19+
suggests@unix:
20+
- libssh2
21+
- brotli
22+
- nghttp2
23+
- nghttp3
24+
- ngtcp2
25+
- zstd
26+
- libcares
27+
- ldap
28+
- idn2
29+
- krb5
30+
frameworks:
31+
- CoreFoundation
32+
- CoreServices
33+
- SystemConfiguration

src/Package/Library/curl.php

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?php
2+
3+
declare(strict_types=1);
4+
5+
namespace Package\Library;
6+
7+
use StaticPHP\Attribute\Package\BuildFor;
8+
use StaticPHP\Attribute\Package\Library;
9+
use StaticPHP\Attribute\Package\PatchBeforeBuild;
10+
use StaticPHP\Attribute\PatchDescription;
11+
use StaticPHP\Package\LibraryPackage;
12+
use StaticPHP\Runtime\Executor\UnixCMakeExecutor;
13+
use StaticPHP\Runtime\SystemTarget;
14+
use StaticPHP\Util\FileSystem;
15+
16+
#[Library('curl')]
17+
class curl
18+
{
19+
#[PatchBeforeBuild]
20+
#[PatchDescription('Remove CMAKE_C_IMPLICIT_LINK_LIBRARIES and fix macOS framework detection')]
21+
public function patchBeforeBuild(LibraryPackage $lib): bool
22+
{
23+
shell()->cd($lib->getSourceDir())->exec('sed -i.save s@\${CMAKE_C_IMPLICIT_LINK_LIBRARIES}@@ ./CMakeLists.txt');
24+
if (SystemTarget::getTargetOS() === 'Darwin') {
25+
FileSystem::replaceFileRegex("{$lib->getSourceDir()}/curl/CMakeLists.txt", '/NOT COREFOUNDATION_FRAMEWORK/m', 'FALSE');
26+
FileSystem::replaceFileRegex("{$lib->getSourceDir()}/curl/CMakeLists.txt", '/NOT SYSTEMCONFIGURATION_FRAMEWORK/m', 'FALSE');
27+
FileSystem::replaceFileRegex("{$lib->getSourceDir()}/curl/CMakeLists.txt", '/NOT CORESERVICES_FRAMEWORK/m', 'FALSE');
28+
}
29+
return true;
30+
}
31+
32+
#[BuildFor('Linux')]
33+
#[BuildFor('Darwin')]
34+
public function build(LibraryPackage $lib): void
35+
{
36+
UnixCMakeExecutor::create($lib)
37+
->optionalPackage('openssl', '-DCURL_USE_OPENSSL=ON -DCURL_CA_BUNDLE=OFF -DCURL_CA_PATH=OFF -DCURL_CA_FALLBACK=ON', '-DCURL_USE_OPENSSL=OFF -DCURL_ENABLE_SSL=OFF')
38+
->optionalPackage('brotli', ...cmake_boolean_args('CURL_BROTLI'))
39+
->optionalPackage('libssh2', ...cmake_boolean_args('CURL_USE_LIBSSH2'))
40+
->optionalPackage('nghttp2', ...cmake_boolean_args('USE_NGHTTP2'))
41+
->optionalPackage('nghttp3', ...cmake_boolean_args('USE_NGHTTP3'))
42+
->optionalPackage('ngtcp2', ...cmake_boolean_args('USE_NGTCP2'))
43+
->optionalPackage('ldap', ...cmake_boolean_args('CURL_DISABLE_LDAP', true))
44+
->optionalPackage('zstd', ...cmake_boolean_args('CURL_ZSTD'))
45+
->optionalPackage('idn2', ...cmake_boolean_args('USE_LIBIDN2'))
46+
->optionalPackage('psl', ...cmake_boolean_args('CURL_USE_LIBPSL'))
47+
->optionalPackage('krb5', ...cmake_boolean_args('CURL_USE_GSSAPI'))
48+
->optionalPackage('idn2', ...cmake_boolean_args('CURL_USE_IDN2'))
49+
->optionalPackage('libcares', '-DENABLE_ARES=ON')
50+
->addConfigureArgs(
51+
'-DBUILD_CURL_EXE=OFF',
52+
'-DBUILD_LIBCURL_DOCS=OFF',
53+
)
54+
->build();
55+
56+
// patch pkgconf
57+
$lib->patchPkgconfPrefix(['libcurl.pc']);
58+
shell()->cd("{$lib->getLibDir()}/cmake/CURL/")
59+
->exec("sed -ie 's|\"/lib/libcurl.a\"|\"{$lib->getLibDir()}/libcurl.a\"|g' CURLTargets-release.cmake");
60+
}
61+
}

src/StaticPHP/Doctor/Doctor.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,8 @@ private function getValidCheckList(): iterable
146146
foreach (DoctorLoader::getDoctorItems() as [$item, $optional]) {
147147
/* @var CheckItem $item */
148148
// optional check
149-
if ($optional !== null && !call_user_func($optional)) {
149+
/* @phpstan-ignore-next-line */
150+
if (is_callable($optional) && !call_user_func($optional)) {
150151
continue; // skip this when the optional check is false
151152
}
152153
// limit_os check

0 commit comments

Comments
 (0)