@@ -124,17 +124,19 @@ check_tools() {
124
124
125
125
# ------------------------------------------------------------------------------
126
126
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" )
129
130
130
- mkdtemp () {
131
- mktemp -d " $TMP_ROOT /XXXXXX"
132
- }
131
+ mkdtemp () {
132
+ mktemp -d " $TMP_ROOT /XXXXXX"
133
+ }
133
134
134
- cleanup () {
135
- rm -rf " $TMP_ROOT " ;
135
+ cleanup () {
136
+ rm -rf " $TMP_ROOT " ;
137
+ }
138
+ trap cleanup EXIT
136
139
}
137
- trap cleanup EXIT
138
140
139
141
# ------------------------------------------------------------------------------
140
142
@@ -155,12 +157,31 @@ Options
155
157
-h --help Show this help
156
158
-p --path Install location (default ~/dlang)
157
159
-v --verbose Verbose output
160
+ --config List all available configuration parameters
158
161
159
162
Run "install.sh <command> --help to get help for a specific command.
160
163
If no argument are provided, the latest DMD compiler will be installed.
161
164
'
162
165
}
163
166
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
+
164
185
command_help () {
165
186
if [ -z " ${1-} " ]; then
166
187
usage
@@ -283,6 +304,11 @@ parse_args() {
283
304
COMPILER=$1
284
305
;;
285
306
307
+ --config)
308
+ command_config
309
+ exit 0
310
+ ;;
311
+
286
312
* )
287
313
usage
288
314
fatal " Unrecognized command-line parameter: $1 "
@@ -685,8 +711,47 @@ install_dub() {
685
711
ln -s " $dub " " $ROOT /dub"
686
712
}
687
713
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
+
688
752
# ------------------------------------------------------------------------------
689
753
754
+ init
690
755
parse_args " $@ "
691
756
resolve_latest " $COMPILER "
692
757
run_command ${COMMAND:- install} " $COMPILER "
0 commit comments