From 77b0a59bed1e4bd2e1cb336e1b9dbbf0c83add8a Mon Sep 17 00:00:00 2001 From: Pavel Minaev Date: Thu, 26 Aug 2021 16:41:11 -0700 Subject: [PATCH] Filter vendored binaries based on filename, instead of a hardcoded list. --- setup.py | 41 +++++++++++++---------------------------- 1 file changed, 13 insertions(+), 28 deletions(-) diff --git a/setup.py b/setup.py index e0268cc5..ee5bbba9 100644 --- a/setup.py +++ b/setup.py @@ -73,32 +73,6 @@ class ExtModules(list): return True -# Filter platform-specific binaries in data files for binary builds. -# If a data file is not in this list, it is assumed to be applicable to all platforms. - -win_all = {"win32", "win-amd64"} -vendored_binaries = dict( - (os.path.normpath(k), v) - for k, v in { - "pydevd/pydevd_attach_to_process/attach_x86.dll": win_all, - "pydevd/pydevd_attach_to_process/attach_x86.pdb": win_all, - "pydevd/pydevd_attach_to_process/attach_amd64.dll": win_all, - "pydevd/pydevd_attach_to_process/attach_amd64.pdb": win_all, - "pydevd/pydevd_attach_to_process/inject_dll_x86.exe": win_all, - "pydevd/pydevd_attach_to_process/inject_dll_x86.pdb": win_all, - "pydevd/pydevd_attach_to_process/inject_dll_amd64.exe": win_all, - "pydevd/pydevd_attach_to_process/inject_dll_amd64.pdb": win_all, - "pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.dll": win_all, - "pydevd/pydevd_attach_to_process/run_code_on_dllmain_x86.pdb": win_all, - "pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.dll": win_all, - "pydevd/pydevd_attach_to_process/run_code_on_dllmain_amd64.pdb": win_all, - "pydevd/pydevd_attach_to_process/attach_linux_x86.so": {"linux-i686"}, - "pydevd/pydevd_attach_to_process/attach_linux_amd64.so": {"linux-x86_64"}, - "pydevd/pydevd_attach_to_process/attach_x86_64.dylib": {"macosx_10_14_x86_64"}, - }.items() -) - - class build(_build): def finalize_options(self): # Mark all packages as pure if requested to build a universal wheel. @@ -111,6 +85,7 @@ class build(_build): class build_py(_build_py): + # Filter platform-specific binaries in data files for binary builds. def finalize_options(self): _build_py.finalize_options(self) @@ -122,8 +97,18 @@ class build_py(_build_py): data_files = self.data_files def is_applicable(filename): - filename = os.path.normpath(filename) - return plat in vendored_binaries.get(filename, {plat}) + def tail_is(*suffixes): + return any((filename.endswith(ext) for ext in suffixes)) + + if tail_is(".dylib"): + return plat.startswith("macosx") + if tail_is(".exe", ".dll", ".pdb", ".pyd"): + return plat in ("win32", "win-amd64") + if tail_is("-i386-linux-gnu.so", "_linux_x86.so"): + return plat == "linux-i686" + if tail_is("-x86_64-linux-gnu.so", "_linux_amd64.so"): + return plat == "linux-x86_64" + return True self.data_files = [ (package, src_dir, build_dir, list(filter(is_applicable, filenames)))