forked from Mirrors/freeswitch
4ce0f57a8b
We now break out each module and component of FreeSWITCH into a separate individually-installable package. For each package with executables or modules, we also build a package that includes the stripped debugging symbols so that users can be helpful when they discover bugs in FreeSWITCH. As of this commit, we successfully build 263 distinct binary packages starting from a clean minimal image on both Debian Sid and Debian Squeeze. To keep this manageable, we include a program that generates the various Debian packaging files from a consolidated description of the modules and their metadata. The program can even generate this configuration file by walking the FreeSWITCH source tree. To provide a smooth user experience, we provide meta-packages that install sensible sets of modules and other components. All files are installed into the traditional and customary Linux directories that you would expect in accordance with the Filesystem Hierarchy Standard (FHS). This commit also adds support for running FreeSWITCH as a forked systemd service in Debian. For more information about the technical details of the source packaging, how to build the binary packages from source, and how you can contribute, please read debian/README.source. To learn about how this packaging affects you as a user and how to use the finished Debian packages, read debian/README.Debian. Signed-off-by: Travis Cross <tc@traviscross.com>
740 lines
21 KiB
Bash
Executable File
740 lines
21 KiB
Bash
Executable File
#!/bin/bash
|
|
##### -*- mode:shell-script; indent-tabs-mode:nil; sh-basic-offset:2 -*-
|
|
##### Author: Travis Cross <tc@traviscross.com>
|
|
|
|
mod_dir="../src/mod"
|
|
conf_dir="../conf"
|
|
fs_description="FreeSWITCH is a scalable open source cross-platform telephony platform designed to route and interconnect popular communication protocols using audio, video, text or any other form of media."
|
|
mod_build_depends="."
|
|
avoid_mods=(
|
|
applications/mod_fax
|
|
applications/mod_ladspa
|
|
applications/mod_limit
|
|
applications/mod_mp4
|
|
applications/mod_osp
|
|
applications/mod_rad_auth
|
|
applications/mod_skel
|
|
asr_tts/mod_cepstral
|
|
codecs/mod_com_g729
|
|
codecs/mod_sangoma_codec
|
|
codecs/mod_skel_codec
|
|
codecs/mod_voipcodecs
|
|
endpoints/mod_gsmopen
|
|
endpoints/mod_h323
|
|
endpoints/mod_khomp
|
|
endpoints/mod_opal
|
|
endpoints/mod_portaudio
|
|
endpoints/mod_reference
|
|
endpoints/mod_unicall
|
|
event_handlers/mod_snmp
|
|
formats/mod_portaudio_stream
|
|
formats/mod_vlc
|
|
languages/mod_java
|
|
languages/mod_managed
|
|
languages/mod_spidermonkey
|
|
languages/mod_yaml
|
|
sdk/autotools
|
|
xml_int/mod_xml_ldap
|
|
)
|
|
|
|
err () {
|
|
echo "$0 error: $1" >&2
|
|
exit 1
|
|
}
|
|
|
|
xread() {
|
|
local xIFS="$IFS"
|
|
IFS=''
|
|
read $@
|
|
local ret=$?
|
|
IFS="$xIFS"
|
|
return $ret
|
|
}
|
|
|
|
avoid_mod_filter () {
|
|
for x in "${avoid_mods[@]}"; do
|
|
[ "$1" = "$x" ] && return 1
|
|
done
|
|
return 0
|
|
}
|
|
|
|
modconf_filter () {
|
|
while xread line; do
|
|
[ "$1" = "$line" ] && return 0
|
|
done < modules.conf
|
|
return 1
|
|
}
|
|
|
|
mod_filter () {
|
|
if test -f modules.conf; then
|
|
modconf_filter $@
|
|
else
|
|
avoid_mod_filter $@
|
|
fi
|
|
}
|
|
|
|
map_fs_modules () {
|
|
local filterfn="$1" percatfns="$2" permodfns="$3"
|
|
for x in $mod_dir/*; do
|
|
if test -d $x; then
|
|
category=${x##*/} category_path=$x
|
|
for f in $percatfns; do $f; done
|
|
for y in $x/*; do
|
|
module_name=${y##*/} module_path=$y
|
|
module=$category/$module_name
|
|
if $filterfn $category/$module; then
|
|
[ -f ${y}/module ] && . ${y}/module
|
|
for f in $permodfns; do $f; done
|
|
fi
|
|
unset module_name module_path module
|
|
done
|
|
unset category category_path
|
|
fi
|
|
done
|
|
}
|
|
|
|
map_modules() {
|
|
local filterfn="$1" percatfns="$2" permodfns="$3"
|
|
for x in $parse_dir/*; do
|
|
test -d $x || continue
|
|
category=${x##*/} category_path=$x
|
|
for f in $percatfns; do $f; done
|
|
for y in $x/*; do
|
|
test -f $y || continue
|
|
module=${y##*/} module_path=$y
|
|
$filterfn $category/$module || continue
|
|
module="" category="" module_name=""
|
|
description="" long_description=""
|
|
build_depends="" depends="" recommends="" suggests=""
|
|
distro_conflicts=""
|
|
. $y
|
|
[ -n "$description" ] || description="$module_name"
|
|
[ -n "$long_description" ] || description="Adds ${module_name}."
|
|
for f in $permodfns; do $f; done
|
|
unset \
|
|
module module_name module_path \
|
|
description long_description \
|
|
build_depends depends recommends suggests \
|
|
distro_conflicts
|
|
done
|
|
unset category category_path
|
|
done
|
|
}
|
|
|
|
map_confs () {
|
|
local fs="$1"
|
|
for x in $conf_dir/*; do
|
|
test ! -d $x && continue
|
|
conf=${x##*/} conf_dir=$x
|
|
for f in $fs; do $f; done
|
|
unset conf conf_dir
|
|
done
|
|
}
|
|
|
|
print_source_control () {
|
|
cat <<EOF
|
|
Source: freeswitch
|
|
Section: comm
|
|
Priority: optional
|
|
Maintainer: Travis Cross <tc@traviscross.com>
|
|
Build-Depends:
|
|
# for debian
|
|
debhelper (>= 8.0.0),
|
|
# bootstrapping
|
|
automake (>= 1.9), autoconf, libtool,
|
|
# core build
|
|
build-essential, wget, pkg-config,
|
|
# configure options
|
|
libssl-dev, unixodbc-dev,
|
|
libncurses5-dev, libjpeg8-dev,
|
|
python-dev, erlang-dev,
|
|
# documentation
|
|
doxygen,
|
|
# for APR (not essential for build)
|
|
uuid-dev, libexpat1-dev, libgdbm-dev, libdb-dev,
|
|
# used by many modules
|
|
bison, zlib1g-dev,
|
|
# module build-depends
|
|
$(debian_wrap "${mod_build_depends}")
|
|
Standards-Version: 3.9.2
|
|
Homepage: http://freeswitch.org/
|
|
Vcs-Git: git://git.freeswitch.org/freeswitch
|
|
Vcs-Browser: http://git.freeswitch.org/git/freeswitch/
|
|
|
|
EOF
|
|
}
|
|
|
|
print_core_control () {
|
|
cat <<EOF
|
|
Package: freeswitch
|
|
Architecture: any
|
|
Depends: \${shlibs:Depends}, \${perl:Depends}, \${misc:Depends}
|
|
Recommends:
|
|
Suggests: freeswitch-dbg
|
|
Description: Cross-Platform Scalable Multi-Protocol Soft Switch
|
|
$(debian_wrap "${fs_description}")
|
|
.
|
|
This package contains the FreeSWITCH core.
|
|
|
|
Package: freeswitch-meta-bare
|
|
Architecture: any
|
|
Depends: \${misc:Depends}, freeswitch (= \${binary:Version})
|
|
Recommends:
|
|
freeswitch-doc (= \${binary:Version}),
|
|
freeswitch-htdocs-slim (= \${binary:Version}),
|
|
freeswitch-mod-commands (= \${binary:Version}),
|
|
freeswitch-init (= \${binary:Version}),
|
|
freeswitch-music (= \${binary:Version}),
|
|
freeswitch-sounds (= \${binary:Version})
|
|
Suggests:
|
|
Description: Cross-Platform Scalable Multi-Protocol Soft Switch
|
|
$(debian_wrap "${fs_description}")
|
|
.
|
|
This is a meta package containing a very bare FreeSWITCH install.
|
|
|
|
Package: freeswitch-meta-default
|
|
Architecture: any
|
|
Depends: \${misc:Depends}, freeswitch (= \${binary:Version}),
|
|
freeswitch-mod-commands (= \${binary:Version}),
|
|
freeswitch-mod-conference (= \${binary:Version}),
|
|
freeswitch-mod-db (= \${binary:Version}),
|
|
freeswitch-mod-dptools (= \${binary:Version}),
|
|
freeswitch-mod-fifo (= \${binary:Version}),
|
|
freeswitch-mod-hash (= \${binary:Version}),
|
|
freeswitch-mod-spandsp (= \${binary:Version}),
|
|
freeswitch-mod-voicemail (= \${binary:Version}),
|
|
freeswitch-mod-dialplan-xml (= \${binary:Version}),
|
|
freeswitch-mod-loopback (= \${binary:Version}),
|
|
freeswitch-mod-sofia (= \${binary:Version}),
|
|
freeswitch-mod-local-stream (= \${binary:Version}),
|
|
freeswitch-mod-native-file (= \${binary:Version}),
|
|
freeswitch-mod-tone-stream (= \${binary:Version}),
|
|
freeswitch-mod-lua (= \${binary:Version}),
|
|
freeswitch-mod-console (= \${binary:Version}),
|
|
freeswitch-mod-say-en (= \${binary:Version})
|
|
Recommends:
|
|
freeswitch-init (= \${binary:Version}),
|
|
freeswitch-meta-codecs (= \${binary:Version}),
|
|
freeswitch-music (= \${binary:Version}),
|
|
freeswitch-sounds (= \${binary:Version})
|
|
Suggests:
|
|
freeswitch-mod-cidlookup (= \${binary:Version}),
|
|
freeswitch-mod-curl (= \${binary:Version}),
|
|
freeswitch-mod-directory (= \${binary:Version}),
|
|
freeswitch-mod-enum (= \${binary:Version}),
|
|
freeswitch-mod-spy (= \${binary:Version}),
|
|
freeswitch-mod-valet-parking (= \${binary:Version})
|
|
Description: Cross-Platform Scalable Multi-Protocol Soft Switch
|
|
$(debian_wrap "${fs_description}")
|
|
.
|
|
This is a meta package containing a reasonable basic FreeSWITCH
|
|
install.
|
|
|
|
Package: freeswitch-meta-vanilla
|
|
Architecture: any
|
|
Depends: \${misc:Depends}, freeswitch (= \${binary:Version}),
|
|
freeswitch-mod-console (= \${binary:Version}),
|
|
freeswitch-mod-logfile (= \${binary:Version}),
|
|
freeswitch-mod-enum (= \${binary:Version}),
|
|
freeswitch-mod-cdr-csv (= \${binary:Version}),
|
|
freeswitch-mod-event-socket (= \${binary:Version}),
|
|
freeswitch-mod-sofia (= \${binary:Version}),
|
|
freeswitch-mod-loopback (= \${binary:Version}),
|
|
freeswitch-mod-commands (= \${binary:Version}),
|
|
freeswitch-mod-conference (= \${binary:Version}),
|
|
freeswitch-mod-db (= \${binary:Version}),
|
|
freeswitch-mod-dptools (= \${binary:Version}),
|
|
freeswitch-mod-expr (= \${binary:Version}),
|
|
freeswitch-mod-fifo (= \${binary:Version}),
|
|
freeswitch-mod-hash (= \${binary:Version}),
|
|
freeswitch-mod-voicemail (= \${binary:Version}),
|
|
freeswitch-mod-esf (= \${binary:Version}),
|
|
freeswitch-mod-fsv (= \${binary:Version}),
|
|
freeswitch-mod-cluechoo (= \${binary:Version}),
|
|
freeswitch-mod-valet-parking (= \${binary:Version}),
|
|
freeswitch-mod-httapi (= \${binary:Version}),
|
|
freeswitch-mod-dialplan-xml (= \${binary:Version}),
|
|
freeswitch-mod-dialplan-asterisk (= \${binary:Version}),
|
|
freeswitch-mod-spandsp (= \${binary:Version}),
|
|
freeswitch-mod-g723-1 (= \${binary:Version}),
|
|
freeswitch-mod-g729 (= \${binary:Version}),
|
|
freeswitch-mod-amr (= \${binary:Version}),
|
|
freeswitch-mod-ilbc (= \${binary:Version}),
|
|
freeswitch-mod-speex (= \${binary:Version}),
|
|
freeswitch-mod-h26x (= \${binary:Version}),
|
|
freeswitch-mod-siren (= \${binary:Version}),
|
|
freeswitch-mod-sndfile (= \${binary:Version}),
|
|
freeswitch-mod-native-file (= \${binary:Version}),
|
|
freeswitch-mod-local-stream (= \${binary:Version}),
|
|
freeswitch-mod-tone-stream (= \${binary:Version}),
|
|
freeswitch-mod-lua (= \${binary:Version}),
|
|
freeswitch-mod-say-en (= \${binary:Version}),
|
|
Recommends:
|
|
freeswitch-init (= \${binary:Version}),
|
|
freeswitch-music (= \${binary:Version}),
|
|
freeswitch-sounds (= \${binary:Version}),
|
|
freeswitch-conf-vanilla (= \${binary:Version}),
|
|
Suggests:
|
|
freeswitch-mod-spidermonkey (= \${binary:Version}),
|
|
Description: Cross-Platform Scalable Multi-Protocol Soft Switch
|
|
$(debian_wrap "${fs_description}")
|
|
.
|
|
This is a meta package containing the FreeSWITCH modules required to
|
|
run the vanilla example configuration.
|
|
|
|
Package: freeswitch-meta-codecs
|
|
Architecture: any
|
|
Depends: \${misc:Depends}, freeswitch (= \${binary:Version}),
|
|
freeswitch-mod-amr (= \${binary:Version}),
|
|
freeswitch-mod-amrwb (= \${binary:Version}),
|
|
freeswitch-mod-bv (= \${binary:Version}),
|
|
freeswitch-mod-celt (= \${binary:Version}),
|
|
freeswitch-mod-codec2 (= \${binary:Version}),
|
|
freeswitch-mod-g723-1 (= \${binary:Version}),
|
|
freeswitch-mod-g729 (= \${binary:Version}),
|
|
freeswitch-mod-h26x (= \${binary:Version}),
|
|
freeswitch-mod-ilbc (= \${binary:Version}),
|
|
freeswitch-mod-mp4v (= \${binary:Version}),
|
|
freeswitch-mod-opus (= \${binary:Version}),
|
|
freeswitch-mod-silk (= \${binary:Version}),
|
|
freeswitch-mod-siren (= \${binary:Version}),
|
|
freeswitch-mod-speex (= \${binary:Version}),
|
|
freeswitch-mod-theora (= \${binary:Version})
|
|
Description: Cross-Platform Scalable Multi-Protocol Soft Switch
|
|
$(debian_wrap "${fs_description}")
|
|
.
|
|
This is a meta package containing most FreeSWITCH codecs.
|
|
|
|
Package: freeswitch-dbg
|
|
Section: debug
|
|
Architecture: any
|
|
Depends: \${misc:Depends}, freeswitch (= \${binary:Version})
|
|
Description: debugging symbols for FreeSWITCH
|
|
$(debian_wrap "${fs_description}")
|
|
.
|
|
This package contains debugging symbols for FreeSWITCH.
|
|
|
|
Package: freeswitch-dev
|
|
Section: libdevel
|
|
Architecture: any
|
|
Depends: \${misc:Depends}, freeswitch
|
|
Description: development libraries and header files for FreeSWITCH
|
|
$(debian_wrap "${fs_description}")
|
|
.
|
|
This package contains include files for FreeSWITCH.
|
|
|
|
Package: freeswitch-doc
|
|
Architecture: all
|
|
Description: documentation for FreeSWITCH
|
|
$(debian_wrap "${fs_description}")
|
|
.
|
|
This package contains Doxygen-produce documentation for FreeSWITCH.
|
|
|
|
Package: freeswitch-init
|
|
Architecture: all
|
|
Depends: \${misc:Depends},
|
|
freeswitch-sysvinit (= \${binary:Version}),
|
|
freeswitch-systemd (= \${binary:Version})
|
|
Description: FreeSWITCH startup configuration
|
|
$(debian_wrap "${fs_description}")
|
|
.
|
|
This package contains the system startup configuration for
|
|
FreeSWITCH.
|
|
|
|
Package: freeswitch-sysvinit
|
|
Architecture: all
|
|
Depends: \${misc:Depends}, lsb-base (>= 3.0-6)
|
|
Description: FreeSWITCH SysV init script
|
|
$(debian_wrap "${fs_description}")
|
|
.
|
|
This package contains the SysV init script for FreeSWITCH.
|
|
|
|
Package: freeswitch-systemd
|
|
Architecture: all
|
|
Depends: \${misc:Depends}
|
|
Description: FreeSWITCH systemd configuration
|
|
$(debian_wrap "${fs_description}")
|
|
.
|
|
This package contains the systemd configuration for FreeSWITCH.
|
|
|
|
## misc
|
|
|
|
Package: freeswitch-htdocs-slim
|
|
Architecture: all
|
|
Depends: \${misc:Depends}
|
|
Description: FreeSWITCH htdocs slim player
|
|
$(debian_wrap "${fs_description}")
|
|
.
|
|
This package contains the slim SWF player for FreeSWITCH.
|
|
|
|
## sounds
|
|
|
|
Package: freeswitch-music
|
|
Architecture: all
|
|
Depends: \${misc:Depends},
|
|
freeswitch-music-default (= \${binary:Version})
|
|
Description: Music on hold audio for FreeSWITCH
|
|
$(debian_wrap "${fs_description}")
|
|
.
|
|
This package contains music on hold audio for FreeSWITCH.
|
|
|
|
Package: freeswitch-music-default
|
|
Architecture: all
|
|
Depends: \${misc:Depends},
|
|
freeswitch-music-default-8k (= \${binary:Version})
|
|
Recommends:
|
|
freeswitch-music-default-16k (= \${binary:Version}),
|
|
freeswitch-music-default-32k (= \${binary:Version}),
|
|
freeswitch-music-default-48k (= \${binary:Version})
|
|
Description: Music on hold audio for FreeSWITCH
|
|
$(debian_wrap "${fs_description}")
|
|
.
|
|
This package contains the default music on hold audio for FreeSWITCH.
|
|
|
|
Package: freeswitch-sounds
|
|
Architecture: all
|
|
Depends: \${misc:Depends},
|
|
freeswitch-sounds-en (= \${binary:Version})
|
|
Description: Sounds for FreeSWITCH
|
|
$(debian_wrap "${fs_description}")
|
|
.
|
|
This package contains sounds for FreeSWITCH.
|
|
|
|
Package: freeswitch-sounds-en
|
|
Architecture: all
|
|
Depends: \${misc:Depends},
|
|
freeswitch-sounds-en-us (= \${binary:Version})
|
|
Description: English sounds for FreeSWITCH
|
|
$(debian_wrap "${fs_description}")
|
|
.
|
|
This package contains the English sounds for FreeSWITCH.
|
|
|
|
Package: freeswitch-sounds-en-us
|
|
Architecture: all
|
|
Depends: \${misc:Depends},
|
|
freeswitch-sounds-en-us-callie (= \${binary:Version})
|
|
Description: US English sounds for FreeSWITCH
|
|
$(debian_wrap "${fs_description}")
|
|
.
|
|
This package contains the US/English sounds for FreeSWITCH.
|
|
|
|
Package: freeswitch-sounds-en-us-callie
|
|
Architecture: all
|
|
Depends: \${misc:Depends},
|
|
freeswitch-sounds-en-us-callie-8k (= \${binary:Version})
|
|
Recommends:
|
|
freeswitch-sounds-en-us-callie-16k (= \${binary:Version}),
|
|
freeswitch-sounds-en-us-callie-32k (= \${binary:Version}),
|
|
freeswitch-sounds-en-us-callie-48k (= \${binary:Version})
|
|
Description: US English sounds for FreeSWITCH
|
|
$(debian_wrap "${fs_description}")
|
|
.
|
|
This package contains the Callie English sounds for FreeSWITCH.
|
|
|
|
EOF
|
|
}
|
|
|
|
print_mod_control () {
|
|
cat <<EOF
|
|
Package: freeswitch-${module_name//_/-}
|
|
Architecture: any
|
|
$(debian_wrap "Depends: \${shlibs:Depends}, \${misc:Depends}, freeswitch, ${depends}")
|
|
$(debian_wrap "Recommends: ${recommends}")
|
|
$(debian_wrap "Suggests: freeswitch-${module_name//_/-}-dbg, ${suggests}")
|
|
Description: ${description} for FreeSWITCH
|
|
$(debian_wrap "${fs_description}")
|
|
.
|
|
$(debian_wrap "This package contains ${module_name} for FreeSWITCH.")
|
|
.
|
|
$(debian_wrap "${long_description}")
|
|
|
|
Package: freeswitch-${module_name//_/-}-dbg
|
|
Section: debug
|
|
Architecture: any
|
|
Depends: \${misc:Depends},
|
|
freeswitch-${module_name//_/-} (= \${binary:Version})
|
|
Description: ${description} for FreeSWITCH (debug)
|
|
$(debian_wrap "${fs_description}")
|
|
.
|
|
$(debian_wrap "This package contains debugging symbols for ${module_name} for FreeSWITCH.")
|
|
.
|
|
$(debian_wrap "${long_description}")
|
|
|
|
EOF
|
|
}
|
|
|
|
print_mod_install () {
|
|
cat <<EOF
|
|
/usr/lib/freeswitch/mod/${1}.{la,so}
|
|
EOF
|
|
}
|
|
|
|
print_conf_control () {
|
|
cat <<EOF
|
|
Package: freeswitch-conf-${conf//_/-}
|
|
Architecture: all
|
|
Depends: \${misc:Depends}
|
|
Description: FreeSWITCH ${conf} configuration
|
|
$(debian_wrap "${fs_description}")
|
|
.
|
|
$(debian_wrap "This package contains the ${conf} configuration for FreeSWITCH.")
|
|
|
|
EOF
|
|
}
|
|
|
|
print_conf_install () {
|
|
cat <<EOF
|
|
conf/${conf} /usr/share/freeswitch/conf
|
|
EOF
|
|
}
|
|
|
|
print_music_control () {
|
|
cat <<EOF
|
|
Package: freeswitch-music-default-${rate_k}
|
|
Architecture: all
|
|
Depends: \${misc:Depends}
|
|
Description: Music on hold audio for FreeSWITCH
|
|
$(debian_wrap "${fs_description}")
|
|
.
|
|
This package contains the default music on hold audio for FreeSWITCH
|
|
at a sampling rate of ${rate}Hz.
|
|
|
|
EOF
|
|
}
|
|
|
|
print_music_install () {
|
|
cat <<EOF
|
|
/usr/share/freeswitch/sounds/music/${rate}
|
|
EOF
|
|
}
|
|
|
|
print_sound_control () {
|
|
cat <<EOF
|
|
Package: freeswitch-sounds-${sound//\//-}-${rate_k}
|
|
Architecture: all
|
|
Depends: \${misc:Depends}
|
|
Description: ${sound} sounds for FreeSWITCH
|
|
$(debian_wrap "${fs_description}")
|
|
.
|
|
This package contains the ${sound} sounds for FreeSWITCH at a
|
|
sampling rate of ${rate}Hz.
|
|
|
|
EOF
|
|
}
|
|
|
|
print_sound_install () {
|
|
cat <<EOF
|
|
/usr/share/freeswitch/sounds/${sound_path}/*/${rate}
|
|
EOF
|
|
}
|
|
|
|
print_edit_warning () {
|
|
echo "#### Do not edit! This file is auto-generated from debian/bootstrap.sh."; echo
|
|
}
|
|
|
|
gencontrol_per_mod () {
|
|
print_mod_control "$module_name" "$description" "$long_description" >> control
|
|
}
|
|
|
|
gencontrol_per_cat () {
|
|
(echo "## mod/$category"; echo) >> control
|
|
}
|
|
|
|
geninstall_per_mod () {
|
|
local f=freeswitch-${module_name//_/-}.install
|
|
(print_edit_warning; print_mod_install "$module_name") > $f
|
|
test -f $f.tmpl && cat $f.tmpl >> $f
|
|
}
|
|
|
|
genmodules_per_cat () {
|
|
echo "## $category" >> modules_.conf
|
|
}
|
|
|
|
genmodules_per_mod () {
|
|
echo "$module" >> modules_.conf
|
|
}
|
|
|
|
genconf () {
|
|
print_conf_control >> control
|
|
local f=freeswitch-conf-${conf//_/-}.install
|
|
(print_edit_warning; print_conf_install) > $f
|
|
test -f $f.tmpl && cat $f.tmpl >> $f
|
|
}
|
|
|
|
genmusic () {
|
|
rate="$1" rate_k="${rate%%000}k"
|
|
print_music_control >> control
|
|
local f=freeswitch-music-default-${rate_k}.install
|
|
(print_edit_warning; print_music_install) > $f
|
|
test -f $f.tmpl && cat $f.tmpl >> $f
|
|
unset rate rate_k
|
|
}
|
|
|
|
gensound () {
|
|
rate="$1" rate_k="${rate%%000}k" sound_path="$2" sound="${2,,}"
|
|
language=$(echo $sound | cut -d/ -f1)
|
|
country=$(echo $sound | cut -d/ -f2)
|
|
speaker=$(echo $sound | cut -d/ -f3)
|
|
print_sound_control >> control
|
|
local f=freeswitch-sounds-${sound//\//-}-${rate_k}.install
|
|
(print_edit_warning; print_sound_install) > $f
|
|
test -f $f.tmpl && cat $f.tmpl >> $f
|
|
unset rate rate_k sound sound_path language country speaker
|
|
}
|
|
|
|
accumulate_build_depends () {
|
|
if [ -n "$build_depends" ]; then
|
|
if [ ! "$mod_build_depends" = "." ]; then
|
|
mod_build_depends="${mod_build_depends}, ${build_depends}"
|
|
else
|
|
mod_build_depends="${build_depends}"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
genmodctl_new_mod() {
|
|
grep -e "^Module: ${module}$" control-modules >/dev/null && return 0
|
|
cat <<EOF
|
|
Module: $module
|
|
Description: $description
|
|
$long_description
|
|
EOF
|
|
echo
|
|
}
|
|
|
|
genmodctl_new_cat() {
|
|
grep -e "^## mod/${category}$" control-modules >/dev/null && return 0
|
|
cat <<EOF
|
|
## mod/$category
|
|
|
|
EOF
|
|
}
|
|
|
|
pre_parse_mod_control() {
|
|
local fl=true ll_nl=false ll_descr=false
|
|
while xread l; do
|
|
if [ -z "$l" ]; then
|
|
# is newline
|
|
if ! $ll_nl && ! $fl; then
|
|
echo
|
|
fi
|
|
ll_nl=true
|
|
continue
|
|
elif [ -z "${l##\#*}" ]; then
|
|
# is comment
|
|
continue
|
|
elif [ -z "${l## *}" ]; then
|
|
# is continuation line
|
|
if ! $ll_descr; then
|
|
echo -n "$l"
|
|
else
|
|
echo -n "Long-Description: $(echo "$l" | sed -e 's/^ *//')"
|
|
fi
|
|
else
|
|
# is header line
|
|
$fl || echo
|
|
if [ "${l%%:*}" = "Description" ]; then
|
|
ll_descr=true
|
|
echo "Description: ${l#*: }"
|
|
continue
|
|
else
|
|
echo -n "$l"
|
|
fi
|
|
fi
|
|
fl=false ll_nl=false ll_descr=false
|
|
done < control-modules
|
|
}
|
|
|
|
var_escape() {
|
|
(echo -n \'; echo -n "$1" | sed -e "s/'/'\\\\''/g"; echo -n \')
|
|
}
|
|
|
|
parse_mod_control() {
|
|
pre_parse_mod_control > control-modules.preparse
|
|
local category=""
|
|
local module_name=""
|
|
rm -rf $parse_dir
|
|
while xread l; do
|
|
if [ -z "$l" ]; then
|
|
# is newline
|
|
continue
|
|
fi
|
|
local header="${l%%:*}"
|
|
local value="${l#*: }"
|
|
if [ "$header" = "Module" ]; then
|
|
category="${value%%/*}"
|
|
module_name="${value#*/}"
|
|
mkdir -p $parse_dir/$category
|
|
(echo "module=$(var_escape "$value")"; \
|
|
echo "category=$(var_escape "$category")"; \
|
|
echo "module_name=$(var_escape "$module_name")"; \
|
|
) >> $parse_dir/$category/$module_name
|
|
else
|
|
([ -n "$category" ] && [ -n "$module_name" ]) \
|
|
|| err "unexpected header $header"
|
|
local var_name="$(echo "$header" | sed -e 's/-/_/g' | tr '[A-Z]' '[a-z]')"
|
|
echo "${var_name}=$(var_escape "$value")" >> $parse_dir/$category/$module_name
|
|
fi
|
|
done < control-modules.preparse
|
|
}
|
|
|
|
debian_wrap() {
|
|
local fl=true
|
|
echo "$1" | fold -s -w 69 | while xread l; do
|
|
local v="$(echo "$l" | sed -e 's/ *$//g')"
|
|
if $fl; then
|
|
fl=false
|
|
echo "$v"
|
|
else
|
|
echo " $v"
|
|
fi
|
|
done
|
|
}
|
|
|
|
genmodctl_cat() {
|
|
(echo "## mod/$category"; echo)
|
|
}
|
|
|
|
genmodctl_mod() {
|
|
echo "Module: $module"
|
|
echo "Description: $description"
|
|
echo "$long_description" | fold -s -w 69 | while xread l; do
|
|
local v="$(echo "$l" | sed -e 's/ *$//g')"
|
|
echo " $v"
|
|
done
|
|
[ -n "$build_depends" ] && debian_wrap "Build-Depends: $build_depends"
|
|
[ -n "$depends" ] && debian_wrap "Depends: $depends"
|
|
[ -n "$reccomends" ] && debian_wrap "Recommends: $recommends"
|
|
[ -n "$suggests" ] && debian_wrap "Suggests: $suggests"
|
|
[ -n "$distro_conflicts" ] && debian_wrap "Distro-Conflicts: $distro_conflicts"
|
|
echo
|
|
}
|
|
|
|
echo "Please wait, this takes a few seconds..." >&2
|
|
|
|
parse_dir=control-modules.parse
|
|
map_fs_modules ':' 'genmodctl_new_cat' 'genmodctl_new_mod' >> control-modules
|
|
parse_mod_control
|
|
(echo "# -*- mode:debian-control -*-"; echo; \
|
|
map_modules ':' 'genmodctl_cat' 'genmodctl_mod' \
|
|
) > control-modules.gen
|
|
|
|
print_edit_warning > modules_.conf
|
|
map_modules 'mod_filter' '' 'accumulate_build_depends'
|
|
> control
|
|
(print_edit_warning; print_source_control; print_core_control) >> control
|
|
for r in 8000 16000 32000 48000; do genmusic $r; done
|
|
for x in 'en/us/callie'; do
|
|
for r in 8000 16000 32000 48000; do
|
|
gensound $r $x
|
|
done
|
|
done
|
|
(echo "### conf"; echo) >> control
|
|
map_confs 'genconf'
|
|
(echo "### modules"; echo) >> control
|
|
map_modules "mod_filter" \
|
|
"gencontrol_per_cat genmodules_per_cat" \
|
|
"gencontrol_per_mod geninstall_per_mod genmodules_per_mod"
|
|
|
|
touch .stamp-bootstrap
|