Skip to content

Commit 349333d

Browse files
authored
build-support/php: refactor build scripts (#386757)
2 parents a05a39a + 1afb093 commit 349333d

File tree

20 files changed

+1363
-1219
lines changed

20 files changed

+1363
-1219
lines changed

pkgs/build-support/php/builders/v2/build-composer-project.nix

Lines changed: 19 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -9,21 +9,21 @@ let
99
buildComposerProjectOverride =
1010
finalAttrs:
1111
{
12-
php ? toplevel.php,
13-
composer ? toplevel.php.packages.composer,
14-
composerVendor ? null,
15-
vendorHash ? null,
16-
composerLock ? null,
17-
composerNoDev ? true,
18-
composerNoPlugins ? true,
19-
composerNoScripts ? true,
20-
composerStrictValidation ? true,
12+
php ? finalAttrs.php or toplevel.php,
13+
composer ? finalAttrs.php.packages.composer or toplevel.php.packages.composer,
14+
composerLock ? finalAttrs.composerLock or null,
15+
vendorHash ? finalAttrs.vendorHash or "",
16+
composerNoDev ? finalAttrs.composerNoDev or true,
17+
composerNoPlugins ? finalAttrs.composerNoPlugins or true,
18+
composerNoScripts ? finalAttrs.composerNoScripts or true,
19+
composerStrictValidation ? finalAttrs.composerStrictValidation or true,
2120
buildInputs ? [ ],
2221
nativeBuildInputs ? [ ],
2322
strictDeps ? true,
2423
patches ? [ ],
2524
doCheck ? true,
2625
doInstallCheck ? true,
26+
dontCheckForBrokenSymlinks ? true,
2727
passthru ? { },
2828
meta ? { },
2929
...
@@ -34,7 +34,9 @@ let
3434
strictDeps
3535
doCheck
3636
doInstallCheck
37+
dontCheckForBrokenSymlinks
3738
;
39+
3840
nativeBuildInputs = nativeBuildInputs ++ [
3941
composer
4042
php
@@ -81,20 +83,21 @@ let
8183

8284
composerVendor =
8385
args.composerVendor or (php.mkComposerVendor {
86+
inherit (finalAttrs)
87+
pname
88+
src
89+
version
90+
;
8491
inherit
92+
php
8593
composer
94+
vendorHash
8695
composerLock
8796
composerNoDev
8897
composerNoPlugins
8998
composerNoScripts
9099
composerStrictValidation
91-
vendorHash
92-
;
93-
inherit (finalAttrs)
94-
patches
95-
pname
96-
src
97-
version
100+
dontCheckForBrokenSymlinks
98101
;
99102
});
100103

pkgs/build-support/php/builders/v2/build-composer-vendor.nix

Lines changed: 16 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,33 +8,37 @@ let
88
mkComposerVendorOverride =
99
finalAttrs:
1010
{
11-
php ? toplevel.php,
12-
composer ? toplevel.php.packages.composer,
13-
composerLock,
14-
vendorHash ? null,
15-
composerNoDev ? true,
16-
composerNoPlugins ? true,
17-
composerNoScripts ? true,
18-
composerStrictValidation ? true,
11+
php ? finalAttrs.php or toplevel.php,
12+
composer ? finalAttrs.php.packages.composer or toplevel.php.packages.composer,
13+
composerLock ? finalAttrs.composerLock or null,
14+
vendorHash ? finalAttrs.vendorHash or "",
15+
composerNoDev ? finalAttrs.composerNoDev or true,
16+
composerNoPlugins ? finalAttrs.composerNoPlugins or true,
17+
composerNoScripts ? finalAttrs.composerNoScripts or true,
18+
composerStrictValidation ? finalAttrs.composerStrictValidation or true,
1919
buildInputs ? [ ],
2020
nativeBuildInputs ? [ ],
2121
dontPatchShebangs ? true,
2222
strictDeps ? true,
2323
doCheck ? true,
2424
doInstallCheck ? false,
25+
dontCheckForBrokenSymlinks ? true,
2526
...
2627
}@args:
27-
assert (lib.assertMsg (args ? src) "mkComposerVendor expects src argument.");
28-
assert (lib.assertMsg (args ? vendorHash) "mkComposerVendor expects vendorHash argument.");
29-
assert (lib.assertMsg (args ? version) "mkComposerVendor expects version argument.");
3028
assert (lib.assertMsg (args ? pname) "mkComposerVendor expects pname argument.");
29+
assert (lib.assertMsg (args ? version) "mkComposerVendor expects version argument.");
30+
assert (lib.assertMsg (args ? src) "mkComposerVendor expects src argument.");
3131
{
3232
name = "${args.pname}-composer-vendor-${args.version}";
3333

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

37-
inherit buildInputs strictDeps doCheck;
37+
inherit
38+
buildInputs
39+
strictDeps
40+
doCheck
41+
;
3842

3943
nativeBuildInputs = nativeBuildInputs ++ [
4044
composer

pkgs/build-support/php/builders/v2/hooks/composer-install-hook.sh

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
1-
declare composerVendor
2-
declare version
3-
declare composerNoDev
4-
declare composerNoPlugins
5-
declare composerNoScripts
1+
declare -g version
2+
declare -g pname
3+
declare -g composerVendor
4+
declare -g -i composerStrictValidation="${composerStrictValidation:-0}"
65

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

1918
if [[ ! -e "${composerVendor}" ]]; then
20-
echo "No local composer vendor found."
19+
echo "No local composer vendor found." >&2
2120
exit 1
2221
fi
2322

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

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

6969
echo "Finished composerInstallInstallHook"

pkgs/build-support/php/builders/v2/hooks/composer-vendor-hook.sh

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,38 @@
1-
declare composerLock
2-
declare version
3-
declare composerNoDev
4-
declare composerNoPlugins
5-
declare composerNoScripts
6-
declare composerStrictValidation
1+
source @phpScriptUtils@
2+
3+
declare -g composerNoDev="${composerNoDev:+--no-dev}"
4+
declare -g composerNoPlugins="${composerNoPlugins:+--no-plugins}"
5+
declare -g composerNoScripts="${composerNoScripts:+--no-scripts}"
76

87
preConfigureHooks+=(composerVendorConfigureHook)
98
preBuildHooks+=(composerVendorBuildHook)
109
preCheckHooks+=(composerVendorCheckHook)
1110
preInstallHooks+=(composerVendorInstallHook)
1211

13-
source @phpScriptUtils@
14-
1512
composerVendorConfigureHook() {
1613
echo "Executing composerVendorConfigureHook"
1714

1815
setComposerRootVersion
1916

17+
if [[ -f "composer.lock" ]]; then
18+
echo -e "\e[32mUsing \`composer.lock\` file from the source package\e[0m"
19+
fi
20+
2021
if [[ -e "$composerLock" ]]; then
2122
echo -e "\e[32mUsing user provided \`composer.lock\` file from \`$composerLock\`\e[0m"
2223
install -Dm644 $composerLock ./composer.lock
2324
fi
2425

25-
2626
if [[ ! -f "composer.lock" ]]; then
2727
composer \
2828
--no-cache \
2929
--no-install \
3030
--no-interaction \
3131
--no-progress \
3232
--optimize-autoloader \
33-
${composerNoDev:+--no-dev} \
34-
${composerNoPlugins:+--no-plugins} \
35-
${composerNoScripts:+--no-scripts} \
33+
${composerNoDev} \
34+
${composerNoPlugins} \
35+
${composerNoScripts} \
3636
update
3737

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

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

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

101101
for installer_path in "${installer_paths[@]}"; do
102102
# Remove everything after {$name} placeholder
@@ -105,6 +105,7 @@ composerVendorInstallHook() {
105105
# Copy the installer path if it exists
106106
if [[ -d "$installer_path" ]]; then
107107
mkdir -p $(dirname "$out_installer_path")
108+
echo -e "\e[32mCopying installer path $installer_path to $out_installer_path\e[0m"
108109
cp -ar "$installer_path" "$out_installer_path"
109110
# Strip out the git repositories
110111
find $out_installer_path -name .git -type d -prune -print -exec rm -rf {} ";"

pkgs/build-support/php/builders/v2/hooks/php-script-utils.bash

Lines changed: 9 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,24 @@
1-
declare version
2-
declare composerStrictValidation
3-
declare composerGlobal
1+
declare -g version
2+
declare -g -i composerStrictValidation="${composerStrictValidation:-0}"
43

54
setComposerRootVersion() {
6-
set +e # Disable exit on error
7-
8-
if [[ -v version ]]; then
5+
if [[ -n $version ]]; then
96
echo -e "\e[32mSetting COMPOSER_ROOT_VERSION to $version\e[0m"
10-
export COMPOSER_ROOT_VERSION=$version
7+
export COMPOSER_ROOT_VERSION="$version"
118
fi
12-
13-
set -e
149
}
1510

1611
setComposerEnvVariables() {
1712
echo -e "\e[32mSetting some required environment variables for Composer...\e[0m"
1813
export COMPOSER_MIRROR_PATH_REPOS=1
19-
export COMPOSER_CACHE_DIR=/dev/null
2014
export COMPOSER_HTACCESS_PROTECT=0
15+
export COMPOSER_FUND=0
2116
}
2217

2318
checkComposerValidate() {
24-
if [ "1" == "${composerGlobal-}" ]; then
25-
global="global";
26-
else
27-
global="";
28-
fi
29-
30-
command="composer ${global} validate --strict --quiet --no-interaction --no-check-all --no-check-lock"
19+
command="composer validate --strict --quiet --no-interaction --no-check-all --no-check-lock"
3120
if ! $command; then
32-
if [ "1" == "${composerStrictValidation-}" ]; then
21+
if [[ "${composerStrictValidation}" == "1" ]]; then
3322
echo
3423
echo -e "\e[31mERROR: composer files validation failed\e[0m"
3524
echo
@@ -57,9 +46,9 @@ checkComposerValidate() {
5746
fi
5847
fi
5948

60-
command="composer ${global} validate --strict --no-ansi --no-interaction --quiet --no-check-all --check-lock"
49+
command="composer validate --strict --no-ansi --no-interaction --quiet --no-check-all --check-lock"
6150
if ! $command; then
62-
if [ "1" == "${composerStrictValidation-}" ]; then
51+
if [[ "${composerStrictValidation}" == "1" ]]; then
6352
echo
6453
echo -e "\e[31mERROR: composer files validation failed\e[0m"
6554
echo

pkgs/by-name/la/laravel/package.nix

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,14 +11,14 @@ php.buildComposerProject2 (finalAttrs: {
1111
src = fetchFromGitHub {
1212
owner = "laravel";
1313
repo = "installer";
14-
rev = "v${finalAttrs.version}";
14+
tag = "v${finalAttrs.version}";
1515
hash = "sha256-XE1KYOlWehj1peSNj3sKNr6CKchCxRNpIjXHq7slVME=";
1616
};
1717

1818
nativeBuildInputs = [ makeWrapper ];
1919

2020
composerLock = ./composer.lock;
21-
vendorHash = "sha256-jUg0hmkShzK1CAO3+Btqe3/5GFKVxRKDtIxmUuU3EdU=";
21+
vendorHash = "sha256-Kid5Vp42Pme1AO9fI9e/f24Cdzi1uV8qEULFEvQDKnE=";
2222

2323
postInstall = ''
2424
wrapProgram $out/bin/laravel \

0 commit comments

Comments
 (0)