#!@SH@ # # ProteanOS Development Kit # src/prokit.sh # Main program file # # Copyright (C) 2013 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 . set -u # Constant global variables PACKAGE_NAME='@PACKAGE_NAME@' PACKAGE_VERSION='@PACKAGE_VERSION@' PKGDATADIR='@pkgdatadir@' PKGDATACMDDIR='@pkgdatacmddir@' OPTSTRING='hV' # Global variables loading_cmd= # use() must be defined inline so it can be used to load other modules. use() { local module="${1}" local default_dir= local lib_subdir= local dir= if [ "x${module%/*}" = "x${module}" ]; then default_dir="${PKGDATADIR}" lib_subdir='' else case "${module%/*}" in 'cmd') loading_cmd="$(printf '%s' "${module##*/}" | \ tr '[A-Z]' '[a-z]' | \ tr -C '[a-z0-9_]' '_')" default_dir="${PKGDATACMDDIR}" lib_subdir='cmd' ;; esac fi dir="${default_dir}" if [ -f "${dir}/${module##*/}.sm" ]; then . "${dir}/${module##*/}.sm" else printf '%s: Error: Failed to load module "%s": %s\n' \ "${0##*/}" "${module}" 'no such file or directory' >&2 exit 2 fi } use locale use cmd use getopt main() { local cmd= load_locale load_cmds get_options "${@}" shift $(($OPTIND - 1)) if ${opt_h:-false}; then cmd='help' elif ${opt_V:-false}; then cmd='version' elif [ ${#} -lt 1 ]; then cmd_help_main >&2 exit 1 else cmd="${1}" shift fi run_cmd "${cmd}" "${@}" return ${?} } main "${@}"