1. Fake tree structure ~~~~~~~~~~~~~~~~~~~~~~ The main purpose of scconfig is to detect system specific settings and store them in a comfortable way for later processing. Each setting has a unique name and a value. The storage mimics standard UNIX file systems to some extents: names of the settings are like file names and "file content" is the actual data associated with the setting. This allows scconfig to organize settings in a tree, where "directory" names are separated by dashes. However, this is not a true tree storage, rather a list of hash tables. Each toplevel directory has its own hash table that stores all further subdirectories and files. The root directory is /. There is no setting stored outside of this tree structure. Thus a unique setting name /arg/fstools/cp (path) is split up to "/arg/" (top level directory; list lookup to get a top level dir hash) and "fstools/cp" (filename; looked up as string in the top level dir hash). A special feature is linking top level directories so that "/foo/" and "/bar/" would point to the same hash table. This means accessing names under any of the linked top level directories would result in addressing the same node. This feature is used when the host system is the target system to ensure that /host/ is the same as /target/ without the hassle of duplicating data and maintaining sync. There is a "CWD" defined, if a path doesn't start with slash, it is appended to CWD and the resulting path will be used as the full path. CWD must start with slash but may contain more than one slashes. 2. Conventions ~~~~~~~~~~~~~~ A specific feature is most commonly a subtree with leaf nodes under it. Conventions exist for naming such leaf nodes: presents the "present string": "true" if the feautre is found, else "false" includes a list of #define and #include directives required cflags a list of CFLAGS required, not including standard flags for the platform ldflags a list of LDFLAGS required, not including standard flags for the platform