diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/installer.sh | 79 | ||||
-rw-r--r-- | src/local.mk | 1 |
2 files changed, 80 insertions, 0 deletions
diff --git a/src/installer.sh b/src/installer.sh new file mode 100644 index 0000000..76c1c42 --- /dev/null +++ b/src/installer.sh @@ -0,0 +1,79 @@ +# Installer-related functions +# +# Copyright (C) 2015, 2021 Patrick McDermott +# +# This file is part of the ProteanOS Development Kit. +# +# The ProteanOS Development Kit 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. +# +# The ProteanOS Development Kit 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 the ProteanOS Development Kit. If not, see +# <http://www.gnu.org/licenses/>. + +_installers=' ' + +register_installer() +{ + local installer="${1}" + shift 1 + + _installers="${_installers}${installer} " + return 0 +} + +is_installer() +{ + local inst="${1}" + shift 1 + + case "${_installers}" in *" ${inst} "*) return 0;; *) return 1;; esac +} + +run_installer() +{ + local mirror="${1}" + local suite="${2}" + local arch="${3}" + local plat="${4}" + local root="${5}" + local foreign="${6}" + shift 6 + local inst= + + if [ x"${arch}" = x'' ]; then + arch="$(profile_detect_arch)" + fi + if [ x"${plat}" = x'' ]; then + plat="$(profile_default_plat)" + fi + if [ x"${mirror}" = x'' ]; then + mirror="$(profile_select_mirror)" + fi + profile_prepare_install "${mirror}" "${suite}" + + if ! profile_validate_archplat "${arch}" "${plat}"; then + error "$(get_msg 'install_bad_archplat')" "${arch}" "${plat}" + return 1 + fi + + info "$(get_msg 'install_selected_arch')" "${arch}" + info "$(get_msg 'install_selected_plat')" "${plat}" + info "$(get_msg 'install_selected_mirror')" "${mirror}" + + inst="$(profile_installer_type "${arch}" "${plat}")" + if ! is_installer "${inst}"; then + error "$(get_msg 'installer_invalid')" "${inst}" + return 1 + fi + "installer_${inst}_main" "${arch}" "${plat}" "${root}" "${foreign}" || \ + return ${?} + return 0 +} diff --git a/src/local.mk b/src/local.mk index 331f13c..bfd93f8 100644 --- a/src/local.mk +++ b/src/local.mk @@ -19,6 +19,7 @@ prokit_SOURCES += \ src/cmd.sh \ src/profile.sh \ src/package.sh \ + src/installer.sh \ src/install.sh include $(top_srcdir)/src/cmd/local.mk |