Zetta-Ømnis Packages Creator
Escrito por Carlos B. Feitoza Filho | |
Categoria: Componentes | |
Categoria Pai: Delphi | |
Acessos: 5552 |
História (08/07/2017)
Estava eu na minha jornada solitária de padronização do User Control DXCE, quando pensei que, no momento em que eu precisasse de ajuda eu também precisaria testar o componente em vários Delphis e por isso eu precisaria pedir para que instalassem-no. Eu também sabia que ajustes precisariam ser feitos para adequação do componente a cada Delphi e por isso eu precisaria criar pacotes de instalação para cada versão que fosse testada. A criação destes pacotes normalmente é um trabalho árduo e como eu pretendo manter o alto padrão no User Control DXCE eu não poderia simplesmente criar de forma manual e por demanda, cada um dos pacotes necessários.
Comecei a buscar uma solução pronta para fazer o que eu queria e a achei, no entanto a solução não era satisfatória. Eu queria algo que copiasse/ajustasse os paths do projeto, que são os pontos de maior problema e a solução que eu encontrei não fazia isso. Restou a mim pôr a mão na massa e desenvolver o Zetta-Ømnis Packages Creator (ZOPC), que se adequa às minhas necessidades e vai um pouco mais além!
A quem este expert é destinado?
Este expert, claro, é destinado a desenvolvedores de componente que se preocupam em manter o controle de seus pacotes e precisam de uma maneira prática e rápida de gerar pacotes para várias versões de delphi copiando propriedades de um pacote base e com a possibilidade de sobrescrever todas estas propriedades antes da geração final.
O que este expert faz?
Este expert recria os arquivos de um projeto-base (.bdsproj/.dproj e .dpk) em subpastas com nomes padronizados, uma para cada versão de Delphi selecionado. Esta cópia mantém as informações mais importantes do projeto-base e resseta o restante das opções para os padrões do Delphi. Atualmente as informações que são copiadas e mantidas são:
-
Description
-
LibPrefix
-
LibSuffix
-
LibVersion
-
Build Control (ImplicitBuild ON/OFF)
-
Usage Options (DesignOnly, RuntimeOnly ou Ambos)
-
ConditionalDefines
-
DPKFileName
-
UnitAliases
-
NamespacePrefixes
-
DefaultNameSpace
-
UnitOutputDirectory
-
OutputDirectory
-
DCPOutputDirectory
-
SearchPath
-
DebugSearchPath
-
FrameworkSearchPath
-
SystemLibraryRootPath
-
PackageOutputDirectory
-
UnitScopeNames
Nem todas as versões de Delphi suportadas usam todas estas propriedades. As sete primeiras propriedades (destacadas) existem no arquivo .dpk e nos arquivos .bdsproj e .dproj total ou parcialmente. O ZOPC possui uma opção que permite que se escolha se serão usados os dados do .dpk de origem ou do .bdsproj/.dproj de origem. Por padrão o expert usa sempre os arquivos de projeto (.bdsproj ou .dproj).
O restante das propriedades existem exclusivamente nos arquivos .bdsproj ou .dproj, no entanto parte das propriedades que existem em um deles não existe no outro. O arquivo .bdsproj é um arquivo XML de estrutura simples desenvolvido pela Borland, enquanto os arquivos .dproj são XMLs estruturados segundo o MS Build. Os arquivos .dproj são muito mais complexos que os arquivos .bdsproj.
Como se pode observar, apesar de o conjunto de opções copiáveis ser relativamente extenso, ele não inclui opções avançadas, tais como opções de compilação, link ou depuração. Como foi dito anteriormente, estas opções serão ressetadas nos pacotes de destino. Se você fez alterações nestas propriedades você vai ter que alterar pacote por pacote manualmente.
Eu deixei de fora estas propriedades porque eu simplesmente não as altero nunca e queria ter um expert mais simples. Inclur estas propriedades não seria útil para mim e tornaria o fim do desenvolvimento deste expert muito mais longínquo. Felizmente o Zetta-Ømnis Wizards é totalmente open source e se você desejar, pode alterá-lo para que ele se adeque as suas necessidades.
O que este expert não faz?
Este expert não ajusta os arquivos .dpk quanto a cláusula "requires". Isso precisa ser feito individualmente para cada projeto em cada versão de Delphi. Além disso, ele também não copia as propriedades de compilação, link ou depuração, tal como foi dito anteriormente. Caso não tenha ficado claro, este expert também não é capaz de ajustar os arquivos de fonte (.pas) de forma que eles compilem em versões específicas de Delphi. Isso tem que ser feito manualmente.
Requisitos mínimos para o funcionamento adequado
Para que este expert funcione de forma plena é necessário que o pacote de origem (projeto-base) tenha sido aberto no Delphi original, compilado e salvo, de forma que os arquivos necessários sejam criados (.dproj ou .bdsproj), pois as informações que estão nestes arquivos precisam ser lidas.
Outro requisito incomum mas necessário é que os arquivos .dpk prcisam ser codificados como UTF-8 sem BOM (Byte Order Mark). Isso é necessário para compatibilização com os Delphis ANSI suportados (atualmente Delphi 2006 e Delphi 2007). Verifique se seus DPK de origem são UTF-8 sem BOM e caso não sejam, converta-os usando o Notepad++.
Um requisito adicional opcional mas recomendável é que seus arquivos do projeto-base estejam localizados em um subdiretório dentro de um diretório, de forma a organizar os pacotes de cada versão do Delphi em uma subpasta. Veja a imagem:
Na imagem acima UserControl é a pasta do seu componente. prj é a subpasta de projetos e dentro desta existe uma pasta para cada versão do Delphi. Dentro de cada uma destas pastas haverá os aquivos .dpk, .bdsproj e .dproj. A pasta destacada de vermelho é a pasta que contém o projeto-base, a partir do qual todas as outras pastas e arquivos serão criados. Organizando seus projetos dessa forma você ganha em termos de organização e ainda fará o ZOPC funcionar perfeitamente.
Nas instruções a seguir, utilize a imagem acima para entender a opção "Diretório base de destino"
Como utilizar este expert?
- Para utilizar este expert, clique com o botão direito do mouse no projeto de um pacote listado no Project Manager e no menu PopUp acesse o item Zetta-Ømnis Wizards > Packages Creation Tool
A tela do Packages Creation Tool vai aparecer mostrando a sua aba Sumário, onde você verá um resumo dos diretórios que serão criados e das propriedades que serão copiadas, bem como o nome do arquivo de projeto de origem e a versão do Delphi ao qual ele pertence - Clique na aba "Opções de geração" para definir para quais versões de Delphi os pacotes serão gerados bem como o diretório-base de destino e o padrão para o nome dos diretórios que serão criados para agrupar os pacotes de cada versão de Delphi escolhida
O diretório-base de destino apresentado na imagem acima é relativo ao diretório onde o projeto selecionado no passo 1 está. Observando a estrutura de diretórios apresentada na seção anterior (Requisitos mínimos para o funcionamento adequado), conclui-se que esta opção está apontando para o diretório prj. A opção "Padrão de nomes para os diretórios de destino" permite que se utilize parâmetros substituíveis (<N> e <V>) para a formação dos nomes de diretório de destino. Utilize os botões de seleção rápida para selecionar várias versões de Delphi de uma só vez. - A aba "Opções do projeto de origem" exibe aquilo que está gravado nos arquivos .dpk e .dproj de origem. Estas informações serão usadas para criar os arquivos de outras versões de Delphi, cada um em sua pasta
Nesta aba se vêem as opções que estão salvas no arquivo .dpk original. As opções são auto-explicativas. A opção Library suffix tem sempre por padrão o valor <auto>, isso significa que cada novo arquivo .dpk gerado terá esta propriedade preenchida com o valor correto (número) correspondente ao Delphi para o qual o pacote está sendo gerado. É recomendável sempre deixar que o Library suffix seja automático. O checkbox "Usar os campos compartilhadod deste DPK ao gerar os pacotes de destino" se marcado, fará com que as propriedades desta aba sejam usadas ao invés das mesmas propriedades existentes na aba DPROJ, vista abaixo.
Por padrão os dados existentes nesta aba e que existem também na aba DPK serão usados na criação dos arquivos de destino. Caso você queira, poderá selecionar um conjunto específico de configurações, selecionando as opções desejadas nos combos "Plataforma" e "Configuração". Tanto nesta aba, como na aba DPK, use o botão verde do canto superior esquerdo, para recarregar as configurações atuais. Isso lerá novamente os arquivos de origem. OBS.: Uma aba de nome BDSPROJ também existe, mas ela só é exibida quando este expert é executado no Delphi 2006. Ela é bem semelhante à aba DPROJ, mas não contém as opções de Plataforma e Configuração. - As abas "Modelo do DPK", "Modelo do BDSPROJ" e "Modelo do DPROJ" são os arquivos de modelo mínimos que são usados para geração dos arquivos finais. Estes modelos contém placeholders, isto é, textos substituíveis para cada uma das propriedades manipuláveis nas outras abas. Se você quiser, pode usar seu próprio modelo de arquivo que contenha configurações não manipuladas pelo ZOPC e, desde que mantenha os placeholders e saiba o que está fazendo tudo dará certo. Este é um uso avançado do ZOPC.
- Após realizar ajustes necessários ou aceitar os sugeridos, volte a aba Sumário
Note que agora você consegue ver a lista de diretórios que serão criados. O botão da parte de baixo da aba agora está habilitado. Se você estiver satisfeito, clique neste botão para gerar, finalmente, todos os pacotes para todas as versões de Delphi. Ao final, se tudo correr bem você verá a seguinte mensagem
Direitos autorais
Este expert está sendo disponibilizado de forma gratuita e com código-fonte completo. É permitido que ele seja modificado de qualquer forma, mas derivações do mesmo não podem ser vendidas. Tais derivações, se distribuídas, precisam manter-se gratuitas, com código-fonte completo e fazer referência a versão original (esta que eu desenvolvi) por meio de uma menção a esta página incluindo um link para ela. Qualquer desrespeito a estas normas simples tornará você um grandessíssimo filho da puta que merece morrer empalado por mil "negões da picona".
Se este expert for usado ou mencionado em algum outro artigo, seja ele virtual ou não, a regra de menção a mim e ao expert original também se aplica, bem como a maldição do "negão", caso você a ignore.
Garantias
Apesar de eu utilizar este expert com sucesso eu não posso garantir seu pleno funcionamento em todos os ambientes e plataformas, por isso, use-o por sua conta e risco. Eu sempre recomendo que se teste bastante um expert antes de usá-lo. Considere inicialmente seu uso para fins didáticos e somente o use em projetos finais quando estiver certo de que ele está funcionando como você imagina que ele deve funcionar. Não me responsabilizo por qualquer tipo de dano que esse expert possa causar, seja ele material ou moral.
O pacote onde este expert está inserido é o Zetta-Ømnis Wizards e eu utilizei ele mesmo para gerar todos os pacotes para todas as versões do Delphi desde o Delphi 2006, contudo, claro, eu não pude testar em todas as versões e não sei se haverá problemas de instalação. Se houver, serão poucos e talvez baseados em ajustes faltantes no código-fonte (arquivos .pas), coisa que nenhum expert no mundo é capaz de fazer e que você precisará ajustar manualmente.
Histórico de versões
- 1.0:
- O expert inteiro foi criado na versão 1. Não há nada mais a declarar :)
- 1.1:
- Um modelo de arquivo DPK está disponível, tal como é feito para os arquivos .bdsproj e .dproj. Agora será possível criar um DPK totalmente customizado!
- Ajustes visuais na tela do expert
- Foram criados métodos para extração das cláusulas Requires e Contains de arquivos DPK
- Foi corrigida a geração de arquivos .dproj; agora o placeholder %IMPLICITBUILD% está sendo corretamente substituído
- Foi corrigida a geração de arquivos .dproj; agora está sendo considerada corretamente a opção <auto> para o Lib Suffix
- 1.2:
- Os arquivos de recurso (.res, .dcr, etc.) agora também são copiados e possuem um placeholder exclusivo no arquivo de template do DPK (%RESOURCE%)