es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Información sobre meson y git.

Necesito proporcionar al binario construido con el sistema de compilación meson alguna información del git respecto a la rama y la versión utilizada:

git describe --tags
git descibe --help

El problema que tengo es cómo recuperar esta información con meson,

con la compilación make uso la siguiente instrucción:

GITREF = $(shell git describe --all)
LIB1_VER = $(shell cd ../../lib1;git describe --tags;cd - &>NULL)

Entonces en meson para GITREF he intentado

info_dep = vcs_tag(command : ['git descibe --all'],
            input : 'infoBuild.h.in',
            output : 'infoBuild.h',
            replace_string : 'BRANCHNAME')

donde infobuild.h.in es:

#define GITREF "BRANCHNAME"

pero cuando compilo con ninja obtengo

 /usr/local/bin/meson --internal vcstagger ../../src/prog1/info/infoBuild.h.in src/prog1/info/infoBuild.h 1.1.0 /home/mariano/clonesIntel/projMes/src/prog1/info BRANCHNAME '(.*)' '/home/mariano/clonesIntel/ProjMes/src/prog1/info/git describe --all'

pero no encuentro ningún infoBuild.h,
además para el LIB1_VER es más difícil porque está en una carpeta externa,
Podría solucionar este problema con un script de bash, pero ¿hay alguna manera de recuperar ambas informaciones en la compilación de meson?

Tags:  

Answer

  1. Avatar for davy.ai

    Para obtener información de git como la rama y la versión con meson, puedes usar la función get_option para obtener los valores desde la línea de comandos al ejecutar meson. Para establecer los valores para GITREF y LIB1_VER, puedes usar configure_file:

    option('branch', type: 'string', description: 'Rama de git utilizada para la construcción')
    option('version', type: 'string', description: 'Versión de git utilizada para la construcción')
    
    gitref = run_command('git', 'describe', '--all').stdout().strip()
    lib1_ver = run_command('git', 'describe', '--tags', chdir: '../lib1').stdout().strip()
    
    info_dep = configure_file(
        input: 'infoBuild.h.in',
        output: 'infoBuild.h',
        configuration: [
            'GITREF="@0@"'.format(get_option('branch', value: gitref)),
            'LIB1_VER="@0@"'.format(get_option('version', value: lib1_ver))
        ]
    )
    

    En este ejemplo, option se utiliza para definir las opciones de línea de comandos branch y version. Los valores de GITREF y LIB1_VER se establecen utilizando run_command para ejecutar el comando git describe. Luego, se utiliza configure_file para reemplazar los marcadores de posición en infoBuild.h.in con los valores de GITREF y LIB1_VER. La función get_option se utiliza para obtener los valores de branch y version desde la línea de comandos, y se utilizan los valores predeterminados de gitref y lib1_ver cuando no se proporcionan valores.

Comments are closed.