Skip to content

Commit 8d00d7f

Browse files
committed
Exit early when GHC_LIBDIR and GHC_BIN are set
And improve debug messages.
1 parent ae442fb commit 8d00d7f

File tree

1 file changed

+35
-27
lines changed

1 file changed

+35
-27
lines changed

bindist/wrapper.in

Lines changed: 35 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -6,37 +6,40 @@ GHC_VERSION="@@GHC_VERSION@@"
66
ABI_HASHES="@@ABI_HASHES@@"
77

88
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
1220
}
1321

1422
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)!"
1724
}
1825

1926
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"
2531
}
2632

2733
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"
3338
}
3439

3540
# Check the version of GHC and the ABI.
3641
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
4043

4144
check_ghc_libdir=$1
4245
check_ghc_bin=$2
@@ -92,45 +95,46 @@ infer_ghc_pkg() {
9295
# try GHC_LIBDIR from the environment (e.g. user set it, or haskell-language-server-wrapper)
9396
if [ -n "${GHC_LIBDIR}" ] &&
9497
[ -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 ; }
9699
then
97100
:
98101
# try GHC_BIN from the environment (e.g. user set it)
99102
elif [ -n "${GHC_BIN}" ] &&
100103
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 ; }
102105
then
103106
:
104107
# try ghcup
105108
elif command -v ghcup >/dev/null &&
106109
GHC_BIN="$(ghcup whereis ghc "${GHC_VERSION}")" &&
107110
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}")" ; }
109112
then
110113
:
111114
# try ghc-${GHC_VERSION}
112115
elif command -v ghc-${GHC_VERSION} >/dev/null &&
113116
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}")" ; }
115118
then
116119
:
117120
# try ghc
118121
elif command -v ghc >/dev/null &&
119122
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")" ; }
121124
then
122125
:
123126
# try stack
124127
elif command -v stack >/dev/null &&
125128
GHC_BIN="$(cd "$(mktemp -d)" && stack --no-system-ghc --no-install-ghc --resolver "ghc-${GHC_VERSION}" exec sh -- -c 'command -v ghc')" &&
126129
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}")" ; }
128131
then
129132
:
130133
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..."
134138
exit 42
135139
fi
136140

@@ -140,18 +144,22 @@ case "$(uname -s)" in
140144
"Darwin"|"darwin")
141145
if [ -n "$DYLD_LIBRARY_PATH" ] ; then
142146
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}"
143148
export DYLD_LIBRARY_PATH
144149
else
145150
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}"
146152
export DYLD_LIBRARY_PATH
147153
fi
148154
;;
149155
*)
150156
if [ -n "$LD_LIBRARY_PATH" ] ; then
151157
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}"
152159
export LD_LIBRARY_PATH
153160
else
154161
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}"
155163
export LD_LIBRARY_PATH
156164
fi
157165
;;

0 commit comments

Comments
 (0)