*.waf_files are used to represent all files participating in the build plus their uber file and visual studio filter.
Those files are written in JSON (http://en.wikipedia.org/wiki/JSON) and use a nested data structure.
{
"NoUberFile":
{
"Root" :
[
"Source0.cpp",
"Source1.cpp",
"Source0.h",
"Source1.h"
],
"VisualStudioFilter_0" :
[
"Source2.cpp",
"Source3.cpp",
"Source2.h",
"Source3.h"
]
},
"UberFile_0.cpp" :
{
"VisualStudioFilter_0" :
[
"Source4.cpp",
"Source5.cpp",
"Source5.h"
],
"VisualStudioFilter_1" :
[
"Source4.h"
]
},
"UberFile_1.cpp" :
{
"Root" :
[
"Source6.cpp",
"Source6.h"
]
}
}
The outer data structure is a dictionary representing the name of the UberFile. Each UberFile can only be used once in a module.
The special name "NoUberFile" can be used if the file should not use UbeFiles.
The next level are the Visual Studio Project Filter. While each filter is only allows one entry per UberFile, it is allows to use the same filter in multiple UberFiles.
WAF will merge those into the same filter when the Visual Studio Project is generated.
The special name "Root" can be used to place files directly under the project without any filter.
The inner list represent all files which should participate in the build. A single source file is only allow be be used once.