mirror of
https://github.com/fbelavenuto/arpl.git
synced 2026-01-07 18:12:06 +08:00
first commit
This commit is contained in:
186
addons/compile-addons.sh
Executable file
186
addons/compile-addons.sh
Executable file
@@ -0,0 +1,186 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
set -e
|
||||
|
||||
TMP_PATH="/tmp"
|
||||
DEST_PATH="../files/board/arpl/p3/addons"
|
||||
|
||||
###############################################################################
|
||||
function trap_cancel() {
|
||||
echo "Press Control+C once more terminate the process (or wait 2s for it to restart)"
|
||||
sleep 2 || exit 1
|
||||
}
|
||||
trap trap_cancel SIGINT SIGTERM
|
||||
|
||||
###############################################################################
|
||||
function die() {
|
||||
echo -e "\033[1;31m$@\033[0m"
|
||||
exit 1
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
#
|
||||
# 1 - Path of key
|
||||
function hasConfigKey() {
|
||||
[ "`yq eval '.'${1}' | has("'${2}'")' "${3}"`" == "true" ] && return 0 || return 1
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Read key value from yaml config file
|
||||
# 1 - Path of key
|
||||
# 2 - Path of yaml config file
|
||||
# Return Value
|
||||
function readConfigKey() {
|
||||
RESULT=`yq eval '.'${1}' | explode(.)' "${2}"`
|
||||
[ "${RESULT}" == "null" ] && echo "" || echo ${RESULT}
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Read Entries as map(key=value) from yaml config file
|
||||
# 1 - Path of key
|
||||
# 2 - Path of yaml config file
|
||||
# Returns map of values
|
||||
function readConfigMap() {
|
||||
yq eval '.'${1}' | explode(.) | to_entries | map([.key, .value] | join("=")) | .[]' "${2}"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Read an array from yaml config file
|
||||
# 1 - Path of key
|
||||
# 2 - Path of yaml config file
|
||||
# Returns array/map of values
|
||||
function readConfigArray() {
|
||||
yq eval '.'${1} "${2}"
|
||||
}
|
||||
|
||||
###############################################################################
|
||||
# Read Entries as array from yaml config file
|
||||
# 1 - Path of key
|
||||
# 2 - Path of yaml config file
|
||||
# Returns array of values
|
||||
function readConfigEntriesArray() {
|
||||
yq eval '.'${1}' | explode(.) | to_entries | map([.key])[] | .[]' "${2}"
|
||||
}
|
||||
|
||||
|
||||
###############################################################################
|
||||
function compile-addon() {
|
||||
MANIFEST="${1}/manifest.yml"
|
||||
[ ! -f "${MANIFEST}" ] && die "${MANIFEST} not found"
|
||||
echo -e "\033[7mProcessing manifest ${MANIFEST}\033[0m"
|
||||
OUT_PATH="${TMP_PATH}/${1}"
|
||||
rm -rf "${OUT_PATH}"
|
||||
mkdir -p "${OUT_PATH}"
|
||||
VER=`readConfigKey "version" "${MANIFEST}"`
|
||||
[ ${VER} -ne 1 ] && die "Error, version ${VER} of manifest not suported"
|
||||
cp "${MANIFEST}" "${OUT_PATH}"
|
||||
# Check if exist files for all platforms
|
||||
if hasConfigKey "" "all" "${MANIFEST}"; then
|
||||
echo -e "\033[1;32m Processing 'all' section\033[0m"
|
||||
mkdir -p "${OUT_PATH}/all/root"
|
||||
HAS_FILES=0
|
||||
# Get name of script to install, if defined. This script has low priority
|
||||
INSTALL_SCRIPT="`readConfigKey "all.install-script" "${MANIFEST}"`"
|
||||
if [ -n "${INSTALL_SCRIPT}" ]; then
|
||||
if [ -f "${1}/${INSTALL_SCRIPT}" ]; then
|
||||
echo -e "\033[1;35m Copying install script ${INSTALL_SCRIPT}\033[0m"
|
||||
cp "${1}/${INSTALL_SCRIPT}" "${OUT_PATH}/all/install.sh"
|
||||
HAS_FILES=1
|
||||
else
|
||||
echo -e "\033[1;33m WARNING: install script '${INSTALL_SCRIPT}' not found\033[0m"
|
||||
fi
|
||||
fi
|
||||
# Get folder name for copy
|
||||
COPY_PATH="`readConfigKey "all.copy" "${MANIFEST}"`"
|
||||
# If folder exists, copy
|
||||
if [ -n "${COPY_PATH}" ]; then
|
||||
if [ -d "${1}/${COPY_PATH}" ]; then
|
||||
echo -e "\033[1;35m Copying folder '${COPY_PATH}'\033[0m"
|
||||
cp -R "${1}/${COPY_PATH}/"* "${OUT_PATH}/all/root"
|
||||
HAS_FILES=1
|
||||
else
|
||||
echo -e "\033[1;33m WARNING: folder '${COPY_PATH}' not found\033[0m"
|
||||
fi
|
||||
fi
|
||||
if [ ${HAS_FILES} -eq 1 ]; then
|
||||
# Create tar gziped
|
||||
tar caf "${OUT_PATH}/all.tgz" -C "${OUT_PATH}/all" .
|
||||
echo -e "\033[1;36m Created file '${OUT_PATH}/all.tgz' \033[0m"
|
||||
fi
|
||||
# Clean
|
||||
rm -rf "${OUT_PATH}/all"
|
||||
fi
|
||||
unset AVAL_FOR
|
||||
declare -a AVAL_FOR
|
||||
for P in `readConfigEntriesArray "available-for" "${MANIFEST}"`; do
|
||||
AVAL_FOR+=(${P})
|
||||
done
|
||||
[ ${#AVAL_FOR} -eq 0 ] && return
|
||||
|
||||
# Loop in each available platform-kver
|
||||
for P in ${AVAL_FOR[@]}; do
|
||||
echo -e "\033[1;32m Processing '${P}' platform-kver section\033[0m"
|
||||
mkdir -p "${OUT_PATH}/${P}/root"
|
||||
HAS_FILES=0
|
||||
# Get name of script to install, if defined. This script has high priority
|
||||
INSTALL_SCRIPT="`readConfigKey 'available-for."'${P}'".install-script' "${MANIFEST}"`"
|
||||
if [ -n "${INSTALL_SCRIPT}" ]; then
|
||||
if [ -f "${1}/${INSTALL_SCRIPT}" ]; then
|
||||
echo -e "\033[1;35m Copying install script ${INSTALL_SCRIPT}\033[0m"
|
||||
cp "${1}/${INSTALL_SCRIPT}" "${OUT_PATH}/${P}/install.sh"
|
||||
HAS_FILES=1
|
||||
else
|
||||
echo -e "\033[1;33m WARNING: install script '${INSTALL_SCRIPT}' not found\033[0m"
|
||||
fi
|
||||
fi
|
||||
# Get folder name for copy
|
||||
COPY_PATH="`readConfigKey 'available-for."'${P}'".copy' "${MANIFEST}"`"
|
||||
# If folder exists, copy
|
||||
if [ -n "${COPY_PATH}" ]; then
|
||||
if [ -d "${1}/${COPY_PATH}" ]; then
|
||||
echo -e "\033[1;35m Copying folder '${COPY_PATH}'\033[0m"
|
||||
cp -R "${1}/${COPY_PATH}/"* "${OUT_PATH}/${P}/root"
|
||||
HAS_FILES=1
|
||||
else
|
||||
echo -e "\033[1;33m WARNING: folder '${COPY_PATH}' not found\033[0m"
|
||||
fi
|
||||
fi
|
||||
HAS_MODULES="`readConfigKey 'available-for."'${P}'".modules' "${MANIFEST}"`"
|
||||
# Check if has modules for compile
|
||||
if [ "${HAS_MODULES}" = "true" ]; then
|
||||
echo "Compiling modules"
|
||||
PLATFORM="`echo ${P} | cut -d'-' -f1`"
|
||||
KVER="`echo ${P} | cut -d'-' -f2`"
|
||||
# Compile using docker
|
||||
docker run --rm -t --user `id -u` -v "${TMP_PATH}":/output \
|
||||
-v "${PWD}/${1}/src/${KVER}":/input syno-compiler compile-module ${PLATFORM}
|
||||
mkdir -p "${OUT_PATH}/${P}/root/modules"
|
||||
mv "${TMP_PATH}/"*.ko "${OUT_PATH}/${P}/root/modules/"
|
||||
HAS_FILES=1
|
||||
fi
|
||||
if [ ${HAS_FILES} -eq 1 ]; then
|
||||
# Create tar gziped
|
||||
tar caf "${OUT_PATH}/${P}.tgz" -C "${OUT_PATH}/${P}" .
|
||||
echo -e "\033[1;36m Created file '${P}.tgz' \033[0m"
|
||||
fi
|
||||
# Clean
|
||||
rm -rf "${OUT_PATH}/${P}"
|
||||
done
|
||||
# Update files for image
|
||||
rm -rf "${DEST_PATH}/${1}"
|
||||
mkdir -p "${DEST_PATH}/${1}"
|
||||
cp "${OUT_PATH}/"* "${DEST_PATH}/${1}/"
|
||||
}
|
||||
|
||||
# Main
|
||||
if [ $# -ge 1 ]; then
|
||||
for A in $@; do
|
||||
compile-addon ${A}
|
||||
done
|
||||
else
|
||||
while read D; do
|
||||
DRIVER=`basename ${D}`
|
||||
[ "${DRIVER}" = "." ] && continue
|
||||
compile-addon ${DRIVER}
|
||||
done < <(find -maxdepth 1 -type d)
|
||||
fi
|
||||
Reference in New Issue
Block a user