Makefile 8.53 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)
8
	COVERAGE_OPTION=-O0 --coverage
9 10 11 12
else
	COVERAGE_OPTION=
endif

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

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

19
test:
20
	$(MAKE) -C algo/tests cleantests
21
	$(MAKE) COVERAGE="$(COVERAGE)" unit   2>&1 | tee algo/tests/out-unit.log
Mikaël Salson's avatar
Mikaël Salson committed
22
	$(MAKE) functional
23
	$(MAKE) test_tools_if_python          2>&1 | tee algo/tests/out-tools.log
24 25
	@echo
	@echo "*** All tests passed. Congratulations !"
26
	@echo
27
	$(MAKE) -C algo/tests snapshot
Mikaël Salson's avatar
Mikaël Salson committed
28

29 30
test_browser: unit_browser functional_browser

31 32
test_server: unit_server

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

36
test_tools:
Mikaël Salson's avatar
Mikaël Salson committed
37
	$(MAKE) -C tools/tests
38

39 40
unit: all
	@echo "*** Launching unit tests..."
Mikaël Salson's avatar
Mikaël Salson committed
41
	$(MAKE) COVERAGE="$(COVERAGE_OPTION)" -C $(VIDJIL_ALGO_SRC)/tests
42
	@echo "*** All unit tests passed"
43

44
functional: all
45 46
	$(MAKE) should     2>&1 | tee algo/tests/out-should-get.log
	$(MAKE) shouldvdj  2>&1 | tee algo/tests/out-should-vdj.log
47

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

54 55
shouldvdj: all
	@echo
56
	$(MAKE) COVERAGE="$(COVERAGE_OPTION)" -C $(VIDJIL_ALGO_SRC)/tests shouldvdj_if_python
57

58
shouldvdj_generate:
59
	@echo
60
	rm -rf data/gen
61
	mkdir -p data/gen
62
	cd germline ; python generate-recombinations.py --random-deletions 8,4:3,1:5,3 --random-insertions 5,4 -e .01
63

64
shouldvdj_generated_kmer: all
65
	@echo
66 67 68 69 70 71
	@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

72
shouldvdj_generated_fine: all
73
	@echo
74 75 76 77 78 79
	@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

80
valgrind_unit:
Mikaël Salson's avatar
Mikaël Salson committed
81
	$(MAKE) -C algo/tests valgrind_tests
82 83

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

86
unit_browser:
Mikaël Salson's avatar
Mikaël Salson committed
87
	$(MAKE) -C browser/test unit
88 89

functional_browser:
Mikaël Salson's avatar
Mikaël Salson committed
90
	$(MAKE) -C browser/test functional
91 92

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

95
unit_server:
Mikaël Salson's avatar
Mikaël Salson committed
96
	$(MAKE) -C server/ unit
97

98 99
### Code coverage

100 101 102
coverage: unit_coverage should_coverage

unit_coverage: clean
Mikaël Salson's avatar
Mikaël Salson committed
103
	$(MAKE) COVERAGE=1 unit
104
should_coverage: clean
Mikaël Salson's avatar
Mikaël Salson committed
105
	$(MAKE) COVERAGE=1 functional
106 107 108 109

### Reports with gcovr

unit_gcovr: unit_coverage
110
	mkdir -p reports
111
	which gcovr > /dev/null && (cd algo;  gcovr -r . -e tests/ --xml > ../reports/unit_coverage.xml) || echo "gcovr is needed to generate a full report"
112
should_gcovr: should_coverage
113
	mkdir -p reports
114
	which gcovr > /dev/null && (cd algo; gcovr -r . -e tests/ --xml > ../reports/should_coverage.xml) || echo "gcovr is needed to generate a full report"
115

116 117 118
### Upload to coveralls.io

unit_coveralls:
119
	coveralls $(COVERALLS_OPTIONS) --exclude release --exclude algo/lib --exclude algo/tests --exclude algo/tools --exclude tests --exclude tools --exclude lib --gcov-options '\-lp'
120
should_coveralls:
121
	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
122

123 124 125 126 127 128 129 130 131

### cppcheck

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

###

Mikaël Salson's avatar
Mikaël Salson committed
132
data germline: %:
Mikaël Salson's avatar
Mikaël Salson committed
133
	$(MAKE) -C $@
Mikaël Salson's avatar
Mikaël Salson committed
134 135

clean:
Mikaël Salson's avatar
Mikaël Salson committed
136
	$(MAKE) -C $(VIDJIL_ALGO_SRC) clean
Mikaël Salson's avatar
Mikaël Salson committed
137 138

cleanall: clean
Mikaël Salson's avatar
Mikaël Salson committed
139 140 141 142
	$(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
143

144
.PHONY: all test should clean cleanall distrib data germline unit_coverage should_coverage coverage
Mikaël Salson's avatar
Mikaël Salson committed
145 146

RELEASE_TAG="notag"
Mathieu Giraud's avatar
Mathieu Giraud committed
147
RELEASE_H = $(VIDJIL_ALGO_SRC)/release.h
148
RELEASE_SOURCE = $(wildcard $(VIDJIL_ALGO_SRC)/*.cpp) $(wildcard $(VIDJIL_ALGO_SRC)/*.h)  $(wildcard $(VIDJIL_ALGO_SRC)/core/*.cpp)  $(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)/lib/*.cpp) $(wildcard $(VIDJIL_ALGO_SRC)/lib/*.h) $(wildcard $(VIDJIL_ALGO_SRC)/lib/*.hpp) $(wildcard tools/*.py)
149
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
150
RELEASE_TESTS =  doc/format-analysis.org data/get-sequences $(wildcard data/*.vidjil) $(wildcard data/*.analysis) $(wildcard data/*.data) $(wildcard data/*.fa) $(wildcard data/*.fq)  $(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
151
RELEASE_GERMLINES = germline/germline_id germline/get-saved-germline germline/get-germline germline/split-from-imgt.py $(wildcard germline/*.data) $(wildcard germline/*/*.data) germline/revcomp-fasta.py germline/fasta.py
152
RELEASE_HELP = doc/algo.org doc/locus.org doc/dev.org doc/should-vdj.org doc/credits.org doc/CHANGELOG  doc/LICENSE
153
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
154 155 156 157 158 159
RELEASE_ARCHIVE = vidjil-$(RELEASE_TAG).tgz

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

160 161 162 163 164 165
# 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
166

Mikaël Salson's avatar
Mikaël Salson committed
167
# $(MAKE) distrib RELEASE_TAG=2013.04alpha
Mikaël Salson's avatar
Mikaël Salson committed
168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184
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
185
	make -C release/$(DIST_DIR)/doc html || true
186

Mikaël Salson's avatar
Mikaël Salson committed
187 188 189 190 191 192 193 194
	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
195 196 197 198 199
	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
200 201


202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226
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
227
	cd release/$(DIST_BROWSER_DIR) && $(MAKE) unit_browser
228 229


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