Lançamento do sistema de montagem Meson 1.3

Foi publicada a versão do sistema de compilação Meson 1.3.0, que é usado para construir projetos como X.Org Server, Mesa, Lighttpd, systemd, GStreamer, Wayland, GNOME e GTK. O código Meson é escrito em Python e licenciado sob a licença Apache 2.0.

O principal objetivo de desenvolvimento do Meson é fornecer um processo de montagem de alta velocidade combinado com conveniência e facilidade de uso. Em vez de make, a compilação usa o kit de ferramentas Ninja por padrão, mas outros back-ends, como xcode e VisualStudio, também podem ser usados. O sistema possui um manipulador de dependência multiplataforma integrado que permite usar o Meson para construir pacotes para distribuições. As regras de montagem são definidas em uma linguagem simplificada específica do domínio, são bem legíveis e compreensíveis para o usuário (de acordo com a ideia dos autores, o desenvolvedor deve gastar um mínimo de tempo escrevendo regras).

Compilação cruzada e construção em Linux, Illumos/Solaris, FreeBSD, NetBSD, DragonFly BSD, Haiku, macOS e Windows usando GCC, Clang, Visual Studio e outros compiladores são suportadas. É possível construir projetos em diversas linguagens de programação, incluindo C, C++, Fortran, Java e Rust. Há suporte para um modo de construção incremental, no qual apenas os componentes diretamente relacionados às alterações feitas desde a última construção são reconstruídos. O Meson pode ser usado para gerar compilações repetíveis, onde a execução da compilação em ambientes diferentes resulta em executáveis ​​completamente idênticos.

Principais inovações do Meson 1.3:

  • Adicionada a opção “werror: true” aos métodos de verificação do compilador compiler.compiles(), compiler.links() e compiler.run(), que trata os avisos do compilador como erros (pode ser usado para verificar se o código foi construído sem avisos). ).
  • Adicionado método has_define para verificar a definição do símbolo pelo pré-processador.
  • O parâmetro macro_name foi adicionado à função configure_file(), adicionando proteção de macro para conexões duplas através de “#include” (“include guards”), desenhado no estilo de macros na linguagem C (simplificando a criação de arquivos de configuração com dinâmica nomes de macro).
  • Um novo formato de saída foi adicionado a configure_file() - JSON ("output_format: json").
  • Adicionada a capacidade de usar listas de valores aos parâmetros c_std e cpp_std (por exemplo, “default_options: 'c_std=gnu11,c11′’).
  • Nos módulos que usam CustomTarget para processar arquivos, foi adicionada a capacidade de personalizar a saída de mensagens pelo utilitário ninja.
  • O build_target "jar" foi descontinuado e a chamada "jar()" é recomendada em seu lugar.
  • O parâmetro 'env' foi adicionado ao método Generator.process() para definir a variável de ambiente através da qual o gerador processará a entrada.
  • Ao especificar nomes de destino de construção associados a executáveis, sufixos como "executável('foo', 'main.c', name_suffix: 'bar')" podem gerar executáveis ​​adicionais no mesmo diretório.
  • Adicionado o parâmetro “vs_module_defs” à função exectuable() para usar um arquivo def que define a lista de funções passadas para shared_module().
  • Adicionado o parâmetro 'default_options' à função find_program() para definir opções padrão para o subprojeto substituto.
  • Adicionado o método fs.relative_to(), que retorna o caminho relativo para o primeiro argumento, relativo ao segundo, se o primeiro caminho existir. Por exemplo, "fs.relative_to('/prefix/lib', '/prefix/bin') == '../lib')".
  • O parâmetro Following_symlinks foi adicionado às funções install_data(), install_headers() e install_subdir(); quando definido, links simbólicos são seguidos.
  • Um parâmetro “fill” foi adicionado ao método int.to_string() para preencher incrementalmente a string com zeros à esquerda. Por exemplo, chamar message(n.to_string(fill: 3)) para n=4 produzirá a string "004".
  • Adicionado um novo alvo, clang-tidy-fix, que especifica a execução do utilitário clang-tidy com o sinalizador "-fix".
  • A capacidade de especificar o sufixo (TARGET_SUFFIX) do destino do assembly ([PATH_TO_TARGET/]TARGET_NAME.TARGET_SUFFIX[:TARGET_TYPE]) foi adicionada ao comando de compilação.
  • Adicionada variável de ambiente MESON_PACKAGE_CACHE_DIR para substituir o caminho para o cache do pacote (subprojects/packagecache), por exemplo, permitindo que você use um cache compartilhado em vários projetos.
  • Adicionado o comando "meson setup --clearcache" para limpar o cache persistente.
  • O suporte para a palavra-chave “required” foi adicionado a todos os métodos de verificação do compilador “has_*”, por exemplo, em vez de “assert(cc.has_function('some_function'))” agora você pode especificar “cc.has_function('some_function' , obrigatório: verdadeiro)”.
  • Uma nova palavra-chave, ferrugem_abi, foi adicionada às funções shared_library(), static_library(), biblioteca() e shared_module(), que deve ser usada em vez do obsoleto Rust_crate_type.

Fonte: opennet.ru

Adicionar um comentário