#!/usr/bin/perl my $astdir = $ENV{ASTSRC} || "/usr/src/asterisk"; sub esystem($) { my $cmd = shift; print "$cmd\n"; system($cmd); } sub usage($) { my $str = shift; print "\n$str\n\n"; print "Usage $0 [ [-set=:] [-append=:] [-install] ] | [-help] \n\n"; print "varnames of interest: =============================================================================== 'INCLUDES' 'ASTLIBDIR' 'AGI_DIR' 'ASTVARRUNDIR' 'CC' 'ASTETCDIR' 'EXTOBJ' 'ASTSPOOLDIR' 'ASTLOGDIR' 'MODULES_DIR' 'ASTSBINDIR' 'ASTHEADERDIR' 'LDFLAGS' 'ASTVARLIBDIR' 'ASTBINDIR' 'INSTALL_PREFIX' 'ASTCONFPATH' 'ASTSRC' 'CFLAGS' =============================================================================== "; exit; } my %avars = (); my %svars = (); my %vars = (); my %args = (); foreach(@ARGV) { if(/^\-set=([^\:]+):(.*)/) { $svars{$1} = $2; } elsif(/^\-append=([^\:]+):(.*)/) { $avars{$1} .= " $2"; } elsif(/^\-([^\=]+)=(.*)/) { $args{$1} = $2; } elsif(/^\-([^\=]+)$/) { $args{$1}++; } else { push(@{$args{plain}},$_); } } if($args{help} or $args{h}) { usage "Help"; } my $pwd = `/bin/pwd`; chomp($pwd); $vars{astdir} ||= $astdir; chdir($vars{astdir}); my $type = $args{type} || "apps"; my $env = `make ${type}_env`; chdir($pwd); foreach(split("\n",$env)) { my($var,$val) = /([^\=]+)\=(.*)/; $vars{$var} = $val; } foreach(keys %svars) { $vars{$_} = $svars{$_}; } foreach(keys %avars) { $vars{$_} .= $avars{$_}; } if($args{print}) { print "$vars{$args{print}}"; exit; } my($base,$ext); my $cfile = $args{plain}->[0]; if($cfile =~ /http:\/\/.*?\/([^\/]+)$/) { my $f = $1; if(! -d "/tmp/astbld") { mkdir("/tmp/astbld"); } my $pwd = `pwd`; chomp $pwd; chdir("/tmp/astbld"); system("/bin/rm $f"); system("wget $cfile"); chdir($pwd); $cfile = "/tmp/astbld/$f"; } if($cfile) { ($base,$ext) = $cfile =~ /^([^\.]+)\.(.)/; } if($ext ne "c") { usage "Bad Input File"; } my $bad=0; $bad = esystem("$vars{CC} $vars{CFLAGS} -c ${base}.c -o ${base}.o"); $bad = esystem("$vars{CC} $vars{SOLINK} -o $vars{LDFLAGS} ${base}.so $base.o $vars{EXTOBJ}") if(!$bad); if($args{install} and $vars{MODULES_DIR}) { my $file = "${base}.so"; my ($mod) = $file =~ /([^\/]*)$/; if($args{autoload}) { $bad = esystem("/usr/sbin/asterisk -rx 'unload $mod'"); } $bad = esystem("/bin/cp -p ${base}.so $vars{MODULES_DIR}") if(!$bad); if($args{autoload}) { $bad = esystem("/usr/sbin/asterisk -rx 'load $mod'"); } }