|
8 | 8 | use StaticPHP\Attribute\Package\Library; |
9 | 9 | use StaticPHP\Package\LibraryPackage; |
10 | 10 | use StaticPHP\Runtime\Executor\UnixCMakeExecutor; |
11 | | -use StaticPHP\Runtime\SystemTarget; |
12 | 11 | use StaticPHP\Util\FileSystem; |
13 | 12 |
|
14 | 13 | #[Library('libxml2')] |
15 | 14 | class libxml2 |
16 | 15 | { |
17 | | - #[BuildFor('Darwin')] |
18 | | - public function build(LibraryPackage $package): void |
| 16 | + #[BuildFor('Linux')] |
| 17 | + public function buildForLinux(LibraryPackage $lib): void |
19 | 18 | { |
20 | | - $cmake = UnixCMakeExecutor::create($package) |
| 19 | + UnixCMakeExecutor::create($lib) |
21 | 20 | ->optionalPackage( |
22 | 21 | 'zlib', |
23 | 22 | '-DLIBXML2_WITH_ZLIB=ON ' . |
24 | | - "-DZLIB_LIBRARY={$package->getLibDir()}/libz.a " . |
25 | | - "-DZLIB_INCLUDE_DIR={$package->getIncludeDir()}", |
| 23 | + "-DZLIB_LIBRARY={$lib->getLibDir()}/libz.a " . |
| 24 | + "-DZLIB_INCLUDE_DIR={$lib->getIncludeDir()}", |
26 | 25 | '-DLIBXML2_WITH_ZLIB=OFF', |
27 | 26 | ) |
28 | 27 | ->optionalPackage('xz', ...cmake_boolean_args('LIBXML2_WITH_LZMA')) |
29 | 28 | ->addConfigureArgs( |
30 | 29 | '-DLIBXML2_WITH_ICONV=ON', |
| 30 | + '-DIconv_IS_BUILT_IN=OFF', |
31 | 31 | '-DLIBXML2_WITH_ICU=OFF', // optional, but discouraged: https://gitlab.gnome.org/GNOME/libxml2/-/blob/master/README.md |
32 | 32 | '-DLIBXML2_WITH_PYTHON=OFF', |
33 | 33 | '-DLIBXML2_WITH_PROGRAMS=OFF', |
34 | 34 | '-DLIBXML2_WITH_TESTS=OFF', |
35 | | - ); |
36 | | - |
37 | | - if (SystemTarget::getTargetOS() === 'Linux') { |
38 | | - $cmake->addConfigureArgs('-DIconv_IS_BUILT_IN=OFF'); |
39 | | - } |
40 | | - |
41 | | - $cmake->build(); |
42 | | - |
43 | | - FileSystem::replaceFileStr( |
44 | | - BUILD_LIB_PATH . '/pkgconfig/libxml-2.0.pc', |
45 | | - '-lxml2 -liconv', |
46 | | - '-lxml2' |
47 | | - ); |
48 | | - FileSystem::replaceFileStr( |
49 | | - BUILD_LIB_PATH . '/pkgconfig/libxml-2.0.pc', |
50 | | - '-lxml2', |
51 | | - '-lxml2 -liconv' |
52 | | - ); |
| 35 | + ) |
| 36 | + ->build(); |
| 37 | + |
| 38 | + $this->patchPkgConfig($lib); |
| 39 | + } |
| 40 | + |
| 41 | + #[BuildFor('Darwin')] |
| 42 | + public function buildForDarwin(LibraryPackage $lib): void |
| 43 | + { |
| 44 | + UnixCMakeExecutor::create($lib) |
| 45 | + ->optionalPackage( |
| 46 | + 'zlib', |
| 47 | + '-DLIBXML2_WITH_ZLIB=ON ' . |
| 48 | + "-DZLIB_LIBRARY={$lib->getLibDir()}/libz.a " . |
| 49 | + "-DZLIB_INCLUDE_DIR={$lib->getIncludeDir()}", |
| 50 | + '-DLIBXML2_WITH_ZLIB=OFF', |
| 51 | + ) |
| 52 | + ->optionalPackage('xz', ...cmake_boolean_args('LIBXML2_WITH_LZMA')) |
| 53 | + ->addConfigureArgs( |
| 54 | + '-DLIBXML2_WITH_ICONV=ON', |
| 55 | + '-DLIBXML2_WITH_ICU=OFF', |
| 56 | + '-DLIBXML2_WITH_PYTHON=OFF', |
| 57 | + '-DLIBXML2_WITH_PROGRAMS=OFF', |
| 58 | + '-DLIBXML2_WITH_TESTS=OFF', |
| 59 | + ) |
| 60 | + ->build(); |
| 61 | + |
| 62 | + $this->patchPkgConfig($lib); |
| 63 | + } |
| 64 | + |
| 65 | + private function patchPkgConfig(LibraryPackage $lib): void |
| 66 | + { |
| 67 | + $pcFile = "{$lib->getLibDir()}/pkgconfig/libxml-2.0.pc"; |
| 68 | + |
| 69 | + // Remove -liconv from original |
| 70 | + FileSystem::replaceFileStr($pcFile, '-lxml2 -liconv', '-lxml2'); |
| 71 | + |
| 72 | + // Add -liconv after -lxml2 |
| 73 | + FileSystem::replaceFileStr($pcFile, '-lxml2', '-lxml2 -liconv'); |
53 | 74 | } |
54 | 75 | } |
0 commit comments