~ubuntu-branches/ubuntu/natty/gpt/natty

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
Desenvolvendo
=============

o Instalando dependências

  Para desenvolver o GPT é necessário instalar os seguintes programas:

  - g++ 
  - make
  - automake (v1.9 ou superior)
  - autoconf
  - libtool
  - antlr (v2.6.x ou superior)
  - pcre e pcrecpp
  - nasm

  Para satisfazer estas dependências no (K)Ubuntu ou Debian, pode-se executar
  o seguinte comando:

  # aptitude install g++ make automake1.9 autoconf libtool antlr libantlr-dev \
  > libpcrecpp0 libpcre3-dev nasm


o Baixando a última versão do GPT

  Para obter as últimas versões do código fonte do GPT, é necessário
  fazer um checkout no repositório, utilizando o subversion. Para instala-lo, use o seguinte comando:

  # aptitude install subversion 

  ex (checkout anônimo):

    $ svn checkout svn://svn.berlios.de/gpt/trunk/gpt

  Se você for um membro do projeto, deve ser autenticado.

  ex (checkout autenticado):

    $ svn checkout svn+ssh://username@svn.berlios.de/svnroot/repos/gpt/trunk/gpt

  Maiores informações na página do projeto no BerliOS:

    http://developer.berlios.de/projects/gpt


o Iniciando o desenvolvimento

  Se você estiver utilizando o código fonte do repositório, é necessário
  fazer o setup do sistema de construção com o seguinte comando:

  $ make -f Makefile.cvs

  Isto criará os Makefile.in's nescessários e o shell script "configure"
  utilizado para criar os Makefile's utilizados pelo programa "make"
  para automatizar a compilação do projeto.

  Se estiver utilizando o código fonte de uma versão específica
  (obtida por meio de um pacote tar.gz, por exemplo), o script "configure"
  já estará disponível.


  NOTA: se estiver obtendo erros nos arquivos Makefile.am ao executar
  make -f Makefile.cvs, verifique a versão do automake sendo utilizada:

    $ automake --version

  Se o comando acima informar uma versão inferior à 1.9, desinstale esta versão,
  execute manualmente o automake1.9 ou faça as devidas configurações para que
  a versão correta seja utilizada.


o Configurando e construindo

  Agora, basta seguir as instruções do arquivo INSTALL, executando o 
  "configure" com as opções desejadas e, em seguida, executando "make" e 
  "make install", se quiser instalar os arquivos no sistema.

o Realizando commits

  As mensagens de commit devem, idealmente, seguir pequenas convenções:

  -Toda mensagem de commit deve ser enviada utilizando ASCII, sem acentos.
   (pelo menos, até termos os emails em gpt-commit exibidos corretamente)

  -Toda descrição lógica deve iniciar em uma nova linha, prefixada por "-".

    Ex: Duas descrições para as modificações do arquivo A.cpp :

      $ svn ci A.cpp -m"-Utilizando algoritmo mais rápido para a função f()
      > -Adicionado classe X para lidar com erros do usuário"


  - Todas as modificações lógicas que envolvem vários arquivos devem
    ser commitadas em uma mesma leva, a não ser que um ou mais arquivos
    envolvidos contenham outras modificações. Neste último caso,
    o arquivo poderá ser commitado separadamente, mas com a mesma
    mensagem do commit da leva, além da mensagem descrevendo as 
    modificações específicas.

    Ex 1: A.cpp e B.cpp foram modificados. A.cpp teve o nome de uma função
    modificada, e B.cpp, por usar esta função, teve que ser modificado também.
    Os dois arquivos, A.cpp e B.cpp devem ser commitados em conjunto:

      $ svn ci A.cpp B.cpp -m"-Função func() renomeada para f()"


    Ex 2: A.cpp e B.cpp foram modificados. A.cpp melhorou um algoritmo e 
    modificou o nome de uma função. B.cpp, por utilizar esta função, teve que
    ser modificado também. Os dois arquivos, A.cpp e B.cpp podem ser
    commitdos separadamente:

      $ svn ci A.cpp -m"-Função func() renomeada para f()
      > -Utilizando algoritmo xyz para a funcao z()"
 
      $ svn ci B.cpp -m"-Função func() renomeada para f()"

      Note que a mesma mensagem da mudança da função foi utilizada nos dois
      commits.

   Ou em conjunto (o que ficar mais claro para quem ler os Logs :-)

      $ svn ci A.cpp B.cpp -m"-Função func() renomeada para f()
      > -Utilizando algoritmo xyz para a funcao z() em A.cpp"


  -Mensagens de modificações que resolvem bugs devem ser precedidos por BUGFIX:

     $svn ci A.cpp -m"BUGFIX: resolvido bug ao fazer atribuição de inteiros"

  -Mensagens de modificações que representam novas funcionalidades ou algo 
   visível/relevante para o usuário devem iniciar com NEW:

     $svn ci A.cpp -m"NEW: estruturas caso/repita agora são suportados"

  -Mensagens que devem ser ignoradas devem iniciar com DEVNULL

     $svn ci A.cpp -m"DEVNULL: identacão de código corrigida"


 Ex 3: Misturando tudo:


    $ svn ci -m"-Função func() renomeada para f()
    > BUGFIX:
    > -Resolvido bug ao depurar arrays de literais
    > -Resolvido bug ao fazer atribuição de inteiros
    > NEW:
    > -Adicionado suporte a estruturas caso/repita
    > -Adicionado suporte a estruturas eterogêneas
    > DEVNULL: 
    > -retirado texto commitado acidentalmente
    > REGULAR:
    > -Adicionado gerador de código para caso/repita"

   No exemplo acima, 2 mensagens são de bugfix, 2 são de novidades,
   1 será ignorada e 2 (a primeira e a última) são mensagens normais.
 
   Portanto, todas as keywords são flags que marcam o texto a seguir em diante.
   REGULAR, portanto, resolve para o default, que são mensagens normais.


  Estas convenções devem ser seguidas para a geração de arquivos ChangeLog
  e NEWS automatizada. ChangeLog reunirá todas as modificações feitas em um 
  período, ignorando mensagens marcadas com DEVNULL, e exibindo mensagens 
  normais e de bugfix. O arquivo NEWS conterá mensagens marcadas com NEW
  e bugfixes.

  Além do mais, BUGFIX pode ser seguido de um número (ie #1234), que representa
  o número do bug em um sistema de gerencia de bugs, que no nossa caso é o Mantis.

o Unit Testing

  -Todo código que pode se beneficiar de testes automatizados *devem* ter testes
  automatizados. Versões de nós mesmos no futuro agradecem.
  
  -Mensagens de commit para arquivos de testes não são tão obrigatórios.
  Use o bom senso para decidir se a descrição do commit ajudaria ou não.
  

  TODO: explicar a infraestrutura de testes (quando houver uma)

Documentando
=============

  Os arquivos de documentação ficam no diretório doc.

  O manual está em doc/manual e é escrito em Latex, portanto será necessário a instalação dos seguintes pacotes:
  - latex-make
  - texlive-latex-base
  - latex2html
  
  Os arquivos do manual ficam na pasta doc/manual. E o arquivo principal é o manual.tex.
  Após fazer as modificações, para gerar o pdf, basta executar o comando
  $ latex manual.tex
  
  Para gerar o manual em html, use o comando
  $ latex2html manual.tex

Distribuindo
=============

Para a distribução de uma nova versão do GPT pode-se seguir os seguinte passos:
  
o Atualizar documentação (ver seção Documentando)
  
o Checar se todos os arquivos novos/modificados estão no repositório
  $ svn status 
  
o Testar o versão do SVN em outros ambientes
  
o Mudar a versão no arquivo configure.ac
  Atualizar os paramentros das funções AC_INIT e AM_INIT_AUTOMAKE com a nova versão do gpt
  Após isso executar os comandos, para que a mudança reflita nos arquivos gerados automaticamente:
  $ autoconf && automake
    
o Atualizar NEWS
  O arquivo NEWS deverá ser atualizado manualmente seguindo o padrão utilizado.
    
o Atualizar ChangeLog
  Para gerar o ChangeLog será necessário a instalação do pacote:
  - php-cli
  
  Executar o comando
  $ php stuff/svn2cl.php > ChangeLog
  
o Commit e tag
  Após essas atualizações, deverá ser feito um commit sem comentários e tagear a versão no SVN. 
  $ svn commit
  $ svn copy https://username@svn.berlios.de/svnroot/repos/gpt/trunk/gpt \
            https://username@svn.berlios.de/svnroot/repos/gpt/tags/gpt-1.1\
      -m "Release 1.1"

o Criar pacotes
  - tar.gz
    $ make distclean; mkdir build; cd build; ../configure && make && make distcheck
    
  - debian

o Fazer o upload dos arquivos
  
o Atualizar o site e publicar as novidades