CLR package guidelines (Português)
32-bit – CLR – CMake – Cross – DKMS – Eclipse – Electron – Fonte – Free Pascal – GNOME – Go – Haskell – Java – KDE – Kernel – Lisp – Meson – MinGW – Node.js – Nonfree – OCaml – Perl – PHP – Python – R – Ruby – Rust – Shell – VCS – Web – Wine
Este documento define o padrão para a empacotamento de projetos Common Language Runtime (.NET) sob Arch Linux. Atualmente, apenas o Mono é capaz de fornecer um runtime CLR usável e eficiente para vários sistemas e esse padrão refletirá seu uso. Esteja ciente de que muitos programas CLR foram desenvolvidos com o Microsoft .NET em mente e, como tal, podem ou não ser executados em Mono por causa de fatores exclusivos do .NET, como chamadas P/Invoke e APIs de Gestão Digital de Direitos (DRM) da Microsoft e, portanto, não produzirá um pacote utilizável para o Arch Linux. No entanto, se combinado com Wine a partir da versão 1.5.6 (?), seu pacote pode ter a chance de executar sob ele. Consulte as diretrizes de pacotes Wine para obter mais informações, se tal for o caso.
Pegadinhas de empacotamento
- Sempre adicione mono a
depends
- Sempre defina
arch
comoany
. Mono não oferece suporte a compilar (executar?) montagens de 64 bits. - Sempre adicione
!strip
aoptions
- Se o pacote é uma biblioteca (DLL), considere instalá-lo ao Global Assembly Cache (GAC) do Mono, se ele for usado como uma dependência.
- Se a montagem é pré-compilada e vem com um arquivo de banco de dados para depuração de programas (Foo.dll.pdb), considere convertê-la como tal:
pdb2mdb Foo.dll
- Se o pacote destina-se a ser um executável (EXE), certifique-se de instalar em
/usr/bin
um shell script para executá-lo, similar a esse:
#!/bin/sh mono foo.exe $@
Montagens assinadas
Se o pacote for instalado no GAC, certifique-se de ter um arquivo de chave assinado. Caso contrário, você pode gerar um como este: sn -k 1024 Foo.snk
. Em seguida, a forma mais fácil de embutir o arquivo chave na montagem para ser desmontada assim: monodis Foo.dll --output=Foo.il
. Após, remonte-o assim: ilasm /dll /key:Foo.snk Foo.il
Exemplos de PKGBUILD
Os exemplos a seguir vão tentar cobrir algumas das convenções mais comuns e sistemas de compilação.
xbuild
Unsigned DLL
# Maintainer: yourname <yourmail> pkgname=foo pkgver=1.0 pkgrel=1 pkgdesc="Fantabulous library for .Net" arch=('any') url="http://www.foo.bar" license=('GPL') depends=('mono') options=('!strip') source=("http://www.foo.bar/foobar.tar.gz") md5sums=('4736ac4f34fd9a41fa0197eac23bbc24') build() { cd "${srcdir}/foobar" xbuild Foo.sln # if the package is unsigned, do the following: cd "/bin/x86/Debug" monodis Foo.dll --output=Foo.il sn -k 1024 Foo.snk ilasm /dll /key:Foo.snk Foo.il } package() { cd "${srcdir}/foobar/bin/x86/Debug" install -Dm644 Foo.dll "$pkgdir/usr/lib/foobar/Foo.dll" install -Dm644 Foo.dll.mdb "$pkgdir/usr/lib/foobar/Foo.dll.mdb" # Register assembly into Mono's GAC gacutil -i Foo.dll -root "$pkgdir/usr/lib" }