forked from raaz-crypto/raaz
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Makefile
178 lines (132 loc) · 4.39 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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#
# The list of raaz packages to build. The order of listing the
# packages is important as the packages are unregistered in the order
# given below. When in doubt arrange it in the reverse order of
# dependency, i.e if a package foo depends on bar then list foo before
# bar. In any case make sure that raaz-config is the last in this
# list.
PACKAGES= raaz raaz-random raaz-cipher \
raaz-hash raaz-ssh raaz-benchmarks \
raaz-core raaz-modular
ROOTDIR=$(abspath .)
# Do not edit this file beyond this point unless you know what you are
# doing.
# The targets provided by this make file are the following:
.PHONY: install # Installs all the packages.
.PHONY: clean # removes all the packages and cleans up the dirs.
.PHONY: tests # Runs the tests. Assumes that install is already done.
.PHONY: echo-variables # Shows make variables. mainly for debugging
.PHONY: travis-before-install # Sets up the travis environment.
.PHONY: travis-cabal-config # Sets up the travis cabal config file
.PHONY: hlint # runs hlint on the sources
.PHONY: src-tarball # Create source tarballs
.PHONY: scripts # builds the scripts in the scripts directory
.PHONY: tags # create the ctags and etags files
#
# For each package we have a target with the same name and a target
# with the suffix clean. The former builds the package and the latter
# cleans it up. The Makefile.configure should set the variable
# PACKAGES variable and add rules to capture dependencies between the
# package targets (see the comments in Makefile.configure). The
# cleaning targets are auto generated from them.
#
PACKAGE_CLEAN=$(addsuffix -clean, ${PACKAGES})
.PHONY: ${PACKAGE_CLEAN}
# Include the platform specific configurarions from the platform make
# file.
ifdef HASKELL_PLATFORM
include platform/${HASKELL_PLATFORM}/Makefile.configure
endif
# Sets up the cabal config. The directory platform contains the cabal
# config file to use for each platform. Typically you need to put the
# package constraints there. The platform/default.cabal.conf contains
# the default config to use.
# In travis builds you can set particular versions of the compiler. In
# particular, the platform specific Makefile.configure should set the
# appropriate GHC version.
ifdef GHC_VERSION
GHC_PKG=ghc-${GHC_VERSION}
PATH:=/opt/ghc/${GHC_VERSION}/bin:${PATH}
else
GHC_PKG=ghc
endif
ifdef CABAL_VERSION
CABAL_PKG=cabal-install-${CABAL_VERSION}
CABAL=cabal-${CABAL_VERSION}
else
CABAL_PKG=cabal-install
CABAL=cabal
endif
ifeq ($(strip ${PARALLEL_BUILDS}),yes)
PARALLEL_OPTS=-j
else
PARALLEL_OPTS=
endif
# Setting the cabal install DEPENDENCIES
DEPENDENCIES=$(foreach cons, ${PACKAGE_CONSTRAINTS} \
${ADDITIONAL_CONSTRAINTS}\
,--constraint='${cons}' )
# Package tarballs. We install directly from the tarballs
RAAZ_TAR_GZ=$(foreach pkg, ${PACKAGES}, \
$(wildcard ${ROOTDIR}/${pkg}/dist/*.tar.gz))
CABAL_INSTALL= ${CABAL} install ${DEPENDENCIES}
scripts:
make -C scripts all
echo-variables:
@echo Makefile variables.
@echo -e '\t'ghc-pkg,cabal-pkg: ${GHC_PKG} ${CABAL_PKG}
@echo -e '\t'CABAL=${CABAL}
@echo -e '\t'PARALLEL_OPTS=${PARALLEL_OPTS}
@echo -e '\t'GHC_VERSION=${GHC_VERSION}
@echo -e '\t'HASKELL_PLATFORM=${HASKELL_PLATFORM}
@echo -e '\t'PARALLEL_BUILDS=${PARALLEL_BUILDS}
@echo -e '\t'DEPENDENCIES: ${DEPENDENCIES}
@echo -e '\t'RAAZ_TAR_GZ: ${RAAZ_TAR_GZ}
install: src-tarball
${CABAL_INSTALL} ${PARALLEL_OPTS} --enable-tests \
--only-dependencies \
${RAAZ_TAR_GZ}
${CABAL_INSTALL} --enable-tests --enable-benchmarks \
--enable-documentation \
${RAAZ_TAR_GZ}
@echo User packages installed
ghc-pkg list --user
tests:
$(foreach pkg, ${PACKAGES},\
cd ${pkg};\
${CABAL} test;\
cd ..;\
)
src-tarball:
cd raaz-core; \
${CABAL_INSTALL} ${PARALLEL_OPTS} --enable-tests \
--only-dependencies; \
${CABAL} configure;\
cd ..
$(foreach pkg, ${PACKAGES},\
cd ${pkg};\
${CABAL} sdist;\
cd ..;\
)
clean: ${PACKAGE_CLEAN}
${PACKAGE_CLEAN}:
cd $(patsubst %-clean,%,$@);\
./Setup.lhs clean;\
cd ..
-ghc-pkg unregister $(patsubst %-clean,%,$@) --force
#
# Travis platform setup
#
travis-before-install:
@echo System: `uname -a`
sudo add-apt-repository -y ppa:hvr/ghc
sudo apt-get update
sudo apt-get install ${CABAL_PKG} ${GHC_PKG} happy haddock
${CABAL} update
#
# Stuff that checks the coding style
#
hlint:
hlint ${PACKAGES}
tags:
hasktags -b -S".hs,.lhs,hsc" .