Merge branch '1.3-rel' (1a2c9ee2)
[iotivity.git] / build_common / SConscript
index 58c9f82..1e1a704 100755 (executable)
@@ -5,6 +5,7 @@
 ##
 import os
 import platform
+import re
 
 project_version = '1.3.0'
 
@@ -179,7 +180,6 @@ if target_os in targets_without_dtls_support:
                      '0',
                      allowed_values=('0', '1')))
 else:
-
     help_vars.Add(
         EnumVariable('SECURED',
                      'Build with DTLS',
@@ -409,6 +409,11 @@ if env['CONFIG_ENVIRONMENT_IMPORT'] == True:
     if os.environ['LDFLAGS'] != None:
         env.AppendUnique(LINKFLAGS=Split(os.environ['LDFLAGS']))
 
+if target_os in ['windows']:
+    # UnpackAll.py needs access to system PATH components that SCons
+    # does not include by default - e.g., the path to 7z.exe.
+    env.AppendUnique(PATH=os.environ['PATH'])
+
 # Ensure scons is able to change its working directory
 env.SConscriptChdir(1)
 
@@ -719,7 +724,7 @@ if ('PUB' in with_mq):
 if ('BROKER' in with_mq):
     env.AppendUnique(CPPDEFINES=['MQ_BROKER', 'WITH_MQ'])
 
-env.AppendUnique(CPPDEFINES = {'OC_LOG_LEVEL' : env.get('LOG_LEVEL')})
+env.AppendUnique(CPPDEFINES={'OC_LOG_LEVEL': env.get('LOG_LEVEL')})
 
 if env.get('LOGGING'):
     env.AppendUnique(CPPDEFINES=['TB_LOG'])
@@ -828,14 +833,47 @@ conf = Configure(
 # threading and mutexes.  This will set the environment variable
 # POSIX_SUPPORTED, 1 if it is supported, 0 otherwise
 conf.CheckPThreadsSupport()
-
 env = conf.Finish()
+
+######################################################################
+# Generate Cbor from json files
 ######################################################################
+json2cbor = env.get('BUILD_DIR') + 'resource/csdk/security/tool/json2cbor' + env.get('PROGSUFFIX')
+
+def generate_actions(source, target, env, for_signature):
+    Depends(target, json2cbor)
+    return " %s %s %s" % (json2cbor, source[0], target[0])
+
+builder = Builder(generator = generate_actions,
+                  suffix = '.dat',
+                  src_suffix = '.json')
+
+env.Append(BUILDERS = {'Cbor' : builder})
+
+
+def ScanJSON(env, directory):
+    actions = []
+    if env.GetOption('clean') or env.get('SECURED') != '1':
+        return actions
+    dst_dir = env.get('BUILD_DIR') + '/' + directory + '/'
+    src_dir = env.get('SRC_DIR') + '/' + directory + '/'
+    for json_file in Glob('*.json'):
+        actions += env.Install(dst_dir, str(json_file))
+        if env.get('CROSS_COMPILE') != None:
+            cbor_file = src_dir + re.sub('\.json$', '.dat', str(json_file))
+            Install(dst_dir, cbor_file)
+        else:
+            cbor_file = env.Cbor(json_file)
+            cbor_file = Flatten(cbor_file)[0].name
+            src = dst_dir + cbor_file
+            dst = src_dir + cbor_file
+            Command(dst, src, Copy("$TARGET", "$SOURCE"))
+        actions += cbor_file
+    return actions
 
-# must call external_builders.scons second time to properly setup
-# UnpackAll builder this is due to the system path not being pulled
-# in for windows till after the windows target has run.
-env.SConscript('external_builders.scons')
+AddMethod(env, ScanJSON)
+
+######################################################################
 env.SConscript('external_libs.scons')
 
 Return('env')