Source code for read_structure_step.formats.mop.find_mopac
from pathlib import Path
import os
import seamm_util
mopac_error_identifiers = []
[docs]
def find_mopac():
    # Try the commandline options / config file
    parser = seamm_util.getParser()
    options = parser.get_options()
    if "mopac-step" in options:
        mopac_options = options["mopac-step"]
        exe = mopac_options["mopac_exe"]
        mopac_path = mopac_options["mopac_path"]
        if mopac_path != "":
            exe = str(Path(mopac_path).expanduser().resolve() / exe)
        try:
            mopac_exe = seamm_util.check_executable(exe)
        except FileNotFoundError:
            pass
        else:
            return mopac_exe
    # Next try common locations
    try:
        mopac_exe = "/opt/mopac/mopac"
        if os.path.isfile(mopac_exe) is False:
            raise FileNotFoundError(
                'The directory "/opt/mopac/" exists, but the executable \
                "mopac" is not there'
            )
    except FileNotFoundError:
        try:
            mopac_path = os.path.split(os.environ["mopac"])[0]
            mopac_exe = mopac_path + "mopac"
            if os.path.isfile(mopac_exe) is False:
                raise FileNotFoundError(
                    'The environment variable "mopac" is defined, but \
                            the executable "mopac" is not there'
                )
        except (KeyError, FileNotFoundError):
            try:
                mopac_exe = Path(os.environ["MOPAC_LICENSE"]) / "mopac"
                mopac_exe = str(mopac_exe)
                if os.path.isfile(mopac_exe) is False:
                    raise FileNotFoundError(
                        'The environment variable "mopac" is defined, but the \
                                executable "mopac" is not there'
                    )
            except (KeyError, FileNotFoundError):
                try:
                    mopac_exe = seamm_util.check_executable("mopac")
                except FileNotFoundError:
                    return None
    return mopac_exe