summaryrefslogtreecommitdiff
path: root/src/lib/conf.sh
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/conf.sh')
-rw-r--r--src/lib/conf.sh115
1 files changed, 115 insertions, 0 deletions
diff --git a/src/lib/conf.sh b/src/lib/conf.sh
new file mode 100644
index 0000000..7693ee5
--- /dev/null
+++ b/src/lib/conf.sh
@@ -0,0 +1,115 @@
+#!/bin/bash
+
+INCLUDE_CONF_SH=conf.sh
+
+LIBREUSER="${SUDO_USER:-$USER}"
+LIBREHOME="$(eval echo ~$LIBREUSER)"
+if [[ -z ${XDG_CONFIG_HOME:-} ]]; then
+ export XDG_CONFIG_HOME="${LIBREHOME}/.config"
+fi
+
+# Generic functions ############################################################
+
+get_files() {
+ local slug=$1
+ case $slug in
+ makepkg.conf)
+ if [[ $MAKEPKG_CONF != /etc/$slug && -r $MAKEPKG_CONF ]]; then
+ echo "$MAKEPKG_CONF"
+ else
+ echo /etc/$slug
+ echo "$LIBREHOME/.$slug"
+ fi
+ ;;
+ libretools.conf)
+ echo /etc/$slug
+ echo "$XDG_CONFIG_HOME/libretools/$slug"
+ ;;
+ *.conf)
+ echo /etc/libretools.d/$slug
+ echo "$XDG_CONFIG_HOME/libretools/$slug"
+ ;;
+ esac
+}
+
+load_files() {
+ for file in $(get_files $1.conf); do
+ if [[ -r $file ]]; then
+ . "$file"
+ fi
+ done
+}
+
+check_vars() {
+ local slug=$1
+ shift
+ local ret=0
+ for VAR in "$@"; do
+ if [[ -z ${!VAR} ]]; then
+ if [[ $(get_files $slug|wc -l) > 1 ]]; then
+ echo "Configure '$VAR' in one of:"
+ get_files $slug | sed 's/./ -> &/'
+ else
+ echo "Configure '$VAR' in $(get_files $slug)"
+ fi
+ ret=1
+ fi >>/dev/stderr
+ done
+ if [[ $ret != 0 ]]; then
+ return 1
+ fi
+}
+
+# makepkg configuration ########################################################
+
+[[ -n ${MAKEPKG_CONF:-} ]] || MAKEPKG_CONF=/etc/makepkg.conf
+
+load_conf_makepkg() {
+ load_files makepkg
+}
+
+get_conf_makepkg() (
+ set +euE
+ local setting=$1
+ local default=$2
+ load_conf_makepkg
+ printf '%s\n' "${!setting:-${default}}"
+)
+
+set_conf_makepkg() {
+ local key=$1
+ local val=$2
+ for file in `get_files makepkg.conf|tac`; do
+ if [[ -w $file ]]; then
+ sed -i "/^\s*$key=/d" "$file"
+ echo "$key='$val'" >> "$file"
+ return 0
+ fi
+ done
+ return 1
+}
+
+
+# libretools configuration #####################################################
+
+load_conf_libretools() {
+ load_files libretools
+ # TODO: checks
+}
+
+load_conf_libretools_chroot() {
+ load_files chroot
+ if [[ -f /.arch-chroot ]]; then
+ # check_vars chroot CHROOTEXTRAPKG
+ :
+ else
+ # check_vars chroot CHROOTDIR CHROOT CHROOTEXTRAPKG
+ local ret=0
+ check_vars chroot CHROOTDIR CHROOT || ret=$?
+ if [[ $CHROOT == root ]]; then
+ echo "Configured var CHROOT cannot equal 'root'"
+ ret=1
+ fi
+ return $ret;
+ fi
+}