xpra icon
Bug tracker and wiki

Ticket #145: xpra-packages-with-alterantive-names.patch

File xpra-packages-with-alterantive-names.patch, 4.1 KB (added by Antoine Martin, 6 years ago)

allows us to look for libvpx OR vpx, and use the first pkg-config entry that exists

  • setup.py

     
    9090    vpx_include_dir = "%s\\include" % vpx_PATH
    9191    vpx_lib_dir = "%s\\lib\\Win32" % vpx_PATH
    9292
    93     def pkgconfig(*args):
     93    def pkgconfig(*packages):
    9494        def add_to_PATH(bindir):
    9595            import os
    9696            if os.environ['PATH'].find(bindir)<0:
    9797                os.environ['PATH'] = bindir + ';' + os.environ['PATH']
    9898            if bindir not in sys.path:
    9999                sys.path.append(bindir)
    100         if args[0]=="x264":
     100        if "x264" in packages[0]:
    101101            add_to_PATH(ffmpeg_bin_dir)
    102102            return {'include_dirs': ["xpra/x264/win32", ffmpeg_include_dir],
    103103                    'library_dirs': ["xpra/x264/win32", ffmpeg_lib_dir],
    104104                    'libraries':    ["x264lib", "swscale", "avcodec", "avutil"]}
    105         elif args[0]=="vpx":
     105        elif "vpx" in packages[0]:
    106106            add_to_PATH(ffmpeg_bin_dir)
    107107            return {'include_dirs': ["xpra/vpx/win32", vpx_include_dir, ffmpeg_include_dir],
    108108                    'library_dirs': ["xpra/vpx/win32", vpx_lib_dir, ffmpeg_lib_dir],
    109109                    'libraries':    ["vpxmt", "vpxmtd", "swscale", "avcodec", "avutil"]}
    110110        else:
    111             raise Exception("unknown package config: %s" % str(args))
     111            raise Exception("unknown package config: %s" % str(packages))
    112112
    113113    import py2exe    #@UnresolvedImport
    114114    assert py2exe is not None
     
    152152    )
    153153else:
    154154    # Tweaked from http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/502261
    155     def pkgconfig(*packages, **ekw):
     155    def pkgconfig(*packages_options, **ekw):
     156        packages = []
     157        #find out which package name to use from potentially many options
     158        #and bail out early with a meaningful error if we can't find any valid options
     159        for package_options in packages_options:
     160            #for this package options, find the ones that work
     161            valid_option = None
     162            if type(package_options)==str:
     163                options = [package_options]     #got given just one string
     164            else:
     165                assert type(package_options)==list
     166                options = package_options       #got given a list of options
     167            for option in options:
     168                cmd = ["pkg-config", "--exists", option]
     169                proc = subprocess.Popen(cmd, stdin=None, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
     170                status = proc.wait()
     171                if status==0:
     172                    valid_option = option
     173                    break
     174            if not valid_option:
     175                raise Exception("cannot find a valid pkg-config package for %s" % (package_options,))
     176            packages.append(valid_option)
     177        print("pkgconfig(%s,%s) using package names=%s" % (packages_options, ekw, packages))
    156178        flag_map = {'-I': 'include_dirs',
    157179                    '-L': 'library_dirs',
    158180                    '-l': 'libraries'}
     
    172194                kw.setdefault('extra_link_args', []).append(token)
    173195            for k, v in kw.items(): # remove duplicates
    174196                kw[k] = list(set(v))
    175         print("pkgconfig(%s,%s)=%s" % (packages, ekw, kw))
     197        print("pkgconfig(%s,%s) keywords=%s" % (packages_options, ekw, kw))
    176198        return kw
    177199
    178200    scripts=["scripts/parti", "scripts/parti-repl",
     
    245267    packages.append("xpra.x264")
    246268    cython_add(Extension("xpra.x264.codec",
    247269                ["xpra/x264/codec.pyx", "xpra/x264/x264lib.c"],
    248                 **pkgconfig("x264", "libswscale", "libavcodec")
     270                **pkgconfig(["libx264", "x264"], "libswscale", "libavcodec")
    249271                ), min_version=(0, 16))
    250272if vpx_ENABLED:
    251273    packages.append("xpra.vpx")
    252274    cython_add(Extension("xpra.vpx.codec",
    253275                ["xpra/vpx/codec.pyx", "xpra/vpx/vpxlib.c"],
    254                 **pkgconfig("vpx", "libswscale", "libavcodec")
     276                **pkgconfig(["libvpx", "vpx"], "libswscale", "libavcodec")
    255277                ), min_version=(0, 16))
    256278
    257279