From ab2072bf2f5195389bd76d3bc9138d8532e57328 Mon Sep 17 00:00:00 2001 From: Daniel Otto de Mentock Date: Wed, 8 Jun 2022 15:50:35 +0200 Subject: [PATCH 1/3] apply_DAMASK_modifications script needs to be independent from damask installation (except solver variables) --- .../MarcMentat/apply_DAMASK_modifications.py | 48 +++++++++++++++---- 1 file changed, 40 insertions(+), 8 deletions(-) diff --git a/install/MarcMentat/apply_DAMASK_modifications.py b/install/MarcMentat/apply_DAMASK_modifications.py index a17120895..473d26da7 100755 --- a/install/MarcMentat/apply_DAMASK_modifications.py +++ b/install/MarcMentat/apply_DAMASK_modifications.py @@ -1,20 +1,51 @@ #!/usr/bin/env python3 - import os import sys import glob import argparse import shutil from pathlib import Path +import importlib.machinery +import signal +import subprocess +import shlex +from functools import partial + +solver = importlib.machinery.SourceFileLoader( + 'damask',f'{str(Path(__file__).parent.absolute().parents[1])}/python/damask/solver/_marc.py').load_module() + +def run(cmd, wd='./', env=None, timeout=None): + def pass_signal(sig,_,proc,default): + proc.send_signal(sig) + signal.signal(sig,default) + signal.raise_signal(sig) + signals = [signal.SIGINT,signal.SIGTERM] + print(f"running '{cmd}' in '{wd}'") + process = subprocess.Popen(shlex.split(cmd), + stdout = subprocess.PIPE, + stderr = subprocess.PIPE, + env = os.environ if env is None else env, + cwd = wd, + encoding = 'utf-8') + sig_states = [signal.signal(sig,partial(pass_signal,proc=process,default=signal.getsignal(sig))) for sig in signals] + try: + stdout,stderr = process.communicate(timeout=timeout) + finally: + for sig,state in zip(signals,sig_states): + signal.signal(sig,state) + if process.returncode != 0: + print(stdout) + print(stderr) + raise RuntimeError(f"'{cmd}' failed with returncode {process.returncode}") + return stdout, stderr -import damask def copy_and_patch(patch,orig,editor): try: shutil.copyfile(orig,orig.parent/patch.stem) except shutil.SameFileError: pass - damask.util.run(f'patch {orig.parent/patch.stem} {patch} --backup --forward') + run(f'patch {orig.parent/patch.stem} {patch} --backup --forward') with open(orig.parent/patch.stem) as f_in: content = f_in.read() with open(orig.parent/patch.stem,'w') as f_out: @@ -28,15 +59,16 @@ parser = argparse.ArgumentParser( parser.add_argument('--editor', dest='editor', metavar='string', default='vi', help='Name of the editor (executable) used by Marc Mentat') parser.add_argument('--marc-root', dest='marc_root', metavar='string', - default=damask.solver._marc._marc_root, + default=solver._marc_root, help='Marc root directory') parser.add_argument('--marc-version', dest='marc_version', metavar='string', - default=damask.solver._marc._marc_version, + default=solver._marc_version, help='Marc version') parser.add_argument('--damask-root', dest='damask_root', metavar = 'string', - default=damask.solver._marc._damask_root, + default=solver._damask_root, help='DAMASK root directory') + args = parser.parse_args() marc_root = Path(args.marc_root).expanduser() damask_root = Path(args.damask_root).expanduser() @@ -52,7 +84,7 @@ matches = {'Marc_tools': [['comp_user','comp_damask_*mp'], for cmd in ['patch','xvfb-run']: try: - damask.util.run(f'{cmd} --help') + run(f'{cmd} --help') except FileNotFoundError: print(f'"{cmd}" not found, please install') sys.exit() @@ -71,7 +103,7 @@ print('compiling Mentat menu binaries...') executable = marc_root/f'mentat{marc_version}/bin/mentat' menu_file = marc_root/f'mentat{marc_version}/menus/linux64/main.msb' -damask.util.run(f'xvfb-run -a {executable} -compile {menu_file}') +run(f'xvfb-run -a {executable} -compile {menu_file}') print('setting file access rights...') From 1ed7bbabefdc6bdb735c27080956649c9d15fc84 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Thu, 9 Jun 2022 00:12:19 +0200 Subject: [PATCH 2/3] signal handling etc. not needed here --- .../MarcMentat/apply_DAMASK_modifications.py | 34 ++----------------- 1 file changed, 3 insertions(+), 31 deletions(-) diff --git a/install/MarcMentat/apply_DAMASK_modifications.py b/install/MarcMentat/apply_DAMASK_modifications.py index 473d26da7..208abdd6f 100755 --- a/install/MarcMentat/apply_DAMASK_modifications.py +++ b/install/MarcMentat/apply_DAMASK_modifications.py @@ -6,46 +6,18 @@ import argparse import shutil from pathlib import Path import importlib.machinery -import signal import subprocess import shlex -from functools import partial solver = importlib.machinery.SourceFileLoader( 'damask',f'{str(Path(__file__).parent.absolute().parents[1])}/python/damask/solver/_marc.py').load_module() -def run(cmd, wd='./', env=None, timeout=None): - def pass_signal(sig,_,proc,default): - proc.send_signal(sig) - signal.signal(sig,default) - signal.raise_signal(sig) - signals = [signal.SIGINT,signal.SIGTERM] - print(f"running '{cmd}' in '{wd}'") - process = subprocess.Popen(shlex.split(cmd), - stdout = subprocess.PIPE, - stderr = subprocess.PIPE, - env = os.environ if env is None else env, - cwd = wd, - encoding = 'utf-8') - sig_states = [signal.signal(sig,partial(pass_signal,proc=process,default=signal.getsignal(sig))) for sig in signals] - try: - stdout,stderr = process.communicate(timeout=timeout) - finally: - for sig,state in zip(signals,sig_states): - signal.signal(sig,state) - if process.returncode != 0: - print(stdout) - print(stderr) - raise RuntimeError(f"'{cmd}' failed with returncode {process.returncode}") - return stdout, stderr - - def copy_and_patch(patch,orig,editor): try: shutil.copyfile(orig,orig.parent/patch.stem) except shutil.SameFileError: pass - run(f'patch {orig.parent/patch.stem} {patch} --backup --forward') + subprocess.run(shlex.split(f'patch {orig.parent/patch.stem} {patch} --backup --forward')) with open(orig.parent/patch.stem) as f_in: content = f_in.read() with open(orig.parent/patch.stem,'w') as f_out: @@ -84,7 +56,7 @@ matches = {'Marc_tools': [['comp_user','comp_damask_*mp'], for cmd in ['patch','xvfb-run']: try: - run(f'{cmd} --help') + subprocess.run(shlex.split(f'{cmd} --help')) except FileNotFoundError: print(f'"{cmd}" not found, please install') sys.exit() @@ -103,7 +75,7 @@ print('compiling Mentat menu binaries...') executable = marc_root/f'mentat{marc_version}/bin/mentat' menu_file = marc_root/f'mentat{marc_version}/menus/linux64/main.msb' -run(f'xvfb-run -a {executable} -compile {menu_file}') +subprocess.run(shlex.split(f'xvfb-run -a {executable} -compile {menu_file}')) print('setting file access rights...') From ea6199b9085d6ba5310a6ef866fc2395866ad1c2 Mon Sep 17 00:00:00 2001 From: Martin Diehl Date: Thu, 9 Jun 2022 00:22:04 +0200 Subject: [PATCH 3/3] simplified --- install/MarcMentat/apply_DAMASK_modifications.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/install/MarcMentat/apply_DAMASK_modifications.py b/install/MarcMentat/apply_DAMASK_modifications.py index 208abdd6f..353df955e 100755 --- a/install/MarcMentat/apply_DAMASK_modifications.py +++ b/install/MarcMentat/apply_DAMASK_modifications.py @@ -1,16 +1,16 @@ #!/usr/bin/env python3 + import os import sys import glob import argparse import shutil from pathlib import Path -import importlib.machinery import subprocess import shlex -solver = importlib.machinery.SourceFileLoader( - 'damask',f'{str(Path(__file__).parent.absolute().parents[1])}/python/damask/solver/_marc.py').load_module() +sys.path.append(str(Path(__file__).parents[2]/'python/damask')) +import solver def copy_and_patch(patch,orig,editor): try: @@ -31,13 +31,13 @@ parser = argparse.ArgumentParser( parser.add_argument('--editor', dest='editor', metavar='string', default='vi', help='Name of the editor (executable) used by Marc Mentat') parser.add_argument('--marc-root', dest='marc_root', metavar='string', - default=solver._marc_root, + default=solver._marc._marc_root, help='Marc root directory') parser.add_argument('--marc-version', dest='marc_version', metavar='string', - default=solver._marc_version, + default=solver._marc._marc_version, help='Marc version') parser.add_argument('--damask-root', dest='damask_root', metavar = 'string', - default=solver._damask_root, + default=solver._marc._damask_root, help='DAMASK root directory')