aboutsummaryrefslogtreecommitdiffstats
path: root/contrib/scripts/astxs
blob: 36cdad350f737ec0d0b3996087f8d45ac52b6a6c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
#!/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 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'");
  }
}