sábado, 14 de abril de 2012

Recompilando o Freetype2 no OpenSUSE 12.1

Salve, pessoal!!

Ainda na busca pela melhoria da renderização das fontes no OpenSUSE 12.1 encontrei uma ótima dica (nesse blog) sobre recompilação do Freetype2 através do arquivo SPEC.

Para quem não sabe, um arquivo SPEC é um tipo de script que contém informações (especificações) sobre como o compilador deve proceder para compilar um software qualquer e estruturá-lo em um pacote RPM.

Eu já tive a experiência de recompilar o Freetype2 no Slackware com suporte ao Subpixel -  inclusive mantenho em meu disco rígido um pacote txz com esse recurso ativado - mas nunca havia feito isso em sistemas que utilizam RPM como pacote padrão.

Existem duas formas de ativar o subpixel no OpenSUSE. A primeira é instalando um repositório extra que contem esses pacotes já prontos. A segunda, é recompilando através do SPEC.

A primeira opção traz uma maior risco de falhas pois, quanto mais repositórios se habilita, mais possíveis problemas relacionados a conflitos entre pacotes oficiais e pacotes mantidos por terceiros.

Então vamos partir pra segunda opção. Primeiramente instale o arquivo de fonte (source) do Freetype2:
# zypper source-install freetype2 (ou zypper si freetype2)
Siga para o diretório /usr/src/packages/SOURCES/ e observe que ja estarão disponíveis os arquivos freetype-2.4.7.tar.bz2 e freetype-doc-2.4.7.tar.bz2, entre outros.

Instale os pacotes necessários pra compilação:
# zypper in gcc zlib-devel patch
ou, se preferir fazer como eu, instale os grupos de pacotes de desenvolvimento
# zypper in --type pattern devel_C_C++ devel_kernel
Agora siga para o diretório /usr/src/packages/SPECS/ e observe o arquivo freetype2.spec

Abra-o através do seu editor preferido (lembrando de abri-lo como root) e navegue até mais ou menos a linha 98
%define enable_subpixel_rendering 0
Nessa linha deverá ser trocado o valor 0 para 1
%define enable_subpixel_rendering 1
Salve a alteração, feche o editor e execute
# rpmbuild -bb freetype2.spec
Aguarde a compilação dos pacotes terminarem.

Por fim vá até o diretório /usr/src/packages/RPMS/x86_64 (ou i686i586, depende da arquitetura do seu sistema) e instale os pacotes gerados:
# zypper in --force freetype2-devel-2.4.7-6.1.x86_64.rpm libfreetype6-2.4.7-6.1.x86_64.rpm
Lembrando que o nome do pacote no seu sistema pode variar a arquitetura de x86_64 para qualquer outra, dependendo da versão que esteja instalada.

Depois de concluída a instalação, reinicie o PC e ative o subpixel no seu gerenciador de janelas preferido na parte de aparência ou fontes.

Agora é só curtir as belas fontes no OpenSUSE.

[ ] ' s  e até a próxima!

UPDATE

Após a instalação dos pacotes fui atualizar o sistema e percebi que o zypper estava sugerindo a substituição de ambos pela versão que está no repositório. Em outras palavras, os pacotes com o subpixel ativado seriam removidos para que a versão padrão (sem subpixel) fossem instalados novamente.

Então me lembrei que havia lido algo sobre bloqueio de pacotes através do próprio zypper. Fiz uma rápida busca no Google, dei uma olhada no manual (man) e encontrei exatamente o que eu queria.

De acordo com o man, quando você bloqueia um pacote significa que SE ESTE ESTIVER INSTALADO NÃO PODERÁ SER REMOVIDO, OU, SE NÃO ESTIVER INSTALADO, QUALQUER TENTATIVA DE INSTALA-LO SERÁ NEGADA.

Abaixo mostrarei os comandos relacionados a  bloqueio de pacotes:

BLOQUEIO DE PACOTES
# zypper al package(s)
# zypper addlock package(s)

REMOVER O BLOQUEIO DE PACOTES
# zypper rl package(s)
# zypper removelock packages(s)

LISTAR OS PACOTES BLOQUEADOS
# zypper ll
# zypper locks

REMOVER TODOS OS BLOQUEIOS DE PACOTES DE FORMA INTERATIVA
# zypper cl
# zypper cleanlocks
No caso do Freetype2, executei o comando
# zypper al freetype2-devel libfreetype6
A lista com os pacotes bloqueados pode ser vista tambem no arquivo
/etc/zypp/locks

[ ] ' s
Share: