Repository: mesonbuild/meson

Issue:
[RFC] custom variable in CustomTargetHolder to identify targets
I'm trying to get automatically detect custom targets (like GObject introspection) targets to add them to rpm filelists, but I don't want to introspect `target.get_custom_install_dir()` and generate girepository variable again because duplicating code.

I think we want to add empty variable in custom target holder and set it automatically or force in code of our modules (don't know how better) to `modname.CapitalizedFunction` or something like this.



Discussion:

Resolving patch:
diff --git a/modules/gnome.py b/modules/gnome.py
--- a/modules/gnome.py
+++ b/modules/gnome.py
@@ -63,14 +63,18 @@ def generate_gir(self, state, args, kwargs):
         scankwargs = {'output' : girfile,
                       'input' : libsources,
                       'command' : scan_command}
-        scan_target = build.CustomTarget(scan_name, state.subdir, scankwargs)
+        if kwargs.get('install'):
+            scankwargs['install'] = kwargs['install']
+            scankwargs['install_dir'] = os.path.join(state.environment.get_datadir(), 'gir-1.0')
+        scan_target = GirTarget(scan_name, state.subdir, scankwargs)
         
         typelib_name = girtarget.name + '-typelib'
         typelib_output = '%s-%s.typelib' % (ns, nsversion)
         typelib_cmd = ['g-ir-compiler', scan_target, '--output', '@OUTPUT@']
         kwargs['output'] = typelib_output
         kwargs['command'] = typelib_cmd
-        typelib_target = build.CustomTarget(typelib_name, state.subdir, kwargs)
+        kwargs['install_dir'] = os.path.join(state.environment.get_libdir(), 'girepository-1.0')
+        typelib_target = TypelibTarget(typelib_name, state.subdir, kwargs)
         return [scan_target, typelib_target]
 
     def compile_schemas(self, state, args, kwargs):
@@ -111,3 +115,11 @@ def initialize():
     mlog.log('Warning, glib compiled dependencies will not work until this upstream issue is fixed:',
              mlog.bold('https://bugzilla.gnome.org/show_bug.cgi?id=745754'))
     return GnomeModule()
+
+class GirTarget(build.CustomTarget):
+    def __init__(self, name, subdir, kwargs):
+        super().__init__(name, subdir, kwargs)
+
+class TypelibTarget(build.CustomTarget):
+    def __init__(self, name, subdir, kwargs):
+        super().__init__(name, subdir, kwargs)
diff --git a/modules/rpm.py b/modules/rpm.py
--- a/modules/rpm.py
+++ b/modules/rpm.py
@@ -19,6 +19,7 @@
 import compilers
 import datetime
 import mlog
+import modules.gnome
 import os
 
 class RPMModule:
@@ -62,6 +63,10 @@ def generate_spec_template(self, state, args, kwargs):
                 to_delete.add('%%{buildroot}%%{_libdir}/%s' % target.get_filename())
                 mlog.log('Warning, removing', mlog.bold(target.get_filename()),
                          'from package because packaging static libs not recommended')
+            elif isinstance(target, modules.gnome.GirTarget) and target.should_install():
+                files_devel.add('%%{_datadir}/gir-1.0/%s' % target.get_filename()[0])
+            elif isinstance(target, modules.gnome.TypelibTarget) and target.should_install():
+                files.add('%%{_libdir}/girepository-1.0/%s' % target.get_filename()[0])
         for header in state.headers:
             if len(header.get_install_subdir()) > 0:
                 files_devel.add('%%{_includedir}/%s/' % header.get_install_subdir())


Test patch:
diff --git a/test cases/frameworks/7 gnome/gir/meson.build b/test cases/frameworks/7 gnome/gir/meson.build
--- a/test cases/frameworks/7 gnome/gir/meson.build	
+++ b/test cases/frameworks/7 gnome/gir/meson.build	
@@ -8,8 +8,7 @@ gnome.generate_gir(girexe,
 sources : libsources,
 nsversion : '1.0',
 namespace : 'Meson',
-install : true,
-install_dir : 'typelibdir',
+install : true
 )
 
 test('gobject introspection', girexe)
diff --git a/test cases/frameworks/7 gnome/installed_files.txt b/test cases/frameworks/7 gnome/installed_files.txt
--- a/test cases/frameworks/7 gnome/installed_files.txt	
+++ b/test cases/frameworks/7 gnome/installed_files.txt	
@@ -1,2 +1,3 @@
-usr/typelibdir/Meson-1.0.typelib
+usr/lib/girepository-1.0/Meson-1.0.typelib
+usr/share/gir-1.0/Meson-1.0.gir
 usr/share/glib-2.0/schemas/com.github.meson.gschema.xml