summaryrefslogtreecommitdiff
path: root/eclass
diff options
context:
space:
mode:
authorStefan Knoblich <stkn@gentoo.org>2006-04-10 07:50:34 +0000
committerStefan Knoblich <stkn@gentoo.org>2006-04-10 07:50:34 +0000
commit7a750fc80a9168d56d6b92a2823b1f53dc294abd (patch)
tree90683a60e09cf4f8e1345541bed20fda2d82e43e /eclass
parentExperimental app_event ebuild that uses the (of course) experimental asterisk... (diff)
downloadvoip-7a750fc80a9168d56d6b92a2823b1f53dc294abd.tar.gz
voip-7a750fc80a9168d56d6b92a2823b1f53dc294abd.tar.bz2
voip-7a750fc80a9168d56d6b92a2823b1f53dc294abd.zip
Add the (experimental) asterisk-mod eclass
svn path=/trunk/; revision=215
Diffstat (limited to 'eclass')
-rw-r--r--eclass/asterisk-mod.eclass124
1 files changed, 124 insertions, 0 deletions
diff --git a/eclass/asterisk-mod.eclass b/eclass/asterisk-mod.eclass
new file mode 100644
index 0000000..18fe87f
--- /dev/null
+++ b/eclass/asterisk-mod.eclass
@@ -0,0 +1,124 @@
+#
+#
+#
+#
+
+# AST_MODULES="app_foo app_bar"
+#
+# AST_APP_FOO_SRC="app_foo.c foo.c"
+# AST_APP_FOO_LIBS="-ltest"
+# AST_APP_FOO_CFLAGS="-D_IM_A_FLAG"
+# AST_APP_FOO_LDFLAGS="-Wl,-z,now"
+
+# AST_MOD_DOCS="README INSTALL bla"
+
+inherit eutils toolchain-funcs
+EXPORT_FUNCTIONS pkg_setup src_compile src_install
+
+# $1 = modname
+# $2 = variable suffix (e.g. SRC, LIBS)
+ast_get_mod_var() {
+ local modname varname
+
+ [[ -z "$1" ]] && \
+ return 1
+
+ [[ -z "$2" ]] && \
+ return 1
+
+ modname="$(echo "$1" | tr '[:lower:]' '[:upper:]' | tr '-' '_')"
+ varname="$2"
+
+ eval "echo \${AST_${modname}_${varname}}"
+ return 0
+}
+
+ast_get_mod_src() {
+ echo $(ast_get_mod_var $1 SRC)
+}
+
+ast_get_mod_cflags() {
+ echo $(ast_get_mod_var $1 CFLAGS)
+}
+
+ast_get_mod_ldflags() {
+ echo $(ast_get_mod_var $1 LDFLAGS)
+}
+
+ast_get_mod_libs() {
+ echo $(ast_get_mod_var $1 LIBS)
+}
+
+asterisk-mod_pkg_setup() {
+ echo ">>> "
+ export AST_VERSION="1.2.x"
+}
+
+asterisk-mod_src_compile() {
+ local MOD_SRC MOD_OBJS MOD_LIBS MOD_LDFLAGS MOD_CFLAGS
+ local mod obj x
+
+ if [[ -z "{AST_MODULES}" ]]; then
+ echo "!!! Nothing to do"
+ return 0
+ fi
+
+ for mod in ${AST_MODULES}; do
+ echo ">>> Building ${mod}..."
+
+ MOD_OBJS=""
+ MOD_SRC="$(ast_get_mod_src ${mod})"
+ MOD_LIBS="$(ast_get_mod_libs ${mod})"
+ MOD_LDFLAGS="$(ast_get_mod_ldflags ${mod})"
+ MOD_CFLAGS="$(ast_get_mod_cflags ${mod})"
+ MOD_TARGET="${mod}.so"
+
+ [[ -z "${MOD_SRC}" ]] && \
+ MOD_SRC="${mod}.c"
+
+ # grab a set of default cflags...
+ [[ -z "${MOD_CFLAGS}" ]] && \
+ MOD_CFLAGS=""
+
+ # add some nice version information to the final module
+ MOD_CFLAGS="${MOD_CFLAGS}"
+
+ # add version information to module
+ cat > _version.c <<-EOF
+ const char __${mod}_${AST_VERSION//./_}[0];
+ EOF
+
+ MOD_SRC="${MOD_SRC} _version.c"
+
+ # compile source files
+ for x in ${MOD_SRC}; do
+ obj="$(echo "${x}" | sed -e "s:^\(.*\)\..*:\1.o:")"
+ echo "DEBUG: ${x} -> ${obj} using ${MOD_CFLAGS}"
+
+ $(tc-getCC) ${MOD_CFLAGS} -c -o ${obj} ${x} || die "Compiling ${x} failed!"
+ MOD_OBJS="${MOD_OBJS} ${obj}"
+ done
+
+ # link module
+ [[ -n "${MOD_OBJS}" ]] && \
+ ( $(tc-getCC) ${MOD_LDFLAGS} -o ${MOD_TARGET} ${MOD_OBJS} ${MOD_LIBS} || die "Linking ${MOD_TARGET} failed!"; )
+ done
+}
+
+
+asterisk-mod_src_install() {
+
+ [[ -z "${AST_MODULES}" ]] && \
+ ( echo "!!! Nothing to do"; return 1; )
+
+ insinto "${D}usr/lib/asterisk/modules"
+ for mod in ${AST_MODULES}; do
+ echo ">>> Installing ${mod}..."
+ doins ${mod}.so || die "Failed to install ${mod}.so!"
+ done
+
+ if [[ -n "${AST_MOD_DOCS}" ]]; then
+ echo ">>> Installing documentation files..."
+ dodoc ${AST_MOD_DOCS}
+ fi
+}