mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-11-30 13:41:48 +00:00
355 lines
9.8 KiB
Bash
Executable file
355 lines
9.8 KiB
Bash
Executable file
#!/bin/sh
|
|
|
|
|
|
prefix=gst
|
|
templatedir=element-templates
|
|
|
|
while [ "$1" ] ; do
|
|
case $1 in
|
|
--help)
|
|
cat <<-EOF
|
|
Usage: $(basename "$0") [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: '$(basename "$0") 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: $(basename "$0") [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.
|
|
|
|
NOTE:
|
|
plugins can be installed locally by using "\$HOME" as prefix:
|
|
|
|
$ meson --prefix="\$HOME" build/
|
|
$ ninja -C build/ install
|
|
|
|
However be advised that the automatic scan of plugins in the user home
|
|
directory won't work under gst-build devenv.
|
|
EOF
|
|
|
|
cat >$basedir/meson.build <<EOF
|
|
project('${gst__replace}', 'c',
|
|
version : '0.1.0',
|
|
default_options : [ 'warning_level=1',
|
|
'buildtype=debugoptimized' ])
|
|
|
|
core_conf = configuration_data()
|
|
core_conf.set('PACKAGE', '"@0@"'.format(meson.project_name()))
|
|
core_conf.set('VERSION', '"@0@"'.format(meson.project_version()))
|
|
|
|
configure_file(output : 'config.h', configuration : core_conf)
|
|
|
|
configinc = include_directories('.')
|
|
|
|
common_args = ['-DHAVE_CONFIG_H']
|
|
|
|
gst_req = '>= 1.0.0'
|
|
|
|
# Check for the required version of GStreamer core (and gst-plugins-base)
|
|
#
|
|
# If you need libraries from gst-plugins-base here, also add:
|
|
# for libgstaudio-1.0: gstreamer-audio-1.0
|
|
# for libgstvideo-1.0: gstreamer-video-1.0
|
|
# for libgsttag-1.0: gstreamer-tag-1.0
|
|
# for libgstpbutils-1.0: gstreamer-pbutils-1.0
|
|
# for libgstfft-1.0: gstreamer-fft-1.0
|
|
# for libgstinterfaces-1.0: gstreamer-interfaces-1.0
|
|
# for libgstrtp-1.0: gstreamer-rtp-1.0
|
|
# for libgstrtsp-1.0: gstreamer-rtsp-1.0
|
|
# etc.
|
|
gst_dep = dependency('gstreamer-1.0', version : gst_req,
|
|
fallback : ['gstreamer', 'gst_dep'])
|
|
gst_base_dep = dependency('gstreamer-base-1.0', version : gst_req,
|
|
fallback : ['gstreamer', 'gst_base_dep'])
|
|
|
|
# Set the directory where plugins should be installed.
|
|
#
|
|
# If the prefix is the user home directory, adjust the plugin installation
|
|
# path so that GStreamer can find it. Requires meson >= 0.53.0
|
|
fs = import('fs')
|
|
if fs.is_samepath(get_option('prefix'), '~')
|
|
plugins_install_dir = '@0@/.local/share/gstreamer-1.0/plugins'.format(get_option('prefix'))
|
|
else
|
|
plugins_install_dir = '@0@/gstreamer-1.0'.format(get_option('libdir'))
|
|
endif
|
|
|
|
plugin_deps = [gst_dep, gst_base_dep]
|
|
tool_deps = [gst_dep]
|
|
|
|
subdir('plugins')
|
|
subdir('tools')
|
|
EOF
|
|
|
|
|
|
mkdir -p $basedir/plugins
|
|
|
|
cat >$basedir/plugins/meson.build <<EOF
|
|
lib_args = common_args + []
|
|
|
|
# sources used to compile this plug-in
|
|
plugin_sources = [
|
|
'${gstreplace}plugin.c',
|
|
'${gstreplace}.c',
|
|
'${gstreplace}.h'
|
|
]
|
|
|
|
shlib = shared_library('${gstreplace}',
|
|
plugin_sources,
|
|
c_args : lib_args,
|
|
include_directories: [configinc],
|
|
dependencies : plugin_deps,
|
|
gnu_symbol_visibility : 'hidden',
|
|
install : true,
|
|
install_dir : plugins_install_dir,
|
|
)
|
|
|
|
# Make this library usable as a Meson subproject.
|
|
gst_${replace}_dep = declare_dependency(
|
|
include_directories: include_directories('.'),
|
|
link_with : shlib)
|
|
|
|
pkg_mod = import('pkgconfig')
|
|
pkg_mod.generate(
|
|
name : '${gst__replace}',
|
|
filebase : '${gst__replace}',
|
|
description : 'Meson sample project.',
|
|
subdirs : 'src',
|
|
libraries : shlib,
|
|
version : '"@0@"'.format(meson.project_version()),
|
|
)
|
|
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 || echo "Warning: could not run gst-indent on the generated code." 1>&2
|
|
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/meson.build <<EOF
|
|
exe_args = common_args + []
|
|
|
|
# sources used to compile this program
|
|
tool_sources = [
|
|
'${gstreplace}.c',
|
|
]
|
|
|
|
executable('${gstreplace}',
|
|
tool_sources,
|
|
install: true,
|
|
c_args : exe_args,
|
|
include_directories: [configinc],
|
|
dependencies : tool_deps,
|
|
)
|
|
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
|