build: Scan for JSON sources to convert to CBOR 77/21077/6
authorPhilippe Coval <philippe.coval@osg.samsung.com>
Tue, 13 Jun 2017 09:27:57 +0000 (11:27 +0200)
committerDan Mihai <Daniel.Mihai@microsoft.com>
Sat, 1 Jul 2017 01:18:15 +0000 (01:18 +0000)
At build time, CBOR files (.dat) .dat files are generated from sources (.json)
using generated json2cbor tool.

But in a crosscompiling environment (ie: yocto) binary can not be used,
so in that specific case previously generated files are just copied from
sources tree.

It is developer's duty to keep JSON and CBOR aligned,
differences will be spotted after build using git status
(because .dat are not ignored anymore).

Also an implicit dependency has been added to json2cbor executable.

Bug: https://jira.iotivity.org/browse/IOT-2310
Change-Id: I77ddac04b83dbb0d6050113bc0cfc50df90c5e38
Origin: https://gerrit.iotivity.org/gerrit/#/c/20655/
Signed-off-by: Philippe Coval <philippe.coval@osg.samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/21077
Tested-by: jenkins-iotivity <jenkins@iotivity.org>
Reviewed-by: Dan Mihai <Daniel.Mihai@microsoft.com>
.gitignore
build_common/SConscript
resource/examples/SConscript

index 3976da4..9c4f9fd 100644 (file)
@@ -128,9 +128,6 @@ extlibs/yaml/yaml
 # Ignore Valgrind generated files.
 *.memcheck
 
-# Ignore  generated files
-*.dat
-
 # Ignore generated documentation files
 docs/c-doc/docs/
 docs/c-doc/doxygen.log
index 36ad957..5677b51 100755 (executable)
@@ -5,6 +5,7 @@
 ##
 import os
 import platform
+import re
 
 project_version = '1.3.0'
 
@@ -837,11 +838,11 @@ env = conf.Finish()
 ######################################################################
 # Generate Cbor from json files
 ######################################################################
-json2cbor = env.get('BUILD_DIR') + 'resource/csdk/security/tool/json2cbor'
+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" % (str(json2cbor), source[0], target[0])
+    Depends(target, json2cbor)
+    return " %s %s %s" % (json2cbor, source[0], target[0])
 
 builder = Builder(generator = generate_actions,
                   suffix = '.dat',
@@ -849,6 +850,29 @@ builder = Builder(generator = generate_actions,
 
 env.Append(BUILDERS = {'Cbor' : builder})
 
+
+def ScanJSON(env, directory):
+    actions = []
+    if 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
+            Copy(dst, src)
+        actions += cbor_file
+    return actions
+
+AddMethod(env, ScanJSON)
+
 ######################################################################
 env.SConscript('external_libs.scons')
 Return('env')
index 4cf6ac0..696c223 100644 (file)
@@ -136,11 +136,7 @@ examples = map(make_single_file_cpp_program, example_names)
 # Other examples
 ######################################################################
 
-if examples_env.get('SECURED') == '1':
-    svr_db_build_dir = examples_env.get('BUILD_DIR') +'/resource/examples/'
-    for json_file in Glob('*.json'):
-        examples += examples_env.Install(svr_db_build_dir, str(json_file))
-        examples += examples_env.Cbor(json_file)
+examples += examples_env.ScanJSON('resource/examples')
 
 if target_os in ['msys_nt', 'windows']:
     winUIClient = examples_env.Program(