mirror of
https://github.com/armbian/build.git
synced 2025-08-11 21:56:58 +02:00
161 lines
5.4 KiB
Bash
161 lines
5.4 KiB
Bash
desktop_element_available_for_arch() {
|
|
local desktop_element_path="${1}"
|
|
local targeted_arch="${2}"
|
|
|
|
local arch_limitation_file="${1}/only_for"
|
|
|
|
echo "Checking if ${desktop_element_path} is available for ${targeted_arch} in ${arch_limitation_file}" >> "${DEST}"/${LOG_SUBPATH}/output.log
|
|
if [[ -f "${arch_limitation_file}" ]]; then
|
|
grep -- "${targeted_arch}" "${arch_limitation_file}"
|
|
return $?
|
|
else
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
desktop_element_supported() {
|
|
|
|
local desktop_element_path="${1}"
|
|
|
|
local support_level_filepath="${desktop_element_path}/support"
|
|
if [[ -f "${support_level_filepath}" ]]; then
|
|
local support_level="$(cat "${support_level_filepath}")"
|
|
if [[ "${support_level}" != "supported" && "${EXPERT}" != "yes" ]]; then
|
|
return 65
|
|
fi
|
|
|
|
desktop_element_available_for_arch "${desktop_element_path}" "${ARCH}"
|
|
if [[ $? -ne 0 ]]; then
|
|
return 66
|
|
fi
|
|
else
|
|
return 64
|
|
fi
|
|
|
|
return 0
|
|
|
|
}
|
|
|
|
desktop_environments_prepare_menu() {
|
|
for desktop_env_dir in "${DESKTOP_CONFIGS_DIR}/"*; do
|
|
local desktop_env_name=$(basename ${desktop_env_dir})
|
|
local expert_infos=""
|
|
[[ "${EXPERT}" == "yes" ]] && expert_infos="[$(cat "${desktop_env_dir}/support" 2> /dev/null)]"
|
|
desktop_element_supported "${desktop_env_dir}" "${ARCH}" && options+=("${desktop_env_name}" "${desktop_env_name^} desktop environment ${expert_infos}")
|
|
done
|
|
}
|
|
|
|
desktop_environment_check_if_valid() {
|
|
|
|
local error_msg=""
|
|
desktop_element_supported "${DESKTOP_ENVIRONMENT_DIRPATH}" "${ARCH}"
|
|
local retval=$?
|
|
|
|
if [[ ${retval} == 0 ]]; then
|
|
return
|
|
elif [[ ${retval} == 64 ]]; then
|
|
error_msg+="Either the desktop environment ${DESKTOP_ENVIRONMENT} does not exist "
|
|
error_msg+="or the file ${DESKTOP_ENVIRONMENT_DIRPATH}/support is missing"
|
|
elif [[ ${retval} == 65 ]]; then
|
|
error_msg+="Only experts can build an image with the desktop environment \"${DESKTOP_ENVIRONMENT}\", since the Armbian team won't offer any support for it (EXPERT=${EXPERT})"
|
|
elif [[ ${retval} == 66 ]]; then
|
|
error_msg+="The desktop environment \"${DESKTOP_ENVIRONMENT}\" has no packages for your targeted board architecture (BOARD=${BOARD} ARCH=${ARCH}). "
|
|
error_msg+="The supported boards architectures are : "
|
|
error_msg+="$(cat "${DESKTOP_ENVIRONMENT_DIRPATH}/only_for")"
|
|
fi
|
|
|
|
# supress error when cache is rebuilding
|
|
[[ -n "$ROOT_FS_CREATE_ONLY" ]] && exit 0
|
|
|
|
exit_with_error "${error_msg}"
|
|
}
|
|
|
|
function interactive_desktop_main_configuration() {
|
|
|
|
# Myy : Once we got a list of selected groups, parse the PACKAGE_LIST inside configuration.sh
|
|
DESKTOP_ELEMENTS_DIR="${SRC}/config/desktop/${RELEASE}"
|
|
DESKTOP_CONFIGS_DIR="${DESKTOP_ELEMENTS_DIR}/environments"
|
|
DESKTOP_CONFIG_PREFIX="config_"
|
|
DESKTOP_APPGROUPS_DIR="${DESKTOP_ELEMENTS_DIR}/appgroups"
|
|
|
|
if [[ $BUILD_DESKTOP == "yes" && -z $DESKTOP_ENVIRONMENT ]]; then
|
|
|
|
options=()
|
|
desktop_environments_prepare_menu
|
|
|
|
if [[ "${options[0]}" == "" ]]; then
|
|
exit_with_error "No desktop environment seems to be available for your board ${BOARD} (ARCH : ${ARCH} - EXPERT : ${EXPERT})"
|
|
fi
|
|
|
|
DESKTOP_ENVIRONMENT=$(show_menu "Choose a desktop environment" "$backtitle" "Select the default desktop environment to bundle with this image" "${options[@]}")
|
|
|
|
unset options
|
|
|
|
if [[ -z "${DESKTOP_ENVIRONMENT}" ]]; then
|
|
exit_with_error "No desktop environment selected..."
|
|
fi
|
|
|
|
fi
|
|
|
|
if [[ $BUILD_DESKTOP == "yes" ]]; then
|
|
# Expected environment variables :
|
|
# - options
|
|
# - ARCH
|
|
|
|
DESKTOP_ENVIRONMENT_DIRPATH="${DESKTOP_CONFIGS_DIR}/${DESKTOP_ENVIRONMENT}"
|
|
|
|
desktop_environment_check_if_valid
|
|
fi
|
|
|
|
if [[ $BUILD_DESKTOP == "yes" && -z $DESKTOP_ENVIRONMENT_CONFIG_NAME ]]; then
|
|
# FIXME Check for empty folders, just in case the current maintainer
|
|
# messed up
|
|
# Note, we could also ignore it and don't show anything in the previous
|
|
# menu, but that hides information and make debugging harder, which I
|
|
# don't like. Adding desktop environments as a maintainer is not a
|
|
# trivial nor common task.
|
|
|
|
options=()
|
|
for configuration in "${DESKTOP_ENVIRONMENT_DIRPATH}/${DESKTOP_CONFIG_PREFIX}"*; do
|
|
config_filename=$(basename ${configuration})
|
|
config_name=${config_filename#"${DESKTOP_CONFIG_PREFIX}"}
|
|
options+=("${config_filename}" "${config_name} configuration")
|
|
done
|
|
|
|
DESKTOP_ENVIRONMENT_CONFIG_NAME=$(show_menu "Choose the desktop environment config" "$backtitle" "Select the configuration for this environment.\nThese are sourced from ${desktop_environment_config_dir}" "${options[@]}")
|
|
unset options
|
|
|
|
if [[ -z $DESKTOP_ENVIRONMENT_CONFIG_NAME ]]; then
|
|
exit_with_error "No desktop configuration selected... Do you really want a desktop environment ?"
|
|
fi
|
|
fi
|
|
|
|
if [[ $BUILD_DESKTOP == "yes" ]]; then
|
|
DESKTOP_ENVIRONMENT_PACKAGE_LIST_DIRPATH="${DESKTOP_ENVIRONMENT_DIRPATH}/${DESKTOP_ENVIRONMENT_CONFIG_NAME}"
|
|
DESKTOP_ENVIRONMENT_PACKAGE_LIST_FILEPATH="${DESKTOP_ENVIRONMENT_PACKAGE_LIST_DIRPATH}/packages"
|
|
fi
|
|
|
|
# "-z ${VAR+x}" allows to check for unset variable
|
|
# Technically, someone might want to build a desktop with no additional
|
|
# appgroups.
|
|
if [[ $BUILD_DESKTOP == "yes" && -z ${DESKTOP_APPGROUPS_SELECTED+x} ]]; then
|
|
|
|
options=()
|
|
for appgroup_path in "${DESKTOP_APPGROUPS_DIR}/"*; do
|
|
appgroup="$(basename "${appgroup_path}")"
|
|
options+=("${appgroup}" "${appgroup^}" off)
|
|
done
|
|
|
|
DESKTOP_APPGROUPS_SELECTED=$(
|
|
show_select_menu \
|
|
"Choose desktop softwares to add" \
|
|
"$backtitle" \
|
|
"Select which kind of softwares you'd like to add to your build" \
|
|
"${options[@]}"
|
|
)
|
|
|
|
unset options
|
|
fi
|
|
|
|
}
|