123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- #!/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 [ <module.c> [-set=<varname>:<value>] [-append=<varname>:<value>] [-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 eq "so") {
- unless($args{linkonly}) {
- $args{installonly}++;
- }
- } elsif($ext ne "c") {
- usage "Bad Input File";
- }
- my $bad=0;
- $bad = esystem("$vars{CC} $vars{CFLAGS} -c ${base}.c -o ${base}.o") unless($args{linkonly} or $args{installonly});
- exit -1 if($bad);
- exit if($args{nolink});
- $vars{MAINOBJ} ||= "$base.o";
- $bad = esystem("$vars{CC} $vars{SOLINK} -o $vars{LDFLAGS} ${base}.so $vars{MAINOBJ} $vars{EXTOBJ}") if(!$bad and !$args{installonly});
- exit -1 if($bad);
- if(($args{install} or $args{installonly}) 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'");
- }
- }
|