Makefile 9.13 KB
Newer Older
Mikaël Salson's avatar
Mikaël Salson committed
1

2
COVERAGE=
Mathieu Giraud's avatar
Mathieu Giraud committed
3
VIDJIL_ALGO_SRC = algo/
4
VIDJIL_BROWSER_SRC = browser/
Mathieu Giraud's avatar
Mathieu Giraud committed
5
6
VIDJIL_SERVER_SRC = server/

7
ifeq (${COVERAGE},1)
Mikaël Salson's avatar
Mikaël Salson committed
8
	COVERAGE_OPTION=--coverage
9
10
11
12
else
	COVERAGE_OPTION=
endif

13
14
TEE = python tools/tee.py -v

Mikaël Salson's avatar
Mikaël Salson committed
15
all:
Mikaël Salson's avatar
Mikaël Salson committed
16
	$(MAKE) COVERAGE="$(COVERAGE_OPTION)" -C $(VIDJIL_ALGO_SRC)
Mikaël Salson's avatar
Mikaël Salson committed
17

18
static:
Mikaël Salson's avatar
Mikaël Salson committed
19
	$(MAKE) all LDFLAGS="-static -static-libstdc++"
20

21
test:
22
	$(MAKE) -C algo/tests cleantests
23
	$(TEE) '$(MAKE) COVERAGE="$(COVERAGE)" unit' algo/tests/out-unit.log
Mikaël Salson's avatar
Mikaël Salson committed
24
	$(MAKE) functional
25
	$(TEE) '$(MAKE) test_tools_if_python'        algo/tests/out-tools.log
26
27
	@echo
	@echo "*** All tests passed. Congratulations !"
28
	@echo
29
	$(MAKE) -C algo/tests snapshot_success
30
	$(MAKE) -C algo/tests mark_failed_tests_as_todo
Mikaël Salson's avatar
Mikaël Salson committed
31

32
33
34
snapshot_diff:
	$(MAKE) -C algo/tests snapshot_diff

35
36
37
snapshot_diff_current:
	$(MAKE) -C algo/tests snapshot_diff_current

38

39
40
test_browser: unit_browser functional_browser

41
42
test_server: unit_server

43
test_tools_if_python:
44
	@((python tools/check_python_version.py && $(MAKE) test_tools) || (python tools/check_python_version.py || echo "!!! Bad python version, we skip tools tests..."))
45

46
test_tools:
Mikaël Salson's avatar
Mikaël Salson committed
47
	$(MAKE) -C tools/tests
48

49
50
unit: all
	@echo "*** Launching unit tests..."
Mikaël Salson's avatar
Mikaël Salson committed
51
	$(MAKE) COVERAGE="$(COVERAGE_OPTION)" -C $(VIDJIL_ALGO_SRC)/tests
52
	@echo "*** All unit tests passed"
53

54
functional: all
55
56
	$(TEE) '$(MAKE) should'      algo/tests/out-should-get.log
	$(TEE) '$(MAKE) shouldvdj'   algo/tests/out-should-vdj.log
57

Mikaël Salson's avatar
Mikaël Salson committed
58
59
60
should: all
	@echo
	@echo "*** Launching .should_get tests..."
Mikaël Salson's avatar
Mikaël Salson committed
61
	$(MAKE) COVERAGE="$(COVERAGE_OPTION)" -C $(VIDJIL_ALGO_SRC)/tests should
Mikaël Salson's avatar
Mikaël Salson committed
62
63
	@echo "*** All .should_get tests passed"

64
65
shouldvdj: all
	@echo
66
	$(MAKE) COVERAGE="$(COVERAGE_OPTION)" -C $(VIDJIL_ALGO_SRC)/tests shouldvdj_if_python
67

68
shouldvdj_generate:
69
	@echo
70
	rm -rf data/gen
71
	mkdir -p data/gen
72
	cd germline ; python generate-recombinations.py --random-deletions 8,4:3,1:5,3 --random-insertions 5,4 -e .01
73

74
shouldvdj_generated_kmer: all
75
	@echo
76
77
78
79
80
81
	@echo "*** Launching generated .should-vdj-fa tests (and accepts errors) -- Kmer"
	-cd data/gen ; python ../../algo/tests/should-vdj-to-tap.py -2q *.should-vdj.fa
	@echo "*** Generated .should-vdj.fa tests finished -- Kmer"
	python algo/tests/tap-stats.py data/gen/0-*.2.tap
	python algo/tests/tap-stats.py data/gen/5-*.2.tap

82
shouldvdj_generated_fine: all
83
	@echo
84
85
86
87
88
89
	@echo "*** Launching generated .should-vdj-fa tests (and accepts errors) -- Fine"
	-cd data/gen ; python ../../algo/tests/should-vdj-to-tap.py *.should-vdj.fa
	@echo "*** Generated .should-vdj.fa tests finished -- Fine"
	python algo/tests/tap-stats.py data/gen/0-*.1.tap
	python algo/tests/tap-stats.py data/gen/5-*.1.tap

90
valgrind_unit:
Mikaël Salson's avatar
Mikaël Salson committed
91
	$(MAKE) -C algo/tests valgrind_tests
92
93

valgrind_should:
Mikaël Salson's avatar
Mikaël Salson committed
94
	$(MAKE) -C algo/tests valgrind_should
95

96
unit_browser:
Mikaël Salson's avatar
Mikaël Salson committed
97
	$(MAKE) -C browser/test unit
98
99

functional_browser:
Mikaël Salson's avatar
Mikaël Salson committed
100
	$(MAKE) -C browser/test functional
101
102

headless_browser:
Mikaël Salson's avatar
Mikaël Salson committed
103
	$(MAKE) -C browser/test headless
104

105
unit_server:
Mikaël Salson's avatar
Mikaël Salson committed
106
	$(MAKE) -C server/ unit
107

108
109
### Code coverage

110
111
112
coverage: unit_coverage should_coverage

unit_coverage: clean
Mikaël Salson's avatar
Mikaël Salson committed
113
	$(MAKE) COVERAGE=1 unit
114
should_coverage: clean
Mikaël Salson's avatar
Mikaël Salson committed
115
	$(MAKE) COVERAGE=1 functional
116
117
118
119

### Reports with gcovr

unit_gcovr: unit_coverage
120
	mkdir -p reports
121
	which gcovr > /dev/null && (cd algo;  gcovr -r . -e tests/ --xml > ../reports/unit_coverage.xml) || echo "gcovr is needed to generate a full report"
122
should_gcovr: should_coverage
123
	mkdir -p reports
124
	which gcovr > /dev/null && (cd algo; gcovr -r . -e tests/ --xml > ../reports/should_coverage.xml) || echo "gcovr is needed to generate a full report"
125

126
127
128
### Upload to coveralls.io

unit_coveralls:
129
	coveralls $(COVERALLS_OPTIONS) --exclude release --exclude algo/lib --exclude algo/tests --exclude algo/tools --exclude tests --exclude tools --exclude lib --gcov-options '\-lp'
130
should_coveralls:
131
	coveralls $(COVERALLS_OPTIONS) --exclude release --exclude algo/lib --exclude algo/tests --exclude algo/tools --exclude tests --exclude tools --exclude lib --gcov-options '\-lp' -r algo
132

133
134
135
136
137
138
139
140
141

### cppcheck

cppcheck:
	mkdir -p reports
	cppcheck --enable=all --xml . 2>! reports/cppcheck.xml

###

142
data germline browser server: %:
Mikaël Salson's avatar
Mikaël Salson committed
143
	$(MAKE) -C $@
Mikaël Salson's avatar
Mikaël Salson committed
144
145

clean:
Mikaël Salson's avatar
Mikaël Salson committed
146
	$(MAKE) -C $(VIDJIL_ALGO_SRC) clean
Mikaël Salson's avatar
Mikaël Salson committed
147
148

cleanall: clean
Mikaël Salson's avatar
Mikaël Salson committed
149
150
151
152
	$(MAKE) -C data $^
	$(MAKE) -C germline $^
	$(MAKE) -C $(VIDJIL_ALGO_SRC) cleanall
	$(MAKE) -C server cleanall
Mikaël Salson's avatar
Mikaël Salson committed
153

Mikaël Salson's avatar
Mikaël Salson committed
154
.PHONY: all test should clean cleanall distrib data germline unit_coverage should_coverage coverage data germline browser server doc
Mikaël Salson's avatar
Mikaël Salson committed
155
156

RELEASE_TAG="notag"
Mathieu Giraud's avatar
Mathieu Giraud committed
157
RELEASE_H = $(VIDJIL_ALGO_SRC)/release.h
158
RELEASE_SOURCE = $(wildcard $(VIDJIL_ALGO_SRC)/*.cpp) $(wildcard $(VIDJIL_ALGO_SRC)/*.h)  $(wildcard $(VIDJIL_ALGO_SRC)/core/*.cpp) $(wildcard $(VIDJIL_ALGO_SRC)/core/*.hpp)  $(wildcard $(VIDJIL_ALGO_SRC)/tests/unit-tests/*.cpp) $(wildcard $(VIDJIL_ALGO_SRC)/core/*.h)  $(wildcard $(VIDJIL_ALGO_SRC)/tests/unit-tests/*.h)  $(wildcard $(VIDJIL_ALGO_SRC)/cgi/*.cpp) $(wildcard $(VIDJIL_ALGO_SRC)/tools/*.cpp) $(wildcard $(VIDJIL_ALGO_SRC)/tools/Makefile)  $(wildcard $(VIDJIL_ALGO_SRC)/lib/*.cpp) $(wildcard $(VIDJIL_ALGO_SRC)/lib/*.h) $(wildcard $(VIDJIL_ALGO_SRC)/lib/*.hpp) $(wildcard $(VIDJIL_ALGO_SRC)/lib/unbam/*.c)  $(wildcard $(VIDJIL_ALGO_SRC)/lib/unbam/*.h)  $(wildcard $(VIDJIL_ALGO_SRC)/lib/unbam/Makefile) $(wildcard $(VIDJIL_ALGO_SRC)/lib/unbam/LICENSE) $(wildcard tools/*.py)
159
RELEASE_MAKE = ./Makefile  $(VIDJIL_ALGO_SRC)/Makefile  $(VIDJIL_ALGO_SRC)/core/Makefile $(VIDJIL_ALGO_SRC)/tests/Makefile $(VIDJIL_ALGO_SRC)/lib/Makefile germline/Makefile data/Makefile tools/tests/Makefile doc/Makefile
160
RELEASE_TESTS =  doc/format-analysis.org data/get-sequences $(wildcard data/*.vidjil) $(wildcard data/*.analysis) $(wildcard data/*.g) $(wildcard data/*.fa) $(wildcard data/*.fq) $(wildcard data/*.bam) $(VIDJIL_ALGO_SRC)/tests/repseq_vdj.py   $(VIDJIL_ALGO_SRC)/tests/should-vdj-to-tap.py $(VIDJIL_ALGO_SRC)/tests/ansi.py $(wildcard $(VIDJIL_ALGO_SRC)/tests/should-vdj-tests/*.should-vdj.fa) $(wildcard $(VIDJIL_ALGO_SRC)/tests/should-vdj-tests/*.should-locus.fa) $(VIDJIL_ALGO_SRC)/tests/should-to-tap.sh $(wildcard $(VIDJIL_ALGO_SRC)/tests/should-get-tests/*.should-get) $(wildcard $(VIDJIL_ALGO_SRC)/tests/bugs/*.fa)  $(wildcard $(VIDJIL_ALGO_SRC)/tests/bugs/*.should-get) $(VIDJIL_ALGO_SRC)/tests/format-json.sh $(wildcard doc/analysis-example.vidjil) $(wildcard tools/tests/*.should_get) tools/tests/should-to-tap.sh tools/diff_json.sh
161
RELEASE_GERMLINES = germline/germline_id germline/get-saved-germline germline/get-germline germline/split-from-imgt.py $(wildcard germline/*.g) germline/revcomp-fasta.py germline/fasta.py
162
RELEASE_HELP = doc/algo.org doc/locus.org doc/dev.org doc/should-vdj.org doc/credits.org doc/CHANGELOG  doc/LICENSE README.org INSTALL.org
163
RELEASE_FILES = $(RELEASE_SOURCE) $(RELEASE_TESTS) $(RELEASE_MAKE) $(RELEASE_GERMLINES) $(RELEASE_HELP) data/segmentation.fasta $(wildcard data/*.fa.gz) $(wildcard data/*.label)
Mikaël Salson's avatar
Mikaël Salson committed
164
165
166
167
168
169
RELEASE_ARCHIVE = vidjil-$(RELEASE_TAG).tgz

CURRENT_DIR = vidjil
DIST_DIR=$(CURRENT_DIR)-$(RELEASE_TAG)
RELEASE_FILES_VID = $(RELEASE_FILES)

170
171
172
173
174
175
# Browser
RELEASE_JS = $(VIDJIL_BROWSER_SRC)/js/release.js
RELEASE_BROWSER_ARCHIVE = vidjil-browser-$(RELEASE_TAG).tgz
DIST_BROWSER_DIR=vidjil-browser-$(RELEASE_TAG)
TEST_FILES_BROWSER= Makefile $(VIDJIL_BROWSER_SRC)/test/Makefile $(wildcard $(VIDJIL_BROWSER_SRC)/test/*.rb) $(wildcard $(VIDJIL_BROWSER_SRC)/test/QUnit/*)  $(wildcard $(VIDJIL_BROWSER_SRC)/test/QUnit/testFiles/*.js)
RELEASE_FILES_BROWSER=$(TEST_FILES_BROWSER) $(wildcard $(VIDJIL_BROWSER_SRC)/*.html) $(wildcard $(VIDJIL_BROWSER_SRC)/js/*.js) $(wildcard $(VIDJIL_BROWSER_SRC)/js/lib/*.js) $(wildcard $(VIDJIL_BROWSER_SRC)/css/*.css) 
Mikaël Salson's avatar
Mikaël Salson committed
176

Mikaël Salson's avatar
Mikaël Salson committed
177
# $(MAKE) distrib RELEASE_TAG=2013.04alpha
Mikaël Salson's avatar
Mikaël Salson committed
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
distrib:	
	$(info ==== Release $(RELEASE_TAG) ====)

	# Tag the release
	if test "$(RELEASE_TAG)" != "notag"; then \
		git tag -f release-$(RELEASE_TAG); \
		echo '#define RELEASE_TAG "$(RELEASE_TAG)"' > $(RELEASE_H); \
	fi

	mkdir -p release 
	rm -rf release/$(RELEASE_ARCHIVE) release/$(DIST_DIR)
	mkdir -p release/$(DIST_DIR)
	for file in  $(RELEASE_FILES_VID); do\
		dir=release/$(DIST_DIR)/`dirname "$$file"`;	\
		mkdir -p $$dir;	\
		cp "$$file" $$dir;	\
	done
195
	make -C release/$(DIST_DIR)/doc html || true
196

Mikaël Salson's avatar
Mikaël Salson committed
197
198
199
200
201
202
203
204
	cd release && tar cvzf  $(RELEASE_ARCHIVE) $(DIST_DIR) \
	&& rm -rf $(DIST_DIR)

	# Untag the source
	rm -f $(RELEASE_H) ; touch $(RELEASE_H)

	# Check archive
	cd release && tar xvfz $(RELEASE_ARCHIVE)
Mikaël Salson's avatar
Mikaël Salson committed
205
206
207
208
209
	cd release/$(DIST_DIR) && $(MAKE)
	cd release/$(DIST_DIR) && $(MAKE) germline
	cd release/$(DIST_DIR) && $(MAKE) data
	cd release/$(DIST_DIR) && $(MAKE) test
	cd release/$(DIST_DIR) && $(MAKE) clean && $(MAKE) static && mv vidjil vidjil-$(RELEASE_TAG)_`uname -m`
Mikaël Salson's avatar
Mikaël Salson committed
210
211


212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
release_browser:
	$(info ==== Browser Release $(RELEASE_TAG) ====)

	# Tag the release
	if test "$(RELEASE_TAG)" != "notag"; then \
		git tag -f release-$(RELEASE_TAG); \
		echo 'RELEASE_TAG = "$(RELEASE_TAG)"' > $(RELEASE_JS); \
	fi

	mkdir -p release 
	rm -rf release/$(RELEASE_BROWSER_ARCHIVE) release/$(DIST_BROWSER_DIR)
	mkdir -p release/$(DIST_BROWSER_DIR)
	for file in  $(RELEASE_FILES_BROWSER); do\
		dir=release/$(DIST_BROWSER_DIR)/`dirname "$$file"`;	\
		mkdir -p $$dir;	\
		cp "$$file" $$dir;	\
	done
	cd release && tar cvzf  $(RELEASE_BROWSER_ARCHIVE) $(DIST_BROWSER_DIR) \
	&& rm -rf $(DIST_BROWSER_DIR)

	# Untag the source
	rm -f $(RELEASE_JS) ; touch $(RELEASE_JS)

	# Check archive
	cd release && tar xvfz $(RELEASE_BROWSER_ARCHIVE)
Mikaël Salson's avatar
Mikaël Salson committed
237
	cd release/$(DIST_BROWSER_DIR) && $(MAKE) unit_browser
238
239


Mikaël Salson's avatar
Mikaël Salson committed
240