diff --git a/bin/spc-alpine-docker b/bin/spc-alpine-docker index 204273e3..df71ae25 100755 --- a/bin/spc-alpine-docker +++ b/bin/spc-alpine-docker @@ -3,7 +3,7 @@ set -e # This file is using docker to run commands -SPC_DOCKER_VERSION=v5 +SPC_DOCKER_VERSION=v6 # Detect docker can run if ! which docker >/dev/null; then @@ -122,6 +122,9 @@ ADD ./src /app/src COPY ./composer.* /app/ ADD ./bin /app/bin RUN composer install --no-dev +ADD ./config /app/config +RUN PKG_ROOT_PATH=/app/pkgroot-private bin/spc doctor --auto-fix +RUN PKG_ROOT_PATH=/app/pkgroot-private bin/spc install-pkg upx EOF fi diff --git a/bin/spc-gnu-docker b/bin/spc-gnu-docker index 0d708492..6b92fe82 100755 --- a/bin/spc-gnu-docker +++ b/bin/spc-gnu-docker @@ -3,7 +3,7 @@ set -e # This file is using docker to run commands -SPC_DOCKER_VERSION=v5 +SPC_DOCKER_VERSION=v6 # Detect docker can run if ! which docker >/dev/null; then @@ -112,7 +112,8 @@ ENV SPC_LIBC=glibc ENV PATH="/app/bin:/cmake/bin:/opt/rh/devtoolset-10/root/usr/bin:\$PATH" ADD ./config /app/config -RUN CC=gcc bin/spc doctor --auto-fix --debug +RUN CC=gcc PKG_ROOT_PATH=/app/pkgroot-private bin/spc doctor --auto-fix --debug +RUN PKG_ROOT_PATH=/app/pkgroot-private bin/spc install-pkg upx RUN if [ -f /app/buildroot/bin/re2c ]; then \ cp /app/buildroot/bin/re2c /usr/local/bin/re2c ;\ fi diff --git a/src/SPC/doctor/item/PkgConfigCheck.php b/src/SPC/doctor/item/PkgConfigCheck.php index 0936a606..1d758b48 100644 --- a/src/SPC/doctor/item/PkgConfigCheck.php +++ b/src/SPC/doctor/item/PkgConfigCheck.php @@ -29,6 +29,18 @@ class PkgConfigCheck return CheckResult::ok($pkgconf); } + #[AsCheckItem('if pkg-config is working', level: 799)] + public function checkPkgConfigFunctional(): CheckResult + { + $pkgconf = PkgConfigUtil::findPkgConfig(); + // check if pkg-config is functional + [$ret, $output] = shell()->execWithResult("{$pkgconf} --version", false); + if ($ret === 0) { + return CheckResult::ok(implode(' ', $output)); + } + return CheckResult::fail('pkg-config is not functional', 'install-pkgconfig'); + } + #[AsFixItem('install-pkgconfig')] public function installPkgConfig(): bool { diff --git a/src/SPC/util/GlobalEnvManager.php b/src/SPC/util/GlobalEnvManager.php index 9f74d2df..073394a7 100644 --- a/src/SPC/util/GlobalEnvManager.php +++ b/src/SPC/util/GlobalEnvManager.php @@ -40,6 +40,10 @@ class GlobalEnvManager if (is_unix()) { self::addPathIfNotExists(BUILD_BIN_PATH); self::addPathIfNotExists(PKG_ROOT_PATH . '/bin'); + // internally use `WORKING_DIR/pkgroot-private` to avoid volume mount issues in Docker + if (is_dir(WORKING_DIR . '/pkgroot-private/bin')) { + self::addPathIfNotExists(WORKING_DIR . '/pkgroot-private/bin'); + } self::putenv('PKG_CONFIG_PATH=' . BUILD_LIB_PATH . '/pkgconfig'); } diff --git a/src/SPC/util/PkgConfigUtil.php b/src/SPC/util/PkgConfigUtil.php index 25e0e1f2..14c2691f 100644 --- a/src/SPC/util/PkgConfigUtil.php +++ b/src/SPC/util/PkgConfigUtil.php @@ -23,6 +23,7 @@ class PkgConfigUtil { // Find pkg-config executable $find_list = [ + WORKING_DIR . '/pkgroot-private/bin/pkg-config', // used in Docker build, which is installed inside the container to avoid volume mounting issues PKG_ROOT_PATH . '/bin/pkg-config', BUILD_BIN_PATH . '/pkg-config', ];