[Pen-commits] SF.net SVN: pen:[109] src
Brought to you by:
mdgeorge
From: <mdg...@us...> - 2008-12-03 03:00:31
|
Revision: 109 http://pen.svn.sourceforge.net/pen/?rev=109&view=rev Author: mdgeorge Date: 2008-12-03 03:00:27 +0000 (Wed, 03 Dec 2008) Log Message: ----------- Cleaned out some of the old CGAL stuff from the source tree and the build system. Updated the build scripts. Factored my mask extensions into a separate maskutils module. Modified Paths: -------------- autogen.sh configure.ac src/Makefile.am Added Paths: ----------- config/m4/python.m4 include/bitmask.h include/mask.h src/demos/Makefile.am src/maskutils.c Removed Paths: ------------- config/m4/CGAL.m4 config/m4/ax_boost_base.m4 config/m4/ax_boost_python.m4 config/m4/ax_python.m4 include/CGAL/ Property Changed: ---------------- src/ src/demos/ Modified: autogen.sh =================================================================== --- autogen.sh 2008-12-03 01:41:53 UTC (rev 108) +++ autogen.sh 2008-12-03 03:00:27 UTC (rev 109) @@ -1,9 +1,9 @@ #!/bin/sh aclocal -I config/m4 && -autoconf && -libtoolize && -automake && -./configure --with-cgalmakefile=/home/mike/download/cgal/CGAL-3.2.1/make/Makefile/makefile_i586_Linux-2.6_g++-4.1.2 && +autoconf && +libtoolize && +automake && +./configure && make Deleted: config/m4/CGAL.m4 =================================================================== --- config/m4/CGAL.m4 2008-12-03 01:41:53 UTC (rev 108) +++ config/m4/CGAL.m4 2008-12-03 03:00:27 UTC (rev 109) @@ -1,99 +0,0 @@ -dnl CHECK CGAL BEGIN -dnl This script takes two arguments, the action on success and the action on failure. -dnl It first checks if CGAL_MAKEFILE is defined (or a --with-cgalmakefile) value is passed. -dnl If that fails, it seaches for CGAL in the standard places. -dnl CGAL_CXXFLAGS, CGAL_CPPFLAGS, CGAL_LDFLAGS and CGAL_LIBS are all defined. -dnl -dnl Modified from http://graphics.stanford.edu/~drussel/autotest/CGAL.m4 -AC_DEFUN([ACX_CGAL], -[ -acx_cgal_found=no -AC_ARG_WITH(cgalmakefile, - [AC_HELP_STRING([--with-cgalmakefile=makefile], [Use the following CGAL makefile])]) -case $with_cgalmakefile in - yes | "") ;; - no) acx_cgal_found=disable ;; - -* | */* | *.a | *.so | *.so.* | *.o) CGAL_MAKEFILE="$with_cgalmakefile" ;; - *) CGAL_MAKEFILE="$with_cgalmakefile" ;; -esac - -if test "$acx_cgal_found" == no; then - AC_MSG_CHECKING(CGAL_MAKEFILE) - - if test \! -z "$CGAL_MAKEFILE"; then - - if test -e "$CGAL_MAKEFILE"; then - tname=`mktemp /tmp/cgal_makefile_dsrXXXXXX` - -cat > $tname << _ACEOF -include $CGAL_MAKEFILE - -cppflags: - @echo \$(CGAL_CXXFLAGS) - -cxxflags: - @echo -ldflags: - @echo \$(CGAL_LDFLAGS) -_ACEOF - CGAL_CPPFLAGS="`make -s -f $tname cppflags`" - CGAL_CXXFLAGS="`make -s -f $tname cxxflags`" - CGAL_LDFLAGST="`make -s -f $tname ldflags`" - for i in $CGAL_LDFLAGST; do - if test `echo $i| grep -c ^-l`; then - CGAL_LIBS="$CGAL_LIBS $i" - else - CGAL_LDFLAGS="$CGAL_LDFLAGS $i" - fi - done - rm -f $tname - AC_MSG_RESULT(yes) - acx_cgal_found=yes - dnl echo CGAL_CPPFLAGS are $CGAL_CPPFLAGS - dnl echo CGAL_LDFLAGS are $CGAL_LDFLAGS - dnl echo CGAL_LIBS are $CGAL_LIBS - else - AC_MSG_RESULT(invalid) - AC_ERROR([CGAL_MAKEFILE defined, but the makefile does not exist.]) - fi - else - AC_MSG_RESULT(not defined) - fi -fi - -if test "$acx_cgal_found" == no; then - AC_CHECK_HEADER(CGAL/Exact_predicates_inexact_constructions_kernel.h, cgal_have_header=yes, cgal_have_header=no) - if test "$cgal_have_header" == yes; then - AC_CHECK_LIB(CGAL, main, cgal_have_lib=yes, cgal_have_lib=no) - if test "$cgal_have_lib" == no; then - save_LIBS="$LIBS"; LIBS="$LIBS -lgmp -lmpfr -lm" - AC_CHECK_LIB(CGAL, main, [CGAL_LIBS="-lCGAL -lgmp -lmpfr" - cgal_have_lib=yes], cgal_have_lib=no) - LIBS="$save_LIBS" - else - CGAL_LIBS="-lCGAL" - AC_CHECK_LIB(mpfr, main, [CGAL_LIBS="$CGAL_LIBS -lmpfr"]) - AC_CHECK_LIB(gmp, main, [CGAL_LIBS="$CGAL_LIBS -lgmp"]) - AC_CHECK_LIB(gmpxx, main, [CGAL_LIBS="$CGAL_LIBS -lgmpxx"]) - fi - - if test "$cgal_have_lib" == yes; then - acx_cgal_found=yes - fi - fi - if test "$acx_cgal_found" == yes; then - AC_CHECK_LIB(Core, main, [CGAL_LIBS="$CGAL_LIBS -lCore"]) - fi -fi - - - -AC_MSG_CHECKING(CGAL) -if test "$acx_cgal_found" == yes; then - AC_MSG_RESULT(yes); - $1 -else - AC_MSG_RESULT(no) - $2 -fi]) - Deleted: config/m4/ax_boost_base.m4 =================================================================== --- config/m4/ax_boost_base.m4 2008-12-03 01:41:53 UTC (rev 108) +++ config/m4/ax_boost_base.m4 2008-12-03 03:00:27 UTC (rev 109) @@ -1,198 +0,0 @@ -##### http://autoconf-archive.cryp.to/ax_boost_base.html -# -# SYNOPSIS -# -# AX_BOOST_BASE([MINIMUM-VERSION]) -# -# DESCRIPTION -# -# Test for the Boost C++ libraries of a particular version (or newer) -# -# If no path to the installed boost library is given the macro -# searchs under /usr, /usr/local, and /opt, and evaluates the -# $BOOST_ROOT environment variable. Further documentation is -# available at <http://randspringer.de/boost/index.html>. -# -# This macro calls: -# -# AC_SUBST(BOOST_CPPFLAGS) / AC_SUBST(BOOST_LDFLAGS) -# -# And sets: -# -# HAVE_BOOST -# -# LAST MODIFICATION -# -# 2006-06-15 -# -# COPYLEFT -# -# Copyright (c) 2006 Thomas Porschberg <th...@ra...> -# -# Copying and distribution of this file, with or without -# modification, are permitted in any medium without royalty provided -# the copyright notice and this notice are preserved. - -AC_DEFUN([AX_BOOST_BASE], -[ -AC_ARG_WITH([boost], - AS_HELP_STRING([--with-boost@<:@=DIR@:>@], [use boost (default is No) - it is possible to specify the root directory for boost (optional)]), - [ - if test "$withval" = "no"; then - want_boost="no" - elif test "$withval" = "yes"; then - want_boost="yes" - ac_boost_path="" - else - want_boost="yes" - ac_boost_path="$withval" - fi - ], - [want_boost="no"]) - -if test "x$want_boost" = "xyes"; then - boost_lib_version_req=ifelse([$1], ,1.20.0,$1) - boost_lib_version_req_shorten=`expr $boost_lib_version_req : '\([[0-9]]*\.[[0-9]]*\)'` - boost_lib_version_req_major=`expr $boost_lib_version_req : '\([[0-9]]*\)'` - boost_lib_version_req_minor=`expr $boost_lib_version_req : '[[0-9]]*\.\([[0-9]]*\)'` - boost_lib_version_req_sub_minor=`expr $boost_lib_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'` - if test "x$boost_lib_version_req_sub_minor" = "x" ; then - boost_lib_version_req_sub_minor="0" - fi - WANT_BOOST_VERSION=`expr $boost_lib_version_req_major \* 100000 \+ $boost_lib_version_req_minor \* 100 \+ $boost_lib_version_req_sub_minor` - AC_MSG_CHECKING(for boostlib >= $boost_lib_version_req) - succeeded=no - - dnl first we check the system location for boost libraries - dnl this location ist chosen if boost libraries are installed with the --layout=system option - dnl or if you install boost with RPM - if test "$ac_boost_path" != ""; then - BOOST_LDFLAGS="-L$ac_boost_path/lib" - BOOST_CPPFLAGS="-I$ac_boost_path/include" - else - for ac_boost_path_tmp in /usr /usr/local /opt ; do - if test -d "$ac_boost_path_tmp/include/boost" && test -r "$ac_boost_path_tmp/include/boost"; then - BOOST_LDFLAGS="-L$ac_boost_path_tmp/lib" - BOOST_CPPFLAGS="-I$ac_boost_path_tmp/include" - break; - fi - done - fi - - CPPFLAGS_SAVED="$CPPFLAGS" - CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" - export CPPFLAGS - - LDFLAGS_SAVED="$LDFLAGS" - LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" - export LDFLAGS - - AC_LANG_PUSH(C++) - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ - @%:@include <boost/version.hpp> - ]], [[ - #if BOOST_VERSION >= $WANT_BOOST_VERSION - // Everything is okay - #else - # error Boost version is too old - #endif - ]])],[ - AC_MSG_RESULT(yes) - succeeded=yes - found_system=yes - ],[ - ]) - AC_LANG_POP([C++]) - - - - dnl if we found no boost with system layout we search for boost libraries - dnl built and installed without the --layout=system option or for a staged(not installed) version - if test "x$succeeded" != "xyes"; then - _version=0 - if test "$ac_boost_path" != ""; then - BOOST_LDFLAGS="-L$ac_boost_path/lib" - if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then - for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do - _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` - V_CHECK=`expr $_version_tmp \> $_version` - if test "$V_CHECK" = "1" ; then - _version=$_version_tmp - fi - VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` - BOOST_CPPFLAGS="-I$ac_boost_path/include/boost-$VERSION_UNDERSCORE" - done - fi - else - for ac_boost_path in /usr /usr/local /opt ; do - if test -d "$ac_boost_path" && test -r "$ac_boost_path"; then - for i in `ls -d $ac_boost_path/include/boost-* 2>/dev/null`; do - _version_tmp=`echo $i | sed "s#$ac_boost_path##" | sed 's/\/include\/boost-//' | sed 's/_/./'` - V_CHECK=`expr $_version_tmp \> $_version` - if test "$V_CHECK" = "1" ; then - _version=$_version_tmp - best_path=$ac_boost_path - fi - done - fi - done - - VERSION_UNDERSCORE=`echo $_version | sed 's/\./_/'` - BOOST_CPPFLAGS="-I$best_path/include/boost-$VERSION_UNDERSCORE" - BOOST_LDFLAGS="-L$best_path/lib" - - if test "x$BOOST_ROOT" != "x"; then - if test -d "$BOOST_ROOT" && test -r "$BOOST_ROOT" && test -d "$BOOST_ROOT/stage/lib" && test -r "$BOOST_ROOT/stage/lib"; then - version_dir=`expr //$BOOST_ROOT : '.*/\(.*\)'` - stage_version=`echo $version_dir | sed 's/boost_//' | sed 's/_/./g'` - stage_version_shorten=`expr $stage_version : '\([[0-9]]*\.[[0-9]]*\)'` - V_CHECK=`expr $stage_version_shorten \>\= $_version` - if test "$V_CHECK" = "1" ; then - AC_MSG_NOTICE(We will use a staged boost library from $BOOST_ROOT) - BOOST_CPPFLAGS="-I$BOOST_ROOT" - BOOST_LDFLAGS="-L$BOOST_ROOT/stage/lib" - fi - fi - fi - fi - - CPPFLAGS="$CPPFLAGS $BOOST_CPPFLAGS" - export CPPFLAGS - LDFLAGS="$LDFLAGS $BOOST_LDFLAGS" - export LDFLAGS - - AC_LANG_PUSH(C++) - AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ - @%:@include <boost/version.hpp> - ]], [[ - #if BOOST_VERSION >= $WANT_BOOST_VERSION - // Everything is okay - #else - # error Boost version is too old - #endif - ]])],[ - AC_MSG_RESULT(yes) - succeeded=yes - found_system=yes - ],[ - ]) - AC_LANG_POP([C++]) - fi - - if test "$succeeded" != "yes" ; then - if test "$_version" = "0" ; then - AC_MSG_ERROR([[We could not detect the boost libraries (version $boost_lib_version_req_shorten or higher). If you have a staged boost library (still not installed) please specify \$BOOST_ROOT in your environment and do not give a PATH to --with-boost option. If you are sure you have boost installed, then check your version number looking in <boost/version.hpp>. See http://randspringer.de/boost for more documentation.]]) - else - AC_MSG_NOTICE([Your boost libraries seems to old (version $_version).]) - fi - else - AC_SUBST(BOOST_CPPFLAGS) - AC_SUBST(BOOST_LDFLAGS) - AC_DEFINE(HAVE_BOOST,,[define if the Boost library is available]) - fi - - CPPFLAGS="$CPPFLAGS_SAVED" - LDFLAGS="$LDFLAGS_SAVED" -fi - -]) Deleted: config/m4/ax_boost_python.m4 =================================================================== --- config/m4/ax_boost_python.m4 2008-12-03 01:41:53 UTC (rev 108) +++ config/m4/ax_boost_python.m4 2008-12-03 03:00:27 UTC (rev 109) @@ -1,92 +0,0 @@ -##### http://autoconf-archive.cryp.to/ax_boost_python.html -# -# SYNOPSIS -# -# AX_BOOST_PYTHON -# -# DESCRIPTION -# -# This macro checks to see if the Boost.Python library is installed. -# It also attempts to guess the currect library name using several -# attempts. It tries to build the library name using a user supplied -# name or suffix and then just the raw library. -# -# If the library is found, HAVE_BOOST_PYTHON is defined and -# BOOST_PYTHON_LIB is set to the name of the library. -# -# This macro calls AC_SUBST(BOOST_PYTHON_LIB). -# -# In order to ensure that the Python headers are specified on the -# include path, this macro requires AX_PYTHON to be called. -# -# LAST MODIFICATION -# -# 2005-05-20 -# -# COPYLEFT -# -# Copyright (c) 2005 Michael Tindal <mt...@pa...> -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. -# -# As a special exception, the respective Autoconf Macro's copyright -# owner gives unlimited permission to copy, distribute and modify the -# configure scripts that are the output of Autoconf when processing -# the Macro. You need not follow the terms of the GNU General Public -# License when using or distributing such scripts, even though -# portions of the text of the Macro appear in them. The GNU General -# Public License (GPL) does govern all other use of the material that -# constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the -# Autoconf Macro released by the Autoconf Macro Archive. When you -# make and distribute a modified version of the Autoconf Macro, you -# may extend this special exception to the GPL to apply to your -# modified version as well. - -AC_DEFUN([AX_BOOST_PYTHON], -[AC_REQUIRE([AX_PYTHON])dnl -AC_CACHE_CHECK(whether the Boost::Python library is available, -ac_cv_boost_python, -[AC_LANG_SAVE - AC_LANG_CPLUSPLUS - CPPFLAGS_SAVE=$CPPFLAGS - if test x$PYTHON_INCLUDE_DIR != x; then - CPPFLAGS=-I$PYTHON_INCLUDE_DIR $CPPFLAGS - fi - AC_COMPILE_IFELSE(AC_LANG_PROGRAM([[ - #include <boost/python/module.hpp> - using namespace boost::python; - BOOST_PYTHON_MODULE(test) { throw "Boost::Python test."; }]], - [[return 0;]]), - ac_cv_boost_python=yes, ac_cv_boost_python=no) - AC_LANG_RESTORE - CPPFLAGS=$CPPFLAGS_SAVE -]) -if test "$ac_cv_boost_python" = "yes"; then - AC_DEFINE(HAVE_BOOST_PYTHON,,[define if the Boost::Python library is available]) - ax_python_lib=boost_python - AC_ARG_WITH([boost-python],AS_HELP_STRING([--with-boost-python],[specify the boost python library or suffix to use]), - [if test "x$with_boost_python" != "xno"; then - ax_python_lib=$with_boost_python - ax_boost_python_lib=boost_python-$with_boost_python - fi]) - for ax_lib in $ax_python_lib $ax_boost_python_lib boost_python; do - AC_CHECK_LIB($ax_lib, main, [BOOST_PYTHON_LIB=$ax_lib break]) - done - AC_SUBST(BOOST_PYTHON_LIB) -fi -])dnl Deleted: config/m4/ax_python.m4 =================================================================== --- config/m4/ax_python.m4 2008-12-03 01:41:53 UTC (rev 108) +++ config/m4/ax_python.m4 2008-12-03 03:00:27 UTC (rev 109) @@ -1,101 +0,0 @@ -##### http://autoconf-archive.cryp.to/ax_python.html -# -# SYNOPSIS -# -# AX_PYTHON -# -# DESCRIPTION -# -# This macro does a complete Python development environment check. -# -# It recurses through several python versions (from 2.1 to 2.4 in -# this version), looking for an executable. When it finds an -# executable, it looks to find the header files and library. -# -# It sets PYTHON_BIN to the name of the python executable, -# PYTHON_INCLUDE_DIR to the directory holding the header files, and -# PYTHON_LIB to the name of the Python library. -# -# This macro calls AC_SUBST on PYTHON_BIN (via AC_CHECK_PROG), -# PYTHON_INCLUDE_DIR and PYTHON_LIB. -# -# LAST MODIFICATION -# -# 2004-09-20 -# -# COPYLEFT -# -# Copyright (c) 2004 Michael Tindal <mt...@pa...> -# -# This program is free software; you can redistribute it and/or -# modify it under the terms of the GNU General Public License as -# published by the Free Software Foundation; either version 2 of the -# License, or (at your option) any later version. -# -# This program is distributed in the hope that it will be useful, but -# WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -# General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program; if not, write to the Free Software -# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA -# 02111-1307, USA. -# -# As a special exception, the respective Autoconf Macro's copyright -# owner gives unlimited permission to copy, distribute and modify the -# configure scripts that are the output of Autoconf when processing -# the Macro. You need not follow the terms of the GNU General Public -# License when using or distributing such scripts, even though -# portions of the text of the Macro appear in them. The GNU General -# Public License (GPL) does govern all other use of the material that -# constitutes the Autoconf Macro. -# -# This special exception to the GPL applies to versions of the -# Autoconf Macro released by the Autoconf Macro Archive. When you -# make and distribute a modified version of the Autoconf Macro, you -# may extend this special exception to the GPL to apply to your -# modified version as well. - -AC_DEFUN([AX_PYTHON], -[AC_MSG_CHECKING(for python build information) -AC_MSG_RESULT([]) -for python in python2.4 python2.3 python2.2 python2.1 python; do -AC_CHECK_PROGS(PYTHON_BIN, [$python]) -ax_python_bin=$PYTHON_BIN -if test x$ax_python_bin != x; then - AC_CHECK_LIB($ax_python_bin, main, ax_python_lib=$ax_python_bin, ax_python_lib=no) - AC_CHECK_HEADER([$ax_python_bin/Python.h], - [[ax_python_header=`locate $ax_python_bin/Python.h | sed -e s,/Python.h,,`]], - ax_python_header=no) - if test $ax_python_lib != no; then - if test $ax_python_header != no; then - break; - fi - fi -fi -done -if test x$ax_python_bin = x; then - ax_python_bin=no -fi -if test x$ax_python_header = x; then - ax_python_header=no -fi -if test x$ax_python_lib = x; then - ax_python_lib=no -fi - -AC_MSG_RESULT([ results of the Python check:]) -AC_MSG_RESULT([ Binary: $ax_python_bin]) -AC_MSG_RESULT([ Library: $ax_python_lib]) -AC_MSG_RESULT([ Include Dir: $ax_python_header]) - -if test x$ax_python_header != xno; then - PYTHON_INCLUDE_DIR=$ax_python_header - AC_SUBST(PYTHON_INCLUDE_DIR) -fi -if test x$ax_python_lib != xno; then - PYTHON_LIB=$ax_python_lib - AC_SUBST(PYTHON_LIB) -fi -])dnl Added: config/m4/python.m4 =================================================================== --- config/m4/python.m4 (rev 0) +++ config/m4/python.m4 2008-12-03 03:00:27 UTC (rev 109) @@ -0,0 +1,62 @@ +## this one is commonly used with AM_PATH_PYTHONDIR ... +dnl AM_CHECK_PYMOD(MODNAME [,SYMBOL [,ACTION-IF-FOUND [,ACTION-IF-NOT-FOUND]]]) +dnl Check if a module containing a given symbol is visible to python. +AC_DEFUN([AM_CHECK_PYMOD], +[AC_REQUIRE([AM_PATH_PYTHON]) +py_mod_var=`echo $1['_']$2 | sed 'y%./+-%__p_%'` +AC_MSG_CHECKING(for ifelse([$2],[],,[$2 in ])python module $1) +AC_CACHE_VAL(py_cv_mod_$py_mod_var, [ +ifelse([$2],[], [prog=" +import sys +try: + import $1 +except ImportError: + sys.exit(1) +except: + sys.exit(0) +sys.exit(0)"], [prog=" +import $1 +$1.$2"]) +if $PYTHON -c "$prog" 1>&AC_FD_CC 2>&AC_FD_CC + then + eval "py_cv_mod_$py_mod_var=yes" + else + eval "py_cv_mod_$py_mod_var=no" + fi +]) +py_val=`eval "echo \`echo '$py_cv_mod_'$py_mod_var\`"` +if test "x$py_val" != xno; then + AC_MSG_RESULT(yes) + ifelse([$3], [],, [$3 +])dnl +else + AC_MSG_RESULT(no) + ifelse([$4], [],, [$4 +])dnl +fi +]) + +dnl a macro to check for ability to create python extensions +dnl AM_CHECK_PYTHON_HEADERS([ACTION-IF-POSSIBLE], [ACTION-IF-NOT-POSSIBLE]) +dnl function also defines PYTHON_INCLUDES +AC_DEFUN([AM_CHECK_PYTHON_HEADERS], +[AC_REQUIRE([AM_PATH_PYTHON]) +AC_MSG_CHECKING(for headers required to compile python extensions) +dnl deduce PYTHON_INCLUDES +py_prefix=`$PYTHON -c "import sys; print sys.prefix"` +py_exec_prefix=`$PYTHON -c "import sys; print sys.exec_prefix"` +PYTHON_INCLUDES="-I${py_prefix}/include/python${PYTHON_VERSION}" +if test "$py_prefix" != "$py_exec_prefix"; then + PYTHON_INCLUDES="$PYTHON_INCLUDES -I${py_exec_prefix}/include/python${PYTHON_VERSION}" +fi +AC_SUBST(PYTHON_INCLUDES) +dnl check if the headers exist: +save_CPPFLAGS="$CPPFLAGS" +CPPFLAGS="$CPPFLAGS $PYTHON_INCLUDES" +AC_TRY_CPP([#include <Python.h>],dnl +[AC_MSG_RESULT(found) +$1],dnl +[AC_MSG_RESULT(not found) +$2]) +CPPFLAGS="$save_CPPFLAGS" +]) Modified: configure.ac =================================================================== --- configure.ac 2008-12-03 01:41:53 UTC (rev 108) +++ configure.ac 2008-12-03 03:00:27 UTC (rev 109) @@ -12,33 +12,18 @@ AC_PROG_LIBTOOL() AC_MSG_CHECKING([for bovinity]) AC_MSG_RESULT([moo]) -AC_PROG_CXX() +AC_PROG_CC() AM_PATH_PYTHON([2.4]) -# -# find Libraries -# -ACX_CGAL([],[AC_MSG_ERROR([you need to have CGAL installed])]) -AC_SUBST(CGAL_CXXFLAGS) -AC_SUBST(CGAL_CPPFLAGS) -AC_SUBST(CGAL_LDFLAGS) -AC_SUBST(CGAL_LIBS) +AM_CHECK_PYTHON_HEADERS(,[AC_MSG_ERROR(could not find Python headers)]) -PKG_CHECK_MODULES(GTKMM, gtkmm-2.4) -AC_SUBST(GTKMM_CFLAGS) -AC_SUBST(GTKMM_LIBS) - -AX_PYTHON() -AX_BOOST_BASE() -AX_BOOST_PYTHON() - # # output configuration files # AC_CONFIG_FILES([ Makefile src/Makefile - src/shapes/Makefile + src/demos/Makefile data/Makefile ]) Added: include/bitmask.h =================================================================== --- include/bitmask.h (rev 0) +++ include/bitmask.h 2008-12-03 03:00:27 UTC (rev 109) @@ -0,0 +1,149 @@ +/* + Bitmask 1.7 - A pixel-perfect collision detection library. + + Copyright (C) 2002-2005 Ulf Ekstrom except for the bitcount + function which is copyright (C) Donald W. Gillies, 1992. + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public + License along with this library; if not, write to the Free + Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ +#ifndef BITMASK_H +#define BITMASK_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include <limits.h> +/* Define INLINE for different compilers. If your compiler does not + support inlining then there might be a performance hit in + bitmask_overlap_area(). +*/ +#ifndef INLINE +# ifdef __GNUC__ +# define INLINE inline +# else +# ifdef _MSC_VER +# define INLINE __inline +# else +# define INLINE +# endif +# endif +#endif + +#define BITMASK_W unsigned long int +#define BITMASK_W_LEN (sizeof(BITMASK_W)*CHAR_BIT) +#define BITMASK_W_MASK (BITMASK_W_LEN - 1) +#define BITMASK_N(n) ((BITMASK_W)1 << (n)) + +typedef struct bitmask +{ + int w,h; + BITMASK_W bits[1]; +} bitmask_t; + +/* Creates a bitmask of width w and height h, where + w and h must both be greater than 0. + The mask is automatically cleared when created. + */ +bitmask_t *bitmask_create(int w, int h); + +/* Frees all the memory allocated by bitmask_create for m. */ +void bitmask_free(bitmask_t *m); + +/* Clears all bits in the mask */ +void bitmask_clear(bitmask_t *m); + +/* Sets all bits in the mask */ +void bitmask_fill(bitmask_t *m); + +/* Flips all bits in the mask */ +void bitmask_invert(bitmask_t *m); + +/* Counts the bits in the mask */ +unsigned int bitmask_count(bitmask_t *m); + +/* Returns nonzero if the bit at (x,y) is set. Coordinates start at + (0,0) */ +static INLINE int bitmask_getbit(const bitmask_t *m, int x, int y) +{ + return (m->bits[x/BITMASK_W_LEN*m->h + y] & BITMASK_N(x & BITMASK_W_MASK)) != 0; +} + +/* Sets the bit at (x,y) */ +static INLINE void bitmask_setbit(bitmask_t *m, int x, int y) +{ + m->bits[x/BITMASK_W_LEN*m->h + y] |= BITMASK_N(x & BITMASK_W_MASK); +} + +/* Clears the bit at (x,y) */ +static INLINE void bitmask_clearbit(bitmask_t *m, int x, int y) +{ + m->bits[x/BITMASK_W_LEN*m->h + y] &= ~BITMASK_N(x & BITMASK_W_MASK); +} + +/* Returns nonzero if the masks overlap with the given offset. + The overlap tests uses the following offsets (which may be negative): + + +----+----------.. + |A | yoffset + | +-+----------.. + +--|B + |xoffset + | | + : : +*/ +int bitmask_overlap(const bitmask_t *a, const bitmask_t *b, int xoffset, int yoffset); + +/* Like bitmask_overlap(), but will also give a point of intersection. + x and y are given in the coordinates of mask a, and are untouched + if there is no overlap. */ +int bitmask_overlap_pos(const bitmask_t *a, const bitmask_t *b, + int xoffset, int yoffset, int *x, int *y); + +/* Returns the number of overlapping 'pixels' */ +int bitmask_overlap_area(const bitmask_t *a, const bitmask_t *b, int xoffset, int yoffset); + +/* Fills a mask with the overlap of two other masks. A bitwise AND. */ +void bitmask_overlap_mask (const bitmask_t *a, const bitmask_t *b, bitmask_t *c, int xoffset, int yoffset); + +/* Draws mask b onto mask a (bitwise OR). Can be used to compose large + (game background?) mask from several submasks, which may speed up + the testing. */ + +void bitmask_draw(bitmask_t *a, const bitmask_t *b, int xoffset, int yoffset); + +void bitmask_erase(bitmask_t *a, const bitmask_t *b, int xoffset, int yoffset); + +/* Return a new scaled bitmask, with dimensions w*h. The quality of the + scaling may not be perfect for all circumstances, but it should + be reasonable. If either w or h is 0 a clear 1x1 mask is returned. */ +bitmask_t *bitmask_scale(const bitmask_t *m, int w, int h); + +/* Convolve b into a, drawing the output into o, shifted by offset. If offset + * is 0, then the (x,y) bit will be set if and only if + * bitmask_overlap(a, b, x - b->w - 1, y - b->h - 1) returns true. + * + * Modifies bits o[xoffset ... xoffset + a->w + b->w - 1) + * [yoffset ... yoffset + a->h + b->h - 1). */ +void bitmask_convolve(const bitmask_t *a, const bitmask_t *b, bitmask_t *o, int xoffset, int yoffset); + +/* Find the closest point to (x,y) with mask[x,y] not set */ +void bitmask_find_closest(const bitmask_t *mask, int * x, int * y); + +#ifdef __cplusplus +} /* End of extern "C" { */ +#endif + +#endif Added: include/mask.h =================================================================== --- include/mask.h (rev 0) +++ include/mask.h 2008-12-03 03:00:27 UTC (rev 109) @@ -0,0 +1,23 @@ +#include <Python.h> +#include "bitmask.h" + +#define PYGAMEAPI_MASK_NUMSLOTS + +typedef struct { + PyObject_HEAD + bitmask_t *mask; +} PyMaskObject; + +#define PyMask_AsBitmap(x) (((PyMaskObject*)x)->mask) + +#ifndef PYGAMEAPI_MASK_INTERNAL + +#define PyMask_Type (*(PyTypeObject*)PyMASK_C_API[0]) +#define PyMask_Check(x) ((x)->ob_type == &PyMask_Type) + + + +#endif /* !defined(PYGAMEAPI_MASK_INTERNAL) */ + +static void* PyMASK_C_API[PYGAMEAPI_MASK_NUMSLOTS] = {NULL}; + Property changes on: src ___________________________________________________________________ Modified: svn:ignore - Makefile Makefile.in *.pyc + Makefile Makefile.in *.pyc .libs .deps Modified: src/Makefile.am =================================================================== --- src/Makefile.am 2008-12-03 01:41:53 UTC (rev 108) +++ src/Makefile.am 2008-12-03 03:00:27 UTC (rev 109) @@ -1,24 +1,23 @@ -SUBDIRS = shapes +SUBDIRS = demos +INCLUDES = ${PYTHON_INCLUDES} -I${top_srcdir}/include +pkgpyexec_LTLIBRARIES = maskutils.la +maskutils_la_SOURCES = maskutils.c +maskutils_la_LDFLAGS = -avoid-version -module + pkgpython_PYTHON = \ - circles.py \ - collision.py \ drag.py \ - draw.py \ editor.py \ - event.py \ files.py \ globals.py \ level.py \ menu.py \ parts.py \ - penode.py \ pen.py \ physics.py \ vector.py - clean-local: rm -f *.pyc Property changes on: src/demos ___________________________________________________________________ Modified: svn:ignore - *.pyc + *.pyc Makefile Makefile.in Added: src/maskutils.c =================================================================== --- src/maskutils.c (rev 0) +++ src/maskutils.c 2008-12-03 03:00:27 UTC (rev 109) @@ -0,0 +1,91 @@ +#include <Python.h> +#include <mask.h> + +static const char DOC_CONVOLVE[] = +"Return the convolution of self with another mask. \n" +" \n" +"convolve(a, b, outputmask = None, offset = (0,0)): return Mask \n" +" Returns a mask with the (i-offset[0],j-offset[1]) bit set if shifting a \n" +" so that it's lower right corner pixel is at (i,j) would cause it to overlap \n" +" with a. \n" +" \n" +" If outputmask is not None, then the output is drawn onto outputmask and \n" +" outputmask is returned. Otherwise a mask of size a.size() + b.size() - (1,1)\n" +" is created. "; + +static const char DOC_FINDCLOSEST[] = +"Find the closest cleared position to a given bit. \n" +" \n" +"find_closest(mask, (x,y)): return point \n" +" Returns (x',y') closest to (x,y) such that either (x',y') is outside of the \n" +" bounds of mask, or mask.get_at((x',y')) is False. "; + +static PyObject* maskutils_convolve (PyObject*, PyObject*); +static PyObject* maskutils_find_closest (PyObject*, PyObject*); + +static PyMethodDef maskutils_methods[] = { + {"convolve", maskutils_convolve, METH_VARARGS, DOC_CONVOLVE}, + {"find_closest", maskutils_find_closest, METH_VARARGS, DOC_FINDCLOSEST}, + + {NULL, NULL, 0, NULL} +}; + +void +initmaskutils() +{ + PyInitModule ("maskutils", maskutils_methods); +} + +/* +** Implementations ************************************************************* +*/ + +static +PyObject * +maskutils_convolve(PyObject *self /* Not used */, PyObject *args) +{ + PyObject *aobj, *bobj, *oobj = Py_None; + bitmask_t *a, *b, *o; + int xoffset = 0, yoffset = 0; + + if (!PyArg_ParseTuple (args, "O!O!|O(ii)", &PyMask_Type, &aobj, &PyMask_Type, &bobj, &oobj, &xoffset, &yoffset)) + return NULL; + + a = PyMask_AsBitmap(aobj); + b = PyMask_AsBitmap(bobj); + + if (oobj == Py_None) { + PyMaskObject *result = PyObject_New(PyMaskObject, &PyMask_Type); + + result->mask = bitmask_create(a->w + b->w - 1, a->h + b->h - 1); + oobj = (PyObject*) result; + } + else + Py_INCREF(oobj); + + o = PyMask_AsBitmap(oobj); + + bitmask_convolve(a, b, o, xoffset, yoffset); + return oobj; +} + +static +PyObject * +maskutils_find_closest(PyObject *self /* Not used */, PyObject *args) +{ + PyObject * mobj; + bitmask_t * mask; + int x, y; + + if (!PyArg_ParseTuple (args, "O!(ii)", &PyMask_Type, &mobj, &x, &y)) + return NULL; + + mask = PyMask_AsBitmap (self); + bitmask_find_closest (mask, &x, &y); + + return Py_BuildValue ("(ii)", x, y); +} + +/* +** vim: ts=4 sw=4 cindent cino=\:0 +*/ This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |