Home | History | Annotate | Download | only in kmod
      1 SUBDIRS = . libkmod/docs
      2 
      3 if BUILD_MANPAGES
      4 SUBDIRS += man
      5 endif
      6 
      7 DISTCLEAN_LOCAL_HOOKS =
      8 EXTRA_DIST =
      9 CLEANFILES = $(BUILT_FILES)
     10 DISTCLEANFILES =
     11 BUILT_FILES =
     12 ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS}
     13 AM_MAKEFLAGS = --no-print-directory
     14 
     15 GCC_COLORS ?= 'yes'
     16 export GCC_COLORS
     17 
     18 AM_CPPFLAGS = \
     19 	-include $(top_builddir)/config.h \
     20 	-I$(top_srcdir) \
     21 	-DSYSCONFDIR=\""$(sysconfdir)"\" \
     22 	${zlib_CFLAGS}
     23 
     24 AM_CFLAGS = $(OUR_CFLAGS)
     25 AM_LDFLAGS = $(OUR_LDFLAGS)
     26 
     27 SED_PROCESS = \
     28 	$(AM_V_GEN)$(MKDIR_P) $(dir $@) && $(SED) \
     29 	-e 's,@VERSION\@,$(VERSION),g' \
     30 	-e 's,@prefix\@,$(prefix),g' \
     31 	-e 's,@exec_prefix\@,$(exec_prefix),g' \
     32 	-e 's,@libdir\@,$(libdir),g' \
     33 	-e 's,@includedir\@,$(includedir),g' \
     34 	-e 's,@liblzma_CFLAGS\@,${liblzma_CFLAGS},g' \
     35 	-e 's,@liblzma_LIBS\@,${liblzma_LIBS},g' \
     36 	-e 's,@zlib_CFLAGS\@,${zlib_CFLAGS},g' \
     37 	-e 's,@zlib_LIBS\@,${zlib_LIBS},g' \
     38 	-e 's,@openssl_CFLAGS\@,${openssl_CFLAGS},g' \
     39 	-e 's,@openssl_LIBS\@,${openssl_LIBS},g' \
     40 	< $< > $@ || rm $@
     41 
     42 %.pc: %.pc.in Makefile
     43 	$(SED_PROCESS)
     44 
     45 LIBKMOD_CURRENT=5
     46 LIBKMOD_REVISION=4
     47 LIBKMOD_AGE=3
     48 
     49 noinst_LTLIBRARIES = shared/libshared.la
     50 shared_libshared_la_SOURCES = \
     51 	shared/macro.h \
     52 	shared/missing.h \
     53 	shared/array.c \
     54 	shared/array.h \
     55 	shared/hash.c \
     56 	shared/hash.h \
     57 	shared/scratchbuf.c \
     58 	shared/scratchbuf.h \
     59 	shared/strbuf.c \
     60 	shared/strbuf.h \
     61 	shared/util.c \
     62 	shared/util.h
     63 
     64 include_HEADERS = libkmod/libkmod.h
     65 lib_LTLIBRARIES = libkmod/libkmod.la
     66 
     67 libkmod_libkmod_la_SOURCES = \
     68 	libkmod/libkmod.h \
     69 	libkmod/libkmod-internal.h \
     70 	libkmod/libkmod.c \
     71 	libkmod/libkmod-list.c \
     72 	libkmod/libkmod-config.c \
     73 	libkmod/libkmod-index.c \
     74 	libkmod/libkmod-index.h \
     75 	libkmod/libkmod-module.c \
     76 	libkmod/libkmod-file.c \
     77 	libkmod/libkmod-elf.c \
     78 	libkmod/libkmod-signature.c
     79 
     80 EXTRA_DIST += libkmod/libkmod.sym
     81 EXTRA_DIST += libkmod/README \
     82 	libkmod/COPYING testsuite/COPYING tools/COPYING COPYING
     83 
     84 libkmod_libkmod_la_LDFLAGS = $(AM_LDFLAGS) \
     85 	-version-info $(LIBKMOD_CURRENT):$(LIBKMOD_REVISION):$(LIBKMOD_AGE) \
     86 	-Wl,--version-script=$(top_srcdir)/libkmod/libkmod.sym
     87 libkmod_libkmod_la_DEPENDENCIES = \
     88 	shared/libshared.la \
     89 	${top_srcdir}/libkmod/libkmod.sym
     90 libkmod_libkmod_la_LIBADD = \
     91 	shared/libshared.la \
     92 	${liblzma_LIBS} ${zlib_LIBS} ${openssl_LIBS}
     93 
     94 noinst_LTLIBRARIES += libkmod/libkmod-internal.la
     95 libkmod_libkmod_internal_la_SOURCES = $(libkmod_libkmod_la_SOURCES)
     96 libkmod_libkmod_internal_la_LDFLAGS = $(AM_LDFLAGS) \
     97 	-Wl,--version-script=$(top_srcdir)/libkmod/libkmod.sym
     98 libkmod_libkmod_internal_la_DEPENDENCIES  = $(libkmod_libkmod_la_DEPENDENCIES)
     99 libkmod_libkmod_internal_la_LIBADD = $(libkmod_libkmod_la_LIBADD)
    100 
    101 pkgconfigdir = $(libdir)/pkgconfig
    102 pkgconfig_DATA = libkmod/libkmod.pc
    103 EXTRA_DIST += libkmod/libkmod.pc.in
    104 CLEANFILES += libkmod/libkmod.pc
    105 
    106 bashcompletiondir=@bashcompletiondir@
    107 dist_bashcompletion_DATA = \
    108 	shell-completion/bash/kmod
    109 
    110 install-exec-hook:
    111 	if test "$(libdir)" != "$(rootlibdir)"; then \
    112 		$(MKDIR_P) $(DESTDIR)$(rootlibdir) && \
    113 		so_img_name=$$(readlink $(DESTDIR)$(libdir)/libkmod.so) && \
    114 		so_img_rel_target_prefix=$$(echo $(libdir) | sed 's,\(^/\|\)[^/][^/]*,..,g') && \
    115 		ln -sf $$so_img_rel_target_prefix$(rootlibdir)/$$so_img_name $(DESTDIR)$(libdir)/libkmod.so && \
    116 		mv $(DESTDIR)$(libdir)/libkmod.so.* $(DESTDIR)$(rootlibdir); \
    117 	fi
    118 
    119 uninstall-hook:
    120 	rm -f $(DESTDIR)$(rootlibdir)/libkmod.so*
    121 
    122 if BUILD_TOOLS
    123 bin_PROGRAMS = tools/kmod
    124 
    125 noinst_SCRIPTS = \
    126 	tools/insmod tools/rmmod tools/lsmod \
    127 	tools/modprobe tools/modinfo tools/depmod
    128 
    129 tools_kmod_SOURCES = \
    130 	tools/kmod.c tools/kmod.h tools/lsmod.c \
    131 	tools/rmmod.c tools/insmod.c \
    132 	tools/modinfo.c tools/modprobe.c \
    133 	tools/depmod.c tools/log.h tools/log.c \
    134 	tools/static-nodes.c
    135 
    136 if BUILD_EXPERIMENTAL
    137 tools_kmod_SOURCES += \
    138 	tools/insert.c \
    139 	tools/remove.c
    140 endif
    141 
    142 tools_kmod_LDADD = \
    143 	shared/libshared.la \
    144 	libkmod/libkmod-internal.la
    145 
    146 ${noinst_SCRIPTS}: tools/kmod
    147 	$(AM_V_GEN) ($(RM) $@; \
    148 		$(LN_S) $(notdir $<) $@)
    149 endif
    150 
    151 # ------------------------------------------------------------------------------
    152 # PYTHON BINDINGS
    153 # ------------------------------------------------------------------------------
    154 
    155 CYTHON_FLAGS_VERBOSE_ =
    156 CYTHON_FLAGS_VERBOSE_0 =
    157 CYTHON_FLAGS_VERBOSE_1 = -v
    158 CYTHON_FLAGS = $(CYTHON_FLAGS_VERBOSE_$(V))
    159 AM_V_CYTHON = $(am__v_CYTHON_$(V))
    160 am__v_CYTHON_ = $(am__v_CYTHON_$(AM_DEFAULT_VERBOSITY))
    161 am__v_CYTHON_0 = @echo "  CYTHON " $@;
    162 
    163 .pyx.c:
    164 	$(AM_V_CYTHON)$(CYTHON) -o $@ $<
    165 
    166 %.py: %.py.in Makefile
    167 	$(SED_PROCESS)
    168 
    169 # Remove some warnings for generated code
    170 PYTHON_NOWARN = -Wno-redundant-decls -Wno-shadow -Wno-strict-aliasing
    171 
    172 CPYTHON_MODULE_CFLAGS = \
    173 	$(AM_CFLAGS) -DCPYTHON_COMPILING_IN_PYPY=0 \
    174 	$(PYTHON_NOWARN) $(PYTHON_CFLAGS) \
    175 	-fvisibility=default
    176 CPYTHON_MODULE_LDFLAGS = $(AM_LDFLAGS) -module -avoid-version -shared
    177 
    178 if BUILD_PYTHON
    179 pkgpyexec_LTLIBRARIES = \
    180 	libkmod/python/kmod/kmod.la \
    181 	libkmod/python/kmod/list.la \
    182 	libkmod/python/kmod/module.la \
    183 	libkmod/python/kmod/_util.la
    184 
    185 libkmod_python_kmod_kmod_la_SOURCES = libkmod/python/kmod/kmod.c
    186 libkmod_python_kmod_kmod_la_CFLAGS = $(CPYTHON_MODULE_CFLAGS)
    187 libkmod_python_kmod_kmod_la_LDFLAGS = $(CPYTHON_MODULE_LDFLAGS)
    188 libkmod_python_kmod_kmod_la_LIBADD = $(PYTHON_LIBS) libkmod/libkmod.la
    189 
    190 libkmod_python_kmod_list_la_SOURCES = libkmod/python/kmod/list.c
    191 libkmod_python_kmod_list_la_CFLAGS = $(CPYTHON_MODULE_CFLAGS)
    192 libkmod_python_kmod_list_la_LDFLAGS = $(CPYTHON_MODULE_LDFLAGS)
    193 libkmod_python_kmod_list_la_LIBADD = $(PYTHON_LIBS) libkmod/libkmod.la
    194 
    195 libkmod_python_kmod_module_la_SOURCES = libkmod/python/kmod/module.c
    196 libkmod_python_kmod_module_la_CFLAGS = $(CPYTHON_MODULE_CFLAGS)
    197 libkmod_python_kmod_module_la_LDFLAGS = $(CPYTHON_MODULE_LDFLAGS)
    198 libkmod_python_kmod_module_la_LIBADD = $(PYTHON_LIBS) libkmod/libkmod.la
    199 
    200 libkmod_python_kmod__util_la_SOURCES = libkmod/python/kmod/_util.c
    201 libkmod_python_kmod__util_la_CFLAGS = $(CPYTHON_MODULE_CFLAGS)
    202 libkmod_python_kmod__util_la_LDFLAGS = $(CPYTHON_MODULE_LDFLAGS)
    203 libkmod_python_kmod__util_la_LIBADD = $(PYTHON_LIBS) libkmod/libkmod.la
    204 
    205 BUILT_FILES += \
    206 	$(libkmod_python_kmod_kmod_la_SOURCES) \
    207 	$(libkmod_python_kmod_list_la_SOURCES) \
    208 	$(libkmod_python_kmod_module_la_SOURCES) \
    209 	$(libkmod_python_kmod__util_la_SOURCES)
    210 
    211 dist_pkgpyexec_PYTHON = \
    212 	libkmod/python/kmod/error.py \
    213 	libkmod/python/kmod/__init__.py \
    214 	libkmod/python/kmod/version.py
    215 
    216 BUILT_FILES += libkmod/python/kmod/version.py
    217 
    218 endif
    219 # ------------------------------------------------------------------------------
    220 # TESTSUITE
    221 # ------------------------------------------------------------------------------
    222 
    223 EXTRA_DIST += testsuite/populate-modules.sh
    224 
    225 MODULE_PLAYGROUND = testsuite/module-playground
    226 ROOTFS = testsuite/rootfs
    227 ROOTFS_PRISTINE = $(top_srcdir)/testsuite/rootfs-pristine
    228 CREATE_ROOTFS = $(AM_V_GEN) ( $(RM) -rf $(ROOTFS) && mkdir -p $(dir $(ROOTFS)) && \
    229 				cp -r $(ROOTFS_PRISTINE) $(ROOTFS) && \
    230 				find $(ROOTFS) -type d -exec chmod +w {} \; && \
    231 				find $(ROOTFS) -type f -name .gitignore -exec rm -f {} \; && \
    232 				$(top_srcdir)/testsuite/populate-modules.sh \
    233 					$(MODULE_PLAYGROUND) $(ROOTFS) ) && \
    234 				touch testsuite/stamp-rootfs
    235 
    236 build-module-playground:
    237 	$(AM_V_GEN)if test "$(top_srcdir)" != "$(top_builddir)"; then \
    238 		$(RM) -rf testsuite/module-playground && \
    239 		cp -r $(top_srcdir)/$(MODULE_PLAYGROUND) $(top_builddir)/$(MODULE_PLAYGROUND) && \
    240 		find $(top_builddir)/$(MODULE_PLAYGROUND) -type d -exec chmod +w {} \; ; \
    241 		fi
    242 if BUILD_MODULES
    243 	$(MAKE) -C $(MODULE_PLAYGROUND)
    244 else
    245 	$(MAKE) -C $(MODULE_PLAYGROUND) FAKE_BUILD=1
    246 endif
    247 
    248 
    249 rootfs: build-module-playground
    250 	$(CREATE_ROOTFS)
    251 
    252 .PHONY: rootfs build-playground
    253 
    254 $(ROOTFS): $(ROOTFS_PRISTINE)
    255 	$(CREATE_ROOTFS)
    256 
    257 TESTSUITE_OVERRIDE_LIBS = \
    258 	testsuite/uname.la testsuite/path.la \
    259 	testsuite/init_module.la \
    260 	testsuite/delete_module.la
    261 TESTSUITE_OVERRIDE_LIBS_LDFLAGS = \
    262 	avoid-version -module -shared -export-dynamic -rpath /nowhere -ldl
    263 
    264 check-sysconfdir:
    265 	$(AM_V_at)if test "$(sysconfdir)" != "/etc" -a "$(sysconfdir)" != "/etc/"; then \
    266 		echo "warning: Some tests will fail without --sysconfdir=/etc" >&2; \
    267 	fi
    268 .PHONY: check-sysconfdir
    269 
    270 check-am: rootfs check-sysconfdir
    271 
    272 
    273 EXTRA_DIST += \
    274 	testsuite/module-playground/cache \
    275 	testsuite/module-playground/dummy.pkcs7 \
    276 	testsuite/module-playground/dummy.sha1 \
    277 	testsuite/module-playground/dummy.sha256 \
    278 	testsuite/module-playground/Makefile \
    279 	testsuite/module-playground/Makefile.arch \
    280 	testsuite/module-playground/mod-fake-cciss.c \
    281 	testsuite/module-playground/mod-fake-hpsa.c \
    282 	testsuite/module-playground/mod-fake-scsi-mod.c \
    283 	testsuite/module-playground/mod-foo-a.c \
    284 	testsuite/module-playground/mod-foo-b.c \
    285 	testsuite/module-playground/mod-foo.c \
    286 	testsuite/module-playground/mod-foo-c.c \
    287 	testsuite/module-playground/mod-loop-a.c \
    288 	testsuite/module-playground/mod-loop-b.c \
    289 	testsuite/module-playground/mod-loop-c.c \
    290 	testsuite/module-playground/mod-loop-d.c \
    291 	testsuite/module-playground/mod-loop-e.c \
    292 	testsuite/module-playground/mod-loop-f.c \
    293 	testsuite/module-playground/mod-loop-g.c \
    294 	testsuite/module-playground/mod-loop-h.c \
    295 	testsuite/module-playground/mod-loop-i.c \
    296 	testsuite/module-playground/mod-loop-j.c \
    297 	testsuite/module-playground/mod-loop-k.c \
    298 	testsuite/module-playground/mod-loop.h \
    299 	testsuite/module-playground/mod-simple.c \
    300 	testsuite/module-playground/mod-simple-i386.ko \
    301 	testsuite/module-playground/mod-simple-sparc64.ko \
    302 	testsuite/module-playground/mod-simple-x86_64.ko \
    303 	testsuite/module-playground/README
    304 
    305 check_LTLIBRARIES = $(TESTSUITE_OVERRIDE_LIBS)
    306 
    307 testsuite_uname_la_LDFLAGS = $(TESTSUITE_OVERRIDE_LIBS_LDFLAGS)
    308 testsuite_path_la_CPPFLAGS = $(AM_CPPFLAGS) \
    309 	-DABS_TOP_BUILDDIR=\"$(abs_top_builddir)\"
    310 testsuite_path_la_LDFLAGS = $(TESTSUITE_OVERRIDE_LIBS_LDFLAGS)
    311 
    312 testsuite_delete_module_la_LDFLAGS = $(TESTSUITE_OVERRIDE_LIBS_LDFLAGS)
    313 testsuite_init_module_la_LDFLAGS = $(TESTSUITE_OVERRIDE_LIBS_LDFLAGS)
    314 testsuite_init_module_la_SOURCES = testsuite/init_module.c \
    315 				   testsuite/stripped-module.h
    316 testsuite_init_module_la_LIBADD = libkmod/libkmod-internal.la
    317 
    318 TESTSUITE_CPPFLAGS = $(AM_CPPFLAGS) \
    319 	-DTESTSUITE_ROOTFS=\"$(abs_top_builddir)/$(ROOTFS)/\" \
    320 	-DABS_TOP_BUILDDIR=\"$(abs_top_builddir)\"
    321 TESTSUITE_LDADD = \
    322 	testsuite/libtestsuite.la libkmod/libkmod-internal.la \
    323 	shared/libshared.la
    324 
    325 check_LTLIBRARIES += testsuite/libtestsuite.la
    326 testsuite_libtestsuite_la_SOURCES = \
    327 	testsuite/testsuite.c testsuite/testsuite.h
    328 testsuite_libtestsuite_la_DEPENDENCIES = \
    329 	$(ROOTFS) $(TESTSUITE_OVERRIDE_LIBS)
    330 testsuite_libtestsuite_la_CPPFLAGS = $(TESTSUITE_CPPFLAGS)
    331 testsuite_libtestsuite_la_LIBADD = -lrt
    332 
    333 TESTSUITE = \
    334 	testsuite/test-hash \
    335 	testsuite/test-array \
    336 	testsuite/test-scratchbuf \
    337 	testsuite/test-strbuf \
    338 	testsuite/test-init \
    339 	testsuite/test-initstate \
    340 	testsuite/test-testsuite testsuite/test-loaded \
    341 	testsuite/test-modinfo testsuite/test-util testsuite/test-new-module \
    342 	testsuite/test-modprobe testsuite/test-blacklist \
    343 	testsuite/test-dependencies testsuite/test-depmod \
    344 	testsuite/test-list
    345 
    346 if BUILD_EXPERIMENTAL
    347 TESTSUITE += \
    348 	testsuite/test-tools
    349 endif
    350 
    351 check_PROGRAMS = $(TESTSUITE)
    352 TESTS = $(TESTSUITE)
    353 
    354 testsuite_test_testsuite_LDADD = \
    355 	testsuite/libtestsuite.la shared/libshared.la
    356 testsuite_test_testsuite_CPPFLAGS = $(TESTSUITE_CPPFLAGS)
    357 
    358 testsuite_test_hash_LDADD = $(TESTSUITE_LDADD)
    359 testsuite_test_hash_CPPFLAGS = $(TESTSUITE_CPPFLAGS)
    360 
    361 testsuite_test_array_LDADD = $(TESTSUITE_LDADD)
    362 testsuite_test_array_CPPFLAGS = $(TESTSUITE_CPPFLAGS)
    363 
    364 testsuite_test_scratchbuf_LDADD = $(TESTSUITE_LDADD)
    365 testsuite_test_scratchbuf_CPPFLAGS = $(TESTSUITE_CPPFLAGS)
    366 
    367 testsuite_test_strbuf_LDADD = $(TESTSUITE_LDADD)
    368 testsuite_test_strbuf_CPPFLAGS = $(TESTSUITE_CPPFLAGS)
    369 
    370 testsuite_test_init_LDADD = $(TESTSUITE_LDADD)
    371 testsuite_test_init_CPPFLAGS = $(TESTSUITE_CPPFLAGS)
    372 testsuite_test_initstate_LDADD = $(TESTSUITE_LDADD)
    373 testsuite_test_initstate_CPPFLAGS = $(TESTSUITE_CPPFLAGS)
    374 testsuite_test_loaded_LDADD = $(TESTSUITE_LDADD)
    375 testsuite_test_loaded_CPPFLAGS = $(TESTSUITE_CPPFLAGS)
    376 testsuite_test_modinfo_LDADD = $(TESTSUITE_LDADD)
    377 testsuite_test_modinfo_CPPFLAGS = $(TESTSUITE_CPPFLAGS)
    378 testsuite_test_util_LDADD = $(TESTSUITE_LDADD)
    379 testsuite_test_util_CPPFLAGS = $(TESTSUITE_CPPFLAGS)
    380 testsuite_test_new_module_LDADD = $(TESTSUITE_LDADD)
    381 testsuite_test_new_module_CPPFLAGS = $(TESTSUITE_CPPFLAGS)
    382 testsuite_test_modprobe_LDADD = $(TESTSUITE_LDADD)
    383 testsuite_test_modprobe_CPPFLAGS = $(TESTSUITE_CPPFLAGS)
    384 testsuite_test_blacklist_LDADD = $(TESTSUITE_LDADD)
    385 testsuite_test_blacklist_CPPFLAGS = $(TESTSUITE_CPPFLAGS)
    386 testsuite_test_dependencies_LDADD = $(TESTSUITE_LDADD)
    387 testsuite_test_dependencies_CPPFLAGS = $(TESTSUITE_CPPFLAGS)
    388 testsuite_test_depmod_LDADD = $(TESTSUITE_LDADD)
    389 testsuite_test_depmod_CPPFLAGS = $(TESTSUITE_CPPFLAGS)
    390 testsuite_test_list_LDADD = $(TESTSUITE_LDADD)
    391 testsuite_test_list_CPPFLAGS = $(TESTSUITE_CPPFLAGS)
    392 
    393 if BUILD_EXPERIMENTAL
    394 testsuite_test_tools_LDADD = $(TESTSUITE_LDADD)
    395 testsuite_test_tools_CPPFLAGS = $(TESTSUITE_CPPFLAGS)
    396 endif
    397 
    398 testsuite-distclean:
    399 	$(RM) -r $(ROOTFS)
    400 	$(RM) testsuite/stamp-rootfs
    401 	$(MAKE) -C testsuite/module-playground/ clean
    402 	if test "$(top_srcdir)" != "$(top_builddir)"; then \
    403 		$(RM) -rf testsuite/module-playground; \
    404 	fi
    405 
    406 DISTCLEAN_LOCAL_HOOKS += testsuite-distclean
    407 EXTRA_DIST += testsuite/rootfs-pristine
    408 
    409 DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc --enable-python --sysconfdir=/etc \
    410 	--with-zlib --with-openssl \
    411 	--with-bashcompletiondir=$$dc_install_base/$(bashcompletiondir)
    412 
    413 distclean-local: $(DISTCLEAN_LOCAL_HOOKS)
    414 
    415 buildtest-TESTS:
    416 	$(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) $(check_PROGRAMS)
    417 
    418 DISTCLEANFILES += $(DOLT_CLEANFILES)
    419 
    420 # ------------------------------------------------------------------------------
    421 # coverage
    422 # ------------------------------------------------------------------------------
    423 
    424 # .PHONY so it always rebuilds it
    425 .PHONY: coverage lcov-run lcov-report coverage-sync
    426 
    427 # run lcov from scratch, always
    428 coverage: all
    429 	$(MAKE) lcov-run
    430 	$(MAKE) lcov-report
    431 
    432 coverage_dir = coverage
    433 coverage_opts = --base-directory $(srcdir) --directory $(builddir) \
    434 		--rc 'geninfo_adjust_src_path=$(abspath $(srcdir))=>$(abspath $(builddir))'
    435 
    436 if ENABLE_COVERAGE
    437 # reset run coverage tests
    438 lcov-run:
    439 	@rm -rf $(coverage_dir)
    440 	lcov $(coverage_opts) --zerocounters
    441 	-$(MAKE) check
    442 
    443 # generate report based on current coverage data
    444 lcov-report:
    445 	$(MKDIR_P) $(coverage_dir)
    446 	lcov $(coverage_opts) --capture --no-external --ignore-errors graph \
    447 		| sed 's|$(abspath $(builddir))|$(abspath $(srcdir))|' > $(coverage_dir)/.lcov.info
    448 	lcov --remove $(coverage_dir)/.lcov.info --output-file $(coverage_dir)/.lcov-clean.info 'test-*'
    449 	genhtml -t "kmod test coverage" -o $(coverage_dir) $(coverage_dir)/.lcov-clean.info
    450 	@echo "Coverage report generated in $(abs_builddir)/$(coverage_dir)/index.html"
    451 
    452 else
    453 
    454 lcov-run lcov-report:
    455 	echo "Need to reconfigure with --enable-coverage"
    456 
    457 endif
    458 
    459 # ------------------------------------------------------------------------------
    460 # coverity
    461 # ------------------------------------------------------------------------------
    462 
    463 kmod-coverity-%.tar.xz:
    464 	rm -rf $< cov-int
    465 	./autogen.sh c --disable-python --disable-manpages
    466 	make clean
    467 	cov-build --dir cov-int make -j 4
    468 	tar caf $@ cov-int
    469 
    470 coverity-tar: kmod-coverity-$(shell git describe  2>/dev/null).tar.xz
    471 
    472 coverity-sync: kmod-coverity-$(shell git describe 2>/dev/null).tar.xz
    473 	@echo "uploading coverity tarball"
    474 	@curl --form token=$(COVERITY_KMOD_TOKEN) \
    475 		--form email=lucas.de.marchi (a] gmail.com \
    476 		--form file=@$< \
    477 		--form version="$(shell git describe)" \
    478 		--form description="" \
    479 		https://scan.coverity.com/builds?project=kmod
    480 
    481 coverity-clean:
    482 	rm -rf kmod-coverity-*.tar.xz cov-int
    483 
    484 # ------------------------------------------------------------------------------
    485 # custom release helpers
    486 # ------------------------------------------------------------------------------
    487 
    488 git-release:
    489 	head -1 NEWS | grep -q "kmod $(VERSION)"
    490 	git commit -a -m "kmod $(VERSION)"
    491 	git tag -m "kmod $(VERSION)" -s v$(VERSION)
    492 	git gc --prune=0
    493 
    494 kmod-$(VERSION).tar.xz:
    495 	make distcheck
    496 
    497 kmod-$(VERSION).tar.sign:
    498 	xz -d -c kmod-$(VERSION).tar.xz | gpg --armor --detach-sign --output kmod-$(VERSION).tar.sign
    499 
    500 tar: kmod-$(VERSION).tar.xz kmod-$(VERSION).tar.sign
    501 
    502 tar-sync: kmod-$(VERSION).tar.xz kmod-$(VERSION).tar.sign
    503 	kup put kmod-$(VERSION).tar.xz  kmod-$(VERSION).tar.sign /pub/linux/utils/kernel/kmod/
    504 
    505 # ------------------------------------------------------------------------------
    506 # mkosi
    507 # ------------------------------------------------------------------------------
    508 
    509 DISTRO ?= "arch"
    510 
    511 mkosi:
    512 	-$(MKDIR_P) $(top_srcdir)/testsuite/mkosi/mkosi.cache
    513 	$(MKOSI) -C $(top_srcdir)/testsuite/mkosi --build-sources ../../ --default mkosi.${DISTRO} -fi
    514