Skip to content

Commit 245951f

Browse files
committed
Implement distribution of dynamic builds
1 parent 3f12824 commit 245951f

File tree

5 files changed

+109
-0
lines changed

5 files changed

+109
-0
lines changed

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,6 @@ test/testdata/**/hie.yaml
4545
# nix
4646
result
4747
result-doc
48+
49+
out/
50+
store/

Makefile

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
ROOT_DIR:=$(shell dirname $(realpath $(firstword $(MAKEFILE_LIST))))
2+
3+
GHC_VERSION ?=
4+
HLS_VERSION ?=
5+
6+
ifndef HLS_VERSION
7+
$(error HLS_VERSION is not set)
8+
endif
9+
10+
CHMOD := chmod
11+
INSTALL := install
12+
PATCHELF := patchelf
13+
FIND := find
14+
SED := sed
15+
MKDIR := mkdir
16+
TAR := tar
17+
CABAL := cabal
18+
19+
STORE_DIR := store
20+
BINDIST_BASE_DIR := out/bindist/
21+
BINDIST_OUT_DIR := out/bindist/haskell-language-server-$(HLS_VERSION)
22+
23+
CABAL_ARGS ?= --store-dir=$(ROOT_DIR)/$(STORE_DIR)
24+
CABAL_INSTALL_ARGS ?= --overwrite-policy=always --install-method=copy --installdir=$(ROOT_DIR)/out
25+
26+
hls: bindist/ghcs
27+
for ghc in $(shell cat bindist/ghcs) ; do \
28+
$(MAKE) GHC_VERSION=$$ghc hls-ghc ; \
29+
done
30+
31+
hls-ghc:
32+
if test -z "$(GHC_VERSION)" ; then echo >&2 "GHC_VERSION is not set" ; false ; fi
33+
$(CABAL) $(CABAL_ARGS) v2-install -w ghc-$(GHC_VERSION) $(CABAL_INSTALL_ARGS)
34+
35+
bindist:
36+
for ghc in $(shell cat bindist/ghcs) ; do \
37+
$(MAKE) GHC_VERSION=$$ghc bindist-ghc ; \
38+
done
39+
$(SED) -e "s/@@HLS_VERSION@@/$(HLS_VERSION)/" \
40+
bindist/Makefile > $(BINDIST_OUT_DIR)/Makefile
41+
cd $(BINDIST_BASE_DIR) ; $(TAR) caf $(ROOT_DIR)/out/haskell-language-server-$(HLS_VERSION).tar.xz haskell-language-server-$(HLS_VERSION)
42+
43+
bindist-ghc:
44+
if test -z "$(GHC_VERSION)" ; then echo >&2 "GHC_VERSION is not set" ; false ; fi
45+
$(MKDIR) -p $(BINDIST_OUT_DIR)/bin
46+
$(MKDIR) -p $(BINDIST_OUT_DIR)/lib/$(GHC_VERSION)
47+
$(SED) -e "s/@@EXE_NAME@@/haskell-language-server-$(GHC_VERSION)/" -e "s/@@GHC_VERSION@@/$(GHC_VERSION)/" \
48+
bindist/wrapper > $(BINDIST_OUT_DIR)/haskell-language-server-$(GHC_VERSION)
49+
$(SED) -e 's/@@EXE_NAME@@/haskell-language-server-wrapper/' -e "s/@@GHC_VERSION@@/$(GHC_VERSION)/" \
50+
bindist/wrapper > $(BINDIST_OUT_DIR)/haskell-language-server-wrapper
51+
$(CHMOD) 755 $(BINDIST_OUT_DIR)/haskell-language-server-$(GHC_VERSION)
52+
$(CHMOD) 755 $(BINDIST_OUT_DIR)/haskell-language-server-wrapper
53+
$(INSTALL) -vDm 755 out/haskell-language-server $(BINDIST_OUT_DIR)/bin/haskell-language-server-$(GHC_VERSION)
54+
$(PATCHELF) --set-rpath \$$ORIGIN/../lib/$(GHC_VERSION) $(BINDIST_OUT_DIR)/bin/haskell-language-server-$(GHC_VERSION)
55+
$(INSTALL) -vDm 755 out/haskell-language-server-wrapper $(BINDIST_OUT_DIR)/bin/haskell-language-server-wrapper
56+
$(PATCHELF) --set-rpath \$$ORIGIN/../lib/$(GHC_VERSION) $(BINDIST_OUT_DIR)/bin/haskell-language-server-wrapper
57+
$(FIND) $(STORE_DIR) -type f -name '*.so' -execdir install -vDm 755 {} $(ROOT_DIR)/$(BINDIST_OUT_DIR)/lib/$(GHC_VERSION)/{} \;
58+
59+
clean:
60+
rm -rf $(BINDIST_BASE_DIR) $(STORE_DIR)
61+
62+
.PHONY: hls hls-ghc bindist bindist-ghc clean

bindist/Makefile

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
DESTDIR ?=
2+
PREFIX ?= /usr/local
3+
LIBDIR ?= $(PREFIX)/lib
4+
BINDIR ?= $(PREFIX)/bin
5+
6+
HLS_VERSION := @@HLS_VERSION@@
7+
8+
INSTALL := install
9+
SED := sed
10+
CHMOD := chmod
11+
12+
install:
13+
$(INSTALL) -d $(BINDIR)
14+
$(INSTALL) -d $(LIBDIR)/haskell-language-server-$(HLS_VERSION)/lib
15+
$(INSTALL) -d $(LIBDIR)/haskell-language-server-$(HLS_VERSION)/bin
16+
for f in $(wildcard lib/*/*) ; do \
17+
$(INSTALL) -vDm 755 $$f $(LIBDIR)/haskell-language-server-$(HLS_VERSION)/$$f ; \
18+
done
19+
for b in $(wildcard bin/*) ; do \
20+
$(INSTALL) -vDm 755 $$b $(LIBDIR)/haskell-language-server-$(HLS_VERSION)/$$b ; \
21+
done
22+
for h in $(wildcard haskell-language-server-*) ; do \
23+
$(SED) -e "s#@@EXE_DIR@@#$(LIBDIR)/haskell-language-server-$(HLS_VERSION)/bin/#" \
24+
$$h > $(BINDIR)/$$h ; \
25+
$(CHMOD) 755 $(BINDIR)/$$h ; \
26+
done

bindist/ghcs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
8.10.7

bindist/wrapper

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
#!/bin/sh
2+
3+
exedir="@@EXE_DIR@@"
4+
executablename="@@EXE_NAME@@"
5+
6+
if [ -n "${GHC_LIBDIR}" ] ; then
7+
:
8+
elif ghc-@@GHC_VERSION@@ --info >/dev/null ; then
9+
# TODO: this is ugly
10+
GHC_LIBDIR=$(ghc-@@GHC_VERSION@@ --info | grep LibDir | awk -F ',' '{ print $3 }' | sed 's/)$//' | sed 's/"//g')
11+
elif ghc --info >/dev/null ; then
12+
GHC_LIBDIR=$(ghc --info | grep LibDir | awk -F ',' '{ print $3 }' | sed 's/)$//' | sed 's/"//g')
13+
fi
14+
15+
export LD_LIBRARY_PATH="$(for i in "${GHC_LIBDIR}"/* ; do [ -d $i ] && printf "%s" "$i:" ; done)$LD_LIBRARY_PATH"
16+
17+
exec "${exedir}/${executablename}" ${1+"$@"}

0 commit comments

Comments
 (0)