-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathMakefile
115 lines (94 loc) · 3.78 KB
/
Makefile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
################################################################################
PREFIX ?= $(HOME)/.local
BIN_DIR := $(PREFIX)/bin
DATA_DIR := $(PREFIX)/share/xminad
ARCH := $(shell uname -m)
OS := $(shell uname -s | tr '[A-Z]' '[a-z]')
TARGET := $(BIN_DIR)/xminad
SRC := $(shell find . -type f -name '*.hs')
CABAL_BIN ?= $(shell which cabal)
SANDBOX := cabal.sandbox.config
CONFIG := cabal.config
XMINAD := dist/build/xminad/xminad
CABAL_FLAGS := --enable-optimization=2
CABAL_DIR_FLAGS := --prefix=$(PREFIX) --bindir=$(BIN_DIR) --datadir=$(DATA_DIR)
CABAL_ADD_SOURCE ?=
DO_CHECK ?= YES
DISPLAY ?= :0
################################################################################
.PHONY: all build install restart clean realclean check pic configure shell nix
################################################################################
all: build
################################################################################
install: $(TARGET)
# TODO: install the xmobarrc under the PREFIX and configure xminad with
# the correct path
sed 's!{{DATA_DIR}}!$(DATA_DIR)!' config/xmobar.config \
> $(HOME)/.xmobarrc
sed 's!{{BIN_DIR}}!$(BIN_DIR)!' config/xminad.desktop \
> $(PREFIX)/share/applications/xminad.desktop
make -C pic install
configure: $(SANDBOX)
$(CABAL_BIN) configure $(CABAL_FLAGS) $(CABAL_DIR_FLAGS)
echo "install-dirs" > $(CONFIG)
grep -E '^\s*(bindir|datadir|install-dirs)\>' $(SANDBOX) >$(CONFIG)
sed -i 's,\(bindir\s*:\s*\).*,\1$(BIN_DIR),' $(CONFIG)
sed -i 's,\(datadir\s*:\s*\).*,\1$(DATA_DIR),' $(CONFIG)
################################################################################
build: $(XMINAD)
################################################################################
pic:
make -C pic
################################################################################
restart: install
export DISPLAY="$(DISPLAY)"
$(TARGET) --restart
################################################################################
clean:
rm -rf dist $(XMINAD) $(CHECK) $(SANDBOX) $(CONFIG)
make -C pic clean
################################################################################
realclean:
rm -rf .cabal-sandbox
################################################################################
check: build
$(CHECK)
cabal check
################################################################################
ifeq ($(DO_CHECK),YES)
CHECK = dist/build/checkrc/checkrc
else
CHECK = :
endif
shell.nix: xminad.cabal
cabal2nix --shell --no-haddock file://./ >$@
xminad.nix: xminad.cabal
cabal2nix --no-haddock file://./ >$@
nix: shell.nix xminad.nix
################################################################################
shell: shell.nix
nix-shell
################################################################################
build: $(XMINAD)
################################################################################
$(XMINAD): $(SRC) $(CONFIG)
ghc -V
$(CABAL_BIN) build
$(CHECK)
################################################################################
$(SANDBOX):
$(CABAL_BIN) sandbox init
$(if $(CABAL_ADD_SOURCE),$(CABAL_BIN) sandbox add-source $(CABAL_ADD_SOURCE),)
$(CABAL_BIN) install --only-dependencies $(CABAL_FLAGS)
touch $@
################################################################################
$(CONFIG):
make -C . configure
################################################################################
$(TARGET): $(XMINAD)
if [[ ! -e $(dir $@) ]]; then mkdir -p $(dir $@); fi
if [[ -r $@ ]]; then mv $@ [email protected]; fi
cp -p $? $@
if [[ $(notdir $(TARGET)) != xminad ]]; then \
cd $(dir $@) && ln -nfs $(notdir $@) xminad; \
fi