From e7b31175f84daf5c900f5229b32d76fc7ed44746 Mon Sep 17 00:00:00 2001
From: Britney Fransen <brfransen@gmail.com>
Date: Sat, 6 Aug 2011 00:23:17 -0500
Subject: mediatomb: Bump to latest.

---
 abs/extra/community/mediatomb/PKGBUILD             |  88 ++--
 abs/extra/community/mediatomb/gcc46.patch          |  10 +
 .../mediatomb/mediatomb-0.11.0+glibc-2.10.patch    |  23 -
 .../community/mediatomb/mediatomb-gcc-4.3.patch    |  24 -
 abs/extra/community/mediatomb/mediatomb.conf       |  26 +-
 abs/extra/community/mediatomb/mediatomb.install    |   9 +
 abs/extra/community/mediatomb/mediatomb.rc         |  94 ++--
 abs/extra/community/mediatomb/tonewjs.patch        | 564 +++++++++++++++++++++
 8 files changed, 690 insertions(+), 148 deletions(-)
 create mode 100644 abs/extra/community/mediatomb/gcc46.patch
 delete mode 100644 abs/extra/community/mediatomb/mediatomb-0.11.0+glibc-2.10.patch
 delete mode 100644 abs/extra/community/mediatomb/mediatomb-gcc-4.3.patch
 create mode 100644 abs/extra/community/mediatomb/mediatomb.install
 mode change 100755 => 100644 abs/extra/community/mediatomb/mediatomb.rc
 create mode 100644 abs/extra/community/mediatomb/tonewjs.patch

diff --git a/abs/extra/community/mediatomb/PKGBUILD b/abs/extra/community/mediatomb/PKGBUILD
index aaf4d58..606314a 100644
--- a/abs/extra/community/mediatomb/PKGBUILD
+++ b/abs/extra/community/mediatomb/PKGBUILD
@@ -1,57 +1,49 @@
-# Orginal Contributor: William Rea <sillywilly@gmail.com>
+# $Id$
+# Contributor: William Rea <sillywilly@gmail.com>
 # Contributor: Nikhil Bysani <nikron@gmail.com>
-# Contributor: Mika Hynnä <igheax@gmail.com>
-
-# 20090525: 
-#	+ makedepends=('gcc' 'patch' 'make')
-#	+ mediatomb-0.11.0+glibc-2.10.patch
+# Contributor: Mika Hynnä <igheax@gmail.com>
+# Maintainer: Jonathan Conder <jonno.conder@gmail.com>
 
 pkgname=mediatomb
-pkgver=0.11.0
-pkgrel=10
-pkgdesc="A UPnP mediaserver"
+pkgver=0.12.1
+pkgrel=5
+pkgdesc="Free UPnP/DLNA media server"
 arch=('i686' 'x86_64')
-url="http://mediatomb.sourceforge.net"
+url="http://mediatomb.cc/"
 license=('GPL')
-depends=('libexif' 'taglib' 'sqlite3' 'expat' 'spidermonkey' 'curl' 'ffmpeg')
-makedepends=('gcc' 'patch' 'make')
-backup=(etc/conf.d/mediatomb)
-source=(
-	http://mesh.dl.sourceforge.net/sourceforge/mediatomb/mediatomb-$pkgver.tar.gz \
-	mediatomb.rc \
-	mediatomb.conf \
-	http://kapsi.fi/~ighea/arch/mediatomb-gcc-4.3.patch
-	mediatomb-0.11.0+glibc-2.10.patch
-)
-
-build()
-{
-	cd $startdir/src/mediatomb-$pkgver || return 1
-	patch -Np1 < ../mediatomb-gcc-4.3.patch || return 1
-	patch -Np0 < ../mediatomb-0.11.0+glibc-2.10.patch || return 1
-	
-	sed -e s/"ffmpeg\/avformat.h"/"libavformat\/avformat.h"/g -i configure
-	sed -e s/"ffmpeg\/avformat.h"/"libavformat\/avformat.h"/g -i configure.ac
-	sed -e s/"ffmpeg\/avformat.h"/"libavformat\/avformat.h"/g -i src/metadata/ffmpeg_handler.cc
-	
-
-	./configure --prefix=/usr --enable-mysql=no --enable-libmagic=yes \
-	 --enable-libjs=yes --enable-ffmpeg --with-ffmpeg-h=/usr/include/ || return 1
-
-	make || return 1
-	make DESTDIR=$startdir/pkg install || return 1
+depends=('curl' 'ffmpegthumbnailer' 'js' 'libexif' 'libmp4v2' 'sqlite3' 'taglib')
+backup=('etc/conf.d/mediatomb')
+install=mediatomb.install
+source=("http://downloads.sourceforge.net/$pkgname/$pkgname-$pkgver.tar.gz"
+        'mediatomb.rc'
+        'mediatomb.conf'
+        'gcc46.patch'
+	'tonewjs.patch')
+md5sums=('e927dd5dc52d3cfcebd8ca1af6f0d3c2'
+         'aa1191ec508d8bd4b3b9a5fe48efc079'
+         'bec297e4178332a26b42bbde873b94cd'
+         '0ae34c0d73b76e3d215887834c3c08cf'
+	 'd9e02a9956eecf5ff645bddf6dac0331')
+
+build() {
+  cd "$srcdir/$pkgname-$pkgver"
+  patch -Np1 -i $srcdir/gcc46.patch
+  patch -Np1 -i $srcdir/tonewjs.patch
+
+  ./configure --prefix=/usr \
+              --disable-mysql \
+              --enable-libmagic \
+              --enable-libjs \
+              --enable-ffmpeg
+  make
+}
 
-	# rc-script
-	mkdir -p $startdir/pkg/etc/rc.d/ || return 1
-	install -m0755 ../mediatomb.rc $startdir/pkg/etc/rc.d/mediatomb || return 1
+package() {
+  cd "$srcdir/$pkgname-$pkgver"
 
-	# config-file
-	mkdir -p $startdir/pkg/etc/conf.d/ || return 1
-	install -m0644 ../mediatomb.conf $startdir/pkg/etc/conf.d/mediatomb || return 1
+  make DESTDIR="$pkgdir/" install
 
+  install -D -m0755 "$srcdir/mediatomb.rc" "$pkgdir/etc/rc.d/mediatomb"
+  install -D -m0755 "$srcdir/mediatomb.conf" "$pkgdir/etc/conf.d/mediatomb"
+  install -d "$pkgdir/var/lib/mediatomb"
 }
-md5sums=('661f08933830d920de21436fe122fb15'
-         'a7ff197d5760b20b04675ba67bfd9e86'
-         'a4cbd08c32c93f116363a29bef60e21d'
-         'eda28d01e035b3237566da5b1aad7712'
-         '3b895eabee88a0697b4fd0c30af6cab2')
diff --git a/abs/extra/community/mediatomb/gcc46.patch b/abs/extra/community/mediatomb/gcc46.patch
new file mode 100644
index 0000000..0f4fe49
--- /dev/null
+++ b/abs/extra/community/mediatomb/gcc46.patch
@@ -0,0 +1,10 @@
+--- a/src/zmm/object.h
++++ b/src/zmm/object.h
+@@ -33,6 +33,7 @@
+ #define __ZMM_OBJECT_H__
+ 
+ #include <new> // for size_t
++#include <cstddef>
+ #include "atomic.h"
+ 
+ namespace zmm
diff --git a/abs/extra/community/mediatomb/mediatomb-0.11.0+glibc-2.10.patch b/abs/extra/community/mediatomb/mediatomb-0.11.0+glibc-2.10.patch
deleted file mode 100644
index b1436c1..0000000
--- a/abs/extra/community/mediatomb/mediatomb-0.11.0+glibc-2.10.patch
+++ /dev/null
@@ -1,23 +0,0 @@
---- src/tools.cc	(revisione 2018)
-+++ src/tools.cc	(copia locale)
-@@ -303,8 +303,8 @@
-     Ref<StringBuffer> buf(new StringBuffer(len / 2));
-     for (int i = 0; i < len; i += 2)
-     {
--        char *chi = strchr(HEX_CHARS, ptr[i]);
--        char *clo = strchr(HEX_CHARS, ptr[i + 1]);
-+        const char *chi = strchr(HEX_CHARS, ptr[i]);
-+        const char *clo = strchr(HEX_CHARS, ptr[i + 1]);
-         int hi, lo;
-         
-         if (chi)
-@@ -397,7 +397,7 @@
-             char clo = data[i++];
-             int hi, lo;
- 
--            char *pos;
-+            const char *pos;
- 
-             pos = strchr(hex, chi);
-             if (!pos)
-
diff --git a/abs/extra/community/mediatomb/mediatomb-gcc-4.3.patch b/abs/extra/community/mediatomb/mediatomb-gcc-4.3.patch
deleted file mode 100644
index 9440bec..0000000
--- a/abs/extra/community/mediatomb/mediatomb-gcc-4.3.patch
+++ /dev/null
@@ -1,24 +0,0 @@
-# GCC-4.3 compatibility patch by Mika Hynnä (ighea) <igheaxATgmailDOTcom>
-#
---- mediatomb-0.11.0/src/url.cc	2008-03-02 00:48:36.000000000 +0200
-+++ mediatomb-0.11.0.new/src/url.cc	2008-04-14 00:53:21.000000000 +0300
-@@ -75,7 +75,7 @@
- 
-     if (only_header)
-     {
--        curl_easy_setopt(curl_handle, CURLOPT_NOBODY);
-+        curl_easy_setopt(curl_handle, CURLOPT_NOBODY,0);
-         curl_easy_setopt(curl_handle, CURLOPT_HEADERFUNCTION, URL::dl);
-         curl_easy_setopt(curl_handle, CURLOPT_HEADERDATA, 
-                          (void *)buffer.getPtr());
---- mediatomb-0.11.0/src/metadata/id3_handler.cc	2008-03-02 00:48:36.000000000 +0200
-+++ mediatomb-0.11.0.new/src/metadata/id3_handler.cc	2008-04-14 01:22:36.000000000 +0300
-@@ -36,6 +36,8 @@
- 
- #ifdef HAVE_ID3
- 
-+#include <string.h>
-+
- #ifdef HAVE_CONFIG_H
-     #undef HAVE_CONFIG_H // else utils.h from the id3 library tries to import "config.h"
- 
diff --git a/abs/extra/community/mediatomb/mediatomb.conf b/abs/extra/community/mediatomb/mediatomb.conf
index 339bd9e..798018d 100644
--- a/abs/extra/community/mediatomb/mediatomb.conf
+++ b/abs/extra/community/mediatomb/mediatomb.conf
@@ -1,5 +1,23 @@
-# User to run the mediatomb as:
-USER=""
-# Extra parameters to pass to the daemon:
-PARAMS=""
+#
+# Parameters to be passed to mediatomb
+#
 
+# Port to listen on
+MT_PORT='50500'
+
+# User and group to run as
+MT_USER='nobody'
+MT_GROUP='nobody'
+
+# Location of the PID file
+MT_PIDFILE='/var/run/mediatomb.pid'
+
+# Location of the log file
+MT_LOGFILE='/var/log/mediatomb.log'
+
+# Location of the config file/database
+MT_HOME='/var/lib/mediatomb'
+MT_CFGDIR='.mediatomb'
+
+# User defined command line options
+MT_OPTIONS=''
diff --git a/abs/extra/community/mediatomb/mediatomb.install b/abs/extra/community/mediatomb/mediatomb.install
new file mode 100644
index 0000000..56f6ef9
--- /dev/null
+++ b/abs/extra/community/mediatomb/mediatomb.install
@@ -0,0 +1,9 @@
+post_install() {
+  echo 'Warning: the MediaTomb web interface exposes your filesystem to the network'
+  echo 'For maximum security, set <ui enabled="no"> in your MediaTomb config file'
+}
+
+post_upgrade() {
+  # TODO: disable next update
+  post_install
+}
diff --git a/abs/extra/community/mediatomb/mediatomb.rc b/abs/extra/community/mediatomb/mediatomb.rc
old mode 100755
new mode 100644
index b3333cc..7b93012
--- a/abs/extra/community/mediatomb/mediatomb.rc
+++ b/abs/extra/community/mediatomb/mediatomb.rc
@@ -1,58 +1,54 @@
 #!/bin/bash
 
-DESC="MediaTomb UPnP A/V Media Server"
+. /etc/rc.conf
+. /etc/rc.d/functions
+. /etc/conf.d/mediatomb
 
-USER=""
+MT_OPTIONS="-p $MT_PORT -u $MT_USER -g $MT_GROUP -P $MT_PIDFILE \
+            -l $MT_LOGFILE -m $MT_HOME -f $MT_CFGDIR $MT_OPTIONS"
 
-if [ "$(whoami)" != "root" ];then
- echo "You must be root to start/restart/stop services."
- exit 1
-fi
+case "$1" in
+    start)
+        stat_busy "Starting Mediatomb UPnP Media Server"
 
-. /etc/rc.conf
-. /etc/rc.d/functions
+        chown "$MT_USER:$MT_GROUP" "$MT_HOME"
 
-[ -r "/etc/conf.d/mediatomb" ] && . /etc/conf.d/mediatomb
+        if ! pidof -o %PPID /usr/bin/mediatomb &> /dev/null; then
+            rm -f "$MT_PIDFILE"
+        fi
 
-PID=`pidof -o %PPID /usr/bin/mediatomb`
+        PID="$(cat "$MT_PIDFILE" 2> /dev/null)"
 
-case "$1" in
-  start)
-    stat_busy "Starting $DESC"
-    if [ -z "$PID" ]; then
-	if [ -n "$USER" ]; then
-		echo -n "Starting as user: $USER"
-		su - $USER -c "/usr/bin/mediatomb -d $PARAMS &> /dev/null" || stat_fail
-	else
-		/usr/bin/mediatomb -d $PARAMS &> /dev/null || stat_fail
-	fi
-	PID=`pidof -o %PPID /usr/bin/mediatomb`
-	if [ -z "$PID" ]; then exit 1;fi
-	echo $PID > /var/run/mediatomb.pid
-	add_daemon mediatomb
-        stat_done
-    else    
-		echo -n "Already running!"
-		stat_fail
-    fi
-    ;;
-  stop)
-    stat_busy "Stopping $DESC"
-    [ ! -z "$PID" ] && kill $PID &> /dev/null
-    if [ $? -gt 0 ]; then
-      echo -n "Not started!"
-      stat_fail
-    else
-      rm /var/run/mediatomb.pid
-      rm_daemon mediatomb
-      stat_done
-    fi
-    ;;
-  restart)
-    $0 stop
-    sleep 1
-    $0 start
-    ;;
-  *)
-    echo "usage: $0 {start|stop|restart}"
+        if [ -z "$PID" ] && /usr/bin/mediatomb -d $MT_OPTIONS; then
+            add_daemon mediatomb
+            stat_done
+        else
+            stat_fail
+        fi
+        ;;
+
+    stop)
+        stat_busy "Stopping Mediatomb UPnP Media Server"
+
+        PID="$(cat "$MT_PIDFILE" 2> /dev/null)"
+
+        if [ -n "$PID" ] && kill "$PID" &> /dev/null; then
+            rm -f "$MT_PIDFILE"
+            rm_daemon mediatomb
+            stat_done
+        else
+            stat_fail
+        fi
+        ;;
+
+    restart)
+        "$0" stop
+        sleep 1
+        "$0" start
+        ;;
+
+    *)
+        echo "usage: $0 {start|stop|restart}"
+        ;;
 esac
+exit 0
diff --git a/abs/extra/community/mediatomb/tonewjs.patch b/abs/extra/community/mediatomb/tonewjs.patch
new file mode 100644
index 0000000..1159685
--- /dev/null
+++ b/abs/extra/community/mediatomb/tonewjs.patch
@@ -0,0 +1,564 @@
+diff -up mediatomb-0.12.1-back/build/Makefile.in.tonewjs mediatomb-0.12.1-back/build/Makefile.in
+--- mediatomb-0.12.1-back/build/Makefile.in.tonewjs	2010-04-08 00:40:15.000000000 +0200
++++ mediatomb-0.12.1-back/build/Makefile.in	2011-04-19 17:17:01.343509944 +0200
+@@ -257,7 +257,7 @@ CURL_LIBS = @CURL_LIBS@
+ CXX = @CXX@
+ CXXCPP = @CXXCPP@
+ CXXDEPMODE = @CXXDEPMODE@
+-CXXFLAGS = @CXXFLAGS@
++CXXFLAGS = -fpermissive @CXXFLAGS@
+ CYGPATH_W = @CYGPATH_W@
+ DB_AUTOCREATE_OPTION_ENABLED = @DB_AUTOCREATE_OPTION_ENABLED@
+ DB_AUTOCREATE_OPTION_REQUESTED = @DB_AUTOCREATE_OPTION_REQUESTED@
+diff -up mediatomb-0.12.1-back/src/scripting/import_script.cc.tonewjs mediatomb-0.12.1-back/src/scripting/import_script.cc
+--- mediatomb-0.12.1-back/src/scripting/import_script.cc.tonewjs	2011-04-18 13:10:48.000000000 +0200
++++ mediatomb-0.12.1-back/src/scripting/import_script.cc	2011-04-18 13:29:36.000000000 +0200
+@@ -53,8 +53,8 @@ ImportScript::ImportScript(Ref<Runtime> 
+     try 
+     {
+         load(scriptPath);
+-        root = JS_NewScriptObject(cx, script);
+-        JS_AddNamedRoot(cx, &root, "ImportScript");
++        root = JS_NewObject(cx, NULL, script, NULL);
++        JS_AddNamedObjectRoot(cx, &root, "ImportScript");
+     }
+     catch (Exception ex)
+     {
+@@ -117,7 +117,7 @@ ImportScript::~ImportScript()
+ #endif
+     
+     if (root)
+-        JS_RemoveRoot(cx, &root);
++        JS_RemoveObjectRoot(cx, &root);
+ 
+ #ifdef JS_THREADSAFE
+     JS_EndRequest(cx);
+diff -up mediatomb-0.12.1-back/src/scripting/js_functions.cc.tonewjs mediatomb-0.12.1-back/src/scripting/js_functions.cc
+--- mediatomb-0.12.1-back/src/scripting/js_functions.cc.tonewjs	2011-04-18 13:29:55.000000000 +0200
++++ mediatomb-0.12.1-back/src/scripting/js_functions.cc	2011-04-19 16:48:04.009229611 +0200
+@@ -49,7 +49,7 @@ using namespace zmm;
+ extern "C" {
+ 
+ JSBool 
+-js_print(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
++js_print(JSContext *cx, uintN argc, jsval *argv)
+ {
+     uintN i;
+     JSString *str;
+@@ -60,19 +60,21 @@ js_print(JSContext *cx, JSObject *obj, u
+         if (!str)
+             return JS_TRUE;
+         argv[i] = STRING_TO_JSVAL(str);
+-        log_js("%s\n", JS_GetStringBytes(str));
++        char * log_str = JS_EncodeString(cx, str);
++        log_js("%s\n", log_str);
++        JS_free(cx, log_str);
+     }
+     return JS_TRUE;
+ }
+ 
+ JSBool
+-js_copyObject(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
++js_copyObject(JSContext *cx, uintN argc, jsval *argv)
+ {
+     jsval arg;
+     JSObject *js_cds_obj;
+     JSObject *js_cds_clone_obj;
+ 
+-    Script *self = (Script *)JS_GetPrivate(cx, obj);
++    Script *self = (Script *)JS_GetPrivate(cx, JS_THIS_OBJECT(cx, argv));
+ 
+     try
+     {
+@@ -91,7 +93,7 @@ js_copyObject(JSContext *cx, JSObject *o
+ 
+         self->cdsObject2jsObject(cds_obj, js_cds_clone_obj);
+ 
+-        *rval = OBJECT_TO_JSVAL(js_cds_clone_obj);
++        JS_SET_RVAL(cx, argv, OBJECT_TO_JSVAL(js_cds_clone_obj));
+ 
+         return JS_TRUE;
+ 
+@@ -110,7 +112,7 @@ js_copyObject(JSContext *cx, JSObject *o
+ }
+ 
+ JSBool
+-js_addCdsObject(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
++js_addCdsObject(JSContext *cx, uintN argc, jsval *argv)
+ {
+     try
+     {
+@@ -126,7 +128,7 @@ js_addCdsObject(JSContext *cx, JSObject 
+         Ref<StringConverter> p2i;
+         Ref<StringConverter> i2i;
+ 
+-        Script *self = (Script *)JS_GetPrivate(cx, obj);
++        Script *self = (Script *)JS_GetPrivate(cx, JS_THIS_OBJECT(cx, argv));
+ 
+         if (self == NULL)
+         {
+@@ -156,20 +158,20 @@ js_addCdsObject(JSContext *cx, JSObject 
+         if (!str)
+             path = _("/");
+         else
+-            path = JS_GetStringBytes(str);
++            path = JS_EncodeString(cx, str);
+ 
+         JSString *cont = JS_ValueToString(cx, argv[2]);
+         if (cont)
+         {
+-            containerclass = JS_GetStringBytes(cont);
++            containerclass = JS_EncodeString(cx, cont);
+             if (!string_ok(containerclass) || containerclass == "undefined")
+                 containerclass = nil;
+         }
+ 
+         if (self->whoami() == S_PLAYLIST)
+-            js_orig_obj = self->getObjectProperty(obj, _("playlist"));
++            js_orig_obj = self->getObjectProperty(JS_THIS_OBJECT(cx, argv), _("playlist"));
+         else if (self->whoami() == S_IMPORT)
+-            js_orig_obj = self->getObjectProperty(obj, _("orig"));
++            js_orig_obj = self->getObjectProperty(JS_THIS_OBJECT(cx, argv), _("orig"));
+         
+         if (js_orig_obj == NULL)
+         {
+@@ -285,8 +287,7 @@ js_addCdsObject(JSContext *cx, JSObject 
+         JSString *str2 = JS_NewStringCopyN(cx, tmp.c_str(), tmp.length());
+         if (!str2)
+             return JS_TRUE;
+-        *rval = STRING_TO_JSVAL(str2);
+-
++        JS_SET_RVAL(cx, argv, STRING_TO_JSVAL(str2)); 
+         return JS_TRUE;
+     }
+     catch (ServerShutdownException se)
+@@ -302,7 +303,7 @@ js_addCdsObject(JSContext *cx, JSObject 
+     return JS_TRUE;
+ }
+ 
+-static JSBool convert_charset_generic(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval, charset_convert_t chr)
++static JSBool convert_charset_generic(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, charset_convert_t chr)
+ {
+     try
+     {
+@@ -321,7 +322,7 @@ static JSBool convert_charset_generic(JS
+         {
+             str = JS_ValueToString(cx, argv[0]);
+             if (str)
+-                result = JS_GetStringBytes(str);
++                result = JS_EncodeString(cx, str);
+         }
+ 
+         if (result != nil)
+@@ -330,7 +331,7 @@ static JSBool convert_charset_generic(JS
+             JSString *str2 = JS_NewStringCopyN(cx, result.c_str(), result.length());
+             if (!str2)
+                 return JS_TRUE;
+-            *rval = STRING_TO_JSVAL(str2);
++            JS_SET_RVAL(cx, argv, STRING_TO_JSVAL(str2));
+         }
+     }
+     catch (ServerShutdownException se)
+@@ -347,24 +348,23 @@ static JSBool convert_charset_generic(JS
+ }
+ 
+ 
+-JSBool js_f2i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
++JSBool js_f2i(JSContext *cx, uintN argc, jsval *argv)
+ {
+-     return convert_charset_generic(cx, obj, argc, argv, rval, F2I);
++     return convert_charset_generic(cx, JS_THIS_OBJECT(cx, argv), argc, argv, F2I);
+ }
+ 
+-JSBool js_m2i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
++JSBool js_m2i(JSContext *cx, uintN argc, jsval *argv)
+ {
+-     return convert_charset_generic(cx, obj, argc, argv, rval, M2I);
+-}
++     return convert_charset_generic(cx, JS_THIS_OBJECT(cx, argv), argc, argv, M2I); }
+ 
+-JSBool js_p2i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
++JSBool js_p2i(JSContext *cx, uintN argc, jsval *argv)
+ {
+-     return convert_charset_generic(cx, obj, argc, argv, rval, P2I);
++     return convert_charset_generic(cx, JS_THIS_OBJECT(cx, argv), argc, argv, P2I);
+ }
+ 
+-JSBool js_j2i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
++JSBool js_j2i(JSContext *cx, uintN argc, jsval *argv)
+ {
+-     return convert_charset_generic(cx, obj, argc, argv, rval, J2I);
++     return convert_charset_generic(cx, JS_THIS_OBJECT(cx, argv), argc, argv, J2I);
+ }
+ 
+ } // extern "C"
+diff -up mediatomb-0.12.1-back/src/scripting/js_functions.h.tonewjs mediatomb-0.12.1-back/src/scripting/js_functions.h
+--- mediatomb-0.12.1-back/src/scripting/js_functions.h.tonewjs	2010-03-25 15:58:05.000000000 +0100
++++ mediatomb-0.12.1-back/src/scripting/js_functions.h	2011-04-18 13:59:29.000000000 +0200
+@@ -40,18 +40,18 @@
+ extern "C" {
+ 
+ /// \brief Log output.
+-JSBool js_print(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
++JSBool js_print(JSContext *cx, uintN argc, jsval *argv);
+ 
+ /// \brief Adds an object to the database.
+-JSBool js_addCdsObject(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
++JSBool js_addCdsObject(JSContext *cx, uintN argc, jsval *argv);
+ 
+ /// \brief Makes a copy of an CDS object.
+-JSBool js_copyObject(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
++JSBool js_copyObject(JSContext *cx, uintN argc, jsval *argv);
+ 
+-JSBool js_f2i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
+-JSBool js_m2i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
+-JSBool js_p2i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
+-JSBool js_j2i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
++JSBool js_f2i(JSContext *cx, uintN argc, jsval *argv);
++JSBool js_m2i(JSContext *cx, uintN argc, jsval *argv);
++JSBool js_p2i(JSContext *cx, uintN argc, jsval *argv);
++JSBool js_j2i(JSContext *cx, uintN argc, jsval *argv);
+ 
+ } // extern "C"
+ 
+diff -up mediatomb-0.12.1-back/src/scripting/playlist_parser_script.cc.tonewjs mediatomb-0.12.1-back/src/scripting/playlist_parser_script.cc
+--- mediatomb-0.12.1-back/src/scripting/playlist_parser_script.cc.tonewjs	2011-04-18 13:34:14.000000000 +0200
++++ mediatomb-0.12.1-back/src/scripting/playlist_parser_script.cc	2011-04-18 13:51:59.000000000 +0200
+@@ -46,9 +46,9 @@ using namespace zmm;
+ extern "C" {
+ 
+ static JSBool
+-js_readln(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
++js_readln(JSContext *cx, uintN argc, jsval *argv)
+ {
+-    PlaylistParserScript *self = (PlaylistParserScript *)JS_GetPrivate(cx, obj);
++    PlaylistParserScript *self = (PlaylistParserScript *)JS_GetPrivate(cx, JS_THIS_OBJECT(cx, argv));
+ 
+     String line;
+     
+@@ -69,7 +69,7 @@ js_readln(JSContext *cx, JSObject *obj, 
+ 
+     JSString *jsline = JS_NewStringCopyZ(cx, line.c_str());
+ 
+-    *rval = STRING_TO_JSVAL(jsline);
++    JS_SET_RVAL(cx, argv, STRING_TO_JSVAL(jsline));
+   
+     return JS_TRUE;
+ }
+@@ -93,8 +93,8 @@ PlaylistParserScript::PlaylistParserScri
+ 
+         String scriptPath = ConfigManager::getInstance()->getOption(CFG_IMPORT_SCRIPTING_PLAYLIST_SCRIPT); 
+         load(scriptPath);
+-        root = JS_NewScriptObject(cx, script);
+-        JS_AddNamedRoot(cx, &root, "PlaylistScript");
++        root = JS_NewObject(cx, NULL, script, NULL);
++        JS_AddNamedObjectRoot(cx, &root, "PlaylistScript");
+     }
+     catch (Exception ex)
+     {
+@@ -245,7 +245,7 @@ PlaylistParserScript::~PlaylistParserScr
+ #endif
+ 
+     if (root)
+-        JS_RemoveRoot(cx, &root);
++        JS_RemoveObjectRoot(cx, &root);
+ 
+ #ifdef JS_THREADSAFE
+     JS_EndRequest(cx);
+diff -up mediatomb-0.12.1-back/src/scripting/script.cc.tonewjs mediatomb-0.12.1-back/src/scripting/script.cc
+--- mediatomb-0.12.1-back/src/scripting/script.cc.tonewjs	2011-04-18 13:53:07.000000000 +0200
++++ mediatomb-0.12.1-back/src/scripting/script.cc	2011-04-19 18:26:34.460338804 +0200
+@@ -87,7 +87,7 @@ String Script::getProperty(JSObject *obj
+     str = JS_ValueToString(cx, val);
+     if (! str)
+         return nil;
+-    return JS_GetStringBytes(str);
++    return JS_EncodeString(cx, str);
+ }
+ 
+ int Script::getBoolProperty(JSObject *obj, String name)
+@@ -427,14 +427,14 @@ static JSFunctionSpec js_global_function
+         try
+         {
+             common_script = _load(common_scr_path);
+-            common_root = JS_NewScriptObject(cx, common_script);
+-            JS_AddNamedRoot(cx, &common_root, "common-script");
++            common_root = JS_NewObject(cx, NULL, common_script, NULL);
++            JS_AddNamedObjectRoot(cx, &common_root, "common-script");
+             _execute(common_script);
+         }
+         catch (Exception e)
+         {
+             if (common_root)
+-                JS_RemoveRoot(cx, &common_root);
++                JS_RemoveObjectRoot(cx, &common_root);
+ 
+             log_js("Unable to load %s: %s\n", common_scr_path.c_str(), 
+                     e.getMessage().c_str());
+@@ -460,7 +460,7 @@ Script::~Script()
+     JS_BeginRequest(cx);
+ #endif
+     if (common_root)
+-        JS_RemoveRoot(cx, &common_root);
++        JS_RemoveObjectRoot(cx, &common_root);
+ 
+ /*
+  * scripts are unrooted and will be cleaned up by GC
+@@ -504,11 +504,11 @@ void Script::initGlobalObject()
+     static JSClass global_class =
+     {
+         "global",                                   /* name */
+-        JSCLASS_HAS_PRIVATE,                        /* flags */
++        JSCLASS_HAS_PRIVATE | JSCLASS_GLOBAL_FLAGS,/* flags */
+         JS_PropertyStub,                            /* add property */
+         JS_PropertyStub,                            /* del property */
+         JS_PropertyStub,                            /* get property */
+-        JS_PropertyStub,                            /* set property */
++        JS_StrictPropertyStub,                      /* set property */
+         JS_EnumerateStandardClasses,                /* enumerate */
+         JS_ResolveStub,                             /* resolve */
+         JS_ConvertStub,                             /* convert */
+@@ -517,7 +517,7 @@ void Script::initGlobalObject()
+     };
+ 
+     /* create the global object here */
+-    glob = JS_NewObject(cx, &global_class, NULL, NULL);
++    glob = JS_NewCompartmentAndGlobalObject(cx, &global_class, NULL);
+     if (! glob)
+         throw _Exception(_("Scripting: could not initialize glboal class"));
+ 
+@@ -539,12 +539,12 @@ void Script::defineFunctions(JSFunctionS
+         throw _Exception(_("Scripting: JS_DefineFunctions failed"));
+ }
+ 
+-JSScript *Script::_load(zmm::String scriptPath)
++JSObject *Script::_load(zmm::String scriptPath)
+ {
+     if (glob == NULL)
+         initGlobalObject();
+ 
+-    JSScript *scr;
++    JSObject *scr;
+ 
+     String scriptText = read_text_file(scriptPath);
+ 
+@@ -571,14 +571,11 @@ JSScript *Script::_load(zmm::String scri
+ 
+ void Script::load(zmm::String scriptPath)
+ {
+-    if (script)
+-        JS_DestroyScript(cx, script);
+-
+     script = _load((scriptPath));
+ }
+ 
+ 
+-void Script::_execute(JSScript *scr)
++void Script::_execute(JSObject *scr)
+ {
+     jsval ret_val;
+ 
+@@ -662,7 +659,7 @@ Ref<CdsObject> Script::jsObject2cdsObjec
+     JSObject *js_meta = getObjectProperty(js, _("meta"));
+     if (js_meta)
+     {
+-        JS_AddNamedRoot(cx, &js_meta, "meta");
++        JS_AddNamedObjectRoot(cx, &js_meta, "meta");
+         /// \todo: only metadata enumerated in MT_KEYS is taken
+         for (int i = 0; i < M_MAX; i++)
+         {
+@@ -687,7 +684,7 @@ Ref<CdsObject> Script::jsObject2cdsObjec
+                 }
+             }
+         }
+-        JS_RemoveRoot(cx, &js_meta);
++        JS_RemoveObjectRoot(cx, &js_meta);
+     }
+     
+     // stuff that has not been exported to js
+diff -up mediatomb-0.12.1-back/src/scripting/script.h.tonewjs mediatomb-0.12.1-back/src/scripting/script.h
+--- mediatomb-0.12.1-back/src/scripting/script.h.tonewjs	2011-04-18 12:56:14.000000000 +0200
++++ mediatomb-0.12.1-back/src/scripting/script.h	2011-04-18 12:56:51.000000000 +0200
+@@ -66,8 +66,8 @@ public:
+     JSRuntime *rt;
+     JSContext *cx;
+     JSObject  *glob;
+-    JSScript *script;
+-    JSScript *common_script;
++    JSObject  *script;
++    JSObject  *common_script;
+     
+ public:
+     Script(zmm::Ref<Runtime> runtime);
+@@ -115,8 +115,8 @@ private:
+     JSObject *common_root;
+ 
+     void initGlobalObject();
+-    JSScript *_load(zmm::String scriptPath);
+-    void _execute(JSScript *scr);
++    JSObject *_load(zmm::String scriptPath);
++    void _execute(JSObject *scr);
+     zmm::Ref<StringConverter> _p2i;
+     zmm::Ref<StringConverter> _j2i;
+     zmm::Ref<StringConverter> _f2i;
+--- mediatomb-0.12.1/configure.tonewjs	2011-07-04 20:20:00.290227110 +1200
++++ mediatomb-0.12.1/configure	2011-07-04 20:20:28.186894644 +1200
+@@ -23784,14 +23784,14 @@ if test "x$ac_cv_lib_smjs_JS_NewObject"
+ 
+ else
+ 
+-                            LDFLAGS="-L$JS_SEARCH_LIBS $LDFLAGS_SAVE -lmozjs $ADD_PTHREAD_CFLAGS"
+-                            { $as_echo "$as_me:$LINENO: checking for JS_NewObject in -lmozjs" >&5
+-$as_echo_n "checking for JS_NewObject in -lmozjs... " >&6; }
+-if test "${ac_cv_lib_mozjs_JS_NewObject+set}" = set; then
++                            LDFLAGS="-L$JS_SEARCH_LIBS $LDFLAGS_SAVE -lmozjs185 $ADD_PTHREAD_CFLAGS"
++                            { $as_echo "$as_me:$LINENO: checking for JS_NewObject in -lmozjs185" >&5
++$as_echo_n "checking for JS_NewObject in -lmozjs185... " >&6; }
++if test "${ac_cv_lib_mozjs185_JS_NewObject+set}" = set; then
+   $as_echo_n "(cached) " >&6
+ else
+   ac_check_lib_save_LIBS=$LIBS
+-LIBS="-lmozjs  $LIBS"
++LIBS="-lmozjs185  $LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+@@ -23835,12 +23835,12 @@ $as_echo "$ac_try_echo") >&5
+ 	 test "$cross_compiling" = yes ||
+ 	 $as_test_x conftest$ac_exeext
+        }; then
+-  ac_cv_lib_mozjs_JS_NewObject=yes
++  ac_cv_lib_mozjs185_JS_NewObject=yes
+ else
+   $as_echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+-	ac_cv_lib_mozjs_JS_NewObject=no
++	ac_cv_lib_mozjs185_JS_NewObject=no
+ fi
+ 
+ rm -rf conftest.dSYM
+@@ -23848,12 +23848,12 @@ rm -f core conftest.err conftest.$ac_obj
+       conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_mozjs_JS_NewObject" >&5
+-$as_echo "$ac_cv_lib_mozjs_JS_NewObject" >&6; }
+-if test "x$ac_cv_lib_mozjs_JS_NewObject" = x""yes; then
++{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_mozjs185_JS_NewObject" >&5
++$as_echo "$ac_cv_lib_mozjs185_JS_NewObject" >&6; }
++if test "x$ac_cv_lib_mozjs185_JS_NewObject" = x""yes; then
+ 
+-                                    JS_LIBS="-L$JS_SEARCH_LIBS -lmozjs"
+-                                    MOZLIB=mozjs
++                                    JS_LIBS="-L$JS_SEARCH_LIBS -lmozjs185"
++                                    MOZLIB=mozjs185
+ 
+ else
+ 
+@@ -24020,13 +24020,13 @@ if test "x$ac_cv_lib_smjs_JS_NewObject"
+ else
+ 
+                     unset ac_cv_lib_smjs_JS_NewObject
+-                    { $as_echo "$as_me:$LINENO: checking for JS_NewObject in -lmozjs" >&5
+-$as_echo_n "checking for JS_NewObject in -lmozjs... " >&6; }
+-if test "${ac_cv_lib_mozjs_JS_NewObject+set}" = set; then
++                    { $as_echo "$as_me:$LINENO: checking for JS_NewObject in -lmozjs185" >&5
++$as_echo_n "checking for JS_NewObject in -lmozjs185... " >&6; }
++if test "${ac_cv_lib_mozjs185_JS_NewObject+set}" = set; then
+   $as_echo_n "(cached) " >&6
+ else
+   ac_check_lib_save_LIBS=$LIBS
+-LIBS="-lmozjs  $LIBS"
++LIBS="-lmozjs185  $LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+@@ -24070,12 +24070,12 @@ $as_echo "$ac_try_echo") >&5
+ 	 test "$cross_compiling" = yes ||
+ 	 $as_test_x conftest$ac_exeext
+        }; then
+-  ac_cv_lib_mozjs_JS_NewObject=yes
++  ac_cv_lib_mozjs185_JS_NewObject=yes
+ else
+   $as_echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+-	ac_cv_lib_mozjs_JS_NewObject=no
++	ac_cv_lib_mozjs185_JS_NewObject=no
+ fi
+ 
+ rm -rf conftest.dSYM
+@@ -24083,12 +24083,12 @@ rm -f core conftest.err conftest.$ac_obj
+       conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_mozjs_JS_NewObject" >&5
+-$as_echo "$ac_cv_lib_mozjs_JS_NewObject" >&6; }
+-if test "x$ac_cv_lib_mozjs_JS_NewObject" = x""yes; then
++{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_mozjs185_JS_NewObject" >&5
++$as_echo "$ac_cv_lib_mozjs185_JS_NewObject" >&6; }
++if test "x$ac_cv_lib_mozjs185_JS_NewObject" = x""yes; then
+ 
+-                            MOZLIB=mozjs
+-                            JS_LIBS="-lmozjs"
++                            MOZLIB=mozjs185
++                            JS_LIBS="-lmozjs185"
+ 
+ else
+ 
+@@ -24239,15 +24239,15 @@ if test "x$ac_cv_lib_smjs_JS_NewObject"
+ 
+ else
+ 
+-                                            LDFLAGS="-L$SEARCH_DIR_LIBS $LDFLAGS_SAVE -lmozjs"
+-                                            unset ac_cv_lib_mozjs_JS_NewObject
+-                                            { $as_echo "$as_me:$LINENO: checking for JS_NewObject in -lmozjs" >&5
+-$as_echo_n "checking for JS_NewObject in -lmozjs... " >&6; }
+-if test "${ac_cv_lib_mozjs_JS_NewObject+set}" = set; then
++                                            LDFLAGS="-L$SEARCH_DIR_LIBS $LDFLAGS_SAVE -lmozjs185"
++                                            unset ac_cv_lib_mozjs185_JS_NewObject
++                                            { $as_echo "$as_me:$LINENO: checking for JS_NewObject in -lmozjs185" >&5
++$as_echo_n "checking for JS_NewObject in -lmozjs185... " >&6; }
++if test "${ac_cv_lib_mozjs185_JS_NewObject+set}" = set; then
+   $as_echo_n "(cached) " >&6
+ else
+   ac_check_lib_save_LIBS=$LIBS
+-LIBS="-lmozjs  $LIBS"
++LIBS="-lmozjs185  $LIBS"
+ cat >conftest.$ac_ext <<_ACEOF
+ /* confdefs.h.  */
+ _ACEOF
+@@ -24291,12 +24291,12 @@ $as_echo "$ac_try_echo") >&5
+ 	 test "$cross_compiling" = yes ||
+ 	 $as_test_x conftest$ac_exeext
+        }; then
+-  ac_cv_lib_mozjs_JS_NewObject=yes
++  ac_cv_lib_mozjs185_JS_NewObject=yes
+ else
+   $as_echo "$as_me: failed program was:" >&5
+ sed 's/^/| /' conftest.$ac_ext >&5
+ 
+-	ac_cv_lib_mozjs_JS_NewObject=no
++	ac_cv_lib_mozjs185_JS_NewObject=no
+ fi
+ 
+ rm -rf conftest.dSYM
+@@ -24304,12 +24304,12 @@ rm -f core conftest.err conftest.$ac_obj
+       conftest$ac_exeext conftest.$ac_ext
+ LIBS=$ac_check_lib_save_LIBS
+ fi
+-{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_mozjs_JS_NewObject" >&5
+-$as_echo "$ac_cv_lib_mozjs_JS_NewObject" >&6; }
+-if test "x$ac_cv_lib_mozjs_JS_NewObject" = x""yes; then
++{ $as_echo "$as_me:$LINENO: result: $ac_cv_lib_mozjs185_JS_NewObject" >&5
++$as_echo "$ac_cv_lib_mozjs185_JS_NewObject" >&6; }
++if test "x$ac_cv_lib_mozjs185_JS_NewObject" = x""yes; then
+ 
+-                                                    JS_LIBS="-L$SEARCH_DIR_LIBS -lmozjs"
+-                                                    MOZLIB=mozjs
++                                                    JS_LIBS="-L$SEARCH_DIR_LIBS -lmozjs185"
++                                                    MOZLIB=mozjs185
+ 
+ else
+ 
-- 
cgit v0.12