Skip to content

Commit

Permalink
Fix build on Docker containers
Browse files Browse the repository at this point in the history
Fixes #3244
  • Loading branch information
pslacerda committed Jul 9, 2018
1 parent 937443f commit 9eadf54
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 54 deletions.
1 change: 1 addition & 0 deletions .venv/lib64
1 change: 1 addition & 0 deletions .venv/pip-selfcheck.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"last_check":"2018-07-09T07:16:29Z","pypi_version":"10.0.1"}
3 changes: 3 additions & 0 deletions .venv/pyvenv.cfg
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
home = /usr/local/bin
include-system-site-packages = false
version = 3.6.5
90 changes: 36 additions & 54 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import os
import platform as plat
import re
import string
import struct
import subprocess
import sys
Expand Down Expand Up @@ -74,6 +75,27 @@ def _dbg(s, tp=None):
print(s)


def _find_strings_in_binary(filename, min=5):
# based on https://stackoverflow.com/a/17197027/199332
if sys.version_info[0] == 3:
fp = open(filename, errors="ignore")
else:
fp = open(filename, "rb")
try:
result = ""
for c in fp.read():
if c in string.printable:
result += c
continue
if len(result) >= min:
yield result
result = ""
if len(result) >= min: # catch result at EOF
yield result
finally:
fp.close()


def _add_directory(path, subdir, where=None):
if subdir is None:
return
Expand Down Expand Up @@ -334,60 +356,20 @@ def build_extensions(self):
_add_directory(include_dirs, "/usr/X11/include")

elif sys.platform.startswith("linux"):
arch_tp = (plat.processor(), plat.architecture()[0])
# This should be correct on debian derivatives.
if os.path.exists('/etc/debian_version'):
# If this doesn't work, don't just silently patch
# downstream because it's going to break when people
# try to build pillow from source instead of
# installing from the system packages.
self.add_multiarch_paths()

elif arch_tp == ("x86_64", "32bit"):
# Special Case: 32-bit build on 64-bit machine.
_add_directory(library_dirs, "/usr/lib/i386-linux-gnu")
else:
libdirs = {
'x86_64': ["/lib64", "/usr/lib64",
"/usr/lib/x86_64-linux-gnu"],
'64bit': ["/lib64", "/usr/lib64",
"/usr/lib/x86_64-linux-gnu"],
'i386': ["/usr/lib/i386-linux-gnu"],
'i686': ["/usr/lib/i386-linux-gnu"],
'32bit': ["/usr/lib/i386-linux-gnu"],
'aarch64': ["/usr/lib64", "/usr/lib/aarch64-linux-gnu"],
'arm': ["/usr/lib/arm-linux-gnueabi"],
'armv71': ["/usr/lib/arm-linux-gnueabi"],
'armv7l': ["/usr/lib"],
'ppc64': ["/usr/lib64", "/usr/lib/ppc64-linux-gnu",
"/usr/lib/powerpc64-linux-gnu"],
'ppc64le': ["/usr/lib64"],
'ppc': ["/usr/lib/ppc-linux-gnu",
"/usr/lib/powerpc-linux-gnu"],
's390x': ["/usr/lib64", "/usr/lib/s390x-linux-gnu"],
's390': ["/usr/lib/s390-linux-gnu"],
}

for platform_ in arch_tp:
dirs = libdirs.get(platform_, None)
if not dirs:
continue
for path in dirs:
_add_directory(library_dirs, path)
break

else:
raise ValueError(
"Unable to identify Linux platform: `%s`" % platform_)

# termux support for android.
# system libraries (zlib) are installed in /system/lib
# headers are at $PREFIX/include
# user libs are at $PREFIX/lib
if os.environ.get('ANDROID_ROOT', None):
_add_directory(library_dirs,
os.path.join(os.environ['ANDROID_ROOT'],
'lib'))
ld_so_cache = '/etc/ld.so.cache'
if os.path.isfile(ld_so_cache):
for candidate in _find_strings_in_binary(ld_so_cache):
if candidate[0] == '/':
dirname = os.path.dirname(candidate)
_add_directory(library_dirs, dirname)
# termux support for android.
# system libraries (zlib) are installed in /system/lib
# headers are at $PREFIX/include
# user libs are at $PREFIX/lib
if os.environ.get('ANDROID_ROOT', None):
_add_directory(library_dirs,
os.path.join(os.environ['ANDROID_ROOT'],
'lib'))

elif sys.platform.startswith("gnu"):
self.add_multiarch_paths()
Expand Down

0 comments on commit 9eadf54

Please sign in to comment.