Monday, April 18, 2011

Build process from hell

Ano de 2004. Um software que estava a ser desenvolvido por uma empresa austríaca e que foi transferido para a minha equipa.
Não usavam source control. Havia registo de bugs (cerca de 500 bugs abertos).
2 milhões de loc, 50 MB de sources e cerca de 6000 ficheiros em Visual C++ 6.0.
1 exe e 52 DLLs, portanto 53 projects dentro do Visual C++. Carradas de dependências entre módulos mas nenhuma indicada no Visual C++.
Como era feito o build process?
Com base nos ficheiros alterados adivinhava-se quais os targets a fazer build.
No caso de erro em alguns dos builds, tinha de se tentar por outra ordem.
No caso de várias tentativas (com várias ordenações) falharem era preciso mudar os settings e forçar o build. Normalmente eram várias DLLs que tinham dependências circulares. Ou seja: A dependia de B; B dependia de C; e C dependia de A. A solução era forçar a criação de A (ignorando erros), depois fazer build a B e a C, depois apagar A e fazer-lhe build novamente (desta vez sem forçar).
Um pesadelo completo! Digamos que com sorte conseguia-se compilar num dia(!) de trabalho.

Depois de um mês de trabalho a identificar todas as dependências e a automatizar o processo de build conseguimos colocar o processo de build fully automatic.
Ficou só a demorar 4h a compilar tudo...

No comments:

Post a Comment