Makefile 6.43 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:
14
	make COVERAGE="$(COVERAGE_OPTION)" -C $(VIDJIL_ALGO_SRC)
Mikaël Salson's avatar
Mikaël Salson committed
15

16
test:
17
	make COVERAGE="$(COVERAGE)" unit
18
	make should
19
	make shouldvdj
20
	make test_tools
21 22
	@echo
	@echo "*** All tests passed. Congratulations !"
Mikaël Salson's avatar
Mikaël Salson committed
23

24 25
test_browser: unit_browser functional_browser

26 27
test_tools:
	make -C tools/tests
28

29 30
unit: all
	@echo "*** Launching unit tests..."
31
	make COVERAGE="$(COVERAGE_OPTION)" -C $(VIDJIL_ALGO_SRC)/tests
32
	@echo "*** All unit tests passed"
33

Mikaël Salson's avatar
Mikaël Salson committed
34 35 36
should: all
	@echo
	@echo "*** Launching .should_get tests..."
37
	make COVERAGE="$(COVERAGE_OPTION)" -C $(VIDJIL_ALGO_SRC)/tests should
Mikaël Salson's avatar
Mikaël Salson committed
38 39
	@echo "*** All .should_get tests passed"

40 41 42 43 44 45
shouldvdj: all
	@echo
	@echo "*** Launching .should-vdj-fa tests..."
	make COVERAGE="$(COVERAGE_OPTION)" -C $(VIDJIL_ALGO_SRC)/tests shouldvdj
	@echo "*** All .should-vdj.fa tests passed"

46 47 48 49 50 51 52 53 54 55 56 57
shouldvdj_generated: all
	@echo
	mkdir -p data/gen
	cd germline ; python generate-recombinations.py
	@echo
	@echo "*** Launching generated .should-vdj-fa tests (and accepts errors)..."
	-cd data/gen ; python ../../algo/tests/should-vdj-to-tap.py *.should-vdj.fa
	@echo "*** All generated .should-vdj.fa tests finished"
	python algo/tests/tap-stats.py data/gen/0-*.tap
	python algo/tests/tap-stats.py data/gen/5-*.tap
	@echo
	@echo
58 59 60 61 62 63 64 65 66
unit_browser:
	make -C browser/test unit

functional_browser:
	make -C browser/test functional

headless_browser:
	make -C browser/test headless

67 68
### Code coverage

69 70 71 72 73 74
coverage: unit_coverage should_coverage

unit_coverage: clean
	make COVERAGE=1 unit
should_coverage: clean
	make COVERAGE=1 should
75 76 77 78

### Reports with gcovr

unit_gcovr: unit_coverage
79
	mkdir -p reports
80
	which gcovr > /dev/null && (cd algo;  gcovr -r . -e tests/ --xml > ../reports/unit_coverage.xml) || echo "gcovr is needed to generate a full report"
81
should_gcovr: should_coverage
82
	mkdir -p reports
83
	which gcovr > /dev/null && (cd algo; gcovr -r . -e tests/ --xml > ../reports/should_coverage.xml) || echo "gcovr is needed to generate a full report"
84

85 86 87
### Upload to coveralls.io

unit_coveralls:
88
	coveralls --exclude release --exclude algo/lib --exclude algo/tests --exclude algo/tools --exclude tests --exclude tools --exclude lib --gcov-options '\-lp'
89
should_coveralls:
90
	coveralls --exclude release --exclude algo/lib --exclude algo/tests --exclude algo/tools --exclude tests --exclude tools --exclude lib --gcov-options '\-lp' -r algo
91

92 93 94 95 96 97 98 99 100

### cppcheck

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

###

Mikaël Salson's avatar
Mikaël Salson committed
101 102 103 104
data germline: %:
	make -C $@

clean:
Mathieu Giraud's avatar
Mathieu Giraud committed
105
	make -C $(VIDJIL_ALGO_SRC) clean
Mikaël Salson's avatar
Mikaël Salson committed
106 107 108 109 110

cleanall: clean
	make -C data $^
	make -C germline $^

111
.PHONY: all test should clean cleanall distrib data germline unit_coverage should_coverage coverage
Mikaël Salson's avatar
Mikaël Salson committed
112 113

RELEASE_TAG="notag"
Mathieu Giraud's avatar
Mathieu Giraud committed
114
RELEASE_H = $(VIDJIL_ALGO_SRC)/release.h
115 116 117
RELEASE_SOURCE = $(wildcard $(VIDJIL_ALGO_SRC)/*.cpp) $(wildcard $(VIDJIL_ALGO_SRC)/*.h)  $(wildcard $(VIDJIL_ALGO_SRC)/core/*.cpp)  $(wildcard $(VIDJIL_ALGO_SRC)/tests/*.cpp) $(wildcard $(VIDJIL_ALGO_SRC)/core/*.h)  $(wildcard $(VIDJIL_ALGO_SRC)/tests/*.h)  $(wildcard $(VIDJIL_ALGO_SRC)/cgi/*.cpp) $(wildcard $(VIDJIL_ALGO_SRC)/lib/*.cpp) $(wildcard $(VIDJIL_ALGO_SRC)/lib/*.h) $(wildcard tools/*.py)
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/test/Makefile
RELEASE_TESTS =  data/get-sequences $(wildcard data/*.fa) $(wildcard data/*.fq) $(VIDJIL_ALGO_SRC)/tests/should-to-tap.sh $(wildcard $(VIDJIL_ALGO_SRC)/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)
118 119
RELEASE_GERMLINES = germline/germline_id germline/get-saved-germline germline/get-germline germline/split-from-imgt.py
RELEASE_FILES = $(RELEASE_SOURCE) $(RELEASE_TESTS) $(RELEASE_MAKE) $(RELEASE_GERMLINES) doc/algo.org doc/LICENSE data/segmentation.fasta $(wildcard data/*.fa.gz) $(wildcard data/*.label)
Mikaël Salson's avatar
Mikaël Salson committed
120 121 122 123 124 125
RELEASE_ARCHIVE = vidjil-$(RELEASE_TAG).tgz

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

126 127 128 129 130 131
# 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
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

# make distrib RELEASE_TAG=2013.04alpha
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
	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)
	cd release/$(DIST_DIR) && make
	cd release/$(DIST_DIR) && make germline
	cd release/$(DIST_DIR) && make data
	cd release/$(DIST_DIR) && make test


165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192
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)
	cd release/$(DIST_BROWSER_DIR) && make unit_browser


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