2020-07-18 13:42:22 +05:30
|
|
|
#!/usr/bin/env python3
|
|
|
|
|
|
|
|
import os
|
2022-03-11 16:09:31 +05:30
|
|
|
import sys
|
2020-07-18 13:42:22 +05:30
|
|
|
import glob
|
|
|
|
import argparse
|
2021-07-14 15:45:39 +05:30
|
|
|
import shutil
|
2020-07-18 13:42:22 +05:30
|
|
|
from pathlib import Path
|
|
|
|
|
2021-04-22 12:19:52 +05:30
|
|
|
import damask
|
2020-07-18 13:42:22 +05:30
|
|
|
|
2021-12-01 14:33:02 +05:30
|
|
|
def copy_and_patch(patch,orig,editor):
|
2021-07-14 15:45:39 +05:30
|
|
|
try:
|
2021-07-14 13:43:08 +05:30
|
|
|
shutil.copyfile(orig,orig.parent/patch.stem)
|
2021-07-14 15:45:39 +05:30
|
|
|
except shutil.SameFileError:
|
|
|
|
pass
|
2021-11-25 22:00:22 +05:30
|
|
|
damask.util.run(f'patch {orig.parent/patch.stem} {patch} -b')
|
2021-12-01 16:16:48 +05:30
|
|
|
with open(orig.parent/patch.stem) as f_in:
|
|
|
|
content = f_in.read()
|
|
|
|
with open(orig.parent/patch.stem,'w') as f_out:
|
|
|
|
f_out.write(content.replace('%EDITOR%',editor))
|
2021-04-28 22:34:54 +05:30
|
|
|
|
|
|
|
|
2020-07-18 13:42:22 +05:30
|
|
|
parser = argparse.ArgumentParser(
|
2021-10-18 02:05:25 +05:30
|
|
|
description='Apply DAMASK modification to MSC Marc/Mentat',
|
2021-04-22 12:19:52 +05:30
|
|
|
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
|
|
|
|
|
2020-07-18 13:42:22 +05:30
|
|
|
parser.add_argument('--editor', dest='editor', metavar='string', default='vi',
|
2021-10-18 02:05:25 +05:30
|
|
|
help='Name of the editor for Marc Mentat (executable)')
|
|
|
|
parser.add_argument('--marc-root', dest='marc_root', metavar='string',
|
|
|
|
default=damask.solver._marc._marc_root,
|
|
|
|
help='Marc root directory')
|
2021-11-25 22:00:22 +05:30
|
|
|
parser.add_argument('--marc-version', dest='marc_version', metavar='string',
|
2021-10-18 02:05:25 +05:30
|
|
|
default=damask.solver._marc._marc_version,
|
|
|
|
help='Marc version')
|
2021-04-28 12:23:40 +05:30
|
|
|
parser.add_argument('--damask-root', dest='damask_root', metavar = 'string',
|
2021-04-22 12:19:52 +05:30
|
|
|
default=damask.solver._marc._damask_root,
|
|
|
|
help='DAMASK root directory')
|
|
|
|
|
|
|
|
args = parser.parse_args()
|
2021-10-18 02:05:25 +05:30
|
|
|
marc_root = Path(args.marc_root).expanduser()
|
2021-07-14 15:45:39 +05:30
|
|
|
damask_root = Path(args.damask_root).expanduser()
|
2021-11-30 18:25:55 +05:30
|
|
|
marc_version = args.marc_version
|
2021-07-14 15:45:39 +05:30
|
|
|
|
|
|
|
matches = {'Marc_tools': [['comp_user','comp_damask_*mp'],
|
|
|
|
['run_marc','run_damask_*mp'],
|
|
|
|
['include_linux64','include_linux64']],
|
|
|
|
'Mentat_bin': [['edit_window','edit_window'],
|
|
|
|
['submit1','submit?'],
|
|
|
|
['kill1','kill?']],
|
|
|
|
'Mentat_menus':[['job_run.ms','job_run.ms']]}
|
|
|
|
|
2022-03-11 16:09:31 +05:30
|
|
|
for cmd in ['patch','xvfb-run']:
|
|
|
|
try:
|
|
|
|
damask.util.run(f'{cmd} --help')
|
|
|
|
except FileNotFoundError:
|
|
|
|
print(f'"{cmd}" not found, please install')
|
|
|
|
sys.exit()
|
|
|
|
|
2021-07-14 15:45:39 +05:30
|
|
|
|
2021-12-01 21:16:22 +05:30
|
|
|
print('patching files...')
|
2021-07-14 15:45:39 +05:30
|
|
|
|
2021-11-30 13:52:30 +05:30
|
|
|
for directory in glob.glob(str(damask_root/'install/MarcMentat'/marc_version/'*')):
|
2021-07-14 15:45:39 +05:30
|
|
|
for orig, mods in matches[Path(directory).name]:
|
2021-10-18 02:05:25 +05:30
|
|
|
product,subfolder = (marc_root/Path(directory)).name.split('_')
|
|
|
|
orig = marc_root/f'{product.lower()}{marc_version}/{subfolder}/{orig}'
|
2021-07-14 15:45:39 +05:30
|
|
|
for patch in glob.glob(f'{directory}/{mods}.patch'):
|
2021-12-01 14:33:02 +05:30
|
|
|
copy_and_patch(Path(patch),orig,args.editor)
|
2020-07-18 13:42:22 +05:30
|
|
|
|
|
|
|
print('compiling Mentat menu binaries...')
|
|
|
|
|
2021-10-18 02:05:25 +05:30
|
|
|
executable = marc_root/f'mentat{marc_version}/bin/mentat'
|
|
|
|
menu_file = marc_root/f'mentat{marc_version}/menus/linux64/main.msb'
|
2022-03-11 16:09:31 +05:30
|
|
|
damask.util.run(f'xvfb-run -a {executable} -compile {menu_file}')
|
2021-12-01 20:31:55 +05:30
|
|
|
|
|
|
|
print('setting file access rights...')
|
|
|
|
|
2022-01-05 19:25:56 +05:30
|
|
|
for file in (glob.glob(str(marc_root/f'marc{marc_version}/tools/*_damask*')) +
|
|
|
|
glob.glob(str(marc_root/f'mentat{marc_version}/bin/kill[4-6]')) +
|
|
|
|
glob.glob(str(marc_root/f'mentat{marc_version}/bin/submit[4-6]'))):
|
2021-12-01 20:31:55 +05:30
|
|
|
os.chmod(file , 0o755)
|