From 0fde7fe3c5f1f4c8732a54eafe6ddfab6e7b54a8 Mon Sep 17 00:00:00 2001 From: Lucas CHOLLET Date: Tue, 6 Dec 2022 18:17:41 +0100 Subject: [PATCH] Meta: Factorize path resolution This patch adds the `find_executable()` function that will hopefully find executables in a distro-agnostic way and that is (hopefully as well) easily upgradable. The function uses some bash functionalities. So, we now require bash for each script that includes `.shell_include.sh`. --- Meta/.shell_include.sh | 31 +++++++++++++++++++++++++++++- Meta/build-image-extlinux.sh | 2 +- Meta/build-image-grub.sh | 2 +- Meta/build-image-limine.sh | 2 +- Meta/build-image-qemu.sh | 35 +--------------------------------- Meta/build-native-partition.sh | 2 +- 6 files changed, 35 insertions(+), 39 deletions(-) diff --git a/Meta/.shell_include.sh b/Meta/.shell_include.sh index 9e82d6557b9..0672595a385 100755 --- a/Meta/.shell_include.sh +++ b/Meta/.shell_include.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash # shellcheck disable=SC2034 # SC2034: "Variable appears unused. Verify it or export it." # Those are intentional here, as the file is meant to be included elsewhere. @@ -16,3 +16,32 @@ die() { echo "die: $*" exit 1 } + +find_executable() { + paths=("/usr/sbin" "/sbin") + + if [ "$(uname -s)" = "Darwin" ]; then + paths+=("/usr/local/opt/e2fsprogs/bin" "/usr/local/opt/e2fsprogs/sbin") + paths+=("/opt/homebrew/opt/e2fsprogs/bin" "/opt/homebrew/opt/e2fsprogs/sbin") + fi + + executable="${1}" + + # Prefer tools from PATH over fallback paths + if command -v "${executable}"; then + return 0 + fi + + for path in "${paths[@]}"; do + if command -v "${path}/${executable}"; then + return 0 + fi + done + + # We return the executable's name back to provide meaningful messages on future failure + echo "${executable}" +} + +FUSE2FS_PATH="$(find_executable fuse2fs)" +RESIZE2FS_PATH="$(find_executable resize2fs)" +E2FSCK="$(find_executable e2fsck)" diff --git a/Meta/build-image-extlinux.sh b/Meta/build-image-extlinux.sh index a7557809503..9b4dcae772e 100755 --- a/Meta/build-image-extlinux.sh +++ b/Meta/build-image-extlinux.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash set -e diff --git a/Meta/build-image-grub.sh b/Meta/build-image-grub.sh index e9092471627..71ef767001a 100755 --- a/Meta/build-image-grub.sh +++ b/Meta/build-image-grub.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash set -e diff --git a/Meta/build-image-limine.sh b/Meta/build-image-limine.sh index f3bd996c86f..06ccd4d8f82 100755 --- a/Meta/build-image-limine.sh +++ b/Meta/build-image-limine.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash set -e diff --git a/Meta/build-image-qemu.sh b/Meta/build-image-qemu.sh index 58f061ccafd..e021ce3f6ac 100755 --- a/Meta/build-image-qemu.sh +++ b/Meta/build-image-qemu.sh @@ -1,17 +1,4 @@ -#!/bin/sh - -# Note: This is done before `set -e` to let `command` fail if needed -FUSE2FS_PATH=$(command -v fuse2fs) -RESIZE2FS_PATH=$(command -v resize2fs) - -if [ -z "$FUSE2FS_PATH" ]; then - FUSE2FS_PATH=/usr/sbin/fuse2fs -fi - -if [ -z "$RESIZE2FS_PATH" ]; then - RESIZE2FS_PATH=/usr/sbin/resize2fs -fi - +#!/usr/bin/env bash set -e SCRIPT_DIR="$(dirname "${0}")" @@ -42,26 +29,6 @@ else : "${SUDO_UID:=0}" "${SUDO_GID:=0}" fi -if [ "$(uname -s)" = "Darwin" ]; then - export PATH="/usr/local/opt/e2fsprogs/bin:$PATH" - export PATH="/usr/local/opt/e2fsprogs/sbin:$PATH" - export PATH="/opt/homebrew/opt/e2fsprogs/bin:$PATH" - export PATH="/opt/homebrew/opt/e2fsprogs/sbin:$PATH" - - E2FSCK="e2fsck" - RESIZE2FS_PATH="resize2fs" -elif [ ! -f "$E2FSCK" ]; then - E2FSCK="$(command -v e2fsck)" - - if [ ! -f "$E2FSCK" ]; then - E2FSCK="/usr/sbin/e2fsck" - if [ ! -f "$E2FSCK" ]; then - E2FSCK="/sbin/e2fsck" - fi - fi -fi - - # Prepend the toolchain qemu directory so we pick up QEMU from there PATH="$SCRIPT_DIR/../Toolchain/Local/qemu/bin:$PATH" diff --git a/Meta/build-native-partition.sh b/Meta/build-native-partition.sh index 2dedb86ddd2..34237f59a34 100755 --- a/Meta/build-native-partition.sh +++ b/Meta/build-native-partition.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash set -e