mirror of
https://github.com/asterisk/asterisk.git
synced 2025-11-03 12:25:35 +00:00
Compare commits
14 Commits
certified/
...
certified/
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2c09c226fe | ||
|
|
a58126dfe7 | ||
|
|
6551979daf | ||
|
|
c214ee3591 | ||
|
|
690dabd432 | ||
|
|
aaba96a422 | ||
|
|
5bb14ec0e1 | ||
|
|
64bba47996 | ||
|
|
5b4768674e | ||
|
|
5e4b171ebe | ||
|
|
8fed9bb290 | ||
|
|
31630293f3 | ||
|
|
d59ae82823 | ||
|
|
4330aea0b3 |
31
.gitignore
vendored
Normal file
31
.gitignore
vendored
Normal file
@@ -0,0 +1,31 @@
|
||||
# git ls-files --others --exclude-from=.git/info/exclude
|
||||
# Lines that start with '#' are comments.
|
||||
# For a project mostly in C, the following would be a good set of
|
||||
# exclude patterns (uncomment them if you want to use them):
|
||||
# *.[oa]
|
||||
# *~
|
||||
|
||||
# See .gitignore in subdirectories for more ignored files
|
||||
|
||||
*~
|
||||
*.[oadi]
|
||||
*.gz
|
||||
*.ii
|
||||
*.oo
|
||||
*.eo
|
||||
*.so
|
||||
*.exports
|
||||
*.moduleinfo
|
||||
*.makeopts
|
||||
*.makedeps
|
||||
aclocal.m4
|
||||
autom4te.cache
|
||||
makeopts
|
||||
.lastclean
|
||||
config.log
|
||||
config.status
|
||||
defaults.h
|
||||
makeopts.embed_rules
|
||||
menuselect-tree
|
||||
*.sha1
|
||||
*.pyc
|
||||
4
.gitreview
Normal file
4
.gitreview
Normal file
@@ -0,0 +1,4 @@
|
||||
[gerrit]
|
||||
host=gerrit.asterisk.org
|
||||
port=29418
|
||||
project=asterisk.git
|
||||
260
ChangeLog
260
ChangeLog
@@ -1,263 +1,3 @@
|
||||
2015-04-08 Asterisk Development Team <asteriskteam@digium.com>
|
||||
|
||||
* Certified Asterisk 1.8.28-cert5 Released.
|
||||
|
||||
* Mitigate MitM attack potential from certificate with NULL byte in CN.
|
||||
|
||||
When registering to a SIP server with TLS, Asterisk will accept CA
|
||||
signed certificates with a common name that was signed for a domain
|
||||
other than the one requested if it contains a null character in the
|
||||
common name portion of the cert. This patch fixes that by checking
|
||||
that the common name length matches the the length of the content we
|
||||
actually read from the common name segment. Some certificate
|
||||
authorities automatically sign CA requests when the requesting CN
|
||||
isn't already taken, so an attacker could potentially register a CN
|
||||
with something like www.google.com\x00www.secretlyevil.net and have
|
||||
their certificate signed and Asterisk would accept that certificate
|
||||
as though it had been for www.google.com.
|
||||
|
||||
ASTERISK-24847 #close
|
||||
Reported by: Maciej Szmigiero
|
||||
patches:
|
||||
asterisk-null-in-cn.patch uploaded by mhej (license 6085)
|
||||
|
||||
AST-2015-003
|
||||
|
||||
2015-01-28 Asterisk Development Team <asteriskteam@digium.com>
|
||||
|
||||
* Certified Asterisk 1.8.28-cert4 Released.
|
||||
|
||||
* Mitigate possible HTTP injection attacks using CURL() function in
|
||||
Asterisk.
|
||||
|
||||
CVE-2014-8150 disclosed a vulnerability in libcURL where HTTP request
|
||||
injection can be performed given properly-crafted URLs.
|
||||
|
||||
Since Asterisk makes use of libcURL, and it is possible that users of
|
||||
Asterisk may get cURL URLs from user input or remote sources, we have
|
||||
made a patch to Asterisk to prevent such HTTP injection attacks from
|
||||
originating from Asterisk.
|
||||
|
||||
ASTERISK-24676 #close
|
||||
Reported by: Matt Jordan, Olle Johansson
|
||||
|
||||
Review: https://reviewboard.asterisk.org/r/4364
|
||||
|
||||
AST-2015-002
|
||||
|
||||
2014-11-20 Asterisk Development Team <asteriskteam@digium.com>
|
||||
|
||||
* Certified Asterisk 1.8.28-cert3 Released.
|
||||
|
||||
* AST-2014-012: Fix error with mixed address family ACLs.
|
||||
|
||||
Prior to this commit, the address family of the first item in an ACL
|
||||
was used to compare all incoming traffic. This could lead to traffic
|
||||
of other IP address families bypassing ACLs.
|
||||
|
||||
ASTERISK-24469 #close
|
||||
Reported by Matt Jordan
|
||||
|
||||
* AST-2014-018 - func_db: DB Dialplan function permission escalation
|
||||
via AMI.
|
||||
|
||||
The DB dialplan function when executed from an external protocol
|
||||
(for instance AMI), could result in a privilege escalation.
|
||||
|
||||
Asterisk now inhibits the DB function from being executed from an
|
||||
external interface if the live_dangerously option is set to no.
|
||||
|
||||
ASTERISK-24534
|
||||
Reported by: Gareth Palmer
|
||||
patches: submitted by Gareth Palmer (license 5169)
|
||||
|
||||
2014-10-20 Asterisk Development Team <asteriskteam@digium.com>
|
||||
|
||||
* Certified Asterisk 1.8.28-cert2 Released.
|
||||
|
||||
* AST-2014-011: Fix POODLE security issues
|
||||
|
||||
There are two aspects to the vulnerability:
|
||||
(1) res_jabber/res_xmpp use SSLv3 only. This patch updates the module
|
||||
to use TLSv1+. At this time, it does not refactor res_jabber/
|
||||
res_xmpp to use the TCP/TLS core, which should be done as an
|
||||
improvement at a latter date.
|
||||
(2) The TCP/TLS core, when tlsclientmethod/sslclientmethod is left
|
||||
unspecified, will default to the OpenSSL SSLv23_method. This
|
||||
method allows for all encryption methods, including SSLv2/SSLv3.
|
||||
A MITM can exploit this by forcing a fallback to SSLv3, which
|
||||
leaves the server vulnerable to POODLE. This patch adds WARNINGS
|
||||
if a user uses SSLv2/SSLv3 in their configuration, and explicitly
|
||||
disables SSLv2/SSLv3 if using SSLv23_method.
|
||||
|
||||
For TLS clients, Asterisk will default to TLSv1+ and WARN if SSLv2 or
|
||||
SSLv3 is explicitly chosen. For TLS servers, Asterisk will no longer
|
||||
support SSLv2 or SSLv3.
|
||||
|
||||
Much thanks to abelbeck for reporting the vulnerability and providing
|
||||
a patch for the res_jabber/res_xmpp modules.
|
||||
|
||||
2014-09-05 Asterisk Development Team <asteriskteam@digium.com>
|
||||
|
||||
* Certified Asterisk 1.8.28-cert1 Released.
|
||||
|
||||
2014-09-05 17:37 +0000 [r422662] Kinsey Moore <kmoore@digium.com>
|
||||
|
||||
* funcs/func_presence_state.c: Add missing support level to
|
||||
func_presence_state
|
||||
|
||||
2014-09-04 14:41 +0000 [r422582] Kinsey Moore <kmoore@digium.com>
|
||||
|
||||
* channels/chan_vpb.cc: Set chan_vpb to be disabled by default
|
||||
|
||||
2014-08-15 19:39 +0000 [r421208] Kinsey Moore <kmoore@digium.com>
|
||||
|
||||
* apps/app_voicemail.c, apps/app_meetme.c,
|
||||
channels/sip/reqresp_parser.c, main/test.c: Fix build in
|
||||
dev/TEST_FRAMEWORK mode
|
||||
|
||||
2014-08-14 17:29 +0000 [r421032-421033] Scott Griepentrog <sgriepentrog@digium.com>
|
||||
|
||||
* /, main/config.c: config: inform config hook of change when
|
||||
writing file When updated configuration is written back to the
|
||||
conf file - for example when a user changes their voicemail pin,
|
||||
make sure that any config hook that wants to know of changes is
|
||||
informed. Review: https://reviewboard.asterisk.org/r/3708/
|
||||
|
||||
* apps/app_voicemail.c: app_voicemail: use a consistent generator
|
||||
string When updating voicemail.conf when a user changes their
|
||||
pin, change the generator string to be the same as the module
|
||||
name when reading so that the same config_hook will be called.
|
||||
Review: https://reviewboard.asterisk.org/r/3837/
|
||||
|
||||
2014-08-08 17:29 +0000 [r420560] Richard Mudgett <rmudgett@digium.com>
|
||||
|
||||
* /, channels/chan_sip.c: chan_sip: Replace sip_tls_read() and
|
||||
resolve the large SDP poll issue. Replace sip_tls_read() and
|
||||
sip_tcp_read() with a single function and resolve the poll/wait
|
||||
issue with large SDP payloads. ASTERISK-18345 #close Reported by:
|
||||
Stephane Chazelas Patches: tcptls_pollv4.diff (license #5835)
|
||||
patch uploaded by Elazar Broad Review:
|
||||
https://reviewboard.asterisk.org/r/3882/ ........ Merged
|
||||
revisions 420434 from
|
||||
http://svn.asterisk.org/svn/asterisk/branches/1.8
|
||||
|
||||
2014-07-25 23:47 +0000 [r419678] Richard Mudgett <rmudgett@digium.com>
|
||||
|
||||
* /, main/features.c, main/app.c, apps/app_stack.c,
|
||||
include/asterisk/app.h: features.c: Allow appliationmap to use
|
||||
Gosub. Using DYNAMIC_FEATURES with a Gosub application as the
|
||||
mapped application does not work. It does not work because Gosub
|
||||
just pushes the current dialplan context, exten, and priority
|
||||
onto a stack and sets the specified Gosub location. Gosub does
|
||||
not have a dialplan execution loop to run dialplan like Macro. *
|
||||
Made the DYNAMIC_FEATURES application mapping feature call
|
||||
ast_app_exec_macro() and ast_app_exec_sub() for the Macro and
|
||||
Gosub applications respectively. * Backported
|
||||
ast_app_exec_macro() and ast_app_exec_sub() from v11 to execute
|
||||
dialplan routines from the DYNAMIC_FEATURES application mapping
|
||||
feature. NOTE: This issue does not affect v12+ because it already
|
||||
does what this patch implements. AST-1391 #close Reported by:
|
||||
Guenther Kelleter Review:
|
||||
https://reviewboard.asterisk.org/r/3844/ ........ Merged
|
||||
revisions 419630 from
|
||||
http://svn.asterisk.org/svn/asterisk/branches/1.8
|
||||
|
||||
2014-06-13 05:25 +0000 [r415975-416095] Richard Mudgett <rmudgett@digium.com>
|
||||
|
||||
* include/asterisk/tcptls.h, main/tcptls.c, main/manager.c, /,
|
||||
channels/chan_sip.c, main/http.c: AST-2014-007: Fix of fix to
|
||||
allow AMI and SIP TCP to send messages. ASTERISK-23673 #close
|
||||
Reported by: Richard Mudgett Review:
|
||||
https://reviewboard.asterisk.org/r/3617/ ........ Merged
|
||||
revisions 416066 from
|
||||
http://svn.asterisk.org/svn/asterisk/branches/1.8
|
||||
|
||||
* configs/http.conf.sample, include/asterisk/utils.h,
|
||||
main/tcptls.c, main/manager.c, /, channels/chan_sip.c,
|
||||
main/http.c, UPGRADE.txt, main/utils.c,
|
||||
include/asterisk/tcptls.h: AST-2014-007: Fix DOS by consuming the
|
||||
number of allowed HTTP connections. Simply establishing a TCP
|
||||
connection and never sending anything to the configured HTTP port
|
||||
in http.conf will tie up a HTTP connection. Since there is a
|
||||
maximum number of open HTTP sessions allowed at a time you can
|
||||
block legitimate connections. A similar problem exists if a HTTP
|
||||
request is started but never finished. * Added http.conf
|
||||
session_inactivity timer option to close HTTP connections that
|
||||
aren't doing anything. Defaults to 30000 ms. * Removed the
|
||||
undocumented manager.conf block-sockets option. It interferes
|
||||
with TCP/TLS inactivity timeouts. * AMI and SIP TLS connections
|
||||
now have better authentication timeout protection. Though I
|
||||
didn't remove the bizzare TLS timeout polling code from chan_sip.
|
||||
* chan_sip can now handle SSL certificate renegotiations in the
|
||||
middle of a session. It couldn't do that before because the
|
||||
socket was non-blocking and the SSL calls were not restarted as
|
||||
documented by the OpenSSL documentation. * Fixed an off nominal
|
||||
leak of the ssl struct in handle_tcptls_connection() if the FILE
|
||||
stream failed to open and the SSL certificate negotiations
|
||||
failed. The patch creates a custom FILE stream handler to give
|
||||
the created FILE streams inactivity timeout and timeout after a
|
||||
specific moment in time capability. This approach eliminates the
|
||||
need for code using the FILE stream to be redesigned to deal with
|
||||
the timeouts. This patch indirectly fixes most of ASTERISK-18345
|
||||
by fixing the usage of the SSL_read/SSL_write operations.
|
||||
ASTERISK-23673 #close Reported by: Richard Mudgett ........
|
||||
Merged revisions 415841 from
|
||||
http://svn.asterisk.org/svn/asterisk/branches/1.8
|
||||
|
||||
2014-06-05 19:17 +0000 [r415246-415290] Matthew Jordan <mjordan@digium.com>
|
||||
|
||||
* apps/app_ices.c, channels/chan_gtalk.c, cdr/cdr_csv.c,
|
||||
channels/chan_jingle.c, channels/chan_phone.c,
|
||||
funcs/func_pitchshift.c, include/asterisk/custom_control_frame.h
|
||||
(added), apps/app_minivm.c, main/features.c,
|
||||
apps/app_confbridge.c, apps/app_sms.c, configs/sip.conf.sample,
|
||||
include/asterisk/pbx.h, res/res_config_ldap.c,
|
||||
apps/app_voicemail.c, cel/cel_radius.c, apps/app_nbscat.c,
|
||||
apps/app_waitforsilence.c, include/asterisk/config.h,
|
||||
apps/app_dahdiras.c, pbx/pbx_lua.c, res/res_ael_share.c,
|
||||
apps/app_chanisavail.c, cdr/cdr_radius.c, res/res_jabber.c,
|
||||
main/presencestate.c (added), cdr/cdr_tds.c,
|
||||
apps/app_osplookup.c, channels/chan_skinny.c,
|
||||
funcs/func_frame_trace.c, cdr/cdr_sqlite.c, apps/app_amd.c,
|
||||
pbx/pbx_realtime.c, apps/app_url.c, apps/app_externalivr.c,
|
||||
tests/test_config.c, cdr/cdr_odbc.c, include/asterisk/frame.h,
|
||||
res/res_timing_kqueue.c, main/custom_control_frame.c (added),
|
||||
channels/sip/include/sip.h, main/asterisk.c,
|
||||
channels/chan_mgcp.c, tests/test_custom_control.c (added),
|
||||
channels/chan_unistim.c, apps/app_dahdibarge.c, main/pbx.c,
|
||||
res/res_phoneprov.c, include/asterisk/channel.h, cdr/cdr_pgsql.c,
|
||||
include/asterisk/manager.h, apps/app_queue.c,
|
||||
res/res_config_sqlite.c, main/config.c,
|
||||
include/asterisk/callerid.h, include/asterisk/file.h,
|
||||
include/asterisk/app.h, apps/app_waitforring.c,
|
||||
include/asterisk/event_defs.h, formats/format_vox.c, configure,
|
||||
configs/jabber.conf.sample, res/res_timing_pthread.c,
|
||||
include/asterisk/message.h (added), pbx/pbx_ael.c,
|
||||
channels/chan_h323.c, cel/cel_sqlite3_custom.c, main/event.c,
|
||||
formats/format_jpeg.c, apps/app_adsiprog.c, apps/app_jack.c,
|
||||
res/res_ais.c, cdr/cdr_sqlite3_custom.c, res/res_snmp.c,
|
||||
channels/chan_sip.c, apps/app_dictate.c, apps/app_festival.c,
|
||||
cel/cel_tds.c, apps/app_alarmreceiver.c,
|
||||
configs/manager.conf.sample, apps/app_image.c,
|
||||
channels/chan_console.c, include/asterisk/_private.h,
|
||||
apps/app_getcpeid.c, apps/app_talkdetect.c, channels/chan_iax2.c,
|
||||
channels/chan_oss.c, main/channel.c, funcs/func_presence_state.c
|
||||
(added), main/manager.c, apps/app_setcallerid.c,
|
||||
channels/chan_misdn.c, tests/test_voicemail_api.c (added),
|
||||
apps/app_mp3.c, include/asterisk/jabber.h, main/file.c,
|
||||
main/callerid.c, channels/chan_alsa.c, main/app.c,
|
||||
pbx/pbx_dundi.c, channels/chan_nbs.c, apps/app_zapateller.c,
|
||||
main/message.c (added), apps/app_mixmonitor.c,
|
||||
res/res_fax_spandsp.c, cel/cel_pgsql.c, res/res_config_pgsql.c,
|
||||
apps/app_readfile.c, /, apps/app_test.c,
|
||||
include/asterisk/presencestate.h (added), apps/app_morsecode.c:
|
||||
Merge changes for Digium phone support, and default module
|
||||
building. All of these changes were merged from
|
||||
certified/branches/1.8.15/
|
||||
|
||||
* / (added): Create branch for Certified Asterisk 1.8.28
|
||||
|
||||
2014-05-29 Asterisk Development Team <asteriskteam@digium.com>
|
||||
|
||||
* Asterisk 1.8.28.0 Released.
|
||||
|
||||
@@ -18,8 +18,12 @@
|
||||
===
|
||||
===========================================================
|
||||
|
||||
from 1.8.28-cert1 to 1.8.28-cert2:
|
||||
from 1.8.28-cert5 to 1.8.28-cert6:
|
||||
* The menuselect utility has been pulled into the Asterisk repository. As a
|
||||
result, the libxml2 development library is now a required dependency for
|
||||
Asterisk.
|
||||
|
||||
from 1.8.28-cert1 to 1.8.28-cert2:
|
||||
* Due to the POODLE vulnerability (see
|
||||
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2014-3566), the
|
||||
default TLS method for TLS clients will no longer allow SSLv3. As
|
||||
|
||||
1
addons/.gitignore
vendored
Normal file
1
addons/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
mp3
|
||||
3
agi/.gitignore
vendored
Normal file
3
agi/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
eagi-sphinx-test
|
||||
eagi-test
|
||||
strcompat.c
|
||||
312
asterisk-1.8.28.0-summary.html
Normal file
312
asterisk-1.8.28.0-summary.html
Normal file
@@ -0,0 +1,312 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Release Summary - asterisk-1.8.28.0</title></head>
|
||||
<body>
|
||||
<h1 align="center"><a name="top">Release Summary</a></h1>
|
||||
<h3 align="center">asterisk-1.8.28.0</h3>
|
||||
<h3 align="center">Date: 2014-05-29</h3>
|
||||
<h3 align="center"><asteriskteam@digium.com></h3>
|
||||
<hr/>
|
||||
<h2 align="center">Table of Contents</h2>
|
||||
<ol>
|
||||
<li><a href="#summary">Summary</a></li>
|
||||
<li><a href="#contributors">Contributors</a></li>
|
||||
<li><a href="#issues">Closed Issues</a></li>
|
||||
<li><a href="#commits">Other Changes</a></li>
|
||||
<li><a href="#diffstat">Diffstat</a></li>
|
||||
</ol>
|
||||
<hr/>
|
||||
<a name="summary"><h2 align="center">Summary</h2></a>
|
||||
<center><a href="#top">[Back to Top]</a></center><br/><p>This release includes only bug fixes. The changes included were made only to address problems that have been identified in this release series. Users should be able to safely upgrade to this version if this release series is already in use. Users considering upgrading from a previous release series are strongly encouraged to review the UPGRADE.txt document as well as the CHANGES document for information about upgrading to this release series.</p>
|
||||
<p>The data in this summary reflects changes that have been made since the previous release, asterisk-1.8.27.0.</p>
|
||||
<hr/>
|
||||
<a name="contributors"><h2 align="center">Contributors</h2></a>
|
||||
<center><a href="#top">[Back to Top]</a></center><br/><p>This table lists the people who have submitted code, those that have tested patches, as well as those that reported issues on the issue tracker that were resolved in this release. For coders, the number is how many of their patches (of any size) were committed into this release. For testers, the number is the number of times their name was listed as assisting with testing a patch. Finally, for reporters, the number is the number of issues that they reported that were closed by commits that went into this release.</p>
|
||||
<table width="100%" border="0">
|
||||
<tr>
|
||||
<td width="33%"><h3>Coders</h3></td>
|
||||
<td width="33%"><h3>Testers</h3></td>
|
||||
<td width="33%"><h3>Reporters</h3></td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td>
|
||||
6 rmudgett<br/>
|
||||
5 wdoekes<br/>
|
||||
4 kmoore<br/>
|
||||
4 mmichelson<br/>
|
||||
3 jrose<br/>
|
||||
3 mjordan<br/>
|
||||
1 Bradley Watkins<br/>
|
||||
1 David Woodhouse<br/>
|
||||
1 file<br/>
|
||||
1 jcolp<br/>
|
||||
1 may<br/>
|
||||
1 newtonr<br/>
|
||||
1 sgriepentrog<br/>
|
||||
1 Steve Davies<br/>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
2 kristoff<br/>
|
||||
2 wdoekes<br/>
|
||||
1 dwmw2<br/>
|
||||
1 gma<br/>
|
||||
1 igorg<br/>
|
||||
1 italorossi<br/>
|
||||
1 marquis<br/>
|
||||
1 mjordan<br/>
|
||||
1 mmichelson<br/>
|
||||
1 one47<br/>
|
||||
1 rolek<br/>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<hr/>
|
||||
<a name="issues"><h2 align="center">Closed Issues</h2></a>
|
||||
<center><a href="#top">[Back to Top]</a></center><br/><p>This is a list of all issues from the issue tracker that were closed by changes that went into this release.</p>
|
||||
<h3>Category: Addons/chan_ooh323</h3><br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-23754">ASTERISK-23754</a>: [patch] Use var/lib directory for log file configured in asterisk.conf<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=414152">414152</a><br/>
|
||||
Reporter: igorg<br/>
|
||||
Coders: may<br/>
|
||||
<br/>
|
||||
<h3>Category: Applications/app_queue</h3><br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-23547">ASTERISK-23547</a>: [patch] app_queue removing callers from queue when reloading<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=411584">411584</a><br/>
|
||||
Reporter: italorossi<br/>
|
||||
Coders: jcolp<br/>
|
||||
<br/>
|
||||
<h3>Category: Applications/app_sms</h3><br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-18331">ASTERISK-18331</a>: app_sms failure<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=412655">412655</a><br/>
|
||||
Reporter: dwmw2<br/>
|
||||
Coders: David Woodhouse<br/>
|
||||
<br/>
|
||||
<h3>Category: Applications/app_stack</h3><br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-23620">ASTERISK-23620</a>: Code path in app_stack fails to unlock list<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=412225">412225</a><br/>
|
||||
Reporter: marquis<br/>
|
||||
Coders: Bradley Watkins<br/>
|
||||
<br/>
|
||||
<h3>Category: CEL/General</h3><br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-22977">ASTERISK-22977</a>: chan_sip+CEL: missing ANSWER and PICKUP event for INVITE/w/replaces pickup<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=413832">413832</a><br/>
|
||||
Reporter: wdoekes<br/>
|
||||
Coders: wdoekes<br/>
|
||||
<br/>
|
||||
<h3>Category: Channels/chan_dahdi</h3><br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-23709">ASTERISK-23709</a>: Regression in Dahdi/Analog/waitfordialtone<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=414067">414067</a><br/>
|
||||
Reporter: one47<br/>
|
||||
Coders: Steve Davies<br/>
|
||||
<br/>
|
||||
<h3>Category: Channels/chan_sip/General</h3><br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-19465">ASTERISK-19465</a>: P-Asserted-Identity Privacy<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=412744">412744</a><br/>
|
||||
Reporter: kristoff<br/>
|
||||
Coders: jrose<br/>
|
||||
<br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-19465">ASTERISK-19465</a>: P-Asserted-Identity Privacy<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=412821">412821</a><br/>
|
||||
Reporter: kristoff<br/>
|
||||
Coders: jrose<br/>
|
||||
<br/>
|
||||
<h3>Category: Channels/chan_sip/Transfers</h3><br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-22977">ASTERISK-22977</a>: chan_sip+CEL: missing ANSWER and PICKUP event for INVITE/w/replaces pickup<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=413832">413832</a><br/>
|
||||
Reporter: wdoekes<br/>
|
||||
Coders: wdoekes<br/>
|
||||
<br/>
|
||||
<h3>Category: Core/Channels</h3><br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-22846">ASTERISK-22846</a>: testsuite: masquerade super test fails on all branches (still)<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=411715">411715</a><br/>
|
||||
Reporter: mjordan<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<h3>Category: Core/Configuration</h3><br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-23546">ASTERISK-23546</a>: CB_ADD_LEN does not do what you'd think<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=411960">411960</a><br/>
|
||||
Reporter: wdoekes<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<h3>Category: Core/General</h3><br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-23546">ASTERISK-23546</a>: CB_ADD_LEN does not do what you'd think<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=411960">411960</a><br/>
|
||||
Reporter: wdoekes<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<h3>Category: Core/RTP</h3><br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-23665">ASTERISK-23665</a>: Wrong mime type for codec H263-1998 (h263+)<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=413787">413787</a><br/>
|
||||
Reporter: gma<br/>
|
||||
Coders: wdoekes<br/>
|
||||
<br/>
|
||||
<h3>Category: Functions/func_strings</h3><br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-23650">ASTERISK-23650</a>: Intermittent segfault in string functions<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=414214">414214</a><br/>
|
||||
Reporter: rolek<br/>
|
||||
Coders: sgriepentrog<br/>
|
||||
<br/>
|
||||
<h3>Category: Resources/res_config_pgsql</h3><br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-23707">ASTERISK-23707</a>: Realtime Contacts: Apparent mismatch between PGSQL database state and Asterisk state<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=413224">413224</a><br/>
|
||||
Reporter: mmichelson<br/>
|
||||
Coders: mmichelson<br/>
|
||||
<br/>
|
||||
<h3>Category: Tests/testsuite</h3><br/>
|
||||
<a href="https://issues.asterisk.org/jira/browse/ASTERISK-22846">ASTERISK-22846</a>: testsuite: masquerade super test fails on all branches (still)<br/>
|
||||
Revision: <a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=411715">411715</a><br/>
|
||||
Reporter: mjordan<br/>
|
||||
Coders: rmudgett<br/>
|
||||
<br/>
|
||||
<hr/>
|
||||
<a name="commits"><h2 align="center">Commits Not Associated with an Issue</h2></a>
|
||||
<center><a href="#top">[Back to Top]</a></center><br/><p>This is a list of all changes that went into this release that did not directly close an issue from the issue tracker. The commits may have been marked as being related to an issue. If that is the case, the issue numbers are listed here, as well.</p>
|
||||
<table width="100%" border="1">
|
||||
<tr><td><b>Revision</b></td><td><b>Author</b></td><td><b>Summary</b></td><td><b>Issues Referenced</b></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=411807">411807</a></td><td>wdoekes</td><td>configs: Clean up long line and typo in res_odbc.conf.sample.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=411964">411964</a></td><td>rmudgett</td><td>Internal timing: Add notice that the -I and internal_timing option are no longer needed.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=412114">412114</a></td><td>mjordan</td><td>main/astobj2: Make REF_DEBUG a menuselect item; improve REF_DEBUG output</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=412480">412480</a></td><td>mjordan</td><td>channels/chan_oss: Fix compilation problem on SmartOS/Illumos/SunOS</td>
|
||||
<td><a href="https://issues.asterisk.org/jira/browse/ASTERISK-23576">ASTERISK-23576</a></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=412585">412585</a></td><td>newtonr</td><td>sounds: Fix Sounds Makefile and XML that didn't support new sound prompt sets</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=412745">412745</a></td><td>kmoore</td><td>HTTP: Add TCP_NODELAY to accepted connections</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=412764">412764</a></td><td>jrose</td><td>Typo in CHANGES</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=412922">412922</a></td><td>rmudgett</td><td>http: Fix spurious ERROR message in responses with no content.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=413241">413241</a></td><td>mmichelson</td><td>Prevent crashes in res_config_odbc due to uninitialized string fields.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=413304">413304</a></td><td>mmichelson</td><td>Ensure that all parts of SQL UPDATEs and DELETEs are encoded.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=413396">413396</a></td><td>mmichelson</td><td>Fix encoding of custom prepare extra data.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=413485">413485</a></td><td>file</td><td>app_queue: Extend documentation for various Manager actions and events.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=413586">413586</a></td><td>kmoore</td><td>Allow Asterisk to compile under GCC 4.10</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=413591">413591</a></td><td>kmoore</td><td>Fix 32bit build for chan_sip</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=413592">413592</a></td><td>kmoore</td><td>Fix 32bit build for func_env</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=413894">413894</a></td><td>wdoekes</td><td>res_musiconhold: Minor cleanup.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=413949">413949</a></td><td>wdoekes</td><td>chan_local+app_dial: Propagagate call answered elsewhere over local channels.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=413991">413991</a></td><td>rmudgett</td><td>app_meetme: Fix overwrite of DAHDI conference data structure.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=414269">414269</a></td><td>rmudgett</td><td>chan_local: Only block media frames when a generator is on both ends of a local channel.</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/branches/1.8?view=revision&revision=414345">414345</a></td><td>mjordan</td><td>UPGRADE: Add note for REF_DEBUG flag</td>
|
||||
<td></td></tr></table>
|
||||
<hr/>
|
||||
<a name="diffstat"><h2 align="center">Diffstat Results</h2></a>
|
||||
<center><a href="#top">[Back to Top]</a></center><br/><p>This is a summary of the changes to the source code that went into this release that was generated using the diffstat utility.</p>
|
||||
<pre>
|
||||
CHANGES | 23 +++
|
||||
UPGRADE.txt | 15 ++
|
||||
addons/chan_ooh323.c | 5
|
||||
apps/app_adsiprog.c | 2
|
||||
apps/app_dial.c | 8 -
|
||||
apps/app_dumpchan.c | 6
|
||||
apps/app_festival.c | 2
|
||||
apps/app_getcpeid.c | 8 -
|
||||
apps/app_meetme.c | 40 ++++--
|
||||
apps/app_minivm.c | 4
|
||||
apps/app_queue.c | 96 +++++++++++----
|
||||
apps/app_sms.c | 46 ++++---
|
||||
apps/app_stack.c | 3
|
||||
apps/app_voicemail.c | 8 -
|
||||
build_tools/cflags.xml | 3
|
||||
cdr/cdr_adaptive_odbc.c | 4
|
||||
cel/cel_odbc.c | 6
|
||||
cel/cel_pgsql.c | 4
|
||||
channels/chan_alsa.c | 6
|
||||
channels/chan_dahdi.c | 52 ++++----
|
||||
channels/chan_gtalk.c | 12 +
|
||||
channels/chan_iax2.c | 78 ++++++------
|
||||
channels/chan_jingle.c | 14 +-
|
||||
channels/chan_local.c | 22 ++-
|
||||
channels/chan_mgcp.c | 26 ++--
|
||||
channels/chan_oss.c | 2
|
||||
channels/chan_phone.c | 4
|
||||
channels/chan_sip.c | 245 +++++++++++++++++++++++----------------
|
||||
channels/chan_skinny.c | 24 +--
|
||||
channels/chan_unistim.c | 74 +++++------
|
||||
channels/iax2-parser.c | 4
|
||||
channels/sig_analog.c | 30 ++--
|
||||
channels/sig_pri.c | 101 +++++++++++-----
|
||||
channels/sip/config_parser.c | 2
|
||||
channels/sip/include/sip.h | 11 +
|
||||
configs/asterisk.conf.sample | 1
|
||||
configs/res_odbc.conf.sample | 8 -
|
||||
configs/sip.conf.sample | 12 +
|
||||
configure.ac | 2
|
||||
contrib/scripts/refcounter.py | 171 +++++++++++++++++++++++++++
|
||||
formats/format_pcm.c | 8 -
|
||||
funcs/func_enum.c | 2
|
||||
funcs/func_env.c | 6
|
||||
funcs/func_iconv.c | 2
|
||||
funcs/func_srv.c | 6
|
||||
funcs/func_strings.c | 2
|
||||
funcs/func_sysinfo.c | 10 -
|
||||
include/asterisk/astobj.h | 2
|
||||
include/asterisk/astobj2.h | 129 +++++++++++---------
|
||||
include/asterisk/autoconfig.h.in | 9 -
|
||||
include/asterisk/options.h | 6
|
||||
include/asterisk/utils.h | 9 +
|
||||
main/abstract_jb.c | 2
|
||||
main/adsi.c | 2
|
||||
main/aoc.c | 4
|
||||
main/app.c | 4
|
||||
main/asterisk.c | 22 ++-
|
||||
main/astobj2.c | 62 ++++++---
|
||||
main/audiohook.c | 6
|
||||
main/bridging.c | 10 -
|
||||
main/callerid.c | 8 -
|
||||
main/ccss.c | 20 +--
|
||||
main/cel.c | 2
|
||||
main/channel.c | 148 ++++++++++++-----------
|
||||
main/cli.c | 12 -
|
||||
main/config.c | 10 -
|
||||
main/data.c | 13 +-
|
||||
main/devicestate.c | 4
|
||||
main/dsp.c | 2
|
||||
main/enum.c | 4
|
||||
main/event.c | 4
|
||||
main/features.c | 12 -
|
||||
main/file.c | 2
|
||||
main/frame.c | 14 +-
|
||||
main/http.c | 22 +++
|
||||
main/io.c | 4
|
||||
main/loader.c | 4
|
||||
main/logger.c | 15 --
|
||||
main/manager.c | 11 -
|
||||
main/netsock.c | 6
|
||||
main/pbx.c | 2
|
||||
main/rtp_engine.c | 4
|
||||
main/sched.c | 6
|
||||
main/security_events.c | 6
|
||||
main/stdtime/localtime.c | 2
|
||||
main/stun.c | 10 -
|
||||
main/taskprocessor.c | 2
|
||||
main/translate.c | 6
|
||||
main/udptl.c | 8 -
|
||||
main/utils.c | 33 ++++-
|
||||
main/xmldoc.c | 2
|
||||
pbx/dundi-parser.c | 8 -
|
||||
pbx/pbx_config.c | 2
|
||||
pbx/pbx_dundi.c | 8 -
|
||||
res/ael/pval.c | 2
|
||||
res/res_agi.c | 4
|
||||
res/res_calendar.c | 8 -
|
||||
res/res_calendar_caldav.c | 7 -
|
||||
res/res_calendar_ews.c | 2
|
||||
res/res_calendar_exchange.c | 4
|
||||
res/res_calendar_icalendar.c | 2
|
||||
res/res_config_odbc.c | 63 ++++++----
|
||||
res/res_config_pgsql.c | 11 -
|
||||
res/res_crypto.c | 2
|
||||
res/res_fax.c | 56 ++++----
|
||||
res/res_fax_spandsp.c | 16 +-
|
||||
res/res_jabber.c | 28 ++--
|
||||
res/res_monitor.c | 4
|
||||
res/res_musiconhold.c | 70 ++++-------
|
||||
res/res_odbc.c | 2
|
||||
res/res_pktccops.c | 19 +--
|
||||
res/res_rtp_asterisk.c | 46 +++----
|
||||
res/res_srtp.c | 10 -
|
||||
res/res_timing_dahdi.c | 4
|
||||
sounds/Makefile | 6
|
||||
sounds/sounds.xml | 171 +++++++++++++++++++++++++--
|
||||
116 files changed, 1553 insertions(+), 887 deletions(-)
|
||||
</pre><br/>
|
||||
<hr/>
|
||||
</body>
|
||||
</html>
|
||||
407
asterisk-1.8.28.0-summary.txt
Normal file
407
asterisk-1.8.28.0-summary.txt
Normal file
@@ -0,0 +1,407 @@
|
||||
Release Summary
|
||||
|
||||
asterisk-1.8.28.0
|
||||
|
||||
Date: 2014-05-29
|
||||
|
||||
<asteriskteam@digium.com>
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Table of Contents
|
||||
|
||||
1. Summary
|
||||
2. Contributors
|
||||
3. Closed Issues
|
||||
4. Other Changes
|
||||
5. Diffstat
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Summary
|
||||
|
||||
[Back to Top]
|
||||
|
||||
This release includes only bug fixes. The changes included were made only
|
||||
to address problems that have been identified in this release series.
|
||||
Users should be able to safely upgrade to this version if this release
|
||||
series is already in use. Users considering upgrading from a previous
|
||||
release series are strongly encouraged to review the UPGRADE.txt document
|
||||
as well as the CHANGES document for information about upgrading to this
|
||||
release series.
|
||||
|
||||
The data in this summary reflects changes that have been made since the
|
||||
previous release, asterisk-1.8.27.0.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Contributors
|
||||
|
||||
[Back to Top]
|
||||
|
||||
This table lists the people who have submitted code, those that have
|
||||
tested patches, as well as those that reported issues on the issue tracker
|
||||
that were resolved in this release. For coders, the number is how many of
|
||||
their patches (of any size) were committed into this release. For testers,
|
||||
the number is the number of times their name was listed as assisting with
|
||||
testing a patch. Finally, for reporters, the number is the number of
|
||||
issues that they reported that were closed by commits that went into this
|
||||
release.
|
||||
|
||||
Coders Testers Reporters
|
||||
6 rmudgett 2 kristoff
|
||||
5 wdoekes 2 wdoekes
|
||||
4 kmoore 1 dwmw2
|
||||
4 mmichelson 1 gma
|
||||
3 jrose 1 igorg
|
||||
3 mjordan 1 italorossi
|
||||
1 Bradley Watkins 1 marquis
|
||||
1 David Woodhouse 1 mjordan
|
||||
1 file 1 mmichelson
|
||||
1 jcolp 1 one47
|
||||
1 may 1 rolek
|
||||
1 newtonr
|
||||
1 sgriepentrog
|
||||
1 Steve Davies
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Closed Issues
|
||||
|
||||
[Back to Top]
|
||||
|
||||
This is a list of all issues from the issue tracker that were closed by
|
||||
changes that went into this release.
|
||||
|
||||
Category: Addons/chan_ooh323
|
||||
|
||||
ASTERISK-23754: [patch] Use var/lib directory for log file configured in
|
||||
asterisk.conf
|
||||
Revision: 414152
|
||||
Reporter: igorg
|
||||
Coders: may
|
||||
|
||||
Category: Applications/app_queue
|
||||
|
||||
ASTERISK-23547: [patch] app_queue removing callers from queue when
|
||||
reloading
|
||||
Revision: 411584
|
||||
Reporter: italorossi
|
||||
Coders: jcolp
|
||||
|
||||
Category: Applications/app_sms
|
||||
|
||||
ASTERISK-18331: app_sms failure
|
||||
Revision: 412655
|
||||
Reporter: dwmw2
|
||||
Coders: David Woodhouse
|
||||
|
||||
Category: Applications/app_stack
|
||||
|
||||
ASTERISK-23620: Code path in app_stack fails to unlock list
|
||||
Revision: 412225
|
||||
Reporter: marquis
|
||||
Coders: Bradley Watkins
|
||||
|
||||
Category: CEL/General
|
||||
|
||||
ASTERISK-22977: chan_sip+CEL: missing ANSWER and PICKUP event for
|
||||
INVITE/w/replaces pickup
|
||||
Revision: 413832
|
||||
Reporter: wdoekes
|
||||
Coders: wdoekes
|
||||
|
||||
Category: Channels/chan_dahdi
|
||||
|
||||
ASTERISK-23709: Regression in Dahdi/Analog/waitfordialtone
|
||||
Revision: 414067
|
||||
Reporter: one47
|
||||
Coders: Steve Davies
|
||||
|
||||
Category: Channels/chan_sip/General
|
||||
|
||||
ASTERISK-19465: P-Asserted-Identity Privacy
|
||||
Revision: 412744
|
||||
Reporter: kristoff
|
||||
Coders: jrose
|
||||
|
||||
ASTERISK-19465: P-Asserted-Identity Privacy
|
||||
Revision: 412821
|
||||
Reporter: kristoff
|
||||
Coders: jrose
|
||||
|
||||
Category: Channels/chan_sip/Transfers
|
||||
|
||||
ASTERISK-22977: chan_sip+CEL: missing ANSWER and PICKUP event for
|
||||
INVITE/w/replaces pickup
|
||||
Revision: 413832
|
||||
Reporter: wdoekes
|
||||
Coders: wdoekes
|
||||
|
||||
Category: Core/Channels
|
||||
|
||||
ASTERISK-22846: testsuite: masquerade super test fails on all branches
|
||||
(still)
|
||||
Revision: 411715
|
||||
Reporter: mjordan
|
||||
Coders: rmudgett
|
||||
|
||||
Category: Core/Configuration
|
||||
|
||||
ASTERISK-23546: CB_ADD_LEN does not do what you'd think
|
||||
Revision: 411960
|
||||
Reporter: wdoekes
|
||||
Coders: rmudgett
|
||||
|
||||
Category: Core/General
|
||||
|
||||
ASTERISK-23546: CB_ADD_LEN does not do what you'd think
|
||||
Revision: 411960
|
||||
Reporter: wdoekes
|
||||
Coders: rmudgett
|
||||
|
||||
Category: Core/RTP
|
||||
|
||||
ASTERISK-23665: Wrong mime type for codec H263-1998 (h263+)
|
||||
Revision: 413787
|
||||
Reporter: gma
|
||||
Coders: wdoekes
|
||||
|
||||
Category: Functions/func_strings
|
||||
|
||||
ASTERISK-23650: Intermittent segfault in string functions
|
||||
Revision: 414214
|
||||
Reporter: rolek
|
||||
Coders: sgriepentrog
|
||||
|
||||
Category: Resources/res_config_pgsql
|
||||
|
||||
ASTERISK-23707: Realtime Contacts: Apparent mismatch between PGSQL
|
||||
database state and Asterisk state
|
||||
Revision: 413224
|
||||
Reporter: mmichelson
|
||||
Coders: mmichelson
|
||||
|
||||
Category: Tests/testsuite
|
||||
|
||||
ASTERISK-22846: testsuite: masquerade super test fails on all branches
|
||||
(still)
|
||||
Revision: 411715
|
||||
Reporter: mjordan
|
||||
Coders: rmudgett
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Commits Not Associated with an Issue
|
||||
|
||||
[Back to Top]
|
||||
|
||||
This is a list of all changes that went into this release that did not
|
||||
directly close an issue from the issue tracker. The commits may have been
|
||||
marked as being related to an issue. If that is the case, the issue
|
||||
numbers are listed here, as well.
|
||||
|
||||
+------------------------------------------------------------------------+
|
||||
| Revision | Author | Summary | Issues |
|
||||
| | | | Referenced |
|
||||
|----------+------------+-------------------------------+----------------|
|
||||
| | | configs: Clean up long line | |
|
||||
| 411807 | wdoekes | and typo in | |
|
||||
| | | res_odbc.conf.sample. | |
|
||||
|----------+------------+-------------------------------+----------------|
|
||||
| | | Internal timing: Add notice | |
|
||||
| 411964 | rmudgett | that the -I and | |
|
||||
| | | internal_timing option are no | |
|
||||
| | | longer needed. | |
|
||||
|----------+------------+-------------------------------+----------------|
|
||||
| | | main/astobj2: Make REF_DEBUG | |
|
||||
| 412114 | mjordan | a menuselect item; improve | |
|
||||
| | | REF_DEBUG output | |
|
||||
|----------+------------+-------------------------------+----------------|
|
||||
| | | channels/chan_oss: Fix | |
|
||||
| 412480 | mjordan | compilation problem on | ASTERISK-23576 |
|
||||
| | | SmartOS/Illumos/SunOS | |
|
||||
|----------+------------+-------------------------------+----------------|
|
||||
| | | sounds: Fix Sounds Makefile | |
|
||||
| 412585 | newtonr | and XML that didn't support | |
|
||||
| | | new sound prompt sets | |
|
||||
|----------+------------+-------------------------------+----------------|
|
||||
| 412745 | kmoore | HTTP: Add TCP_NODELAY to | |
|
||||
| | | accepted connections | |
|
||||
|----------+------------+-------------------------------+----------------|
|
||||
| 412764 | jrose | Typo in CHANGES | |
|
||||
|----------+------------+-------------------------------+----------------|
|
||||
| | | http: Fix spurious ERROR | |
|
||||
| 412922 | rmudgett | message in responses with no | |
|
||||
| | | content. | |
|
||||
|----------+------------+-------------------------------+----------------|
|
||||
| | | Prevent crashes in | |
|
||||
| 413241 | mmichelson | res_config_odbc due to | |
|
||||
| | | uninitialized string fields. | |
|
||||
|----------+------------+-------------------------------+----------------|
|
||||
| | | Ensure that all parts of SQL | |
|
||||
| 413304 | mmichelson | UPDATEs and DELETEs are | |
|
||||
| | | encoded. | |
|
||||
|----------+------------+-------------------------------+----------------|
|
||||
| 413396 | mmichelson | Fix encoding of custom | |
|
||||
| | | prepare extra data. | |
|
||||
|----------+------------+-------------------------------+----------------|
|
||||
| | | app_queue: Extend | |
|
||||
| 413485 | file | documentation for various | |
|
||||
| | | Manager actions and events. | |
|
||||
|----------+------------+-------------------------------+----------------|
|
||||
| 413586 | kmoore | Allow Asterisk to compile | |
|
||||
| | | under GCC 4.10 | |
|
||||
|----------+------------+-------------------------------+----------------|
|
||||
| 413591 | kmoore | Fix 32bit build for chan_sip | |
|
||||
|----------+------------+-------------------------------+----------------|
|
||||
| 413592 | kmoore | Fix 32bit build for func_env | |
|
||||
|----------+------------+-------------------------------+----------------|
|
||||
| 413894 | wdoekes | res_musiconhold: Minor | |
|
||||
| | | cleanup. | |
|
||||
|----------+------------+-------------------------------+----------------|
|
||||
| | | chan_local+app_dial: | |
|
||||
| 413949 | wdoekes | Propagagate call answered | |
|
||||
| | | elsewhere over local | |
|
||||
| | | channels. | |
|
||||
|----------+------------+-------------------------------+----------------|
|
||||
| | | app_meetme: Fix overwrite of | |
|
||||
| 413991 | rmudgett | DAHDI conference data | |
|
||||
| | | structure. | |
|
||||
|----------+------------+-------------------------------+----------------|
|
||||
| | | chan_local: Only block media | |
|
||||
| 414269 | rmudgett | frames when a generator is on | |
|
||||
| | | both ends of a local channel. | |
|
||||
|----------+------------+-------------------------------+----------------|
|
||||
| 414345 | mjordan | UPGRADE: Add note for | |
|
||||
| | | REF_DEBUG flag | |
|
||||
+------------------------------------------------------------------------+
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Diffstat Results
|
||||
|
||||
[Back to Top]
|
||||
|
||||
This is a summary of the changes to the source code that went into this
|
||||
release that was generated using the diffstat utility.
|
||||
|
||||
CHANGES | 23 +++
|
||||
UPGRADE.txt | 15 ++
|
||||
addons/chan_ooh323.c | 5
|
||||
apps/app_adsiprog.c | 2
|
||||
apps/app_dial.c | 8 -
|
||||
apps/app_dumpchan.c | 6
|
||||
apps/app_festival.c | 2
|
||||
apps/app_getcpeid.c | 8 -
|
||||
apps/app_meetme.c | 40 ++++--
|
||||
apps/app_minivm.c | 4
|
||||
apps/app_queue.c | 96 +++++++++++----
|
||||
apps/app_sms.c | 46 ++++---
|
||||
apps/app_stack.c | 3
|
||||
apps/app_voicemail.c | 8 -
|
||||
build_tools/cflags.xml | 3
|
||||
cdr/cdr_adaptive_odbc.c | 4
|
||||
cel/cel_odbc.c | 6
|
||||
cel/cel_pgsql.c | 4
|
||||
channels/chan_alsa.c | 6
|
||||
channels/chan_dahdi.c | 52 ++++----
|
||||
channels/chan_gtalk.c | 12 +
|
||||
channels/chan_iax2.c | 78 ++++++------
|
||||
channels/chan_jingle.c | 14 +-
|
||||
channels/chan_local.c | 22 ++-
|
||||
channels/chan_mgcp.c | 26 ++--
|
||||
channels/chan_oss.c | 2
|
||||
channels/chan_phone.c | 4
|
||||
channels/chan_sip.c | 245 +++++++++++++++++++++++----------------
|
||||
channels/chan_skinny.c | 24 +--
|
||||
channels/chan_unistim.c | 74 +++++------
|
||||
channels/iax2-parser.c | 4
|
||||
channels/sig_analog.c | 30 ++--
|
||||
channels/sig_pri.c | 101 +++++++++++-----
|
||||
channels/sip/config_parser.c | 2
|
||||
channels/sip/include/sip.h | 11 +
|
||||
configs/asterisk.conf.sample | 1
|
||||
configs/res_odbc.conf.sample | 8 -
|
||||
configs/sip.conf.sample | 12 +
|
||||
configure.ac | 2
|
||||
contrib/scripts/refcounter.py | 171 +++++++++++++++++++++++++++
|
||||
formats/format_pcm.c | 8 -
|
||||
funcs/func_enum.c | 2
|
||||
funcs/func_env.c | 6
|
||||
funcs/func_iconv.c | 2
|
||||
funcs/func_srv.c | 6
|
||||
funcs/func_strings.c | 2
|
||||
funcs/func_sysinfo.c | 10 -
|
||||
include/asterisk/astobj.h | 2
|
||||
include/asterisk/astobj2.h | 129 +++++++++++---------
|
||||
include/asterisk/autoconfig.h.in | 9 -
|
||||
include/asterisk/options.h | 6
|
||||
include/asterisk/utils.h | 9 +
|
||||
main/abstract_jb.c | 2
|
||||
main/adsi.c | 2
|
||||
main/aoc.c | 4
|
||||
main/app.c | 4
|
||||
main/asterisk.c | 22 ++-
|
||||
main/astobj2.c | 62 ++++++---
|
||||
main/audiohook.c | 6
|
||||
main/bridging.c | 10 -
|
||||
main/callerid.c | 8 -
|
||||
main/ccss.c | 20 +--
|
||||
main/cel.c | 2
|
||||
main/channel.c | 148 ++++++++++++-----------
|
||||
main/cli.c | 12 -
|
||||
main/config.c | 10 -
|
||||
main/data.c | 13 +-
|
||||
main/devicestate.c | 4
|
||||
main/dsp.c | 2
|
||||
main/enum.c | 4
|
||||
main/event.c | 4
|
||||
main/features.c | 12 -
|
||||
main/file.c | 2
|
||||
main/frame.c | 14 +-
|
||||
main/http.c | 22 +++
|
||||
main/io.c | 4
|
||||
main/loader.c | 4
|
||||
main/logger.c | 15 --
|
||||
main/manager.c | 11 -
|
||||
main/netsock.c | 6
|
||||
main/pbx.c | 2
|
||||
main/rtp_engine.c | 4
|
||||
main/sched.c | 6
|
||||
main/security_events.c | 6
|
||||
main/stdtime/localtime.c | 2
|
||||
main/stun.c | 10 -
|
||||
main/taskprocessor.c | 2
|
||||
main/translate.c | 6
|
||||
main/udptl.c | 8 -
|
||||
main/utils.c | 33 ++++-
|
||||
main/xmldoc.c | 2
|
||||
pbx/dundi-parser.c | 8 -
|
||||
pbx/pbx_config.c | 2
|
||||
pbx/pbx_dundi.c | 8 -
|
||||
res/ael/pval.c | 2
|
||||
res/res_agi.c | 4
|
||||
res/res_calendar.c | 8 -
|
||||
res/res_calendar_caldav.c | 7 -
|
||||
res/res_calendar_ews.c | 2
|
||||
res/res_calendar_exchange.c | 4
|
||||
res/res_calendar_icalendar.c | 2
|
||||
res/res_config_odbc.c | 63 ++++++----
|
||||
res/res_config_pgsql.c | 11 -
|
||||
res/res_crypto.c | 2
|
||||
res/res_fax.c | 56 ++++----
|
||||
res/res_fax_spandsp.c | 16 +-
|
||||
res/res_jabber.c | 28 ++--
|
||||
res/res_monitor.c | 4
|
||||
res/res_musiconhold.c | 70 ++++-------
|
||||
res/res_odbc.c | 2
|
||||
res/res_pktccops.c | 19 +--
|
||||
res/res_rtp_asterisk.c | 46 +++----
|
||||
res/res_srtp.c | 10 -
|
||||
res/res_timing_dahdi.c | 4
|
||||
sounds/Makefile | 6
|
||||
sounds/sounds.xml | 171 +++++++++++++++++++++++++--
|
||||
116 files changed, 1553 insertions(+), 887 deletions(-)
|
||||
|
||||
----------------------------------------------------------------------
|
||||
1
build_tools/.gitignore
vendored
Normal file
1
build_tools/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
menuselect-deps
|
||||
@@ -1,5 +1,7 @@
|
||||
#!/bin/sh
|
||||
|
||||
MAINLINE_BRANCH=1.8
|
||||
|
||||
if [ -f ${1}/.version ]; then
|
||||
cat ${1}/.version
|
||||
elif [ -d ${1}/.svn ]; then
|
||||
@@ -94,16 +96,16 @@ elif [ -d ${1}/.git ]; then
|
||||
MODIFIED=""
|
||||
SVN_REV=`${GIT} log --pretty=full -1 | grep -F "git-svn-id:" | sed -e "s/.*\@\([^\s]*\)\s.*/\1/g"`
|
||||
if [ -z "$SVN_REV" ]; then
|
||||
VERSION=GIT-`${GIT} describe --long --always --tags --dirty=M 2> /dev/null`
|
||||
VERSION=`${GIT} describe --long --always --tags --dirty=M 2> /dev/null`
|
||||
if [ $? -ne 0 ]; then
|
||||
if [ "`${GIT} ls-files -m | wc -l`" != "0" ]; then
|
||||
MODIFIED="M"
|
||||
fi
|
||||
# Some older versions of git do not support all the above
|
||||
# options.
|
||||
VERSION=GIT-`${GIT} rev-parse --short --verify HEAD`${MODIFIED}
|
||||
VERSION=`${GIT} rev-parse --short --verify HEAD`${MODIFIED}
|
||||
fi
|
||||
echo ${VERSION}
|
||||
echo GIT-${MAINLINE_BRANCH}-${VERSION}
|
||||
else
|
||||
PARTS=`LANG=C ${GIT} log --pretty=full | grep -F "git-svn-id:" | head -1 | awk '{print $2;}' | sed -e s:^.*/svn/$2/:: | sed -e 's:/: :g' | sed -e 's/@.*$//g'`
|
||||
BRANCH=0
|
||||
|
||||
@@ -1,62 +0,0 @@
|
||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||
<html xmlns="http://www.w3.org/1999/xhtml">
|
||||
<head><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /><title>Release Summary - certified-asterisk-1.8.28-cert5</title></head>
|
||||
<body>
|
||||
<h1 align="center"><a name="top">Release Summary</a></h1>
|
||||
<h3 align="center">certified-asterisk-1.8.28-cert5</h3>
|
||||
<h3 align="center">Date: 2015-04-08</h3>
|
||||
<h3 align="center"><asteriskteam@digium.com></h3>
|
||||
<hr/>
|
||||
<h2 align="center">Table of Contents</h2>
|
||||
<ol>
|
||||
<li><a href="#summary">Summary</a></li>
|
||||
<li><a href="#contributors">Contributors</a></li>
|
||||
<li><a href="#commits">Other Changes</a></li>
|
||||
<li><a href="#diffstat">Diffstat</a></li>
|
||||
</ol>
|
||||
<hr/>
|
||||
<a name="summary"><h2 align="center">Summary</h2></a>
|
||||
<center><a href="#top">[Back to Top]</a></center><br/><p>This release has been made to address one or more security vulnerabilities that have been identified. A security advisory document has been published for each vulnerability that includes additional information. Users of versions of Asterisk that are affected are strongly encouraged to review the advisories and determine what action they should take to protect their systems from these issues.</p>
|
||||
<p>Security Advisories: <a href="http://downloads.asterisk.org/pub/security/AST-2015-003.html">AST-2015-003</a></p>
|
||||
<p>The data in this summary reflects changes that have been made since the previous release, certified-asterisk-1.8.28-cert4.</p>
|
||||
<hr/>
|
||||
<a name="contributors"><h2 align="center">Contributors</h2></a>
|
||||
<center><a href="#top">[Back to Top]</a></center><br/><p>This table lists the people who have submitted code, those that have tested patches, as well as those that reported issues on the issue tracker that were resolved in this release. For coders, the number is how many of their patches (of any size) were committed into this release. For testers, the number is the number of times their name was listed as assisting with testing a patch. Finally, for reporters, the number is the number of issues that they reported that were closed by commits that went into this release.</p>
|
||||
<table width="100%" border="0">
|
||||
<tr>
|
||||
<td width="33%"><h3>Coders</h3></td>
|
||||
<td width="33%"><h3>Testers</h3></td>
|
||||
<td width="33%"><h3>Reporters</h3></td>
|
||||
</tr>
|
||||
<tr valign="top">
|
||||
<td>
|
||||
3 bebuild<br/>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
<td>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<hr/>
|
||||
<a name="commits"><h2 align="center">Commits Not Associated with an Issue</h2></a>
|
||||
<center><a href="#top">[Back to Top]</a></center><br/><p>This is a list of all changes that went into this release that did not directly close an issue from the issue tracker. The commits may have been marked as being related to an issue. If that is the case, the issue numbers are listed here, as well.</p>
|
||||
<table width="100%" border="1">
|
||||
<tr><td><b>Revision</b></td><td><b>Author</b></td><td><b>Summary</b></td><td><b>Issues Referenced</b></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/certified/tags/1.8.28-cert5?view=revision&revision=434324">434324</a></td><td>bebuild</td><td>Move bad tag</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/certified/tags/1.8.28-cert5?view=revision&revision=434331">434331</a></td><td>bebuild</td><td>Update .version; remove summaries</td>
|
||||
<td></td></tr><tr><td><a href="http://svn.digium.com/view/asterisk/certified/tags/1.8.28-cert5?view=revision&revision=434394">434394</a></td><td>bebuild</td><td>Merge changes for AST-2015-003</td>
|
||||
<td></td></tr></table>
|
||||
<hr/>
|
||||
<a name="diffstat"><h2 align="center">Diffstat Results</h2></a>
|
||||
<center><a href="#top">[Back to Top]</a></center><br/><p>This is a summary of the changes to the source code that went into this release that was generated using the diffstat utility.</p>
|
||||
<pre>
|
||||
.version | 2
|
||||
ChangeLog | 25 +++++++
|
||||
certified-asterisk-1.8.28-cert4-summary.html | 62 ------------------
|
||||
certified-asterisk-1.8.28-cert4-summary.txt | 93 ---------------------------
|
||||
main/tcptls.c | 11 ++-
|
||||
5 files changed, 35 insertions(+), 158 deletions(-)
|
||||
</pre><br/>
|
||||
<hr/>
|
||||
</body>
|
||||
</html>
|
||||
@@ -1,93 +0,0 @@
|
||||
Release Summary
|
||||
|
||||
certified-asterisk-1.8.28-cert5
|
||||
|
||||
Date: 2015-04-08
|
||||
|
||||
<asteriskteam@digium.com>
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Table of Contents
|
||||
|
||||
1. Summary
|
||||
2. Contributors
|
||||
3. Other Changes
|
||||
4. Diffstat
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Summary
|
||||
|
||||
[Back to Top]
|
||||
|
||||
This release has been made to address one or more security vulnerabilities
|
||||
that have been identified. A security advisory document has been published
|
||||
for each vulnerability that includes additional information. Users of
|
||||
versions of Asterisk that are affected are strongly encouraged to review
|
||||
the advisories and determine what action they should take to protect their
|
||||
systems from these issues.
|
||||
|
||||
Security Advisories: AST-2015-003
|
||||
|
||||
The data in this summary reflects changes that have been made since the
|
||||
previous release, certified-asterisk-1.8.28-cert4.
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Contributors
|
||||
|
||||
[Back to Top]
|
||||
|
||||
This table lists the people who have submitted code, those that have
|
||||
tested patches, as well as those that reported issues on the issue tracker
|
||||
that were resolved in this release. For coders, the number is how many of
|
||||
their patches (of any size) were committed into this release. For testers,
|
||||
the number is the number of times their name was listed as assisting with
|
||||
testing a patch. Finally, for reporters, the number is the number of
|
||||
issues that they reported that were closed by commits that went into this
|
||||
release.
|
||||
|
||||
Coders Testers Reporters
|
||||
3 bebuild
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Commits Not Associated with an Issue
|
||||
|
||||
[Back to Top]
|
||||
|
||||
This is a list of all changes that went into this release that did not
|
||||
directly close an issue from the issue tracker. The commits may have been
|
||||
marked as being related to an issue. If that is the case, the issue
|
||||
numbers are listed here, as well.
|
||||
|
||||
+------------------------------------------------------------------------+
|
||||
| Revision | Author | Summary | Issues Referenced |
|
||||
|----------+---------+-------------------------------+-------------------|
|
||||
| 434324 | bebuild | Move bad tag | |
|
||||
|----------+---------+-------------------------------+-------------------|
|
||||
| 434331 | bebuild | Update .version; remove | |
|
||||
| | | summaries | |
|
||||
|----------+---------+-------------------------------+-------------------|
|
||||
| 434394 | bebuild | Merge changes for | |
|
||||
| | | AST-2015-003 | |
|
||||
+------------------------------------------------------------------------+
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
Diffstat Results
|
||||
|
||||
[Back to Top]
|
||||
|
||||
This is a summary of the changes to the source code that went into this
|
||||
release that was generated using the diffstat utility.
|
||||
|
||||
.version | 2
|
||||
ChangeLog | 25 +++++++
|
||||
certified-asterisk-1.8.28-cert4-summary.html | 62 ------------------
|
||||
certified-asterisk-1.8.28-cert4-summary.txt | 93 ---------------------------
|
||||
main/tcptls.c | 11 ++-
|
||||
5 files changed, 35 insertions(+), 158 deletions(-)
|
||||
|
||||
----------------------------------------------------------------------
|
||||
1
channels/h323/.gitignore
vendored
Normal file
1
channels/h323/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
Makefile
|
||||
@@ -553,7 +553,7 @@ exten => s,n,WaitExten ; Wait for an extension to be dialed.
|
||||
exten => 2,1,BackGround(demo-moreinfo) ; Give some more information.
|
||||
exten => 2,n,Goto(s,instruct)
|
||||
|
||||
exten => 3,1,Set(LANGUAGE()=fr) ; Set language to french
|
||||
exten => 3,1,Set(CHANNEL(language)=fr) ; Set language to french
|
||||
exten => 3,n,Goto(s,restart) ; Start with the congratulations
|
||||
|
||||
exten => 1000,1,Goto(default,s,1)
|
||||
|
||||
@@ -3,8 +3,6 @@
|
||||
;
|
||||
; Third party application call management support and PBX event supervision
|
||||
;
|
||||
; This configuration file is read every time someone logs in
|
||||
;
|
||||
; Use the "manager show commands" at the CLI to list available manager commands
|
||||
; and their authorization levels.
|
||||
;
|
||||
|
||||
1
doc/.gitignore
vendored
Normal file
1
doc/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
core-en_US.xml
|
||||
3
include/asterisk/.gitignore
vendored
Normal file
3
include/asterisk/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
autoconfig.h
|
||||
build.h
|
||||
buildopts.h
|
||||
3
main/.gitignore
vendored
Normal file
3
main/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
asterisk
|
||||
libasteriskssl.so.1
|
||||
version.c
|
||||
13
main/editline/.gitignore
vendored
Normal file
13
main/editline/.gitignore
vendored
Normal file
@@ -0,0 +1,13 @@
|
||||
*.o_a
|
||||
Makefile
|
||||
common.h
|
||||
config.cache
|
||||
config.h
|
||||
editline.c
|
||||
emacs.h
|
||||
fcns.c
|
||||
fcns.h
|
||||
help.c
|
||||
help.h
|
||||
makelist
|
||||
vi.h
|
||||
7
menuselect/.gitignore
vendored
Normal file
7
menuselect/.gitignore
vendored
Normal file
@@ -0,0 +1,7 @@
|
||||
autoconfig.h
|
||||
cmenuselect
|
||||
config.log
|
||||
config.status
|
||||
menuselect
|
||||
nmenuselect
|
||||
gmenuselect
|
||||
123
menuselect/Makefile
Normal file
123
menuselect/Makefile
Normal file
@@ -0,0 +1,123 @@
|
||||
#
|
||||
# Asterisk -- A telephony toolkit for Linux.
|
||||
#
|
||||
# Makefile for Menuselect
|
||||
#
|
||||
# Copyright (C) 2005-2008, Digium, Inc.
|
||||
#
|
||||
# Russell Bryant <russell@digium.com>
|
||||
#
|
||||
# This program is free software, distributed under the terms of
|
||||
# the GNU General Public License
|
||||
#
|
||||
|
||||
# even though we could use '-include makeopts' here, use a wildcard
|
||||
# lookup anyway, so that make won't try to build makeopts if it doesn't
|
||||
# exist (other rules will force it to be built if needed)
|
||||
ifneq ($(wildcard makeopts),)
|
||||
include makeopts
|
||||
endif
|
||||
|
||||
.PHONY: clean dist-clean distclean test ntest ctest gtest
|
||||
|
||||
# Basic set of sources and flags/libraries/includes
|
||||
OBJS:=menuselect.o strcompat.o
|
||||
CFLAGS+=-g -D_GNU_SOURCE -Wall
|
||||
|
||||
ifeq ($(MENUSELECT_DEBUG),yes)
|
||||
CFLAGS += -DMENUSELECT_DEBUG
|
||||
endif
|
||||
|
||||
ifdef NCURSES_LIB
|
||||
C_OBJS += menuselect_curses.o
|
||||
C_LIBS +=$(NCURSES_LIB)
|
||||
C_INCLUDE += $(NCURSES_INCLUDE)
|
||||
ALL_TGTS += cmenuselect
|
||||
else
|
||||
ifdef CURSES_LIB
|
||||
C_OBJS += menuselect_curses.o
|
||||
C_LIBS +=$(CURSES_LIB)
|
||||
C_INCLUDE += $(CURSES_INCLUDE)
|
||||
ALL_TGTS += cmenuselect
|
||||
endif
|
||||
endif
|
||||
|
||||
ifdef GTK2_LIB
|
||||
G_OBJS += menuselect_gtk.o
|
||||
G_LIBS += $(GTK2_LIB)
|
||||
G_INCLUDE += $(GTK2_INCLUDE)
|
||||
ALL_TGTS += gmenuselect
|
||||
endif
|
||||
|
||||
ifdef NEWT_LIB
|
||||
N_OBJS += menuselect_newt.o
|
||||
N_LIBS += $(NEWT_LIB)
|
||||
N_INCLUDE += $(NEWT_INCLUDE)
|
||||
ALL_TGTS += nmenuselect
|
||||
endif
|
||||
|
||||
M_OBJS += menuselect_stub.o
|
||||
M_LIBS += $(LIBXML2_LIB)
|
||||
ALL_TGTS += menuselect
|
||||
|
||||
all: $(ALL_TGTS)
|
||||
|
||||
$(OBJS) $(C_OBJS) $(N_OBJS) $(G_OBJS) $(M_OBJS): autoconfig.h menuselect.h
|
||||
|
||||
makeopts autoconfig.h: autoconfig.h.in makeopts.in
|
||||
@./configure $(CONFIGURE_SILENT)
|
||||
@echo "****"
|
||||
@echo "**** The configure script was just executed, so 'make' needs to be"
|
||||
@echo "**** restarted."
|
||||
@echo "****"
|
||||
@exit 1
|
||||
|
||||
ifdef C_OBJS
|
||||
menuselect_curses.o: CFLAGS+=$(C_INCLUDE)
|
||||
cmenuselect: $(OBJS) $(C_OBJS)
|
||||
$(CC) $(LDFLAGS) -o $@ $^ $(C_LIBS) $(LIBXML2_LIB)
|
||||
else
|
||||
cmenuselect:
|
||||
endif
|
||||
|
||||
ifdef G_OBJS
|
||||
menuselect_gtk.o: CFLAGS+=$(G_INCLUDE)
|
||||
gmenuselect: $(OBJS) $(G_OBJS)
|
||||
$(CC) $(LDFLAGS) -o $@ $^ $(G_LIBS) $(LIBXML2_LIB)
|
||||
else
|
||||
gmenuselect:
|
||||
endif
|
||||
|
||||
ifdef N_OBJS
|
||||
menuselect_newt.o: CFLAGS+=$(N_INCLUDE)
|
||||
nmenuselect: $(OBJS) $(N_OBJS)
|
||||
$(CC) $(LDFLAGS) -o $@ $^ $(N_LIBS) $(LIBXML2_LIB)
|
||||
else
|
||||
nmenuselect:
|
||||
endif
|
||||
|
||||
menuselect.o: CFLAGS+=$(LIBXML2_INCLUDE)
|
||||
|
||||
menuselect: $(OBJS) $(M_OBJS)
|
||||
$(CC) $(LDFLAGS) -o $@ $^ $(M_LIBS)
|
||||
|
||||
test: menuselect
|
||||
(cd test; ../$< menuselect.makeopts)
|
||||
|
||||
ctest: cmenuselect
|
||||
(cd test; ../$< menuselect.makeopts)
|
||||
|
||||
gtest: gmenuselect
|
||||
(cd test; ../$< menuselect.makeopts)
|
||||
|
||||
ntest: nmenuselect
|
||||
(cd test; ../$< menuselect.makeopts)
|
||||
|
||||
clean:
|
||||
rm -f menuselect cmenuselect gmenuselect nmenuselect $(OBJS) $(M_OBJS) $(C_OBJS) $(G_OBJS) $(N_OBJS)
|
||||
|
||||
dist-clean: distclean
|
||||
|
||||
distclean: clean
|
||||
rm -f autoconfig.h config.status config.log makeopts
|
||||
rm -rf autom4te.cache
|
||||
178
menuselect/README
Normal file
178
menuselect/README
Normal file
@@ -0,0 +1,178 @@
|
||||
MENUSELECT
|
||||
Copyright (C) 2005-2006, Digium, Inc.
|
||||
Russell Bryant <russell@digium.com>
|
||||
-------------------------------------------------------------------------------
|
||||
|
||||
|
||||
ABOUT
|
||||
|
||||
Menuselect is a tool designed to be used in conjunction with GNU make. It
|
||||
allows for an XML specification of Makefile variables and optional space
|
||||
delimited values of these variables. These values can then be used in the
|
||||
Makefile to make various decisions during the build process.
|
||||
|
||||
Menuselect also provides a mechanism for dependency checking for each possible
|
||||
member (value) of each category (Makefile variable). These dependencies are
|
||||
generally checked by using autoconf and the results provided to menuselect. If
|
||||
dependencies for a member are not met, the user will not be allowed to make
|
||||
that selection. In the same way the menuselect does dependency checking, it
|
||||
also does conflict checking. If a listed conflict for a member is met, then
|
||||
the user will not be allowed to select it.
|
||||
|
||||
For use with automated builds or when the user has no desire to make selections
|
||||
different than the defined defaults, menuselect can generate a default output
|
||||
file for use in the build.
|
||||
|
||||
Menuselect can also do a sanity check on existing input files. If any member
|
||||
has been selected that has conflicts or unmet dependencies, then menuselect
|
||||
will exit with an error and output to notify the user of the situation. This is
|
||||
typically done at the beginning of the build process to ensure that given all
|
||||
of the known information, the build is going to be successful.
|
||||
|
||||
|
||||
MENUSELECT DEPENDENCIES
|
||||
|
||||
libncurses -- This is needed for the curses frontend.
|
||||
libnewt -- This is needed for the newt frontend (optional).
|
||||
libxml2 -- This library, the XML C parser and toolkit of Gnome, is used for
|
||||
XML parsing.
|
||||
(http://xmlsoft.org/)
|
||||
|
||||
ENVIRONMENT SETUP
|
||||
|
||||
The file menuselect.h contains a couple of defines which specify locations for
|
||||
various files. These locations are relative to the directory from which
|
||||
menuselect will be executed.
|
||||
|
||||
#define OUTPUT_MAKEOPTS_DEFAULT "menuselect.makeopts"
|
||||
This is the location where the menuselect output will be saved.
|
||||
|
||||
#define MENUSELECT_DEPS "build_tools/menuselect-deps"
|
||||
This is the location where menuselect will expect to find the input file that
|
||||
provides dependency and conflict information. More information on the format of
|
||||
this file can be found in the section about dependency and conflict checking.
|
||||
|
||||
|
||||
DEPENDENCY AND CONFLICT CHECKING
|
||||
|
||||
Members may have as many conflicts and dependencies specified as needed. An
|
||||
example of the MENUSELECT_DEPS file would look like this:
|
||||
|
||||
DEPENDENCY1=1
|
||||
DEPENDENCY2=0
|
||||
CONFLICT1=0
|
||||
|
||||
In this case, "DEPENDENCY1" has been met, "DEPENDENCY2" has not been met, and
|
||||
"CONFLICT1" is not present.
|
||||
|
||||
To ask menuselect to do a background sanity check on dependencies and
|
||||
conflicts, it can be called like this:
|
||||
|
||||
./menuselect --check-deps <input_file1> [input_file2] [...]
|
||||
|
||||
The format of the input files must be of the same format menuselect uses to
|
||||
create the OUPUT_MAKEOPTS_DEFAULT.
|
||||
|
||||
|
||||
ENABLING AND DISABLING OPTIONS FROM THE COMMAND LINE
|
||||
|
||||
If you would like menuselect to update choices via the command line, it can be
|
||||
done with the following syntax:
|
||||
|
||||
Enable an option:
|
||||
$ menuselect/menuselect --enable TEST_FRAMEWORK menuselect.makeopts
|
||||
|
||||
Enable all options in a category:
|
||||
$ menuselect/menuselect --enable-category MENUSELECT_TEST menuselect.makeopts
|
||||
|
||||
Disable an option:
|
||||
$ menuselect/menuselect --disable TEST_FRAMEWORK menuselect.makeopts
|
||||
|
||||
Disable all options in a category:
|
||||
$ menuselect/menuselect --disable-category MENUSELECT_TEST menuselect.makeopts
|
||||
|
||||
|
||||
SETTING UP AVAILABLE OPTIONS
|
||||
|
||||
The XML specification for the menu lives in the file "menuselect-tree" and should
|
||||
be in the same directory that menuselect will be executed from. An example
|
||||
menuselect-tree file as used in the Asterisk project (http://www.asterisk.org) is
|
||||
provided in example_menuselect-tree
|
||||
|
||||
Menu:
|
||||
The top level tag in menuselect-tree is the <menu> tag. All of the categories
|
||||
reside inside of the <menu> ... </menu> block.
|
||||
|
||||
Menu Attributes:
|
||||
name="Asterisk Module Selection"
|
||||
This specifies the title of the menu. It is displayed at the top of the
|
||||
screen when using the curses frontend
|
||||
|
||||
Categories:
|
||||
A <category> contains members. The category tag can contain a number of
|
||||
different attributes to specify different behavior.
|
||||
|
||||
Category Attributes:
|
||||
name="MENUSELECT_APPS"
|
||||
The name attribute is required. This is the name of the variable that will
|
||||
be in the output from menuselect.
|
||||
|
||||
displayname="Applications"
|
||||
If this is specfied, this is what will be shown in the menu to the user.
|
||||
|
||||
positive_output="yes"
|
||||
The default for menuselect is to output all of the members of a category
|
||||
that are *not* selected. This is because it is often convenient to be able
|
||||
to define a full list in the Makefile and then filter out the results from
|
||||
menuselect. Using GNU make, an example of this would be:
|
||||
APPS:=$(filter-out $(MENUSELECT_APPS),$(APPS))
|
||||
|
||||
remove_on_change=".lastclean"
|
||||
This attribute can contain a space delimited list of files to be deleted
|
||||
when it is time to build an output file if any of the members of this
|
||||
category have changed values from their values for existing input when the
|
||||
application was started.
|
||||
|
||||
Members:
|
||||
A <member> contains conflicts and dependencies. The member tag can contain a
|
||||
number of different attributes to specify different behavior.
|
||||
|
||||
Member Attributes:
|
||||
name="app_meetme"
|
||||
The name attribute is required. This is the value that will be added to the
|
||||
variable specified by the category when selected (or not selected) depending
|
||||
on the setting of the positive_output attribute of the category.
|
||||
|
||||
displayname="Call Conferencing Application"
|
||||
If this is specified, this will be provided as a description of this member
|
||||
when the cursor is on it in the menu.
|
||||
|
||||
remove_on_change="apps/app_meetme.o apps/app_meetme.so"
|
||||
This attribute can contain a space delimeted list of files to be deleted
|
||||
when it is time to build an output file if the value of this member has
|
||||
changed from its value in any existing input when the application was
|
||||
started.
|
||||
|
||||
Dependencies:
|
||||
A dependency for a <member> is specified using a <depend> tag. The name of
|
||||
the dependency corresponds to names in the MENUSELECT_DEPS file. This is an
|
||||
example of specifying a dependency for a member:
|
||||
<member name="app_meetme">
|
||||
<depend>zaptel</depend>
|
||||
</member>
|
||||
|
||||
Conflicts:
|
||||
A conflict for a <member> is specified using a <conflict> tag. The name of
|
||||
the conflict corresponds to names in the MENUSELECT_DEPS file. This is an
|
||||
example of specifying a dependency for a member:
|
||||
<member name="res_musiconhold">
|
||||
<conflict>win32</conflict>
|
||||
</member>
|
||||
|
||||
|
||||
REPORTING BUGS
|
||||
|
||||
Any bug reports or feature enhancement submissions to menuselect should be
|
||||
submitted at https://issues.asterisk.org/
|
||||
|
||||
Thank you!
|
||||
19
menuselect/aclocal.m4
vendored
Normal file
19
menuselect/aclocal.m4
vendored
Normal file
@@ -0,0 +1,19 @@
|
||||
# generated automatically by aclocal 1.14.1 -*- Autoconf -*-
|
||||
|
||||
# Copyright (C) 1996-2013 Free Software Foundation, Inc.
|
||||
|
||||
# This file is free software; the Free Software Foundation
|
||||
# gives unlimited permission to copy and/or distribute it,
|
||||
# with or without modifications, as long as this notice is preserved.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
|
||||
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
||||
# PARTICULAR PURPOSE.
|
||||
|
||||
m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
|
||||
m4_include([../autoconf/ast_check_gnu_make.m4])
|
||||
m4_include([../autoconf/ast_ext_lib.m4])
|
||||
m4_include([../autoconf/ast_ext_tool_check.m4])
|
||||
m4_include([../autoconf/ast_gcc_attribute.m4])
|
||||
m4_include([../autoconf/ast_prog_sed.m4])
|
||||
137
menuselect/autoconfig.h.in
Normal file
137
menuselect/autoconfig.h.in
Normal file
@@ -0,0 +1,137 @@
|
||||
/* autoconfig.h.in. Generated from configure.ac by autoheader. */
|
||||
|
||||
#ifndef MENUSELECT_AUTOCONFIG_H
|
||||
#define MENUSELECT_AUTOCONFIG_H
|
||||
|
||||
#ifndef _REENTRANT
|
||||
#define _REENTRANT
|
||||
#endif
|
||||
|
||||
|
||||
/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
|
||||
systems. This function is required for `alloca.c' support on those systems.
|
||||
*/
|
||||
#undef CRAY_STACKSEG_END
|
||||
|
||||
/* Define to 1 if using `alloca.c'. */
|
||||
#undef C_ALLOCA
|
||||
|
||||
/* Define to 1 if you have `alloca', as a function or macro. */
|
||||
#undef HAVE_ALLOCA
|
||||
|
||||
/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
|
||||
*/
|
||||
#undef HAVE_ALLOCA_H
|
||||
|
||||
/* Define to 1 if you have the `asprintf' function. */
|
||||
#undef HAVE_ASPRINTF
|
||||
|
||||
/* Define to 1 if your GCC C compiler supports the 'weak' attribute. */
|
||||
#undef HAVE_ATTRIBUTE_weak
|
||||
|
||||
/* Define to 1 if your GCC C compiler supports the 'weak_import' attribute. */
|
||||
#undef HAVE_ATTRIBUTE_weak_import
|
||||
|
||||
/* Define to 1 if your GCC C compiler supports the 'weakref' attribute. */
|
||||
#undef HAVE_ATTRIBUTE_weakref
|
||||
|
||||
/* Define to 1 if you have the curses library. */
|
||||
#undef HAVE_CURSES
|
||||
|
||||
/* Define to 1 if you have the `getloadavg' function. */
|
||||
#undef HAVE_GETLOADAVG
|
||||
|
||||
/* Define if your system has the GTK2 libraries. */
|
||||
#undef HAVE_GTK2
|
||||
|
||||
/* Define to 1 if you have the <inttypes.h> header file. */
|
||||
#undef HAVE_INTTYPES_H
|
||||
|
||||
/* Define if your system has the LIBXML2 libraries. */
|
||||
#undef HAVE_LIBXML2
|
||||
|
||||
/* Define to 1 if you have the <memory.h> header file. */
|
||||
#undef HAVE_MEMORY_H
|
||||
|
||||
/* Define to 1 if you have the ncurses library. */
|
||||
#undef HAVE_NCURSES
|
||||
|
||||
/* Define to 1 if you have the newt library. */
|
||||
#undef HAVE_NEWT
|
||||
|
||||
/* Define to 1 if you have the `setenv' function. */
|
||||
#undef HAVE_SETENV
|
||||
|
||||
/* Define to 1 if you have the <stdint.h> header file. */
|
||||
#undef HAVE_STDINT_H
|
||||
|
||||
/* Define to 1 if you have the <stdlib.h> header file. */
|
||||
#undef HAVE_STDLIB_H
|
||||
|
||||
/* Define to 1 if you have the `strcasestr' function. */
|
||||
#undef HAVE_STRCASESTR
|
||||
|
||||
/* Define to 1 if you have the <strings.h> header file. */
|
||||
#undef HAVE_STRINGS_H
|
||||
|
||||
/* Define to 1 if you have the <string.h> header file. */
|
||||
#undef HAVE_STRING_H
|
||||
|
||||
/* Define to 1 if you have the `strndup' function. */
|
||||
#undef HAVE_STRNDUP
|
||||
|
||||
/* Define to 1 if you have the `strnlen' function. */
|
||||
#undef HAVE_STRNLEN
|
||||
|
||||
/* Define to 1 if you have the `strsep' function. */
|
||||
#undef HAVE_STRSEP
|
||||
|
||||
/* Define to 1 if you have the <sys/stat.h> header file. */
|
||||
#undef HAVE_SYS_STAT_H
|
||||
|
||||
/* Define to 1 if you have the <sys/types.h> header file. */
|
||||
#undef HAVE_SYS_TYPES_H
|
||||
|
||||
/* Define to 1 if you have the <unistd.h> header file. */
|
||||
#undef HAVE_UNISTD_H
|
||||
|
||||
/* Define to 1 if you have the `unsetenv' function. */
|
||||
#undef HAVE_UNSETENV
|
||||
|
||||
/* Define to 1 if you have the `vasprintf' function. */
|
||||
#undef HAVE_VASPRINTF
|
||||
|
||||
/* Define to the address where bug reports for this package should be sent. */
|
||||
#undef PACKAGE_BUGREPORT
|
||||
|
||||
/* Define to the full name of this package. */
|
||||
#undef PACKAGE_NAME
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#undef PACKAGE_STRING
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#undef PACKAGE_TARNAME
|
||||
|
||||
/* Define to the home page for this package. */
|
||||
#undef PACKAGE_URL
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#undef PACKAGE_VERSION
|
||||
|
||||
/* If using the C implementation of alloca, define if you know the
|
||||
direction of stack growth for your system; otherwise it will be
|
||||
automatically deduced at runtime.
|
||||
STACK_DIRECTION > 0 => grows toward higher addresses
|
||||
STACK_DIRECTION < 0 => grows toward lower addresses
|
||||
STACK_DIRECTION = 0 => direction of growth unknown */
|
||||
#undef STACK_DIRECTION
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#undef STDC_HEADERS
|
||||
|
||||
/* Define to `unsigned int' if <sys/types.h> does not define. */
|
||||
#undef size_t
|
||||
|
||||
#endif
|
||||
|
||||
41
menuselect/bootstrap.sh
Executable file
41
menuselect/bootstrap.sh
Executable file
@@ -0,0 +1,41 @@
|
||||
#!/bin/sh
|
||||
|
||||
check_for_app() {
|
||||
$1 --version 2>&1 >/dev/null
|
||||
if [ $? != 0 ]
|
||||
then
|
||||
echo "Please install $1 and run bootstrap.sh again!"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
uname -s | grep -q FreeBSD
|
||||
if [ $? = 0 ]
|
||||
then
|
||||
check_for_app autoconf259
|
||||
check_for_app autoheader259
|
||||
check_for_app automake19
|
||||
check_for_app aclocal19
|
||||
echo "Generating the configure script ..."
|
||||
aclocal19 -I ../autoconf 2>/dev/null
|
||||
autoconf259
|
||||
autoheader259
|
||||
automake19 --add-missing --copy 2>/dev/null
|
||||
else
|
||||
AUTOCONF_VERSION=2.59
|
||||
AUTOMAKE_VERSION=1.9
|
||||
export AUTOCONF_VERSION
|
||||
export AUTOMAKE_VERSION
|
||||
|
||||
check_for_app autoconf
|
||||
check_for_app autoheader
|
||||
check_for_app automake
|
||||
check_for_app aclocal
|
||||
echo "Generating the configure script ..."
|
||||
aclocal -I ../autoconf 2>/dev/null
|
||||
autoconf
|
||||
autoheader
|
||||
automake --add-missing --copy 2>/dev/null
|
||||
fi
|
||||
|
||||
exit 0
|
||||
1420
menuselect/config.guess
vendored
Executable file
1420
menuselect/config.guess
vendored
Executable file
File diff suppressed because it is too large
Load Diff
1794
menuselect/config.sub
vendored
Executable file
1794
menuselect/config.sub
vendored
Executable file
File diff suppressed because it is too large
Load Diff
6138
menuselect/configure
vendored
Executable file
6138
menuselect/configure
vendored
Executable file
File diff suppressed because it is too large
Load Diff
154
menuselect/configure.ac
Normal file
154
menuselect/configure.ac
Normal file
@@ -0,0 +1,154 @@
|
||||
# Process this file with autoconf to produce a configure script.
|
||||
|
||||
AC_PREREQ(2.59)
|
||||
|
||||
m4_define([MENUSELECT_VERSION],
|
||||
m4_bpatsubst(m4_esyscmd([./make_version .]),
|
||||
[\([0-9.]*\)\(\w\|\W\)*],
|
||||
[\1]))
|
||||
AC_INIT(menuselect, MENUSELECT_VERSION, www.asterisk.org)
|
||||
|
||||
# check existence of the package
|
||||
AC_CONFIG_SRCDIR([menuselect.c])
|
||||
|
||||
# specify output header file
|
||||
AC_CONFIG_HEADER(autoconfig.h)
|
||||
|
||||
AC_COPYRIGHT("Menuselect")
|
||||
AC_REVISION($Revision$)
|
||||
|
||||
AC_CANONICAL_BUILD
|
||||
AC_CANONICAL_HOST
|
||||
|
||||
HOST_OS=${host_os}
|
||||
AC_SUBST(HOST_OS)
|
||||
|
||||
PBX_WINARCH=0
|
||||
case "${host_os}" in
|
||||
freebsd*)
|
||||
OSARCH=FreeBSD
|
||||
;;
|
||||
netbsd*)
|
||||
OSARCH=NetBSD
|
||||
;;
|
||||
openbsd*)
|
||||
OSARCH=OpenBSD
|
||||
;;
|
||||
solaris*)
|
||||
OSARCH=SunOS
|
||||
;;
|
||||
mingw32)
|
||||
OSARCH=mingw32
|
||||
PBX_WINARCH=1
|
||||
;;
|
||||
cygwin)
|
||||
OSARCH=cygwin
|
||||
PBX_WINARCH=1
|
||||
;;
|
||||
linux-gnueabi)
|
||||
OSARCH=linux-gnu
|
||||
;;
|
||||
*)
|
||||
OSARCH=${host_os}
|
||||
;;
|
||||
esac
|
||||
|
||||
AH_TOP(
|
||||
#ifndef MENUSELECT_AUTOCONFIG_H
|
||||
#define MENUSELECT_AUTOCONFIG_H
|
||||
|
||||
#ifndef _REENTRANT
|
||||
#define _REENTRANT
|
||||
#endif
|
||||
)
|
||||
|
||||
AH_BOTTOM(
|
||||
#endif
|
||||
)
|
||||
|
||||
# Checks for programs.
|
||||
AC_PROG_CC
|
||||
AST_CHECK_GNU_MAKE
|
||||
|
||||
|
||||
AC_LANG(C)
|
||||
AC_ARG_ENABLE([debug],
|
||||
[AS_HELP_STRING([--enable-debug], [Turn on debug mode])],
|
||||
[case "${enableval}" in
|
||||
y|ye|yes) MENUSELECT_DEBUG=yes ;;
|
||||
n|no) MENUSELECT_DEBUG=no ;;
|
||||
*) AC_MSG_ERROR(bad value ${enableval} for --enable-debug) ;;
|
||||
esac])
|
||||
AC_SUBST(MENUSELECT_DEBUG)
|
||||
|
||||
# Support weak symbols on a platform specific basis. The Mac OS X
|
||||
# (Darwin) support must be isolated from the other platforms because
|
||||
# it has caused other platforms to fail.
|
||||
#
|
||||
case "${OSARCH}" in
|
||||
darwin*)
|
||||
# Allow weak symbol support on Darwin platforms only because there
|
||||
# is active community support for it.
|
||||
# However, Darwin seems to break weak symbols for each new version.
|
||||
#
|
||||
AST_GCC_ATTRIBUTE(weak_import, [], [], PBX_WEAKREF)
|
||||
|
||||
# Several other platforms including Linux have GCC versions that
|
||||
# define the weak attribute. However, this attribute is only
|
||||
# setup for use in the code by Darwin.
|
||||
AST_GCC_ATTRIBUTE(weak, [], [], PBX_WEAKREF)
|
||||
;;
|
||||
linux-gnu)
|
||||
# Primarily support weak symbols on Linux platforms.
|
||||
#
|
||||
AST_GCC_ATTRIBUTE(weakref, [weakref("foo")], static, PBX_WEAKREF)
|
||||
;;
|
||||
*)
|
||||
# Allow weak symbols on other platforms. However, any problems
|
||||
# with this feature on other platforms must be fixed by the
|
||||
# community.
|
||||
#
|
||||
AST_GCC_ATTRIBUTE(weakref, [weakref("foo")], static, PBX_WEAKREF)
|
||||
;;
|
||||
esac
|
||||
|
||||
AC_FUNC_ALLOCA
|
||||
AC_CHECK_FUNCS([asprintf getloadavg setenv strcasestr strndup strnlen strsep unsetenv vasprintf])
|
||||
|
||||
# The frontend can use curses, ncurses, newt or GTK2 so check for all of them
|
||||
|
||||
AST_EXT_LIB_SETUP([NEWT], [newt], [newt])
|
||||
AST_EXT_LIB_SETUP([CURSES], [curses], [curses])
|
||||
AST_EXT_LIB_SETUP([NCURSES], [ncurses], [ncurses])
|
||||
AST_EXT_LIB_SETUP([LIBXML2], [LibXML2], [libxml2])
|
||||
|
||||
AST_EXT_LIB_CHECK([NEWT], [newt], [newtBell], [newt.h])
|
||||
AST_EXT_LIB_CHECK([CURSES], [curses], [initscr], [curses.h])
|
||||
AST_EXT_LIB_CHECK([NCURSES], [ncurses], [initscr], [curses.h])
|
||||
AST_EXT_TOOL_CHECK([LIBXML2], [xml2-config], , ,
|
||||
[#include <libxml/tree.h>
|
||||
#include <libxml/parser.h>],
|
||||
[LIBXML_TEST_VERSION])
|
||||
|
||||
if test "${PBX_LIBXML2}" != 1; then
|
||||
AC_MSG_ERROR([Could not find required 'Libxml2' development package])
|
||||
fi
|
||||
|
||||
PBX_GTK2=0
|
||||
AC_CHECK_TOOL(PKGCONFIG, pkg-config, No)
|
||||
if test ! "x${PKGCONFIG}" = xNo; then
|
||||
GTK2_INCLUDE=$(${PKGCONFIG} gtk+-2.0 --cflags 2>/dev/null)
|
||||
GTK2_LIB=$(${PKGCONFIG} gtk+-2.0 --libs)
|
||||
PBX_GTK2=1
|
||||
AC_DEFINE([HAVE_GTK2], 1, [Define if your system has the GTK2 libraries.])
|
||||
fi
|
||||
AC_SUBST(PBX_GTK2)
|
||||
AC_SUBST(GTK2_INCLUDE)
|
||||
AC_SUBST(GTK2_LIB)
|
||||
|
||||
test "$silent"=yes && ac_sub_configure_args="${ac_sub_configure_args} --silent"
|
||||
|
||||
AC_CONFIG_FILES([makeopts])
|
||||
AC_OUTPUT
|
||||
|
||||
AC_MSG_NOTICE(Menuselect build configuration successfully completed)
|
||||
17
menuselect/contrib/Makefile-dummy
Normal file
17
menuselect/contrib/Makefile-dummy
Normal file
@@ -0,0 +1,17 @@
|
||||
all:
|
||||
|
||||
clean:
|
||||
|
||||
dist-clean:
|
||||
|
||||
makeopts:
|
||||
|
||||
menuselect:
|
||||
./menuselect-dummy
|
||||
|
||||
# Generate some dummy files to satifsy dependencies from the main
|
||||
# Makefile.
|
||||
dummies:
|
||||
touch linkedlists.h menuselect.c menuselect_curses.c \
|
||||
menuselect.h menuselect_stub.c
|
||||
|
||||
741
menuselect/contrib/menuselect-dummy
Executable file
741
menuselect/contrib/menuselect-dummy
Executable file
@@ -0,0 +1,741 @@
|
||||
#!/usr/bin/perl -w
|
||||
|
||||
# menuselect - a simple drop-in replacement of the batch-mode menuselect
|
||||
# included with Asterisk.
|
||||
#
|
||||
# Copyright (C) 2008 by Tzafrir Cohen <tzafrir.cohen@xorcom.com>
|
||||
#
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
|
||||
# USA
|
||||
|
||||
# Installation: copy this script to menuselect/menuselect . Copy the
|
||||
# included Makefile as menuselect/Makefile and run:
|
||||
#
|
||||
# make -C makefile dummies
|
||||
#
|
||||
# It takes configuration from build_tools/conf . Sample config file:
|
||||
#
|
||||
# By default all modules will be built (except those marked not be
|
||||
# used by default)
|
||||
#
|
||||
# # exclude: Don't try to build the following modules.
|
||||
# #exclude app_test
|
||||
#
|
||||
# # You can have multiple items in each line, and multiple lines.
|
||||
# # Each item is a perl regular expression that must match the whole
|
||||
# # module name.
|
||||
# #exclude res_config_.*
|
||||
#
|
||||
# # include: syntax is the same as exclude. Overrides exclude and
|
||||
# # modules that are marked as disabled by defualt:
|
||||
# #include res_config_sqlite3 app_skel
|
||||
#
|
||||
# # If you want to make sure some modules will be conifgured to build,
|
||||
# # you can require them. If modules that match any of the 'require'
|
||||
# # pattern are not configured to build, menuselect will panic.
|
||||
# # Same pattern rules apply here. Why would you want that? I have no
|
||||
# # idea.
|
||||
# #require chan_h323 app_directory
|
||||
#
|
||||
# # random - the value for this keyword is a number between 1 and
|
||||
# # 100. The higher it is, more chances not to include each module.
|
||||
# # Writes the list of modules that got hit to
|
||||
# # build_tools/mods_removed_random .
|
||||
# # Note that unlike 'make randomconfig' and such the random
|
||||
# # configuration changes each time you run 'make', thus if a build
|
||||
# # failed you should first read build_tools/mods_removed_random
|
||||
# # before re-running make.
|
||||
# #random 10
|
||||
#
|
||||
# # Anything after a '#' is ignored, and likewise empty lines.
|
||||
# # Naturally.
|
||||
|
||||
use strict;
|
||||
use Getopt::Long;
|
||||
|
||||
# Holds global dependncy information. Keys are module names.
|
||||
my %ModInfo = ();
|
||||
|
||||
# extract configuration from kernel modules:
|
||||
my $AutoconfDepsFile = "build_tools/menuselect-deps";
|
||||
|
||||
my $AutoconfOptsFile = "makeopts";
|
||||
my %ConfigureOpts = (); #
|
||||
|
||||
# configuration file to read for some directives:
|
||||
my $ConfFile = "build_tools/conf";
|
||||
|
||||
my $DumpFile = 'build_tools/dump_deps';
|
||||
|
||||
# Modules removed randomely:
|
||||
my $RandomeModsFile = "build_tools/mods_removed_random";
|
||||
|
||||
my $MakedepsFile = "menuselect.makedeps";
|
||||
|
||||
my $MakeoptsFile = "menuselect.makeopts";
|
||||
|
||||
# If those modules are not present, the build will fail (PCRE patterns)
|
||||
my @RequiredModules = ();
|
||||
|
||||
my @Subdirs = qw/addons apps bridges cdr cel channels codecs formats funcs main pbx res tests utils/;
|
||||
|
||||
my @XmlCategories = 'cflags';
|
||||
|
||||
# Modules should not bother building (PCRE patterns)
|
||||
my @ExcludedModules = ();
|
||||
|
||||
# Do try building those. Overrides 'exclude' and 'defaultenable: no'
|
||||
my @IncludedModules = ();
|
||||
|
||||
# A chance to rule-out a module randomely.
|
||||
my $RandomKnockoutFactor = 0;
|
||||
|
||||
sub warning($) {
|
||||
my $msg = shift;
|
||||
print STDERR "$0: Warning: $msg\n";
|
||||
}
|
||||
|
||||
# Convert XML syntax to mail-header-like syntax:
|
||||
# <var>value</var> --> Var: value
|
||||
sub extract_xml_key($) {
|
||||
my %attr = ();
|
||||
my $xml_line = shift;
|
||||
if ($xml_line !~ m{^\s*<([a-z_A-Z0-9]+)(\s+([^>]*))?>([^<]*)</\1>}) {
|
||||
warning "parsed empty value from XML line $xml_line";
|
||||
return ('', ''); # warn?
|
||||
}
|
||||
my ($var, $val) = ($1, $4);
|
||||
$var =~ s{^[a-z]}{\u$&};
|
||||
if (defined $3) {
|
||||
my $attr_text = $3;
|
||||
while ($attr_text =~ /^( *([^=]+)="([^"]+)")/) {
|
||||
my ($var, $val) = ($2, $3);
|
||||
$attr_text =~ s/^$1//;
|
||||
$attr{$var} = $val;
|
||||
}
|
||||
}
|
||||
return ($var, $val, %attr);
|
||||
}
|
||||
|
||||
# Get information embedded in source files from a subdirectory.
|
||||
# First parameter is the subdirectory and further ones are the actual
|
||||
# source files.
|
||||
sub get_subdir_module_info {
|
||||
my $subdir = shift;
|
||||
my @files = @_;
|
||||
|
||||
my $dir = uc($subdir);
|
||||
|
||||
foreach my $src (@files) {
|
||||
open SRC,$src or die "Can't read from source file $src: $!\n";
|
||||
$src =~ m|.*/([^/]*)\.c|;
|
||||
my $mod_name = $1;
|
||||
my %data = (
|
||||
Type=>'module',
|
||||
Module=>$mod_name,
|
||||
Dir=> $dir,
|
||||
Avail=>1
|
||||
);
|
||||
|
||||
while (<SRC>) {
|
||||
next unless (m|^/\*\*\* MODULEINFO| .. m|^ *[*]+/|);
|
||||
next unless (m|^[A-Z]| || m|^\s*<|);
|
||||
|
||||
# At this point we can assume we're in the module
|
||||
# info section.
|
||||
chomp;
|
||||
my ($var, $val, %attr) = extract_xml_key($_);
|
||||
foreach (keys %attr) {
|
||||
push @{$data{$_}},($attr{$_});
|
||||
}
|
||||
if ($var =~ /^(Depend|Use)$/i) {
|
||||
# use uppercase for dependency names;
|
||||
$val = uc($val);
|
||||
}
|
||||
if ( ! exists $data{$var} ) {
|
||||
$data{$var} = [$val];
|
||||
} else {
|
||||
push @{$data{$var}},($val);
|
||||
}
|
||||
}
|
||||
close SRC;
|
||||
|
||||
$ModInfo{uc($mod_name)} = \%data;
|
||||
}
|
||||
}
|
||||
|
||||
# extract embedded information in all the source tree.
|
||||
sub extract_subdirs {
|
||||
for my $subdir(@_) {
|
||||
get_subdir_module_info($subdir, <$subdir/*.c> , <$subdir/*.cc>);
|
||||
}
|
||||
}
|
||||
|
||||
# parse a partial XML document that is included as an input
|
||||
# for menuselect in a few places. Naturally a full-fledged XML parsing
|
||||
# will not be done here. A line-based parsing that happens to work will
|
||||
# have to do.
|
||||
sub parse_menuselect_xml_file($) {
|
||||
my $file_name = shift;
|
||||
open XML,$file_name or
|
||||
die "Failed opening XML file $file_name: $!.\n";
|
||||
|
||||
my $header = <XML>;
|
||||
$header =~ /^\s*<category\s+name="MENUSELECT_([^"]+)"\s/;
|
||||
my $category = $1;
|
||||
my $member;
|
||||
|
||||
while(<XML>){
|
||||
next unless (m{^\s*<(/?[a-z]+)[>\s]});
|
||||
my $tag = $1;
|
||||
|
||||
if ($tag eq 'member') {
|
||||
if (! m{^\s*<member\s+name="([^"]+)" displayname="([^"]+)"\s*>}){
|
||||
warning "Bad XML member line: $_ ($file_name:$.)\n";
|
||||
next;
|
||||
}
|
||||
my ($name, $display_name) = ($1, $2);
|
||||
|
||||
$member = {
|
||||
Type => 'XML',
|
||||
Dir => $category,
|
||||
Module => $1,
|
||||
DisplayName => $2,
|
||||
Defaultenabled => ['no'],
|
||||
Avail => 1,
|
||||
|
||||
};
|
||||
} elsif ($tag eq '/member') {
|
||||
$ModInfo{$member->{Module}} = $member;
|
||||
} elsif ($tag eq '/category') {
|
||||
last;
|
||||
} else {
|
||||
if (! m/^\s*<([a-z]+)>([^<]+)</) {
|
||||
warning "(1) Unknown XML line $_ ($file_name:$.)\n";
|
||||
next
|
||||
}
|
||||
my ($key, $val) = extract_xml_key($_);
|
||||
if ($key eq '') {
|
||||
warning "Unknown XML line $_ ($file_name:$.)\n";
|
||||
next
|
||||
}
|
||||
if (! exists $member->{$key}) {
|
||||
$member->{$key} = [];
|
||||
}
|
||||
|
||||
# Make sure dependencies are upper-case.
|
||||
# FIXME: this is not the proper place for such a fix
|
||||
$val = uc($val) if ($key =~ /Depend|Use/);
|
||||
|
||||
# Using "unshift' rather than 'push'.
|
||||
# For a singleton value this makes the action an
|
||||
# override, as only the first value counts.
|
||||
# For a list value, however, it means a reversed
|
||||
# order.
|
||||
unshift @{$member->{$key}}, ($val);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
close XML;
|
||||
}
|
||||
|
||||
# Dump our data structure to a file.
|
||||
sub dump_deps($) {
|
||||
my $file = shift;
|
||||
open OUTPUT,">$file" or
|
||||
die "cannot open category file $file for writing: $!\n";
|
||||
|
||||
foreach my $mod_name (sort keys %ModInfo) {
|
||||
print OUTPUT "Key: $mod_name\n";
|
||||
my $data = $ModInfo{$mod_name};
|
||||
foreach my $var (sort keys %{$data} ) {
|
||||
my $val = $$data{$var};
|
||||
if (ref($val) eq 'ARRAY') {
|
||||
print OUTPUT $var.": ". (join ", ", @$val)."\n";
|
||||
} else {
|
||||
print OUTPUT "$var: $val\n";
|
||||
}
|
||||
}
|
||||
print OUTPUT "\n";
|
||||
}
|
||||
close OUTPUT;
|
||||
}
|
||||
|
||||
# Get the available libraries that autoconf generated.
|
||||
sub get_autoconf_deps() {
|
||||
open DEPS, $AutoconfDepsFile or
|
||||
die "Failed to open $AutoconfDepsFile. Aborting: $!\n";
|
||||
|
||||
my @deps_list = (<DEPS>);
|
||||
foreach (@deps_list){
|
||||
chomp;
|
||||
my ($lib, $avail_val) = split(/=/);
|
||||
my ($avail, $avail_old) = split(/:/, $avail_val);
|
||||
my $disabled = 0;
|
||||
if ($avail == -1) {
|
||||
$disabled = 1;
|
||||
$avail = 0;
|
||||
}
|
||||
$ModInfo{$lib} = {
|
||||
Type=>'lib', Avail=>$avail, Disabled => $disabled
|
||||
};
|
||||
if (defined $avail_old) {
|
||||
$ModInfo{$lib}{AvailOld} = $avail_old;
|
||||
}
|
||||
# FIXME:
|
||||
if (($avail ne "0") && ($avail ne "1")) {
|
||||
warning "Library $lib has invalid availability ".
|
||||
"value <$avail> (check $AutoconfDepsFile).\n";
|
||||
}
|
||||
}
|
||||
close DEPS;
|
||||
}
|
||||
|
||||
# Get the available libraries that autoconf generated.
|
||||
sub get_autoconf_opts() {
|
||||
open OPTS, $AutoconfOptsFile or
|
||||
die "Failed to open $AutoconfOptsFile. Aborting: $!\n";
|
||||
|
||||
while (<OPTS>) {
|
||||
chomp;
|
||||
next if /^(#|$)/;
|
||||
my ($var, $val) = split /\s*=\s*/, $_, 2;
|
||||
$ConfigureOpts{$var} = $val;
|
||||
}
|
||||
close OPTS;
|
||||
if (not exists $ConfigureOpts{AST_DEVMODE}) {
|
||||
$ConfigureOpts{AST_DEVMODE} = 'no';
|
||||
}
|
||||
}
|
||||
|
||||
# Read our specific config file.
|
||||
#
|
||||
# Its format:
|
||||
#
|
||||
# keyword values
|
||||
#
|
||||
# values are always a spaces-separated list.
|
||||
sub read_conf() {
|
||||
open CONF,$ConfFile or return;
|
||||
|
||||
while (<CONF>) {
|
||||
# remove comments and empty lines:
|
||||
chomp;
|
||||
s/#.*$//;
|
||||
next if /^\s*$/;
|
||||
|
||||
my ($keyword, @value) = split;
|
||||
|
||||
if ($keyword eq 'exclude') {
|
||||
push @ExcludedModules, @value;
|
||||
} elsif ($keyword eq 'include') {
|
||||
push @IncludedModules, @value;
|
||||
} elsif ($keyword eq 'require') {
|
||||
push @RequiredModules, @value;
|
||||
} elsif ($keyword eq 'random') {
|
||||
$RandomKnockoutFactor = $value[0] / 100;
|
||||
} else {
|
||||
warning "unknown keyword $keyword in line $. of $ConfFile.";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# generate menuselect.makedeps.
|
||||
# In this file menuselect writes dependecies of each module. CFLAGS will
|
||||
# then automatically include for each module the _INCLUDE and LDFLAGS
|
||||
# will include the _LIBS from all the depedencies of the module.
|
||||
sub gen_makedeps() {
|
||||
open MAKEDEPSS, ">$MakedepsFile" or
|
||||
die "Failed to open deps file $MakedepsFile for writing. Aborting: $!\n";
|
||||
|
||||
for my $mod_name (sort keys %ModInfo) {
|
||||
next unless ($ModInfo{$mod_name}{Type} eq 'module');
|
||||
|
||||
my $mod = $ModInfo{$mod_name};
|
||||
my @deps = ();
|
||||
|
||||
# if we have Depend or Use, put their values into
|
||||
# @deps . If we have none, move on.
|
||||
push @deps, @{$mod->{Depend}} if (exists $mod->{Depend});
|
||||
push @deps, @{$mod->{Use}} if (exists $mod->{Use});
|
||||
next unless @deps;
|
||||
|
||||
# TODO: don't print dependencies that are not external libs.
|
||||
# Not done yet until I figure out if this is safe.
|
||||
my $dep = join(' ', @deps);
|
||||
print MAKEDEPSS "MENUSELECT_DEPENDS_".$mod->{Module}."=$dep\n";
|
||||
}
|
||||
|
||||
close MAKEDEPSS;
|
||||
}
|
||||
|
||||
# Set modules from patterns specified by 'exclude' in the configuration file
|
||||
# to exclude modules from building (mark them as unavailable).
|
||||
sub apply_excluded_patterns() {
|
||||
foreach my $pattern (@ExcludedModules) {
|
||||
my @excluded = grep {/^$pattern$/i} (keys %ModInfo);
|
||||
foreach (@excluded) {
|
||||
$ModInfo{$_}{Avail} = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Set modules from patterns specified by 'include' in the configuration
|
||||
# file to exclude from building (mark them as available).
|
||||
sub apply_included_patterns() {
|
||||
foreach my $pattern (@IncludedModules) {
|
||||
my @included = grep {/^$pattern$/i} (keys %ModInfo);
|
||||
foreach (@included) {
|
||||
$ModInfo{$_}{Avail} = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# If user set the "random" config to anything > 0, drop some random
|
||||
# modules. May help expose wrong dependencies.
|
||||
sub apply_random_drop() {
|
||||
return if ($RandomKnockoutFactor <= 0);
|
||||
|
||||
open MODS_LIST, ">$RandomeModsFile" or
|
||||
die "Failed to open modules list file $RandomeModsFile for writing. Aborting: $!\n";
|
||||
for my $mod (keys %ModInfo) {
|
||||
next unless ($ModInfo{$mod}{Type} eq 'module');
|
||||
next unless (rand() < $RandomKnockoutFactor);
|
||||
$ModInfo{$mod}{Avail} = 0;
|
||||
$ModInfo{$mod}{RandomKill} = 1;
|
||||
print MODS_LIST $ModInfo{$mod}{Module}."\n";
|
||||
}
|
||||
|
||||
close MODS_LIST;
|
||||
|
||||
|
||||
}
|
||||
|
||||
sub check_required_patterns() {
|
||||
my @failed = ();
|
||||
foreach my $pattern (@RequiredModules) {
|
||||
my @required = grep {/^$pattern$/i} (keys %ModInfo);
|
||||
foreach my $mod (@required) {
|
||||
if ((! exists $ModInfo{$mod}{Checked}) ||
|
||||
(! $ModInfo{$mod}{Checked}) )
|
||||
{
|
||||
push @failed, $mod;
|
||||
}
|
||||
}
|
||||
}
|
||||
return unless (@failed);
|
||||
|
||||
my $failed_str = join ' ',@failed;
|
||||
die("Missing dependencies for the following modules: $failed_str\n");
|
||||
}
|
||||
|
||||
# Disable building for modules that were marked in the embedded module
|
||||
# information as disabled for building by default.
|
||||
sub apply_default_enabled() {
|
||||
foreach my $mod (keys %ModInfo) {
|
||||
if ((exists $ModInfo{$mod}{Defaultenabled}) &&
|
||||
$ModInfo{$mod}{Defaultenabled}[0] eq 'no')
|
||||
{
|
||||
$ModInfo{$mod}{Avail} = 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# We found a dependency we don't know about. Warn the user, and add
|
||||
# information about it:
|
||||
sub handle_unknown_dep($$) {
|
||||
my ($dep_mod, $mod) = @_;
|
||||
|
||||
my $mod_info = {
|
||||
Type => 'Unknown',
|
||||
Avail => 0,
|
||||
Checked => 0,
|
||||
};
|
||||
$ModInfo{$dep_mod} = $mod_info;
|
||||
|
||||
warning "Unknown dependency module $dep_mod (for e.g. $mod)\n";
|
||||
}
|
||||
|
||||
# recursively check dependency for a module.
|
||||
#
|
||||
# We run a scan for modules. Modules marked as 'Checked' are ones we
|
||||
# have already fully verified to have proper dependencies.
|
||||
#
|
||||
# We can only use a module or library marked as Avail => 1 (library
|
||||
# available or module not excluded).
|
||||
sub check_module($);
|
||||
sub check_module($) {
|
||||
my $mod = shift;
|
||||
|
||||
# we checked it:
|
||||
if (exists $ModInfo{$mod}{Checked}) {
|
||||
return $ModInfo{$mod}{Checked};
|
||||
}
|
||||
# A library has no dependencies of its own.
|
||||
if ($ModInfo{$mod}{Type} eq 'lib') {
|
||||
return ($ModInfo{$mod}{Avail} || 0);
|
||||
}
|
||||
# An excluded module.
|
||||
if ($ModInfo{$mod}{Avail} == 0) {
|
||||
return 0;
|
||||
}
|
||||
if (! exists $ModInfo{$mod}{Depend}) {
|
||||
$ModInfo{$mod}{Checked} = 1;
|
||||
return 1;
|
||||
}
|
||||
|
||||
my $deps_checked = 1; # may be reset below on failures:
|
||||
|
||||
if (exists $ModInfo{$mod}{Tested}) {
|
||||
# this probably means a circular dependency of some sort.
|
||||
warning "Got to module $mod that is already tested.";
|
||||
}
|
||||
$ModInfo{$mod}{Tested} = 1;
|
||||
|
||||
foreach my $dep_mod (@{$ModInfo{$mod}{Depend}} ) {
|
||||
if (!exists ${ModInfo}{$dep_mod}) {
|
||||
handle_unknown_dep($dep_mod, $mod);
|
||||
return 0;
|
||||
}
|
||||
$deps_checked &= check_module($dep_mod);
|
||||
last if(!$deps_checked) # no point testing further if we failed.
|
||||
}
|
||||
|
||||
$ModInfo{$mod}{Checked} = $deps_checked;
|
||||
return $deps_checked;
|
||||
}
|
||||
|
||||
# The main dependency resolver function.
|
||||
sub resolve_deps() {
|
||||
apply_default_enabled();
|
||||
apply_excluded_patterns();
|
||||
apply_included_patterns();
|
||||
|
||||
foreach my $mod (keys %ModInfo) {
|
||||
check_module($mod);
|
||||
}
|
||||
}
|
||||
|
||||
# generate menuselect.makeopts.
|
||||
# The values in this file obey to different semantics:
|
||||
# 1. For modules, a module will be built unles listed here
|
||||
# 2. For XML values (sounds, CFLAGS) it will be enabled if listed here
|
||||
sub gen_makeopts() {
|
||||
open MAKEDEPS, ">$MakeoptsFile" or
|
||||
die "Failed to open opts file $MakeoptsFile for writing. Aborting: $!\n";
|
||||
|
||||
my %Subdirs;
|
||||
foreach my $mod (sort keys %ModInfo) {
|
||||
next unless ($ModInfo{$mod}{Type} =~ /^(module|XML)$/);
|
||||
if ($ModInfo{$mod}{Type} eq 'XML') {
|
||||
next unless ($ModInfo{$mod}{Checked});
|
||||
} else {
|
||||
next if ($ModInfo{$mod}{Checked});
|
||||
}
|
||||
my $dir = $ModInfo{$mod}{Dir};
|
||||
if (! exists $Subdirs{$dir}) {
|
||||
$Subdirs{$dir} = [];
|
||||
}
|
||||
push @{$Subdirs{$dir}},( $ModInfo{$mod}{Module} );
|
||||
}
|
||||
foreach my $dir (sort keys %Subdirs) {
|
||||
my $deps = join(' ', @{$Subdirs{$dir}});
|
||||
print MAKEDEPS "MENUSELECT_$dir=$deps\n";
|
||||
}
|
||||
|
||||
close MAKEDEPS;
|
||||
}
|
||||
|
||||
# Main function for --check-deps
|
||||
sub check_dependencies() {
|
||||
read_conf();
|
||||
|
||||
extract_subdirs(@Subdirs);
|
||||
|
||||
get_autoconf_opts();
|
||||
|
||||
parse_menuselect_xml_file('build_tools/cflags.xml');
|
||||
if ($ConfigureOpts{AST_DEVMODE} eq 'yes') {
|
||||
parse_menuselect_xml_file('build_tools/cflags-devmode.xml');
|
||||
}
|
||||
parse_menuselect_xml_file('sounds/sounds.xml');
|
||||
|
||||
apply_random_drop();
|
||||
|
||||
get_autoconf_deps();
|
||||
|
||||
#dump_deps('build_tools/dump_deps_before_resolve');
|
||||
resolve_deps();
|
||||
|
||||
# Handy debugging:
|
||||
dump_deps($DumpFile);
|
||||
|
||||
check_required_patterns();
|
||||
|
||||
gen_makedeps();
|
||||
|
||||
gen_makeopts();
|
||||
}
|
||||
|
||||
#
|
||||
# The main program start here
|
||||
#
|
||||
|
||||
sub read_dump() {
|
||||
my %items = ();
|
||||
my $saved_rs = $/;
|
||||
$/ = "\n\n";
|
||||
open DUMP_FILE,$DumpFile or die "Can't read from dump file $DumpFile\n";
|
||||
while (<DUMP_FILE>) {
|
||||
my %item = ();
|
||||
my @item_lines = split /\n\r?/;
|
||||
foreach (@item_lines) {
|
||||
my ($var, $value) = split /: /, $_, 2;
|
||||
$item{$var} = $value;
|
||||
}
|
||||
# FIXME: dependencies are a list. This should not be a
|
||||
# special case.
|
||||
if (exists $item{Depend}) {
|
||||
$item{Depend} = [split /\s*,\s*/,$item{Depend}];
|
||||
}
|
||||
$items{$item{Key}} = \%item;
|
||||
}
|
||||
close DUMP_FILE;
|
||||
$/ = $saved_rs;
|
||||
return \%items;
|
||||
}
|
||||
|
||||
# Explain why a module (read from the dump file) was not enabled.
|
||||
# (We assume here that $item->{Avail} is 0)
|
||||
sub fail_reason($) {
|
||||
my $item = shift;
|
||||
if ($item->{Type} eq 'lib') {
|
||||
return " Not found: system library";
|
||||
} elsif ($item->{Type} eq 'XML') {
|
||||
if ($item->{Defaultenabled} !~ /^y/) {
|
||||
return "Not enabled";
|
||||
} else {
|
||||
return "Missing dependencies";
|
||||
}
|
||||
} elsif ($item->{Type} eq 'module') {
|
||||
if (exists ($item->{Defaultenabled}) &&
|
||||
$item->{Defaultenabled} =~ /^n/) {
|
||||
return "Disabled";
|
||||
} else {
|
||||
return "Missing dependencies";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub item_used($) {
|
||||
my $item = shift;
|
||||
my $type = $item->{Type};
|
||||
|
||||
return $item->{Avail} if ($type eq 'lib');
|
||||
return $item->{Checked};
|
||||
}
|
||||
|
||||
sub print_module_status {
|
||||
my $flag_verbose = shift;
|
||||
my $items = read_dump();
|
||||
my %items_matched = ();
|
||||
|
||||
foreach my $pattern (@_) {
|
||||
foreach (keys %$items) {
|
||||
if (/$pattern/i) {
|
||||
$items_matched{$_} = 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
my @items_list = sort keys %items_matched;
|
||||
|
||||
foreach my $item_name (@items_list) {
|
||||
my $item = $items->{$item_name};
|
||||
if ($flag_verbose) {
|
||||
printf "%s %-8s %-30s\n",
|
||||
(item_used($item)? 'Y':'n'),
|
||||
$item->{Type},
|
||||
$item->{Key};
|
||||
if (!$item->{Avail}) {
|
||||
my $reason = fail_reason($item);
|
||||
print " $reason\n";
|
||||
}
|
||||
foreach (@{$item->{Depend}}) {
|
||||
my $depmod = $items->{$_};
|
||||
printf(" * %-12s ",$_);
|
||||
print (item_used($depmod)? '': "un");
|
||||
print "available\n";
|
||||
}
|
||||
} else {
|
||||
printf "%s %-8s %-30s",
|
||||
(item_used($item)? 'Y':'n'),
|
||||
$item->{Type},
|
||||
$item->{Key};
|
||||
foreach (@{$item->{Depend}}) {
|
||||
my $depmod = $items->{$_};
|
||||
if (item_used($depmod)) {
|
||||
print "$_ ";
|
||||
} else {
|
||||
printf "[%s] ", $_;
|
||||
}
|
||||
}
|
||||
print "\n";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sub usage() {
|
||||
print "$0: menuselect reimplementation\n";
|
||||
print "\n";
|
||||
print "Usage:\n";
|
||||
print "$0 # menuselect processing\n";
|
||||
print "$0 -m|--modinfo|--moduls-info PATTERN # Status of modules\n";
|
||||
print "$0 -v|--verbose # verbose (modinfo)\n";
|
||||
print "$0 -c|--check-deps # Check for dependencies\n";
|
||||
print "\n";
|
||||
print "PATTERN is a partial perl regex. Use '-m .' to list all.\n";
|
||||
}
|
||||
|
||||
my @module_status = ();
|
||||
|
||||
my $flag_verbose = 0;
|
||||
|
||||
my $action = '';
|
||||
|
||||
my $rc = GetOptions(
|
||||
'modinfo|modules-info|m=s' => \@module_status,
|
||||
'verbose|v' => \$flag_verbose,
|
||||
'check-deps|c:s' => sub { $action = 'check_dependencies'},
|
||||
'help|h' => sub { usage(); exit 0 },
|
||||
);
|
||||
if (!$rc) {
|
||||
usage();
|
||||
exit $rc;
|
||||
}
|
||||
|
||||
if (@module_status) {
|
||||
$action = 'module_status';
|
||||
}
|
||||
|
||||
if ($action eq 'module_status') {
|
||||
print_module_status($flag_verbose, @module_status);
|
||||
exit 0;
|
||||
} elsif ( $action eq 'check_dependencies') {
|
||||
check_dependencies();
|
||||
} else {
|
||||
usage(); exit(1);
|
||||
}
|
||||
487
menuselect/example_menuselect-tree
Normal file
487
menuselect/example_menuselect-tree
Normal file
@@ -0,0 +1,487 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<menu name="Asterisk Module Selection">
|
||||
<category name="MENUSELECT_APPS" displayname="Applications">
|
||||
<member name="app_adsiprog" displayname="Asterisk ADSI Programming Application" remove_on_change="apps/app_adsiprog.o apps/app_adsiprog.so">
|
||||
</member>
|
||||
<member name="app_alarmreceiver" displayname="Alarm Receiver for Asterisk" remove_on_change="apps/app_alarmreceiver.o apps/app_alarmreceiver.so">
|
||||
</member>
|
||||
<member name="app_amd" displayname="Answering Machine Detection Application" remove_on_change="apps/app_amd.o apps/app_amd.so">
|
||||
</member>
|
||||
<member name="app_authenticate" displayname="Authentication Application" remove_on_change="apps/app_authenticate.o apps/app_authenticate.so">
|
||||
</member>
|
||||
<member name="app_cdr" displayname="Tell Asterisk to not maintain a CDR for the current call" remove_on_change="apps/app_cdr.o apps/app_cdr.so">
|
||||
</member>
|
||||
<member name="app_chanisavail" displayname="Check channel availability" remove_on_change="apps/app_chanisavail.o apps/app_chanisavail.so">
|
||||
</member>
|
||||
<member name="app_channelredirect" displayname="Channel Redirect" remove_on_change="apps/app_channelredirect.o apps/app_channelredirect.so">
|
||||
</member>
|
||||
<member name="app_chanspy" displayname="Listen to the audio of an active channel" remove_on_change="apps/app_chanspy.o apps/app_chanspy.so">
|
||||
</member>
|
||||
<member name="app_controlplayback" displayname="Control Playback Application" remove_on_change="apps/app_controlplayback.o apps/app_controlplayback.so">
|
||||
</member>
|
||||
<member name="app_db" displayname="Database Access Functions" remove_on_change="apps/app_db.o apps/app_db.so">
|
||||
</member>
|
||||
<member name="app_dial" displayname="Dialing Application" remove_on_change="apps/app_dial.o apps/app_dial.so">
|
||||
</member>
|
||||
<member name="app_dictate" displayname="Virtual Dictation Machine" remove_on_change="apps/app_dictate.o apps/app_dictate.so">
|
||||
</member>
|
||||
<member name="app_directed_pickup" displayname="Directed Call Pickup Application" remove_on_change="apps/app_directed_pickup.o apps/app_directed_pickup.so">
|
||||
</member>
|
||||
<member name="app_directory" displayname="Extension Directory" remove_on_change="apps/app_directory.o apps/app_directory.so">
|
||||
</member>
|
||||
<member name="app_disa" displayname="DISA (Direct Inward System Access) Application" remove_on_change="apps/app_disa.o apps/app_disa.so">
|
||||
</member>
|
||||
<member name="app_dumpchan" displayname="Dump Info About The Calling Channel" remove_on_change="apps/app_dumpchan.o apps/app_dumpchan.so">
|
||||
</member>
|
||||
<member name="app_echo" displayname="Simple Echo Application" remove_on_change="apps/app_echo.o apps/app_echo.so">
|
||||
</member>
|
||||
<member name="app_exec" displayname="Executes dialplan applications" remove_on_change="apps/app_exec.o apps/app_exec.so">
|
||||
</member>
|
||||
<member name="app_externalivr" displayname="External IVR Interface Application" remove_on_change="apps/app_externalivr.o apps/app_externalivr.so">
|
||||
</member>
|
||||
<member name="app_festival" displayname="Simple Festival Interface" remove_on_change="apps/app_festival.o apps/app_festival.so">
|
||||
</member>
|
||||
<member name="app_flash" displayname="Flash zap trunk application" remove_on_change="apps/app_flash.o apps/app_flash.so">
|
||||
<depend>zaptel</depend>
|
||||
</member>
|
||||
<member name="app_followme" displayname="Find-Me/Follow-Me Application" remove_on_change="apps/app_followme.o apps/app_followme.so">
|
||||
</member>
|
||||
<member name="app_forkcdr" displayname="Fork The CDR into 2 separate entities." remove_on_change="apps/app_forkcdr.o apps/app_forkcdr.so">
|
||||
</member>
|
||||
<member name="app_getcpeid" displayname="Get ADSI CPE ID" remove_on_change="apps/app_getcpeid.o apps/app_getcpeid.so">
|
||||
</member>
|
||||
<member name="app_hasnewvoicemail" displayname="Indicator for whether a voice mailbox has messages in a given folder." remove_on_change="apps/app_hasnewvoicemail.o apps/app_hasnewvoicemail.so">
|
||||
</member>
|
||||
<member name="app_ices" displayname="Encode and Stream via icecast and ices" remove_on_change="apps/app_ices.o apps/app_ices.so">
|
||||
</member>
|
||||
<member name="app_image" displayname="Image Transmission Application" remove_on_change="apps/app_image.o apps/app_image.so">
|
||||
</member>
|
||||
<member name="app_ivrdemo" displayname="IVR Demo Application" remove_on_change="apps/app_ivrdemo.o apps/app_ivrdemo.so">
|
||||
<defaultenabled>no</defaultenabled>
|
||||
</member>
|
||||
<member name="app_lookupblacklist" displayname="Look up Caller*ID name/number from blacklist database" remove_on_change="apps/app_lookupblacklist.o apps/app_lookupblacklist.so">
|
||||
</member>
|
||||
<member name="app_lookupcidname" displayname="Look up CallerID Name from local database" remove_on_change="apps/app_lookupcidname.o apps/app_lookupcidname.so">
|
||||
</member>
|
||||
<member name="app_macro" displayname="Extension Macros" remove_on_change="apps/app_macro.o apps/app_macro.so">
|
||||
</member>
|
||||
<member name="app_meetme" displayname="MeetMe conference bridge" remove_on_change="apps/app_meetme.o apps/app_meetme.so">
|
||||
<depend>zaptel</depend>
|
||||
</member>
|
||||
<member name="app_milliwatt" displayname="Digital Milliwatt (mu-law) Test Application" remove_on_change="apps/app_milliwatt.o apps/app_milliwatt.so">
|
||||
</member>
|
||||
<member name="app_mixmonitor" displayname="Mixed Audio Monitoring Application" remove_on_change="apps/app_mixmonitor.o apps/app_mixmonitor.so">
|
||||
</member>
|
||||
<member name="app_morsecode" displayname="Morse code" remove_on_change="apps/app_morsecode.o apps/app_morsecode.so">
|
||||
</member>
|
||||
<member name="app_mp3" displayname="Silly MP3 Application" remove_on_change="apps/app_mp3.o apps/app_mp3.so">
|
||||
</member>
|
||||
<member name="app_nbscat" displayname="Silly NBS Stream Application" remove_on_change="apps/app_nbscat.o apps/app_nbscat.so">
|
||||
</member>
|
||||
<member name="app_osplookup" displayname="Open Settlement Protocol Applications" remove_on_change="apps/app_osplookup.o apps/app_osplookup.so">
|
||||
<depend>libosptk</depend>
|
||||
<depend>ssl</depend>
|
||||
</member>
|
||||
<member name="app_page" displayname="Page Multiple Phones" remove_on_change="apps/app_page.o apps/app_page.so">
|
||||
<depend>zaptel</depend>
|
||||
</member>
|
||||
<member name="app_parkandannounce" displayname="Call Parking and Announce Application" remove_on_change="apps/app_parkandannounce.o apps/app_parkandannounce.so">
|
||||
</member>
|
||||
<member name="app_playback" displayname="Sound File Playback Application" remove_on_change="apps/app_playback.o apps/app_playback.so">
|
||||
</member>
|
||||
<member name="app_privacy" displayname="Require phone number to be entered, if no CallerID sent" remove_on_change="apps/app_privacy.o apps/app_privacy.so">
|
||||
</member>
|
||||
<member name="app_queue" displayname="True Call Queueing" remove_on_change="apps/app_queue.o apps/app_queue.so">
|
||||
</member>
|
||||
<member name="app_random" displayname="Random goto" remove_on_change="apps/app_random.o apps/app_random.so">
|
||||
</member>
|
||||
<member name="app_read" displayname="Read Variable Application" remove_on_change="apps/app_read.o apps/app_read.so">
|
||||
</member>
|
||||
<member name="app_readfile" displayname="Stores output of file into a variable" remove_on_change="apps/app_readfile.o apps/app_readfile.so">
|
||||
</member>
|
||||
<member name="app_realtime" displayname="Realtime Data Lookup/Rewrite" remove_on_change="apps/app_realtime.o apps/app_realtime.so">
|
||||
</member>
|
||||
<member name="app_record" displayname="Trivial Record Application" remove_on_change="apps/app_record.o apps/app_record.so">
|
||||
</member>
|
||||
<member name="app_rpt" displayname="Radio Repeater / Remote Base version 0.48 06/13/2006" remove_on_change="apps/app_rpt.o apps/app_rpt.so">
|
||||
<depend>zaptel</depend>
|
||||
<defaultenabled>no</defaultenabled>
|
||||
</member>
|
||||
<member name="app_sayunixtime" displayname="Say time" remove_on_change="apps/app_sayunixtime.o apps/app_sayunixtime.so">
|
||||
</member>
|
||||
<member name="app_senddtmf" displayname="Send DTMF digits Application" remove_on_change="apps/app_senddtmf.o apps/app_senddtmf.so">
|
||||
</member>
|
||||
<member name="app_sendtext" displayname="Send Text Applications" remove_on_change="apps/app_sendtext.o apps/app_sendtext.so">
|
||||
</member>
|
||||
<member name="app_setcallerid" displayname="Set CallerID Application" remove_on_change="apps/app_setcallerid.o apps/app_setcallerid.so">
|
||||
</member>
|
||||
<member name="app_setcdruserfield" displayname="CDR user field apps" remove_on_change="apps/app_setcdruserfield.o apps/app_setcdruserfield.so">
|
||||
</member>
|
||||
<member name="app_settransfercapability" displayname="Set ISDN Transfer Capability" remove_on_change="apps/app_settransfercapability.o apps/app_settransfercapability.so">
|
||||
</member>
|
||||
<member name="app_skel" displayname="Trivial skeleton Application" remove_on_change="apps/app_skel.o apps/app_skel.so">
|
||||
<defaultenabled>no</defaultenabled>
|
||||
</member>
|
||||
<member name="app_sms" displayname="SMS/PSTN handler" remove_on_change="apps/app_sms.o apps/app_sms.so">
|
||||
</member>
|
||||
<member name="app_softhangup" displayname="Hangs up the requested channel" remove_on_change="apps/app_softhangup.o apps/app_softhangup.so">
|
||||
</member>
|
||||
<member name="app_speech_utils" displayname="Dialplan Speech Applications" remove_on_change="apps/app_speech_utils.o apps/app_speech_utils.so">
|
||||
</member>
|
||||
<member name="app_stack" displayname="Stack Routines" remove_on_change="apps/app_stack.o apps/app_stack.so">
|
||||
</member>
|
||||
<member name="app_system" displayname="Generic System() application" remove_on_change="apps/app_system.o apps/app_system.so">
|
||||
</member>
|
||||
<member name="app_talkdetect" displayname="Playback with Talk Detection" remove_on_change="apps/app_talkdetect.o apps/app_talkdetect.so">
|
||||
</member>
|
||||
<member name="app_test" displayname="Interface Test Application" remove_on_change="apps/app_test.o apps/app_test.so">
|
||||
</member>
|
||||
<member name="app_transfer" displayname="Transfer" remove_on_change="apps/app_transfer.o apps/app_transfer.so">
|
||||
</member>
|
||||
<member name="app_url" displayname="Send URL Applications" remove_on_change="apps/app_url.o apps/app_url.so">
|
||||
</member>
|
||||
<member name="app_userevent" displayname="Custom User Event Application" remove_on_change="apps/app_userevent.o apps/app_userevent.so">
|
||||
</member>
|
||||
<member name="app_verbose" displayname="Send verbose output" remove_on_change="apps/app_verbose.o apps/app_verbose.so">
|
||||
</member>
|
||||
<member name="app_voicemail" displayname="Comedian Mail (Voicemail System)" remove_on_change="apps/app_voicemail.o apps/app_voicemail.so">
|
||||
</member>
|
||||
<member name="app_waitforring" displayname="Waits until first ring after time" remove_on_change="apps/app_waitforring.o apps/app_waitforring.so">
|
||||
</member>
|
||||
<member name="app_waitforsilence" displayname="Wait For Silence" remove_on_change="apps/app_waitforsilence.o apps/app_waitforsilence.so">
|
||||
</member>
|
||||
<member name="app_while" displayname="While Loops and Conditional Execution" remove_on_change="apps/app_while.o apps/app_while.so">
|
||||
</member>
|
||||
<member name="app_zapateller" displayname="Block Telemarketers with Special Information Tone" remove_on_change="apps/app_zapateller.o apps/app_zapateller.so">
|
||||
</member>
|
||||
<member name="app_zapbarge" displayname="Barge in on Zap channel application" remove_on_change="apps/app_zapbarge.o apps/app_zapbarge.so">
|
||||
<depend>zaptel</depend>
|
||||
</member>
|
||||
<member name="app_zapras" displayname="Zap RAS Application" remove_on_change="apps/app_zapras.o apps/app_zapras.so">
|
||||
<depend>zaptel</depend>
|
||||
</member>
|
||||
<member name="app_zapscan" displayname="Scan Zap channels application" remove_on_change="apps/app_zapscan.o apps/app_zapscan.so">
|
||||
<depend>zaptel</depend>
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_CDR" displayname="Call Detail Recording">
|
||||
<member name="cdr_csv" displayname="Comma Separated Values CDR Backend" remove_on_change="cdr/cdr_csv.o cdr/cdr_csv.so">
|
||||
</member>
|
||||
<member name="cdr_custom" displayname="Customizable Comma Separated Values CDR Backend" remove_on_change="cdr/cdr_custom.o cdr/cdr_custom.so">
|
||||
</member>
|
||||
<member name="cdr_manager" displayname="Asterisk Call Manager CDR Backend" remove_on_change="cdr/cdr_manager.o cdr/cdr_manager.so">
|
||||
</member>
|
||||
<member name="cdr_odbc" displayname="ODBC CDR Backend" remove_on_change="cdr/cdr_odbc.o cdr/cdr_odbc.so">
|
||||
<depend>unixodbc</depend>
|
||||
</member>
|
||||
<member name="cdr_pgsql" displayname="PostgreSQL CDR Backend" remove_on_change="cdr/cdr_pgsql.o cdr/cdr_pgsql.so">
|
||||
<depend>pgsql</depend>
|
||||
</member>
|
||||
<member name="cdr_radius" displayname="RADIUS CDR Backend" remove_on_change="cdr/cdr_radius.o cdr/cdr_radius.so">
|
||||
<depend>radiusclient</depend>
|
||||
</member>
|
||||
<member name="cdr_sqlite" displayname="SQLite CDR Backend" remove_on_change="cdr/cdr_sqlite.o cdr/cdr_sqlite.so">
|
||||
<depend>sqlite</depend>
|
||||
</member>
|
||||
<member name="cdr_tds" displayname="MSSQL CDR Backend" remove_on_change="cdr/cdr_tds.o cdr/cdr_tds.so">
|
||||
<depend>freetds</depend>
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_CHANNELS" displayname="Channel Drivers">
|
||||
<member name="chan_agent" displayname="Agent Proxy Channel" remove_on_change="channels/chan_agent.o channels/chan_agent.so">
|
||||
</member>
|
||||
<member name="chan_alsa" displayname="ALSA Console Channel Driver" remove_on_change="channels/chan_alsa.o channels/chan_alsa.so">
|
||||
<depend>asound</depend>
|
||||
</member>
|
||||
<member name="chan_features" displayname="Feature Proxy Channel" remove_on_change="channels/chan_features.o channels/chan_features.so">
|
||||
</member>
|
||||
<member name="chan_h323" displayname="The NuFone Network's Open H.323 Channel Driver" remove_on_change="channels/chan_h323.o channels/chan_h323.so">
|
||||
<depend>h323</depend>
|
||||
</member>
|
||||
<member name="chan_iax2" displayname="Inter Asterisk eXchange (Ver 2)" remove_on_change="channels/chan_iax2.o channels/chan_iax2.so">
|
||||
</member>
|
||||
<member name="chan_jingle" displayname="Jingle Channel Driver" remove_on_change="channels/chan_jingle.o channels/chan_jingle.so">
|
||||
<depend>iksemel</depend>
|
||||
</member>
|
||||
<member name="chan_local" displayname="Local Proxy Channel" remove_on_change="channels/chan_local.o channels/chan_local.so">
|
||||
</member>
|
||||
<member name="chan_mgcp" displayname="Media Gateway Control Protocol (MGCP)" remove_on_change="channels/chan_mgcp.o channels/chan_mgcp.so">
|
||||
</member>
|
||||
<member name="chan_misdn" displayname="Channel driver for mISDN Support (Bri/Pri)" remove_on_change="channels/chan_misdn.o channels/chan_misdn.so">
|
||||
</member>
|
||||
<member name="chan_nbs" displayname="Network Broadcast Sound Driver" remove_on_change="channels/chan_nbs.o channels/chan_nbs.so">
|
||||
<depend>nbs</depend>
|
||||
</member>
|
||||
<member name="chan_oss" displayname="OSS Console Channel Driver" remove_on_change="channels/chan_oss.o channels/chan_oss.so">
|
||||
<depend>ossaudio</depend>
|
||||
</member>
|
||||
<member name="chan_phone" displayname="Standard Linux Telephony API Driver" remove_on_change="channels/chan_phone.o channels/chan_phone.so">
|
||||
<depend>ixjuser</depend>
|
||||
</member>
|
||||
<member name="chan_sip" displayname="Session Initiation Protocol (SIP)" remove_on_change="channels/chan_sip.o channels/chan_sip.so">
|
||||
</member>
|
||||
<member name="chan_skinny" displayname="Skinny Client Control Protocol (Skinny)" remove_on_change="channels/chan_skinny.o channels/chan_skinny.so">
|
||||
</member>
|
||||
<member name="chan_vpb" displayname="Standard VoiceTronix API Driver" remove_on_change="channels/chan_vpb.o channels/chan_vpb.so">
|
||||
<depend>vpbapi</depend>
|
||||
</member>
|
||||
<member name="chan_zap" displayname="Zapata Telephony" remove_on_change="channels/chan_zap.o channels/chan_zap.so">
|
||||
<depend>zaptel</depend>
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_CODECS" displayname="Codec Translators">
|
||||
<member name="codec_a_mu" displayname="A-law and Mulaw direct Coder/Decoder" remove_on_change="codecs/codec_a_mu.o codecs/codec_a_mu.so">
|
||||
</member>
|
||||
<member name="codec_adpcm" displayname="Adaptive Differential PCM Coder/Decoder" remove_on_change="codecs/codec_adpcm.o codecs/codec_adpcm.so">
|
||||
</member>
|
||||
<member name="codec_alaw" displayname="A-law Coder/Decoder" remove_on_change="codecs/codec_alaw.o codecs/codec_alaw.so">
|
||||
</member>
|
||||
<member name="codec_g723_1" displayname="" remove_on_change="codecs/codec_g723_1.o codecs/codec_g723_1.so">
|
||||
<defaultenabled>no</defaultenabled>
|
||||
</member>
|
||||
<member name="codec_g726" displayname="ITU G.726-32kbps G726 Transcoder" remove_on_change="codecs/codec_g726.o codecs/codec_g726.so">
|
||||
</member>
|
||||
<member name="codec_gsm" displayname="GSM/PCM16 (signed linear) Codec Translator" remove_on_change="codecs/codec_gsm.o codecs/codec_gsm.so">
|
||||
<depend>libgsm</depend>
|
||||
</member>
|
||||
<member name="codec_ilbc" displayname="iLBC/PCM16 (signed linear) Codec Translator" remove_on_change="codecs/codec_ilbc.o codecs/codec_ilbc.so">
|
||||
</member>
|
||||
<member name="codec_lpc10" displayname="LPC10 2.4kbps (signed linear) Voice Coder" remove_on_change="codecs/codec_lpc10.o codecs/codec_lpc10.so">
|
||||
</member>
|
||||
<member name="codec_speex" displayname="Speex/PCM16 (signed linear) Codec Translator" remove_on_change="codecs/codec_speex.o codecs/codec_speex.so">
|
||||
<depend>libspeex</depend>
|
||||
</member>
|
||||
<member name="codec_ulaw" displayname="Mu-law Coder/Decoder" remove_on_change="codecs/codec_ulaw.o codecs/codec_ulaw.so">
|
||||
</member>
|
||||
<member name="codec_zap" displayname="Generic Zaptel Transcoder Codec Translator" remove_on_change="codecs/codec_zap.o codecs/codec_zap.so">
|
||||
<depend>zaptel</depend>
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_FORMATS" displayname="Format Interpreters">
|
||||
<member name="format_g723" displayname="G.723.1 Simple Timestamp File Format" remove_on_change="formats/format_g723.o formats/format_g723.so">
|
||||
</member>
|
||||
<member name="format_g726" displayname="Raw G.726 (16/24/32/40kbps) data" remove_on_change="formats/format_g726.o formats/format_g726.so">
|
||||
</member>
|
||||
<member name="format_g729" displayname="Raw G729 data" remove_on_change="formats/format_g729.o formats/format_g729.so">
|
||||
</member>
|
||||
<member name="format_gsm" displayname="Raw GSM data" remove_on_change="formats/format_gsm.o formats/format_gsm.so">
|
||||
</member>
|
||||
<member name="format_h263" displayname="Raw h263 data" remove_on_change="formats/format_h263.o formats/format_h263.so">
|
||||
</member>
|
||||
<member name="format_h264" displayname="Raw h264 data" remove_on_change="formats/format_h264.o formats/format_h264.so">
|
||||
</member>
|
||||
<member name="format_ilbc" displayname="Raw iLBC data" remove_on_change="formats/format_ilbc.o formats/format_ilbc.so">
|
||||
</member>
|
||||
<member name="format_jpeg" displayname="JPEG (Joint Picture Experts Group) Image Format" remove_on_change="formats/format_jpeg.o formats/format_jpeg.so">
|
||||
</member>
|
||||
<member name="format_ogg_vorbis" displayname="OGG/Vorbis audio" remove_on_change="formats/format_ogg_vorbis.o formats/format_ogg_vorbis.so">
|
||||
<depend>libvorbis</depend>
|
||||
<depend>ogg</depend>
|
||||
</member>
|
||||
<member name="format_pcm" displayname="Raw/Sun uLaw/ALaw 8khz Audio support (PCM,PCMA,AU)" remove_on_change="formats/format_pcm.o formats/format_pcm.so">
|
||||
</member>
|
||||
<member name="format_sln" displayname="Raw Signed Linear Audio support (SLN)" remove_on_change="formats/format_sln.o formats/format_sln.so">
|
||||
</member>
|
||||
<member name="format_vox" displayname="Dialogic VOX (ADPCM) File Format" remove_on_change="formats/format_vox.o formats/format_vox.so">
|
||||
</member>
|
||||
<member name="format_wav" displayname="Microsoft WAV format (8000hz Signed Linear)" remove_on_change="formats/format_wav.o formats/format_wav.so">
|
||||
</member>
|
||||
<member name="format_wav_gsm" displayname="Microsoft WAV format (Proprietary GSM)" remove_on_change="formats/format_wav_gsm.o formats/format_wav_gsm.so">
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_FUNCS" displayname="Dialplan Functions">
|
||||
<member name="func_base64" displayname="base64 encode/decode dialplan functions" remove_on_change="funcs/func_base64.o funcs/func_base64.so">
|
||||
</member>
|
||||
<member name="func_callerid" displayname="Caller ID related dialplan function" remove_on_change="funcs/func_callerid.o funcs/func_callerid.so">
|
||||
</member>
|
||||
<member name="func_cdr" displayname="CDR dialplan function" remove_on_change="funcs/func_cdr.o funcs/func_cdr.so">
|
||||
</member>
|
||||
<member name="func_channel" displayname="Channel information dialplan function" remove_on_change="funcs/func_channel.o funcs/func_channel.so">
|
||||
</member>
|
||||
<member name="func_curl" displayname="Load external URL" remove_on_change="funcs/func_curl.o funcs/func_curl.so">
|
||||
<depend>curl</depend>
|
||||
</member>
|
||||
<member name="func_cut" displayname="Cut out information from a string" remove_on_change="funcs/func_cut.o funcs/func_cut.so">
|
||||
</member>
|
||||
<member name="func_db" displayname="Database (astdb) related dialplan functions" remove_on_change="funcs/func_db.o funcs/func_db.so">
|
||||
</member>
|
||||
<member name="func_enum" displayname="ENUM related dialplan functions" remove_on_change="funcs/func_enum.o funcs/func_enum.so">
|
||||
</member>
|
||||
<member name="func_env" displayname="Environment/filesystem dialplan functions" remove_on_change="funcs/func_env.o funcs/func_env.so">
|
||||
</member>
|
||||
<member name="func_global" displayname="Global variable dialplan functions" remove_on_change="funcs/func_global.o funcs/func_global.so">
|
||||
</member>
|
||||
<member name="func_groupcount" displayname="Channel group dialplan functions" remove_on_change="funcs/func_groupcount.o funcs/func_groupcount.so">
|
||||
</member>
|
||||
<member name="func_language" displayname="Channel language dialplan function" remove_on_change="funcs/func_language.o funcs/func_language.so">
|
||||
</member>
|
||||
<member name="func_logic" displayname="Logical dialplan functions" remove_on_change="funcs/func_logic.o funcs/func_logic.so">
|
||||
</member>
|
||||
<member name="func_math" displayname="Mathematical dialplan function" remove_on_change="funcs/func_math.o funcs/func_math.so">
|
||||
</member>
|
||||
<member name="func_md5" displayname="MD5 digest dialplan functions" remove_on_change="funcs/func_md5.o funcs/func_md5.so">
|
||||
</member>
|
||||
<member name="func_moh" displayname="Music-on-hold dialplan function" remove_on_change="funcs/func_moh.o funcs/func_moh.so">
|
||||
</member>
|
||||
<member name="func_odbc" displayname="ODBC lookups" remove_on_change="funcs/func_odbc.o funcs/func_odbc.so">
|
||||
<depend>unixodbc</depend>
|
||||
</member>
|
||||
<member name="func_rand" displayname="Random number dialplan function" remove_on_change="funcs/func_rand.o funcs/func_rand.so">
|
||||
</member>
|
||||
<member name="func_realtime" displayname="Read/Write values from a RealTime repository" remove_on_change="funcs/func_realtime.o funcs/func_realtime.so">
|
||||
</member>
|
||||
<member name="func_sha1" displayname="SHA-1 computation dialplan function" remove_on_change="funcs/func_sha1.o funcs/func_sha1.so">
|
||||
</member>
|
||||
<member name="func_strings" displayname="String handling dialplan functions" remove_on_change="funcs/func_strings.o funcs/func_strings.so">
|
||||
</member>
|
||||
<member name="func_timeout" displayname="Channel timeout dialplan functions" remove_on_change="funcs/func_timeout.o funcs/func_timeout.so">
|
||||
</member>
|
||||
<member name="func_uri" displayname="URI encode/decode dialplan functions" remove_on_change="funcs/func_uri.o funcs/func_uri.so">
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_PBX" displayname="PBX Modules">
|
||||
<member name="pbx_ael" displayname="Asterisk Extension Language Compiler v2" remove_on_change="pbx/pbx_ael.o pbx/pbx_ael.so">
|
||||
</member>
|
||||
<member name="pbx_config" displayname="Text Extension Configuration" remove_on_change="pbx/pbx_config.o pbx/pbx_config.so">
|
||||
</member>
|
||||
<member name="pbx_dundi" displayname="Distributed Universal Number Discovery (DUNDi)" remove_on_change="pbx/pbx_dundi.o pbx/pbx_dundi.so">
|
||||
<depend>zlib</depend>
|
||||
</member>
|
||||
<member name="pbx_gtkconsole" displayname="Asterisk PBX Console (GTK Version)" remove_on_change="pbx/pbx_gtkconsole.o pbx/pbx_gtkconsole.so">
|
||||
<depend>gtk</depend>
|
||||
<defaultenabled>no</defaultenabled>
|
||||
</member>
|
||||
<member name="pbx_loopback" displayname="Loopback Switch" remove_on_change="pbx/pbx_loopback.o pbx/pbx_loopback.so">
|
||||
</member>
|
||||
<member name="pbx_realtime" displayname="Realtime Switch" remove_on_change="pbx/pbx_realtime.o pbx/pbx_realtime.so">
|
||||
</member>
|
||||
<member name="pbx_spool" displayname="Outgoing Spool Support" remove_on_change="pbx/pbx_spool.o pbx/pbx_spool.so">
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_RES" displayname="Resource Modules">
|
||||
<member name="res_adsi" displayname="ADSI Resource" remove_on_change="res/res_adsi.o res/res_adsi.so">
|
||||
</member>
|
||||
<member name="res_agi" displayname="Asterisk Gateway Interface (AGI)" remove_on_change="res/res_agi.o res/res_agi.so">
|
||||
</member>
|
||||
<member name="res_clioriginate" displayname="Call origination from the CLI" remove_on_change="res/res_clioriginate.o res/res_clioriginate.so">
|
||||
</member>
|
||||
<member name="res_config_odbc" displayname="ODBC Configuration" remove_on_change="res/res_config_odbc.o res/res_config_odbc.so">
|
||||
<depend>unixodbc</depend>
|
||||
</member>
|
||||
<member name="res_config_pgsql" displayname="Postgresql RealTime Configuration Driver" remove_on_change="res/res_config_pgsql.o res/res_config_pgsql.so">
|
||||
<depend>pgsql</depend>
|
||||
</member>
|
||||
<member name="res_convert" displayname="File format conversion CLI command" remove_on_change="res/res_convert.o res/res_convert.so">
|
||||
</member>
|
||||
<member name="res_crypto" displayname="Cryptographic Digital Signatures" remove_on_change="res/res_crypto.o res/res_crypto.so">
|
||||
<depend>ssl</depend>
|
||||
</member>
|
||||
<member name="res_features" displayname="Call Features Resource" remove_on_change="res/res_features.o res/res_features.so">
|
||||
</member>
|
||||
<member name="res_indications" displayname="Indications Configuration" remove_on_change="res/res_indications.o res/res_indications.so">
|
||||
</member>
|
||||
<member name="res_jabber" displayname="AJI - Asterisk JABBER Interface" remove_on_change="res/res_jabber.o res/res_jabber.so">
|
||||
<depend>iksemel</depend>
|
||||
</member>
|
||||
<member name="res_monitor" displayname="Call Monitoring Resource" remove_on_change="res/res_monitor.o res/res_monitor.so">
|
||||
</member>
|
||||
<member name="res_musiconhold" displayname="Music On Hold Resource" remove_on_change="res/res_musiconhold.o res/res_musiconhold.so">
|
||||
<conflict>win32</conflict>
|
||||
</member>
|
||||
<member name="res_odbc" displayname="ODBC Resource" remove_on_change="res/res_odbc.o res/res_odbc.so">
|
||||
<depend>unixodbc</depend>
|
||||
</member>
|
||||
<member name="res_osp" displayname="Open Settlement Protocol Support" remove_on_change="res/res_osp.o res/res_osp.so">
|
||||
<depend>libosptk</depend>
|
||||
<depend>ssl</depend>
|
||||
</member>
|
||||
<member name="res_smdi" displayname="Asterisk Simplified Message Desk Interface (SMDI) Module" remove_on_change="res/res_smdi.o res/res_smdi.so">
|
||||
</member>
|
||||
<member name="res_snmp" displayname="SNMP [Sub]Agent for Asterisk" remove_on_change="res/res_snmp.o res/res_snmp.so">
|
||||
<depend>netsnmp</depend>
|
||||
<defaultenabled>no</defaultenabled>
|
||||
</member>
|
||||
<member name="res_speech" displayname="Generic Speech Recognition API" remove_on_change="res/res_speech.o res/res_speech.so">
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_CFLAGS" displayname="Compiler Flags" positive_output="yes" remove_on_change=".lastclean">
|
||||
<member name="DEBUG_CHANNEL_LOCKS" displayname="Debug Channel Locking">
|
||||
</member>
|
||||
<member name="DEBUG_SCHEDULER" displayname="Enable Scheduler Debugging Output">
|
||||
</member>
|
||||
<member name="DEBUG_THREADS" displayname="Enable Thread Debugging">
|
||||
</member>
|
||||
<member name="DETECT_DEADLOCKS" displayname="Detect Deadlocks">
|
||||
</member>
|
||||
<member name="DONT_OPTIMIZE" displayname="Disable Optimizations from the Compiler">
|
||||
</member>
|
||||
<member name="DUMP_SCHEDULER" displayname="Dump Scheduler Contents for Debugging">
|
||||
</member>
|
||||
<member name="LOW_MEMORY" displayname="Optimize for Low Memory Usage">
|
||||
</member>
|
||||
<member name="MALLOC_DEBUG" displayname="Keep Track of Memory Allocations">
|
||||
</member>
|
||||
<member name="MTX_PROFILE" displayname="Enable Code Profiling Using TSC Counters">
|
||||
</member>
|
||||
<member name="RADIO_RELAX" displayname="Relax DTMF for Radio Applications">
|
||||
</member>
|
||||
<member name="TRACE_FRAMES" displayname="Trace Frame Allocations">
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_CORE_SOUNDS" displayname="Core Sound Packages" positive_output="yes">
|
||||
<member name="CORE-SOUNDS-EN-WAV" displayname="English, WAV format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-EN-ULAW" displayname="English, mu-Law format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-EN-ALAW" displayname="English, a-Law format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-EN-GSM" displayname="English, GSM format" >
|
||||
<defaultenabled>yes</defaultenabled>
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-EN-G729" displayname="English, G.729 format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-ES-WAV" displayname="Spanish, WAV format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-ES-ULAW" displayname="Spanish, mu-Law format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-ES-ALAW" displayname="Spanish, a-Law format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-ES-GSM" displayname="Spanish, GSM format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-ES-G729" displayname="Spanish, G.729 format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-FR-WAV" displayname="French, WAV format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-FR-ULAW" displayname="French, mu-Law format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-FR-ALAW" displayname="French, a-Law format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-FR-GSM" displayname="French, GSM format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-FR-G729" displayname="French, G.729 format">
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_EXTRA_SOUNDS" displayname="Extras Sound Packages" positive_output="yes">
|
||||
<member name="EXTRA-SOUNDS-EN-WAV" displayname="English, WAV format">
|
||||
</member>
|
||||
<member name="EXTRA-SOUNDS-EN-ULAW" displayname="English, mu-Law format">
|
||||
</member>
|
||||
<member name="EXTRA-SOUNDS-EN-ALAW" displayname="English, a-Law format">
|
||||
</member>
|
||||
<member name="EXTRA-SOUNDS-EN-GSM" displayname="English, GSM format" >
|
||||
</member>
|
||||
<member name="EXTRA-SOUNDS-EN-G729" displayname="English, G.729 format">
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_app_voicemail" displayname="Voicemail Build Options" positive_output="yes" remove_on_change="apps/app_voicemail.o">
|
||||
<member name="ODBC_STORAGE" displayname="Storage of Voicemail using ODBC">
|
||||
<depend>unixodbc</depend>
|
||||
<defaultenabled>no</defaultenabled>
|
||||
</member>
|
||||
<member name="EXTENDED_ODBC_STORAGE" displayname="Storage of Voicemail using ODBC (extended)">
|
||||
<depend>unixodbc</depend>
|
||||
<defaultenabled>no</defaultenabled>
|
||||
</member>
|
||||
</category>
|
||||
</menu>
|
||||
323
menuselect/install-sh
Executable file
323
menuselect/install-sh
Executable file
@@ -0,0 +1,323 @@
|
||||
#!/bin/sh
|
||||
# install - install a program, script, or datafile
|
||||
|
||||
scriptversion=2005-05-14.22
|
||||
|
||||
# This originates from X11R5 (mit/util/scripts/install.sh), which was
|
||||
# later released in X11R6 (xc/config/util/install.sh) with the
|
||||
# following copyright and license.
|
||||
#
|
||||
# Copyright (C) 1994 X Consortium
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
# of this software and associated documentation files (the "Software"), to
|
||||
# deal in the Software without restriction, including without limitation the
|
||||
# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
||||
# sell copies of the Software, and to permit persons to whom the Software is
|
||||
# furnished to do so, subject to the following conditions:
|
||||
#
|
||||
# The above copyright notice and this permission notice shall be included in
|
||||
# all copies or substantial portions of the Software.
|
||||
#
|
||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
|
||||
# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
|
||||
# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
# Except as contained in this notice, the name of the X Consortium shall not
|
||||
# be used in advertising or otherwise to promote the sale, use or other deal-
|
||||
# ings in this Software without prior written authorization from the X Consor-
|
||||
# tium.
|
||||
#
|
||||
#
|
||||
# FSF changes to this file are in the public domain.
|
||||
#
|
||||
# Calling this script install-sh is preferred over install.sh, to prevent
|
||||
# `make' implicit rules from creating a file called install from it
|
||||
# when there is no Makefile.
|
||||
#
|
||||
# This script is compatible with the BSD install script, but was written
|
||||
# from scratch. It can only install one file at a time, a restriction
|
||||
# shared with many OS's install programs.
|
||||
|
||||
# set DOITPROG to echo to test this script
|
||||
|
||||
# Don't use :- since 4.3BSD and earlier shells don't like it.
|
||||
doit="${DOITPROG-}"
|
||||
|
||||
# put in absolute paths if you don't have them in your path; or use env. vars.
|
||||
|
||||
mvprog="${MVPROG-mv}"
|
||||
cpprog="${CPPROG-cp}"
|
||||
chmodprog="${CHMODPROG-chmod}"
|
||||
chownprog="${CHOWNPROG-chown}"
|
||||
chgrpprog="${CHGRPPROG-chgrp}"
|
||||
stripprog="${STRIPPROG-strip}"
|
||||
rmprog="${RMPROG-rm}"
|
||||
mkdirprog="${MKDIRPROG-mkdir}"
|
||||
|
||||
chmodcmd="$chmodprog 0755"
|
||||
chowncmd=
|
||||
chgrpcmd=
|
||||
stripcmd=
|
||||
rmcmd="$rmprog -f"
|
||||
mvcmd="$mvprog"
|
||||
src=
|
||||
dst=
|
||||
dir_arg=
|
||||
dstarg=
|
||||
no_target_directory=
|
||||
|
||||
usage="Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
|
||||
or: $0 [OPTION]... SRCFILES... DIRECTORY
|
||||
or: $0 [OPTION]... -t DIRECTORY SRCFILES...
|
||||
or: $0 [OPTION]... -d DIRECTORIES...
|
||||
|
||||
In the 1st form, copy SRCFILE to DSTFILE.
|
||||
In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
|
||||
In the 4th, create DIRECTORIES.
|
||||
|
||||
Options:
|
||||
-c (ignored)
|
||||
-d create directories instead of installing files.
|
||||
-g GROUP $chgrpprog installed files to GROUP.
|
||||
-m MODE $chmodprog installed files to MODE.
|
||||
-o USER $chownprog installed files to USER.
|
||||
-s $stripprog installed files.
|
||||
-t DIRECTORY install into DIRECTORY.
|
||||
-T report an error if DSTFILE is a directory.
|
||||
--help display this help and exit.
|
||||
--version display version info and exit.
|
||||
|
||||
Environment variables override the default commands:
|
||||
CHGRPPROG CHMODPROG CHOWNPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG
|
||||
"
|
||||
|
||||
while test -n "$1"; do
|
||||
case $1 in
|
||||
-c) shift
|
||||
continue;;
|
||||
|
||||
-d) dir_arg=true
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-g) chgrpcmd="$chgrpprog $2"
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
--help) echo "$usage"; exit $?;;
|
||||
|
||||
-m) chmodcmd="$chmodprog $2"
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-o) chowncmd="$chownprog $2"
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-s) stripcmd=$stripprog
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-t) dstarg=$2
|
||||
shift
|
||||
shift
|
||||
continue;;
|
||||
|
||||
-T) no_target_directory=true
|
||||
shift
|
||||
continue;;
|
||||
|
||||
--version) echo "$0 $scriptversion"; exit $?;;
|
||||
|
||||
*) # When -d is used, all remaining arguments are directories to create.
|
||||
# When -t is used, the destination is already specified.
|
||||
test -n "$dir_arg$dstarg" && break
|
||||
# Otherwise, the last argument is the destination. Remove it from $@.
|
||||
for arg
|
||||
do
|
||||
if test -n "$dstarg"; then
|
||||
# $@ is not empty: it contains at least $arg.
|
||||
set fnord "$@" "$dstarg"
|
||||
shift # fnord
|
||||
fi
|
||||
shift # arg
|
||||
dstarg=$arg
|
||||
done
|
||||
break;;
|
||||
esac
|
||||
done
|
||||
|
||||
if test -z "$1"; then
|
||||
if test -z "$dir_arg"; then
|
||||
echo "$0: no input file specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
# It's OK to call `install-sh -d' without argument.
|
||||
# This can happen when creating conditional directories.
|
||||
exit 0
|
||||
fi
|
||||
|
||||
for src
|
||||
do
|
||||
# Protect names starting with `-'.
|
||||
case $src in
|
||||
-*) src=./$src ;;
|
||||
esac
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
dst=$src
|
||||
src=
|
||||
|
||||
if test -d "$dst"; then
|
||||
mkdircmd=:
|
||||
chmodcmd=
|
||||
else
|
||||
mkdircmd=$mkdirprog
|
||||
fi
|
||||
else
|
||||
# Waiting for this to be detected by the "$cpprog $src $dsttmp" command
|
||||
# might cause directories to be created, which would be especially bad
|
||||
# if $src (and thus $dsttmp) contains '*'.
|
||||
if test ! -f "$src" && test ! -d "$src"; then
|
||||
echo "$0: $src does not exist." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if test -z "$dstarg"; then
|
||||
echo "$0: no destination specified." >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
dst=$dstarg
|
||||
# Protect names starting with `-'.
|
||||
case $dst in
|
||||
-*) dst=./$dst ;;
|
||||
esac
|
||||
|
||||
# If destination is a directory, append the input filename; won't work
|
||||
# if double slashes aren't ignored.
|
||||
if test -d "$dst"; then
|
||||
if test -n "$no_target_directory"; then
|
||||
echo "$0: $dstarg: Is a directory" >&2
|
||||
exit 1
|
||||
fi
|
||||
dst=$dst/`basename "$src"`
|
||||
fi
|
||||
fi
|
||||
|
||||
# This sed command emulates the dirname command.
|
||||
dstdir=`echo "$dst" | sed -e 's,/*$,,;s,[^/]*$,,;s,/*$,,;s,^$,.,'`
|
||||
|
||||
# Make sure that the destination directory exists.
|
||||
|
||||
# Skip lots of stat calls in the usual case.
|
||||
if test ! -d "$dstdir"; then
|
||||
defaultIFS='
|
||||
'
|
||||
IFS="${IFS-$defaultIFS}"
|
||||
|
||||
oIFS=$IFS
|
||||
# Some sh's can't handle IFS=/ for some reason.
|
||||
IFS='%'
|
||||
set x `echo "$dstdir" | sed -e 's@/@%@g' -e 's@^%@/@'`
|
||||
shift
|
||||
IFS=$oIFS
|
||||
|
||||
pathcomp=
|
||||
|
||||
while test $# -ne 0 ; do
|
||||
pathcomp=$pathcomp$1
|
||||
shift
|
||||
if test ! -d "$pathcomp"; then
|
||||
$mkdirprog "$pathcomp"
|
||||
# mkdir can fail with a `File exist' error in case several
|
||||
# install-sh are creating the directory concurrently. This
|
||||
# is OK.
|
||||
test -d "$pathcomp" || exit
|
||||
fi
|
||||
pathcomp=$pathcomp/
|
||||
done
|
||||
fi
|
||||
|
||||
if test -n "$dir_arg"; then
|
||||
$doit $mkdircmd "$dst" \
|
||||
&& { test -z "$chowncmd" || $doit $chowncmd "$dst"; } \
|
||||
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } \
|
||||
&& { test -z "$stripcmd" || $doit $stripcmd "$dst"; } \
|
||||
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dst"; }
|
||||
|
||||
else
|
||||
dstfile=`basename "$dst"`
|
||||
|
||||
# Make a couple of temp file names in the proper directory.
|
||||
dsttmp=$dstdir/_inst.$$_
|
||||
rmtmp=$dstdir/_rm.$$_
|
||||
|
||||
# Trap to clean up those temp files at exit.
|
||||
trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
|
||||
trap '(exit $?); exit' 1 2 13 15
|
||||
|
||||
# Copy the file name to the temp name.
|
||||
$doit $cpprog "$src" "$dsttmp" &&
|
||||
|
||||
# and set any options; do chmod last to preserve setuid bits.
|
||||
#
|
||||
# If any of these fail, we abort the whole thing. If we want to
|
||||
# ignore errors from any of these, just make sure not to ignore
|
||||
# errors from the above "$doit $cpprog $src $dsttmp" command.
|
||||
#
|
||||
{ test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } \
|
||||
&& { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } \
|
||||
&& { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } \
|
||||
&& { test -z "$chmodcmd" || $doit $chmodcmd "$dsttmp"; } &&
|
||||
|
||||
# Now rename the file to the real destination.
|
||||
{ $doit $mvcmd -f "$dsttmp" "$dstdir/$dstfile" 2>/dev/null \
|
||||
|| {
|
||||
# The rename failed, perhaps because mv can't rename something else
|
||||
# to itself, or perhaps because mv is so ancient that it does not
|
||||
# support -f.
|
||||
|
||||
# Now remove or move aside any old file at destination location.
|
||||
# We try this two ways since rm can't unlink itself on some
|
||||
# systems and the destination file might be busy for other
|
||||
# reasons. In this case, the final cleanup might fail but the new
|
||||
# file should still install successfully.
|
||||
{
|
||||
if test -f "$dstdir/$dstfile"; then
|
||||
$doit $rmcmd -f "$dstdir/$dstfile" 2>/dev/null \
|
||||
|| $doit $mvcmd -f "$dstdir/$dstfile" "$rmtmp" 2>/dev/null \
|
||||
|| {
|
||||
echo "$0: cannot unlink or rename $dstdir/$dstfile" >&2
|
||||
(exit 1); exit 1
|
||||
}
|
||||
else
|
||||
:
|
||||
fi
|
||||
} &&
|
||||
|
||||
# Now rename the file to the real destination.
|
||||
$doit $mvcmd "$dsttmp" "$dstdir/$dstfile"
|
||||
}
|
||||
}
|
||||
fi || { (exit 1); exit 1; }
|
||||
done
|
||||
|
||||
# The final little trick to "correctly" pass the exit status to the exit trap.
|
||||
{
|
||||
(exit 0); exit 0
|
||||
}
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
||||
372
menuselect/linkedlists.h
Normal file
372
menuselect/linkedlists.h
Normal file
@@ -0,0 +1,372 @@
|
||||
/*
|
||||
* Asterisk -- An open source telephony toolkit.
|
||||
*
|
||||
* Copyright (C) 1999 - 2006, Digium, Inc.
|
||||
*
|
||||
* Mark Spencer <markster@digium.com>
|
||||
* Kevin P. Fleming <kpfleming@digium.com>
|
||||
*
|
||||
* See http://www.asterisk.org for more information about
|
||||
* the Asterisk project. Please do not directly contact
|
||||
* any of the maintainers of this project for assistance;
|
||||
* the project provides a web site, mailing lists and IRC
|
||||
* channels for your use.
|
||||
*
|
||||
* This program is free software, distributed under the terms of
|
||||
* the GNU General Public License Version 2. See the LICENSE file
|
||||
* at the top of the source tree.
|
||||
*/
|
||||
|
||||
#ifndef ASTERISK_LINKEDLISTS_H
|
||||
#define ASTERISK_LINKEDLISTS_H
|
||||
|
||||
/*!
|
||||
\brief Defines a structure to be used to hold a list of specified type (with no lock).
|
||||
\param name This will be the name of the defined structure.
|
||||
\param type This is the type of each list entry.
|
||||
|
||||
This macro creates a structure definition that can be used
|
||||
to hold a list of the entries of type \a type. It does not actually
|
||||
declare (allocate) a structure; to do that, either follow this
|
||||
macro with the desired name of the instance you wish to declare,
|
||||
or use the specified \a name to declare instances elsewhere.
|
||||
|
||||
Example usage:
|
||||
\code
|
||||
static AST_LIST_HEAD_NOLOCK(entry_list, entry) entries;
|
||||
\endcode
|
||||
|
||||
This would define \c struct \c entry_list, and declare an instance of it named
|
||||
\a entries, all intended to hold a list of type \c struct \c entry.
|
||||
*/
|
||||
#define AST_LIST_HEAD_NOLOCK(name, type) \
|
||||
struct name { \
|
||||
struct type *first; \
|
||||
struct type *last; \
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Defines initial values for a declaration of AST_LIST_HEAD_NOLOCK
|
||||
*/
|
||||
#define AST_LIST_HEAD_NOLOCK_INIT_VALUE { \
|
||||
.first = NULL, \
|
||||
.last = NULL, \
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Defines a structure to be used to hold a list of specified type, statically initialized.
|
||||
|
||||
This is the same as AST_LIST_HEAD_STATIC, except without the lock included.
|
||||
*/
|
||||
#define AST_LIST_HEAD_NOLOCK_STATIC(name, type) \
|
||||
struct name { \
|
||||
struct type *first; \
|
||||
struct type *last; \
|
||||
} name = AST_LIST_HEAD_NOLOCK_INIT_VALUE
|
||||
|
||||
/*!
|
||||
\brief Initializes a list head structure with a specified first entry.
|
||||
\param head This is a pointer to the list head structure
|
||||
\param entry pointer to the list entry that will become the head of the list
|
||||
|
||||
This macro initializes a list head structure by setting the head
|
||||
entry to the supplied value.
|
||||
*/
|
||||
#define AST_LIST_HEAD_SET_NOLOCK(head, entry) do { \
|
||||
(head)->first = (entry); \
|
||||
(head)->last = (entry); \
|
||||
} while (0)
|
||||
|
||||
/*!
|
||||
\brief Declare a forward link structure inside a list entry.
|
||||
\param type This is the type of each list entry.
|
||||
|
||||
This macro declares a structure to be used to link list entries together.
|
||||
It must be used inside the definition of the structure named in
|
||||
\a type, as follows:
|
||||
|
||||
\code
|
||||
struct list_entry {
|
||||
...
|
||||
AST_LIST_ENTRY(list_entry) list;
|
||||
}
|
||||
\endcode
|
||||
|
||||
The field name \a list here is arbitrary, and can be anything you wish.
|
||||
*/
|
||||
#define AST_LIST_ENTRY(type) \
|
||||
struct { \
|
||||
struct type *next; \
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Returns the first entry contained in a list.
|
||||
\param head This is a pointer to the list head structure
|
||||
*/
|
||||
#define AST_LIST_FIRST(head) ((head)->first)
|
||||
|
||||
/*!
|
||||
\brief Returns the last entry contained in a list.
|
||||
\param head This is a pointer to the list tail structure
|
||||
*/
|
||||
#define AST_LIST_LAST(head) ((head)->last)
|
||||
|
||||
/*!
|
||||
\brief Returns the next entry in the list after the given entry.
|
||||
\param elm This is a pointer to the current entry.
|
||||
\param field This is the name of the field (declared using AST_LIST_ENTRY())
|
||||
used to link entries of this list together.
|
||||
*/
|
||||
#define AST_LIST_NEXT(elm, field) ((elm)->field.next)
|
||||
|
||||
/*!
|
||||
\brief Checks whether the specified list contains any entries.
|
||||
\param head This is a pointer to the list head structure
|
||||
|
||||
Returns non-zero if the list has entries, zero if not.
|
||||
*/
|
||||
#define AST_LIST_EMPTY(head) (AST_LIST_FIRST(head) == NULL)
|
||||
|
||||
/*!
|
||||
\brief Loops over (traverses) the entries in a list.
|
||||
\param head This is a pointer to the list head structure
|
||||
\param var This is the name of the variable that will hold a pointer to the
|
||||
current list entry on each iteration. It must be declared before calling
|
||||
this macro.
|
||||
\param field This is the name of the field (declared using AST_LIST_ENTRY())
|
||||
used to link entries of this list together.
|
||||
|
||||
This macro is use to loop over (traverse) the entries in a list. It uses a
|
||||
\a for loop, and supplies the enclosed code with a pointer to each list
|
||||
entry as it loops. It is typically used as follows:
|
||||
\code
|
||||
static AST_LIST_HEAD(entry_list, list_entry) entries;
|
||||
...
|
||||
struct list_entry {
|
||||
...
|
||||
AST_LIST_ENTRY(list_entry) list;
|
||||
}
|
||||
...
|
||||
struct list_entry *current;
|
||||
...
|
||||
AST_LIST_TRAVERSE(&entries, current, list) {
|
||||
(do something with current here)
|
||||
}
|
||||
\endcode
|
||||
\warning If you modify the forward-link pointer contained in the \a current entry while
|
||||
inside the loop, the behavior will be unpredictable. At a minimum, the following
|
||||
macros will modify the forward-link pointer, and should not be used inside
|
||||
AST_LIST_TRAVERSE() against the entry pointed to by the \a current pointer without
|
||||
careful consideration of their consequences:
|
||||
\li AST_LIST_NEXT() (when used as an lvalue)
|
||||
\li AST_LIST_INSERT_AFTER()
|
||||
\li AST_LIST_INSERT_HEAD()
|
||||
\li AST_LIST_INSERT_TAIL()
|
||||
*/
|
||||
#define AST_LIST_TRAVERSE(head,var,field) \
|
||||
for((var) = (head)->first; (var); (var) = (var)->field.next)
|
||||
|
||||
/*!
|
||||
\brief Loops safely over (traverses) the entries in a list.
|
||||
\param head This is a pointer to the list head structure
|
||||
\param var This is the name of the variable that will hold a pointer to the
|
||||
current list entry on each iteration. It must be declared before calling
|
||||
this macro.
|
||||
\param field This is the name of the field (declared using AST_LIST_ENTRY())
|
||||
used to link entries of this list together.
|
||||
|
||||
This macro is used to safely loop over (traverse) the entries in a list. It
|
||||
uses a \a for loop, and supplies the enclosed code with a pointer to each list
|
||||
entry as it loops. It is typically used as follows:
|
||||
|
||||
\code
|
||||
static AST_LIST_HEAD(entry_list, list_entry) entries;
|
||||
...
|
||||
struct list_entry {
|
||||
...
|
||||
AST_LIST_ENTRY(list_entry) list;
|
||||
}
|
||||
...
|
||||
struct list_entry *current;
|
||||
...
|
||||
AST_LIST_TRAVERSE_SAFE_BEGIN(&entries, current, list) {
|
||||
(do something with current here)
|
||||
}
|
||||
AST_LIST_TRAVERSE_SAFE_END;
|
||||
\endcode
|
||||
|
||||
It differs from AST_LIST_TRAVERSE() in that the code inside the loop can modify
|
||||
(or even free, after calling AST_LIST_REMOVE_CURRENT()) the entry pointed to by
|
||||
the \a current pointer without affecting the loop traversal.
|
||||
*/
|
||||
#define AST_LIST_TRAVERSE_SAFE_BEGIN(head, var, field) { \
|
||||
typeof((head)->first) __list_next; \
|
||||
typeof((head)->first) __list_prev = NULL; \
|
||||
typeof((head)->first) __new_prev = NULL; \
|
||||
for ((var) = (head)->first, __new_prev = (var), \
|
||||
__list_next = (var) ? (var)->field.next : NULL; \
|
||||
(var); \
|
||||
__list_prev = __new_prev, (var) = __list_next, \
|
||||
__new_prev = (var), \
|
||||
__list_next = (var) ? (var)->field.next : NULL \
|
||||
)
|
||||
|
||||
/*!
|
||||
\brief Removes the \a current entry from a list during a traversal.
|
||||
\param head This is a pointer to the list head structure
|
||||
\param field This is the name of the field (declared using AST_LIST_ENTRY())
|
||||
used to link entries of this list together.
|
||||
|
||||
\note This macro can \b only be used inside an AST_LIST_TRAVERSE_SAFE_BEGIN()
|
||||
block; it is used to unlink the current entry from the list without affecting
|
||||
the list traversal (and without having to re-traverse the list to modify the
|
||||
previous entry, if any).
|
||||
*/
|
||||
#define AST_LIST_REMOVE_CURRENT(head, field) do { \
|
||||
__new_prev->field.next = NULL; \
|
||||
__new_prev = __list_prev; \
|
||||
if (__list_prev) \
|
||||
__list_prev->field.next = __list_next; \
|
||||
else \
|
||||
(head)->first = __list_next; \
|
||||
if (!__list_next) \
|
||||
(head)->last = __list_prev; \
|
||||
} while (0)
|
||||
|
||||
/*!
|
||||
\brief Inserts a list entry before the current entry during a traversal.
|
||||
\param head This is a pointer to the list head structure
|
||||
\param elm This is a pointer to the entry to be inserted.
|
||||
\param field This is the name of the field (declared using AST_LIST_ENTRY())
|
||||
used to link entries of this list together.
|
||||
|
||||
\note This macro can \b only be used inside an AST_LIST_TRAVERSE_SAFE_BEGIN()
|
||||
block.
|
||||
*/
|
||||
#define AST_LIST_INSERT_BEFORE_CURRENT(head, elm, field) do { \
|
||||
if (__list_prev) { \
|
||||
(elm)->field.next = __list_prev->field.next; \
|
||||
__list_prev->field.next = elm; \
|
||||
} else { \
|
||||
(elm)->field.next = (head)->first; \
|
||||
(head)->first = (elm); \
|
||||
} \
|
||||
__new_prev = (elm); \
|
||||
} while (0)
|
||||
|
||||
/*!
|
||||
\brief Closes a safe loop traversal block.
|
||||
*/
|
||||
#define AST_LIST_TRAVERSE_SAFE_END }
|
||||
|
||||
/*!
|
||||
\brief Initializes a list head structure.
|
||||
\param head This is a pointer to the list head structure
|
||||
|
||||
This macro initializes a list head structure by setting the head
|
||||
entry to \a NULL (empty list). There is no embedded lock handling
|
||||
with this macro.
|
||||
*/
|
||||
#define AST_LIST_HEAD_INIT_NOLOCK(head) { \
|
||||
(head)->first = NULL; \
|
||||
(head)->last = NULL; \
|
||||
}
|
||||
|
||||
/*!
|
||||
\brief Inserts a list entry after a given entry.
|
||||
\param head This is a pointer to the list head structure
|
||||
\param listelm This is a pointer to the entry after which the new entry should
|
||||
be inserted.
|
||||
\param elm This is a pointer to the entry to be inserted.
|
||||
\param field This is the name of the field (declared using AST_LIST_ENTRY())
|
||||
used to link entries of this list together.
|
||||
*/
|
||||
#define AST_LIST_INSERT_AFTER(head, listelm, elm, field) do { \
|
||||
(elm)->field.next = (listelm)->field.next; \
|
||||
(listelm)->field.next = (elm); \
|
||||
if ((head)->last == (listelm)) \
|
||||
(head)->last = (elm); \
|
||||
} while (0)
|
||||
|
||||
/*!
|
||||
\brief Inserts a list entry at the head of a list.
|
||||
\param head This is a pointer to the list head structure
|
||||
\param elm This is a pointer to the entry to be inserted.
|
||||
\param field This is the name of the field (declared using AST_LIST_ENTRY())
|
||||
used to link entries of this list together.
|
||||
*/
|
||||
#define AST_LIST_INSERT_HEAD(head, elm, field) do { \
|
||||
(elm)->field.next = (head)->first; \
|
||||
(head)->first = (elm); \
|
||||
if (!(head)->last) \
|
||||
(head)->last = (elm); \
|
||||
} while (0)
|
||||
|
||||
/*!
|
||||
\brief Appends a list entry to the tail of a list.
|
||||
\param head This is a pointer to the list head structure
|
||||
\param elm This is a pointer to the entry to be appended.
|
||||
\param field This is the name of the field (declared using AST_LIST_ENTRY())
|
||||
used to link entries of this list together.
|
||||
|
||||
Note: The link field in the appended entry is \b not modified, so if it is
|
||||
actually the head of a list itself, the entire list will be appended
|
||||
temporarily (until the next AST_LIST_INSERT_TAIL is performed).
|
||||
*/
|
||||
#define AST_LIST_INSERT_TAIL(head, elm, field) do { \
|
||||
if (!(head)->first) { \
|
||||
(head)->first = (elm); \
|
||||
(head)->last = (elm); \
|
||||
} else { \
|
||||
(head)->last->field.next = (elm); \
|
||||
(head)->last = (elm); \
|
||||
} \
|
||||
} while (0)
|
||||
|
||||
/*!
|
||||
\brief Removes and returns the head entry from a list.
|
||||
\param head This is a pointer to the list head structure
|
||||
\param field This is the name of the field (declared using AST_LIST_ENTRY())
|
||||
used to link entries of this list together.
|
||||
|
||||
Removes the head entry from the list, and returns a pointer to it.
|
||||
This macro is safe to call on an empty list.
|
||||
*/
|
||||
#define AST_LIST_REMOVE_HEAD(head, field) ({ \
|
||||
typeof((head)->first) cur = (head)->first; \
|
||||
if (cur) { \
|
||||
(head)->first = cur->field.next; \
|
||||
cur->field.next = NULL; \
|
||||
if ((head)->last == cur) \
|
||||
(head)->last = NULL; \
|
||||
} \
|
||||
cur; \
|
||||
})
|
||||
|
||||
/*!
|
||||
\brief Removes a specific entry from a list.
|
||||
\param head This is a pointer to the list head structure
|
||||
\param elm This is a pointer to the entry to be removed.
|
||||
\param field This is the name of the field (declared using AST_LIST_ENTRY())
|
||||
used to link entries of this list together.
|
||||
\warning The removed entry is \b not freed nor modified in any way.
|
||||
*/
|
||||
#define AST_LIST_REMOVE(head, elm, field) do { \
|
||||
if ((head)->first == (elm)) { \
|
||||
(head)->first = (elm)->field.next; \
|
||||
if ((head)->last == (elm)) \
|
||||
(head)->last = NULL; \
|
||||
} else { \
|
||||
typeof(elm) curelm = (head)->first; \
|
||||
while (curelm && (curelm->field.next != (elm))) \
|
||||
curelm = curelm->field.next; \
|
||||
if (curelm) { \
|
||||
curelm->field.next = (elm)->field.next; \
|
||||
if ((head)->last == (elm)) \
|
||||
(head)->last = curelm; \
|
||||
} \
|
||||
} \
|
||||
(elm)->field.next = NULL; \
|
||||
} while (0)
|
||||
|
||||
#endif /* _ASTERISK_LINKEDLISTS_H */
|
||||
56
menuselect/make_version
Executable file
56
menuselect/make_version
Executable file
@@ -0,0 +1,56 @@
|
||||
#!/bin/sh
|
||||
|
||||
if [ -f ${1}/.version ]; then
|
||||
cat ${1}.version
|
||||
elif [ -f ${1}/.svnrevision ]; then
|
||||
echo SVN-`cat ${1}/.svnbranch`-r`cat ${1}/.svnrevision`
|
||||
elif [ -d .svn ]; then
|
||||
PARTS=`LANG=C svn info ${1} | grep URL | awk '{print $2;}' | sed -e 's:^.*/svn/menuselect/::' | sed -e 's:/: :g'`
|
||||
BRANCH=0
|
||||
TEAM=0
|
||||
|
||||
REV=`svnversion -c ${1} | cut -d: -f2`
|
||||
|
||||
if [ "${PARTS}" = "trunk" ]
|
||||
then
|
||||
echo SVN-'trunk'-r${REV}
|
||||
exit 0
|
||||
fi
|
||||
|
||||
for PART in $PARTS
|
||||
do
|
||||
if [ ${BRANCH} != 0 ]
|
||||
then
|
||||
RESULT="${RESULT}-${PART}"
|
||||
break
|
||||
fi
|
||||
|
||||
if [ ${TEAM} != 0 ]
|
||||
then
|
||||
RESULT="${RESULT}-${PART}"
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "${PART}" = "branches" ]
|
||||
then
|
||||
BRANCH=1
|
||||
RESULT="branch"
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "${PART}" = "tags" ]
|
||||
then
|
||||
BRANCH=1
|
||||
RESULT="tag"
|
||||
continue
|
||||
fi
|
||||
|
||||
if [ "${PART}" = "team" ]
|
||||
then
|
||||
TEAM=1
|
||||
continue
|
||||
fi
|
||||
done
|
||||
|
||||
echo SVN-${RESULT##-}-r${REV}
|
||||
fi
|
||||
26
menuselect/makeopts.in
Normal file
26
menuselect/makeopts.in
Normal file
@@ -0,0 +1,26 @@
|
||||
# NOTE: Names of _INCLUDE and _LIB entries in this file must be
|
||||
# the exact uppercase equivalents of the names used for
|
||||
# dependencies in menuselect for the same package.
|
||||
|
||||
CC=@CC@
|
||||
|
||||
OSARCH=@HOST_OS@
|
||||
MENUSELECT_DEBUG=@MENUSELECT_DEBUG@
|
||||
|
||||
# The frontend can use curses, ncurses, newt or gtk2
|
||||
|
||||
CURSES_INCLUDE=@CURSES_INCLUDE@
|
||||
CURSES_LIB=@CURSES_LIB@
|
||||
|
||||
GTK2_INCLUDE=@GTK2_INCLUDE@
|
||||
GTK2_LIB=@GTK2_LIB@
|
||||
|
||||
NCURSES_INCLUDE=@NCURSES_INCLUDE@
|
||||
NCURSES_LIB=@NCURSES_LIB@
|
||||
|
||||
NEWT_INCLUDE=@NEWT_INCLUDE@
|
||||
NEWT_LIB=@NEWT_LIB@
|
||||
|
||||
LIBXML2_INCLUDE=@LIBXML2_INCLUDE@
|
||||
LIBXML2_LIB=@LIBXML2_LIB@
|
||||
|
||||
2149
menuselect/menuselect.c
Normal file
2149
menuselect/menuselect.c
Normal file
File diff suppressed because it is too large
Load Diff
162
menuselect/menuselect.h
Normal file
162
menuselect/menuselect.h
Normal file
@@ -0,0 +1,162 @@
|
||||
/*
|
||||
* Asterisk -- An open source telephony toolkit.
|
||||
*
|
||||
* Copyright (C) 2005-2006, Russell Bryant
|
||||
*
|
||||
* Russell Bryant <russell@digium.com>
|
||||
*
|
||||
* See http://www.asterisk.org for more information about
|
||||
* the Asterisk project. Please do not directly contact
|
||||
* any of the maintainers of this project for assistance;
|
||||
* the project provides a web site, mailing lists and IRC
|
||||
* channels for your use.
|
||||
*
|
||||
* This program is free software, distributed under the terms of
|
||||
* the GNU General Public License Version 2. See the LICENSE file
|
||||
* at the top of the source tree.
|
||||
*/
|
||||
|
||||
/*!
|
||||
* \file
|
||||
*
|
||||
* \brief public data structures and defaults for menuselect
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef MENUSELECT_H
|
||||
#define MENUSELECT_H
|
||||
|
||||
#include "linkedlists.h"
|
||||
|
||||
#define OUTPUT_MAKEOPTS_DEFAULT "menuselect.makeopts"
|
||||
#define OUTPUT_MAKEDEPS_DEFAULT "menuselect.makedeps"
|
||||
#define MENUSELECT_DEPS "build_tools/menuselect-deps"
|
||||
|
||||
struct member;
|
||||
|
||||
struct reference {
|
||||
/*! the name of the dependency */
|
||||
const char *name;
|
||||
/*! the display name of the dependency */
|
||||
const char *displayname;
|
||||
/*! if this dependency is a member, not an external object */
|
||||
struct member *member;
|
||||
/*! if this package was found */
|
||||
unsigned char met:1;
|
||||
/*! for linking */
|
||||
AST_LIST_ENTRY(reference) list;
|
||||
};
|
||||
|
||||
enum failure_types {
|
||||
NO_FAILURE = 0,
|
||||
SOFT_FAILURE = 1,
|
||||
HARD_FAILURE = 2,
|
||||
};
|
||||
|
||||
AST_LIST_HEAD_NOLOCK(reference_list, reference);
|
||||
|
||||
struct member {
|
||||
/*! What will be sent to the makeopts file */
|
||||
const char *name;
|
||||
/*! Display name if known */
|
||||
const char *displayname;
|
||||
/*! Default setting */
|
||||
const char *defaultenabled;
|
||||
/*! Delete these file(s) if this member changes */
|
||||
const char *remove_on_change;
|
||||
/*! Touch these file(s) if this member changes */
|
||||
const char *touch_on_change;
|
||||
const char *support_level;
|
||||
const char *replacement;
|
||||
/*! This module is currently selected */
|
||||
unsigned int enabled:1;
|
||||
/*! This module was enabled when the config was loaded */
|
||||
unsigned int was_enabled:1;
|
||||
/*! This module has failed dependencies */
|
||||
unsigned int depsfailed:2;
|
||||
/*! This module has failed conflicts */
|
||||
unsigned int conflictsfailed:2;
|
||||
/*! This module's 'enabled' flag was changed by a default only */
|
||||
unsigned int was_defaulted:1;
|
||||
/*! This module is a dependency, and if it is selected then
|
||||
we have included it in the MENUSELECT_BUILD_DEPS line
|
||||
in the output file */
|
||||
unsigned int build_deps_output:1;
|
||||
/*! This module should never be enabled automatically, but only
|
||||
* when explicitly set. */
|
||||
unsigned int explicitly_enabled_only:1;
|
||||
/*! This isn't actually a module! It's a separator, and it should
|
||||
* be passed over for many of the usual purposes associated with members. */
|
||||
unsigned int is_separator:1;
|
||||
/*! dependencies of this module */
|
||||
struct reference_list deps;
|
||||
/*! conflicts of this module */
|
||||
struct reference_list conflicts;
|
||||
/*! optional packages used by this module */
|
||||
struct reference_list uses;
|
||||
/*! for making a list of modules */
|
||||
AST_LIST_ENTRY(member) list;
|
||||
};
|
||||
|
||||
enum support_level_values {
|
||||
SUPPORT_CORE = 0,
|
||||
SUPPORT_EXTENDED = 1,
|
||||
SUPPORT_DEPRECATED = 2,
|
||||
SUPPORT_UNSPECIFIED = 3,
|
||||
SUPPORT_COUNT = 4, /* Keep this item at the end of the list. Tracks total number of support levels. */
|
||||
};
|
||||
|
||||
AST_LIST_HEAD_NOLOCK(support_level_bucket, member);
|
||||
|
||||
struct category {
|
||||
/*! Workspace for building support levels */
|
||||
struct support_level_bucket buckets[SUPPORT_COUNT];
|
||||
/*! the Makefile variable */
|
||||
const char *name;
|
||||
/*! the name displayed in the menu */
|
||||
const char *displayname;
|
||||
/*! Delete these file(s) if anything in this category changes */
|
||||
const char *remove_on_change;
|
||||
/*! Touch these file(s) if anything in this category changes */
|
||||
const char *touch_on_change;
|
||||
/*! Output what is selected, as opposed to not selected */
|
||||
unsigned int positive_output:1;
|
||||
/*! All choices in this category are mutually exclusive */
|
||||
unsigned int exclusive:1;
|
||||
/*! the list of possible values to be set in this variable */
|
||||
AST_LIST_HEAD_NOLOCK(, member) members;
|
||||
/*! for linking */
|
||||
AST_LIST_ENTRY(category) list;
|
||||
};
|
||||
|
||||
extern AST_LIST_HEAD_NOLOCK(categories, category) categories;
|
||||
|
||||
extern const char *menu_name;
|
||||
|
||||
/*! This is implemented by the frontend */
|
||||
int run_menu(void);
|
||||
|
||||
int count_categories(void);
|
||||
|
||||
int count_members(struct category *cat);
|
||||
|
||||
/*! \brief Toggle a member of a category at the specified index to enabled/disabled */
|
||||
void toggle_enabled_index(struct category *cat, int index);
|
||||
|
||||
void toggle_enabled(struct member *mem);
|
||||
|
||||
/*! \brief Set a member of a category at the specified index to enabled */
|
||||
void set_enabled(struct category *cat, int index);
|
||||
/*! \brief Set a member of a category at the specified index to not enabled */
|
||||
void clear_enabled(struct category *cat, int index);
|
||||
|
||||
/*! \brief Enable/Disable all members of a category as long as dependencies have been met and no conflicts are found */
|
||||
void set_all(struct category *cat, int val);
|
||||
|
||||
/*! \brief returns non-zero if the string is not defined, or has zero length */
|
||||
static inline int strlen_zero(const char *s)
|
||||
{
|
||||
return (!s || (*s == '\0'));
|
||||
}
|
||||
|
||||
#endif /* MENUSELECT_H */
|
||||
1034
menuselect/menuselect_curses.c
Normal file
1034
menuselect/menuselect_curses.c
Normal file
File diff suppressed because it is too large
Load Diff
358
menuselect/menuselect_gtk.c
Normal file
358
menuselect/menuselect_gtk.c
Normal file
@@ -0,0 +1,358 @@
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <gtk/gtk.h>
|
||||
|
||||
#include "menuselect.h"
|
||||
|
||||
enum {
|
||||
/*! The row name */
|
||||
COLUMN_NAME,
|
||||
/*! Whether this row is enabled */
|
||||
COLUMN_SELECTED,
|
||||
/*! Dependencies */
|
||||
COLUMN_DEPS,
|
||||
/*! Optional dependencies */
|
||||
COLUMN_USES,
|
||||
/*! Conflicts */
|
||||
COLUMN_CNFS,
|
||||
/*! Number of columns, must be the last element in the enum */
|
||||
NUM_COLUMNS,
|
||||
};
|
||||
|
||||
static void handle_save(GtkWidget *w, gpointer data);
|
||||
static void handle_about(GtkWidget *w, gpointer data);
|
||||
static void handle_quit(GtkWidget *w, gpointer data);
|
||||
|
||||
static GtkItemFactoryEntry menu_items[] = {
|
||||
{ "/_File", NULL, NULL, 0, "<Branch>" },
|
||||
{ "/File/_Save And Quit", "<control>S", handle_save, 0, "<StockItem>", GTK_STOCK_SAVE },
|
||||
{ "/File/sep1", NULL, NULL, 0, "<Separator>" },
|
||||
{ "/File/_Quit", "<CTRL>Q", handle_quit, 0, "<StockItem>", GTK_STOCK_QUIT },
|
||||
{ "/_Help", NULL, NULL, 0, "<LastBranch>" },
|
||||
{ "/_Help/About", NULL, handle_about, 0, "<Item>" },
|
||||
};
|
||||
|
||||
static gint nmenu_items = sizeof(menu_items) / sizeof(menu_items[0]);
|
||||
|
||||
static GtkTreeView *tree;
|
||||
static GtkWidget *window;
|
||||
|
||||
/* 0, save ... non-zero, don't save */
|
||||
static int main_res = 1;
|
||||
static int change_made = 0;
|
||||
|
||||
static void handle_save(GtkWidget *w, gpointer data)
|
||||
{
|
||||
main_res = 0;
|
||||
gtk_main_quit();
|
||||
}
|
||||
|
||||
static void handle_about(GtkWidget *w, gpointer data)
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
|
||||
dialog = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_MODAL,
|
||||
GTK_MESSAGE_INFO, GTK_BUTTONS_OK,
|
||||
"GMenuselect - http://www.asterisk.org/\n"
|
||||
"Russell Bryant <russell@digium.com>\n"
|
||||
"Copyright (C) 2007\n");
|
||||
|
||||
gtk_dialog_run(GTK_DIALOG(dialog));
|
||||
gtk_widget_destroy(dialog);
|
||||
}
|
||||
|
||||
static gboolean delete_event(GtkWidget *widget, GdkEvent *event, gpointer data)
|
||||
{
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
static void handle_quit(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
gtk_main_quit();
|
||||
}
|
||||
|
||||
static void destroy(GtkWidget *widget, gpointer data)
|
||||
{
|
||||
GtkWidget *dialog;
|
||||
gint response;
|
||||
|
||||
if (!main_res || !change_made) {
|
||||
gtk_main_quit();
|
||||
return;
|
||||
}
|
||||
|
||||
dialog = gtk_message_dialog_new(GTK_WINDOW(window), GTK_DIALOG_MODAL,
|
||||
GTK_MESSAGE_QUESTION, GTK_BUTTONS_YES_NO, "Save before quit?");
|
||||
response = gtk_dialog_run(GTK_DIALOG(dialog));
|
||||
gtk_widget_destroy(dialog);
|
||||
|
||||
if (response == GTK_RESPONSE_YES)
|
||||
main_res = 0;
|
||||
|
||||
gtk_main_quit();
|
||||
}
|
||||
|
||||
static void toggled_handler(GtkCellRendererToggle *renderer, gchar *path, gpointer data)
|
||||
{
|
||||
gchar *cat_num_str, *mem_num_str;
|
||||
int cat_num, mem_num;
|
||||
int i = 0;
|
||||
struct category *cat;
|
||||
struct member *mem;
|
||||
GtkTreeStore *store = data;
|
||||
GtkTreeModel *model;
|
||||
GtkTreeIter cat_iter, mem_iter;
|
||||
|
||||
mem_num_str = alloca(strlen(path)) + 1;
|
||||
strcpy(mem_num_str, path);
|
||||
cat_num_str = strsep(&mem_num_str, ":");
|
||||
|
||||
if (!mem_num_str || !*mem_num_str)
|
||||
return;
|
||||
|
||||
cat_num = atoi(cat_num_str);
|
||||
mem_num = atoi(mem_num_str);
|
||||
|
||||
AST_LIST_TRAVERSE(&categories, cat, list) {
|
||||
if (i == cat_num)
|
||||
break;
|
||||
i++;
|
||||
}
|
||||
if (!cat)
|
||||
return;
|
||||
|
||||
i = 0;
|
||||
AST_LIST_TRAVERSE(&cat->members, mem, list) {
|
||||
if (i == mem_num)
|
||||
break;
|
||||
i++;
|
||||
}
|
||||
if (!mem)
|
||||
return;
|
||||
|
||||
toggle_enabled(mem);
|
||||
|
||||
model = gtk_tree_view_get_model(tree);
|
||||
|
||||
gtk_tree_model_get_iter_first(model, &cat_iter);
|
||||
for (i = 0; i < cat_num; i++) {
|
||||
if (!gtk_tree_model_iter_next(model, &cat_iter))
|
||||
break;
|
||||
}
|
||||
if (i != cat_num)
|
||||
return;
|
||||
|
||||
if (!gtk_tree_model_iter_children(model, &mem_iter, &cat_iter))
|
||||
return;
|
||||
|
||||
for (i = 0; i < mem_num; i++) {
|
||||
if (!gtk_tree_model_iter_next(model, &mem_iter))
|
||||
break;
|
||||
}
|
||||
if (i != mem_num)
|
||||
return;
|
||||
|
||||
gtk_tree_store_set(store, &mem_iter, COLUMN_SELECTED, mem->enabled, -1);
|
||||
|
||||
change_made = 1;
|
||||
}
|
||||
|
||||
static void row_activated_handler(GtkTreeView *treeview, GtkTreePath *path,
|
||||
GtkTreeViewColumn *col, gpointer data)
|
||||
{
|
||||
GtkTreeIter iter;
|
||||
GtkTreeModel *model;
|
||||
GtkTreeStore *store = data;
|
||||
gchar *name;
|
||||
struct category *cat;
|
||||
struct member *mem;
|
||||
|
||||
model = gtk_tree_view_get_model(treeview);
|
||||
|
||||
if (!gtk_tree_model_get_iter(model, &iter, path))
|
||||
return;
|
||||
|
||||
gtk_tree_model_get(model, &iter, COLUMN_NAME, &name, -1);
|
||||
|
||||
AST_LIST_TRAVERSE(&categories, cat, list) {
|
||||
AST_LIST_TRAVERSE(&cat->members, mem, list) {
|
||||
if (strcmp(name, mem->name))
|
||||
continue;
|
||||
|
||||
toggle_enabled(mem);
|
||||
gtk_tree_store_set(store, &iter, COLUMN_SELECTED, mem->enabled, -1);
|
||||
change_made = 1;
|
||||
break;
|
||||
}
|
||||
if (mem)
|
||||
break;
|
||||
}
|
||||
|
||||
g_free(name);
|
||||
}
|
||||
|
||||
static GtkWidget *get_menubar_menu(GtkWidget *window)
|
||||
{
|
||||
GtkItemFactory *item_factory;
|
||||
GtkAccelGroup *accel_group;
|
||||
|
||||
/* Make an accelerator group (shortcut keys) */
|
||||
accel_group = gtk_accel_group_new();
|
||||
|
||||
/* Make an ItemFactory (that makes a menubar) */
|
||||
item_factory = gtk_item_factory_new(GTK_TYPE_MENU_BAR, "<main>",
|
||||
accel_group);
|
||||
|
||||
/* This function generates the menu items. Pass the item factory,
|
||||
the number of items in the array, the array itself, and any
|
||||
callback data for the the menu items. */
|
||||
gtk_item_factory_create_items(item_factory, nmenu_items, menu_items, NULL);
|
||||
|
||||
/* Attach the new accelerator group to the window. */
|
||||
gtk_window_add_accel_group(GTK_WINDOW(window), accel_group);
|
||||
|
||||
/* Finally, return the actual menu bar created by the item factory. */
|
||||
return gtk_item_factory_get_widget(item_factory, "<main>");
|
||||
}
|
||||
|
||||
int run_menu(void)
|
||||
{
|
||||
int argc = 0;
|
||||
char **argv = NULL;
|
||||
GtkWidget *s_window;
|
||||
GtkCellRenderer *renderer;
|
||||
GtkTreeViewColumn *column;
|
||||
GtkTreeStore *store;
|
||||
struct category *cat;
|
||||
struct member *mem;
|
||||
GtkWidget *main_vbox;
|
||||
GtkWidget *menubar;
|
||||
|
||||
gtk_init(&argc, &argv);
|
||||
|
||||
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
|
||||
gtk_widget_set_size_request(window, 640, 480);
|
||||
gtk_window_set_title(GTK_WINDOW(window), "GMenuselect");
|
||||
|
||||
main_vbox = gtk_vbox_new(FALSE, 1);
|
||||
gtk_container_set_border_width(GTK_CONTAINER(main_vbox), 1);
|
||||
gtk_container_add(GTK_CONTAINER(window), main_vbox);
|
||||
|
||||
menubar = get_menubar_menu(window);
|
||||
gtk_box_pack_start(GTK_BOX(main_vbox), menubar, FALSE, FALSE, 0);
|
||||
|
||||
s_window = gtk_scrolled_window_new(NULL, NULL);
|
||||
|
||||
g_signal_connect(G_OBJECT(window), "delete_event",
|
||||
G_CALLBACK(delete_event), NULL);
|
||||
g_signal_connect(G_OBJECT(window), "destroy",
|
||||
G_CALLBACK(destroy), NULL);
|
||||
|
||||
store = gtk_tree_store_new(NUM_COLUMNS,
|
||||
G_TYPE_STRING, /* COLUMN_NAME */
|
||||
G_TYPE_BOOLEAN, /* COLUMN_SELECTED */
|
||||
G_TYPE_STRING, /* COLUMN_DEPS */
|
||||
G_TYPE_STRING, /* COLUMN_USES */
|
||||
G_TYPE_STRING); /* COLUMN_CNFS */
|
||||
|
||||
AST_LIST_TRAVERSE(&categories, cat, list) {
|
||||
GtkTreeIter iter, iter2;
|
||||
gtk_tree_store_append(store, &iter, NULL);
|
||||
gtk_tree_store_set(store, &iter,
|
||||
COLUMN_NAME, cat->displayname,
|
||||
COLUMN_SELECTED, TRUE,
|
||||
-1);
|
||||
AST_LIST_TRAVERSE(&cat->members, mem, list) {
|
||||
char name_buf[64];
|
||||
char dep_buf[64] = "";
|
||||
char use_buf[64] = "";
|
||||
char cnf_buf[64] = "";
|
||||
struct reference *dep;
|
||||
struct reference *use;
|
||||
struct reference *cnf;
|
||||
|
||||
AST_LIST_TRAVERSE(&mem->deps, dep, list) {
|
||||
strncat(dep_buf, dep->displayname, sizeof(dep_buf) - strlen(dep_buf) - 1);
|
||||
strncat(dep_buf, dep->member ? "(M)" : "(E)", sizeof(dep_buf) - strlen(dep_buf) - 1);
|
||||
if (AST_LIST_NEXT(dep, list))
|
||||
strncat(dep_buf, ", ", sizeof(dep_buf) - strlen(dep_buf) - 1);
|
||||
}
|
||||
AST_LIST_TRAVERSE(&mem->uses, use, list) {
|
||||
strncat(use_buf, use->displayname, sizeof(use_buf) - strlen(use_buf) - 1);
|
||||
if (AST_LIST_NEXT(use, list))
|
||||
strncat(use_buf, ", ", sizeof(use_buf) - strlen(use_buf) - 1);
|
||||
}
|
||||
AST_LIST_TRAVERSE(&mem->conflicts, cnf, list) {
|
||||
strncat(cnf_buf, cnf->displayname, sizeof(cnf_buf) - strlen(cnf_buf) - 1);
|
||||
strncat(cnf_buf, cnf->member ? "(M)" : "(E)", sizeof(cnf_buf) - strlen(cnf_buf) - 1);
|
||||
if (AST_LIST_NEXT(cnf, list))
|
||||
strncat(cnf_buf, ", ", sizeof(cnf_buf) - strlen(cnf_buf) - 1);
|
||||
}
|
||||
|
||||
if (mem->is_separator) {
|
||||
snprintf(name_buf, sizeof(name_buf), "--- %s ---", mem->name);
|
||||
} else {
|
||||
snprintf(name_buf, sizeof(name_buf), "%s", mem->name);
|
||||
}
|
||||
if (mem->depsfailed == HARD_FAILURE)
|
||||
strncat(name_buf, " (Failed Deps.)", sizeof(name_buf) - strlen(name_buf) - 1);
|
||||
if (mem->conflictsfailed == HARD_FAILURE)
|
||||
strncat(name_buf, " (In Conflict)", sizeof(name_buf) - strlen(name_buf) - 1);
|
||||
|
||||
gtk_tree_store_append(store, &iter2, &iter);
|
||||
gtk_tree_store_set(store, &iter2,
|
||||
COLUMN_NAME, name_buf,
|
||||
COLUMN_SELECTED, mem->enabled,
|
||||
COLUMN_DEPS, dep_buf,
|
||||
COLUMN_USES, use_buf,
|
||||
COLUMN_CNFS, cnf_buf,
|
||||
-1);
|
||||
}
|
||||
}
|
||||
|
||||
tree = (GtkTreeView *) gtk_tree_view_new_with_model(GTK_TREE_MODEL(store));
|
||||
|
||||
#if GTK_CHECK_VERSION(2,10,0)
|
||||
gtk_tree_view_set_enable_tree_lines(tree, TRUE);
|
||||
gtk_tree_view_set_grid_lines(tree, GTK_TREE_VIEW_GRID_LINES_BOTH);
|
||||
#endif
|
||||
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
column = gtk_tree_view_column_new_with_attributes("Name",
|
||||
renderer, "text", COLUMN_NAME, NULL);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
|
||||
|
||||
renderer = gtk_cell_renderer_toggle_new();
|
||||
column = gtk_tree_view_column_new_with_attributes("Selected",
|
||||
renderer, "active", COLUMN_SELECTED, NULL);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
|
||||
g_signal_connect(renderer, "toggled", (GCallback) toggled_handler, store);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
column = gtk_tree_view_column_new_with_attributes("Depends On",
|
||||
renderer, "text", COLUMN_DEPS, NULL);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
column = gtk_tree_view_column_new_with_attributes("Can Use",
|
||||
renderer, "text", COLUMN_USES, NULL);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
|
||||
|
||||
renderer = gtk_cell_renderer_text_new();
|
||||
column = gtk_tree_view_column_new_with_attributes("Conflicts With",
|
||||
renderer, "text", COLUMN_CNFS, NULL);
|
||||
gtk_tree_view_append_column(GTK_TREE_VIEW(tree), column);
|
||||
|
||||
g_signal_connect(tree, "row-activated", (GCallback) row_activated_handler, store);
|
||||
|
||||
gtk_container_add(GTK_CONTAINER(s_window), GTK_WIDGET(tree));
|
||||
|
||||
gtk_box_pack_end(GTK_BOX(main_vbox), s_window, TRUE, TRUE, 0);
|
||||
|
||||
gtk_widget_show_all(window);
|
||||
|
||||
gtk_main();
|
||||
|
||||
return main_res;
|
||||
}
|
||||
427
menuselect/menuselect_newt.c
Normal file
427
menuselect/menuselect_newt.c
Normal file
@@ -0,0 +1,427 @@
|
||||
/*
|
||||
* Asterisk -- An open source telephony toolkit.
|
||||
*
|
||||
* Copyright (C) 2008 Sean Bright
|
||||
*
|
||||
* Sean Bright <sean.bright@gmail.com>
|
||||
*
|
||||
* See http://www.asterisk.org for more information about
|
||||
* the Asterisk project. Please do not directly contact
|
||||
* any of the maintainers of this project for assistance;
|
||||
* the project provides a web site, mailing lists and IRC
|
||||
* channels for your use.
|
||||
*
|
||||
* This program is free software, distributed under the terms of
|
||||
* the GNU General Public License Version 2. See the LICENSE file
|
||||
* at the top of the source tree.
|
||||
*/
|
||||
|
||||
/*
|
||||
* \file
|
||||
*
|
||||
* \author Sean Bright <sean.bright@gmail.com>
|
||||
*
|
||||
* \brief newt frontend for selection maintenance
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include <newt.h>
|
||||
|
||||
#include "menuselect.h"
|
||||
|
||||
#define MIN_X 80
|
||||
#define MIN_Y 21
|
||||
|
||||
#define MIN(a, b) ({ typeof(a) __a = (a); typeof(b) __b = (b); ((__a > __b) ? __b : __a);})
|
||||
#define MAX(a, b) ({ typeof(a) __a = (a); typeof(b) __b = (b); ((__a < __b) ? __b : __a);})
|
||||
|
||||
extern int changes_made;
|
||||
|
||||
static newtComponent rootOptions;
|
||||
static newtComponent subOptions;
|
||||
|
||||
static newtComponent memberNameTextbox;
|
||||
static newtComponent dependsLabel;
|
||||
static newtComponent usesLabel;
|
||||
static newtComponent conflictsLabel;
|
||||
static newtComponent supportLevelLabel;
|
||||
static newtComponent dependsDataTextbox;
|
||||
static newtComponent usesDataTextbox;
|
||||
static newtComponent conflictsDataTextbox;
|
||||
static newtComponent supportLevelDataTextbox;
|
||||
|
||||
static newtComponent exitButton;
|
||||
static newtComponent saveAndExitButton;
|
||||
|
||||
static void build_members_menu(int overlay);
|
||||
static void root_menu_callback(newtComponent component, void *data);
|
||||
|
||||
static void toggle_all_options(int select)
|
||||
{
|
||||
struct category *cat = newtListboxGetCurrent(rootOptions);
|
||||
|
||||
set_all(cat, select);
|
||||
|
||||
/* Redraw */
|
||||
build_members_menu(1);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void toggle_selected_option()
|
||||
{
|
||||
int i;
|
||||
struct member *mem = newtListboxGetCurrent(subOptions);
|
||||
|
||||
toggle_enabled(mem);
|
||||
|
||||
/* Redraw */
|
||||
build_members_menu(1);
|
||||
|
||||
/* Select the next item in the list */
|
||||
for (i = 0; i < newtListboxItemCount(subOptions); i++) {
|
||||
struct member *cur;
|
||||
|
||||
newtListboxGetEntry(subOptions, i, NULL, (void **) &cur);
|
||||
|
||||
if (cur == mem) {
|
||||
i = MIN(i + 1, newtListboxItemCount(subOptions) - 1);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
newtListboxSetCurrent(subOptions, i);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void reset_display()
|
||||
{
|
||||
newtTextboxSetText(memberNameTextbox, "");
|
||||
newtTextboxSetText(dependsDataTextbox, "");
|
||||
newtTextboxSetText(usesDataTextbox, "");
|
||||
newtTextboxSetText(conflictsDataTextbox, "");
|
||||
newtTextboxSetText(supportLevelDataTextbox, "");
|
||||
newtRefresh();
|
||||
}
|
||||
|
||||
static void display_member_info(struct member *mem)
|
||||
{
|
||||
char buffer[128] = { 0 };
|
||||
|
||||
struct reference *dep;
|
||||
struct reference *con;
|
||||
struct reference *uses;
|
||||
|
||||
reset_display();
|
||||
|
||||
if (mem->displayname) {
|
||||
newtTextboxSetText(memberNameTextbox, mem->displayname);
|
||||
}
|
||||
|
||||
if (AST_LIST_EMPTY(&mem->deps)) {
|
||||
if (mem->is_separator) {
|
||||
newtTextboxSetText(dependsDataTextbox, "");
|
||||
} else {
|
||||
newtTextboxSetText(dependsDataTextbox, "N/A");
|
||||
}
|
||||
} else {
|
||||
strcpy(buffer, "");
|
||||
AST_LIST_TRAVERSE(&mem->deps, dep, list) {
|
||||
strncat(buffer, dep->displayname, sizeof(buffer) - strlen(buffer) - 1);
|
||||
strncat(buffer, dep->member ? "(M)" : "(E)", sizeof(buffer) - strlen(buffer) - 1);
|
||||
if (AST_LIST_NEXT(dep, list))
|
||||
strncat(buffer, ", ", sizeof(buffer) - strlen(buffer) - 1);
|
||||
}
|
||||
newtTextboxSetText(dependsDataTextbox, buffer);
|
||||
}
|
||||
|
||||
if (AST_LIST_EMPTY(&mem->uses)) {
|
||||
if (mem->is_separator) {
|
||||
newtTextboxSetText(usesDataTextbox, "");
|
||||
} else {
|
||||
newtTextboxSetText(usesDataTextbox, "N/A");
|
||||
}
|
||||
} else {
|
||||
strcpy(buffer, "");
|
||||
AST_LIST_TRAVERSE(&mem->uses, uses, list) {
|
||||
strncat(buffer, uses->displayname, sizeof(buffer) - strlen(buffer) - 1);
|
||||
strncat(buffer, uses->member ? "(M)" : "(E)", sizeof(buffer) - strlen(buffer) - 1);
|
||||
if (AST_LIST_NEXT(uses, list))
|
||||
strncat(buffer, ", ", sizeof(buffer) - strlen(buffer) - 1);
|
||||
}
|
||||
newtTextboxSetText(usesDataTextbox, buffer);
|
||||
}
|
||||
|
||||
if (AST_LIST_EMPTY(&mem->conflicts)) {
|
||||
if (!mem->is_separator) {
|
||||
newtTextboxSetText(conflictsDataTextbox, "N/A");
|
||||
} else {
|
||||
newtTextboxSetText(conflictsDataTextbox, "");
|
||||
}
|
||||
} else {
|
||||
strcpy(buffer, "");
|
||||
AST_LIST_TRAVERSE(&mem->conflicts, con, list) {
|
||||
strncat(buffer, con->displayname, sizeof(buffer) - strlen(buffer) - 1);
|
||||
strncat(buffer, con->member ? "(M)" : "(E)", sizeof(buffer) - strlen(buffer) - 1);
|
||||
if (AST_LIST_NEXT(con, list))
|
||||
strncat(buffer, ", ", sizeof(buffer) - strlen(buffer) - 1);
|
||||
}
|
||||
newtTextboxSetText(conflictsDataTextbox, buffer);
|
||||
}
|
||||
|
||||
{ /* Support Level */
|
||||
snprintf(buffer, sizeof(buffer), "%s", mem->support_level);
|
||||
if (mem->replacement && *mem->replacement) {
|
||||
char buf2[64];
|
||||
snprintf(buf2, sizeof(buf2), ", Replaced by: %s", mem->replacement);
|
||||
strncat(buffer, buf2, sizeof(buffer) - strlen(buffer) - 1);
|
||||
}
|
||||
if (mem->is_separator) {
|
||||
newtTextboxSetText(supportLevelDataTextbox, "");
|
||||
} else {
|
||||
newtTextboxSetText(supportLevelDataTextbox, buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
static void build_members_menu(int overlay)
|
||||
{
|
||||
struct category *cat;
|
||||
struct member *mem;
|
||||
char buf[64];
|
||||
int i = 0;
|
||||
|
||||
if (!overlay) {
|
||||
reset_display();
|
||||
newtListboxClear(subOptions);
|
||||
}
|
||||
|
||||
cat = newtListboxGetCurrent(rootOptions);
|
||||
|
||||
AST_LIST_TRAVERSE(&cat->members, mem, list) {
|
||||
|
||||
if ((mem->depsfailed == HARD_FAILURE) || (mem->conflictsfailed == HARD_FAILURE)) {
|
||||
snprintf(buf, sizeof(buf), "XXX %s", mem->name);
|
||||
} else if (mem->is_separator) {
|
||||
snprintf(buf, sizeof(buf), " --- %s ---", mem->name);
|
||||
} else if (mem->depsfailed == SOFT_FAILURE) {
|
||||
snprintf(buf, sizeof(buf), "<%s> %s", mem->enabled ? "*" : " ", mem->name);
|
||||
} else if (mem->conflictsfailed == SOFT_FAILURE) {
|
||||
snprintf(buf, sizeof(buf), "(%s) %s", mem->enabled ? "*" : " ", mem->name);
|
||||
} else {
|
||||
snprintf(buf, sizeof(buf), "[%s] %s", mem->enabled ? "*" : " ", mem->name);
|
||||
}
|
||||
|
||||
if (overlay) {
|
||||
newtListboxSetEntry(subOptions, i, buf);
|
||||
} else {
|
||||
newtListboxAppendEntry(subOptions, buf, mem);
|
||||
}
|
||||
|
||||
i++;
|
||||
}
|
||||
|
||||
if (!overlay) {
|
||||
display_member_info(AST_LIST_FIRST(&cat->members));
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
static void build_main_menu()
|
||||
{
|
||||
struct category *cat;
|
||||
char buf[64];
|
||||
int i = 1;
|
||||
|
||||
newtListboxClear(rootOptions);
|
||||
|
||||
AST_LIST_TRAVERSE(&categories, cat, list) {
|
||||
if (!strlen_zero(cat->displayname))
|
||||
snprintf(buf, sizeof(buf), " %s ", cat->displayname);
|
||||
else
|
||||
snprintf(buf, sizeof(buf), " %s ", cat->name);
|
||||
|
||||
newtListboxAppendEntry(rootOptions, buf, cat);
|
||||
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
static void category_menu_callback(newtComponent component, void *data)
|
||||
{
|
||||
display_member_info(newtListboxGetCurrent(subOptions));
|
||||
}
|
||||
|
||||
static void root_menu_callback(newtComponent component, void *data)
|
||||
{
|
||||
build_members_menu(0);
|
||||
}
|
||||
|
||||
int run_confirmation_dialog(int *result)
|
||||
{
|
||||
int res = newtWinTernary("Are You Sure?", "Discard changes & Exit", "Save & Exit", "Cancel",
|
||||
"It appears you have made some changes, and you have opted to Quit "
|
||||
"without saving these changes. Please choose \"Discard changes & Exit\" to exit "
|
||||
"without saving; Choose \"Cancel\" to cancel your decision to quit, and keep "
|
||||
"working in menuselect, or choose \"Save & Exit\" to save your changes, and exit.");
|
||||
|
||||
switch (res) {
|
||||
case 1:
|
||||
/* Discard and exit */
|
||||
*result = -1;
|
||||
return 1;
|
||||
case 2:
|
||||
/* Save and exit */
|
||||
*result = 0;
|
||||
return 1;
|
||||
case 3:
|
||||
/* They either chose "No" or they hit F12 */
|
||||
default:
|
||||
*result = -1;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int run_menu(void)
|
||||
{
|
||||
struct newtExitStruct es;
|
||||
newtComponent form;
|
||||
int x = 0, y = 0, res = 0;
|
||||
|
||||
newtInit();
|
||||
newtCls();
|
||||
newtGetScreenSize(&x, &y);
|
||||
|
||||
if (x < MIN_X || y < MIN_Y) {
|
||||
newtFinished();
|
||||
fprintf(stderr, "Terminal must be at least %d x %d.\n", MIN_X, MIN_Y);
|
||||
return -1;
|
||||
}
|
||||
|
||||
newtPushHelpLine(" <ENTER> toggles selection | <F12> saves & exits | <ESC> exits without save");
|
||||
newtRefresh();
|
||||
|
||||
newtCenteredWindow(x - 8, y - 7, menu_name);
|
||||
form = newtForm(NULL, NULL, 0);
|
||||
|
||||
/* F8 for select all */
|
||||
newtFormAddHotKey(form, NEWT_KEY_F8);
|
||||
|
||||
/* F7 for deselect all */
|
||||
newtFormAddHotKey(form, NEWT_KEY_F7);
|
||||
|
||||
newtFormSetTimer(form, 200);
|
||||
|
||||
rootOptions = newtListbox(2, 1, y - 15, 0);
|
||||
newtListboxSetWidth(rootOptions, 34);
|
||||
newtFormAddComponent(form, rootOptions);
|
||||
newtComponentAddCallback(rootOptions, root_menu_callback, NULL);
|
||||
|
||||
subOptions = newtListbox(38, 1, y - 15, NEWT_FLAG_SCROLL | NEWT_FLAG_RETURNEXIT);
|
||||
newtListboxSetWidth(subOptions, x - 47);
|
||||
newtFormAddComponent(form, subOptions);
|
||||
newtComponentAddCallback(subOptions, category_menu_callback, NULL);
|
||||
|
||||
memberNameTextbox = newtTextbox(2, y - 13, x - 10, 1, 0);
|
||||
dependsLabel = newtLabel(2, y - 11, " Depends on:");
|
||||
usesLabel = newtLabel(2, y - 10, " Can use:");
|
||||
conflictsLabel = newtLabel(2, y - 9, "Conflicts with:");
|
||||
supportLevelLabel = newtLabel(2, y - 8, " Support Level:");
|
||||
dependsDataTextbox = newtTextbox(18, y - 11, x - 27, 1, 0);
|
||||
usesDataTextbox = newtTextbox(18, y - 10, x - 27, 1, 0);
|
||||
conflictsDataTextbox = newtTextbox(18, y - 9, x - 27, 1, 0);
|
||||
supportLevelDataTextbox = newtTextbox(18, y - 8, x - 27, 1, 0);
|
||||
|
||||
exitButton = newtButton(x - 23, y - 11, " Exit ");
|
||||
saveAndExitButton = newtButton(x - 43, y - 11, " Save & Exit ");
|
||||
|
||||
newtFormAddComponents(
|
||||
form,
|
||||
memberNameTextbox,
|
||||
dependsLabel,
|
||||
dependsDataTextbox,
|
||||
usesLabel,
|
||||
usesDataTextbox,
|
||||
conflictsLabel,
|
||||
conflictsDataTextbox,
|
||||
supportLevelLabel,
|
||||
supportLevelDataTextbox,
|
||||
saveAndExitButton,
|
||||
exitButton,
|
||||
NULL);
|
||||
|
||||
build_main_menu();
|
||||
|
||||
root_menu_callback(rootOptions, AST_LIST_FIRST(&categories));
|
||||
|
||||
for (;;) {
|
||||
do {
|
||||
newtFormRun(form, &es);
|
||||
} while (es.reason == NEWT_EXIT_TIMER);
|
||||
|
||||
if (es.reason == NEWT_EXIT_HOTKEY) {
|
||||
int done = 1;
|
||||
|
||||
switch (es.u.key) {
|
||||
case NEWT_KEY_F12:
|
||||
res = 0;
|
||||
break;
|
||||
case NEWT_KEY_F7:
|
||||
toggle_all_options(0);
|
||||
done = 0;
|
||||
break;
|
||||
case NEWT_KEY_F8:
|
||||
toggle_all_options(1);
|
||||
done = 0;
|
||||
break;
|
||||
case NEWT_KEY_ESCAPE:
|
||||
if (changes_made) {
|
||||
done = run_confirmation_dialog(&res);
|
||||
} else {
|
||||
res = -1;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
done = 0;
|
||||
break;
|
||||
}
|
||||
|
||||
if (done) {
|
||||
break;
|
||||
}
|
||||
} else if (es.reason == NEWT_EXIT_COMPONENT) {
|
||||
if (es.u.co == saveAndExitButton) {
|
||||
res = 0;
|
||||
break;
|
||||
} else if (es.u.co == exitButton) {
|
||||
int done = 1;
|
||||
|
||||
if (changes_made) {
|
||||
done = run_confirmation_dialog(&res);
|
||||
} else {
|
||||
res = -1;
|
||||
}
|
||||
|
||||
if (done) {
|
||||
break;
|
||||
}
|
||||
} else if (es.u.co == subOptions) {
|
||||
toggle_selected_option();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* Cleanup */
|
||||
reset_display();
|
||||
newtFormDestroy(form);
|
||||
newtPopWindow();
|
||||
newtPopHelpLine();
|
||||
newtCls();
|
||||
newtFinished();
|
||||
|
||||
return res;
|
||||
}
|
||||
39
menuselect/menuselect_stub.c
Normal file
39
menuselect/menuselect_stub.c
Normal file
@@ -0,0 +1,39 @@
|
||||
/*
|
||||
* Asterisk -- An open source telephony toolkit.
|
||||
*
|
||||
* Copyright (C) 2005 - 2006, Russell Bryant
|
||||
*
|
||||
* Russell Bryant <russell@digium.com>
|
||||
*
|
||||
* See http://www.asterisk.org for more information about
|
||||
* the Asterisk project. Please do not directly contact
|
||||
* any of the maintainers of this project for assistance;
|
||||
* the project provides a web site, mailing lists and IRC
|
||||
* channels for your use.
|
||||
*
|
||||
* This program is free software, distributed under the terms of
|
||||
* the GNU General Public License Version 2. See the LICENSE file
|
||||
* at the top of the source tree.
|
||||
*/
|
||||
|
||||
/*
|
||||
* \file
|
||||
*
|
||||
* \author Russell Bryant <russell@digium.com>
|
||||
*
|
||||
* \brief Menu stub
|
||||
*/
|
||||
|
||||
#include <stdlib.h>
|
||||
#include <stdio.h>
|
||||
|
||||
#include "menuselect.h"
|
||||
|
||||
int run_menu(void)
|
||||
{
|
||||
fprintf(stderr, "**************************************************\n");
|
||||
fprintf(stderr, "*** Install ncurses to use the menu interface! ***\n");
|
||||
fprintf(stderr, "**************************************************\n");
|
||||
|
||||
return -1;
|
||||
}
|
||||
360
menuselect/missing
Executable file
360
menuselect/missing
Executable file
@@ -0,0 +1,360 @@
|
||||
#! /bin/sh
|
||||
# Common stub for a few missing GNU programs while installing.
|
||||
|
||||
scriptversion=2005-06-08.21
|
||||
|
||||
# Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005
|
||||
# Free Software Foundation, Inc.
|
||||
# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation; either version 2, or (at your option)
|
||||
# any later version.
|
||||
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
|
||||
# 02110-1301, USA.
|
||||
|
||||
# As a special exception to the GNU General Public License, if you
|
||||
# distribute this file as part of a program that contains a
|
||||
# configuration script generated by Autoconf, you may include it under
|
||||
# the same distribution terms that you use for the rest of that program.
|
||||
|
||||
if test $# -eq 0; then
|
||||
echo 1>&2 "Try \`$0 --help' for more information"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
run=:
|
||||
|
||||
# In the cases where this matters, `missing' is being run in the
|
||||
# srcdir already.
|
||||
if test -f configure.ac; then
|
||||
configure_ac=configure.ac
|
||||
else
|
||||
configure_ac=configure.in
|
||||
fi
|
||||
|
||||
msg="missing on your system"
|
||||
|
||||
case "$1" in
|
||||
--run)
|
||||
# Try to run requested program, and just exit if it succeeds.
|
||||
run=
|
||||
shift
|
||||
"$@" && exit 0
|
||||
# Exit code 63 means version mismatch. This often happens
|
||||
# when the user try to use an ancient version of a tool on
|
||||
# a file that requires a minimum version. In this case we
|
||||
# we should proceed has if the program had been absent, or
|
||||
# if --run hadn't been passed.
|
||||
if test $? = 63; then
|
||||
run=:
|
||||
msg="probably too old"
|
||||
fi
|
||||
;;
|
||||
|
||||
-h|--h|--he|--hel|--help)
|
||||
echo "\
|
||||
$0 [OPTION]... PROGRAM [ARGUMENT]...
|
||||
|
||||
Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
|
||||
error status if there is no known handling for PROGRAM.
|
||||
|
||||
Options:
|
||||
-h, --help display this help and exit
|
||||
-v, --version output version information and exit
|
||||
--run try to run the given command, and emulate it if it fails
|
||||
|
||||
Supported PROGRAM values:
|
||||
aclocal touch file \`aclocal.m4'
|
||||
autoconf touch file \`configure'
|
||||
autoheader touch file \`config.h.in'
|
||||
automake touch all \`Makefile.in' files
|
||||
bison create \`y.tab.[ch]', if possible, from existing .[ch]
|
||||
flex create \`lex.yy.c', if possible, from existing .c
|
||||
help2man touch the output file
|
||||
lex create \`lex.yy.c', if possible, from existing .c
|
||||
makeinfo touch the output file
|
||||
tar try tar, gnutar, gtar, then tar without non-portable flags
|
||||
yacc create \`y.tab.[ch]', if possible, from existing .[ch]
|
||||
|
||||
Send bug reports to <bug-automake@gnu.org>."
|
||||
exit $?
|
||||
;;
|
||||
|
||||
-v|--v|--ve|--ver|--vers|--versi|--versio|--version)
|
||||
echo "missing $scriptversion (GNU Automake)"
|
||||
exit $?
|
||||
;;
|
||||
|
||||
-*)
|
||||
echo 1>&2 "$0: Unknown \`$1' option"
|
||||
echo 1>&2 "Try \`$0 --help' for more information"
|
||||
exit 1
|
||||
;;
|
||||
|
||||
esac
|
||||
|
||||
# Now exit if we have it, but it failed. Also exit now if we
|
||||
# don't have it and --version was passed (most likely to detect
|
||||
# the program).
|
||||
case "$1" in
|
||||
lex|yacc)
|
||||
# Not GNU programs, they don't have --version.
|
||||
;;
|
||||
|
||||
tar)
|
||||
if test -n "$run"; then
|
||||
echo 1>&2 "ERROR: \`tar' requires --run"
|
||||
exit 1
|
||||
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
*)
|
||||
if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
|
||||
# We have it, but it failed.
|
||||
exit 1
|
||||
elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
|
||||
# Could not run --version or --help. This is probably someone
|
||||
# running `$TOOL --version' or `$TOOL --help' to check whether
|
||||
# $TOOL exists and not knowing $TOOL uses missing.
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# If it does not exist, or fails to run (possibly an outdated version),
|
||||
# try to emulate it.
|
||||
case "$1" in
|
||||
aclocal*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`acinclude.m4' or \`${configure_ac}'. You might want
|
||||
to install the \`Automake' and \`Perl' packages. Grab them from
|
||||
any GNU archive site."
|
||||
touch aclocal.m4
|
||||
;;
|
||||
|
||||
autoconf)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`${configure_ac}'. You might want to install the
|
||||
\`Autoconf' and \`GNU m4' packages. Grab them from any GNU
|
||||
archive site."
|
||||
touch configure
|
||||
;;
|
||||
|
||||
autoheader)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`acconfig.h' or \`${configure_ac}'. You might want
|
||||
to install the \`Autoconf' and \`GNU m4' packages. Grab them
|
||||
from any GNU archive site."
|
||||
files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
|
||||
test -z "$files" && files="config.h"
|
||||
touch_files=
|
||||
for f in $files; do
|
||||
case "$f" in
|
||||
*:*) touch_files="$touch_files "`echo "$f" |
|
||||
sed -e 's/^[^:]*://' -e 's/:.*//'`;;
|
||||
*) touch_files="$touch_files $f.in";;
|
||||
esac
|
||||
done
|
||||
touch $touch_files
|
||||
;;
|
||||
|
||||
automake*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'.
|
||||
You might want to install the \`Automake' and \`Perl' packages.
|
||||
Grab them from any GNU archive site."
|
||||
find . -type f -name Makefile.am -print |
|
||||
sed 's/\.am$/.in/' |
|
||||
while read f; do touch "$f"; done
|
||||
;;
|
||||
|
||||
autom4te)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is needed, but is $msg.
|
||||
You might have modified some files without having the
|
||||
proper tools for further handling them.
|
||||
You can get \`$1' as part of \`Autoconf' from any GNU
|
||||
archive site."
|
||||
|
||||
file=`echo "$*" | sed -n 's/.*--output[ =]*\([^ ]*\).*/\1/p'`
|
||||
test -z "$file" && file=`echo "$*" | sed -n 's/.*-o[ ]*\([^ ]*\).*/\1/p'`
|
||||
if test -f "$file"; then
|
||||
touch $file
|
||||
else
|
||||
test -z "$file" || exec >$file
|
||||
echo "#! /bin/sh"
|
||||
echo "# Created by GNU Automake missing as a replacement of"
|
||||
echo "# $ $@"
|
||||
echo "exit 0"
|
||||
chmod +x $file
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
bison|yacc)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' $msg. You should only need it if
|
||||
you modified a \`.y' file. You may need the \`Bison' package
|
||||
in order for those modifications to take effect. You can get
|
||||
\`Bison' from any GNU archive site."
|
||||
rm -f y.tab.c y.tab.h
|
||||
if [ $# -ne 1 ]; then
|
||||
eval LASTARG="\${$#}"
|
||||
case "$LASTARG" in
|
||||
*.y)
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
|
||||
if [ -f "$SRCFILE" ]; then
|
||||
cp "$SRCFILE" y.tab.c
|
||||
fi
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
|
||||
if [ -f "$SRCFILE" ]; then
|
||||
cp "$SRCFILE" y.tab.h
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if [ ! -f y.tab.h ]; then
|
||||
echo >y.tab.h
|
||||
fi
|
||||
if [ ! -f y.tab.c ]; then
|
||||
echo 'main() { return 0; }' >y.tab.c
|
||||
fi
|
||||
;;
|
||||
|
||||
lex|flex)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified a \`.l' file. You may need the \`Flex' package
|
||||
in order for those modifications to take effect. You can get
|
||||
\`Flex' from any GNU archive site."
|
||||
rm -f lex.yy.c
|
||||
if [ $# -ne 1 ]; then
|
||||
eval LASTARG="\${$#}"
|
||||
case "$LASTARG" in
|
||||
*.l)
|
||||
SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
|
||||
if [ -f "$SRCFILE" ]; then
|
||||
cp "$SRCFILE" lex.yy.c
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
if [ ! -f lex.yy.c ]; then
|
||||
echo 'main() { return 0; }' >lex.yy.c
|
||||
fi
|
||||
;;
|
||||
|
||||
help2man)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified a dependency of a manual page. You may need the
|
||||
\`Help2man' package in order for those modifications to take
|
||||
effect. You can get \`Help2man' from any GNU archive site."
|
||||
|
||||
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
|
||||
if test -z "$file"; then
|
||||
file=`echo "$*" | sed -n 's/.*--output=\([^ ]*\).*/\1/p'`
|
||||
fi
|
||||
if [ -f "$file" ]; then
|
||||
touch $file
|
||||
else
|
||||
test -z "$file" || exec >$file
|
||||
echo ".ab help2man is required to generate this page"
|
||||
exit 1
|
||||
fi
|
||||
;;
|
||||
|
||||
makeinfo)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is $msg. You should only need it if
|
||||
you modified a \`.texi' or \`.texinfo' file, or any other file
|
||||
indirectly affecting the aspect of the manual. The spurious
|
||||
call might also be the consequence of using a buggy \`make' (AIX,
|
||||
DU, IRIX). You might want to install the \`Texinfo' package or
|
||||
the \`GNU make' package. Grab either from any GNU archive site."
|
||||
# The file to touch is that specified with -o ...
|
||||
file=`echo "$*" | sed -n 's/.*-o \([^ ]*\).*/\1/p'`
|
||||
if test -z "$file"; then
|
||||
# ... or it is the one specified with @setfilename ...
|
||||
infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
|
||||
file=`sed -n '/^@setfilename/ { s/.* \([^ ]*\) *$/\1/; p; q; }' $infile`
|
||||
# ... or it is derived from the source name (dir/f.texi becomes f.info)
|
||||
test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
|
||||
fi
|
||||
# If the file does not exist, the user really needs makeinfo;
|
||||
# let's fail without touching anything.
|
||||
test -f $file || exit 1
|
||||
touch $file
|
||||
;;
|
||||
|
||||
tar)
|
||||
shift
|
||||
|
||||
# We have already tried tar in the generic part.
|
||||
# Look for gnutar/gtar before invocation to avoid ugly error
|
||||
# messages.
|
||||
if (gnutar --version > /dev/null 2>&1); then
|
||||
gnutar "$@" && exit 0
|
||||
fi
|
||||
if (gtar --version > /dev/null 2>&1); then
|
||||
gtar "$@" && exit 0
|
||||
fi
|
||||
firstarg="$1"
|
||||
if shift; then
|
||||
case "$firstarg" in
|
||||
*o*)
|
||||
firstarg=`echo "$firstarg" | sed s/o//`
|
||||
tar "$firstarg" "$@" && exit 0
|
||||
;;
|
||||
esac
|
||||
case "$firstarg" in
|
||||
*h*)
|
||||
firstarg=`echo "$firstarg" | sed s/h//`
|
||||
tar "$firstarg" "$@" && exit 0
|
||||
;;
|
||||
esac
|
||||
fi
|
||||
|
||||
echo 1>&2 "\
|
||||
WARNING: I can't seem to be able to run \`tar' with the given arguments.
|
||||
You may want to install GNU tar or Free paxutils, or check the
|
||||
command line arguments."
|
||||
exit 1
|
||||
;;
|
||||
|
||||
*)
|
||||
echo 1>&2 "\
|
||||
WARNING: \`$1' is needed, and is $msg.
|
||||
You might have modified some files without having the
|
||||
proper tools for further handling them. Check the \`README' file,
|
||||
it often tells you about the needed prerequisites for installing
|
||||
this package. You may also peek at any GNU archive site, in case
|
||||
some other package would contain this missing \`$1' program."
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
exit 0
|
||||
|
||||
# Local variables:
|
||||
# eval: (add-hook 'write-file-hooks 'time-stamp)
|
||||
# time-stamp-start: "scriptversion="
|
||||
# time-stamp-format: "%:y-%02m-%02d.%02H"
|
||||
# time-stamp-end: "$"
|
||||
# End:
|
||||
243
menuselect/strcompat.c
Normal file
243
menuselect/strcompat.c
Normal file
@@ -0,0 +1,243 @@
|
||||
/*
|
||||
* Asterisk -- An open source telephony toolkit.
|
||||
*
|
||||
* Copyright (C) 1999 - 2006, Digium, Inc.
|
||||
*
|
||||
* See http://www.asterisk.org for more information about
|
||||
* the Asterisk project. Please do not directly contact
|
||||
* any of the maintainers of this project for assistance;
|
||||
* the project provides a web site, mailing lists and IRC
|
||||
* channels for your use.
|
||||
*
|
||||
* This program is free software, distributed under the terms of
|
||||
* the GNU General Public License Version 2. See the LICENSE file
|
||||
* at the top of the source tree.
|
||||
*/
|
||||
|
||||
/*! \file
|
||||
*
|
||||
* \brief Compatibility functions for strsep and strtoq missing on Solaris
|
||||
*/
|
||||
|
||||
#include "autoconfig.h"
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <ctype.h>
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#ifdef HAVE_ALLOCA_H
|
||||
#include <alloca.h>
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRSEP
|
||||
char *strsep(char **str, const char *delims)
|
||||
{
|
||||
char *token;
|
||||
|
||||
if (!*str) {
|
||||
/* No more tokens */
|
||||
return NULL;
|
||||
}
|
||||
|
||||
token = *str;
|
||||
while (**str != '\0') {
|
||||
if (strchr(delims, **str)) {
|
||||
**str = '\0';
|
||||
(*str)++;
|
||||
return token;
|
||||
}
|
||||
(*str)++;
|
||||
}
|
||||
|
||||
/* There is no other token */
|
||||
*str = NULL;
|
||||
|
||||
return token;
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_SETENV
|
||||
int setenv(const char *name, const char *value, int overwrite)
|
||||
{
|
||||
unsigned char *buf;
|
||||
int buflen;
|
||||
|
||||
buflen = strlen(name) + strlen(value) + 2;
|
||||
buf = alloca(buflen);
|
||||
|
||||
if (!overwrite && getenv(name))
|
||||
return 0;
|
||||
|
||||
snprintf(buf, buflen, "%s=%s", name, value);
|
||||
|
||||
return putenv(buf);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_UNSETENV
|
||||
int unsetenv(const char *name)
|
||||
{
|
||||
return setenv(name, "", 0);
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_STRCASESTR
|
||||
static char *upper(const char *orig, char *buf, int bufsize)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
while (i < (bufsize - 1) && orig[i]) {
|
||||
buf[i] = toupper(orig[i]);
|
||||
i++;
|
||||
}
|
||||
|
||||
buf[i] = '\0';
|
||||
|
||||
return buf;
|
||||
}
|
||||
|
||||
char *strcasestr(const char *haystack, const char *needle)
|
||||
{
|
||||
char *u1, *u2;
|
||||
int u1len = strlen(haystack) + 1, u2len = strlen(needle) + 1;
|
||||
|
||||
u1 = alloca(u1len);
|
||||
u2 = alloca(u2len);
|
||||
if (u1 && u2) {
|
||||
char *offset;
|
||||
if (u2len > u1len) {
|
||||
/* Needle bigger than haystack */
|
||||
return NULL;
|
||||
}
|
||||
offset = strstr(upper(haystack, u1, u1len), upper(needle, u2, u2len));
|
||||
if (offset) {
|
||||
/* Return the offset into the original string */
|
||||
return ((char *)((unsigned long)haystack + (unsigned long)(offset - u1)));
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
} else {
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
#endif /* !HAVE_STRCASESTR */
|
||||
|
||||
#ifndef HAVE_STRNLEN
|
||||
size_t strnlen(const char *s, size_t n)
|
||||
{
|
||||
size_t len;
|
||||
|
||||
for (len = 0; len < n; len++)
|
||||
if (s[len] == '\0')
|
||||
break;
|
||||
|
||||
return len;
|
||||
}
|
||||
#endif /* !HAVE_STRNLEN */
|
||||
|
||||
#if !defined(HAVE_STRNDUP) && !defined(__AST_DEBUG_MALLOC)
|
||||
char *strndup(const char *s, size_t n)
|
||||
{
|
||||
size_t len = strnlen(s, n);
|
||||
char *new = malloc(len + 1);
|
||||
|
||||
if (!new)
|
||||
return NULL;
|
||||
|
||||
new[len] = '\0';
|
||||
return memcpy(new, s, len);
|
||||
}
|
||||
#endif /* !defined(HAVE_STRNDUP) && !defined(__AST_DEBUG_MALLOC) */
|
||||
|
||||
#if !defined(HAVE_VASPRINTF) && !defined(__AST_DEBUG_MALLOC)
|
||||
int vasprintf(char **strp, const char *fmt, va_list ap)
|
||||
{
|
||||
int size;
|
||||
va_list ap2;
|
||||
char s;
|
||||
|
||||
*strp = NULL;
|
||||
va_copy(ap2, ap);
|
||||
size = vsnprintf(&s, 1, fmt, ap2);
|
||||
va_end(ap2);
|
||||
*strp = malloc(size + 1);
|
||||
if (!*strp)
|
||||
return -1;
|
||||
vsnprintf(*strp, size + 1, fmt, ap);
|
||||
|
||||
return size;
|
||||
}
|
||||
#endif /* !defined(HAVE_VASPRINTF) && !defined(__AST_DEBUG_MALLOC) */
|
||||
|
||||
/*
|
||||
* Based on Code from bsd-asprintf from OpenSSH
|
||||
* Copyright (c) 2004 Darren Tucker.
|
||||
*
|
||||
* Based originally on asprintf.c from OpenBSD:
|
||||
* Copyright (c) 1997 Todd C. Miller <Todd.Miller@courtesan.com>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
* copyright notice and this permission notice appear in all copies.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
|
||||
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
|
||||
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
|
||||
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
|
||||
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||
*/
|
||||
#if !defined(HAVE_ASPRINTF) && !defined(__AST_DEBUG_MALLOC)
|
||||
int asprintf(char **str, const char *fmt, ...)
|
||||
{
|
||||
va_list ap;
|
||||
int ret;
|
||||
|
||||
*str = NULL;
|
||||
va_start(ap, fmt);
|
||||
ret = vasprintf(str, fmt, ap);
|
||||
va_end(ap);
|
||||
|
||||
return ret;
|
||||
}
|
||||
#endif /* !defined(HAVE_ASPRINTF) && !defined(__AST_DEBUG_MALLOC) */
|
||||
|
||||
#ifndef HAVE_GETLOADAVG
|
||||
#ifdef linux
|
||||
/*! \brief Alternative method of getting load avg on Linux only */
|
||||
int getloadavg(double *list, int nelem)
|
||||
{
|
||||
FILE *LOADAVG;
|
||||
double avg[3] = { 0.0, 0.0, 0.0 };
|
||||
int i, res = -1;
|
||||
|
||||
if ((LOADAVG = fopen("/proc/loadavg", "r"))) {
|
||||
fscanf(LOADAVG, "%lf %lf %lf", &avg[0], &avg[1], &avg[2]);
|
||||
res = 0;
|
||||
fclose(LOADAVG);
|
||||
}
|
||||
|
||||
for (i = 0; (i < nelem) && (i < 3); i++) {
|
||||
list[i] = avg[i];
|
||||
}
|
||||
|
||||
return res;
|
||||
}
|
||||
#else /* !linux */
|
||||
/*! \brief Return something that won't cancel the call, but still return -1, in case
|
||||
* we correct the implementation to check return value */
|
||||
int getloadavg(double *list, int nelem)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < nelem; i++) {
|
||||
list[i] = 0.1;
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
#endif /* linux */
|
||||
#endif /* !HAVE_GETLOADAVG */
|
||||
52
menuselect/test/build_tools/menuselect-deps
Normal file
52
menuselect/test/build_tools/menuselect-deps
Normal file
@@ -0,0 +1,52 @@
|
||||
ASOUND=1
|
||||
CRYPTO=1
|
||||
CURL=1
|
||||
DAHDI=1
|
||||
FREETDS=1
|
||||
GMIME=1
|
||||
GNU_LD=1
|
||||
GSM=1
|
||||
GTK2=1
|
||||
GTK=0
|
||||
H323=0
|
||||
HOARD=0
|
||||
ICONV=1
|
||||
IKSEMEL=1
|
||||
IMAP_TK=1
|
||||
ISDNNET=0
|
||||
IXJUSER=1
|
||||
JACK=1
|
||||
LDAP=1
|
||||
LTDL=1
|
||||
LUA=0
|
||||
MISDN=0
|
||||
NBS=0
|
||||
NETSNMP=0
|
||||
NEWT=1
|
||||
OGG=1
|
||||
OPENH323=0
|
||||
OSPTK=1
|
||||
OSSAUDIO=1
|
||||
PGSQL=1
|
||||
POPT=1
|
||||
PORTAUDIO=1
|
||||
PRI=0
|
||||
RESAMPLE=0
|
||||
AIS=0
|
||||
RADIUS=1
|
||||
SPANDSP=0
|
||||
SPEEX=1
|
||||
SPEEXDSP=1
|
||||
SPEEX_PREPROCESS=1
|
||||
SQLITE3=1
|
||||
SQLITE=1
|
||||
SS7=0
|
||||
SSL=1
|
||||
SUPPSERV=0
|
||||
TONEZONE=1
|
||||
UNIXODBC=1
|
||||
USB=1
|
||||
VORBIS=1
|
||||
VPBAPI=0
|
||||
WINARCH=0
|
||||
ZLIB=1
|
||||
716
menuselect/test/menuselect-tree
Normal file
716
menuselect/test/menuselect-tree
Normal file
@@ -0,0 +1,716 @@
|
||||
<?xml version="1.0"?>
|
||||
|
||||
<menu name="Asterisk Module and Build Option Selection">
|
||||
<category name="MENUSELECT_APPS" displayname="Applications" remove_on_change="apps/modules.link">
|
||||
<member name="app_adsiprog" displayname="Asterisk ADSI Programming Application" remove_on_change="apps/app_adsiprog.o apps/app_adsiprog.so">
|
||||
<depend>res_adsi</depend>
|
||||
</member>
|
||||
<member name="app_alarmreceiver" displayname="Alarm Receiver for Asterisk" remove_on_change="apps/app_alarmreceiver.o apps/app_alarmreceiver.so">
|
||||
</member>
|
||||
<member name="app_amd" displayname="Answering Machine Detection Application" remove_on_change="apps/app_amd.o apps/app_amd.so">
|
||||
</member>
|
||||
<member name="app_authenticate" displayname="Authentication Application" remove_on_change="apps/app_authenticate.o apps/app_authenticate.so">
|
||||
</member>
|
||||
<member name="app_cdr" displayname="Tell Asterisk to not maintain a CDR for the current call" remove_on_change="apps/app_cdr.o apps/app_cdr.so">
|
||||
</member>
|
||||
<member name="app_chanisavail" displayname="Check channel availability" remove_on_change="apps/app_chanisavail.o apps/app_chanisavail.so">
|
||||
</member>
|
||||
<member name="app_channelredirect" displayname="Redirects a given channel to a dialplan target" remove_on_change="apps/app_channelredirect.o apps/app_channelredirect.so">
|
||||
</member>
|
||||
<member name="app_chanspy" displayname="Listen to the audio of an active channel" remove_on_change="apps/app_chanspy.o apps/app_chanspy.so">
|
||||
</member>
|
||||
<member name="app_controlplayback" displayname="Control Playback Application" remove_on_change="apps/app_controlplayback.o apps/app_controlplayback.so">
|
||||
</member>
|
||||
<member name="app_dahdibarge" displayname="Barge in on DAHDI channel application" remove_on_change="apps/app_dahdibarge.o apps/app_dahdibarge.so">
|
||||
<depend name="dahdi">DAHDI</depend>
|
||||
</member>
|
||||
<member name="app_dahdiras" displayname="DAHDI ISDN Remote Access Server" remove_on_change="apps/app_dahdiras.o apps/app_dahdiras.so">
|
||||
<depend name="dahdi">DAHDI</depend>
|
||||
</member>
|
||||
<member name="app_dahdiscan" displayname="Scan DAHDI channels application" remove_on_change="apps/app_dahdiscan.o apps/app_dahdiscan.so">
|
||||
<depend name="dahdi">DAHDI</depend>
|
||||
</member>
|
||||
<member name="app_db" displayname="Database Access Functions" remove_on_change="apps/app_db.o apps/app_db.so">
|
||||
</member>
|
||||
<member name="app_dial" displayname="Dialing Application" remove_on_change="apps/app_dial.o apps/app_dial.so">
|
||||
<depend>chan_local</depend>
|
||||
</member>
|
||||
<member name="app_dictate" displayname="Virtual Dictation Machine" remove_on_change="apps/app_dictate.o apps/app_dictate.so">
|
||||
</member>
|
||||
<member name="app_directed_pickup" displayname="Directed Call Pickup Application" remove_on_change="apps/app_directed_pickup.o apps/app_directed_pickup.so">
|
||||
</member>
|
||||
<member name="app_directory" displayname="Extension Directory" remove_on_change="apps/app_directory.o apps/app_directory.so">
|
||||
<depend>app_voicemail</depend>
|
||||
</member>
|
||||
<member name="app_disa" displayname="DISA (Direct Inward System Access) Application" remove_on_change="apps/app_disa.o apps/app_disa.so">
|
||||
</member>
|
||||
<member name="app_dumpchan" displayname="Dump Info About The Calling Channel" remove_on_change="apps/app_dumpchan.o apps/app_dumpchan.so">
|
||||
</member>
|
||||
<member name="app_echo" displayname="Simple Echo Application" remove_on_change="apps/app_echo.o apps/app_echo.so">
|
||||
</member>
|
||||
<member name="app_exec" displayname="Executes dialplan applications" remove_on_change="apps/app_exec.o apps/app_exec.so">
|
||||
</member>
|
||||
<member name="app_externalivr" displayname="External IVR Interface Application" remove_on_change="apps/app_externalivr.o apps/app_externalivr.so">
|
||||
</member>
|
||||
<member name="app_fax" displayname="Simple FAX Application" remove_on_change="apps/app_fax.o apps/app_fax.so">
|
||||
<depend>spandsp</depend>
|
||||
</member>
|
||||
<member name="app_festival" displayname="Simple Festival Interface" remove_on_change="apps/app_festival.o apps/app_festival.so">
|
||||
</member>
|
||||
<member name="app_flash" displayname="Flash channel application" remove_on_change="apps/app_flash.o apps/app_flash.so">
|
||||
<depend name="dahdi">DAHDI</depend>
|
||||
</member>
|
||||
<member name="app_followme" displayname="Find-Me/Follow-Me Application" remove_on_change="apps/app_followme.o apps/app_followme.so">
|
||||
<depend>chan_local</depend>
|
||||
</member>
|
||||
<member name="app_forkcdr" displayname="Fork The CDR into 2 separate entities" remove_on_change="apps/app_forkcdr.o apps/app_forkcdr.so">
|
||||
</member>
|
||||
<member name="app_getcpeid" displayname="Get ADSI CPE ID" remove_on_change="apps/app_getcpeid.o apps/app_getcpeid.so">
|
||||
</member>
|
||||
<member name="app_ices" displayname="Encode and Stream via icecast and ices" remove_on_change="apps/app_ices.o apps/app_ices.so">
|
||||
</member>
|
||||
<member name="app_image" displayname="Image Transmission Application" remove_on_change="apps/app_image.o apps/app_image.so">
|
||||
</member>
|
||||
<member name="app_ivrdemo" displayname="IVR Demo Application" remove_on_change="apps/app_ivrdemo.o apps/app_ivrdemo.so">
|
||||
<defaultenabled>no</defaultenabled>
|
||||
</member>
|
||||
<member name="app_jack" displayname="JACK Interface" remove_on_change="apps/app_jack.o apps/app_jack.so">
|
||||
<depend>jack</depend>
|
||||
<depend name="resample">libresample</depend>
|
||||
</member>
|
||||
<member name="app_macro" displayname="Extension Macros" remove_on_change="apps/app_macro.o apps/app_macro.so">
|
||||
</member>
|
||||
<member name="app_meetme" displayname="MeetMe conference bridge" remove_on_change="apps/app_meetme.o apps/app_meetme.so">
|
||||
<depend>dahdi</depend>
|
||||
</member>
|
||||
<member name="app_milliwatt" displayname="Digital Milliwatt (mu-law) Test Application" remove_on_change="apps/app_milliwatt.o apps/app_milliwatt.so">
|
||||
<depend>res_indications</depend>
|
||||
</member>
|
||||
<member name="app_minivm" displayname="Mini VoiceMail (A minimal Voicemail e-mail System)" remove_on_change="apps/app_minivm.o apps/app_minivm.so">
|
||||
</member>
|
||||
<member name="app_mixmonitor" displayname="Mixed Audio Monitoring Application" remove_on_change="apps/app_mixmonitor.o apps/app_mixmonitor.so">
|
||||
</member>
|
||||
<member name="app_morsecode" displayname="Morse code" remove_on_change="apps/app_morsecode.o apps/app_morsecode.so">
|
||||
</member>
|
||||
<member name="app_mp3" displayname="Silly MP3 Application" remove_on_change="apps/app_mp3.o apps/app_mp3.so">
|
||||
</member>
|
||||
<member name="app_nbscat" displayname="Silly NBS Stream Application" remove_on_change="apps/app_nbscat.o apps/app_nbscat.so">
|
||||
</member>
|
||||
<member name="app_osplookup" displayname="Open Settlement Protocol Applications" remove_on_change="apps/app_osplookup.o apps/app_osplookup.so">
|
||||
<depend>osptk</depend>
|
||||
<depend>ssl</depend>
|
||||
</member>
|
||||
<member name="app_page" displayname="Page Multiple Phones" remove_on_change="apps/app_page.o apps/app_page.so">
|
||||
<depend name="dahdi">DAHDI</depend>
|
||||
<depend>app_meetme</depend>
|
||||
</member>
|
||||
<member name="app_parkandannounce" displayname="Call Parking and Announce Application" remove_on_change="apps/app_parkandannounce.o apps/app_parkandannounce.so">
|
||||
</member>
|
||||
<member name="app_playback" displayname="Sound File Playback Application" remove_on_change="apps/app_playback.o apps/app_playback.so">
|
||||
</member>
|
||||
<member name="app_privacy" displayname="Require phone number to be entered, if no CallerID sent" remove_on_change="apps/app_privacy.o apps/app_privacy.so">
|
||||
</member>
|
||||
<member name="app_queue" displayname="True Call Queueing" remove_on_change="apps/app_queue.o apps/app_queue.so">
|
||||
<depend>res_monitor</depend>
|
||||
</member>
|
||||
<member name="app_read" displayname="Read Variable Application" remove_on_change="apps/app_read.o apps/app_read.so">
|
||||
</member>
|
||||
<member name="app_readexten" displayname="Read and evaluate extension validity" remove_on_change="apps/app_readexten.o apps/app_readexten.so">
|
||||
</member>
|
||||
<member name="app_readfile" displayname="Stores output of file into a variable" remove_on_change="apps/app_readfile.o apps/app_readfile.so">
|
||||
</member>
|
||||
<member name="app_record" displayname="Trivial Record Application" remove_on_change="apps/app_record.o apps/app_record.so">
|
||||
</member>
|
||||
<member name="app_rpt" displayname="Radio Repeater/Remote Base Application" remove_on_change="apps/app_rpt.o apps/app_rpt.so">
|
||||
<depend name="dahdi">DAHDI</depend>
|
||||
<depend>tonezone</depend>
|
||||
<defaultenabled>no</defaultenabled>
|
||||
</member>
|
||||
<member name="app_sayunixtime" displayname="Say time" remove_on_change="apps/app_sayunixtime.o apps/app_sayunixtime.so">
|
||||
</member>
|
||||
<member name="app_senddtmf" displayname="Send DTMF digits Application" remove_on_change="apps/app_senddtmf.o apps/app_senddtmf.so">
|
||||
</member>
|
||||
<member name="app_sendtext" displayname="Send Text Applications" remove_on_change="apps/app_sendtext.o apps/app_sendtext.so">
|
||||
</member>
|
||||
<member name="app_setcallerid" displayname="Set CallerID Presentation Application" remove_on_change="apps/app_setcallerid.o apps/app_setcallerid.so">
|
||||
</member>
|
||||
<member name="app_skel" displayname="Skeleton (sample) Application" remove_on_change="apps/app_skel.o apps/app_skel.so">
|
||||
<defaultenabled>no</defaultenabled>
|
||||
</member>
|
||||
<member name="app_sms" displayname="SMS/PSTN handler" remove_on_change="apps/app_sms.o apps/app_sms.so">
|
||||
</member>
|
||||
<member name="app_softhangup" displayname="Hangs up the requested channel" remove_on_change="apps/app_softhangup.o apps/app_softhangup.so">
|
||||
</member>
|
||||
<member name="app_speech_utils" displayname="Dialplan Speech Applications" remove_on_change="apps/app_speech_utils.o apps/app_speech_utils.so">
|
||||
</member>
|
||||
<member name="app_stack" displayname="Dialplan subroutines (Gosub, Return, etc)" remove_on_change="apps/app_stack.o apps/app_stack.so">
|
||||
</member>
|
||||
<member name="app_system" displayname="Generic System() application" remove_on_change="apps/app_system.o apps/app_system.so">
|
||||
</member>
|
||||
<member name="app_talkdetect" displayname="Playback with Talk Detection" remove_on_change="apps/app_talkdetect.o apps/app_talkdetect.so">
|
||||
</member>
|
||||
<member name="app_test" displayname="Interface Test Application" remove_on_change="apps/app_test.o apps/app_test.so">
|
||||
</member>
|
||||
<member name="app_transfer" displayname="Transfers a caller to another extension" remove_on_change="apps/app_transfer.o apps/app_transfer.so">
|
||||
</member>
|
||||
<member name="app_url" displayname="Send URL Applications" remove_on_change="apps/app_url.o apps/app_url.so">
|
||||
</member>
|
||||
<member name="app_userevent" displayname="Custom User Event Application" remove_on_change="apps/app_userevent.o apps/app_userevent.so">
|
||||
</member>
|
||||
<member name="app_verbose" displayname="Send verbose output" remove_on_change="apps/app_verbose.o apps/app_verbose.so">
|
||||
</member>
|
||||
<member name="app_voicemail" displayname="Comedian Mail (Voicemail System)" remove_on_change="apps/app_voicemail.o apps/app_voicemail.so">
|
||||
<depend>res_smdi</depend>
|
||||
</member>
|
||||
<member name="app_waitforring" displayname="Waits until first ring after time" remove_on_change="apps/app_waitforring.o apps/app_waitforring.so">
|
||||
</member>
|
||||
<member name="app_waitforsilence" displayname="Wait For Silence" remove_on_change="apps/app_waitforsilence.o apps/app_waitforsilence.so">
|
||||
</member>
|
||||
<member name="app_waituntil" displayname="Wait until specified time" remove_on_change="apps/app_waituntil.o apps/app_waituntil.so">
|
||||
</member>
|
||||
<member name="app_while" displayname="While Loops and Conditional Execution" remove_on_change="apps/app_while.o apps/app_while.so">
|
||||
</member>
|
||||
<member name="app_zapateller" displayname="Block Telemarketers with Special Information Tone" remove_on_change="apps/app_zapateller.o apps/app_zapateller.so">
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_CDR" displayname="Call Detail Recording" remove_on_change="cdr/modules.link">
|
||||
<member name="cdr_adaptive_odbc" displayname="Adaptive ODBC CDR backend" remove_on_change="cdr/cdr_adaptive_odbc.o cdr/cdr_adaptive_odbc.so">
|
||||
<depend name="unixODBC">unixodbc</depend>
|
||||
</member>
|
||||
<member name="cdr_csv" displayname="Comma Separated Values CDR Backend" remove_on_change="cdr/cdr_csv.o cdr/cdr_csv.so">
|
||||
</member>
|
||||
<member name="cdr_custom" displayname="Customizable Comma Separated Values CDR Backend" remove_on_change="cdr/cdr_custom.o cdr/cdr_custom.so">
|
||||
</member>
|
||||
<member name="cdr_manager" displayname="Asterisk Manager Interface CDR Backend" remove_on_change="cdr/cdr_manager.o cdr/cdr_manager.so">
|
||||
</member>
|
||||
<member name="cdr_odbc" displayname="ODBC CDR Backend" remove_on_change="cdr/cdr_odbc.o cdr/cdr_odbc.so">
|
||||
<depend name="unixodbc">unixODBC</depend>
|
||||
<depend name="ltdl">libtool-ltdl</depend>
|
||||
</member>
|
||||
<member name="cdr_pgsql" displayname="PostgreSQL CDR Backend" remove_on_change="cdr/cdr_pgsql.o cdr/cdr_pgsql.so">
|
||||
<depend name="pgsql">PostgreSQL</depend>
|
||||
</member>
|
||||
<member name="cdr_radius" displayname="RADIUS CDR Backend" remove_on_change="cdr/cdr_radius.o cdr/cdr_radius.so">
|
||||
<depend>radius</depend>
|
||||
</member>
|
||||
<member name="cdr_sqlite3_custom" displayname="SQLite3 Custom CDR Module" remove_on_change="cdr/cdr_sqlite3_custom.o cdr/cdr_sqlite3_custom.so">
|
||||
<depend>sqlite3</depend>
|
||||
</member>
|
||||
<member name="cdr_sqlite" displayname="SQLite CDR Backend" remove_on_change="cdr/cdr_sqlite.o cdr/cdr_sqlite.so">
|
||||
<depend>sqlite</depend>
|
||||
</member>
|
||||
<member name="cdr_tds" displayname="FreeTDS CDR Backend" remove_on_change="cdr/cdr_tds.o cdr/cdr_tds.so">
|
||||
<depend name="freetds">FreeTDS</depend>
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_CHANNELS" displayname="Channel Drivers" remove_on_change="channels/modules.link">
|
||||
<member name="chan_agent" displayname="Agent Proxy Channel" remove_on_change="channels/chan_agent.o channels/chan_agent.so">
|
||||
<depend>chan_local</depend>
|
||||
</member>
|
||||
<member name="chan_alsa" displayname="ALSA Console Channel Driver" remove_on_change="channels/chan_alsa.o channels/chan_alsa.so">
|
||||
<depend>asound</depend>
|
||||
</member>
|
||||
<member name="chan_console" displayname="Console Channel Driver" remove_on_change="channels/chan_console.o channels/chan_console.so">
|
||||
<depend>portaudio</depend>
|
||||
</member>
|
||||
<member name="chan_dahdi" displayname="DAHDI Telephony" remove_on_change="channels/chan_dahdi.o channels/chan_dahdi.so">
|
||||
<depend>res_smdi</depend>
|
||||
<depend name="dahdi">DAHDI</depend>
|
||||
<depend>tonezone</depend>
|
||||
<use>pri</use>
|
||||
<use>ss7</use>
|
||||
</member>
|
||||
<member name="chan_features" displayname="Feature Proxy Channel" remove_on_change="channels/chan_features.o channels/chan_features.so">
|
||||
<defaultenabled>no</defaultenabled>
|
||||
</member>
|
||||
<member name="chan_gtalk" displayname="Gtalk Channel Driver" remove_on_change="channels/chan_gtalk.o channels/chan_gtalk.so">
|
||||
<depend>iksemel</depend>
|
||||
<depend>res_jabber</depend>
|
||||
<use>openssl</use>
|
||||
</member>
|
||||
<member name="chan_h323" displayname="The NuFone Network's OpenH323 Channel Driver" remove_on_change="channels/chan_h323.o channels/chan_h323.so">
|
||||
<depend>openh323</depend>
|
||||
<defaultenabled>yes</defaultenabled>
|
||||
</member>
|
||||
<member name="chan_iax2" displayname="Inter Asterisk eXchange (Ver 2)" remove_on_change="channels/chan_iax2.o channels/chan_iax2.so">
|
||||
<use>crypto</use>
|
||||
</member>
|
||||
<member name="chan_jingle" displayname="Jingle Channel Driver" remove_on_change="channels/chan_jingle.o channels/chan_jingle.so">
|
||||
<depend>iksemel</depend>
|
||||
<depend>res_jabber</depend>
|
||||
<use>openssl</use>
|
||||
</member>
|
||||
<member name="chan_local" displayname="Local Proxy Channel (Note: used internally by other modules)" remove_on_change="channels/chan_local.o channels/chan_local.so">
|
||||
</member>
|
||||
<member name="chan_mgcp" displayname="Media Gateway Control Protocol (MGCP)" remove_on_change="channels/chan_mgcp.o channels/chan_mgcp.so">
|
||||
</member>
|
||||
<member name="chan_misdn" displayname="Channel driver for mISDN Support (BRI/PRI)" remove_on_change="channels/chan_misdn.o channels/chan_misdn.so">
|
||||
<depend>isdnnet</depend>
|
||||
<depend>misdn</depend>
|
||||
<depend>suppserv</depend>
|
||||
</member>
|
||||
<member name="chan_nbs" displayname="Network Broadcast Sound Support" remove_on_change="channels/chan_nbs.o channels/chan_nbs.so">
|
||||
<depend>nbs</depend>
|
||||
</member>
|
||||
<member name="chan_oss" displayname="OSS Console Channel Driver" remove_on_change="channels/chan_oss.o channels/chan_oss.so">
|
||||
<depend>ossaudio</depend>
|
||||
</member>
|
||||
<member name="chan_phone" displayname="Linux Telephony API Support" remove_on_change="channels/chan_phone.o channels/chan_phone.so">
|
||||
<depend>ixjuser</depend>
|
||||
</member>
|
||||
<member name="chan_sip" displayname="Session Initiation Protocol (SIP)" remove_on_change="channels/chan_sip.o channels/chan_sip.so">
|
||||
<depend>chan_local</depend>
|
||||
</member>
|
||||
<member name="chan_skinny" displayname="Skinny Client Control Protocol (Skinny)" remove_on_change="channels/chan_skinny.o channels/chan_skinny.so">
|
||||
</member>
|
||||
<member name="chan_unistim" displayname="UNISTIM Protocol (USTM)" remove_on_change="channels/chan_unistim.o channels/chan_unistim.so">
|
||||
</member>
|
||||
<member name="chan_usbradio" displayname="usb Console Channel Driver" remove_on_change="channels/chan_usbradio.o channels/chan_usbradio.so">
|
||||
<depend>ossaudio</depend>
|
||||
<depend>usb</depend>
|
||||
<defaultenabled>no</defaultenabled>
|
||||
</member>
|
||||
<member name="chan_vpb" displayname="Voicetronix API driver" remove_on_change="channels/chan_vpb.oo channels/chan_vpb.so">
|
||||
<depend>vpbapi</depend>
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_CODECS" displayname="Codec Translators" remove_on_change="codecs/modules.link">
|
||||
<member name="codec_adpcm" displayname="Adaptive Differential PCM Coder/Decoder" remove_on_change="codecs/codec_adpcm.o codecs/codec_adpcm.so">
|
||||
</member>
|
||||
<member name="codec_alaw" displayname="A-law Coder/Decoder" remove_on_change="codecs/codec_alaw.o codecs/codec_alaw.so">
|
||||
</member>
|
||||
<member name="codec_a_mu" displayname="A-law and Mulaw direct Coder/Decoder" remove_on_change="codecs/codec_a_mu.o codecs/codec_a_mu.so">
|
||||
</member>
|
||||
<member name="codec_dahdi" displayname="Generic DAHDI Transcoder Codec Translator" remove_on_change="codecs/codec_dahdi.o codecs/codec_dahdi.so">
|
||||
<depend name="dahdi">DAHDI</depend>
|
||||
</member>
|
||||
<member name="codec_g722" displayname="ITU G.722-64kbps G722 Transcoder" remove_on_change="codecs/codec_g722.o codecs/codec_g722.so">
|
||||
</member>
|
||||
<member name="codec_g726" displayname="ITU G.726-32kbps G726 Transcoder" remove_on_change="codecs/codec_g726.o codecs/codec_g726.so">
|
||||
</member>
|
||||
<member name="codec_gsm" displayname="GSM Coder/Decoder" remove_on_change="codecs/codec_gsm.o codecs/codec_gsm.so">
|
||||
<depend>gsm</depend>
|
||||
</member>
|
||||
<member name="codec_ilbc" displayname="iLBC Coder/Decoder" remove_on_change="codecs/codec_ilbc.o codecs/codec_ilbc.so">
|
||||
<defaultenabled>no</defaultenabled>
|
||||
</member>
|
||||
<member name="codec_lpc10" displayname="LPC10 2.4kbps Coder/Decoder" remove_on_change="codecs/codec_lpc10.o codecs/codec_lpc10.so">
|
||||
</member>
|
||||
<member name="codec_resample" displayname="SLIN Resampling Codec" remove_on_change="codecs/codec_resample.o codecs/codec_resample.so">
|
||||
<depend>resample</depend>
|
||||
</member>
|
||||
<member name="codec_speex" displayname="Speex Coder/Decoder" remove_on_change="codecs/codec_speex.o codecs/codec_speex.so">
|
||||
<depend>speex</depend>
|
||||
<depend>speex_preprocess</depend>
|
||||
<use>speexdsp</use>
|
||||
</member>
|
||||
<member name="codec_ulaw" displayname="mu-Law Coder/Decoder" remove_on_change="codecs/codec_ulaw.o codecs/codec_ulaw.so">
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_FORMATS" displayname="Format Interpreters" remove_on_change="formats/modules.link">
|
||||
<member name="format_g723" displayname="G.723.1 Simple Timestamp File Format" remove_on_change="formats/format_g723.o formats/format_g723.so">
|
||||
</member>
|
||||
<member name="format_g726" displayname="Raw G.726 (16/24/32/40kbps) data" remove_on_change="formats/format_g726.o formats/format_g726.so">
|
||||
</member>
|
||||
<member name="format_g729" displayname="Raw G729 data" remove_on_change="formats/format_g729.o formats/format_g729.so">
|
||||
</member>
|
||||
<member name="format_gsm" displayname="Raw GSM data" remove_on_change="formats/format_gsm.o formats/format_gsm.so">
|
||||
</member>
|
||||
<member name="format_h263" displayname="Raw H.263 data" remove_on_change="formats/format_h263.o formats/format_h263.so">
|
||||
</member>
|
||||
<member name="format_h264" displayname="Raw H.264 data" remove_on_change="formats/format_h264.o formats/format_h264.so">
|
||||
</member>
|
||||
<member name="format_ilbc" displayname="Raw iLBC data" remove_on_change="formats/format_ilbc.o formats/format_ilbc.so">
|
||||
</member>
|
||||
<member name="format_jpeg" displayname="JPEG (Joint Picture Experts Group) Image Format" remove_on_change="formats/format_jpeg.o formats/format_jpeg.so">
|
||||
</member>
|
||||
<member name="format_ogg_vorbis" displayname="OGG/Vorbis audio" remove_on_change="formats/format_ogg_vorbis.o formats/format_ogg_vorbis.so">
|
||||
<depend>vorbis</depend>
|
||||
<depend>ogg</depend>
|
||||
</member>
|
||||
<member name="format_pcm" displayname="Raw/Sun uLaw/ALaw 8KHz (PCM,PCMA,AU), G.722 16Khz" remove_on_change="formats/format_pcm.o formats/format_pcm.so">
|
||||
</member>
|
||||
<member name="format_sln16" displayname="Raw Signed Linear 16KHz Audio support (SLN16)" remove_on_change="formats/format_sln16.o formats/format_sln16.so">
|
||||
</member>
|
||||
<member name="format_sln" displayname="Raw Signed Linear Audio support (SLN)" remove_on_change="formats/format_sln.o formats/format_sln.so">
|
||||
</member>
|
||||
<member name="format_vox" displayname="Dialogic VOX (ADPCM) File Format" remove_on_change="formats/format_vox.o formats/format_vox.so">
|
||||
</member>
|
||||
<member name="format_wav" displayname="Microsoft WAV format (8000Hz Signed Linear)" remove_on_change="formats/format_wav.o formats/format_wav.so">
|
||||
</member>
|
||||
<member name="format_wav_gsm" displayname="Microsoft WAV format (Proprietary GSM)" remove_on_change="formats/format_wav_gsm.o formats/format_wav_gsm.so">
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_FUNCS" displayname="Dialplan Functions" remove_on_change="funcs/modules.link">
|
||||
<member name="func_base64" displayname="base64 encode/decode dialplan functions" remove_on_change="funcs/func_base64.o funcs/func_base64.so">
|
||||
</member>
|
||||
<member name="func_blacklist" displayname="Look up Caller*ID name/number from blacklist database" remove_on_change="funcs/func_blacklist.o funcs/func_blacklist.so">
|
||||
</member>
|
||||
<member name="func_callerid" displayname="Caller ID related dialplan functions" remove_on_change="funcs/func_callerid.o funcs/func_callerid.so">
|
||||
</member>
|
||||
<member name="func_cdr" displayname="Call Detail Record (CDR) dialplan function" remove_on_change="funcs/func_cdr.o funcs/func_cdr.so">
|
||||
</member>
|
||||
<member name="func_channel" displayname="Channel information dialplan functions" remove_on_change="funcs/func_channel.o funcs/func_channel.so">
|
||||
</member>
|
||||
<member name="func_config" displayname="Asterisk configuration file variable access" remove_on_change="funcs/func_config.o funcs/func_config.so">
|
||||
</member>
|
||||
<member name="func_curl" displayname="Load external URL" remove_on_change="funcs/func_curl.o funcs/func_curl.so">
|
||||
<depend>curl</depend>
|
||||
</member>
|
||||
<member name="func_cut" displayname="Cut out information from a string" remove_on_change="funcs/func_cut.o funcs/func_cut.so">
|
||||
</member>
|
||||
<member name="func_db" displayname="Database (astdb) related dialplan functions" remove_on_change="funcs/func_db.o funcs/func_db.so">
|
||||
</member>
|
||||
<member name="func_devstate" displayname="Gets or sets a device state in the dialplan" remove_on_change="funcs/func_devstate.o funcs/func_devstate.so">
|
||||
</member>
|
||||
<member name="func_dialgroup" displayname="Dialgroup dialplan function" remove_on_change="funcs/func_dialgroup.o funcs/func_dialgroup.so">
|
||||
</member>
|
||||
<member name="func_dialplan" displayname="Dialplan Context/Extension/Priority Checking Functions" remove_on_change="funcs/func_dialplan.o funcs/func_dialplan.so">
|
||||
</member>
|
||||
<member name="func_enum" displayname="ENUM related dialplan functions" remove_on_change="funcs/func_enum.o funcs/func_enum.so">
|
||||
</member>
|
||||
<member name="func_env" displayname="Environment/filesystem dialplan functions" remove_on_change="funcs/func_env.o funcs/func_env.so">
|
||||
</member>
|
||||
<member name="func_extstate" displayname="Gets an extension's state in the dialplan" remove_on_change="funcs/func_extstate.o funcs/func_extstate.so">
|
||||
</member>
|
||||
<member name="func_global" displayname="Variable dialplan functions" remove_on_change="funcs/func_global.o funcs/func_global.so">
|
||||
</member>
|
||||
<member name="func_groupcount" displayname="Channel group dialplan functions" remove_on_change="funcs/func_groupcount.o funcs/func_groupcount.so">
|
||||
</member>
|
||||
<member name="func_iconv" displayname="Charset conversions" remove_on_change="funcs/func_iconv.o funcs/func_iconv.so">
|
||||
<depend>iconv</depend>
|
||||
</member>
|
||||
<member name="func_lock" displayname="Dialplan mutexes" remove_on_change="funcs/func_lock.o funcs/func_lock.so">
|
||||
</member>
|
||||
<member name="func_logic" displayname="Logical dialplan functions" remove_on_change="funcs/func_logic.o funcs/func_logic.so">
|
||||
</member>
|
||||
<member name="func_math" displayname="Mathematical dialplan function" remove_on_change="funcs/func_math.o funcs/func_math.so">
|
||||
</member>
|
||||
<member name="func_md5" displayname="MD5 digest dialplan functions" remove_on_change="funcs/func_md5.o funcs/func_md5.so">
|
||||
</member>
|
||||
<member name="func_module" displayname="Checks if Asterisk module is loaded in memory" remove_on_change="funcs/func_module.o funcs/func_module.so">
|
||||
</member>
|
||||
<member name="func_odbc" displayname="ODBC lookups" remove_on_change="funcs/func_odbc.o funcs/func_odbc.so">
|
||||
<depend>unixodbc</depend>
|
||||
<depend>ltdl</depend>
|
||||
<depend>res_odbc</depend>
|
||||
</member>
|
||||
<member name="func_rand" displayname="Random number dialplan function" remove_on_change="funcs/func_rand.o funcs/func_rand.so">
|
||||
</member>
|
||||
<member name="func_realtime" displayname="Read/Write/Store/Destroy values from a RealTime repository" remove_on_change="funcs/func_realtime.o funcs/func_realtime.so">
|
||||
</member>
|
||||
<member name="func_sha1" displayname="SHA-1 computation dialplan function" remove_on_change="funcs/func_sha1.o funcs/func_sha1.so">
|
||||
</member>
|
||||
<member name="func_shell" displayname="Returns the output of a shell command" remove_on_change="funcs/func_shell.o funcs/func_shell.so">
|
||||
</member>
|
||||
<member name="func_speex" displayname="Noise reduction and Automatic Gain Control (AGC)" remove_on_change="funcs/func_speex.o funcs/func_speex.so">
|
||||
<depend>speex</depend>
|
||||
<depend>speex_preprocess</depend>
|
||||
<use>speexdsp</use>
|
||||
</member>
|
||||
<member name="func_strings" displayname="String handling dialplan functions" remove_on_change="funcs/func_strings.o funcs/func_strings.so">
|
||||
</member>
|
||||
<member name="func_sysinfo" displayname="System information related functions" remove_on_change="funcs/func_sysinfo.o funcs/func_sysinfo.so">
|
||||
</member>
|
||||
<member name="func_timeout" displayname="Channel timeout dialplan functions" remove_on_change="funcs/func_timeout.o funcs/func_timeout.so">
|
||||
</member>
|
||||
<member name="func_uri" displayname="URI encode/decode dialplan functions" remove_on_change="funcs/func_uri.o funcs/func_uri.so">
|
||||
</member>
|
||||
<member name="func_version" displayname="Get Asterisk Version/Build Info" remove_on_change="funcs/func_version.o funcs/func_version.so">
|
||||
</member>
|
||||
<member name="func_vmcount" displayname="Indicator for whether a voice mailbox has messages in a given folder." remove_on_change="funcs/func_vmcount.o funcs/func_vmcount.so">
|
||||
</member>
|
||||
<member name="func_volume" displayname="Technology independent volume control" remove_on_change="funcs/func_volume.o funcs/func_volume.so">
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_PBX" displayname="PBX Modules" remove_on_change="pbx/modules.link">
|
||||
<member name="pbx_ael" displayname="Asterisk Extension Language Compiler" remove_on_change="pbx/pbx_ael.o pbx/pbx_ael.so">
|
||||
<depend>res_ael_share</depend>
|
||||
</member>
|
||||
<member name="pbx_config" displayname="Text Extension Configuration" remove_on_change="pbx/pbx_config.o pbx/pbx_config.so">
|
||||
</member>
|
||||
<member name="pbx_dundi" displayname="Distributed Universal Number Discovery (DUNDi)" remove_on_change="pbx/pbx_dundi.o pbx/pbx_dundi.so">
|
||||
<depend>zlib</depend>
|
||||
<use>crypto</use>
|
||||
</member>
|
||||
<member name="pbx_gtkconsole" displayname="GTK Console" remove_on_change="pbx/pbx_gtkconsole.o pbx/pbx_gtkconsole.so">
|
||||
<depend>gtk</depend>
|
||||
<defaultenabled>no</defaultenabled>
|
||||
</member>
|
||||
<member name="pbx_loopback" displayname="Loopback Switch" remove_on_change="pbx/pbx_loopback.o pbx/pbx_loopback.so">
|
||||
</member>
|
||||
<member name="pbx_lua" displayname="Lua PBX Switch" remove_on_change="pbx/pbx_lua.o pbx/pbx_lua.so">
|
||||
<depend>lua</depend>
|
||||
</member>
|
||||
<member name="pbx_realtime" displayname="Realtime Switch" remove_on_change="pbx/pbx_realtime.o pbx/pbx_realtime.so">
|
||||
</member>
|
||||
<member name="pbx_spool" displayname="Outgoing Spool Support" remove_on_change="pbx/pbx_spool.o pbx/pbx_spool.so">
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_RES" displayname="Resource Modules" remove_on_change="res/modules.link">
|
||||
<member name="res_adsi" displayname="ADSI Resource" remove_on_change="res/res_adsi.o res/res_adsi.so">
|
||||
</member>
|
||||
<member name="res_ael_share" displayname="share-able code for AEL" remove_on_change="res/res_ael_share.o res/res_ael_share.so">
|
||||
</member>
|
||||
<member name="res_agi" displayname="Asterisk Gateway Interface (AGI)" remove_on_change="res/res_agi.o res/res_agi.so">
|
||||
</member>
|
||||
<member name="res_ais" displayname="SAForum AIS" remove_on_change="res/res_ais.o res/res_ais.so">
|
||||
<depend>ais</depend>
|
||||
</member>
|
||||
<member name="res_clioriginate" displayname="Call origination from the CLI" remove_on_change="res/res_clioriginate.o res/res_clioriginate.so">
|
||||
</member>
|
||||
<member name="res_config_curl" displayname="Realtime Curl configuration" remove_on_change="res/res_config_curl.o res/res_config_curl.so">
|
||||
<depend>curl</depend>
|
||||
</member>
|
||||
<member name="res_config_ldap" displayname="LDAP realtime interface" remove_on_change="res/res_config_ldap.o res/res_config_ldap.so">
|
||||
<depend>ldap</depend>
|
||||
</member>
|
||||
<member name="res_config_odbc" displayname="Realtime ODBC configuration" remove_on_change="res/res_config_odbc.o res/res_config_odbc.so">
|
||||
<depend>unixodbc</depend>
|
||||
<depend>ltdl</depend>
|
||||
<depend>res_odbc</depend>
|
||||
</member>
|
||||
<member name="res_config_pgsql" displayname="PostgreSQL RealTime Configuration Driver" remove_on_change="res/res_config_pgsql.o res/res_config_pgsql.so">
|
||||
<depend>pgsql</depend>
|
||||
</member>
|
||||
<member name="res_config_sqlite" displayname="Realtime SQLite configuration" remove_on_change="res/res_config_sqlite.o res/res_config_sqlite.so">
|
||||
<depend>sqlite</depend>
|
||||
</member>
|
||||
<member name="res_convert" displayname="File format conversion CLI command" remove_on_change="res/res_convert.o res/res_convert.so">
|
||||
</member>
|
||||
<member name="res_crypto" displayname="Cryptographic Digital Signatures" remove_on_change="res/res_crypto.o res/res_crypto.so">
|
||||
<depend>ssl</depend>
|
||||
</member>
|
||||
<member name="res_curl" displayname="cURL Resource Module" remove_on_change="res/res_curl.o res/res_curl.so">
|
||||
<depend>curl</depend>
|
||||
</member>
|
||||
<member name="res_http_post" displayname="HTTP POST support" remove_on_change="res/res_http_post.o res/res_http_post.so">
|
||||
<depend>gmime</depend>
|
||||
</member>
|
||||
<member name="res_indications" displayname="Region-specific tones" remove_on_change="res/res_indications.o res/res_indications.so">
|
||||
</member>
|
||||
<member name="res_jabber" displayname="AJI - Asterisk Jabber Interface" remove_on_change="res/res_jabber.o res/res_jabber.so">
|
||||
<depend>iksemel</depend>
|
||||
<use>openssl</use>
|
||||
</member>
|
||||
<member name="res_limit" displayname="Resource limits" remove_on_change="res/res_limit.o res/res_limit.so">
|
||||
</member>
|
||||
<member name="res_monitor" displayname="Call Monitoring Resource" remove_on_change="res/res_monitor.o res/res_monitor.so">
|
||||
</member>
|
||||
<member name="res_musiconhold" displayname="Music On Hold Resource" remove_on_change="res/res_musiconhold.o res/res_musiconhold.so">
|
||||
<conflict>win32</conflict>
|
||||
<use>dahdi</use>
|
||||
</member>
|
||||
<member name="res_odbc" displayname="ODBC resource" remove_on_change="res/res_odbc.o res/res_odbc.so">
|
||||
<depend>unixodbc</depend>
|
||||
<depend>ltdl</depend>
|
||||
</member>
|
||||
<member name="res_phoneprov" displayname="HTTP Phone Provisioning" remove_on_change="res/res_phoneprov.o res/res_phoneprov.so">
|
||||
</member>
|
||||
<member name="res_realtime" displayname="Realtime Data Lookup/Rewrite" remove_on_change="res/res_realtime.o res/res_realtime.so">
|
||||
</member>
|
||||
<member name="res_smdi" displayname="Simplified Message Desk Interface (SMDI) Resource" remove_on_change="res/res_smdi.o res/res_smdi.so">
|
||||
</member>
|
||||
<member name="res_snmp" displayname="SNMP [Sub]Agent for Asterisk" remove_on_change="res/res_snmp.o res/res_snmp.so">
|
||||
<depend>netsnmp</depend>
|
||||
</member>
|
||||
<member name="res_speech" displayname="Generic Speech Recognition API" remove_on_change="res/res_speech.o res/res_speech.so">
|
||||
</member>
|
||||
<member name="res_timing_dahdi" displayname="DAHDI Timing Interface" remove_on_change="res/res_timing_dahdi.o res/res_timing_dahdi.so">
|
||||
<depend name="dahdi">DAHDI</depend>
|
||||
</member>
|
||||
<member name="res_timing_pthread" displayname="pthread Timing Interface" remove_on_change="res/res_timing_pthread.o res/res_timing_pthread.so">
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_TEST" displayname="Test Modules" remove_on_change="tests/modules.link">
|
||||
<member name="test_dlinklists" displayname="Test Doubly-Linked Lists" remove_on_change="tests/test_dlinklists.o tests/test_dlinklists.so">
|
||||
<defaultenabled>no</defaultenabled>
|
||||
</member>
|
||||
<member name="test_skel" displayname="Skeleton (sample) Test" remove_on_change="tests/test_skel.o tests/test_skel.so">
|
||||
<defaultenabled>no</defaultenabled>
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_CFLAGS" displayname="Compiler Flags" positive_output="yes" remove_on_change=".lastclean">
|
||||
<member name="DONT_OPTIMIZE" displayname="Disable Optimizations by the Compiler">
|
||||
</member>
|
||||
<member name="DEBUG_THREADS" displayname="Enable Thread Debugging">
|
||||
</member>
|
||||
<member name="STATIC_BUILD" displayname="Build static binaries">
|
||||
</member>
|
||||
<member name="LOADABLE_MODULES" displayname="Runtime module loading">
|
||||
<defaultenabled>yes</defaultenabled>
|
||||
</member>
|
||||
<member name="LOW_MEMORY" displayname="Optimize for Low Memory Usage">
|
||||
</member>
|
||||
<member name="USE_HOARD_ALLOCATOR" displayname="Use the Hoard Memory Allocator instead of the default system one">
|
||||
<defaultenabled>no</defaultenabled>
|
||||
<depend>hoard</depend>
|
||||
</member>
|
||||
<member name="LOTS_OF_SPANS" displayname="More than 32 DAHDI spans">
|
||||
</member>
|
||||
<member name="RADIO_RELAX" displayname="Relax DTMF for Radio Applications">
|
||||
</member>
|
||||
<member name="G711_NEW_ALGORITHM" displayname="Use the NEW ulaw/alaw codecs (slower, but cleaner)">
|
||||
<defaultenabled>no</defaultenabled>
|
||||
</member>
|
||||
<member name="G711_REDUCED_BRANCHING" displayname="New ulaw/alaw codec, reduced branching (might help it run faster in some architectures)">
|
||||
<defaultenabled>yes</defaultenabled>
|
||||
<depend>G711_NEW_ALGORITHM</depend>
|
||||
</member>
|
||||
<member name="TEST_CODING_TABLES" displayname="New ulaw/alaw codec, turn on table tests on init">
|
||||
<depend>G711_NEW_ALGORITHM</depend>
|
||||
</member>
|
||||
<member name="TEST_TANDEM_TRANSCODING" displayname="New ulaw/alaw codec, turn on transcoding tests on init">
|
||||
<depend>G711_NEW_ALGORITHM</depend>
|
||||
</member>
|
||||
<member name="DEBUG_CHANNEL_LOCKS" displayname="Debug Channel Locking">
|
||||
</member>
|
||||
<member name="MALLOC_DEBUG" displayname="Keep Track of Memory Allocations">
|
||||
</member>
|
||||
<member name="BUSYDETECT_TONEONLY" displayname="Enable additional comparision of only the tone duration not the silence part">
|
||||
<conflict>BUSYDETECT_COMPARE_TONE_AND_SILENCE</conflict>
|
||||
<defaultenabled>no</defaultenabled>
|
||||
</member>
|
||||
<member name="BUSYDETECT_COMPARE_TONE_AND_SILENCE" displayname="Assume that tone and silence have the same duration">
|
||||
<conflict>BUSYDETECT_TONEONLY</conflict>
|
||||
<defaultenabled>no</defaultenabled>
|
||||
</member>
|
||||
<member name="BUSYDETECT_DEBUG" displayname="Enable additional busy detection debugging">
|
||||
<defaultenabled>no</defaultenabled>
|
||||
</member>
|
||||
<member name="IAX_OLD_FIND" displayname="Use the old, slow method of searching for IAX callnos">
|
||||
</member>
|
||||
<member name="INTEGER_CALLERID" displayname="Use the (less accurate) integer-based method for decoding FSK tones (for embedded systems)">
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_OPTS_app_voicemail" displayname="Voicemail Build Options" positive_output="yes" remove_on_change="apps/app_voicemail.o apps/app_directory.o">
|
||||
<member name="ODBC_STORAGE" displayname="Storage of Voicemail using ODBC">
|
||||
<depend>unixodbc</depend>
|
||||
<depend>ltdl</depend>
|
||||
<conflict>IMAP_STORAGE</conflict>
|
||||
<defaultenabled>no</defaultenabled>
|
||||
</member>
|
||||
<member name="IMAP_STORAGE" displayname="Storage of Voicemail using IMAP4">
|
||||
<depend>imap_tk</depend>
|
||||
<conflict>ODBC_STORAGE</conflict>
|
||||
<use>ssl</use>
|
||||
<defaultenabled>no</defaultenabled>
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_CFLAGS" displayname="Compiler Flags" positive_output="yes" remove_on_change=".lastclean">
|
||||
<member name="RADIO_RTX" displayname="Build RTX/DTX Radio Programming">
|
||||
<defaultenabled>no</defaultenabled>
|
||||
<depend>chan_usbradio</depend>
|
||||
</member>
|
||||
<member name="RADIO_XPMRX" displayname="Build Experimental Radio Protocols">
|
||||
<defaultenabled>no</defaultenabled>
|
||||
<depend>chan_usbradio</depend>
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_CFLAGS" displayname="Compiler Flags - Development">
|
||||
<member name="MTX_PROFILE" displayname="Enable Code Profiling Using TSC Counters">
|
||||
</member>
|
||||
<member name="DEBUG_SCHEDULER" displayname="Enable Scheduler Debugging Output">
|
||||
</member>
|
||||
<member name="DEBUG_THREADLOCALS" displayname="Enable Thread-Local-Storage Debugging">
|
||||
</member>
|
||||
<member name="DETECT_DEADLOCKS" displayname="Detect Deadlocks">
|
||||
<depend>DEBUG_THREADS</depend>
|
||||
</member>
|
||||
<member name="DUMP_SCHEDULER" displayname="Dump Scheduler Contents for Debugging">
|
||||
</member>
|
||||
<member name="TRACE_FRAMES" displayname="Trace Frame Allocations">
|
||||
</member>
|
||||
<member name="DO_CRASH" displayname="Crash on fatal errors">
|
||||
</member>
|
||||
<member name="THREAD_CRASH" displayname="Crash on mutex errors">
|
||||
</member>
|
||||
<member name="CHANNEL_TRACE" displayname="Enable CHANNEL(trace) function">
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_EMBED" displayname="Module Embedding" positive_output="yes" remove_on_change="main/asterisk">
|
||||
<member name="APPS" displayname="Applications" remove_on_change="apps/*.o">
|
||||
<depend>gnu_ld</depend>
|
||||
</member>
|
||||
<member name="CDR" displayname="Call Detail Recording" remove_on_change="cdr/*.o">
|
||||
<depend>gnu_ld</depend>
|
||||
</member>
|
||||
<member name="CHANNELS" displayname="Channels" remove_on_change="channels/*.o channels/misdn/*.o">
|
||||
<depend>gnu_ld</depend>
|
||||
</member>
|
||||
<member name="CODECS" displayname="Coders/Decoders" remove_on_change="codecs/*.o codecs/gsm/src/*.o codecs/ilbc/*.o codecs/lpc10/*.o codecs/gsm/lib/libgsm.a codecs/lpc10/liblpc10.a codecs/ilbc/libilbc.a codecs/g722/libg722.a">
|
||||
<depend>gnu_ld</depend>
|
||||
</member>
|
||||
<member name="FORMATS" displayname="File Formats" remove_on_change="formats/*.o">
|
||||
<depend>gnu_ld</depend>
|
||||
</member>
|
||||
<member name="FUNCS" displayname="Dialplan Functions" remove_on_change="funcs/*.o">
|
||||
<depend>gnu_ld</depend>
|
||||
</member>
|
||||
<member name="PBX" displayname="PBX Functionality" remove_on_change="pbx/*.o pbx/ael/*.o">
|
||||
<depend>gnu_ld</depend>
|
||||
</member>
|
||||
<member name="RES" displayname="Resource Modules" remove_on_change="res/*.o res/snmp/*.o">
|
||||
<depend>gnu_ld</depend>
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_CORE_SOUNDS" displayname="Core Sound Packages" positive_output="yes">
|
||||
<member name="CORE-SOUNDS-EN-WAV" displayname="English, WAV format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-EN-ULAW" displayname="English, mu-Law format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-EN-ALAW" displayname="English, a-Law format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-EN-GSM" displayname="English, GSM format" >
|
||||
<defaultenabled>yes</defaultenabled>
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-EN-G729" displayname="English, G.729 format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-EN-G722" displayname="English, G.722 format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-EN-SLN16" displayname="English, Signed-linear 16kHz format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-ES-WAV" displayname="Spanish, WAV format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-ES-ULAW" displayname="Spanish, mu-Law format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-ES-ALAW" displayname="Spanish, a-Law format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-ES-GSM" displayname="Spanish, GSM format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-ES-G729" displayname="Spanish, G.729 format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-ES-G722" displayname="Spanish, G.722 format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-ES-SLN16" displayname="Spanish, Signed-linear 16kHz format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-FR-WAV" displayname="French, WAV format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-FR-ULAW" displayname="French, mu-Law format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-FR-ALAW" displayname="French, a-Law format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-FR-GSM" displayname="French, GSM format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-FR-G729" displayname="French, G.729 format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-FR-G722" displayname="French, G.722 format">
|
||||
</member>
|
||||
<member name="CORE-SOUNDS-FR-SLN16" displayname="French, Signed-linear 16kHz format">
|
||||
</member>
|
||||
</category>
|
||||
<category name="MENUSELECT_EXTRA_SOUNDS" displayname="Extras Sound Packages" positive_output="yes">
|
||||
<member name="EXTRA-SOUNDS-EN-WAV" displayname="English, WAV format">
|
||||
</member>
|
||||
<member name="EXTRA-SOUNDS-EN-ULAW" displayname="English, mu-Law format">
|
||||
</member>
|
||||
<member name="EXTRA-SOUNDS-EN-ALAW" displayname="English, a-Law format">
|
||||
</member>
|
||||
<member name="EXTRA-SOUNDS-EN-GSM" displayname="English, GSM format" >
|
||||
</member>
|
||||
<member name="EXTRA-SOUNDS-EN-G729" displayname="English, G.729 format">
|
||||
</member>
|
||||
<member name="EXTRA-SOUNDS-EN-G722" displayname="English, G.722 format">
|
||||
</member>
|
||||
</category>
|
||||
</menu>
|
||||
1
res/ael/.gitignore
vendored
Normal file
1
res/ael/.gitignore
vendored
Normal file
@@ -0,0 +1 @@
|
||||
ael.output
|
||||
@@ -146,10 +146,10 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
|
||||
<parameter name="escape_digits" required="true" />
|
||||
<parameter name="skipms" />
|
||||
<parameter name="ffchar">
|
||||
<para>Defaults to <literal>*</literal></para>
|
||||
<para>Defaults to <literal>#</literal></para>
|
||||
</parameter>
|
||||
<parameter name="rewchr">
|
||||
<para>Defaults to <literal>#</literal></para>
|
||||
<para>Defaults to <literal>*</literal></para>
|
||||
</parameter>
|
||||
<parameter name="pausechr" />
|
||||
</syntax>
|
||||
|
||||
24
utils/.gitignore
vendored
Normal file
24
utils/.gitignore
vendored
Normal file
@@ -0,0 +1,24 @@
|
||||
aelbison.c
|
||||
aelparse
|
||||
aelparse.c
|
||||
ast_expr2.c
|
||||
ast_expr2f.c
|
||||
astman
|
||||
astcanary
|
||||
astdb2bdb
|
||||
astdb2sqlite3
|
||||
check_expr
|
||||
check_expr2
|
||||
conf2ael
|
||||
db1-ast/libdb1.a
|
||||
hashtab.c
|
||||
lock.c
|
||||
md5.c
|
||||
muted
|
||||
pbx_ael.c
|
||||
pval.c
|
||||
smsq
|
||||
stereorize
|
||||
strcompat.c
|
||||
streamplayer
|
||||
threadstorage.c
|
||||
Reference in New Issue
Block a user