Overview
Request 320 (accepted)
fix build on all build hosts.
- Created by marguerite over 11 years ago
- In state accepted
-
Package maintainer:
detrei
Submit package home:marguerit...hes:Multimedia / mediatomb to package Multimedia / mediatomb
mediatomb.changes
Changed
x
1
2
+-------------------------------------------------------------------
3
+Fri Nov 9 00:26:26 UTC 2012 - i@margueirte.su
4
+
5
+- fix libjs dependency.
6
+- update source to svn2103.
7
+- add mediatomb-svn_automake_1.12.patch, fix automake 1.12+ configure.
8
+- add mediatomb-0.12.1-mozjs185.patch, fix mozjs185 builds.
9
+- add mediatomb-0.12.1-gcc47.patch, fix gcc47 builds.
10
+- add mediatomb-0.12.1-libextractor-0.6.patch, fix libextractor-0.6 builds.
11
+- build against new ffmpeg.
12
+- disable spidermonkey support on 11.4-, not possible.
13
+
14
+-------------------------------------------------------------------
15
Thu May 31 00:00:00 UTC 2012 - Manfred.Tremmel@iiv.de
16
17
- ffmpeg calls are outdated, compile against ffmpeg_oldabi
18
mediatomb.spec
Changed
335
1
2
-# vim: set sw=4 ts=4 et:
3
-# Copyright (c) 2007-2010 oc2pus
4
-# This file and all modifications and additions to the pristine
5
-# package are under the same license as the package itself.
6
#
7
-# Please submit bugfixes or comments to toni@links2linux.de
8
-
9
-# norootforbuild
10
+# spec file for package mediatomb
11
+#
12
+# Copyright (c) 2007-2010 oc2pus toni@links2linux.de.
13
+# Copyright (c) 2012 Marguerite i@marguerite.su.
14
+#
15
+# All modifications and additions to the file contributed by third parties
16
+# remain the property of their copyright owners, unless otherwise agreed
17
+# upon. The license for this file, and modifications and additions to the
18
+# file, is the same license as for the pristine package itself (unless the
19
+# license for the pristine package is not an Open Source License, in which
20
+# case the license is the MIT License). An "Open Source License" is a
21
+# license that conforms to the Open Source Definition (Version 1.9)
22
+# published by the Open Source Initiative.
23
+
24
+# Please submit bugfixes or comments via http://bugs.links2linux.org/
25
+#
26
27
+%if 0%{?suse_version} >= 1210
28
%define _with_js 1
29
+%else
30
+%define _with_js 0
31
+%endif
32
33
-Name: mediatomb
34
-Summary: UPnP AV MediaServer
35
-Version: 0.12.1
36
-Release: 0.pm.1
37
-License: GPL
38
-URL: http://mediatomb.cc
39
-Group: Productivity/Multimedia/Other
40
-Source0: %{name}-%{version}.tar.gz
41
-Source1: rcmediatomb
42
-Source2: config.xml.tmp
43
-Patch0: libav_0.7_support.patch
44
+Name: mediatomb
45
+Version: 0.12.1.svn2103
46
+Release: 0.pm.1
47
+License: GPL-2.0
48
+Summary: UPnP AV MediaServer
49
+Url: http://mediatomb.cc
50
+Group: Productivity/Multimedia/Other
51
+Source0: %{name}-%{version}.tar.bz2
52
+Source1: rcmediatomb
53
+Source2: config.xml.tmp
54
+Patch0: libav_0.7_support.patch
55
+# PATCH-FIX-UPSTREAM - fix gcc 4.6 builds.
56
Patch1: mediatomb-0.12.1-gcc46.patch
57
-Source90: %{name}-rpmlintrc
58
-BuildRoot: %{_tmppath}/%{name}-%{version}-buildroot
59
-BuildRequires: udev
60
-BuildRequires: file-devel
61
-BuildRequires: gcc-c++
62
-BuildRequires: curl-devel
63
-BuildRequires: id3lib-devel
64
-BuildRequires: libexif-devel
65
+# PATCH-FIX-UPSTREAM - fix automake 1.12 configure
66
+Patch2: mediatomb-svn_automake_1.12.patch
67
+# PATCH-FIX-UPSTREAM - fix mozjs185 builds.
68
+Patch3: mediatomb-0.12.1-mozjs185.patch
69
+# PATCH-FIX-UPSTREAM - fix gcc47 builds.
70
+Patch4: mediatomb-0.12.1-gcc47.patch
71
+# PATCH-FIX-UPSTREAM - port to libextractor 0.6 series
72
+Patch5: mediatomb-0.12.1-libextractor-0.6.patch
73
+# PATCH-FIX-UPSTREAM - build with ffmpeg new API
74
+Patch6: libavformat_0.11_support.patch
75
+Source90: %{name}-rpmlintrc
76
+BuildRequires: autoconf
77
+BuildRequires: automake
78
+BuildRequires: file-devel
79
+BuildRequires: gcc-c++
80
+BuildRequires: libcurl-devel
81
+BuildRequires: libexpat-devel
82
+# Multimedia has no extractor package.
83
#BuildRequires: libextractor-devel
84
-BuildRequires: libexpat-devel
85
-BuildRequires: libffmpeg_oldabi-devel
86
-BuildRequires: libffmpegthumbnailer-devel
87
-BuildRequires: libjack-devel
88
-BuildRequires: libmp4v2-devel
89
-BuildRequires: mDNSResponder-lib
90
-BuildRequires: libmysqlclient-devel
91
-BuildRequires: mozilla-nspr
92
-BuildRequires: pwdutils
93
-BuildRequires: sqlite-devel
94
-BuildRequires: libtag-devel
95
-BuildRequires: liblastfm-devel
96
+BuildRequires: libffmpeg-devel
97
+BuildRequires: libffmpegthumbnailer-devel
98
+BuildRequires: libjack-devel
99
+# it requires lastfmlib, not the same one.
100
+#BuildRequires: liblastfm-devel
101
+BuildRequires: libmp4v2-devel
102
+BuildRequires: libmysqlclient-devel
103
+BuildRequires: libtag-devel
104
+BuildRequires: mDNSResponder-lib
105
+BuildRequires: mozilla-nspr
106
+BuildRequires: pwdutils
107
+BuildRequires: sqlite3-devel
108
+BuildRequires: udev
109
+BuildRequires: pkgconfig(libexif)
110
+BuildRoot: %{_tmppath}/%{name}-%{version}-build
111
112
%if "%{_with_js}" == "1"
113
-BuildRequires: libjs-devel
114
-BuildRequires: mozilla-xulrunner192-devel
115
+BuildRequires: js-devel
116
+BuildRequires: xulrunner-devel
117
%endif
118
119
+Requires: %{name}-dbbackend = %{version}
120
+Requires: logrotate
121
Requires(pre): %insserv_prereq
122
Requires(pre): coreutils
123
Requires(pre): grep
124
Requires(pre): pwdutils
125
-Requires: %{name}-dbbackend = %{version}
126
-Requires: logrotate
127
128
%description
129
MediaTomb - UPnP AV Mediaserver for Linux.
130
131
addionally one db backend: mediatom-sqlite or mediatomb-mysql
132
133
%package mysql
134
-Summary: UPnP AV MediaServer mysql
135
-Group: Productivity/Multimedia/Other
136
+Summary: UPnP AV MediaServer mysql
137
+Group: Productivity/Multimedia/Other
138
+Requires: %{name} = %{version}
139
+Requires: mysql
140
+Provides: %{name}-dbbackend = %{version}
141
Requires(pre): coreutils
142
-Requires: mysql
143
-Requires: %{name} = %{version}
144
-Conflicts: %{name}-sqlite
145
-Provides: %{name}-dbbackend = %{version}
146
+Conflicts: %{name}-sqlite
147
148
%description mysql
149
MediaTomb - UPnP AV Mediaserver for Linux.
150
151
This package contains a mysql AND sqlite enabled binary.
152
153
%package sqlite
154
-Summary: UPnP AV MediaServer sqlite
155
-Group: Productivity/Multimedia/Other
156
+Summary: UPnP AV MediaServer sqlite
157
+Group: Productivity/Multimedia/Other
158
+Requires: %{name} = %{version}
159
+Requires: sqlite
160
+Provides: %{name}-dbbackend = %{version}
161
Requires(pre): coreutils
162
-Requires: sqlite
163
-Requires: %{name} = %{version}
164
-Conflicts: %{name}-mysql
165
-Provides: %{name}-dbbackend = %{version}
166
+Conflicts: %{name}-mysql
167
168
%description sqlite
169
MediaTomb - UPnP AV Mediaserver for Linux.
170
171
172
%prep
173
%setup -q %{name}-%{version}
174
+autoreconf -i
175
%patch0 -p1
176
%patch1 -p1
177
+%if 0%{?suse_version} >= 1220
178
+%patch2 -p1
179
+%endif
180
+%if 0%{?suse_version} >= 1210
181
+%patch3 -p1
182
+# we patched configure.ac
183
+autoreconf -i
184
+%endif
185
+%patch4 -p1
186
+%patch5 -p1
187
+%patch6 -p1
188
189
-%__cp %{SOURCE2} .
190
+cp %{SOURCE2} .
191
192
%build
193
# otherwise rpmlint is yelling:
194
#... rpm-buildroot-usage ...
195
196
%install
197
-%if "%{_with_js}" == "1"
198
-jsincludedir=`grep "includedir=" %{_libdir}/pkgconfig/libxul.pc | awk -F = '{print $2}'`
199
-jslibdir=`grep "sdkdir=" %{_libdir}/pkgconfig/libxul.pc | awk -F = '{print $2}'`
200
-%endif
201
-
202
-#-enable-libjs --with-js-h=%{_includedir}/xulrunner-sdk-1.9.1/js/
203
204
###################
205
# build the sqlite/mysql enabled mediatomb
206
207
%if "%{_with_js}" == "1"
208
--enable-libjs \
209
%endif
210
- --enable-taglib
211
-# --with-js-h=${jsincludedir}/unstable \
212
-# --with-js-libs=${jslibdir}/sdk/lib/ \
213
+ --enable-taglib
214
215
-%__make %{?jobs:-j%{jobs}}
216
+make %{?_smp_flags}
217
%makeinstall \
218
INSTALL="install -p"
219
-%__mv %{buildroot}%{_bindir}/mediatomb \
220
+mv %{buildroot}%{_bindir}/mediatomb \
221
%{buildroot}%{_bindir}/mediatomb-mysql
222
223
###################
224
# build the sqlite enabled mediatomb
225
-%__make clean
226
+make clean
227
%configure \
228
--prefix=%{_prefix} \
229
--enable-sqlite3 \
230
231
%if "%{_with_js}" == "1"
232
--enable-libjs \
233
%endif
234
- --enable-taglib
235
-# --with-js-h=${jsincludedir}/unstable \
236
-# --with-js-libs=${jslibdir}/sdk/lib/ \
237
-
238
-%__make %{?_smp_flags}
239
+ --enable-taglib
240
+make %{?_smp_flags}
241
242
%makeinstall \
243
- INSTALL="%__install -p"
244
-%__mv %{buildroot}%{_bindir}/mediatomb \
245
+ INSTALL="install -p"
246
+mv %{buildroot}%{_bindir}/mediatomb \
247
%{buildroot}%{_bindir}/mediatomb-sqlite
248
249
###################
250
# init script
251
-%__install -dm 755 %{buildroot}%{_sbindir}
252
-%__install -dm 755 %{buildroot}%{_sysconfdir}/init.d
253
-%__install -m 755 %{SOURCE1} \
254
+install -dm 755 %{buildroot}%{_sbindir}
255
+install -dm 755 %{buildroot}%{_sysconfdir}/init.d
256
+install -m 755 %{SOURCE1} \
257
%{buildroot}%{_sysconfdir}/init.d/mediatomb
258
-%__install -m 755 config/mediatomb-conf-fedora \
259
+install -m 755 config/mediatomb-conf-fedora \
260
%{buildroot}%{_sysconfdir}/mediatomb.conf
261
-%__ln_s ../../%{_sysconfdir}/init.d/%{name} \
262
+ln -s ../../%{_sysconfdir}/init.d/%{name} \
263
%{buildroot}%{_sbindir}/rcmediatomb
264
265
###################
266
# sample config
267
-%__install -dm 755 %{buildroot}%{_sysconfdir}/%{name}
268
-%__install -m 644 %{SOURCE2} \
269
+install -dm 755 %{buildroot}%{_sysconfdir}/%{name}
270
+install -m 644 %{SOURCE2} \
271
%{buildroot}%{_sysconfdir}/%{name}/config.xml
272
273
###################
274
# create a new home
275
-%__install -dm 755 %{buildroot}%{_localstatedir}/lib/%{name}
276
-%__install -m 644 %{SOURCE1} \
277
+install -dm 755 %{buildroot}%{_localstatedir}/lib/%{name}
278
+install -m 644 %{SOURCE1} \
279
%{buildroot}%{_localstatedir}/lib/%{name}/config.xml
280
touch %{buildroot}%{_localstatedir}/lib/%{name}/{config.xml,mediatomb.db,mediatomb.html}
281
282
###################
283
# logrotate
284
-%__install -dm 755 %{buildroot}%{_sysconfdir}/logrotate.d
285
-%__cat > %{buildroot}%{_sysconfdir}/logrotate.d/%{name} << 'EOF'
286
+install -dm 755 %{buildroot}%{_sysconfdir}/logrotate.d
287
+cat > %{buildroot}%{_sysconfdir}/logrotate.d/%{name} << 'EOF'
288
/var/log/mediatomb {
289
create 644 root root
290
monthly
291
292
EOF
293
294
%clean
295
-%{?buildroot:%__rm -rf "%{buildroot}"}
296
+%{?buildroot:rm -rf %{buildroot}}
297
298
%pre
299
# create group if necessary
300
301
mediatomb > /dev/null 2> /dev/null || :
302
303
%post sqlite
304
-%__rm -f "%{_bindir}/mediatomb"
305
-%__ln_s "%{_bindir}/mediatomb-sqlite" "%{_bindir}/mediatomb"
306
+rm -f "%{_bindir}/mediatomb"
307
+ln -s "%{_bindir}/mediatomb-sqlite" "%{_bindir}/mediatomb"
308
309
%postun sqlite
310
-%__rm -f "%{_bindir}/mediatomb"
311
+rm -f "%{_bindir}/mediatomb"
312
313
%post mysql
314
-%__rm -f "%{_bindir}/mediatomb"
315
-%__ln_s "%{_bindir}/mediatomb-mysql" "%{_bindir}/mediatomb"
316
+rm -f "%{_bindir}/mediatomb"
317
+ln -s "%{_bindir}/mediatomb-mysql" "%{_bindir}/mediatomb"
318
319
%postun mysql
320
-%__rm -f "%{_bindir}/mediatomb"
321
+rm -f "%{_bindir}/mediatomb"
322
323
%files
324
%defattr(-,root,root)
325
326
%config(noreplace) %{_sysconfdir}/logrotate.d/%{name}
327
%{_sysconfdir}/init.d/%{name}
328
%{_sbindir}/rcmediatomb
329
-%dir %{_datadir}/%{name}
330
-%{_datadir}/%{name}/*
331
+%{_datadir}/%{name}/
332
%{_mandir}/man1/*
333
334
%files mysql
335
libavformat_0.11_support.patch
Added
54
1
2
+--- mediatomb-0.12.1.orig/src/metadata/ffmpeg_handler.cc 2012-06-18 02:50:35.000000000 -0400
3
++++ mediatomb-0.12.1/src/metadata/ffmpeg_handler.cc 2012-06-18 02:59:02.000000000 -0400
4
+@@ -107,8 +107,8 @@
5
+ return;
6
+ for (const mapping_t *m = mapping; m->avname != NULL; m++)
7
+ {
8
+- AVMetadataTag *tag = NULL;
9
+- tag = av_metadata_get(pFormatCtx->metadata, m->avname, NULL, 0);
10
++ AVDictionaryEntry *tag = NULL;
11
++ tag = av_dict_get(pFormatCtx->metadata, m->avname, NULL, 0);
12
+ if (tag && tag->value && tag->value[0])
13
+ {
14
+ log_debug("Added metadata %s: %s\n", m->avname, tag->value);
15
+@@ -278,7 +278,7 @@
16
+ int x = 0;
17
+ int y = 0;
18
+
19
+- AVFormatContext *pFormatCtx;
20
++ AVFormatContext *pFormatCtx = avformat_alloc_context();
21
+
22
+ // Suppress all log messages
23
+ av_log_set_callback(FfmpegNoOutputStub);
24
+@@ -286,15 +286,15 @@
25
+ // Register all formats and codecs
26
+ av_register_all();
27
+
28
+- // Open video file
29
+- if (av_open_input_file(&pFormatCtx,
30
+- item->getLocation().c_str(), NULL, 0, NULL) != 0)
31
++ // Open video file
32
++ if (avformat_open_input(&pFormatCtx,
33
++ item->getLocation().c_str(), NULL, NULL) != 0)
34
+ return; // Couldn't open file
35
+
36
+ // Retrieve stream information
37
+- if (av_find_stream_info(pFormatCtx) < 0)
38
++ if (avformat_find_stream_info(pFormatCtx,NULL) < 0)
39
+ {
40
+- av_close_input_file(pFormatCtx);
41
++ avformat_close_input(&pFormatCtx);
42
+ return; // Couldn't find stream information
43
+ }
44
+ // Add metadata using ffmpeg library calls
45
+@@ -303,7 +303,7 @@
46
+ addFfmpegResourceFields(item, pFormatCtx, &x, &y);
47
+
48
+ // Close the video file
49
+- av_close_input_file(pFormatCtx);
50
++ avformat_close_input(&pFormatCtx);
51
+ }
52
+
53
+ Ref<IOHandler> FfmpegHandler::serveContent(Ref<CdsItem> item, int resNum, off_t *data_size)
54
mediatomb-0.12.1-gcc47.patch
Added
122
1
2
+Index: mediatomb-0.12.1.svn2103/src/hash/dbo_hash.h
3
+===================================================================
4
+--- mediatomb-0.12.1.svn2103.orig/src/hash/dbo_hash.h
5
++++ mediatomb-0.12.1.svn2103/src/hash/dbo_hash.h
6
+@@ -106,7 +106,7 @@ public:
7
+ inline bool remove(KT key)
8
+ {
9
+ struct dbo_hash_slot<KT, VT> *slot;
10
+- if (! search(key, &slot))
11
++ if (! this->search(key, &slot))
12
+ return false;
13
+ slot->key = deletedKey;
14
+ slot->value->release();
15
+@@ -136,7 +136,7 @@ public:
16
+ inline void put(KT key, zmm::Ref<VT> value)
17
+ {
18
+ struct dbo_hash_slot<KT, VT> *slot;
19
+- search(key, &slot);
20
++ this->search(key, &slot);
21
+ put(key, (hash_slot_t)slot, value);
22
+ }
23
+ void put(KT key, hash_slot_t destSlot, zmm::Ref<VT> value)
24
+@@ -162,7 +162,7 @@ public:
25
+ inline zmm::Ref<VT> get(KT key)
26
+ {
27
+ struct dbo_hash_slot<KT, VT> *slot;
28
+- bool found = search(key, &slot);
29
++ bool found = this->search(key, &slot);
30
+ if (found)
31
+ return zmm::Ref<VT>(slot->value);
32
+ else
33
+@@ -174,7 +174,7 @@ public:
34
+ inline zmm::Ref<VT> get(KT key, hash_slot_t *destSlot)
35
+ {
36
+ struct dbo_hash_slot<KT, VT> **slot = (struct dbo_hash_slot<KT, VT> **)destSlot;
37
+- bool found = search(key, slot);
38
++ bool found = this->search(key, slot);
39
+ if (found)
40
+ return zmm::Ref<VT>((*slot)->value);
41
+ else
42
+Index: mediatomb-0.12.1.svn2103/src/hash/dbr_hash.h
43
+===================================================================
44
+--- mediatomb-0.12.1.svn2103.orig/src/hash/dbr_hash.h
45
++++ mediatomb-0.12.1.svn2103/src/hash/dbr_hash.h
46
+@@ -124,7 +124,7 @@ public:
47
+ inline bool remove(KT key)
48
+ {
49
+ struct dbr_hash_slot<KT> *slot;
50
+- if (! search(key, &slot))
51
++ if (! this->search(key, &slot))
52
+ return false;
53
+ slot->key = deletedKey;
54
+ int array_slot = slot->array_slot;
55
+@@ -134,7 +134,7 @@ public:
56
+ return true;
57
+ }
58
+ data_array[array_slot] = data_array[--this->count];
59
+- if (! search(data_array[array_slot], &slot))
60
++ if (! this->search(data_array[array_slot], &slot))
61
+ {
62
+ log_debug("DBR-Hash-Error: (%d; array_slot=%d; count=%d)\n", data_array[array_slot], array_slot, this->count);
63
+ throw zmm::Exception(_("DBR-Hash-Error: key in data_array not found in hashtable"));
64
+@@ -146,7 +146,7 @@ public:
65
+ inline void put(KT key)
66
+ {
67
+ struct dbr_hash_slot<KT> *slot;
68
+- if (! search(key, &slot))
69
++ if (! this->search(key, &slot))
70
+ {
71
+ #ifdef TOMBDEBUG
72
+ if (this->count >= realCapacity)
73
+@@ -194,7 +194,7 @@ public:
74
+ inline bool exists(KT key)
75
+ {
76
+ struct dbr_hash_slot<KT> *slot;
77
+- return search(key, &slot);
78
++ return this->search(key, &slot);
79
+ }
80
+
81
+ /*
82
+Index: mediatomb-0.12.1.svn2103/src/hash/dso_hash.h
83
+===================================================================
84
+--- mediatomb-0.12.1.svn2103.orig/src/hash/dso_hash.h
85
++++ mediatomb-0.12.1.svn2103/src/hash/dso_hash.h
86
+@@ -100,7 +100,7 @@ public:
87
+ inline bool remove(zmm::String key)
88
+ {
89
+ struct dso_hash_slot<VT> *slot;
90
+- if (! search(key, &slot))
91
++ if (! this->search(key, &slot))
92
+ return false;
93
+ slot->key->release();
94
+ slot->value->release();
95
+@@ -112,7 +112,7 @@ public:
96
+ inline void put(zmm::String key, zmm::Ref<VT> value)
97
+ {
98
+ struct dso_hash_slot<VT> *slot;
99
+- search(key, &slot);
100
++ this->search(key, &slot);
101
+ put(key, (hash_slot_t)slot, value);
102
+ }
103
+ void put(zmm::String key, hash_slot_t destSlot, zmm::Ref<VT> value)
104
+@@ -141,7 +141,7 @@ public:
105
+ inline zmm::Ref<VT> get(zmm::String key)
106
+ {
107
+ struct dso_hash_slot<VT> *slot;
108
+- bool found = search(key, &slot);
109
++ bool found = this->search(key, &slot);
110
+ if (found)
111
+ return zmm::Ref<VT>(slot->value);
112
+ else
113
+@@ -153,7 +153,7 @@ public:
114
+ inline zmm::Ref<VT> get(zmm::String key, hash_slot_t *destSlot)
115
+ {
116
+ struct dso_hash_slot<VT> **slot = (struct dso_hash_slot<VT> **)destSlot;
117
+- bool found = search(key, slot);
118
++ bool found = this->search(key, slot);
119
+ if (found)
120
+ return zmm::Ref<VT>((*slot)->value);
121
+ else
122
mediatomb-0.12.1-libextractor-0.6.patch
Added
677
1
2
+http://bugs.gentoo.org/435394
3
+
4
+port to libextractor-0.6.x
5
+
6
+patch by Mike Frysinger <vapier@gentoo.org>
7
+
8
+--- a/configure.ac
9
++++ b/configure.ac
10
+@@ -1631,7 +1631,7 @@ MT_CHECK_OPTIONAL_PACKAGE([lastfmlib], [disable],
11
+ ######## extractor
12
+
13
+ if test "x$LIBEXTRACTOR_OPTION_ENABLED" = xyes; then
14
+- MT_CHECK_PACKAGE([libextractor], [extractor], [extractor], [EXTRACTOR_getKeywords])
15
++ MT_CHECK_PACKAGE([libextractor], [extractor], [extractor], [EXTRACTOR_extract])
16
+ fi
17
+
18
+ if test "x$LIBEXTRACTOR_STATUS" = xyes; then
19
+--- a/src/metadata/extractor_handler.cc
20
++++ b/src/metadata/extractor_handler.cc
21
+@@ -55,322 +55,344 @@ ExtractorHandler::ExtractorHandler() : MetadataHandler()
22
+ {
23
+ }
24
+
25
+-static EXTRACTOR_KeywordType getTagFromString(String tag)
26
++static EXTRACTOR_MetaType getTagFromString(String tag)
27
+ {
28
+- if (tag == "EXTRACTOR_UNKNOWN")
29
+- return EXTRACTOR_UNKNOWN;
30
+- if (tag == "EXTRACTOR_FILENAME")
31
+- return EXTRACTOR_FILENAME;
32
+- if (tag == "EXTRACTOR_MIMETYPE")
33
+- return EXTRACTOR_MIMETYPE;
34
+- if (tag == "EXTRACTOR_TITLE")
35
+- return EXTRACTOR_TITLE;
36
+- if (tag == "EXTRACTOR_AUTHOR")
37
+- return EXTRACTOR_AUTHOR;
38
+- if (tag == "EXTRACTOR_ARTIST")
39
+- return EXTRACTOR_ARTIST;
40
+- if (tag == "EXTRACTOR_DESCRIPTION")
41
+- return EXTRACTOR_DESCRIPTION;
42
+- if (tag == "EXTRACTOR_COMMENT")
43
+- return EXTRACTOR_COMMENT;
44
+- if (tag == "EXTRACTOR_DATE")
45
+- return EXTRACTOR_DATE;
46
+- if (tag == "EXTRACTOR_PUBLISHER")
47
+- return EXTRACTOR_PUBLISHER;
48
+- if (tag == "EXTRACTOR_LANGUAGE")
49
+- return EXTRACTOR_LANGUAGE;
50
+- if (tag == "EXTRACTOR_ALBUM")
51
+- return EXTRACTOR_ALBUM;
52
+- if (tag == "EXTRACTOR_GENRE")
53
+- return EXTRACTOR_GENRE;
54
+- if (tag == "EXTRACTOR_LOCATION")
55
+- return EXTRACTOR_LOCATION;
56
+- if (tag == "EXTRACTOR_VERSIONNUMBER")
57
+- return EXTRACTOR_VERSIONNUMBER;
58
+- if (tag == "EXTRACTOR_ORGANIZATION")
59
+- return EXTRACTOR_ORGANIZATION;
60
+- if (tag == "EXTRACTOR_COPYRIGHT")
61
+- return EXTRACTOR_COPYRIGHT;
62
+- if (tag == "EXTRACTOR_SUBJECT")
63
+- return EXTRACTOR_SUBJECT;
64
+- if (tag == "EXTRACTOR_KEYWORDS")
65
+- return EXTRACTOR_KEYWORDS;
66
+- if (tag == "EXTRACTOR_CONTRIBUTOR")
67
+- return EXTRACTOR_CONTRIBUTOR;
68
+- if (tag == "EXTRACTOR_RESOURCE_TYPE")
69
+- return EXTRACTOR_RESOURCE_TYPE;
70
+- if (tag == "EXTRACTOR_FORMAT")
71
+- return EXTRACTOR_FORMAT;
72
+- if (tag == "EXTRACTOR_RESOURCE_IDENTIFIER")
73
+- return EXTRACTOR_RESOURCE_IDENTIFIER;
74
+- if (tag == "EXTRACTOR_SOURCE")
75
+- return EXTRACTOR_SOURCE;
76
+- if (tag == "EXTRACTOR_RELATION")
77
+- return EXTRACTOR_RELATION;
78
+- if (tag == "EXTRACTOR_COVERAGE")
79
+- return EXTRACTOR_COVERAGE;
80
+- if (tag == "EXTRACTOR_SOFTWARE")
81
+- return EXTRACTOR_SOFTWARE;
82
+- if (tag == "EXTRACTOR_DISCLAIMER")
83
+- return EXTRACTOR_DISCLAIMER;
84
+- if (tag == "EXTRACTOR_WARNING")
85
+- return EXTRACTOR_WARNING;
86
+- if (tag == "EXTRACTOR_TRANSLATED")
87
+- return EXTRACTOR_TRANSLATED;
88
+- if (tag == "EXTRACTOR_CREATION_DATE")
89
+- return EXTRACTOR_CREATION_DATE;
90
+- if (tag == "EXTRACTOR_MODIFICATION_DATE")
91
+- return EXTRACTOR_MODIFICATION_DATE;
92
+- if (tag == "EXTRACTOR_CREATOR")
93
+- return EXTRACTOR_CREATOR;
94
+- if (tag == "EXTRACTOR_PRODUCER")
95
+- return EXTRACTOR_PRODUCER;
96
+- if (tag == "EXTRACTOR_PAGE_COUNT")
97
+- return EXTRACTOR_PAGE_COUNT;
98
+- if (tag == "EXTRACTOR_PAGE_ORIENTATION")
99
+- return EXTRACTOR_PAGE_ORIENTATION;
100
+- if (tag == "EXTRACTOR_PAPER_SIZE")
101
+- return EXTRACTOR_PAPER_SIZE;
102
+- if (tag == "EXTRACTOR_USED_FONTS")
103
+- return EXTRACTOR_USED_FONTS;
104
+- if (tag == "EXTRACTOR_PAGE_ORDER")
105
+- return EXTRACTOR_PAGE_ORDER;
106
+- if (tag == "EXTRACTOR_CREATED_FOR")
107
+- return EXTRACTOR_CREATED_FOR;
108
+- if (tag == "EXTRACTOR_MAGNIFICATION")
109
+- return EXTRACTOR_MAGNIFICATION;
110
+- if (tag == "EXTRACTOR_RELEASE")
111
+- return EXTRACTOR_RELEASE;
112
+- if (tag == "EXTRACTOR_GROUP")
113
+- return EXTRACTOR_GROUP;
114
+- if (tag == "EXTRACTOR_SIZE")
115
+- return EXTRACTOR_SIZE;
116
+- if (tag == "EXTRACTOR_SUMMARY")
117
+- return EXTRACTOR_SUMMARY;
118
+- if (tag == "EXTRACTOR_PACKAGER")
119
+- return EXTRACTOR_PACKAGER;
120
+- if (tag == "EXTRACTOR_VENDOR")
121
+- return EXTRACTOR_VENDOR;
122
+- if (tag == "EXTRACTOR_LICENSE")
123
+- return EXTRACTOR_LICENSE;
124
+- if (tag == "EXTRACTOR_DISTRIBUTION")
125
+- return EXTRACTOR_DISTRIBUTION;
126
+- if (tag == "EXTRACTOR_BUILDHOST")
127
+- return EXTRACTOR_BUILDHOST;
128
+- if (tag == "EXTRACTOR_OS")
129
+- return EXTRACTOR_OS;
130
+- if (tag == "EXTRACTOR_DEPENDENCY")
131
+- return EXTRACTOR_DEPENDENCY;
132
+- if (tag == "EXTRACTOR_HASH_MD4")
133
+- return EXTRACTOR_HASH_MD4;
134
+- if (tag == "EXTRACTOR_HASH_MD5")
135
+- return EXTRACTOR_HASH_MD5;
136
+- if (tag == "EXTRACTOR_HASH_SHA0")
137
+- return EXTRACTOR_HASH_SHA0;
138
+- if (tag == "EXTRACTOR_HASH_SHA1")
139
+- return EXTRACTOR_HASH_SHA1;
140
+- if (tag == "EXTRACTOR_HASH_RMD160")
141
+- return EXTRACTOR_HASH_RMD160;
142
+- if (tag == "EXTRACTOR_RESOLUTION")
143
+- return EXTRACTOR_RESOLUTION;
144
+- if (tag == "EXTRACTOR_CATEGORY")
145
+- return EXTRACTOR_CATEGORY;
146
+- if (tag == "EXTRACTOR_BOOKTITLE")
147
+- return EXTRACTOR_BOOKTITLE;
148
+- if (tag == "EXTRACTOR_PRIORITY")
149
+- return EXTRACTOR_PRIORITY;
150
+- if (tag == "EXTRACTOR_CONFLICTS")
151
+- return EXTRACTOR_CONFLICTS;
152
+- if (tag == "EXTRACTOR_REPLACES")
153
+- return EXTRACTOR_REPLACES;
154
+- if (tag == "EXTRACTOR_PROVIDES")
155
+- return EXTRACTOR_PROVIDES;
156
+- if (tag == "EXTRACTOR_CONDUCTOR")
157
+- return EXTRACTOR_CONDUCTOR;
158
+- if (tag == "EXTRACTOR_INTERPRET")
159
+- return EXTRACTOR_INTERPRET;
160
+- if (tag == "EXTRACTOR_OWNER")
161
+- return EXTRACTOR_OWNER;
162
+- if (tag == "EXTRACTOR_LYRICS")
163
+- return EXTRACTOR_LYRICS;
164
+- if (tag == "EXTRACTOR_MEDIA_TYPE")
165
+- return EXTRACTOR_MEDIA_TYPE;
166
+- if (tag == "EXTRACTOR_CONTACT")
167
+- return EXTRACTOR_CONTACT;
168
+- if (tag == "EXTRACTOR_THUMBNAIL_DATA")
169
+- return EXTRACTOR_THUMBNAIL_DATA;
170
+-
171
+-#ifdef EXTRACTOR_GE_0_5_2
172
+- if (tag == "EXTRACTOR_PUBLICATION_DATE")
173
+- return EXTRACTOR_PUBLICATION_DATE;
174
+- if (tag == "EXTRACTOR_CAMERA_MAKE")
175
+- return EXTRACTOR_CAMERA_MAKE;
176
+- if (tag == "EXTRACTOR_CAMERA_MODEL")
177
+- return EXTRACTOR_CAMERA_MODEL;
178
+- if (tag == "EXTRACTOR_EXPOSURE")
179
+- return EXTRACTOR_EXPOSURE;
180
+- if (tag == "EXTRACTOR_APERTURE")
181
+- return EXTRACTOR_APERTURE;
182
+- if (tag == "EXTRACTOR_EXPOSURE_BIAS")
183
+- return EXTRACTOR_EXPOSURE_BIAS;
184
+- if (tag == "EXTRACTOR_FLASH")
185
+- return EXTRACTOR_FLASH;
186
+- if (tag == "EXTRACTOR_FLASH_BIAS")
187
+- return EXTRACTOR_FLASH_BIAS;
188
+- if (tag == "EXTRACTOR_FOCAL_LENGTH")
189
+- return EXTRACTOR_FOCAL_LENGTH;
190
+- if (tag == "EXTRACTOR_FOCAL_LENGTH_35MM")
191
+- return EXTRACTOR_FOCAL_LENGTH_35MM;
192
+- if (tag == "EXTRACTOR_ISO_SPEED")
193
+- return EXTRACTOR_ISO_SPEED;
194
+- if (tag == "EXTRACTOR_EXPOSURE_MODE")
195
+- return EXTRACTOR_EXPOSURE_MODE;
196
+- if (tag == "EXTRACTOR_METERING_MODE")
197
+- return EXTRACTOR_METERING_MODE;
198
+- if (tag == "EXTRACTOR_MACRO_MODE")
199
+- return EXTRACTOR_MACRO_MODE;
200
+- if (tag == "EXTRACTOR_IMAGE_QUALITY")
201
+- return EXTRACTOR_IMAGE_QUALITY;
202
+- if (tag == "EXTRACTOR_WHITE_BALANCE")
203
+- return EXTRACTOR_WHITE_BALANCE;
204
+- if (tag == "EXTRACTOR_ORIENTATION")
205
+- return EXTRACTOR_ORIENTATION;
206
+-#endif // EXTRACTOR_GE_0_5_2
207
++#define T(x) [EXTRACTOR_METATYPE_##x] = "EXTRACTOR_METATYPE_"#x,
208
++ /* XXX: should convert to EXTRACTOR_metatype_to_string() somehow */
209
++ const char *types[] =
210
++ {
211
++ T(RESERVED)
212
++ T(MIMETYPE)
213
++ T(FILENAME)
214
++ T(COMMENT)
215
++
216
++ T(TITLE)
217
++ T(BOOK_TITLE)
218
++ T(BOOK_EDITION)
219
++ T(BOOK_CHAPTER_NUMBER)
220
++ T(JOURNAL_NAME)
221
++ T(JOURNAL_VOLUME)
222
++ T(JOURNAL_NUMBER)
223
++ T(PAGE_COUNT)
224
++ T(PAGE_RANGE)
225
++ T(AUTHOR_NAME)
226
++ T(AUTHOR_EMAIL)
227
++ T(AUTHOR_INSTITUTION)
228
++ T(PUBLISHER)
229
++ T(PUBLISHER_ADDRESS)
230
++ T(PUBLISHER_INSTITUTION)
231
++ T(PUBLISHER_SERIES)
232
++ T(PUBLICATION_TYPE)
233
++ T(PUBLICATION_YEAR)
234
++ T(PUBLICATION_MONTH)
235
++ T(PUBLICATION_DAY)
236
++ T(PUBLICATION_DATE)
237
++ T(BIBTEX_EPRINT)
238
++ T(BIBTEX_ENTRY_TYPE)
239
++ T(LANGUAGE)
240
++ T(CREATION_TIME)
241
++ T(URL)
242
++
243
++ T(URI)
244
++ T(ISRC)
245
++ T(HASH_MD4)
246
++ T(HASH_MD5)
247
++ T(HASH_SHA0)
248
++ T(HASH_SHA1)
249
++ T(HASH_RMD160)
250
++
251
++ T(GPS_LATITUDE_REF)
252
++ T(GPS_LATITUDE)
253
++ T(GPS_LONGITUDE_REF)
254
++ T(GPS_LONGITUDE)
255
++ T(LOCATION_CITY)
256
++ T(LOCATION_SUBLOCATION)
257
++ T(LOCATION_COUNTRY)
258
++ T(LOCATION_COUNTRY_CODE)
259
++
260
++ T(UNKNOWN)
261
++ T(DESCRIPTION)
262
++ T(COPYRIGHT)
263
++ T(RIGHTS)
264
++ T(KEYWORDS)
265
++ T(ABSTRACT)
266
++ T(SUMMARY)
267
++ T(SUBJECT)
268
++ T(CREATOR)
269
++ T(FORMAT)
270
++ T(FORMAT_VERSION)
271
++
272
++ T(CREATED_BY_SOFTWARE)
273
++ T(UNKNOWN_DATE)
274
++ T(CREATION_DATE)
275
++ T(MODIFICATION_DATE)
276
++ T(LAST_PRINTED)
277
++ T(LAST_SAVED_BY)
278
++ T(TOTAL_EDITING_TIME)
279
++ T(EDITING_CYCLES)
280
++ T(MODIFIED_BY_SOFTWARE)
281
++ T(REVISION_HISTORY)
282
++
283
++ T(EMBEDDED_FILE_SIZE)
284
++ T(FINDER_FILE_TYPE)
285
++ T(FINDER_FILE_CREATOR)
286
++
287
++ T(PACKAGE_NAME)
288
++ T(PACKAGE_VERSION)
289
++ T(SECTION)
290
++ T(UPLOAD_PRIORITY)
291
++ T(PACKAGE_DEPENDENCY)
292
++ T(PACKAGE_CONFLICTS)
293
++ T(PACKAGE_REPLACES)
294
++ T(PACKAGE_PROVIDES)
295
++ T(PACKAGE_RECOMMENDS)
296
++ T(PACKAGE_SUGGESTS)
297
++ T(PACKAGE_MAINTAINER)
298
++ T(PACKAGE_INSTALLED_SIZE)
299
++ T(PACKAGE_SOURCE)
300
++ T(PACKAGE_ESSENTIAL)
301
++ T(TARGET_ARCHITECTURE)
302
++ T(PACKAGE_PRE_DEPENDENCY)
303
++ T(LICENSE)
304
++ T(PACKAGE_DISTRIBUTION)
305
++ T(BUILDHOST)
306
++ T(VENDOR)
307
++ T(TARGET_OS)
308
++ T(SOFTWARE_VERSION)
309
++ T(TARGET_PLATFORM)
310
++ T(RESOURCE_TYPE)
311
++ T(LIBRARY_SEARCH_PATH)
312
++ T(LIBRARY_DEPENDENCY)
313
++
314
++ T(CAMERA_MAKE)
315
++ T(CAMERA_MODEL)
316
++ T(EXPOSURE)
317
++ T(APERTURE)
318
++ T(EXPOSURE_BIAS)
319
++ T(FLASH)
320
++ T(FLASH_BIAS)
321
++ T(FOCAL_LENGTH)
322
++ T(FOCAL_LENGTH_35MM)
323
++ T(ISO_SPEED)
324
++ T(EXPOSURE_MODE)
325
++ T(METERING_MODE)
326
++ T(MACRO_MODE)
327
++ T(IMAGE_QUALITY)
328
++ T(WHITE_BALANCE)
329
++ T(ORIENTATION)
330
++ T(MAGNIFICATION)
331
++
332
++ T(IMAGE_DIMENSIONS)
333
++ T(PRODUCED_BY_SOFTWARE)
334
++ T(THUMBNAIL)
335
++ T(IMAGE_RESOLUTION)
336
++ T(SOURCE)
337
++
338
++ T(CHARACTER_SET)
339
++ T(LINE_COUNT)
340
++ T(PARAGRAPH_COUNT)
341
++ T(WORD_COUNT)
342
++ T(CHARACTER_COUNT)
343
++ T(PAGE_ORIENTATION)
344
++ T(PAPER_SIZE)
345
++ T(TEMPLATE)
346
++ T(COMPANY)
347
++ T(MANAGER)
348
++ T(REVISION_NUMBER)
349
++
350
++ T(DURATION)
351
++ T(ALBUM)
352
++ T(ARTIST)
353
++ T(GENRE)
354
++ T(TRACK_NUMBER)
355
++ T(DISC_NUMBER)
356
++ T(PERFORMER)
357
++ T(CONTACT_INFORMATION)
358
++ T(SONG_VERSION)
359
++ T(PICTURE)
360
++ T(COVER_PICTURE)
361
++ T(CONTRIBUTOR_PICTURE)
362
++ T(EVENT_PICTURE)
363
++ T(LOGO)
364
++ T(BROADCAST_TELEVISION_SYSTEM)
365
++ T(SOURCE_DEVICE)
366
++ T(DISCLAIMER)
367
++ T(WARNING)
368
++ T(PAGE_ORDER)
369
++ T(WRITER)
370
++ T(PRODUCT_VERSION)
371
++ T(CONTRIBUTOR_NAME)
372
++ T(MOVIE_DIRECTOR)
373
++ T(NETWORK_NAME)
374
++ T(SHOW_NAME)
375
++ T(CHAPTER_NAME)
376
++ T(SONG_COUNT)
377
++ T(STARTING_SONG)
378
++ T(PLAY_COUNTER)
379
++ T(CONDUCTOR)
380
++ T(INTERPRETATION)
381
++ T(COMPOSER)
382
++ T(BEATS_PER_MINUTE)
383
++ T(ENCODED_BY)
384
++ T(ORIGINAL_TITLE)
385
++ T(ORIGINAL_ARTIST)
386
++ T(ORIGINAL_WRITER)
387
++ T(ORIGINAL_RELEASE_YEAR)
388
++ T(ORIGINAL_PERFORMER)
389
++ T(LYRICS)
390
++ T(POPULARITY_METER)
391
++ T(LICENSEE)
392
++ T(MUSICIAN_CREDITS_LIST)
393
++ T(MOOD)
394
++ T(SUBTITLE)
395
++
396
++ T(GNUNET_DISPLAY_TYPE)
397
++ T(GNUNET_FULL_DATA)
398
++ T(RATING)
399
++ T(ORGANIZATION)
400
++ T(RIPPER)
401
++ T(PRODUCER)
402
++ T(GROUP)
403
++ T(GNUNET_ORIGINAL_FILENAME)
404
++ };
405
++#undef T
406
++ size_t i;
407
++
408
++ for (i = 0; i < sizeof(types) / sizeof(types[0]); ++i)
409
++ if (!strcmp(types[i], tag.c_str()))
410
++ return (EXTRACTOR_MetaType) i;
411
+
412
+ log_warning("Ignoring unknown libextractor tag: %s\n", tag.c_str());
413
+- return EXTRACTOR_UNKNOWN;
414
++ return EXTRACTOR_METATYPE_UNKNOWN;
415
+ }
416
+
417
+-static void addMetaField(metadata_fields_t field, EXTRACTOR_KeywordList *keywords, Ref<CdsItem> item, Ref<StringConverter> sc)
418
++struct field_state {
419
++ Ref<CdsItem> item;
420
++ Ref<StringConverter> sc;
421
++ Ref<Array<StringBase> > aux;
422
++};
423
++
424
++static int addField(void *cls, const char *plugin_name, enum EXTRACTOR_MetaType type,
425
++ enum EXTRACTOR_MetaFormat format, const char *data_mime_type,
426
++ const char *data, size_t data_len)
427
+ {
428
+- String value;
429
+- const char *temp = NULL;
430
+-
431
++ metadata_fields_t field = M_MAX;
432
++ resource_attributes_t attr = R_MAX;
433
++
434
++ if (!data)
435
++ return 0;
436
++
437
++ log_debug("metadata %zu [%s] -> %s\n", (size_t)type, EXTRACTOR_metatype_to_string(type), data);
438
++
439
+ /// \todo check if UTF-8 conversion is needed, may already be in UTF-8
440
+-
441
+- switch (field)
442
++
443
++ switch (type)
444
+ {
445
+- case M_TITLE:
446
+- temp = EXTRACTOR_extractLast(EXTRACTOR_TITLE, keywords);
447
++ case EXTRACTOR_METATYPE_TITLE:
448
++ field = M_TITLE;
449
+ break;
450
+- case M_ARTIST:
451
+- temp = EXTRACTOR_extractLast(EXTRACTOR_ARTIST, keywords);
452
++ case EXTRACTOR_METATYPE_ARTIST:
453
++ field = M_ARTIST;
454
+ break;
455
+- case M_ALBUM:
456
+- temp = EXTRACTOR_extractLast(EXTRACTOR_ALBUM, keywords);
457
++ case EXTRACTOR_METATYPE_ALBUM:
458
++ field = M_ALBUM;
459
+ break;
460
+- case M_DATE:
461
+- temp = EXTRACTOR_extractLast(EXTRACTOR_DATE, keywords);
462
++ case EXTRACTOR_METATYPE_PUBLICATION_YEAR:
463
++ field = M_DATE;
464
+ break;
465
+- case M_GENRE:
466
+- temp = EXTRACTOR_extractLast(EXTRACTOR_GENRE, keywords);
467
++ case EXTRACTOR_METATYPE_GENRE:
468
++ field = M_GENRE;
469
+ break;
470
+- case M_DESCRIPTION:
471
+- temp = EXTRACTOR_extractLast(EXTRACTOR_DESCRIPTION, keywords);
472
+-
473
+- if (temp == NULL)
474
+- temp = EXTRACTOR_extractLast(EXTRACTOR_COMMENT, keywords);
475
++ case EXTRACTOR_METATYPE_DESCRIPTION:
476
++ field = M_DESCRIPTION;
477
++ break;
478
++ case EXTRACTOR_METATYPE_COMMENT:
479
++ field = M_DESCRIPTION;
480
++ break;
481
++ case EXTRACTOR_METATYPE_IMAGE_DIMENSIONS:
482
++ attr = R_RESOLUTION;
483
+ break;
484
+- default:
485
+- return;
486
+ }
487
+
488
+- if (temp != NULL)
489
+- value = temp;
490
++ String value;
491
++ struct field_state *field_state = (struct field_state *)cls;
492
++ Ref<CdsItem> item = field_state->item;
493
++ Ref<StringConverter> sc = field_state->sc;
494
++ Ref<Array<StringBase> > aux = field_state->aux;
495
++
496
++ if (field == M_MAX && attr == R_MAX && aux == nil)
497
++ {
498
++ log_debug("no match\n");
499
++ return 0;
500
++ }
501
+
502
++ value = data;
503
+ value = trim_string(value);
504
+-
505
+- if (string_ok(value))
506
++ if (!string_ok(value))
507
++ return 0;
508
++
509
++ if (field != M_MAX)
510
+ {
511
+ item->setMetadata(MT_KEYS[field].upnp, sc->convert(value));
512
+-// log_debug("Setting metadata on item: %d, %s\n", field, sc->convert(value).c_str());
513
++ log_debug("Setting metadata on item: %d, %s\n", field, sc->convert(value).c_str());
514
+ }
515
+-}
516
+
517
+-static void addResourceField(resource_attributes_t attr, EXTRACTOR_KeywordList *keywords, Ref<CdsItem> item, Ref<StringConverter> sc)
518
+-{
519
+- String value;
520
+- const char *temp = NULL;
521
+-
522
+- switch (attr)
523
++ if (attr != R_MAX)
524
+ {
525
+- case R_RESOLUTION:
526
+- temp = EXTRACTOR_extractLast(EXTRACTOR_SIZE, keywords);
527
+- break;
528
+-/* case R_SIZE:
529
+- temp = EXTRACTOR_extractLast(EXTRACTOR_SIZE, keywords);
530
+- break;
531
+-*/
532
+- default:
533
+- return;
534
++ item->getResource(0)->addAttribute(MetadataHandler::getResAttrName(attr), value);
535
++ log_debug("Setting attribute on item: %d, %s\n", attr, value.c_str());
536
+ }
537
+
538
+- if (temp != NULL)
539
+- value = temp;
540
+-
541
+- if (string_ok(value))
542
++ if (aux != nil)
543
+ {
544
+- item->getResource(0)->addAttribute(MetadataHandler::getResAttrName(attr), value);
545
++ String tmp;
546
++ for (int j = 0; j < aux->size(); j++)
547
++ {
548
++ tmp = aux->get(j);
549
++ if (string_ok(tmp))
550
++ {
551
++ if (type == getTagFromString(tmp))
552
++ {
553
++ value = sc->convert(value);
554
++ item->setAuxData(tmp, value);
555
++ log_debug(("Adding tag: %s with value %s\n", tmp.c_str(), value.c_str()));
556
++ }
557
++ }
558
++ }
559
+ }
560
++
561
++ return 0;
562
+ }
563
+
564
+
565
+
566
+-Ref<RExp> ReAudioFormat;
567
+-EXTRACTOR_ExtractorList *extractors = NULL;
568
+-bool load_libraries_failed = false;
569
++static Ref<RExp> ReAudioFormat;
570
++static EXTRACTOR_PluginList *plugins = NULL;
571
++static bool load_libraries_failed = false;
572
+
573
+ void ExtractorHandler::fillMetadata(Ref<CdsItem> item)
574
+ {
575
+ if (load_libraries_failed)
576
+ return;
577
+- Ref<Array<StringBase> > aux;
578
+- Ref<StringConverter> sc = StringConverter::i2i();
579
+-
580
+- if (! extractors)
581
++ if (! plugins)
582
+ {
583
+- extractors = EXTRACTOR_loadDefaultLibraries();
584
+- if (! extractors)
585
++ plugins = EXTRACTOR_plugin_add_defaults(EXTRACTOR_OPTION_DEFAULT_POLICY);
586
++ if (! plugins)
587
++ {
588
+ load_libraries_failed = true;
589
++ return;
590
++ }
591
+ }
592
+- EXTRACTOR_KeywordList *keywords = EXTRACTOR_getKeywords(extractors, item->getLocation().c_str());
593
+-
594
+- //EXTRACTOR_printKeywords(stdout, keywords);
595
+
596
+- for (int i = 0; i < M_MAX; i++)
597
+- addMetaField((metadata_fields_t)i, keywords, item, sc);
598
+-
599
+- for (int i = 0; i < R_MAX; i++)
600
+- addResourceField((resource_attributes_t)i, keywords, item, sc);
601
++ log_debug("processing %s\n", item->getLocation().c_str());
602
+
603
+ Ref<ConfigManager> cm = ConfigManager::getInstance();
604
+- aux = cm->getStringArrayOption(CFG_IMPORT_LIBOPTS_EXTRACTOR_AUXDATA_TAGS_LIST);
605
+- if (aux != nil)
606
+- {
607
+- String value;
608
+- String tmp;
609
+- const char *temp = NULL;
610
+-
611
+- for (int j = 0; j < aux->size(); j++)
612
+- {
613
+-
614
+- tmp = aux->get(j);
615
+- if (string_ok(tmp))
616
+- {
617
+- temp = EXTRACTOR_extractLast(getTagFromString(tmp), keywords);
618
+- if (temp != NULL)
619
+- {
620
+- value = temp;
621
+- if (string_ok(value))
622
+- {
623
+- value = sc->convert(value);
624
+- item->setAuxData(tmp, value);
625
+-// log_debug(("Adding tag: %s with value %s\n", tmp.c_str(), value.c_str()));
626
+- }
627
+- }
628
+- }
629
+- }
630
+- }
631
++ struct field_state field_state = {
632
++ .item = item,
633
++ .sc = StringConverter::i2i(),
634
++ .aux = cm->getStringArrayOption(CFG_IMPORT_LIBOPTS_EXTRACTOR_AUXDATA_TAGS_LIST),
635
++ };
636
++ EXTRACTOR_extract(plugins, item->getLocation().c_str(), NULL, 0, addField, &field_state);
637
+
638
+ if (ReAudioFormat == nil)
639
+ {
640
+@@ -379,35 +401,9 @@ void ExtractorHandler::fillMetadata(Ref<CdsItem> item)
641
+ ReAudioFormat->compile(_("([0-9]+)\\s+kbps,\\s*([0-9]+)\\s+hz,\\s*"
642
+ "(([0-9]+)h)?([0-9]+)m([0-9]+)\\s(\\S+)"), "i");
643
+ }
644
+-
645
+- /*
646
+- temp = EXTRACTOR_extractLast(EXTRACTOR_FORMAT, keywords);
647
+- log_debug("EXTRACTOR_FORMAT: %s\n", temp);
648
+-
649
+- if (temp)
650
+- {
651
+- Ref<Matcher> matcher = ReAudioFormat->match((char *)temp);
652
+- if (matcher != nil)
653
+- {
654
+- log_debug(("BR:%s FR:%s H:%s M:%s S:%s TYPE:%s\n",
655
+- matcher->group(1).c_str(),
656
+- matcher->group(2).c_str(),
657
+- matcher->group(4).c_str(),
658
+- matcher->group(5).c_str(),
659
+- matcher->group(6).c_str(),
660
+- matcher->group(7).c_str()));
661
+- }
662
+- else
663
+- {
664
+- log_debug(("format pattern unmatched!"));
665
+- }
666
+- }
667
+-
668
+- */
669
+- EXTRACTOR_freeKeywords(keywords);
670
+
671
+ // commented out for the sake of efficiency
672
+- // EXTRACTOR_removeAll(extractors);
673
++ // EXTRACTOR_plugin_remove_all(plugins);
674
+ }
675
+
676
+ Ref<IOHandler> ExtractorHandler::serveContent(Ref<CdsItem> item, int resNum, off_t *data_size)
677
mediatomb-0.12.1-mozjs185.patch
Added
619
1
2
+Index: mediatomb-0.12.1.svn2103/build/Makefile.in
3
+===================================================================
4
+--- mediatomb-0.12.1.svn2103.orig/build/Makefile.in
5
++++ mediatomb-0.12.1.svn2103/build/Makefile.in
6
+@@ -278,7 +278,7 @@ CURL_LIBS = @CURL_LIBS@
7
+ CXX = @CXX@
8
+ CXXCPP = @CXXCPP@
9
+ CXXDEPMODE = @CXXDEPMODE@
10
+-CXXFLAGS = @CXXFLAGS@
11
++CXXFLAGS = -fpermissive @CXXFLAGS@
12
+ CYGPATH_W = @CYGPATH_W@
13
+ DB_AUTOCREATE_OPTION_ENABLED = @DB_AUTOCREATE_OPTION_ENABLED@
14
+ DB_AUTOCREATE_OPTION_REQUESTED = @DB_AUTOCREATE_OPTION_REQUESTED@
15
+Index: mediatomb-0.12.1.svn2103/configure.ac
16
+===================================================================
17
+--- mediatomb-0.12.1.svn2103.orig/configure.ac
18
++++ mediatomb-0.12.1.svn2103/configure.ac
19
+@@ -1013,18 +1013,27 @@ if test "x$JS_OK" = xyes; then
20
+ LDFLAGS="-L$JS_SEARCH_LIBS $LDFLAGS_SAVE -lsmjs $ADD_PTHREAD_CFLAGS"
21
+ AC_CHECK_LIB(smjs, JS_NewObject,
22
+ [
23
+- JS_LIBS="-L$JS_SEARCH_LIBS $LDFLAGS_SAVE -lsmjs $ADD_PTHREAD_CFLAGS"
24
++ JS_LIBS="-L$JS_SEARCH_LIBS $LDFLAGS_SAVE -lsmjs185 $ADD_PTHREAD_CFLAGS"
25
+ MOZLIB=smjs
26
+ ],
27
+ [
28
+- LDFLAGS="-L$JS_SEARCH_LIBS $LDFLAGS_SAVE -lmozjs $ADD_PTHREAD_CFLAGS"
29
+- AC_CHECK_LIB(mozjs, JS_NewObject,
30
++ LDFLAGS="-L$JS_SEARCH_LIBS $LDFLAGS_SAVE -lmozjs185 $ADD_PTHREAD_CFLAGS"
31
++ AC_CHECK_LIB(mozjs185, JS_NewObject,
32
+ [
33
+- JS_LIBS="-L$JS_SEARCH_LIBS -lmozjs"
34
+- MOZLIB=mozjs
35
++ JS_LIBS="-L$JS_SEARCH_LIBS -lmozjs185"
36
++ MOZLIB=mozjs185
37
+ ],
38
+ [
39
+- AC_MSG_ERROR([Spidermonkey not found in requested location $JS_SEARCH_LIBS])
40
++ LDFLAGS="-L$JS_SEARCH_LIBS $LDFLAGS_SAVE -lmozjs $ADD_PTHREAD_CFLAGS"
41
++ AC_CHECK_LIB(mozjs, JS_NewObject,
42
++ [
43
++ JS_LIBS="-L$JS_SEARCH_LIBS -lmozjs"
44
++ MOZLIB=mozjs
45
++ ],
46
++ [
47
++ AC_MSG_ERROR([Spidermonkey not found in requested location $JS_SEARCH_LIBS])
48
++ ]
49
++ )
50
+ ]
51
+ )
52
+ ]
53
+@@ -1047,39 +1056,58 @@ if test "x$JS_OK" = xyes; then
54
+ ],
55
+ [
56
+ unset ac_cv_lib_smjs_JS_NewObject
57
+- AC_CHECK_LIB(mozjs, JS_NewObject,
58
++ AC_CHECK_LIB(mozjs185, JS_NewObject,
59
+ [
60
+- MOZLIB=mozjs
61
+- JS_LIBS="-lmozjs"
62
++ MOZLIB=mozjs185
63
++ JS_LIBS="-lmozjs185"
64
+ ],
65
+ [
66
+- LDFLAGS="-L$SEARCH_DIR_LIBS $LDFLAGS_SAVE $ADD_PTHREAD_CFLAGS"
67
+- unset ac_cv_lib_js_JS_NewObject
68
+- AC_CHECK_LIB(js, JS_NewObject,
69
+- [
70
+- JS_LIBS="-L$SEARCH_DIR_LIBS -ljs"
71
+- MOZLIB=js
72
+- ],
73
+- [
74
+- unset ac_cv_lib_smjs_JS_NewObject
75
+- AC_CHECK_LIB(smjs, JS_NewObject,
76
+- [
77
+- JS_LIBS="-L$SEARCH_DIR_LIBS -lsmjs"
78
+- MOZLIB=smjs
79
+- ],
80
+- [
81
+- LDFLAGS="-L$SEARCH_DIR_LIBS $LDFLAGS_SAVE -lmozjs"
82
+- unset ac_cv_lib_mozjs_JS_NewObject
83
+- AC_CHECK_LIB(mozjs, JS_NewObject,
84
+- [
85
+- JS_LIBS="-L$SEARCH_DIR_LIBS -lmozjs"
86
+- MOZLIB=mozjs
87
+- ],
88
+- [
89
+- JS_OK=missing
90
+- AC_MSG_RESULT(libjs/libsmjs link failed, giving up)
91
+- ]
92
+- )
93
++ unset ac_cv_lib_smjs_JS_NewObject
94
++ AC_CHECK_LIB(mozjs, JS_NewObject,
95
++ [
96
++ MOZLIB=mozjs
97
++ JS_LIBS="-lmozjs"
98
++ ],
99
++ [
100
++ LDFLAGS="-L$SEARCH_DIR_LIBS $LDFLAGS_SAVE $ADD_PTHREAD_CFLAGS"
101
++ unset ac_cv_lib_js_JS_NewObject
102
++ AC_CHECK_LIB(js, JS_NewObject,
103
++ [
104
++ JS_LIBS="-L$SEARCH_DIR_LIBS -ljs"
105
++ MOZLIB=js
106
++ ],
107
++ [
108
++ unset ac_cv_lib_smjs_JS_NewObject
109
++ AC_CHECK_LIB(smjs, JS_NewObject,
110
++ [
111
++ JS_LIBS="-L$SEARCH_DIR_LIBS -lsmjs"
112
++ MOZLIB=smjs
113
++ ],
114
++ [
115
++ LDFLAGS="-L$SEARCH_DIR_LIBS $LDFLAGS_SAVE -lmozjs185"
116
++ unset ac_cv_lib_mozjs_JS_NewObject
117
++ AC_CHECK_LIB(mozjs185, JS_NewObject,
118
++ [
119
++ JS_LIBS="-L$SEARCH_DIR_LIBS -lmozjs185"
120
++ MOZLIB=mozjs185
121
++ ],
122
++ [
123
++ LDFLAGS="-L$SEARCH_DIR_LIBS $LDFLAGS_SAVE -lmozjs"
124
++ unset ac_cv_lib_mozjs_JS_NewObject
125
++ AC_CHECK_LIB(mozjs, JS_NewObject,
126
++ [
127
++ JS_LIBS="-L$SEARCH_DIR_LIBS -lmozjs"
128
++ MOZLIB=mozjs
129
++ ],
130
++ [
131
++ JS_OK=missing
132
++ AC_MSG_RESULT(libjs/libsmjs link failed, giving up)
133
++ ]
134
++ )
135
++ ]
136
++ )
137
++ ]
138
++ )
139
+ ]
140
+ )
141
+ ]
142
+Index: mediatomb-0.12.1.svn2103/src/scripting/import_script.cc
143
+===================================================================
144
+--- mediatomb-0.12.1.svn2103.orig/src/scripting/import_script.cc
145
++++ mediatomb-0.12.1.svn2103/src/scripting/import_script.cc
146
+@@ -53,8 +53,8 @@ ImportScript::ImportScript(Ref<Runtime>
147
+ try
148
+ {
149
+ load(scriptPath);
150
+- root = JS_NewScriptObject(cx, script);
151
+- JS_AddNamedRoot(cx, &root, "ImportScript");
152
++ root = JS_NewObject(cx, NULL, script, NULL);
153
++ JS_AddNamedObjectRoot(cx, &root, "ImportScript");
154
+ }
155
+ catch (Exception ex)
156
+ {
157
+@@ -117,7 +117,7 @@ ImportScript::~ImportScript()
158
+ #endif
159
+
160
+ if (root)
161
+- JS_RemoveRoot(cx, &root);
162
++ JS_RemoveObjectRoot(cx, &root);
163
+
164
+ #ifdef JS_THREADSAFE
165
+ JS_EndRequest(cx);
166
+Index: mediatomb-0.12.1.svn2103/src/scripting/js_functions.cc
167
+===================================================================
168
+--- mediatomb-0.12.1.svn2103.orig/src/scripting/js_functions.cc
169
++++ mediatomb-0.12.1.svn2103/src/scripting/js_functions.cc
170
+@@ -49,30 +49,45 @@ using namespace zmm;
171
+ extern "C" {
172
+
173
+ JSBool
174
+-js_print(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
175
++js_print(JSContext *cx, uintN argc, jsval *argv)
176
+ {
177
+- uintN i;
178
++ uintN i, j;
179
+ JSString *str;
180
+
181
+ for (i = 0; i < argc; i++)
182
+ {
183
+- str = JS_ValueToString(cx, argv[i]);
184
++ String fmtStr;
185
++ for (j = 0; j < argc; j++)
186
++ {
187
++ if (j == i)
188
++ fmtStr = fmtStr + "S";
189
++ else
190
++ fmtStr = fmtStr + "*";
191
++ }
192
++ if(!JS_ConvertArguments(cx, 1, JS_ARGV(cx, argv), fmtStr.c_str(), &str))
193
++ {
194
++ log_debug("Could not parse input arguments\n");
195
++ return JS_TRUE;
196
++ }
197
++
198
+ if (!str)
199
+ return JS_TRUE;
200
+- argv[i] = STRING_TO_JSVAL(str);
201
+- log_js("%s\n", JS_GetStringBytes(str));
202
++
203
++ char * log_str = JS_EncodeString(cx, str);
204
++ log_js("%s\n", log_str);
205
++ JS_free(cx, log_str);
206
+ }
207
+ return JS_TRUE;
208
+ }
209
+
210
+ JSBool
211
+-js_copyObject(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
212
++js_copyObject(JSContext *cx, uintN argc, jsval *argv)
213
+ {
214
+ jsval arg;
215
+ JSObject *js_cds_obj;
216
+ JSObject *js_cds_clone_obj;
217
+
218
+- Script *self = (Script *)JS_GetPrivate(cx, obj);
219
++ Script *self = (Script *)JS_GetPrivate(cx, JS_THIS_OBJECT(cx, argv));
220
+
221
+ try
222
+ {
223
+@@ -91,7 +106,7 @@ js_copyObject(JSContext *cx, JSObject *o
224
+
225
+ self->cdsObject2jsObject(cds_obj, js_cds_clone_obj);
226
+
227
+- *rval = OBJECT_TO_JSVAL(js_cds_clone_obj);
228
++ JS_SET_RVAL(cx, argv, OBJECT_TO_JSVAL(js_cds_clone_obj));
229
+
230
+ return JS_TRUE;
231
+
232
+@@ -110,28 +125,56 @@ js_copyObject(JSContext *cx, JSObject *o
233
+ }
234
+
235
+ JSBool
236
+-js_addCdsObject(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
237
++js_addCdsObject(JSContext *cx, uintN argc, jsval *argv)
238
+ {
239
+ try
240
+ {
241
+- jsval arg;
242
+- JSString *str;
243
+- String path;
244
+- String containerclass;
245
++ // Inputs from native code
246
++ JSObject *js_cds_obj = NULL;
247
++ JSString *str = NULL;
248
++ JSString *cont = NULL;
249
+
250
+- JSObject *js_cds_obj;
251
++ String path = nil;
252
++ String containerclass = nil;
253
++
254
++ JSObject *obj = JS_THIS_OBJECT(cx, argv);
255
+ JSObject *js_orig_obj = NULL;
256
+ Ref<CdsObject> orig_object;
257
+
258
+ Ref<StringConverter> p2i;
259
+ Ref<StringConverter> i2i;
260
+-
261
++ switch (argc)
262
++ {
263
++ case 0:
264
++ log_debug("No input arguments given\n");
265
++ return JS_FALSE;
266
++ case 1:
267
++ if(!JS_ConvertArguments(cx, 1, JS_ARGV(cx, argv), "o", &js_cds_obj))
268
++ {
269
++ log_debug("Could not parse input arguments\n");
270
++ return JS_TRUE;
271
++ }
272
++ break;
273
++ case 2:
274
++ if(!JS_ConvertArguments(cx, 2, JS_ARGV(cx, argv), "oS", &js_cds_obj, &str))
275
++ {
276
++ log_debug("Could not parse input arguments\n");
277
++ return JS_TRUE;
278
++ }
279
++ break;
280
++ default:
281
++ if(!JS_ConvertArguments(cx, 3, JS_ARGV(cx, argv), "oSS", &js_cds_obj, &str, &cont))
282
++ {
283
++ log_debug("Could not parse input arguments\n");
284
++ return JS_TRUE; }
285
++ break;
286
++ }
287
+ Script *self = (Script *)JS_GetPrivate(cx, obj);
288
+
289
+ if (self == NULL)
290
+ {
291
+ log_debug("Could not retrieve class instance from global object\n");
292
+- return JS_FALSE;
293
++ return JS_TRUE;
294
+ }
295
+
296
+ if (self->whoami() == S_PLAYLIST)
297
+@@ -142,26 +185,14 @@ js_addCdsObject(JSContext *cx, JSObject
298
+ {
299
+ i2i = StringConverter::i2i();
300
+ }
301
+-
302
+- arg = argv[0];
303
+- if (!JSVAL_IS_OBJECT(arg))
304
+- return JS_TRUE;
305
+- if (!JS_ValueToObject(cx, arg, &js_cds_obj))
306
+- return JS_TRUE;
307
+-
308
+- // root it
309
+- argv[0] = OBJECT_TO_JSVAL(js_cds_obj);
310
+-
311
+- str = JS_ValueToString(cx, argv[1]);
312
+ if (!str)
313
+ path = _("/");
314
+ else
315
+- path = JS_GetStringBytes(str);
316
++ path = JS_EncodeString(cx, str);
317
+
318
+- JSString *cont = JS_ValueToString(cx, argv[2]);
319
+ if (cont)
320
+ {
321
+- containerclass = JS_GetStringBytes(cont);
322
++ containerclass = JS_EncodeString(cx, cont);
323
+ if (!string_ok(containerclass) || containerclass == "undefined")
324
+ containerclass = nil;
325
+ }
326
+@@ -177,9 +208,6 @@ js_addCdsObject(JSContext *cx, JSObject
327
+ return JS_TRUE;
328
+ }
329
+
330
+- // root it
331
+- argv[1] = OBJECT_TO_JSVAL(js_orig_obj);
332
+-
333
+ orig_object = self->jsObject2cdsObject(js_orig_obj, self->getProcessedObject());
334
+ if (orig_object == nil)
335
+ return JS_TRUE;
336
+@@ -285,8 +313,7 @@ js_addCdsObject(JSContext *cx, JSObject
337
+ JSString *str2 = JS_NewStringCopyN(cx, tmp.c_str(), tmp.length());
338
+ if (!str2)
339
+ return JS_TRUE;
340
+- *rval = STRING_TO_JSVAL(str2);
341
+-
342
++ JS_SET_RVAL(cx, argv, STRING_TO_JSVAL(str2));
343
+ return JS_TRUE;
344
+ }
345
+ catch (ServerShutdownException se)
346
+@@ -302,7 +329,7 @@ js_addCdsObject(JSContext *cx, JSObject
347
+ return JS_TRUE;
348
+ }
349
+
350
+-static JSBool convert_charset_generic(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval, charset_convert_t chr)
351
++static JSBool convert_charset_generic(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, charset_convert_t chr)
352
+ {
353
+ try
354
+ {
355
+@@ -321,7 +348,7 @@ static JSBool convert_charset_generic(JS
356
+ {
357
+ str = JS_ValueToString(cx, argv[0]);
358
+ if (str)
359
+- result = JS_GetStringBytes(str);
360
++ result = JS_EncodeString(cx, str);
361
+ }
362
+
363
+ if (result != nil)
364
+@@ -330,7 +357,7 @@ static JSBool convert_charset_generic(JS
365
+ JSString *str2 = JS_NewStringCopyN(cx, result.c_str(), result.length());
366
+ if (!str2)
367
+ return JS_TRUE;
368
+- *rval = STRING_TO_JSVAL(str2);
369
++ JS_SET_RVAL(cx, argv, STRING_TO_JSVAL(str2));
370
+ }
371
+ }
372
+ catch (ServerShutdownException se)
373
+@@ -347,24 +374,24 @@ static JSBool convert_charset_generic(JS
374
+ }
375
+
376
+
377
+-JSBool js_f2i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
378
++JSBool js_f2i(JSContext *cx, uintN argc, jsval *argv)
379
+ {
380
+- return convert_charset_generic(cx, obj, argc, argv, rval, F2I);
381
++ return convert_charset_generic(cx, JS_THIS_OBJECT(cx, argv), argc, argv, F2I);
382
+ }
383
+
384
+-JSBool js_m2i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
385
++JSBool js_m2i(JSContext *cx, uintN argc, jsval *argv)
386
+ {
387
+- return convert_charset_generic(cx, obj, argc, argv, rval, M2I);
388
++ return convert_charset_generic(cx, JS_THIS_OBJECT(cx, argv), argc, argv, M2I);
389
+ }
390
+
391
+-JSBool js_p2i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
392
++JSBool js_p2i(JSContext *cx, uintN argc, jsval *argv)
393
+ {
394
+- return convert_charset_generic(cx, obj, argc, argv, rval, P2I);
395
++ return convert_charset_generic(cx, JS_THIS_OBJECT(cx, argv), argc, argv, P2I);
396
+ }
397
+
398
+-JSBool js_j2i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
399
++JSBool js_j2i(JSContext *cx, uintN argc, jsval *argv)
400
+ {
401
+- return convert_charset_generic(cx, obj, argc, argv, rval, J2I);
402
++ return convert_charset_generic(cx, JS_THIS_OBJECT(cx, argv), argc, argv, J2I);
403
+ }
404
+
405
+ } // extern "C"
406
+Index: mediatomb-0.12.1.svn2103/src/scripting/js_functions.h
407
+===================================================================
408
+--- mediatomb-0.12.1.svn2103.orig/src/scripting/js_functions.h
409
++++ mediatomb-0.12.1.svn2103/src/scripting/js_functions.h
410
+@@ -40,18 +40,18 @@
411
+ extern "C" {
412
+
413
+ /// \brief Log output.
414
+-JSBool js_print(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
415
++JSBool js_print(JSContext *cx, uintN argc, jsval *argv);
416
+
417
+ /// \brief Adds an object to the database.
418
+-JSBool js_addCdsObject(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
419
++JSBool js_addCdsObject(JSContext *cx, uintN argc, jsval *argv);
420
+
421
+ /// \brief Makes a copy of an CDS object.
422
+-JSBool js_copyObject(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
423
++JSBool js_copyObject(JSContext *cx, uintN argc, jsval *argv);
424
+
425
+-JSBool js_f2i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
426
+-JSBool js_m2i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
427
+-JSBool js_p2i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
428
+-JSBool js_j2i(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval);
429
++JSBool js_f2i(JSContext *cx, uintN argc, jsval *argv);
430
++JSBool js_m2i(JSContext *cx, uintN argc, jsval *argv);
431
++JSBool js_p2i(JSContext *cx, uintN argc, jsval *argv);
432
++JSBool js_j2i(JSContext *cx, uintN argc, jsval *argv);
433
+
434
+ } // extern "C"
435
+
436
+Index: mediatomb-0.12.1.svn2103/src/scripting/playlist_parser_script.cc
437
+===================================================================
438
+--- mediatomb-0.12.1.svn2103.orig/src/scripting/playlist_parser_script.cc
439
++++ mediatomb-0.12.1.svn2103/src/scripting/playlist_parser_script.cc
440
+@@ -46,9 +46,9 @@ using namespace zmm;
441
+ extern "C" {
442
+
443
+ static JSBool
444
+-js_readln(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval)
445
++js_readln(JSContext *cx, uintN argc, jsval *argv)
446
+ {
447
+- PlaylistParserScript *self = (PlaylistParserScript *)JS_GetPrivate(cx, obj);
448
++ PlaylistParserScript *self = (PlaylistParserScript *)JS_GetPrivate(cx, JS_THIS_OBJECT(cx, argv));
449
+
450
+ String line;
451
+
452
+@@ -69,7 +69,7 @@ js_readln(JSContext *cx, JSObject *obj,
453
+
454
+ JSString *jsline = JS_NewStringCopyZ(cx, line.c_str());
455
+
456
+- *rval = STRING_TO_JSVAL(jsline);
457
++ JS_SET_RVAL(cx, argv, STRING_TO_JSVAL(jsline));
458
+
459
+ return JS_TRUE;
460
+ }
461
+@@ -93,8 +93,8 @@ PlaylistParserScript::PlaylistParserScri
462
+
463
+ String scriptPath = ConfigManager::getInstance()->getOption(CFG_IMPORT_SCRIPTING_PLAYLIST_SCRIPT);
464
+ load(scriptPath);
465
+- root = JS_NewScriptObject(cx, script);
466
+- JS_AddNamedRoot(cx, &root, "PlaylistScript");
467
++ root = JS_NewObject(cx, NULL, script, NULL);
468
++ JS_AddNamedObjectRoot(cx, &root, "PlaylistScript");
469
+ }
470
+ catch (Exception ex)
471
+ {
472
+@@ -245,7 +245,7 @@ PlaylistParserScript::~PlaylistParserScr
473
+ #endif
474
+
475
+ if (root)
476
+- JS_RemoveRoot(cx, &root);
477
++ JS_RemoveObjectRoot(cx, &root);
478
+
479
+ #ifdef JS_THREADSAFE
480
+ JS_EndRequest(cx);
481
+Index: mediatomb-0.12.1.svn2103/src/scripting/script.cc
482
+===================================================================
483
+--- mediatomb-0.12.1.svn2103.orig/src/scripting/script.cc
484
++++ mediatomb-0.12.1.svn2103/src/scripting/script.cc
485
+@@ -87,7 +87,7 @@ String Script::getProperty(JSObject *obj
486
+ str = JS_ValueToString(cx, val);
487
+ if (! str)
488
+ return nil;
489
+- return JS_GetStringBytes(str);
490
++ return JS_EncodeString(cx, str);
491
+ }
492
+
493
+ int Script::getBoolProperty(JSObject *obj, String name)
494
+@@ -427,14 +427,14 @@ static JSFunctionSpec js_global_function
495
+ try
496
+ {
497
+ common_script = _load(common_scr_path);
498
+- common_root = JS_NewScriptObject(cx, common_script);
499
+- JS_AddNamedRoot(cx, &common_root, "common-script");
500
++ common_root = JS_NewObject(cx, NULL, common_script, NULL);
501
++ JS_AddNamedObjectRoot(cx, &common_root, "common-script");
502
+ _execute(common_script);
503
+ }
504
+ catch (Exception e)
505
+ {
506
+ if (common_root)
507
+- JS_RemoveRoot(cx, &common_root);
508
++ JS_RemoveObjectRoot(cx, &common_root);
509
+
510
+ log_js("Unable to load %s: %s\n", common_scr_path.c_str(),
511
+ e.getMessage().c_str());
512
+@@ -460,7 +460,7 @@ Script::~Script()
513
+ JS_BeginRequest(cx);
514
+ #endif
515
+ if (common_root)
516
+- JS_RemoveRoot(cx, &common_root);
517
++ JS_RemoveObjectRoot(cx, &common_root);
518
+
519
+ /*
520
+ * scripts are unrooted and will be cleaned up by GC
521
+@@ -504,11 +504,11 @@ void Script::initGlobalObject()
522
+ static JSClass global_class =
523
+ {
524
+ "global", /* name */
525
+- JSCLASS_HAS_PRIVATE, /* flags */
526
++ JSCLASS_HAS_PRIVATE | JSCLASS_GLOBAL_FLAGS,/* flags */
527
+ JS_PropertyStub, /* add property */
528
+ JS_PropertyStub, /* del property */
529
+ JS_PropertyStub, /* get property */
530
+- JS_PropertyStub, /* set property */
531
++ JS_StrictPropertyStub, /* set property */
532
+ JS_EnumerateStandardClasses, /* enumerate */
533
+ JS_ResolveStub, /* resolve */
534
+ JS_ConvertStub, /* convert */
535
+@@ -517,7 +517,7 @@ void Script::initGlobalObject()
536
+ };
537
+
538
+ /* create the global object here */
539
+- glob = JS_NewObject(cx, &global_class, NULL, NULL);
540
++ glob = JS_NewCompartmentAndGlobalObject(cx, &global_class, NULL);
541
+ if (! glob)
542
+ throw _Exception(_("Scripting: could not initialize glboal class"));
543
+
544
+@@ -539,12 +539,12 @@ void Script::defineFunctions(JSFunctionS
545
+ throw _Exception(_("Scripting: JS_DefineFunctions failed"));
546
+ }
547
+
548
+-JSScript *Script::_load(zmm::String scriptPath)
549
++JSObject *Script::_load(zmm::String scriptPath)
550
+ {
551
+ if (glob == NULL)
552
+ initGlobalObject();
553
+
554
+- JSScript *scr;
555
++ JSObject *scr;
556
+
557
+ String scriptText = read_text_file(scriptPath);
558
+
559
+@@ -571,14 +571,11 @@ JSScript *Script::_load(zmm::String scri
560
+
561
+ void Script::load(zmm::String scriptPath)
562
+ {
563
+- if (script)
564
+- JS_DestroyScript(cx, script);
565
+-
566
+ script = _load((scriptPath));
567
+ }
568
+
569
+
570
+-void Script::_execute(JSScript *scr)
571
++void Script::_execute(JSObject *scr)
572
+ {
573
+ jsval ret_val;
574
+
575
+@@ -662,7 +659,7 @@ Ref<CdsObject> Script::jsObject2cdsObjec
576
+ JSObject *js_meta = getObjectProperty(js, _("meta"));
577
+ if (js_meta)
578
+ {
579
+- JS_AddNamedRoot(cx, &js_meta, "meta");
580
++ JS_AddNamedObjectRoot(cx, &js_meta, "meta");
581
+ /// \todo: only metadata enumerated in MT_KEYS is taken
582
+ for (int i = 0; i < M_MAX; i++)
583
+ {
584
+@@ -687,7 +684,7 @@ Ref<CdsObject> Script::jsObject2cdsObjec
585
+ }
586
+ }
587
+ }
588
+- JS_RemoveRoot(cx, &js_meta);
589
++ JS_RemoveObjectRoot(cx, &js_meta);
590
+ }
591
+
592
+ // stuff that has not been exported to js
593
+Index: mediatomb-0.12.1.svn2103/src/scripting/script.h
594
+===================================================================
595
+--- mediatomb-0.12.1.svn2103.orig/src/scripting/script.h
596
++++ mediatomb-0.12.1.svn2103/src/scripting/script.h
597
+@@ -66,8 +66,8 @@ public:
598
+ JSRuntime *rt;
599
+ JSContext *cx;
600
+ JSObject *glob;
601
+- JSScript *script;
602
+- JSScript *common_script;
603
++ JSObject *script;
604
++ JSObject *common_script;
605
+
606
+ public:
607
+ Script(zmm::Ref<Runtime> runtime);
608
+@@ -115,8 +115,8 @@ private:
609
+ JSObject *common_root;
610
+
611
+ void initGlobalObject();
612
+- JSScript *_load(zmm::String scriptPath);
613
+- void _execute(JSScript *scr);
614
++ JSObject *_load(zmm::String scriptPath);
615
++ void _execute(JSObject *scr);
616
+ zmm::Ref<StringConverter> _p2i;
617
+ zmm::Ref<StringConverter> _j2i;
618
+ zmm::Ref<StringConverter> _f2i;
619
mediatomb-svn_automake_1.12.patch
Added
15
1
2
+Index: mediatomb-0.12.1.svn2103/configure.ac
3
+===================================================================
4
+--- mediatomb-0.12.1.svn2103.orig/configure.ac
5
++++ mediatomb-0.12.1.svn2103/configure.ac
6
+@@ -33,7 +33,7 @@ AC_INIT([MediaTomb], [0.12.0], [jin@medi
7
+ AM_CONFIG_HEADER([autoconfig.h tombupnp/upnp/inc/upnpconfig.h])
8
+ AC_CONFIG_AUX_DIR(configure_aux)
9
+ AC_CONFIG_SRCDIR([src/common.h])
10
+-AM_INIT_AUTOMAKE([1.9 -Wall])
11
++AM_INIT_AUTOMAKE([1.9 -Wall -Werror -Wno-extra-portability])
12
+
13
+ if test "x${prefix}" = "xNONE"; then
14
+ prefix="${ac_default_prefix}"
15
mediatomb-0.12.1.svn2103.tar.bz2
Added
mediatomb-0.12.1.tar.gz
Deleted
Refresh
No build results available
Refresh
No rpmlint results available
Login required, please
login
or
signup
in order to comment
Request History
marguerite created request over 11 years ago
fix build on all build hosts.
mrdocs accepted request over 12 years ago
Thanks. Great work!