host and target ~~~~~~~~~~~~~~~ Scconfig supports crosscompiling by separaating tests done for the host platform and for the target platform. The host platform is the one that hosts compilation while the target platform is where the final binaries produced by the project embedding scconfig will run. The property tree is divided up to root directories. One such directory is /host/ and another is /target/. If scconfig is not running in cross mode so target is the same as host, then /target/ is a symlink to /host/. In any case, there are tests done for the host system first. These are the tests needed for the compile infrastructure of the project to work. For example if the project needs to compile tools that are used during compilation, these tools will run on the host computer, whatever the target computer is. Any utility (including the compiler) that is needed to get those tools compiled and run must be detected for the host. Scconfig will first run tests for the host system (calling user provided callback hook_detect_host()) and then tests for the target system (using hook_detect_target()). When working for the target system, scconfig will use the specified emulator to run the test programs or if no emulator is available it will simply assume the test programs worked if they compiled. If the host system is the target system, some tests may overlap. For example for the local tools cc/cc is needed on the host and for the final compilation cc/cc is needed for the target. In short, this means both /host/cc/cc and /target/cc/cc are needed. If scconfig is running in non-cross mode, that means /target is linked to /host, thus the two cc/cc nodes are the same. When cc/cc detection for host runs, it will find the C compiler and will store it in the tree and next when the same test would run for target, the result is already there so the test is skipped. This way overlapping requirements on host and target systems won't result in duplicate tests in case we are not doing cross compilation.