diff --git a/.travis.mk b/.travis.mk
index 9a98991120ffa866c2a788c9ebe3e79249ea6025..eb3d688f15df365f88c21245a9144d8ffbbbdc3f 100644
--- a/.travis.mk
+++ b/.travis.mk
@@ -41,3 +41,20 @@ test_osx: deps_osx
 	ulimit -n
 	make -j8
 	cd test && python test-run.py unit/ app/ app-tap/ box/ box-tap/
+
+coverage: deps_linux
+	sudo apt-get -q -y install lcov
+	cmake . -DCMAKE_BUILD_TYPE=Debug -DENABLE_GCOV=ON
+	make -j8
+	# Enable --long tests for coverage
+	cd test && /usr/bin/python test-run.py --long
+	lcov --compat-libtool --directory src/ --capture --output-file coverage.info.tmp
+	lcov --compat-libtool --remove coverage.info.tmp 'tests/*' 'third_party/*' '/usr/*' \
+		--output-file coverage.info
+	lcov --list coverage.info
+	@if [ -n "$(COVERALLS_TOKEN)" ]; then \
+		echo "Exporting code coverage information to coveralls.io"; \
+		gem install coveralls-lcov; \
+		echo coveralls-lcov --repo-token [FILTERED] coverage.info; \
+		coveralls-lcov -v --repo-token $(COVERALLS_TOKEN) coverage.info; \
+	fi;
diff --git a/.travis.yml b/.travis.yml
index 8752ea1e4bbf318698d85b65afb2cbc1821a9b08..30e5548d3e330c70f8b34efe2316f998df7731be 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -24,6 +24,7 @@ env:
     matrix:
       - TARGET=source
       - TARGET=test
+      - TARGET=coverage
       - OS=el DIST=6
       - OS=el DIST=7
       - OS=fedora DIST=24
@@ -38,6 +39,7 @@ env:
 
 matrix:
     allow_failures:
+      - TARGET=coverage
 #      - env: OS=el DIST=6
 #      - env: OS=el DIST=7
 #      - env: OS=fedora DIST=24
@@ -74,6 +76,8 @@ matrix:
         compiler: clang
       - env: TARGET=source
         compiler: clang
+      - env: TARGET=coverage
+        compiler: clang
       - env: OS=el DIST=6
         os: osx
       - env: OS=el DIST=7
@@ -98,6 +102,8 @@ matrix:
         os: osx
       - env: TARGET=source
         os: osx
+      - env: TARGET=coverage
+        os: osx
       - os: osx
         compiler: gcc