UNPKG

arch-wiki-md-repo

Version:

All arch-wiki articles in markdown format, updated every two days.

134 lines (107 loc) 10.1 kB
**[Diretrizes de criação de pacotes](/index.php/Criando_pacotes "Criando pacotes")** * * * [CLR](/index.php/Diretrizes_de_pacotes_CLR "Diretrizes de pacotes CLR") – [Cross](/index.php/Diretrizes_de_pacotes_de_ferramentas_de_compila%C3%A7%C3%A3o_cruzada "Diretrizes de pacotes de ferramentas de compilação cruzada") – [Eclipse](/index.php/Diretrizes_de_pacotes_de_plugin_do_Eclipse "Diretrizes de pacotes de plugin do Eclipse") – [Free Pascal](/index.php/Diretrizes_de_pacotes_Free_Pascal "Diretrizes de pacotes Free Pascal") – [GNOME](/index.php/Diretrizes_de_pacotes_GNOME "Diretrizes de pacotes GNOME") – [Go](/index.php/Diretrizes_de_pacotes_Go "Diretrizes de pacotes Go") – [Haskell](/index.php/Diretrizes_de_pacotes_Haskell "Diretrizes de pacotes Haskell") – [Java](/index.php/Diretrizes_de_pacotes_Java "Diretrizes de pacotes Java") – [KDE](/index.php/Diretrizes_de_pacotes_KDE "Diretrizes de pacotes KDE") – [Kernel](/index.php/Diretrizes_de_pacotes_de_m%C3%B3dulos_de_kernel "Diretrizes de pacotes de módulos de kernel") – [Lisp](/index.php/Diretrizes_de_pacotes_Lisp "Diretrizes de pacotes Lisp") – [MinGW](/index.php/Diretrizes_de_pacotes_MinGW "Diretrizes de pacotes MinGW") – [Node.js](/index.php/Diretrizes_de_pacotes_Node.js "Diretrizes de pacotes Node.js") – [Nonfree](/index.php/Diretrizes_de_pacotes_de_aplicativos_n%C3%A3o_livres "Diretrizes de pacotes de aplicativos não livres") –[OCaml](/index.php/Diretrizes_de_pacotes_OCaml "Diretrizes de pacotes OCaml") – [Perl](/index.php/Diretrizes_de_pacotes_Perl "Diretrizes de pacotes Perl") – [PHP](/index.php/Diretrizes_de_pacotes_PHP "Diretrizes de pacotes PHP") – [Python](/index.php/Diretrizes_de_pacotes_Python "Diretrizes de pacotes Python") – [Ruby](/index.php/Diretrizes_de_pacotes_Ruby_Gem "Diretrizes de pacotes Ruby Gem") – [VCS](/index.php/Diretrizes_de_pacotes_VCS "Diretrizes de pacotes VCS") – [Web](/index.php/Diretrizes_de_pacotes_de_aplicativos_da_Web "Diretrizes de pacotes de aplicativos da Web") – [Wine](/index.php/Diretrizes_de_pacotes_Wine "Diretrizes de pacotes Wine") Esta página explica como escrever [PKGBUILDs](/index.php/PKGBUILD_(Portugu%C3%AAs) "PKGBUILD (Português)") para software em execução no Windows usando o GCC. Existem duas opções para criar software para o Windows no Linux: * [mingw-w64](https://mingw-w64.org): fornece cadeia de ferramentas de 32 e 64 bits com suporte a secure crt, Vista+ API, DDK (ReactOS) e DirectX (WINE). Para uma lista completa dos recursos e diferenças suportados com o antigo MinGW.org, veja [aqui](https://sourceforge.net/p/mingw-w64/wiki2/Feature%20list/). Disponível em [mingw-w64-gcc](https://aur.archlinux.org/packages/mingw-w64-gcc/). * [MinGW](http://www.mingw.org/): fornece cadeia de ferramentas de 32 bits com suporte limitado a DirectX. Ele também sofre com a quebra de longa duração na implementação do armazenamento local de encadeamento e no suporte à biblioteca de ponto flutuante. Foi removido dos repositórios oficiais e do AUR. ## Contents * [1 Nomenclatura de pacote](#Nomenclatura_de_pacote) * [2 Empacotamento](#Empacotamento) * [3 Exemplos](#Exemplos) * [3.1 Autotools](#Autotools) * [3.2 CMake](#CMake) ## Nomenclatura de pacote Um pacote para mingw-w64 deve ser nomeado `mingw-w64-*pkgname*`. Se uma variante estática do pacote está sendo compilado, acrescente o sufixo de nome de pacote com `-static` (veja abaixo para os casos nos quais isso é necessário). ## Empacotamento O empacotamento para pacotes de plataforma cruzada pode ser bastante complicada, pois há muitos sistemas de construção diferentes e peculiaridades de baixo nível. Tome nota das seguintes coisas: * sempre adicione [mingw-w64-crt](https://aur.archlinux.org/packages/mingw-w64-crt/) ao `depends`, a menos que ele dependa de outro pacote que implicitamente depende dele * sempre adicione [mingw-w64-gcc](https://aur.archlinux.org/packages/mingw-w64-gcc/) ao `makedepends`, a menos que esteja usando [mingw-w64-configure](https://aur.archlinux.org/packages/mingw-w64-configure/) ou [mingw-w64-cmake](https://aur.archlinux.org/packages/mingw-w64-cmake/) * sempre adicione `!strip`, `staticlibs` e `!buildflags` ao `options` * sempre use o `pkgdesc` original e adicione `(mingw-w64)` ao fim do `pkgdesc` * sempre use e siga o `pkgver` original do pacote oficial * sempre compile as versões 32 bit e 64 bit das bibliotecas * sempre coloque todas as coisas sob o prefixo `/usr/i686-w64-mingw32` e `/usr/x86_64-w64-mingw32` * sempre use `any` como a arquitetura (exceto que o pacote contém executáveis que devem ser executados no sistema de compilação) * sempre compile os binários compartilhados e estáticos, a menos que eles conflitem * considere a remoção de documentação desnecessária (`rm -r $pkgdir/usr/i686-w64-mingw32/share/{doc,info,man}`, `rm -r $pkgdir/usr/x86_64-w64-mingw32/share/{doc,info,man}`) * considere usar [mingw-w64-configure](https://aur.archlinux.org/packages/mingw-w64-configure/) para compilação com scripts de configuração * considere usar [mingw-w64-cmake](https://aur.archlinux.org/packages/mingw-w64-cmake/) para compilação com CMake * considere usar [mingw-w64-qt5-base](https://aur.archlinux.org/packages/mingw-w64-qt5-base/) ou [mingw-w64-qt4](https://aur.archlinux.org/packages/mingw-w64-qt4/) para compilação com QMake * considere usar opções de compilação `-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions --param=ssp-buffer-size=4` (geralmente nomeadas com CFLAGS, CXXFLAGS) quando nenhum sistema de compilação adequado foi fornecido * considere remover símbolos explicitamente com `${_arch}-strip` em loop for `package()` como demonstrado nos exemplos de PKGBUILD abaixo. * considere usar o comando [find](/index.php/Find_(Portugu%C3%AAs) "Find (Português)") para interagir com `$pkgdir` já que todas DLLs, bibliotecas estáticas ou executáveis podem residir em localizações apropriadas. * se o binário é uma DLL, use `${_arch}-strip --strip-unneeded *.dll` * se o binário é uma biblioteca estática, use `${_arch}-strip -g *.a` * se um pacote é modular (requer certas dependências de compilação, mas tais dependências são opcionais para o usuário final) adicione essas ao `makedepends` e `optdepends`. Certifique-se de subtrai-los do `depends` se estiver atualizando um pacote existente. Exemplo disto em uso: [mingw-w64-ruby](https://aur.archlinux.org/packages/mingw-w64-ruby/), [mingw-w64-allegro](https://aur.archlinux.org/packages/mingw-w64-allegro/) * se um pacote instala um script `$pkgdir/usr/${_arch}/bin/*-config`, crie um link simbólico para `$pkgdir/usr/bin/${_arch}-*-config` * se um pacote usa autoconf, defina explicitamente `--build="$CHOST"` no `configure` para contornar o [bug #108405 do autoconf](//savannah.gnu.org/support/?108405) ou usar [mingw-w64-configure](https://aur.archlinux.org/packages/mingw-w64-configure/) Como mencionado acima, os arquivos devem ser todos instalados em `/usr/i686-w64-mingw32` e `/usr/x86_64-w64-mingw32`. Especificamente, todas as DLLs devem ser colocadas em `/usr/*-w64-mingw32/bin`, pois são bibliotecas dinâmicas necessárias no tempo de execução. Seus arquivos `.dll.a` correspondentes devem ir para `/usr/*-w64-mingw32/lib`. Por favor, exclua qualquer documentação desnecessária e talvez outros arquivos de `/usr/share`. Os pacotes de compilações cruzadas não são destinados ao usuário, mas apenas ao compilador e à distribuição binária, e, como tal, você deve tentar torná-los o menor possível. Sempre tente combinar o `pkgver` em seus pacotes mingw-w64 com o `pkgver` dos pacotes comuns correspondentes nas repositórios oficiais do Arch Linux (e não nos repos de teste). Isso garante que o software de compilação cruzada funcione exatamente da mesma maneira no Windows, sem nenhum erro inesperado. Se os pacotes no Arch estão desatualizados, geralmente há uma boa razão e você ainda deve seguir a versão do Arch em vez de usar o release upstream mais recente. Se o pacote nativo correspondente estiver no AUR, não será necessário seguir esta política de versão, pois muitos pacotes do AUR são muitas vezes órfãos ou não são mantidos. ## Exemplos Os exemplos a seguir tentarão cobrir algumas das convenções e sistemas de compilação mais comuns. ### Autotools ``` pkgname=mingw-w64-foo pkgver=1.0 pkgrel=1 pkgdesc="Foo bar (mingw-w64)" arch=('any') url="http://www.foo.bar" license=('GPL') makedepends=('mingw-w64-configure') depends=('mingw-w64-crt') options=('!strip' '!buildflags' 'staticlibs') source=("http://www.foo.bar/foobar.tar.gz") md5sums=('4736ac4f34fd9a41fa0197eac23bbc24') _architectures="i686-w64-mingw32 x86_64-w64-mingw32" build() { cd "${srcdir}/foo-$pkgver/" for _arch in ${_architectures}; do mkdir -p build-${_arch} && pushd build-${_arch} ${_arch}-configure .. make popd done } package() { for _arch in ${_architectures}; do cd "${srcdir}/foo-$pkgver/build-${_arch}" make DESTDIR="${pkgdir}" install ${_arch}-strip --strip-unneeded "$pkgdir"/usr/${_arch}/bin/*.dll ${_arch}-strip -g "$pkgdir"/usr/${_arch}/lib/*.a done } ``` ### CMake ``` pkgname=mingw-w64-foo pkgver=1.0 pkgrel=1 pkgdesc="Foo bar (mingw-w64)" arch=('any') url="http://www.foo.bar" license=('GPL') makedepends=('mingw-w64-cmake') depends=('mingw-w64-crt') options=('!strip' '!buildflags' 'staticlibs') source=("http://www.foo.bar/foobar.tar.gz") md5sums=('4736ac4f34fd9a41fa0197eac23bbc24') _architectures="i686-w64-mingw32 x86_64-w64-mingw32" build() { cd "$srcdir/foo-$pkgver/" for _arch in ${_architectures}; do mkdir -p build-${_arch} && pushd build-${_arch} ${_arch}-cmake .. make popd done } package() { for _arch in ${_architectures}; do cd "${srcdir}/foo-$pkgver/build-${_arch}" make DESTDIR="${pkgdir}" install ${_arch}-strip --strip-unneeded "$pkgdir"/usr/${_arch}/bin/*.dll ${_arch}-strip -g "$pkgdir"/usr/${_arch}/lib/*.a done } ```