What is this all about?
At the moment I have to deal with legacy code during my day-job. And I got the idea that, maybe, some other people are interested how I solved all the different issues as well. So I decided to start a serie of blogposts about the different kind of challenges I faced and how I dealt with them.
Oh my fucking god, what a mess …
Maybe you know the following situation as well: your boss told you to take care of this suspicious project no one in the company wants to touch. When people hear about your new task they look like you told them that you gonne die a painful dead at the weekend. So WFT!
You try to find the repo and there is no. There is only a folder containing some binaries and a zip-file containing the source. Or there is a repo with only one version checked in some weeks ago. Or there are different named folders with version names in it containing the source. WFT, again!
You will try to open the project and you don’t have a clue how to do this. No obvious entry points how to start. WTF, WTF, WTF!
You want to build the project and you cannot find any makefiles at all. The you find the makefile but not documentation how to run the build. Or you are able to runf the build but the 3-party-libs are not there.
After a hard week you are going into your weekend. You think about quitting the job and try to get a shepherd in Australia. But stop! Next week we will start to get out of this mess.
Getting back control: try to build it
The first thing what I try to understand is to get an overview about the project. Often I saw often used peaces of code next to dead ends, commented code or just experiments, which are not in use any more. The makefile / build description shows you which parts are currently in use for the production code. In the companies I worked people are using one kind of build system in a bundle of projects. If there are still colleages left which dealted with this project you can ask them which how this worked. For instance if a GNU-make was in use you can grep ( see How to use grep on linux or How to use findstr on Windows ) to look for Makefile. Visual Studio project files are using the sln-extension. Grep for it and try to run the build.
Copy the build output and look for errors. Each build error provides information about the struture of your project:
- Dependencies are missing:
- The project is using the following dependencies
- Try to find it and intregate is as well
- The project is looking for different includes ( in c++ ), modules ( python ) or packackes ( Java / C# ) and the build cannot find them:
- The project is using an environment variable to locate different packages
- Identify the packages and install them
- Modify your environment until it works
- If this creates issues: try to run your build in verbose mode, this helps a lot to analyze what is going wrong
- The source does not build, syntax errors all over the place:
- Which version of the language was in use? Any extensions? For instance if you are using Cuda-Code in c++ you need to install a special compiler for that.
- Try different compilers, some code which build fine with VS-2010 does not build when using g++ / clangs
- Are the syntax errors caused by OS-specific defines? Identify them
- Try to find them, Stack-Overflow can help you
- Linking / assembling fails:
- Try to answer:
- Are you sure that you have run all makefiles?
- Do you need to copy stuff manually?
- Try to answer:
Still does not work…
.. but you learnd some stuff about your project. Hopefully you have some better understanding.