update doxygen configuration file to current version (bug #4144)
[asterisk/asterisk.git] / contrib / scripts / astxs
1 #!/usr/bin/perl
2
3 my $astdir = $ENV{ASTSRC} || "/usr/src/asterisk";
4
5
6 sub esystem($) {
7   my $cmd = shift;
8   print "$cmd\n";
9   system($cmd);
10 }
11 sub usage($) {
12   my $str = shift;
13   print "\n$str\n\n";
14   print "Usage $0 [ <module.c> [-set=<varname>:<value>] [-append=<varname>:<value>] [-install] ] | [-help]  \n\n";
15
16   print "varnames of interest:
17 ===============================================================================
18 'INCLUDES' 'ASTLIBDIR' 'AGI_DIR' 'ASTVARRUNDIR' 'CC' 'ASTETCDIR' 'EXTOBJ'
19 'ASTSPOOLDIR' 'ASTLOGDIR' 'MODULES_DIR' 'ASTSBINDIR' 'ASTHEADERDIR' 'LDFLAGS'
20 'ASTVARLIBDIR' 'ASTBINDIR' 'INSTALL_PREFIX' 'ASTCONFPATH' 'ASTSRC' 'CFLAGS'
21 ===============================================================================
22 ";
23
24   exit;
25
26 }
27
28
29 my %avars = ();
30 my %svars = ();
31 my %vars = ();
32
33
34
35
36 my %args = ();
37
38
39 foreach(@ARGV) {
40
41   if(/^\-set=([^\:]+):(.*)/) {
42     $svars{$1} = $2;
43   }
44   elsif(/^\-append=([^\:]+):(.*)/) {
45     $avars{$1} .= " $2";
46   }
47   elsif(/^\-([^\=]+)=(.*)/) {
48     $args{$1} = $2;
49   }
50   elsif(/^\-([^\=]+)$/) {
51     $args{$1}++;
52   }
53   else {
54     push(@{$args{plain}},$_);
55   }
56 }
57
58 if($args{help} or $args{h}) {
59   usage "Help";
60 }
61
62
63 my $pwd = `/bin/pwd`;
64 chomp($pwd);
65
66 $vars{astdir} ||= $astdir;
67
68 chdir($vars{astdir});
69 my $type = $args{type} || "apps";
70 my $env = `make ${type}_env`;
71 chdir($pwd);
72
73 foreach(split("\n",$env)) {
74     my($var,$val) = /([^\=]+)\=(.*)/;
75     $vars{$var} = $val;
76 }
77
78
79
80
81 foreach(keys %svars) {
82     $vars{$_} = $svars{$_};
83 }
84
85 foreach(keys %avars) {
86     $vars{$_} .= $avars{$_};
87 }
88
89
90 if($args{print}) {
91     print "$vars{$args{print}}";
92     exit;
93 }
94
95
96 my($base,$ext);
97 my $cfile = $args{plain}->[0];
98
99
100 if($cfile =~ /http:\/\/.*?\/([^\/]+)$/) {
101
102   my $f = $1;
103   if(! -d "/tmp/astbld") {
104     mkdir("/tmp/astbld");
105   }
106   my $pwd = `pwd`;
107   chomp $pwd;
108   chdir("/tmp/astbld");
109   system("/bin/rm $f");
110   system("wget $cfile");
111   chdir($pwd);
112   $cfile = "/tmp/astbld/$f";
113
114
115 }
116
117
118
119 if($cfile) {
120   ($base,$ext) = $cfile =~ /^([^\.]+)\.(.+)/;
121 }
122
123 if($ext eq "so") {
124   unless($args{linkonly}) {
125     $args{installonly}++;
126   }
127 } elsif($ext ne "c") {
128   usage "Bad Input File";
129 }
130
131
132 my $bad=0;
133
134 $bad = esystem("$vars{CC} -I${astdir} -I${astdir}/include $vars{CFLAGS} -c ${base}.c -o ${base}.o") unless($args{linkonly} or $args{installonly});
135 exit -1 if($bad);
136 exit if($args{nolink});
137
138
139
140 $vars{MAINOBJ} ||= "$base.o";
141 $bad = esystem("$vars{CC} $vars{SOLINK} -o ${base}.so $vars{LDFLAGS} $vars{MAINOBJ} $vars{EXTOBJ}") if(!$bad and !$args{installonly});
142 exit -1 if($bad);
143
144 if(($args{install} or $args{installonly}) and $vars{MODULES_DIR}) {
145   my $file = "${base}.so";
146   my ($mod) = $file =~ /([^\/]*)$/;
147
148   if($args{autoload}) {
149     $bad = esystem("/usr/sbin/asterisk -rx 'unload $mod'");
150   }
151   $bad = esystem("/bin/cp -p ${base}.so $vars{MODULES_DIR}") if(!$bad);
152   
153   if($args{autoload}) {
154     $bad = esystem("/usr/sbin/asterisk -rx 'load $mod'");
155   }
156 }
157