Project

General

Profile

Statistics
| Branch: | Revision:

automacao-labi / documento.tex @ 85dc6d05

History | View | Annotate | Download (12.4 KB)

1
\documentclass{report}
2
\usepackage[T1]{fontenc} % Fontes T1
3
\usepackage[utf8]{inputenc} % Input UTF8
4
\usepackage[backend=biber, style=ieee]{biblatex} % para usar bibliografia
5
\usepackage{csquotes}
6
\usepackage{blindtext} % Gerar texto automáticamente
7
\usepackage[printonlyused]{acronym}
8
\usepackage{hyperref} % para autoref
9
\usepackage{color}
10
\usepackage{acronym}
11
\usepackage{graphicx}
12
\usepackage{verbatim}
13

    
14

    
15

    
16
\bibliography{bibliografia}
17

    
18

    
19
\begin{document}
20
%%
21
% Definições
22
%
23
\def\titulo{Ferramentas de automação}
24
\def\data{Entregue dia 29/11/2015}
25
\def\autores{Manuel Costa, Henrique Ferreira}
26
\def\autorescontactos{manuel.alejandro@ua.pt, riques@ua.pt}
27
\def\versao{v1.0}
28
\def\departamento{DETI}
29
\def\logotipo{UA.jpg}
30
\def\uc{LABI}
31
\def\local{Aveiro}
32
%
33
%% CAPA %%
34
%
35
\begin{titlepage}
36

    
37
\begin{center}
38
%
39
\vspace*{50mm}
40
%
41
{\Huge \titulo}\\ 
42
{\Large \uc}\\
43
%
44
\vspace{10mm}
45
%
46
{\LARGE \autores}\\ 
47
%
48
\vspace{30mm}
49
\end{center}
50
%
51
\begin{flushright}
52
\end{flushright}
53
\end{titlepage}
54

    
55
%
56
%
57
%%  Página de Título %%
58
%
59
%
60
\title{%
61
{\Huge\textbf{\titulo}}\\
62
{\Large \departamento}
63
}
64
%
65
\author{%
66
    \autores \\
67
    \autorescontactos
68
}
69
%
70
\date{\data}\\
71
%
72
\maketitle
73

    
74
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
75
% RESUMO
76
%
77
%
78
\pagenumbering{roman}
79

    
80
\begin{abstract}
81

    
82
resumo de 200-300 palavras.
83
\end{abstract}
84

    
85

    
86
\tableofcontents
87

    
88

    
89
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
90
\clearpage
91
\pagenumbering{arabic}
92

    
93
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
94
\chapter{Introdução}
95
\label{chap.introducao}
96

    
97
Este trabalho surge no âmbito da Unidade Curricular \ac{LABI} do primeiro ano do \ac{miect}
98
Entre os temas disponíveis, optámos por este uma vez que iremos abordar, ainda este ano, estes conteúdos em outras unidades curriculares.
99

    
100
Este documento está dividido em quatro capítulos. Depois desta introdução, no \autoref{chap.descricao} será descrito o trabalho, no \autoref{chap.metodologia} é apresentada a metodologia seguida, no \autoref{chap.resultados} são apresentados os resultados obtidos, sendo estes discutidos no \autoref{chap.analise}. Finalmente, no \autoref{chap.conclusao} são apresentadas as conclusões do trabalho.
101

    
102
\part{GNU \textit{Autotools}}
103
\label{part.gnu}
104
\chapter{GNU}
105
\label{chap.gnu}
106
\section{Apresentação}
107
\subsection{O que é?}
108
\ac{GNU} é um sistema operacional tipo UNIX que está aberto a qualquer utilizador (\textit{open-source}) iniciado por Richard Stallman em 1984. O projecto foi crescendo e eventualmente surgiram novas ferramentas associadas como compiladores, editores de texto, etc.
109
\section{GNU Build System}
110
\label{s.gnubs}
111
Uma das ferramentas mais populares associadas ao projecto \ac{GNU} é o \textit{GNU Build System}. Também conhecido como \textit{Autotools}, são uma série de utencílios de programação que permite aos utilizadores transportar mais facilmente o seu código fonte para outros sistemas UNIX. O \ac{GNU} \textit{Autotools} faz parte de um outro projecto chamado \textit{\ac{GNU} Toolchain}. 
112
\subsection{GNU Make}
113
\label{ss.gnumake}
114
Para compreender melhor o que são e qual o potencial das \textit{Autotools}, temos que perceber o conceito duma outra ferramenta: o \textit{\ac{GNU} Make}.
115
\textit{Make} é um utilitário que compila automaticamente programas e bibliotecas do código fonte através de um ficheiro \textit{Makefile} que contém uma série de instruções dadas pelo utilizador. 
116
Se tivermos um projecto de grandes dimensões torna-se um desafio compilar todos os ficheiros manualmente. É um processo repetitivo e cansativo além de estar sujeito a condicionantes dos sistemas operativos. Por exemplo, compilar um determinado projecto pode requerer variáveis do sistema que,possivelmente, variam entre sistemas operativos. Desta forma, é muito mais prático e eficaz compilar o projecto através de um \textit{Makefile}.
117
\subsubsection{Exemplo}
118

    
119
\begin{verbatim}
120
.PHONY: all clean cleanall
121
files =  *.class
122

    
123
all: $(files)
124

    
125
%.class: %.java
126
	@javac $^
127
	@echo "Compiling java files..."
128
clean: 
129
	@rm -f *.tmp *.java~
130
	@echo "Cleaning temporary files..."
131
cleanall: clean
132
	@rm -f *.class
133
	@echo "Cleaning .class files..."	
134
\end{verbatim}
135

    
136
Neste exemplo muito básico, podemos verificar que:
137
\begin{enumerate}
138
\item É possível declarar variáveis dentro de um \textit{Makefile} como fazemos,por exemplo,em JAVA. No nosso caso estámos a indicar que qualquer ficheiro do tipo .class fica armazenado na variável \textit{files}
139
\item Existem regras e dependências. Neste caso, para gerar qualquer ficheiro do tipo .class é preciso que existam ficheiros fonte .java.
140
\item As instruções são dadas por comandos \textit{bash} iguais aos que são utilizados no terminal. Neste caso, para um ficheiro qualquer .java vai ser gerado um ficheiro .class com o mesmo nome através da execução do comando javac. A instrução \textit{echo} funciona como um \textit{print} para saber que a instrução está a correr (opcional).
141
\item Além de comandos \textit{bash}, os \textit{Makefile} têm instruções e sintaxe própria como por exemplo \$, *. etc.
142
\end{enumerate}
143
As possibilidades são muito mais extensas podendo um \textit{Makefile} conter livrarias ou até métodos próprios.
144
\subsection{GNU Autotools}
145
\label{ss.gnuautotools}
146
Como referido em \autoref{ss.gnumake} o processo de compilar um projecto varia entre sistema operativos. Os compiladores de C são diferentes, assim como algumas livrarias podem não estar presentes em determinados sistemas entre outras dificuldades. Podemos, ainda assim, lidar com isto: código condicional. É possível que, ao compilar um projecto, seja feita uma verificação prévia de determinados pré-requisitos nos sistemas e, caso seja necessário, é também possível ajustar o Makefile para o sistema em que está a ser corrido. Este processo já requer a introdução a dois novos conceitos fundamentais:
147
\begin{enumerate}
148
\item \textit{Autoconf}
149
\item \textit{Automake}
150
\end{enumerate}
151
Existem, porém, mais conceitos associados mas para o nosso caso será suficiente explorar estes dois, como por exemplo \textit{Autoscan} ou \textit{Libtool}.
152
\subsubsection{\textit{Autoconf}}
153
\label{sss.autoconf}
154
Com base num ficheiro configure.ac (ac de auto-config) escrito pelo programador, \textit{autoconf} irá gerar um \textit{script} chamado \textit{configure}. Quando corremos esse \textit{script} é gerado um outro \textit{script} chamado config.status que transforma ficheiros .in (de input) em \textit{Makefiles}. De seguida, \textit{make} utiliza esses \textit{Makefiles} para gerar executáveis.
155
\subsubsection{\textit{Automake}}
156
\textit{Automake} recebe um ficheiro config.h.in e outro chamado \textit{Makefile.am} (am de \textit{auto-make}) e gera o \textit{Makefile.in} mencionado em \autoref{sss.autoconf}. O \textit{automake} também faz verificações a determinadas dependências (como por exemplo \textit{header files}). 
157
\subsubsection{Gerar \textit{Makefiles} utilizando \textit{Autotools}}
158
Em primeiro lugar, é necessário saber quais são os ficheiros que o programador vai modificar manualmente:
159
\begin{enumerate}
160
\item \textit{configure.ac}
161
\item \textit{Makefile.am}
162
\end{enumerate}
163
Correndo o \textit{autoscan} são gerados dois ficheiros: \textit{autoscan.log} e \textit{configure.scan}. Altera-se o nome do \textit{configure.scan} para \textit{configure.ac} e este será um dos ficheiros no qual o programador irá escrever. Alternativamente pode-se criar o ficheiro \textit{configure.ac}, fica a critério do programador. Neste ficheiro é possível, por exemplo, introduzir ordens através de macros para verificar a existência de determinado(s) programa(s) no sistema. A macro AC\textunderscore CHECK\textunderscore PROG(variável,programa,yes) irá verificar se existe o programa. Esse resultado irá ficar armazenado numa variável com o valor especificado. Isto é, AC\textunderscore CHECK\textunderscore PROG(JAVAEX,javac,yes) irá verificar se existe o Java no sistema, fica armazenado na variável JAVAEX e esta terá valor de yes(equivalente a true) caso exista. É possível inclusive criar uma condição (if) que irá correr determinados comandos caso a variável seja true ou false. Pode-se também verificar a versão do java para garantir que o programa corre com todas as suas funcionalidades, caso o Java esteja desatualizado pode até nem correr. Existem outras macros que analisam a existência de livrarias específicas no sistema. Se um programa precisa duma determinada livraria para correr certas texturas, então essa livraria tem que estar presente no sistema para compilar o projecto. Ainda no \textit{configure.ac} é indicado onde vão ser gerados os \textit{Makefiles} (em que diretórios/sub-diretórios). 
164
Tendo o \textit{configure.ac} criado e com as devidas instruções, criam-se o(s) ficheiro(s) \textit{Makefile.am}(am de \textit{auto-make}).
165
\begin{figure}
166
\includegraphics[scale=0.5]{Imagem1.png}
167
\caption{Pasta com o projecto e os ficheiros configure.ac/Makefile.am}
168
\end{figure}
169
A pasta contém \textit{configure.ac} e \textit{Makefile.am}. Ainda assim é preciso criar o \textit{Makefile.am} em todos os diretórios (neste caso nos sub-diretórios src e doc). Executa-se \textit{automake} para gerar os ficheiros restantes e o \textit{script configure}já irá gerar ficheiros \textit{Makefile} mas que ainda não fazem praticamente nada pois não tem nenhuma indicação nos ficheiros \textit{Makefile.am}. Em cada um destes ficheiros é que serão indicadas as regras para quando forem solicitados, executar determinados comandos (como por exemplo javac).
170
\begin{figure}
171
\includegraphics[scale=0.5]{Autotools.png}
172
\caption{Diagrama do funcionamento das \textit{Autotools}}
173
\end{figure}
174

    
175

    
176
%
177
%
178
%
179
%
180
%
181
%
182

    
183
\part{ANT Tools}
184
\label{part.ant}
185
\chapter{Apache Ant}
186
\section{Apresentação}
187
\subsection{O que é?}
188
Da mesma forma que \textit{developers} encontraram uma solução para automatizar os processos de compilação, outras alternativas foram surgindo que, à partida, se distinguem em determinadas áreas. São um exemplo as \textit{Apache Ant Tools}, que surgem enquadradas no projecto \textit{Apache Tomcat} em 2000. Criada por James Duncan Davidson, também autor do projecto \textit{Apache Tomcat}.
189

    
190

    
191
\subsection{Ant vs \textit{make} - Diferenças e similaridades}
192

    
193
É uma ferramenta também \textit{open-source} que serve para compilar projectos de programação. Como é natural, tem diferenças relativamente ao \textit{make}:
194
\begin{enumerate}
195
\item Apache Ant usa a linguagem Java e é especializada em compilar projectos em Java. 
196
\item Utiliza \textit{build files} em \textit{XML} nquanto que o \textit{make}, como descrito em \autoref{ss.gnumake}, depende dos \textit{Makefiles}. 
197
\item Para projectos Java, os \textit{Makefiles} não eram 100\% portáteis. Isto é, quando se mudava entre sistemas operativos, existiam alguns problemas trabalhosos de resolver. 
198
\item Os \textit{Makefiles} tinham problemas de compatibilidade com sistemas Windows enquanto que os \textit{build files} são mais independentes das plataformas.
199
\item Para projectos Java, os \textit{Makefiles} eram demasiado complexos. Como o \textit{Ant} é orientado a projectos Java, contém processos internos que libertam o programador para este não precisar de especificar tudo ao pormenor.
200
\end{enumerate}
201

    
202
\subsection{Contras à utilização do \textit{Ant}}
203
Como todas as ferramentas, o \textit{Ant} tem as suas próprias complicações. Uma delas é o facto de os \textit{build files} serem em \textit{XML}, que por si só tem uma complexa síntaxe que torna os ficheiros menos legíveis e compreensíveis.
204

    
205
\part{CMake}
206
\label{part.cmake}
207
\chapter{BLA}
208
\section{BLABLA}
209

    
210
\chapter{Metodologia}
211
\label{chap.metodologia}
212
A pesquisa baseou-se numa primeira fase em resolver exercício do guião para compreender melhor o que são ferramentas de automação. Ao mesmo tempo, foram adquiridos conhecimentos em duas ferramentas específicas: \ac{GNU} Make e \ac{GNU} auto-tools.
213
Foi frequente a utilização de fóruns informáticos e web-sites informativos.
214
\chapter{Resultados}
215
\label{chap.resultados}
216
Descreve os resultados obtidos.
217

    
218
\chapter{Análise}
219
\label{chap.analise}
220
Analisa os resultados.
221

    
222
\chapter{Conclusões}
223
\label{chap.conclusao}
224
Apresenta conclusões
225

    
226
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
227
\chapter*{Acrónimos}
228
\begin{acronym}
229
\acro{ua}[UA]{Universidade de Aveiro}
230
\acro{miect}[MIECT]{Mestrado Integrado em Engenharia de Computadores e Telemática}
231
\acro{glisc}[GLISC]{Grey Literature International Steering Committee}
232
\acro{GNU}[GNU]{GNU's Not Unix!}
233
\acro{LABI}[LABI]{Laboratórios de Informática}
234
\end{acronym}
235

    
236

    
237

    
238
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
239
\printbibliography
240

    
241
\end{document}