@@ -6,37 +6,40 @@ GHC_VERSION="@@GHC_VERSION@@"
6
6
ABI_HASHES=" @@ABI_HASHES@@"
7
7
8
8
debug_msg () {
9
- if [ -n " $HLS_WRAPPER_DEBUG " ] ; then
10
- echo >&2 " $1 "
11
- fi
9
+ if [ -n " $HLS_WRAPPER_DEBUG " ] ; then
10
+ (>&2 printf " \\ 033[0;34m%s\\ 033[0m\\ n" " $1 " )
11
+ fi
12
+ }
13
+
14
+ err_msg () {
15
+ if [ -n " $HLS_WRAPPER_DEBUG " ] ; then
16
+ (>&2 printf " \\ 033[0;31m%s\\ 033[0m\\ n" " $1 " )
17
+ elif [ -n " $HLS_WRAPPER_VERBOSE " ] ; then
18
+ (>&2 printf " \\ 033[0;31m%s\\ 033[0m\\ n" " $1 " )
19
+ fi
12
20
}
13
21
14
22
err_ghc_pkg () {
15
- debug_msg >&2 " Could not find a ghc-pkg binary (found: $1 )!"
16
- debug_msg >&2 " Trying other methods..."
23
+ err_msg " Could not find a ghc-pkg binary (found: $1 )!"
17
24
}
18
25
19
26
err_abi () {
20
- debug_msg >&2 " GHC ABIs don't match!"
21
- debug_msg >&2 " "
22
- debug_msg >&2 " Expected: ${ABI_HASHES} "
23
- debug_msg >&2 " Got: $1 "
24
- debug_msg >&2 " Trying other methods..."
27
+ err_msg " GHC ABIs don't match!"
28
+ err_msg " "
29
+ err_msg " Expected: ${ABI_HASHES} "
30
+ err_msg " Got: $1 "
25
31
}
26
32
27
33
err_ver () {
28
- debug_msg >&2 " GHC versions don't match!"
29
- debug_msg >&2 " "
30
- debug_msg >&2 " Expected: ${GHC_VERSION} "
31
- debug_msg >&2 " Got: $1 "
32
- debug_msg >&2 " Trying other methods..."
34
+ err_msg " GHC versions don't match!"
35
+ err_msg " "
36
+ err_msg " Expected: ${GHC_VERSION} "
37
+ err_msg " Got: $1 "
33
38
}
34
39
35
40
# Check the version of GHC and the ABI.
36
41
check_ghc () {
37
- { [ -z " $1 " ] || [ -z " $2 " ] || [ -z " $3 " ] || [ -z " $4 " ] ; } && debug_msg " internal error: not enough arguments to check_ghc: 1:$1 ,2:$2 ,3:$3 ,4:$4 " && return 4
38
-
39
- debug_msg >&2 " Trying method $4 "
42
+ { [ -z " $1 " ] || [ -z " $2 " ] || [ -z " $3 " ] ; } && debug_msg " internal error: not enough arguments to check_ghc: 1:$1 ,2:$2 ,3:$3 " && return 4
40
43
41
44
check_ghc_libdir=$1
42
45
check_ghc_bin=$2
@@ -92,45 +95,46 @@ infer_ghc_pkg() {
92
95
# try GHC_LIBDIR from the environment (e.g. user set it, or haskell-language-server-wrapper)
93
96
if [ -n " ${GHC_LIBDIR} " ] &&
94
97
[ -n " ${GHC_BIN} " ] &&
95
- check_ghc " ${GHC_LIBDIR} " " ${GHC_BIN} " " $( infer_ghc_pkg " ${GHC_BIN} " ) " " GHC_LIBDIR and GHC_BIN from env "
98
+ { debug_msg " Trying method: GHC_LIBDIR and GHC_BIN from env " ; HLS_WRAPPER_VERBOSE=1 ; check_ghc " ${GHC_LIBDIR} " " ${GHC_BIN} " " $( infer_ghc_pkg " ${GHC_BIN} " ) " || exit 1 ; }
96
99
then
97
100
:
98
101
# try GHC_BIN from the environment (e.g. user set it)
99
102
elif [ -n " ${GHC_BIN} " ] &&
100
103
GHC_LIBDIR=" $( " ${GHC_BIN} " --print-libdir) " &&
101
- check_ghc " ${GHC_LIBDIR} " " ${GHC_BIN} " " $( infer_ghc_pkg " ${GHC_BIN} " ) " " GHC_BIN from env "
104
+ { debug_msg " Trying method: GHC_BIN from env " ; HLS_WRAPPER_VERBOSE=1 ; check_ghc " ${GHC_LIBDIR} " " ${GHC_BIN} " " $( infer_ghc_pkg " ${GHC_BIN} " ) " || exit 2 ; }
102
105
then
103
106
:
104
107
# try ghcup
105
108
elif command -v ghcup > /dev/null &&
106
109
GHC_BIN=" $( ghcup whereis ghc " ${GHC_VERSION} " ) " &&
107
110
GHC_LIBDIR=" $( " ${GHC_BIN} " --print-libdir) " &&
108
- check_ghc " ${GHC_LIBDIR} " " ${GHC_BIN} " " $( infer_ghc_pkg " ${GHC_BIN} " ) " " ghcup "
111
+ { debug_msg " Trying method: ghcup " ; check_ghc " ${GHC_LIBDIR} " " ${GHC_BIN} " " $( infer_ghc_pkg " ${GHC_BIN} " ) " ; }
109
112
then
110
113
:
111
114
# try ghc-${GHC_VERSION}
112
115
elif command -v ghc-${GHC_VERSION} > /dev/null &&
113
116
GHC_LIBDIR=" $( " ghc-${GHC_VERSION} " --print-libdir) " &&
114
- check_ghc " ${GHC_LIBDIR} " " ghc-${GHC_VERSION} " " $( infer_ghc_pkg " ghc-${GHC_VERSION} " ) " " ghc- ${GHC_VERSION} in PATH "
117
+ { debug_msg " Trying method: ghc- ${GHC_VERSION} in PATH " ; check_ghc " ${GHC_LIBDIR} " " ghc-${GHC_VERSION} " " $( infer_ghc_pkg " ghc-${GHC_VERSION} " ) " ; }
115
118
then
116
119
:
117
120
# try ghc
118
121
elif command -v ghc > /dev/null &&
119
122
GHC_LIBDIR=" $( ghc --print-libdir) " &&
120
- check_ghc " ${GHC_LIBDIR} " " ghc" " $( infer_ghc_pkg " ghc" ) " " ghc in PATH "
123
+ { debug_msg " Trying method: ghc in PATH " ; check_ghc " ${GHC_LIBDIR} " " ghc" " $( infer_ghc_pkg " ghc" ) " ; }
121
124
then
122
125
:
123
126
# try stack
124
127
elif command -v stack > /dev/null &&
125
128
GHC_BIN=" $( cd " $( mktemp -d) " && stack --no-system-ghc --no-install-ghc --resolver " ghc-${GHC_VERSION} " exec sh -- -c ' command -v ghc' ) " &&
126
129
GHC_LIBDIR=" $( " ${GHC_BIN} " --print-libdir) " &&
127
- check_ghc " ${GHC_LIBDIR} " " ${GHC_BIN} " " $( infer_ghc_pkg " ${GHC_BIN} " ) " " stack "
130
+ { debug_msg " Trying method: stack " ; check_ghc " ${GHC_LIBDIR} " " ${GHC_BIN} " " $( infer_ghc_pkg " ${GHC_BIN} " ) " ; }
128
131
then
129
132
:
130
133
else
131
- echo >&2 " All methods exhausted!"
132
- echo >&2 " Couldn't find a working/matching GHC installation"
133
- echo >&2 " exiting..."
134
+ HLS_WRAPPER_VERBOSE=1
135
+ err_msg " All methods exhausted!"
136
+ err_msg " Couldn't find a working/matching GHC installation"
137
+ err_msg " exiting..."
134
138
exit 42
135
139
fi
136
140
@@ -140,18 +144,22 @@ case "$(uname -s)" in
140
144
" Darwin" |" darwin" )
141
145
if [ -n " $DYLD_LIBRARY_PATH " ] ; then
142
146
DYLD_LIBRARY_PATH=" $( for i in " ${GHC_LIBDIR} " /* ; do [ -d " $i " ] && printf " %s" " $i :" ; done) $DYLD_LIBRARY_PATH "
147
+ debug_msg " Exporting DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH} "
143
148
export DYLD_LIBRARY_PATH
144
149
else
145
150
DYLD_LIBRARY_PATH=" $( for i in " ${GHC_LIBDIR} " /* ; do [ -d " $i " ] && printf " %s" " $i :" ; done | sed ' s/:$//' ) "
151
+ debug_msg " Exporting DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH} "
146
152
export DYLD_LIBRARY_PATH
147
153
fi
148
154
;;
149
155
* )
150
156
if [ -n " $LD_LIBRARY_PATH " ] ; then
151
157
LD_LIBRARY_PATH=" $( for i in " ${GHC_LIBDIR} " /* ; do [ -d " $i " ] && printf " %s" " $i :" ; done) $LD_LIBRARY_PATH "
158
+ debug_msg " Exporting LD_LIBRARY_PATH=${LD_LIBRARY_PATH} "
152
159
export LD_LIBRARY_PATH
153
160
else
154
161
LD_LIBRARY_PATH=" $( for i in " ${GHC_LIBDIR} " /* ; do [ -d " $i " ] && printf " %s" " $i :" ; done | sed ' s/:$//' ) "
162
+ debug_msg " Exporting LD_LIBRARY_PATH=${LD_LIBRARY_PATH} "
155
163
export LD_LIBRARY_PATH
156
164
fi
157
165
;;
0 commit comments