yocto: Use tools from sysroot before system PATH
authorPhilippe Coval <philippe.coval@osg.samsung.com>
Fri, 16 Sep 2016 18:22:03 +0000 (20:22 +0200)
committerUze Choi <uzchoi@samsung.com>
Tue, 20 Sep 2016 11:15:56 +0000 (11:15 +0000)
To ensure reproductibily Scons avoids to rely on environment
 but some systems like Yocto are defining their own cross compiling env.

To deal with those orthogonal paradigms,
 a new CONFIG_ENVIRONMENT_IMPORT variable has been introduced,
 It enables import of needed variables (PATH and pkg-config's ones).

Without this change, system tools might be used by scons
 instead of looking into yocto's sysroot.
 This is not not wanted and may be less reproductible.

This problem was noticed when building Ostro OS
 (on a system without all Yocto dependencies)
 reported error messages were:

  | sh: gdbus-codegen: command not found
  | /bin/sh: 1: pkg-config: not found

More information about using SCONS along Yocto, check some notes at:

https://bitbucket.org/scons/scons/wiki/Notes

Bug: https://jira.iotivity.org/browse/IOT-1219
Change-Id: I6af59a590f8be489398623d29cf85c2f568dd6a3
Origin: https://github.com/TizenTeam/iotivity/tree/sandbox/pcoval/on/master/mine
Thanks-to: Mikko Ylinen <mikko.ylinen@intel.com>
Signed-off-by: Philippe Coval <philippe.coval@osg.samsung.com>
Reviewed-on: https://gerrit.iotivity.org/gerrit/11935
Tested-by: jenkins-iotivity <jenkins-iotivity@opendaylight.org>
Reviewed-by: Uze Choi <uzchoi@samsung.com>
build_common/SConscript

index dd4a3a6..168342a 100644 (file)
@@ -187,13 +187,19 @@ if target_os in targets_support_cc:
        if prefix or tc_path:
                print tc_set_msg
 
-# If cross-compiling, honor environment settings for toolchain to avoid picking up native tools
-if os.environ.get('PKG_CONFIG') != None:
-       env["ENV"]["PKG_CONFIG"] = os.environ.get("PKG_CONFIG")
-if os.environ.get('PKG_CONFIG_PATH') != None:
-       env["ENV"]["PKG_CONFIG_PATH"] = os.environ.get("PKG_CONFIG_PATH")
-if os.environ.get('PKG_CONFIG_SYSROOT_DIR') != None:
-       env["ENV"]["PKG_CONFIG_SYSROOT_DIR"] = os.environ.get("PKG_CONFIG_SYSROOT_DIR")
+# Import env variables only if reproductibility is ensured
+if target_os in ['yocto']:
+    env['CONFIG_ENVIRONMENT_IMPORT'] = True
+else:
+    env['CONFIG_ENVIRONMENT_IMPORT'] = False
+
+if env['CONFIG_ENVIRONMENT_IMPORT'] == True:
+    print "warning: importing some environment variables for OS: %s" % target_os
+    for ev in ['PATH', 'PKG_CONFIG', 'PKG_CONFIG_PATH', 'PKG_CONFIG_SYSROOT_DIR']:
+        if os.environ.get(ev) != None:
+            env['ENV'][ev] = os.environ.get(ev)
+    if os.environ['LDFLAGS'] != None:
+        env.AppendUnique(LINKFLAGS = Split(os.environ['LDFLAGS']))
 
 # Ensure scons be able to change its working directory
 env.SConscriptChdir(1)
@@ -375,8 +381,6 @@ if target_os == "yocto":
                         env[tool] = os.path.join(path, os.environ[tool])
                         break
         env['CROSS_COMPILE'] = target_prefix[:len(target_prefix) - 1]
-        if os.environ['LDFLAGS'] != None:
-            env.AppendUnique(LINKFLAGS = Split(os.environ['LDFLAGS']))
     except:
         print "ERROR in Yocto cross-toolchain environment"
         Exit(1)