getSourceDir() . '/Makefile', '-DMAC_OSX_KLUDGE=1', ''); FileSystem::replaceFileStr("{$lib->getSourceDir()}/src/osdep/unix/Makefile", 'CC=cc', "CC={$cc}"); /* FileSystem::replaceFileStr($lib->getSourceDir() . '/src/osdep/unix/Makefile', '-lcrypto -lz', '-lcrypto'); FileSystem::replaceFileStr($lib->getSourceDir() . '/src/osdep/unix/Makefile', '-lcrypto', '-lcrypto -lz'); FileSystem::replaceFileStr( $lib->getSourceDir() . '/src/osdep/unix/ssl_unix.c', "#include \n#include ", "#include \n#include " ); // SourcePatcher::patchFile('1006_openssl1.1_autoverify.patch', $lib->getSourceDir()); SourcePatcher::patchFile('2014_openssl1.1.1_sni.patch', $lib->getSourceDir()); */ FileSystem::replaceFileStr("{$lib->getSourceDir()}/Makefile", 'SSLINCLUDE=/usr/include/openssl', "SSLINCLUDE={$lib->getIncludeDir()}"); FileSystem::replaceFileStr("{$lib->getSourceDir()}/Makefile", 'SSLLIB=/usr/lib', "SSLLIB={$lib->getLibDir()}"); } elseif (SystemTarget::getTargetOS() === 'Darwin') { $cc = getenv('CC') ?: 'clang'; SourcePatcher::patchFile('0001_imap_macos.patch', $lib->getSourceDir()); FileSystem::replaceFileStr($lib->getSourceDir() . '/src/osdep/unix/Makefile', 'CC=cc', "CC={$cc}"); FileSystem::replaceFileStr($lib->getSourceDir() . '/Makefile', 'SSLINCLUDE=/usr/include/openssl', 'SSLINCLUDE=' . $lib->getIncludeDir()); FileSystem::replaceFileStr($lib->getSourceDir() . '/Makefile', 'SSLLIB=/usr/lib', 'SSLLIB=' . $lib->getLibDir()); } } #[BuildFor('Linux')] public function buildLinux(LibraryPackage $lib, PackageInstaller $installer): void { if ($installer->isPackageResolved('openssl')) { $ssl_options = "SPECIALAUTHENTICATORS=ssl SSLTYPE=unix.nopwd SSLINCLUDE={$lib->getIncludeDir()} SSLLIB={$lib->getLibDir()}"; } else { $ssl_options = 'SSLTYPE=none'; } $libcVer = SystemTarget::getLibcVersion(); $extraLibs = $libcVer && version_compare($libcVer, '2.17', '<=') ? 'EXTRALDFLAGS="-ldl -lrt -lpthread"' : ''; shell()->cd($lib->getSourceDir()) ->exec('make clean') ->exec('touch ip6') ->exec('chmod +x tools/an') ->exec('chmod +x tools/ua') ->exec('chmod +x src/osdep/unix/drivers') ->exec('chmod +x src/osdep/unix/mkauths') ->exec("yes | make slx {$ssl_options} EXTRACFLAGS='-fPIC -Wno-implicit-function-declaration -Wno-incompatible-function-pointer-types' {$extraLibs}"); try { shell() ->exec("cp -rf {$lib->getSourceDir()}/c-client/c-client.a {$lib->getLibDir()}/libc-client.a") ->exec("cp -rf {$lib->getSourceDir()}/c-client/*.c {$lib->getLibDir()}/") ->exec("cp -rf {$lib->getSourceDir()}/c-client/*.h {$lib->getIncludeDir()}/") ->exec("cp -rf {$lib->getSourceDir()}/src/osdep/unix/*.h {$lib->getIncludeDir()}/"); } catch (\Throwable) { // last command throws an exception, no idea why since it works } } #[BuildFor('Darwin')] public function buildDarwin(LibraryPackage $lib, PackageInstaller $installer): void { if ($installer->isPackageResolved('openssl')) { $ssl_options = "SPECIALAUTHENTICATORS=ssl SSLTYPE=unix.nopwd SSLINCLUDE={$lib->getIncludeDir()} SSLLIB={$lib->getLibDir()}"; } else { $ssl_options = 'SSLTYPE=none'; } $out = shell()->execWithResult('echo "-include $(xcrun --show-sdk-path)/usr/include/poll.h -include $(xcrun --show-sdk-path)/usr/include/time.h -include $(xcrun --show-sdk-path)/usr/include/utime.h"')[1][0]; shell()->cd($lib->getSourceDir()) ->exec('make clean') ->exec('touch ip6') ->exec('chmod +x tools/an') ->exec('chmod +x tools/ua') ->exec('chmod +x src/osdep/unix/drivers') ->exec('chmod +x src/osdep/unix/mkauths') ->exec( "echo y | make osx {$ssl_options} EXTRACFLAGS='-Wno-implicit-function-declaration -Wno-incompatible-function-pointer-types {$out}'" ); try { shell() ->exec("cp -rf {$lib->getSourceDir()}/c-client/c-client.a {$lib->getLibDir()}/libc-client.a") ->exec("cp -rf {$lib->getSourceDir()}/c-client/*.c {$lib->getLibDir()}/") ->exec("cp -rf {$lib->getSourceDir()}/c-client/*.h {$lib->getIncludeDir()}/") ->exec("cp -rf {$lib->getSourceDir()}/src/osdep/unix/*.h {$lib->getIncludeDir()}/"); } catch (\Throwable) { // last command throws an exception, no idea why since it works } } }