[Instrumented libraries] Fix atk1.0 build for Focal

R=thestig

Bug: 1260217
Change-Id: If99bcb15b3fbdc0e81df3c719ab2dc90c12083f3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3260838
Auto-Submit: Thomas Anderson <thomasanderson@chromium.org>
Reviewed-by: Lei Zhang <thestig@chromium.org>
Commit-Queue: Thomas Anderson <thomasanderson@chromium.org>
Cr-Commit-Position: refs/heads/main@{#938347}
diff --git a/third_party/instrumented_libraries/focal/BUILD.gn b/third_party/instrumented_libraries/focal/BUILD.gn
index 0602aed3..314dd1c9 100644
--- a/third_party/instrumented_libraries/focal/BUILD.gn
+++ b/third_party/instrumented_libraries/focal/BUILD.gn
@@ -157,12 +157,9 @@
 }
 
 instrumented_library("atk1.0") {
-  extra_configure_flags = [
-    "--disable-static",
-
-    # See above.
-    "--disable-introspection",
-  ]
+  build_method = "meson"
+  package_ldflags = [ "-Wl,-z,undefs" ]
+  extra_configure_flags = [ "-Dintrospection=false" ]
 }
 
 instrumented_library("brltty") {
diff --git a/third_party/instrumented_libraries/focal/scripts/download_build_install.py b/third_party/instrumented_libraries/focal/scripts/download_build_install.py
index 425d1c544..0153ef65 100755
--- a/third_party/instrumented_libraries/focal/scripts/download_build_install.py
+++ b/third_party/instrumented_libraries/focal/scripts/download_build_install.py
@@ -255,6 +255,9 @@
 
     self.make_install(make_args)
 
+    self.post_install()
+
+  def post_install(self):
     self.cleanup_after_install()
 
     self.fix_rpaths(self.temp_libdir())
@@ -414,6 +417,35 @@
                                                 self.dest_libdir()))
 
 
+class MesonBuilder(InstrumentedPackageBuilder):
+  def build_and_install(self):
+    meson_flags = {
+      'prefix': '/usr',
+      'libdir': self._libdir,
+      'sbindir': 'bin',
+    }
+    meson_cmd = [
+      'meson',
+      'build',
+      '.',
+      ' '.join('--%s %s' % item for item in meson_flags.items()),
+      self._extra_configure_flags,
+    ]
+
+    self.shell_call(' '.join(meson_cmd),
+                    env=self._build_env, cwd=self._source_dir)
+    self.shell_call('ninja -C build', cwd=self._source_dir)
+    self.shell_call('ninja -C build install',
+                    {**self._build_env, 'DESTDIR': self.temp_dir()},
+                    cwd=self._source_dir)
+    self.post_install()
+
+  # LIBDIR is always relative to the prefix (/usr), so that needs to be added
+  # unlike when using configure.
+  def temp_libdir(self):
+    return os.path.join(self.temp_dir(), 'usr', self._libdir)
+
+
 class NSSBuilder(InstrumentedPackageBuilder):
   def build_and_install(self):
     # NSS uses a build system that's different from configure/make/install. All
@@ -522,6 +554,8 @@
     builder = Libpci3Builder(args, clobber)
   elif args.build_method == 'debian':
     builder = DebianBuilder(args, clobber)
+  elif args.build_method == 'meson':
+    builder = MesonBuilder(args, clobber)
   elif args.build_method == 'stub':
     builder = StubBuilder(args, clobber)
   else:
diff --git a/third_party/instrumented_libraries/scripts/build_and_package.py b/third_party/instrumented_libraries/scripts/build_and_package.py
index b9367f1b9..447e339 100755
--- a/third_party/instrumented_libraries/scripts/build_and_package.py
+++ b/third_party/instrumented_libraries/scripts/build_and_package.py
@@ -51,6 +51,7 @@
       'is_debug = false',
       'use_goma = %s' % str(use_goma).lower(),
       'use_locally_built_instrumented_libraries = true',
+      'instrumented_libraries_release = "%s"' % ubuntu_release,
   ] + BUILD_TYPES[build_type]
   with open(os.path.join(build_dir, 'args.gn'), 'w') as f:
     f.write('\n'.join(gn_args) + '\n')