diff --git a/install/MarcMentat/apply_DAMASK_modifications.py b/install/MarcMentat/apply_DAMASK_modifications.py index ba605b7db..c3a5a18f3 100755 --- a/install/MarcMentat/apply_DAMASK_modifications.py +++ b/install/MarcMentat/apply_DAMASK_modifications.py @@ -3,12 +3,18 @@ import os import glob import argparse +import shutil from pathlib import Path import damask -def copy_and_replace(in_file,dst,msc_root,editor): - with open(in_file) as f_in, open(dst/Path(in_file).name,'w') as f_out: +def copy_and_replace(patch,orig,msc_root,editor): + try: + shutil.copyfile(orig,orig.parent/patch.stem) + except shutil.SameFileError: + pass + damask.execute(f'patch {orig.parent/patch.stem} {patch} -b}') + with open(orig.parent/patch.stem) as f_in, open(orig.parent/patch.stem,'w') as f_out: f_out.write(f_in.read().replace('%INSTALLDIR%',msc_root).replace('%EDITOR%',editor)) @@ -30,31 +36,27 @@ parser.add_argument('--damask-root', dest='damask_root', metavar = 'string', help='DAMASK root directory') args = parser.parse_args() -msc_root = Path(args.msc_root) -damask_root = Path(args.damask_root) -msc_version = args.msc_version +msc_root = Path(args.msc_root).expanduser() +damask_root = Path(args.damask_root).expanduser() +msc_version = int(args.msc_version) if str(args.msc_version).split('.')[1] == '0' else args.msc_version + +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']]} -print('adapting Marc tools...\n') - -src = damask_root/f'install/MarcMentat/{msc_version}/Marc_tools' -dst = msc_root/f'marc{msc_version}/tools' -for in_file in glob.glob(str(src/'*damask*')) + [str(src/'include_linux64')]: - copy_and_replace(in_file,dst,args.msc_root,args.editor) - - -print('adapting Mentat scripts and menus...\n') - -src = damask_root/f'install/MarcMentat/{msc_version}/Mentat_bin' -dst = msc_root/f'mentat{msc_version}/bin' -for in_file in glob.glob(str(src/'*[!.original]')): - copy_and_replace(in_file,dst,args.msc_root,args.editor) - -src = damask_root/f'install/MarcMentat/{msc_version}/Mentat_menus' -dst = msc_root/f'mentat{msc_version}/menus' -for in_file in glob.glob(str(src/'job_run.ms')): - copy_and_replace(in_file,dst,args.msc_root,args.editor) +print('patching files...\n') +for directory in glob.glob(str(damask_root/f'install/MarcMentat/{msc_version}/*')): + for orig, mods in matches[Path(directory).name]: + dirs = (msc_root/Path(directory)).name.lower().split('_') + orig = msc_root/f'{dirs[0]}{msc_version}/{dirs[1]}/{orig}' + for patch in glob.glob(f'{directory}/{mods}.patch'): + copy_and_replace(Path(patch),orig,msc_root,editor) print('compiling Mentat menu binaries...')