#!/bin/bash -euE #!/bin/bash # Copyright (c) 2012-2013 by Luke Shumaker # # 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 . INCLUDE_CONF_SH=conf.sh LIBREUSER="${SUDO_USER:-$USER}" if [[ $LIBREUSER == $USER ]]; then LIBREHOME=$HOME else LIBREHOME="$(eval echo ~$LIBREUSER)" fi if [[ -z ${XDG_CONFIG_HOME:-} ]]; then export XDG_CONFIG_HOME="${LIBREHOME}/.config" fi if [[ -z ${XDG_CACHE_HOME:-} ]]; then export XDG_CACHE_HOME="${LIBREHOME}/.cache" fi # Generic functions ############################################################ # Usage: list_files $slug # Lists the configuration files to be considered for $slug. # Later files should take precedence over earlier files. list_files() { local slug=$1 case $slug in abs) echo /etc/$slug.conf echo "$LIBREHOME/.$slug.conf" ;; makepkg) if [[ ${MAKEPKG_CONF:-} != /etc/$slug.conf && -r ${MAKEPKG_CONF:-} ]]; then echo "$MAKEPKG_CONF" else echo /etc/$slug.conf echo "$LIBREHOME/.$slug.conf" fi ;; libretools) echo /etc/$slug.conf echo "$XDG_CONFIG_HOME/libretools/$slug.conf" ;; *) echo /etc/libretools.d/$slug.conf echo "$XDG_CONFIG_HOME/libretools/$slug.conf" ;; esac } # Usage: list_envvars $slug # Lists the environmental variables that take precidence over the configuration # files for $slug. list_envvars() { local slug=$1 case $slug in makepkg) printf '%s\n' \ PKGDEST SRCDEST SRCPKGDEST LOGDEST \ BUILDDIR \ PKGEXT SRCEXT \ GPGKEY PACKAGER ;; *) :;; esac } # Usage: load_files $slug # Loads the configuration files for $slug in the proper order. load_files() { local slug=$1 local var local file # Save the existing versions at _VARNAME for var in $(list_envvars $slug); do [[ -n ${!var:-} ]] && eval "_$var=\${$var}" done # Load the files for file in $(list_files $slug); do if [[ -r $file ]]; then . "$file" || return 1 fi done # Restore the _SAVED versions for var in $(list_envvars $slug); do eval "$var=\${_$var:-\${$var:-}}" done } # Usage: check_vars $slug VAR1 VAR2... # Check whether the variables listed are properly set. # If not, it prints a message saying to set them in the configuration file(s) # for $slug. check_vars() { local slug=$1 shift local ret=0 local VAR for VAR in "$@"; do if [[ -z ${!VAR:-} ]]; then if [[ $(list_files $slug|wc -l) -gt 1 ]]; then echo "Configure '$VAR' in one of:" list_files $slug | sed 's/./ -> &/' else echo "Configure '$VAR' in $(list_files $slug)" fi ret=1 fi done >&2 if [[ $ret != 0 ]]; then return 1 fi } # makepkg configuration ######################################################## # Usage: get_conf_makepkg get_conf_makepkg() ( set +euE local setting=$1 local default=$2 load_files makepkg printf '%s\n' "${!setting:-${default}}" ) set_conf_makepkg() { local key=$1 local val=$2 local file for file in $(list_files makepkg|tac); do if [[ -w $file ]]; then sed -i "/^\s*$key=/d" "$file" echo "$key='$val'" >> "$file" return 0 fi done return 1 }