summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore51
-rw-r--r--CMakeLists.txt83
-rw-r--r--Makefile.am3
-rwxr-xr-xautogen.sh15
-rw-r--r--cmake/libplistPackaging.cmake15
-rw-r--r--cmake/modules/FindCython.cmake10
-rw-r--r--cmake/modules/FindGLIB2.cmake51
-rw-r--r--cmake/modules/FindLibXml2.cmake57
-rw-r--r--cmake/modules/cmake_uninstall.cmake.in21
-rw-r--r--configure.ac140
-rw-r--r--cython/CMakeLists.txt30
-rw-r--r--cython/Makefile.am31
-rw-r--r--doxygen.cfg.in (renamed from doxygen.cfg)8
-rw-r--r--include/CMakeLists.txt19
-rw-r--r--include/Makefile.am14
-rw-r--r--libcnary/CMakeLists.txt16
-rw-r--r--libcnary/Makefile21
-rw-r--r--libcnary/Makefile.am18
-rw-r--r--libplist++.pc.in16
-rw-r--r--libplist.pc.in16
-rw-r--r--m4/ac_pkg_cython.m467
-rw-r--r--m4/ac_python_devel.m4265
-rw-r--r--m4/as-compiler-flag.m462
-rw-r--r--m4/cython_python.m47
-rw-r--r--plistutil/CMakeLists.txt9
-rw-r--r--src/CMakeLists.txt59
-rw-r--r--src/Makefile.am47
-rw-r--r--swig/CMakeLists.txt24
-rw-r--r--swig/__init__.py3
-rw-r--r--swig/plist.i284
-rw-r--r--test/CMakeLists.txt29
-rw-r--r--test/Makefile.am25
-rwxr-xr-xtest/bigarray.test12
-rwxr-xr-xtest/bigarraycmp.test12
-rwxr-xr-xtest/empty.test12
-rwxr-xr-xtest/emptycmp.test12
-rwxr-xr-xtest/huge.test12
-rwxr-xr-xtest/hugecmp.test12
-rwxr-xr-xtest/large.test12
-rwxr-xr-xtest/largecmp.test12
-rwxr-xr-xtest/medium.test12
-rwxr-xr-xtest/mediumcmp.test12
-rwxr-xr-xtest/small.test12
-rwxr-xr-xtest/smallcmp.test12
-rw-r--r--tools/Makefile.am7
-rw-r--r--tools/plistutil.c (renamed from plistutil/plistutil.c)0
-rw-r--r--tools/plistutil.h (renamed from plistutil/plistutil.h)0
47 files changed, 915 insertions, 752 deletions
diff --git a/.gitignore b/.gitignore
index 85f404f..06c7f4d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,2 +1,51 @@
*.swp
-build/*
+*.o
+*.lo
+*.la
+*.pc
+*.log
+*.exe
+configure
+Makefile
+Makefile.in
+aclocal.m4
+autom4te.cache
+compile
+config.*
+depcomp
+doxygen.cfg
+install-sh
+libtool
+ltmain.sh
+missing
+stamp-h1
+m4/libtool.m4
+m4/ltoptions.m4
+m4/ltsugar.m4
+m4/ltversion.m4
+m4/lt~obsolete.m4
+src/Makefile
+src/Makefile.in
+src/.libs
+src/.deps
+include/Makefile
+include/Makefile.in
+libcnary/Makefile
+libcnary/Makefile.in
+libcnary/.libs
+libcnary/.deps
+tools/Makefile
+tools/Makefile.in
+tools/.libs
+tools/.deps
+tools/plistutil
+test/Makefile
+test/Makefile.in
+test/.libs
+test/.deps
+test/plist_cmp
+test/plist_test
+test/data/*.out
+cython/Makefile
+cython/Makefile.in
+cython/.deps
diff --git a/CMakeLists.txt b/CMakeLists.txt
deleted file mode 100644
index e55bb29..0000000
--- a/CMakeLists.txt
+++ /dev/null
@@ -1,83 +0,0 @@
-PROJECT( libplist )
-
-SET( LIBPLIST_VERSION_MAJOR "1" )
-SET( LIBPLIST_VERSION_MINOR "10" )
-SET( LIBPLIST_SOVERSION "1" )
-SET( LIBPLIST_VERSION "${LIBPLIST_VERSION_MAJOR}.${LIBPLIST_VERSION_MINOR}" )
-SET( LIBPLIST_LIBVERSION "${LIBPLIST_SOVERSION}.${LIBPLIST_VERSION}" )
-SET( PLISTUTIL_VERSION ${LIBPLIST_VERSION} )
-
-SET( CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake ${CMAKE_SOURCE_DIR}/cmake/modules )
-
-cmake_minimum_required(VERSION 2.6)
-
-IF(NOT DEFINED CMAKE_INSTALL_LIBDIR)
- SET(CMAKE_INSTALL_LIBDIR lib CACHE PATH "Output directory for libraries")
-ENDIF(NOT DEFINED CMAKE_INSTALL_LIBDIR)
-
-FIND_PACKAGE( LibXml2 REQUIRED )
-
-OPTION(ENABLE_SWIG "Enable SWIG Python bindings (needs Swig)" ON)
-OPTION(ENABLE_CYTHON "Enable Cython Python bindings (needs Cython)" ON)
-
-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_SWIG OR ENABLE_CYTHON)
-
-INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR}/include
- ${CMAKE_INCLUDE_PATH})
-
-ENABLE_TESTING()
-
-IF (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/libcnary/CMakeLists.txt")
- MESSAGE(FATAL_ERROR "
-You need to checkout the 'libcnary' submodule to build libplist.
-To do so, perform the following steps in the base directory:
- git submodule init
- git submodule update
-Then, run cmake again.")
-ENDIF()
-
-INCLUDE (TestBigEndian)
-TEST_BIG_ENDIAN(endianess)
-SET ( PLIST_BYTE_ORDER ${endianess} )
-
-ADD_SUBDIRECTORY( libcnary )
-ADD_SUBDIRECTORY( src )
-ADD_SUBDIRECTORY( plistutil )
-ADD_SUBDIRECTORY( include )
-ADD_SUBDIRECTORY( test )
-
-ADD_DEPENDENCIES( plist libcnary )
-
-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)
-ADD_CUSTOM_TARGET(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake")
-
-########## PkgConfig ############################
-CONFIGURE_FILE( "libplist.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/libplist.pc" )
-CONFIGURE_FILE( "libplist++.pc.in" "${CMAKE_CURRENT_BINARY_DIR}/libplist++.pc" )
-
-########## INSTALL ##############################
-INSTALL( FILES "${CMAKE_CURRENT_BINARY_DIR}/libplist.pc" DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig/ )
-INSTALL( FILES "${CMAKE_CURRENT_BINARY_DIR}/libplist++.pc" DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig/ )
-
-########## CPack ################################
-INCLUDE( libplistPackaging )
-LIBPLIST_PACKAGE(LIBPLIST_VERSION_MAJOR LIBPLIST_VERSION_MINOR)
diff --git a/Makefile.am b/Makefile.am
new file mode 100644
index 0000000..e80743a
--- /dev/null
+++ b/Makefile.am
@@ -0,0 +1,3 @@
+AUTOMAKE_OPTIONS = foreign
+ACLOCAL_AMFLAGS = -I m4
+SUBDIRS = libcnary src include tools $(CYTHON_SUB) test
diff --git a/autogen.sh b/autogen.sh
new file mode 100755
index 0000000..3292973
--- /dev/null
+++ b/autogen.sh
@@ -0,0 +1,15 @@
+#!/bin/sh
+gprefix=`which glibtoolize 2>&1 >/dev/null`
+if [ $? -eq 0 ]; then
+ glibtoolize --force
+else
+ libtoolize --force
+fi
+aclocal -I m4
+autoheader
+automake --add-missing
+autoconf
+
+if [ -z "$NOCONFIGURE" ]; then
+ ./configure "$@"
+fi
diff --git a/cmake/libplistPackaging.cmake b/cmake/libplistPackaging.cmake
deleted file mode 100644
index fbd865f..0000000
--- a/cmake/libplistPackaging.cmake
+++ /dev/null
@@ -1,15 +0,0 @@
-MACRO( LIBPLIST_PACKAGE _major _minor)
-
- SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Library to parse and generate Apple's binary and XML PList format")
- SET(CPACK_PACKAGE_VERSION_MAJOR ${_major})
- SET(CPACK_PACKAGE_VERSION_MINOR ${_minor})
- SET(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README")
- SET(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/COPYING.LESSER")
- SET(CPACK_COMPONENT_LIB_DISPLAY_NAME "PList library")
- SET(CPACK_COMPONENT_DEV_DISPLAY_NAME "PList development files")
- SET(CPACK_COMPONENT_PLISTUTIL_DISPLAY_NAME "PList conversion tool")
- set(CPACK_COMPONENT_DEV_DEPENDS lib)
- set(CPACK_COMPONENT_PLISTUTIL_DEPENDS lib)
- INCLUDE( CPack )
-
-ENDMACRO( LIBPLIST_PACKAGE )
diff --git a/cmake/modules/FindCython.cmake b/cmake/modules/FindCython.cmake
deleted file mode 100644
index 89005b7..0000000
--- a/cmake/modules/FindCython.cmake
+++ /dev/null
@@ -1,10 +0,0 @@
-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)
diff --git a/cmake/modules/FindGLIB2.cmake b/cmake/modules/FindGLIB2.cmake
deleted file mode 100644
index 226d551..0000000
--- a/cmake/modules/FindGLIB2.cmake
+++ /dev/null
@@ -1,51 +0,0 @@
-# - Try to find the GLIB2 libraries
-# Once done this will define
-#
-# GLIB2_FOUND - system has glib2
-# GLIB2_INCLUDE_DIR - the glib2 include directory
-# GLIB2_LIBRARIES - glib2 library
-
-# Copyright (c) 2008 Laurent Montel, <montel@kde.org>
-#
-# Redistribution and use is allowed according to the terms of the BSD license.
-# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
-
-
-if(GLIB2_INCLUDE_DIR AND GLIB2_LIBRARIES)
- # Already in cache, be silent
- set(GLIB2_FIND_QUIETLY TRUE)
-endif(GLIB2_INCLUDE_DIR AND GLIB2_LIBRARIES)
-
-if (NOT WIN32)
- FIND_PACKAGE(PkgConfig)
- PKG_CHECK_MODULES(PC_GLIB2 glib-2.0)
- SET(GLIB2_DEFINITIONS ${PC_GLIB2_CFLAGS_OTHER})
-endif(NOT WIN32)
-
-find_path(GLIB2_MAIN_INCLUDE_DIR glib.h
- PATH_SUFFIXES glib-2.0
- PATHS ${_LibGLIB2IncDir} )
-
-# search the glibconfig.h include dir under the same root where the library is found
-find_library(GLIB2_LIBRARIES
- NAMES glib-2.0
- PATHS ${_LibGLIB2LinkDir} )
-
-get_filename_component(glib2LibDir "${GLIB2_LIBRARIES}" PATH)
-
-find_path(GLIB2_INTERNAL_INCLUDE_DIR glibconfig.h
- PATH_SUFFIXES glib-2.0/include
- PATHS ${_LibGLIB2IncDir} "${glib2LibDir}" ${CMAKE_SYSTEM_LIBRARY_PATH})
-
-set(GLIB2_INCLUDE_DIR "${GLIB2_MAIN_INCLUDE_DIR}")
-
-# not sure if this include dir is optional or required
-# for now it is optional
-if(GLIB2_INTERNAL_INCLUDE_DIR)
- set(GLIB2_INCLUDE_DIR ${GLIB2_INCLUDE_DIR} "${GLIB2_INTERNAL_INCLUDE_DIR}")
-endif(GLIB2_INTERNAL_INCLUDE_DIR)
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(GLIB2 DEFAULT_MSG GLIB2_LIBRARIES GLIB2_MAIN_INCLUDE_DIR)
-
-mark_as_advanced(GLIB2_INCLUDE_DIR GLIB2_LIBRARIES) \ No newline at end of file
diff --git a/cmake/modules/FindLibXml2.cmake b/cmake/modules/FindLibXml2.cmake
deleted file mode 100644
index 8d3c77e..0000000
--- a/cmake/modules/FindLibXml2.cmake
+++ /dev/null
@@ -1,57 +0,0 @@
-# - Try to find LibXml2
-# Once done this will define
-#
-# LIBXML2_FOUND - System has LibXml2
-# LIBXML2_INCLUDE_DIR - The LibXml2 include directory
-# LIBXML2_LIBRARIES - The libraries needed to use LibXml2
-# LIBXML2_DEFINITIONS - Compiler switches required for using LibXml2
-# LIBXML2_XMLLINT_EXECUTABLE - The XML checking tool xmllint coming with LibXml2
-
-# Copyright (c) 2006, Alexander Neundorf, <neundorf@kde.org>
-#
-# Redistribution and use is allowed according to the terms of the BSD license.
-# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
-
-
-IF (LIBXML2_INCLUDE_DIR AND LIBXML2_LIBRARIES)
- # in cache already
- SET(LibXml2_FIND_QUIETLY TRUE)
-ENDIF (LIBXML2_INCLUDE_DIR AND LIBXML2_LIBRARIES)
-
-IF (NOT WIN32)
- # use pkg-config to get the directories and then use these values
- # in the FIND_PATH() and FIND_LIBRARY() calls
- FIND_PACKAGE(PkgConfig)
- PKG_CHECK_MODULES(PC_LIBXML libxml-2.0)
- SET(LIBXML2_DEFINITIONS ${PC_LIBXML_CFLAGS_OTHER})
-ENDIF (NOT WIN32)
-
-FIND_PATH(LIBXML2_INCLUDE_DIR libxml/xpath.h
- HINTS
- ${PC_LIBXML_INCLUDEDIR}
- ${PC_LIBXML_INCLUDE_DIRS}
- PATH_SUFFIXES libxml2
- )
-
-FIND_LIBRARY(LIBXML2_LIBRARIES NAMES xml2 libxml2
- HINTS
- ${PC_LIBXML_LIBDIR}
- ${PC_LIBXML_LIBRARY_DIRS}
- )
-
-FIND_PROGRAM(LIBXML2_XMLLINT_EXECUTABLE xmllint)
-# for backwards compat. with KDE 4.0.x:
-SET(XMLLINT_EXECUTABLE "${LIBXML2_XMLLINT_EXECUTABLE}")
-
-IF( NOT LIBXML2_XMLLINT_EXECUTABLE )
- MESSAGE(STATUS "xmllint program not found. Install it if you want validate generated doc file.")
-ENDIF(NOT LIBXML2_XMLLINT_EXECUTABLE )
-
-
-INCLUDE(FindPackageHandleStandardArgs)
-
-# handle the QUIETLY and REQUIRED arguments and set LIBXML2_FOUND to TRUE if
-# all listed variables are TRUE
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(LibXml2 DEFAULT_MSG LIBXML2_LIBRARIES LIBXML2_INCLUDE_DIR)
-
-MARK_AS_ADVANCED(LIBXML2_INCLUDE_DIR LIBXML2_LIBRARIES LIBXML2_XMLLINT_EXECUTABLE)
diff --git a/cmake/modules/cmake_uninstall.cmake.in b/cmake/modules/cmake_uninstall.cmake.in
deleted file mode 100644
index 4bfb0bf..0000000
--- a/cmake/modules/cmake_uninstall.cmake.in
+++ /dev/null
@@ -1,21 +0,0 @@
-IF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
- MESSAGE(FATAL_ERROR "Cannot find install manifest: \"@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt\"")
-ENDIF(NOT EXISTS "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt")
-
-FILE(READ "@CMAKE_CURRENT_BINARY_DIR@/install_manifest.txt" files)
-STRING(REGEX REPLACE "\n" ";" files "${files}")
-FOREACH(file ${files})
- MESSAGE(STATUS "Uninstalling \"$ENV{DESTDIR}${file}\"")
- IF(EXISTS "$ENV{DESTDIR}${file}")
- EXEC_PROGRAM(
- "@CMAKE_COMMAND@" ARGS "-E remove \"$ENV{DESTDIR}${file}\""
- OUTPUT_VARIABLE rm_out
- RETURN_VALUE rm_retval
- )
- IF(NOT "${rm_retval}" STREQUAL 0)
- MESSAGE(FATAL_ERROR "Problem when removing \"$ENV{DESTDIR}${file}\"")
- ENDIF(NOT "${rm_retval}" STREQUAL 0)
- ELSE(EXISTS "$ENV{DESTDIR}${file}")
- MESSAGE(STATUS "File \"$ENV{DESTDIR}${file}\" does not exist.")
- ENDIF(EXISTS "$ENV{DESTDIR}${file}")
-ENDFOREACH(file)
diff --git a/configure.ac b/configure.ac
new file mode 100644
index 0000000..d59f8a7
--- /dev/null
+++ b/configure.ac
@@ -0,0 +1,140 @@
+# -*- Autoconf -*-
+# Process this file with autoconf to produce a configure script.
+
+AC_PREREQ(2.61)
+AC_INIT(libplist, 1.11, nospam@nowhere.com)
+AM_INIT_AUTOMAKE([dist-bzip2 no-dist-gzip])
+m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES])
+AC_CONFIG_SRCDIR([src/])
+AC_CONFIG_HEADERS([config.h])
+AC_CONFIG_MACRO_DIR([m4])
+
+dnl libtool versioning
+# +1 : 0 : +1 == adds new functions to the interface
+# +1 : 0 : 0 == changes or removes functions (changes include both
+# changes to the signature and the semantic)
+# ? :+1 : ? == just internal changes
+# CURRENT : REVISION : AGE
+LIBPLIST_SO_VERSION=2:0:0
+
+AC_SUBST(LIBPLIST_SO_VERSION)
+
+dnl Minimum package versions
+LIBXML2_VERSION=2.8.0
+
+AC_SUBST(LIBXML2_VERSION)
+
+# Checks for programs.
+AC_PROG_CC
+AC_PROG_CXX
+AM_PROG_CC_C_O
+AC_PROG_LIBTOOL
+
+# Checks for libraries.
+PKG_CHECK_MODULES(libxml2, libxml-2.0 >= $LIBXML2_VERSION)
+
+# Checks for header files.
+AC_HEADER_STDC
+AC_CHECK_HEADERS([stdint.h stdlib.h string.h])
+
+# Checks for typedefs, structures, and compiler characteristics.
+AC_C_CONST
+AC_TYPE_SIZE_T
+AC_TYPE_SSIZE_T
+AC_TYPE_UINT16_T
+AC_TYPE_UINT32_T
+AC_TYPE_UINT8_T
+
+# Checks for library functions.
+AC_CHECK_FUNCS([asprintf strcasecmp strdup strerror strndup stpcpy vasprintf])
+
+AC_CHECK_HEADER(endian.h, [ac_cv_have_endian_h="yes"], [ac_cv_have_endian_h="no"])
+if test "x$ac_cv_have_endian_h" = "xno"; then
+ AC_DEFINE(__LITTLE_ENDIAN,1234,[little endian])
+ AC_DEFINE(__BIG_ENDIAN,4321,[big endian])
+ AC_C_BIGENDIAN([ac_cv_c_bigendian="yes"], [ac_cv_c_bigendian="no"], [], [])
+ if test "x$ac_cv_c_bigendian" = "xyes"; then
+ AC_DEFINE(__BYTE_ORDER,4321,[big endian byte order])
+ else
+ AC_DEFINE(__BYTE_ORDER,1234,[little endian byte order])
+ fi
+fi
+
+# Check for operating system
+AC_MSG_CHECKING([whether to enable WIN32 build settings])
+case ${host_os} in
+ *mingw32*|*cygwin*)
+ win32=true
+ AC_MSG_RESULT([yes])
+ AC_SUBST(WINDRES)
+ ;;
+ *)
+ win32=false
+ AC_MSG_RESULT([no])
+ ;;
+esac
+AM_CONDITIONAL(WIN32, test x$win32 = xtrue)
+
+# Cython Python Bindings
+AC_ARG_WITH([cython],
+ [AS_HELP_STRING([--without-cython],
+ [build Python bindings using Cython (default is yes)])],
+ [build_cython=false],
+ [build_cython=true])
+if test "$build_cython" = "true"; then
+ AM_PATH_PYTHON(2.3)
+ AC_PROG_CYTHON(0.17.0)
+ CYTHON_PYTHON
+else
+ CYTHON=false
+fi
+if [test "x$CYTHON" != "xfalse"]; then
+ AC_MSG_CHECKING([for libplist Cython bindings])
+ CYTHON_PLIST_INCLUDE_DIR=$($PKG_CONFIG --variable=includedir libplist)/plist/cython
+ if [test ! -d "$CYTHON_PLIST_INCLUDE_DIR"]; then
+ CYTHON=false
+ CYTHON_SUB=
+ cython_python_bindings=no
+ AC_MSG_RESULT([no])
+ AC_MSG_WARN([cannot find libplist Cython bindings. You should install your distribution specific libplist Cython bindings package.])
+ else
+ AC_SUBST([CYTHON_PLIST_INCLUDE_DIR])
+ AC_MSG_RESULT([$CYTHON_PLIST_INCLUDE_DIR])
+ CYTHON_SUB=cython
+ cython_python_bindings=yes
+ fi
+else
+ CYTHON_SUB=
+ cython_python_bindings=no
+fi
+AM_CONDITIONAL([HAVE_CYTHON],[test "x$CYTHON_SUB" = "xcython"])
+AC_SUBST([CYTHON_SUB])
+
+AS_COMPILER_FLAGS(GLOBAL_CFLAGS, "-Wall -Wextra -Wmissing-declarations -Wredundant-decls -Wshadow -Wpointer-arith -Wwrite-strings -Wswitch-default -Wno-unused-parameter")
+AC_SUBST(GLOBAL_CFLAGS)
+
+m4_ifdef([AM_SILENT_RULES],[AM_SILENT_RULES([yes])])
+
+AC_OUTPUT([
+Makefile
+libcnary/Makefile
+src/Makefile
+include/Makefile
+tools/Makefile
+cython/Makefile
+test/Makefile
+libplist.pc
+libplist++.pc
+doxygen.cfg
+])
+
+echo "
+Configuration for $PACKAGE $VERSION:
+-------------------------------------------
+
+ Install prefix: .........: $prefix
+ Python bindings .........: $cython_python_bindings
+
+ Now type 'make' to build $PACKAGE $VERSION,
+ and then 'make install' for installation.
+"
diff --git a/cython/CMakeLists.txt b/cython/CMakeLists.txt
deleted file mode 100644
index eac6bee..0000000
--- a/cython/CMakeLists.txt
+++ /dev/null
@@ -1,30 +0,0 @@
-
-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)
diff --git a/cython/Makefile.am b/cython/Makefile.am
new file mode 100644
index 0000000..1dc8a00
--- /dev/null
+++ b/cython/Makefile.am
@@ -0,0 +1,31 @@
+AM_CPPFLAGS = -I$(top_srcdir)/include
+
+AM_CFLAGS = $(GLOBAL_CFLAGS) $(libxml2_CFLAGS)
+AM_LDFLAGS = $(libxml2_LIBS)
+
+if HAVE_CYTHON
+
+BUILT_SOURCES = plist.c
+PXDINCLUDES = plist.pxd $(CYTHON_PLIST_INCLUDE_DIR)/plist.pxd
+PXIINCLUDES =
+
+CLEANFILES = \
+ *.pyc \
+ *.pyo \
+ plist.c
+
+EXTRA_DIST = plist.pyx plist.pxd $(PXIINCLUDES)
+
+plistdir = $(pyexecdir)
+plist_LTLIBRARIES = plist.la
+plist_la_SOURCES = plist_util.c plist_util.h plist.pyx
+plist_la_CFLAGS = -I../include -I../src $(PYTHON_CPPFLAGS) $(AM_CFLAGS) -Wno-shadow -Wno-redundant-decls -Wno-switch-default -Wno-strict-aliasing -Wno-implicit-function-declaration
+plist_la_LDFLAGS = -module -avoid-version -L$(libdir) $(PYTHON_LDFLAGS) $(AM_LDFLAGS)
+plist_la_LIBADD = ../src/libplist.la
+
+plist.c: plist.pyx $(PXDINCLUDES) $(PXIINCLUDES)
+
+.pyx.c:
+ $(CYTHON) -I$(CYTHON_PLIST_INCLUDE_DIR) -I$(top_srcdir)/src -o $@ $<
+
+endif
diff --git a/doxygen.cfg b/doxygen.cfg.in
index 1218580..bb1aa13 100644
--- a/doxygen.cfg
+++ b/doxygen.cfg.in
@@ -25,13 +25,13 @@ DOXYFILE_ENCODING = UTF-8
# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
# by quotes) that should identify the project.
-PROJECT_NAME = libplist
+PROJECT_NAME = @PACKAGE@
# The PROJECT_NUMBER tag can be used to enter a project or revision number.
# This could be handy for archiving the generated documentation or
# if some version control system is used.
-PROJECT_NUMBER = 1.10
+PROJECT_NUMBER = @VERSION@
# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
# base path where the generated documentation will be put.
@@ -293,7 +293,7 @@ EXTRACT_STATIC = NO
# defined locally in source files will be included in the documentation.
# If set to NO only classes defined in header files are included.
-EXTRACT_LOCAL_CLASSES = YES
+EXTRACT_LOCAL_CLASSES = NO
# This flag is only useful for Objective-C code. When set to YES local
# methods, which are defined in the implementation section but not in
@@ -851,7 +851,7 @@ DISABLE_INDEX = NO
# This tag can be used to set the number of enum values (range [1..20])
# that doxygen will group on one line in the generated HTML documentation.
-ENUM_VALUES_PER_LINE = 4
+ENUM_VALUES_PER_LINE = 1
# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
# structure should be generated to display hierarchical information.
diff --git a/include/CMakeLists.txt b/include/CMakeLists.txt
deleted file mode 100644
index f6d3ea7..0000000
--- a/include/CMakeLists.txt
+++ /dev/null
@@ -1,19 +0,0 @@
-SET( libplist_HDR
- ${CMAKE_CURRENT_SOURCE_DIR}/plist/plist.h
- ${CMAKE_CURRENT_SOURCE_DIR}/plist/plist++.h
- ${CMAKE_CURRENT_SOURCE_DIR}/plist/Array.h
- ${CMAKE_CURRENT_SOURCE_DIR}/plist/Boolean.h
- ${CMAKE_CURRENT_SOURCE_DIR}/plist/Data.h
- ${CMAKE_CURRENT_SOURCE_DIR}/plist/Date.h
- ${CMAKE_CURRENT_SOURCE_DIR}/plist/Dictionary.h
- ${CMAKE_CURRENT_SOURCE_DIR}/plist/Integer.h
- ${CMAKE_CURRENT_SOURCE_DIR}/plist/Node.h
- ${CMAKE_CURRENT_SOURCE_DIR}/plist/Real.h
- ${CMAKE_CURRENT_SOURCE_DIR}/plist/String.h
- ${CMAKE_CURRENT_SOURCE_DIR}/plist/Key.h
- ${CMAKE_CURRENT_SOURCE_DIR}/plist/Uid.h
- ${CMAKE_CURRENT_SOURCE_DIR}/plist/Structure.h
- )
-
-INSTALL( FILES ${libplist_HDR}
- DESTINATION include/plist COMPONENT dev)
diff --git a/include/Makefile.am b/include/Makefile.am
new file mode 100644
index 0000000..4e4db2e
--- /dev/null
+++ b/include/Makefile.am
@@ -0,0 +1,14 @@
+nobase_include_HEADERS = plist/plist.h \
+ plist/plist++.h \
+ plist/Array.h \
+ plist/Boolean.h \
+ plist/Data.h \
+ plist/Date.h \
+ plist/Dictionary.h \
+ plist/Integer.h \
+ plist/Key.h \
+ plist/Node.h \
+ plist/Real.h \
+ plist/String.h \
+ plist/Structure.h \
+ plist/Uid.h
diff --git a/libcnary/CMakeLists.txt b/libcnary/CMakeLists.txt
deleted file mode 100644
index bbbe8ce..0000000
--- a/libcnary/CMakeLists.txt
+++ /dev/null
@@ -1,16 +0,0 @@
-cmake_minimum_required(VERSION 2.6)
-
-SET(libcnary_SRC
- iterator.c
- list.c
- node.c
- node_iterator.c
- node_list.c )
-
-INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
-
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC")
-ADD_LIBRARY(libcnary STATIC ${libcnary_SRC})
-
-SET_TARGET_PROPERTIES(libcnary PROPERTIES OUTPUT_NAME cnary)
-
diff --git a/libcnary/Makefile b/libcnary/Makefile
deleted file mode 100644
index bdd165d..0000000
--- a/libcnary/Makefile
+++ /dev/null
@@ -1,21 +0,0 @@
-TARGET = cnary
-LIBRARY = libcnary.a
-OBJECTS = cnary.o libcnary.a
-LIBRARY_OBJECTS = node.o list.o iterator.o node_list.o node_iterator.o
-CFLAGS=-g -I./include -I/opt/local/include -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk
-LDFLAGS=-L/opt/local/lib -framework CoreFoundation -mmacosx-version-min=10.5 -arch i386 -isysroot /Developer/SDKs/MacOSX10.5.sdk -Wl,-no_compact_linkedit
-
-
-%.o: %.c
- $(CC) -o $(@) -c $(^) $(CFLAGS)
-
-$(LIBRARY): $(LIBRARY_OBJECTS)
- $(AR) rs $(@) $(^)
-
-$(TARGET): $(OBJECTS)
- $(CC) -o $(@) $(^) $(CFLAGS) $(LDFLAGS)
-
-all: $(TARGET)
-
-clean:
- rm -rf $(TARGET) $(LIBRARY) $(OBJECTS) $(LIBRARY_OBJECTS) \ No newline at end of file
diff --git a/libcnary/Makefile.am b/libcnary/Makefile.am
new file mode 100644
index 0000000..ef61c31
--- /dev/null
+++ b/libcnary/Makefile.am
@@ -0,0 +1,18 @@
+AM_CFLAGS = $(GLOBAL_CFLAGS) -Iinclude
+AM_LDFLAGS =
+
+noinst_LTLIBRARIES = libcnary.la
+libcnary_la_LIBADD =
+libcnary_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined
+libcnary_la_SOURCES = \
+ node.c \
+ list.c \
+ node_list.c \
+ iterator.c \
+ node_iterator.c \
+ include/node.h \
+ include/list.h \
+ include/node_list.h \
+ include/iterator.h \
+ include/node_iterator.h \
+ include/object.h
diff --git a/libplist++.pc.in b/libplist++.pc.in
index 89e40d7..2132a8d 100644
--- a/libplist++.pc.in
+++ b/libplist++.pc.in
@@ -1,12 +1,12 @@
-prefix=${CMAKE_INSTALL_PREFIX}
-exec_prefix=${CMAKE_INSTALL_PREFIX}
-libdir=${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}
-includedir=${CMAKE_INSTALL_PREFIX}/include
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
Name: libplist++
Description: C++ binding of libplist
-Version: ${LIBPLIST_VERSION}
-Requires: libplist >= ${LIBPLIST_VERSION}
-Libs: -L${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR} -lplist++
-Cflags: -I${CMAKE_INSTALL_PREFIX}/include
+Version: @VERSION@
+Requires: libplist >= @VERSION@
+Libs: -L${libdir} -lplist++
+Cflags: -I${includedir}
diff --git a/libplist.pc.in b/libplist.pc.in
index 971b8b5..d922c19 100644
--- a/libplist.pc.in
+++ b/libplist.pc.in
@@ -1,12 +1,12 @@
-prefix=${CMAKE_INSTALL_PREFIX}
-exec_prefix=${CMAKE_INSTALL_PREFIX}
-libdir=${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR}
-includedir=${CMAKE_INSTALL_PREFIX}/include
+prefix=@prefix@
+exec_prefix=@exec_prefix@
+libdir=@libdir@
+includedir=@includedir@
Name: libplist
Description: A library to handle Apple Property Lists whereas they are binary or XML
-Version: ${LIBPLIST_VERSION}
-Requires.private: libxml-2.0 >= 2.6.30
-Libs: -L${CMAKE_INSTALL_PREFIX}/${CMAKE_INSTALL_LIBDIR} -lplist
-Cflags: -I${CMAKE_INSTALL_PREFIX}/include
+Version: @VERSION@
+Requires.private: libxml-2.0 >= @LIBXML2_VERSION@
+Libs: -L${libdir} -lplist
+Cflags: -I${includedir}
diff --git a/m4/ac_pkg_cython.m4 b/m4/ac_pkg_cython.m4
new file mode 100644
index 0000000..3b4c9a7
--- /dev/null
+++ b/m4/ac_pkg_cython.m4
@@ -0,0 +1,67 @@
+
+AC_DEFUN([AC_PROG_CYTHON],[
+ AC_PATH_PROG([CYTHON],[cython])
+ if test -z "$CYTHON" ; then
+ AC_MSG_WARN([cannot find 'cython' program. You should look at http://www.cython.org] or install your distribution specific cython package.)
+ CYTHON=false
+ elif test -n "$1" ; then
+ AC_MSG_CHECKING([for Cython version])
+ [cython_version=`$CYTHON --version 2>&1 | sed 's/Cython version \(.*\)$/\1/g'`]
+ AC_MSG_RESULT([$cython_version])
+
+ # Setup extra version string for parsing
+ [cython_version_stripped=`echo $cython_version | sed 's/\([0-9]\+\)\.\([0-9]\+\)[^\.]*\(\.\([0-9]\+\)\)\?.*/0\1.0\2.0\4/g'`]
+ if test -n "$cython_version" ; then
+ # Calculate the required version number components
+ [required=$1]
+ [required_major=`echo $required | sed 's/[^0-9].*//'`]
+ if test -z "$required_major" ; then
+ [required_major=0]
+ fi
+ [required=`echo $required | sed 's/[0-9]*[^0-9]//'`]
+ [required_minor=`echo $required | sed 's/[^0-9].*//'`]
+ if test -z "$required_minor" ; then
+ [required_minor=0]
+ fi
+ [required=`echo $required | sed 's/[0-9]*[^0-9]//'`]
+ [required_patch=`echo $required | sed 's/[^0-9].*//'`]
+ if test -z "$required_patch" ; then
+ [required_patch=0]
+ fi
+
+ # Calculate the available version number components
+ [available=$cython_version_stripped]
+ [available_major=`echo $available | sed 's/[^0-9].*//'`]
+ if test -z "$available_major" ; then
+ [available_major=0]
+ fi
+ [available=`echo $available | sed 's/[0-9]*[^0-9]//'`]
+ [available_minor=`echo $available | sed 's/[^0-9].*//'`]
+ if test -z "$available_minor" ; then
+ [available_minor=0]
+ fi
+ [available=`echo $available | sed 's/[0-9]*[^0-9]//'`]
+ [available_patch=`echo $available | sed 's/[^0-9].*//'`]
+ if test -z "$available_patch" ; then
+ [available_patch=0]
+ fi
+
+ if test $available_major -gt $required_major || \
+ ( test $available_major -eq $required_major && \
+ test $available_minor -gt $required_minor ) || \
+ ( test $available_major -eq $required_major && \
+ test $available_minor -eq $required_minor && \
+ test $available_patch -ge $required_patch ) ; then
+
+ AC_MSG_NOTICE([Cython executable is '$CYTHON'])
+ else
+ AC_MSG_WARN([Cython version >= $1 is required. You have $cython_version. You should look at http://www.cython.org])
+ CYTHON='echo "Error: Cython version >= $1 is required. You have '"$cython_version"'. You should look at http://www.cython.org" ; false'
+ fi
+ else
+ AC_MSG_WARN([cannot determine Cython version])
+ CYTHON=false
+ fi
+ fi
+ AC_SUBST([CYTHON_LIB])
+])
diff --git a/m4/ac_python_devel.m4 b/m4/ac_python_devel.m4
new file mode 100644
index 0000000..99ff7d0
--- /dev/null
+++ b/m4/ac_python_devel.m4
@@ -0,0 +1,265 @@
+# ===========================================================================
+# http://autoconf-archive.cryp.to/ac_python_devel.html
+# ===========================================================================
+#
+# SYNOPSIS
+#
+# AC_PYTHON_DEVEL([version])
+#
+# DESCRIPTION
+#
+# Note: Defines as a precious variable "PYTHON_VERSION". Don't override it
+# in your configure.ac.
+#
+# This macro checks for Python and tries to get the include path to
+# 'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LDFLAGS)
+# output variables. It also exports $(PYTHON_EXTRA_LIBS) and
+# $(PYTHON_EXTRA_LDFLAGS) for embedding Python in your code.
+#
+# You can search for some particular version of Python by passing a
+# parameter to this macro, for example ">= '2.3.1'", or "== '2.4'". Please
+# note that you *have* to pass also an operator along with the version to
+# match, and pay special attention to the single quotes surrounding the
+# version number. Don't use "PYTHON_VERSION" for this: that environment
+# variable is declared as precious and thus reserved for the end-user.
+#
+# This macro should work for all versions of Python >= 2.1.0. As an end
+# user, you can disable the check for the python version by setting the
+# PYTHON_NOVERSIONCHECK environment variable to something else than the
+# empty string.
+#
+# If you need to use this macro for an older Python version, please
+# contact the authors. We're always open for feedback.
+#
+# LAST MODIFICATION
+#
+# 2008-04-12
+#
+# COPYLEFT
+#
+# Copyright (c) 2008 Sebastian Huber <sebastian-huber@web.de>
+# Copyright (c) 2008 Alan W. Irwin <irwin@beluga.phys.uvic.ca>
+# Copyright (c) 2008 Rafael Laboissiere <rafael@laboissiere.net>
+# Copyright (c) 2008 Andrew Collier <colliera@ukzn.ac.za>
+# Copyright (c) 2008 Matteo Settenvini <matteo@member.fsf.org>
+# Copyright (c) 2008 Horst Knorr <hk_classes@knoda.org>
+#
+# 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 3 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, see <http://www.gnu.org/licenses/>.
+#
+# 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([AC_PYTHON_DEVEL],[
+ #
+ # Allow the use of a (user set) custom python version
+ #
+ AC_ARG_VAR([PYTHON_VERSION],[The installed Python
+ version to use, for example '2.3'. This string
+ will be appended to the Python interpreter
+ canonical name.])
+
+ AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]])
+ if test -z "$PYTHON"; then
+ AC_MSG_ERROR([Cannot find python$PYTHON_VERSION in your system path])
+ PYTHON_VERSION=""
+ fi
+
+ #
+ # Check for a version of Python >= 2.1.0
+ #
+ AC_MSG_CHECKING([for a version of Python >= '2.1.0'])
+ ac_supports_python_ver=`$PYTHON -c "import sys, string; \
+ ver = string.split(sys.version)[[0]]; \
+ print ver >= '2.1.0'"`
+ if test "$ac_supports_python_ver" != "True"; then
+ if test -z "$PYTHON_NOVERSIONCHECK"; then
+ AC_MSG_RESULT([no])
+ AC_MSG_FAILURE([
+This version of the AC@&t@_PYTHON_DEVEL macro
+doesn't work properly with versions of Python before
+2.1.0. You may need to re-run configure, setting the
+variables PYTHON_CPPFLAGS, PYTHON_LDFLAGS, PYTHON_SITE_PKG,
+PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand.
+Moreover, to disable this check, set PYTHON_NOVERSIONCHECK
+to something else than an empty string.
+])
+ else
+ AC_MSG_RESULT([skip at user request])
+ fi
+ else
+ AC_MSG_RESULT([yes])
+ fi
+
+ #
+ # if the macro parameter ``version'' is set, honour it
+ #
+ if test -n "$1"; then
+ AC_MSG_CHECKING([for a version of Python $1])
+ ac_supports_python_ver=`$PYTHON -c "import sys, string; \
+ ver = string.split(sys.version)[[0]]; \
+ print ver $1"`
+ if test "$ac_supports_python_ver" = "True"; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ AC_MSG_ERROR([this package requires Python $1.
+If you have it installed, but it isn't the default Python
+interpreter in your system path, please pass the PYTHON_VERSION
+variable to configure. See ``configure --help'' for reference.
+])
+ PYTHON_VERSION=""
+ fi
+ fi
+
+ #
+ # Check if you have distutils, else fail
+ #
+ AC_MSG_CHECKING([for the distutils Python package])
+ ac_distutils_result=`$PYTHON -c "import distutils" 2>&1`
+ if test -z "$ac_distutils_result"; then
+ AC_MSG_RESULT([yes])
+ else
+ AC_MSG_RESULT([no])
+ AC_MSG_ERROR([cannot import Python module "distutils".
+Please check your Python installation. The error was:
+$ac_distutils_result])
+ PYTHON_VERSION=""
+ fi
+
+ #
+ # Check for Python include path
+ #
+ AC_MSG_CHECKING([for Python include path])
+ if test -z "$PYTHON_CPPFLAGS"; 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_CPPFLAGS=$python_path
+ fi
+ AC_MSG_RESULT([$PYTHON_CPPFLAGS])
+ AC_SUBST([PYTHON_CPPFLAGS])
+
+ #
+ # Check for Python library path
+ #
+ AC_MSG_CHECKING([for Python library path])
+ if test -z "$PYTHON_LDFLAGS"; then
+ # (makes two attempts to ensure we've got a version number
+ # from the interpreter)
+ py_version=`$PYTHON -c "from distutils.sysconfig import *; \
+ from string import join; \
+ print join(get_config_vars('VERSION'))"`
+ if test "$py_version" = "[None]"; then
+ if test -n "$PYTHON_VERSION"; then
+ py_version=$PYTHON_VERSION
+ else
+ py_version=`$PYTHON -c "import sys; \
+ print sys.version[[:3]]"`
+ fi
+ fi
+
+ PYTHON_LDFLAGS=`$PYTHON -c "from distutils.sysconfig import *; \
+ from string import join; \
+ print '-L' + get_python_lib(0,1), \
+ '-lpython';"`$py_version
+ fi
+ AC_MSG_RESULT([$PYTHON_LDFLAGS])
+ AC_SUBST([PYTHON_LDFLAGS])
+
+ #
+ # Check for site packages
+ #
+ AC_MSG_CHECKING([for Python site-packages path])
+ if test -z "$PYTHON_SITE_PKG"; then
+ PYTHON_SITE_PKG=`$PYTHON -c "import distutils.sysconfig; \
+ print distutils.sysconfig.get_python_lib(0,0);"`
+ fi
+ AC_MSG_RESULT([$PYTHON_SITE_PKG])
+ AC_SUBST([PYTHON_SITE_PKG])
+
+ #
+ # libraries which must be linked in when embedding
+ #
+ AC_MSG_CHECKING(python extra libraries)
+ if test -z "$PYTHON_EXTRA_LIBS"; then
+ PYTHON_EXTRA_LIBS=`$PYTHON -c "import distutils.sysconfig; \
+ conf = distutils.sysconfig.get_config_var; \
+ print conf('LOCALMODLIBS'), conf('LIBS')"`
+ fi
+ AC_MSG_RESULT([$PYTHON_EXTRA_LIBS])
+ AC_SUBST(PYTHON_EXTRA_LIBS)
+
+ #
+ # linking flags needed when embedding
+ #
+ AC_MSG_CHECKING(python extra linking flags)
+ if test -z "$PYTHON_EXTRA_LDFLAGS"; then
+ PYTHON_EXTRA_LDFLAGS=`$PYTHON -c "import distutils.sysconfig; \
+ conf = distutils.sysconfig.get_config_var; \
+ print conf('LINKFORSHARED')"`
+ fi
+ AC_MSG_RESULT([$PYTHON_EXTRA_LDFLAGS])
+ AC_SUBST(PYTHON_EXTRA_LDFLAGS)
+
+ #
+ # final check to see if everything compiles alright
+ #
+ AC_MSG_CHECKING([consistency of all components of python development environment])
+ AC_LANG_PUSH([C])
+ # save current global flags
+ LIBS="$ac_save_LIBS $PYTHON_LDFLAGS"
+ CPPFLAGS="$ac_save_CPPFLAGS $PYTHON_CPPFLAGS"
+ AC_TRY_LINK([
+ #include <Python.h>
+ ],[
+ Py_Initialize();
+ ],[pythonexists=yes],[pythonexists=no])
+
+ AC_MSG_RESULT([$pythonexists])
+
+ if test ! "$pythonexists" = "yes"; then
+ AC_MSG_ERROR([
+ Could not link test program to Python. Maybe the main Python library has been
+ installed in some non-standard library path. If so, pass it to configure,
+ via the LDFLAGS environment variable.
+ Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib"
+ ============================================================================
+ ERROR!
+ You probably have to install the development version of the Python package
+ for your distribution. The exact name of this package varies among them.
+ ============================================================================
+ ])
+ PYTHON_VERSION=""
+ fi
+ AC_LANG_POP
+ # turn back to default flags
+ CPPFLAGS="$ac_save_CPPFLAGS"
+ LIBS="$ac_save_LIBS"
+
+ #
+ # all done!
+ #
+])
diff --git a/m4/as-compiler-flag.m4 b/m4/as-compiler-flag.m4
new file mode 100644
index 0000000..0f660cf
--- /dev/null
+++ b/m4/as-compiler-flag.m4
@@ -0,0 +1,62 @@
+dnl as-compiler-flag.m4 0.1.0
+
+dnl autostars m4 macro for detection of compiler flags
+
+dnl David Schleef <ds@schleef.org>
+
+dnl $Id: as-compiler-flag.m4,v 1.1 2005/12/15 23:35:19 ds Exp $
+
+dnl AS_COMPILER_FLAG(CFLAGS, ACTION-IF-ACCEPTED, [ACTION-IF-NOT-ACCEPTED])
+dnl Tries to compile with the given CFLAGS.
+dnl Runs ACTION-IF-ACCEPTED if the compiler can compile with the flags,
+dnl and ACTION-IF-NOT-ACCEPTED otherwise.
+
+AC_DEFUN([AS_COMPILER_FLAG],
+[
+ AC_MSG_CHECKING([to see if compiler understands $1])
+
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $1"
+
+ AC_TRY_COMPILE([ ], [], [flag_ok=yes], [flag_ok=no])
+ CFLAGS="$save_CFLAGS"
+
+ if test "X$flag_ok" = Xyes ; then
+ m4_ifvaln([$2],[$2])
+ true
+ else
+ m4_ifvaln([$3],[$3])
+ true
+ fi
+ AC_MSG_RESULT([$flag_ok])
+])
+
+dnl AS_COMPILER_FLAGS(VAR, FLAGS)
+dnl Tries to compile with the given CFLAGS.
+
+AC_DEFUN([AS_COMPILER_FLAGS],
+[
+ list=$2
+ flags_supported=""
+ flags_unsupported=""
+ AC_MSG_CHECKING([for supported compiler flags])
+ for each in $list
+ do
+ save_CFLAGS="$CFLAGS"
+ CFLAGS="$CFLAGS $each"
+ AC_TRY_COMPILE([ ], [], [flag_ok=yes], [flag_ok=no])
+ CFLAGS="$save_CFLAGS"
+
+ if test "X$flag_ok" = Xyes ; then
+ flags_supported="$flags_supported $each"
+ else
+ flags_unsupported="$flags_unsupported $each"
+ fi
+ done
+ AC_MSG_RESULT([$flags_supported])
+ if test "X$flags_unsupported" != X ; then
+ AC_MSG_WARN([unsupported compiler flags: $flags_unsupported])
+ fi
+ $1="$$1 $flags_supported"
+])
+
diff --git a/m4/cython_python.m4 b/m4/cython_python.m4
new file mode 100644
index 0000000..ba730d5
--- /dev/null
+++ b/m4/cython_python.m4
@@ -0,0 +1,7 @@
+AC_DEFUN([CYTHON_PYTHON],[
+ AC_REQUIRE([AC_PROG_CYTHON])
+ AC_REQUIRE([AC_PYTHON_DEVEL])
+ test "x$1" != "xno" || cython_shadow=" -noproxy"
+ AC_SUBST([CYTHON_PYTHON_OPT],[-python$cython_shadow])
+ AC_SUBST([CYTHON_PYTHON_CPPFLAGS],[$PYTHON_CPPFLAGS])
+])
diff --git a/plistutil/CMakeLists.txt b/plistutil/CMakeLists.txt
deleted file mode 100644
index 68382ee..0000000
--- a/plistutil/CMakeLists.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-
-SET(plistutil_SRC
- plistutil.c)
-
-ADD_EXECUTABLE(plistutil ${plistutil_SRC})
-TARGET_LINK_LIBRARIES(plistutil plist)
-SET_TARGET_PROPERTIES( plistutil PROPERTIES VERSION ${PLISTUTIL_VERSION} )
-
-INSTALL( TARGETS plistutil RUNTIME DESTINATION bin COMPONENT plistutil )
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
deleted file mode 100644
index c4f5483..0000000
--- a/src/CMakeLists.txt
+++ /dev/null
@@ -1,59 +0,0 @@
-
-INCLUDE_DIRECTORIES( ${LIBXML2_INCLUDE_DIR} ${CMAKE_SOURCE_DIR}/libcnary/include )
-
-
-SET(libplist_SRC
- plist.c
- hashtable.c
- bytearray.c
- ptrarray.c
- bplist.c
- base64.c
- xplist.c )
-
-SET(libplist++_SRC
- Node.cpp
- Boolean.cpp
- Integer.cpp
- Real.cpp
- String.cpp
- Date.cpp
- Data.cpp
- Key.cpp
- Uid.cpp
- Structure.cpp
- Array.cpp
- Dictionary.cpp
- )
-
-SET(libcnary_object_files
- ${CMAKE_BINARY_DIR}/libcnary/CMakeFiles/libcnary.dir/iterator.c${CMAKE_C_OUTPUT_EXTENSION}
- ${CMAKE_BINARY_DIR}/libcnary/CMakeFiles/libcnary.dir/list.c${CMAKE_C_OUTPUT_EXTENSION}
- ${CMAKE_BINARY_DIR}/libcnary/CMakeFiles/libcnary.dir/node.c${CMAKE_C_OUTPUT_EXTENSION}
- ${CMAKE_BINARY_DIR}/libcnary/CMakeFiles/libcnary.dir/node_iterator.c${CMAKE_C_OUTPUT_EXTENSION}
- ${CMAKE_BINARY_DIR}/libcnary/CMakeFiles/libcnary.dir/node_list.c${CMAKE_C_OUTPUT_EXTENSION}
-)
-
-SET_SOURCE_FILES_PROPERTIES(${libcnary_object_files} PROPERTIES EXTERNAL_OBJECT true GENERATED true)
-
-SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DPLIST_BYTE_ORDER=${PLIST_BYTE_ORDER}")
-ADD_LIBRARY( plist SHARED ${libplist_SRC} ${libcnary_object_files} )
-TARGET_LINK_LIBRARIES( plist ${LIBXML2_LIBRARIES} )
-SET_TARGET_PROPERTIES( plist PROPERTIES VERSION ${LIBPLIST_LIBVERSION} )
-SET_TARGET_PROPERTIES( plist PROPERTIES SOVERSION ${LIBPLIST_SOVERSION} )
-if(APPLE)
- SET_TARGET_PROPERTIES( plist PROPERTIES INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib")
-endif()
-
-ADD_LIBRARY( plist++ SHARED ${libplist++_SRC} )
-TARGET_LINK_LIBRARIES( plist++ plist )
-SET_TARGET_PROPERTIES( plist++ PROPERTIES VERSION ${LIBPLIST_LIBVERSION} )
-SET_TARGET_PROPERTIES( plist++ PROPERTIES SOVERSION ${LIBPLIST_SOVERSION} )
-if(APPLE)
- SET_TARGET_PROPERTIES( plist++ PROPERTIES INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib")
-endif()
-
-INSTALL(TARGETS plist plist++
- RUNTIME DESTINATION bin COMPONENT lib
- LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT dev
- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} COMPONENT dev)
diff --git a/src/Makefile.am b/src/Makefile.am
new file mode 100644
index 0000000..16cf655
--- /dev/null
+++ b/src/Makefile.am
@@ -0,0 +1,47 @@
+AM_CPPFLAGS = -I$(top_srcdir)/include -I$(top_srcdir) -I$(top_srcdir)/libcnary/include
+
+AM_CFLAGS = $(GLOBAL_CFLAGS) $(libxml2_CFLAGS)
+AM_LDFLAGS = $(libxml2_LIBS)
+
+lib_LTLIBRARIES = libplist.la libplist++.la
+libplist_la_LIBADD = $(top_srcdir)/libcnary/libcnary.la
+libplist_la_LDFLAGS = $(AM_LDFLAGS) -version-info $(LIBPLIST_SO_VERSION) -no-undefined
+libplist_la_SOURCES = base64.c base64.h \
+ bytearray.c bytearray.h \
+ hashtable.c hashtable.h \
+ ptrarray.c ptrarray.h \
+ xplist.c xplist.h \
+ bplist.c bplist.h \
+ plist.c plist.h \
+ common.h
+
+libplist___la_LIBADD = libplist.la
+libplist___la_LDFLAGS = $(AM_LDFLAGS) -version-info $(LIBPLIST_SO_VERSION) -no-undefined
+libplist___la_SOURCES = Node.cpp \
+ Structure.cpp \
+ Array.cpp \
+ Boolean.cpp \
+ Data.cpp \
+ Date.cpp \
+ Dictionary.cpp \
+ Integer.cpp \
+ Key.cpp \
+ Real.cpp \
+ String.cpp \
+ Uid.cpp \
+ $(top_srcdir)/include/plist/Node.h \
+ $(top_srcdir)/include/plist/Structure.h \
+ $(top_srcdir)/include/plist/Array.h \
+ $(top_srcdir)/include/plist/Boolean.h \
+ $(top_srcdir)/include/plist/Data.h \
+ $(top_srcdir)/include/plist/Date.h \
+ $(top_srcdir)/include/plist/Dictionary.h \
+ $(top_srcdir)/include/plist/Integer.h \
+ $(top_srcdir)/include/plist/Key.h \
+ $(top_srcdir)/include/plist/Real.h \
+ $(top_srcdir)/include/plist/String.h \
+ $(top_srcdir)/include/plist/Uid.h
+
+if WIN32
+libplist_la_LDFLAGS += -avoid-version
+endif
diff --git a/swig/CMakeLists.txt b/swig/CMakeLists.txt
deleted file mode 100644
index 379cb95..0000000
--- a/swig/CMakeLists.txt
+++ /dev/null
@@ -1,24 +0,0 @@
-INCLUDE( ${SWIG_USE_FILE} )
-
-SET(CMAKE_SWIG_FLAGS -Werror -Wall -modern)
-
-INCLUDE_DIRECTORIES( ${PYTHON_INCLUDE_PATH} )
-
-SET_SOURCE_FILES_PROPERTIES(plist.i PROPERTIES CPLUSPLUS ON)
-SWIG_ADD_MODULE( plist python plist.i )
-SWIG_LINK_LIBRARIES( plist plist plist++ ${PYTHON_LIBRARIES} )
-
-EXEC_PROGRAM("${PYTHON_EXECUTABLE}"
- ARGS "-c 'try:\n import distutils.sysconfig; print distutils.sysconfig.get_python_lib(plat_specific=1)\nexcept: pass\n'"
- OUTPUT_VARIABLE DISTUTILS_PYTHON_ILIBRARY_PATH
- )
-
-INSTALL( FILES ${CMAKE_CURRENT_BINARY_DIR}/_plist${CMAKE_SHARED_MODULE_SUFFIX}
- DESTINATION ${DISTUTILS_PYTHON_ILIBRARY_PATH}/plist/ )
-INSTALL( FILES ${CMAKE_CURRENT_BINARY_DIR}/plist.py
- DESTINATION ${DISTUTILS_PYTHON_ILIBRARY_PATH}/plist/ )
-INSTALL( FILES ${CMAKE_CURRENT_SOURCE_DIR}/__init__.py
- DESTINATION ${DISTUTILS_PYTHON_ILIBRARY_PATH}/plist/ )
-INSTALL( FILES ${CMAKE_CURRENT_SOURCE_DIR}/plist.i
- DESTINATION include/plist/swig COMPONENT dev)
-
diff --git a/swig/__init__.py b/swig/__init__.py
deleted file mode 100644
index f4c0dbb..0000000
--- a/swig/__init__.py
+++ /dev/null
@@ -1,3 +0,0 @@
-# -*- coding: utf-8 -*-
-
-from plist import *
diff --git a/swig/plist.i b/swig/plist.i
deleted file mode 100644
index 3ae3d02..0000000
--- a/swig/plist.i
+++ /dev/null
@@ -1,284 +0,0 @@
- /* swig.i */
- %module plist
- %feature("autodoc", "1");
- %{
- /* Includes the header in the wrapper code */
- #include <plist/plist++.h>
- #include <cstddef>
- %}
-
-%include "std_string.i"
-%include "stdint.i"
-
-%typemap(out) std::vector<char> {
- $result = SWIG_FromCharPtrAndSize((const char*)&($1[0]),(size_t)($1.size()));
-}
-
-%typemap(in) (const std::vector<char>&)
-{
- char* buffer = NULL;
- size_t length = 0;
- SWIG_AsCharPtrAndSize($input, &buffer, &length, NULL);
- $1 = new std::vector<char>(buffer, buffer + length - 1);
-}
-
-#if SWIGPYTHON
-//for datetime in python
-%{
-#include <ctime>
-#include <datetime.h>
-%}
-
-%typemap(typecheck,precedence=SWIG_TYPECHECK_POINTER) timeval {
- PyDateTime_IMPORT;
- $1 = PyDateTime_Check($input) ? 1 : 0;
-}
-
-%typemap(out) timeval {
- struct tm* t = gmtime ( &$1.tv_sec );
- if (t)
- {
- PyDateTime_IMPORT;
- $result = PyDateTime_FromDateAndTime(t->tm_year+1900, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec, $1.tv_usec);
- }
-}
-
-%typemap(in) (timeval t)
-{
- PyDateTime_IMPORT;
- if (!PyDateTime_Check($input)) {
- PyErr_SetString(PyExc_ValueError,"Expected a datetime");
- return NULL;
- }
- struct tm t = {
- PyDateTime_DATE_GET_SECOND($input),
- PyDateTime_DATE_GET_MINUTE($input),
- PyDateTime_DATE_GET_HOUR($input),
- PyDateTime_GET_DAY($input),
- PyDateTime_GET_MONTH($input)-1,
- PyDateTime_GET_YEAR($input)-1900,
- 0,0,0
- };
- timeval ret = {(int)mktime(&t), PyDateTime_DATE_GET_MICROSECOND($input)};
- $1 = ret;
-}
-#endif
-
-%apply SWIGTYPE *DYNAMIC { PList::Node* };
-%apply SWIGTYPE *DYNAMIC { PList::Structure* };
-
-%{
-static swig_type_info *Node_dynamic(void **ptr)
-{
- PList::Node* node = dynamic_cast<PList::Node *>((PList::Node *) *ptr);
- if (node)
- {
- plist_type type = node->GetType();
- switch(type)
- {
- case PLIST_DICT:
- *ptr = dynamic_cast<PList::Dictionary *>(node);
- return SWIGTYPE_p_PList__Dictionary;
- case PLIST_ARRAY:
- *ptr = dynamic_cast<PList::Array *>(node);
- return SWIGTYPE_p_PList__Array;
- case PLIST_BOOLEAN:
- *ptr = dynamic_cast<PList::Boolean *>(node);
- return SWIGTYPE_p_PList__Boolean;
- case PLIST_UINT:
- *ptr = dynamic_cast<PList::Integer *>(node);
- return SWIGTYPE_p_PList__Integer;
- case PLIST_REAL:
- *ptr = dynamic_cast<PList::Real *>(node);
- return SWIGTYPE_p_PList__Real;
- case PLIST_KEY:
- *ptr = dynamic_cast<PList::Key *>(node);
- return SWIGTYPE_p_PList__Key;
- case PLIST_UID:
- *ptr = dynamic_cast<PList::Uid *>(node);
- return SWIGTYPE_p_PList__Uid;
- case PLIST_STRING:
- *ptr = dynamic_cast<PList::String *>(node);
- return SWIGTYPE_p_PList__String;
- case PLIST_DATE:
- *ptr = dynamic_cast<PList::Date *>(node);
- return SWIGTYPE_p_PList__Date;
- case PLIST_DATA:
- *ptr = dynamic_cast<PList::Data *>(node);
- return SWIGTYPE_p_PList__Data;
- default:
- break;
- }
- }
- return 0;
-}
-%}
-
-// Register the above casting function
-DYNAMIC_CAST(SWIGTYPE_p_PList__Node, Node_dynamic);
-DYNAMIC_CAST(SWIGTYPE_p_PList__Structure, Node_dynamic);
-
-%include "std_map.i"
-// Instantiate templates used by example
-namespace std {
- %template(PairStringNodePtr) std::pair<string, PList::Node*>;
- %template(MapStringNodePtr) map<string,PList::Node*>;
-}
-
-#if SWIGPYTHON
-%rename(__assign__) *::operator=;
-%rename(__getitem__) *::operator[];
-%rename(__delitem__) *::Remove;
-%rename(__setitem__) PList::Dictionary::Insert;
-%rename(__deepcopy__) *::Clone;
-%rename(__len__) *::GetSize;
-%rename(get_type) *::GetType;
-%rename(set_value) *::SetValue;
-%rename(get_value) *::GetValue;
-%rename(to_xml) *::ToXml;
-%rename(to_bin) *::ToBin;
-%rename(from_xml) *::FromXml;
-%rename(from_bin) *::FromBin;
-%rename(append) *::Append;
-%rename(insert) PList::Array::Insert;
-#endif
-
-%ignore GetPlist();
-%ignore Boolean(plist_t);
-%ignore Integer(plist_t);
-%ignore Real(plist_t);
-%ignore Key(plist_t);
-%ignore Uid(plist_t);
-%ignore String(plist_t);
-%ignore Data(plist_t);
-%ignore Date(plist_t);
-%ignore Array(plist_t);
-%ignore Dictionary(plist_t);
-%ignore Begin();
-%ignore End();
-%ignore Find();
-
-%include <plist/Node.h>
-%include <plist/Boolean.h>
-%include <plist/Integer.h>
-%include <plist/Real.h>
-%include <plist/Key.h>
-%include <plist/Uid.h>
-%include <plist/String.h>
-%include <plist/Data.h>
-%include <plist/Date.h>
-%include <plist/Structure.h>
-%include <plist/Array.h>
-%include <plist/Dictionary.h>
-
-typedef enum {
- PLIST_BOOLEAN,
- PLIST_UINT,
- PLIST_REAL,
- PLIST_STRING,
- PLIST_ARRAY,
- PLIST_DICT,
- PLIST_DATE,
- PLIST_DATA,
- PLIST_KEY,
- PLIST_UID,
- PLIST_NONE
-} plist_type;
-
-#if SWIGPYTHON
-
-#if SWIG_VERSION <= 0x010336
-#define SwigPyIterator PySwigIterator
-#endif
-
-%extend PList::Dictionary {
-
- %newobject key_iterator(PyObject **PYTHON_SELF);
- swig::SwigPyIterator* key_iterator(PyObject **PYTHON_SELF) {
- return swig::make_output_key_iterator(self->Begin(), self->Begin(), self->End(), *PYTHON_SELF);
- }
-
- %newobject value_iterator(PyObject **PYTHON_SELF);
- swig::SwigPyIterator* value_iterator(PyObject **PYTHON_SELF) {
- return swig::make_output_value_iterator(self->Begin(), self->Begin(), self->End(), *PYTHON_SELF);
- }
-
- iterator iteritems()
- {
- return self->Begin();
- }
-
- bool has_key(const std::string& key) const {
- PList::Dictionary* dict = const_cast<PList::Dictionary*>(self);
- PList::Dictionary::iterator i = dict->Find(key);
- return i != dict->End();
- }
-
- PyObject* keys() {
- uint32_t size = self->GetSize();
- int pysize = (size <= (uint32_t) INT_MAX) ? (int) size : -1;
- if (pysize < 0) {
- SWIG_PYTHON_THREAD_BEGIN_BLOCK;
- PyErr_SetString(PyExc_OverflowError,
- "map size not valid in python");
- SWIG_PYTHON_THREAD_END_BLOCK;
- return NULL;
- }
- PyObject* keyList = PyList_New(pysize);
- PList::Dictionary::iterator i = self->Begin();
- for (int j = 0; j < pysize; ++i, ++j) {
- PyList_SET_ITEM(keyList, j, swig::from(i->first));
- }
- return keyList;
- }
-
- PyObject* values() {
- uint32_t size = self->GetSize();
- int pysize = (size <= (uint32_t) INT_MAX) ? (int) size : -1;
- if (pysize < 0) {
- SWIG_PYTHON_THREAD_BEGIN_BLOCK;
- PyErr_SetString(PyExc_OverflowError,
- "map size not valid in python");
- SWIG_PYTHON_THREAD_END_BLOCK;
- return NULL;
- }
- PyObject* valList = PyList_New(pysize);
- PList::Dictionary::iterator i = self->Begin();
- for (int j = 0; j < pysize; ++i, ++j) {
- PList::Node *second = i->second;
- PyObject *down = SWIG_NewPointerObj(SWIG_as_voidptr(second), SWIG_TypeDynamicCast(SWIGTYPE_p_PList__Node, SWIG_as_voidptrptr(&second)), 0 | 0 );
- PyList_SET_ITEM(valList, j, down);
- }
- return valList;
- }
-
- PyObject* items() {
- uint32_t size = self->GetSize();
- int pysize = (size <= (uint32_t) INT_MAX) ? (int) size : -1;
- if (pysize < 0) {
- SWIG_PYTHON_THREAD_BEGIN_BLOCK;
- PyErr_SetString(PyExc_OverflowError,
- "map size not valid in python");
- SWIG_PYTHON_THREAD_END_BLOCK;
- return NULL;
- }
- PyObject* itemList = PyList_New(pysize);
- PList::Dictionary::iterator i = self->Begin();
- for (int j = 0; j < pysize; ++i, ++j) {
- PyObject *item = PyTuple_New(2);
- PList::Node *second = i->second;
- PyObject *down = SWIG_NewPointerObj(SWIG_as_voidptr(second), SWIG_TypeDynamicCast(SWIGTYPE_p_PList__Node, SWIG_as_voidptrptr(&second)), 0 | 0 );
- PyTuple_SetItem(item, 0, swig::from(i->first));
- PyTuple_SetItem(item, 1, down);
- PyList_SET_ITEM(itemList, j, item);
- }
- return itemList;
- }
-
- %pythoncode {def __iter__(self): return self.key_iterator()}
- %pythoncode {def iterkeys(self): return self.key_iterator()}
- %pythoncode {def itervalues(self): return self.value_iterator()}
-}
-
-#undef SwigPyIterator
-#endif
diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt
deleted file mode 100644
index 1b3d2f7..0000000
--- a/test/CMakeLists.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-
-#build the test executable
-INCLUDE_DIRECTORIES( ${CMAKE_SOURCE_DIR}/libcnary/include )
-
-SET(plist_test_SRC
- plist_test.c)
-SET(plist_cmp_SRC
- plist_cmp.c)
-ADD_EXECUTABLE(plist_test ${plist_test_SRC})
-TARGET_LINK_LIBRARIES(plist_test plist)
-ADD_EXECUTABLE(plist_cmp ${plist_cmp_SRC})
-TARGET_LINK_LIBRARIES(plist_cmp plist)
-
-INCLUDE(CTest)
-
-SET(TEST_DATA_DIR ${CMAKE_CURRENT_SOURCE_DIR})
-ADD_TEST(Empty plist_test ${TEST_DATA_DIR}/data/1.plist)
-ADD_TEST(Small plist_test ${TEST_DATA_DIR}/data/2.plist)
-ADD_TEST(Medium plist_test ${TEST_DATA_DIR}/data/3.plist)
-ADD_TEST(Large plist_test ${TEST_DATA_DIR}/data/4.plist)
-ADD_TEST(Huge plist_test ${TEST_DATA_DIR}/data/5.plist)
-ADD_TEST(Big_Array plist_test ${TEST_DATA_DIR}/data/6.plist)
-
-ADD_TEST(EmptyCmp plist_cmp ${TEST_DATA_DIR}/data/1.plist ${TEST_DATA_DIR}/data/1.plist.out)
-ADD_TEST(SmallCmp plist_cmp ${TEST_DATA_DIR}/data/2.plist ${TEST_DATA_DIR}/data/2.plist.out)
-ADD_TEST(MediumCmp plist_cmp ${TEST_DATA_DIR}/data/3.plist ${TEST_DATA_DIR}/data/3.plist.out)
-ADD_TEST(LargeCmp plist_cmp ${TEST_DATA_DIR}/data/4.plist ${TEST_DATA_DIR}/data/4.plist.out)
-ADD_TEST(HugeCmp plist_cmp ${TEST_DATA_DIR}/data/5.plist ${TEST_DATA_DIR}/data/5.plist.out)
-ADD_TEST(Big_ArrayCmp plist_cmp ${TEST_DATA_DIR}/data/6.plist ${TEST_DATA_DIR}/data/6.plist.out)
diff --git a/test/Makefile.am b/test/Makefile.am
new file mode 100644
index 0000000..837c1dd
--- /dev/null
+++ b/test/Makefile.am
@@ -0,0 +1,25 @@
+AM_CFLAGS = $(GLOBAL_CFLAGS) -I$(top_srcdir)/include -I$(top_srcdir)/libcnary/include
+AM_LDFLAGS =
+
+noinst_PROGRAMS = plist_cmp plist_test
+
+plist_cmp_SOURCES = plist_cmp.c
+plist_cmp_LDADD = ../src/libplist.la
+
+plist_test_SOURCES = plist_test.c
+plist_test_LDADD = ../src/libplist.la
+
+TESTS = \
+ empty.test \
+ small.test \
+ medium.test \
+ large.test \
+ huge.test \
+ bigarray.test \
+ emptycmp.test \
+ smallcmp.test \
+ mediumcmp.test \
+ largecmp.test \
+ hugecmp.test \
+ bigarraycmp.test
+
diff --git a/test/bigarray.test b/test/bigarray.test
new file mode 100755
index 0000000..fa27e69
--- /dev/null
+++ b/test/bigarray.test
@@ -0,0 +1,12 @@
+## -*- sh -*-
+
+# Common definitions
+if test -z "$srcdir"; then
+ srcdir=echo "$0" | sed 's,[^/]*$,,'
+ test "$srcdir" = "$0" && srcdir=.
+ test -z "$srcdir" && srcdir=.
+ test "${VERBOSE+set}" != set && VERBOSE=1
+fi
+
+$srcdir/plist_test $srcdir/data/6.plist
+
diff --git a/test/bigarraycmp.test b/test/bigarraycmp.test
new file mode 100755
index 0000000..f95266e
--- /dev/null
+++ b/test/bigarraycmp.test
@@ -0,0 +1,12 @@
+## -*- sh -*-
+
+# Common definitions
+if test -z "$srcdir"; then
+ srcdir=echo "$0" | sed 's,[^/]*$,,'
+ test "$srcdir" = "$0" && srcdir=.
+ test -z "$srcdir" && srcdir=.
+ test "${VERBOSE+set}" != set && VERBOSE=1
+fi
+
+$srcdir/plist_cmp $srcdir/data/6.plist $srcdir/data/6.plist.out
+
diff --git a/test/empty.test b/test/empty.test
new file mode 100755
index 0000000..2a036a3
--- /dev/null
+++ b/test/empty.test
@@ -0,0 +1,12 @@
+## -*- sh -*-
+
+# Common definitions
+if test -z "$srcdir"; then
+ srcdir=echo "$0" | sed 's,[^/]*$,,'
+ test "$srcdir" = "$0" && srcdir=.
+ test -z "$srcdir" && srcdir=.
+ test "${VERBOSE+set}" != set && VERBOSE=1
+fi
+
+$srcdir/plist_test $srcdir/data/1.plist
+
diff --git a/test/emptycmp.test b/test/emptycmp.test
new file mode 100755
index 0000000..9fcd685
--- /dev/null
+++ b/test/emptycmp.test
@@ -0,0 +1,12 @@
+## -*- sh -*-
+
+# Common definitions
+if test -z "$srcdir"; then
+ srcdir=echo "$0" | sed 's,[^/]*$,,'
+ test "$srcdir" = "$0" && srcdir=.
+ test -z "$srcdir" && srcdir=.
+ test "${VERBOSE+set}" != set && VERBOSE=1
+fi
+
+$srcdir/plist_cmp $srcdir/data/1.plist $srcdir/data/1.plist.out
+
diff --git a/test/huge.test b/test/huge.test
new file mode 100755
index 0000000..a079d38
--- /dev/null
+++ b/test/huge.test
@@ -0,0 +1,12 @@
+## -*- sh -*-
+
+# Common definitions
+if test -z "$srcdir"; then
+ srcdir=echo "$0" | sed 's,[^/]*$,,'
+ test "$srcdir" = "$0" && srcdir=.
+ test -z "$srcdir" && srcdir=.
+ test "${VERBOSE+set}" != set && VERBOSE=1
+fi
+
+$srcdir/plist_test $srcdir/data/5.plist
+
diff --git a/test/hugecmp.test b/test/hugecmp.test
new file mode 100755
index 0000000..618966d
--- /dev/null
+++ b/test/hugecmp.test
@@ -0,0 +1,12 @@
+## -*- sh -*-
+
+# Common definitions
+if test -z "$srcdir"; then
+ srcdir=echo "$0" | sed 's,[^/]*$,,'
+ test "$srcdir" = "$0" && srcdir=.
+ test -z "$srcdir" && srcdir=.
+ test "${VERBOSE+set}" != set && VERBOSE=1
+fi
+
+$srcdir/plist_cmp $srcdir/data/5.plist $srcdir/data/5.plist.out
+
diff --git a/test/large.test b/test/large.test
new file mode 100755
index 0000000..8034019
--- /dev/null
+++ b/test/large.test
@@ -0,0 +1,12 @@
+## -*- sh -*-
+
+# Common definitions
+if test -z "$srcdir"; then
+ srcdir=echo "$0" | sed 's,[^/]*$,,'
+ test "$srcdir" = "$0" && srcdir=.
+ test -z "$srcdir" && srcdir=.
+ test "${VERBOSE+set}" != set && VERBOSE=1
+fi
+
+$srcdir/plist_test $srcdir/data/4.plist
+
diff --git a/test/largecmp.test b/test/largecmp.test
new file mode 100755
index 0000000..87a7e64
--- /dev/null
+++ b/test/largecmp.test
@@ -0,0 +1,12 @@
+## -*- sh -*-
+
+# Common definitions
+if test -z "$srcdir"; then
+ srcdir=echo "$0" | sed 's,[^/]*$,,'
+ test "$srcdir" = "$0" && srcdir=.
+ test -z "$srcdir" && srcdir=.
+ test "${VERBOSE+set}" != set && VERBOSE=1
+fi
+
+$srcdir/plist_cmp $srcdir/data/4.plist $srcdir/data/4.plist.out
+
diff --git a/test/medium.test b/test/medium.test
new file mode 100755
index 0000000..231bb80
--- /dev/null
+++ b/test/medium.test
@@ -0,0 +1,12 @@
+## -*- sh -*-
+
+# Common definitions
+if test -z "$srcdir"; then
+ srcdir=echo "$0" | sed 's,[^/]*$,,'
+ test "$srcdir" = "$0" && srcdir=.
+ test -z "$srcdir" && srcdir=.
+ test "${VERBOSE+set}" != set && VERBOSE=1
+fi
+
+$srcdir/plist_test $srcdir/data/3.plist
+
diff --git a/test/mediumcmp.test b/test/mediumcmp.test
new file mode 100755
index 0000000..33802ef
--- /dev/null
+++ b/test/mediumcmp.test
@@ -0,0 +1,12 @@
+## -*- sh -*-
+
+# Common definitions
+if test -z "$srcdir"; then
+ srcdir=echo "$0" | sed 's,[^/]*$,,'
+ test "$srcdir" = "$0" && srcdir=.
+ test -z "$srcdir" && srcdir=.
+ test "${VERBOSE+set}" != set && VERBOSE=1
+fi
+
+$srcdir/plist_cmp $srcdir/data/3.plist $srcdir/data/3.plist.out
+
diff --git a/test/small.test b/test/small.test
new file mode 100755
index 0000000..544f374
--- /dev/null
+++ b/test/small.test
@@ -0,0 +1,12 @@
+## -*- sh -*-
+
+# Common definitions
+if test -z "$srcdir"; then
+ srcdir=echo "$0" | sed 's,[^/]*$,,'
+ test "$srcdir" = "$0" && srcdir=.
+ test -z "$srcdir" && srcdir=.
+ test "${VERBOSE+set}" != set && VERBOSE=1
+fi
+
+$srcdir/plist_test $srcdir/data/2.plist
+
diff --git a/test/smallcmp.test b/test/smallcmp.test
new file mode 100755
index 0000000..fb10787
--- /dev/null
+++ b/test/smallcmp.test
@@ -0,0 +1,12 @@
+## -*- sh -*-
+
+# Common definitions
+if test -z "$srcdir"; then
+ srcdir=echo "$0" | sed 's,[^/]*$,,'
+ test "$srcdir" = "$0" && srcdir=.
+ test -z "$srcdir" && srcdir=.
+ test "${VERBOSE+set}" != set && VERBOSE=1
+fi
+
+$srcdir/plist_cmp $srcdir/data/2.plist $srcdir/data/2.plist.out
+
diff --git a/tools/Makefile.am b/tools/Makefile.am
new file mode 100644
index 0000000..a50f819
--- /dev/null
+++ b/tools/Makefile.am
@@ -0,0 +1,7 @@
+AM_CFLAGS = $(GLOBAL_CFLAGS) -I$(top_srcdir)/include
+AM_LDFLAGS =
+
+bin_PROGRAMS = plistutil
+
+plistutil_SOURCES = plistutil.c plistutil.h
+plistutil_LDADD = ../src/libplist.la
diff --git a/plistutil/plistutil.c b/tools/plistutil.c
index 3e09bb2..3e09bb2 100644
--- a/plistutil/plistutil.c
+++ b/tools/plistutil.c
diff --git a/plistutil/plistutil.h b/tools/plistutil.h
index 40421a3..40421a3 100644
--- a/plistutil/plistutil.h
+++ b/tools/plistutil.h