mirror of
https://github.com/vincentmli/bpfire.git
synced 2026-04-09 18:45:54 +02:00
No function changes, just performance. Signed-off-by: Michael Tremer <michael.tremer@ipfire.org>
94 lines
2.7 KiB
Bash
Executable File
94 lines
2.7 KiB
Bash
Executable File
#!/bin/bash
|
|
###############################################################################
|
|
# #
|
|
# IPFire.org - A linux based firewall #
|
|
# Copyright (C) 2007-2022 IPFire Team <info@ipfire.org> #
|
|
# #
|
|
# This program is free software: you can redistribute it and/or modify #
|
|
# it under the terms of the GNU General Public License as published by #
|
|
# the Free Software Foundation, either version 3 of the License, or #
|
|
# (at your option) any later version. #
|
|
# #
|
|
# This program is distributed in the hope that it will be useful, #
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of #
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the #
|
|
# GNU General Public License for more details. #
|
|
# #
|
|
# You should have received a copy of the GNU General Public License #
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>. #
|
|
# #
|
|
###############################################################################
|
|
|
|
find_rootfile() {
|
|
local path="${1}"
|
|
local package="${2}"
|
|
|
|
local file
|
|
|
|
for file in "${path}/${arch}/${package}" "${path}/${package}"; do
|
|
if [ -f "${file}" ]; then
|
|
echo "${file}"
|
|
break
|
|
fi
|
|
done
|
|
}
|
|
|
|
descend() {
|
|
local path="${1}"
|
|
shift
|
|
|
|
local packages=( "$@" )
|
|
local package
|
|
local file
|
|
|
|
# Find all packages
|
|
if [ "${#packages[@]}" -eq 0 ]; then
|
|
for file in "${path}/"* "${path}/${arch}"/*; do
|
|
if [ -f "${file}" ]; then
|
|
packages+=( "${file##*/}" )
|
|
fi
|
|
done
|
|
fi
|
|
|
|
# Return the correct rootfile
|
|
for package in ${packages[@]}; do
|
|
find_rootfile "${path}" "${package}"
|
|
done
|
|
}
|
|
|
|
find_rootfiles() {
|
|
local path="${1}"
|
|
shift
|
|
|
|
# Descend into directories
|
|
if [ -d "${path}" ]; then
|
|
descend "${path}" "$@"
|
|
|
|
# Or look straight for a file
|
|
else
|
|
find_rootfile "${path}" "$@"
|
|
fi
|
|
}
|
|
|
|
# This function takes a list of rootfiles from standard input and extracts all files
|
|
read_rootfiles() {
|
|
xargs -n 64 grep --no-filename -v "^#" | sort -u
|
|
}
|
|
|
|
substitute_paths() {
|
|
sed \
|
|
-e "s/BUILDTARGET/${BUILDTARGET}/g" \
|
|
-e "s/KVER/${KVER}/g" \
|
|
-e "s/xxxMACHINExxx/${BUILD_ARCH}/g"
|
|
}
|
|
|
|
main() {
|
|
local arch="${1}"
|
|
shift
|
|
|
|
# Find all rootfiles
|
|
find_rootfiles "$@" | read_rootfiles | substitute_paths
|
|
}
|
|
|
|
main "$@" || exit $?
|