diff options
Diffstat (limited to 'src/oh-copyconfig.sh')
-rw-r--r-- | src/oh-copyconfig.sh | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/src/oh-copyconfig.sh b/src/oh-copyconfig.sh new file mode 100644 index 0000000..4bd3871 --- /dev/null +++ b/src/oh-copyconfig.sh @@ -0,0 +1,80 @@ +#! /bin/sh +# +# opkhelper +# src/oh-copyconfig +# Copy build-time or run-time platform configuration files. +# +# Copyright (C) 2012 Patrick "P. J." McDermott +# +# 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/>. + +print_usage() +{ + printf 'Usage: %s\n' "$1" +} + +error() +{ + printf 'oh-copyconfig: Error: %s\n' "${1}" >&2 + exit 1 +} + +if [ ! -f ../config ]; then + printf 'oh-copyconfig: No config files to copy.\n' + exit 0 +fi + +if [ -z "${OH_PLATFORM}" ]; then + error 'No target platform defined' +fi + +if [ ${#} -ne 0 ]; then + print_usage ${0} >&2 + exit 1 +fi + +while read -r type src dest; do + if [ -z "${type}" -o -z "${src}" -o -z "${dest}" ]; then + error 'Invalid syntax in config list' + fi + case "${type}" in + runtime) + # The destiest dest that ever dest. + full_dest="dest${dest}" + ;; + buildtime) + # A less desty dest. + full_dest="${dest}" + ;; + *) + error "Invalid config type \"${type}\"" + ;; + esac + # Make sure the destination directory exists. + mkdir -p "$(dirname "${full_dest}")" + # Find the config package files. + if [ -d "/usr/share/config/${OH_PLATFORM}/${OH_SRCPKG}-${OH_PKGVER}" ]; then + full_src="/usr/share/config/${OH_PLATFORM}/${OH_SRCPKG}-${OH_PKGVER}/${src}" + elif [ -d "/usr/share/config/${OH_PLATFORM}/${OH_SRCPKG}" ]; then + full_src="/usr/share/config/${OH_PLATFORM}/${OH_SRCPKG}/${src}" + else + # This shouldn't happen unless the package maintainer neglected to add + # the config package to the package's Build-Depends field. + error 'No platform config directory found' + fi + # Copy the config file(s). + printf 'oh-copyconfig: Copying "%s" to "%s"...\n' "${src}" "${dest}" + mkdir -p "$(dirname "${full_dest}")" + cp -p "${full_src}" "${full_dest}" || error "Cannot copy \"${src}\"" +done < ../config |