mirror of
https://github.com/envmodules/modules.git
synced 2026-06-10 00:56:30 +08:00
Add --with-quarantine-vars configure option to define quarantine mechanism configuration at build time. Value passed to the configure option will be used by Makefile to initialize in the various initialization scripts the MODULES_RUN_QUARANTINE variable and eventual MODULES_RUNENV_<VAR>.
174 lines
5.9 KiB
Makefile
174 lines
5.9 KiB
Makefile
.PHONY: install install-testconfig uninstall-testconfig uninstall clean
|
|
|
|
SH_LIKE = sh ksh bash zsh profile.sh bash_completion
|
|
CSH_LIKE = csh tcsh tcsh_completion profile.csh
|
|
OTHER = perl.pm python.py ruby.rb lisp tcl fish cmake r.R
|
|
|
|
# example modulefiles to install
|
|
EXAMPLE_MODFILES_SRCDIR := ../contrib/modulefiles
|
|
EXAMPLE_MODFILES = dot module-git module-info modules null use.own
|
|
EXAMPLE_TESTCONFIG_MODFILES = null
|
|
|
|
# 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
|
|
|
|
# source version definitions shared across the Makefiles of this project
|
|
include ../version.inc
|
|
|
|
# kind of config file to use: modulerc or .modulespath
|
|
ifeq ($(setdotmodulespath),y)
|
|
# both configuration files will be installed and in this case default init
|
|
# scripts will use .modulespath prior to modulerc. If .modulespath sets a
|
|
# module path then modulerc will be ignored
|
|
ALL_CONFIG := .modulespath modulerc
|
|
else
|
|
ALL_CONFIG := modulerc
|
|
endif
|
|
|
|
# generate 'module use' commands to put in modulerc from modulepath
|
|
modulerc := $(addprefix \nmodule use --append ,$(subst :, ,$(modulepath)))
|
|
# generate 'module load' commands to put in modulerc from loadedmodules
|
|
ifneq ($(loadedmodules),)
|
|
modulerc := $(modulerc)$(addprefix \nmodule load ,\
|
|
$(subst :, ,$(loadedmodules)))
|
|
endif
|
|
|
|
ifeq ($(compatversion),y)
|
|
SH_LIKE += profile-compat.sh
|
|
CSH_LIKE += profile-compat.csh
|
|
endif
|
|
|
|
ALL_SHELLS = $(SH_LIKE) $(CSH_LIKE) $(OTHER)
|
|
|
|
all: $(ALL_SHELLS) $(ALL_CONFIG) $(EXAMPLE_MODFILES_SRCDIR)/modules
|
|
|
|
# if enabled translate to keep text after markup elsewhere remove the
|
|
# entire line
|
|
ifeq ($(setmanpath),y)
|
|
setmanpathre := s|@setmanpath@||g
|
|
else
|
|
setmanpathre := /@setmanpath@/d
|
|
endif
|
|
ifeq ($(setbinpath),y)
|
|
setbinpathre := s|@setbinpath@||g
|
|
else
|
|
setbinpathre := /@setbinpath@/d
|
|
endif
|
|
ifeq ($(compatversion),y)
|
|
compatversionre := s|@compatversion@||g
|
|
notcompatversionre := /@notcompatversion@/d
|
|
else
|
|
compatversionre := /@compatversion@/d
|
|
notcompatversionre := s|@notcompatversion@||g
|
|
endif
|
|
|
|
# define translation rules for quarantine mechanism
|
|
ifeq ($(quarantinevars),)
|
|
setquarvarsre := /@setquarvars@/d
|
|
notsetquarvarsre := s|@notsetquarvars@||g
|
|
else
|
|
setquarvarsre := s|@setquarvars@||g
|
|
notsetquarvarsre := /@notsetquarvars@/d
|
|
define runenvvarre
|
|
$(if $(filter-out ${1},${2}),s|\(@\(.*\)RUNENV_VAR\(.*\)RUNENV_VAL\(.*\)@\)|\2MODULES_RUNENV_${1}\3${2}\4\n\1|g;)
|
|
endef
|
|
quarvarsre = -e 's|@RUN_QUARANTINE@|$(foreach vv,$(quarantinevars),$(firstword\
|
|
$(subst =, ,$(vv))))|g;
|
|
quarvarsre += $(foreach vv,$(quarantinevars),$(call runenvvarre,$(firstword\
|
|
$(subst =, ,$(vv))),$(subst $(firstword $(subst =, ,$(vv)))=,,$(vv))))
|
|
quarvarsre += s/@.*RUNENV_VAR.*@//;'
|
|
endif
|
|
|
|
define translate-in-script
|
|
sed -e 's|@prefix@|$(prefix)|g' \
|
|
-e 's|@libexecdir@|$(libexecdir)|g' \
|
|
-e 's|@initdir@|$(initdir)|g' \
|
|
-e 's|@modulefilesdir@|$(modulefilesdir)|g' \
|
|
-e 's|@bindir@|$(bindir)|g' \
|
|
-e 's|@mandir@|$(mandir)|g' \
|
|
-e '$(setmanpathre)' \
|
|
-e '$(setbinpathre)' \
|
|
-e '$(compatversionre)' \
|
|
-e '$(notcompatversionre)' \
|
|
-e 's|@modulerc@|$(modulerc)|g' \
|
|
-e 's|@modulepath@|$(modulepath)|g' \
|
|
-e '$(setquarvarsre)' $(quarvarsre) \
|
|
-e '$(notsetquarvarsre)' \
|
|
-e 's|@SHELLNAME@|$@|g' \
|
|
-e 's|@VERSION@|$(MODULES_RELEASE)$(MODULES_BUILD)|g' \
|
|
-e 's|@TCLSH@|$(TCLSH)|g' $< > $@
|
|
endef
|
|
|
|
# avoid shared definitions to be rebuilt by make
|
|
../Makefile.inc ../version.inc: ;
|
|
|
|
%: %.in
|
|
$(translate-in-script)
|
|
|
|
# tcsh is derivated from csh init script
|
|
tcsh: csh.in
|
|
$(translate-in-script)
|
|
|
|
# this rule is needed for profile.sh to get matched
|
|
profile.sh: profile.sh.in
|
|
$(translate-in-script)
|
|
|
|
# this rule is needed for profile-compat.sh to get matched
|
|
profile-compat.sh: profile-compat.sh.in
|
|
$(translate-in-script)
|
|
|
|
$(EXAMPLE_MODFILES_SRCDIR)/modules: $(EXAMPLE_MODFILES_SRCDIR)/modules.in ../version.inc
|
|
$(translate-in-script)
|
|
|
|
# example configs for test rules
|
|
install-testconfig:
|
|
mkdir -p $(DESTDIR)$(initdir)
|
|
mkdir -p $(DESTDIR)$(modulefilesdir)
|
|
mkdir -p $(DESTDIR)$(prefix)/test/modulefiles $(DESTDIR)$(prefix)/test/etc
|
|
cp $(addprefix $(EXAMPLE_MODFILES_SRCDIR)/,$(EXAMPLE_TESTCONFIG_MODFILES)) $(DESTDIR)$(modulefilesdir)/
|
|
|
|
uninstall-testconfig:
|
|
rmdir $(DESTDIR)$(prefix)/test/modulefiles $(DESTDIR)$(prefix)/test/etc $(DESTDIR)$(prefix)/test
|
|
rm -f $(addprefix $(DESTDIR)$(modulefilesdir)/,$(EXAMPLE_TESTCONFIG_MODFILES))
|
|
rmdir --ignore-fail-on-non-empty $(DESTDIR)$(modulefilesdir)
|
|
rmdir --ignore-fail-on-non-empty $(DESTDIR)$(initdir)
|
|
|
|
install: all
|
|
mkdir -p $(DESTDIR)$(initdir)
|
|
mkdir -p $(DESTDIR)$(initdir)/ksh-functions
|
|
mkdir -p $(DESTDIR)$(modulefilesdir)
|
|
cp $(ALL_SHELLS) $(DESTDIR)$(initdir)/
|
|
cp fish_completion $(DESTDIR)$(initdir)/
|
|
cp -r zsh-functions $(DESTDIR)$(initdir)/
|
|
cp ksh $(DESTDIR)$(initdir)/ksh-functions/module
|
|
ifeq ($(compatversion),y)
|
|
cp ksh $(DESTDIR)$(initdir)/ksh-functions/switchml
|
|
else
|
|
rm -f $(DESTDIR)$(initdir)/ksh-functions/switchml
|
|
endif
|
|
cp -P --remove-destination $(ALL_CONFIG) $(DESTDIR)$(initdir)/
|
|
ifeq ($(examplemodulefiles),y)
|
|
cp $(addprefix $(EXAMPLE_MODFILES_SRCDIR)/,$(EXAMPLE_MODFILES)) $(DESTDIR)$(modulefilesdir)/
|
|
endif
|
|
|
|
uninstall:
|
|
rm -f $(addprefix $(DESTDIR)$(initdir)/,$(ALL_SHELLS) fish_completion)
|
|
rm -f $(DESTDIR)$(initdir)/ksh-functions/module
|
|
ifeq ($(compatversion),y)
|
|
rm -f $(DESTDIR)$(initdir)/ksh-functions/switchml
|
|
endif
|
|
rm -f $(DESTDIR)$(initdir)/zsh-functions/_module
|
|
rm -f $(addprefix $(DESTDIR)$(initdir)/,$(ALL_CONFIG))
|
|
rmdir --ignore-fail-on-non-empty $(DESTDIR)$(modulefilesdir)
|
|
@if [ -d $(DESTDIR)$(modulefilesdir) ]; then echo -e "\nWARNING: $(DESTDIR)$(modulefilesdir) is not empty so skip removal\n" >&2; fi
|
|
rmdir $(DESTDIR)$(initdir)/ksh-functions
|
|
rmdir $(DESTDIR)$(initdir)/zsh-functions
|
|
rmdir --ignore-fail-on-non-empty $(DESTDIR)$(initdir)
|
|
@if [ -d $(DESTDIR)$(initdir) ]; then echo -e "\nWARNING: $(DESTDIR)$(initdir) is not empty so skip removal\n" >&2; fi
|
|
|
|
clean:
|
|
rm -f $(ALL_SHELLS) modulerc .modulespath $(EXAMPLE_MODFILES_SRCDIR)/modules
|