aboutsummaryrefslogtreecommitdiffstats
path: root/Library/Formula/shiboken.rb
diff options
context:
space:
mode:
authorSamuel John2013-01-21 10:33:56 +0100
committerSamuel John2013-06-03 17:29:43 +0200
commit0b50110107ea2998e65011ec31ce45931b446dab (patch)
tree9f28d410bcd3ac3bbd547bc1220919dbc8e5c39d /Library/Formula/shiboken.rb
parent35c46b417c781864d1b772ed7f8b77504605f4ad (diff)
downloadhomebrew-0b50110107ea2998e65011ec31ce45931b446dab.tar.bz2
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.
Diffstat (limited to 'Library/Formula/shiboken.rb')
-rw-r--r--Library/Formula/shiboken.rb65
1 files changed, 32 insertions, 33 deletions
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