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 transformá-lo em um pacote binário 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 baseados em pacotes RPM.

Existem duas formas de ativar o subpixel no OpenSUSE. A primeira é instalando um repositório extra que contem esses pacotes já prontos. A segunda forma é recompilando através do SPEC. Eu não gosto muito da primeira opção pois, quanto mais repositórios você mantem, mais "segmentado" fica o seu sistema. Pacotes do repositório A que não estão atualizados substituindo os pacotes atualizadíssimos do repositório B simplesmente porque os pacotes de A possuem os recursos que não estão nos pacotes de B. Ficou confuso? Pois é, assim fica o seu sistema.

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 pacotes 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 i686, i586, 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 oráculo, dei uma olhada no man e encontrei exatamente o que eu queria. Segundo 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
Follow Me on Twitter