Skip to content

Commit

Permalink
Merge branch 'master' of http://git.sukimashita.com/libplist into chr…
Browse files Browse the repository at this point in the history
…onic

Conflicts:
	.gitignore
  • Loading branch information
nikias committed Jan 11, 2012
2 parents 0d5fb0c + fd1dd88 commit 10d7500
Show file tree
Hide file tree
Showing 12 changed files with 918 additions and 11 deletions.
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,5 @@ libcnary/*.o
src/*.o
libplist.a
libplist++.a

*.swp
build/*
19 changes: 15 additions & 4 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
PROJECT( libplist )

SET( LIBPLIST_VERSION_MAJOR "1" )
SET( LIBPLIST_VERSION_MINOR "7" )
SET( LIBPLIST_VERSION_MINOR "8" )
SET( LIBPLIST_SOVERSION "1" )
SET( LIBPLIST_VERSION "${LIBPLIST_VERSION_MAJOR}.${LIBPLIST_VERSION_MINOR}" )
SET( LIBPLIST_LIBVERSION "${LIBPLIST_SOVERSION}.${LIBPLIST_VERSION}" )
Expand All @@ -17,13 +17,21 @@ ENDIF(NOT DEFINED CMAKE_INSTALL_LIBDIR)

FIND_PACKAGE( LibXml2 REQUIRED )

OPTION(ENABLE_PYTHON "Enable Python bindings (needs Swig)" ON)
OPTION(ENABLE_SWIG "Enable SWIG Python bindings (needs Swig)" ON)
OPTION(ENABLE_CYTHON "Enable Cython Python bindings (needs Cython)" ON)

IF(ENABLE_PYTHON)
IF(ENABLE_SWIG)
FIND_PACKAGE( SWIG )
ENDIF(ENABLE_SWIG)

IF(ENABLE_CYTHON)
FIND_PACKAGE( Cython )
ENDIF(ENABLE_CYTHON)

IF(ENABLE_SWIG OR ENABLE_CYTHON)
FIND_PACKAGE( PythonInterp )
FIND_PACKAGE( PythonLibs )
ENDIF(ENABLE_PYTHON)
ENDIF(ENABLE_SWIG OR ENABLE_CYTHON)

INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR}/include
${CMAKE_INCLUDE_PATH})
Expand Down Expand Up @@ -52,6 +60,9 @@ ADD_SUBDIRECTORY( test )
IF ( SWIG_FOUND AND PYTHONLIBS_FOUND AND PYTHONINTERP_FOUND )
ADD_SUBDIRECTORY( swig )
ENDIF ( SWIG_FOUND AND PYTHONLIBS_FOUND AND PYTHONINTERP_FOUND )
IF ( CYTHON_FOUND AND PYTHONLIBS_FOUND AND PYTHONINTERP_FOUND )
ADD_SUBDIRECTORY( cython )
ENDIF ( CYTHON_FOUND AND PYTHONLIBS_FOUND AND PYTHONINTERP_FOUND )

# add uninstall target
CONFIGURE_FILE( "${CMAKE_SOURCE_DIR}/cmake/modules/cmake_uninstall.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY)
Expand Down
8 changes: 8 additions & 0 deletions NEWS
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
Version 1.8
~~~~~~~~~~~

- Changes:
* Add cython bindings
* Fix error in swig bindings
* Fix memory corruption in libcnary

Version 1.7
~~~~~~~~~~~

Expand Down
10 changes: 10 additions & 0 deletions cmake/modules/FindCython.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
FIND_PROGRAM(CYTHON_EXECUTABLE cython)

INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(Cython DEFAULT_MSG CYTHON_EXECUTABLE)

MARK_AS_ADVANCED(CYTHON_EXECUTABLE)

IF(CYTHON_FOUND)
SET(CYTHON_USE_FILE ${CMAKE_SOURCE_DIR}/cmake/modules/UseCython.cmake)
ENDIF(CYTHON_FOUND)
30 changes: 30 additions & 0 deletions cython/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@

INCLUDE_DIRECTORIES( ${PYTHON_INCLUDE_PATH} ${CMAKE_CURRENT_SOURCE_DIR} )


SET(plist_SRC
${CMAKE_CURRENT_BINARY_DIR}/plist.c )

SET(plist_HDR
${CMAKE_CURRENT_SOURCE_DIR}/plist.pxd )

ADD_CUSTOM_COMMAND(
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/plist.c
COMMAND ${CYTHON_EXECUTABLE} -o ${CMAKE_CURRENT_BINARY_DIR}/plist.c ${CMAKE_CURRENT_SOURCE_DIR}/plist.pyx
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/plist.pyx ${CMAKE_CURRENT_SOURCE_DIR}/plist.pxd
)


EXEC_PROGRAM("${PYTHON_EXECUTABLE}"
ARGS "-c 'try:\n import distutils.sysconfig; print distutils.sysconfig.get_python_lib(1,0,\"${CMAKE_INSTALL_PREFIX}\")\nexcept: pass\n'"
OUTPUT_VARIABLE DISTUTILS_PYTHON_ILIBRARY_PATH
)

PYTHON_ADD_MODULE(cython_plist plist.c plist_util.c)
SET_TARGET_PROPERTIES(cython_plist PROPERTIES PREFIX "" OUTPUT_NAME plist)
TARGET_LINK_LIBRARIES(cython_plist plist ${PYTHON_LIBRARIES})

INSTALL( FILES ${CMAKE_CURRENT_BINARY_DIR}/plist${CMAKE_SHARED_MODULE_SUFFIX}
DESTINATION ${DISTUTILS_PYTHON_ILIBRARY_PATH} )
INSTALL( FILES ${CMAKE_CURRENT_SOURCE_DIR}/plist.pxd
DESTINATION include/plist/cython COMPONENT dev)
63 changes: 63 additions & 0 deletions cython/plist.pxd
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
cdef extern from "plist/plist.h":
ctypedef void *plist_t
ctypedef void *plist_dict_iter
void plist_free(plist_t node)

cdef class Node:
cdef plist_t _c_node
cdef bint _c_managed
cpdef object __deepcopy__(self, memo=*)
cpdef unicode to_xml(self)
cpdef bytes to_bin(self)
cpdef object copy(self)

cdef class Bool(Node):
cpdef set_value(self, object value)
cpdef bint get_value(self)

cdef class Integer(Node):
cpdef set_value(self, object value)
cpdef int get_value(self)

cdef class Real(Node):
cpdef set_value(self, object value)
cpdef float get_value(self)

cdef class String(Node):
cpdef set_value(self, object value)
cpdef unicode get_value(self)

cdef class Date(Node):
cpdef set_value(self, object value)
cpdef object get_value(self)

cdef class Data(Node):
cpdef set_value(self, object value)
cpdef bytes get_value(self)

cdef class Dict(Node):
cdef dict _map
cdef void _init(self)
cpdef set_value(self, dict value)
cpdef dict get_value(self)
cpdef bint has_key(self, key)
cpdef object get(self, key, default=*)
cpdef list keys(self)
cpdef list items(self)
cpdef list values(self)
cpdef object iterkeys(self)
cpdef object iteritems(self)
cpdef object itervalues(self)

cdef class Array(Node):
cdef list _array
cdef void _init(self)
cpdef set_value(self, value)
cpdef list get_value(self)
cpdef append(self, object item)

cpdef object from_xml(xml)
cpdef object from_bin(bytes bin)

cdef object plist_t_to_node(plist_t c_plist, bint managed=*)
cdef plist_t native_to_plist_t(object native)
Loading

0 comments on commit 10d7500

Please sign in to comment.