Skip to content

Commit 2aea897

Browse files
committed
Merge pull request matplotlib#378 from mdboom/tk_build_improvements
Tk build improvements
2 parents 7b98a96 + aea66e0 commit 2aea897

File tree

1 file changed

+28
-49
lines changed

1 file changed

+28
-49
lines changed

setupext.py

Lines changed: 28 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -914,9 +914,11 @@ def query_tcltk():
914914
def parse_tcl_config(tcl_lib_dir, tk_lib_dir):
915915
import Tkinter
916916
tcl_poss = [tcl_lib_dir,
917+
os.path.normpath(os.path.join(tcl_lib_dir, '..')),
917918
"/usr/lib/tcl"+str(Tkinter.TclVersion),
918919
"/usr/lib"]
919920
tk_poss = [tk_lib_dir,
921+
os.path.normpath(os.path.join(tk_lib_dir, '..')),
920922
"/usr/lib/tk"+str(Tkinter.TkVersion),
921923
"/usr/lib"]
922924
for ptcl, ptk in zip(tcl_poss, tk_poss):
@@ -927,52 +929,29 @@ def parse_tcl_config(tcl_lib_dir, tk_lib_dir):
927929
if not (os.path.exists(tcl_config) and os.path.exists(tk_config)):
928930
return None
929931

930-
# These files are shell scripts that set a bunch of
931-
# environment variables. To actually get at the
932-
# values, we use ConfigParser, which supports almost
933-
# the same format, but requires at least one section.
934-
# So, we push a "[default]" section to a copy of the
935-
# file in a StringIO object.
936-
try:
937-
tcl_vars_str = cStringIO.StringIO(
938-
"[default]\n" + open(tcl_config, "r").read())
939-
tk_vars_str = cStringIO.StringIO(
940-
"[default]\n" + open(tk_config, "r").read())
941-
except IOError:
942-
# if we can't read the file, that's ok, we'll try
943-
# to guess instead
944-
return None
945-
946-
tcl_vars_str.seek(0)
947-
tcl_vars = ConfigParser.RawConfigParser()
948-
tk_vars_str.seek(0)
949-
tk_vars = ConfigParser.RawConfigParser()
950-
try:
951-
tcl_vars.readfp(tcl_vars_str)
952-
tk_vars.readfp(tk_vars_str)
953-
except ConfigParser.ParsingError:
954-
# if we can't read the file, that's ok, we'll try
955-
# to guess instead
956-
return None
957-
958-
try:
959-
tcl_lib = tcl_vars.get("default", "TCL_LIB_SPEC")[1:-1].split()[0][2:]
960-
tcl_inc = tcl_vars.get("default", "TCL_INCLUDE_SPEC")[3:-1]
961-
962-
tk_lib = tk_vars.get("default", "TK_LIB_SPEC")[1:-1].split()[0][2:]
963-
if tk_vars.has_option("default", "TK_INCLUDE_SPEC"):
964-
# On Ubuntu 8.04
965-
tk_inc = tk_vars.get("default", "TK_INCLUDE_SPEC")[3:-1]
966-
else:
967-
# On RHEL4
968-
tk_inc = tcl_inc
969-
except (ConfigParser.NoSectionError, ConfigParser.NoOptionError):
970-
return None
932+
def get_var(file, varname):
933+
p = subprocess.Popen(
934+
'source %s ; eval echo ${%s}' % (file, varname),
935+
shell=True, stdout=subprocess.PIPE)
936+
result = p.communicate()[0]
937+
return result
938+
939+
tcl_lib_dir = get_var(tcl_config, 'TCL_LIB_SPEC').split()[0][2:]
940+
tcl_inc_dir = get_var(tcl_config, 'TCL_INCLUDE_SPEC')[2:]
941+
tcl_lib = get_var(tcl_config, 'TCL_LIB_FLAG')[2:].strip()
942+
943+
tk_lib_dir = get_var(tk_config, 'TK_LIB_SPEC').split()[0][2:]
944+
tk_inc_dir = get_var(tk_config, 'TK_INCLUDE_SPEC').strip()
945+
if tk_inc_dir == '':
946+
tk_inc_dir = tcl_inc_dir
947+
else:
948+
tk_inc_dir = tk_inc_dir[2:]
949+
tk_lib = get_var(tk_config, 'TK_LIB_FLAG')[2:].strip()
971950

972-
if not os.path.exists(os.path.join(tk_inc, 'tk.h')):
951+
if not os.path.exists(os.path.join(tk_inc_dir, 'tk.h')):
973952
return None
974953

975-
return tcl_lib, tcl_inc, tk_lib, tk_inc
954+
return tcl_lib_dir, tcl_inc_dir, tcl_lib, tk_lib_dir, tk_inc_dir, tk_lib
976955

977956
def guess_tcl_config(tcl_lib_dir, tk_lib_dir, tk_ver):
978957
if not (os.path.exists(tcl_lib_dir) and os.path.exists(tk_lib_dir)):
@@ -1007,14 +986,14 @@ def guess_tcl_config(tcl_lib_dir, tk_lib_dir, tk_ver):
1007986
if not os.path.exists(os.path.join(tk_inc, 'tk.h')):
1008987
return None
1009988

1010-
return tcl_lib, tcl_inc, tk_lib, tk_inc
989+
return tcl_lib, tcl_inc, 'tcl' + tk_ver, tk_lib, tk_inc, 'tk' + tk_ver
1011990

1012991
def hardcoded_tcl_config():
1013992
tcl_inc = "/usr/local/include"
1014993
tk_inc = "/usr/local/include"
1015994
tcl_lib = "/usr/local/lib"
1016995
tk_lib = "/usr/local/lib"
1017-
return tcl_lib, tcl_inc, tk_lib, tk_inc
996+
return tcl_lib, tcl_inc, 'tcl', tk_lib, tk_inc, 'tk'
1018997

1019998
def add_tk_flags(module):
1020999
'Add the module flags to build extensions which use tk'
@@ -1115,10 +1094,10 @@ def add_tk_flags(module):
11151094
result = hardcoded_tcl_config()
11161095

11171096
# Add final versions of directories and libraries to module lists
1118-
tcl_lib, tcl_inc, tk_lib, tk_inc = result
1119-
module.include_dirs.extend([tcl_inc, tk_inc])
1120-
module.library_dirs.extend([tcl_lib, tk_lib])
1121-
module.libraries.extend(['tk' + tk_ver, 'tcl' + tk_ver])
1097+
tcl_lib_dir, tcl_inc_dir, tcl_lib, tk_lib_dir, tk_inc_dir, tk_lib = result
1098+
module.include_dirs.extend([tcl_inc_dir, tk_inc_dir])
1099+
module.library_dirs.extend([tcl_lib_dir, tk_lib_dir])
1100+
module.libraries.extend([tcl_lib, tk_lib])
11221101

11231102
return message
11241103

0 commit comments

Comments
 (0)