From 6ae7ec68d51a924005088fd044fa922d09b0a267 Mon Sep 17 00:00:00 2001 From: Xavier Delaruelle Date: Sun, 12 Jan 2020 09:59:37 +0100 Subject: [PATCH 01/15] script: remove need to build project management-specific tools Make mb, mlprof, mtreview and playdemo use `/usr/bin/env tclsh` shebang rather applying there TCLSH location defined by `./configure` process. --- .gitignore | 4 ---- Makefile | 20 -------------------- NEWS.rst | 2 ++ contrib/{mb.in => mb} | 2 +- contrib/{mlprof.in => mlprof} | 2 +- contrib/mt | 3 +-- contrib/{mtreview.in => mtreview} | 2 +- contrib/{playdemo.in => playdemo} | 2 +- 8 files changed, 7 insertions(+), 30 deletions(-) rename contrib/{mb.in => mb} (99%) mode change 100644 => 100755 rename contrib/{mlprof.in => mlprof} (99%) mode change 100644 => 100755 rename contrib/{mtreview.in => mtreview} (99%) rename contrib/{playdemo.in => playdemo} (99%) mode change 100644 => 100755 diff --git a/.gitignore b/.gitignore index 9eb545a1a..35646d75a 100644 --- a/.gitignore +++ b/.gitignore @@ -20,10 +20,6 @@ /modulecmd-test.tcl_m /coverage /site.exp -/contrib/mtreview -/contrib/mb -/contrib/mlprof -/contrib/playdemo /contrib/rpm/environment-modules.spec /contrib/scripts/add.modules /contrib/scripts/modulecmd diff --git a/Makefile b/Makefile index c7859a84e..0e4d00e70 100644 --- a/Makefile +++ b/Makefile @@ -282,22 +282,6 @@ ChangeLog: README: sed -e '/^\[\!\[.*\].*/d' $@.md > $@ -contrib/mtreview: contrib/mtreview.in version.inc - $(translate-in-script) - chmod +x $@ - -contrib/mb: contrib/mb.in version.inc contrib/mlprof - $(translate-in-script) - chmod +x $@ - -contrib/mlprof: contrib/mlprof.in version.inc - $(translate-in-script) - chmod +x $@ - -contrib/playdemo: contrib/playdemo.in version.inc - $(translate-in-script) - chmod +x $@ - contrib/scripts/add.modules: contrib/scripts/add.modules.in $(translate-in-script) @@ -522,10 +506,6 @@ ifeq ($(wildcard .git) $(wildcard CONTRIBUTING.rst),.git CONTRIBUTING.rst) rm -f CONTRIBUTING.txt endif rm -f modulecmd.tcl - rm -f contrib/mtreview - rm -f contrib/mb - rm -f contrib/mlprof - rm -f contrib/playdemo rm -f $(MODULECMDTEST) rm -f contrib/scripts/add.modules rm -f contrib/scripts/modulecmd diff --git a/NEWS.rst b/NEWS.rst index e59a3dcd7..d888fabda 100644 --- a/NEWS.rst +++ b/NEWS.rst @@ -38,6 +38,8 @@ Modules 4.5.0 (2020-XX-XX) * Add the ``-j``/``--json`` command line switches to the ``avail``, ``list``, ``savelist``, ``whatis`` and ``search`` module sub-commands to render their output in `JSON`_ format. (fix issue #303) +* Script: remove need to build project management-specific tools + (``mtreview``, ``mb``, ``mlprof`` and ``playdemo``) prior using them. .. _JSON: https://tools.ietf.org/html/rfc8259 diff --git a/contrib/mb.in b/contrib/mb old mode 100644 new mode 100755 similarity index 99% rename from contrib/mb.in rename to contrib/mb index 2b3ab6a74..780c773fa --- a/contrib/mb.in +++ b/contrib/mb @@ -1,4 +1,4 @@ -#!@TCLSHDIR@/tclsh +#!/usr/bin/env tclsh # # MB, make bench between modulecmd versions # Copyright (C) 2019 Xavier Delaruelle diff --git a/contrib/mlprof.in b/contrib/mlprof old mode 100644 new mode 100755 similarity index 99% rename from contrib/mlprof.in rename to contrib/mlprof index 94d4dab7e..152542cc0 --- a/contrib/mlprof.in +++ b/contrib/mlprof @@ -1,4 +1,4 @@ -#!@TCLSHDIR@/tclsh +#!/usr/bin/env tclsh # # MLPROF, profile a given modulecmd execution # Copyright (C) 2019-2020 Xavier Delaruelle diff --git a/contrib/mt b/contrib/mt index 34482e9ab..bb47b96cb 100755 --- a/contrib/mt +++ b/contrib/mt @@ -1,7 +1,7 @@ #!/usr/bin/env bash # # MT, run specific part of the test suite -# Copyright (C) 2018-2019 Xavier Delaruelle +# Copyright (C) 2018-2020 Xavier Delaruelle # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -87,7 +87,6 @@ if [ $# -gt 0 ]; then export RUNTESTFILES="${testfnames[*]}" fi -$make contrib/mtreview $make icdiff export RUNTESTFLAGS='-v -v >/dev/null 2>&1' $make $target diff --git a/contrib/mtreview.in b/contrib/mtreview similarity index 99% rename from contrib/mtreview.in rename to contrib/mtreview index 0e032174e..9e0025947 100755 --- a/contrib/mtreview.in +++ b/contrib/mtreview @@ -1,4 +1,4 @@ -#!@TCLSHDIR@/tclsh +#!/usr/bin/env tclsh # # MTREVIEW, review test suite log file # Copyright (C) 2019 Xavier Delaruelle diff --git a/contrib/playdemo.in b/contrib/playdemo old mode 100644 new mode 100755 similarity index 99% rename from contrib/playdemo.in rename to contrib/playdemo index 00e1e0639..cd4e649ec --- a/contrib/playdemo.in +++ b/contrib/playdemo @@ -1,4 +1,4 @@ -#!@TCLSHDIR@/tclsh +#!/usr/bin/env tclsh # # PLAYDEMO, play demos recorded with asciinema # Copyright (C) 2019 Xavier Delaruelle From 9ade952beaf615c5a9f5e0f57fe6a36a44b70480 Mon Sep 17 00:00:00 2001 From: Xavier Delaruelle Date: Sun, 12 Jan 2020 10:41:12 +0100 Subject: [PATCH 02/15] script: move all dist. and maint. scripts in a script dir --- .appveyor.yml | 6 +++--- .cirrus.yml | 4 ++-- .gitattributes | 2 +- .gitignore | 4 ++-- .travis.yml | 6 +++--- Makefile | 24 ++++++++++----------- NEWS.rst | 2 ++ contrib/readme.txt | 4 ---- contrib/rpm/environment-modules.spec.in | 4 ++-- {contrib/scripts => script}/add.modules.in | 0 {contrib/scripts => script}/createmodule.py | 0 {contrib/scripts => script}/createmodule.sh | 0 {contrib => script}/envml | 0 {contrib => script}/gitlog2changelog.py | 0 {contrib => script}/mb | 4 ++-- {contrib/scripts => script}/mkroot | 0 {contrib => script}/mlprof | 0 {contrib/scripts => script}/modulecmd.in | 0 {contrib => script}/mt | 2 +- {contrib => script}/mtreview | 0 {contrib => script}/nglfar2ccov | 0 {contrib => script}/playdemo | 0 22 files changed, 30 insertions(+), 32 deletions(-) rename {contrib/scripts => script}/add.modules.in (100%) rename {contrib/scripts => script}/createmodule.py (100%) rename {contrib/scripts => script}/createmodule.sh (100%) rename {contrib => script}/envml (100%) rename {contrib => script}/gitlog2changelog.py (100%) rename {contrib => script}/mb (98%) rename {contrib/scripts => script}/mkroot (100%) rename {contrib => script}/mlprof (100%) rename {contrib/scripts => script}/modulecmd.in (100%) rename {contrib => script}/mt (99%) rename {contrib => script}/mtreview (100%) rename {contrib => script}/nglfar2ccov (100%) rename {contrib => script}/playdemo (100%) diff --git a/.appveyor.yml b/.appveyor.yml index e63fdaf26..948d5186d 100644 --- a/.appveyor.yml +++ b/.appveyor.yml @@ -27,10 +27,10 @@ build_script: test_script: - path %CMD_DIR%;%PATH% - - bash -c "contrib/mt" - - if "%BUILD_PLATFORM%" == "msys" (bash -c "contrib/mt install") + - bash -c "script/mt" + - if "%BUILD_PLATFORM%" == "msys" (bash -c "script/mt install") # must add /usr/lib/lapack to PATH for /usr/lib/R/library/stats/libs/stats.dll - - if "%BUILD_PLATFORM%" == "cygwin" (bash -c "PATH=/usr/lib/lapack:$PATH contrib/mt install") + - if "%BUILD_PLATFORM%" == "cygwin" (bash -c "PATH=/usr/lib/lapack:$PATH script/mt install") after_test: - path %CMD_DIR%;%PATH% diff --git a/.cirrus.yml b/.cirrus.yml index 26fe15af2..92d637f6d 100644 --- a/.cirrus.yml +++ b/.cirrus.yml @@ -18,8 +18,8 @@ task: install_script: pkg install -y bash wget gmake dejagnu py37-sphinx tcl86 autoconf automake gettext ksh93 zsh fish perl5 python37 ruby cmake R readline openmp build_script: ./configure --without-tclx --with-tcl-ver=8.6 && gmake && gmake install test_script: - - contrib/mt - - contrib/mt install + - script/mt + - script/mt install uninstall_script: gmake uninstall # vim:set tabstop=2 shiftwidth=2 expandtab autoindent: diff --git a/.gitattributes b/.gitattributes index d269bc232..bf0d9f80f 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4,7 +4,7 @@ INSTALL.rst export-ignore MIGRATING.rst export-ignore NEWS.rst export-ignore CONTRIBUTING.rst export-ignore -contrib/gitlog2changelog.py export-ignore +script/gitlog2changelog.py export-ignore contrib/pre-commit export-ignore contrib/rpm/environment-modules.spec.in export-ignore version.inc.in export-ignore diff --git a/.gitignore b/.gitignore index 35646d75a..3183958e4 100644 --- a/.gitignore +++ b/.gitignore @@ -21,8 +21,8 @@ /coverage /site.exp /contrib/rpm/environment-modules.spec -/contrib/scripts/add.modules -/contrib/scripts/modulecmd +/script/add.modules +/script/modulecmd /contrib/modulefiles/modules /contrib/modulefiles/version /testsuite/example/.modulespath diff --git a/.travis.yml b/.travis.yml index b514d0b2b..01fd4d98f 100644 --- a/.travis.yml +++ b/.travis.yml @@ -336,17 +336,17 @@ script: - $CMD_PREFIX ./configure $CONFIGURE_OPTS - $CMD_PREFIX make - if [ -n "$EXTRA_SCRIPT_PRETEST" ]; then $CMD_PREFIX eval $EXTRA_SCRIPT_PRETEST; fi - - travis_wait 18 unbuffer $CMD_PREFIX contrib/mt + - travis_wait 18 unbuffer $CMD_PREFIX script/mt - if [ -n "$EXTRA_SCRIPT_POSTTEST" ]; then $CMD_PREFIX eval $EXTRA_SCRIPT_POSTTEST; fi - $CMD_PREFIX make install - - $CMD_PREFIX contrib/mt install + - $CMD_PREFIX script/mt install - $CMD_PREFIX make uninstall - if [ "$OS_NAME" = 'centos' ]; then $CMD_PREFIX make srpm; fi # report code coverage results after_success: | [ "$COVERAGE" = 'y' ] && - contrib/nglfar2ccov modulecmd-test.tcl && + script/nglfar2ccov modulecmd-test.tcl && bash <(curl -s https://codecov.io/bash) after_script: | diff --git a/Makefile b/Makefile index 0e4d00e70..cc0e742e3 100644 --- a/Makefile +++ b/Makefile @@ -35,8 +35,8 @@ ifneq ($(wildcard Makefile.inc),Makefile.inc) endif include Makefile.inc -INSTALL_PREREQ := modulecmd.tcl ChangeLog README contrib/scripts/add.modules \ - contrib/scripts/modulecmd +INSTALL_PREREQ := modulecmd.tcl ChangeLog README script/add.modules \ + script/modulecmd TEST_PREREQ := $(MODULECMDTEST) ifeq ($(compatversion),y) @@ -277,15 +277,15 @@ modulecmd.tcl: modulecmd.tcl.in version.inc chmod +x $@ ChangeLog: - contrib/gitlog2changelog.py + script/gitlog2changelog.py README: sed -e '/^\[\!\[.*\].*/d' $@.md > $@ -contrib/scripts/add.modules: contrib/scripts/add.modules.in +script/add.modules: script/add.modules.in $(translate-in-script) -contrib/scripts/modulecmd: contrib/scripts/modulecmd.in +script/modulecmd: script/modulecmd.in $(translate-in-script) # compatibility version-related rules @@ -366,13 +366,13 @@ ifeq ($(libtclenvmodules),y) cp lib/libtclenvmodules$(SHLIB_SUFFIX) $(DESTDIR)$(libdir)/libtclenvmodules$(SHLIB_SUFFIX) chmod +x $(DESTDIR)$(libdir)/libtclenvmodules$(SHLIB_SUFFIX) endif - cp contrib/envml $(DESTDIR)$(bindir)/ + cp script/envml $(DESTDIR)$(bindir)/ chmod +x $(DESTDIR)$(bindir)/envml - cp contrib/scripts/add.modules $(DESTDIR)$(bindir)/ + cp script/add.modules $(DESTDIR)$(bindir)/ chmod +x $(DESTDIR)$(bindir)/add.modules - cp contrib/scripts/modulecmd $(DESTDIR)$(bindir)/ + cp script/modulecmd $(DESTDIR)$(bindir)/ chmod +x $(DESTDIR)$(bindir)/modulecmd - cp contrib/scripts/mkroot $(DESTDIR)$(bindir)/ + cp script/mkroot $(DESTDIR)$(bindir)/ chmod +x $(DESTDIR)$(bindir)/mkroot ifneq ($(wildcard $(DESTDIR)$(etcdir)/siteconfig.tcl),$(DESTDIR)$(etcdir)/siteconfig.tcl) cp siteconfig.tcl $(DESTDIR)$(etcdir)/siteconfig.tcl @@ -487,7 +487,7 @@ clean: rm -f *.log *.sum rm -f $(MODULECMDTEST)_i $(MODULECMDTEST)_log $(MODULECMDTEST)_m rm -rf coverage -ifeq ($(wildcard .git) $(wildcard contrib/gitlog2changelog.py),.git contrib/gitlog2changelog.py) +ifeq ($(wildcard .git) $(wildcard script/gitlog2changelog.py),.git script/gitlog2changelog.py) rm -f ChangeLog endif ifeq ($(wildcard .git) $(wildcard README.md),.git README.md) @@ -507,8 +507,8 @@ ifeq ($(wildcard .git) $(wildcard CONTRIBUTING.rst),.git CONTRIBUTING.rst) endif rm -f modulecmd.tcl rm -f $(MODULECMDTEST) - rm -f contrib/scripts/add.modules - rm -f contrib/scripts/modulecmd + rm -f script/add.modules + rm -f script/modulecmd rm -f testsuite/example/.modulespath testsuite/example/modulerc testsuite/example/modulerc-1 testsuite/example/initrc rm -f modules-*.tar modules-*.tar.gz modules-*.tar.bz2 rm -f modules-*.srpm diff --git a/NEWS.rst b/NEWS.rst index d888fabda..7129bc762 100644 --- a/NEWS.rst +++ b/NEWS.rst @@ -40,6 +40,8 @@ Modules 4.5.0 (2020-XX-XX) output in `JSON`_ format. (fix issue #303) * Script: remove need to build project management-specific tools (``mtreview``, ``mb``, ``mlprof`` and ``playdemo``) prior using them. +* Script: gather all distributed and maintained scripts in a ``script`` + directory at the root of the project repository tree. .. _JSON: https://tools.ietf.org/html/rfc8259 diff --git a/contrib/readme.txt b/contrib/readme.txt index c8b581666..85313a53f 100644 --- a/contrib/readme.txt +++ b/contrib/readme.txt @@ -9,10 +9,6 @@ Brief overview of whats here: you started. scripts: - createmodule.sh A utliity to help in generating a module file. - It attempts to take a .file and duplicate what it does - in modules own language. - resetenv A utility we use to reset a users environment to match our template user. diff --git a/contrib/rpm/environment-modules.spec.in b/contrib/rpm/environment-modules.spec.in index ed78ab45b..525a77eaa 100644 --- a/contrib/rpm/environment-modules.spec.in +++ b/contrib/rpm/environment-modules.spec.in @@ -142,8 +142,8 @@ mv %{buildroot}%{_datadir}/Modules/bin/envml %{buildroot}%{_bindir}/ mv compat/ChangeLog ChangeLog-compat mv compat/NEWS NEWS-compat -cp -p contrib/scripts/createmodule.sh %{buildroot}%{_datadir}/Modules/bin -cp -p contrib/scripts/createmodule.py %{buildroot}%{_datadir}/Modules/bin +cp -p script/createmodule.sh %{buildroot}%{_datadir}/Modules/bin +cp -p script/createmodule.py %{buildroot}%{_datadir}/Modules/bin %if 0%{?fedora} >= 22 || 0%{?rhel} >= 8 sed -i -e 1s,/usr/bin/python,/usr/bin/python3, \ %{buildroot}%{_datadir}/Modules/bin/createmodule.py diff --git a/contrib/scripts/add.modules.in b/script/add.modules.in similarity index 100% rename from contrib/scripts/add.modules.in rename to script/add.modules.in diff --git a/contrib/scripts/createmodule.py b/script/createmodule.py similarity index 100% rename from contrib/scripts/createmodule.py rename to script/createmodule.py diff --git a/contrib/scripts/createmodule.sh b/script/createmodule.sh similarity index 100% rename from contrib/scripts/createmodule.sh rename to script/createmodule.sh diff --git a/contrib/envml b/script/envml similarity index 100% rename from contrib/envml rename to script/envml diff --git a/contrib/gitlog2changelog.py b/script/gitlog2changelog.py similarity index 100% rename from contrib/gitlog2changelog.py rename to script/gitlog2changelog.py diff --git a/contrib/mb b/script/mb similarity index 98% rename from contrib/mb rename to script/mb index 780c773fa..6c480b0ae 100755 --- a/contrib/mb +++ b/script/mb @@ -1,7 +1,7 @@ #!/usr/bin/env tclsh # # MB, make bench between modulecmd versions -# Copyright (C) 2019 Xavier Delaruelle +# Copyright (C) 2019-2020 Xavier Delaruelle # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -30,7 +30,7 @@ proc bench {tag args} { # profile given modulecmd version test run proc profile {tag args} { - return [eval exec contrib/mlprof report$::profprocnb $tag $args] + return [eval exec script/mlprof report$::profprocnb $tag $args] } # run test for each modulecmd version diff --git a/contrib/scripts/mkroot b/script/mkroot similarity index 100% rename from contrib/scripts/mkroot rename to script/mkroot diff --git a/contrib/mlprof b/script/mlprof similarity index 100% rename from contrib/mlprof rename to script/mlprof diff --git a/contrib/scripts/modulecmd.in b/script/modulecmd.in similarity index 100% rename from contrib/scripts/modulecmd.in rename to script/modulecmd.in diff --git a/contrib/mt b/script/mt similarity index 99% rename from contrib/mt rename to script/mt index bb47b96cb..9b8e7f656 100755 --- a/contrib/mt +++ b/script/mt @@ -96,7 +96,7 @@ ret=$? retreview=0 for log in compat/$testserie.log $testserie.log; do if [ -e $log ]; then - contrib/mtreview $log + script/mtreview $log retreview+=$? fi done diff --git a/contrib/mtreview b/script/mtreview similarity index 100% rename from contrib/mtreview rename to script/mtreview diff --git a/contrib/nglfar2ccov b/script/nglfar2ccov similarity index 100% rename from contrib/nglfar2ccov rename to script/nglfar2ccov diff --git a/contrib/playdemo b/script/playdemo similarity index 100% rename from contrib/playdemo rename to script/playdemo From 2c52eedb420de76e4c76678ec7374e25ccc70fec Mon Sep 17 00:00:00 2001 From: Xavier Delaruelle Date: Sun, 12 Jan 2020 10:49:07 +0100 Subject: [PATCH 03/15] git: remove refs to deleted www-specific stuff --- .gitattributes | 4 +--- .gitignore | 2 -- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/.gitattributes b/.gitattributes index bf0d9f80f..fdbe6478b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -14,7 +14,5 @@ init/.gitignore export-ignore .appveyor.yml export-ignore .cirrus.yml export-ignore .travis.yml export-ignore -# no export for website-specific content -contrib/doc2www export-ignore +# no export of website-specific content doc/talk export-ignore -www export-ignore diff --git a/.gitignore b/.gitignore index 3183958e4..d559237d4 100644 --- a/.gitignore +++ b/.gitignore @@ -33,8 +33,6 @@ /doc/build /doc/source/version.py /doc/demo/*/*.svg -/www/tcl -/www/docs /modules-*.tar /modules-*.tar.gz /modules-*.tar.bz2 From 55c6612f0a0c1d16d0eff89ea99ea1334e5ea3fc Mon Sep 17 00:00:00 2001 From: Xavier Delaruelle Date: Sun, 12 Jan 2020 10:49:38 +0100 Subject: [PATCH 04/15] contrib: remove not-used-anymore pre-commit script --- .gitattributes | 3 +-- contrib/pre-commit | 41 ----------------------------------------- 2 files changed, 1 insertion(+), 43 deletions(-) delete mode 100755 contrib/pre-commit diff --git a/.gitattributes b/.gitattributes index fdbe6478b..9ccdc1117 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,11 +1,10 @@ -# no export for git-specific stuff +# no export of git-specific stuff README.md export-ignore INSTALL.rst export-ignore MIGRATING.rst export-ignore NEWS.rst export-ignore CONTRIBUTING.rst export-ignore script/gitlog2changelog.py export-ignore -contrib/pre-commit export-ignore contrib/rpm/environment-modules.spec.in export-ignore version.inc.in export-ignore .gitignore export-ignore diff --git a/contrib/pre-commit b/contrib/pre-commit deleted file mode 100755 index 8d351bafe..000000000 --- a/contrib/pre-commit +++ /dev/null @@ -1,41 +0,0 @@ -#!/usr/bin/perl -# This file is a pre-commit git hook to automatically update the -# MODULES_CURRENT_VERSION in modulecmd.tcl -# Put this in modules/.git/hooks/pre-commit and make it executable. - -use strict; -use warnings; -use Cwd 'abs_path'; - -my ($ROOT, $OUTFILE, $INFILE, $line, $value); - -$ROOT = abs_path($0); -print "ROOT BASE = $ROOT\n"; -$ROOT =~ /(.*)\.git\/hooks\/pre-commit/; -$ROOT = $1; - -print "ROOT = $ROOT\n"; - -$value = `cd $ROOT;git rev-list HEAD --count`; -$value ++; -$value ++; - -system("cp $ROOT/modulecmd.tcl $ROOT/modulecmd.tmp"); -unlink("$ROOT/modulecmd.tcl"); -open($OUTFILE, ">","$ROOT/modulecmd.tcl") or die - "Unable to open $ROOT/modulecmd.tcl"; -open($INFILE, "<","$ROOT/modulecmd.tmp") or die - "Unable to open $ROOT/modulecmd.tmp"; - -while(<$INFILE>) { - $line = $_; - if ($line =~ /set MODULES_CURRENT_VERSION (.*)/) { - print $OUTFILE "set MODULES_CURRENT_VERSION 1.$value\n"; - } else { - print $OUTFILE $line; - } -} -close $OUTFILE; -unlink("$ROOT/modulecmd.tmp"); -system("chmod 755 $ROOT/modulecmd.tcl"); - From 1bef2663e884202dee033ed9c28885f760d9c7b8 Mon Sep 17 00:00:00 2001 From: Xavier Delaruelle Date: Sun, 12 Jan 2020 13:40:38 +0100 Subject: [PATCH 05/15] install: use newer version of icdiff (1.9.5) --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index cc0e742e3..1508dbd73 100644 --- a/Makefile +++ b/Makefile @@ -23,8 +23,8 @@ TCLSH83 := $(TCL_RELEASE83)/unix/tclsh MODULECMDTEST := modulecmd-test.tcl # definitions for enhanced diff tool (to review test results) -ICDIFF_DLSRC := https://raw.githubusercontent.com/jeffkaufman/icdiff/release-1.9.2/ -ICDIFF_CHECKSUM := 2bf052d9dfb0a46af581fc390c47774a +ICDIFF_DLSRC := https://raw.githubusercontent.com/jeffkaufman/icdiff/release-1.9.5/ +ICDIFF_CHECKSUM := fd5825ede4c2853ba1747a8931b077c1 # compatibility version-related files COMPAT_DIR := compat From 00c407366521f25b5caeaf052ed8896ce9879f47 Mon Sep 17 00:00:00 2001 From: Xavier Delaruelle Date: Sun, 12 Jan 2020 13:46:09 +0100 Subject: [PATCH 06/15] install: use newer version of nagelfar (1.3.1) --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index 1508dbd73..a4fb32f25 100644 --- a/Makefile +++ b/Makefile @@ -6,10 +6,10 @@ # definitions for code coverage NAGELFAR_DLSRC1 := http://downloads.sourceforge.net/nagelfar/ -NAGELFAR_DLSRC2 := https://ftp.openbsd.org/pub/OpenBSD/distfiles/ -NAGELFAR_RELEASE := nagelfar125 +NAGELFAR_DLSRC2 := https://osdn.net/projects/sfnet_nagelfar/downloads/Rel_131/ +NAGELFAR_RELEASE := nagelfar131 NAGELFAR_DIST := $(NAGELFAR_RELEASE).tar.gz -NAGELFAR_DISTSUM := 707e3c305437dce1f14103f0bd058fc9 +NAGELFAR_DISTSUM := fbf79ab1a1d85349600f2502a3353bf4 NAGELFAR := $(NAGELFAR_RELEASE)/nagelfar.tcl # definition for old Tcl interpreter for coverage testing From 5b8b1b2d137e5b4227e7d25bbd9c6e36387d2da4 Mon Sep 17 00:00:00 2001 From: Xavier Delaruelle Date: Sun, 12 Jan 2020 20:00:06 +0100 Subject: [PATCH 07/15] travis: increase testsuite timeout to 25mins --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 01fd4d98f..b9bf402da 100644 --- a/.travis.yml +++ b/.travis.yml @@ -336,7 +336,7 @@ script: - $CMD_PREFIX ./configure $CONFIGURE_OPTS - $CMD_PREFIX make - if [ -n "$EXTRA_SCRIPT_PRETEST" ]; then $CMD_PREFIX eval $EXTRA_SCRIPT_PRETEST; fi - - travis_wait 18 unbuffer $CMD_PREFIX script/mt + - travis_wait 25 unbuffer $CMD_PREFIX script/mt - if [ -n "$EXTRA_SCRIPT_POSTTEST" ]; then $CMD_PREFIX eval $EXTRA_SCRIPT_POSTTEST; fi - $CMD_PREFIX make install - $CMD_PREFIX script/mt install From cc3532b8c3fb7dc86c82b109fa197ea6b44019ab Mon Sep 17 00:00:00 2001 From: Jacques Raphanel Date: Wed, 8 May 2019 04:02:44 +0200 Subject: [PATCH 08/15] Add support for portable/standalone install on Windows Update moduleinit.cmd file to set Modules-specific environment variables according to the script directory and the file existence for: * MODULESHOME if not defined yet and if `..\libexec\modulecmd.tcl` exists * add `..\bin` directory to PATH if `module.cmd` is not available from PATH and available from `..\bin` * add `..\bin` directory to PATH if `tclsh.exe` is not available from PATH and available from `..\bin` Automatically call `moduleinit.cmd` from `module.cmd` if modules is not initialized yet (based on environment variables) Fixes #272 --- windows/module.cmd | 19 ++++++++++++++++++- windows/moduleinit.cmd | 32 +++++++++++++++++++++++++++++++- 2 files changed, 49 insertions(+), 2 deletions(-) diff --git a/windows/module.cmd b/windows/module.cmd index b3325ba99..fccba84b5 100644 --- a/windows/module.cmd +++ b/windows/module.cmd @@ -1,5 +1,22 @@ @echo off +:: Initialize Modules if already done yet +if not defined MODULESHOME goto:initModules +if not defined MODULES_CMD goto:initModules +if "%MODULESHOME%\bin\module.cmd" NEQ "%~dpnx0" goto:initModules +goto:skipInit + +:initModules +call "%~dp0moduleinit.cmd" %* + +:skipInit set OUTPUT= -set MODCMD="call tclsh %MODULESHOME%\modulecmd.tcl cmd %*" +set MODCMD="call tclsh %MODULES_CMD% cmd %*" REM -- Each output line needs to be executed in cmd shell for /f "tokens=*" %%I in ('%MODCMD%') do %%I +goto:Done + +:reportError +echo Modules is not initialized yet. Please call init\profile.cmd from your +echo Modules installation directory before to use module command. + +:Done diff --git a/windows/moduleinit.cmd b/windows/moduleinit.cmd index bd4bf5833..e47c5fc43 100644 --- a/windows/moduleinit.cmd +++ b/windows/moduleinit.cmd @@ -3,5 +3,35 @@ REM ----------------------------------------------- REM Script to customize module-tcl for "cmd" shell REM Load the modulepaths with "module use" REM ----------------------------------------------- + +:: Define MODULESHOME is defined yet +if defined MODULESHOME goto:skipInit +if not exist "%~dp0..\libexec\modulecmd.tcl" goto:skipInit +for %%i in ("%~dp0..") do set "MODULESHOME=%%~dpni" + +:skipInit + +:: check if module.cmd directory needs to be added to PATH +if not exist "%~dp0module.cmd" goto:skipModuleInit +for %%i in (module.cmd) do ( + if "x%%~$PATH:i" EQU "x" ( + for %%a in (%~dp0.) do set "PATH=%%~dpnxa;%PATH%" + ) +) + +:skipModuleInit + +:: check if tclsh.exe directory must be added to PATH +if not exist "%~dp0..\bin\tclsh.exe" goto:skipTclShInit +for %%i in (tclsh) do ( + if "x%%~$PATH:i" EQU "x" ( + for %%a in (%~dp0.) do set "PATH=%%~dpnxa;%PATH%" + ) +) + +:skipTclShInit + +if not defined MODULES_CMD set MODULES_CMD=%~dp0..\libexec\modulecmd.tcl call module use %MODULESHOME%\modulefiles -call module avail +:: Display available modules only if no input argument +if "%~1" EQU "" call module avail \ No newline at end of file From d68f8cfd84ae96f1a3fe56a395904c7b770aaff9 Mon Sep 17 00:00:00 2001 From: Jacques Raphanel Date: Tue, 21 May 2019 01:36:59 +0200 Subject: [PATCH 09/15] Install: add --enable-windows-support configure option Provide new `--enable-windows-support` option for configure to automatically install windows batch file to bin directory during install step. This new option is not enabled by default. --- Makefile | 8 ++++++++ Makefile.inc.in | 3 +++ configure | 7 ++++++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index a4fb32f25..f6c8995cf 100644 --- a/Makefile +++ b/Makefile @@ -374,6 +374,10 @@ endif chmod +x $(DESTDIR)$(bindir)/modulecmd cp script/mkroot $(DESTDIR)$(bindir)/ chmod +x $(DESTDIR)$(bindir)/mkroot +ifeq ($(windowssupport),y) + cp windows/*.cmd $(DESTDIR)$(bindir)/ + chmod +x $(DESTDIR)$(bindir)/*.cmd +endif ifneq ($(wildcard $(DESTDIR)$(etcdir)/siteconfig.tcl),$(DESTDIR)$(etcdir)/siteconfig.tcl) cp siteconfig.tcl $(DESTDIR)$(etcdir)/siteconfig.tcl endif @@ -420,6 +424,10 @@ endif 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)/moduleinit.cmd +endif ifeq ($(vimaddons),y) rm -f $(DESTDIR)$(vimdatadir)/ftdetect/modulefile.vim rm -f $(DESTDIR)$(vimdatadir)/ftplugin/modulefile.vim diff --git a/Makefile.inc.in b/Makefile.inc.in index aab3ec3ac..595c0d7da 100644 --- a/Makefile.inc.in +++ b/Makefile.inc.in @@ -108,6 +108,9 @@ icase := @icase@ # ml command enablement ml := @ml@ +# install Windows-specific files +windowssupport := @windowssupport@ + # command location TCLSH := @TCLSH@ SPHINXBUILD := @SPHINXBUILD@ diff --git a/configure b/configure index 32fd694c3..d8c83d19f 100755 --- a/configure +++ b/configure @@ -35,7 +35,7 @@ SHLIB_SUFFIX versioning silentshdbgsupport setshellstartup quarantinesupport \ autohandling availindepth implicitdefault extendeddefault moduleshome \ initconfin pager pageropts verbosity color darkbgcolors lightbgcolors termbg \ lockedconfigs icase unloadmatchorder searchmatch modulepath loadedmodules \ -quarantinevars wa277 advversspec ml" +quarantinevars wa277 advversspec ml windowssupport" compatarglist= libarglist= @@ -110,6 +110,7 @@ vimdatadir= modulefilesdir= moduleshome= modulepath= +windowssupport=n # git branch to use to build compat version compatbranch='c-3.2' @@ -222,6 +223,8 @@ Optional Features: color mode. \`no' equals to the \`never' color mode [no] --enable-wa-277 activate workaround for Tcsh history issue [no] + --enable-windows-support + install all required files for Windows platform [no] Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] @@ -461,6 +464,8 @@ for arg in "$@"; do ml=$(get_feature_value "$arg") ;; --enable-wa-277*|--disable-wa-277) wa277=$(get_feature_value "$arg") ;; + --enable-windows-support*|--disable-windows-support) + windowssupport=$(get_feature_value "$arg") ;; --with-bin-search-path=*|--without-bin-search-path) binsearchpath=$(get_package_value "$arg") ;; --with-moduleshome=*|--without-moduleshome) From ad4e9ff6b8c59db3eb173bb44d52cdc3c6e4118b Mon Sep 17 00:00:00 2001 From: Xavier Delaruelle Date: Mon, 13 Jan 2020 09:38:12 +0100 Subject: [PATCH 10/15] init: move windows/moduleinit.cmd as init/cmd.cmd file --- Makefile | 1 - init/Makefile | 6 ++++++ windows/moduleinit.cmd => init/cmd.cmd | 4 ++-- windows/module.cmd | 2 +- 4 files changed, 9 insertions(+), 4 deletions(-) rename windows/moduleinit.cmd => init/cmd.cmd (88%) diff --git a/Makefile b/Makefile index f6c8995cf..06d39989a 100644 --- a/Makefile +++ b/Makefile @@ -426,7 +426,6 @@ endif rm -f $(DESTDIR)$(bindir)/mkroot ifeq ($(windowssupport),y) rm -f $(DESTDIR)$(bindir)/module.cmd - rm -f $(DESTDIR)$(bindir)/moduleinit.cmd endif ifeq ($(vimaddons),y) rm -f $(DESTDIR)$(vimdatadir)/ftdetect/modulefile.vim diff --git a/init/Makefile b/init/Makefile index b4cf3fc05..ffcad9512 100644 --- a/init/Makefile +++ b/init/Makefile @@ -217,6 +217,9 @@ install: all mkdir -p $(DESTDIR)$(initdir)/ksh-functions mkdir -p $(DESTDIR)$(modulefilesdir) cp $(ALL_SHELLS) $(DESTDIR)$(initdir)/ +ifeq ($(windowssupport),y) + cp cmd.cmd $(DESTDIR)$(initdir)/ +endif cp fish_completion $(DESTDIR)$(initdir)/ cp -r zsh-functions $(DESTDIR)$(initdir)/ cp ksh $(DESTDIR)$(initdir)/ksh-functions/module @@ -241,6 +244,9 @@ endif uninstall: rm -f $(addprefix $(DESTDIR)$(initdir)/,$(ALL_SHELLS) fish_completion) +ifeq ($(windowssupport),y) + rm -f $(DESTDIR)$(initdir)/cmd.cmd +endif rm -f $(DESTDIR)$(initdir)/ksh-functions/module rm -f $(DESTDIR)$(initdir)/ksh-functions/ml ifeq ($(compatversion),y) diff --git a/windows/moduleinit.cmd b/init/cmd.cmd similarity index 88% rename from windows/moduleinit.cmd rename to init/cmd.cmd index e47c5fc43..cdec41060 100644 --- a/windows/moduleinit.cmd +++ b/init/cmd.cmd @@ -12,7 +12,7 @@ for %%i in ("%~dp0..") do set "MODULESHOME=%%~dpni" :skipInit :: check if module.cmd directory needs to be added to PATH -if not exist "%~dp0module.cmd" goto:skipModuleInit +if not exist "%~dp0..\bin\module.cmd" goto:skipModuleInit for %%i in (module.cmd) do ( if "x%%~$PATH:i" EQU "x" ( for %%a in (%~dp0.) do set "PATH=%%~dpnxa;%PATH%" @@ -34,4 +34,4 @@ for %%i in (tclsh) do ( if not defined MODULES_CMD set MODULES_CMD=%~dp0..\libexec\modulecmd.tcl call module use %MODULESHOME%\modulefiles :: Display available modules only if no input argument -if "%~1" EQU "" call module avail \ No newline at end of file +if "%~1" EQU "" call module avail diff --git a/windows/module.cmd b/windows/module.cmd index fccba84b5..c69a481f5 100644 --- a/windows/module.cmd +++ b/windows/module.cmd @@ -6,7 +6,7 @@ if "%MODULESHOME%\bin\module.cmd" NEQ "%~dpnx0" goto:initModules goto:skipInit :initModules -call "%~dp0moduleinit.cmd" %* +call "%~dp0..\init\cmd.cmd" %* :skipInit set OUTPUT= From bc13f482c97f9e7db6a1c90d42c2f85f9f35f3b1 Mon Sep 17 00:00:00 2001 From: Xavier Delaruelle Date: Mon, 13 Jan 2020 09:44:32 +0100 Subject: [PATCH 11/15] script: move win-specific module.cmd file in script dir --- Makefile | 4 ++-- {windows => script}/module.cmd | 0 2 files changed, 2 insertions(+), 2 deletions(-) rename {windows => script}/module.cmd (100%) diff --git a/Makefile b/Makefile index 06d39989a..980e05011 100644 --- a/Makefile +++ b/Makefile @@ -375,8 +375,8 @@ endif cp script/mkroot $(DESTDIR)$(bindir)/ chmod +x $(DESTDIR)$(bindir)/mkroot ifeq ($(windowssupport),y) - cp windows/*.cmd $(DESTDIR)$(bindir)/ - chmod +x $(DESTDIR)$(bindir)/*.cmd + cp script/module.cmd $(DESTDIR)$(bindir)/ + chmod +x $(DESTDIR)$(bindir)/module.cmd endif ifneq ($(wildcard $(DESTDIR)$(etcdir)/siteconfig.tcl),$(DESTDIR)$(etcdir)/siteconfig.tcl) cp siteconfig.tcl $(DESTDIR)$(etcdir)/siteconfig.tcl diff --git a/windows/module.cmd b/script/module.cmd similarity index 100% rename from windows/module.cmd rename to script/module.cmd From 3c2d2e32155d775c09a1c55ca690d3120242a909 Mon Sep 17 00:00:00 2001 From: Xavier Delaruelle Date: Mon, 13 Jan 2020 09:57:54 +0100 Subject: [PATCH 12/15] init: simplify cmd init file Always define Modules-specific environment variables when running `cmd` initialization file. --- init/cmd.cmd | 40 +++++++++------------------------------- 1 file changed, 9 insertions(+), 31 deletions(-) diff --git a/init/cmd.cmd b/init/cmd.cmd index cdec41060..bdc54bed2 100644 --- a/init/cmd.cmd +++ b/init/cmd.cmd @@ -1,37 +1,15 @@ @echo off -REM ----------------------------------------------- -REM Script to customize module-tcl for "cmd" shell -REM Load the modulepaths with "module use" -REM ----------------------------------------------- -:: Define MODULESHOME is defined yet -if defined MODULESHOME goto:skipInit -if not exist "%~dp0..\libexec\modulecmd.tcl" goto:skipInit -for %%i in ("%~dp0..") do set "MODULESHOME=%%~dpni" +:: define Modules-specific environment variables +for %%i in (%~dp0..) do set MODULESHOME=%%~dpni +set MODULES_CMD=%MODULESHOME%\libexec\modulecmd.tcl -:skipInit - -:: check if module.cmd directory needs to be added to PATH -if not exist "%~dp0..\bin\module.cmd" goto:skipModuleInit -for %%i in (module.cmd) do ( - if "x%%~$PATH:i" EQU "x" ( - for %%a in (%~dp0.) do set "PATH=%%~dpnxa;%PATH%" - ) +:: ensure module.cmd batch file can be found in PATH +for %%i in (module.cmd) do ( + if "x%%~$PATH:i" EQU "x" ( + set PATH=%MODULESHOME%\bin;%PATH% + ) ) -:skipModuleInit - -:: check if tclsh.exe directory must be added to PATH -if not exist "%~dp0..\bin\tclsh.exe" goto:skipTclShInit -for %%i in (tclsh) do ( - if "x%%~$PATH:i" EQU "x" ( - for %%a in (%~dp0.) do set "PATH=%%~dpnxa;%PATH%" - ) -) - -:skipTclShInit - -if not defined MODULES_CMD set MODULES_CMD=%~dp0..\libexec\modulecmd.tcl +:: enable a default modulepath directory call module use %MODULESHOME%\modulefiles -:: Display available modules only if no input argument -if "%~1" EQU "" call module avail From 7b2911c4a138a454b96010c067b3cfdb0e3af2dc Mon Sep 17 00:00:00 2001 From: Xavier Delaruelle Date: Mon, 13 Jan 2020 10:04:04 +0100 Subject: [PATCH 13/15] script: simplify module.cmd batch file Execute initialization script if MODULES_CMD environment variable is not found defined. --- script/module.cmd | 31 ++++++++++--------------------- 1 file changed, 10 insertions(+), 21 deletions(-) diff --git a/script/module.cmd b/script/module.cmd index c69a481f5..c63679964 100644 --- a/script/module.cmd +++ b/script/module.cmd @@ -1,22 +1,11 @@ -@echo off -:: Initialize Modules if already done yet -if not defined MODULESHOME goto:initModules -if not defined MODULES_CMD goto:initModules -if "%MODULESHOME%\bin\module.cmd" NEQ "%~dpnx0" goto:initModules -goto:skipInit - -:initModules -call "%~dp0..\init\cmd.cmd" %* - -:skipInit -set OUTPUT= +@echo off + +:: initialize Modules if not already done +if not defined MODULES_CMD ( + call %~dp0..\init\cmd.cmd +) + +set OUTPUT= set MODCMD="call tclsh %MODULES_CMD% cmd %*" -REM -- Each output line needs to be executed in cmd shell -for /f "tokens=*" %%I in ('%MODCMD%') do %%I -goto:Done - -:reportError -echo Modules is not initialized yet. Please call init\profile.cmd from your -echo Modules installation directory before to use module command. - -:Done +:: execute each output line in cmd shell +for /f "tokens=*" %%I in ('%MODCMD%') do %%I From ff12e17379def772e1bd2bb2c0d130474059c0c7 Mon Sep 17 00:00:00 2001 From: Xavier Delaruelle Date: Mon, 13 Jan 2020 20:32:18 +0100 Subject: [PATCH 14/15] ts: add test to check win-specific file install --- .travis.yml | 2 +- site.exp.in | 2 ++ testsuite/install.00-init/030-options.exp | 7 +++++++ 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index b9bf402da..ea8ce82b4 100644 --- a/.travis.yml +++ b/.travis.yml @@ -142,7 +142,7 @@ matrix: # compatibility version-specific build requirements - automake - autopoint - - env: CONFIGURE_OPTS='--with-tclsh=tclsh8.6 --prefix=/tmp/modules --enable-compat-version --with-tcl=/usr/lib/tcl8.6 --enable-append-manpath --enable-append-binpath --with-bin-search-path=/usr/bin:/bin --disable-silent-shell-debug-support --with-loadedmodules=null:dot --with-quarantine-vars=LD_LIBRARY_PATH --enable-color --with-dark-background-colors=hi=1:se=2:er=91:wa=93:mp=1;94:di=94:al=96:sy=95' + - env: CONFIGURE_OPTS='--with-tclsh=tclsh8.6 --prefix=/tmp/modules --enable-compat-version --with-tcl=/usr/lib/tcl8.6 --enable-append-manpath --enable-append-binpath --with-bin-search-path=/usr/bin:/bin --disable-silent-shell-debug-support --enable-windows-support --with-loadedmodules=null:dot --with-quarantine-vars=LD_LIBRARY_PATH --enable-color --with-dark-background-colors=hi=1:se=2:er=91:wa=93:mp=1;94:di=94:al=96:sy=95' EXTRA_SCRIPT_CD='modules-1.2.3+branch_name-91-g6dd3db49' addons: apt: diff --git a/site.exp.in b/site.exp.in index 958d353b9..f209bb429 100644 --- a/site.exp.in +++ b/site.exp.in @@ -70,5 +70,7 @@ set install_icase "@icase@" set install_ml "@ml@" +set install_windowssupport "@windowssupport@" + # command location set install_tclsh "@TCLSH@" diff --git a/testsuite/install.00-init/030-options.exp b/testsuite/install.00-init/030-options.exp index 587a954ce..2491d2df2 100644 --- a/testsuite/install.00-init/030-options.exp +++ b/testsuite/install.00-init/030-options.exp @@ -278,6 +278,13 @@ unset env(MODULES_SILENT_SHELL_DEBUG) send_user "\tSkipping silent shell debug checks\n" } +# test Windows-specific install +if {$verbose > 0} { + send_user "\tChecking Windows-specific files availability\n" +} +testall_cmd_re "sh" "test -e $install_initdir/cmd.cmd" "" "" [expr {$install_windowssupport ne {y}}] +testall_cmd_re "sh" "test -e $install_bindir/module.cmd" "" "" [expr {$install_windowssupport ne {y}}] + # # Clean up variables used in this test case From 17f1f507498444d3cea410d8080fac92d907bdc7 Mon Sep 17 00:00:00 2001 From: Xavier Delaruelle Date: Mon, 13 Jan 2020 20:59:58 +0100 Subject: [PATCH 15/15] doc: desc --enable-windows-support in NEWS/INSTALL --- INSTALL.rst | 4 ++++ NEWS.rst | 6 ++++++ 2 files changed, 10 insertions(+) diff --git a/INSTALL.rst b/INSTALL.rst index 755b4ee75..984e8dc7c 100644 --- a/INSTALL.rst +++ b/INSTALL.rst @@ -314,6 +314,10 @@ instance ``--disable-set-manpath``): module alias definition. Note that enabling this workaround solves Tcsh history issue but weakens shell evaluation of the code produced by modulefiles. +--enable-windows-support + Install all required files for Windows platform + (``module`` command batch file and ``cmd.cmd`` + initialization script). (default=no) Optional Packages (the default for each option is displayed within parenthesis, to disable an option replace ``with`` by ``without`` for diff --git a/NEWS.rst b/NEWS.rst index 7129bc762..2376cae03 100644 --- a/NEWS.rst +++ b/NEWS.rst @@ -42,6 +42,12 @@ Modules 4.5.0 (2020-XX-XX) (``mtreview``, ``mb``, ``mlprof`` and ``playdemo``) prior using them. * Script: gather all distributed and maintained scripts in a ``script`` directory at the root of the project repository tree. +* Install: provide Windows-specific batch files when ``./configure`` option + ``--enable-windows-support`` is set. module command wrapper ``module.cmd`` + is installed in ``bindir`` and initialization script ``cmd.cmd`` in + ``initdir``. Those batch files are relocatable and expect ``modulecmd.tcl`` + in ``..\libexec`` directory. (fix issue #272 with contribution from Jacques + Raphanel) .. _JSON: https://tools.ietf.org/html/rfc8259