@@ -124,17 +124,19 @@ check_tools() {
124124
125125# ------------------------------------------------------------------------------
126126
127- mkdir -p " $ROOT "
128- TMP_ROOT=$( mktemp -d " $ROOT /.installer_tmp_XXXXXX" )
127+ init () {
128+ mkdir -p " $ROOT "
129+ TMP_ROOT=$( mktemp -d " $ROOT /.installer_tmp_XXXXXX" )
129130
130- mkdtemp () {
131- mktemp -d " $TMP_ROOT /XXXXXX"
132- }
131+ mkdtemp () {
132+ mktemp -d " $TMP_ROOT /XXXXXX"
133+ }
133134
134- cleanup () {
135- rm -rf " $TMP_ROOT " ;
135+ cleanup () {
136+ rm -rf " $TMP_ROOT " ;
137+ }
138+ trap cleanup EXIT
136139}
137- trap cleanup EXIT
138140
139141# ------------------------------------------------------------------------------
140142
@@ -155,12 +157,31 @@ Options
155157 -h --help Show this help
156158 -p --path Install location (default ~/dlang)
157159 -v --verbose Verbose output
160+ --config List all available configuration parameters
158161
159162Run "install.sh <command> --help to get help for a specific command.
160163If no argument are provided, the latest DMD compiler will be installed.
161164'
162165}
163166
167+ command_config () {
168+ log ' Configuration
169+
170+ ~/.config/dlang/installer.cfg can be used to store permanent configuration settings.
171+ Alternatively a global configuration file can be used (/etc/dlang/installer.cfg).
172+ The parameters are listed in line-wise a <param>=<value> format.
173+ Lines starting with # are ignored.
174+
175+ Example:
176+
177+ ROOT=~/.dlang
178+
179+ Available options:
180+
181+ ROOT Install location (default ~/dlang)
182+ '
183+ }
184+
164185command_help () {
165186 if [ -z " ${1-} " ]; then
166187 usage
@@ -283,6 +304,11 @@ parse_args() {
283304 COMPILER=$1
284305 ;;
285306
307+ --config)
308+ command_config
309+ exit 0
310+ ;;
311+
286312 * )
287313 usage
288314 fatal " Unrecognized command-line parameter: $1 "
@@ -685,8 +711,47 @@ install_dub() {
685711 ln -s " $dub " " $ROOT /dub"
686712}
687713
714+ # ------------------------------------------------------------------------------
715+ # Read user configuration
716+ # ------------------------------------------------------------------------------
717+
718+ local config_file config_files
719+ config_files=(
720+ " ${XDG_CONFIG_HOME:- $HOME / .config/ } /dlang/installer.cfg" \
721+ " ${XDG_CONFIG_DIRS:-/ etc} /dlang/installer.cfg" \
722+ " $HOME /Library/Application Support/dlang/installer.cfg" \
723+ )
724+ config_file=" "
725+ for file in " ${config_files[@]} " ; do
726+ if [ -e " ${file} " ] ; then
727+ config_file=" ${file} "
728+ fi
729+ done
730+ if [ -n " ${config_file} " ] ; then
731+ # Use a whitelist of allowed parameters
732+ allowedParams=(" ROOT" )
733+ containsValue () {
734+ local e value=" $1 "
735+ shift
736+ for e; do [[ " ${e} " == " ${value} " ]] && return 0; done
737+ return 1
738+ }
739+ IFS=" ="
740+ # Ignore empty lines or lines with comments
741+ grep -vE " ^(#|$)" " ${config_file} " | while read -r param value ; do
742+ if containsValue " ${param} " " ${allowedParams[@]} " ; then
743+ log " ${param} : ${value// \" / } "
744+ declare -a " ${param} =${value// \" / } "
745+ else
746+ log " ${param} is invalid. Please check."
747+ fi
748+ done
749+ ROOT=" ${ROOT/# \~ / $HOME } "
750+ fi
751+
688752# ------------------------------------------------------------------------------
689753
754+ init
690755parse_args " $@ "
691756resolve_latest " $COMPILER "
692757run_command ${COMMAND:- install} " $COMPILER "
0 commit comments