build-support/php: refactor build scripts

This commit is contained in:
Pol Dellaiera 2025-03-03 14:35:00 +01:00
parent 1de8208e4a
commit 489ac4817f
5 changed files with 61 additions and 72 deletions

View file

@ -9,15 +9,14 @@ 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,
@ -35,6 +34,7 @@ let
doCheck
doInstallCheck
;
nativeBuildInputs = nativeBuildInputs ++ [
composer
php
@ -81,20 +81,20 @@ 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
;
});

View file

@ -8,14 +8,14 @@ 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,
@ -24,10 +24,9 @@ let
doInstallCheck ? false,
...
}@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}";

View file

@ -1,8 +1,7 @@
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"

View file

@ -1,28 +1,28 @@
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 {} ";"

View file

@ -1,35 +1,24 @@
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