Commit a798afc8 authored by Nikias Bassen's avatar Nikias Bassen

change build system to autotools

parent 3b764749
*.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
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)
AUTOMAKE_OPTIONS = foreign
ACLOCAL_AMFLAGS = -I m4
SUBDIRS = libcnary src include tools $(CYTHON_SUB) test
#!/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
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 )
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)
# - 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
# - 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)
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)
# -*- 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.
"
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)
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
......@@ -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.
......
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)
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
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)
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
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
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}
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}
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])
])
# ===========================================================================
# 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!
#
])
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"
])
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])
])
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 )
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)
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
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)
# -*- coding: utf-8 -*-
from plist import *
/* 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
#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)
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
## -*- 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
## -*- 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
## -*- 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
## -*- 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
## -*- 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
## -*- 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
## -*- 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
## -*- 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
## -*- 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
## -*- 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
## -*- 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
## -*- 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
AM_CFLAGS = $(GLOBAL_CFLAGS) -I$(top_srcdir)/include
AM_LDFLAGS =
bin_PROGRAMS = plistutil
plistutil_SOURCES = plistutil.c plistutil.h
plistutil_LDADD = ../src/libplist.la
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment