New macro for mingw python, actually working; made mingw-configure make configure remember everything, so mingw-configure is required only for initial configuration

master
Yevgen Muntyan 2007-01-10 04:15:27 -06:00
parent caca00f0e2
commit 18ed310365
4 changed files with 177 additions and 124 deletions

View File

@ -78,16 +78,16 @@ AC_DEFUN([_MOO_AC_CHECK_PYGTK_MINGW],[
##############################################################################
# _MOO_AC_CHECK_PYGTK_UNIX(action-if-found,action-if-not-found)
# _MOO_AC_CHECK_PYGTK_UNIX(python-version,action-if-found,action-if-not-found)
# checks pygtk stuff
#
AC_DEFUN([_MOO_AC_CHECK_PYGTK_UNIX],[
PKG_CHECK_MODULES(PYGTK,pygtk-2.0 >= 2.6.0,[
PKG_CHECK_MODULES(PYGTK$1,pygtk-2.0 >= 2.6.0,[
AC_MSG_CHECKING([whether pygtk can be used])
save_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $PYGTK_CFLAGS $PYTHON_CFLAGS"
CPPFLAGS="$CPPFLAGS $PYGTK[]$1[]_CFLAGS $PYTHON[]$1[]_INCLUDES"
save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $PYGTK_CFLAGS $PYTHON_CFLAGS"
CFLAGS="$CFLAGS $PYGTK[]$1[]_CFLAGS $PYTHON[]$1[]_INCLUDES"
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <pygobject.h>
@ -97,16 +97,20 @@ AC_DEFUN([_MOO_AC_CHECK_PYGTK_UNIX],[
return 0;
}]])],[
AC_MSG_RESULT(yes)
$2
PYGTK_DEFS_DIR=`$PKG_CONFIG --variable=defsdir pygtk-2.0`
AC_SUBST(PYGTK_DEFS_DIR)
PYGTK_CODEGEN_DIR=`$PKG_CONFIG --variable=codegendir pygtk-2.0`
AC_SUBST(PYGTK_CODEGEN_DIR)
m4_if([$1],,,[
AC_SUBST(PYGTK[]$1[]_DEFS_DIR,[$PYGTK_DEFS_DIR])
AC_SUBST(PYGTK[]$1[]_CODEGEN_DIR,[$PYGTK_CODEGEN_DIR])
])
AC_MSG_NOTICE([pygtk defs dir: $PYGTK_DEFS_DIR])
_MOO_AC_PYGTK_CODEGEN
m4_if([$2],[],[:],[$2])
],[
AC_MSG_RESULT([no])
$3
m4_if([$3],[],[:],[$3])
])
CFLAGS="$save_CFLAGS"
@ -127,10 +131,10 @@ AC_DEFUN([_MOO_AC_CHECK_PYGTK],[
if test "x$MOO_OS_CYGWIN" != "xyes"; then
if test "x$MOO_OS_MINGW" = "xyes"; then
_MOO_AC_CHECK_PYGTK_MINGW([24],[$2],[$3])
_MOO_AC_CHECK_PYGTK_MINGW([25],[$2],[$3])
_MOO_AC_CHECK_PYGTK_UNIX([24],[$2],[$3])
_MOO_AC_CHECK_PYGTK_UNIX([25],[$2],[$3])
else
_MOO_AC_CHECK_PYGTK_UNIX([$1],[$2],[$3])
_MOO_AC_CHECK_PYGTK_UNIX(,[$2],[$3])
fi
fi
])

View File

@ -1,70 +1,3 @@
##############################################################################
# _MOO_AC_CHECK_PYTHON_MINGW(version,action-if-found,action-if-not-found)
# checks python stuff when building for mingw. it's broken
#
AC_DEFUN([_MOO_AC_CHECK_PYTHON_MINGW],[
if test -z "$PYTHON[]$1[]_PARENT_DIR"; then
PYTHON[]$1[]_PARENT_DIR=/usr/local/win
fi
if test -z "$PYTHON[]$1[]_PREFIX"; then
PYTHON[]$1[]_PREFIX=$PYTHON[]$1[]_PARENT_DIR/Python$1
fi
if test -z "$PYTHON[]$1[]_CFLAGS"; then
PYTHON[]$1[]_CFLAGS="-I$PYTHON[]$1[]_PREFIX/include -mno-cygwin"
fi
if test -z "$PYTHON[]$1[]_LIBS"; then
PYTHON[]$1[]_LIBS="-L$PYTHON[]$1[]_PREFIX/libs -lpython$1 -mno-cygwin"
fi
if test -z "$PYTHON[]$1"; then
PYTHON[]$1="python"
fi
PYTHON_PARENT_DIR="$PYTHON[]$1[]_PARENT_DIR"
PYTHON_PREFIX="$PYTHON[]$1[]_PREFIX"
PYTHON="$PYTHON[]$1[]"
# check whether Python.h and library exists
moo_ac_save_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS $PYTHON[]$1[]_CFLAGS"
moo_ac_save_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS $PYTHON[]$1[]_CFLAGS"
moo_ac_save_LDFLAGS="$LDFLAGS"
LDFLAGS="$LDFLAGS $PYTHON[]$1[]_LIBS"
AC_MSG_CHECKING([PYTHON[]$1[]_CFLAGS])
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <Python.h>
int main ()
{
Py_Initialize();
PyRun_SimpleString("from time import time,ctime\n"
"print 'Today is',ctime(time())\n");
Py_Finalize();
return 0;
}]])],[
AC_MSG_RESULT([$PYTHON[]$1[]_CFLAGS])
AC_MSG_CHECKING([PYTHON[]$1[]_LIBS])
AC_MSG_RESULT([$PYTHON[]$1[]_LIBS])
AC_MSG_NOTICE([Did not do real linking])
AC_SUBST(PYTHON[]$1[]_CFLAGS)
AC_SUBST(PYTHON[]$1[]_LIBS)
pyexecdir=$PYTHON[]$1[]_PREFIX/Lib/site-packages
m4_if([$2],[],[:],[$2])
],[
AC_MSG_RESULT([Not found])
PYTHON[]$1[]_CFLAGS=""
PYTHON[]$1[]_LIBS=""
PYTHON[]$1[]_EXTRA_LIBS=""
m4_if([$3],[],[:],[$3])
])
LDFLAGS="$moo_ac_save_LDFLAGS"
CFLAGS="$moo_ac_save_CFLAGS"
CPPFLAGS="$moo_ac_save_CPPFLAGS"
])
##############################################################################
# _MOO_AC_PYTHON_DEVEL(action-if-found,action-if-not-found)
# checks python headers and libs. it's
@ -86,21 +19,21 @@ Please check your Python installation.])
fi
# Check for Python include path
# if PYTHON_CFLAGS is set, do not do anything
# if PYTHON_INCLUDES is set, do not do anything
if test $python_found = yes; then
AC_MSG_CHECKING([for Python include path])
if test -z "$PYTHON_CFLAGS"; then
if test -z "$PYTHON_INCLUDES"; then
python_path=`$PYTHON -c "import distutils.sysconfig; \
print distutils.sysconfig.get_python_inc();"`
if test -n "${python_path}"; then
python_path="-I$python_path"
fi
PYTHON_CFLAGS=$python_path
PYTHON_INCLUDES=$python_path
fi
AC_MSG_RESULT([$PYTHON_CFLAGS])
AC_SUBST([PYTHON_CFLAGS])
AC_MSG_RESULT([$PYTHON_INCLUDES])
AC_SUBST([PYTHON_INCLUDES])
fi
# Check for Python linker flags
@ -181,7 +114,7 @@ AC_DEFUN([_MOO_AC_CHECK_PYTHON_UNIX],[
if test x$python_found = xyes; then
m4_if([$2],[],[:],[$2])
else
PYTHON_CFLAGS=""
PYTHON_INCLUDES=""
PYTHON_LIBS=""
PYTHON_EXTRA_LIBS=""
m4_if([$3],[],[:],[$3])
@ -198,10 +131,10 @@ AC_MSG_NOTICE([checking for headers and libs required to compile python extensio
AC_REQUIRE([MOO_AC_CHECK_OS])
if test x$MOO_OS_CYGWIN != xyes; then
if test x$MOO_OS_MINGW = xyes; then
_MOO_AC_CHECK_PYTHON_MINGW([24],[$2],[$3])
_MOO_AC_CHECK_PYTHON_MINGW([25],[$2],[$3])
AM_PYTHON_DEVEL_CROSS_MINGW([$2],[$3],[2.4])
AM_PYTHON_DEVEL_CROSS_MINGW([$2],[$3],[2.5])
else
_MOO_AC_CHECK_PYTHON_UNIX([$1],[$2],[$3])
_MOO_AC_CHECK_PYTHON_UNIX([$1],[$2],[$3])
fi
fi
])

99
m4/python-cross-mingw.m4 Normal file
View File

@ -0,0 +1,99 @@
dnl AM_PYTHON_DEVEL_CROSS_MINGW([action-if-found[,action-if-not-found[,version]]])
AC_DEFUN([AM_PYTHON_DEVEL_CROSS_MINGW],[
m4_if([$3],[],[
m4_define([_ac_m4_pyver],[])
],[
m4_define([_ac_m4_pyver],[m4_bpatsubst([$3],[\.])])
])
if test "x$PYTHON[]_ac_m4_pyver[]_HOME" = x; then
AC_MSG_ERROR([PYTHON[]_ac_m4_pyver[]_HOME environment variable must be set dnl
when cross-compiling with mingw])
fi
AC_MSG_CHECKING(host system python version)
m4_if([$3],,[
if test "x$PYTHON[]_ac_m4_pyver[]_VERSION" = x; then
# guess python version, very clever heuristics here
for _ac_python_minor in 3 4 5 6 7 8 9; do
if test -f "$PYTHON[]_ac_m4_pyver[]_HOME/libs/libpython2$_ac_python_minor.a" -o \
-f "$PYTHON[]_ac_m4_pyver[]_HOME/libs/python2$_ac_python_minor.lib" ;
then
_ac_pyversion="2.$_ac_python_minor"
break
fi
done
else
_ac_pyversion=$PYTHON[]_ac_m4_pyver[]_VERSION
fi
if test "x$_ac_pyversion" = x; then
AC_MSG_ERROR([Could not determine Python version])
fi
],[
_ac_pyversion=$3
])
AC_MSG_RESULT([$_ac_pyversion])
_ac_pyversion_no_dot=`echo $_ac_pyversion | $SED 's/^2\.*\([[3-9]]\).*/2\1/'`
AC_MSG_CHECKING(installation directory for python modules)
if test "x$PYTHON[]_ac_m4_pyver[]_PKG_DIR" != x; then
_ac_pythondir=$PYTHON[]_ac_m4_pyver[]_PKG_DIR
else
_ac_pythondir="$PYTHON[]_ac_m4_pyver[]_HOME/Lib/site-packages"
fi
AC_MSG_RESULT([$_ac_pythondir])
if test "x$PYTHON[]_ac_m4_pyver[]_INCLUDES" != x; then
_ac_pyincludes=$PYTHON[]_ac_m4_pyver[]_INCLUDES
else
_ac_pyincludes="-I$PYTHON[]_ac_m4_pyver[]_HOME/include"
fi
if test "x$PYTHON[]_ac_m4_pyver[]_LIBS" != x; then
_ac_pylibs=$PYTHON[]_ac_m4_pyver[]_LIBS
else
_ac_pylibs="-L$PYTHON[]_ac_m4_pyver[]_HOME/libs -lpython$_ac_pyversion_no_dot"
fi
_ac_have_pydev=false
_ac_save_CPPFLAGS="$CPPFLAGS"
_ac_save_LDFLAGS="$LDFLAGS"
CPPFLAGS="$CPPFLAGS $_ac_pyincludes"
LDFLAGS="$LDFLAGS $_ac_pylibs"
AC_MSG_CHECKING(python headers and linker flags)
dnl AC_TRY_LINK is buggy, it puts libs before source file on compilation
dnl command line
AC_COMPILE_IFELSE([AC_LANG_SOURCE([[
#include <Python.h>
int main ()
{
Py_Initialize();
return 0;
}]])],[
AC_MSG_RESULT([$_ac_pyincludes $_ac_pylibs])
_ac_have_pydev=true
],[
AC_MSG_RESULT(not found)
])
CPPFLAGS="$_ac_save_CPPFLAGS"
LDFLAGS="$_ac_save_LDFLAGS"
if $_ac_have_pydev; then
AC_SUBST(PYTHON[]_ac_m4_pyver[]_PLATFORM, [nt])
AC_SUBST(PYTHON[]_ac_m4_pyver[]_INCLUDES,[$_ac_pyincludes])
AC_SUBST(PYTHON[]_ac_m4_pyver[]_LIBS,[$_ac_pylibs])
AC_SUBST(PYTHON[]_ac_m4_pyver[]_EXTRA_LIBS,[])
AC_SUBST(PYTHON[]_ac_m4_pyver[]_LDFLAGS,[])
AC_SUBST(PYTHON[]_ac_m4_pyver[]_EXTRA_LDFLAGS,[])
AC_SUBST(python[]_ac_m4_pyver[]dir,[$_ac_pythondir])
AC_SUBST(pyexec[]_ac_m4_pyver[]dir,[$_ac_pythondir])
AC_SUBST(pkgpython[]_ac_m4_pyver[]dir,[\${python[]_ac_m4_pyver[]dir}/$PACKAGE])
AC_SUBST(pkgpyexec[]_ac_m4_pyver[]dir,[\${python[]_ac_m4_pyver[]dir}/$PACKAGE])
m4_if([$1],[],[:],[$1])
else
m4_if([$2],[],[:],[$2])
fi
m4_undefine([_ac_m4_pyver])
])

View File

@ -9,33 +9,34 @@ cat > $1 << ENDSRIPT
export PKG_CONFIG_LIBDIR="$GTK_PREFIX/lib/pkgconfig":"$PYTHON_PREFIX/Lib/pkgconfig"
export PKG_CONFIG_PATH=\$PKG_CONFIG_LIBDIR
if [ "x\$1" = "x--atleast-pkgconfig-version" -o "x\$1" = "x--atleast-version" ]; then
# pkg-config doesn't like --define-variable with these
if [ "x\`echo "\$*" | grep -- --atleast-pkgconfig-version\`" != x -o \\
"x\`echo "\$*" | grep -- --atleast-version\`" != x ]; then
exec "$PKG_CONFIG_PROGRAM" \$*
else
if [ "x\$2" = "xpygtk-2.0" -o "x\$2" = "xpygobject-2.0" -o \\
"x\$3" = "xpygtk-2.0" -o "x\$3" = "xpygobject-2.0" ];
then
prefix="$PYTHON_PREFIX"
else
prefix="$GTK_PREFIX"
fi
exec "$PKG_CONFIG_PROGRAM" --define-variable=prefix=\$prefix \$*
exec "$PKG_CONFIG_PROGRAM" --define-variable=prefix="$GTK_PREFIX" \$*
fi
ENDSRIPT
chmod +x $1
}
export PKG_CONFIG_PROGRAM=${PKG_CONFIG_PROGRAM:-/usr/bin/pkg-config}
export MINGW_TOOL_PREFIX=${MINGW_TOOL_PREFIX:-/usr/bin/i586-mingw32msvc}
PKG_CONFIG_PROGRAM=${PKG_CONFIG_PROGRAM:-/usr/bin/pkg-config}
MINGW_TOOL_PREFIX=${MINGW_TOOL_PREFIX:-/usr/bin/i586-mingw32msvc-}
export GTK_PREFIX=${GTK_PREFIX:-/usr/local/win/gtk}
if [ "x$1" = "x--with-python=2.5" -o "x$2" = "x--with-python=2.5" ]; then
export PYTHON_PREFIX=${PYTHON_PREFIX:-/usr/local/win/Python25}
export PYTHON_PREFIX=${PYTHON_PREFIX:-/usr/local/win/Python25}
export PYTHON25_HOME=$PYTHON_PREFIX
else
export PYTHON_PREFIX=${PYTHON_PREFIX:-/usr/local/win/Python24}
export PYTHON_PREFIX=${PYTHON_PREFIX:-/usr/local/win/Python24}
export PYTHON24_HOME=$PYTHON_PREFIX
fi
export PYTHON_HOME=$PYTHON_PREFIX
export PYTHON24_HOME=${PYTHON24_HOME:-/usr/local/win/Python24}
export PYTHON25_HOME=${PYTHON25_HOME:-/usr/local/win/Python25}
if [ x$CONFIGURE = x ]; then
CONFIGURE="configure"
if [ ! -e $CONFIGURE ]; then
@ -51,31 +52,35 @@ if [ x$CONFIGURE = x ]; then
CONFIG_GUESS="$configure_dir"/config.guess
fi
export ADDR2LINE="$MINGW_TOOL_PREFIX-addr2line"
export AR="$MINGW_TOOL_PREFIX-ar"
export AS="$MINGW_TOOL_PREFIX-as"
export CC="$MINGW_TOOL_PREFIX-gcc"
export CPP="$MINGW_TOOL_PREFIX-cpp"
export CPPFILT="$MINGW_TOOL_PREFIX-c++filt"
export CXX="$MINGW_TOOL_PREFIX-g++"
export DLLTOOL="$MINGW_TOOL_PREFIX-dlltool"
export DLLWRAP="$MINGW_TOOL_PREFIX-dllwrap"
export GCOV="$MINGW_TOOL_PREFIX-gcov"
export LD="$MINGW_TOOL_PREFIX-ld"
export NM="$MINGW_TOOL_PREFIX-nm"
export OBJCOPY="$MINGW_TOOL_PREFIX-objcopy"
export OBJDUMP="$MINGW_TOOL_PREFIX-objdump"
export RANLIB="$MINGW_TOOL_PREFIX-ranlib"
export READELF="$MINGW_TOOL_PREFIX-readelf"
export SIZE="$MINGW_TOOL_PREFIX-size"
export STRINGS="$MINGW_TOOL_PREFIX-strings"
export STRIP="$MINGW_TOOL_PREFIX-strip"
export WINDRES="$MINGW_TOOL_PREFIX-windres"
# autoconf is not intelligent enough to guess that
# i586-pc-mingw32msvc target has anything to do with
# debian /usr/bin/i586-mingw32msvc-gcc or freebsd
# /usr/local/mingw32/bin/gcc, hence these variables
export ADDR2LINE="${MINGW_TOOL_PREFIX}addr2line"
export AS="${MINGW_TOOL_PREFIX}as"
export CC="${MINGW_TOOL_PREFIX}gcc"
export CPP="${MINGW_TOOL_PREFIX}cpp"
export CPPFILT="${MINGW_TOOL_PREFIX}c++filt"
export CXX="${MINGW_TOOL_PREFIX}g++"
export DLLTOOL="${MINGW_TOOL_PREFIX}dlltool"
export DLLWRAP="${MINGW_TOOL_PREFIX}dllwrap"
export GCOV="${MINGW_TOOL_PREFIX}gcov"
export LD="${MINGW_TOOL_PREFIX}ld"
export NM="${MINGW_TOOL_PREFIX}nm"
export OBJCOPY="${MINGW_TOOL_PREFIX}objcopy"
export OBJDUMP="${MINGW_TOOL_PREFIX}objdump"
export READELF="${MINGW_TOOL_PREFIX}readelf"
export SIZE="${MINGW_TOOL_PREFIX}size"
export STRINGS="${MINGW_TOOL_PREFIX}strings"
export WINDRES="${MINGW_TOOL_PREFIX}windres"
export AR="${MINGW_TOOL_PREFIX}ar"
export RANLIB="${MINGW_TOOL_PREFIX}ranlib"
export STRIP="${MINGW_TOOL_PREFIX}strip"
export LDFLAGS="-L$GTK_PREFIX/lib"
export LDFLAGS="-L$GTK_PREFIX/lib -mno-cygwin"
export CPPFLAGS="-I$GTK_PREFIX/include"
export CFLAGS="${CFLAGS:-"-O2"} -I$GTK_PREFIX/include -mms-bitfields -march=i686"
export CXXFLAGS="${CFLAGS:-"-O2"} -I$GTK_PREFIX/include -mms-bitfields -march=i686"
export CFLAGS="${CFLAGS:-"-O2"} -I$GTK_PREFIX/include -mno-cygwin -mms-bitfields -march=i686"
export CXXFLAGS="${CFLAGS:-"-O2"} -I$GTK_PREFIX/include -mno-cygwin -mms-bitfields -march=i686"
mkdir -p fake-bin
write_pkg_config fake-bin/pkg-config
@ -84,5 +89,17 @@ export PATH=`pwd`/fake-bin:$MINGW_BIN:/usr/i586-mingw32msvc/bin:/usr/local/mingw
TARGET=i586-pc-mingw32msvc
echo sh $CONFIGURE --build=`$CONFIG_GUESS` --host=$TARGET --target=$TARGET --enable-all-warnings $*
exec sh $CONFIGURE --build=`$CONFIG_GUESS` --host=$TARGET --target=$TARGET --enable-all-warnings $*
echo sh $CONFIGURE --build=`$CONFIG_GUESS` --host=$TARGET --target=$TARGET \
--enable-all-warnings --enable-maintainer-mode \
PKG_CONFIG="$PKG_CONFIG" GTK_PREFIX="$GTK_PREFIX" \
PYTHON_PREFIX="$PYTHON_PREFIX" PYTHON_HOME="$PYTHON_HOME" \
PYTHON24_HOME="$PYTHON24_HOME" PYTHON25_HOME="$PYTHON25_HOME" \
AR="$AR" RANLIB="$RANLIB" STRIP="$STRIP" AS="$AS" DLLTOOL="$DLLTOOL" \
OBJDUMP="$OBJDUMP" NM="$NM" $@
exec sh $CONFIGURE --build=`$CONFIG_GUESS` --host=$TARGET --target=$TARGET \
--enable-all-warnings --enable-maintainer-mode \
PKG_CONFIG="$PKG_CONFIG" GTK_PREFIX="$GTK_PREFIX" \
PYTHON_PREFIX="$PYTHON_PREFIX" PYTHON_HOME="$PYTHON_HOME" \
PYTHON24_HOME="$PYTHON24_HOME" PYTHON25_HOME="$PYTHON25_HOME" \
AR="$AR" RANLIB="$RANLIB" STRIP="$STRIP" AS="$AS" DLLTOOL="$DLLTOOL" \
OBJDUMP="$OBJDUMP" NM="$NM" $@