Blame 0003-Revert-gnome.compile_resources-Add-ld-binary-method.patch

Adam Williamson 37cd00
From 4ccd9782386b646b99007c1472ab28a61b52bb5d Mon Sep 17 00:00:00 2001
Adam Williamson 37cd00
From: Jussi Pakkanen <jpakkane@gmail.com>
Adam Williamson 37cd00
Date: Mon, 25 Mar 2019 20:33:55 +0200
Adam Williamson 37cd00
Subject: [PATCH 2/2] Revert "gnome.compile_resources: Add ld binary method"
Adam Williamson 37cd00
Adam Williamson 37cd00
This reverts commit 59791fc56966901038aaaac23942bc8ac6e11494, reversing
Adam Williamson 37cd00
changes made to e26b5a119e0b3f76cc93f65ecf4251dc6d52ecfe.
Adam Williamson 37cd00
---
Adam Williamson 37cd00
 mesonbuild/modules/__init__.py |   4 -
Adam Williamson 37cd00
 mesonbuild/modules/gnome.py    | 158 +++------------------------------
Adam Williamson 37cd00
 2 files changed, 14 insertions(+), 148 deletions(-)
Adam Williamson 37cd00
Adam Williamson 37cd00
diff --git a/mesonbuild/modules/__init__.py b/mesonbuild/modules/__init__.py
Adam Williamson 37cd00
index 2df4d7c3..6b6aa8ba 100644
Adam Williamson 37cd00
--- a/mesonbuild/modules/__init__.py
Adam Williamson 37cd00
+++ b/mesonbuild/modules/__init__.py
Adam Williamson 37cd00
@@ -58,10 +58,6 @@ class GResourceHeaderTarget(build.CustomTarget):
Adam Williamson 37cd00
     def __init__(self, name, subdir, subproject, kwargs):
Adam Williamson 37cd00
         super().__init__(name, subdir, subproject, kwargs)
Adam Williamson 37cd00
 
Adam Williamson 37cd00
-class GResourceObjectTarget(build.CustomTarget):
Adam Williamson 37cd00
-    def __init__(self, name, subdir, subproject, kwargs):
Adam Williamson 37cd00
-        super().__init__(name, subdir, subproject, kwargs)
Adam Williamson 37cd00
-
Adam Williamson 37cd00
 class GirTarget(build.CustomTarget):
Adam Williamson 37cd00
     def __init__(self, name, subdir, subproject, kwargs):
Adam Williamson 37cd00
         super().__init__(name, subdir, subproject, kwargs)
Adam Williamson 37cd00
diff --git a/mesonbuild/modules/gnome.py b/mesonbuild/modules/gnome.py
Adam Williamson 37cd00
index 8833a214..2d169560 100644
Adam Williamson 37cd00
--- a/mesonbuild/modules/gnome.py
Adam Williamson 37cd00
+++ b/mesonbuild/modules/gnome.py
Adam Williamson 37cd00
@@ -16,8 +16,6 @@
Adam Williamson 37cd00
 functionality such as gobject-introspection, gresources and gtk-doc'''
Adam Williamson 37cd00
 
Adam Williamson 37cd00
 import os
Adam Williamson 37cd00
-import re
Adam Williamson 37cd00
-import sys
Adam Williamson 37cd00
 import copy
Adam Williamson 37cd00
 import shlex
Adam Williamson 37cd00
 import subprocess
Adam Williamson 37cd00
@@ -27,7 +25,7 @@ from .. import mlog
Adam Williamson 37cd00
 from .. import mesonlib
Adam Williamson 37cd00
 from .. import compilers
Adam Williamson 37cd00
 from .. import interpreter
Adam Williamson 37cd00
-from . import GResourceTarget, GResourceHeaderTarget, GResourceObjectTarget, GirTarget, TypelibTarget, VapiTarget
Adam Williamson 37cd00
+from . import GResourceTarget, GResourceHeaderTarget, GirTarget, TypelibTarget, VapiTarget
Adam Williamson 37cd00
 from . import get_include_args
Adam Williamson 37cd00
 from . import ExtensionModule
Adam Williamson 37cd00
 from . import ModuleReturnValue
Adam Williamson 37cd00
@@ -44,8 +42,6 @@ from ..interpreterbase import noKwargs, permittedKwargs, FeatureNew, FeatureNewK
Adam Williamson 37cd00
 # https://bugzilla.gnome.org/show_bug.cgi?id=774368
Adam Williamson 37cd00
 gresource_dep_needed_version = '>= 2.51.1'
Adam Williamson 37cd00
 
Adam Williamson 37cd00
-gresource_ld_binary_needed_version = '>= 2.60'
Adam Williamson 37cd00
-
Adam Williamson 37cd00
 native_glib_version = None
Adam Williamson 37cd00
 girwarning_printed = False
Adam Williamson 37cd00
 gdbuswarning_printed = False
Adam Williamson 37cd00
@@ -170,10 +166,7 @@ class GnomeModule(ExtensionModule):
Adam Williamson 37cd00
             cmd += ['--sourcedir', source_dir]
Adam Williamson 37cd00
 
Adam Williamson 37cd00
         if 'c_name' in kwargs:
Adam Williamson 37cd00
-            c_name = kwargs.pop('c_name')
Adam Williamson 37cd00
-            cmd += ['--c-name', c_name]
Adam Williamson 37cd00
-        else:
Adam Williamson 37cd00
-            c_name = None
Adam Williamson 37cd00
+            cmd += ['--c-name', kwargs.pop('c_name')]
Adam Williamson 37cd00
         export = kwargs.pop('export', False)
Adam Williamson 37cd00
         if not export:
Adam Williamson 37cd00
             cmd += ['--internal']
Adam Williamson 37cd00
@@ -182,23 +175,13 @@ class GnomeModule(ExtensionModule):
Adam Williamson 37cd00
 
Adam Williamson 37cd00
         cmd += mesonlib.stringlistify(kwargs.pop('extra_args', []))
Adam Williamson 37cd00
 
Adam Williamson 37cd00
-        gresource_ld_binary = False
Adam Williamson 37cd00
-        if mesonlib.is_linux() and mesonlib.version_compare(glib_version, gresource_ld_binary_needed_version) and not state.environment.is_cross_build():
Adam Williamson 37cd00
-            ld_obj = self.interpreter.find_program_impl('ld', required=False)
Adam Williamson 37cd00
-            if ld_obj.found():
Adam Williamson 37cd00
-                gresource_ld_binary = True
Adam Williamson 37cd00
-
Adam Williamson 37cd00
         gresource = kwargs.pop('gresource_bundle', False)
Adam Williamson 37cd00
-
Adam Williamson 37cd00
         if gresource:
Adam Williamson 37cd00
-            g_output = args[0] + '.gresource'
Adam Williamson 37cd00
-            g_name = args[0] + '_gresource'
Adam Williamson 37cd00
-        elif gresource_ld_binary:
Adam Williamson 37cd00
-            g_output = args[0] + '_ld_binary.gresource'
Adam Williamson 37cd00
-            g_name = args[0] + '_ld_binary_gresource'
Adam Williamson 37cd00
-
Adam Williamson 37cd00
-        output = args[0] + '.c'
Adam Williamson 37cd00
-        name = args[0] + '_c'
Adam Williamson 37cd00
+            output = args[0] + '.gresource'
Adam Williamson 37cd00
+            name = args[0] + '_gresource'
Adam Williamson 37cd00
+        else:
Adam Williamson 37cd00
+            output = args[0] + '.c'
Adam Williamson 37cd00
+            name = args[0] + '_c'
Adam Williamson 37cd00
 
Adam Williamson 37cd00
         if kwargs.get('install', False) and not gresource:
Adam Williamson 37cd00
             raise MesonException('The install kwarg only applies to gresource bundles, see install_header')
Adam Williamson 37cd00
@@ -212,42 +195,19 @@ class GnomeModule(ExtensionModule):
Adam Williamson 37cd00
         kwargs['input'] = args[1]
Adam Williamson 37cd00
         kwargs['output'] = output
Adam Williamson 37cd00
         kwargs['depends'] = depends
Adam Williamson 37cd00
-        if gresource or gresource_ld_binary:
Adam Williamson 37cd00
-            g_kwargs = copy.deepcopy(kwargs)
Adam Williamson 37cd00
-            g_kwargs['input'] = args[1]
Adam Williamson 37cd00
-            g_kwargs['output'] = g_output
Adam Williamson 37cd00
-            g_kwargs['depends'] = depends
Adam Williamson 37cd00
         if not mesonlib.version_compare(glib_version, gresource_dep_needed_version):
Adam Williamson 37cd00
             # This will eventually go out of sync if dependencies are added
Adam Williamson 37cd00
             kwargs['depend_files'] = depend_files
Adam Williamson 37cd00
-            if gresource_ld_binary:
Adam Williamson 37cd00
-                kwargs['command'] = copy.copy(cmd) + ['--external-data']
Adam Williamson 37cd00
-            else:
Adam Williamson 37cd00
-                kwargs['command'] = cmd
Adam Williamson 37cd00
-            if gresource or gresource_ld_binary:
Adam Williamson 37cd00
-                # This will eventually go out of sync if dependencies are added
Adam Williamson 37cd00
-                g_kwargs['depend_files'] = depend_files
Adam Williamson 37cd00
-                g_kwargs['command'] = cmd
Adam Williamson 37cd00
+            kwargs['command'] = cmd
Adam Williamson 37cd00
         else:
Adam Williamson 37cd00
             depfile = kwargs['output'] + '.d'
Adam Williamson 37cd00
-            if gresource_ld_binary:
Adam Williamson 37cd00
-                depfile2 = kwargs['output'] + '.2.d'
Adam Williamson 37cd00
-                kwargs['depfile'] = depfile2
Adam Williamson 37cd00
-                kwargs['command'] = copy.copy(cmd) + ['--external-data', '--dependency-file', '@DEPFILE@']
Adam Williamson 37cd00
-            else:
Adam Williamson 37cd00
-                kwargs['depfile'] = depfile
Adam Williamson 37cd00
-                kwargs['command'] = copy.copy(cmd) + ['--dependency-file', '@DEPFILE@']
Adam Williamson 37cd00
-            if gresource or gresource_ld_binary:
Adam Williamson 37cd00
-                g_kwargs['depfile'] = depfile
Adam Williamson 37cd00
-                g_kwargs['command'] = copy.copy(cmd) + ['--dependency-file', '@DEPFILE@']
Adam Williamson 37cd00
-
Adam Williamson 37cd00
-        if gresource or gresource_ld_binary:
Adam Williamson 37cd00
-            target_g = GResourceTarget(g_name, state.subdir, state.subproject, g_kwargs)
Adam Williamson 37cd00
-            if gresource: # Only one target for .gresource files
Adam Williamson 37cd00
-                return ModuleReturnValue(target_g, [target_g])
Adam Williamson 37cd00
-
Adam Williamson 37cd00
+            kwargs['depfile'] = depfile
Adam Williamson 37cd00
+            kwargs['command'] = copy.copy(cmd) + ['--dependency-file', '@DEPFILE@']
Adam Williamson 37cd00
         target_c = GResourceTarget(name, state.subdir, state.subproject, kwargs)
Adam Williamson 37cd00
 
Adam Williamson 37cd00
+        if gresource: # Only one target for .gresource files
Adam Williamson 37cd00
+            return ModuleReturnValue(target_c, [target_c])
Adam Williamson 37cd00
+
Adam Williamson 37cd00
         h_kwargs = {
Adam Williamson 37cd00
             'command': cmd,
Adam Williamson 37cd00
             'input': args[1],
Adam Williamson 37cd00
@@ -262,99 +222,9 @@ class GnomeModule(ExtensionModule):
Adam Williamson 37cd00
             h_kwargs['install_dir'] = kwargs.get('install_dir',
Adam Williamson 37cd00
                                                  state.environment.coredata.get_builtin_option('includedir'))
Adam Williamson 37cd00
         target_h = GResourceHeaderTarget(args[0] + '_h', state.subdir, state.subproject, h_kwargs)
Adam Williamson 37cd00
-
Adam Williamson 37cd00
-        if gresource_ld_binary:
Adam Williamson 37cd00
-            return self._create_gresource_ld_binary_targets(args, state, ifile, ld_obj, c_name, target_g, g_output, target_c, target_h)
Adam Williamson 37cd00
-        else:
Adam Williamson 37cd00
-            rv = [target_c, target_h]
Adam Williamson 37cd00
-
Adam Williamson 37cd00
+        rv = [target_c, target_h]
Adam Williamson 37cd00
         return ModuleReturnValue(rv, rv)
Adam Williamson 37cd00
 
Adam Williamson 37cd00
-    def _create_gresource_ld_binary_targets(self, args, state, ifile, ld_obj, c_name, target_g, g_output, target_c, target_h):
Adam Williamson 37cd00
-        if c_name is None:
Adam Williamson 37cd00
-            # Create proper c identifier from filename in the way glib-compile-resources does
Adam Williamson 37cd00
-            c_name = os.path.basename(ifile).partition('.')[0]
Adam Williamson 37cd00
-            c_name = c_name.replace('-', '_')
Adam Williamson 37cd00
-            c_name = re.sub(r'^([^(_a-zA-Z)])+', '', c_name)
Adam Williamson 37cd00
-            c_name = re.sub(r'([^(_a-zA-Z0-9)])', '', c_name)
Adam Williamson 37cd00
-
Adam Williamson 37cd00
-        c_name_no_underscores = re.sub(r'^_+', '', c_name)
Adam Williamson 37cd00
-
Adam Williamson 37cd00
-        ld = ld_obj.get_command()
Adam Williamson 37cd00
-        objcopy_object = self.interpreter.find_program_impl('objcopy', required=False)
Adam Williamson 37cd00
-        if objcopy_object.found():
Adam Williamson 37cd00
-            objcopy = objcopy_object.get_command()
Adam Williamson 37cd00
-        else:
Adam Williamson 37cd00
-            objcopy = None
Adam Williamson 37cd00
-
Adam Williamson 37cd00
-        o_kwargs = {
Adam Williamson 37cd00
-            'command': [ld, '-r', '-b', 'binary', '@INPUT@', '-o', '@OUTPUT@'],
Adam Williamson 37cd00
-            'input': target_g,
Adam Williamson 37cd00
-            'output': args[0] + '1.o'
Adam Williamson 37cd00
-        }
Adam Williamson 37cd00
-
Adam Williamson 37cd00
-        target_o = GResourceObjectTarget(args[0] + '1_o', state.subdir, state.subproject, o_kwargs)
Adam Williamson 37cd00
-
Adam Williamson 37cd00
-        builddir = os.path.join(state.environment.get_build_dir(), state.subdir)
Adam Williamson 37cd00
-        linkerscript_name = args[0] + '_map.ld'
Adam Williamson 37cd00
-        linkerscript_path = os.path.join(builddir, linkerscript_name)
Adam Williamson 37cd00
-        linkerscript_file = open(linkerscript_path, 'w')
Adam Williamson 37cd00
-
Adam Williamson 37cd00
-        # Create symbol name the way bfd does
Adam Williamson 37cd00
-        binary_name = os.path.join(state.subdir, g_output)
Adam Williamson 37cd00
-        encoding = sys.getfilesystemencoding()
Adam Williamson 37cd00
-        symbol_name = re.sub(rb'([^(_a-zA-Z0-9)])', b'_', binary_name.encode(encoding)).decode(encoding)
Adam Williamson 37cd00
-
Adam Williamson 37cd00
-        linkerscript_string = '''SECTIONS
Adam Williamson 37cd00
-{{
Adam Williamson 37cd00
-  .gresource.{} : ALIGN(8)
Adam Williamson 37cd00
-  {{
Adam Williamson 37cd00
-    {}_resource_data = _binary_{}_start;
Adam Williamson 37cd00
-  }}
Adam Williamson 37cd00
-  .data :
Adam Williamson 37cd00
-  {{
Adam Williamson 37cd00
-    *(.data)
Adam Williamson 37cd00
-  }}
Adam Williamson 37cd00
-}}'''.format(c_name_no_underscores, c_name, symbol_name)
Adam Williamson 37cd00
-
Adam Williamson 37cd00
-        linkerscript_file.write(linkerscript_string)
Adam Williamson 37cd00
-
Adam Williamson 37cd00
-        o2_kwargs = {
Adam Williamson 37cd00
-            'command': [ld, '-r', '-T', os.path.join(state.subdir, linkerscript_name), '@INPUT@', '-o', '@OUTPUT@'],
Adam Williamson 37cd00
-            'input': target_o,
Adam Williamson 37cd00
-            'output': args[0] + '2.o',
Adam Williamson 37cd00
-        }
Adam Williamson 37cd00
-        target_o2 = GResourceObjectTarget(args[0] + '2_o', state.subdir, state.subproject, o2_kwargs)
Adam Williamson 37cd00
-
Adam Williamson 37cd00
-        if objcopy is not None:
Adam Williamson 37cd00
-            objcopy_cmd = [objcopy, '--set-section-flags', '.gresource.' + c_name + '=readonly,alloc,load,data']
Adam Williamson 37cd00
-            objcopy_cmd += ['-N', '_binary_' + symbol_name + '_start']
Adam Williamson 37cd00
-            objcopy_cmd += ['-N', '_binary_' + symbol_name + '_end']
Adam Williamson 37cd00
-            objcopy_cmd += ['-N', '_binary_' + symbol_name + '_size']
Adam Williamson 37cd00
-            objcopy_cmd += ['@INPUT@', '@OUTPUT@']
Adam Williamson 37cd00
-
Adam Williamson 37cd00
-            o3_kwargs = {
Adam Williamson 37cd00
-                'command': objcopy_cmd,
Adam Williamson 37cd00
-                'input': target_o2,
Adam Williamson 37cd00
-                'output': args[0] + '3.o'
Adam Williamson 37cd00
-            }
Adam Williamson 37cd00
-
Adam Williamson 37cd00
-            target_o3 = GResourceObjectTarget(args[0] + '3_o', state.subdir, state.subproject, o3_kwargs)
Adam Williamson 37cd00
-
Adam Williamson 37cd00
-            rv1 = [target_c, target_h, target_o3]
Adam Williamson 37cd00
-            if target_g.get_id() not in self.interpreter.build.targets:
Adam Williamson 37cd00
-                rv2 = rv1 + [target_g, target_o, target_o2]
Adam Williamson 37cd00
-            else:
Adam Williamson 37cd00
-                rv2 = rv1 + [target_o, target_o2]
Adam Williamson 37cd00
-        else:
Adam Williamson 37cd00
-            rv1 = [target_c, target_h, target_o2]
Adam Williamson 37cd00
-            if target_g.get_id() not in self.interpreter.build.targets:
Adam Williamson 37cd00
-                rv2 = rv1 + [target_g, target_o]
Adam Williamson 37cd00
-            else:
Adam Williamson 37cd00
-                rv2 = rv1 + [target_o]
Adam Williamson 37cd00
-
Adam Williamson 37cd00
-        return ModuleReturnValue(rv1, rv2)
Adam Williamson 37cd00
-
Adam Williamson 37cd00
     def _get_gresource_dependencies(self, state, input_file, source_dirs, dependencies):
Adam Williamson 37cd00
 
Adam Williamson 37cd00
         cmd = ['glib-compile-resources',
Adam Williamson 37cd00
-- 
Adam Williamson 37cd00
2.21.0
Adam Williamson 37cd00