1.PHONY: doc pkgdoc initdir install install-testsiteconfig \ 2 install-testsiteconfig-1 install-testmodulerc install-testmodulerc-1 \ 3 install-testinitrc install-testetcrc install-testmodspath \ 4 install-testmodspath-empty uninstall-testconfig uninstall dist dist-tar \ 5 dist-gzip dist-bzip2 dist-win srpm rpm clean distclean test-deps test \ 6 testinstall testsyntax 7 8# download command and its options 9WGET := wget --retry-connrefused --waitretry=20 --timeout=20 --tries=3 10 11# definitions for code coverage 12NAGELFAR_DLSRC1 := http://downloads.sourceforge.net/nagelfar/ 13NAGELFAR_RELEASE := nagelfar131 14NAGELFAR_DIST := $(NAGELFAR_RELEASE).tar.gz 15NAGELFAR_DISTSUM := fbf79ab1a1d85349600f2502a3353bf4 16NAGELFAR := $(NAGELFAR_RELEASE)/nagelfar.tcl 17 18# definition for old Tcl interpreter for coverage testing 19TCL_DLSRC := http://downloads.sourceforge.net/tcl/ 20TCL_RELEASE83 := tcl8.3.5 21TCL_DIST83 := $(TCL_RELEASE83)-src.tar.gz 22TCL_DISTSUM83 := 5cb79f8b90cf1322cb1286b9fe67f7a2 23TCLSH83 := $(TCL_RELEASE83)/unix/tclsh 24 25# specific modulecmd script for test 26MODULECMDTEST := modulecmd-test.tcl 27 28# definitions for enhanced diff tool (to review test results) 29ICDIFF_DLSRC := https://raw.githubusercontent.com/jeffkaufman/icdiff/release-1.9.5/ 30ICDIFF_CHECKSUM := fd5825ede4c2853ba1747a8931b077c1 31 32# compatibility version-related files 33COMPAT_DIR := compat 34 35# source definitions shared across the Makefiles of this project 36ifneq ($(wildcard Makefile.inc),Makefile.inc) 37 $(error Makefile.inc is missing, please run './configure') 38endif 39include Makefile.inc 40 41INSTALL_PREREQ := modulecmd.tcl ChangeLog README script/add.modules \ 42 script/createmodule.py script/modulecmd 43TEST_PREREQ := $(MODULECMDTEST) 44 45ifeq ($(compatversion),y) 46INSTALL_PREREQ += $(COMPAT_DIR)/modulecmd$(EXEEXT) $(COMPAT_DIR)/ChangeLog 47ifeq ($(wildcard $(COMPAT_DIR)),$(COMPAT_DIR)) 48TEST_PREREQ += $(COMPAT_DIR)/modulecmd 49endif 50endif 51 52ifeq ($(libtclenvmodules),y) 53INSTALL_PREREQ += lib/libtclenvmodules$(SHLIB_SUFFIX) 54TEST_PREREQ += lib/libtclenvmodules$(SHLIB_SUFFIX) 55ifeq ($(COVERAGE),y) 56TEST_PREREQ += lib/libtestutil-closedir$(SHLIB_SUFFIX) \ 57 lib/libtestutil-getpwuid$(SHLIB_SUFFIX) \ 58 lib/libtestutil-getgroups$(SHLIB_SUFFIX) \ 59 lib/libtestutil-0getgroups$(SHLIB_SUFFIX) \ 60 lib/libtestutil-dupgetgroups$(SHLIB_SUFFIX) \ 61 lib/libtestutil-getgrgid$(SHLIB_SUFFIX) 62endif 63endif 64 65ifeq ($(COVERAGE),y) 66TEST_PREREQ += $(NAGELFAR) 67endif 68 69# install old Tcl interpreters to test coverage 70ifeq ($(COVERAGE_OLDTCL),y) 71TEST_PREREQ += tclsh83 72endif 73 74# define rule prereq when target need to be rebuilt when git repository change 75ifeq ($(wildcard .git),.git) 76GIT_REFRESH_PREREQ := .git/index 77else 78GIT_REFRESH_PREREQ := 79endif 80 81all: initdir $(INSTALL_PREREQ) 82 83# skip doc build if no sphinx-build 84ifneq ($(builddoc),n) 85all: pkgdoc 86endif 87 88initdir: version.inc 89 $(MAKE) -C init all 90 91pkgdoc: version.inc 92 $(MAKE) -C doc man txt 93 94doc: version.inc 95 $(MAKE) -C doc all 96 97# build version.inc shared definitions from git repository info 98ifeq ($(wildcard .git) $(wildcard version.inc.in),.git version.inc.in) 99GIT_CURRENT_TAG := $(shell git describe --tags --abbrev=0) 100GIT_CURRENT_DESC := $(shell git describe --tags) 101GIT_CURRENT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD) 102 103MODULES_RELEASE := $(subst v,,$(GIT_CURRENT_TAG)) 104MODULES_BUILD_DATE := $(shell git log -1 --format=%cd --date=short) 105ifeq ($(GIT_CURRENT_TAG),$(GIT_CURRENT_DESC)) 106MODULES_BUILD := 107else ifeq ($(GIT_CURRENT_BRANCH),master) 108MODULES_BUILD := +$(subst $(GIT_CURRENT_TAG)-,,$(GIT_CURRENT_DESC)) 109else 110MODULES_BUILD := +$(GIT_CURRENT_BRANCH)$(subst $(GIT_CURRENT_TAG),,$(GIT_CURRENT_DESC)) 111endif 112 113else 114# load raw version information 115include version.inc.in 116 117# build short date from full date found in raw data 118ifeq ($(MODULES_BUILD_FDATE),$$Format:%ci$$) 119MODULES_BUILD_DATE := $(shell date '+%Y-%m-%d') 120else 121MODULES_BUILD_DATE := $(firstword $(MODULES_BUILD_FDATE)) 122endif 123 124# set a recognizable build number if one found in version.inc.in is raw data 125ifeq ($(MODULES_BUILD_HASH),$$Format:%h$$) 126MODULES_BUILD := +XX-gffffffff 127# or compute it from these information as if working from git repository 128else 129comma := , 130MODULES_BUILD_REFS := $(subst $(comma),,$(MODULES_BUILD_REFS)) 131 132ifeq ($(filter v$(MODULES_RELEASE),$(MODULES_BUILD_REFS)),v$(MODULES_RELEASE)) 133MODULES_BUILD := 134else ifeq ($(filter master,$(MODULES_BUILD_REFS)),master) 135MODULES_BUILD := +XX-g$(MODULES_BUILD_HASH) 136else ifeq ($(MODULES_BUILD_REFS),%D) 137MODULES_BUILD := +XX-g$(MODULES_BUILD_HASH) 138else 139MODULES_BUILD := +$(lastword $(MODULES_BUILD_REFS))-XX-g$(MODULES_BUILD_HASH) 140endif 141endif 142endif 143 144# determine RPM release 145# use last release if we currently sat on tag, append build number to it elsewhere 146MODULES_LAST_RPM_VERSREL := $(shell sed -n '/^%changelog/ {n;s/^\*.* - //p;q;}' \ 147 contrib/rpm/environment-modules.spec.in) 148MODULES_LAST_RPM_RELEASE := $(lastword $(subst -, ,$(MODULES_LAST_RPM_VERSREL))) 149MODULES_RPM_RELEASE := $(MODULES_LAST_RPM_RELEASE)$(subst +,.,$(subst -,.,$(MODULES_BUILD))) 150 151# define init configs location 152ifeq ($(initconfin),etcdir) 153 modulespath := $(etcdir)/modulespath 154 initrc := $(etcdir)/initrc 155else 156 modulespath := $(initdir)/.modulespath 157 initrc := $(initdir)/modulerc 158endif 159 160# comment entries if feature not enabled 161ifeq ($(versioning),y) 162 setversioning := 163 setnotversioning := \# 164else 165 setversioning := \# 166 setnotversioning := 167endif 168 169ifeq ($(silentshdbgsupport),y) 170 setsilentshdbgsupport := 171else 172 setsilentshdbgsupport := \# 173endif 174 175ifeq ($(quarantinesupport),y) 176 setquarantinesupport := 177 setnotquarantinesupport := \# 178else 179 setquarantinesupport := \# 180 setnotquarantinesupport := 181endif 182 183ifeq ($(libtclenvmodules),y) 184 setlibtclenvmodules := 185else 186 setlibtclenvmodules := \# 187endif 188 189ifeq ($(multilibsupport),y) 190 setmultilibsupport := 191 setnotmultilibsupport := \# 192 sedexprlibdir := -e 's|@libdir64@|$(libdir64)|g' -e 's|@libdir32@|$(libdir32)|g' 193else 194 setmultilibsupport := \# 195 setnotmultilibsupport := 196 sedexprlibdir := -e 's|@libdir@|$(libdir)|g' 197endif 198 199ifneq ($(pageropts),) 200 pagercmd := $(pager) $(pageropts) 201else 202 pagercmd := $(pager) 203endif 204 205ifeq ($(color),y) 206 setcolor := auto 207else 208 setcolor := never 209endif 210 211ifeq ($(autohandling),y) 212 setautohandling := 1 213else 214 setautohandling := 0 215endif 216 217ifeq ($(availindepth),y) 218 setavailindepth := 1 219else 220 setavailindepth := 0 221endif 222 223ifeq ($(implicitdefault),y) 224 setimplicitdefault := 1 225else 226 setimplicitdefault := 0 227endif 228 229ifeq ($(extendeddefault),y) 230 setextendeddefault := 1 231else 232 setextendeddefault := 0 233endif 234 235ifeq ($(advversspec),y) 236 setadvversspec := 1 237else 238 setadvversspec := 0 239endif 240 241ifeq ($(ml),y) 242 setml := 1 243else 244 setml := 0 245endif 246 247ifeq ($(setshellstartup),y) 248 setsetshellstartup := 1 249else 250 setsetshellstartup := 0 251endif 252 253ifeq ($(wa277),y) 254 setwa277 := 1 255else 256 setwa277 := 0 257endif 258 259define translate-in-script 260sed -e 's|@prefix@|$(prefix)|g' \ 261 -e 's|@baseprefix@|$(baseprefix)|g' \ 262 $(sedexprlibdir) \ 263 -e 's|@libexecdir@|$(libexecdir)|g' \ 264 -e 's|@initdir@|$(initdir)|g' \ 265 -e 's|@etcdir@|$(etcdir)|g' \ 266 -e 's|@modulefilesdir@|$(modulefilesdir)|g' \ 267 -e 's|@moduleshome@|$(moduleshome)|g' \ 268 -e 's|@VERSION@|$(VERSION)|g' \ 269 -e 's|@TCLSHDIR@/tclsh|$(TCLSH)|g' \ 270 -e 's|@TCLSH@|$(TCLSH)|g' \ 271 -e 's|@PYTHON@|$(PYTHON)|g' \ 272 -e 's|@pagercmd@|$(pagercmd)|g' \ 273 -e 's|@verbosity@|$(verbosity)|g' \ 274 -e 's|@color@|$(setcolor)|g' \ 275 -e 's|@darkbgcolors@|$(darkbgcolors)|g' \ 276 -e 's|@lightbgcolors@|$(lightbgcolors)|g' \ 277 -e 's|@termbg@|$(termbg)|g' \ 278 -e 's|@lockedconfigs@|$(lockedconfigs)|g' \ 279 -e 's|@unloadmatchorder@|$(unloadmatchorder)|g' \ 280 -e 's|@implicitdefault@|$(setimplicitdefault)|g' \ 281 -e 's|@extendeddefault@|$(setextendeddefault)|g' \ 282 -e 's|@advversspec@|$(setadvversspec)|g' \ 283 -e 's|@searchmatch@|$(searchmatch)|g' \ 284 -e 's|@wa277@|$(setwa277)|g' \ 285 -e 's|@icase@|$(icase)|g' \ 286 -e 's|@nearlyforbiddendays@|$(nearlyforbiddendays)|g' \ 287 -e 's|@autohandling@|$(setautohandling)|g' \ 288 -e 's|@availindepth@|$(setavailindepth)|g' \ 289 -e 's|@silentshdbgsupport@|$(setsilentshdbgsupport)|g' \ 290 -e 's|@ml@|$(setml)|g' \ 291 -e 's|@setshellstartup@|$(setsetshellstartup)|g' \ 292 -e 's|@quarantinesupport@|$(setquarantinesupport)|g' \ 293 -e 's|@notquarantinesupport@|$(setnotquarantinesupport)|g' \ 294 -e 's|@libtclenvmodules@|$(setlibtclenvmodules)|g' \ 295 -e 's|@SHLIB_SUFFIX@|$(SHLIB_SUFFIX)|g' \ 296 -e 's|@multilibsupport@|$(setmultilibsupport)|g' \ 297 -e 's|@notmultilibsupport@|$(setnotmultilibsupport)|g' \ 298 -e 's|@VERSIONING@|$(setversioning)|g' \ 299 -e 's|@NOTVERSIONING@|$(setnotversioning)|g' \ 300 -e 's|@MODULES_RELEASE@|$(MODULES_RELEASE)|g' \ 301 -e 's|@MODULES_BUILD@|$(MODULES_BUILD)|g' \ 302 -e 's|@MODULES_RPM_RELEASE@|$(MODULES_RPM_RELEASE)|g' \ 303 -e 's|@MODULES_BUILD_DATE@|$(MODULES_BUILD_DATE)|g' $< > $@ 304endef 305 306DIST_PREFIX := modules-$(MODULES_RELEASE)$(MODULES_BUILD) 307DIST_WIN_PREFIX := $(DIST_PREFIX)-win 308 309# avoid shared definitions to be rebuilt by make 310Makefile.inc: ; 311 312version.inc: version.inc.in $(GIT_REFRESH_PREREQ) 313 $(translate-in-script) 314 315# source version definitions shared across the Makefiles of this project 316include version.inc 317 318contrib/rpm/environment-modules.spec: contrib/rpm/environment-modules.spec.in $(GIT_REFRESH_PREREQ) 319 $(translate-in-script) 320 321modulecmd.tcl: modulecmd.tcl.in version.inc 322 $(translate-in-script) 323 chmod +x $@ 324 325# generate an empty changelog file if not working from git repository 326ifeq ($(wildcard .git),.git) 327ChangeLog: script/gitlog2changelog.py 328 script/gitlog2changelog.py 329else 330ChangeLog: 331 echo "Please refer to the NEWS document to learn about main changes" >$@ 332endif 333 334README: 335 sed -e '1,9d' $@.md > $@ 336 337script/add.modules: script/add.modules.in 338 $(translate-in-script) 339 chmod +x $@ 340 341script/createmodule.py: script/createmodule.py.in 342 $(translate-in-script) 343 chmod +x $@ 344 345script/gitlog2changelog.py: script/gitlog2changelog.py.in 346 $(translate-in-script) 347 chmod +x $@ 348 349script/modulecmd: script/modulecmd.in 350 $(translate-in-script) 351 chmod +x $@ 352 353# compatibility version-related rules 354$(COMPAT_DIR)/modulecmd$(EXEEXT) $(COMPAT_DIR)/ChangeLog: 355 $(MAKE) -C $(COMPAT_DIR) $(@F) 356 357# Tcl extension library-related rules 358lib/libtclenvmodules$(SHLIB_SUFFIX): 359 $(MAKE) -C lib $(@F) 360 361lib/libtestutil-closedir$(SHLIB_SUFFIX): 362 $(MAKE) -C lib $(@F) 363 364lib/libtestutil-getpwuid$(SHLIB_SUFFIX): 365 $(MAKE) -C lib $(@F) 366 367lib/libtestutil-getgroups$(SHLIB_SUFFIX): 368 $(MAKE) -C lib $(@F) 369 370lib/libtestutil-0getgroups$(SHLIB_SUFFIX): 371 $(MAKE) -C lib $(@F) 372 373lib/libtestutil-dupgetgroups$(SHLIB_SUFFIX): 374 $(MAKE) -C lib $(@F) 375 376lib/libtestutil-getgrgid$(SHLIB_SUFFIX): 377 $(MAKE) -C lib $(@F) 378 379# example configs for test rules 380testsuite/example/.modulespath: testsuite/example/.modulespath.in 381 $(translate-in-script) 382 383testsuite/example/modulerc: testsuite/example/modulerc.in 384 $(translate-in-script) 385 386testsuite/example/modulerc-1: testsuite/example/modulerc-1.in 387 $(translate-in-script) 388 389testsuite/example/initrc: testsuite/example/initrc.in 390 $(translate-in-script) 391 392install-testsiteconfig: testsuite/example/siteconfig.tcl 393 $(MAKE) -C init install-testconfig DESTDIR=$(DESTDIR) 394 cp $^ $(DESTDIR)$(etcdir)/ 395 396install-testsiteconfig-1: testsuite/example/siteconfig.tcl-1 397 $(MAKE) -C init install-testconfig DESTDIR=$(DESTDIR) 398 cp $^ $(DESTDIR)$(etcdir)/siteconfig.tcl 399 400install-testmodulerc: testsuite/example/modulerc 401 $(MAKE) -C init install-testconfig DESTDIR=$(DESTDIR) 402 cp $^ $(DESTDIR)$(initrc) 403 404install-testmodulerc-1: testsuite/example/modulerc-1 405 $(MAKE) -C init install-testconfig DESTDIR=$(DESTDIR) 406 cp $^ $(DESTDIR)$(initrc) 407 408install-testinitrc: testsuite/example/initrc 409 $(MAKE) -C init install-testconfig DESTDIR=$(DESTDIR) 410 cp $^ $(DESTDIR)$(initrc) 411 412install-testetcrc: testsuite/etc/empty 413 $(MAKE) -C init install-testconfig DESTDIR=$(DESTDIR) 414 cp $^ $(DESTDIR)$(etcdir)/rc 415 416install-testmodspath: testsuite/example/.modulespath 417 $(MAKE) -C init install-testconfig DESTDIR=$(DESTDIR) 418 cp $^ $(DESTDIR)$(modulespath) 419 420install-testmodspath-empty: testsuite/example/.modulespath-empty 421 $(MAKE) -C init install-testconfig DESTDIR=$(DESTDIR) 422 cp $^ $(DESTDIR)$(modulespath) 423 424uninstall-testconfig: 425 rm -f $(DESTDIR)$(etcdir)/rc 426 rm -f $(DESTDIR)$(etcdir)/siteconfig.tcl 427 rm -f $(DESTDIR)$(initrc) 428 rm -f $(DESTDIR)$(modulespath) 429 $(MAKE) -C init uninstall-testconfig DESTDIR=$(DESTDIR) 430 431install: $(INSTALL_PREREQ) 432 mkdir -p $(DESTDIR)$(libexecdir) 433 mkdir -p $(DESTDIR)$(bindir) 434 mkdir -p $(DESTDIR)$(etcdir) 435 cp modulecmd.tcl $(DESTDIR)$(libexecdir)/ 436 chmod +x $(DESTDIR)$(libexecdir)/modulecmd.tcl 437ifeq ($(compatversion),y) 438 cp $(COMPAT_DIR)/modulecmd$(EXEEXT) $(DESTDIR)$(libexecdir)/modulecmd-compat$(EXEEXT) 439 chmod +x $(DESTDIR)$(libexecdir)/modulecmd-compat$(EXEEXT) 440endif 441ifeq ($(libtclenvmodules),y) 442 mkdir -p $(DESTDIR)$(libdir) 443 cp lib/libtclenvmodules$(SHLIB_SUFFIX) $(DESTDIR)$(libdir)/libtclenvmodules$(SHLIB_SUFFIX) 444 chmod +x $(DESTDIR)$(libdir)/libtclenvmodules$(SHLIB_SUFFIX) 445endif 446 cp script/envml $(DESTDIR)$(bindir)/ 447 chmod +x $(DESTDIR)$(bindir)/envml 448 cp script/add.modules $(DESTDIR)$(bindir)/ 449 chmod +x $(DESTDIR)$(bindir)/add.modules 450 cp script/createmodule.py $(DESTDIR)$(bindir)/ 451 chmod +x $(DESTDIR)$(bindir)/createmodule.py 452 cp script/modulecmd $(DESTDIR)$(bindir)/ 453 chmod +x $(DESTDIR)$(bindir)/modulecmd 454 cp script/mkroot $(DESTDIR)$(bindir)/ 455 chmod +x $(DESTDIR)$(bindir)/mkroot 456ifeq ($(windowssupport),y) 457 cp script/module.cmd $(DESTDIR)$(bindir)/ 458 chmod +x $(DESTDIR)$(bindir)/module.cmd 459 cp script/ml.cmd $(DESTDIR)$(bindir)/ 460 chmod +x $(DESTDIR)$(bindir)/ml.cmd 461 cp script/envml.cmd $(DESTDIR)$(bindir)/ 462 chmod +x $(DESTDIR)$(bindir)/envml.cmd 463endif 464ifneq ($(wildcard $(DESTDIR)$(etcdir)/siteconfig.tcl),$(DESTDIR)$(etcdir)/siteconfig.tcl) 465 cp siteconfig.tcl $(DESTDIR)$(etcdir)/siteconfig.tcl 466endif 467ifeq ($(docinstall),y) 468 mkdir -p $(DESTDIR)$(docdir) 469 cp COPYING.GPLv2 $(DESTDIR)$(docdir)/ 470 cp ChangeLog $(DESTDIR)$(docdir)/ 471 cp README $(DESTDIR)$(docdir)/ 472ifeq ($(compatversion),y) 473 cp $(COMPAT_DIR)/ChangeLog $(DESTDIR)$(docdir)/ChangeLog-compat 474 cp $(COMPAT_DIR)/NEWS $(DESTDIR)$(docdir)/NEWS-compat 475endif 476endif 477ifeq ($(vimaddons),y) 478 mkdir -p $(DESTDIR)$(vimdatadir)/ftdetect 479 mkdir -p $(DESTDIR)$(vimdatadir)/ftplugin 480 mkdir -p $(DESTDIR)$(vimdatadir)/syntax 481 cp contrib/vim/ftdetect/modulefile.vim $(DESTDIR)$(vimdatadir)/ftdetect 482 cp contrib/vim/ftplugin/modulefile.vim $(DESTDIR)$(vimdatadir)/ftplugin 483 cp contrib/vim/syntax/modulefile.vim $(DESTDIR)$(vimdatadir)/syntax 484endif 485 $(MAKE) -C init install DESTDIR=$(DESTDIR) 486ifneq ($(builddoc),n) 487 $(MAKE) -C doc install DESTDIR=$(DESTDIR) 488else 489 @echo 490 @echo "WARNING: Documentation not built nor installed" >&2 491endif 492 @echo 493 @echo "NOTICE: Modules installation is complete." >&2 494 @echo " Please read the 'Configuration' section in INSTALL guide to learn" >&2 495 @echo " how to adapt your installation and make it fit your needs." >&2 496 @echo 497 498uninstall: 499 rm -f $(DESTDIR)$(libexecdir)/modulecmd.tcl 500ifeq ($(compatversion),y) 501 rm -f $(DESTDIR)$(libexecdir)/modulecmd-compat$(EXEEXT) 502endif 503ifeq ($(libtclenvmodules),y) 504 rm -f $(DESTDIR)$(libdir)/libtclenvmodules$(SHLIB_SUFFIX) 505endif 506 rm -f $(DESTDIR)$(bindir)/envml 507 rm -f $(DESTDIR)$(bindir)/add.modules 508 rm -f $(DESTDIR)$(bindir)/createmodule.py 509 rm -f $(DESTDIR)$(bindir)/modulecmd 510 rm -f $(DESTDIR)$(bindir)/mkroot 511ifeq ($(windowssupport),y) 512 rm -f $(DESTDIR)$(bindir)/module.cmd 513 rm -f $(DESTDIR)$(bindir)/ml.cmd 514 rm -f $(DESTDIR)$(bindir)/envml.cmd 515endif 516ifeq ($(vimaddons),y) 517 rm -f $(DESTDIR)$(vimdatadir)/ftdetect/modulefile.vim 518 rm -f $(DESTDIR)$(vimdatadir)/ftplugin/modulefile.vim 519 rm -f $(DESTDIR)$(vimdatadir)/syntax/modulefile.vim 520 -rmdir $(DESTDIR)$(vimdatadir)/ftdetect 521 -rmdir $(DESTDIR)$(vimdatadir)/ftplugin 522 -rmdir $(DESTDIR)$(vimdatadir)/syntax 523 -rmdir -p $(DESTDIR)$(vimdatadir) 524endif 525ifeq ($(docinstall),y) 526 rm -f $(addprefix $(DESTDIR)$(docdir)/,ChangeLog README COPYING.GPLv2) 527ifeq ($(compatversion),y) 528 rm -f $(addprefix $(DESTDIR)$(docdir)/,ChangeLog-compat NEWS-compat) 529endif 530ifeq ($(builddoc),n) 531 rmdir $(DESTDIR)$(docdir) 532endif 533endif 534 $(MAKE) -C init uninstall DESTDIR=$(DESTDIR) 535ifneq ($(builddoc),n) 536 $(MAKE) -C doc uninstall DESTDIR=$(DESTDIR) 537endif 538 rmdir $(DESTDIR)$(libexecdir) 539ifeq ($(libtclenvmodules),y) 540 rmdir $(DESTDIR)$(libdir) 541endif 542 rmdir $(DESTDIR)$(bindir) 543 rmdir $(DESTDIR)$(datarootdir) 544 $(RMDIR_IGN_NON_EMPTY) $(DESTDIR)$(prefix) || true 545 546# include pre-generated documents not to require documentation build 547# tools when installing from dist tarball 548dist-tar: ChangeLog contrib/rpm/environment-modules.spec pkgdoc 549 git archive --prefix=$(DIST_PREFIX)/ --worktree-attributes \ 550 -o $(DIST_PREFIX).tar HEAD 551 tar -rf $(DIST_PREFIX).tar --transform 's,^,$(DIST_PREFIX)/,' \ 552 lib/configure lib/config.h.in ChangeLog doc/build/MIGRATING.txt \ 553 doc/build/diff_v3_v4.txt doc/build/INSTALL.txt doc/build/INSTALL-win.txt \ 554 doc/build/NEWS.txt doc/build/CONTRIBUTING.txt doc/build/module.1.in \ 555 doc/build/ml.1 doc/build/modulefile.4 contrib/rpm/environment-modules.spec 556ifeq ($(compatversion) $(wildcard $(COMPAT_DIR)),y $(COMPAT_DIR)) 557 $(MAKE) -C $(COMPAT_DIR) distdir 558 mv $(COMPAT_DIR)/modules-* compatdist 559 tar -cf compatdist.tar --transform 's,^compatdist,$(DIST_PREFIX)/compat,' compatdist 560 tar --concatenate -f $(DIST_PREFIX).tar compatdist.tar 561 rm -rf compatdist 562 rm compatdist.tar 563endif 564 565dist-gzip: dist-tar 566 gzip -f -9 $(DIST_PREFIX).tar 567 568dist-bzip2: dist-tar 569 bzip2 -f $(DIST_PREFIX).tar 570 571dist: dist-gzip 572 573# dist zip ball for Windows platform with all pre-generated relevant files 574dist-win: modulecmd.tcl ChangeLog README pkgdoc 575 mkdir $(DIST_WIN_PREFIX) 576 mkdir $(DIST_WIN_PREFIX)/libexec 577 cp modulecmd.tcl $(DIST_WIN_PREFIX)/libexec/ 578 mkdir $(DIST_WIN_PREFIX)/bin 579 cp script/module.cmd $(DIST_WIN_PREFIX)/bin/ 580 cp script/ml.cmd $(DIST_WIN_PREFIX)/bin/ 581 cp script/envml.cmd $(DIST_WIN_PREFIX)/bin/ 582 mkdir $(DIST_WIN_PREFIX)/doc 583 cp COPYING.GPLv2 $(DIST_WIN_PREFIX)/doc/ 584 cp ChangeLog $(DIST_WIN_PREFIX)/doc/ 585 cp README $(DIST_WIN_PREFIX)/doc/ 586 cp doc/build/MIGRATING.txt $(DIST_WIN_PREFIX)/doc/ 587 cp doc/build/INSTALL-win.txt $(DIST_WIN_PREFIX)/doc/ 588 cp doc/build/NEWS.txt $(DIST_WIN_PREFIX)/doc/ 589 cp doc/build/CONTRIBUTING.txt $(DIST_WIN_PREFIX)/doc/ 590 cp doc/build/module.txt $(DIST_WIN_PREFIX)/doc/ 591 cp doc/build/modulefile.txt $(DIST_WIN_PREFIX)/doc/ 592 $(MAKE) -C init dist-win DIST_WIN_PREFIX=../$(DIST_WIN_PREFIX) 593 cp script/INSTALL.bat $(DIST_WIN_PREFIX)/ 594 cp script/UNINSTALL.bat $(DIST_WIN_PREFIX)/ 595 cp script/TESTINSTALL.bat $(DIST_WIN_PREFIX)/ 596 zip -r $(DIST_WIN_PREFIX).zip $(DIST_WIN_PREFIX) 597 rm -rf $(DIST_WIN_PREFIX) 598 599# srpm and rpm can only be built with compat sources included 600srpm: dist-bzip2 601ifeq ($(compatversion),n) 602 $(error Compatibility version sources are missing, please run './configure\ 603 --enable-compat-version') 604endif 605 rpmbuild -ts $(DIST_PREFIX).tar.bz2 606 607rpm: dist-bzip2 608ifeq ($(compatversion),n) 609 $(error Compatibility version sources are missing, please run './configure\ 610 --enable-compat-version') 611endif 612 rpmbuild -tb $(DIST_PREFIX).tar.bz2 613 614clean: 615 rm -f *.log *.sum 616 rm -f $(MODULECMDTEST)_i $(MODULECMDTEST)_log $(MODULECMDTEST)_m 617 rm -rf coverage 618# do not clean generated docs if not in git repository 619ifeq ($(wildcard .git),.git) 620 rm -f ChangeLog 621endif 622 rm -f README 623 rm -f modulecmd.tcl 624 rm -f $(MODULECMDTEST) 625 rm -f script/add.modules 626 rm -f script/createmodule.py 627 rm -f script/gitlog2changelog.py 628 rm -f script/modulecmd 629 rm -f testsuite/example/.modulespath testsuite/example/modulerc testsuite/example/modulerc-1 testsuite/example/initrc 630 rm -f modules-*.tar modules-*.tar.gz modules-*.tar.bz2 631 rm -rf modules-*-win/ 632 rm -f modules-*-win.zip 633 rm -f environment-modules-*.srpm environment-modules-*.rpm 634 $(MAKE) -C init clean 635ifneq ($(builddoc),n) 636 $(MAKE) -C doc clean 637endif 638 rm -f version.inc 639 rm -f contrib/rpm/environment-modules.spec 640ifneq ($(wildcard $(COMPAT_DIR)/Makefile),) 641 $(MAKE) -C $(COMPAT_DIR) clean 642endif 643ifneq ($(wildcard lib/Makefile),) 644 $(MAKE) -C lib clean 645endif 646 647distclean: clean 648 rm -f Makefile.inc 649 rm -f site.exp 650 rm -f icdiff .noicdiff 651 rm -rf $(NAGELFAR_RELEASE) 652 rm -rf $(TCL_RELEASE83) 653 rm -f tclsh83 654ifeq ($(wildcard .git) $(wildcard $(COMPAT_DIR)),.git $(COMPAT_DIR)) 655 rm -rf $(COMPAT_DIR) 656ifeq ($(gitworktree),y) 657 git worktree prune 658endif 659endif 660ifneq ($(wildcard lib/Makefile),) 661 $(MAKE) -C lib distclean 662endif 663 664# prepare for code coverage run 665ifeq ($(COVERAGE),y) 666$(MODULECMDTEST): $(NAGELFAR) 667endif 668 669# make specific modulecmd script for test to check built extension lib 670# if coverage asked, instrument script and clear previous coverage log 671$(MODULECMDTEST): modulecmd.tcl 672ifeq ($(multilibsupport),y) 673 sed -e 's|$(libdir64)|lib|' -e 's|$(libdir32)|lib|' $< > $@ 674else 675 sed -e 's|$(libdir)|lib|' $< > $@ 676endif 677ifeq ($(COVERAGE),y) 678 rm -f $(MODULECMDTEST)_log 679 $(NAGELFAR) -instrument $@ 680endif 681 682# if coverage enabled, run tests on instrumented file to create coverage log 683ifeq ($(COVERAGE),y) 684export MODULECMD = $(MODULECMDTEST)_i 685endif 686 687# specific target to build test dependencies 688test-deps: $(TEST_PREREQ) 689 690# if coverage enabled create markup file for better read coverage result 691test: $(TEST_PREREQ) 692ifeq ($(compatversion) $(wildcard $(COMPAT_DIR)),y $(COMPAT_DIR)) 693 $(MAKE) -C $(COMPAT_DIR) test 694endif 695 TCLSH=$(TCLSH); export TCLSH; \ 696 OBJDIR=`pwd -P`; export OBJDIR; \ 697 TESTSUITEDIR=`cd testsuite;pwd -P`; export TESTSUITEDIR; \ 698 runtest --srcdir $$TESTSUITEDIR --objdir $$OBJDIR $(RUNTESTFLAGS) --tool modules $(RUNTESTFILES) 699ifeq ($(COVERAGE),y) 700 $(NAGELFAR) -markup $(MODULECMDTEST) 701endif 702 703testinstall: 704 OBJDIR=`pwd -P`; export OBJDIR; \ 705 TESTSUITEDIR=`cd testsuite;pwd -P`; export TESTSUITEDIR; \ 706 runtest --srcdir $$TESTSUITEDIR --objdir $$OBJDIR $(RUNTESTFLAGS) --tool install $(RUNTESTFILES) 707 708 709# install enhanced diff tool (to review test results) 710icdiff: 711 $(WGET) $(ICDIFF_DLSRC)$@ || true 712 echo "$(ICDIFF_CHECKSUM) $@" | md5sum --status -c - || \ 713 md5 -c $(ICDIFF_CHECKSUM) $@ 714 chmod +x $@ 715 716# install old Tcl interpreter (for code coverage purpose) 717tclsh83: 718 $(WGET) $(TCL_DLSRC)$(TCL_DIST83) || true 719 echo "$(TCL_DISTSUM83) $(TCL_DIST83)" | md5sum --status -c - || \ 720 md5 -c $(TCL_DISTSUM83) $@ || (rm -f $(TCL_DIST83) && false) 721 tar xzf $(TCL_DIST83) 722 cd $(TCL_RELEASE83)/unix && bash configure --disable-shared && make 723 echo '#!/bin/bash' >$@ 724 echo 'exec $(TCLSH83) $${@}' >>$@ 725 chmod +x $@ 726 rm $(TCL_DIST83) 727 728# install code coverage tool 729# download from alt. source if correct tarball not retrieved from primary location 730$(NAGELFAR): 731 $(WGET) $(NAGELFAR_DLSRC1)$(NAGELFAR_DIST) || true 732 echo "$(NAGELFAR_DISTSUM) $(NAGELFAR_DIST)" | md5sum --status -c - || \ 733 (rm -f $(NAGELFAR_DIST) && false) 734 tar xzf $(NAGELFAR_DIST) 735 rm $(NAGELFAR_DIST) 736 737testsyntax: $(MODULECMDTEST) $(NAGELFAR) 738 $(NAGELFAR) -len 78 $< 739