blob: 6eb8a39eceec7179eb78f9d015f0c5bdc336b619 [file] [log] [blame]
Geoffrey Irving4c85a082016-03-16 12:20:34 -08001#!/usr/bin/env bash
A. Unique TensorFlower122cdce2016-06-02 12:32:54 -08002# Copyright 2015 The TensorFlow Authors. All Rights Reserved.
Vijay Vasudevana4806a32015-12-03 10:26:25 -08003#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15# ==============================================================================
Vijay Vasudevanbf6b5362015-12-02 15:04:40 -080016
17set -e -o errexit
18
Vijay Vasudevan8cc567b2016-05-26 11:05:13 -080019if [ -d "../org_tensorflow" ]; then
20 script_path="../org_tensorflow"
21else
22 # Prefix expected paths with ./ locally and external/reponame/ for remote repos.
23 # TODO(kchodorow): remove once runfiles paths are fixed, see
24 # https://github.com/bazelbuild/bazel/issues/848.
25 script_path=$(dirname $(dirname $(dirname "$0")))
26 script_path=${script_path:-.}
27fi
28
Martin Wicke59f1eba2016-02-07 12:34:25 -080029EXPECTED_PATHS="$script_path/util/python/python_include"\
30" $script_path/util/python/python_lib"\
31" $script_path/third_party/py/numpy/numpy_include"
Vijay Vasudevanbf6b5362015-12-02 15:04:40 -080032
33function main {
34 argument="$1"
35 shift
36 case $argument in
37 --check)
38 check_python
39 exit 0
40 ;;
41 --setup)
42 setup_python "$1"
43 exit 0
44 ;;
45 esac
46}
47
Olivia Nordquist4959a122016-08-09 11:16:44 -080048function python_path {
49 python - <<END
50from __future__ import print_function
51import site
52import os
53
54try:
55 input = raw_input
56except NameError:
57 pass
58
59python_paths = []
60if os.getenv('PYTHONPATH') is not None:
61 python_paths = os.getenv('PYTHONPATH').split(':')
62
63all_paths = set(python_paths + site.getsitepackages())
64
65paths = []
66for path in all_paths:
67 if os.path.isdir(path):
68 paths.append(path)
69
70if len(paths) == 1:
71 print(paths[0])
72ret_paths = ""
73for path in paths:
74 ret_paths += path + " "
75print(ret_paths)
76END
77}
78
79function default_python_path {
80 PYTHON_ARG="$1" python - <<END
81from __future__ import print_function
82import os
83
84default = os.getenv('PYTHON_ARG')
85default = str(default)
86print(default)
87END
88}
89
Vijay Vasudevanbf6b5362015-12-02 15:04:40 -080090function setup_python {
91 PYTHON_BIN_PATH="$1";
92
93 if [ -z "$PYTHON_BIN_PATH" ]; then
94 echo "PYTHON_BIN_PATH was not provided. Did you run configure?"
95 exit 1
96 fi
97 if [ ! -x "$PYTHON_BIN_PATH" ] || [ -d "$PYTHON_BIN_PATH" ]; then
98 echo "PYTHON_BIN_PATH is not executable. Is it the python binary?"
99 exit 1
100 fi
101
Vijay Vasudevaneb5e56e2015-12-03 14:39:42 -0800102 local python_major_version=$("${PYTHON_BIN_PATH}" -c 'from __future__ import print_function; import sys; print(sys.version_info[0]);')
103 if [ "$python_major_version" == "" ]; then
104 echo -e "\n\nERROR: Problem getting python version. Is $PYTHON_BIN_PATH the correct python binary?"
105 exit 1
106 fi
107
Vijay Vasudevanbf6b5362015-12-02 15:04:40 -0800108 local python_include=$("${PYTHON_BIN_PATH}" -c 'from __future__ import print_function; from distutils import sysconfig; print(sysconfig.get_python_inc());')
109 if [ "$python_include" == "" ]; then
110 echo -e "\n\nERROR: Problem getting python include path. Is distutils installed?"
111 exit 1
112 fi
Olivia Nordquist4959a122016-08-09 11:16:44 -0800113
114 local python_lib_path=$(python_path)
115 echo "Found possible Python library paths:"
116 for x in $python_lib_path; do
117 echo " $x"
118 done
119 set -- $python_lib_path
120 echo "Please input the desired Python library path to use. Default is ["$1"]"
A. Unique TensorFlower5c29a242016-08-12 06:21:36 -0800121 read b || true
Olivia Nordquist4959a122016-08-09 11:16:44 -0800122 if [ "$b" == "" ]; then
123 python_lib="$(default_python_path $python_lib_path)"
124 echo $python_lib
125 else
126 if test -d $b -a -x $b; then
127 python_lib=$b
128 else
129 echo -e "\n\nERROR: The path you have entered does not exist."
130 exit 1
131 fi
Vijay Vasudevanbf6b5362015-12-02 15:04:40 -0800132 fi
Olivia Nordquist4959a122016-08-09 11:16:44 -0800133
Vijay Vasudevanbf6b5362015-12-02 15:04:40 -0800134 local numpy_include=$("${PYTHON_BIN_PATH}" -c 'from __future__ import print_function; import numpy; print(numpy.get_include());')
135 if [ "$numpy_include" == "" ]; then
136 echo -e "\n\nERROR: Problem getting numpy include path. Is numpy installed?"
137 exit 1
138 fi
139
140 for x in $EXPECTED_PATHS; do
141 if [ -e "$x" ]; then
142 rm "$x"
143 fi
144 done
145
Eugene Brevdo56f1d642016-03-10 17:18:30 -0800146 ln -sf "${python_include}" util/python/python_include
147 ln -sf "${python_lib}" util/python/python_lib
148 ln -sf "${numpy_include}" third_party/py/numpy/numpy_include
Vijay Vasudevaneb5e56e2015-12-03 14:39:42 -0800149
150 # Write tools/bazel.rc
151 echo "# Autogenerated by configure: DO NOT EDIT" > tools/bazel.rc
152 sed -e "s/\$PYTHON_MAJOR_VERSION/$python_major_version/g" \
153 -e "s[\$PYTHON_BINARY[$PYTHON_BIN_PATH[g" \
154 tools/bazel.rc.template >> tools/bazel.rc
Vijay Vasudevan019c6792015-12-10 10:15:38 -0800155 # Write tools/python_bin_path.sh
156 echo "export PYTHON_BIN_PATH=$PYTHON_BIN_PATH" > tools/python_bin_path.sh
Vijay Vasudevanbf6b5362015-12-02 15:04:40 -0800157}
158
159function check_python {
160 for x in $EXPECTED_PATHS; do
161 if [ ! -e "$x" ]; then
162 echo -e "\n\nERROR: Cannot find '${x}'. Did you run configure?\n\n" 1>&2
163 exit 1
164 fi
165 if [ ! -L "${x}" ]; then
166 echo -e "\n\nERROR: '${x}' is not a symbolic link. Internal error.\n\n" 1>&2
167 exit 1
168 fi
169 true_path=$(readlink "${x}")
170 if [ ! -d "${true_path}" ]; then
171 echo -e "\n\nERROR: '${x}' does not refer to an existing directory: ${true_path}. Do you need to rerun configure?\n\n" 1>&2
172 exit 1
173 fi
174 done
175}
176
177main "$@"