Advertisement
wellthatsucks

Untitled

Aug 9th, 2018
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.44 KB | None | 0 0
  1. @FeatureNewKwargs('build target', '0.40.0', ['build_by_default'])
  2. @permittedKwargs({'sources', 'nsversion', 'namespace', 'symbol_prefix', 'identifier_prefix',
  3. 'export_packages', 'includes', 'dependencies', 'link_with', 'include_directories',
  4. 'install', 'install_dir_gir', 'install_dir_typelib', 'extra_args',
  5. 'packages', 'header', 'build_by_default'})
  6. def generate_gir(self, state, args, kwargs):
  7. if len(args) != 1:
  8. raise MesonException('Gir takes one argument')
  9. if kwargs.get('install_dir'):
  10. raise MesonException('install_dir is not supported with generate_gir(), see "install_dir_gir" and "install_dir_typelib"')
  11.  
  12. giscanner = self.interpreter.find_program_impl('g-ir-scanner')
  13. gicompiler = self.interpreter.find_program_impl('g-ir-compiler')
  14.  
  15. girtarget = self._unwrap_gir_target(args[0])
  16.  
  17. self.gir_dep, pkgargs = self._get_gir_dep(state)
  18.  
  19. ns = kwargs.pop('namespace')
  20. nsversion = kwargs.pop('nsversion')
  21. libsources = mesonlib.extract_as_list(kwargs, 'sources', pop=True)
  22. girfile = '%s-%s.gir' % (ns, nsversion)
  23. srcdir = os.path.join(state.environment.get_source_dir(), state.subdir)
  24. builddir = os.path.join(state.environment.get_build_dir(), state.subdir)
  25. depends = [girtarget]
  26. gir_inc_dirs = []
  27. lang, compiler = self._get_girtarget_lang_compiler(girtarget)
  28. cflags, internal_ldflags, external_ldflags = self._get_lang_compiler_flags(state, lang, compiler)
  29. deps = (girtarget.get_all_link_deps() + girtarget.get_external_deps() +
  30. extract_as_list(kwargs, 'dependencies', pop=True, unholder=True))
  31. typelib_includes = self._gather_typelib_includes_and_update_depends(state, deps, depends)
  32. # ldflags will be misinterpreted by gir scanner (showing
  33. # spurious dependencies) but building GStreamer fails if they
  34. # are not used here.
  35. dep_cflags, dep_internal_ldflags, dep_external_ldflags, gi_includes = \
  36. self._get_dependencies_flags(deps, state, depends, use_gir_args=True)
  37. cflags += list(dep_cflags)
  38. internal_ldflags += list(dep_internal_ldflags)
  39. external_ldflags += list(dep_external_ldflags)
  40. inc_dirs = self._scan_inc_dirs(kwargs)
  41.  
  42. scan_command = [giscanner]
  43. scan_command += pkgargs
  44. scan_command += ['--no-libtool']
  45. scan_command += ['--namespace=' + ns, '--nsversion=' + nsversion]
  46. scan_command += ['--warn-all']
  47. scan_command += ['--output', '@OUTPUT@']
  48. scan_command += self._scan_header(kwargs)
  49. scan_command += self._scan_extra_args(kwargs)
  50. scan_command += ['-I' + srcdir, '-I' + builddir]
  51. scan_command += get_include_args(girtarget.get_include_dirs())
  52. scan_command += ['--filelist=' + self._make_gir_filelist(state, srcdir, ns, nsversion, girtarget, libsources)]
  53. scan_command += self._scan_link_withs(state, depends, kwargs)
  54. scan_command += self._scan_include(state, depends, gir_inc_dirs, kwargs)
  55. scan_command += self._scan_symbol_prefix(kwargs)
  56. scan_command += self._scan_identifier_prefix(kwargs)
  57. scan_command += self._scan_export_packages(kwargs)
  58. scan_command += ['--cflags-begin']
  59. scan_command += cflags
  60. scan_command += state.environment.coredata.get_external_args(lang)
  61. scan_command += ['--cflags-end']
  62. scan_command += get_include_args(inc_dirs)
  63. scan_command += get_include_args(list(gi_includes) + gir_inc_dirs + inc_dirs, prefix='--add-include-path=')
  64. scan_command += self._scan_gir_target(state, girtarget)
  65. scan_command += self._scan_lang(state, lang)
  66. scan_command += list(internal_ldflags)
  67. scan_command += list(external_ldflags)
  68.  
  69. scan_target = self._make_gir_target(state, girfile, scan_command, depends, kwargs)
  70.  
  71. typelib_output = '%s-%s.typelib' % (ns, nsversion)
  72. typelib_cmd = [gicompiler, scan_target, '--output', '@OUTPUT@']
  73. typelib_cmd += get_include_args(gir_inc_dirs, prefix='--includedir=')
  74.  
  75. for incdir in typelib_includes:
  76. typelib_cmd += ["--includedir=" + incdir]
  77.  
  78. typelib_target = self._make_typelib_target(state, typelib_output, typelib_cmd, kwargs)
  79.  
  80. rv = [scan_target, typelib_target]
  81.  
  82. return ModuleReturnValue(rv, rv)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement