Abstract
Software developers rely on a build system to compile their source code changes and produce deliverables for testing and deployment. Since the full build of large software systems can take hours, the incremental build is a cornerstone of modern build systems. Incremental builds should only recompile deliverables whose dependencies have been changed by a developer. However, in many organizations, such dependencies still are identified by build rules that are specified and maintained (mostly) manually, typically using technologies like make. Incomplete rules lead to unspecified dependencies that can prevent certain deliverables from being rebuilt, yielding incomplete results, which leave sources and deliverables out-of-sync. In this paper, we present a case study on unspecified dependencies in the make-based build systems of the glib, openldap, linux and qt open source projects. To uncover unspecified dependencies in make-based build systems, we use an approach that combines a conceptual model of the dependencies specified in the build system with a concrete model of the files and processes that are actually exercised during the build. Our approach provides an overview of the dependencies that are used throughout the build system and reveals unspecified dependencies that are not yet expressed in the build system rules. During our analysis, we find that unspecified dependencies are common. We identify 6 common causes in more than 1.2 million unspecified dependencies.
Similar content being viewed by others
Notes
References
Adams B, Tromp H, De Schutter K, De Meuter W (2007) Design recovery and maintenance of build systems. In: IEEE international conference on software maintenance (ICSM), pp 114–123
Adams B, De Schutter K, Tromp H, De Meuter W (2008) The evolution of the linux build system. Electronic Communications of the EASST 8
Banerjee M, Capozzoli M, McSweeney L, Sinha D (1999) Beyond kappa: a review of interrater agreement measures. Can J Stat 27(1):3–23. doi:10.2307/3315487
Chastain ME (1999) Re: corrupt modversions.h built in 2.2.13. https://lkml.org/lkml/1999/10/22/172, [Online; accessed December 21, 2016]
Coetzee D, Bhaskar A, Necula G (2011) apmake: A reliable parallel build manager. In: 2011 USENIX Annual Technical Conference (USENIX)
Feldman SI (1979) Make – a program for maintaining computer programs. Softw Pract Experience 9(4):255–265
Germaschewski K (2002) fixdep.c Source Code. https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/tree/scripts/basic/fixdep.c?id=refs/tags/v3.2.71 [Online; accessed December 21, 2016]
Google (2015a) Bazel. http://www.bazel.io/, [Online; accessed December 21, 2016]
Google (2015b) Bazel: Concepts and terminology. http://www.bazel.io/docs/build-ref.html#actual_and_declared_dependencies [Online; accessed December 21, 2016]
Gunter CA (2000) Abstracting dependencies between software configuration items. ACM Trans Softw Eng Methodol 9(1):94–131
Hassan A, Zhang K (2006) Using decision trees to predict the certification result of a build. In: 21st IEEE/ACM International Conference on Automated Software Engineering (ASE), pp 189–198
Hoyt B (2009) Fabricate - the better build tool. https://code.google.com/archive/p/fabricate/, [Online; accessed December 21, 2016]
Jørgensen N (2002) Safeness of make-based incremental recompilation, vol 2391. Springer, Berlin Heidelberg, pp 126–145
Leslie B (2008) Memoize: a build tool framework. http://benno.id.au/blog/2008/06/06/memoize-build-framework http://benno.id.au/blog/2008/06/06/memoize-build-framework, [Online; accessed December 21, 2016]
McIntosh S, Adams B, Nguyen TH, Kamei Y, Hassan AE (2011) An empirical study of build maintenance effort. In: Proceedings of the 33rd international conference on software engineering (ICSE). ACM, New York, pp 141–150
McIntosh S, Adams B, Nagappan M, Hassan A (2014a) Mining co-change information to understand when build changes are necessary. In: IEEE International Conference on Software Maintenance and Evolution (ICSME), pp 241–250
McIntosh S, Nagappan M, Adams B, Mockus A, Hassan A (2014b) A large-scale empirical study of the relationship between build technology and build maintenance. Empir Softw Eng pp 1–47
Miller P (1998) Recursive make considered harmful. AUUGN Journal of AUUG Inc 19(1):14–25
Nadi S, Holt R (2011) Make it or break it: Mining anomalies from linux kbuild. In: 18th Working Conference on Reverse Engineering (WCRE), pp 315–324
Nadi S, Holt R (2012) Mining kbuild to detect variability anomalies in linux. In: 16th European Conference on Software Maintenance and Reengineering (CSMR), pp 107–116
Neitsch A, Wong K, Godfrey M (2012) Build system issues in multilanguage software. In: 28th IEEE International Conference on Software Maintenance (ICSM), pp 140–149
OCaml Community (2013) Dependencies are missing in makefiles - MantisBT. http://caml.inria.fr/mantis/view.php?id=4243, [Online; accessed December 21, 2016]
Qt Wiki (2015) Qt-Version-Compatibility. https://wiki.qt.io/Qt-Version-Compatibility#Binary_Compatibility_Guidelines, [Online; accessed December 21, 2016]
Seo H, Sadowski C, Elbaum S, Aftandilian E, Bowdidge R (2014) Programmers’ Build errors: A case study (at google). In: Proceedings of the 36th international conference on software engineering (ICSE). ACM, New York, pp 724–734
Tamrawi A, Nguyen HA, Nguyen HV, Nguyen T (2012) Build code analysis with symbolic evaluation. In: 34th International Conference on Software Engineering (ICSE), pp 650–660
Tarski A (1941) On the calculus of relations. J Symb Log 6(3):73–89
Tu Q, Godfrey MW (2001) The build-time software architecture view. In: Proceedings of the IEEE International Conference on Software Maintenance (ICSM), IEEE Computer Society, Washington, DC, USA, pp 398–
Xia X, Lo D, Wang X, Zhou B (2014) Build system analysis with link prediction. In: Proceedings of the 29th annual ACM symposium on applied computing (SAC). ACM, New York, pp 1184–1186
Yamada M (2015) [PATCH v2] ARM: add boot image dependencies to not generate invalid images. https://groups.google.com/forum/?fromgroups#!topic/fa.linux.kernel/00v6OF3KaSM, [Online; accessed December 21, 2016]
Zhou B, Xia X, Lo D, Wang X (2014) Build predictor: More accurate missed dependency prediction in build configuration files. In: IEEE 38th Annual Computer Software and Applications Conference (COMPSAC), pp 53–58
Author information
Authors and Affiliations
Corresponding author
Additional information
Communicated by: Andrea De Lucia
Rights and permissions
About this article
Cite this article
Bezemer, CP., McIntosh, S., Adams, B. et al. An empirical study of unspecified dependencies in make-based build systems. Empir Software Eng 22, 3117–3148 (2017). https://doi.org/10.1007/s10664-017-9510-8
Published:
Issue Date:
DOI: https://doi.org/10.1007/s10664-017-9510-8