# Copyright AllSeen Alliance. All rights reserved.
#
#    Permission to use, copy, modify, and/or distribute this software for any
#    purpose with or without fee is hereby granted, provided that the above
#    copyright notice and this permission notice appear in all copies.
#
#    THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
#    WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
#    MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
#    ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
#    WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
#    ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
#    OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
# 

import os
import sys

Import('env')

# Dependent Projects
if not env.has_key('_ALLJOYNCORE_'):
    env.SConscript('../alljoyn_core/SConscript')

# Indicate that this SConscript file has been loaded already
env['_ALLJOYN_JAVA_'] = True

env['OBJDIR_ALLJOYN_JAVA'] = env['OBJDIR'] + '/alljoyn_java'

javaenv = env.Clone()

vars = Variables();

vars.Add(EnumVariable('JAVAVERSION', '''The version of Java pointed to by the JAVA_HOME
    environment variable. This is not used to select one version of
    the Java comiler vs. another.''', '1.6', allowed_values=('1.5', '1.6')))

vars.Update(javaenv)

Help(vars.GenerateHelpText(javaenv))


# Java requires a couple of header files in alljoyn_core/src
javaenv.Append(CPPPATH = [javaenv.Dir('../alljoyn_core/src').srcnode()])

# If files use UTF-8 encoded string then the encodeing must be specified as UTF-8
# Unit tests for the About Feature use UTF-8 encoded string for localized values
javaenv.Append(JAVACFLAGS = ['-encoding', 'UTF-8'])

sys.path.append(str(javaenv.Dir('../build_core/tools/scons').srcnode()))
from configurejni import ConfigureJNI

if not ConfigureJNI(javaenv):
    if not GetOption('help'):
        Exit(1)


classpath = os.environ.get('CLASSPATH')
if not classpath:
    if javaenv['OS'] == 'linux' and os.path.exists('/usr/share/java/junit4.jar'):
        classpath = '/usr/share/java/junit4.jar'
    else:
        print "CLASSPATH not set"
        if not GetOption('help'):
            Exit(1)

# Set JAVACLASSPATH to contents of CLASSPATH env variable
javaenv.AppendENVPath("JAVACLASSPATH", classpath)
javaenv['JAVACLASSPATH'] = javaenv['ENV']['JAVACLASSPATH']


# Make alljoyn_java dist a sub-directory of the alljoyn dist.  This avoids any conflicts with alljoyn dist targets.
javaenv['JAVA_DISTDIR'] = javaenv['DISTDIR'] + '/java'
javaenv['JAVA_TESTDIR'] = javaenv['TESTDIR'] + '/java'

# Tell dependent dirs where to stick classes
javaenv.Append(CLASSDIR='$OBJDIR_ALLJOYN_JAVA/classes')

# Tell dependent dirs where jar files are located. ("#" doesn't work here for some reason)
javaenv.Append(JARDIR='$JAVA_DISTDIR/jar')

# Add support for mulitiple build targets in the same workset
javaenv.VariantDir('$OBJDIR_ALLJOYN_JAVA', '.', duplicate = 0)


# AllJoyn Java binding
alljoyn_jar = javaenv.SConscript('src/SConscript', exports = {'env':javaenv})

# AllJoyn JNI library
libs = javaenv.SConscript('$OBJDIR_ALLJOYN_JAVA/jni/SConscript', exports = {'env':javaenv})
javaenv.Install('$JAVA_DISTDIR/lib', libs)
# Also install a copy of liballjoyn_java, and junit.jar, alljoyn.jar into 
# the bin folder so it can be found by the alljoyn_java eclipse project 
javaenv.Install('bin/libs', libs)
javaenv.Install('bin/jar', alljoyn_jar)

# Always build Java version of the AboutService
about_env = javaenv.Clone()
about_env['OBJDIR_ABOUT'] = env['OBJDIR'] + '/about'
about_env.VariantDir('$OBJDIR/services/about/java', '../services/about/java', duplicate = 0)
about_env.SConscript('$OBJDIR/services/about/java/SConscript', exports = ['about_env'])

# Always build Java version of the ConfigService
config_env = javaenv.Clone()
config_env['OBJDIR_ABOUT'] = env['OBJDIR'] + '/config'
config_env.VariantDir('$OBJDIR/services/config/java', '../services/config/java', duplicate = 0)
config_env.SConscript('$OBJDIR/services/config/java/SConscript', exports = ['config_env'])

# AllJoyn Java binding tests
javaenv.SConscript('test/SConscript', exports = {'env':javaenv})

# AllJoyn Java binding docs
javaenv['PROJECT_SHORT_NAME'] = 'AllJoyn&trade; Java API<br/>Reference Manual'
javaenv['PROJECT_LONG_NAME'] = 'AllJoyn&trade; Java API Reference Manual'
javaenv['PROJECT_NUMBER'] = 'Version 16.04.00'
javaenv.JavaDoc('$JAVA_DISTDIR/docs/html', ['src', '../services/about/java/src'], JAVACLASSPATH=javaenv.subst('$JAVACLASSPATH'))

# AllJoyn samples
javaenv.SConscript('samples/SConscript', exports = {'env':javaenv})
