# -*- Mode: python; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 40 -*-
# vim: set filetype=python:
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

# Directory metadata
component_engine = ('Core', 'JavaScript Engine')
component_gc     = ('Core', 'JavaScript: GC')
component_intl   = ('Core', 'JavaScript: Internationalization API')
component_jit    = ('Core', 'JavaScript Engine: JIT')
component_stl    = ('Core', 'JavaScript: Standard Library')

FILES_PER_UNIFIED_FILE = 6

with Files('../public/**'):
    BUG_COMPONENT = component_engine
with Files('*'):
    BUG_COMPONENT = component_engine

with Files('asmjs/**'):
    BUG_COMPONENT = component_jit
with Files('builtin/**'):
    BUG_COMPONENT = component_stl
with Files('ctypes/**'):
    BUG_COMPONENT = ('Core', 'js-ctypes')
with Files('gc/**'):
    BUG_COMPONENT = component_gc
with Files('jit/**'):
    BUG_COMPONENT = component_jit

# File-specific metadata
for gcfile in ['jsgc*', 'devtools/rootAnalysis', 'devtools/gc-ubench', 'devtools/gctrace']:
    with Files(gcfile):
        BUG_COMPONENT = component_gc
for header in ('GCAPI.h', 'HeapAPI.h', 'RootingAPI.h', 'SliceBudget.h', 'TraceKind.h', 'TracingAPI.h', 'WeakMapPtr.h'):
    with Files('../public/' + header):
        BUG_COMPONENT = component_gc

for stlfile in ['jsarray.*', 'jsbool*', 'jsdate.*', 'jsnum.*', 'json.*', 'jsstr.*']:
    with Files(stlfile):
        BUG_COMPONENT = component_stl

with Files('builtin/Intl*'):
    BUG_COMPONENT = component_intl
with Files('builtin/make_intl_data.py'):
    BUG_COMPONENT = component_intl

with Files('../public/TrackedOptimizationInfo.h'):
    BUG_COMPONENT = component_jit


if CONFIG['JS_BUNDLED_EDITLINE']:
    DIRS += ['editline']

# editline needs to get built before the shell
if not CONFIG['JS_DISABLE_SHELL']:
    DIRS += ['shell']

TEST_DIRS += ['jsapi-tests', 'tests', 'gdb']

CONFIGURE_SUBST_FILES += [
    'devtools/rootAnalysis/Makefile',
    'js-confdefs.h',
    'js-config',
    'js.pc',
]

if not CONFIG['JS_STANDALONE']:
    CONFIGURE_SUBST_FILES += [
        '../../config/autoconf-js.mk',
        '../../config/emptyvars-js.mk',
    ]

CONFIGURE_DEFINE_FILES += [
    'js-config.h',
]

# Changes to internal header files, used externally, massively slow down
# browser builds.  Don't add new files here unless you know what you're
# doing!
EXPORTS += [
    'js.msg',
    'jsalloc.h',
    'jsapi.h',
    'jsbytecode.h',
    'jsclist.h',
    'jscpucfg.h',
    'jsfriendapi.h',
    'jsprf.h',
    'jsprototypes.h',
    'jspubtd.h',
    'jstypes.h',
    'jsversion.h',
    'jswrapper.h',
    'perf/jsperf.h',
]

# If you add a header here, add it to js/src/jsapi-tests/testIntTypesABI.cpp so
# that we ensure we don't over-expose our internal integer typedefs.  Note that
# LegacyIntTypes.h below is deliberately exempted from this requirement.
EXPORTS.js += [
    '../public/CallArgs.h',
    '../public/CallNonGenericMethod.h',
    '../public/CharacterEncoding.h',
    '../public/Class.h',
    '../public/Conversions.h',
    '../public/Date.h',
    '../public/Debug.h',
    '../public/GCAPI.h',
    '../public/GCHashTable.h',
    '../public/HashTable.h',
    '../public/HeapAPI.h',
    '../public/Id.h',
    '../public/Initialization.h',
    '../public/LegacyIntTypes.h',
    '../public/MemoryMetrics.h',
    '../public/Principals.h',
    '../public/ProfilingFrameIterator.h',
    '../public/ProfilingStack.h',
    '../public/Proxy.h',
    '../public/RequiredDefines.h',
    '../public/RootingAPI.h',
    '../public/SliceBudget.h',
    '../public/StructuredClone.h',
    '../public/TraceableVector.h',
    '../public/TraceKind.h',
    '../public/TracingAPI.h',
    '../public/TrackedOptimizationInfo.h',
    '../public/TypeDecls.h',
    '../public/UbiNode.h',
    '../public/UbiNodeBreadthFirst.h',
    '../public/UbiNodeCensus.h',
    '../public/UbiNodeDominatorTree.h',
    '../public/UbiNodePostOrder.h',
    '../public/Utility.h',
    '../public/Value.h',
    '../public/Vector.h',
    '../public/WeakMapPtr.h',
]

UNIFIED_SOURCES += [
    'asmjs/AsmJSFrameIterator.cpp',
    'asmjs/AsmJSLink.cpp',
    'asmjs/AsmJSModule.cpp',
    'asmjs/AsmJSSignalHandlers.cpp',
    'asmjs/AsmJSValidate.cpp',
    'asmjs/WasmGenerator.cpp',
    'asmjs/WasmIonCompile.cpp',
    'asmjs/WasmStubs.cpp',
    'builtin/AtomicsObject.cpp',
    'builtin/Eval.cpp',
    'builtin/Intl.cpp',
    'builtin/MapObject.cpp',
    'builtin/ModuleObject.cpp',
    'builtin/Object.cpp',
    'builtin/Profilers.cpp',
    'builtin/Reflect.cpp',
    'builtin/ReflectParse.cpp',
    'builtin/SIMD.cpp',
    'builtin/SymbolObject.cpp',
    'builtin/TestingFunctions.cpp',
    'builtin/TypedObject.cpp',
    'builtin/WeakMapObject.cpp',
    'builtin/WeakSetObject.cpp',
    'devtools/sharkctl.cpp',
    'ds/LifoAlloc.cpp',
    'frontend/BytecodeCompiler.cpp',
    'frontend/BytecodeEmitter.cpp',
    'frontend/FoldConstants.cpp',
    'frontend/NameFunctions.cpp',
    'frontend/ParseMaps.cpp',
    'frontend/ParseNode.cpp',
    'frontend/TokenStream.cpp',
    'gc/Allocator.cpp',
    'gc/Barrier.cpp',
    'gc/GCTrace.cpp',
    'gc/Iteration.cpp',
    'gc/Marking.cpp',
    'gc/Memory.cpp',
    'gc/MemoryProfiler.cpp',
    'gc/Nursery.cpp',
    'gc/RootMarking.cpp',
    'gc/Statistics.cpp',
    'gc/Tracer.cpp',
    'gc/Verifier.cpp',
    'gc/Zone.cpp',
    'irregexp/NativeRegExpMacroAssembler.cpp',
    'irregexp/RegExpAST.cpp',
    'irregexp/RegExpEngine.cpp',
    'irregexp/RegExpInterpreter.cpp',
    'irregexp/RegExpMacroAssembler.cpp',
    'irregexp/RegExpParser.cpp',
    'irregexp/RegExpStack.cpp',
    'jit/AliasAnalysis.cpp',
    'jit/AlignmentMaskAnalysis.cpp',
    'jit/BacktrackingAllocator.cpp',
    'jit/Bailouts.cpp',
    'jit/BaselineBailouts.cpp',
    'jit/BaselineCompiler.cpp',
    'jit/BaselineDebugModeOSR.cpp',
    'jit/BaselineFrame.cpp',
    'jit/BaselineFrameInfo.cpp',
    'jit/BaselineIC.cpp',
    'jit/BaselineInspector.cpp',
    'jit/BaselineJIT.cpp',
    'jit/BitSet.cpp',
    'jit/BytecodeAnalysis.cpp',
    'jit/C1Spewer.cpp',
    'jit/CodeGenerator.cpp',
    'jit/CompileWrappers.cpp',
    'jit/Disassembler.cpp',
    'jit/EagerSimdUnbox.cpp',
    'jit/EdgeCaseAnalysis.cpp',
    'jit/EffectiveAddressAnalysis.cpp',
    'jit/ExecutableAllocator.cpp',
    'jit/InstructionReordering.cpp',
    'jit/Ion.cpp',
    'jit/IonAnalysis.cpp',
    'jit/IonBuilder.cpp',
    'jit/IonCaches.cpp',
    'jit/IonOptimizationLevels.cpp',
    'jit/JitcodeMap.cpp',
    'jit/JitFrames.cpp',
    'jit/JitOptions.cpp',
    'jit/JitSpewer.cpp',
    'jit/JSONSpewer.cpp',
    'jit/LICM.cpp',
    'jit/LIR.cpp',
    'jit/LoopUnroller.cpp',
    'jit/Lowering.cpp',
    'jit/MacroAssembler.cpp',
    'jit/MCallOptimize.cpp',
    'jit/MIR.cpp',
    'jit/MIRGraph.cpp',
    'jit/MoveResolver.cpp',
    'jit/OptimizationTracking.cpp',
    'jit/PerfSpewer.cpp',
    'jit/RangeAnalysis.cpp',
    'jit/Recover.cpp',
    'jit/RegisterAllocator.cpp',
    'jit/RematerializedFrame.cpp',
    'jit/Safepoints.cpp',
    'jit/ScalarReplacement.cpp',
    'jit/shared/BaselineCompiler-shared.cpp',
    'jit/shared/CodeGenerator-shared.cpp',
    'jit/shared/Lowering-shared.cpp',
    'jit/SharedIC.cpp',
    'jit/Sink.cpp',
    'jit/Snapshots.cpp',
    'jit/StupidAllocator.cpp',
    'jit/TypedObjectPrediction.cpp',
    'jit/TypePolicy.cpp',
    'jit/ValueNumbering.cpp',
    'jit/VMFunctions.cpp',
    'jsalloc.cpp',
    'jsapi.cpp',
    'jsbool.cpp',
    'jscntxt.cpp',
    'jscompartment.cpp',
    'jsdate.cpp',
    'jsdtoa.cpp',
    'jsexn.cpp',
    'jsfriendapi.cpp',
    'jsfun.cpp',
    'jsgc.cpp',
    'jsiter.cpp',
    'jsnativestack.cpp',
    'jsnum.cpp',
    'jsobj.cpp',
    'json.cpp',
    'jsopcode.cpp',
    'jsprf.cpp',
    'jspropertytree.cpp',
    'jsscript.cpp',
    'jsstr.cpp',
    'jswatchpoint.cpp',
    'jsweakmap.cpp',
    'perf/jsperf.cpp',
    'proxy/BaseProxyHandler.cpp',
    'proxy/CrossCompartmentWrapper.cpp',
    'proxy/DeadObjectProxy.cpp',
    'proxy/DirectProxyHandler.cpp',
    'proxy/OpaqueCrossCompartmentWrapper.cpp',
    'proxy/Proxy.cpp',
    'proxy/ScriptedDirectProxyHandler.cpp',
    'proxy/ScriptedIndirectProxyHandler.cpp',
    'proxy/SecurityWrapper.cpp',
    'proxy/Wrapper.cpp',
    'vm/ArgumentsObject.cpp',
    'vm/ArrayBufferObject.cpp',
    'vm/CallNonGenericMethod.cpp',
    'vm/CharacterEncoding.cpp',
    'vm/CodeCoverage.cpp',
    'vm/Compression.cpp',
    'vm/DateTime.cpp',
    'vm/Debugger.cpp',
    'vm/DebuggerMemory.cpp',
    'vm/ErrorObject.cpp',
    'vm/ForOfIterator.cpp',
    'vm/GeneratorObject.cpp',
    'vm/GlobalObject.cpp',
    'vm/HelperThreads.cpp',
    'vm/Id.cpp',
    'vm/Interpreter.cpp',
    'vm/JSONParser.cpp',
    'vm/MemoryMetrics.cpp',
    'vm/Monitor.cpp',
    'vm/NativeObject.cpp',
    'vm/ObjectGroup.cpp',
    'vm/PIC.cpp',
    'vm/Printer.cpp',
    'vm/Probes.cpp',
    'vm/ProxyObject.cpp',
    'vm/ReceiverGuard.cpp',
    'vm/RegExpObject.cpp',
    'vm/RegExpStatics.cpp',
    'vm/Runtime.cpp',
    'vm/SavedStacks.cpp',
    'vm/ScopeObject.cpp',
    'vm/SelfHosting.cpp',
    'vm/Shape.cpp',
    'vm/SharedArrayObject.cpp',
    'vm/SPSProfiler.cpp',
    'vm/Stack.cpp',
    'vm/Stopwatch.cpp',
    'vm/String.cpp',
    'vm/StringBuffer.cpp',
    'vm/StructuredClone.cpp',
    'vm/Symbol.cpp',
    'vm/TaggedProto.cpp',
    'vm/Time.cpp',
    'vm/TypedArrayObject.cpp',
    'vm/TypeInference.cpp',
    'vm/UbiNode.cpp',
    'vm/UbiNodeCensus.cpp',
    'vm/UnboxedObject.cpp',
    'vm/Unicode.cpp',
    'vm/Value.cpp',
    'vm/WeakMapPtr.cpp',
    'vm/Xdr.cpp'
]

# jsarray.cpp and jsatom.cpp cannot be built in unified mode because
# xpcshell is broken during packaging when compiled with gcc-4.8.2
# builtin/RegExp.cpp cannot be built in unified mode because it is built
# without PGO
# frontend/Parser.cpp cannot be built in unified mode because of explicit
# template instantiations.
# jsmath.cpp cannot be built in unified mode because it needs to pull rand_s
# from <stdlib.h> on Windows through a preprocessor define.
# jsutil.cpp cannot be built in unified mode because it is needed for
# check-vanilla-allocations.
# StoreBuffer.cpp cannot be built in unified because its template
# instantiations may or may not be needed depending on what it gets bundled
# with.
SOURCES += [
    'builtin/RegExp.cpp',
    'frontend/Parser.cpp',
    'gc/StoreBuffer.cpp',
    'jsarray.cpp',
    'jsatom.cpp',
    'jsmath.cpp',
    'jsutil.cpp',
    'vm/Initialization.cpp',
]

if CONFIG['JS_POSIX_NSPR']:
    UNIFIED_SOURCES += [
        'vm/PosixNSPR.cpp',
    ]

if CONFIG['MOZ_INSTRUMENTS']:
    SOURCES += [
        'devtools/Instruments.cpp',
    ]

if CONFIG['ENABLE_TRACE_LOGGING']:
    SOURCES += [
        'vm/TraceLogging.cpp',
        'vm/TraceLoggingGraph.cpp',
        'vm/TraceLoggingTypes.cpp',
    ]

if not CONFIG['ENABLE_ION']:
    UNIFIED_SOURCES += [
        'jit/none/Trampoline-none.cpp'
    ]
elif CONFIG['JS_CODEGEN_X86'] or CONFIG['JS_CODEGEN_X64']:
    UNIFIED_SOURCES += [
        'jit/x86-shared/Architecture-x86-shared.cpp',
        'jit/x86-shared/Assembler-x86-shared.cpp',
        'jit/x86-shared/AssemblerBuffer-x86-shared.cpp',
        'jit/x86-shared/BaselineCompiler-x86-shared.cpp',
        'jit/x86-shared/BaselineIC-x86-shared.cpp',
        'jit/x86-shared/CodeGenerator-x86-shared.cpp',
        'jit/x86-shared/Lowering-x86-shared.cpp',
        'jit/x86-shared/MacroAssembler-x86-shared.cpp',
        'jit/x86-shared/MoveEmitter-x86-shared.cpp',
    ]
    SOURCES += [
        'jit/x86-shared/Disassembler-x86-shared.cpp',  # using namespace js::jit::X86Encoding;
    ]
    if CONFIG['JS_CODEGEN_X64']:
        UNIFIED_SOURCES += [
            'jit/x64/Assembler-x64.cpp',
            'jit/x64/Bailouts-x64.cpp',
            'jit/x64/BaselineCompiler-x64.cpp',
            'jit/x64/BaselineIC-x64.cpp',
            'jit/x64/CodeGenerator-x64.cpp',
            'jit/x64/Lowering-x64.cpp',
            'jit/x64/MacroAssembler-x64.cpp',
            'jit/x64/SharedIC-x64.cpp',
            'jit/x64/Trampoline-x64.cpp',
        ]
    else:
        UNIFIED_SOURCES += [
            'jit/x86/Assembler-x86.cpp',
            'jit/x86/Bailouts-x86.cpp',
            'jit/x86/BaselineCompiler-x86.cpp',
            'jit/x86/BaselineIC-x86.cpp',
            'jit/x86/CodeGenerator-x86.cpp',
            'jit/x86/Lowering-x86.cpp',
            'jit/x86/MacroAssembler-x86.cpp',
            'jit/x86/SharedIC-x86.cpp',
            'jit/x86/Trampoline-x86.cpp',
        ]
elif CONFIG['JS_CODEGEN_ARM']:
    UNIFIED_SOURCES += [
        'jit/arm/Architecture-arm.cpp',
        'jit/arm/Assembler-arm.cpp',
        'jit/arm/Bailouts-arm.cpp',
        'jit/arm/BaselineCompiler-arm.cpp',
        'jit/arm/BaselineIC-arm.cpp',
        'jit/arm/CodeGenerator-arm.cpp',
        'jit/arm/disasm/Constants-arm.cpp',
        'jit/arm/disasm/Disasm-arm.cpp',
        'jit/arm/Lowering-arm.cpp',
        'jit/arm/MacroAssembler-arm.cpp',
        'jit/arm/MoveEmitter-arm.cpp',
        'jit/arm/SharedIC-arm.cpp',
        'jit/arm/Trampoline-arm.cpp',
    ]
    if CONFIG['JS_SIMULATOR_ARM']:
        UNIFIED_SOURCES += [
            'jit/arm/Simulator-arm.cpp'
        ]
    elif CONFIG['OS_ARCH'] == 'Darwin':
        SOURCES += [
            'jit/arm/llvm-compiler-rt/arm/aeabi_idivmod.S',
            'jit/arm/llvm-compiler-rt/arm/aeabi_uidivmod.S',
        ]
elif CONFIG['JS_CODEGEN_ARM64']:
    UNIFIED_SOURCES += [
        'jit/arm64/Architecture-arm64.cpp',
        'jit/arm64/Assembler-arm64.cpp',
        'jit/arm64/Bailouts-arm64.cpp',
        'jit/arm64/BaselineIC-arm64.cpp',
        'jit/arm64/CodeGenerator-arm64.cpp',
        'jit/arm64/Lowering-arm64.cpp',
        'jit/arm64/MacroAssembler-arm64.cpp',
        'jit/arm64/MoveEmitter-arm64.cpp',
        'jit/arm64/SharedIC-arm64.cpp',
        'jit/arm64/Trampoline-arm64.cpp',
        'jit/arm64/vixl/Assembler-vixl.cpp',
        'jit/arm64/vixl/Cpu-vixl.cpp',
        'jit/arm64/vixl/Decoder-vixl.cpp',
        'jit/arm64/vixl/Disasm-vixl.cpp',
        'jit/arm64/vixl/Instructions-vixl.cpp',
        'jit/arm64/vixl/Instrument-vixl.cpp',
        'jit/arm64/vixl/MacroAssembler-vixl.cpp',
        'jit/arm64/vixl/MozAssembler-vixl.cpp',
        'jit/arm64/vixl/MozInstructions-vixl.cpp',
        'jit/arm64/vixl/Utils-vixl.cpp'
    ]
    if CONFIG['JS_SIMULATOR_ARM64']:
        UNIFIED_SOURCES += [
            'jit/arm64/vixl/Debugger-vixl.cpp',
            'jit/arm64/vixl/Logic-vixl.cpp',
            'jit/arm64/vixl/MozSimulator-vixl.cpp',
            'jit/arm64/vixl/Simulator-vixl.cpp'
        ]
elif CONFIG['JS_CODEGEN_MIPS32'] or CONFIG['JS_CODEGEN_MIPS64']:
    UNIFIED_SOURCES += [
        'jit/mips-shared/Architecture-mips-shared.cpp',
        'jit/mips-shared/Assembler-mips-shared.cpp',
        'jit/mips-shared/Bailouts-mips-shared.cpp',
        'jit/mips-shared/BaselineCompiler-mips-shared.cpp',
        'jit/mips-shared/BaselineIC-mips-shared.cpp',
        'jit/mips-shared/CodeGenerator-mips-shared.cpp',
        'jit/mips-shared/Lowering-mips-shared.cpp',
        'jit/mips-shared/MacroAssembler-mips-shared.cpp',
        'jit/mips-shared/MoveEmitter-mips-shared.cpp',
    ]
    if CONFIG['JS_CODEGEN_MIPS32']:
        UNIFIED_SOURCES += [
            'jit/mips32/Architecture-mips32.cpp',
            'jit/mips32/Assembler-mips32.cpp',
            'jit/mips32/Bailouts-mips32.cpp',
            'jit/mips32/BaselineCompiler-mips32.cpp',
            'jit/mips32/BaselineIC-mips32.cpp',
            'jit/mips32/CodeGenerator-mips32.cpp',
            'jit/mips32/Lowering-mips32.cpp',
            'jit/mips32/MacroAssembler-mips32.cpp',
            'jit/mips32/MoveEmitter-mips32.cpp',
            'jit/mips32/SharedIC-mips32.cpp',
            'jit/mips32/Trampoline-mips32.cpp',
        ]
        if CONFIG['JS_SIMULATOR_MIPS32']:
            UNIFIED_SOURCES += [
                'jit/mips32/Simulator-mips32.cpp'
            ]
    elif CONFIG['JS_CODEGEN_MIPS64']:
        UNIFIED_SOURCES += [
            'jit/mips64/Architecture-mips64.cpp',
            'jit/mips64/Assembler-mips64.cpp',
            'jit/mips64/Bailouts-mips64.cpp',
            'jit/mips64/BaselineCompiler-mips64.cpp',
            'jit/mips64/BaselineIC-mips64.cpp',
            'jit/mips64/CodeGenerator-mips64.cpp',
            'jit/mips64/Lowering-mips64.cpp',
            'jit/mips64/MacroAssembler-mips64.cpp',
            'jit/mips64/MoveEmitter-mips64.cpp',
            'jit/mips64/SharedIC-mips64.cpp',
            'jit/mips64/Trampoline-mips64.cpp',
        ]
        if CONFIG['JS_SIMULATOR_MIPS64']:
            UNIFIED_SOURCES += [
                'jit/mips64/Simulator-mips64.cpp'
            ]

if CONFIG['OS_ARCH'] == 'WINNT':
    SOURCES += [
        'jit/ExecutableAllocatorWin.cpp',
    ]
    # _CRT_RAND_S must be #defined before #including stdlib.h to get rand_s()
    DEFINES['_CRT_RAND_S'] = True
else:
    SOURCES += [
        'jit/ExecutableAllocatorPosix.cpp',
    ]

if CONFIG['JS_HAS_CTYPES']:
    SOURCES += [
        'ctypes/CTypes.cpp',
        'ctypes/Library.cpp',
    ]
    if not CONFIG['MOZ_NATIVE_FFI']:
        LOCAL_INCLUDES += [
            '!ctypes/libffi/include',
        ]

if CONFIG['MOZ_VTUNE']:
    SOURCES += [
        'vtune/jitprofiling.c'
    ]

if CONFIG['HAVE_LINUX_PERF_EVENT_H']:
    SOURCES += [
        'perf/pm_linux.cpp'
    ]
    SOURCES['perf/pm_linux.cpp'].flags += [CONFIG['LINUX_HEADERS_INCLUDES']]
else:
    SOURCES += [
        'perf/pm_stub.cpp'
    ]

HostSimplePrograms([
    'host_jskwgen',
])

# JavaScript must be built shared, even for static builds, as it is used by
# other modules which are always built shared. Failure to do so results in
# the js code getting copied into xpinstall and jsd as well as mozilla-bin,
# and then the static data cells used for locking no longer work.
#
# In fact, we now build both a static and a shared library, as the
# JS shell would like to link to the static library.

if CONFIG['JS_SHARED_LIBRARY']:
    GeckoSharedLibrary('js', linkage=None)
    SHARED_LIBRARY_NAME = CONFIG['JS_LIBRARY_NAME']
    SDK_LIBRARY = True
else:
    Library('js')

FORCE_STATIC_LIB = True
STATIC_LIBRARY_NAME = 'js_static'

if CONFIG['JS_HAS_CTYPES']:
    USE_LIBS += [
        'ffi',
    ]

if CONFIG['ENABLE_INTL_API']:
    USE_LIBS += [
        'icu',
    ]

USE_LIBS += [
    'nspr',
    'zlib',
]

if CONFIG['MOZ_ETW']:
    GENERATED_FILES = [
        'ETWProvider.h',
    ]
    # This will get the ETW provider resources into the library mozjs.dll
    RESFILE = 'ETWProvider.res'

if CONFIG['NIGHTLY_BUILD']:
    DEFINES['ENABLE_BINARYDATA'] = True
    DEFINES['ENABLE_SHARED_ARRAY_BUFFER'] = True

DEFINES['EXPORT_JS_API'] = True

if CONFIG['JS_HAS_CTYPES']:
    DEFINES['JS_HAS_CTYPES'] = True
    for var in ('DLL_PREFIX', 'DLL_SUFFIX'):
        DEFINES[var] = '"%s"' % CONFIG[var]

if CONFIG['MOZ_LINKER']:
    DEFINES['MOZ_LINKER'] = True

if CONFIG['_MSC_VER']:
    if CONFIG['CPU_ARCH'] == 'x86':
        SOURCES['builtin/RegExp.cpp'].no_pgo = True # Bug 772303
    elif CONFIG['CPU_ARCH'] == 'x86_64' and CONFIG['JS_HAS_CTYPES']:
        SOURCES['ctypes/CTypes.cpp'].no_pgo = True # Bug 810661
    # Prevent floating point errors caused by VC++ optimizations
    # XXX We should add this to CXXFLAGS, too?
    CFLAGS += ['-fp:precise']
    # C4805 warns mixing bool with other integral types in computation.
    # But given the conversion from bool is specified, and this is a
    # pattern widely used in code in js/src, suppress this warning here.
    CXXFLAGS += ['-wd4805']
    # C4661 ("no suitable definition provided for explicit template
    # instantiation request") is emitted for all Parser methods that
    # have a Parser<FullParseHandler> definition but no
    # Parser<SyntaxParseHandler> definition, see bug 1167030.
    CXXFLAGS += ['-wd4661']
    CXXFLAGS += ['-we4067', '-we4258', '-we4275']
    CXXFLAGS += ['-wd4146'] # FIXME: unary minus operator applied to unsigned type (bug 1229189)
    CXXFLAGS += ['-wd4273'] # FIXME: inconsistent dll linkage (bug 1229666)

if CONFIG['OS_ARCH'] not in ('WINNT', 'HP-UX'):
    OS_LIBS += [
        'm',
    ]

if CONFIG['OS_ARCH'] == 'FreeBSD':
    OS_LIBS += [
        '-pthread',
    ]

if CONFIG['OS_ARCH'] == 'Linux':
    OS_LIBS += [
        'dl',
    ]

if CONFIG['OS_ARCH'] == 'SunOS':
    OS_LIBS += [
        'posix4',
        'dl',
        'nsl',
        'socket',
    ]

CFLAGS += CONFIG['MOZ_ICU_CFLAGS']
CXXFLAGS += CONFIG['MOZ_ICU_CFLAGS']
LOCAL_INCLUDES += CONFIG['MOZ_ICU_INCLUDES']

NO_EXPAND_LIBS = True

DIST_INSTALL = True

# Prepare self-hosted JS code for embedding
GENERATED_FILES += ['selfhosted.out.h']
selfhosted = GENERATED_FILES['selfhosted.out.h']
selfhosted.script = 'builtin/embedjs.py:generate_selfhosted'
selfhosted.inputs = [
    'js.msg',
    'builtin/TypedObjectConstants.h',
    'builtin/SelfHostingDefines.h',
    'builtin/Utilities.js',
    'builtin/Array.js',
    'builtin/Date.js',
    'builtin/Error.js',
    'builtin/Generator.js',
    'builtin/Intl.js',
    'builtin/IntlData.js',
    'builtin/Iterator.js',
    'builtin/Map.js',
    'builtin/Module.js',
    'builtin/Number.js',
    'builtin/Object.js',
    'builtin/Reflect.js',
    'builtin/RegExp.js',
    'builtin/String.js',
    'builtin/Set.js',
    'builtin/TypedArray.js',
    'builtin/TypedObject.js',
    'builtin/WeakSet.js'
]

if CONFIG['JS_HAS_CTYPES']:
    if CONFIG['MOZ_NATIVE_FFI']:
        CXXFLAGS += CONFIG['MOZ_FFI_CFLAGS']
    else:
        # Windows needs this to be linked with a static library.
        DEFINES['FFI_BUILDING'] = True
