Skip to content

Commit 6ca155a

Browse files
jshipbegriffs
authored andcommitted
Install helper binaries via Haskell (#256)
* Install helper binaries via Haskell script * Fix variable naming bug in install.sh - DRY_RUN -> HVN_DRY_RUN * Replace use of RecordWildCards with NamedFieldPuns to make the local bindings explicit * Terminate script immediately when stack cannot be found
1 parent 96396ee commit 6ca155a

File tree

4 files changed

+376
-132
lines changed

4 files changed

+376
-132
lines changed

dependencies.cabal

Lines changed: 0 additions & 22 deletions
This file was deleted.

install.sh

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ do_setup() {
110110
local GENERATE_HOOGLE_DB=$3
111111
local DRY_RUN=$4
112112
local setup_path=${HVN_DEST}/scripts/setup.sh
113+
local setup_haskell_path=${HVN_DEST}/scripts/setup_haskell.hs
113114

114115
. $setup_path || { \
115116
err "Failed to source ${setup_path}."
@@ -122,7 +123,21 @@ do_setup() {
122123

123124
if [ "$FULL_INSTALL" == true ]
124125
then
125-
setup_haskell $HVN_DEST $GENERATE_HOOGLE_DB $DRY_RUN
126+
local ARG_NO_HOOGLE_DB="--no-hoogle"
127+
local ARG_NO_HELPER_BINS="--no-helper-bins"
128+
129+
if [ "$GENERATE_HOOGLE_DB" == true ]
130+
then
131+
ARG_NO_HOOGLE_DB=
132+
fi
133+
134+
if [ "$DRY_RUN" == false ]
135+
then
136+
ARG_NO_HELPER_BINS=
137+
fi
138+
139+
stack $setup_haskell_path $ARG_NO_HOOGLE_DB $ARG_NO_HELPER_BINS ; RETCODE=$?
140+
[ ${RETCODE} -ne 0 ] && exit_err "setup_haskell.hs failed with error ${RETCODE}."
126141
fi
127142

128143
setup_done $HVN_DEST
@@ -167,7 +182,7 @@ do
167182
--basic) shift; HVN_FULL_INSTALL=false; continue;;
168183
--repo) shift; HVN_REPO=$1; shift; continue;;
169184
--no-hoogle) shift; HVN_GENERATE_HOOGLE_DB=false; continue;;
170-
--dry-run) shift; DRY_RUN=true; continue;;
185+
--dry-run) shift; HVN_DRY_RUN=true; continue;;
171186
*) usage;;
172187
esac
173188
done

scripts/setup.sh

Lines changed: 0 additions & 108 deletions
Original file line numberDiff line numberDiff line change
@@ -17,114 +17,6 @@ stack_resolver() {
1717
return 0
1818
}
1919

20-
setup_haskell() {
21-
local HVN_DEST=$1
22-
local GENERATE_HOOGLE_DB=$2
23-
local DRY_RUN=$3
24-
local RETCODE
25-
26-
if ! check_exist stack >/dev/null ; then
27-
err "Installer requires Stack."
28-
msg "Installation instructions: http://docs.haskellstack.org/en/stable/README/#how-to-install"
29-
exit 1
30-
fi
31-
32-
msg "Setting up GHC if needed..."
33-
stack setup --verbosity warning ; RETCODE=$?
34-
[ ${RETCODE} -ne 0 ] && exit_err "Stack setup failed with error ${RETCODE}."
35-
36-
if [ $(stack --verbosity 0 path --local-bin 2> /dev/null) ]
37-
then
38-
local STACK_BIN_PATH=$(fix_path $(stack --verbosity 0 path --local-bin))
39-
local STACK_GLOBAL_DIR=$(fix_path $(stack --verbosity 0 path --stack-root))
40-
local STACK_GLOBAL_CONFIG=$(fix_path $(stack --verbosity 0 path --config-location))
41-
else
42-
local STACK_BIN_PATH=$(fix_path $(stack --verbosity 0 path --local-bin-path))
43-
local STACK_GLOBAL_DIR=$(fix_path $(stack --verbosity 0 path --global-stack-root))
44-
local STACK_GLOBAL_CONFIG=$(fix_path $(stack --verbosity 0 path --config-location))
45-
fi
46-
local STACK_RESOLVER=$(stack_resolver $STACK_GLOBAL_CONFIG)
47-
48-
detail "Stack bin path: ${STACK_BIN_PATH}"
49-
detail "Stack global path: ${STACK_GLOBAL_DIR}"
50-
detail "Stack global config location: ${STACK_GLOBAL_CONFIG}"
51-
detail "Stack resolver: ${STACK_RESOLVER}"
52-
53-
if [ -z ${STACK_BIN_PATH} ] || [ -z ${STACK_GLOBAL_DIR} ] || [ -z ${STACK_GLOBAL_CONFIG} ] ; then
54-
exit_err_report "Incorrect stack paths."
55-
fi
56-
57-
detail "${HVN_DEST}/.stack-bin -> ${STACK_BIN_PATH}"
58-
ln -sf ${STACK_BIN_PATH} ${HVN_DEST}/.stack-bin
59-
60-
msg "Installing helper binaries..."
61-
62-
# Install ghc-mod via active stack resolver for maximum out-of-the-box compatibility.
63-
# Stack dependency solving requires cabal to be on the PATH.
64-
stack --resolver ${STACK_RESOLVER} install ghc-mod cabal-install --verbosity warning ; RETCODE=$?
65-
[ ${RETCODE} -ne 0 ] && exit_err "Installing ghc-mod/cabal-install failed with error ${RETCODE}."
66-
67-
# Install hindent via pinned LTS to ensure we have version 5.
68-
if [ "$DRY_RUN" == false ]
69-
then
70-
stack --resolver lts-8.6 install hindent --install-ghc --verbosity warning ; RETCODE=$?
71-
else
72-
stack --resolver lts-8.6 install hindent --install-ghc --verbosity warning --dry-run ; RETCODE=$?
73-
fi
74-
[ ${RETCODE} -ne 0 ] && exit_err "Installing hindent failed with error ${RETCODE}."
75-
76-
# Create a temporary directory for helper binary dependency solving.
77-
local HELPER_BINARIES_TEMP_DIR=$(mktemp -d)
78-
cp ${HVN_DEST}/dependencies.cabal $HELPER_BINARIES_TEMP_DIR
79-
pushd $HELPER_BINARIES_TEMP_DIR
80-
81-
# Solve the versions of all helper binaries listed in dependencies.cabal.
82-
stack init --solver --install-ghc ; RETCODE=$?
83-
[ ${RETCODE} -ne 0 ] && exit_err "Solving dependencies for helper binaries failed with error ${RETCODE}."
84-
85-
# Clean up the comments and blank lines from stack.yaml.
86-
sed -i.bak1 -e 's/^#.*$//' -e '/^$/d' stack.yaml
87-
88-
# Remove warning message from generated stack.yaml.
89-
sed -i.bak2 -e '/user-message/,+3d' stack.yaml
90-
91-
# Install all solved dependency versions for the helper binaries, while skipping local dependencies package and GHC.
92-
# Also skipping bogus 'invalid-cabal-flag-settings' dependency from base: https://github.com/commercialhaskell/stack/issues/2969
93-
local HELPER_BINARIES_DEPENDENCY_LIST=$(stack list-dependencies --separator - | grep -vE "^dependencies-|^ghc-[0-9]\.[0-9]\.[0-9]$|^invalid-cabal-flag-settings-|^rts-")
94-
95-
for dep in $HELPER_BINARIES_DEPENDENCY_LIST
96-
do
97-
if [ "$DRY_RUN" == false ]
98-
then
99-
stack install $dep ; RETCODE=$?
100-
else
101-
stack install $dep --dry-run ; RETCODE=$?
102-
fi
103-
[ ${RETCODE} -ne 0 ] && exit_err "Installing helper binary dependency $dep failed with error ${RETCODE}."
104-
done
105-
106-
# Clean up temporary directory.
107-
popd
108-
rm -rf $HELPER_BINARIES_TEMP_DIR
109-
110-
msg "Installing git-hscope..."
111-
cp ${HVN_DEST}/git-hscope ${STACK_BIN_PATH}
112-
113-
if [ "$GENERATE_HOOGLE_DB" == true ]
114-
then
115-
msg "Building Hoogle database..."
116-
${STACK_BIN_PATH}/hoogle generate
117-
fi
118-
119-
msg "Configuring codex to search in stack..."
120-
cat > $HOME/.codex <<EOF
121-
hackagePath: $STACK_GLOBAL_DIR/indices/Hackage/
122-
tagsFileHeader: false
123-
tagsFileSorted: false
124-
tagsCmd: hasktags --extendedctag --ignore-close-implementation --ctags --tags-absolute --output='\$TAGS' '\$SOURCES'
125-
EOF
126-
}
127-
12820
# Print package name to install if command is not found
12921
# $1: command name
13022
# $2: package name

0 commit comments

Comments
 (0)