aboutsummaryrefslogtreecommitdiff
path: root/trunk/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}