# Deadly-Wish

Grupo: Victor Arnaud e Vitor Nere

# Introdução
### Finalidade

Este documento apresenta um plano de Gerência de Configuração de software para o jogo Deadly-Wish. Através deste, define-se diretrizes e atividades para o controle de versões e configuração do sistema em suporte ao desenvolvimento/deploy do projeto.
Link para o repositório upstream: https://github.com/fgagamedev/Deadly-Wish

### Escopo

O jogo Deadly-Wish é um jogo de batalha em arena na qual precisa-se de 4 jogadores com joysticks para jogar em que cada inimigo tem que abater a torre do outro o ultimo inimigo que sobrar é o vencedor
Como objetivos deste trabalho, definiu-se a contribuição nos seguintes aspectos:
* Criar um docker para rodar o código de forma automatizada e um cmake para roda-lo multiplataforma
* Empacotamento deb;
* Inserir scripts e um README explicando o projeto, instalação e Tutorial.

# Visão Geral

Nas seções seguintes deste documento, define-se um cronograma para as atividades de gerenciamento de configuração, bem como todo os resultados obtidos durante este processo. Inclui-se, portanto, a documentação da configuração e execução das tarefas executadas para alcançar os objetivos propostos.
Link para o repositorio do projeto de GCS: https://github.com/VictorArnaud/Deadly-Wish

# Cronograma

| Data - Início / Previsão de Término | Atividade |
| 20/04 – 24/04 | Criação do plano de gerênciamento de configuração |
| 25/04 – 15/05 | - Instalação e criação do README - Implementação da GCS do ambiente de desenvolvimento/deploy (DOCKER, cmake) |
| 15/05 – 15/06 | - Enpacotamento deb - Criar relatorio final |
| 19/06/2016 | Apresentação final do Projeto |

# Ferramentas

| Ferramenta | Descrição |
| Github | Repositorio de aplicações que utiliza do sistema de versionamento GIT |
| cmake | Sistema multiplataforma de geração de instalação automatizada. |
| Debhelper | Debhelper é usado para ajudar a construir um pacote debian |
| build-essential | Pacote que contem informações de listas informativas de pacotes que são considerados essenciais para a construção de pacotes Debian. |
| devscripts | O pacote devscripts fornece uma colecção de scripts que podem ser usados para desenvolvedores Debian e outros que desejam construir pacotes Debian. |
| Docker | Ferramenta de virtualização de ambiente |

# Docker e Cmake

Problemas encontrados
Docker:
- Em relação ao DOCKER conseguimos implantar o jogo com sucesso dentro do docker, ele já esta instalando todas as dependências e gerando o executavel com um único comando (docker-compose up), porém como o docker não foi criado para trabalhar com interface gráfica ou GUI tivemos dificuldade para rodar o jogo ao executar o comando.
CMake:
- Em relação ao CMAKE conseguimos configurar para gerar o make file do jogo, em primeiro momento encontramos uma dificuldade em relação a biblioteca externa utilizada no jogo. Até que configuramos o CMAKE da biblioteca e do kernel do jogo 'linkando' as duas entre si, assim o Makefile gerado, compilou o jogo e gerou as bibliotecas necessárias.
O que tentamos fazer
- Rodar o jogo ao executar um único comando do docker e criar um modo de compilação do jogo automatizado em multiplataforma com o cmake
- Um dos objetivos também era criar scripts de instalação para o jogo e um README com o processo de instalação, isso foi realizado com sucesso.
- CMAKE
* Criamos um arquivo CMakeLists.txt no diretório raiz do projeto e configuramos de acordo com suas pastas de source e headers.
* Inicialmente o Makefile gerado pelo CMake não instalava as bibliotecas externas, somente instalando o jogo.
* Após algumas pesquisas e tentativas, conseguimos configurar o CMake das bibliotecas externas, assim o jogo tornou-se mais independente da plataforma, somente precisando da biblioteca SDK instalada.
* Modificamos o README com o processo de instalação
** Na pasta raiz do projeto: mkdir build && cd build
** Na pasta build: cmake .. && make
Resultado final
- Os scripts de instalação e o README estão pronto (100%) já o DOCKER não tivemos sucesso em rodar o jogo através dele por problemas citados acima, porém o docker ta criando o executavel do jogo de modo automatico e com um único comando logo consideramos que 80% do objetivo foi concluido, já o CMAKE foi realizado com sucesso.

# Empacotamento

Problemas encontrados
Tivemos vários problemas em relação ao empacotamento, principalmente por causa do cmake, o cmake estava gerando um binario local e o makefile estava sendo criado dentro de uma pasta build, porém consertamos isso colocamos o makefile na pasta raiz e o binario do jogo foi criado na bin do linux para ser executado em qualquer parte do S.O, isso iria ajudar bastante no empacotamento do software já que o empacotamento roda o make e o make install do Makefile da pasta raiz e o binario tem ser gerado em qualquer parte do S.O.
Porém por algum motivo o primeiro pacote gerado não gerou o binario dentro do pacote .deb, após várias tentativas percebemos o padrão dos arquivos dentro do pacote .deb. A partir do binário gerado pelo Makefile, utilizamos para realizar o empacotamento e após testar a instalação, foi possível executar o jogo pelo terminal de qualquer lugar porém o link com as bibliotecas externas e os assets não tinha funcionado, foi quando mexemos no código fonte do jogo para pegar a biblioteca de "usr/lib/" e os assets de "usr/share/deadly_wish/".
Com isso o empacotamento foi realizado com sucesso e se encontra na release do produto.
O que tentamos fazer
Os seguintes passos foram realizados para o empacotamento:
1. No inicio pensamos em criar uma jaula para o empacotamento, mas decidimos que não era necessário pois não iriamos jogar o pacote no debian, somente gerar o pacote.
2. Com isso a gente pegou o código fonte e gerou um tar.gz com o seguinte formato: deadlywish-1.0.tar.gz para começar o empacotamento através da release do produto.
3. Verificamos a licença dos diversos arquivos para ter certeza que não há licença que não seja de Software livre com o comando: egrep -sriA25 '(public dom|copyright)' *
4. Logo após fizemos o processo de debianização com o dh_make: dh_make -f ../deadlywish-1.0.tar.gz -c gpl3
5. Removemos arquivos que não iriamos usar da pasta debian, deixando somente o changelog que é o log de mudanças do empacotamento, o compat que é a compatibilidade do debian help que estamos utilizando, o control para inserir informações do codigo fonte e do seu binario, o copyright para inserir informações da licença do software, e o cerebro do empacotamento que é o rules, além do watch para observar e notificar novas atualizações do empacotamento.
6. Criamos o diretório onde dele seria gerado o .deb, nesse diretório foi inserido a pasta "DEBIAN" onde fica os arquivos de configuração do empacotamento, a pasta "usr/bin/" com o binário do jogo gerado pelo Makefile, a pasta "usr/lib" com a biblioteca da engine e do kernel, e a pasta "usr/share/deadly_wish" com os assets do jogo.
7. Com o diretório devidamente configurado, utilizamos o comando para gerar o pacote: dpkg-deb -b "diretório/" deadlywish_1.0_amd64.deb
Resultado final
Pacote gerado com sucesso, disponivel na release do produto no link:
https://github.com/VictorArnaud/Deadly-Wish/releases/download/deadlywish-1.0/deadlywish_1.0_amd64.deb

# Vídeos de Apresentação

Deadly Wish Apresentação