Skip to content

Instantly share code, notes, and snippets.

@kennethreitz
Forked from brantfaircloth/py2app.bash
Created August 11, 2010 18:04
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save kennethreitz/519418 to your computer and use it in GitHub Desktop.
Save kennethreitz/519418 to your computer and use it in GitHub Desktop.
Proper Setup of Py2App

Proper Setup of Py2App

This assumes you have a proper Framework'd Python installation.

brew install python --framework 

Install Qt v4.7.1

I've patched the Qt v4.7.1 installation process to remove libpng dependencies. Use this:

brew install https://gist.github.com/raw/519418/qt.rb --universal

If you are installing into a virtualenv, activate it now.

Build SIP for x86_64 and i386

curl -O http://www.riverbankcomputing.com/static/Downloads/sip4/sip-4.12.1.tar.gz
tar -xzvf sip-4.12.1.tar.gz && cd sip-4.12.1
python configure.py --arch=x86_64 --arch=i386
make -j
make install

Build PyQT4

curl -O http://www.riverbankcomputing.com/static/Downloads/PyQt4/PyQt-mac-gpl-4.8.3.tar.gz
tar -xzvf PyQt-mac-gpl-4.8.3.tar.gz && cd PyQt-mac-gpl-4.8.3
python configure.py -q /usr/local/Trolltech/Qt-4.7.1/bin/qmake
make -j
make install

Install Module Dependencies pip install modulegraph macholib py2app

require 'formula'
require 'hardware'
class Qt <Formula
url 'http://get.qt.nokia.com/qt/source/qt-everywhere-opensource-src-4.7.1.tar.gz'
md5 '6f88d96507c84e9fea5bf3a71ebeb6d7'
homepage 'http://qt.nokia.com/'
def patches
# To fix http://bugreports.qt.nokia.com/browse/QTBUG-13623. Patch sent upstream.
"http://qt.gitorious.org/qt/qt/commit/9f18a1ad5ce32dd397642a4c03fa1fcb21fb9456.patch"
end
def options
[
['--with-qtdbus', "Enable QtDBus module."],
['--with-qt3support', "Enable deprecated Qt3Support module."],
['--with-demos-examples', "Enable Qt demos and examples."],
['--with-debug-and-release', "Compile Qt in debug and release mode."],
['--universal', "Build both x86_64 and x86 architectures."],
]
end
depends_on "d-bus" if ARGV.include? '--with-qtdbus'
depends_on 'libpng'
depends_on 'sqlite' if MACOS_VERSION <= 10.5
def install
ENV.append "CXXFLAGS", "-fvisibility=hidden"
args = ["-prefix", prefix,
"-system-libpng", "-system-zlib",
"-confirm-license", "-opensource",
"-cocoa", "-fast" ]
# See: https://github.com/mxcl/homebrew/issues/issue/744
args << "-system-sqlite" if MACOS_VERSION <= 10.5
args << "-plugin-sql-mysql" if (HOMEBREW_CELLAR+"mysql").directory?
if ARGV.include? '--with-qtdbus'
args << "-I#{Formula.factory('d-bus').lib}/dbus-1.0/include"
args << "-I#{Formula.factory('d-bus').include}/dbus-1.0"
args << "-L#{Formula.factory('d-bus').lib}"
args << "-ldbus-1"
args << "-dbus-linked"
end
if ARGV.include? '--with-qt3support'
args << "-qt3support"
else
args << "-no-qt3support"
end
if ARGV.include? '--with-debug-and-release'
args << "-debug-and-release"
else
args << "-release"
end
unless ARGV.include? '--with-demos-examples'
args << "-nomake" << "demos" << "-nomake" << "examples"
end
args << "-L#{Formula.factory('libpng').lib}"
args << "-I#{Formula.factory('libpng').include}"
if snow_leopard_64? or ARGV.include? '--universal'
args << '-arch' << 'x86_64'
end
if !snow_leopard_64? or ARGV.include? '--universal'
args << '-arch' << 'x86'
end
system "./configure", *args
system "make"
ENV.j1
system "make install"
# stop crazy disk usage
(prefix+'doc/html').rmtree
(prefix+'doc/src').rmtree
# what are these anyway?
(bin+'pixeltool.app').rmtree
(bin+'qhelpconverter.app').rmtree
# remove porting file for non-humans
(prefix+'q3porting.xml').unlink
# Some config scripts will only find Qt in a "Frameworks" folder
# VirtualBox is an example of where this is needed
# See: https://github.com/mxcl/homebrew/issues/issue/745
cd prefix do
ln_s lib, "Frameworks"
end
end
def caveats
"We agreed to the Qt opensource license for you.\nIf this is unacceptable you should uninstall."
end
end
@kennethreitz
Copy link
Author

These steps followed by a simple:

$ python setup.py py2app --includes sip --packages PyQt4

Works perfectly :)

@brantfaircloth
Copy link

kenneth,

have you tried this with brew through-and-through? i,e. since brew info shows qt and pyqt are the appropriate versions...

-b

@kennethreitz
Copy link
Author

@brantfaircloth I haven't had any luck installing Qt or PyQt vis homebrew. Most people have rather specific installations anyway (commercial licenses, etc)

@kennethreitz
Copy link
Author

I take that back, the forumla was updated and qt install went great.

PyQt, not so much though. The sip formula installs on system python #lesigh

@brantfaircloth
Copy link

kenneth - howdy! hope all is well.

one thing to note, i think, is that there may not be a need to add the --arch=ppc flag because brew install python --framework --universal only builds a two-way binary...

@kennethreitz
Copy link
Author

Hey man.

Actually, at the time, I had compiled python with --with-universal-archs=3-way so it did work, but it was usless since it was a binary that relied on 10.6 resources.

I don't do that anymore though. Qt took about 9 hours to cross compile on an i7 :)

@kennethreitz
Copy link
Author

@brantfaircloth: I don't do 3way anymore, since the modules don't run on 10.5 anyway ;)

@brantfaircloth
Copy link

nobody does 3-ways any more, sadly... badum, bump! i'll be here all week.

@kennethreitz
Copy link
Author

Updated for brew.

@brantfaircloth
Copy link

hey kenneth,

the link to the patch in qt.rb above is no longer functioning and should be replaced by:

http://qt.gitorious.org/+qt-developers/qt/lighthouse/commit/9f18a1ad5ce32dd397642a4c03fa1fcb21fb9456?format=patch

I forked the gist, made the change and all appears to be working well... now just sitting here twiddling my thumbs as qt compiles.

-b

@kennethreitz
Copy link
Author

kennethreitz commented Mar 19, 2011 via email

@brantfaircloth
Copy link

no problem ; )

@brantfaircloth
Copy link

well, things didn't turn out super-great... looks like Qt is still after the PNG dependency:

  "_png_read_end", referenced from:
  QPngHandlerPrivate::readPngImage(QImage*)       in qpnghandler.o
  ld: symbol(s) not found
  collect2: ld returned 1 exit status
  lipo: can't open input file: /var/folders/wJ/wJNZaYyTF8uYds6iu+LQY++++TI/-Tmp-//ccKvRbKq.out (No such file or directory)
  make[2]: *** [../../lib/QtGui.framework/QtGui] Error 1
  make[1]: *** [release] Error 2
  make: *** [sub-gui-make_default-ordered] Error 2
  ==> Exit Status: 2

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment