\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}

