Updated build notes for wxPython on unix systems
git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@15900 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -121,21 +121,29 @@ D. If using the sources (either from the tarball or from CVS) then
|
|||||||
To make a static library and not make a shared library, use the
|
To make a static library and not make a shared library, use the
|
||||||
--disable-shared and --enable-static flags.
|
--disable-shared and --enable-static flags.
|
||||||
|
|
||||||
NOTE: It has been discovered that some pre-built distributions of
|
NOTE: There is a potential type mismatch between Python and wxGTK.
|
||||||
Python are built with options that can cause incompatibilities
|
This happens if Python defines some flags that turn on 64-bit file
|
||||||
between wxPython and wxGTK. Typically these are things like large
|
offset support and wxGTK does not. This causes some basic types,
|
||||||
file support on the platforms that have it. This causes some basic
|
like off_t, to be typedef'd differently causing the C++ method
|
||||||
types, like off_t, to be typedef'd differently causing the C++
|
signatures to be incompatible and giving link errors at runtime.
|
||||||
method signatures to be incompatible and giving link errors. The
|
If you get errors upon running a wxPython script that looks
|
||||||
way to fix this is to activate these same settings in the wxGTK
|
something like this:
|
||||||
build, usually by looking at the flags and options used in
|
|
||||||
compiling wxPython that are different from the options used on
|
|
||||||
wxGTK compiles. For example, on SuSE doing the following before
|
|
||||||
running wxGTK's configure seems to take care of it:
|
|
||||||
|
|
||||||
export CFLAGS="-D_FILE_OFFSET_BITS=64 -DHAVE_LARGEFILE_SUPPORT"
|
SeekI_13wxInputStream10wxSeekMode: referenced symbol not found
|
||||||
export CXXFLAGS=$CFLAGS
|
|
||||||
|
|
||||||
|
then that is probably the issue. This can be fixed in the current
|
||||||
|
code by predefining these flags before wxGTK's configure is run,
|
||||||
|
for example:
|
||||||
|
|
||||||
|
export CFLAGS="-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -DHAVE_LARGEFILE_SUPPORT"
|
||||||
|
export CXXFLAGS=$CFLAGS
|
||||||
|
../configure --with-gtk --with-opengl --enable-debug
|
||||||
|
|
||||||
|
In the 2.3.3 final release there will be a real configure flag for
|
||||||
|
it, and it should be enabled by default. You will be able to use
|
||||||
|
--enable-largefile or --disable-largefile to control it. If you
|
||||||
|
still get this or a similar error with 2.3.3 then try disabling
|
||||||
|
largefile support in GTK.
|
||||||
|
|
||||||
E. Now just compile and install. You need to use GNU make, so if your
|
E. Now just compile and install. You need to use GNU make, so if your
|
||||||
system has something else get GNU make and build and install it and
|
system has something else get GNU make and build and install it and
|
||||||
@@ -206,6 +214,13 @@ B. As mentioned previouslly, wxPython is built with the standard
|
|||||||
make LINKCC=g++ # or whatever your C++ command is
|
make LINKCC=g++ # or whatever your C++ command is
|
||||||
make install
|
make install
|
||||||
|
|
||||||
|
I recently built Python 2.1.3 and Python 2.2.1 on Solaris and did
|
||||||
|
not have to resort to this workaround so apparently thigns are
|
||||||
|
getting better there. I will leave this note here though in case
|
||||||
|
there are similar issues elsewhere. However I did run into a
|
||||||
|
Python build issue that affects the wxPython build when attempting
|
||||||
|
to use SunCC instead of GNU gcc. See the note below titled
|
||||||
|
"Building with non-GNU compilers" if you are interested.
|
||||||
|
|
||||||
C. Change to the root wxPython directory and look at the setup.py
|
C. Change to the root wxPython directory and look at the setup.py
|
||||||
file. This is the script that configures and defines all the
|
file. This is the script that configures and defines all the
|
||||||
@@ -279,8 +294,71 @@ F. If you would like to make a test build that doesn't overwrite the
|
|||||||
python demo.py
|
python demo.py
|
||||||
|
|
||||||
|
|
||||||
That's all folks!
|
|
||||||
|
|
||||||
|
4. Building with non-GNU compilers
|
||||||
|
----------------------------------
|
||||||
|
|
||||||
|
As mentioned above Python's distutils uses whatever compiler Python
|
||||||
|
was compiled with to compile extension modules. It also appears that
|
||||||
|
distutils assumes that this compiler can compile C or C++ sources as
|
||||||
|
distutils makes no differentiation between the two. For builds using
|
||||||
|
GNU gcc and a few other compilers this is not an issue as they will
|
||||||
|
determine the type of souece from the file extension. For SunCC (and
|
||||||
|
probably other compilers that came from cfront) it won't work as the C
|
||||||
|
compiler (cc) is totally separate from the C++ compiler (CC). This
|
||||||
|
causes distutils to attempt to compile the wxPython sources with the C
|
||||||
|
compiler, which won't work.
|
||||||
|
|
||||||
|
There may be better ways to get around this, but here is the
|
||||||
|
workaround I devised. I created a script that will execute either cc
|
||||||
|
or CC based on the file extension given to it. If Python uses this
|
||||||
|
script for its compiler then it will also be used by extensions built
|
||||||
|
with distutils and everybody will be more or less happy. Here is a
|
||||||
|
copy of the script I used. It was a fairly quick rush job so there
|
||||||
|
are probably issues with it but it worked for me.
|
||||||
|
|
||||||
|
#!/bin/bash
|
||||||
|
#--------------------------------------------------------------
|
||||||
|
# Try to determine type of file being compiled and then
|
||||||
|
# launch cc for C sources or CC for C++.
|
||||||
|
#
|
||||||
|
|
||||||
|
args=$@
|
||||||
|
is_C=
|
||||||
|
|
||||||
|
for arg in $args; do
|
||||||
|
|
||||||
|
# is the arg a file that exists?
|
||||||
|
if [ -e $arg ]; then
|
||||||
|
|
||||||
|
# does it end in ".c"?
|
||||||
|
if [ "${arg:${#arg}-2}" == ".c" ]; then
|
||||||
|
is_C=yes
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# if the flag wasn't set then assume C++ and execute CC,
|
||||||
|
# otherwise execute cc.
|
||||||
|
if [ -z $is_C ]; then
|
||||||
|
exec CC -w $@
|
||||||
|
else
|
||||||
|
exec cc -w $@
|
||||||
|
fi
|
||||||
|
#--------------------------------------------------------------
|
||||||
|
|
||||||
|
I called it pycc, put it in ${prefix}/bin and set its execute
|
||||||
|
permission bit.
|
||||||
|
|
||||||
|
The next step is to configure and build Python such that it uses pycc
|
||||||
|
as it's compiler. You can do that by setting CC in your environment
|
||||||
|
before running configure, like this in bash:
|
||||||
|
|
||||||
|
exoprt CC=pycc
|
||||||
|
configure
|
||||||
|
|
||||||
|
After making and installing Python with this configuration you should
|
||||||
|
be able to build wxPython as described in the steps above.
|
||||||
|
|
||||||
-----------------
|
-----------------
|
||||||
robin@alldunn.com
|
robin@alldunn.com
|
||||||
|
Reference in New Issue
Block a user