@ -385,12 +385,25 @@ def print_results(options: argparse.Namespace, results: T.Sequence[T.Tuple[str,
print ( json . dumps ( out , indent = indent ) )
return 0
def get_infodir ( builddir : T . Optional [ str ] = None ) - > str :
infodir = ' meson-info '
if builddir is not None :
infodir = os . path . join ( builddir , infodir )
return infodir
def get_info_file ( infodir : str , kind : T . Optional [ str ] = None ) - > str :
return os . path . join ( infodir ,
' meson-info.json ' if not kind else ' intro- {} .json ' . format ( kind ) )
def load_info_file ( infodir : str , kind : T . Optional [ str ] = None ) - > T . Any :
with open ( get_info_file ( infodir , kind ) , ' r ' ) as fp :
return json . load ( fp )
def run ( options : argparse . Namespace ) - > int :
datadir = ' meson-private '
infodir = ' meson-info '
infodir = get_infodir ( options . builddir )
if options . builddir is not None :
datadir = os . path . join ( options . builddir , datadir )
infodir = os . path . join ( options . builddir , infodir )
indent = 4 if options . indent else None
results = [ ] # type: T.List[T.Tuple[str, T.Union[dict, T.List[T.Any]]]]
sourcedir = ' . ' if options . builddir == ' meson.build ' else options . builddir [ : - 11 ]
@ -411,17 +424,18 @@ def run(options: argparse.Namespace) -> int:
results + = [ ( key , val . no_bd ( intr ) ) ]
return print_results ( options , results , indent )
infofile = get_meson_info_file ( infodir )
if not os . path . isdir ( datadir ) or not os . path . isdir ( infodir ) or not os . path . isfile ( infofile ) :
print ( ' Current directory is not a meson build directory. \n '
' Please specify a valid build dir or change the working directory to it. \n '
' It is also possible that the build directory was generated with an old \n '
' meson version. Please regenerate it in this case. ' )
return 1
with open ( infofile , ' r ' ) as fp :
raw = json . load ( fp )
try :
raw = load_info_file ( infodir )
intro_vers = raw . get ( ' introspection ' , { } ) . get ( ' version ' , { } ) . get ( ' full ' , ' 0.0.0 ' )
except FileNotFoundError :
if not os . path . isdir ( datadir ) or not os . path . isdir ( infodir ) :
print ( ' Current directory is not a meson build directory. \n '
' Please specify a valid build dir or change the working directory to it. ' )
else :
print ( ' Introspection file {} does not exist. \n '
' It is also possible that the build directory was generated with an old \n '
' meson version. Please regenerate it in this case. ' . format ( get_info_file ( infodir ) ) )
return 1
vers_to_check = get_meson_introspection_required_version ( )
for i in vers_to_check :
@ -437,12 +451,11 @@ def run(options: argparse.Namespace) -> int:
continue
if not options . all and not getattr ( options , i , False ) :
continue
curr = os . path . join ( infodir , ' intro- {} .json ' . format ( i ) )
if not os . path . isfile ( curr ) :
print ( ' Introspection file {} does not exist. ' . format ( curr ) )
try :
results + = [ ( i , load_info_file ( infodir , i ) ) ]
except FileNotFoundError :
print ( ' Introspection file {} does not exist. ' . format ( get_info_file ( infodir , i ) ) )
return 1
with open ( curr , ' r ' ) as fp :
results + = [ ( i , json . load ( fp ) ) ]
return print_results ( options , results , indent )