Unverified Commit 349333d2 authored by Pol Dellaiera's avatar Pol Dellaiera Committed by GitHub
Browse files

build-support/php: refactor build scripts (#386757)

parents a05a39a2 1afb093e
Loading
Loading
Loading
Loading
+19 −16
Original line number Diff line number Diff line
@@ -9,21 +9,21 @@ let
  buildComposerProjectOverride =
    finalAttrs:
    {
      php ? toplevel.php,
      composer ? toplevel.php.packages.composer,
      composerVendor ? null,
      vendorHash ? null,
      composerLock ? null,
      composerNoDev ? true,
      composerNoPlugins ? true,
      composerNoScripts ? true,
      composerStrictValidation ? true,
      php ? finalAttrs.php or toplevel.php,
      composer ? finalAttrs.php.packages.composer or toplevel.php.packages.composer,
      composerLock ? finalAttrs.composerLock or null,
      vendorHash ? finalAttrs.vendorHash or "",
      composerNoDev ? finalAttrs.composerNoDev or true,
      composerNoPlugins ? finalAttrs.composerNoPlugins or true,
      composerNoScripts ? finalAttrs.composerNoScripts or true,
      composerStrictValidation ? finalAttrs.composerStrictValidation or true,
      buildInputs ? [ ],
      nativeBuildInputs ? [ ],
      strictDeps ? true,
      patches ? [ ],
      doCheck ? true,
      doInstallCheck ? true,
      dontCheckForBrokenSymlinks ? true,
      passthru ? { },
      meta ? { },
      ...
@@ -34,7 +34,9 @@ let
        strictDeps
        doCheck
        doInstallCheck
        dontCheckForBrokenSymlinks
        ;

      nativeBuildInputs = nativeBuildInputs ++ [
        composer
        php
@@ -81,20 +83,21 @@ let

      composerVendor =
        args.composerVendor or (php.mkComposerVendor {
          inherit (finalAttrs)
            pname
            src
            version
            ;
          inherit
            php
            composer
            vendorHash
            composerLock
            composerNoDev
            composerNoPlugins
            composerNoScripts
            composerStrictValidation
            vendorHash
            ;
          inherit (finalAttrs)
            patches
            pname
            src
            version
            dontCheckForBrokenSymlinks
            ;
        });

+16 −12
Original line number Diff line number Diff line
@@ -8,33 +8,37 @@ let
  mkComposerVendorOverride =
    finalAttrs:
    {
      php ? toplevel.php,
      composer ? toplevel.php.packages.composer,
      composerLock,
      vendorHash ? null,
      composerNoDev ? true,
      composerNoPlugins ? true,
      composerNoScripts ? true,
      composerStrictValidation ? true,
      php ? finalAttrs.php or toplevel.php,
      composer ? finalAttrs.php.packages.composer or toplevel.php.packages.composer,
      composerLock ? finalAttrs.composerLock or null,
      vendorHash ? finalAttrs.vendorHash or "",
      composerNoDev ? finalAttrs.composerNoDev or true,
      composerNoPlugins ? finalAttrs.composerNoPlugins or true,
      composerNoScripts ? finalAttrs.composerNoScripts or true,
      composerStrictValidation ? finalAttrs.composerStrictValidation or true,
      buildInputs ? [ ],
      nativeBuildInputs ? [ ],
      dontPatchShebangs ? true,
      strictDeps ? true,
      doCheck ? true,
      doInstallCheck ? false,
      dontCheckForBrokenSymlinks ? true,
      ...
    }@args:
    assert (lib.assertMsg (args ? src) "mkComposerVendor expects src argument.");
    assert (lib.assertMsg (args ? vendorHash) "mkComposerVendor expects vendorHash argument.");
    assert (lib.assertMsg (args ? version) "mkComposerVendor expects version argument.");
    assert (lib.assertMsg (args ? pname) "mkComposerVendor expects pname argument.");
    assert (lib.assertMsg (args ? version) "mkComposerVendor expects version argument.");
    assert (lib.assertMsg (args ? src) "mkComposerVendor expects src argument.");
    {
      name = "${args.pname}-composer-vendor-${args.version}";

      # See https://github.com/NixOS/nix/issues/6660
      inherit dontPatchShebangs;

      inherit buildInputs strictDeps doCheck;
      inherit
        buildInputs
        strictDeps
        doCheck
        ;

      nativeBuildInputs = nativeBuildInputs ++ [
        composer
+9 −9
Original line number Diff line number Diff line
declare composerVendor
declare version
declare composerNoDev
declare composerNoPlugins
declare composerNoScripts
declare -g version
declare -g pname
declare -g composerVendor
declare -g -i composerStrictValidation="${composerStrictValidation:-0}"

preConfigureHooks+=(composerInstallConfigureHook)
preBuildHooks+=(composerInstallBuildHook)
@@ -17,7 +16,7 @@ composerInstallConfigureHook() {
    setComposerRootVersion

    if [[ ! -e "${composerVendor}" ]]; then
        echo "No local composer vendor found."
        echo "No local composer vendor found." >&2
        exit 1
    fi

@@ -60,10 +59,11 @@ composerInstallInstallHook() {
    cp -r . "$out"/share/php/"${pname}"/

    # Create symlinks for the binaries.
    jq -r -c 'try (.bin[] | select(test(".bat$")? | not) )' composer.json | while read -r bin; do
    mapfile -t BINS < <(jq -r -c 'try (.bin[] | select(test(".bat$")? | not) )' composer.json)
    for bin in "${BINS[@]}"; do
        echo -e "\e[32mCreating symlink ${bin}...\e[0m"
        mkdir -p "$out"/bin
        ln -s "$out"/share/php/"${pname}"/"$bin" "$out"/bin/"$(basename "$bin")"
        mkdir -p "$out/bin"
        ln -s "$out/share/php/${pname}/${bin}" "$out/bin/$(basename "$bin")"
    done

    echo "Finished composerInstallInstallHook"
+17 −16
Original line number Diff line number Diff line
declare composerLock
declare version
declare composerNoDev
declare composerNoPlugins
declare composerNoScripts
declare composerStrictValidation
source @phpScriptUtils@

declare -g composerNoDev="${composerNoDev:+--no-dev}"
declare -g composerNoPlugins="${composerNoPlugins:+--no-plugins}"
declare -g composerNoScripts="${composerNoScripts:+--no-scripts}"

preConfigureHooks+=(composerVendorConfigureHook)
preBuildHooks+=(composerVendorBuildHook)
preCheckHooks+=(composerVendorCheckHook)
preInstallHooks+=(composerVendorInstallHook)

source @phpScriptUtils@

composerVendorConfigureHook() {
    echo "Executing composerVendorConfigureHook"

    setComposerRootVersion

    if [[ -f "composer.lock" ]]; then
        echo -e "\e[32mUsing \`composer.lock\` file from the source package\e[0m"
    fi

    if [[ -e "$composerLock" ]]; then
        echo -e "\e[32mUsing user provided \`composer.lock\` file from \`$composerLock\`\e[0m"
        install -Dm644 $composerLock ./composer.lock
    fi


    if [[ ! -f "composer.lock" ]]; then
        composer \
            --no-cache \
@@ -30,9 +30,9 @@ composerVendorConfigureHook() {
            --no-interaction \
            --no-progress \
            --optimize-autoloader \
            ${composerNoDev:+--no-dev} \
            ${composerNoPlugins:+--no-plugins} \
            ${composerNoScripts:+--no-scripts} \
            ${composerNoDev} \
            ${composerNoPlugins} \
            ${composerNoScripts} \
            update

        if [[ -f "composer.lock" ]]; then
@@ -74,9 +74,9 @@ composerVendorBuildHook() {
        --no-interaction \
        --no-progress \
        --optimize-autoloader \
        ${composerNoDev:+--no-dev} \
        ${composerNoPlugins:+--no-plugins} \
        ${composerNoScripts:+--no-scripts} \
        ${composerNoDev} \
        ${composerNoPlugins} \
        ${composerNoScripts} \
        install

    echo "Finished composerVendorBuildHook"
@@ -96,7 +96,7 @@ composerVendorInstallHook() {
    mkdir -p $out

    cp -ar composer.json $(composer config vendor-dir) $out/
    mapfile -t installer_paths < <(jq -r 'try((.extra."installer-paths") | keys[])' composer.json)
    mapfile -t installer_paths < <(jq -r -c 'try((.extra."installer-paths") | keys[])' composer.json)

    for installer_path in "${installer_paths[@]}"; do
        # Remove everything after {$name} placeholder
@@ -105,6 +105,7 @@ composerVendorInstallHook() {
        # Copy the installer path if it exists
        if [[ -d "$installer_path" ]]; then
            mkdir -p $(dirname "$out_installer_path")
            echo -e "\e[32mCopying installer path $installer_path to $out_installer_path\e[0m"
            cp -ar "$installer_path" "$out_installer_path"
            # Strip out the git repositories
            find $out_installer_path -name .git -type d -prune -print -exec rm -rf {} ";"
+9 −20
Original line number Diff line number Diff line
declare version
declare composerStrictValidation
declare composerGlobal
declare -g version
declare -g -i composerStrictValidation="${composerStrictValidation:-0}"

setComposerRootVersion() {
    set +e # Disable exit on error

    if [[ -v version ]]; then
    if [[ -n $version ]]; then
        echo -e "\e[32mSetting COMPOSER_ROOT_VERSION to $version\e[0m"
        export COMPOSER_ROOT_VERSION=$version
        export COMPOSER_ROOT_VERSION="$version"
    fi

    set -e
}

setComposerEnvVariables() {
    echo -e "\e[32mSetting some required environment variables for Composer...\e[0m"
    export COMPOSER_MIRROR_PATH_REPOS=1
    export COMPOSER_CACHE_DIR=/dev/null
    export COMPOSER_HTACCESS_PROTECT=0
    export COMPOSER_FUND=0
}

checkComposerValidate() {
    if [ "1" == "${composerGlobal-}" ]; then
        global="global";
    else
        global="";
    fi

    command="composer ${global} validate --strict --quiet --no-interaction --no-check-all --no-check-lock"
    command="composer validate --strict --quiet --no-interaction --no-check-all --no-check-lock"
    if ! $command; then
        if [ "1" == "${composerStrictValidation-}" ]; then
        if [[ "${composerStrictValidation}" == "1" ]]; then
            echo
            echo -e "\e[31mERROR: composer files validation failed\e[0m"
            echo
@@ -57,9 +46,9 @@ checkComposerValidate() {
        fi
    fi

    command="composer ${global} validate --strict --no-ansi --no-interaction --quiet --no-check-all --check-lock"
    command="composer validate --strict --no-ansi --no-interaction --quiet --no-check-all --check-lock"
    if ! $command; then
        if [ "1" == "${composerStrictValidation-}" ]; then
        if [[ "${composerStrictValidation}" == "1" ]]; then
            echo
            echo -e "\e[31mERROR: composer files validation failed\e[0m"
            echo
Loading