From 87bc3cb4fcaf0e3ead4c41e8c56a06cf481875c0 Mon Sep 17 00:00:00 2001 From: Tavian Barnes Date: Mon, 16 May 2011 08:07:27 -0600 Subject: Start Python interface. --- Makefile.am | 3 +- configure.ac | 13 ++++++- libdimension-python/Makefile.am | 27 ++++++++++++++ libdimension-python/dimension.c | 81 +++++++++++++++++++++++++++++++++++++++++ libdimension/Doxyfile.in | 2 +- 5 files changed, 122 insertions(+), 4 deletions(-) create mode 100644 libdimension-python/Makefile.am create mode 100644 libdimension-python/dimension.c diff --git a/Makefile.am b/Makefile.am index 0a2363d..74f1099 100644 --- a/Makefile.am +++ b/Makefile.am @@ -18,7 +18,8 @@ ########################################################################### ACLOCAL_AMFLAGS = -I m4 -SUBDIRS = libdimension +SUBDIRS = libdimension \ + libdimension-python EXTRA_DIST = autogen.sh diff --git a/configure.ac b/configure.ac index ea1345d..2d566a1 100644 --- a/configure.ac +++ b/configure.ac @@ -18,7 +18,7 @@ dnl along with this program. If not, see . dnl Initialization AC_PREREQ(2.65) AC_INIT(Dimension, 0.0.0, tavianator@tavianator.com, dimension, - [http://dmnsn.googlecode.com]) + [http://www.tavianator.com/dimension/]) AM_INIT_AUTOMAKE([parallel-tests color-tests std-options]) AM_SILENT_RULES([yes]) @@ -37,6 +37,7 @@ AC_LIBTOOL_WIN32_DLL AC_PROG_LN_S AC_PROG_MAKE_SET AC_PROG_LIBTOOL +AM_PATH_PYTHON([3.2]) dnl PNG canvas export AC_ARG_ENABLE([png], @@ -62,6 +63,13 @@ AC_ARG_ENABLE([profile], [enable_profile=no]) AM_CONDITIONAL([PROFILE], [test "$enable_profile" = "yes"]) +dnl Python headers +PKG_CHECK_MODULES([Python], [python3 >= 3.2], + [], + [AC_MSG_ERROR([Python not found])]) +AC_SUBST(Python_CFLAGS) +AC_SUBST(Python_LIBS) + dnl Timing library for benchmarks PKG_CHECK_MODULES([libsandglass], [libsandglass >= 0.2], [], @@ -172,5 +180,6 @@ AC_CONFIG_FILES([Makefile libdimension/Doxyfile libdimension/bench/Makefile libdimension/libdimension.pc - libdimension/tests/Makefile]) + libdimension/tests/Makefile + libdimension-python/Makefile]) AC_OUTPUT diff --git a/libdimension-python/Makefile.am b/libdimension-python/Makefile.am new file mode 100644 index 0000000..a362964 --- /dev/null +++ b/libdimension-python/Makefile.am @@ -0,0 +1,27 @@ +########################################################################### +## Copyright (C) 2009-2011 Tavian Barnes ## +## ## +## This file is part of The Dimension Build Suite. ## +## ## +## The Dimension Build Suite 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 3 of the ## +## License, or (at your option) any later version. ## +## ## +## The Dimension Build Suite 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, see . ## +########################################################################### + +INCLUDES = -I$(top_srcdir)/libdimension + +AM_CFLAGS = $(Python_CFLAGS) +AM_LDFLAGS = $(Python_LDFLAGS) + +pyexec_LTLIBRARIES = dimension.la +dimension_la_SOURCES = dimension.c +dimension_la_LDFLAGS = -avoid-version -module diff --git a/libdimension-python/dimension.c b/libdimension-python/dimension.c new file mode 100644 index 0000000..35b9f4c --- /dev/null +++ b/libdimension-python/dimension.c @@ -0,0 +1,81 @@ +/************************************************************************* + * Copyright (C) 2009-2011 Tavian Barnes * + * * + * This file is part of The Dimension Python Extension. * + * * + * The Dimension Python Extension is free software; you can redistribute * + * it and/ or modify it under the terms of the GNU Lesser General Public * + * License as published by the Free Software Foundation; either version * + * 3 of the License, or (at your option) any later version. * + * * + * The Dimension Python Extension 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 Lesser General Public License for more details. * + * * + * You should have received a copy of the GNU Lesser General Public * + * License along with this program. If not, see * + * . * + *************************************************************************/ + +#include +#include "dimension.h" + +typedef struct { + PyObject_HEAD + dmnsn_scene *scene; +} dmnsn_SceneObject; + +static PyTypeObject dmnsn_SceneType = { + PyVarObject_HEAD_INIT(NULL, 0) + "dimension.Scene", /* tp_name */ + sizeof(dmnsn_SceneObject), /* tp_basicsize */ + 0, /* tp_itemsize */ + 0, /* tp_dealloc */ + 0, /* tp_print */ + 0, /* tp_getattr */ + 0, /* tp_setattr */ + 0, /* tp_reserved */ + 0, /* tp_repr */ + 0, /* tp_as_number */ + 0, /* tp_as_sequence */ + 0, /* tp_as_mapping */ + 0, /* tp_hash */ + 0, /* tp_call */ + 0, /* tp_str */ + 0, /* tp_getattro */ + 0, /* tp_setattro */ + 0, /* tp_as_buffer */ + Py_TPFLAGS_DEFAULT, /* tp_flags */ + "Dimension scene", /* tp_doc */ +}; + +static PyMethodDef DimensionMethods[] = { + { NULL, NULL, 0, NULL } /* Sentinel */ +}; + +static struct PyModuleDef dimensionmodule = { + PyModuleDef_HEAD_INIT, + "dimension", + NULL, + -1, + DimensionMethods +}; + +PyMODINIT_FUNC +PyInit_dimension(void) +{ + dmnsn_SceneType.tp_new = PyType_GenericNew; + if (PyType_Ready(&dmnsn_SceneType) < 0) { + return NULL; + } + + PyObject *m = PyModule_Create(&dimensionmodule); + if (!m) { + return NULL; + } + + Py_INCREF(&dmnsn_SceneType); + PyModule_AddObject(m, "Scene", (PyObject *)&dmnsn_SceneType); + return m; +} diff --git a/libdimension/Doxyfile.in b/libdimension/Doxyfile.in index 145bd15..0193155 100644 --- a/libdimension/Doxyfile.in +++ b/libdimension/Doxyfile.in @@ -1,6 +1,6 @@ DOXYFILE_ENCODING = UTF-8 PROJECT_NAME = libdimension -PROJECT_NUMBER = @VERSION@ +PROJECT_NUMBER = @PACKAGE_VERSION@ OUTPUT_DIRECTORY = @top_builddir@/libdimension/doc OUTPUT_LANGUAGE = English FULL_PATH_NAMES = YES -- cgit v1.2.3