#!/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/') if [ "$prefix" != "gst" ] ; then cmdline_prefix="--prefix $prefix" else cmdline_prefix="" fi 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}],[1.0.0]) dnl required versions of gstreamer and plugins-base GST_REQUIRED=1.0.0 GSTPB_REQUIRED=1.0.0 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 AM_PROG_CC_C_O 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-1.0: gstreamer-audio-1.0 >= \$GST_REQUIRED dnl for libgstvideo-1.0: gstreamer-video-1.0 >= \$GST_REQUIRED dnl for libgsttag-1.0: gstreamer-tag-1.0 >= \$GST_REQUIRED dnl for libgstpbutils-1.0: gstreamer-pbutils-1.0 >= \$GST_REQUIRED dnl for libgstfft-1.0: gstreamer-fft-1.0 >= \$GST_REQUIRED dnl for libgstinterfaces-1.0: gstreamer-interfaces-1.0 >= \$GST_REQUIRED dnl for libgstrtp-1.0: gstreamer-rtp-1.0 >= \$GST_REQUIRED dnl for libgstrtsp-1.0: gstreamer-rtsp-1.0 >= \$GST_REQUIRED dnl etc. PKG_CHECK_MODULES(GST, [ gstreamer-1.0 >= \$GST_REQUIRED gstreamer-base-1.0 >= \$GST_REQUIRED gstreamer-controller-1.0 >= \$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 libgstreamer1.0-dev and libgstreamer-plugins-base1.0-dev. on RPM-based systems gstreamer1.0-devel, libgstreamer1.0-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-1.0/plugins" else plugindir="\\\$(libdir)/gstreamer-1.0" 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 tools/Makefile]) AC_OUTPUT EOF cat >$basedir/Makefile.am <<EOF SUBDIRS = plugins tools 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}plugin.c ${gstreplace}.c ${gstreplace}.h # 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) 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., 51 Franklin St, Fifth Floor, * Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H #include <config.h> #endif #include <gst/gst.h> #include "gstreplace.h" static gboolean plugin_init (GstPlugin * plugin) { gst_element_register (plugin, "replace", GST_RANK_NONE, GST_TYPE_REPLACE); 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}plugin.c gst-indent $basedir/plugins/${gstreplace}plugin.c rm -f $basedir/plugins/${gstreplace}plugin.c~ cat >$basedir/plugins/${gstreplace}.c <<EOF /* This file should be replaced by element source generated by * gst-element-maker, or by your own source code. To generate suitable * element source using gst-element-maker, run: * * gst-element-maker $cmdline_prefix $replace BASE_CLASS * * Where BASE_CLASS is replaced by one of the base class templates, * such as basesrc, basetransform, audiofilter, videofilter2, etc. * Then copy the resulting $gstreplace.c file over this file, and * $gstreplace.h over $gstreplace.h. */ /* The rest of this file is shim code to allow the project to compile */ EOF cat >$basedir/plugins/${gstreplace}.h <<EOF /* This file should be replaced by element header generated by * gst-element-maker, or by your own source code. To generate suitable * element header using gst-element-maker, run: * * gst-element-maker $cmdline_prefix $replace BASE_CLASS * * Where BASE_CLASS is replaced by one of the base class templates, * such as basesrc, basetransform, audiofilter, videofilter2, etc. * Then copy the resulting $gstreplace.h file over this file, and * $gstreplace.c over $gstreplace.c. */ /* The rest of this file is shim code to allow the project to compile */ #define ${GST_TYPE_REPLACE} G_TYPE_NONE EOF mkdir -p $basedir/tools cat >$basedir/tools/Makefile.am <<EOF bin_PROGRAMS = ${gst__replace} # sources used to compile this plug-in ${gst_replace}_SOURCES = ${gstreplace}.c # compiler and linker flags used to compile the program, set in configure.ac ${gst_replace}_CFLAGS = \$(GST_CFLAGS) ${gst_replace}_LDADD = \$(GST_LIBS) EOF cat >$basedir/tools/${gstreplace}.c <<EOF /* This file should be replaced by application source generated by * gst-app-maker, or by your own source code. To generate suitable * app source using gst-app-maker, run: * * gst-app-maker $cmdline_prefix $replace * * Then copy the resulting $gstreplace.c file over this file. */ /* The rest of this file is shim code to allow the project to compile */ #include <stdio.h> int main (void) { printf ("FIXME\n"); return 0; } EOF