OXIESEC PANEL
- Current Dir:
/
/
snap
/
certbot
/
4737
/
lib
/
python3.12
/
site-packages
/
cffi
Server IP: 139.59.38.164
Upload:
Create Dir:
Name
Size
Modified
Perms
📁
..
-
06/12/2025 06:19:50 PM
rwxr-xr-x
📄
__init__.py
513 bytes
06/12/2025 06:19:38 PM
rw-r--r--
📁
__pycache__
-
06/12/2025 06:19:48 PM
rwxr-xr-x
📄
_cffi_errors.h
3.82 KB
06/12/2025 06:19:38 PM
rw-r--r--
📄
_cffi_include.h
14.7 KB
06/12/2025 06:19:38 PM
rw-r--r--
📄
_embedding.h
18.35 KB
06/12/2025 06:19:38 PM
rw-r--r--
📄
_imp_emulation.py
2.89 KB
06/12/2025 06:19:38 PM
rw-r--r--
📄
_shimmed_dist_utils.py
2.18 KB
06/12/2025 06:19:38 PM
rw-r--r--
📄
api.py
41.18 KB
06/12/2025 06:19:38 PM
rw-r--r--
📄
backend_ctypes.py
41.46 KB
06/12/2025 06:19:38 PM
rw-r--r--
📄
cffi_opcode.py
5.6 KB
06/12/2025 06:19:38 PM
rw-r--r--
📄
commontypes.py
2.74 KB
06/12/2025 06:19:38 PM
rw-r--r--
📄
cparser.py
43.74 KB
06/12/2025 06:19:38 PM
rw-r--r--
📄
error.py
877 bytes
06/12/2025 06:19:38 PM
rw-r--r--
📄
ffiplatform.py
3.5 KB
06/12/2025 06:19:38 PM
rw-r--r--
📄
lock.py
747 bytes
06/12/2025 06:19:38 PM
rw-r--r--
📄
model.py
21.29 KB
06/12/2025 06:19:38 PM
rw-r--r--
📄
parse_c_type.h
5.84 KB
06/12/2025 06:19:38 PM
rw-r--r--
📄
pkgconfig.py
4.27 KB
06/12/2025 06:19:38 PM
rw-r--r--
📄
recompiler.py
63.83 KB
06/12/2025 06:19:38 PM
rw-r--r--
📄
setuptools_ext.py
8.66 KB
06/12/2025 06:19:38 PM
rw-r--r--
📄
vengine_cpy.py
42.73 KB
06/12/2025 06:19:38 PM
rw-r--r--
📄
vengine_gen.py
26.31 KB
06/12/2025 06:19:38 PM
rw-r--r--
📄
verifier.py
10.92 KB
06/12/2025 06:19:38 PM
rw-r--r--
Editing: pkgconfig.py
Close
# pkg-config, https://www.freedesktop.org/wiki/Software/pkg-config/ integration for cffi import sys, os, subprocess from .error import PkgConfigError def merge_flags(cfg1, cfg2): """Merge values from cffi config flags cfg2 to cf1 Example: merge_flags({"libraries": ["one"]}, {"libraries": ["two"]}) {"libraries": ["one", "two"]} """ for key, value in cfg2.items(): if key not in cfg1: cfg1[key] = value else: if not isinstance(cfg1[key], list): raise TypeError("cfg1[%r] should be a list of strings" % (key,)) if not isinstance(value, list): raise TypeError("cfg2[%r] should be a list of strings" % (key,)) cfg1[key].extend(value) return cfg1 def call(libname, flag, encoding=sys.getfilesystemencoding()): """Calls pkg-config and returns the output if found """ a = ["pkg-config", "--print-errors"] a.append(flag) a.append(libname) try: pc = subprocess.Popen(a, stdout=subprocess.PIPE, stderr=subprocess.PIPE) except EnvironmentError as e: raise PkgConfigError("cannot run pkg-config: %s" % (str(e).strip(),)) bout, berr = pc.communicate() if pc.returncode != 0: try: berr = berr.decode(encoding) except Exception: pass raise PkgConfigError(berr.strip()) if sys.version_info >= (3,) and not isinstance(bout, str): # Python 3.x try: bout = bout.decode(encoding) except UnicodeDecodeError: raise PkgConfigError("pkg-config %s %s returned bytes that cannot " "be decoded with encoding %r:\n%r" % (flag, libname, encoding, bout)) if os.altsep != '\\' and '\\' in bout: raise PkgConfigError("pkg-config %s %s returned an unsupported " "backslash-escaped output:\n%r" % (flag, libname, bout)) return bout def flags_from_pkgconfig(libs): r"""Return compiler line flags for FFI.set_source based on pkg-config output Usage ... ffibuilder.set_source("_foo", pkgconfig = ["libfoo", "libbar >= 1.8.3"]) If pkg-config is installed on build machine, then arguments include_dirs, library_dirs, libraries, define_macros, extra_compile_args and extra_link_args are extended with an output of pkg-config for libfoo and libbar. Raises PkgConfigError in case the pkg-config call fails. """ def get_include_dirs(string): return [x[2:] for x in string.split() if x.startswith("-I")] def get_library_dirs(string): return [x[2:] for x in string.split() if x.startswith("-L")] def get_libraries(string): return [x[2:] for x in string.split() if x.startswith("-l")] # convert -Dfoo=bar to list of tuples [("foo", "bar")] expected by distutils def get_macros(string): def _macro(x): x = x[2:] # drop "-D" if '=' in x: return tuple(x.split("=", 1)) # "-Dfoo=bar" => ("foo", "bar") else: return (x, None) # "-Dfoo" => ("foo", None) return [_macro(x) for x in string.split() if x.startswith("-D")] def get_other_cflags(string): return [x for x in string.split() if not x.startswith("-I") and not x.startswith("-D")] def get_other_libs(string): return [x for x in string.split() if not x.startswith("-L") and not x.startswith("-l")] # return kwargs for given libname def kwargs(libname): fse = sys.getfilesystemencoding() all_cflags = call(libname, "--cflags") all_libs = call(libname, "--libs") return { "include_dirs": get_include_dirs(all_cflags), "library_dirs": get_library_dirs(all_libs), "libraries": get_libraries(all_libs), "define_macros": get_macros(all_cflags), "extra_compile_args": get_other_cflags(all_cflags), "extra_link_args": get_other_libs(all_libs), } # merge all arguments together ret = {} for libname in libs: lib_flags = kwargs(libname) merge_flags(ret, lib_flags) return ret