diff options
author | David Schleef <ds@schleef.org> | 2010-12-15 12:45:38 -0800 |
---|---|---|
committer | David Schleef <ds@schleef.org> | 2010-12-15 12:47:02 -0800 |
commit | 7ae4aaaee6831b9c8bad3c25e99d735435a2a1e0 (patch) | |
tree | f14fa42fe2350df361e280e1ec63a69eb04f8305 /tools/gst-element-maker | |
parent | c8d9cc5770667828bf4fd56db810851b4636bf29 (diff) | |
download | gstreamer-plugins-bad-7ae4aaaee6831b9c8bad3c25e99d735435a2a1e0.tar.gz |
element-maker: Clean up directory
Diffstat (limited to 'tools/gst-element-maker')
-rwxr-xr-x | tools/gst-element-maker | 362 |
1 files changed, 362 insertions, 0 deletions
diff --git a/tools/gst-element-maker b/tools/gst-element-maker new file mode 100755 index 000000000..816385d96 --- /dev/null +++ b/tools/gst-element-maker @@ -0,0 +1,362 @@ +#!/bin/sh + + +prefix=gst +templatedir=element-templates + +while [ "$1" ] ; do + case $1 in + --help) + cat <<-EOF +Usage: element-maker [OPTIONS] ELEMENT_NAME BASE_CLASS +Create a GStreamer element that subclasses BASE_CLASS. +Options: + --help Print this information + --prefix PREFIX Use PREFIX instead of "gst" +Example: 'element-maker my_element basetransform' will create the files + gstmyelement.c and gstmyelement.h that implement GstMyElement, a + subclass of GstBaseTransform, as an element named myelement. +EOF + exit 0 + ;; + --prefix) + shift + prefix=$1 + ;; + -*) + echo Unknown option: $1 + exit 1 + ;; + *) + if [ "$name" = "" ]; then + name=$1 + elif [ "$class" = "" ]; then + class=$1 + else + echo Ignored: $1 + fi + esac + shift +done + +if [ "$name" = "" -o "$class" = "" ] ; then + echo "Usage: element-maker [OPTIONS] ELEMENT_NAME BASE_CLASS" + exit 1 +fi + +if [ ! -f "element-templates/$class" ] ; then + echo "Template file for $class not found." + exit 1 +fi + + +PREFIX=$(echo $prefix | sed -e 's/\(.*\)/\U\1/') +NAME=$(echo $name | sed -e 's/\(.*\)/\U\1/') +Prefix=$(echo $prefix | sed -e 's/_\(.\)/\U\1/g' -e 's/^\(.\)/\U\1/') +Name=$(echo $name | sed -e 's/_\(.\)/\U\1/g' -e 's/^\(.\)/\U\1/') + +GST_IS_REPLACE=${PREFIX}_IS_${NAME} +GST_REPLACE=${PREFIX}_${NAME} +GST_TYPE_REPLACE=${PREFIX}_TYPE_${NAME} +GstReplace=${Prefix}${Name} +gst_replace=${prefix}_${name} +gstreplace=${prefix}$(echo $name | sed -e 's/_//g') +replace=$(echo $name | sed -e 's/_//g') + +if [ "$REAL_NAME" = "" ] ; then + REAL_NAME=FIXME +fi +if [ "$EMAIL_ADDRESS" = "" ] ; then + EMAIL_ADDRESS=fixme@example.com +fi + + +pkg=`grep -A 10000 '^% pkg-config' $templatedir/$class | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1` +GST_TYPE_BASE_REPLACE=`grep -A 10000 '^% TYPE_CLASS_NAME' $templatedir/$class | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1` +GstBaseReplace=`grep -A 10000 '^% ClassName' $templatedir/$class | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1` +pads=`grep -A 10000 '^% pads' $templatedir/$class | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1` + +generate () +{ + +cat <<-EOF +/* GStreamer + * Copyright (C) $(date +%Y) $REAL_NAME <$EMAIL_ADDRESS> + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Library General Public + * License as published by the Free Software Foundation; either + * version 2 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Library General Public License for more details. + * + * You should have received a copy of the GNU Library General Public + * License along with this library; if not, write to the + * Free Software Foundation, Inc., 59 Temple Place - Suite 330, + * Boston, MA 02111-1307, USA. + */ +EOF + +cat <<-EOF +/** + * SECTION:element-$gstreplace + * + * The $replace element does FIXME stuff. + * + * <refsect2> + * <title>Example launch line</title> + * |[ + * gst-launch -v fakesrc ! $replace ! FIXME ! fakesink + * ]| + * FIXME Describe what the pipeline does. + * </refsect2> + */ +EOF + +#grep -A 10000 '^% copyright' $templatedir/base | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 + +cat <<EOF + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +EOF + +grep -A 10000 '^% includes' $templatedir/base | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 +grep -A 10000 '^% includes' $templatedir/gobject | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 +grep -A 10000 '^% includes' $templatedir/$class | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 + +cat <<EOF +#include "gstreplace.h" + +/* prototypes */ + +EOF + +grep -A 10000 '^% prototypes' $templatedir/base | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 +grep -A 10000 '^% prototypes' $templatedir/gobject | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 +grep -A 10000 '^% prototypes' $templatedir/$class | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 +for each in $pads +do + grep -A 10000 '^% prototypes' $templatedir/$each | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 +done + +cat <<EOF + +enum +{ + PROP_0 +}; + +/* pad templates */ + +EOF + +for each in $pads +do + grep -A 10000 '^% pad-template' $templatedir/$each | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 +done + +cat <<EOF + +/* class initialization */ + +GST_BOILERPLATE (GstReplace, gst_replace, GstBaseReplace, + GST_TYPE_BASE_REPLACE); + +static void +gst_replace_base_init (gpointer g_class) +{ + GstElementClass *element_class = GST_ELEMENT_CLASS (g_class); + +EOF + +for each in $pads +do + grep -A 10000 '^% base-init' $templatedir/$each | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 +done + +cat <<EOF + + gst_element_class_set_details_simple (element_class, "FIXME Long name", + "Generic", "FIXME Description", "$REAL_NAME <$EMAIL_ADDRESS>"); +} + +static void +gst_replace_class_init (GstReplaceClass * klass) +{ +EOF +grep -A 10000 '^% declare-class' $templatedir/base | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 +grep -A 10000 '^% declare-class' $templatedir/gobject | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 +grep -A 10000 '^% declare-class' $templatedir/$class | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 + +echo + +grep -A 10000 '^% set-methods' $templatedir/base | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 +grep -A 10000 '^% set-methods' $templatedir/gobject | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 +grep -A 10000 '^% set-methods' $templatedir/$class | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 + +cat <<EOF + +} + +static void +gst_replace_init (GstReplace * replace, GstReplaceClass * replace_class) +{ +EOF + +for each in $pads +do + grep -A 10000 '^% instance-init' $templatedir/$each | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 +done + + +cat <<EOF +} +EOF + + +grep -A 10000 '^% methods' $templatedir/base | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 +grep -A 10000 '^% methods' $templatedir/gobject | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 +grep -A 10000 '^% methods' $templatedir/$class | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 +for each in $pads +do + grep -A 10000 '^% methods' $templatedir/$each | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 +done + + +cat <<EOF + +static gboolean +plugin_init (GstPlugin * plugin) +{ + + gst_element_register (plugin, "replace", GST_RANK_NONE, + gst_replace_get_type ()); + + return TRUE; +} + +#ifndef VERSION +#define VERSION "0.0.FIXME" +#endif +#ifndef PACKAGE +#define PACKAGE "FIXME_package" +#endif +#ifndef PACKAGE_NAME +#define PACKAGE_NAME "FIXME_package_name" +#endif +#ifndef GST_PACKAGE_ORIGIN +#define GST_PACKAGE_ORIGIN "http://FIXME.org/" +#endif + +GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, + GST_VERSION_MINOR, + "replace", + "FIXME plugin description", + plugin_init, VERSION, "LGPL", PACKAGE_NAME, GST_PACKAGE_ORIGIN) + +EOF + + +} + +generate_header () +{ + +grep -A 10000 '^% copyright' $templatedir/base | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 + +cat <<EOF +#ifndef _GST_REPLACE_H_ +#define _GST_REPLACE_H_ + +EOF + +grep -A 10000 '^% includes' $templatedir/base | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 +grep -A 10000 '^% includes' $templatedir/gobject | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 +grep -A 10000 '^% includes' $templatedir/$class | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 + +cat <<EOF + +G_BEGIN_DECLS + +#define GST_TYPE_REPLACE \ + (gst_replace_get_type()) +#define GST_REPLACE(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_REPLACE,GstReplace)) +#define GST_REPLACE_CLASS(klass) \ + (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_REPLACE,GstReplaceClass)) +#define GST_IS_REPLACE(obj) \ + (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_REPLACE)) +#define GST_IS_REPLACE_CLASS(obj) \ + (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_REPLACE)) + +typedef struct _GstReplace GstReplace; +typedef struct _GstReplaceClass GstReplaceClass; + +struct _GstReplace +{ + GstBaseReplace base_replace; + +EOF + +for each in $pads +do + grep -A 10000 '^% instance-members' $templatedir/$each | tail -n +2|grep -m 1 -B 10000 '^%'|head -n -1 +done + +cat <<EOF +}; + +struct _GstReplaceClass +{ + GstBaseReplaceClass base_replace_class; +}; + +GType gst_replace_get_type (void); + +G_END_DECLS + +#endif +EOF + + +} + + +generate | sed \ + -e "s/GST_BASE_REPLACE/$GST_BASE_REPLACE/g" \ + -e "s/GST_TYPE_BASE_REPLACE/$GST_TYPE_BASE_REPLACE/g" \ + -e "s/GstBaseReplace/$GstBaseReplace/g" \ + -e "s/GST_IS_REPLACE/$GST_IS_REPLACE/g" \ + -e "s/GST_REPLACE/$GST_REPLACE/g" \ + -e "s/GST_TYPE_REPLACE/$GST_TYPE_REPLACE/g" \ + -e "s/GstReplace/$GstReplace/g" \ + -e "s/gst_replace/$gst_replace/g" \ + -e "s/gstreplace/$gstreplace/g" \ + -e "s/replace/$replace/g" >$gstreplace.c + +generate_header | sed \ + -e "s/GST_BASE_REPLACE/$GST_BASE_REPLACE/g" \ + -e "s/GST_TYPE_BASE_REPLACE/$GST_TYPE_BASE_REPLACE/g" \ + -e "s/GstBaseReplace/$GstBaseReplace/g" \ + -e "s/GST_IS_REPLACE/$GST_IS_REPLACE/g" \ + -e "s/GST_REPLACE/$GST_REPLACE/g" \ + -e "s/GST_TYPE_REPLACE/$GST_TYPE_REPLACE/g" \ + -e "s/GstReplace/$GstReplace/g" \ + -e "s/gst_replace/$gst_replace/g" \ + -e "s/gstreplace/$gstreplace/g" \ + -e "s/replace/$replace/g" >$gstreplace.h + +gst-indent $gstreplace.c + +echo pkg is $pkg + +gcc -Wall $(pkg-config --cflags gstreamer-0.10 $pkg) -c -o $gstreplace.o $gstreplace.c +gcc -shared -o $gstreplace.so $gstreplace.o $(pkg-config --libs gstreamer-0.10 $pkg) + + |