summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--configure.ac7
-rw-r--r--m4/ax_swig_enable_cxx.m451
-rw-r--r--swig/Makefile.am10
-rw-r--r--swig/iphone.i63
4 files changed, 108 insertions, 23 deletions
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 <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>
+#
+# 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 <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 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 <libiphone/lockdown.h>
#include <libiphone/mobilesync.h>
#include <plist/plist.h>
+ #include <plist/plist++.h>
#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);
}
};