# -*- mode: python -*-

Import([
    'env',
    'get_option',
    'serverJs',
    'usemozjs',
])

env.Library(
    target='scripting_common',
    source=[
        'deadline_monitor.cpp',
        'deadline_monitor.idl',
        'dbdirectclient_factory.cpp',
        'engine.cpp',
        'jsexception.cpp',
        'utils.cpp',
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
        '$BUILD_DIR/mongo/client/clientdriver_minimal',
        '$BUILD_DIR/mongo/shell/mongojs',
        '$BUILD_DIR/mongo/util/md5',
    ],
    LIBDEPS_PRIVATE=[
        '$BUILD_DIR/mongo/idl/server_parameter',
    ],
)

env.Library(
    target='bson_template_evaluator',
    source=[
        "bson_template_evaluator.cpp",
    ],
    LIBDEPS=[
        '$BUILD_DIR/mongo/base',
    ],
)

env.Library(
    target='scripting_none',
    source=[
        'engine_none.cpp',
    ],
    LIBDEPS=[
        'scripting_common',
    ],
    LBDEPS_PRIVATE=[
        'bson_template_evaluator',
    ]
)

if usemozjs:
    scriptingEnv = env.Clone()

    scriptingEnv.Append(
        CXXFLAGS=[] if scriptingEnv.TargetOSIs('windows') else [
            # TODO(SERVER-59992): Remove -Wno-class-memacces where possible.
            '-Wno-unknown-warning-option',
            '-Wno-class-memaccess',
        ],
    )

    scriptingEnv.InjectMozJS()

    scriptingEnv.JSHeader(
        target='mozjs/mongohelpers_js.cpp',
        source=[
            'mozjs/mongohelpers.js'
        ]
    )

    env.Alias('generated-sources', 'mozjs/mongohelpers_js.cpp')

    scriptingEnv.Library(
        target='scripting',
        source=[
            'mozjs/base.cpp',
            'mozjs/bindata.cpp',
            'mozjs/bson.cpp',
            'mozjs/code.cpp',
            'mozjs/countdownlatch.cpp',
            'mozjs/cursor.cpp',
            'mozjs/cursor_handle.cpp',
            'mozjs/db.cpp',
            'mozjs/dbcollection.cpp',
            'mozjs/dbpointer.cpp',
            'mozjs/dbquery.cpp',
            'mozjs/dbref.cpp',
            'mozjs/engine.cpp',
            'mozjs/error.cpp',
            'mozjs/exception.cpp',
            'mozjs/global.cpp',
            'mozjs/idwrapper.cpp',
            'mozjs/implscope.cpp',
            'mozjs/internedstring.cpp',
            'mozjs/jscustomallocator.cpp',
            'mozjs/jsstringwrapper.cpp',
            'mozjs/jsthread.cpp',
            'mozjs/maxkey.cpp',
            'mozjs/minkey.cpp',
            'mozjs/mongo.cpp',
            'mozjs/mongohelpers.cpp',
            'mozjs/mongohelpers_js.cpp',
            'mozjs/nativefunction.cpp',
            'mozjs/numberdecimal.cpp',
            'mozjs/numberint.cpp',
            'mozjs/numberlong.cpp',
            'mozjs/object.cpp',
            'mozjs/objectwrapper.cpp',
            'mozjs/oid.cpp',
            'mozjs/PosixNSPR.cpp',
            'mozjs/proxyscope.cpp',
            'mozjs/regexp.cpp',
            'mozjs/session.cpp',
            'mozjs/status.cpp',
            'mozjs/timestamp.cpp',
            'mozjs/uri.cpp',
            'mozjs/valuereader.cpp',
            'mozjs/valuewriter.cpp',
            'mozjs/engine.idl',
            'mozjs/scripting_util.idl',
        ],
        LIBDEPS=[
            '$BUILD_DIR/mongo/db/service_context',
            '$BUILD_DIR/mongo/shell/mongojs',
            '$BUILD_DIR/third_party/mozjs/mozjs',
            'bson_template_evaluator',
            'scripting_common',
        ],
        LIBDEPS_PRIVATE=[
            '$BUILD_DIR/mongo/client/clientdriver_network',
            '$BUILD_DIR/mongo/idl/server_parameter',
        ],
    )
else:
    env.Library(
        target='scripting',
        source=[
            'scripting_none.cpp'
        ],
        LIBDEPS=[
            'scripting_none',
        ],
    )

env.Library(
    target='scripting_server',
    source=[
        'scripting_server.cpp',
    ],
    LIBDEPS=[
        'scripting' if serverJs else 'scripting_none',
    ],
)

env.CppUnitTest(
    target='scripting_test',
    source=[
        'bson_template_evaluator_test.cpp',
        'deadline_monitor_test.cpp',
    ],
    LIBDEPS=[
        'bson_template_evaluator',
        'scripting_common',
    ],
)
