
Para distribuição no CentOS 6, estou revisando um Makefile.patch
que tem,
- @echo 'libdir=$${prefix}/lib' >> tap.pc
+ @echo 'libdir=$${prefix}/lib64' >> tap.pc
Minha dúvida é se é assim ou não que se faz. É normal reescrever todos os arquivos make para instalações de 64/bit e 32/bit no CentOS? Existe uma maneira de fazer com que o make lide com isso e apenas construa para arcos de 64 bits sem codificar isso?
Mais tarde no makefile você pode ver que eles seguem em frente com esta convenção de codificação da instalação para lib64
?,
+ mkdir -p $(PREFIX)/lib64 $(PREFIX)/include $(PREFIX)/lib64/pkgconfig
+ install -c libtap.a $(PREFIX)/lib64
+ install -c libtap.so $(PREFIX)/lib64
+ install -c tap.pc $(PREFIX)/lib64/pkgconfig
Responder1
O que você descreve é uma das maneiras, se uma biblioteca que você constrói não for enviada com algo como, foo.pc.in
por exemplo.
A convenção é que, se o Makefile
(ou o sistema de compilação) permitir a configuração do diretório da biblioteca por meio de uma variável de ambiente, então ele está sendo usado.
Então, como primeiro passo, identifique se um dado Makefile
tem algo parecido. Por exemploeste exemplopermite fazer compilação multilib (por exemplo, x64_64 e i686) a partir do mesmo arquivo de especificações que possui:
%make_install PREFIX=%{_prefix} INSTALL_LIB=%{buildroot}%{_libdir}
Nenhum patch é necessário neste caso.
Um projeto baseado em cmake pode ser informado sobre o diretório de biblioteca correto, assim:
%cmake .. -DCMAKE_INSTALL_PREFIX="%{_prefix}" \
-DCMAKE_INSTALL_LIBDIR="%{_libdir}"
Portanto, apenas como último recurso, se Makefile
não permitir qualquer personalização do diretório da biblioteca, você faria o patch.
Embora possa ser entediante criar tais patches. Então você pode colocar sed
para trabalhar na %prep
seção.