#! /usr/bin/env python
import os
import platform

import waves

# 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')",
)
AddOption(
    "--verbose-tasks",
    dest="verbose_tasks",
    default=False,
    action="store_true",
    help="Boolean to 'tee' output for interactive and verbose task execution. (default: '%default')",
)

# Inherit user's full environment
env = waves.scons_extensions.WAVESEnvironment(
    ENV=os.environ.copy(),
    build_dir=GetOption("build_dir"),
    unconditional_build=GetOption("unconditional_build"),
    verbose_tasks=GetOption("verbose_tasks"),
)

# Action suffix
system = platform.system().lower()
if env["verbose_tasks"]:
    if system == "windows":  # Assume PowerShell
        env["action_suffix"] = "$(| Tee-Object -FilePath ${TARGETS[-1].abspath}$)"
    else:  # *Nix style tee
        env["action_suffix"] = "$(2>&1 | tee ${TARGETS[-1].abspath}$)"
else:
    # Default WAVES action suffix
    env["action_suffix"] = "$(> ${TARGETS[-1].abspath} 2>&1$)"

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

# Always print failed task *.stdout files
env.PrintBuildFailures(print_stdout=True)

# 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
env["CCX_PROGRAM"] = env.AddProgram(["ccx"])
env["ccx2paraview"] = env.AddProgram(["ccx2paraview"])

# Abaqus input file implicit dependency scanner
# Works for CalculiX because CalculiX uses the Abaqus include keyword semantics and input file extension
env.Append(SCANNERS=waves.scons_extensions.abaqus_input_scanner())

# Call SConscript file
SConscript("SConscript", variant_dir=env["build_dir"], exports={"env": env}, duplicate=True)

# List all aliases in help message.
# This must come *after* all expected Alias definitions and SConscript files.
env.ProjectHelp()
