View metadata, citation and similar papers at core.ac.uk brought to you by CORE provided by Apollo Detecting Incorrect Build Rules Nandor´ Licker, Andrew Rice Department of Computer Science and Technology University of Cambridge Cambridge, UK fnl364,
[email protected] Abstract—Automated build systems are routinely used by graphs. Instead of manually specifying arguments to compiler software engineers to minimize the number of objects that need invocations in the macro languages of tools like GNU Make to be recompiled after incremental changes to the source files of [1] or Ninja [2], developers provide brief definitions to build a project. In order to achieve efficient and correct builds, devel- opers must provide the build tools with dependency information file generators such as CMake [3], Autotools [4], and SCons between the files and modules of a project, usually expressed in [5], describing the high-level structure of a project. Build files a macro language specific to each build tool. Most build systems are generated out of these definitions, along with dependency offer good support for well-known languages and compilers, but information extracted by partially parsing the source code as projects grow larger, engineers tend to include source files of languages known to the build system generator. Such generated using custom tools. In order to guarantee correctness, the authors of these tools are responsible for enumerating all generators also permit the integration of custom tools, but the files whose contents an output depends on. Unfortunately, require developers to manually enumerate dependencies. this is a tedious process and not all dependencies are captured When engineers write build definitions manually or integrate in practice, which leads to incorrect builds.