The headache: Boost
Don't take me wrongly: Boost library is a powerful set of tools for bleeding-edge technology. Much of it gets absorbed into the C++ Standard Libraries.
The problem lies in our project being inactive for 7 years, which means it is relying on a library that is 7 years behind. Installing such an old library is a chore, and securing a pre-built package is problematic at best. The project is even incompatible with the later versions of Boost. It may have once given the original developers a powerful technology to propel their project in the past, but now we are stuck with clock stopped at 2011. Along with libtcod being stuck also in 2012, dealing with Boost is critical to bringing the project up-to-date.
There are several ways to address the issue.
Option 1 : Upgrade
We can read each related source code, research how Boost has modified the relevant function calls, and either fix the expected return type or required input type, This may lead to more and more changes like a ripple effect, and would be very difficult for a group of developers who have only just inherited a very complex code without any real documentation.
Option 2 : Keep it as is
Who cares? Let's just recompile the whole thing from an outdated repository and hope for the best. Yeah, I am kidding.
Option 3 : Remove Boost
It is in our way. Take it out. Sounds like a bold and drastic move, but given the library being 7 years old, with much of its function now integrated over several iterations of C++ standardization, this sounds almost plausible.
Coincidentally, Robert, a major contributor to the project, thought similarly and took action: he got rid boost::cstdint library by converting it to std::cstdint, a comparable STL to the Boost version. The choice was made.
I jumped in.
IdentificationI started out by identifying all libraries from Boost. On bash command line, I entered the following:
git grep '#include [<]boost' | sed -n 's/^.*<\([^>]*\)>.*$/\1/p' | sort | uniq
- This first calls git grep to find all lines of include statement for Boost libraries.
- Then, it filters out all other information except for the actual name of the library between < and >.
- Lastly, it sorts them by name and finds just unique lines, leaving us with a nice list of all Boost libraries being used.