1SUBDIRS = . libkmod/docs 2 3if BUILD_MANPAGES 4SUBDIRS += man 5endif 6 7DISTCLEAN_LOCAL_HOOKS = 8EXTRA_DIST = 9CLEANFILES = $(BUILT_FILES) 10DISTCLEANFILES = 11BUILT_FILES = 12ACLOCAL_AMFLAGS = -I m4 ${ACLOCAL_FLAGS} 13AM_MAKEFLAGS = --no-print-directory 14 15GCC_COLORS ?= 'yes' 16export GCC_COLORS 17 18AM_CPPFLAGS = \ 19 -include $(top_builddir)/config.h \ 20 -I$(top_srcdir) \ 21 -DSYSCONFDIR=\""$(sysconfdir)"\" \ 22 -DDISTCONFDIR=\""$(distconfdir)"\" \ 23 -DMODULE_DIRECTORY=\""$(module_directory)"\" \ 24 ${zlib_CFLAGS} 25 26AM_CFLAGS = $(OUR_CFLAGS) 27AM_LDFLAGS = $(OUR_LDFLAGS) 28 29# Rules for libtool versioning (from https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html) 30# 1. Start with version information of ‘0:0:0’ for each libtool library. 31# 2. Update the version information only immediately before a public release of 32# your software. More frequent updates are unnecessary, and only guarantee that 33# the current interface number gets larger faster. 34# 3. If the library source code has changed at all since the last update, then 35# increment revision (‘c:r:a’ becomes ‘c:r+1:a’). 36# 4. If any interfaces have been added, removed, or changed since the last 37# update, increment current, and set revision to 0. 38# 5. If any interfaces have been added since the last public release, then 39# increment age. 40# 6. If any interfaces have been removed or changed since the last public 41# release, then set age to 0. 42LIBKMOD_CURRENT=6 43LIBKMOD_REVISION=2 44LIBKMOD_AGE=4 45 46noinst_LTLIBRARIES = shared/libshared.la 47shared_libshared_la_SOURCES = \ 48 shared/macro.h \ 49 shared/missing.h \ 50 shared/array.c \ 51 shared/array.h \ 52 shared/hash.c \ 53 shared/hash.h \ 54 shared/scratchbuf.c \ 55 shared/scratchbuf.h \ 56 shared/strbuf.c \ 57 shared/strbuf.h \ 58 shared/util.c \ 59 shared/util.h 60 61include_HEADERS = libkmod/libkmod.h 62lib_LTLIBRARIES = libkmod/libkmod.la 63 64libkmod_libkmod_la_SOURCES = \ 65 libkmod/libkmod.h \ 66 libkmod/libkmod-internal.h \ 67 libkmod/libkmod.c \ 68 libkmod/libkmod-builtin.c \ 69 libkmod/libkmod-list.c \ 70 libkmod/libkmod-config.c \ 71 libkmod/libkmod-index.c \ 72 libkmod/libkmod-index.h \ 73 libkmod/libkmod-module.c \ 74 libkmod/libkmod-file.c \ 75 libkmod/libkmod-elf.c \ 76 libkmod/libkmod-signature.c 77 78EXTRA_DIST += libkmod/libkmod.sym 79EXTRA_DIST += libkmod/README \ 80 libkmod/COPYING testsuite/COPYING tools/COPYING COPYING 81 82libkmod_libkmod_la_LDFLAGS = $(AM_LDFLAGS) \ 83 -version-info $(LIBKMOD_CURRENT):$(LIBKMOD_REVISION):$(LIBKMOD_AGE) \ 84 -Wl,--version-script=$(top_srcdir)/libkmod/libkmod.sym 85libkmod_libkmod_la_DEPENDENCIES = \ 86 shared/libshared.la \ 87 ${top_srcdir}/libkmod/libkmod.sym 88libkmod_libkmod_la_LIBADD = \ 89 shared/libshared.la \ 90 ${libzstd_LIBS} ${liblzma_LIBS} ${zlib_LIBS} ${libcrypto_LIBS} 91 92noinst_LTLIBRARIES += libkmod/libkmod-internal.la 93libkmod_libkmod_internal_la_SOURCES = $(libkmod_libkmod_la_SOURCES) 94libkmod_libkmod_internal_la_LDFLAGS = $(AM_LDFLAGS) \ 95 -Wl,--version-script=$(top_srcdir)/libkmod/libkmod.sym 96libkmod_libkmod_internal_la_DEPENDENCIES = $(libkmod_libkmod_la_DEPENDENCIES) 97libkmod_libkmod_internal_la_LIBADD = $(libkmod_libkmod_la_LIBADD) 98 99pkgconfigdir = $(libdir)/pkgconfig 100pkgconfig_DATA = libkmod/libkmod.pc tools/kmod.pc 101 102bashcompletiondir=@bashcompletiondir@ 103dist_bashcompletion_DATA = \ 104 shell-completion/bash/kmod 105 106install-exec-hook: 107 if test "$(libdir)" != "$(rootlibdir)"; then \ 108 $(MKDIR_P) $(DESTDIR)$(rootlibdir) && \ 109 so_img_name=$$(readlink $(DESTDIR)$(libdir)/libkmod.so) && \ 110 so_img_rel_target_prefix=$$(echo $(libdir) | sed 's,\(^/\|\)[^/][^/]*,..,g') && \ 111 ln -sf $$so_img_rel_target_prefix$(rootlibdir)/$$so_img_name $(DESTDIR)$(libdir)/libkmod.so && \ 112 mv $(DESTDIR)$(libdir)/libkmod.so.* $(DESTDIR)$(rootlibdir); \ 113 fi 114if BUILD_TOOLS 115 for tool in insmod lsmod rmmod depmod modprobe modinfo; do \ 116 $(LN_S) kmod $(DESTDIR)$(bindir)/$$tool; \ 117 done 118endif 119 120uninstall-hook: 121 rm -f $(DESTDIR)$(rootlibdir)/libkmod.so* 122if BUILD_TOOLS 123 for tool in insmod lsmod rmmod depmod modprobe modinfo; do \ 124 rm -f $(DESTDIR)$(bindir)/$$tool; \ 125 done 126endif 127 128if BUILD_TOOLS 129bin_PROGRAMS = tools/kmod 130 131noinst_SCRIPTS = \ 132 tools/insmod tools/rmmod tools/lsmod \ 133 tools/modprobe tools/modinfo tools/depmod 134 135tools_kmod_SOURCES = \ 136 tools/kmod.c tools/kmod.h tools/lsmod.c \ 137 tools/rmmod.c tools/insmod.c \ 138 tools/modinfo.c tools/modprobe.c \ 139 tools/depmod.c tools/log.h tools/log.c \ 140 tools/static-nodes.c 141 142tools_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 $<) $@) 149endif 150 151# ------------------------------------------------------------------------------ 152# TESTSUITE 153# ------------------------------------------------------------------------------ 154 155EXTRA_DIST += testsuite/setup-rootfs.sh 156 157MODULE_PLAYGROUND = testsuite/module-playground 158ROOTFS = testsuite/rootfs 159ROOTFS_PRISTINE = $(top_srcdir)/testsuite/rootfs-pristine 160CREATE_ROOTFS = $(AM_V_GEN) MODULE_DIRECTORY=$(module_directory) $(top_srcdir)/testsuite/setup-rootfs.sh $(ROOTFS_PRISTINE) $(ROOTFS) $(MODULE_PLAYGROUND) $(top_builddir)/config.h $(sysconfdir) 161 162build-module-playground: 163 $(AM_V_GEN)if test "$(top_srcdir)" != "$(top_builddir)"; then \ 164 $(RM) -rf testsuite/module-playground && \ 165 mkdir -p testsuite/ && \ 166 cp -r $(top_srcdir)/$(MODULE_PLAYGROUND) $(top_builddir)/$(MODULE_PLAYGROUND) && \ 167 find $(top_builddir)/$(MODULE_PLAYGROUND) -type d -exec chmod +w {} \; ; \ 168 fi 169if BUILD_MODULES 170 $(MAKE) -C $(MODULE_PLAYGROUND) 171else 172 $(MAKE) -C $(MODULE_PLAYGROUND) FAKE_BUILD=1 173endif 174 175 176rootfs: build-module-playground 177 $(CREATE_ROOTFS) 178 179.PHONY: rootfs build-playground 180 181$(ROOTFS): $(ROOTFS_PRISTINE) 182 $(CREATE_ROOTFS) 183 184TESTSUITE_OVERRIDE_LIBS = \ 185 testsuite/uname.la testsuite/path.la \ 186 testsuite/init_module.la \ 187 testsuite/delete_module.la 188TESTSUITE_OVERRIDE_LIBS_LDFLAGS = \ 189 avoid-version -module -shared -export-dynamic -rpath /nowhere -ldl 190 191check-am: rootfs 192 193 194EXTRA_DIST += \ 195 testsuite/module-playground/cache \ 196 testsuite/module-playground/dummy.pkcs7 \ 197 testsuite/module-playground/dummy.sha1 \ 198 testsuite/module-playground/dummy.sha256 \ 199 testsuite/module-playground/Makefile \ 200 testsuite/module-playground/Makefile.arch \ 201 testsuite/module-playground/mod-fake-cciss.c \ 202 testsuite/module-playground/mod-fake-hpsa.c \ 203 testsuite/module-playground/mod-fake-scsi-mod.c \ 204 testsuite/module-playground/mod-foo-a.c \ 205 testsuite/module-playground/mod-foo-b.c \ 206 testsuite/module-playground/mod-foo.c \ 207 testsuite/module-playground/mod-foo-c.c \ 208 testsuite/module-playground/mod-loop-a.c \ 209 testsuite/module-playground/mod-loop-b.c \ 210 testsuite/module-playground/mod-loop-c.c \ 211 testsuite/module-playground/mod-loop-d.c \ 212 testsuite/module-playground/mod-loop-e.c \ 213 testsuite/module-playground/mod-loop-f.c \ 214 testsuite/module-playground/mod-loop-g.c \ 215 testsuite/module-playground/mod-loop-h.c \ 216 testsuite/module-playground/mod-loop-i.c \ 217 testsuite/module-playground/mod-loop-j.c \ 218 testsuite/module-playground/mod-loop-k.c \ 219 testsuite/module-playground/mod-loop.h \ 220 testsuite/module-playground/mod-simple.c \ 221 testsuite/module-playground/mod-simple-i386.ko \ 222 testsuite/module-playground/mod-simple-sparc64.ko \ 223 testsuite/module-playground/mod-simple-x86_64.ko \ 224 testsuite/module-playground/README 225 226check_LTLIBRARIES = $(TESTSUITE_OVERRIDE_LIBS) 227 228testsuite_uname_la_LDFLAGS = $(TESTSUITE_OVERRIDE_LIBS_LDFLAGS) 229testsuite_path_la_CPPFLAGS = $(AM_CPPFLAGS) \ 230 -DABS_TOP_BUILDDIR=\"$(abs_top_builddir)\" 231testsuite_path_la_LDFLAGS = $(TESTSUITE_OVERRIDE_LIBS_LDFLAGS) 232 233testsuite_delete_module_la_LDFLAGS = $(TESTSUITE_OVERRIDE_LIBS_LDFLAGS) 234testsuite_init_module_la_LDFLAGS = $(TESTSUITE_OVERRIDE_LIBS_LDFLAGS) 235testsuite_init_module_la_SOURCES = testsuite/init_module.c \ 236 testsuite/stripped-module.h 237testsuite_init_module_la_LIBADD = libkmod/libkmod-internal.la 238 239TESTSUITE_CPPFLAGS = $(AM_CPPFLAGS) \ 240 -DTESTSUITE_ROOTFS=\"$(abs_top_builddir)/$(ROOTFS)/\" \ 241 -DABS_TOP_BUILDDIR=\"$(abs_top_builddir)\" 242TESTSUITE_LDADD = \ 243 testsuite/libtestsuite.la libkmod/libkmod-internal.la \ 244 shared/libshared.la 245 246check_LTLIBRARIES += testsuite/libtestsuite.la 247testsuite_libtestsuite_la_SOURCES = \ 248 testsuite/testsuite.c testsuite/testsuite.h 249testsuite_libtestsuite_la_DEPENDENCIES = \ 250 $(ROOTFS) $(TESTSUITE_OVERRIDE_LIBS) 251testsuite_libtestsuite_la_CPPFLAGS = $(TESTSUITE_CPPFLAGS) 252testsuite_libtestsuite_la_LIBADD = -lrt 253 254TESTSUITE = \ 255 testsuite/test-hash \ 256 testsuite/test-array \ 257 testsuite/test-scratchbuf \ 258 testsuite/test-strbuf \ 259 testsuite/test-init \ 260 testsuite/test-initstate \ 261 testsuite/test-testsuite testsuite/test-loaded \ 262 testsuite/test-modinfo testsuite/test-util testsuite/test-new-module \ 263 testsuite/test-modprobe testsuite/test-blacklist \ 264 testsuite/test-dependencies testsuite/test-depmod \ 265 testsuite/test-list 266 267check_PROGRAMS = $(TESTSUITE) 268TESTS = $(TESTSUITE) 269 270testsuite_test_testsuite_LDADD = \ 271 testsuite/libtestsuite.la shared/libshared.la 272testsuite_test_testsuite_CPPFLAGS = $(TESTSUITE_CPPFLAGS) 273 274testsuite_test_hash_LDADD = $(TESTSUITE_LDADD) 275testsuite_test_hash_CPPFLAGS = $(TESTSUITE_CPPFLAGS) 276 277testsuite_test_array_LDADD = $(TESTSUITE_LDADD) 278testsuite_test_array_CPPFLAGS = $(TESTSUITE_CPPFLAGS) 279 280testsuite_test_scratchbuf_LDADD = $(TESTSUITE_LDADD) 281testsuite_test_scratchbuf_CPPFLAGS = $(TESTSUITE_CPPFLAGS) 282 283testsuite_test_strbuf_LDADD = $(TESTSUITE_LDADD) 284testsuite_test_strbuf_CPPFLAGS = $(TESTSUITE_CPPFLAGS) 285 286testsuite_test_init_LDADD = $(TESTSUITE_LDADD) 287testsuite_test_init_CPPFLAGS = $(TESTSUITE_CPPFLAGS) 288testsuite_test_initstate_LDADD = $(TESTSUITE_LDADD) 289testsuite_test_initstate_CPPFLAGS = $(TESTSUITE_CPPFLAGS) 290testsuite_test_loaded_LDADD = $(TESTSUITE_LDADD) 291testsuite_test_loaded_CPPFLAGS = $(TESTSUITE_CPPFLAGS) 292testsuite_test_modinfo_LDADD = $(TESTSUITE_LDADD) 293testsuite_test_modinfo_CPPFLAGS = $(TESTSUITE_CPPFLAGS) 294testsuite_test_util_LDADD = $(TESTSUITE_LDADD) 295testsuite_test_util_CPPFLAGS = $(TESTSUITE_CPPFLAGS) 296testsuite_test_new_module_LDADD = $(TESTSUITE_LDADD) 297testsuite_test_new_module_CPPFLAGS = $(TESTSUITE_CPPFLAGS) 298testsuite_test_modprobe_LDADD = $(TESTSUITE_LDADD) 299testsuite_test_modprobe_CPPFLAGS = $(TESTSUITE_CPPFLAGS) 300testsuite_test_blacklist_LDADD = $(TESTSUITE_LDADD) 301testsuite_test_blacklist_CPPFLAGS = $(TESTSUITE_CPPFLAGS) 302testsuite_test_dependencies_LDADD = $(TESTSUITE_LDADD) 303testsuite_test_dependencies_CPPFLAGS = $(TESTSUITE_CPPFLAGS) 304testsuite_test_depmod_LDADD = $(TESTSUITE_LDADD) 305testsuite_test_depmod_CPPFLAGS = $(TESTSUITE_CPPFLAGS) 306testsuite_test_list_LDADD = $(TESTSUITE_LDADD) 307testsuite_test_list_CPPFLAGS = $(TESTSUITE_CPPFLAGS) 308 309testsuite-distclean: 310 $(RM) -r $(ROOTFS) 311 $(RM) testsuite/stamp-rootfs 312 $(MAKE) -C testsuite/module-playground/ clean 313 if test "$(top_srcdir)" != "$(top_builddir)"; then \ 314 $(RM) -rf testsuite/module-playground; \ 315 fi 316 317DISTCLEAN_LOCAL_HOOKS += testsuite-distclean 318EXTRA_DIST += testsuite/rootfs-pristine 319 320DISTCHECK_CONFIGURE_FLAGS=--enable-gtk-doc --sysconfdir=/etc \ 321 --with-zlib --with-zstd --with-openssl \ 322 --with-bashcompletiondir=$$dc_install_base/$(bashcompletiondir) 323 324distclean-local: $(DISTCLEAN_LOCAL_HOOKS) 325 326buildtest-TESTS: 327 $(MAKE) $(AM_MAKEFLAGS) $(check_LTLIBRARIES) $(check_PROGRAMS) 328 329# ------------------------------------------------------------------------------ 330# coverage 331# ------------------------------------------------------------------------------ 332 333# .PHONY so it always rebuilds it 334.PHONY: coverage lcov-run lcov-report coverage-sync 335 336# run lcov from scratch, always 337coverage: all 338 $(MAKE) lcov-run 339 $(MAKE) lcov-report 340 341coverage_dir = coverage 342coverage_opts = --base-directory $(srcdir) --directory $(builddir) \ 343 --rc 'geninfo_adjust_src_path=$(abspath $(srcdir))=>$(abspath $(builddir))' 344 345if ENABLE_COVERAGE 346# reset run coverage tests 347lcov-run: 348 @rm -rf $(coverage_dir) 349 lcov $(coverage_opts) --zerocounters 350 -$(MAKE) check 351 352# generate report based on current coverage data 353lcov-report: 354 $(MKDIR_P) $(coverage_dir) 355 lcov $(coverage_opts) --capture --no-external --ignore-errors graph \ 356 | sed 's|$(abspath $(builddir))|$(abspath $(srcdir))|' > $(coverage_dir)/.lcov.info 357 lcov --remove $(coverage_dir)/.lcov.info --output-file $(coverage_dir)/.lcov-clean.info 'test-*' 358 genhtml -t "kmod test coverage" -o $(coverage_dir) $(coverage_dir)/.lcov-clean.info 359 @echo "Coverage report generated in $(abs_builddir)/$(coverage_dir)/index.html" 360 361else 362 363lcov-run lcov-report: 364 echo "Need to reconfigure with --enable-coverage" 365 366endif 367 368# ------------------------------------------------------------------------------ 369# coverity 370# ------------------------------------------------------------------------------ 371 372kmod-coverity-%.tar.xz: 373 rm -rf $< cov-int 374 ./autogen.sh c --disable-manpages 375 make clean 376 cov-build --dir cov-int make -j 4 377 tar caf $@ cov-int 378 379coverity-tar: kmod-coverity-$(shell git describe 2>/dev/null).tar.xz 380 381coverity-sync: kmod-coverity-$(shell git describe 2>/dev/null).tar.xz 382 @echo "uploading coverity tarball" 383 @curl --form token=$(COVERITY_KMOD_TOKEN) \ 384 --form email=lucas.de.marchi@gmail.com \ 385 --form file=@$< \ 386 --form version="$(shell git describe)" \ 387 --form description="" \ 388 https://scan.coverity.com/builds?project=kmod 389 390coverity-clean: 391 rm -rf kmod-coverity-*.tar.xz cov-int 392 393# ------------------------------------------------------------------------------ 394# custom release helpers 395# ------------------------------------------------------------------------------ 396 397git-release: 398 head -1 NEWS | grep -q "kmod $(VERSION)" 399 git commit -a -m "kmod $(VERSION)" 400 git tag -m "kmod $(VERSION)" -s v$(VERSION) 401 git gc --prune=0 402 403kmod-$(VERSION).tar.xz: 404 make distcheck 405 406kmod-$(VERSION).tar.sign: 407 xz -d -c kmod-$(VERSION).tar.xz | gpg --armor --detach-sign --output kmod-$(VERSION).tar.sign 408 409tar: kmod-$(VERSION).tar.xz kmod-$(VERSION).tar.sign 410 411tar-sync: kmod-$(VERSION).tar.xz kmod-$(VERSION).tar.sign 412 kup put kmod-$(VERSION).tar.xz kmod-$(VERSION).tar.sign /pub/linux/utils/kernel/kmod/ 413