about summary refs log tree commit diff
path: root/pkgs/development/compilers/flutter/engine/pkg-config.py
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/development/compilers/flutter/engine/pkg-config.py')
-rw-r--r--pkgs/development/compilers/flutter/engine/pkg-config.py247
1 files changed, 0 insertions, 247 deletions
diff --git a/pkgs/development/compilers/flutter/engine/pkg-config.py b/pkgs/development/compilers/flutter/engine/pkg-config.py
deleted file mode 100644
index 1df08211e570..000000000000
--- a/pkgs/development/compilers/flutter/engine/pkg-config.py
+++ /dev/null
@@ -1,247 +0,0 @@
-#!/usr/bin/env python3
-#
-# Copyright (c) 2013 The Chromium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style license that can be
-# found in the LICENSE file.
-
-
-
-import json
-import os
-import subprocess
-import sys
-import re
-from optparse import OptionParser
-
-# This script runs pkg-config, optionally filtering out some results, and
-# returns the result.
-#
-# The result will be [ <includes>, <cflags>, <libs>, <lib_dirs>, <ldflags> ]
-# where each member is itself a list of strings.
-#
-# You can filter out matches using "-v <regexp>" where all results from
-# pkgconfig matching the given regular expression will be ignored. You can
-# specify more than one regular expression my specifying "-v" more than once.
-#
-# You can specify a sysroot using "-s <sysroot>" where sysroot is the absolute
-# system path to the sysroot used for compiling. This script will attempt to
-# generate correct paths for the sysroot.
-#
-# When using a sysroot, you must also specify the architecture via
-# "-a <arch>" where arch is either "x86" or "x64".
-#
-# CrOS systemroots place pkgconfig files at <systemroot>/usr/share/pkgconfig
-# and one of <systemroot>/usr/lib/pkgconfig or <systemroot>/usr/lib64/pkgconfig
-# depending on whether the systemroot is for a 32 or 64 bit architecture. They
-# specify the 'lib' or 'lib64' of the pkgconfig path by defining the
-# 'system_libdir' variable in the args.gn file. pkg_config.gni communicates this
-# variable to this script with the "--system_libdir <system_libdir>" flag. If no
-# flag is provided, then pkgconfig files are assumed to come from
-# <systemroot>/usr/lib/pkgconfig.
-#
-# Additionally, you can specify the option --atleast-version. This will skip
-# the normal outputting of a dictionary and instead print true or false,
-# depending on the return value of pkg-config for the given package.
-
-
-def SetConfigPath(options):
-  """Set the PKG_CONFIG_LIBDIR environment variable.
-
-  This takes into account any sysroot and architecture specification from the
-  options on the given command line.
-  """
-
-  sysroot = options.sysroot
-  assert sysroot
-
-  # Compute the library path name based on the architecture.
-  arch = options.arch
-  if sysroot and not arch:
-    print("You must specify an architecture via -a if using a sysroot.")
-    sys.exit(1)
-
-  libdir = sysroot + '/' + options.system_libdir + '/pkgconfig'
-  libdir += ':' + sysroot + '/share/pkgconfig'
-  os.environ['PKG_CONFIG_LIBDIR'] = libdir
-  return libdir
-
-
-def GetPkgConfigPrefixToStrip(options, args):
-  """Returns the prefix from pkg-config where packages are installed.
-
-  This returned prefix is the one that should be stripped from the beginning of
-  directory names to take into account sysroots.
-  """
-  # Some sysroots, like the Chromium OS ones, may generate paths that are not
-  # relative to the sysroot. For example,
-  # /path/to/chroot/build/x86-generic/usr/lib/pkgconfig/pkg.pc may have all
-  # paths relative to /path/to/chroot (i.e. prefix=/build/x86-generic/usr)
-  # instead of relative to /path/to/chroot/build/x86-generic (i.e prefix=/usr).
-  # To support this correctly, it's necessary to extract the prefix to strip
-  # from pkg-config's |prefix| variable.
-  prefix = subprocess.check_output([options.pkg_config,
-      "--variable=prefix"] + args, env=os.environ).decode('utf-8')
-  return prefix
-
-
-def MatchesAnyRegexp(flag, list_of_regexps):
-  """Returns true if the first argument matches any regular expression in the
-  given list."""
-  for regexp in list_of_regexps:
-    if regexp.search(flag) != None:
-      return True
-  return False
-
-
-def RewritePath(path, strip_prefix, sysroot):
-  """Rewrites a path by stripping the prefix and prepending the sysroot."""
-  if os.path.isabs(path) and not path.startswith(sysroot):
-    if path.startswith(strip_prefix):
-      path = path[len(strip_prefix):]
-    path = path.lstrip('/')
-    return os.path.join(sysroot, path)
-  else:
-    return path
-
-
-def main():
-  # If this is run on non-Linux platforms, just return nothing and indicate
-  # success. This allows us to "kind of emulate" a Linux build from other
-  # platforms.
-  if "linux" not in sys.platform:
-    print("[[],[],[],[],[]]")
-    return 0
-
-  parser = OptionParser()
-  parser.add_option('-d', '--debug', action='store_true')
-  parser.add_option('-p', action='store', dest='pkg_config', type='string',
-                    default='pkg-config')
-  parser.add_option('-v', action='append', dest='strip_out', type='string')
-  parser.add_option('-s', action='store', dest='sysroot', type='string')
-  parser.add_option('-a', action='store', dest='arch', type='string')
-  parser.add_option('--system_libdir', action='store', dest='system_libdir',
-                    type='string', default='lib')
-  parser.add_option('--atleast-version', action='store',
-                    dest='atleast_version', type='string')
-  parser.add_option('--libdir', action='store_true', dest='libdir')
-  parser.add_option('--dridriverdir', action='store_true', dest='dridriverdir')
-  parser.add_option('--version-as-components', action='store_true',
-                    dest='version_as_components')
-  (options, args) = parser.parse_args()
-
-  # Make a list of regular expressions to strip out.
-  strip_out = []
-  if options.strip_out != None:
-    for regexp in options.strip_out:
-      strip_out.append(re.compile(regexp))
-
-  if options.sysroot:
-    libdir = SetConfigPath(options)
-    if options.debug:
-      sys.stderr.write('PKG_CONFIG_LIBDIR=%s\n' % libdir)
-    prefix = GetPkgConfigPrefixToStrip(options, args)
-  else:
-    prefix = ''
-
-  if options.atleast_version:
-    # When asking for the return value, just run pkg-config and print the return
-    # value, no need to do other work.
-    if not subprocess.call([options.pkg_config,
-                            "--atleast-version=" + options.atleast_version] +
-                            args):
-      print("true")
-    else:
-      print("false")
-    return 0
-
-  if options.version_as_components:
-    cmd = [options.pkg_config, "--modversion"] + args
-    try:
-      version_string = subprocess.check_output(cmd).decode('utf-8')
-    except:
-      sys.stderr.write('Error from pkg-config.\n')
-      return 1
-    print(json.dumps(list(map(int, version_string.strip().split(".")))))
-    return 0
-
-
-  if options.libdir:
-    cmd = [options.pkg_config, "--variable=libdir"] + args
-    if options.debug:
-      sys.stderr.write('Running: %s\n' % cmd)
-    try:
-      libdir = subprocess.check_output(cmd).decode('utf-8')
-    except:
-      print("Error from pkg-config.")
-      return 1
-    sys.stdout.write(libdir.strip())
-    return 0
-
-  if options.dridriverdir:
-    cmd = [options.pkg_config, "--variable=dridriverdir"] + args
-    if options.debug:
-      sys.stderr.write('Running: %s\n' % cmd)
-    try:
-      dridriverdir = subprocess.check_output(cmd).decode('utf-8')
-    except:
-      print("Error from pkg-config.")
-      return 1
-    sys.stdout.write(dridriverdir.strip())
-    return
-
-  cmd = [options.pkg_config, "--cflags", "--libs"] + args
-  if options.debug:
-    sys.stderr.write('Running: %s\n' % ' '.join(cmd))
-
-  try:
-    flag_string = subprocess.check_output(cmd).decode('utf-8')
-  except:
-    sys.stderr.write('Could not run pkg-config.\n')
-    return 1
-
-  # For now just split on spaces to get the args out. This will break if
-  # pkgconfig returns quoted things with spaces in them, but that doesn't seem
-  # to happen in practice.
-  all_flags = flag_string.strip().split(' ')
-
-
-  sysroot = options.sysroot
-  if not sysroot:
-    sysroot = ''
-
-  includes = []
-  cflags = []
-  libs = []
-  lib_dirs = []
-
-  for flag in all_flags[:]:
-    if len(flag) == 0 or MatchesAnyRegexp(flag, strip_out):
-      continue;
-
-    if flag[:2] == '-l':
-      libs.append(RewritePath(flag[2:], prefix, sysroot))
-    elif flag[:2] == '-L':
-      lib_dirs.append(RewritePath(flag[2:], prefix, sysroot))
-    elif flag[:2] == '-I':
-      includes.append(RewritePath(flag[2:], prefix, sysroot))
-    elif flag[:3] == '-Wl':
-      # Don't allow libraries to control ld flags.  These should be specified
-      # only in build files.
-      pass
-    elif flag == '-pthread':
-      # Many libs specify "-pthread" which we don't need since we always include
-      # this anyway. Removing it here prevents a bunch of duplicate inclusions
-      # on the command line.
-      pass
-    else:
-      cflags.append(flag)
-
-  # Output a GN array, the first one is the cflags, the second are the libs. The
-  # JSON formatter prints GN compatible lists when everything is a list of
-  # strings.
-  print(json.dumps([includes, cflags, libs, lib_dirs]))
-  return 0
-
-
-if __name__ == '__main__':
-  sys.exit(main())