diff options
| author | 2009-10-19 20:29:39 +0200 | |
|---|---|---|
| committer | 2009-10-22 07:52:53 -0700 | |
| commit | 544215cd776c1db58ce8e8a3db6457b5d977e421 (patch) | |
| tree | 806a0dd662396f717eb428b349e4aa6e59cde47a | |
| parent | 4740e30d178c8a588f522586a817039d6be8da3b (diff) | |
| download | libimobiledevice-544215cd776c1db58ce8e8a3db6457b5d977e421.tar.gz libimobiledevice-544215cd776c1db58ce8e8a3db6457b5d977e421.tar.bz2 | |
Update swig header and autotools to compile with latest libplist API.
[#77 state:resolved]
Signed-off-by: Matt Colyer <matt@colyer.name>
| -rw-r--r-- | configure.ac | 7 | ||||
| -rw-r--r-- | m4/ax_swig_enable_cxx.m4 | 51 | ||||
| -rw-r--r-- | swig/Makefile.am | 10 | ||||
| -rw-r--r-- | swig/iphone.i | 63 | 
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);  	}  }; | 
