mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-20 23:36:38 +00:00
4261692187
Static and dynamic plugins now have the same interface. The standard --enable-static/--enable-shared toggle are sufficient.
389 lines
11 KiB
Bash
Executable file
389 lines
11 KiB
Bash
Executable file
#!/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
|
|
|
|
|