diff options
-rw-r--r-- | media-libs/mlt/Manifest | 2 | ||||
-rw-r--r-- | media-libs/mlt/files/mlt-6.10.0-swig-underlinking.patch (renamed from media-libs/mlt/files/mlt-6.2.0-ruby-link.patch) | 14 | ||||
-rw-r--r-- | media-libs/mlt/files/mlt-6.4.1-glibc226-1.patch | 40 | ||||
-rw-r--r-- | media-libs/mlt/files/mlt-6.4.1-glibc226-2.patch | 22 | ||||
-rw-r--r-- | media-libs/mlt/files/mlt-6.4.1-libebur128-unbundle.patch | 137 | ||||
-rw-r--r-- | media-libs/mlt/files/mlt-6.4.1-opencv-3.3.patch | 33 | ||||
-rw-r--r-- | media-libs/mlt/files/mlt-6.4.1-qtopengl-1.patch | 33 | ||||
-rw-r--r-- | media-libs/mlt/files/mlt-6.4.1-qtopengl-2.patch | 61 | ||||
-rw-r--r-- | media-libs/mlt/mlt-6.10.0-r1.ebuild (renamed from media-libs/mlt/mlt-6.6.0-r1.ebuild) | 21 |
9 files changed, 16 insertions, 347 deletions
diff --git a/media-libs/mlt/Manifest b/media-libs/mlt/Manifest index 2899d9d2..b884ece8 100644 --- a/media-libs/mlt/Manifest +++ b/media-libs/mlt/Manifest @@ -1 +1 @@ -DIST mlt-6.6.0.tar.gz 1365768 BLAKE2B e2e6919d603560dac3d809740a3be2989a3b52a4e933fa67927c5c26796a5c9b35da1aedb54caa4c87133dc682d5f41455900594ebdfd6ec1516ff02d477d58f SHA512 06e553d2deb36deddd9e0f2269ee0529bf768e73d2160ee16a4cd36ed3fba5be145165f0b21278623afece046351264269509ff05f24fbbb2f163be1f4d48845 +DIST mlt-6.10.0.tar.gz 1384632 BLAKE2B 4bbcf95409df1ea1828d2b34e6d6663cf83f5672641034f775d029037505051c5490c46c69e104811aaf776794be2df95913d094319f4a2dbba0c42117abe15e SHA512 6f374f20f1dc851792c1075537cf7e977038fb557b2bd5d5816c1fc69d471947c8469c914cf662766f3b503ae819881bf2b4e1673e0f7a84309e0fb671a9de1b diff --git a/media-libs/mlt/files/mlt-6.2.0-ruby-link.patch b/media-libs/mlt/files/mlt-6.10.0-swig-underlinking.patch index 35341b4c..e84e98c1 100644 --- a/media-libs/mlt/files/mlt-6.2.0-ruby-link.patch +++ b/media-libs/mlt/files/mlt-6.10.0-swig-underlinking.patch @@ -1,18 +1,12 @@ -The build system tries to link to installed system libraries first, which -fails because the ABI has changed... - +diff --git a/src/swig/ruby/build b/src/swig/ruby/build +index 2d0cc0d..1a8aee7 100755 --- a/src/swig/ruby/build +++ b/src/swig/ruby/build -@@ -5,9 +5,11 @@ - exit 0 - end - system( "ln -sf ../mlt.i" ) -+system( "ln -sf ../../framework/libmlt.so" ) -+system( "ln -sf ../../mlt++/libmlt++.so" ) +@@ -8,6 +8,6 @@ system( "ln -sf ../mlt.i" ) system( "swig -c++ -ruby -I../../mlt++ -I../.. mlt.i" ) $CFLAGS = $CFLAGS.to_s + " -I../.. " + (ENV.has_key?('CXXFLAGS')? ENV['CXXFLAGS'] : '') $CXXFLAGS = $CXXFLAGS.to_s + " -I../.. " + (ENV.has_key?('CXXFLAGS')? ENV['CXXFLAGS'] : '') -$LDFLAGS = $LDFLAGS.to_s + " -L../../mlt++ -lmlt++" -+$LIBS += " -lmlt++ -lmlt -lstdc++" ++$LDFLAGS = $LDFLAGS.to_s + " -L../../mlt++ -lmlt++ -L../../framework -lmlt" create_makefile('mlt') system( "make V=1" ) diff --git a/media-libs/mlt/files/mlt-6.4.1-glibc226-1.patch b/media-libs/mlt/files/mlt-6.4.1-glibc226-1.patch deleted file mode 100644 index 2f486939..00000000 --- a/media-libs/mlt/files/mlt-6.4.1-glibc226-1.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 2125e3955a0d0be61571cf43b674f74b4b93c6f8 Mon Sep 17 00:00:00 2001 -From: Dan Dennedy <dan@dennedy.org> -Date: Sat, 26 Aug 2017 18:31:47 -0700 -Subject: [PATCH] Fix #248 xlocale.h was removed in glibc 2.26. -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -Reported by schnitzeltony on Andreas Müller. -Patch by Dave Plater. ---- - src/framework/mlt_property.h | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -diff --git a/src/framework/mlt_property.h b/src/framework/mlt_property.h -index 404d513f..043f530b 100644 ---- a/src/framework/mlt_property.h -+++ b/src/framework/mlt_property.h -@@ -3,7 +3,7 @@ - * \brief Property class declaration - * \see mlt_property_s - * -- * Copyright (C) 2003-2014 Meltytech, LLC -+ * Copyright (C) 2003-2017 Meltytech, LLC - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public -@@ -31,7 +31,11 @@ - #endif - - #if defined(__GLIBC__) || defined(__APPLE__) || (__FreeBSD_version >= 900506) --#include <xlocale.h> -+# if GLIBC_MINOR >= 26 && !defined(APPLE) -+# include <locale.h> -+# else -+# include <xlocale.h> -+# endif - #else - typedef char* locale_t; - #endif diff --git a/media-libs/mlt/files/mlt-6.4.1-glibc226-2.patch b/media-libs/mlt/files/mlt-6.4.1-glibc226-2.patch deleted file mode 100644 index d992ee32..00000000 --- a/media-libs/mlt/files/mlt-6.4.1-glibc226-2.patch +++ /dev/null @@ -1,22 +0,0 @@ -From fbf6a5187776f2f392cf258935ff49e4c0e87024 Mon Sep 17 00:00:00 2001 -From: Dan Dennedy <dan@dennedy.org> -Date: Wed, 30 Aug 2017 09:08:16 -0700 -Subject: [PATCH] Fix glib test macros to include locale.h. - ---- - src/framework/mlt_property.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/framework/mlt_property.h b/src/framework/mlt_property.h -index 043f530b..3ecebd67 100644 ---- a/src/framework/mlt_property.h -+++ b/src/framework/mlt_property.h -@@ -31,7 +31,7 @@ - #endif - - #if defined(__GLIBC__) || defined(__APPLE__) || (__FreeBSD_version >= 900506) --# if GLIBC_MINOR >= 26 && !defined(APPLE) -+# if __GLIBC_MINOR__ >= 26 && !defined(__APPLE__) - # include <locale.h> - # else - # include <xlocale.h> diff --git a/media-libs/mlt/files/mlt-6.4.1-libebur128-unbundle.patch b/media-libs/mlt/files/mlt-6.4.1-libebur128-unbundle.patch deleted file mode 100644 index e9aaa25c..00000000 --- a/media-libs/mlt/files/mlt-6.4.1-libebur128-unbundle.patch +++ /dev/null @@ -1,137 +0,0 @@ -From fad1df2bc8efc2881867e510443547fddf5d620b Mon Sep 17 00:00:00 2001 -From: Brian Matherly <code@brianmatherly.com> -Date: Sun, 19 Feb 2017 23:35:17 -0600 -Subject: [PATCH 1/2] Use external libebur128 if detected. - ---- - src/modules/plus/Makefile | 7 +++++-- - src/modules/plus/configure | 11 +++++++++++ - 2 files changed, 16 insertions(+), 2 deletions(-) - -diff --git a/src/modules/plus/Makefile b/src/modules/plus/Makefile -index 90067a56..351e7b76 100644 ---- a/src/modules/plus/Makefile -+++ b/src/modules/plus/Makefile -@@ -22,14 +22,17 @@ OBJS = consumer_blipflash.o \ - filter_sepia.o \ - producer_blipflash.o \ - producer_count.o \ -- transition_affine.o \ -- ebur128/ebur128.o -+ transition_affine.o - - ifdef USE_FFTW - OBJS += filter_dance.o \ - filter_fft.o - endif - -+ifdef USE_INTERNAL_LIBEBUR128 -+ OBJS += ebur128/ebur128.o -+endif -+ - SRCS := $(OBJS:.o=.c) - - all: $(TARGET) -diff --git a/src/modules/plus/configure b/src/modules/plus/configure -index fbd49807..e38464b4 100755 ---- a/src/modules/plus/configure -+++ b/src/modules/plus/configure -@@ -16,5 +16,16 @@ then - echo "- fftw not found: disable fft and dance filters" - fi - -+ pkg-config libebur128 -+ if [ $? -eq 0 ] -+ then -+ echo "CFLAGS += $(pkg-config --cflags libebur128)" >> config.mak -+ echo "LDFLAGS += $(pkg-config --libs libebur128)" >> config.mak -+ else -+ echo "- libebur128 not found: using internal libebur128" -+ echo "USE_INTERNAL_LIBEBUR128=1" >> config.mak -+ echo "CFLAGS += -DUSE_INTERNAL_LIBEBUR128" >> config.mak -+ fi -+ - exit 0 - fi - -From 9951883b895eb920b7f67ea67a0753d8dea21a9e Mon Sep 17 00:00:00 2001 -From: Brian Matherly <code@brianmatherly.com> -Date: Mon, 20 Feb 2017 08:15:52 -0600 -Subject: [PATCH 2/2] Fix include directives for ebur128 filters. - ---- - src/modules/plus/Makefile | 2 +- - src/modules/plus/configure | 2 ++ - src/modules/plus/filter_dynamic_loudness.c | 2 +- - src/modules/plus/filter_loudness.c | 2 +- - src/modules/plus/filter_loudness_meter.c | 2 +- - 5 files changed, 6 insertions(+), 4 deletions(-) - -diff --git a/src/modules/plus/Makefile b/src/modules/plus/Makefile -index 351e7b76..366bca19 100644 ---- a/src/modules/plus/Makefile -+++ b/src/modules/plus/Makefile -@@ -1,4 +1,4 @@ --CFLAGS += -I../.. -Iebur128/queue -+CFLAGS += -I../.. - - LDFLAGS += -L../../framework -lmlt -lm -lpthread - -diff --git a/src/modules/plus/configure b/src/modules/plus/configure -index e38464b4..59662ca0 100755 ---- a/src/modules/plus/configure -+++ b/src/modules/plus/configure -@@ -19,12 +19,14 @@ then - pkg-config libebur128 - if [ $? -eq 0 ] - then -+ echo "- libebur128 found: using external libebur128" - echo "CFLAGS += $(pkg-config --cflags libebur128)" >> config.mak - echo "LDFLAGS += $(pkg-config --libs libebur128)" >> config.mak - else - echo "- libebur128 not found: using internal libebur128" - echo "USE_INTERNAL_LIBEBUR128=1" >> config.mak - echo "CFLAGS += -DUSE_INTERNAL_LIBEBUR128" >> config.mak -+ echo "CFLAGS += -Iebur128 -Iebur128/queue" >> config.mak - fi - - exit 0 -diff --git a/src/modules/plus/filter_dynamic_loudness.c b/src/modules/plus/filter_dynamic_loudness.c -index 07551f14..99c83051 100644 ---- a/src/modules/plus/filter_dynamic_loudness.c -+++ b/src/modules/plus/filter_dynamic_loudness.c -@@ -22,7 +22,7 @@ - #include <stdlib.h> - #include <string.h> - #include <math.h> --#include "ebur128/ebur128.h" -+#include <ebur128.h> - - typedef struct - { -diff --git a/src/modules/plus/filter_loudness.c b/src/modules/plus/filter_loudness.c -index 8b74b5c9..0614fecc 100644 ---- a/src/modules/plus/filter_loudness.c -+++ b/src/modules/plus/filter_loudness.c -@@ -22,7 +22,7 @@ - #include <stdlib.h> - #include <string.h> - #include <math.h> --#include "ebur128/ebur128.h" -+#include <ebur128.h> - - #define MAX_RESULT_SIZE 512 - -diff --git a/src/modules/plus/filter_loudness_meter.c b/src/modules/plus/filter_loudness_meter.c -index 9926f945..6c81d19f 100644 ---- a/src/modules/plus/filter_loudness_meter.c -+++ b/src/modules/plus/filter_loudness_meter.c -@@ -22,7 +22,7 @@ - #include <stdlib.h> - #include <string.h> - #include <math.h> --#include "ebur128/ebur128.h" -+#include <ebur128.h> - - typedef struct - { diff --git a/media-libs/mlt/files/mlt-6.4.1-opencv-3.3.patch b/media-libs/mlt/files/mlt-6.4.1-opencv-3.3.patch deleted file mode 100644 index 0a3732da..00000000 --- a/media-libs/mlt/files/mlt-6.4.1-opencv-3.3.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 622ff3acf6256739bd547ade1ceca0e6df5022e6 Mon Sep 17 00:00:00 2001 -From: BoboopTeam <BoboopTeam@users.noreply.github.com> -Date: Thu, 7 Sep 2017 22:14:48 +0200 -Subject: [PATCH] module: opencv: Remove deleted cv::Tracker::create() - -This static method is no longer present in OpenCV API, this workaround should fix compilation against OpenCV 3.3.0 and newer ---- - src/modules/opencv/filter_opencv_tracker.cpp | 10 +++++++--- - 1 file changed, 7 insertions(+), 3 deletions(-) - -diff --git a/src/modules/opencv/filter_opencv_tracker.cpp b/src/modules/opencv/filter_opencv_tracker.cpp -index 48ffb56b..3cfc07d2 100644 ---- a/src/modules/opencv/filter_opencv_tracker.cpp -+++ b/src/modules/opencv/filter_opencv_tracker.cpp -@@ -111,11 +111,15 @@ static void analyze( mlt_filter filter, cv::Mat cvFrame, private_data* data, int - data->algo = mlt_properties_get( filter_properties, "algo" ); - if ( data->algo == NULL || !strcmp(data->algo, "" ) ) - { -- data->tracker = cv::Tracker::create( "KCF" ); -+ data->tracker = cv::TrackerKCF::create(); -+ } -+ else if (!strcmp(data->algo, "MIL" )) -+ { -+ data->tracker = cv::TrackerMIL::create(); - } - else -- { -- data->tracker = cv::Tracker::create( data->algo ); -+ { -+ data->tracker = cv::TrackerBoosting::create(); - } - - // Discard previous results diff --git a/media-libs/mlt/files/mlt-6.4.1-qtopengl-1.patch b/media-libs/mlt/files/mlt-6.4.1-qtopengl-1.patch deleted file mode 100644 index c00e8d05..00000000 --- a/media-libs/mlt/files/mlt-6.4.1-qtopengl-1.patch +++ /dev/null @@ -1,33 +0,0 @@ -From d2a04ae77a6b2c82a2e12b9fb631beb8f825946d Mon Sep 17 00:00:00 2001 -From: Alberto Villa <avilla@FreeBSD.org> -Date: Sat, 24 Dec 2016 05:07:54 +0100 -Subject: [PATCH] Move Qt OpenGL include(s) to Qt 4 specific code - -Only Qt 4 code references those files (QMutex and QWaitCondition are -not OpenGL files, but still they're only useful in Qt 4 code). ---- - src/modules/qt/consumer_qglsl.cpp | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/src/modules/qt/consumer_qglsl.cpp b/src/modules/qt/consumer_qglsl.cpp -index 74840602..ca0cf383 100644 ---- a/src/modules/qt/consumer_qglsl.cpp -+++ b/src/modules/qt/consumer_qglsl.cpp -@@ -20,13 +20,14 @@ - #include "common.h" - #include <framework/mlt.h> - #include <QApplication> --#include <QGLWidget> --#include <QMutex> --#include <QWaitCondition> - #include <QtGlobal> - - #if QT_VERSION < QT_VERSION_CHECK(5, 0, 0) - -+#include <QGLWidget> -+#include <QMutex> -+#include <QWaitCondition> -+ - class GLWidget : public QGLWidget - { - private: diff --git a/media-libs/mlt/files/mlt-6.4.1-qtopengl-2.patch b/media-libs/mlt/files/mlt-6.4.1-qtopengl-2.patch deleted file mode 100644 index 5f98f12b..00000000 --- a/media-libs/mlt/files/mlt-6.4.1-qtopengl-2.patch +++ /dev/null @@ -1,61 +0,0 @@ -From 6ba6cab570d824641f63c66b355ba28f0721811f Mon Sep 17 00:00:00 2001 -From: Alberto Villa <avilla@FreeBSD.org> -Date: Sat, 24 Dec 2016 05:10:20 +0100 -Subject: [PATCH] Avoid looking for Qt5OpenGL module - -The OpenGL-related code needed by qimage was moved to Qt5Gui, which -allows to safely remove the dependency on Qt 5 builds. - -Build tested on FreeBSD. ---- - src/modules/qt/configure | 20 +------------------- - 1 file changed, 1 insertion(+), 19 deletions(-) - -diff --git a/src/modules/qt/configure b/src/modules/qt/configure -index 24803baf..7475dc09 100755 ---- a/src/modules/qt/configure -+++ b/src/modules/qt/configure -@@ -107,14 +107,6 @@ else - then - echo QTCXXFLAGS=-I$qt_includedir -I$qt_includedir/QtCore -I$qt_includedir/QtGui -I$qt_includedir/QtXml -I$qt_includedir/QtSvg -I$qt_includedir/QtWidgets >> config.mak - echo QTLIBS=-Wl,-rpath-link,"$qt_libdir" -L"$qt_libdir" -lQt5Core -lQt5Gui -lQt5Xml -lQt5Svg -lQt5Widgets >> config.mak -- if [ -f "$qt_libdir/libQt5OpenGL.so" ] || [ -f "$qt_libdir/libQt5OpenGL.a" ] -- then -- echo QTCXXFLAGS+=-I$qt_includedir/QtOpenGL >> config.mak -- echo QTLIBS+=-lQt5OpenGL >> config.mak -- else -- echo "- Qt5OpenGL not found: disabling" -- without_opengl=true -- fi - # Qt5 on OS X - elif [ -d "$qt_libdir/QtWidgets.framework" ] - then -@@ -123,11 +115,10 @@ else - -I$qt_includedir/QtGui -I$qt_libdir/QtGui.framework/Headers \ - -I$qt_includedir/QtXml -I$qt_libdir/QtXml.framework/Headers \ - -I$qt_includedir/QtSvg -I$qt_libdir/QtSvg.framework/Headers \ -- -I$qt_includedir/QtOpenGL -I$qt_libdir/QtOpenGL.framework/Headers \ - -I$qt_includedir/QtWidgets -I$qt_libdir/QtWidgets.framework/Headers \ - >> config.mak - echo QTLIBS=-F"$qt_libdir" -framework QtCore -framework QtGui -framework \ -- QtXml -framework QtSvg -framework QtOpenGL -framework QtWidgets >> config.mak -+ QtXml -framework QtSvg -framework QtWidgets >> config.mak - # Qt4 on OS X - elif [ -d "$qt_libdir/QtGui.framework" ] - then -@@ -151,15 +142,6 @@ else - without_kde=true - echo QTCXXFLAGS=$(pkg-config --cflags Qt5Core Qt5Gui Qt5Xml Qt5Svg Qt5Widgets) >> config.mak - echo QTLIBS=$(pkg-config --libs Qt5Core Qt5Gui Qt5Xml Qt5Svg Qt5Widgets) >> config.mak -- pkg-config --exists 'Qt5OpenGL' -- if [ $? -eq 0 ] -- then -- echo QTCXXFLAGS+=$(pkg-config --cflags Qt5OpenGL) >> config.mak -- echo QTLIBS+=$(pkg-config --libs Qt5OpenGL) >> config.mak -- else -- echo "- Qt5OpenGL not found: disabling" -- without_opengl=true -- fi - else - pkg-config --exists 'QtGui >= 4' - if [ $? -eq 0 ] diff --git a/media-libs/mlt/mlt-6.6.0-r1.ebuild b/media-libs/mlt/mlt-6.10.0-r1.ebuild index 10e85677..195e30f6 100644 --- a/media-libs/mlt/mlt-6.6.0-r1.ebuild +++ b/media-libs/mlt/mlt-6.10.0-r1.ebuild @@ -2,12 +2,13 @@ # Distributed under the terms of the GNU General Public License v2 EAPI=6 + PYTHON_COMPAT=( python2_7 ) # this ebuild currently only supports installing ruby bindings for a single ruby version # so USE_RUBY must contain only a single value (the latest stable) as the ebuild calls # /usr/bin/${USE_RUBY} directly USE_RUBY="ruby23" -inherit eutils flag-o-matic multilib python-single-r1 ruby-single toolchain-funcs +inherit flag-o-matic python-single-r1 ruby-single toolchain-funcs DESCRIPTION="Open source multimedia framework for television broadcasting" HOMEPAGE="https://www.mltframework.org/" @@ -17,7 +18,7 @@ LICENSE="GPL-3" SLOT="0" KEYWORDS="amd64 ~x86 ~x86-fbsd ~amd64-linux ~x86-linux" IUSE="compressed-lumas cpu_flags_x86_mmx cpu_flags_x86_sse cpu_flags_x86_sse2 debug ffmpeg fftw frei0r -gtk jack kdenlive libav libsamplerate lua melt opencv opengl python qt5 rtaudio ruby sdl sdl2 vdpau xine xml" +gtk jack kdenlive libav libsamplerate lua melt opencv opengl python qt5 rtaudio ruby sdl vdpau xine xml" # java perl php tcl vidstab IUSE="${IUSE} kernel_linux" @@ -27,7 +28,7 @@ REQUIRED_USE="python? ( ${PYTHON_REQUIRED_USE} )" COMMON_DEPEND=" >=media-libs/libebur128-1.2.2 ffmpeg? ( - libav? ( media-video/libav:0=[vdpau?] ) + libav? ( >=media-video/libav-12:0=[vdpau?] ) !libav? ( media-video/ffmpeg:0=[vdpau?] ) ) fftw? ( sci-libs/fftw:3.0= ) @@ -57,15 +58,11 @@ COMMON_DEPEND=" x11-libs/libX11 ) rtaudio? ( - media-libs/rtaudio + >=media-libs/rtaudio-4.1.2 kernel_linux? ( media-libs/alsa-lib ) ) ruby? ( ${RUBY_DEPS} ) sdl? ( - >=media-libs/libsdl-1.2.10[X,opengl,video] - >=media-libs/sdl-image-1.2.4 - ) - sdl2? ( media-libs/libsdl2[X,opengl,video] media-libs/sdl2-image ) @@ -94,6 +91,8 @@ RDEPEND="${COMMON_DEPEND} DOCS=( AUTHORS ChangeLog NEWS README docs/{framework,melt,mlt{++,-xml}}.txt ) +PATCHES=( "${FILESDIR}"/${P}-swig-underlinking.patch ) + pkg_setup() { use python && python-single-r1_pkg_setup } @@ -122,14 +121,13 @@ src_configure() { --enable-motion-est --target-arch=$(tc-arch) --disable-kde + --disable-sdl --disable-swfdec $(use_enable debug) $(use compressed-lumas && echo ' --luma-compress') $(use_enable cpu_flags_x86_sse sse) $(use_enable cpu_flags_x86_sse2 sse2) $(use_enable gtk gtk2) - $(use_enable sdl) - $(use_enable sdl2) $(use_enable jack jackrack) $(use_enable ffmpeg avformat) $(use ffmpeg && echo ' --avformat-swscale') @@ -141,6 +139,7 @@ src_configure() { $(use_enable libsamplerate resample) $(use_enable rtaudio) $(use vdpau && echo ' --avformat-vdpau') + $(use_enable sdl sdl2) $(use_enable xml) $(use_enable xine) $(use_enable kdenlive) @@ -221,4 +220,6 @@ src_install() { if use qt5 && use melt; then dosym melt usr/bin/qmelt fi + + # TODO: java perl php tcl } |