From 3b9f8fed60b8549196b021563ddf0066de6a8519 Mon Sep 17 00:00:00 2001 From: Jonathan Beck Date: Mon, 19 Oct 2009 20:29:39 +0200 Subject: [PATCH] Update swig header and autotools to compile with latest libplist API. --- configure.ac | 7 ++--- m4/ax_swig_enable_cxx.m4 | 51 +++++++++++++++++++++++++++++++++++++ swig/Makefile.am | 10 +++--- swig/iphone.i | 63 +++++++++++++++++++++++++++++++++++---------- 4 files changed, 108 insertions(+), 23 deletions(-) create mode 100644 m4/ax_swig_enable_cxx.m4 diff --git a/configure.ac b/configure.ac index 29d3154..d3b5105 100644 --- a/configure.ac +++ b/configure.ac @@ -9,16 +9,15 @@ AC_CONFIG_SRCDIR([src/]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_MACRO_DIR([m4]) -AC_PROG_LIBTOOL - AM_PATH_PYTHON(2.3) AC_PROG_SWIG(1.3.21) +AX_SWIG_ENABLE_CXX SWIG_PYTHON - # Checks for programs. AC_PROG_CC AM_PROG_CC_C_O +AC_PROG_LIBTOOL # Checks for libraries. PKG_CHECK_MODULES(libusbmuxd, libusbmuxd >= 0.1.4) @@ -26,7 +25,7 @@ PKG_CHECK_MODULES(libglib2, glib-2.0 >= 2.14.1) PKG_CHECK_MODULES(libgthread2, gthread-2.0 >= 2.14.1) PKG_CHECK_MODULES(libgnutls, gnutls >= 1.6.3 ) PKG_CHECK_MODULES(libtasn1, libtasn1 >= 1.1) -PKG_CHECK_MODULES(libplist, libplist >= 0.13) +PKG_CHECK_MODULES(libplist, libplist >= 0.15) AC_CHECK_LIB(gcrypt, gcry_control, [AC_SUBST(libgcrypt_LIBS,[-lgcrypt])], ["libgcrypt is required to build libiphone"]) # Checks for header files. diff --git a/m4/ax_swig_enable_cxx.m4 b/m4/ax_swig_enable_cxx.m4 new file mode 100644 index 0000000..722caeb --- /dev/null +++ b/m4/ax_swig_enable_cxx.m4 @@ -0,0 +1,51 @@ +# =========================================================================== +# http://www.nongnu.org/autoconf-archive/ax_swig_enable_cxx.html +# =========================================================================== +# +# SYNOPSIS +# +# AX_SWIG_ENABLE_CXX +# +# DESCRIPTION +# +# Enable SWIG C++ support. This affects all invocations of $(SWIG). +# +# LICENSE +# +# Copyright (c) 2008 Sebastian Huber +# Copyright (c) 2008 Alan W. Irwin +# Copyright (c) 2008 Rafael Laboissiere +# Copyright (c) 2008 Andrew Collier +# +# This program is free software; you can redistribute it and/or modify it +# under the terms of the GNU General Public License as published by the +# Free Software Foundation; either version 2 of the License, or (at your +# option) any later version. +# +# This program is distributed in the hope that it will be useful, but +# WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General +# Public License for more details. +# +# You should have received a copy of the GNU General Public License along +# with this program. If not, see . +# +# 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 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. + +AU_ALIAS([SWIG_ENABLE_CXX], [AX_SWIG_ENABLE_CXX]) +AC_DEFUN([AX_SWIG_ENABLE_CXX],[ + AC_REQUIRE([AC_PROG_SWIG]) + AC_REQUIRE([AC_PROG_CXX]) + SWIG="$SWIG -c++" +]) diff --git a/swig/Makefile.am b/swig/Makefile.am index d65b984..f3f9714 100644 --- a/swig/Makefile.am +++ b/swig/Makefile.am @@ -1,6 +1,6 @@ -INCLUDES = -I$(top_srcdir)/include $(libplist_CFLAGS) -I$(oldincludedir) +INCLUDES = -I$(top_srcdir)/include $(libplist_CFLAGS) $(SWIG_PYTHON_CPPFLAGS) -I$(oldincludedir) -BUILT_SOURCES = iphone_wrap.c +BUILT_SOURCES = iphone_wrap.cxx SWIG_SOURCES = iphone.i CLEANFILES = \ @@ -8,7 +8,7 @@ CLEANFILES = \ *.pyo \ _iPhone.so \ iPhone.py \ - iphone_wrap.c + iphone_wrap.cxx EXTRA_DIST = \ __init__.py \ @@ -21,11 +21,11 @@ iPhonedir = $(pyexecdir)/libiphone iPhone_PYTHON = __init__.py nodist_iPhone_PYTHON = iPhone.py iPhone_LTLIBRARIES = _iPhone.la -nodist__iPhone_la_SOURCES = iphone_wrap.c $(SWIG_SOURCES) +nodist__iPhone_la_SOURCES = iphone_wrap.cxx $(SWIG_SOURCES) _iPhone_la_CFLAGS = $(PYTHON_CPPFLAGS) -I$(top_srcdir)/src _iPhone_la_LDFLAGS = -module -avoid-version $(PYTHON_LDFLAGS) _iPhone_la_LIBADD = $(top_builddir)/src/libiphone.la -iphone_wrap.c : $(SWIG_SOURCES) +iphone_wrap.cxx : $(SWIG_SOURCES) $(SWIG) $(SWIG_PYTHON_OPT) $(INCLUDES) -I$(top_srcdir)/src -o $@ $< diff --git a/swig/iphone.i b/swig/iphone.i index ba6345a..6604c63 100644 --- a/swig/iphone.i +++ b/swig/iphone.i @@ -7,6 +7,7 @@ #include #include #include + #include #include "../src/utils.h" typedef struct { iphone_device_t dev; @@ -27,6 +28,7 @@ void my_delete_iPhone(iPhone* dev); Lockdownd* my_new_Lockdownd(iPhone* phone); void my_delete_Lockdownd(Lockdownd* lckd); MobileSync* my_new_MobileSync(Lockdownd* lckd); +PList::Node* new_node_from_plist(plist_t node); %} /* Parse the header file to generate wrappers */ @@ -98,6 +100,41 @@ MobileSync* my_new_MobileSync(Lockdownd* lckd) { return client; } +PList::Node* new_node_from_plist(plist_t node) +{ + PList::Node* ret = NULL; + plist_type subtype = plist_get_node_type(node); + switch(subtype) + { + case PLIST_DICT: + ret = new PList::Dictionary(node); + break; + case PLIST_ARRAY: + ret = new PList::Array(node); + break; + case PLIST_BOOLEAN: + ret = new PList::Boolean(node); + break; + case PLIST_UINT: + ret = new PList::Integer(node); + break; + case PLIST_REAL: + ret = new PList::Real(node); + break; + case PLIST_STRING: + ret = new PList::String(node); + break; + case PLIST_DATE: + ret = new PList::Date(node); + break; + case PLIST_DATA: + ret = new PList::Data(node); + break; + default: + break; + } + return ret; +} %} @@ -154,15 +191,14 @@ MobileSync* my_new_MobileSync(Lockdownd* lckd) { my_delete_Lockdownd($self); } - void send(PListNode* node) { - lockdownd_send($self->client, node->node); + void send(PList::Node* node) { + lockdownd_send($self->client, node->GetPlist()); } - PListNode* receive() { - PListNode* node = (PListNode*)malloc(sizeof(PListNode)); - node->node = NULL; - lockdownd_recv($self->client, &(node->node)); - return node; + PList::Node* receive() { + plist_t node = NULL; + lockdownd_recv($self->client, &node); + return new_node_from_plist(node); } MobileSync* get_mobilesync_client() { @@ -180,15 +216,14 @@ MobileSync* my_new_MobileSync(Lockdownd* lckd) { free($self); } - void send(PListNode* node) { - mobilesync_send($self->client, node->node); + void send(PList::Node* node) { + mobilesync_send($self->client, node->GetPlist()); } - PListNode* receive() { - PListNode* node = (PListNode*)malloc(sizeof(PListNode)); - node->node = NULL; - mobilesync_recv($self->client, &(node->node)); - return node; + PList::Node* receive() { + plist_t node = NULL; + mobilesync_recv($self->client, &node); + return new_node_from_plist(node); } }; -- 1.6.3.3