diff options
author | anthm <anthm@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-04-26 23:22:34 +0000 |
---|---|---|
committer | anthm <anthm@f38db490-d61c-443f-a65b-d21fe96a405b> | 2004-04-26 23:22:34 +0000 |
commit | aa820ac9405d4a3f4fb6532730d830312304fa77 (patch) | |
tree | 795ee349d435830084b8f5f9c00c84301b059439 /contrib | |
parent | b1ebc7d3c1eb97b62eab34fdc3e3e2d67b1f791b (diff) |
applied final release of bug 1353 per Mark's permission
git-svn-id: http://svn.digium.com/svn/asterisk/trunk@2782 f38db490-d61c-443f-a65b-d21fe96a405b
Diffstat (limited to 'contrib')
-rwxr-xr-x | contrib/scripts/astxs | 114 |
1 files changed, 114 insertions, 0 deletions
diff --git a/contrib/scripts/astxs b/contrib/scripts/astxs new file mode 100755 index 000000000..663617ecd --- /dev/null +++ b/contrib/scripts/astxs @@ -0,0 +1,114 @@ +#!/usr/bin/perl + +my $astdir = $ENV{ASTSRC} or "/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) { + ($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}) { + $bad = esystem("/bin/cp -p ${base}.so $vars{MODULES_DIR}") if(!$bad); +} + |