#! /usr/bin/env python

import os
import pathlib

# Add build directory CLI arg
AddOption(
    "--build-dir",
    dest="build_dir",
    default="build",
    nargs=1,
    type="string",
    action="store",
    metavar="DIR",
    help="SCons build (variant) root directory. Relative or absolute path. (default: '%default')",
)
AddOption(
    "--unconditional-build",
    dest="unconditional_build",
    default=False,
    action="store_true",
    help="Boolean to force building of conditionally ignored targets. (default: '%default')",
)
# Python optparse appends to the default list instead of overriding. Must implement default/override ourselves.
default_abaqus_commands = [
    "/apps/abaqus/Commands/abq2024",
    "/usr/projects/ea/abaqus/Commands/abq2024",
    "abq2024",
    "abaqus",
]
AddOption(
    "--abaqus-command",
    dest="abaqus_command",
    nargs=1,
    type="string",
    action="append",
    metavar="COMMAND",
    help=f"Override for the Abaqus command. Repeat to specify more than one (default: {default_abaqus_commands})",
)

# Inherit user's full environment
env = Environment(
    ENV=os.environ.copy(),
    build_dir=GetOption("build_dir"),
    unconditional_build=GetOption("unconditional_build"),
    abaqus_commands=GetOption("abaqus_command"),
)

# Always copy (no sym-links) when duplicating
env.SetOption("duplicate", "copy")

# Empty defaults list to avoid building all simulation targets by default
env.Default()

# Find required programs for conditional target ignoring and absolute path for use in target actions
conf = env.Configure()
env["ABAQUS_PROGRAM"] = conf.CheckProg(
    env.Detect(env["abaqus_commands"] if env["abaqus_commands"] is not None else default_abaqus_commands)
)
conf.Finish()
if env["ABAQUS_PROGRAM"]:
    env.PrependENVPath("PATH", pathlib.Path(env["ABAQUS_PROGRAM"]).parent)

# Add workflow(s)
SConscript("SConscript", variant_dir=env["build_dir"], exports={"env": env}, duplicate=True)
