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