The Story of My Life so Far - Part 125 - February 2004: I sow the first seed for a new software tool that I will maintain for more than 12 yearssteemCreated with Sketch.

in #story6 years ago (edited)

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


caats_tshirt.png

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.

In project files were described 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 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 to follow me

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

Coin Marketplace

STEEM 0.17
TRX 0.13
JST 0.027
BTC 60340.89
ETH 2615.66
USDT 1.00
SBD 2.56