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