aboutsummaryrefslogtreecommitdiff
path: root/tags/0.5/doc/mkbuild.tex
blob: 9e620ae8c5bbbfa199d3b51d74e49de9992e57d5 (plain)
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
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
\documentclass[12pt,a4paper,oneside]{article}
%\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}
\usepackage[dvips]{graphicx}
%\usepackage{subfigure}
\usepackage{mdwlist}
\usepackage{a4}
%\topmargin -.5in
%\addtolength{\hoffset}{-1.0cm}
%\addtolength{\textwidth}{3.0cm}
%\textwidth = 400pt
%\textheight = 680pt

\makeatletter

%\usepackage[pdftex]{color,graphicx}
%\DeclareGraphicsExtensions{.jpg,.pdf,.mps,.png}

\usepackage[brazil]{babel}
\usepackage[dvips]{graphicx}
%\usepackage{textdraw}

\input texdraw
%\newenvironment{textdraw}{\leavevmode\btexdraw}{\etexdraw}

\newcommand{\rcap}[1]{Cap�tulo \ref{#1}}
\newcommand{\rfig}[1]{Figura \ref{#1}}
\newcommand{\rtab}[1]{Tabela \ref{#1}}
\newcommand{\rsec}[1]{Se��o \ref{#1}}

\makeatother

\begin{document}


\title{Construindo SlackBuilds com mkbuild}

\author{Rudson Alves}

\date{\today}

\maketitle

%\pagenumbering{roman}

\tableofcontents{}
%\listoffigures
%\listoftables

%\abstract{...}


\section{Introdu��o}

O \textit{mkbuild} � um programa em \textit{script shell} destinado a constru��o de \textit{Slackbuilds},  \textit{scripts} utilizados para a constru��o de pacotes no \textit{Slackware}.

\section{O modelo generic.mkSlackBuild}

O \textit{mkbuild} utiliza o modelo padr�o \textit{generic.mkSlackBuild}, armazenado em

\begin{verbatim}
/etc/simplepkg/defaults/mkbuild/
\end{verbatim}

Este modelo � uma vers�o setorizada do \textit{generic.SlackBuild}, levemente modificada. O \textit{generic.SlackBuild} � um modelo gen�rico de \textit{Slackbuilds} disponibilizado na �rvore de \textit{Slackbuilds} do \textit{Slack.Sarava}, para servir como modelo para a constru��o dos \textit{scripts}. Outros modelos setorizados podem ser utilizados pelo \textit{mkbuild}, a �nica limita��o � quanto ao nome da se��o \textit{slackdesc}, que n�o poder� ser alterada.


\subsection{Os Campos}

O modelo \verb!generic.mkSlackBuild! � um \textit{SlackBuild} gen�rico com v�rios campos destacados por duplo colchetes, \verb![[! \dots \verb!]]!, com mostra o trecho abaixo:

\begin{verbatim}
...
<set_variables> all
# Set variables
CWD="$(pwd)"
SRC_NAME="[[SOURCE NAME]]"
PKG_NAME="[[PACKAGE NAME]]"
ARCH=${ARCH:=[[ARCH]]}
SRC_VERSION=${VERSION:=[[VERSION]]}
PKG_VERSION="$(echo "$SRC_VERSION" | tr '[[:blank:]-]' '_')"
BUILD=${BUILD:=1[[SLACKBUILD AUTHOR INITIALS]]}
...
PREFIX=${PREFIX:=[[PREFIX]]}
PKG_SRC="$TMP/$SRC_NAME-$SRC_VERSION"
</set_variables>
...
\end{verbatim}

Uma breve descri��o destes campos � apresentada na tabela abaixo: \\
\\
\begin{tabular}{l|l}
\hline \hline
\textbf{Campo} & \textbf{Descri��o}\\
\hline \hline
PROGRAM NAME               & nome do programa                               \\
PROGRAM URL                & \textit{URL} da fonte do pacote                \\
SLACKBUILD AUTHOR          & nome do autor                                  \\
SOURCE NAME                & nome da fonte, sem vers�o ou extens�o          \\
PACKAGE NAME               & nome do pacote e ser gerado                    \\
ARCH                       & arquitetura do pacote. Padr�o \verb!i486!      \\
VERSION                    & vers�o do pacote                               \\
SLACKBUILD AUTHOR INITIALS & assinatura utilizada pelo autor                \\
PREFIX                     & prefixo da instala��o (\verb!/usr!, \verb!/opt!, ...)\\
SOURCE EXTENSION           & extens�o da fonte (\verb!bz2!, \verb!gz!, ...) \\
DOWNLOAD FOLDER URL        & \textit{URL} da pasta onde se encontra a fonte \\
DECOMPRESSOR               & o descompressor para a fonte (\verb!gunzip!, \verb!bunzip2!, ...) \\
DECOMPRESSOR TEST FLAG     & \textit{flag} de teste do descompressor        \\
SIGNING KEY URL            & \textit{URL} da chave \textit{gpg} do fonte    \\
SIGNING KEY                & chave \textit{gpg} da fonte                    \\
MD5SUM EXTENSION           & extens�o utilizada pelo arquivo \textit{md5sum}\\
PATCH FILES                & arquivo \textit{path}                          \\
NUMBER OF PREFIX SLASHES TO STRIP  & \dots                                  \\
SOURCE NAME CONSTRUCTION STRING  & string para a constru��o do nome do arquivo. O padr�o � \$SRC\_NAME-\$VERSION.tar.\$EXTENSION  \\
OTHER CONFIGURE ARGS       & argumentos de configura��o passados ao \verb!./configure! \\
DOCUMENTATION FILES        & lista de arquivos para a pasta \verb!/usr/doc/PACKAGE! \\
SLACK-DESC                 & conte�do do \verb!slack-desc!, descri��o do pacote \\
REST OF DOINST.SH          & conte�do do \verb!doinst.sh!                   \\
\hline
\end{tabular}
\\\\

Em alguns casos o nome do pacote difere do nome da fonte, como � o caso da fonte \verb!sigc++!, que gera o pacote de nome \verb!libsiggc++!. Por este motivo que existem os campos \textit{SOURCE NAME} e \textit{PACKAGE NAME}. Para uma compreens�o mais profunda destes campos, aconselho ler o \textit{script} \textit{generic.SlackBuild}.


\subsection{As Se��es}

As se��es no modelo \verb!generic.mkSlackBuild!, s�o iniciadas pela \textit{tag} \verb!<nome_da_se��o>! e terminadas com \verb!</nome_da_se��o>!, como em um c�digo \textit{html}, \underline{sem espa�os}.

A �nica se��o que n�o pode ter seu nome alterado � \textit{slackdesc}. Esta se��o � editada de uma forma diferenciada pelo \textit{mkbuild} e a altera��o de seu nome poder� gerar erro.

Cada se��o possui uma \textit{flag} com os poss�veis valores:

\begin{description}
 \item[on] habilitado;
 \item[off] desabilitado;
 \item[all] sempre habilitado.
\end{description}

A inten��o destas \textit{flags} � gerar um padr�o para as se��es, deixando em \textbf{all} as se��es que dever�o estar sempre habilitadas e \textbf{on} ou \textbf{off} se��es que podem ser habilitadas ou desabilitadas de acordo com as necessidades do \textit{SlackBuild} que ser� constru�do.

As se��es padr�es do \verb!generic.mkSlackBuild! s�o listadas na tabela abaixo:
\\\\
\begin{tabular}{l|l|c}
\hline
Se��o & Descri��o & Flag \\
\hline
head                         & cabe�alho do \textit{SlackBuild}         & all \\
slackbuildrc                 & carrega \textit{script} \verb!slackbuildrc! & off \\
set\_variables               & inicia as vari�veis                      & all \\
slkflags                     & carrega \textit{flags} para compila��o   & all \\
error\_codes                 & c�digos de erro para o \verb!createpkg!  & off \\
start\_structure             & cria diret�rios para compila��o          & all \\
download\_source             & baixa a fonte do pacote                  & off \\
md5sum\_download\_and\_check\_0 & verifica \textit{md5sum} da fonte por c�digo & off \\
md5sum\_download\_and\_check\_1 & verifica \textit{md5sum} da fonte por arquivo & off \\
gpg\_signature\_check        & verifica assinatura \textit{gpg} da fonte & off \\
untar\_source                & desempacota a fonte                      & all \\
path\_source                 & aplica \textit{path} a fonte             & off \\
configure                    & configura pacote                         & off \\
make\_package                & compila o pacote                         & all \\
install\_package             & instala o pacote em diret�rio tempor�rio & all \\
strip\_binaries              & limpa bin�rios                           & off \\
compress\_manpages           & comprime p�ginas de manuais              & off \\
compress\_info\_files        & comprime arquivos \textit{info}          & off \\
install\_documentation       & instala documenta��o                     & off \\
slackdesc                    & \textit{slackdesc} do pacote             & off \\
postinstall\_script          & \textit{script} de p�s-instala��o        & off \\
build\_package               & constr�i pacote                          & all \\
clean\_builds                & remove fontes e instala��o tempor�ria    & off \\
\hline
\end{tabular}
\\\\


\section{Configura��o}

Por hora, o \textit{mkbuild} utiliza apenas um vari�vel de configura��o em \verb!/etc/simplepkg/simplepkg.conf!. A vari�vel \textit{SLACKBUILDS\_DIR} � necess�ria para utilizar o \textit{mkbuild} com a op��o ``\textit{-c}'' ou ``-\textit{-commit}'', que incorpora os arquivos \textit{SlackBuild} e \textit{slack-required} � estrutura de diret�rios do \textit{Slack.Sarava}, na c�pia local.


\section{Criando o SlackBuild de um aplicativo}

Para fazer um \textit{SlackBuild} com o \textit{mkbuild} � necess�rio criar um arquivo com os par�metros que deseja que sejam passados para o modelo. Um arquivo de configura��o simples, \textit{sample-Pyrex-small.mkbuild}, � apresentado abaixo:

\begin{verbatim}
#--------------------
# Variables
#--------------------
# Author name
[[SLACKBUILD AUTHOR]]="Adalberto Sim�o Nader"

#
# Complete URL address or URL base address ( without $SRC_NAME-$VERSION... )
[[DOWNLOAD FOLDER URL]]="http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/Pyrex-0.9.5.1a.tar.gz"

#
# Default enable sections:
#      head, set_variables, slkflags, start_structure, untar_source,
#      make_package, install_package, build_package
# Warning: don't remove '#>>' and "#<<" tags.
#>> Start SlackBuild Sections:
 on: slackbuildrc
 on: slkflags
 on: error_codes
 on: download_source
 on: configure
 on: strip_binaries
 on: install_documentation
 on: slackdesc
 on: clean_builds
#<< End SlackBuild Sections

#------------------
# Sections changes
#------------------
#>slackdesc
pyrex: Pyrex by Slack.Sarava
pyrex:
pyrex: Pyrex is a language specially designed for writing Python extension
pyrex: modules. Its designed to bridge the gap between the nice, high-level,
pyrex: easy-to-use world of Python and the messy, low-level world of C.
pyrex:
pyrex:
pyrex:
pyrex:
pyrex:
pyrex:
#<slackdesc
\end{verbatim}

Isto � o suficiente para fazer o \textit{SlackBuild} do \textit{Pyrex}. Para construir o \textit{SlackBuild} basta chamar o \textit{mkbuild} passando este arquivo de par�metros:

\begin{verbatim}
$ mkbuild sample-Pyrex-small.mkbuild
$ ls
pyrex.SlackBuild      pyrex.mkbuild                sample-Pyrex-small.mkbuild
pyrex.SlackBuild.old  sample-Pyrex-large.mkbuild
\end{verbatim}

Ele ir� criar os arquivos \textit{pyrex.SlackBuild} e \textit{slack-required}, se o par�metro \textit{SLACK REQUIRED} for passado. Arquivos antigos ser�o renomeados para \textit{.old}.

Um modelo mais completo, com todos os par�metros, \textit{sample-Pyrex-large.mkbuild}, � disponibilizado junto com o \textit{mkbuild}. Nas se��es seguintes � dado uma breve explica��o dos par�metros e se��es deste arquivo de par�metros.


\subsection{Descri��o dos par�metros do arquivo \textit{.mkbuild}}

Embora existam muitos par�metros no modelo \textit{generic.mkSlackBuild}, nem todos s�o necess�rios para a constru��o do \textit{SlackBuild}. Neste exemplo foram passados apenas dois par�metros:

\begin{description}
 \item[SLACKBUILD AUTHOR] nome do autor;
 \item[DOWNLOAD FOLDER URL] url completa da fonte do pacote.
 \end{description}

O mkbuild remove o nome do pacote, vers�o, assinatura do autor e v�rias outras informa��es destes dados, seguindo alguns crit�rios descritos a seguir.

A sintaxe para a passagem de par�metros ao \textit{mkbuild}\begin{verbatim}
[[DESCRI��O DO PAR�METRO]]="Par�metro entre aspas duplas"
\end{verbatim}

As aspas duplas podem ser omitidas\footnote{Nas vers�es inferiores a 0.9.9, do \textit{mkbuild}, o aspas duplo � o delimitador e por isto � obrigat�rio. Um par�metro passado sem o aspas duplo ser� interpretado como um par�metro vazio, nestas vers�es.}. O delimitador utilizado pelo \textit{mkbuild} � o primeiro caracter igual ($=$) a aparecer na linha. Qualquer outra ocorr�ncia de caracter igual ser� lido como parte do par�metro. O mesmo acontece com coment�rios colocados ap�s o caracter igual. Por exemplo, na linha abaixo:

\begin{verbatim}
[[PAR�METRO TEST]]=Este par�metro � um teste            # Este coment�rio ser� lido.
\end{verbatim}

\noindent a leitura do par�metro \textit{PAR�METRO TEST} retornar�:

\begin{verbatim}
Este par�metro � um teste            # Este coment�rio ser� lido.
\end{verbatim}

Segue abaixo uma breve descri��o dos par�metros utilizados pelo modelo \textit{generic.mkSlackBuild}.

\subsubsection{SLACKBUILD AUTHOR e SLACKBUILD AUTHOR INITIALS}

O par�metro \textit{SLACKBUILD AUTHOR} deve conter o nome ou apelido do respons�vel pelo \textit{SlackBuild}. A declara��o deste par�metro � obrigat�ria e sem ele o \textit{mkbuild} ir� interromper a constru��o do \textit{SlackBuild}.

\begin{verbatim}
[[SLACKBUILD AUTHOR]]="Adalberto Sim�o Nader"
\end{verbatim}

O par�metro \textit{SLACKBUILD AUTHOR INITIALS} � constru�do � partir da primeira letra de cada nome passado pelo par�metro \textit{SLACKBUILD AUTHOR}, em letras min�sculas. Neste caso a assinatura ser� ``\textit{asn}'', as iniciais de \textit{Adalberto Sim�o Nader}.

Caso deseje passa outro valor basta adicionar a linha abaixo, ao arquivo de par�metros.

\begin{verbatim}
[[SLACKBUILD AUTHOR INITIALS]]="adal"
\end{verbatim}


\subsubsection{DOWNLOAD FOLDER URL}

O par�metro \textit{DOWNLOAD FOLDER URL} � outro par�metro obrigat�rio em um arquivo \textit{.mkbuild}. Este par�metro pode conter o endere�o completo da fonte do pacote:

\begin{verbatim}
[[DOWNLOAD FOLDER URL]]="http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/Pyrex-0.9.5.1a.tar.gz"
\end{verbatim}

Neste caso v�rias informa��es s�o removidas deste par�metro. Este par�metro pode ainda conter apenas o endere�o do diret�rio de onde a fonte poder� ser encontrada:

\begin{verbatim}
[[DOWNLOAD FOLDER URL]]="http://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/"
\end{verbatim}

Neste caso, � necess�rio a defini��o de outros par�metros necess�rios para a constru��o do nome do pacote, como \textit{SOURCE NAME, PACKAGE NAME, VERSION e EXTENSION}, descritos a seguir.


\subsubsection{SOURCE NAME, PACKAGE NAME, VERSION e EXTENSION}

O \textit{SOURCE NAME} � removido do \textit{URL}, caso n�o seja passado como par�metro.

Para que o \textit{SOURCE NAME} seja carregado corretamente, � necess�rio que o nome da fonte tenha a forma padr�o:

\begin{verbatim}
NOME-DO-PROGRAMA-VER.S�O.tar.EXTENS�O
\end{verbatim}

O nome do programa pode ter v�rios campos separados por um h�fen ``-'', j� a vers�o, pode possuir v�rios n�meros, ou mesmo letras, separados por ponto e terminados por um ``.tar.''. A extens�o deve vir logo ap�s o ``.tar.''.

A vari�vel \textit{PACKAGE NAME}, � constru�da com o mesmo valor de \textit{SOURCE NAME}, mas em letras min�sculas.

Desta forma, a divis�o dos campos no exemplo do aplicativo Pyrex, acima, ter� o mesmo valor que as declara��es dos par�metros abaixo:

\begin{verbatim}
[[SOURCE NAME]]="Pyrex"

[[PACKAGE NAME]]="pyrex"

[[VERSION]]="0.9.5.1a"

[[EXTENSION]]="gz"
\end{verbatim}

Observe que a preced�ncia � a passagem do valor como par�metro, e n�o a sua constru��o.


\subsubsection{SOURCE NAME CONSTRUCTION STRING}

Deve conter uma string para a constru��o do nome da fonte. O valor padr�o �

\begin{verbatim}
[[SOURCE NAME CONSTRUCTION STRING]]="$SRC_NAME-$VERSION.tar.$EXTENSION"
\end{verbatim}

Observe que os par�metros passados n�o s�o processados, como ocorre em uma leitura de uma vari�vel num bash \textit{script}. Eles s�o lidos como se fossem uma cadeia de caracteres, por isto n�o tente escapar o \$ na constru��o do nome, ou o nome da fonte n�o ser� constru�do corretamente na execu��o do \textit{SlackBuild}.

Embora a vari�vel \$EXTENSION apare�a na constru��o do nome da fonte, seu valor ser� substitu�do durante a constru��o do \textit{SlackBuild} pelo \textit{mkbuild}. Por isto que n�o existe inicializa��o desta vari�vel no modelo \textit{generic.mkSlackBuild}.


\subsubsection{DECOMPRESSOR e DECOMPRESSOR TEST FLAG}

Os par�metros \textit{DECOMPRESSOR} e \textit{DECOMPRESSOR TEST FLAG} s�o determinados por an�lise do par�metro \textit{EXTENSION}, com os valores apresentados na tabela abaixo:
\\\\
\begin{tabular}{l|l|c}
\hline
EXTENSION & DECOMPRESSOR & DECOMPRESSOR TEST FLAG \\
\hline
gz, GZ   & gunzip  & -t \\
bz2, BZ2 & bunzip2 & -t \\
zip, ZIP & unzip   & -t \\
\hline
\end{tabular}

Caso possua uma fonte comprimida por um compressor diferente, passe estes par�metros pelo arquivo de par�metros, \textit{.mkbuild}.

\begin{verbatim}
[[DECOMPRESSOR]]="programa descompressor"
[[DECOMPRESSOR TEST FLAG]]="flag de teste"
\end{verbatim}


\subsubsection{DOCUMENTATION FILES}

O valor padr�o para \textit{DOCUMENTATION FILES} �

\begin{verbatim}
[[DOCUMENTATION FILES]]="NEWS TODO README AUTHORS INSTALL ChangeLog MAINTAINERS COPYING readme.*"
\end{verbatim}

Estes s�o os nomes mais comuns dos arquivos de documenta��o, que geralmente s�o disponibilizados na raiz do diret�rio das fontes dos programas. O ideal � descompactar a fonte e verificar os arquivos de documenta��o dispon�veis, para pass�-los como par�metro.


\subsubsection{PREFIX}

A maioria das fontes de programas disponibilizados atualmente, utilizam uma op��o \textit{--prefix} no seu \textit{configure}, para determinar o diret�rio onde o programa ser� instalado. No \textit{Slackware} o valor desta vari�vel variava entre \verb!/usr!, \verb!/opt! e \verb!/usr/X11!. Na nova vers�o do \textit{Slackware}, prov�vel 12.0, os diret�rios \verb!/opt! e \verb!/usr/X11! foram removidos e todos os pacotes est�o sendo instalados em \verb!/usr!. Por isto o seu valor padr�o � \verb!/usr!.

\begin{verbatim}
[[PREFIX]]="/usr"
\end{verbatim}


\subsubsection{NUMBER OF JOBS}

O par�metro \textit{NUMBER OF JOBS} � usado para indicar ao comando \textit{make} o n�mero de processos que podem ser iniciados simultaneamente durante a compila��o. A grande maioria dos programas atuais podem ser compilados em dois ou mais processos simult�neos. Isto reduz sensivelmente o tempo de compila��o de um pacote, mesmo que sua m�quina possua apenas um processador. Muitos \textit{SlackBuilds} oficiais do \textit{Slackware} utilizam este par�metro configurado para ``7'' processos, ou seja ``-j7''. Este par�metro pode ser passado como um n�mero ou com a flag \textit{-j}, como nos exemplos abaixo.

\begin{verbatim}
[[NUMBER OF JOBS]]="7"
\end{verbatim}

\noindent ou

\begin{verbatim}
[[NUMBER OF JOBS]]="-j7"
\end{verbatim}

Por padr�o, este par�metro est� desabilitado.

\subsubsection{SLACK REQUIRED}

Este par�metro � composto pela lista de pacotes necess�rios para a constru��o do aplicativo. Estes pacotes ser�o arranjados no arquivo \textit{slack-required}. O formato para este par�metro � apresentado na linha abaixo:

\begin{verbatim}
DEPEND�NCIA_1 [CONDI��O_1] [VERS�O_1]: DEPEND�NCIA_2 [CONDI��O_2] [VERS�O_2]: DEPEND�NCIA_3 [CONDI��O_3] [VERS�O_3]: ...
\end{verbatim}

As condi��es poss�veis s�o apresentadas na tabela abaixo:
\\\\
\begin{tabular}{c|l}
\hline
CONDI��O & significado \\
\hline
$=$  & igual \\
$>$  & maior \\
$>=$ & maior ou igual \\
\hline
\end{tabular}

Os campos \textit{CONDI��O} e \textit{VERS�O} podem ser omitidos. Cada pacote da depend�ncia deve ser separado por um ``:''.

Para o \textit{SLACK REQUIRED} definido com a linha:

\begin{verbatim}
[[SLACK REQUIRED]]="dep1 >= 1.1.1: dep2 >= 2.2.2:dep3:dep4:dep5 = 1.0"
\end{verbatim}

\noindent ser� gerado o arquivo \textit{slack-required} abaixo:

\begin{verbatim}
# Dependency list to Pyrex
#
# dependency [condition] [version]]
dep1            >=              1.1.1
dep2            >=              2.2.2
dep3
dep4
dep5            =               1.0
\end{verbatim}


\subsubsection{SLACKBUILD MODEL}

Este par�metro cont�m o nome do modelo utilizado para gerar os \textit{SlackBuilds}. O valor padr�o � \textit{generic.mkSlackBuild}. Outros modelos podem ser utilizados adicionando-se o arquivo do modelo no diret�rio \verb!/etc/simplepkg/defaults/mkbuild/!. A linha abaixo

\begin{verbatim}
[[SLACKBUILD MODEL]]="generic.mkSlackBuild.2"
\end{verbatim}

\noindent define o modelo \textit{generic.mkSlackBuild.2} para a constru��o do \textit{SlackBuild}.


\subsubsection{SLACKBUILD PATH}

Este par�metro � necess�rio apenas para uso com a op��o ``-c'', \textit{commit}. Ele indica o diret�rio, na estrutura de diret�rios do Slack.Sarava, onde o \textit{SlackBuild} constru�do dever� ser armasenado. Se este par�metro n�o for passado, o \textit{mkbuild} ir� pesquis�-lo no reposit�rio do \textit{gentoo}, pela \textit{internet}. Caso n�o consiga resolver com esta pesquisa, o \textit{SlackBuild} ser� colocado em um diret�rio padr�o, para \textit{scripts} n�o classificados, em \verb!others/unclassified/$PKG_NAME!.

\begin{verbatim}
[[SLACKBUILD PATH]]="dev/python/pyrex"
\end{verbatim}

A estrutura de diret�rios para armazenamento dos \textit{SlackBuilds} adotadas pelo \textit{Slack.Sarava} segue o mesmo padr�o do \textit{portage} do \textit{gentoo}.


\subsubsection{Outros Par�metros}

Outros par�metros podem ser passados para substitui��o no modelo \textit{generic.mkSlackBuild}, como o par�metro \textit{MD5SUM EXTENSION} no trecho abaixo:

\begin{verbatim}
#[[PATCH FILES]]=""
#[[MD5SUM CODE]]=""
[[MD5SUM EXTENSION]]="047574eb5d1b7848a70d4130035f1f3c"
#[[SIGNING KEY]]=""
#[[SIGNING KEY URL]]=""
#[[PATCH FILES]]=""
\end{verbatim}

Al�m destes par�metros padr�es do \textit{generic.mkSlackBuild}, qualquer outro par�metro pode ser criado e inclu�do ao modelo. Para isto � necess�rio que seu nome seja inclu�do entre duplo colchetes como no exemplo abaixo:

\begin{verbatim}
[[NEW PARAMETER]]="new value"
\end{verbatim}

O \textit{mkbuild} ir� procurar a ocorr�ncia da seq��ncia \textit{[[NEW PARAMETER]]} no modelo passado por \textit{[[SLACKBUILD MODEL]]} e ir� substitui-lo por ``\textit{new value}''.


\subsection{Habilitando se��es}

As se��es do modelo \textit{generic.mkSlackBuild} s�o habilitadas na se��o iniciada por ``\#$>>$'' e terminada por ``\#$<<$'', no arquivos de par�metros. Como as se��es est�o desabilitadas no modelo padr�o, \textit{generic.mkSlackBuild}, esta se��o do arquivo de par�metros tem apenas que habilitar as se��es desejadas do modelo.

\begin{verbatim}
#>> Start SlackBuild Sections:
 on: slackbuildrc
 on: slkflags
 on: error_codes
 on: download_source
 on: configure
 on: strip_binaries
 on: install_documentation
# linha ignorada
 on: slackdesc
 on: clean_builds
#<< End SlackBuild Sections
\end{verbatim}

No caso do exemplo acima, s�o habilitadas as se��es: \textit{slackbuildrc}, \textit{slkflags}, \textit{error\_codes}, \textit{download\_source}, \textit{configure}, \textit{strip\_binaries}, \textit{install\_documentation}, \textit{slackdesc} e \textit{clean\_builds}. Linhas iniciadas por uma tralha, \#, s�o ignoradas.


\subsubsection{Substitui��o de se��es do modelo}

Em algumas situa��es pode ser necess�rio substituir o conte�do de uma se��o. Estas mudan�as nas se��es s�o feitas por iniciar uma se��o, no arquivo de par�metros, por ``\verb!#>nome_da_se��o!'' e terminar por ``\verb!#<nome_da_se��o!''. Quando o \textit{mkbuild} localiza estas se��es no arquivo de par�metros, ele substitui as se��es padr�es, de mesmo nome, pelo conte�do definido no arquivo de par�metros. Por exemplo:

\begin{verbatim}
#>untar_source
# Untar program

# Change to temp dir
cd "$TMP"

# Uncompress e untar source
gunzip "$SRC_DIR/$SRC" | tar --no-same-owner --no-same-permissions -xvf || exit $ERROR_TAR

# Change to source dir
cd "$PKG_SRC"
#<untar_source
\end{verbatim}

\noindent ir� substituir a se��o \textit{untar\_source} do modelo \textit{generic.mkSlackBuild}, pelo conte�do definido no arquivo de par�metros acima. A �nica exce��o a esta regra � a se��o \textit{slackdesc}.

\begin{verbatim}
#>slackdesc
pyrex: Pyrex by Slack.Sarava
pyrex:
pyrex: Pyrex is a language specially designed for writing Python extension
pyrex: modules. Its designed to bridge the gap between the nice, high-level,
pyrex: easy-to-use world of Python and the messy, low-level world of C.
pyrex:
pyrex:
pyrex:
pyrex:
pyrex:
pyrex:
#<slackdesc
\end{verbatim}

Para esta se��o, o \textit{mkbuild} ir� substituir o par�metro \textit{[[SLACK-DESC]]} pelo conte�do definido entre \verb!#>slackdesc! e \verb!#<slackdesc!, al�m de redimensionar a r�gua de orienta��o do \textit{slack-desc}.


\section{Considera��es Finais}

V�rios par�metros podem ser passados ao \textit{mkbuild} pela linha de comando. Um manual completo destas op��es pode ser consultado passando flag \textit{-h}, ao \textit{mkbuild}:

\begin{verbatim}

NAME
        mkbuild - create SlackBuild script from mkbuild_file input

SYNOPSIS
        mkbuild [OPIONS] [mkbuild_file]

DESCRIPTION
        <mkbuild_file> input file with build rules and variables

        Input options:
            -a, --author <author_name>
                author name
            -ai, --author_initials <initials>
                author signature
            -cs, --const_string <string>
                construction string to source name
            -u, --url <url_address>
                url address to source
            -pn, --pkg_name <package_name>
                package name
            -sn, --src_name <source_name>
                source name
            -pv, --pkg_version <version>
                package version
            -md, --model <SlackBuild_model>
                SlackBuild model file
            -j, --jobs <jobs_number>
                Number of jobs to run simultaneously
            --prefix <install_dir>
                Prefix install directory

        Program options:
        -h, --help
            this help mesage
        -c, --commit
            commit SlackBuilds in local svn tree
        -v, --version
            program version

EXAMPLES
        mkbuild --prefix /usr/local pyrex.mkbuild
            build pyrex.SlackBuild with prefix /usr/local and pyrex.mkbuild
            variables and options definitions.

AUTHOR
        Written by Rduson R. Alves


REPORTING BUGS
        Report bugs to <alves_list@yahoo.com.br>

COPYRIGHT
        Copyright � 2006 Free Software Foundation, Inc.
        This is free software. You may redistribute copies of it under the
        terms of the GNU General Public License
        <http://www.gnu.org/licenses/gpl.html>. There is NO WARRANTY, to the
        extent permitted by law.
\end{verbatim}

Uma op��o interessante � a \textit{-c}, utilizada para adicionar e atualizar uma c�pia da lista de \textit{SlackBuilds}, localmente.


\end{document}