summaryrefslogtreecommitdiff
path: root/tools
diff options
context:
space:
mode:
authorDavid Schleef <ds@schleef.org>2012-02-19 15:54:39 -0800
committerDavid Schleef <ds@schleef.org>2012-02-19 15:54:39 -0800
commitf3456aeaa121569a462518cb3f4d15b62a500d9c (patch)
tree02df9d56e02936a8cdfd9a6caddb7073acdffa8f /tools
parentc26575e4f00e6c11f38476bcf6e47f282d57f0e6 (diff)
downloadgstreamer-plugins-bad-f3456aeaa121569a462518cb3f4d15b62a500d9c.tar.gz
gst-project-maker: Create autotools project
This is a replacement for gst-template that creates an entire autotools project (customized to package name), and populates it with the source for a GStreamer plugin (but no plugin features, those come from gst-element-maker). Fixes: #665727.
Diffstat (limited to 'tools')
-rwxr-xr-xtools/gst-project-maker324
1 files changed, 324 insertions, 0 deletions
diff --git a/tools/gst-project-maker b/tools/gst-project-maker
new file mode 100755
index 000000000..c2acc0846
--- /dev/null
+++ b/tools/gst-project-maker
@@ -0,0 +1,324 @@
+#!/bin/sh
+
+
+prefix=gst
+templatedir=element-templates
+
+while [ "$1" ] ; do
+ case $1 in
+ --help)
+ cat <<-EOF
+Usage: gst-project-maker [OPTIONS] PROJECT_NAME
+Create an autotools project based on GStreamer from a template.
+Options:
+ --help Print this information
+ --prefix PREFIX Use PREFIX instead of "gst"
+Example: 'gst-project-maker my_project' will create the project gst-my-project.
+EOF
+ exit 0
+ ;;
+ --prefix)
+ shift
+ prefix=$1
+ ;;
+ -*)
+ echo Unknown option: $1
+ exit 1
+ ;;
+ *)
+ if [ "$name" = "" ]; then
+ name=$1
+ else
+ echo Ignored: $1
+ fi
+ esac
+ shift
+done
+
+if [ "$name" = "" ] ; then
+ echo "Usage: gst-project-maker [OPTIONS] PROJECT_NAME"
+ 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}
+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
+
+
+
+basedir=`pwd`/$gst__replace
+
+rm -rf $basedir
+mkdir $basedir
+
+cat >$basedir/AUTHORS <<EOF
+$REAL_NAME <$EMAIL_ADDRESS>
+EOF
+
+cat >$basedir/COPYING <<EOF
+Put your license here.
+EOF
+
+cat >$basedir/ChangeLog <<EOF
+Put your changelog here.
+EOF
+
+cat >$basedir/NEWS <<EOF
+News about your project.
+EOF
+
+cat >$basedir/README <<EOF
+README for your project.
+EOF
+
+cat >$basedir/autogen.sh <<EOF
+#!/bin/sh
+# you can either set the environment variables AUTOCONF, AUTOHEADER, AUTOMAKE,
+# ACLOCAL, AUTOPOINT and/or LIBTOOLIZE to the right versions, or leave them
+# unset and get the defaults
+
+autoreconf --verbose --force --install --make || {
+ echo 'autogen.sh failed';
+ exit 1;
+}
+
+./configure || {
+ echo 'configure failed';
+ exit 1;
+}
+
+echo
+echo "Now type 'make' to compile this module."
+echo
+EOF
+chmod 755 $basedir/autogen.sh
+
+cat >$basedir/configure.ac <<EOF
+dnl required version of autoconf
+AC_PREREQ([2.53])
+
+dnl TODO: fill in your package name and package version here
+AC_INIT([${gst__replace}],[0.10.0])
+
+dnl required versions of gstreamer and plugins-base
+GST_REQUIRED=0.10.16
+GSTPB_REQUIRED=0.10.16
+
+AC_CONFIG_SRCDIR([plugins/${gstreplace}.c])
+AC_CONFIG_HEADERS([config.h])
+
+dnl required version of automake
+AM_INIT_AUTOMAKE([1.10])
+AC_CONFIG_MACRO_DIR([m4])
+
+dnl enable mainainer mode by default
+AM_MAINTAINER_MODE([enable])
+
+dnl check for tools (compiler etc.)
+AC_PROG_CC
+
+dnl required version of libtool
+LT_PREREQ([2.2.6])
+LT_INIT
+
+dnl give error and exit if we don't have pkgconfig
+AC_CHECK_PROG(HAVE_PKGCONFIG, pkg-config, [ ], [
+ AC_MSG_ERROR([You need to have pkg-config installed!])
+])
+
+dnl Check for the required version of GStreamer core (and gst-plugins-base)
+dnl This will export GST_CFLAGS and GST_LIBS variables for use in Makefile.am
+dnl
+dnl If you need libraries from gst-plugins-base here, also add:
+dnl for libgstaudio-0.10: gstreamer-audio-0.10 >= \$GST_REQUIRED
+dnl for libgstvideo-0.10: gstreamer-video-0.10 >= \$GST_REQUIRED
+dnl for libgsttag-0.10: gstreamer-tag-0.10 >= \$GST_REQUIRED
+dnl for libgstpbutils-0.10: gstreamer-pbutils-0.10 >= \$GST_REQUIRED
+dnl for libgstfft-0.10: gstreamer-fft-0.10 >= \$GST_REQUIRED
+dnl for libgstinterfaces-0.10: gstreamer-interfaces-0.10 >= \$GST_REQUIRED
+dnl for libgstrtp-0.10: gstreamer-rtp-0.10 >= \$GST_REQUIRED
+dnl for libgstrtsp-0.10: gstreamer-rtsp-0.10 >= \$GST_REQUIRED
+dnl etc.
+PKG_CHECK_MODULES(GST, [
+ gstreamer-0.10 >= \$GST_REQUIRED
+ gstreamer-base-0.10 >= \$GST_REQUIRED
+ gstreamer-controller-0.10 >= \$GST_REQUIRED
+], [
+ AC_SUBST(GST_CFLAGS)
+ AC_SUBST(GST_LIBS)
+], [
+ AC_MSG_ERROR([
+ You need to install or upgrade the GStreamer development
+ packages on your system. On debian-based systems these are
+ libgstreamer0.10-dev and libgstreamer-plugins-base0.10-dev.
+ on RPM-based systems gstreamer0.10-devel, libgstreamer0.10-devel
+ or similar. The minimum version required is \$GST_REQUIRED.
+ ])
+])
+
+dnl check if compiler understands -Wall (if yes, add -Wall to GST_CFLAGS)
+AC_MSG_CHECKING([to see if compiler understands -Wall])
+save_CFLAGS="\$CFLAGS"
+CFLAGS="\$CFLAGS -Wall"
+AC_COMPILE_IFELSE([AC_LANG_PROGRAM([ ], [ ])], [
+ GST_CFLAGS="\$GST_CFLAGS -Wall"
+ AC_MSG_RESULT([yes])
+], [
+ AC_MSG_RESULT([no])
+])
+
+dnl set the plugindir where plugins should be installed (for plugins/Makefile.am)
+if test "x\${prefix}" = "x\$HOME"; then
+ plugindir="\$HOME/.gstreamer-0.10/plugins"
+else
+ plugindir="\\\$(libdir)/gstreamer-0.10"
+fi
+AC_SUBST(plugindir)
+
+dnl set proper LDFLAGS for plugins
+GST_PLUGIN_LDFLAGS='-module -avoid-version -export-symbols-regex [_]*\(gst_\|Gst\|GST_\).*'
+AC_SUBST(GST_PLUGIN_LDFLAGS)
+
+AC_CONFIG_FILES([Makefile plugins/Makefile])
+AC_OUTPUT
+EOF
+
+cat >$basedir/Makefile.am <<EOF
+SUBDIRS = plugins
+
+EXTRA_DIST = autogen.sh
+
+ACLOCAL_AMFLAGS = -I m4
+EOF
+
+mkdir -p $basedir/m4
+
+mkdir -p $basedir/plugins
+
+cat >$basedir/plugins/Makefile.am <<EOF
+plugin_LTLIBRARIES = lib$gstreplace.la
+
+# sources used to compile this plug-in
+lib${gstreplace}_la_SOURCES = ${gstreplace}.c
+
+# compiler and linker flags used to compile this plugin, set in configure.ac
+lib${gstreplace}_la_CFLAGS = \$(GST_CFLAGS)
+lib${gstreplace}_la_LIBADD = \$(GST_LIBS)
+lib${gstreplace}_la_LDFLAGS = \$(GST_PLUGIN_LDFLAGS)
+lib${gstreplace}_la_LIBTOOLFLAGS = --tag=disable-static
+
+EOF
+
+
+generate()
+{
+cat <<EOF
+/*
+ * GStreamer
+ * Copyright (C) $(date +%Y) $REAL_NAME <$EMAIL_ADDRESS>
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+ * to deal in the Software without restriction, including without limitation
+ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+ * and/or sell copies of the Software, and to permit persons to whom the
+ * Software is furnished to do so, subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be included in
+ * all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+ * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Alternatively, the contents of this file may be used under the
+ * GNU Lesser General Public License Version 2.1 (the "LGPL"), in
+ * which case the following provisions apply instead of the ones
+ * mentioned above:
+ *
+ * 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <gst/gst.h>
+
+static gboolean
+plugin_init (GstPlugin * plugin)
+{
+#if 0
+ gst_element_register (replace, "replace", GST_RANK_NONE,
+ GST_TYPE_REPLACE_TEMPLATE);
+#endif
+
+ return TRUE;
+}
+
+GST_PLUGIN_DEFINE (
+ GST_VERSION_MAJOR,
+ GST_VERSION_MINOR,
+ "replace",
+ "FIXME Template plugin",
+ plugin_init,
+ VERSION,
+ "LGPL", /* FIXME */
+ "GStreamer",
+ "http://gstreamer.net/"
+)
+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" >$basedir/plugins/$gstreplace.c
+
+gst-indent $basedir/plugins/$gstreplace.c
+rm -f $basedir/plugins/$gstreplace.c~
+
+