• Nenhum resultado encontrado

Construindo um rpm

No documento Apostila1CouC++ (páginas 67-71)

2.3 C++ for win32 gratuito

2.4.8.3 Construindo um rpm

2.4.8.3.1 Introdução

Construir um pacote rpm é relativamente fácil de se fazer, especialmente se você tem o fonte do software para o qual quer fazer o pacote. O procedimento passo a passo é mostrado abaixo.

1. Prepare o código fonte do pacote, deixando-o pronto para compilar. 2. Faça um arquivo de especificação (spec file) para o pacote.

3. Execute o comando de construir (build) o pacote rpm.

O arquivo de especificação é um arquivo texto requerido para se construir um pacote rpm. Nesse arquivo texto há uma descrição do pacote, instruções para permitir contrui-lo, e uma lista de arquivos binários que são instalados com o pacote. O melhor é seguir a convenção do arquivo de especificação, como mostrado no exemplo abaixo. Com essa convenção, o sistema poderá lidar com múltiplas versões de um pacote com o mesmo nome. Recomendo que a descrição do software, nome, etc. seja feita no idioma inglês.

Summary: A program that ejects removable media using software control. Name: eject

Version: 2.0.2 Release: 3 Copyright: GPL

Group: System Environment/Base

Source: http://metalab.unc.edu/pub/Linux/utils/disk-management/eject-2.0.2.tar.gz Patch: eject-2.0.2-buildroot.patch

BuildRoot: /var/tmp/%{name}-buildroot

%description

The eject program allows the user to eject removable media (typically CD-ROMs, floppy disks or Iomega Jaz or Zip disks) using software control. Eject can also control some multi- disk CD changers and even some devices' auto-eject features.

Install eject if you'd like to eject removable media using software control. %prep %setup -q %patch -p1 -b .buildroot %build make RPM_OPT_FLAGS="$RPM_OPT_FLAGS" %install

/usr/bin/eject

/usr/man/man1/eject.1

%changelog

* Sun Mar 21 1999 Cristian Gafton <[email protected]> - auto rebuild in the new build environment (release 3)

* Wed Feb 24 1999 Preston Brown <[email protected]> - Injected new description and group.

2.4.8.3.2 O header

Explicação item a item:

• Summary: explicação em uma linha sobre o propósito do pacote • Name: um identificador para o pacote

• Version: a versão do pacote • Release: é como uma sub-versão

• Copyright: diga como quer a licença do pacote. Você deve usar algo como GPL, BSD, MIT, public domain, distributable ou commercial.

• Group: o grupo ao qual o pacote pertence num nível do instalador RedHat.

• Source: essa linha aponta para o diretório raiz do programa fonte. É usado para o caso de você precisar pegar o fonte novamente e checar por novas versões. É importante lembrar que o nome do arquivo dessa linha precisa ser exatamente igual ao que você tem de fato no sistema (ou seja, não mude o nome dos arquivos fonte dos quais fez download). Os arquivos fonte estão geralmente compactados com tar e depois com gzip, ou seja, tem a extensão *.tar.gz. Você pode especificar mais de um arquivo fonte, como mostrado no exemplo abaixo.

source0: mySource.tar.gz source1: myOtherSource.tar.gz source2: myYetOtherSource.tar.gz

Esses arquivos vão para o diretório SOURCES. (A estrutura de diretórios do pacote rpm é mostrada mais abaixo.)

• Patch: Esse é o local onde você encontra os arquivos que “concertam” uma versão já disponibilizada (esse procedimento é chamado de patch). Da mesma forma que para os arquivos fonte, o nome dos arquivos precisa ser exatamente igual ao original, e pode haver mais de um. O exemplo abaixo ilustra-o. Os arquivos de patch serão copiados para o diretório SOURCES.

Patch0: myPatch.tar.gz Patch1: myOtherPatch.tar.gz Patch2: myYetOtherPatch.tar.gz

• Group: Essa linha é usada para dizer para programas instaladores de alto nível (tal como gnorpm) onde salvar o programa do pacote e sua estrutura hierárquica. Você pode encontrar ... • BuildRoot: É uma linha que permite especificar um diretório como “root” para construir e

instalar o pacote. Você pode usar essa opção para ajudar a testar seu pacote antes de realmente instalar na máquina.

• %description: É onde se escreve a descrição do pacote. Recomenda-se enfaticamente o uso do idioma inglês para a descrição. Nesse campo pode-se usar várias linhas, como mostrado no exemplo.

2.4.8.3.3 Preparação (prep)

É a segunda seção do arquivo de especificação (spec file). É usado para obter parâmetros para construir o pacote. O que a seção prep faz realmente é executar scripts no shell. Você pode simplesmente fazer um script seu para construir o pacore, e colocar após o tag %prep. Contudo, há alguns macros que podem ser úteis, e são mostrados abaixo.

• -n name. Esse macro define o nome do diretório para construir o pacote com o nome indicado. O nome implícito (default) é $NAME$VERSION. Outras possibilidades são $NAME, ou ${NAME}${VERSION}, ou o que for usado nos arquivos tar. Note que o uso da letra “$” não são variáveis especificadas no spec file. Estão apenas usaras aqui no lugar de um nome de exemplo. Você precisa usar um nome real no seu pacote, e não uma variável.

-c. Essa opção irá fazer mudar para o diretório de trabalho antes de executar a descompactação com untar.

• -b. Essa opção irá descompactar os fontes antes de mudar de diretório. É útil apenas quando se usa múltiplos arquivos fonte.

• -a. Essa opção irá descompactar os fontes após mudar para o diretório.

• -T. Essa opção sobre-escreve a ação implícita de descompactar com untar os fontes, e requer o uso da opção -a ou -b para obter os principais fontes descompactados. Você precisa disso quando são usados fontes secundários.

-D. Use essa opção para não apagar o diretório após desempacota-lo. // ainda há o que melhorar

}

A saída do programa é: Hello world

Basicamente, um compilador é uma ferramenta que transforma um arquivo de texto (conhecido como texto fonte) num arquivo executável. Chama-se esse procedimento “construir (build) um executável”. As seções abaixo abordam os conceitos básicos sobre como se pode escrever o arquivo de texto fonte.

3.2 Formato livre

Formato livre (free format) que significa que o compilador observa o texto fonte sem atenção a posicionamento relativo dos caracteres. Em FORTRAN, que por exemplo não possui formato livre, o código fonte só pode ser escrito a partir da coluna 7 do texto e o return no final da linha significa que o comando acabou. A maioria das linguagens modernas como C e C++ podem ser escritas em formato livre o que significa também que no lugar de 1 espaço podem haver qualquer número de espaços, returns e tabs sem qualquer alteração na compilação.

Com o formato livre, as funções myinc e myinc2 abaixo são exatamente iguais.

int myinc(int in) { return in+1; }

int myinc2 ( int in ) { return in + 1 ; }

3.3 Chamada de função

A chamada de uma função corresponde à chamada de uma sub-rotina, como ilustrado na figura abaixo.

fun1();

fun1

Figura 4: representação gráfica do fluxo de um programa na chamada de uma função

Para se chamar uma função em C, basta escrever o nome da função seguido de (). Caso haja

parâmetros, eles devem ser colocados dentro dos parênteses, separados por vírgulas. Mesmo que não haja parâmetros é necessário que se escreva o abre-e-fecha parêntesis vazio (). Depois da chamada da

função, como depois de qualquer comando, é necessário que se pontue com ponto-e-vírgula ;.

Caso haja retorno da função, uma variável de retorno colocada antes da função e o uso do operador =

fazem com que a variável receba o retorno da função. Não é necessário que o retorno de uma função seja usado. Caso não seja necessário usar o retorno de uma função, basta ignorar esse valor de retorno. Exemplo: double triple(double d) { return 3*double; } void main () { double d=2.2; double dd = triple(d);

triple(d); // o retorno não é usado. Nesse caso não faz nada, mas é legal. }

No documento Apostila1CouC++ (páginas 67-71)

Documentos relacionados