|
|
|
@ -13,6 +13,12 @@ _PYTHON2_LIB_PATH = "PYTHON2_LIB_PATH" |
|
|
|
|
_PYTHON3_BIN_PATH = "PYTHON3_BIN_PATH" |
|
|
|
|
_PYTHON3_LIB_PATH = "PYTHON3_LIB_PATH" |
|
|
|
|
|
|
|
|
|
_HEADERS_HELP = ( |
|
|
|
|
"Are Python headers installed? Try installing python-dev or " + |
|
|
|
|
"python3-dev on Debian-based systems. Try python-devel or python3-devel " + |
|
|
|
|
"on Redhat-based systems." |
|
|
|
|
) |
|
|
|
|
|
|
|
|
|
def _tpl(repository_ctx, tpl, substitutions = {}, out = None): |
|
|
|
|
if not out: |
|
|
|
|
out = tpl |
|
|
|
@ -229,13 +235,28 @@ def _get_python_include(repository_ctx, python_bin): |
|
|
|
|
"from distutils import sysconfig;" + |
|
|
|
|
"print(sysconfig.get_python_inc())", |
|
|
|
|
], |
|
|
|
|
error_msg = "Problem getting python include path.", |
|
|
|
|
error_msg = "Problem getting python include path for {}.".format(python_bin), |
|
|
|
|
error_details = ( |
|
|
|
|
"Is the Python binary path set up right? " + "(See ./configure or " + |
|
|
|
|
_PYTHON2_BIN_PATH + ".) " + "Is distutils installed?" |
|
|
|
|
python_bin + ".) " + "Is distutils installed? " + |
|
|
|
|
_HEADERS_HELP |
|
|
|
|
), |
|
|
|
|
) |
|
|
|
|
return result.stdout.splitlines()[0] |
|
|
|
|
include_path = result.stdout.splitlines()[0] |
|
|
|
|
_execute( |
|
|
|
|
repository_ctx, |
|
|
|
|
[ |
|
|
|
|
python_bin, |
|
|
|
|
"-c", |
|
|
|
|
"import os;" + |
|
|
|
|
"main_header = os.path.join('{}', 'Python.h');".format(include_path) + |
|
|
|
|
"assert os.path.exists(main_header), main_header + ' does not exist.'" |
|
|
|
|
], |
|
|
|
|
error_msg = "Unable to find Python headers for {}".format(python_bin), |
|
|
|
|
error_details = _HEADERS_HELP, |
|
|
|
|
empty_stdout_fine = True, |
|
|
|
|
) |
|
|
|
|
return include_path |
|
|
|
|
|
|
|
|
|
def _get_python_import_lib_name(repository_ctx, python_bin, bin_path_key): |
|
|
|
|
"""Get Python import library name (pythonXY.lib) on Windows.""" |
|
|
|
|