This is the story of my life so far: 69 years and counting.
Prequel: A Brief History of my Family in France

The story starts here
Previous episode: Part 124
For my first years working for AdaCore, I was responsible for "gnatmake", a tool that we call the "builder".
To build or to rebuild an application, you need to compile all the source files into "object files" and to "link" the object files into an executable.
In many cases, this process is done using a common tool called "make" that get the different steps to perform from text files called "Makefiles". Provisions are made to avoid recompiling sources if their object files are already up to date.
"gnatmake" was doing this building job for applications that are only written in Ada. And to describe the application to gnatmake, in 2000 we had invented what we called "GNAT Project Files", with the suffix ".gpr" in their file names.
The project files were describing where to find the sources of the application, with what options they should be compiled, where should the executable be stored, etc... And gnatmake after reading the project files for an application would do all the necessary steps to build the application.
In 2002 or 2003, AdaCore that had only supported the Ada programming language wanted to be able their customers to build multi-language applications; to be able to use several languages in the same application, for example, Ada and C and/or C++.
To do that, the project files were enhanced to indicate the different languages of the sources and how the different object files results of their compilations should be combined to build an executable.
But AdaCore thought that it would be too big a job to modify gnatmake to immediately support multi-language applications. So they created a new tool, called "gpr2make", that was building a Makefile from the information it read from the project files, and invoke "make" to build the application.
If the application was written partly in Ada, "make" would invoke gnatmake for the Ada part.
In addition to invoking gnatmake, "make" was some times needing to get more information from the project files, so we created an auxiliary tool that was invoked by "make" and was itself reading the project files and returning the information needed.
Thinking about all this at the beginning of 2004, I thought that it was madness: for a multi-language application using the Ada and C programming languages, the project files were read several times: first by gpr2make, then by gnatmake and possibly one or several times by the auxiliary tool (the name of which I have forgotten).
I thought it would be better to create a new "builder" that would read the project files once and do everything to build the application, invoking the compilers and the linker directly.
On February 14th 2004, I had gone to see Gaëlle running in Seattle. On my way back to Richmond, I decided to send a message to AdaCore to tell them that it was my belief that gpr2make was not the way to go, and that we should create a new multi-language builder.
As soon as I arrived home at night, I wrote the message with the title, probably too provocative:
- Should we get rid of gpr2make?
I suggested that this new building tool should be called "gprmake".
My message was not well received initially.
Continue to Part 126
If you like this story, please consider following me @vcelier
Summary
Part 1 - Part 2 - Part 3 - Part 4 - Part 5 - Part 6 - Part 7
Part 8 - Part 9 - Part 10 Part 11 - Part 12 - Part 13 - Part 14
Part 15 - Part 16 - Part 17 - Part 18 - Part 19 - Part 20 - Part 21
Part 22 - Part 23 - Part 24 - Part 25 - Part 26 - Part 27 - Part 28
Part 29 - Part 30 - Part 31 - Part 32 - Part 33 - Part 34 - Part 35
Part 36 - Part 37 - Part 38 - Part 39 - Part 40 - Part 41 - Part 42
Part 43 - Part 44 - Part 45 - Part 46 - Part 47 - Part 48 - Part 49
Part 50 - Part 51 - Part 52 - Part 53 - Part 54 - Part 55 - Part 56
Part 57 - Part 58 - Part 59 - Part 60 - Part 61 - Part 62 - Part 63
Part 64 - Part 65 - Part 66 - Part 67 - Part 68 - Part 69 - Part 70
Part 71 - Part 72 - Part 73 - Part 74 - Part 75 - Part 76 - Part 77
Part 78 - Part 79 - Part 80 - Part 81 - Part 82 - Part 83 - Part 84
Part 85 - Part 86 - Part 87 - Part 88 - Part 89 - Part 90 - Part 91
Part 92 - Part 93 - Part 94 - Part 95 - Part 96 - Part 97 - Part 98
Part 99 - Part 100 - Part 101 - Part 102 - Part 103 - Part 104
Part 105 - Part 106 - Part 107 - Part 108 - Part 109 - Part 110
Part 111 - Part 112 - Part 113 - Part 114 - Part 115 - Part 116
Part 117 - Part 118 - Part 119 - Part 120 - Part 121 - Part 122
Part 123 - Part 124