diff --git a/easybuild/framework/easyblock.py b/easybuild/framework/easyblock.py index 873e2d8bbd..ab05a077cb 100644 --- a/easybuild/framework/easyblock.py +++ b/easybuild/framework/easyblock.py @@ -2952,6 +2952,12 @@ def apply_post_install_patches(self, patches=None): # To allow postinstallpatches for Bundle, and derived, easyblocks we directly call EasyBlock.patch_step EasyBlock.patch_step(self, beginpath=self.installdir, patches=patches) + def log_post_install_messages(self): + messages = self.cfg["postinstallmsgs"] + if messages: + for message in messages: + print_msg(message) + def post_install_step(self): """ Do some postprocessing @@ -2960,6 +2966,7 @@ def post_install_step(self): self.run_post_install_commands() self.apply_post_install_patches() + self.log_post_install_messages() self.fix_shebang() diff --git a/easybuild/framework/easyconfig/default.py b/easybuild/framework/easyconfig/default.py index 91e0fe7fe4..0b44307478 100644 --- a/easybuild/framework/easyconfig/default.py +++ b/easybuild/framework/easyconfig/default.py @@ -116,6 +116,7 @@ 'pretestopts': ['', 'Extra prefix options for test.', BUILD], 'postinstallcmds': [[], 'Commands to run after the install step.', BUILD], 'postinstallpatches': [[], 'Patch files to apply after running the install step.', BUILD], + 'postinstallmsgs': [[], 'Messages to print after running the install step.', BUILD], 'required_linked_shared_libs': [[], "List of shared libraries (names, file names, or paths) which must be " "linked in all installed binaries/libraries", BUILD], 'runtest': [None, ('Indicates if a test should be run after make; should specify argument ' diff --git a/test/framework/toy_build.py b/test/framework/toy_build.py index e9e347c32a..e6bb6b4004 100644 --- a/test/framework/toy_build.py +++ b/test/framework/toy_build.py @@ -3778,6 +3778,35 @@ def test_toy_unavailable_os_dep(self): regex = re.compile(pattern, re.M) self.assertTrue(regex.search(stdout), "Pattern '%s' should be found in: %s" % (regex.pattern, stdout)) + def test_toy_post_install_messages(self): + """ + Test use of post-install messages + """ + test_ecs = os.path.join(os.path.dirname(__file__), 'easyconfigs', 'test_ecs') + toy_ec = os.path.join(test_ecs, 't', 'toy', 'toy-0.0.eb') + + test_ec_txt = read_file(toy_ec) + test_ec_txt += "\npostinstallmsgs = ['This is post install message 1', 'This is post install message 2']" + test_ec = os.path.join(self.test_prefix, 'test.eb') + write_file(test_ec, test_ec_txt) + + test_report_fp = os.path.join(self.test_buildpath, 'full_test_report.md') + + self.mock_stderr(True) + self.mock_stdout(True) + self.test_toy_build(ec_file=test_ec, test_report=test_report_fp) + stdout = self.get_stdout() + self.mock_stderr(False) + self.mock_stdout(False) + + patterns = [ + r"== This is post install message 1", + r"== This is post install message 2", + ] + for pattern in patterns: + regex = re.compile(pattern, re.M) + self.assertTrue(regex.search(stdout), "Pattern '%s' should be found in: %s" % (regex.pattern, stdout)) + def suite(): """ return all the tests in this file """