From 0b50110107ea2998e65011ec31ce45931b446dab Mon Sep 17 00:00:00 2001 From: Samuel John Date: Mon, 21 Jan 2013 10:33:56 +0100 Subject: Python 2.x and 3.x support New `depends_on :python` Dependency. New `depends_on :python3` Dependency. To avoid having multiple formulae with endings -py2 and -py3, we will handle support for different pythons (2.x vs. 3.x) in the same formula. Further brewed vs. external python will be transparently supported. The formula also gets a new object `python`, which is false if no Python is available or the user has disabled it. Otherwise it is defined and provides several support methods: python.site_packages # the site-packages in the formula's Cellar python.global_site_packages python.binary # the full path to the python binary python.prefix python.version python.version.major python.version.minor python.xy # => e.g. "python2.7" python.incdir # includes of python python.libdir # the python dylib library python.pkg_config_path # used internally by brew python.from_osx? python.framework? python.universal? python.pypy? python.standard_caveats # Text to set PYTHONPATH for python.from_osx? python.if3then3 # => "" for 2.x and to "3" for 3.x. Further, to avoid code duplication, `python` takes an optional block that is run twice if the formula defines depends_on :python AND :python3. python do system python, 'setup.py', "--prefix=#{prefix}" end Read more in the Homebrew wiki. --- Library/Formula/shiboken.rb | 65 ++++++++++++++++++++++----------------------- 1 file changed, 32 insertions(+), 33 deletions(-) (limited to 'Library/Formula/shiboken.rb') diff --git a/Library/Formula/shiboken.rb b/Library/Formula/shiboken.rb index 29950a0b4..fe5128d74 100644 --- a/Library/Formula/shiboken.rb +++ b/Library/Formula/shiboken.rb @@ -7,48 +7,47 @@ class Shiboken < Formula sha1 '2ffe9d47a3f536840ed9d7eff766a53040bb2a2e' depends_on 'cmake' => :build + depends_on :python => :recommended + depends_on :python3 => :optional depends_on 'qt' def install # Building the tests also runs them. Not building and running tests cuts - # install time in half. As of 1.1.1 the install fails unless you do an + # install time in half. As of 1.1.1 the install fails unless you do an # out of tree build and put the source dir last in the args. - mkdir 'macbuild' do - args = std_cmake_args + %W[ - -DBUILD_TESTS=OFF - ] - - - python_prefix = `python-config --prefix`.strip - # Python is actually a library. The libpythonX.Y.dylib points to this lib, too. - if File.exist? "#{python_prefix}/Python" - # Python was compiled with --framework: - args << "-DPYTHON_LIBRARY='#{python_prefix}/Python'" - if !MacOS::CLT.installed? and python_prefix.start_with? '/System/Library' - # For Xcode-only systems, the headers of system's python are inside of Xcode - args << "-DPYTHON_INCLUDE_DIR='#{MacOS.sdk_path}/System/Library/Frameworks/Python.framework/Versions/2.7/Headers'" - else - args << "-DPYTHON_INCLUDE_DIR='#{python_prefix}/Headers'" - end - else - python_version = `python-config --libs`.match('-lpython(\d+\.\d+)').captures.at(0) - python_lib = "#{python_prefix}/lib/libpython#{python_version}" - if File.exists? "#{python_lib}.a" - args << "-DPYTHON_LIBRARY='#{python_lib}.a'" - else - args << "-DPYTHON_LIBRARY='#{python_lib}.dylib'" - end - args << "-DPYTHON_INCLUDE_DIR='#{python_prefix}/include/#{which_python}'" + python do + # This block will be run for each python (2.x and 3.x if requested)! + mkdir "macbuild#{python.if3then3}" do + args = std_cmake_args + args << "-DBUILD_TESTS=OFF" + # For Xcode-only systems, the headers of system's python are inside of Xcode: + args << "-DPYTHON#{python.if3then3}_INCLUDE_DIR='#{python.incdir}'" + # Cmake picks up the system's python dylib, even if we have a brewed one: + args << "-DPYTHON#{python.if3then3}_LIBRARY='#{python.libdir}/lib#{python.xy}.dylib'" + args << "-DUSE_PYTHON3=ON" if python3 + args << '..' + system 'cmake', *args + system "make install" + # To support 2.x and 3.x in parallel, we have to rename shiboken.pc at first + mv lib/'pkgconfig/shiboken.pc', lib/"pkgconfig/shiboken-py#{python.version.major}.pc" end + end + # Rename shiboken-py2.pc back to the default shiboken.pc + mv lib/'pkgconfig/shiboken-py2.pc', lib/'pkgconfig/shiboken.pc' if python2 + end - - args << '..' - system 'cmake', *args - system "make install" + def caveats + if python3 + <<-EOS.undent + If you build software that uses the pkgconfig file, and you want + shiboken with Python 3.x support: Please, instead of 'shiboken.pc', use: + #{HOMEBREW_PREFIX}/lib/pkgconfig/shiboken-py3.pc + EOS end end - def which_python - "python" + `python -c 'import sys;print(sys.version[:3])'`.strip + def test + system 'python', "-c", "import shiboken" if Tab.for_formula('Shiboken').with? 'python' + system 'python3', "-c", "import shiboken" if Tab.for_formula('Shiboken').with? 'python3' end end -- cgit v1.2.3