From: Ilya Kulakov Date: Fri, 25 Jan 2013 22:03:14 +0000 (+0700) Subject: Update python.rb to match recent changes in Homebrew. X-Git-Tag: 13.03~76^2~1^2 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=f38e86099cf84fda09805f8b9a3dc0267f0c754d;p=cura.git Update python.rb to match recent changes in Homebrew. --- diff --git a/scripts/darwin/python.rb b/scripts/darwin/python.rb index bef3bb66..4a12cd35 100644 --- a/scripts/darwin/python.rb +++ b/scripts/darwin/python.rb @@ -1,23 +1,8 @@ require 'formula' -class TkCheck < Requirement - def message; <<-EOS.undent - Tk.framework was detected in /Library/Frameworks - This can cause Python builds to fail. See: - https://github.com/mxcl/homebrew/issues/11602 - EOS - end - - def fatal?; false; end - - def satisfied? - not File.exist? '/Library/Frameworks/Tk.framework' - end -end - class Distribute < Formula - url 'http://pypi.python.org/packages/source/d/distribute/distribute-0.6.28.tar.gz' - sha1 '709bd97d46050d69865d4b588c7707768dfe6711' + url 'http://pypi.python.org/packages/source/d/distribute/distribute-0.6.34.tar.gz' + sha1 'b6f9cfbaf3e63833b71009812a613be13e68f5de' end class Pip < Formula @@ -30,25 +15,31 @@ class Python < Formula url 'http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2' sha1 '842c4e2aff3f016feea3c6e992c7fa96e49c9aa0' - depends_on TkCheck.new - depends_on 'pkg-config' => :build - depends_on 'readline' => :recommended - depends_on 'sqlite' => :recommended - depends_on 'gdbm' => :recommended - depends_on 'openssl' if build.include? 'with-brewed-openssl' - option :universal option 'quicktest', 'Run `make quicktest` after the build' option 'with-brewed-openssl', "Use Homebrew's openSSL instead of the one from OS X" + option 'with-brewed-tk', "Use Homebrew's Tk (has optional Cocoa and threads support)" option 'with-poll', 'Enable select.poll, which is not fully implemented on OS X (http://bugs.python.org/issue5154)' - # --with-dtrace relies on CLT as dtrace hard-codes paths to /usr - # http://bugs.python.org/issue13405 - option 'with-dtrace', 'Install with DTrace support' if MacOS::CLT.installed? + option 'with-dtrace', 'Experimental DTrace support (http://bugs.python.org/issue13405)' if MacOS::CLT.installed? + + depends_on 'pkg-config' => :build + depends_on 'readline' => :recommended + depends_on 'sqlite' => :recommended + depends_on 'gdbm' => :recommended + depends_on 'openssl' if build.include? 'with-brewed-openssl' + depends_on 'homebrew/dupes/tk' if build.include? 'with-brewed-tk' def patches - 'https://raw.github.com/gist/3415636/2365dea8dc5415daa0148e98c394345e1191e4aa/pythondtrace-patch.diff' - end if build.include? 'with-dtrace' + p = [] + # python fails to build on NFS; patch is merged upstream, will be in next release + # see http://bugs.python.org/issue14662 + p << "https://gist.github.com/raw/4349132/25662c6b382315b5db67bf949773d76471bbcee7/python-nfs-shutil.diff" + p << 'https://raw.github.com/gist/3415636/2365dea8dc5415daa0148e98c394345e1191e4aa/pythondtrace-patch.diff' if build.include? 'with-dtrace' + # Patch to disable the search for Tk.frameworked, since homebrew's Tk is a plain unix build + p << DATA if build.include? 'with-brewed-tk' + p + end def site_packages_cellar prefix/"Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages" @@ -84,8 +75,11 @@ class Python < Formula args << '--without-gcc' if ENV.compiler == :clang args << '--with-dtrace' if build.include? 'with-dtrace' - distutils_fix_superenv(args) - distutils_fix_stdenv + if superenv? + distutils_fix_superenv(args) + else + distutils_fix_stdenv + end if build.universal? ENV.universal_binary @@ -171,67 +165,66 @@ class Python < Formula install-lib=#{site_packages} EOF - unless MacOS::CLT.installed? - makefile = prefix/'Frameworks/Python.framework/Versions/2.7/lib/python2.7/config/Makefile' - inreplace makefile do |s| + makefile = prefix/'Frameworks/Python.framework/Versions/2.7/lib/python2.7/config/Makefile' + inreplace makefile do |s| + unless MacOS::CLT.installed? s.gsub!(/^CC=.*$/, "CC=xcrun clang") s.gsub!(/^CXX=.*$/, "CXX=xcrun clang++") s.gsub!(/^AR=.*$/, "AR=xcrun ar") s.gsub!(/^RANLIB=.*$/, "RANLIB=xcrun ranlib") end + # Should be fixed regardless of CLT (for `python-config --ldflags`) + s.gsub!(/^PYTHONFRAMEWORKDIR=\tPython\.framework/, "PYTHONFRAMEWORKDIR= #{opt_prefix}/Frameworks/Python.framework") end end def distutils_fix_superenv(args) - if superenv? - # To allow certain Python bindings to find brewed software: - cflags = "CFLAGS=-I#{HOMEBREW_PREFIX}/include" - ldflags = "LDFLAGS=-L#{HOMEBREW_PREFIX}/lib" - unless MacOS::CLT.installed? - # Help Python's build system (distribute/pip) to build things on Xcode-only systems - # The setup.py looks at "-isysroot" to get the sysroot (and not at --sysroot) - cflags += " -isysroot #{MacOS.sdk_path}" - # For the Xlib.h, Python needs this header dir + # To allow certain Python bindings to find brewed software: + cflags = "CFLAGS=-I#{HOMEBREW_PREFIX}/include -I#{Formula.factory('sqlite').opt_prefix}/include" + ldflags = "LDFLAGS=-L#{HOMEBREW_PREFIX}/lib -L#{Formula.factory('sqlite').opt_prefix}/lib" + unless MacOS::CLT.installed? + # Help Python's build system (distribute/pip) to build things on Xcode-only systems + # The setup.py looks at "-isysroot" to get the sysroot (and not at --sysroot) + cflags += " -isysroot #{MacOS.sdk_path}" + ldflags += " -isysroot #{MacOS.sdk_path}" + # Same zlib.h-not-found-bug as in env :std (see below) + args << "CPPFLAGS=-I#{MacOS.sdk_path}/usr/include" + # For the Xlib.h, Python needs this header dir with the system Tk + unless build.include? 'with-brewed-tk' cflags += " -I#{MacOS.sdk_path}/System/Library/Frameworks/Tk.framework/Versions/8.5/Headers" - ldflags += " -isysroot #{MacOS.sdk_path}" - # Same zlib.h-not-found-bug as in env :std (see below) - args << "CPPFLAGS=-I#{MacOS.sdk_path}/usr/include" end - args << cflags - args << ldflags - # Avoid linking to libgcc http://code.activestate.com/lists/python-dev/112195/ - # We want our readline! This is just to outsmart the detection code, - # superenv handles that cc finds includes/libs! - inreplace "setup.py", - "do_readline = self.compiler.find_library_file(lib_dirs, 'readline')", - "do_readline = '#{HOMEBREW_PREFIX}/opt/readline/lib/libhistory.dylib'" end + args << cflags + args << ldflags + # We want our readline! This is just to outsmart the detection code, + # superenv handles that cc finds includes/libs! + inreplace "setup.py", + "do_readline = self.compiler.find_library_file(lib_dirs, 'readline')", + "do_readline = '#{HOMEBREW_PREFIX}/opt/readline/lib/libhistory.dylib'" end def distutils_fix_stdenv() - if not superenv? - # Python scans all "-I" dirs but not "-isysroot", so we add - # the needed includes with "-I" here to avoid this err: - # building dbm using ndbm - # error: /usr/include/zlib.h: No such file or directory - ENV.append 'CPPFLAGS', "-I#{MacOS.sdk_path}/usr/include" unless MacOS::CLT.installed? - - # Don't use optimizations other than "-Os" here, because Python's distutils - # remembers (hint: `python3-config --cflags`) and reuses them for C - # extensions which can break software (such as scipy 0.11 fails when - # "-msse4" is present.) - ENV.minimal_optimization - - # We need to enable warnings because the configure.in uses -Werror to detect - # "whether gcc supports ParseTuple" (https://github.com/mxcl/homebrew/issues/12194) - ENV.enable_warnings - if ENV.compiler == :clang - # http://docs.python.org/devguide/setup.html#id8 suggests to disable some Warnings. - ENV.append_to_cflags '-Wno-unused-value' - ENV.append_to_cflags '-Wno-empty-body' - ENV.append_to_cflags '-Qunused-arguments' - end + # Python scans all "-I" dirs but not "-isysroot", so we add + # the needed includes with "-I" here to avoid this err: + # building dbm using ndbm + # error: /usr/include/zlib.h: No such file or directory + ENV.append 'CPPFLAGS', "-I#{MacOS.sdk_path}/usr/include" unless MacOS::CLT.installed? + + # Don't use optimizations other than "-Os" here, because Python's distutils + # remembers (hint: `python3-config --cflags`) and reuses them for C + # extensions which can break software (such as scipy 0.11 fails when + # "-msse4" is present.) + ENV.minimal_optimization + + # We need to enable warnings because the configure.in uses -Werror to detect + # "whether gcc supports ParseTuple" (https://github.com/mxcl/homebrew/issues/12194) + ENV.enable_warnings + if ENV.compiler == :clang + # http://docs.python.org/devguide/setup.html#id8 suggests to disable some Warnings. + ENV.append_to_cflags '-Wno-unused-value' + ENV.append_to_cflags '-Wno-empty-body' + ENV.append_to_cflags '-Qunused-arguments' end end @@ -255,6 +248,7 @@ class Python < Formula They will install into the site-package directory #{site_packages} + Executable python scripts will be put in: #{scripts_folder} so you may want to put "#{scripts_folder}" in your PATH, too. @@ -268,6 +262,25 @@ class Python < Formula # and it can occur that building sqlite silently fails if OSX's sqlite is used. system "#{bin}/python", "-c", "import sqlite3" # Check if some other modules import. Then the linked libs are working. - system "#{bin}/python", "-c", "import Tkinter" + system "#{bin}/python", "-c", "import Tkinter; root = Tkinter.Tk()" end end + +__END__ +diff --git a/setup.py b/setup.py +index 6b47451..b0400f8 100644 +--- a/setup.py ++++ b/setup.py +@@ -1702,9 +1702,9 @@ class PyBuildExt(build_ext): + # AquaTk is a separate method. Only one Tkinter will be built on + # Darwin - either AquaTk, if it is found, or X11 based Tk. + platform = self.get_platform() +- if (platform == 'darwin' and +- self.detect_tkinter_darwin(inc_dirs, lib_dirs)): +- return ++ # if (platform == 'darwin' and ++ # self.detect_tkinter_darwin(inc_dirs, lib_dirs)): ++ # return + + # Assume we haven't found any of the libraries or include files + # The versions with dots are used on Unix, and the versions without