aboutsummaryrefslogtreecommitdiffstats
path: root/1.2-netsec/contrib/scripts/astxs
diff options
context:
space:
mode:
Diffstat (limited to '1.2-netsec/contrib/scripts/astxs')
-rw-r--r--1.2-netsec/contrib/scripts/astxs157
1 files changed, 157 insertions, 0 deletions
diff --git a/1.2-netsec/contrib/scripts/astxs b/1.2-netsec/contrib/scripts/astxs
new file mode 100644
index 000000000..c525537ae
--- /dev/null
+++ b/1.2-netsec/contrib/scripts/astxs
@@ -0,0 +1,157 @@
+#!/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} -I${astdir} -I${astdir}/include $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 ${base}.so $vars{LDFLAGS} $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'");
+ }
+}
+