diff options
| author | Samuel John | 2013-01-21 10:33:56 +0100 |
|---|---|---|
| committer | Samuel John | 2013-06-03 17:29:43 +0200 |
| commit | 0b50110107ea2998e65011ec31ce45931b446dab (patch) | |
| tree | 9f28d410bcd3ac3bbd547bc1220919dbc8e5c39d /Library/Formula/shiboken.rb | |
| parent | 35c46b417c781864d1b772ed7f8b77504605f4ad (diff) | |
| download | homebrew-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.rb | 65 |
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 |
