Skip to main content
Log in

An empirical study of unspecified dependencies in make-based build systems

  • Published:
Empirical Software Engineering Aims and scope Submit manuscript

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.

This is a preview of subscription content, log in via an institution to check access.

Access this article

Price excludes VAT (USA)
Tax calculation will be finalised during checkout.

Instant access to the full article PDF.

Fig. 1
Listing 1
Listing 2
Fig. 2
Fig. 3
Fig. 4
Fig. 5
Fig. 6
Fig. 7
Fig. 8
Fig. 9
Listing 3
Fig. 10
Fig. 11

Similar content being viewed by others

Notes

  1. http://mcis.polymtl.ca/makao.html

  2. http://neo4j.com/

  3. https://github.com/jexp/batch-import

  4. http://linux.die.net/man/1/strace

  5. https://github.com/smcintosh/bee

  6. https://git.gnome.org/browse/glib

  7. http://www.openldap.org

  8. https://www.kernel.org/

  9. http://www.qt.io

  10. http://sailhome.cs.queensu.ca/replication/unspecified_dependencies/

  11. http://www.gnu.org/software/libtool/

  12. http://doc.qt.io/qt-5/qmake-manual.html

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

    Article  MathSciNet  MATH  Google Scholar 

  • 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

    Article  MATH  Google Scholar 

  • 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

    Article  Google Scholar 

  • 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

    MathSciNet  Google Scholar 

  • 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

    Article  MathSciNet  MATH  Google Scholar 

  • 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

Download references

Author information

Authors and Affiliations

Authors

Corresponding author

Correspondence to Cor-Paul Bezemer.

Additional information

Communicated by: Andrea De Lucia

Rights and permissions

Reprints and permissions

About this article

Check for updates. Verify currency and authenticity via CrossMark

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

Download citation

  • Published:

  • Issue Date:

  • DOI: https://doi.org/10.1007/s10664-017-9510-8

Keywords

Navigation