mirror of
https://github.com/envmodules/modules.git
synced 2026-05-30 00:12:31 +08:00
Generate the silent_shell_debug code in module shell function during the autoinit processing if the silent_shell_debug configuration option is enabled. Choice made at installation time may now be updated later on with the silent_shell_debug configuration option. If enabled prior calling autoinit (or enabled within initrc configuration file), the silent shell debug code will be included in module shell function.
869 lines
27 KiB
Makefile
869 lines
27 KiB
Makefile
.PHONY: doc pkgdoc initdir install install-testsiteconfig \
|
|
install-testsiteconfig-1 install-testmodulerc install-testinitrc-1 \
|
|
install-testinitrc install-testetcrc install-testmodspath \
|
|
install-testmodspath-empty install-testmodspath-wild \
|
|
uninstall-testconfig uninstall dist dist-tar dist-gzip dist-bzip2 \
|
|
dist-win srpm rpm clean distclean test-deps test testinstall testsyntax
|
|
|
|
# download command and its options
|
|
WGET := wget --retry-connrefused --waitretry=20 --timeout=20 --tries=3
|
|
|
|
# definitions for code coverage
|
|
NAGELFAR_DLSRC1 := http://downloads.sourceforge.net/nagelfar/
|
|
NAGELFAR_RELEASE := nagelfar131
|
|
NAGELFAR_DIST := $(NAGELFAR_RELEASE).tar.gz
|
|
NAGELFAR_DISTSUM := fbf79ab1a1d85349600f2502a3353bf4
|
|
NAGELFAR := $(NAGELFAR_RELEASE)/nagelfar.tcl
|
|
|
|
# definition for old Tcl interpreter for coverage testing
|
|
TCL_DLSRC := http://downloads.sourceforge.net/tcl/
|
|
TCL_RELEASE83 := tcl8.3.5
|
|
TCL_DIST83 := $(TCL_RELEASE83)-src.tar.gz
|
|
TCL_DISTSUM83 := 5cb79f8b90cf1322cb1286b9fe67f7a2
|
|
TCLSH83 := $(TCL_RELEASE83)/unix/tclsh
|
|
|
|
# specific modulecmd script for test
|
|
MODULECMDTEST := modulecmd-test.tcl
|
|
|
|
# definitions for enhanced diff tool (to review test results)
|
|
ICDIFF_DLSRC := https://raw.githubusercontent.com/jeffkaufman/icdiff/release-1.9.5/
|
|
ICDIFF_CHECKSUM := fd5825ede4c2853ba1747a8931b077c1
|
|
|
|
# source definitions shared across the Makefiles of this project
|
|
ifneq ($(wildcard Makefile.inc),Makefile.inc)
|
|
$(error Makefile.inc is missing, please run './configure')
|
|
endif
|
|
include Makefile.inc
|
|
|
|
INSTALL_PREREQ := modulecmd.tcl ChangeLog README script/add.modules \
|
|
script/modulecmd
|
|
ifeq ($(COVERAGE),y)
|
|
TEST_PREREQ := $(MODULECMDTEST)_i $(NAGELFAR)
|
|
else
|
|
TEST_PREREQ := $(MODULECMDTEST)
|
|
endif
|
|
|
|
ifeq ($(libtclenvmodules),y)
|
|
INSTALL_PREREQ += lib/libtclenvmodules$(SHLIB_SUFFIX)
|
|
TEST_PREREQ += lib/libtclenvmodules$(SHLIB_SUFFIX)
|
|
ifeq ($(COVERAGE),y)
|
|
TEST_PREREQ += lib/libtestutil-closedir$(SHLIB_SUFFIX) \
|
|
lib/libtestutil-getpwuid$(SHLIB_SUFFIX) \
|
|
lib/libtestutil-getgroups$(SHLIB_SUFFIX) \
|
|
lib/libtestutil-0getgroups$(SHLIB_SUFFIX) \
|
|
lib/libtestutil-dupgetgroups$(SHLIB_SUFFIX) \
|
|
lib/libtestutil-getgrgid$(SHLIB_SUFFIX) \
|
|
lib/libtestutil-time$(SHLIB_SUFFIX) \
|
|
lib/libtestutil-mktime$(SHLIB_SUFFIX)
|
|
endif
|
|
endif
|
|
|
|
# install old Tcl interpreters to test coverage
|
|
ifeq ($(COVERAGE_OLDTCL),y)
|
|
TEST_PREREQ += tclsh83
|
|
endif
|
|
|
|
# define rule prereq when target need to be rebuilt when git repository change
|
|
ifeq ($(wildcard .git),.git)
|
|
GIT_DIR := $(shell git rev-parse --git-dir)
|
|
GIT_REFRESH_PREREQ := $(GIT_DIR)/index
|
|
else
|
|
GIT_REFRESH_PREREQ :=
|
|
endif
|
|
|
|
# setup summary echo rules unless silent mode set
|
|
ifneq ($(findstring s,$(MAKEFLAGS)),s)
|
|
ECHO_GEN = @echo ' ' GEN $@;
|
|
ECHO_GEN2 = @echo ' ' GEN
|
|
else
|
|
# disable echo rules followed by a string
|
|
ECHO_GEN2 = \#
|
|
endif
|
|
|
|
all: initdir $(INSTALL_PREREQ)
|
|
|
|
# skip doc build if no sphinx-build
|
|
ifneq ($(builddoc),n)
|
|
all: pkgdoc
|
|
endif
|
|
|
|
initdir: version.inc
|
|
$(MAKE) --no-print-directory -C init all
|
|
|
|
pkgdoc: version.inc
|
|
$(MAKE) --no-print-directory -C doc man txt
|
|
|
|
doc: version.inc
|
|
$(MAKE) --no-print-directory -C doc all
|
|
|
|
# build version.inc shared definitions from git repository info
|
|
ifeq ($(wildcard .git) $(wildcard version.inc.in),.git version.inc.in)
|
|
GIT_CURRENT_TAG := $(shell git describe --tags --abbrev=0)
|
|
GIT_CURRENT_DESC := $(shell git describe --tags)
|
|
GIT_CURRENT_BRANCH := $(shell git rev-parse --abbrev-ref HEAD)
|
|
|
|
MODULES_RELEASE := $(subst v,,$(GIT_CURRENT_TAG))
|
|
MODULES_BUILD_DATE := $(shell git log -1 --format=%cd --date=short)
|
|
ifeq ($(GIT_CURRENT_TAG),$(GIT_CURRENT_DESC))
|
|
MODULES_BUILD :=
|
|
else ifeq ($(GIT_CURRENT_BRANCH),master)
|
|
MODULES_BUILD := +$(subst $(GIT_CURRENT_TAG)-,,$(GIT_CURRENT_DESC))
|
|
else
|
|
MODULES_BUILD := +$(GIT_CURRENT_BRANCH)$(subst $(GIT_CURRENT_TAG),,$(GIT_CURRENT_DESC))
|
|
endif
|
|
|
|
else
|
|
# load raw version information
|
|
include version.inc.in
|
|
|
|
# build short date from full date found in raw data
|
|
ifeq ($(MODULES_BUILD_FDATE),$$Format:%ci$$)
|
|
MODULES_BUILD_DATE := $(shell date '+%Y-%m-%d')
|
|
else
|
|
MODULES_BUILD_DATE := $(firstword $(MODULES_BUILD_FDATE))
|
|
endif
|
|
|
|
# set a recognizable build number if one found in version.inc.in is raw data
|
|
ifeq ($(MODULES_BUILD_HASH),$$Format:%h$$)
|
|
MODULES_BUILD := +XX-gffffffff
|
|
# or compute it from these information as if working from git repository
|
|
else
|
|
comma := ,
|
|
MODULES_BUILD_REFS := $(subst $(comma),,$(MODULES_BUILD_REFS))
|
|
|
|
ifeq ($(filter v$(MODULES_RELEASE),$(MODULES_BUILD_REFS)),v$(MODULES_RELEASE))
|
|
MODULES_BUILD :=
|
|
else ifeq ($(filter master,$(MODULES_BUILD_REFS)),master)
|
|
MODULES_BUILD := +XX-g$(MODULES_BUILD_HASH)
|
|
else ifeq ($(MODULES_BUILD_REFS),%D)
|
|
MODULES_BUILD := +XX-g$(MODULES_BUILD_HASH)
|
|
else
|
|
MODULES_BUILD := +$(notdir $(lastword $(MODULES_BUILD_REFS)))-XX-g$(MODULES_BUILD_HASH)
|
|
endif
|
|
endif
|
|
endif
|
|
|
|
# determine RPM release
|
|
# use last release if we currently sat on tag, append build number to it elsewhere
|
|
MODULES_LAST_RPM_VERSREL := $(shell sed -n '/^%changelog/ {n;s/^\*.* - //p;q;}' \
|
|
contrib/rpm/environment-modules.spec.in)
|
|
MODULES_LAST_RPM_RELEASE := $(lastword $(subst -, ,$(MODULES_LAST_RPM_VERSREL)))
|
|
MODULES_RPM_RELEASE := $(MODULES_LAST_RPM_RELEASE)$(subst +,.,$(subst -,.,$(MODULES_BUILD)))
|
|
|
|
# define init configs location
|
|
ifeq ($(initconfin),etcdir)
|
|
modulespath := $(etcdir)/modulespath
|
|
initrc := $(etcdir)/initrc
|
|
else
|
|
modulespath := $(initdir)/.modulespath
|
|
initrc := $(initdir)/modulerc
|
|
endif
|
|
|
|
# comment entries if feature not enabled
|
|
ifeq ($(versioning),y)
|
|
setversioning :=
|
|
setnotversioning := \#
|
|
else
|
|
setversioning := \#
|
|
setnotversioning :=
|
|
endif
|
|
|
|
ifeq ($(silentshdbgsupport),y)
|
|
setsilentshdbgsupport := 1
|
|
else
|
|
setsilentshdbgsupport := 0
|
|
endif
|
|
|
|
ifeq ($(quarantinesupport),y)
|
|
setquarantinesupport := 1
|
|
else
|
|
setquarantinesupport := 0
|
|
endif
|
|
|
|
ifeq ($(libtclenvmodules),y)
|
|
setlibtclenvmodules :=
|
|
else
|
|
setlibtclenvmodules := \#
|
|
endif
|
|
|
|
ifeq ($(multilibsupport),y)
|
|
setmultilibsupport :=
|
|
setnotmultilibsupport := \#
|
|
sedexprlibdir := -e 's|@libdir64@|$(libdir64)|g' -e 's|@libdir32@|$(libdir32)|g'
|
|
else
|
|
setmultilibsupport := \#
|
|
setnotmultilibsupport :=
|
|
sedexprlibdir := -e 's|@libdir@|$(libdir)|g'
|
|
endif
|
|
|
|
ifneq ($(pageropts),)
|
|
pagercmd := $(pager) $(pageropts)
|
|
else
|
|
pagercmd := $(pager)
|
|
endif
|
|
|
|
ifeq ($(color),y)
|
|
setcolor := auto
|
|
else
|
|
setcolor := never
|
|
endif
|
|
|
|
ifeq ($(autohandling),y)
|
|
setautohandling := 1
|
|
else
|
|
setautohandling := 0
|
|
endif
|
|
|
|
ifeq ($(implicitrequirement),y)
|
|
setimplicitrequirement := 1
|
|
else
|
|
setimplicitrequirement := 0
|
|
endif
|
|
|
|
ifeq ($(availindepth),y)
|
|
setavailindepth := 1
|
|
else
|
|
setavailindepth := 0
|
|
endif
|
|
|
|
ifeq ($(implicitdefault),y)
|
|
setimplicitdefault := 1
|
|
else
|
|
setimplicitdefault := 0
|
|
endif
|
|
|
|
ifeq ($(extendeddefault),y)
|
|
setextendeddefault := 1
|
|
else
|
|
setextendeddefault := 0
|
|
endif
|
|
|
|
ifeq ($(advversspec),y)
|
|
setadvversspec := 1
|
|
else
|
|
setadvversspec := 0
|
|
endif
|
|
|
|
ifeq ($(ml),y)
|
|
setml := 1
|
|
else
|
|
setml := 0
|
|
endif
|
|
|
|
ifeq ($(setshellstartup),y)
|
|
setsetshellstartup := 1
|
|
else
|
|
setsetshellstartup := 0
|
|
endif
|
|
|
|
ifeq ($(mcookieversioncheck),y)
|
|
setmcookieversioncheck := 1
|
|
else
|
|
setmcookieversioncheck := 0
|
|
endif
|
|
|
|
ifeq ($(wa277),y)
|
|
setwa277 := 1
|
|
else
|
|
setwa277 := 0
|
|
endif
|
|
|
|
define translate-in-script
|
|
$(ECHO_GEN)
|
|
sed -e 's|@prefix@|$(prefix)|g' \
|
|
-e 's|@baseprefix@|$(baseprefix)|g' \
|
|
$(sedexprlibdir) \
|
|
-e 's|@libexecdir@|$(libexecdir)|g' \
|
|
-e 's|@initdir@|$(initdir)|g' \
|
|
-e 's|@etcdir@|$(etcdir)|g' \
|
|
-e 's|@modulefilesdir@|$(modulefilesdir)|g' \
|
|
-e 's|@moduleshome@|$(moduleshome)|g' \
|
|
-e 's|@initrc@|$(initrc)|g' \
|
|
-e 's|@modulespath@|$(modulespath)|g' \
|
|
-e 's|@VERSION@|$(VERSION)|g' \
|
|
-e 's|@TCLSHDIR@/tclsh|$(TCLSH)|g' \
|
|
-e 's|@TCLSH@|$(TCLSH)|g' \
|
|
-e 's|@PYTHON@|$(PYTHON)|g' \
|
|
-e 's|@pagercmd@|$(pagercmd)|g' \
|
|
-e 's|@verbosity@|$(verbosity)|g' \
|
|
-e 's|@color@|$(setcolor)|g' \
|
|
-e 's|@darkbgcolors@|$(darkbgcolors)|g' \
|
|
-e 's|@lightbgcolors@|$(lightbgcolors)|g' \
|
|
-e 's|@termbg@|$(termbg)|g' \
|
|
-e 's|@lockedconfigs@|$(lockedconfigs)|g' \
|
|
-e 's|@unloadmatchorder@|$(unloadmatchorder)|g' \
|
|
-e 's|@implicitdefault@|$(setimplicitdefault)|g' \
|
|
-e 's|@extendeddefault@|$(setextendeddefault)|g' \
|
|
-e 's|@advversspec@|$(setadvversspec)|g' \
|
|
-e 's|@searchmatch@|$(searchmatch)|g' \
|
|
-e 's|@wa277@|$(setwa277)|g' \
|
|
-e 's|@icase@|$(icase)|g' \
|
|
-e 's|@nearlyforbiddendays@|$(nearlyforbiddendays)|g' \
|
|
-e 's|@tagabbrev@|$(tagabbrev)|g' \
|
|
-e 's|@tagcolorname@|$(tagcolorname)|g' \
|
|
-e 's|@availoutput@|$(availoutput)|g' \
|
|
-e 's|@availterseoutput@|$(availterseoutput)|g' \
|
|
-e 's|@listoutput@|$(listoutput)|g' \
|
|
-e 's|@listterseoutput@|$(listterseoutput)|g' \
|
|
-e 's|@variantshortcut@|$(variantshortcut)|g' \
|
|
-e 's|@editor@|$(editor)|g' \
|
|
-e 's|@autohandling@|$(setautohandling)|g' \
|
|
-e 's|@implicitrequirement@|$(setimplicitrequirement)|g' \
|
|
-e 's|@availindepth@|$(setavailindepth)|g' \
|
|
-e 's|@silentshdbgsupport@|$(setsilentshdbgsupport)|g' \
|
|
-e 's|@ml@|$(setml)|g' \
|
|
-e 's|@setshellstartup@|$(setsetshellstartup)|g' \
|
|
-e 's|@mcookieversioncheck@|$(setmcookieversioncheck)|g' \
|
|
-e 's|@quarantinesupport@|$(setquarantinesupport)|g' \
|
|
-e 's|@libtclenvmodules@|$(setlibtclenvmodules)|g' \
|
|
-e 's|@SHLIB_SUFFIX@|$(SHLIB_SUFFIX)|g' \
|
|
-e 's|@multilibsupport@|$(setmultilibsupport)|g' \
|
|
-e 's|@notmultilibsupport@|$(setnotmultilibsupport)|g' \
|
|
-e 's|@VERSIONING@|$(setversioning)|g' \
|
|
-e 's|@NOTVERSIONING@|$(setnotversioning)|g' \
|
|
-e 's|@MODULES_RELEASE@|$(MODULES_RELEASE)|g' \
|
|
-e 's|@MODULES_BUILD@|$(MODULES_BUILD)|g' \
|
|
-e 's|@MODULES_RPM_RELEASE@|$(MODULES_RPM_RELEASE)|g' \
|
|
-e 's|@MODULES_BUILD_DATE@|$(MODULES_BUILD_DATE)|g' $< > $@
|
|
endef
|
|
|
|
DIST_PREFIX := modules-$(MODULES_RELEASE)$(MODULES_BUILD)
|
|
DIST_WIN_PREFIX := $(DIST_PREFIX)-win
|
|
|
|
# avoid shared definitions to be rebuilt by make
|
|
Makefile.inc: ;
|
|
|
|
version.inc: version.inc.in $(GIT_REFRESH_PREREQ)
|
|
$(translate-in-script)
|
|
|
|
# source version definitions shared across the Makefiles of this project
|
|
ifeq ($(findstring clean,$(MAKECMDGOALS)),)
|
|
-include version.inc
|
|
endif
|
|
|
|
contrib/rpm/environment-modules.spec: contrib/rpm/environment-modules.spec.in $(GIT_REFRESH_PREREQ)
|
|
$(translate-in-script)
|
|
|
|
tcl/envmngt.tcl: tcl/envmngt.tcl.in version.inc
|
|
$(translate-in-script)
|
|
|
|
tcl/init.tcl: tcl/init.tcl.in version.inc
|
|
$(translate-in-script)
|
|
|
|
tcl/main.tcl: tcl/main.tcl.in version.inc
|
|
$(translate-in-script)
|
|
|
|
tcl/mfinterp.tcl: tcl/mfinterp.tcl.in version.inc
|
|
$(translate-in-script)
|
|
|
|
tcl/modfind.tcl: tcl/modfind.tcl.in version.inc
|
|
$(translate-in-script)
|
|
|
|
tcl/report.tcl: tcl/report.tcl.in version.inc
|
|
$(translate-in-script)
|
|
|
|
tcl/subcmd.tcl: tcl/subcmd.tcl.in version.inc
|
|
$(translate-in-script)
|
|
|
|
tcl/init.tcl_i: tcl/init.tcl $(NAGELFAR)
|
|
$(ECHO_GEN)
|
|
rm -f $<_log
|
|
$(NAGELFAR) -instrument $<
|
|
ifeq ($(multilibsupport),y)
|
|
ifeq ($(COVERAGE_MULTILIB),y)
|
|
sed -i -e 's|$(libdir64)|lib64|' -e 's|$(libdir32)|lib|' $@
|
|
else
|
|
sed -i -e 's|$(libdir64)|lib|' -e 's|$(libdir32)|lib|' $@
|
|
endif
|
|
else
|
|
sed -i -e 's|$(libdir)|lib|' $@
|
|
endif
|
|
|
|
# join all tcl/*.tcl files to build modulecmd.tcl
|
|
modulecmd.tcl: tcl/coll.tcl tcl/envmngt.tcl tcl/init.tcl tcl/main.tcl \
|
|
tcl/mfinterp.tcl tcl/modeval.tcl tcl/modfind.tcl tcl/modspec.tcl \
|
|
tcl/report.tcl tcl/subcmd.tcl tcl/util.tcl version.inc
|
|
$(ECHO_GEN)
|
|
echo "#!$(TCLSH)" > $@
|
|
sed -e '3s/.*/# MODULECMD.TCL, a pure TCL implementation of the module command/' \
|
|
-e '1d' -e '/^# vim:/d' -e '/^# ;;;/d' tcl/init.tcl >> $@
|
|
sed -e '1,22d' -e '/^# vim:/d' -e '/^# ;;;/d' tcl/util.tcl >> $@
|
|
sed -e '1,22d' -e '/^# vim:/d' -e '/^# ;;;/d' tcl/envmngt.tcl >> $@
|
|
sed -e '1,22d' -e '/^# vim:/d' -e '/^# ;;;/d' tcl/report.tcl >> $@
|
|
sed -e '1,22d' -e '/^# vim:/d' -e '/^# ;;;/d' tcl/mfinterp.tcl >> $@
|
|
sed -e '1,22d' -e '/^# vim:/d' -e '/^# ;;;/d' tcl/modfind.tcl >> $@
|
|
sed -e '1,22d' -e '/^# vim:/d' -e '/^# ;;;/d' tcl/modeval.tcl >> $@
|
|
sed -e '1,20d' -e '/^# vim:/d' -e '/^# ;;;/d' tcl/modspec.tcl >> $@
|
|
sed -e '1,20d' -e '/^# vim:/d' -e '/^# ;;;/d' tcl/coll.tcl >> $@
|
|
sed -e '1,22d' -e '/^# vim:/d' -e '/^# ;;;/d' tcl/subcmd.tcl >> $@
|
|
sed -e '1,22d' -e '/^# vim:/d' -e '/^# ;;;/d' tcl/main.tcl >> $@
|
|
chmod +x $@
|
|
|
|
# generate an empty changelog file if not working from git repository
|
|
ifeq ($(wildcard .git),.git)
|
|
ChangeLog: script/gitlog2changelog.py
|
|
$(ECHO_GEN)
|
|
script/gitlog2changelog.py
|
|
else
|
|
ChangeLog:
|
|
$(ECHO_GEN)
|
|
echo "Please refer to the NEWS document to learn about main changes" >$@
|
|
endif
|
|
|
|
README:
|
|
$(ECHO_GEN)
|
|
sed -e '1,10d' $@.md > $@
|
|
|
|
script/add.modules: script/add.modules.in
|
|
$(translate-in-script)
|
|
chmod +x $@
|
|
|
|
script/gitlog2changelog.py: script/gitlog2changelog.py.in
|
|
$(translate-in-script)
|
|
chmod +x $@
|
|
|
|
script/modulecmd: script/modulecmd.in
|
|
$(translate-in-script)
|
|
chmod +x $@
|
|
|
|
# Tcl extension library-related rules
|
|
lib/libtclenvmodules$(SHLIB_SUFFIX):
|
|
$(MAKE) --no-print-directory -C lib $(@F)
|
|
|
|
lib/libtestutil-closedir$(SHLIB_SUFFIX):
|
|
$(MAKE) --no-print-directory -C lib $(@F)
|
|
|
|
lib/libtestutil-getpwuid$(SHLIB_SUFFIX):
|
|
$(MAKE) --no-print-directory -C lib $(@F)
|
|
|
|
lib/libtestutil-getgroups$(SHLIB_SUFFIX):
|
|
$(MAKE) --no-print-directory -C lib $(@F)
|
|
|
|
lib/libtestutil-0getgroups$(SHLIB_SUFFIX):
|
|
$(MAKE) --no-print-directory -C lib $(@F)
|
|
|
|
lib/libtestutil-dupgetgroups$(SHLIB_SUFFIX):
|
|
$(MAKE) --no-print-directory -C lib $(@F)
|
|
|
|
lib/libtestutil-getgrgid$(SHLIB_SUFFIX):
|
|
$(MAKE) --no-print-directory -C lib $(@F)
|
|
|
|
lib/libtestutil-time$(SHLIB_SUFFIX):
|
|
$(MAKE) --no-print-directory -C lib $(@F)
|
|
|
|
lib/libtestutil-mktime$(SHLIB_SUFFIX):
|
|
$(MAKE) --no-print-directory -C lib $(@F)
|
|
|
|
# example configs for test rules
|
|
testsuite/example/.modulespath: testsuite/example/.modulespath.in
|
|
$(translate-in-script)
|
|
|
|
testsuite/example/modulespath-wild: testsuite/example/modulespath-wild.in
|
|
$(translate-in-script)
|
|
|
|
testsuite/example/modulerc: testsuite/example/modulerc.in
|
|
$(translate-in-script)
|
|
|
|
testsuite/example/initrc-1: testsuite/example/initrc-1.in
|
|
$(translate-in-script)
|
|
|
|
testsuite/example/initrc: testsuite/example/initrc.in
|
|
$(translate-in-script)
|
|
|
|
install-testsiteconfig: testsuite/example/siteconfig.tcl
|
|
$(MAKE) -C init install-testconfig DESTDIR=$(DESTDIR)
|
|
cp $^ $(DESTDIR)$(etcdir)/
|
|
|
|
install-testsiteconfig-1: testsuite/example/siteconfig.tcl-1
|
|
$(MAKE) -C init install-testconfig DESTDIR=$(DESTDIR)
|
|
cp $^ $(DESTDIR)$(etcdir)/siteconfig.tcl
|
|
|
|
install-testmodulerc: testsuite/example/modulerc
|
|
$(MAKE) -C init install-testconfig DESTDIR=$(DESTDIR)
|
|
cp $^ $(DESTDIR)$(initrc)
|
|
|
|
install-testinitrc-1: testsuite/example/initrc-1
|
|
$(MAKE) -C init install-testconfig DESTDIR=$(DESTDIR)
|
|
cp $^ $(DESTDIR)$(initrc)
|
|
|
|
install-testinitrc: testsuite/example/initrc
|
|
$(MAKE) -C init install-testconfig DESTDIR=$(DESTDIR)
|
|
cp $^ $(DESTDIR)$(initrc)
|
|
|
|
install-testetcrc: testsuite/etc/empty
|
|
$(MAKE) -C init install-testconfig DESTDIR=$(DESTDIR)
|
|
cp $^ $(DESTDIR)$(etcdir)/rc
|
|
|
|
install-testmodspath: testsuite/example/.modulespath
|
|
$(MAKE) -C init install-testconfig DESTDIR=$(DESTDIR)
|
|
cp $^ $(DESTDIR)$(modulespath)
|
|
|
|
install-testmodspath-empty: testsuite/example/modulespath-empty
|
|
$(MAKE) -C init install-testconfig DESTDIR=$(DESTDIR)
|
|
cp $^ $(DESTDIR)$(modulespath)
|
|
|
|
install-testmodspath-wild: testsuite/example/modulespath-wild
|
|
$(MAKE) -C init install-testconfig DESTDIR=$(DESTDIR)
|
|
cp $^ $(DESTDIR)$(modulespath)
|
|
|
|
uninstall-testconfig:
|
|
rm -f $(DESTDIR)$(etcdir)/rc
|
|
rm -f $(DESTDIR)$(etcdir)/siteconfig.tcl
|
|
rm -f $(DESTDIR)$(initrc)
|
|
rm -f $(DESTDIR)$(modulespath)
|
|
$(MAKE) -C init uninstall-testconfig DESTDIR=$(DESTDIR)
|
|
|
|
install: $(INSTALL_PREREQ)
|
|
mkdir -p $(DESTDIR)$(libexecdir)
|
|
mkdir -p $(DESTDIR)$(bindir)
|
|
mkdir -p $(DESTDIR)$(etcdir)
|
|
cp modulecmd.tcl $(DESTDIR)$(libexecdir)/
|
|
chmod +x $(DESTDIR)$(libexecdir)/modulecmd.tcl
|
|
ifeq ($(libtclenvmodules),y)
|
|
mkdir -p $(DESTDIR)$(libdir)
|
|
cp lib/libtclenvmodules$(SHLIB_SUFFIX) $(DESTDIR)$(libdir)/libtclenvmodules$(SHLIB_SUFFIX)
|
|
chmod +x $(DESTDIR)$(libdir)/libtclenvmodules$(SHLIB_SUFFIX)
|
|
endif
|
|
cp script/envml $(DESTDIR)$(bindir)/
|
|
chmod +x $(DESTDIR)$(bindir)/envml
|
|
cp script/add.modules $(DESTDIR)$(bindir)/
|
|
chmod +x $(DESTDIR)$(bindir)/add.modules
|
|
cp script/modulecmd $(DESTDIR)$(bindir)/
|
|
chmod +x $(DESTDIR)$(bindir)/modulecmd
|
|
cp script/mkroot $(DESTDIR)$(bindir)/
|
|
chmod +x $(DESTDIR)$(bindir)/mkroot
|
|
ifeq ($(windowssupport),y)
|
|
cp script/module.cmd $(DESTDIR)$(bindir)/
|
|
chmod +x $(DESTDIR)$(bindir)/module.cmd
|
|
cp script/ml.cmd $(DESTDIR)$(bindir)/
|
|
chmod +x $(DESTDIR)$(bindir)/ml.cmd
|
|
cp script/envml.cmd $(DESTDIR)$(bindir)/
|
|
chmod +x $(DESTDIR)$(bindir)/envml.cmd
|
|
endif
|
|
ifneq ($(wildcard $(DESTDIR)$(etcdir)/siteconfig.tcl),$(DESTDIR)$(etcdir)/siteconfig.tcl)
|
|
cp siteconfig.tcl $(DESTDIR)$(etcdir)/siteconfig.tcl
|
|
endif
|
|
ifeq ($(docinstall),y)
|
|
mkdir -p $(DESTDIR)$(docdir)
|
|
cp COPYING.GPLv2 $(DESTDIR)$(docdir)/
|
|
cp ChangeLog $(DESTDIR)$(docdir)/
|
|
cp README $(DESTDIR)$(docdir)/
|
|
endif
|
|
ifeq ($(vimaddons),y)
|
|
mkdir -p $(DESTDIR)$(vimdatadir)/ftdetect
|
|
mkdir -p $(DESTDIR)$(vimdatadir)/ftplugin
|
|
mkdir -p $(DESTDIR)$(vimdatadir)/syntax
|
|
cp contrib/vim/ftdetect/modulefile.vim $(DESTDIR)$(vimdatadir)/ftdetect
|
|
cp contrib/vim/ftplugin/modulefile.vim $(DESTDIR)$(vimdatadir)/ftplugin
|
|
cp contrib/vim/syntax/modulefile.vim $(DESTDIR)$(vimdatadir)/syntax
|
|
endif
|
|
$(MAKE) -C init install DESTDIR=$(DESTDIR)
|
|
ifneq ($(builddoc),n)
|
|
$(MAKE) -C doc install DESTDIR=$(DESTDIR)
|
|
else
|
|
@echo
|
|
@echo "WARNING: Documentation not built nor installed" >&2
|
|
endif
|
|
@echo
|
|
@echo "NOTICE: Modules installation is complete." >&2
|
|
@echo " Please read the 'Configuration' section in INSTALL guide to learn" >&2
|
|
@echo " how to adapt your installation and make it fit your needs." >&2
|
|
@echo
|
|
|
|
uninstall:
|
|
rm -f $(DESTDIR)$(libexecdir)/modulecmd.tcl
|
|
ifeq ($(libtclenvmodules),y)
|
|
rm -f $(DESTDIR)$(libdir)/libtclenvmodules$(SHLIB_SUFFIX)
|
|
endif
|
|
rm -f $(DESTDIR)$(bindir)/envml
|
|
rm -f $(DESTDIR)$(bindir)/add.modules
|
|
rm -f $(DESTDIR)$(bindir)/modulecmd
|
|
rm -f $(DESTDIR)$(bindir)/mkroot
|
|
ifeq ($(windowssupport),y)
|
|
rm -f $(DESTDIR)$(bindir)/module.cmd
|
|
rm -f $(DESTDIR)$(bindir)/ml.cmd
|
|
rm -f $(DESTDIR)$(bindir)/envml.cmd
|
|
endif
|
|
ifeq ($(vimaddons),y)
|
|
rm -f $(DESTDIR)$(vimdatadir)/ftdetect/modulefile.vim
|
|
rm -f $(DESTDIR)$(vimdatadir)/ftplugin/modulefile.vim
|
|
rm -f $(DESTDIR)$(vimdatadir)/syntax/modulefile.vim
|
|
-rmdir $(DESTDIR)$(vimdatadir)/ftdetect
|
|
-rmdir $(DESTDIR)$(vimdatadir)/ftplugin
|
|
-rmdir $(DESTDIR)$(vimdatadir)/syntax
|
|
-rmdir -p $(DESTDIR)$(vimdatadir)
|
|
endif
|
|
ifeq ($(docinstall),y)
|
|
rm -f $(addprefix $(DESTDIR)$(docdir)/,ChangeLog README COPYING.GPLv2)
|
|
ifeq ($(builddoc),n)
|
|
rmdir $(DESTDIR)$(docdir)
|
|
endif
|
|
endif
|
|
$(MAKE) -C init uninstall DESTDIR=$(DESTDIR)
|
|
ifneq ($(builddoc),n)
|
|
$(MAKE) -C doc uninstall DESTDIR=$(DESTDIR)
|
|
endif
|
|
rmdir $(DESTDIR)$(libexecdir)
|
|
ifeq ($(libtclenvmodules),y)
|
|
rmdir $(DESTDIR)$(libdir)
|
|
endif
|
|
rmdir $(DESTDIR)$(bindir)
|
|
rmdir $(DESTDIR)$(datarootdir)
|
|
$(RMDIR_IGN_NON_EMPTY) $(DESTDIR)$(prefix) || true
|
|
|
|
# include pre-generated documents not to require documentation build
|
|
# tools when installing from dist tarball
|
|
dist-tar: ChangeLog contrib/rpm/environment-modules.spec pkgdoc
|
|
$(ECHO_GEN2) $(DIST_PREFIX).tar
|
|
git archive --prefix=$(DIST_PREFIX)/ --worktree-attributes \
|
|
-o $(DIST_PREFIX).tar HEAD
|
|
tar -rf $(DIST_PREFIX).tar --transform 's,^,$(DIST_PREFIX)/,' \
|
|
lib/configure lib/config.h.in ChangeLog doc/build/MIGRATING.txt \
|
|
doc/build/diff_v3_v4.txt doc/build/INSTALL.txt doc/build/INSTALL-win.txt \
|
|
doc/build/NEWS.txt doc/build/CONTRIBUTING.txt doc/build/module.1.in \
|
|
doc/build/ml.1 doc/build/modulefile.4 contrib/rpm/environment-modules.spec
|
|
|
|
dist-gzip: dist-tar
|
|
$(ECHO_GEN2) $(DIST_PREFIX).tar.gz
|
|
gzip -f -9 $(DIST_PREFIX).tar
|
|
|
|
dist-bzip2: dist-tar
|
|
$(ECHO_GEN2) $(DIST_PREFIX).tar.bz2
|
|
bzip2 -f $(DIST_PREFIX).tar
|
|
|
|
dist: dist-gzip
|
|
|
|
# dist zip ball for Windows platform with all pre-generated relevant files
|
|
dist-win: modulecmd.tcl ChangeLog README pkgdoc
|
|
$(ECHO_GEN2) $(DIST_WIN_PREFIX).zip
|
|
mkdir $(DIST_WIN_PREFIX)
|
|
mkdir $(DIST_WIN_PREFIX)/libexec
|
|
cp modulecmd.tcl $(DIST_WIN_PREFIX)/libexec/
|
|
mkdir $(DIST_WIN_PREFIX)/bin
|
|
cp script/module.cmd $(DIST_WIN_PREFIX)/bin/
|
|
cp script/ml.cmd $(DIST_WIN_PREFIX)/bin/
|
|
cp script/envml.cmd $(DIST_WIN_PREFIX)/bin/
|
|
mkdir $(DIST_WIN_PREFIX)/doc
|
|
cp COPYING.GPLv2 $(DIST_WIN_PREFIX)/doc/
|
|
cp ChangeLog $(DIST_WIN_PREFIX)/doc/
|
|
cp README $(DIST_WIN_PREFIX)/doc/
|
|
cp doc/build/MIGRATING.txt $(DIST_WIN_PREFIX)/doc/
|
|
cp doc/build/INSTALL-win.txt $(DIST_WIN_PREFIX)/doc/
|
|
cp doc/build/NEWS.txt $(DIST_WIN_PREFIX)/doc/
|
|
cp doc/build/CONTRIBUTING.txt $(DIST_WIN_PREFIX)/doc/
|
|
cp doc/build/module.txt $(DIST_WIN_PREFIX)/doc/
|
|
cp doc/build/modulefile.txt $(DIST_WIN_PREFIX)/doc/
|
|
$(MAKE) --no-print-directory -C init dist-win DIST_WIN_PREFIX=../$(DIST_WIN_PREFIX)
|
|
cp script/INSTALL.bat $(DIST_WIN_PREFIX)/
|
|
cp script/UNINSTALL.bat $(DIST_WIN_PREFIX)/
|
|
cp script/TESTINSTALL.bat $(DIST_WIN_PREFIX)/
|
|
zip -r $(DIST_WIN_PREFIX).zip $(DIST_WIN_PREFIX)
|
|
rm -rf $(DIST_WIN_PREFIX)
|
|
|
|
srpm: dist-bzip2
|
|
rpmbuild -ts $(DIST_PREFIX).tar.bz2
|
|
|
|
rpm: dist-bzip2
|
|
rpmbuild -tb $(DIST_PREFIX).tar.bz2
|
|
|
|
clean:
|
|
rm -f *.log *.sum
|
|
rm -f tcl/*.tcl_i tcl/*.tcl_log tcl/*.tcl_m
|
|
rm -rf coverage
|
|
# do not clean generated docs if not in git repository
|
|
ifeq ($(wildcard .git),.git)
|
|
rm -f ChangeLog
|
|
endif
|
|
rm -f README
|
|
rm -f modulecmd.tcl
|
|
rm -f $(MODULECMDTEST) $(MODULECMDTEST)_i
|
|
rm -f tcl/envmngt.tcl
|
|
rm -f tcl/init.tcl
|
|
rm -f tcl/main.tcl
|
|
rm -f tcl/mfinterp.tcl
|
|
rm -f tcl/modfind.tcl
|
|
rm -f tcl/report.tcl
|
|
rm -f tcl/subcmd.tcl
|
|
rm -f script/add.modules
|
|
rm -f script/gitlog2changelog.py
|
|
rm -f script/modulecmd
|
|
rm -f testsuite/example/.modulespath testsuite/example/modulespath-wild testsuite/example/modulerc testsuite/example/initrc-1 testsuite/example/initrc
|
|
rm -f modules-*.tar modules-*.tar.gz modules-*.tar.bz2
|
|
rm -rf modules-*-win/
|
|
rm -f modules-*-win.zip
|
|
rm -f environment-modules-*.srpm environment-modules-*.rpm
|
|
$(MAKE) -C init clean
|
|
ifneq ($(builddoc),n)
|
|
$(MAKE) -C doc clean
|
|
endif
|
|
rm -f version.inc
|
|
rm -f contrib/rpm/environment-modules.spec
|
|
ifneq ($(wildcard lib/Makefile),)
|
|
$(MAKE) -C lib clean
|
|
endif
|
|
|
|
distclean: clean
|
|
rm -f Makefile.inc
|
|
rm -f site.exp
|
|
rm -f icdiff .noicdiff
|
|
rm -rf $(NAGELFAR_RELEASE)
|
|
rm -rf $(TCL_RELEASE83)
|
|
rm -f tclsh83
|
|
rm -f tcl/tags
|
|
rm -f tcl/GTAGS tcl/GRTAGS tcl/GPATH tcl/gtags.file
|
|
ifneq ($(wildcard lib/Makefile),)
|
|
$(MAKE) -C lib distclean
|
|
endif
|
|
|
|
# make specific modulecmd script for test to check built extension lib
|
|
# if coverage asked, instrument script and clear previous coverage log
|
|
$(MODULECMDTEST): modulecmd.tcl
|
|
$(ECHO_GEN)
|
|
ifeq ($(multilibsupport),y)
|
|
sed -e 's|$(libdir64)|lib|' -e 's|$(libdir32)|lib|' $< > $@
|
|
else
|
|
sed -e 's|$(libdir)|lib|' $< > $@
|
|
endif
|
|
|
|
tcl/%.tcl_i: tcl/%.tcl $(NAGELFAR)
|
|
$(ECHO_GEN)
|
|
rm -f $<_log
|
|
$(NAGELFAR) -instrument $<
|
|
|
|
# for coverage check, run tests on instrumented file to create coverage log
|
|
# over split tcl source files
|
|
$(MODULECMDTEST)_i: tcl/coll.tcl_i tcl/envmngt.tcl_i tcl/init.tcl_i tcl/main.tcl_i \
|
|
tcl/mfinterp.tcl_i tcl/modeval.tcl_i tcl/modfind.tcl_i tcl/modspec.tcl_i \
|
|
tcl/report.tcl_i tcl/subcmd.tcl_i tcl/util.tcl_i version.inc
|
|
$(ECHO_GEN)
|
|
echo "#!$(TCLSH)" > $@
|
|
echo 'source tcl/init.tcl_i' >> $@
|
|
echo 'source tcl/util.tcl_i' >> $@
|
|
echo 'source tcl/envmngt.tcl_i' >> $@
|
|
echo 'source tcl/report.tcl_i' >> $@
|
|
echo 'source tcl/mfinterp.tcl_i' >> $@
|
|
echo 'source tcl/modfind.tcl_i' >> $@
|
|
echo 'source tcl/modeval.tcl_i' >> $@
|
|
echo 'source tcl/modspec.tcl_i' >> $@
|
|
echo 'source tcl/coll.tcl_i' >> $@
|
|
echo 'source tcl/subcmd.tcl_i' >> $@
|
|
echo 'source tcl/main.tcl_i' >> $@
|
|
chmod +x $@
|
|
|
|
# if coverage enabled, run tests on instrumented file to create coverage log
|
|
ifeq ($(COVERAGE),y)
|
|
export MODULECMD = $(MODULECMDTEST)_i
|
|
endif
|
|
|
|
# specific target to build test dependencies
|
|
test-deps: $(TEST_PREREQ)
|
|
|
|
# if coverage enabled create markup file for better read coverage result
|
|
test: $(TEST_PREREQ)
|
|
TCLSH=$(TCLSH); export TCLSH; \
|
|
OBJDIR=`pwd -P`; export OBJDIR; \
|
|
TESTSUITEDIR=`cd testsuite;pwd -P`; export TESTSUITEDIR; \
|
|
runtest --srcdir $$TESTSUITEDIR --objdir $$OBJDIR $(RUNTESTFLAGS) --tool modules $(RUNTESTFILES)
|
|
ifeq ($(COVERAGE),y)
|
|
$(NAGELFAR) -markup tcl/coll.tcl
|
|
$(NAGELFAR) -markup tcl/envmngt.tcl
|
|
$(NAGELFAR) -markup tcl/init.tcl
|
|
$(NAGELFAR) -markup tcl/main.tcl
|
|
$(NAGELFAR) -markup tcl/mfinterp.tcl
|
|
$(NAGELFAR) -markup tcl/modeval.tcl
|
|
$(NAGELFAR) -markup tcl/modfind.tcl
|
|
$(NAGELFAR) -markup tcl/modspec.tcl
|
|
$(NAGELFAR) -markup tcl/report.tcl
|
|
$(NAGELFAR) -markup tcl/subcmd.tcl
|
|
$(NAGELFAR) -markup tcl/util.tcl
|
|
endif
|
|
|
|
testinstall:
|
|
OBJDIR=`pwd -P`; export OBJDIR; \
|
|
TESTSUITEDIR=`cd testsuite;pwd -P`; export TESTSUITEDIR; \
|
|
runtest --srcdir $$TESTSUITEDIR --objdir $$OBJDIR $(RUNTESTFLAGS) --tool install $(RUNTESTFILES)
|
|
|
|
|
|
# install enhanced diff tool (to review test results)
|
|
icdiff:
|
|
$(WGET) $(ICDIFF_DLSRC)$@ || true
|
|
echo "$(ICDIFF_CHECKSUM) $@" | md5sum --status -c - || \
|
|
md5 -c $(ICDIFF_CHECKSUM) $@
|
|
chmod +x $@
|
|
|
|
# install old Tcl interpreter (for code coverage purpose)
|
|
tclsh83:
|
|
$(WGET) $(TCL_DLSRC)$(TCL_DIST83) || true
|
|
echo "$(TCL_DISTSUM83) $(TCL_DIST83)" | md5sum --status -c - || \
|
|
md5 -c $(TCL_DISTSUM83) $@ || (rm -f $(TCL_DIST83) && false)
|
|
tar xzf $(TCL_DIST83)
|
|
cd $(TCL_RELEASE83)/unix && bash configure --disable-shared && make
|
|
echo '#!/bin/bash' >$@
|
|
echo 'exec $(TCLSH83) $${@}' >>$@
|
|
chmod +x $@
|
|
rm $(TCL_DIST83)
|
|
|
|
# install code coverage tool
|
|
# download from alt. source if correct tarball not retrieved from primary location
|
|
$(NAGELFAR):
|
|
$(WGET) $(NAGELFAR_DLSRC1)$(NAGELFAR_DIST) || true
|
|
echo "$(NAGELFAR_DISTSUM) $(NAGELFAR_DIST)" | md5sum --status -c - || \
|
|
(rm -f $(NAGELFAR_DIST) && false)
|
|
tar xzf $(NAGELFAR_DIST)
|
|
rm $(NAGELFAR_DIST)
|
|
|
|
# check syntax over joined code (modulecmd.tcl) to avoid 'unknown procedure'
|
|
# errors obtained when checking each tcl file separately
|
|
testsyntax: $(MODULECMDTEST) $(NAGELFAR)
|
|
$(NAGELFAR) -len 78 $<
|
|
|
|
# build Ctags index
|
|
tcl/tags: tcl/coll.tcl tcl/envmngt.tcl.in tcl/init.tcl.in tcl/main.tcl.in \
|
|
tcl/mfinterp.tcl.in tcl/modeval.tcl tcl/modfind.tcl.in tcl/modspec.tcl \
|
|
tcl/report.tcl.in tcl/subcmd.tcl.in tcl/util.tcl
|
|
ctags --tag-relative -f $@ --langmap=tcl:.tcl.in tcl/coll.tcl \
|
|
tcl/envmngt.tcl.in tcl/init.tcl.in tcl/main.tcl.in tcl/mfinterp.tcl.in \
|
|
tcl/modeval.tcl tcl/modfind.tcl.in tcl/modspec.tcl tcl/report.tcl.in \
|
|
tcl/subcmd.tcl.in tcl/util.tcl
|
|
|
|
# build Gtags target files
|
|
tcl/gtags.file:
|
|
echo coll.tcl > $@
|
|
echo envmngt.tcl.in >> $@
|
|
echo init.tcl.in >> $@
|
|
echo main.tcl.in >> $@
|
|
echo mfinterp.tcl.in >> $@
|
|
echo modeval.tcl >> $@
|
|
echo modfind.tcl.in >> $@
|
|
echo modspec.tcl >> $@
|
|
echo report.tcl.in >> $@
|
|
echo subcmd.tcl.in >> $@
|
|
echo util.tcl >> $@
|
|
|
|
# build Gtags tag file
|
|
tcl/GTAGS: tcl/coll.tcl tcl/envmngt.tcl.in tcl/init.tcl.in tcl/main.tcl.in \
|
|
tcl/mfinterp.tcl.in tcl/modeval.tcl tcl/modfind.tcl.in tcl/modspec.tcl \
|
|
tcl/report.tcl.in tcl/subcmd.tcl.in tcl/util.tcl tcl/gtags.file
|
|
gtags -C tcl --gtagsconf ../.globalrc
|
|
|
|
|
|
# quiet build targets unless verbose mode set
|
|
ifeq ($(VERBOSE),1)
|
|
V = 1
|
|
endif
|
|
# let verbose by default the install/clean/test and other specific non-build targets
|
|
$(V).SILENT: initdir pkgdoc doc version.inc contrib/rpm/environment-modules.spec \
|
|
modulecmd.tcl tcl/envmngt.tcl tcl/init.tcl tcl/main.tcl tcl/mfinterp.tcl \
|
|
tcl/modfind.tcl tcl/report.tcl tcl/subcmd.tcl tcl/coll.tcl_i tcl/envmngt.tcl_i \
|
|
tcl/init.tcl_i tcl/main.tcl_i tcl/mfinterp.tcl_i tcl/modfind.tcl_i tcl/modeval.tcl_i \
|
|
tcl/modspec.tcl_i tcl/report.tcl_i tcl/subcmd.tcl_i tcl/util.tcl_i ChangeLog README \
|
|
script/add.modules script/gitlog2changelog.py script/modulecmd \
|
|
lib/libtclenvmodules$(SHLIB_SUFFIX) lib/libtestutil-closedir$(SHLIB_SUFFIX) \
|
|
lib/libtestutil-getpwuid$(SHLIB_SUFFIX) lib/libtestutil-getgroups$(SHLIB_SUFFIX) \
|
|
lib/libtestutil-0getgroups$(SHLIB_SUFFIX) \
|
|
lib/libtestutil-dupgetgroups$(SHLIB_SUFFIX) lib/libtestutil-getgrgid$(SHLIB_SUFFIX) \
|
|
lib/libtestutil-time$(SHLIB_SUFFIX) lib/libtestutil-mktime$(SHLIB_SUFFIX) \
|
|
testsuite/example/.modulespath testsuite/example/modulespath-wild \
|
|
testsuite/example/modulerc testsuite/example/initrc-1 testsuite/example/initrc \
|
|
dist-tar dist-gzip dist-bzip2 dist-win $(MODULECMDTEST) $(MODULECMDTEST)_i
|