Eu desenvolvo o software A, que depende dos softwares B e C, e o software B depende de D, que também traz uma cópia conveniente de C. Para o meu trabalho em A e B, gostaria de ter uma integração contínua com o GitHub. Isso pode ser fornecido pelo Travis CI facilmente.
Meu problema com o Travis CI é que ele é executado no Ubuntu Trusty. Minha estação de trabalho executa o Fedora, o supercomputador que eu implemento para rodar o CentOS 7. O código C / C ++ é compilado em todas as plataformas, essa diversidade significa muito mais trabalho.
Construir uma única biblioteca no Travis CI não é um problema, eu posso fazer isso. Atualmente eu construo todas essas dependências quando eu construo A, o que é um desperdício de recursos e tempo. A solução “adequada” seria ter pacotes Ubuntu Trusty das bibliotecas dependentes em alguma versão de lançamento. '
Ao construir estes pacotes, descobri que os pacotes Debian são muito mais complicados que os pacotes RPM. No pacote RPM, apenas faço o seguinte:
%build
aclocal
autoreconf -f
./configure \
--disable-testing \
--enable-clover \
--enable-mm-malloc \
--enable-openmp \
--enable-parallel-arch=scalar \
--enable-proc=AVX \
--enable-soalen=4 \
--libdir=%{_libdir} \
--prefix=/usr/ \
CXX=/usr/bin/g++ CC=/usr/bin/gcc \
CXXFLAGS="-O2 -finline-limit=50000 -Wall -Wpedantic -fmax-errors=1 -fopenmp --std=c++11 -Drestrict=__restrict__" \
|| cat config.log
make %{?_smp_mflags}
%install
%make_install
Em seguida, ele fará todas essas etapas. Com o Debian, isso é provavelmente possível apenas sobrescrevendo build:
no arquivo debian/rules
. No entanto, ele ainda tenta executar dh_auto_clean
, que então encontrará os artefatos de construção na árvore (obviamente…). No entanto, não posso executar make clean
antes de chamar autoreconf
.
Isso significa que não posso executar debuild -S
, o que significa que não posso construí-lo em um PPA do Launchpad, o que significa que não posso instalar esse pacote no Travis CI.
O que é uma maneira sensata de obter um pacote simples e desleixado do Ubuntu de meus projetos GNU Autotools (geralmente subprojetos aninhados)?