# Copyright (c) 2008 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

Import('env')

env = env.Clone(
)

if env['OS'] == 'osx':
  env.Append(
        CPPDEFINES = [
          'JS_THREADSAFE',
          'XP_UNIX',
          'DARWIN',
          'HAVE_BSD_FLOCK',
          'XP_MACOSX',
          'HAVE_LCHOWN',
          'HAVE_STRERROR',
          'FORCE_PR_LOG',
          '_PR_PTHREADS',
          'UHAVE_CVAR_BUILT_ON_SEM',
          '_NSPR_BUILD_',
          'OSARCH=Darwin',
          'STATIC_JS_API',
          'JS_USE_SAFE_ARENA',
          'TRIMMED',
          'JS_HAS_EXPORT_IMPORT'
        ],
        CPPPATH = '$MOZJS_INCLUDE_PATHS',
  )
elif env['OS'] == 'android':
  env.Append(
        CPPDEFINES = [
          'JS_THREADSAFE',
          'XP_UNIX',
          'HAVE_STRERROR',
          'FORCE_PR_LOG',
          '_PR_PTHREADS',
          'UHAVE_CVAR_BUILT_ON_SEM',
          '_NSPR_BUILD_',
          'OSARCH=Android',
          'STATIC_JS_API',
          'JS_USE_SAFE_ARENA',
          'TRIMMED',
          'JS_HAS_EXPORT_IMPORT',
        ],
        CPPPATH = '$MOZJS_INCLUDE_PATHS',
  )

input_files = [
    # Common Files
    '$MOZJS_DIR/js/src/jsapi.c', 
    '$MOZJS_DIR/js/src/jsarena.c', 
    '$MOZJS_DIR/js/src/jsarray.c', 
    '$MOZJS_DIR/js/src/jsatom.c', 
    '$MOZJS_DIR/js/src/jsbool.c', 
    '$MOZJS_DIR/js/src/jscntxt.c', 
    '$MOZJS_DIR/js/src/jsdate.c', 
    '$MOZJS_DIR/js/src/jsdbgapi.c', 
    '$MOZJS_DIR/js/src/jsdhash.c', 
    '$MOZJS_DIR/js/src/jsdtoa.c', 
    '$MOZJS_DIR/js/src/jsemit.c', 
    '$MOZJS_DIR/js/src/jsexn.c', 
    '$MOZJS_DIR/js/src/jsfun.c', 
    '$MOZJS_DIR/js/src/jsgc.c', 
    '$MOZJS_DIR/js/src/jshash.c', 
    '$MOZJS_DIR/js/src/jsinterp.c', 
    '$MOZJS_DIR/js/src/jsinvoke.c', 
    '$MOZJS_DIR/js/src/jsiter.c', 
    '$MOZJS_DIR/js/src/jskwgen.c', 
    '$MOZJS_DIR/js/src/jslock.c', 
    '$MOZJS_DIR/js/src/jslog2.c', 
    '$MOZJS_DIR/js/src/jslong.c', 
    '$MOZJS_DIR/js/src/jsmath.c', 
    '$MOZJS_DIR/js/src/jsnum.c', 
    '$MOZJS_DIR/js/src/jsobj.c', 
    '$MOZJS_DIR/js/src/jsopcode.c', 
    '$MOZJS_DIR/js/src/jsparse.c', 
    '$MOZJS_DIR/js/src/jsprf.c', 
    '$MOZJS_DIR/js/src/jsregexp.c', 
    '$MOZJS_DIR/js/src/jsscan.c', 
    '$MOZJS_DIR/js/src/jsscope.c', 
    '$MOZJS_DIR/js/src/jsscript.c', 
    '$MOZJS_DIR/js/src/jsstr.c', 
    '$MOZJS_DIR/js/src/jsutil.c', 
    '$MOZJS_DIR/js/src/jsxdrapi.c', 
    '$MOZJS_DIR/js/src/jsxml.c', 
    '$MOZJS_DIR/xpcom/glue/pldhash.c', 
    '$MOZJS_DIR/nspr/pr/src/misc/pratom.c', 
    '$MOZJS_DIR/nspr/pr/src/threads/prcmon.c', 
    '$MOZJS_DIR/nspr/pr/src/misc/prdtoa.c', 
    '$MOZJS_DIR/nspr/pr/src/misc/prenv.c', 
    '$MOZJS_DIR/nspr/pr/src/misc/prerr.c', 
    '$MOZJS_DIR/nspr/pr/src/misc/prerror.c', 
    '$MOZJS_DIR/nspr/pr/src/misc/prerrortable.c', 
    '$MOZJS_DIR/nspr/pr/src/io/prfdcach.c', 
    '$MOZJS_DIR/nspr/pr/src/misc/prinit.c', 
    '$MOZJS_DIR/nspr/pr/src/misc/prinrval.c', 
    '$MOZJS_DIR/nspr/pr/src/io/priometh.c', 
    '$MOZJS_DIR/nspr/pr/src/io/pripv6.c', 
    '$MOZJS_DIR/nspr/pr/src/io/prlayer.c', 
    '$MOZJS_DIR/nspr/pr/src/linking/prlink.c', 
    '$MOZJS_DIR/nspr/pr/src/io/prlog.c', 
    '$MOZJS_DIR/nspr/pr/src/malloc/prmalloc.c', 
    '$MOZJS_DIR/nspr/pr/src/io/prmapopt.c', 
    '$MOZJS_DIR/nspr/pr/src/malloc/prmem.c', 
    '$MOZJS_DIR/js/src/prmjtime.c', 
    '$MOZJS_DIR/nspr/pr/src/io/prmmap.c', 
    '$MOZJS_DIR/nspr/pr/src/io/prmwait.c', 
    '$MOZJS_DIR/nspr/pr/src/misc/prnetdb.c', 
    '$MOZJS_DIR/nspr/pr/src/md/prosdep.c', 
    '$MOZJS_DIR/nspr/pr/src/io/prprf.c', 
    '$MOZJS_DIR/nspr/pr/src/threads/prrwlock.c', 
    '$MOZJS_DIR/nspr/pr/src/io/prscanf.c', 
    '$MOZJS_DIR/nspr/pr/src/memory/prseg.c', 
    '$MOZJS_DIR/nspr/pr/src/io/prstdio.c', 
    '$MOZJS_DIR/nspr/pr/src/misc/prtime.c', 
    '$MOZJS_DIR/nspr/pr/src/threads/prtpd.c', 
    '$MOZJS_DIR/nspr/pr/src/pthreads/ptio.c', 
    '$MOZJS_DIR/nspr/pr/src/pthreads/ptmisc.c', 
    '$MOZJS_DIR/nspr/pr/src/pthreads/ptsynch.c', 
    '$MOZJS_DIR/nspr/pr/src/pthreads/ptthread.c',
    '$MOZJS_DIR/nspr/pr/src/md/unix/unix.c', 
    '$MOZJS_DIR/nspr/pr/src/md/unix/unix_errors.c', 
    '$MOZJS_DIR/nspr/pr/src/md/unix/uxproces.c',
]

if env['OS'] == 'osx':
  # Safari-specific SpiderMonkey files.
  input_files += [
      '$MOZJS_DIR/nspr/pr/src/md/unix/darwin.c',
      '$MOZJS_DIR/nspr/pr/src/md/unix/os_Darwin_ppc.s',
      '$MOZJS_DIR/nspr/pr/src/md/unix/os_Darwin_x86.s',
  ]
elif env['OS'] == 'android':
  # Files needed for Android builds.
  input_files += [
      '$MOZJS_DIR/nspr/pr/src/md/unix/linux.c',
      '$MOZJS_DIR/nspr/pr/src/misc/prlog2.c',
  ]

env.GearsStaticLibrary('mozjs-gears', input_files)
