aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--bootstrap/lib/compiler/ebin/cerl_inline.beambin37568 -> 37776 bytes
-rw-r--r--bootstrap/lib/compiler/ebin/v3_core.beambin51440 -> 51552 bytes
-rw-r--r--bootstrap/lib/kernel/ebin/application.beambin4020 -> 4572 bytes
-rw-r--r--erts/.gitignore1
-rw-r--r--erts/configure.in5
-rw-r--r--erts/doc/src/erl_driver.xml61
-rw-r--r--erts/doc/src/erlang.xml2
-rw-r--r--erts/emulator/Makefile.in10
-rw-r--r--erts/emulator/beam/atom.names3
-rw-r--r--erts/emulator/beam/bif.c2
-rw-r--r--erts/emulator/beam/erl_alloc_util.c2
-rw-r--r--erts/emulator/beam/erl_async.c14
-rwxr-xr-xerts/emulator/beam/erl_bif_info.c26
-rw-r--r--erts/emulator/beam/erl_db_util.c5
-rw-r--r--erts/emulator/beam/erl_driver.h4
-rw-r--r--erts/emulator/beam/erl_ptab.c139
-rw-r--r--erts/emulator/beam/erl_ptab.h2
-rwxr-xr-xerts/emulator/beam/global.h9
-rw-r--r--erts/emulator/beam/utils.c2
-rw-r--r--erts/emulator/drivers/common/efile_drv.c131
-rw-r--r--erts/emulator/drivers/win32/win_efile.c1
-rw-r--r--erts/emulator/sys/win32/erl_win_dyn_driver.h4
-rw-r--r--erts/emulator/test/Makefile3
-rw-r--r--erts/emulator/test/efile_SUITE.erl88
-rw-r--r--erts/emulator/test/emulator_smoke.spec3
-rw-r--r--erts/emulator/test/match_spec_SUITE.erl12
-rw-r--r--erts/emulator/test/receive_SUITE.erl23
-rw-r--r--erts/emulator/test/system_profile_SUITE.erl3
-rwxr-xr-xerts/emulator/utils/make_compiler_flags87
-rw-r--r--erts/etc/Makefile3
-rw-r--r--erts/etc/unix/Makefile46
-rw-r--r--erts/etc/unix/etp-commands.in (renamed from erts/etc/unix/etp-commands)31
-rw-r--r--erts/etc/unix/etp-thr.py55
-rw-r--r--erts/etc/unix/run_erl.c8
-rw-r--r--erts/etc/unix/to_erl.c4
-rw-r--r--erts/include/internal/ethread.h4
-rw-r--r--erts/include/internal/gcc/ethread.h5
-rw-r--r--erts/preloaded/.gitignore2
-rw-r--r--erts/preloaded/Makefile1
-rw-r--r--erts/preloaded/src/Makefile15
-rw-r--r--erts/preloaded/src/erts.app.src41
-rw-r--r--erts/test/Makefile2
-rw-r--r--erts/test/erlc_SUITE.erl83
-rw-r--r--erts/test/erlc_SUITE_data/src/erl_test_missing_header.erl22
-rw-r--r--erts/test/system_smoke.spec3
-rw-r--r--lib/common_test/src/ct_logs.erl30
-rw-r--r--lib/common_test/src/ct_util.erl15
-rw-r--r--lib/common_test/test/ct_test_support.erl14
-rw-r--r--lib/common_test/test/ct_verbosity_SUITE.erl26
-rw-r--r--lib/compiler/src/beam_bool.erl3
-rw-r--r--lib/compiler/src/cerl_inline.erl39
-rw-r--r--lib/compiler/src/v3_core.erl6
-rw-r--r--lib/compiler/test/guard_SUITE.erl8
-rw-r--r--lib/compiler/test/inline_SUITE.erl3
-rw-r--r--lib/compiler/test/inline_SUITE_data/fname.erl29
-rw-r--r--lib/compiler/test/warnings_SUITE.erl14
-rw-r--r--lib/diameter/doc/src/diameter_dict.xml4
-rw-r--r--lib/diameter/src/base/diameter_peer_fsm.erl65
-rw-r--r--lib/diameter/src/base/diameter_types.erl68
-rw-r--r--lib/diameter/src/base/diameter_watchdog.erl19
-rw-r--r--lib/diameter/test/diameter_codec_test.erl167
-rw-r--r--lib/diameter/test/diameter_transport_SUITE.erl7
-rw-r--r--lib/erl_interface/test/Makefile2
-rw-r--r--lib/erl_interface/test/erl_interface_smoke.spec1
-rw-r--r--lib/eunit/include/eunit.hrl64
-rw-r--r--lib/ic/test/Makefile2
-rw-r--r--lib/ic/test/ic_smoke.spec1
-rw-r--r--lib/inets/doc/src/httpc.xml6
-rw-r--r--lib/inets/doc/src/httpd.xml28
-rw-r--r--lib/inets/doc/src/httpd_util.xml4
-rw-r--r--lib/inets/doc/src/mod_alias.xml4
-rw-r--r--lib/inets/doc/src/notes.xml15
-rw-r--r--lib/inets/doc/src/notes_history.xml2
-rw-r--r--lib/inets/src/http_lib/http_transport.erl21
-rw-r--r--lib/inets/src/http_server/httpd_conf.erl18
-rw-r--r--lib/inets/src/http_server/httpd_request_handler.erl2
-rw-r--r--lib/inets/src/http_server/httpd_response.erl6
-rw-r--r--lib/inets/src/http_server/mod_cgi.erl2
-rw-r--r--lib/inets/src/http_server/mod_esi.erl2
-rw-r--r--lib/inets/test/httpd_basic_SUITE.erl25
-rw-r--r--lib/jinterface/test/Makefile2
-rw-r--r--lib/jinterface/test/jinterface_smoke.spec1
-rw-r--r--lib/kernel/doc/src/application.xml27
-rw-r--r--lib/kernel/doc/src/inet.xml13
-rw-r--r--lib/kernel/src/application.erl43
-rw-r--r--lib/kernel/src/inet.erl9
-rw-r--r--lib/kernel/src/inet_parse.erl4
-rw-r--r--lib/kernel/src/rpc.erl2
-rw-r--r--lib/kernel/src/user_drv.erl2
-rw-r--r--lib/kernel/test/Makefile2
-rw-r--r--lib/kernel/test/application_SUITE.erl107
-rw-r--r--lib/kernel/test/code_SUITE.erl881
-rw-r--r--lib/kernel/test/inet_SUITE.erl4
-rw-r--r--lib/kernel/test/kernel_smoke.spec9
-rw-r--r--lib/mnesia/src/mnesia_bup.erl6
-rw-r--r--lib/odbc/c_src/odbcserver.c12
-rw-r--r--lib/os_mon/c_src/ferrule.c2
-rw-r--r--lib/os_mon/c_src/mod_syslog.c3
-rw-r--r--lib/os_mon/src/disksup.erl4
-rw-r--r--lib/os_mon/test/Makefile3
-rw-r--r--lib/os_mon/test/disksup_SUITE.erl295
-rw-r--r--lib/os_mon/test/os_mon_smoke.spec3
-rw-r--r--lib/runtime_tools/doc/src/dbg.xml2
-rw-r--r--lib/runtime_tools/src/Makefile1
-rw-r--r--lib/runtime_tools/src/dbg.erl4
-rw-r--r--lib/runtime_tools/src/runtime_tools.app.src2
-rw-r--r--lib/runtime_tools/src/system_information.erl554
-rw-r--r--lib/runtime_tools/test/Makefile1
-rw-r--r--lib/runtime_tools/test/system_information_SUITE.erl300
-rw-r--r--lib/runtime_tools/test/system_information_SUITE_data/information_test_report.dat9873
-rw-r--r--lib/snmp/doc/src/notes.xml80
-rw-r--r--lib/snmp/doc/src/snmp_agent_config_files.xml260
-rw-r--r--lib/snmp/src/agent/snmp_view_based_acm_mib.erl133
-rw-r--r--lib/snmp/src/agent/snmpa_local_db.erl2
-rw-r--r--lib/snmp/src/app/snmp.appup.src26
-rw-r--r--lib/snmp/src/misc/snmp_conf.erl35
-rw-r--r--lib/snmp/test/Makefile2
-rw-r--r--lib/snmp/vsn.mk2
-rw-r--r--lib/ssh/doc/src/ssh.xml1
-rw-r--r--lib/ssh/src/ssh.hrl3
-rw-r--r--lib/ssh/src/ssh_connection_handler.erl4
-rw-r--r--lib/ssh/src/ssh_transport.erl37
-rw-r--r--lib/ssh/test/ssh_basic_SUITE.erl23
-rw-r--r--lib/ssl/doc/src/notes.xml17
-rw-r--r--lib/ssl/src/ssl.erl1
-rw-r--r--lib/ssl/src/ssl_internal.hrl3
-rw-r--r--lib/ssl/src/tls.erl8
-rw-r--r--lib/ssl/src/tls_connection.erl39
-rw-r--r--lib/ssl/test/ssl_packet_SUITE.erl24
-rw-r--r--lib/stdlib/doc/src/filelib.xml6
-rw-r--r--lib/stdlib/doc/src/io_lib.xml3
-rw-r--r--lib/stdlib/src/dets.erl4
-rw-r--r--lib/stdlib/src/erl_lint.erl3
-rw-r--r--lib/stdlib/src/filelib.erl23
-rw-r--r--lib/stdlib/src/gen_server.erl2
-rw-r--r--lib/stdlib/src/io.erl2
-rw-r--r--lib/stdlib/src/io_lib.erl9
-rw-r--r--lib/stdlib/src/io_lib_fread.erl9
-rw-r--r--lib/stdlib/test/dets_SUITE.erl26
-rw-r--r--lib/stdlib/test/erl_lint_SUITE.erl18
-rw-r--r--lib/test_server/src/ts.erl26
-rw-r--r--lib/test_server/src/ts_benchmark.erl7
-rw-r--r--lib/test_server/src/ts_lib.erl12
-rw-r--r--lib/tools/emacs/erlang.el3
-rw-r--r--lib/tools/emacs/test.erl.indented31
-rw-r--r--lib/tools/emacs/test.erl.orig31
-rw-r--r--lib/xmerl/doc/src/xmerl_ug.xmlsrc4
147 files changed, 13464 insertions, 1315 deletions
diff --git a/bootstrap/lib/compiler/ebin/cerl_inline.beam b/bootstrap/lib/compiler/ebin/cerl_inline.beam
index 0d7a4c0e87..3fa8c7d69f 100644
--- a/bootstrap/lib/compiler/ebin/cerl_inline.beam
+++ b/bootstrap/lib/compiler/ebin/cerl_inline.beam
Binary files differ
diff --git a/bootstrap/lib/compiler/ebin/v3_core.beam b/bootstrap/lib/compiler/ebin/v3_core.beam
index 7e2960fda2..7410397300 100644
--- a/bootstrap/lib/compiler/ebin/v3_core.beam
+++ b/bootstrap/lib/compiler/ebin/v3_core.beam
Binary files differ
diff --git a/bootstrap/lib/kernel/ebin/application.beam b/bootstrap/lib/kernel/ebin/application.beam
index c0a615f5a3..e39352117f 100644
--- a/bootstrap/lib/kernel/ebin/application.beam
+++ b/bootstrap/lib/kernel/ebin/application.beam
Binary files differ
diff --git a/erts/.gitignore b/erts/.gitignore
index 526d5da0b9..e515dc8811 100644
--- a/erts/.gitignore
+++ b/erts/.gitignore
@@ -11,6 +11,7 @@
/etc/common/Install
/etc/common/erl.src
+/etc/unix/etp-commands
/test/Emakefile
/test/*.beam
diff --git a/erts/configure.in b/erts/configure.in
index 2f624e5853..64436e933c 100644
--- a/erts/configure.in
+++ b/erts/configure.in
@@ -1051,12 +1051,15 @@ if test $ERTS_BUILD_SMP_EMU = yes; then
AC_DEFINE(ERTS_HAVE_SMP_EMU, 1, [Define if the smp emulator is built])
+ test "X$smp_require_native_atomics" = "Xyes" &&
+ AC_DEFINE(ETHR_SMP_REQUIRE_NATIVE_IMPLS, 1, [Define if you want to enable check for native ethread implementations])
+
case "$ethr_have_native_atomics-$smp_require_native_atomics-$ethr_have_native_spinlock" in
yes-*)
;;
no-yes-*)
- AC_MSG_ERROR([No native atomic implementation found. See INSTALL.md for more information.])
+ AC_MSG_ERROR([No native atomic implementation found. See Configuring section in INSTALL.md for more information.])
;;
no-no-yes)
diff --git a/erts/doc/src/erl_driver.xml b/erts/doc/src/erl_driver.xml
index efe0483b31..540390e1b1 100644
--- a/erts/doc/src/erl_driver.xml
+++ b/erts/doc/src/erl_driver.xml
@@ -666,7 +666,7 @@ typedef struct ErlDrvBinary {
<item>
<p>The <c>ErlDrvData</c> is a handle to driver-specific data,
passed to the driver call-backs. It is a pointer, and is
- most often type casted to a specific pointer in the driver.</p>
+ most often type cast to a specific pointer in the driver.</p>
</item>
<tag>SysIOVec</tag>
<item>
@@ -1014,7 +1014,7 @@ typedef struct ErlIOVec {
<fsummary>Read a system timestamp</fsummary>
<desc>
<marker id="driver_get_now"></marker>
- <p>This function reads a timestamp into the memory pointed to by
+ <p>This function reads a timestamp into the memory pointed to by
the parameter <c>now</c>. See the description of <seealso marker="#ErlDrvNowData">ErlDrvNowData</seealso> for
specification of its fields. </p>
<p>The return value is 0 unless the <c>now</c> pointer is not
@@ -1056,7 +1056,7 @@ typedef struct ErlIOVec {
returned. Another thread may still be using the event object
internally. To safely close an event object call
<c>driver_select</c> with <c>ERL_DRV_USE</c> and <c>on==0</c>. That
- will clear all events and then call
+ will clear all events and then call
<seealso marker="driver_entry#stop_select">stop_select</seealso>
when it is safe to close the event object.
<c>ERL_DRV_USE</c> should be set together with the first event
@@ -1068,7 +1068,7 @@ typedef struct ErlIOVec {
<p>ERL_DRV_USE was added in OTP release R13. Old drivers will still work
as before. But it is recommended to update them to use <c>ERL_DRV_USE</c> and
<c>stop_select</c> to make sure that event objects are closed in a safe way.</p>
- </note>
+ </note>
<p>The return value is 0 (failure, -1, only if the
<c>ready_input</c>/<c>ready_output</c> is
<c>NULL</c>).</p>
@@ -1524,7 +1524,7 @@ typedef struct ErlIOVec {
<marker id="remove_driver_entry"></marker>
<p>This function removes a driver entry <c>de</c> previously
added with <c>add_driver_entry</c>.</p>
- <p>Driver entries added by the <c>erl_ddll</c> erlang interface can
+ <p>Driver entries added by the <c>erl_ddll</c> erlang interface can
not be removed by using this interface.</p>
</desc>
</func>
@@ -1758,7 +1758,7 @@ typedef struct ErlIOVec {
<pre>
Term type Argument(s)
===========================================
-ERL_DRV_NIL
+ERL_DRV_NIL
ERL_DRV_ATOM ErlDrvTermData atom (from driver_mk_atom(char *string))
ERL_DRV_INT ErlDrvSInt integer
ERL_DRV_UINT ErlDrvUInt integer
@@ -1779,11 +1779,11 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len
signed integer data type <c>ErlDrvSInt</c> are 64 bits wide
on a 64 bit runtime system and 32 bits wide on a 32 bit
runtime system. They were introduced in erts version 5.6,
- and replaced some of the <c>int</c> arguments in the list above.
+ and replaced some of the <c>int</c> arguments in the list above.
</p>
<p>The unsigned integer data type <c>ErlDrvUInt64</c> and the
signed integer data type <c>ErlDrvSInt64</c> are always 64 bits
- wide. They were introduced in erts version 5.7.4.
+ wide. They were introduced in erts version 5.7.4.
</p>
<p>To build the tuple <c>{tcp, Port, [100 | Binary]}</c>, the
@@ -1879,7 +1879,7 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len
<fsummary>Send term data from driver to port owner</fsummary>
<desc>
<marker id="driver_output_term"></marker>
- <warning><p><c>driver_output_term()</c> is deferred and will
+ <warning><p><c>driver_output_term()</c> is deprecated and will
be removed in the OTP-R17 release. Use
<seealso marker="#erl_drv_send_term">erl_drv_output_term()</seealso>
instead.</p>
@@ -1937,7 +1937,7 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len
<fsummary>Send term data to other process than port owner process</fsummary>
<desc>
<marker id="driver_send_term"></marker>
- <warning><p><c>driver_send_term()</c> is deferred and will
+ <warning><p><c>driver_send_term()</c> is deprecated and will
be removed in the OTP-R17 release. Use
<seealso marker="#erl_drv_send_term">erl_drv_send_term()</seealso>
instead.</p>
@@ -1981,7 +1981,7 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len
thread, the following call can be used:</p>
<p></p>
<code type="none"><![CDATA[
- unsigned int myKey = (unsigned int) myPort;
+ unsigned int myKey = driver_async_port_key(myPort);
r = driver_async(myPort, &myKey, myData, myFunc);
]]></code>
@@ -1998,7 +1998,7 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len
The data should be freed in <c>async_free</c>, because it's
called if <c>driver_async_cancel</c> is called.</p>
<p>When the async operation is done, <seealso marker="driver_entry#ready_async">ready_async</seealso> driver
- entry function is called. If <c>async_ready</c> is null in
+ entry function is called. If <c>ready_async</c> is null in
the driver entry, the <c>async_free</c> function is called
instead.</p>
<p>The return value is a handle to the asynchronous task, which
@@ -2022,6 +2022,24 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len
</desc>
</func>
<func>
+ <name><ret>unsigned int</ret><nametext>driver_async_port_key (ErlDrvPort port)</nametext></name>
+ <fsummary>Calculate an async key from an ErlDrvPort</fsummary>
+ <desc>
+ <marker id="driver_async_port_key"></marker>
+ <p>This function calculates a key for later use in <seealso
+ marker="#driver_async">driver_async()</seealso>. The keys are
+ evenly distributed so that a fair mapping between port id's
+ and async thread id's is achieved.</p>
+ <note>
+ <p>Before OTP-R16, the actual port id could be used as a key
+ with proper casting, but after the rewrite of the port
+ subsystem, this is no longer the case. With this function, you
+ can achieve the same distribution based on port id's as before
+ OTP-R16.</p>
+ </note>
+ </desc>
+ </func>
+ <func>
<name><ret>int</ret><nametext>driver_async_cancel(long id)</nametext></name>
<fsummary>Cancel an asynchronous call</fsummary>
<desc>
@@ -2033,10 +2051,10 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len
The user had to implement synchronization of cancellation anyway.
It also unnecessarily complicated the implementation. Therefore,
as of OTP-R15B <c>driver_async_cancel()</c> is deprecated, and
- scheduled for removal in OTP-R16. It will currently always fail,
+ scheduled for removal in OTP-R17. It will currently always fail,
and return 0.</p>
- <warning><p><c>driver_async_cancel()</c> is deferred and will
- be removed in the OTP-R16 release.</p>
+ <warning><p><c>driver_async_cancel()</c> is deprecated and will
+ be removed in the OTP-R17 release.</p>
</warning>
</desc>
@@ -2048,7 +2066,7 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len
<marker id="driver_lock_driver"></marker>
<p>This function locks the driver used by the port <c>port</c>
in memory for the rest of the emulator process'
- lifetime. After this call, the driver behaves as one of Erlang's
+ lifetime. After this call, the driver behaves as one of Erlang's
statically linked in drivers.</p>
</desc>
</func>
@@ -2076,7 +2094,7 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len
<seealso marker="driver_entry">driver_entry</seealso>).</item>
<tag><c>drv_data</c></tag>
<item>The driver defined handle that will be passed in subsequent
- calls to driver call-backs. Note, that the
+ calls to driver call-backs. Note, that the
<seealso marker="driver_entry#start">driver start call-back</seealso>
will not be called for this new driver instance.
The driver defined handle is normally created in the
@@ -2284,7 +2302,7 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len
<item>A thread identifier.</item>
</taglist>
<p>This function compares two thread identifiers for equality,
- and returns <c>0</c> it they aren't equal, and
+ and returns <c>0</c> it they aren't equal, and
a value not equal to <c>0</c> if they are equal.</p>
<note><p>A Thread identifier may be reused very quickly after
a thread has terminated. Therefore, if a thread
@@ -2469,7 +2487,7 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len
</taglist>
<p>This function broadcasts on a condition variable. That is, if
other threads are waiting on the condition variable being
- broadcasted on, <em>all</em> of them will be woken.
+ broadcast on, <em>all</em> of them will be woken.
</p>
<p>This function is thread-safe.</p>
</desc>
@@ -2498,7 +2516,7 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len
the calling thread when calling this function.
</p>
<note><p><c>erl_drv_cond_wait()</c> might return even though
- no-one has signaled or broadcasted on the condition
+ no-one has signaled or broadcast on the condition
variable. Code calling <c>erl_drv_cond_wait()</c> should
always be prepared for <c>erl_drv_cond_wait()</c>
returning even though the condition that the thread was
@@ -2822,7 +2840,7 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len
<item>A pointer to an output buffer.</item>
<tag><c>value_size</c></tag>
<item>A pointer to an integer. The integer is both used for
- passing input and output sizes (see below).
+ passing input and output sizes (see below).
</item>
</taglist>
<p>This function retrieves the value of an environment variable.
@@ -2900,4 +2918,3 @@ ERL_DRV_EXT2TERM char *buf, ErlDrvUInt len
Guide Ch. 3)</p>
</section>
</cref>
-
diff --git a/erts/doc/src/erlang.xml b/erts/doc/src/erlang.xml
index 767edc1cc0..5ee40823bc 100644
--- a/erts/doc/src/erlang.xml
+++ b/erts/doc/src/erlang.xml
@@ -235,7 +235,7 @@
<code>
1> Bin = &lt;&lt;1,2,3,4,5,6,7,8,9,10&gt;&gt;.
-2> binary_part(Bin,{byte_size(Bin), -5)).
+2> binary_part(Bin,{byte_size(Bin), -5}).
&lt;&lt;6,7,8,9,10&gt;&gt;
</code>
diff --git a/erts/emulator/Makefile.in b/erts/emulator/Makefile.in
index 58e83540e1..9751982103 100644
--- a/erts/emulator/Makefile.in
+++ b/erts/emulator/Makefile.in
@@ -387,6 +387,13 @@ else
UNIX_ONLY_BUILDS =
endif
+ifeq ($(TARGET), win32)
+TMPVAR := $(shell LANG=C $(PERL) utils/make_compiler_flags -o $(TTF_DIR)/erl_compile_flags.h -v CONFIG_H "N/A" -v CFLAGS "$(CFLAGS)" -v LDFLAGS "$(LDFLAGS)")
+else
+# We force this to be run every time this makefile is executed
+TMPVAR := $(shell LANG=C $(PERL) utils/make_compiler_flags -o $(TTF_DIR)/erl_compile_flags.h -f CONFIG_H "$(ERL_TOP)/erts/$(TARGET)/config.h" -v CFLAGS "$(CFLAGS)" -v LDFLAGS "$(LDFLAGS)")
+endif
+
.PHONY: all
ifdef VOID_EMULATOR
all:
@@ -959,6 +966,7 @@ SED_REPL_TTF_DIR=s|$(TTF_DIR)/|$$(TTF_DIR)/|g
SED_REPL_ERL_TOP=s|\([ ]\)$(ERL_TOP)/|\1$$(ERL_TOP)/|g;s|^$(ERL_TOP)/|$$(ERL_TOP)/|g
SED_REPL_POLL=s|$$(OBJDIR)/erl_poll.o|$$(OBJDIR)/erl_poll.kp.o $$(OBJDIR)/erl_poll.nkp.o|g
SED_REPL_CHK_IO=s|$$(OBJDIR)/erl_check_io.o|$$(OBJDIR)/erl_check_io.kp.o $$(OBJDIR)/erl_check_io.nkp.o|g
+SED_REPL_TTF_COMP_FLAGS=s|\([^/]\)erl_compile_flags\.h|\1$$(TTF_DIR)/erl_compile_flags\.h|g
ifeq ($(TARGET),win32)
#SED_PREFIX=$(SED_REPL_WIN_DRIVE);
@@ -973,7 +981,7 @@ else
SED_SUFFIX=
endif
-SED_DEPEND=sed '$(SED_PREFIX)$(SED_REPL_O);$(SED_REPL_TTF_DIR);$(SED_REPL_ERL_TOP)$(SED_SUFFIX)'
+SED_DEPEND=sed '$(SED_PREFIX)$(SED_REPL_O);$(SED_REPL_TTF_DIR);$(SED_REPL_ERL_TOP)$(SED_SUFFIX);$(SED_REPL_TTF_COMP_FLAGS)'
SED_DEPEND_ZLIB=sed '$(SED_PREFIX)$(SED_REPL_O_ZLIB)'
ifdef HIPE_ENABLED
diff --git a/erts/emulator/beam/atom.names b/erts/emulator/beam/atom.names
index eba1d0fa23..c2f32ba089 100644
--- a/erts/emulator/beam/atom.names
+++ b/erts/emulator/beam/atom.names
@@ -139,6 +139,7 @@ atom caseless
atom catchlevel
atom cd
atom cdr
+atom cflags
atom characters_to_binary_int
atom characters_to_list_int
atom clear
@@ -150,6 +151,7 @@ atom compact
atom compat_rel
atom compile
atom compressed
+atom config_h
atom connect
atom connected
atom connection_closed
@@ -301,6 +303,7 @@ atom label
atom large_heap
atom last_calls
atom latin1
+atom ldflags
atom Le='=<'
atom lf
atom line
diff --git a/erts/emulator/beam/bif.c b/erts/emulator/beam/bif.c
index ff237b6a78..755c5e6882 100644
--- a/erts/emulator/beam/bif.c
+++ b/erts/emulator/beam/bif.c
@@ -3934,7 +3934,7 @@ BIF_RETTYPE halt_2(BIF_ALIST_2)
{
Sint code;
Eterm optlist = BIF_ARG_2;
- int flush = 0;
+ int flush = 1;
for (optlist = BIF_ARG_2;
is_list(optlist);
diff --git a/erts/emulator/beam/erl_alloc_util.c b/erts/emulator/beam/erl_alloc_util.c
index bf8a37c71b..e6d9f83aed 100644
--- a/erts/emulator/beam/erl_alloc_util.c
+++ b/erts/emulator/beam/erl_alloc_util.c
@@ -4369,7 +4369,7 @@ info_options(Allctr_t *allctr,
#endif
"option lmbcs: %beu\n"
"option smbcs: %beu\n"
- "option mbcgs: %beu\n",
+ "option mbcgs: %beu\n"
"option acul: %d\n",
topt,
allctr->ramv ? "true" : "false",
diff --git a/erts/emulator/beam/erl_async.c b/erts/emulator/beam/erl_async.c
index 054d1a48f6..e6d72f569b 100644
--- a/erts/emulator/beam/erl_async.c
+++ b/erts/emulator/beam/erl_async.c
@@ -583,6 +583,20 @@ int erts_async_ready_clean(void *varq, void *val)
#endif
/*
+** Generate a fair async key prom an ErlDrvPort
+** The port data gives a fair distribution grom port pointer
+** to unsigned integer - to be used in key for driver_async below.
+*/
+unsigned int driver_async_port_key(ErlDrvPort port)
+{
+ ErlDrvTermData td = driver_mk_port(port);
+ if (td == (ErlDrvTermData) NIL) {
+ return 0;
+ }
+ return (unsigned int) (UWord) internal_port_data(td);
+}
+
+/*
** Schedule async_invoke on a worker thread
** NOTE will be syncrounous when threads are unsupported
** return values:
diff --git a/erts/emulator/beam/erl_bif_info.c b/erts/emulator/beam/erl_bif_info.c
index e4fbd21c0e..673dfc658c 100755
--- a/erts/emulator/beam/erl_bif_info.c
+++ b/erts/emulator/beam/erl_bif_info.c
@@ -30,6 +30,7 @@
#include "bif.h"
#include "big.h"
#include "erl_version.h"
+#include "erl_compile_flags.h"
#include "erl_db_util.h"
#include "erl_message.h"
#include "erl_binary.h"
@@ -2610,6 +2611,31 @@ BIF_RETTYPE system_info_1(BIF_ALIST_1)
BIF_RET(am_true);
}
#endif
+ else if (ERTS_IS_ATOM_STR("compile_info",BIF_ARG_1)) {
+ Uint sz;
+ Eterm res = NIL, tup, text;
+ Eterm *hp = HAlloc(BIF_P, 3*(2 + 3) + /* three 2-tuples and three cons */
+ 2*(strlen(erts_build_flags_CONFIG_H) +
+ strlen(erts_build_flags_CFLAGS) +
+ strlen(erts_build_flags_LDFLAGS)));
+
+ sz = strlen(erts_build_flags_CONFIG_H);
+ text = buf_to_intlist(&hp, erts_build_flags_CONFIG_H, sz, NIL);
+ tup = TUPLE2(hp, am_config_h, text); hp += 3;
+ res = CONS(hp, tup, res); hp += 2;
+
+ sz = strlen(erts_build_flags_CFLAGS);
+ text = buf_to_intlist(&hp, erts_build_flags_CFLAGS, sz, NIL);
+ tup = TUPLE2(hp, am_cflags, text); hp += 3;
+ res = CONS(hp, tup, res); hp += 2;
+
+ sz = strlen(erts_build_flags_LDFLAGS);
+ text = buf_to_intlist(&hp, erts_build_flags_LDFLAGS, sz, NIL);
+ tup = TUPLE2(hp, am_ldflags, text); hp += 3;
+ res = CONS(hp, tup, res); hp += 2;
+
+ BIF_RET(res);
+ }
BIF_ERROR(BIF_P, BADARG);
}
diff --git a/erts/emulator/beam/erl_db_util.c b/erts/emulator/beam/erl_db_util.c
index 713ac0ba18..ef3749a2c4 100644
--- a/erts/emulator/beam/erl_db_util.c
+++ b/erts/emulator/beam/erl_db_util.c
@@ -2319,6 +2319,8 @@ restart:
break;
case matchSilent:
--esp;
+ if (in_flags & ERTS_PAM_IGNORE_TRACE_SILENT)
+ break;
if (*esp == am_true) {
erts_smp_proc_lock(c_p, ERTS_PROC_LOCKS_ALL_MINOR);
ERTS_TRACE_FLAGS(c_p) |= F_TRACE_SILENT;
@@ -4971,7 +4973,8 @@ static Eterm match_spec_test(Process *p, Eterm against, Eterm spec, int trace)
save_cp = p->cp;
p->cp = NULL;
res = erts_match_set_run(p, mps, arr, n,
- ERTS_PAM_COPY_RESULT, &ret_flags);
+ ERTS_PAM_COPY_RESULT|ERTS_PAM_IGNORE_TRACE_SILENT,
+ &ret_flags);
p->cp = save_cp;
} else {
n = 0;
diff --git a/erts/emulator/beam/erl_driver.h b/erts/emulator/beam/erl_driver.h
index e280563de1..1ab6e17f56 100644
--- a/erts/emulator/beam/erl_driver.h
+++ b/erts/emulator/beam/erl_driver.h
@@ -133,7 +133,7 @@ typedef struct {
#define ERL_DRV_EXTENDED_MARKER (0xfeeeeeed)
#define ERL_DRV_EXTENDED_MAJOR_VERSION 2
-#define ERL_DRV_EXTENDED_MINOR_VERSION 1
+#define ERL_DRV_EXTENDED_MINOR_VERSION 2
/*
* The emulator will refuse to load a driver with different major
@@ -638,6 +638,8 @@ EXTERN int erl_drv_send_term(ErlDrvTermData port,
int len);
/* Async IO functions */
+EXTERN unsigned int driver_async_port_key(ErlDrvPort port);
+
EXTERN long driver_async(ErlDrvPort ix,
unsigned int* key,
void (*async_invoke)(void*),
diff --git a/erts/emulator/beam/erl_ptab.c b/erts/emulator/beam/erl_ptab.c
index d69619dd44..fa5482b841 100644
--- a/erts/emulator/beam/erl_ptab.c
+++ b/erts/emulator/beam/erl_ptab.c
@@ -433,7 +433,7 @@ erts_ptab_mem_size(ErtsPTab *ptab)
{
UWord size = ptab->r.o.max*sizeof(erts_smp_atomic_t);
if (ptab->r.o.free_id_data)
- size += ptab->r.o.max*sizeof(Uint32);
+ size += ptab->r.o.max*sizeof(erts_smp_atomic32_t);
return size;
}
@@ -474,7 +474,7 @@ erts_ptab_init_table(ErtsPTab *ptab,
tab_sz = ERTS_ALC_CACHE_LINE_ALIGN_SIZE(size*sizeof(erts_smp_atomic_t));
alloc_sz = tab_sz;
if (!legacy)
- alloc_sz += ERTS_ALC_CACHE_LINE_ALIGN_SIZE(size*sizeof(Uint32));
+ alloc_sz += ERTS_ALC_CACHE_LINE_ALIGN_SIZE(size*sizeof(erts_smp_atomic32_t));
ptab->r.o.tab = erts_alloc_permanent_cache_aligned(atype, alloc_sz);
tab_end = ((char *) ptab->r.o.tab) + tab_sz;
tab_entry = ptab->r.o.tab;
@@ -497,6 +497,10 @@ erts_ptab_init_table(ErtsPTab *ptab,
ASSERT(ptab->r.o.pix_cl_shift + ptab->r.o.pix_cli_shift == bits);
+ ptab->r.o.invalid_element = invalid_element;
+ ptab->r.o.invalid_data = erts_ptab_id2data(ptab, invalid_element->id);
+ ptab->r.o.release_element = release_element;
+
if (legacy) {
ptab->r.o.free_id_data = NULL;
ptab->r.o.dix_cl_mask = 0;
@@ -506,11 +510,11 @@ erts_ptab_init_table(ErtsPTab *ptab,
}
else {
- tab_sz = ERTS_ALC_CACHE_LINE_ALIGN_SIZE(size*sizeof(Uint32));
- ptab->r.o.free_id_data = (Uint32 *) tab_end;
+ tab_sz = ERTS_ALC_CACHE_LINE_ALIGN_SIZE(size*sizeof(erts_smp_atomic32_t));
+ ptab->r.o.free_id_data = (erts_smp_atomic32_t *) tab_end;
tab_cache_lines = tab_sz/ERTS_CACHE_LINE_SIZE;
- ix_per_cache_line = (ERTS_CACHE_LINE_SIZE/sizeof(Uint32));
+ ix_per_cache_line = (ERTS_CACHE_LINE_SIZE/sizeof(erts_smp_atomic32_t));
ptab->r.o.dix_cl_mask = tab_cache_lines-1;
ptab->r.o.dix_cl_shift = erts_fit_in_bits_int32(ix_per_cache_line-1);
@@ -525,7 +529,9 @@ erts_ptab_init_table(ErtsPTab *ptab,
ix = 0;
for (cl = 0; cl < tab_cache_lines; cl++) {
for (cli = 0; cli < ix_per_cache_line; cli++) {
- ptab->r.o.free_id_data[ix] = cli*tab_cache_lines+cl;
+ erts_smp_atomic32_init_nob(&ptab->r.o.free_id_data[ix],
+ cli*tab_cache_lines+cl);
+ ASSERT(erts_smp_atomic32_read_nob(&ptab->r.o.free_id_data[ix]) != ptab->r.o.invalid_data);
ix++;
}
}
@@ -534,9 +540,6 @@ erts_ptab_init_table(ErtsPTab *ptab,
erts_smp_atomic32_init_nob(&ptab->vola.tile.fid_ix, -1);
}
- ptab->r.o.invalid_element = invalid_element;
- ptab->r.o.invalid_data = erts_ptab_id2data(ptab, invalid_element->id);
- ptab->r.o.release_element = release_element;
erts_smp_interval_init(&ptab->list.data.interval);
ptab->list.data.deleted.start = NULL;
@@ -606,11 +609,13 @@ erts_ptab_new_element(ErtsPTab *ptab,
= erts_smp_current_interval_nob(erts_ptab_interval(ptab));
if (ptab->r.o.free_id_data) {
+ do {
+ ix = (Uint32) erts_smp_atomic32_inc_read_acqb(&ptab->vola.tile.aid_ix);
+ ix = ix_to_free_id_data_ix(ptab, ix);
- ix = (Uint32) erts_smp_atomic32_inc_read_acqb(&ptab->vola.tile.aid_ix);
- ix = ix_to_free_id_data_ix(ptab, ix);
-
- data = ptab->r.o.free_id_data[ix];
+ data = erts_smp_atomic32_xchg_nob(&ptab->r.o.free_id_data[ix],
+ (erts_aint32_t)ptab->r.o.invalid_data);
+ }while ((Eterm)data == ptab->r.o.invalid_data);
init_ptab_el(init_arg, (Eterm) data);
@@ -763,7 +768,7 @@ erts_ptab_delete_element(ErtsPTab *ptab,
erts_smp_atomic_set_relb(&ptab->r.o.tab[pix], ERTS_AINT_NULL);
if (ptab->r.o.free_id_data) {
-
+ Uint32 prev_data;
/* Next data for this slot... */
data = (Uint32) erts_ptab_id2data(ptab, ptab_el->id);
data += ptab->r.o.max;
@@ -772,14 +777,17 @@ erts_ptab_delete_element(ErtsPTab *ptab,
data += ptab->r.o.max;
data &= ~(~((Uint32) 0) << ERTS_PTAB_ID_DATA_SIZE);
}
-
ASSERT(data != ptab->r.o.invalid_data);
ASSERT(pix == erts_ptab_data2pix(ptab, data));
- ix = (Uint32) erts_smp_atomic32_inc_read_relb(&ptab->vola.tile.fid_ix);
- ix = ix_to_free_id_data_ix(ptab, ix);
-
- ptab->r.o.free_id_data[ix] = data;
+ do {
+ ix = (Uint32) erts_smp_atomic32_inc_read_relb(&ptab->vola.tile.fid_ix);
+ ix = ix_to_free_id_data_ix(ptab, ix);
+
+ prev_data = erts_smp_atomic32_cmpxchg_nob(&ptab->r.o.free_id_data[ix],
+ data,
+ ptab->r.o.invalid_data);
+ }while ((Eterm)prev_data != ptab->r.o.invalid_data);
}
ASSERT(erts_smp_atomic32_read_nob(&ptab->vola.tile.count) > 0);
@@ -1392,6 +1400,31 @@ erts_ptab_init(void)
* Debug stuff
*/
+static void assert_ptab_consistency(ErtsPTab *ptab)
+{
+#ifdef DEBUG
+ if (ptab->r.o.free_id_data) {
+ Uint32 ix, pix, data;
+ int free_pids = 0;
+ int null_slots = 0;
+
+ for (ix=0; ix < ptab->r.o.max; ix++) {
+ if (erts_smp_atomic32_read_nob(&ptab->r.o.free_id_data[ix]) != ptab->r.o.invalid_data) {
+ ++free_pids;
+ data = erts_smp_atomic32_read_nob(&ptab->r.o.free_id_data[ix]);
+ pix = erts_ptab_data2pix(ptab, (Eterm) data);
+ ASSERT(erts_ptab_pix2intptr_nob(ptab, pix) == ERTS_AINT_NULL);
+ }
+ if (erts_smp_atomic_read_nob(&ptab->r.o.tab[ix]) == ERTS_AINT_NULL) {
+ ++null_slots;
+ }
+ }
+ ASSERT(free_pids == null_slots);
+ ASSERT(free_pids == ptab->r.o.max - erts_smp_atomic32_read_nob(&ptab->vola.tile.count));
+ }
+#endif
+}
+
Sint
erts_ptab_test_next_id(ErtsPTab *ptab, int set, Uint next)
{
@@ -1402,46 +1435,49 @@ erts_ptab_test_next_id(ErtsPTab *ptab, int set, Uint next)
erts_ptab_rwlock(ptab);
+ assert_ptab_consistency(ptab);
+
if (ptab->r.o.free_id_data) {
- Uint32 aid_ix, dix;
+ Uint32 id_ix, dix;
if (set) {
- Uint32 max_ix, ser, num, start;
+ Uint32 i, max_ix, num, stop_id_ix;
max_ix = ptab->r.o.max - 1;
- ser = next & ~max_ix;
- start = num = next & max_ix;
-
- aid_ix = (Uint32) erts_smp_atomic32_read_nob(&ptab->vola.tile.aid_ix) + 1;
-
- do {
- Uint32 pix = erts_ptab_data2pix(ptab, num);
+ num = next;
+ id_ix = (Uint32) erts_smp_atomic32_read_nob(&ptab->vola.tile.aid_ix);
+
+ for (i=0; i <= max_ix; ++i) {
+ Uint32 pix;
+ ++num;
+ num &= ~(~((Uint32) 0) << ERTS_PTAB_ID_DATA_SIZE);
+ if (num == ptab->r.o.invalid_data) {
+ num += ptab->r.o.max;
+ num &= ~(~((Uint32) 0) << ERTS_PTAB_ID_DATA_SIZE);
+ }
+ pix = erts_ptab_data2pix(ptab, num);
if (ERTS_AINT_NULL == erts_ptab_pix2intptr_nob(ptab, pix)) {
- dix = ix_to_free_id_data_ix(ptab, aid_ix);
- ptab->r.o.free_id_data[dix] = ser + num;
- ASSERT(pix == erts_ptab_data2pix(ptab, ser+num));
- if (aid_ix == max_ix)
- aid_ix = 0;
- else
- aid_ix++;
+ ++id_ix;
+ dix = ix_to_free_id_data_ix(ptab, id_ix);
+ erts_smp_atomic32_set_nob(&ptab->r.o.free_id_data[dix], num);
+ ASSERT(pix == erts_ptab_data2pix(ptab, num));
}
- if (num == max_ix)
- num = 0;
- else
- num++;
- } while (num != start);
+ }
+ erts_smp_atomic32_set_nob(&ptab->vola.tile.fid_ix, id_ix);
-#ifdef DEBUG
- if (aid_ix == 0)
- aid_ix = max_ix;
- else
- aid_ix--;
- ASSERT((aid_ix & max_ix) == (((Uint32) erts_smp_atomic32_read_nob(&ptab->vola.tile.fid_ix)) & max_ix));
-#endif
+ /* Write invalid_data in rest of free_id_data[]: */
+ stop_id_ix = (1 + erts_smp_atomic32_read_nob(&ptab->vola.tile.aid_ix)) & max_ix;
+ while (1) {
+ id_ix = (id_ix+1) & max_ix;
+ if (id_ix == stop_id_ix)
+ break;
+ dix = ix_to_free_id_data_ix(ptab, id_ix);
+ erts_smp_atomic32_set_nob(&ptab->r.o.free_id_data[dix],
+ ptab->r.o.invalid_data);
+ }
}
-
- aid_ix = (Uint32) erts_smp_atomic32_read_nob(&ptab->vola.tile.aid_ix) + 1;
- dix = ix_to_free_id_data_ix(ptab, aid_ix);
- res = (Sint) ptab->r.o.free_id_data[dix];
+ id_ix = (Uint32) erts_smp_atomic32_read_nob(&ptab->vola.tile.aid_ix) + 1;
+ dix = ix_to_free_id_data_ix(ptab, id_ix);
+ res = (Sint) erts_smp_atomic32_read_nob(&ptab->r.o.free_id_data[dix]);
}
else {
/* Deprecated legacy algorithm... */
@@ -1485,6 +1521,7 @@ erts_ptab_test_next_id(ErtsPTab *ptab, int set, Uint next)
}
}
+ assert_ptab_consistency(ptab);
erts_ptab_rwunlock(ptab);
return res;
diff --git a/erts/emulator/beam/erl_ptab.h b/erts/emulator/beam/erl_ptab.h
index c2d8bd9cad..e3e05f14af 100644
--- a/erts/emulator/beam/erl_ptab.h
+++ b/erts/emulator/beam/erl_ptab.h
@@ -100,7 +100,7 @@ typedef struct {
typedef struct {
erts_smp_atomic_t *tab;
- Uint32 *free_id_data;
+ erts_smp_atomic32_t *free_id_data;
Uint32 max;
Uint32 pix_mask;
Uint32 pix_cl_mask;
diff --git a/erts/emulator/beam/global.h b/erts/emulator/beam/global.h
index 2eec15867d..bacd5a5752 100755
--- a/erts/emulator/beam/global.h
+++ b/erts/emulator/beam/global.h
@@ -937,7 +937,7 @@ char* Sint_to_buf(Sint, struct Sint_buf*);
#define ERTS_IOLIST_OVERFLOW 1
#define ERTS_IOLIST_TYPE 2
-Eterm buf_to_intlist(Eterm**, char*, size_t, Eterm); /* most callers pass plain char*'s */
+Eterm buf_to_intlist(Eterm**, const char*, size_t, Eterm); /* most callers pass plain char*'s */
#define ERTS_IOLIST_TO_BUF_OVERFLOW (~((ErlDrvSizeT) 0))
#define ERTS_IOLIST_TO_BUF_TYPE_ERROR (~((ErlDrvSizeT) 1))
@@ -1018,9 +1018,10 @@ Eterm erts_match_set_lint(Process *p, Eterm matchexpr);
extern void erts_match_set_release_result(Process* p);
enum erts_pam_run_flags {
- ERTS_PAM_TMP_RESULT=0,
- ERTS_PAM_COPY_RESULT=1,
- ERTS_PAM_CONTIGUOUS_TUPLE=2
+ ERTS_PAM_TMP_RESULT=1,
+ ERTS_PAM_COPY_RESULT=2,
+ ERTS_PAM_CONTIGUOUS_TUPLE=4,
+ ERTS_PAM_IGNORE_TRACE_SILENT=8
};
extern Eterm erts_match_set_run(Process *p, Binary *mpsp,
Eterm *args, int num_args,
diff --git a/erts/emulator/beam/utils.c b/erts/emulator/beam/utils.c
index 84deaecb87..bd2be7afca 100644
--- a/erts/emulator/beam/utils.c
+++ b/erts/emulator/beam/utils.c
@@ -2983,7 +2983,7 @@ char* Sint_to_buf(Sint n, struct Sint_buf *buf)
*/
Eterm
-buf_to_intlist(Eterm** hpp, char *buf, size_t len, Eterm tail)
+buf_to_intlist(Eterm** hpp, const char *buf, size_t len, Eterm tail)
{
Eterm* hp = *hpp;
size_t i = len;
diff --git a/erts/emulator/drivers/common/efile_drv.c b/erts/emulator/drivers/common/efile_drv.c
index 595b0488a8..c997fe1bf9 100644
--- a/erts/emulator/drivers/common/efile_drv.c
+++ b/erts/emulator/drivers/common/efile_drv.c
@@ -546,53 +546,81 @@ static void *ef_safe_realloc(void *op, Uint s)
(((char *)(ev)->iov[(q)].iov_base) + (p))
/* int EV_GET_CHAR(ErlIOVec *ev, char *p, int *pp, int *qp) */
-#define EV_GET_CHAR(ev, p, pp, qp) \
- (*(pp)+1 <= (ev)->iov[*(qp)].iov_len \
- ? (*(p) = *EV_CHAR_P(ev, *(pp), *(qp)), \
- *(pp) = ( *(pp)+1 < (ev)->iov[*(qp)].iov_len \
- ? *(pp)+1 \
- : ((*(qp))++, 0)), \
- !0) \
- : 0)
+#define EV_GET_CHAR(ev, p, pp, qp) efile_ev_get_char(ev, p ,pp, qp)
+static int
+efile_ev_get_char(ErlIOVec *ev, char *p, int *pp, int *qp) {
+ if (*(pp)+1 <= (ev)->iov[*(qp)].iov_len) {
+ *(p) = *EV_CHAR_P(ev, *(pp), *(qp));
+ if (*(pp)+1 < (ev)->iov[*(qp)].iov_len)
+ *(pp) = *(pp)+1;
+ else {
+ (*(qp))++;
+ *pp = 0;
+ }
+ return !0;
+ }
+ return 0;
+}
/* Uint32 EV_UINT32(ErlIOVec *ev, int p, int q)*/
#define EV_UINT32(ev, p, q) \
((Uint32) *(((unsigned char *)(ev)->iov[(q)].iov_base) + (p)))
/* int EV_GET_UINT32(ErlIOVec *ev, Uint32 *p, int *pp, int *qp) */
-#define EV_GET_UINT32(ev, p, pp, qp) \
- (*(pp)+4 <= (ev)->iov[*(qp)].iov_len \
- ? (*(p) = (EV_UINT32(ev, *(pp), *(qp)) << 24) \
- | (EV_UINT32(ev, *(pp)+1, *(qp)) << 16) \
- | (EV_UINT32(ev, *(pp)+2, *(qp)) << 8) \
- | (EV_UINT32(ev, *(pp)+3, *(qp))), \
- *(pp) = ( *(pp)+4 < (ev)->iov[*(qp)].iov_len \
- ? *(pp)+4 \
- : ((*(qp))++, 0)), \
- !0) \
- : 0)
+#define EV_GET_UINT32(ev, p, pp, qp) efile_ev_get_uint32(ev,p,pp,qp)
+static int
+efile_ev_get_uint32(ErlIOVec *ev, Uint32 *p, int *pp, int *qp) {
+ if (*(pp)+4 <= (ev)->iov[*(qp)].iov_len) {
+ *(p) = (EV_UINT32(ev, *(pp), *(qp)) << 24)
+ | (EV_UINT32(ev, *(pp)+1, *(qp)) << 16)
+ | (EV_UINT32(ev, *(pp)+2, *(qp)) << 8)
+ | (EV_UINT32(ev, *(pp)+3, *(qp)));
+ if (*(pp)+4 < (ev)->iov[*(qp)].iov_len)
+ *(pp) = *(pp)+4;
+ else {
+ (*(qp))++;
+ *pp = 0;
+ }
+ return !0;
+ }
+ return 0;
+}
/* Uint64 EV_UINT64(ErlIOVec *ev, int p, int q)*/
#define EV_UINT64(ev, p, q) \
((Uint64) *(((unsigned char *)(ev)->iov[(q)].iov_base) + (p)))
-/* int EV_GET_UINT64(ErlIOVec *ev, Uint32 *p, int *pp, int *qp) */
-#define EV_GET_UINT64(ev, p, pp, qp) \
- (*(pp)+8 <= (ev)->iov[*(qp)].iov_len \
- ? (*(p) = (EV_UINT64(ev, *(pp), *(qp)) << 56) \
- | (EV_UINT64(ev, *(pp)+1, *(qp)) << 48) \
- | (EV_UINT64(ev, *(pp)+2, *(qp)) << 40) \
- | (EV_UINT64(ev, *(pp)+3, *(qp)) << 32) \
- | (EV_UINT64(ev, *(pp)+4, *(qp)) << 24) \
- | (EV_UINT64(ev, *(pp)+5, *(qp)) << 16) \
- | (EV_UINT64(ev, *(pp)+6, *(qp)) << 8) \
- | (EV_UINT64(ev, *(pp)+7, *(qp))), \
- *(pp) = ( *(pp)+8 < (ev)->iov[*(qp)].iov_len \
- ? *(pp)+8 \
- : ((*(qp))++, 0)), \
- !0) \
- : 0)
+/* int EV_GET_UINT64(ErlIOVec *ev, Uint64 *p, int *pp, int *qp) */
+#define EV_GET_UINT64(ev, p, pp, qp) efile_ev_get_uint64(ev,p,pp,qp)
+static int
+efile_ev_get_uint64(ErlIOVec *ev, Uint64 *p, int *pp, int *qp) {
+ if (*(pp)+8 <= (ev)->iov[*(qp)].iov_len) {
+ *(p) = (EV_UINT64(ev, *(pp), *(qp)) << 56)
+ | (EV_UINT64(ev, *(pp)+1, *(qp)) << 48)
+ | (EV_UINT64(ev, *(pp)+2, *(qp)) << 40)
+ | (EV_UINT64(ev, *(pp)+3, *(qp)) << 32)
+ | (EV_UINT64(ev, *(pp)+4, *(qp)) << 24)
+ | (EV_UINT64(ev, *(pp)+5, *(qp)) << 16)
+ | (EV_UINT64(ev, *(pp)+6, *(qp)) << 8)
+ | (EV_UINT64(ev, *(pp)+7, *(qp)));
+ if (*(pp)+8 < (ev)->iov[*(qp)].iov_len)
+ *(pp) = *(pp)+8;
+ else {
+ (*(qp))++;
+ *pp = 0;
+ }
+ return !0;
+ }
+ return 0;
+}
+/* int EV_GET_SINT64(ErlIOVec *ev, Uint64 *p, int *pp, int *qp) */
+#define EV_GET_SINT64(ev, p, pp, qp) efile_ev_get_sint64(ev,p,pp,qp)
+static int
+efile_ev_get_sint64(ErlIOVec *ev, Sint64 *p, int *pp, int *qp) {
+ Uint64 *tmp = (Uint64*)p;
+ return EV_GET_UINT64(ev,tmp,pp,qp);
+}
#if 0
@@ -744,6 +772,7 @@ file_init(void)
return 0;
}
+
/*********************************************************************
* Driver entry point -> start
*/
@@ -760,7 +789,7 @@ file_start(ErlDrvPort port, char* command)
}
desc->fd = FILE_FD_INVALID;
desc->port = port;
- desc->key = (unsigned int) (UWord) port;
+ desc->key = driver_async_port_key(port);
desc->flags = 0;
desc->invoke = NULL;
desc->d = NULL;
@@ -3105,25 +3134,25 @@ file_flush(ErlDrvData e) {
/*********************************************************************
* Driver entry point -> control
+ * Only debug functionality...
*/
static ErlDrvSSizeT
file_control(ErlDrvData e, unsigned int command,
char* buf, ErlDrvSizeT len, char **rbuf, ErlDrvSizeT rlen) {
- /*
- * warning: variable ‘desc’ set but not used
- * [-Wunused-but-set-variable]
- * ... no kidding ...
- *
- *
file_descriptor *desc = (file_descriptor *)e;
switch (command) {
+ case 'K' :
+ if (rlen < 4) {
+ *rbuf = EF_ALLOC(4);
+ }
+ (*rbuf)[0] = ((desc->key) >> 24) & 0xFF;
+ (*rbuf)[1] = ((desc->key) >> 16) & 0xFF;
+ (*rbuf)[2] = ((desc->key) >> 8) & 0xFF;
+ (*rbuf)[3] = (desc->key) & 0xFF;
+ return 4;
default:
return 0;
- }
- ASSERT(0);
- desc = NULL;
- */
- return 0;
+ }
}
/*********************************************************************
@@ -3604,7 +3633,7 @@ file_outputv(ErlDrvData e, ErlIOVec *ev) {
for(i = 0; i < n; i++) {
Uint32 sizeH, sizeL;
size_t size;
- if ( !EV_GET_UINT64(ev, &d->c.pwritev.specs[i].offset, &p, &q)
+ if ( !EV_GET_SINT64(ev, &d->c.pwritev.specs[i].offset, &p, &q)
|| !EV_GET_UINT32(ev, &sizeH, &p, &q)
|| !EV_GET_UINT32(ev, &sizeL, &p, &q)) {
/* Misalignment in buffer */
@@ -3746,7 +3775,7 @@ file_outputv(ErlDrvData e, ErlIOVec *ev) {
for (i = 1; i < 1+n; i++) {
Uint32 sizeH, sizeL;
size_t size;
- if ( !EV_GET_UINT64(ev, &d->c.preadv.offsets[i-1], &p, &q)
+ if ( !EV_GET_SINT64(ev, &d->c.preadv.offsets[i-1], &p, &q)
|| !EV_GET_UINT32(ev, &sizeH, &p, &q)
|| !EV_GET_UINT32(ev, &sizeL, &p, &q)) {
reply_posix_error(desc, EINVAL);
@@ -3814,7 +3843,7 @@ file_outputv(ErlDrvData e, ErlIOVec *ev) {
Uint32 origin; /* Origin of seek. */
if (ev->size < 1+8+4
- || !EV_GET_UINT64(ev, &offset, &p, &q)
+ || !EV_GET_SINT64(ev, &offset, &p, &q)
|| !EV_GET_UINT32(ev, &origin, &p, &q)) {
/* Wrong length of buffer to contain offset and origin */
reply_posix_error(desc, EINVAL);
@@ -3927,7 +3956,7 @@ file_outputv(ErlDrvData e, ErlIOVec *ev) {
goto done;
}
if (ev->size < 1+1+8+4
- || !EV_GET_UINT64(ev, &hdr_offset, &p, &q)
+ || !EV_GET_SINT64(ev, &hdr_offset, &p, &q)
|| !EV_GET_UINT32(ev, &max_size, &p, &q)) {
/* Buffer too short to contain
* the header offset and max size spec */
diff --git a/erts/emulator/drivers/win32/win_efile.c b/erts/emulator/drivers/win32/win_efile.c
index be3d86a1d2..b36a103f8e 100644
--- a/erts/emulator/drivers/win32/win_efile.c
+++ b/erts/emulator/drivers/win32/win_efile.c
@@ -772,6 +772,7 @@ efile_may_openfile(Efile_error* errInfo, char *name) {
DWORD attr;
if ((attr = GetFileAttributesW(wname)) == INVALID_FILE_ATTRIBUTES) {
+ errno = ENOENT;
return check_error(-1, errInfo);
}
diff --git a/erts/emulator/sys/win32/erl_win_dyn_driver.h b/erts/emulator/sys/win32/erl_win_dyn_driver.h
index a7c53c904d..b9a9838a36 100644
--- a/erts/emulator/sys/win32/erl_win_dyn_driver.h
+++ b/erts/emulator/sys/win32/erl_win_dyn_driver.h
@@ -80,6 +80,7 @@ WDD_TYPEDEF(int, erl_drv_output_term, (ErlDrvTermData, ErlDrvTermData*, int));
WDD_TYPEDEF(int, driver_output_term, (ErlDrvPort, ErlDrvTermData*, int));
WDD_TYPEDEF(int, erl_drv_send_term, (ErlDrvTermData, ErlDrvTermData, ErlDrvTermData*, int));
WDD_TYPEDEF(int, driver_send_term, (ErlDrvPort, ErlDrvTermData, ErlDrvTermData*, int));
+WDD_TYPEDEF(unsigned int, driver_async_port_key, (ErlDrvPort));
WDD_TYPEDEF(long, driver_async, (ErlDrvPort,unsigned int*,void (*)(void*),void*,void (*)(void*)));
WDD_TYPEDEF(int, driver_async_cancel, (unsigned int));
WDD_TYPEDEF(int, driver_lock_driver, (ErlDrvPort));
@@ -197,6 +198,7 @@ typedef struct {
WDD_FTYPE(driver_output_term) *driver_output_term;
WDD_FTYPE(erl_drv_send_term) *erl_drv_send_term;
WDD_FTYPE(driver_send_term) *driver_send_term;
+ WDD_FTYPE(driver_async_port_key) *driver_async_port_key;
WDD_FTYPE(driver_async) *driver_async;
WDD_FTYPE(driver_async_cancel) *driver_async_cancel;
WDD_FTYPE(driver_lock_driver) *driver_lock_driver;
@@ -308,6 +310,7 @@ extern TWinDynDriverCallbacks WinDynDriverCallbacks;
#define driver_output_term (WinDynDriverCallbacks.driver_output_term)
#define erl_drv_send_term (WinDynDriverCallbacks.erl_drv_send_term)
#define driver_send_term (WinDynDriverCallbacks.driver_send_term)
+#define driver_async_port_key (WinDynDriverCallbacks.driver_async_port_key)
#define driver_async (WinDynDriverCallbacks.driver_async)
#define driver_async_cancel (WinDynDriverCallbacks.driver_async_cancel)
#define driver_lock_driver (WinDynDriverCallbacks.driver_lock_driver)
@@ -443,6 +446,7 @@ do { \
((W).driver_output_term) = driver_output_term; \
((W).erl_drv_send_term) = erl_drv_send_term; \
((W).driver_send_term) = driver_send_term; \
+((W).driver_async_port_key) = driver_async_port_key; \
((W).driver_async) = driver_async; \
((W).driver_async_cancel) = driver_async_cancel; \
((W).driver_lock_driver) = driver_lock_driver; \
diff --git a/erts/emulator/test/Makefile b/erts/emulator/test/Makefile
index 9594ab48b1..f02ca3cb98 100644
--- a/erts/emulator/test/Makefile
+++ b/erts/emulator/test/Makefile
@@ -140,7 +140,8 @@ EMAKEFILE=Emakefile
TEST_SPEC_FILES= emulator.spec \
emulator.spec.win \
- emulator_bench.spec
+ emulator_bench.spec \
+ emulator_smoke.spec
# ----------------------------------------------------
# Release directory specification
diff --git a/erts/emulator/test/efile_SUITE.erl b/erts/emulator/test/efile_SUITE.erl
index 65367eab98..f79bb761d1 100644
--- a/erts/emulator/test/efile_SUITE.erl
+++ b/erts/emulator/test/efile_SUITE.erl
@@ -19,16 +19,16 @@
-module(efile_SUITE).
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2]).
--export([iter_max_files/1]).
+-export([iter_max_files/1, async_dist/1]).
--export([do_iter_max_files/2]).
+-export([do_iter_max_files/2, do_async_dist/1]).
-include_lib("test_server/include/test_server.hrl").
suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
- [iter_max_files].
+ [iter_max_files, async_dist].
groups() ->
[].
@@ -45,6 +45,84 @@ init_per_group(_GroupName, Config) ->
end_per_group(_GroupName, Config) ->
Config.
+do_async_dist(Dir) ->
+ X = 100,
+ AT = erlang:system_info(thread_pool_size),
+ Keys = file_keys(Dir,AT*X,[],[]),
+ Tab = ets:new(x,[ordered_set]),
+ [ ets:insert(Tab,{N,0}) || N <- lists:seq(0,AT-1) ],
+ [ ets:update_counter(Tab,(N rem AT),1) || N <- Keys ],
+ Res = [ V || {_,V} <- ets:tab2list(Tab) ],
+ ets:delete(Tab),
+ {Res, sdev(Res)/X}.
+
+sdev(List) ->
+ Len = length(List),
+ Mean = lists:sum(List)/Len,
+ math:sqrt(lists:sum([ (X - Mean) * (X - Mean) || X <- List ]) / Len).
+
+file_keys(_,0,FdList,FnList) ->
+ [ file:close(FD) || FD <- FdList ],
+ [ file:delete(FN) || FN <- FnList ],
+ [];
+file_keys(Dir,Num,FdList,FnList) ->
+ Name = "dummy"++integer_to_list(Num),
+ FN = filename:join([Dir,Name]),
+ case file:open(FN,[write,raw]) of
+ {ok,FD} ->
+ {file_descriptor,prim_file,{Port,_}} = FD,
+ <<X:32/integer-big>> =
+ iolist_to_binary(erlang:port_control(Port,$K,[])),
+ [X | file_keys(Dir,Num-1,[FD|FdList],[FN|FnList])];
+ {error,_} ->
+ % Try freeing up FD's if there are any
+ case FdList of
+ [] ->
+ exit({cannot_open_file,FN});
+ _ ->
+ [ file:close(FD) || FD <- FdList ],
+ [ file:delete(F) || F <- FnList ],
+ file_keys(Dir,Num,[],[])
+ end
+ end.
+
+async_dist(doc) ->
+ "Check that the distribution of files over async threads is fair";
+async_dist(Config) when is_list(Config) ->
+ DataDir = ?config(data_dir,Config),
+ TestFile = filename:join(DataDir, "existing_file"),
+ Dir = filename:dirname(code:which(?MODULE)),
+ AsyncSizes = [7,10,100,255,256,64,63,65],
+ Max = 0.5,
+
+ lists:foreach(fun(Size) ->
+ {ok,Node} =
+ test_server:start_node
+ (test_iter_max_files,slave,
+ [{args,
+ "+A "++integer_to_list(Size)++
+ " -pa " ++ Dir}]),
+ {Distr,SD} = rpc:call(Node,?MODULE,do_async_dist,
+ [DataDir]),
+ test_server:stop_node(Node),
+ if
+ SD > Max ->
+ io:format("Bad async queue distribution for "
+ "~p async threads:~n"
+ " Standard deviation is ~p~n"
+ " Key distribution:~n ~lp~n",
+ [Size,SD,Distr]),
+ exit({bad_async_dist,Size,SD,Distr});
+ true ->
+ io:format("OK async queue distribution for "
+ "~p async threads:~n"
+ " Standard deviation is ~p~n"
+ " Key distribution:~n ~lp~n",
+ [Size,SD,Distr]),
+ ok
+ end
+ end, AsyncSizes),
+ ok.
%%
%% Open as many files as possible. Do this several times and check
@@ -98,7 +176,7 @@ open_files(Name) ->
?line case file:open(Name, [read,raw]) of
{ok, Fd} ->
[Fd| open_files(Name)];
- {error, Reason} ->
-% io:format("Error reason: ~p", [Reason]),
+ {error, _Reason} ->
+% io:format("Error reason: ~p", [_Reason]),
[]
end.
diff --git a/erts/emulator/test/emulator_smoke.spec b/erts/emulator/test/emulator_smoke.spec
new file mode 100644
index 0000000000..3219aeb823
--- /dev/null
+++ b/erts/emulator/test/emulator_smoke.spec
@@ -0,0 +1,3 @@
+{suites,"../emulator_test",[smoke_test_SUITE,time_SUITE]}.
+{cases,"../emulator_test",crypto_SUITE,[t_md5]}.
+{cases,"../emulator_test",float_SUITE,[fpe,cmp_integer]}. \ No newline at end of file
diff --git a/erts/emulator/test/match_spec_SUITE.erl b/erts/emulator/test/match_spec_SUITE.erl
index 8dbc6b6538..b56b7ce525 100644
--- a/erts/emulator/test/match_spec_SUITE.erl
+++ b/erts/emulator/test/match_spec_SUITE.erl
@@ -22,7 +22,7 @@
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2, not_run/1]).
-export([test_1/1, test_2/1, test_3/1, bad_match_spec_bin/1,
- trace_control_word/1, silent/1, silent_no_ms/1,
+ trace_control_word/1, silent/1, silent_no_ms/1, silent_test/1,
ms_trace2/1, ms_trace3/1, boxed_and_small/1,
destructive_in_test_bif/1, guard_exceptions/1,
unary_plus/1, unary_minus/1, moving_labels/1]).
@@ -55,7 +55,7 @@ all() ->
case test_server:is_native(match_spec_SUITE) of
false ->
[test_1, test_2, test_3, bad_match_spec_bin,
- trace_control_word, silent, silent_no_ms, ms_trace2,
+ trace_control_word, silent, silent_no_ms, silent_test, ms_trace2,
ms_trace3, boxed_and_small, destructive_in_test_bif,
guard_exceptions, unary_plus, unary_minus, fpe,
moving_labels,
@@ -501,6 +501,14 @@ silent_no_ms(Config) when is_list(Config) ->
{trace,Tracee,return_to,{?MODULE,f3,2}}]
end).
+silent_test(doc) ->
+ ["Test that match_spec_test does not activate silent"];
+silent_test(_Config) ->
+ {flags,[]} = erlang:trace_info(self(),flags),
+ erlang:match_spec_test([],[{'_',[],[{silent,true}]}],trace),
+ {flags,[]} = erlang:trace_info(self(),flags).
+
+
ms_trace2(doc) ->
["Test the match spec functions {trace/2}"];
ms_trace2(suite) -> [];
diff --git a/erts/emulator/test/receive_SUITE.erl b/erts/emulator/test/receive_SUITE.erl
index b070e2b986..2e7ac1f50c 100644
--- a/erts/emulator/test/receive_SUITE.erl
+++ b/erts/emulator/test/receive_SUITE.erl
@@ -59,22 +59,25 @@ end_per_testcase(_Func, Config) ->
?t:timetrap_cancel(Dog).
call_with_huge_message_queue(Config) when is_list(Config) ->
- ?line Pid = spawn_link(fun echo_loop/0),
+ Pid = spawn_link(fun echo_loop/0),
- ?line {Time,ok} = tc(fun() -> calls(10, Pid) end),
+ {Time,ok} = tc(fun() -> calls(10, Pid) end),
- ?line [self() ! {msg,N} || N <- lists:seq(1, 500000)],
+ [self() ! {msg,N} || N <- lists:seq(1, 500000)],
erlang:garbage_collect(),
- ?line {NewTime,ok} = tc(fun() -> calls(10, Pid) end),
+ {NewTime1,ok} = tc(fun() -> calls(10, Pid) end),
+ {NewTime2,ok} = tc(fun() -> calls(10, Pid) end),
+
io:format("Time for empty message queue: ~p", [Time]),
- io:format("Time for huge message queue: ~p", [NewTime]),
+ io:format("Time1 for huge message queue: ~p", [NewTime1]),
+ io:format("Time2 for huge message queue: ~p", [NewTime2]),
- case (NewTime+1) / (Time+1) of
+ case hd(lists:sort([(NewTime1+1) / (Time+1), (NewTime2+1) / (Time+1)])) of
Q when Q < 10 ->
ok;
Q ->
- io:format("Q = ~p", [Q]),
- ?line ?t:fail()
+ io:format("Best Q = ~p", [Q]),
+ ?t:fail()
end,
ok.
@@ -95,8 +98,8 @@ call(Pid, Msg) ->
end.
receive_in_between(Config) when is_list(Config) ->
- ?line Pid = spawn_link(fun echo_loop/0),
- ?line [{ok,{a,b}} = call2(Pid, {a,b}) || _ <- lists:seq(1, 100000)],
+ Pid = spawn_link(fun echo_loop/0),
+ [{ok,{a,b}} = call2(Pid, {a,b}) || _ <- lists:seq(1, 100000)],
ok.
call2(Pid, Msg) ->
diff --git a/erts/emulator/test/system_profile_SUITE.erl b/erts/emulator/test/system_profile_SUITE.erl
index ba94a371be..a387c08ef9 100644
--- a/erts/emulator/test/system_profile_SUITE.erl
+++ b/erts/emulator/test/system_profile_SUITE.erl
@@ -198,7 +198,9 @@ check_multi_scheduling_block(Nodes) ->
Pid = start_profiler_process(),
undefined = erlang:system_profile(Pid, [scheduler]),
{ok, Supervisor} = start_load(Nodes),
+ wait(600),
erlang:system_flag(multi_scheduling, block),
+ wait(600),
erlang:system_flag(multi_scheduling, unblock),
{Pid, [scheduler]} = erlang:system_profile(undefined, []),
Events = get_profiler_events(),
@@ -213,7 +215,6 @@ check_block_system(Nodes) ->
Pid = start_profiler_process(),
undefined = erlang:system_profile(Pid, [scheduler]),
{ok, Supervisor} = start_load(Nodes),
- % FIXME: remove wait !!
wait(300),
undefined = erlang:system_monitor(Dummy, [busy_port]),
{Dummy, [busy_port]} = erlang:system_monitor(undefined, []),
diff --git a/erts/emulator/utils/make_compiler_flags b/erts/emulator/utils/make_compiler_flags
new file mode 100755
index 0000000000..cebe8cd0c5
--- /dev/null
+++ b/erts/emulator/utils/make_compiler_flags
@@ -0,0 +1,87 @@
+#!/usr/bin/env perl
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 1999-2009. All Rights Reserved.
+#
+# The contents of this file are subject to the Erlang Public License,
+# Version 1.1, (the "License"); you may not use this file except in
+# compliance with the License. You should have received a copy of the
+# Erlang Public License along with this software. If not, it can be
+# retrieved online at http://www.erlang.org/.
+#
+# Software distributed under the License is distributed on an "AS IS"
+# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+# the License for the specific language governing rights and limitations
+# under the License.
+#
+# %CopyrightEnd%
+#
+use strict;
+use File::Copy;
+# This program generates global constants that contains
+# config.h, CFLAGS and LDFLAGS
+
+my $file = "";
+my %constants = ();
+my $prev_file = "";
+
+while (@ARGV) {
+ my $d = shift;
+ if ( $d =~ /^-o$/ ) {
+ $file = shift or die("-o requires argument");
+ open FILE, "<$file" or next;
+ $prev_file = do { local $/; <FILE> };
+ close FILE;
+ next;
+ }
+ if ( $d =~ /^-f/ ) {
+ my $var = shift or die("-f requires two argument");
+ my $value = shift or die("-f requires two argument");
+ open FILE, "<$value";
+ $value = do { local $/; <FILE> };
+ close FILE;
+
+ $value =~ s/\n/\\n\\\n/g;
+
+ $constants{$var} = $value;
+ }
+ if ( $d =~ /^-v/ ) {
+ my $var = shift or die("-v requires two argument");
+ my $value = shift;
+ $constants{$var} = $value;
+ }
+}
+
+foreach(keys %constants) {
+ my $value = $constants{$_};
+ $value =~ s/"/\\"/g;
+ $constants{$_} = $value
+}
+
+# Did we want output to a file?
+open(my $oldout, ">&STDOUT") or die "Can't dup STDOUT: $!";
+if ( $file ) {
+ open STDOUT, ">$file.tmp" or die("can't open $file for writing");
+}
+
+my(@prog) = split('/', $0);
+my($prog) = $prog[$#prog];
+print "/* Warning: Do not edit this file.\n";
+print " Auto-generated by '$prog'.*/\n";
+
+foreach(keys %constants) {
+ print "const char* erts_build_flags_$_ = \"$constants{$_}\";\n"
+}
+
+open(STDOUT, ">&", $oldout) or die "Can't dup \$oldout: $!";
+
+open FILE, "<$file.tmp";
+my $new_file = do { local $/; <FILE> };
+close FILE;
+
+if ($new_file ne $prev_file) {
+ move("$file.tmp","$file");
+} else {
+ unlink("$file.tmp");
+}
diff --git a/erts/etc/Makefile b/erts/etc/Makefile
index 2b32b8ae50..5b54ef9c3e 100644
--- a/erts/etc/Makefile
+++ b/erts/etc/Makefile
@@ -18,10 +18,11 @@
#
include $(ERL_TOP)/make/target.mk
-
SUB_DIRECTORIES = common
ifeq ($(TARGET),win32)
SUB_DIRECTORIES += win32
+else
+SUB_DIRECTORIES += unix
endif
include $(ERL_TOP)/make/otp_subdir.mk
diff --git a/erts/etc/unix/Makefile b/erts/etc/unix/Makefile
new file mode 100644
index 0000000000..e85d2fab0c
--- /dev/null
+++ b/erts/etc/unix/Makefile
@@ -0,0 +1,46 @@
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 2013. All Rights Reserved.
+#
+# The contents of this file are subject to the Erlang Public License,
+# Version 1.1, (the "License"); you may not use this file except in
+# compliance with the License. You should have received a copy of the
+# Erlang Public License along with this software. If not, it can be
+# retrieved online at http://www.erlang.org/.
+#
+# Software distributed under the License is distributed on an "AS IS"
+# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+# the License for the specific language governing rights and limitations
+# under the License.
+#
+# %CopyrightEnd%
+#
+
+include $(ERL_TOP)/make/output.mk
+include $(ERL_TOP)/make/target.mk
+
+include $(ERL_TOP)/make/$(TARGET)/otp.mk
+include ../../vsn.mk
+
+opt debug: etc
+
+.PHONY: etc
+etc: etp-commands
+
+etp-commands: etp-commands.in
+ sed 's:@ERL_TOP@:${ERL_TOP}:g' etp-commands.in > etp-commands
+
+.PHONY: docs
+docs:
+
+.PHONY: clean
+clean:
+
+# ----------------------------------------------------
+# Release Target
+# ----------------------------------------------------
+include $(ERL_TOP)/make/otp_release_targets.mk
+
+.PHONY: release_spec
+release_spec: etc \ No newline at end of file
diff --git a/erts/etc/unix/etp-commands b/erts/etc/unix/etp-commands.in
index f059662271..54ff7b3e3a 100644
--- a/erts/etc/unix/etp-commands
+++ b/erts/etc/unix/etp-commands.in
@@ -2075,6 +2075,33 @@ document etp-system-info
%---------------------------------------------------------------------------
end
+define etp-compile-info
+ printf "--------------- Compile Information ---------------\n"
+ printf "CFLAGS: %s\n", erts_build_flags_CFLAGS
+ printf "LDFLAGS: %s\n", erts_build_flags_LDFLAGS
+ printf "Use etp-config-h-info to dump config.h\n"
+end
+
+document etp-compile-info
+%---------------------------------------------------------------------------
+% etp-compile-info
+%
+% Print information about how the system was compiled
+%---------------------------------------------------------------------------
+end
+
+define etp-config-h-info
+ printf "%s", erts_build_flags_CONFIG_H
+end
+
+document etp-config-h-info
+%---------------------------------------------------------------------------
+% etp-config-h-info
+%
+% Dump the contents of config.h when the system was compiled
+%---------------------------------------------------------------------------
+end
+
define etp-dictdump
# Args: ProcDict*
#
@@ -2730,6 +2757,10 @@ document etp-run
%---------------------------------------------------------------------------
end
+define etp-thr
+ source @ERL_TOP@/erts/etc/unix/etp-thr.py
+end
+
############################################################################
# Toolbox parameter handling
#
diff --git a/erts/etc/unix/etp-thr.py b/erts/etc/unix/etp-thr.py
new file mode 100644
index 0000000000..64fb858d20
--- /dev/null
+++ b/erts/etc/unix/etp-thr.py
@@ -0,0 +1,55 @@
+#
+# %CopyrightBegin%
+#
+# Copyright Ericsson AB 2013. All Rights Reserved.
+#
+# The contents of this file are subject to the Erlang Public License,
+# Version 1.1, (the "License"); you may not use this file except in
+# compliance with the License. You should have received a copy of the
+# Erlang Public License along with this software. If not, it can be
+# retrieved online at http://www.erlang.org/.
+#
+# Software distributed under the License is distributed on an "AS IS"
+# basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+# the License for the specific language governing rights and limitations
+# under the License.
+#
+# %CopyrightEnd%
+#
+
+def get_thread_name(t):
+ f = gdb.newest_frame();
+ while f:
+ if f.name() == "async_main":
+ return "async";
+ elif f.name() == "erts_sys_main_thread":
+ return "main";
+ elif f.name() == "signal_dispatcher_thread_func":
+ return "signal_dispatcher";
+ elif f.name() == "sys_msg_dispatcher_func":
+ return "sys_msg_dispatcher";
+ elif f.name() == "child_waiter":
+ return "child_waiter";
+ elif f.name() == "sched_thread_func":
+ return "scheduler";
+ elif f.name() == "aux_thread":
+ return "aux";
+ f = f.older();
+ return "unknown";
+
+
+curr_thread = gdb.selected_thread();
+
+for i in gdb.inferiors():
+ gdb.write(" Id Thread Name Frame\n");
+ for t in i.threads():
+ t.switch();
+ if curr_thread == t:
+ gdb.write("*");
+ else:
+ gdb.write(" ");
+ gdb.write("{0:<3} {1:20} {2}\n".format(
+ t.num,get_thread_name(t),
+ gdb.newest_frame().name()));
+
+curr_thread.switch();
diff --git a/erts/etc/unix/run_erl.c b/erts/etc/unix/run_erl.c
index 53c779b1be..b69e31f784 100644
--- a/erts/etc/unix/run_erl.c
+++ b/erts/etc/unix/run_erl.c
@@ -1142,6 +1142,14 @@ static void daemon_init(void)
sf_close(i);
}
+ /* Necessary on some platforms */
+
+ open("/dev/null", O_RDONLY); /* Order is important! */
+ open("/dev/null", O_WRONLY);
+ open("/dev/null", O_WRONLY);
+
+ errno = 0; /* if set by open */
+
OPEN_SYSLOG();
run_daemon = 1;
}
diff --git a/erts/etc/unix/to_erl.c b/erts/etc/unix/to_erl.c
index 0f27b64811..b9e397cbf2 100644
--- a/erts/etc/unix/to_erl.c
+++ b/erts/etc/unix/to_erl.c
@@ -339,7 +339,7 @@ int main(int argc, char **argv)
tty_smode.c_cc[VTIME] =0;/* Note that VTIME is the same as VEOL! */
tty_smode.c_cc[VINTR] =3;
- tcsetattr(0, TCSANOW, &tty_smode);
+ tcsetattr(0, TCSADRAIN, &tty_smode);
#ifdef DEBUG
show_terminal_settings(&tty_smode);
@@ -484,7 +484,7 @@ int main(int argc, char **argv)
* Reset terminal characterstics
* XXX
*/
- tcsetattr(0, TCSANOW, &tty_rmode);
+ tcsetattr(0, TCSADRAIN, &tty_rmode);
return 0;
}
diff --git a/erts/include/internal/ethread.h b/erts/include/internal/ethread.h
index 407097d4b1..38b8e9e9b6 100644
--- a/erts/include/internal/ethread.h
+++ b/erts/include/internal/ethread.h
@@ -361,6 +361,10 @@ extern ethr_runtime_t ethr_runtime__;
# endif
#endif /* !ETHR_DISABLE_NATIVE_IMPLS */
+#if !defined(ETHR_HAVE_NATIVE_ATOMIC32) && !defined(ETHR_HAVE_NATIVE_ATOMIC64) && !defined(ETHR_DISABLE_NATIVE_IMPLS) && defined(ETHR_SMP_REQUIRE_NATIVE_IMPLS)
+#error "No native ethread implementation found. If you want to use fallbacks you have to disable native ethread support with configure."
+#endif
+
#include "ethr_atomics.h" /* The atomics API */
#if defined(__GNUC__)
diff --git a/erts/include/internal/gcc/ethread.h b/erts/include/internal/gcc/ethread.h
index fcfdc39441..365a3535cf 100644
--- a/erts/include/internal/gcc/ethread.h
+++ b/erts/include/internal/gcc/ethread.h
@@ -25,6 +25,9 @@
#ifndef ETHREAD_GCC_H__
#define ETHREAD_GCC_H__
+#if defined(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP32) \
+ || defined(ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP64)
+
#ifndef ETHR_MEMBAR
# include "ethr_membar.h"
#endif
@@ -46,3 +49,5 @@
#endif
#endif
+
+#endif
diff --git a/erts/preloaded/.gitignore b/erts/preloaded/.gitignore
new file mode 100644
index 0000000000..40e4c68638
--- /dev/null
+++ b/erts/preloaded/.gitignore
@@ -0,0 +1,2 @@
+ebin/erts.app
+src/prim_eval.abstr
diff --git a/erts/preloaded/Makefile b/erts/preloaded/Makefile
index 4235a7fe57..31fdeb96c5 100644
--- a/erts/preloaded/Makefile
+++ b/erts/preloaded/Makefile
@@ -18,7 +18,6 @@
#
include $(ERL_TOP)/make/target.mk
-
SUB_DIRECTORIES = src
include $(ERL_TOP)/make/otp_subdir.mk
diff --git a/erts/preloaded/src/Makefile b/erts/preloaded/src/Makefile
index 7a7b7fb644..c1580b1495 100644
--- a/erts/preloaded/src/Makefile
+++ b/erts/preloaded/src/Makefile
@@ -55,9 +55,15 @@ ERL_FILES= $(PRE_LOADED_ERL_MODULES:%=%.erl)
BEAM_FILES= $(PRE_LOADED_BEAM_MODULES:%=%.S)
STUBS_FILES= $(PRE_LOADED_BEAM_MODULES:%=%.erl)
-TARGET_FILES = $(PRE_LOADED_MODULES:%=$(EBIN)/%.$(EMULATOR))
+TARGET_FILES = $(PRE_LOADED_MODULES:%=$(EBIN)/%.$(EMULATOR)) \
+ $(APP_TARGET)
STATIC_TARGET_FILES = $(PRE_LOADED_MODULES:%=$(STATIC_EBIN)/%.$(EMULATOR))
+APP_FILE= erts.app
+APP_SRC= $(APP_FILE).src
+APP_TARGET= $(STATIC_EBIN)/$(APP_FILE)
+
+
KERNEL_SRC=$(ERL_TOP)/lib/kernel/src
KERNEL_INCLUDE=$(ERL_TOP)/lib/kernel/include
STDLIB_INCLUDE=$(ERL_TOP)/lib/stdlib/include
@@ -72,14 +78,17 @@ clean:
copy:
cp *.beam $(STATIC_EBIN)
+$(APP_TARGET): $(APP_SRC) $(ERL_TOP)/erts/vsn.mk
+ $(vsn_verbose)sed -e 's;%VSN%;$(VSN);' $< > $@
+
include $(ERL_TOP)/make/otp_release_targets.mk
-release_spec:
+release_spec: $(APP_TARGET)
$(INSTALL_DIR) "$(RELSYSDIR)/src"
$(INSTALL_DATA) $(ERL_FILES) $(BEAM_FILES) $(STUBS_FILES) "$(RELSYSDIR)/src"
$(INSTALL_DIR) "$(RELSYSDIR)/ebin"
- $(INSTALL_DATA) $(STATIC_TARGET_FILES) "$(RELSYSDIR)/ebin"
+ $(INSTALL_DATA) $(STATIC_TARGET_FILES) $(APP_TARGET) "$(RELSYSDIR)/ebin"
release_docs_spec:
diff --git a/erts/preloaded/src/erts.app.src b/erts/preloaded/src/erts.app.src
new file mode 100644
index 0000000000..fd3e8cb692
--- /dev/null
+++ b/erts/preloaded/src/erts.app.src
@@ -0,0 +1,41 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+{application, erts, [
+ {description, "ERTS CXC 138 10"},
+ {vsn, "%VSN%"},
+ {modules, [
+ %% preloaded
+ erlang,
+ erl_prim_loader,
+ erts_internal,
+ init,
+ otp_ring0,
+ prim_eval,
+ prim_file,
+ prim_inet,
+ prim_zip,
+ zlib
+ ]},
+ {registered, []},
+ {applications, []},
+ {env, []},
+ {mod, {erts, []}}
+ ]}.
+
+%% vim: ft=erlang
diff --git a/erts/test/Makefile b/erts/test/Makefile
index 6b409e2f1b..74a5bb1ccc 100644
--- a/erts/test/Makefile
+++ b/erts/test/Makefile
@@ -79,7 +79,7 @@ release_spec:
release_tests_spec: opt
$(INSTALL_DIR) "$(RELSYSDIR)"
- $(INSTALL_DATA) system.spec system.dynspec \
+ $(INSTALL_DATA) system.spec system.dynspec system_smoke.spec \
$(ERL_FILES) $(TARGET_FILES) "$(RELSYSDIR)"
chmod -R u+w "$(RELSYSDIR)"
tar cf - *_SUITE_data utils | (cd "$(RELSYSDIR)"; tar xf -)
diff --git a/erts/test/erlc_SUITE.erl b/erts/test/erlc_SUITE.erl
index ab774dbc4f..ed7a43c7e7 100644
--- a/erts/test/erlc_SUITE.erl
+++ b/erts/test/erlc_SUITE.erl
@@ -23,7 +23,8 @@
-export([all/0, suite/0,groups/0,init_per_suite/1, end_per_suite/1,
init_per_group/2,end_per_group/2, compile_erl/1,
compile_yecc/1, compile_script/1,
- compile_mib/1, good_citizen/1, deep_cwd/1, arg_overflow/1]).
+ compile_mib/1, good_citizen/1, deep_cwd/1, arg_overflow/1,
+ make_dep_options/1]).
-include_lib("test_server/include/test_server.hrl").
@@ -31,7 +32,7 @@ suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
[compile_erl, compile_yecc, compile_script, compile_mib,
- good_citizen, deep_cwd, arg_overflow].
+ good_citizen, deep_cwd, arg_overflow, make_dep_options].
groups() ->
[].
@@ -255,13 +256,89 @@ erlc() ->
Erlc ->
"\"" ++ Erlc ++ "\""
end.
-
+
+make_dep_options(Config) ->
+ {SrcDir,OutDir,Cmd} = get_cmd(Config),
+ FileName = filename:join(SrcDir, "erl_test_ok.erl"),
+
+
+ DepRE = ["/erl_test_ok[.]beam: \\\\$",
+ "/system_test/erlc_SUITE_data/src/erl_test_ok[.]erl \\\\$",
+ "/system_test/erlc_SUITE_data/include/erl_test[.]hrl$",
+ "_OK_"],
+
+ DepRETarget =
+ ["^target: \\\\$",
+ "/system_test/erlc_SUITE_data/src/erl_test_ok[.]erl \\\\$",
+ "/system_test/erlc_SUITE_data/include/erl_test[.]hrl$",
+ "_OK_"],
+
+ DepREMP =
+ ["/erl_test_ok[.]beam: \\\\$",
+ "/system_test/erlc_SUITE_data/src/erl_test_ok[.]erl \\\\$",
+ "/system_test/erlc_SUITE_data/include/erl_test[.]hrl$",
+ [],
+ "/system_test/erlc_SUITE_data/include/erl_test.hrl:$",
+ "_OK_"],
+
+ DepREMissing =
+ ["/erl_test_missing_header[.]beam: \\\\$",
+ "/system_test/erlc_SUITE_data/src/erl_test_missing_header[.]erl \\\\$",
+ "/system_test/erlc_SUITE_data/include/erl_test[.]hrl \\\\$",
+ "missing.hrl$",
+ "_OK_"],
+
+ %% Test plain -M
+ run(Config, Cmd, FileName, "-M", DepRE),
+
+ %% Test -MF File
+ DepFile = filename:join(OutDir, "my.deps"),
+ run(Config, Cmd, FileName, "-MF "++DepFile, ["_OK_"]),
+ {ok,MFBin} = file:read_file(DepFile),
+ verify_result(binary_to_list(MFBin)++["_OK_"], DepRE),
+
+ %% Test -MD
+ run(Config, Cmd, FileName, "-MD", ["_OK_"]),
+ MDFile = filename:join(OutDir, "erl_test_ok.Pbeam"),
+ {ok,MFBin} = file:read_file(MDFile),
+
+ %% Test -M -MT Target
+ run(Config, Cmd, FileName, "-M -MT target", DepRETarget),
+
+ %% Test -MF File -MT Target
+ TargetDepFile = filename:join(OutDir, "target.deps"),
+ run(Config, Cmd, FileName, "-MF "++TargetDepFile++" -MT target",
+ ["_OK_"]),
+ {ok,TargetBin} = file:read_file(TargetDepFile),
+ verify_result(binary_to_list(TargetBin)++["_OK_"], DepRETarget),
+
+ %% Test -MD -MT Target
+ run(Config, Cmd, FileName, "-MD -MT target", ["_OK_"]),
+ TargetMDFile = filename:join(OutDir, "erl_test_ok.Pbeam"),
+ {ok,TargetBin} = file:read_file(TargetMDFile),
+
+ %% Test -M -MQ Target. (Note: Passing a $ on the command line
+ %% portably for Unix and Windows is tricky, so we will just test
+ %% that MQ works at all.)
+ run(Config, Cmd, FileName, "-M -MQ target", DepRETarget),
+
+ %% Test -M -MP
+ run(Config, Cmd, FileName, "-M -MP", DepREMP),
+
+ %% Test -M -MG
+ MissingHeader = filename:join(SrcDir, "erl_test_missing_header.erl"),
+ run(Config, Cmd, MissingHeader, "-M -MG", DepREMissing),
+ ok.
+
%% Runs a command.
run(Config, Cmd0, Name, Options, Expect) ->
Cmd = Cmd0 ++ " " ++ Options ++ " " ++ Name,
io:format("~s", [Cmd]),
Result = run_command(Config, Cmd),
+ verify_result(Result, Expect).
+
+verify_result(Result, Expect) ->
Messages = split(Result, [], []),
io:format("Result: ~p", [Messages]),
io:format("Expected: ~p", [Expect]),
diff --git a/erts/test/erlc_SUITE_data/src/erl_test_missing_header.erl b/erts/test/erlc_SUITE_data/src/erl_test_missing_header.erl
new file mode 100644
index 0000000000..4d6c42c803
--- /dev/null
+++ b/erts/test/erlc_SUITE_data/src/erl_test_missing_header.erl
@@ -0,0 +1,22 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+-module(erl_test_missing_header).
+-include("erl_test.hrl").
+-include("missing.hrl").
diff --git a/erts/test/system_smoke.spec b/erts/test/system_smoke.spec
new file mode 100644
index 0000000000..933d1ba22d
--- /dev/null
+++ b/erts/test/system_smoke.spec
@@ -0,0 +1,3 @@
+{suites,"../system_test",[ethread_SUITE]}.
+{cases,"../system_test",otp_SUITE,[undefined_functions]}.
+{skip_cases,"../system_test",ethread_SUITE,[max_threads],"Skip"}.
diff --git a/lib/common_test/src/ct_logs.erl b/lib/common_test/src/ct_logs.erl
index f5355bfefe..bd37b690b6 100644
--- a/lib/common_test/src/ct_logs.erl
+++ b/lib/common_test/src/ct_logs.erl
@@ -446,6 +446,8 @@ tc_print(Category,Importance,Format,Args) ->
ct_util:get_verbosity('$unspecified');
{error,bad_invocation} ->
?MAX_VERBOSITY;
+ {error,_Failure} ->
+ ?MAX_VERBOSITY;
Val ->
Val
end,
@@ -690,14 +692,15 @@ logger_loop(State) ->
false ->
%% Group leader is dead, so write to the
%% CtLog or unexpected_io log instead
- unexpected_io(Pid,Category,List,State),
+ unexpected_io(Pid,Category,Importance,
+ List,State),
logger_loop(State)
end;
{ct_log,_Fd,TCGLs} ->
%% If category is ct_internal then write
%% to ct_log, else write to unexpected_io
%% log
- unexpected_io(Pid,Category,List,State),
+ unexpected_io(Pid,Category,Importance,List,State),
logger_loop(State#logger_state{
tc_groupleaders = TCGLs})
end;
@@ -798,7 +801,7 @@ print_to_log(sync, FromPid, Category, TCGL, List, State) ->
IoFun = create_io_fun(FromPid, State),
io:format(TCGL,"~ts", [lists:foldl(IoFun, [], List)]);
true ->
- unexpected_io(FromPid,Category,List,State)
+ unexpected_io(FromPid,Category,?MAX_IMPORTANCE,List,State)
end,
State;
@@ -814,7 +817,8 @@ print_to_log(async, FromPid, Category, TCGL, List, State) ->
end;
true ->
fun() ->
- unexpected_io(FromPid,Category,List,State)
+ unexpected_io(FromPid,Category,?MAX_IMPORTANCE,
+ List,State)
end
end,
case State#logger_state.async_print_jobs of
@@ -3066,10 +3070,20 @@ html_encoding(latin1) ->
html_encoding(utf8) ->
"utf-8".
-unexpected_io(Pid,ct_internal,List,#logger_state{ct_log_fd=Fd}=State) ->
+unexpected_io(Pid,ct_internal,_Importance,List,State) ->
IoFun = create_io_fun(Pid,State),
- io:format(Fd, "~ts", [lists:foldl(IoFun, [], List)]);
-unexpected_io(Pid,_Category,List,State) ->
+ io:format(State#logger_state.ct_log_fd, "~ts",
+ [lists:foldl(IoFun, [], List)]);
+unexpected_io(Pid,Category,Importance,List,State) ->
IoFun = create_io_fun(Pid,State),
Data = io_lib:format("~ts", [lists:foldl(IoFun, [], List)]),
- test_server_io:print_unexpected(Data).
+ %% if unexpected io comes in during startup or shutdown, test_server
+ %% might not be running - if so (noproc exit), simply print to
+ %% stdout instead (will result in double printouts when pal is used)
+ try test_server_io:print_unexpected(Data) of
+ _ ->
+ ok
+ catch
+ _:{noproc,_} -> tc_print(Category,Importance,Data,[]);
+ _:Reason -> exit(Reason)
+ end.
diff --git a/lib/common_test/src/ct_util.erl b/lib/common_test/src/ct_util.erl
index 68e76c2396..abda87c2cd 100644
--- a/lib/common_test/src/ct_util.erl
+++ b/lib/common_test/src/ct_util.erl
@@ -286,14 +286,23 @@ get_start_dir() ->
%% handle verbosity outside ct_util_server (let the client read
%% the verbosity table) to avoid possible deadlock situations
set_verbosity(Elem = {_Category,_Level}) ->
- ets:insert(?verbosity_table, Elem),
- ok.
+ try ets:insert(?verbosity_table, Elem) of
+ _ ->
+ ok
+ catch
+ _:Reason ->
+ {error,Reason}
+ end.
+
get_verbosity(Category) ->
- case ets:lookup(?verbosity_table, Category) of
+ try ets:lookup(?verbosity_table, Category) of
[{Category,Level}] ->
Level;
_ ->
undefined
+ catch
+ _:Reason ->
+ {error,Reason}
end.
loop(Mode,TestData,StartDir) ->
diff --git a/lib/common_test/test/ct_test_support.erl b/lib/common_test/test/ct_test_support.erl
index 6bcac12326..4132995bf6 100644
--- a/lib/common_test/test/ct_test_support.erl
+++ b/lib/common_test/test/ct_test_support.erl
@@ -36,6 +36,8 @@
verify_events/3, verify_events/4, reformat/2, log_events/4,
join_abs_dirs/2]).
+-export([start_slave/3, slave_stop/1]).
+
-export([ct_test_halt/1]).
-include_lib("kernel/include/file.hrl").
@@ -66,10 +68,14 @@ init_per_suite(Config, Level) ->
start_slave(Config, Level).
-start_slave(Config,Level) ->
+start_slave(Config, Level) ->
+ start_slave(ct, Config, Level).
+
+start_slave(NodeName, Config, Level) ->
[_,Host] = string:tokens(atom_to_list(node()), "@"),
- test_server:format(0, "Trying to start ~s~n", ["ct@"++Host]),
- case slave:start(Host, ct, []) of
+ test_server:format(0, "Trying to start ~s~n",
+ [atom_to_list(NodeName)++"@"++Host]),
+ case slave:start(Host, NodeName, []) of
{error,Reason} ->
test_server:fail(Reason);
{ok,CTNode} ->
@@ -77,7 +83,7 @@ start_slave(Config,Level) ->
IsCover = test_server:is_cover(),
if IsCover ->
cover:start(CTNode);
- true->
+ true ->
ok
end,
diff --git a/lib/common_test/test/ct_verbosity_SUITE.erl b/lib/common_test/test/ct_verbosity_SUITE.erl
index 32488b1db9..1aa71953ec 100644
--- a/lib/common_test/test/ct_verbosity_SUITE.erl
+++ b/lib/common_test/test/ct_verbosity_SUITE.erl
@@ -53,9 +53,19 @@ init_per_suite(Config) ->
end_per_suite(Config) ->
ct_test_support:end_per_suite(Config).
+init_per_testcase(no_crashing, Config) ->
+ Opts = ct_test_support:start_slave(ctX, Config, 50),
+ XNode = proplists:get_value(ct_node, Opts),
+ ct:pal("Node ~p started!", [XNode]),
+ [{xnode,XNode} | Config];
init_per_testcase(TestCase, Config) ->
ct_test_support:init_per_testcase(TestCase, Config).
+end_per_testcase(no_crashing, Config) ->
+ XNode = proplists:get_value(xnode, Config),
+ ct_test_support:slave_stop(XNode),
+ ct:pal("Node ~p stopped!", [XNode]),
+ ok;
end_per_testcase(TestCase, Config) ->
ct_test_support:end_per_testcase(TestCase, Config).
@@ -72,7 +82,8 @@ all() ->
combine_categories,
testspec_only,
merge_with_testspec,
- possible_deadlock
+ possible_deadlock,
+ no_crashing
].
%%--------------------------------------------------------------------
@@ -189,6 +200,19 @@ possible_deadlock(Config) ->
%%%-----------------------------------------------------------------
+%%%
+no_crashing(Config) ->
+ XNode = proplists:get_value(xnode, Config),
+ ok = rpc:call(XNode, ct, print, ["hello",[]]),
+ ok = rpc:call(XNode, ct, pal, ["hello",[]]),
+ ok = rpc:call(XNode, ct, log, ["hello",[]]),
+ Data = io_lib:format("hello", []),
+ {badrpc,{'EXIT',{noproc,_}}} =
+ (catch rpc:call(XNode, test_server_io, print_unexpected, [Data])),
+ ok.
+
+
+%%%-----------------------------------------------------------------
%%% HELP FUNCTIONS
%%%-----------------------------------------------------------------
diff --git a/lib/compiler/src/beam_bool.erl b/lib/compiler/src/beam_bool.erl
index cf5455dfde..124abd13c1 100644
--- a/lib/compiler/src/beam_bool.erl
+++ b/lib/compiler/src/beam_bool.erl
@@ -425,6 +425,9 @@ bopt_tree([], Forest, Pre) ->
safe_bool_op(N, Ar) ->
erl_internal:new_type_test(N, Ar) orelse erl_internal:comp_op(N, Ar).
+bopt_bool_args([V0,V0], Forest0) ->
+ {V,Forest} = bopt_bool_arg(V0, Forest0),
+ {[V,V],Forest};
bopt_bool_args(As, Forest) ->
mapfoldl(fun bopt_bool_arg/2, Forest, As).
diff --git a/lib/compiler/src/cerl_inline.erl b/lib/compiler/src/cerl_inline.erl
index 2e7554c1ff..c6de63c69f 100644
--- a/lib/compiler/src/cerl_inline.erl
+++ b/lib/compiler/src/cerl_inline.erl
@@ -52,7 +52,7 @@
clause_pats/1, clause_vars/1, concrete/1, cons_hd/1,
cons_tl/1, data_arity/1, data_es/1, data_type/1,
fun_body/1, fun_vars/1, get_ann/1, int_val/1,
- is_c_atom/1, is_c_cons/1, is_c_fun/1, is_c_int/1,
+ is_c_atom/1, is_c_cons/1, is_c_fname/1, is_c_int/1,
is_c_list/1, is_c_seq/1, is_c_tuple/1, is_c_var/1,
is_data/1, is_literal/1, is_literal_term/1, let_arg/1,
let_body/1, let_vars/1, letrec_body/1, letrec_defs/1,
@@ -1578,7 +1578,7 @@ make_let_binding_1(R, E, S) ->
%% completely.
copy(R, Opnd, E, Ctxt, Env, S) ->
- case is_c_var(E) of
+ case is_c_var(E) andalso not is_c_fname(E) of
true ->
%% The operand reduces to another variable - get its
%% ref-structure and attempt to propagate further.
@@ -1628,12 +1628,12 @@ copy_var(R, Ctxt, Env, S) ->
end.
copy_1(R, Opnd, E, Ctxt, Env, S) ->
- %% Fun-expression (lambdas) are a bit special; they are copyable,
- %% but should preferably not be duplicated, so they should not be
- %% copy propagated except into application contexts, where they can
- %% be inlined.
- case is_c_fun(E) of
- true ->
+ case type(E) of
+ 'fun' ->
+ %% Fun-expression (lambdas) are a bit special; they are copyable,
+ %% but should preferably not be duplicated, so they should not be
+ %% copy propagated except into application contexts, where they can
+ %% be inlined.
case Ctxt of
#app{} ->
%% First test if the operand is "outer-pending"; if
@@ -1649,7 +1649,28 @@ copy_1(R, Opnd, E, Ctxt, Env, S) ->
_ ->
residualize_var(R, S)
end;
- false ->
+ var ->
+ %% Variables at this point only refer to local functions; they are
+ %% copyable but can't appear in guards, so they should not be
+ %% copy propagated except into application contexts, where they can
+ %% be inlined.
+ case Ctxt of
+ #app{} ->
+ %% First test if the operand is "outer-pending"; if
+ %% so, don't inline.
+ case st__test_outer_pending(Opnd#opnd.loc, S) of
+ false ->
+ R1 = env__get(var_name(E), Opnd#opnd.env),
+ copy_var(R1, Ctxt, Env, S);
+ true ->
+ %% Cyclic reference forced inlining to stop
+ %% (avoiding infinite unfolding).
+ residualize_var(R, S)
+ end;
+ _ ->
+ residualize_var(R, S)
+ end;
+ _ ->
%% We have no other cases to handle here
residualize_var(R, S)
end.
diff --git a/lib/compiler/src/v3_core.erl b/lib/compiler/src/v3_core.erl
index d6fdcb2b21..1195937d91 100644
--- a/lib/compiler/src/v3_core.erl
+++ b/lib/compiler/src/v3_core.erl
@@ -956,7 +956,8 @@ lc_tq(Line, E, [Fil0|Qs0], Mc, St0) ->
args=[],
clauses=[#iclause{anno=LAnno,pats=[],
guard=Gs,body=Lps ++ [Lc]}],
- fc=#iclause{anno=LAnno,pats=[],guard=[],body=[Mc]}},
+ fc=#iclause{anno=LAnno#a{anno=[compiler_generated|LA]},
+ pats=[],guard=[],body=[Mc]}},
[],St2};
false ->
{Lc,Lps,St1} = lc_tq(Line, E, Qs0, Mc, St0),
@@ -1101,7 +1102,8 @@ bc_tq1(Line, E, [Fil0|Qs0], AccVar, St0) ->
clauses=[#iclause{anno=LAnno,
pats=[],
guard=Gs,body=Bps ++ [Bc]}],
- fc=#iclause{anno=LAnno,pats=[],guard=[],body=[AccVar]}},
+ fc=#iclause{anno=LAnno#a{anno=[compiler_generated|LA]},
+ pats=[],guard=[],body=[AccVar]}},
[],St};
false ->
{Bc,Bps,St1} = bc_tq1(Line, E, Qs0, AccVar, St0),
diff --git a/lib/compiler/test/guard_SUITE.erl b/lib/compiler/test/guard_SUITE.erl
index 5656d23090..a0a9bb7ddd 100644
--- a/lib/compiler/test/guard_SUITE.erl
+++ b/lib/compiler/test/guard_SUITE.erl
@@ -813,8 +813,16 @@ and_guard(Config) when is_list(Config) ->
?line ok = relprod({'Set',a,b}, {'Set',a,b}),
+ ok = and_same_var(42),
+ {'EXIT',{if_clause,_}} = (catch and_same_var(x)),
ok.
+and_same_var(V) ->
+ B = is_integer(V),
+ if
+ B or B -> ok
+ end.
+
relprod(R1, R2) when (erlang:size(R1) =:= 3) and (erlang:element(1,R1) =:= 'Set'), (erlang:size(R2) =:= 3) and (erlang:element(1,R2) =:= 'Set') ->
ok.
diff --git a/lib/compiler/test/inline_SUITE.erl b/lib/compiler/test/inline_SUITE.erl
index d9b92766e4..e5c2d4f73a 100644
--- a/lib/compiler/test/inline_SUITE.erl
+++ b/lib/compiler/test/inline_SUITE.erl
@@ -36,7 +36,7 @@ all() ->
groups() ->
[{p,test_lib:parallel(),
- [attribute,bsdecode,bsdes,barnes2,decode1,smith,
+ [attribute,bsdecode,bsdes,barnes2,decode1,smith,fname,
itracer,pseudoknot,comma_splitter,lists,really_inlined,otp_7223,
coverage]}].
@@ -84,6 +84,7 @@ attribute(Config) when is_list(Config) ->
?comp(itracer).
?comp(pseudoknot).
?comp(comma_splitter).
+?comp(fname).
try_inline(Mod, Config) ->
Node = ?config(testing_node, Config),
diff --git a/lib/compiler/test/inline_SUITE_data/fname.erl b/lib/compiler/test/inline_SUITE_data/fname.erl
new file mode 100644
index 0000000000..7ad4446bf3
--- /dev/null
+++ b/lib/compiler/test/inline_SUITE_data/fname.erl
@@ -0,0 +1,29 @@
+%%
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+-module(fname).
+-export([?MODULE/0]).
+
+?MODULE() ->
+ F = fun bar/1,
+ G = lists:last([(fun (X) when F =:= X -> X end)]),
+ F = G(F),
+ ok.
+
+bar(X) ->
+ X.
diff --git a/lib/compiler/test/warnings_SUITE.erl b/lib/compiler/test/warnings_SUITE.erl
index f00bfe663b..810b2b48c9 100644
--- a/lib/compiler/test/warnings_SUITE.erl
+++ b/lib/compiler/test/warnings_SUITE.erl
@@ -37,7 +37,7 @@
-export([pattern/1,pattern2/1,pattern3/1,pattern4/1,
guard/1,bad_arith/1,bool_cases/1,bad_apply/1,
- files/1,effect/1,bin_opt_info/1,bin_construction/1]).
+ files/1,effect/1,bin_opt_info/1,bin_construction/1, comprehensions/1]).
% Default timetrap timeout (set in init_per_testcase).
-define(default_timeout, ?t:minutes(2)).
@@ -61,7 +61,7 @@ groups() ->
[{p,test_lib:parallel(),
[pattern,pattern2,pattern3,pattern4,guard,
bad_arith,bool_cases,bad_apply,files,effect,
- bin_opt_info,bin_construction]}].
+ bin_opt_info,bin_construction,comprehensions]}].
init_per_suite(Config) ->
Config.
@@ -536,6 +536,16 @@ bin_construction(Config) when is_list(Config) ->
ok.
+comprehensions(Config) when is_list(Config) ->
+ Ts = [{tautologic_guards,
+ <<"
+ f() -> [ true || true ].
+ g() -> << <<1>> || true >>.
+ ">>,
+ [], []}],
+ run(Config, Ts),
+ ok.
+
%%%
%%% End of test cases.
%%%
diff --git a/lib/diameter/doc/src/diameter_dict.xml b/lib/diameter/doc/src/diameter_dict.xml
index 4fcde495b3..8bf4a14240 100644
--- a/lib/diameter/doc/src/diameter_dict.xml
+++ b/lib/diameter/doc/src/diameter_dict.xml
@@ -609,7 +609,9 @@ UTF8String() = [integer()]
<p>
List elements are the UTF-8 encodings of the individual characters
in the string.
-Invalid codepoints will result in encode/decode failure.</p>
+Invalid codepoints will result in encode/decode failure.
+On encode, a UTF8String() can be specified as a binary, or as a nested
+list of binaries and codepoints.</p>
<marker id="DiameterIdentity"/>
<pre>
diff --git a/lib/diameter/src/base/diameter_peer_fsm.erl b/lib/diameter/src/base/diameter_peer_fsm.erl
index 4e55864168..2b99ecc59c 100644
--- a/lib/diameter/src/base/diameter_peer_fsm.erl
+++ b/lib/diameter/src/base/diameter_peer_fsm.erl
@@ -28,7 +28,8 @@
-behaviour(gen_server).
%% Interface towards diameter_watchdog.
--export([start/3]).
+-export([start/3,
+ result_code/2]).
%% gen_server callbacks
-export([init/1,
@@ -62,7 +63,6 @@
%% Keys in process dictionary.
-define(CB_KEY, cb). %% capabilities callback
-define(DPR_KEY, dpr). %% disconnect callback
--define(DWA_KEY, dwa). %% outgoing DWA
-define(REF_KEY, ref). %% transport_ref()
-define(Q_KEY, q). %% transport start queue
-define(START_KEY, start). %% start of connected transport
@@ -177,14 +177,9 @@ init(T) ->
proc_lib:init_ack({ok, self()}),
gen_server:enter_loop(?MODULE, [], i(T)).
-i({Ack, WPid, {M, Ref} = T, Opts, {Mask,
- Nodes,
- Dict0,
- #diameter_service{capabilities = LCaps}
- = Svc}}) ->
+i({Ack, WPid, {M, Ref} = T, Opts, {Mask, Nodes, Dict0, Svc}}) ->
erlang:monitor(process, WPid),
wait(Ack, WPid),
- putr(?DWA_KEY, dwa(LCaps)),
diameter_stats:reg(Ref),
{[Cs,Ds], Rest} = proplists:split(Opts, [capabilities_cb, disconnect_cb]),
putr(?CB_KEY, {Ref, [F || {_,F} <- Cs]}),
@@ -612,9 +607,7 @@ rcv(Name, _, #state{state = PS})
Name == 'CEA' ->
{stop, {Name, PS}};
-rcv(N, Pkt, S)
- when N == 'DWR';
- N == 'DPR' ->
+rcv('DPR' = N, Pkt, S) ->
handle_request(N, Pkt, S);
%% DPA in response to DPR and with the expected identifiers.
@@ -717,8 +710,8 @@ build_answer(Type,
errors = Es}
= Pkt,
S) ->
- RC = rc(H, Es),
- {answer(Type, RC, Es, S), post(Type, RC, Pkt, S)}.
+ {RC, FailedAVP} = result_code(H, Es),
+ {answer(Type, RC, FailedAVP, S), post(Type, RC, Pkt, S)}.
inband_security([]) ->
?NO_INBAND_SECURITY;
@@ -734,7 +727,7 @@ cea(CEA, RC, Dict0) ->
post('CER' = T, RC, Pkt, S) ->
{T, caps(S), {RC, Pkt}};
-post(_, _, _, _) ->
+post('DPR', _, _, _) ->
ok.
rejected({capabilities_cb, _F, Reason}, T, S) ->
@@ -743,13 +736,10 @@ rejected({capabilities_cb, _F, Reason}, T, S) ->
rejected(discard, T, _) ->
close(T);
rejected({N, Es}, T, S) ->
- {answer('CER', N, Es, S), T};
+ {answer('CER', N, failed_avp(N, Es), S), T};
rejected(N, T, S) ->
rejected({N, []}, T, S).
-answer(Type, RC, Es, S) ->
- set(answer(Type, RC, S), failed_avp(RC, Es)).
-
failed_avp(RC, [{RC, Avp} | _]) ->
[{'Failed-AVP', [{'AVP', [Avp]}]}];
failed_avp(RC, [_ | Es]) ->
@@ -757,6 +747,9 @@ failed_avp(RC, [_ | Es]) ->
failed_avp(_, [] = No) ->
No.
+answer(Type, RC, FailedAVP, S) ->
+ set(answer(Type, RC, S), FailedAVP).
+
answer(Type, RC, S) ->
answer_message(answer(Type, S), RC).
@@ -784,29 +777,29 @@ set(['answer-message' | _] = Ans, FailedAvp) ->
set([_|_] = Ans, FailedAvp) ->
Ans ++ FailedAvp.
-%% rc/2
+%% result_code/2
-rc(#diameter_header{is_error = true}, _) ->
- 3008; %% DIAMETER_INVALID_HDR_BITS
+result_code(#diameter_header{is_error = true}, _) ->
+ {3008, []}; %% DIAMETER_INVALID_HDR_BITS
-rc(_, [Bs|_])
+result_code(_, [Bs|_])
when is_bitstring(Bs) -> %% from old code
- 3009; %% DIAMETER_INVALID_HDR_BITS
+ {3009, []}; %% DIAMETER_INVALID_HDR_BITS
-rc(#diameter_header{version = ?DIAMETER_VERSION}, Es) ->
+result_code(#diameter_header{version = ?DIAMETER_VERSION}, Es) ->
rc(Es);
-rc(_, _) ->
- 5011. %% DIAMETER_UNSUPPORTED_VERSION
+result_code(_, _) ->
+ {5011, []}. %% DIAMETER_UNSUPPORTED_VERSION
%% rc/1
rc([]) ->
- 2001; %% DIAMETER_SUCCESS
-rc([{RC,_}|_]) ->
- RC;
+ {2001, []}; %% DIAMETER_SUCCESS
+rc([{RC, _} | _] = Es) ->
+ {RC, failed_avp(RC, Es)};
rc([RC|_]) ->
- RC.
+ {RC, []}.
%% DIAMETER_INVALID_HDR_BITS 3008
%% A request was received whose bits in the Diameter header were
@@ -832,9 +825,6 @@ rc([RC|_]) ->
%% answer/2
-answer('DWR', _) ->
- getr(?DWA_KEY);
-
answer(Name, #state{service = #diameter_service{capabilities = Caps}}) ->
a(Name, Caps).
@@ -1019,15 +1009,6 @@ report({M, _, _, _, _} = T)
report(_) ->
ok.
-%% dwa/1
-
-dwa(#diameter_caps{origin_host = OH,
- origin_realm = OR,
- origin_state_id = OSI}) ->
- ['DWA', {'Origin-Host', OH},
- {'Origin-Realm', OR},
- {'Origin-State-Id', OSI}].
-
%% dpr/2
%%
%% The RFC isn't clear on whether DPR should be send in a non-Open
diff --git a/lib/diameter/src/base/diameter_types.erl b/lib/diameter/src/base/diameter_types.erl
index 9ae289034c..8c07e84777 100644
--- a/lib/diameter/src/base/diameter_types.erl
+++ b/lib/diameter/src/base/diameter_types.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 2010-2011. All Rights Reserved.
+%% Copyright Ericsson AB 2010-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -250,13 +250,10 @@
'Address'(encode, zero) ->
<<0:48>>;
-'Address'(decode, <<1:16, B/binary>>)
- when size(B) == 4 ->
- list_to_tuple(binary_to_list(B));
-
-'Address'(decode, <<2:16, B/binary>>)
- when size(B) == 16 ->
- list_to_tuple(v6dec(B, []));
+'Address'(decode, <<A:16, B/binary>>)
+ when 1 == A, 4 == size(B);
+ 2 == A, 16 == size(B) ->
+ list_to_tuple([N || <<N:A/unit:8>> <= B]);
'Address'(decode, <<A:16, _/binary>> = B)
when 1 == A;
@@ -264,30 +261,10 @@
?INVALID_LENGTH(B);
'Address'(encode, T) ->
- ipenc(diameter_lib:ipaddr(T)).
-
-ipenc(T)
- when is_tuple(T), size(T) == 4 ->
- B = list_to_binary(tuple_to_list(T)),
- <<1:16, B/binary>>;
-
-ipenc(T)
- when is_tuple(T), size(T) == 8 ->
- B = v6enc(lists:reverse(tuple_to_list(T)), <<>>),
- <<2:16, B/binary>>.
-
-v6dec(<<N:16, B/binary>>, Acc) ->
- v6dec(B, [N | Acc]);
-
-v6dec(<<>>, Acc) ->
- lists:reverse(Acc).
-
-v6enc([N | Rest], B)
- when ?UINT(16,N) ->
- v6enc(Rest, <<N:16, B/binary>>);
-
-v6enc([], B) ->
- B.
+ Ns = tuple_to_list(diameter_lib:ipaddr(T)), %% length 4 or 8
+ A = length(Ns) div 4, %% 1 or 2
+ B = << <<N:A/unit:8>> || N <- Ns >>,
+ <<A:16, B/binary>>.
%% --------------------
@@ -354,36 +331,13 @@ v6enc([], B) ->
%% --------------------
'UTF8String'(decode, Bin) ->
- udec(Bin, []);
+ tl([0|_] = unicode:characters_to_list([0, Bin])); %% assert list return
'UTF8String'(encode = M, zero) ->
'UTF8String'(M, []);
'UTF8String'(encode, S) ->
- uenc(S, []).
-
-udec(<<>>, Acc) ->
- lists:reverse(Acc);
-
-udec(<<C/utf8, Rest/binary>>, Acc) ->
- udec(Rest, [C | Acc]).
-
-uenc(E, Acc)
- when E == [];
- E == <<>> ->
- list_to_binary(lists:reverse(Acc));
-
-uenc(<<C/utf8, Rest/binary>>, Acc) ->
- uenc(Rest, [<<C/utf8>> | Acc]);
-
-uenc([[] | Rest], Acc) ->
- uenc(Rest, Acc);
-
-uenc([[H|T] | Rest], Acc) ->
- uenc([H, T | Rest], Acc);
-
-uenc([C | Rest], Acc) ->
- uenc(Rest, [<<C/utf8>> | Acc]).
+ <<_/binary>> = unicode:characters_to_binary(S). %% assert binary return
%% --------------------
diff --git a/lib/diameter/src/base/diameter_watchdog.erl b/lib/diameter/src/base/diameter_watchdog.erl
index 88ccf630e2..7e75801718 100644
--- a/lib/diameter/src/base/diameter_watchdog.erl
+++ b/lib/diameter/src/base/diameter_watchdog.erl
@@ -201,7 +201,7 @@ common_dictionary(Apps) ->
%% means a user won't be able either send of receive
%% messages in the common dictionary: incoming request
%% will be answered with 3007 and outgoing requests cannot
- %% be sent. The dictionary returned here is oly used for
+ %% be sent. The dictionary returned here is only used for
%% messages diameter sends and receives: CER/CEA, DPR/DPA
%% and DWR/DWA.
?BASE
@@ -545,10 +545,15 @@ recv(Name, Pkt, S) ->
%% rcv/3
+rcv('DWR', Pkt, #watchdog{transport = TPid,
+ dictionary = Dict0,
+ sequence = Mask}) ->
+ send(TPid, {send, encode(dwa(Pkt), Mask, Dict0)}),
+ ?LOG(send, 'DWA');
+
rcv(N, _, _)
when N == 'CER';
N == 'CEA';
- N == 'DWR';
N == 'DWA';
N == 'DPR';
N == 'DPA' ->
@@ -642,6 +647,9 @@ rcv('DWA', #watchdog{status = reopen,
%% REOPEN Receive non-DWA Throwaway() REOPEN
+rcv('DWR', #watchdog{status = reopen} = S) ->
+ S; %% ensure DWA: the RFC isn't explicit about answering
+
rcv(_, #watchdog{status = reopen} = S) ->
throwaway(S).
@@ -782,6 +790,13 @@ dwr(#diameter_caps{origin_host = OH,
{'Origin-Realm', OR},
{'Origin-State-Id', OSI}].
+%% dwa/1
+
+dwa(#diameter_packet{header = H, errors = Es}) ->
+ {RC, FailedAVP} = diameter_peer_fsm:result_code(H, Es),
+ ['DWA', {'Result-Code', RC}
+ | tl(getr(dwr)) ++ FailedAVP].
+
%% restrict_nodes/1
restrict_nodes(false) ->
diff --git a/lib/diameter/test/diameter_codec_test.erl b/lib/diameter/test/diameter_codec_test.erl
index 24d4c7665e..295d23912b 100644
--- a/lib/diameter/test/diameter_codec_test.erl
+++ b/lib/diameter/test/diameter_codec_test.erl
@@ -1,3 +1,4 @@
+%% coding: utf-8
%%
%% %CopyrightBegin%
%%
@@ -19,7 +20,9 @@
-module(diameter_codec_test).
--compile(export_all).
+-export([base/0,
+ gen/1,
+ lib/0]).
%%
%% Test encode/decode of dictionary-related modules.
@@ -38,37 +41,34 @@
%% Interface.
base() ->
- [] = run([{?MODULE, [base, T]} || T <- [zero, decode]]).
+ [] = run([[fun base/1, T] || T <- [zero, decode]]).
gen(Mod) ->
Fs = [{Mod, F, []} || F <- [name, id, vendor_id, vendor_name]],
- [] = run(Fs ++ [{?MODULE, [gen, Mod, T]} || T <- [messages,
- command_codes,
- avp_types,
- grouped,
- enum,
- import_avps,
- import_groups,
- import_enums]]).
+ [] = run(Fs ++ [[fun gen/2, Mod, T] || T <- [messages,
+ command_codes,
+ avp_types,
+ grouped,
+ enum,
+ import_avps,
+ import_groups,
+ import_enums]]).
lib() ->
- Vs = {_,_} = values('Address'),
- [] = run([[fun lib/2, N, Vs] || N <- [1,2]]).
+ Vs = {_,_,_} = values('Address'),
+ [] = run([[fun lib/2, N, Vs] || N <- [{1, true}, {3, false}]]).
%% ===========================================================================
%% Internal functions.
-lib(N, {_,_} = T) ->
- B = 1 == N rem 2,
- [] = run([[fun lib/2, A, B] || A <- element(N,T)]);
+lib({N,B}, {_,_,_} = T) ->
+ [] = run([[fun lib/2, A, B] || A <- element(N,T), is_tuple(A)]);
lib(IP, B) ->
- LA = tuple_to_list(IP),
- {SA,Fun} = ip(LA),
- [] = run([[fun lib/4, IP, B, Fun, A] || A <- [IP, SA]]).
+ [] = run([[fun lib/3, IP, B, A] || A <- [IP, ntoa(tuple_to_list(IP))]]).
-lib(IP, B, Fun, A) ->
- try Fun(A) of
+lib(IP, B, A) ->
+ try diameter_lib:ipaddr(A) of
IP when B ->
ok
catch
@@ -76,12 +76,12 @@ lib(IP, B, Fun, A) ->
ok
end.
-ip([_,_,_,_] = A) ->
+ntoa([_,_,_,_] = A) ->
[$.|S] = lists:append(["." ++ integer_to_list(N) || N <- A]),
- {S, fun diameter_lib:ipaddr/1};
-ip([_,_,_,_,_,_,_,_] = A) ->
+ S;
+ntoa([_,_,_,_,_,_,_,_] = A) ->
[$:|S] = lists:flatten([":" ++ io_lib:format("~.16B", [N]) || N <- A]),
- {S, fun diameter_lib:ipaddr/1}.
+ S.
%% ------------------------------------------------------------------------
%% base/1
@@ -90,7 +90,7 @@ ip([_,_,_,_,_,_,_,_] = A) ->
%% ------------------------------------------------------------------------
base(T) ->
- [] = run([{?MODULE, [base, T, F]} || F <- types()]).
+ [] = run([[fun base/2, T, F] || F <- types()]).
%% Ensure that 'zero' values encode only zeros.
base(zero = T, F) ->
@@ -100,32 +100,23 @@ base(zero = T, F) ->
%% Ensure that we can decode what we encode and vice-versa, and that
%% we can't decode invalid values.
base(decode, F) ->
- {Eq, Vs, Ns} = b(values(F)),
- [] = run([{?MODULE, [base_decode, F, Eq, V]} || V <- Vs]),
- [] = run([{?MODULE, [base_invalid, F, Eq, V]} || V <- Ns]).
+ {Ts, Fs, Is} = values(F),
+ [] = run([[fun base_decode/3, F, true, V] || V <- Ts]),
+ [] = run([[fun base_decode/3, F, false, V] || V <- Fs]),
+ [] = run([[fun base_invalid/2, F, V] || V <- Is]).
base_decode(F, Eq, Value) ->
d(fun(X,V) -> diameter_types:F(X,V) end, Eq, Value).
-base_invalid(F, Eq, Value) ->
+base_invalid(F, Value) ->
try
- base_decode(F, Eq, Value),
+ base_decode(F, false, Value),
exit(nok)
catch
error: _ ->
ok
end.
-b({_,_,_} = T) ->
- T;
-b({B,Vs})
- when is_atom(B) ->
- {B,Vs,[]};
-b({Vs,Ns}) ->
- {true, Vs, Ns};
-b(Vs) ->
- {true, Vs, []}.
-
types() ->
[F || {F,2} <- diameter_types:module_info(exports)].
@@ -136,7 +127,7 @@ types() ->
%% ------------------------------------------------------------------------
gen(M, T) ->
- [] = run(lists:map(fun(X) -> {?MODULE, [gen, M, T, X]} end,
+ [] = run(lists:map(fun(X) -> [fun gen/3, M, T, X] end,
fetch(T, dict(M)))).
fetch(T, Spec) ->
@@ -197,18 +188,20 @@ gen(M, enum = T, {Name, ED})
gen(M, T, {?A(Name), lists:map(fun({E,D}) -> {?A(E), D} end, ED)});
gen(M, enum, {Name, ED}) ->
- [] = run([{?MODULE, [enum, M, Name, T]} || T <- ED]);
+ [] = run([[fun enum/3, M, Name, T] || T <- ED]);
gen(M, Tag, {_Mod, L}) ->
T = retag(Tag),
- [] = run([{?MODULE, [gen, M, T, I]} || I <- L]).
+ [] = run([[fun gen/3, M, T, I] || I <- L]).
%% avp_decode/3
avp_decode(Mod, Type, Name) ->
- {Eq, Vs, _} = b(values(Type, Name, Mod)),
- [] = run([{?MODULE, [avp_decode, Mod, Name, Type, Eq, V]}
- || V <- v(Vs)]).
+ {Ts, Fs, _} = values(Type, Name, Mod),
+ [] = run([[fun avp_decode/5, Mod, Name, Type, true, V]
+ || V <- v(Ts)]),
+ [] = run([[fun avp_decode/5, Mod, Name, Type, false, V]
+ || V <- v(Fs)]).
avp_decode(Mod, Name, Type, Eq, Value) ->
d(fun(X,V) -> avp(Mod, X, V, Name, Type) end, Eq, Value).
@@ -250,7 +243,7 @@ v(N, Ord, E, Acc) ->
arity(M, Name, Rname) ->
Rec = M:'#new-'(Rname),
- [] = run([{?MODULE, [arity, M, Name, F, Rec]}
+ [] = run([[fun arity/4, M, Name, F, Rec]
|| F <- M:'#info-'(Rname, fields)]).
arity(M, Name, AvpName, Rec) ->
@@ -299,68 +292,93 @@ z(B) ->
%% tested.)
values('OctetString' = T) ->
- {["", atom_to_list(T)], [-1, 256]};
+ {["", atom_to_list(T)],
+ [],
+ [-1, 256]};
values('Integer32') ->
Mx = (1 bsl 31) - 1,
Mn = -1*Mx,
- {[Mn, 0, random(Mn,Mx), Mx], [Mn - 1, Mx + 1]};
+ {[Mn, 0, random(Mn,Mx), Mx],
+ [],
+ [Mn - 1, Mx + 1]};
values('Integer64') ->
Mx = (1 bsl 63) - 1,
Mn = -1*Mx,
- {[Mn, 0, random(Mn,Mx), Mx], [Mn - 1, Mx + 1]};
+ {[Mn, 0, random(Mn,Mx), Mx],
+ [],
+ [Mn - 1, Mx + 1]};
values('Unsigned32') ->
M = (1 bsl 32) - 1,
- {[0, random(M), M], [-1, M + 1]};
+ {[0, random(M), M],
+ [],
+ [-1, M + 1]};
values('Unsigned64') ->
M = (1 bsl 64) - 1,
- {[0, random(M), M], [-1, M + 1]};
+ {[0, random(M), M],
+ [],
+ [-1, M + 1]};
values('Float32') ->
E = (1 bsl 8) - 2,
F = (1 bsl 23) - 1,
<<Mx:32/float>> = <<0:1, E:8, F:23>>,
<<Mn:32/float>> = <<1:1, E:8, F:23>>,
- {[0.0, infinity, '-infinity', Mx, Mn], [0]};
+ {[0.0, infinity, '-infinity', Mx, Mn],
+ [],
+ [0]};
values('Float64') ->
E = (1 bsl 11) - 2,
F = (1 bsl 52) - 1,
<<Mx:64/float>> = <<0:1, E:11, F:52>>,
<<Mn:64/float>> = <<1:1, E:11, F:52>>,
- {[0.0, infinity, '-infinity', Mx, Mn], [0]};
+ {[0.0, infinity, '-infinity', Mx, Mn],
+ [],
+ [0]};
values('Address') ->
{[{255,0,random(16#FF),1}, {65535,0,0,random(16#FFFF),0,0,0,1}],
- [{256,0,0,1}, {65536,0,0,0,0,0,0,1}]};
+ ["127.0.0.1", "FFFF:FF::1.2.3.4"],
+ [{256,0,0,1}, {65536,0,0,0,0,0,0,1}, "256.0.0.1", "10000::1"]};
values('DiameterIdentity') ->
- {["x", "diameter.com"], [""]};
+ {["x", "diameter.com"],
+ [],
+ [""]};
values('DiameterURI') ->
- {false, ["aaa" ++ S ++ "://diameter.se" ++ P ++ Tr ++ Pr
- || S <- ["", "s"],
- P <- ["", ":1234"],
- Tr <- ["" | [";transport=" ++ X
- || X <- ["tcp", "sctp", "udp"]]],
- Pr <- ["" | [";protocol=" ++ X
- || X <- ["diameter","radius","tacacs+"]]]]};
+ {[],
+ ["aaa" ++ S ++ "://diameter.se" ++ P ++ Tr ++ Pr
+ || S <- ["", "s"],
+ P <- ["", ":1234"],
+ Tr <- ["" | [";transport=" ++ X
+ || X <- ["tcp", "sctp", "udp"]]],
+ Pr <- ["" | [";protocol=" ++ X
+ || X <- ["diameter","radius","tacacs+"]]]],
+ []};
values(T)
when T == 'IPFilterRule';
T == 'QoSFilterRule' ->
- ["deny in 0 from 127.0.0.1 to 10.0.0.1"];
+ {["deny in 0 from 127.0.0.1 to 10.0.0.1"],
+ [],
+ []};
%% RFC 3629 defines the UTF-8 encoding of U+0000 through U+10FFFF with the
%% exception of U+D800 through U+DFFF.
values('UTF8String') ->
+ S = "ᚠᚢᚦᚨᚱᚲ",
+ B = unicode:characters_to_binary(S),
{[[],
+ S,
lists:seq(0,16#1FF),
[0,16#D7FF,16#E000,16#10FFFF],
[random(16#D7FF), random(16#E000,16#10FFFF)]],
+ [B, [B, S, hd(S)], [S, B]],
[[-1],
[16#D800],
[16#DFFF],
@@ -372,6 +390,7 @@ values('Time') ->
{{2036,2,7},{6,28,15}},
{{2036,2,7},{6,28,16}}, %% 19000101T000000 + 2 bsl 31
{{2104,2,26},{9,42,23}}],
+ [],
[{{1968,1,20},{3,14,7}},
{{2104,2,26},{9,42,24}}]}. %% 19000101T000000 + 3 bsl 31
@@ -382,18 +401,24 @@ values('Time') ->
values('Enumerated', Name, Mod) ->
{_Name, Vals} = lists:keyfind(?S(Name), 1, types(enum, Mod)),
- lists:map(fun({_,N}) -> N end, Vals);
+ {lists:map(fun({_,N}) -> N end, Vals),
+ [],
+ []};
values('Grouped', Name, Mod) ->
Rname = Mod:name2rec(Name),
Rec = Mod:'#new-'(Rname),
Avps = Mod:'#info-'(Rname, fields),
- Enum = diameter_enum:combine(lists:map(fun({_,Vs,_}) -> to_enum(Vs) end,
+ Enum = diameter_enum:combine(lists:map(fun({Vs,_,_}) -> to_enum(Vs) end,
[values(F, Mod) || F <- Avps])),
- {false, diameter_enum:append(group(Mod, Name, Rec, Avps, Enum))};
+ {[],
+ diameter_enum:append(group(Mod, Name, Rec, Avps, Enum)),
+ []};
values(_, 'Framed-IP-Address', _) ->
- [{127,0,0,1}];
+ {[{127,0,0,1}],
+ [],
+ []};
values(Type, _, _) ->
values(Type).
@@ -407,12 +432,14 @@ to_enum(E) ->
%% values/2
values('AVP', _) ->
- {true, [#diameter_avp{code = 0, data = <<0>>}], []};
+ {[#diameter_avp{code = 0, data = <<0>>}],
+ [],
+ []};
values(Name, Mod) ->
Avps = types(avp_types, Mod),
{_Name, _Code, Type, _Flags} = lists:keyfind(?S(Name), 1, Avps),
- b(values(?A(Type), Name, Mod)).
+ values(?A(Type), Name, Mod).
%% group/5
%%
diff --git a/lib/diameter/test/diameter_transport_SUITE.erl b/lib/diameter/test/diameter_transport_SUITE.erl
index 97f4cec11f..9408fae62c 100644
--- a/lib/diameter/test/diameter_transport_SUITE.erl
+++ b/lib/diameter/test/diameter_transport_SUITE.erl
@@ -180,12 +180,13 @@ reconnect({listen, Ref}) ->
[_] = diameter_reg:wait({diameter_tcp, listener, {LRef, '_'}}),
true = diameter_reg:add_new({?MODULE, Ref, LRef}),
- %% Wait for partner to request transport death: kill to force the
- %% peer to reconnect.
+ %% Wait for partner to request transport death.
TPid = abort(SvcName, LRef, Ref),
+ %% Kill transport to force the peer to reconnect.
exit(TPid, kill),
+ %% Wait for the partner again.
abort(SvcName, LRef, Ref);
reconnect({connect, Ref}) ->
@@ -200,7 +201,7 @@ reconnect({connect, Ref}) ->
%% reconnection attempts.
abort(SvcName, Pid, Ref),
- %% Transport does down and is reestablished.
+ %% Transport goes down and is reestablished.
?RECV(#diameter_event{service = SvcName, info = {down, CRef, _, _}}),
?RECV(#diameter_event{service = SvcName, info = {reconnect, CRef, _}}),
?RECV(#diameter_event{service = SvcName, info = {up, CRef, _, _, _}}),
diff --git a/lib/erl_interface/test/Makefile b/lib/erl_interface/test/Makefile
index 2b85dfc571..1ed34c74a0 100644
--- a/lib/erl_interface/test/Makefile
+++ b/lib/erl_interface/test/Makefile
@@ -42,7 +42,7 @@ MODULES= \
runner
SPEC_FILES = \
- erl_interface.spec
+ erl_interface.spec erl_interface_smoke.spec
COVER_FILE = erl_interface.cover
diff --git a/lib/erl_interface/test/erl_interface_smoke.spec b/lib/erl_interface/test/erl_interface_smoke.spec
new file mode 100644
index 0000000000..bfaea2b279
--- /dev/null
+++ b/lib/erl_interface/test/erl_interface_smoke.spec
@@ -0,0 +1 @@
+{suites,"../erl_interface_test",[ei_decode_encode_SUITE]}.
diff --git a/lib/eunit/include/eunit.hrl b/lib/eunit/include/eunit.hrl
index 8ebdb6ba16..84242a09aa 100644
--- a/lib/eunit/include/eunit.hrl
+++ b/lib/eunit/include/eunit.hrl
@@ -102,7 +102,7 @@
%% X gets a new, local binding.
%% (Note that lowercase 'let' is a reserved word.)
-ifndef(LET).
--define(LET(X,Y,Z), ((fun(X)->(Z)end)(Y))).
+-define(LET(X,Y,Z), begin ((fun(X)->(Z)end)(Y)) end).
-endif.
%% It is important that testing code is short and readable.
@@ -110,13 +110,13 @@
%% Compare: case f(X) of true->g(X); false->h(X) end
%% and: ?IF(f(X), g(Y), h(Z))
-ifndef(IF).
--define(IF(B,T,F), (case (B) of true->(T); false->(F) end)).
+-define(IF(B,T,F), begin (case (B) of true->(T); false->(F) end) end).
-endif.
%% This macro yields 'true' if the value of E matches the guarded
%% pattern G, otherwise 'false'.
-ifndef(MATCHES).
--define(MATCHES(G,E), (case (E) of G -> true; _ -> false end)).
+-define(MATCHES(G,E), begin (case (E) of G -> true; _ -> false end) end).
-endif.
%% This macro can be used at any time to check whether or not the code
@@ -140,6 +140,7 @@
%% for clauses that cannot match, even if the expression is a constant.
-undef(assert).
-define(assert(BoolExpr),
+ begin
((fun () ->
case (BoolExpr) of
true -> ok;
@@ -152,7 +153,8 @@
_ -> {not_a_boolean,__V}
end}]})
end
- end)())).
+ end)())
+ end).
-endif.
-define(assertNot(BoolExpr), ?assert(not (BoolExpr))).
@@ -168,6 +170,7 @@
-define(assertMatch(Guard, Expr), ok).
-else.
-define(assertMatch(Guard, Expr),
+ begin
((fun () ->
case (Expr) of
Guard -> ok;
@@ -178,7 +181,8 @@
{pattern, (??Guard)},
{value, __V}]})
end
- end)())).
+ end)())
+ end).
-endif.
-define(_assertMatch(Guard, Expr), ?_test(?assertMatch(Guard, Expr))).
@@ -187,6 +191,7 @@
-define(assertNotMatch(Guard, Expr), ok).
-else.
-define(assertNotMatch(Guard, Expr),
+ begin
((fun () ->
__V = (Expr),
case __V of
@@ -198,7 +203,8 @@
{value, __V}]});
_ -> ok
end
- end)())).
+ end)())
+ end).
-endif.
-define(_assertNotMatch(Guard, Expr), ?_test(?assertNotMatch(Guard, Expr))).
@@ -208,6 +214,7 @@
-define(assertEqual(Expect, Expr), ok).
-else.
-define(assertEqual(Expect, Expr),
+ begin
((fun (__X) ->
case (Expr) of
__X -> ok;
@@ -218,7 +225,8 @@
{expected, __X},
{value, __V}]})
end
- end)(Expect))).
+ end)(Expect))
+ end).
-endif.
-define(_assertEqual(Expect, Expr), ?_test(?assertEqual(Expect, Expr))).
@@ -227,6 +235,7 @@
-define(assertNotEqual(Unexpected, Expr), ok).
-else.
-define(assertNotEqual(Unexpected, Expr),
+ begin
((fun (__X) ->
case (Expr) of
__X -> erlang:error({assertNotEqual_failed,
@@ -236,7 +245,8 @@
{value, __X}]});
_ -> ok
end
- end)(Unexpected))).
+ end)(Unexpected))
+ end).
-endif.
-define(_assertNotEqual(Unexpected, Expr),
?_test(?assertNotEqual(Unexpected, Expr))).
@@ -247,6 +257,7 @@
-define(assertException(Class, Term, Expr), ok).
-else.
-define(assertException(Class, Term, Expr),
+ begin
((fun () ->
try (Expr) of
__V -> erlang:error({assertException_failed,
@@ -271,7 +282,8 @@
{__C, __T,
erlang:get_stacktrace()}}]})
end
- end)())).
+ end)())
+ end).
-endif.
-define(assertError(Term, Expr), ?assertException(error, Term, Expr)).
@@ -291,6 +303,7 @@
-define(assertNotException(Class, Term, Expr), ok).
-else.
-define(assertNotException(Class, Term, Expr),
+ begin
((fun () ->
try (Expr) of
_ -> ok
@@ -316,7 +329,8 @@
_ -> ok
end
end
- end)())).
+ end)())
+ end).
-endif.
-define(_assertNotException(Class, Term, Expr),
?_test(?assertNotException(Class, Term, Expr))).
@@ -327,6 +341,7 @@
%% these can be used for simply running commands in a controlled way
-define(_cmd_(Cmd), (eunit_lib:command(Cmd))).
-define(cmdStatus(N, Cmd),
+ begin
((fun () ->
case ?_cmd_(Cmd) of
{(N), __Out} -> __Out;
@@ -337,7 +352,8 @@
{expected_status,(N)},
{status,__N}]})
end
- end)())).
+ end)())
+ end).
-define(_cmdStatus(N, Cmd), ?_test(?cmdStatus(N, Cmd))).
-define(cmd(Cmd), ?cmdStatus(0, Cmd)).
-define(_cmd(Cmd), ?_test(?cmd(Cmd))).
@@ -348,6 +364,7 @@
-define(assertCmdStatus(N, Cmd), ok).
-else.
-define(assertCmdStatus(N, Cmd),
+ begin
((fun () ->
case ?_cmd_(Cmd) of
{(N), _} -> ok;
@@ -358,7 +375,8 @@
{expected_status,(N)},
{status,__N}]})
end
- end)())).
+ end)())
+ end).
-endif.
-define(assertCmd(Cmd), ?assertCmdStatus(0, Cmd)).
@@ -366,6 +384,7 @@
-define(assertCmdOutput(T, Cmd), ok).
-else.
-define(assertCmdOutput(T, Cmd),
+ begin
((fun () ->
case ?_cmd_(Cmd) of
{_, (T)} -> ok;
@@ -376,7 +395,8 @@
{expected_output,(T)},
{output,__T}]})
end
- end)())).
+ end)())
+ end).
-endif.
-define(_assertCmdStatus(N, Cmd), ?_test(?assertCmdStatus(N, Cmd))).
@@ -394,26 +414,30 @@
-define(debugTime(S, E), (E)).
-else.
-define(debugMsg(S),
- (begin
- io:fwrite(user, <<"~s:~w:~w: ~s\n">>,
- [?FILE, ?LINE, self(), S]),
- ok
- end)).
+ begin
+ io:fwrite(user, <<"~s:~w:~w: ~s\n">>,
+ [?FILE, ?LINE, self(), S]),
+ ok
+ end).
-define(debugHere, (?debugMsg("<-"))).
-define(debugFmt(S, As), (?debugMsg(io_lib:format((S), (As))))).
-define(debugVal(E),
+ begin
((fun (__V) ->
?debugFmt(<<"~s = ~P">>, [(??E), __V, 15]),
__V
- end)(E))).
+ end)(E))
+ end).
-define(debugTime(S, E),
+ begin
((fun () ->
{__T0, _} = statistics(wall_clock),
__V = (E),
{__T1, _} = statistics(wall_clock),
?debugFmt(<<"~s: ~.3f s">>, [(S), (__T1-__T0)/1000]),
__V
- end)())).
+ end)())
+ end).
-endif.
diff --git a/lib/ic/test/Makefile b/lib/ic/test/Makefile
index 54ac186c16..63af6ed9f1 100644
--- a/lib/ic/test/Makefile
+++ b/lib/ic/test/Makefile
@@ -33,7 +33,7 @@ RELSYSDIR = $(RELEASE_PATH)/ic_test
# ----------------------------------------------------
# Target Specs
# ----------------------------------------------------
-TEST_SPEC_FILE = ic.spec
+TEST_SPEC_FILE = ic.spec ic_smoke.spec
IDL_FILES =
diff --git a/lib/ic/test/ic_smoke.spec b/lib/ic/test/ic_smoke.spec
new file mode 100644
index 0000000000..ec3b5758b1
--- /dev/null
+++ b/lib/ic/test/ic_smoke.spec
@@ -0,0 +1 @@
+{suites,"../ic_test",[ic_SUITE]}.
diff --git a/lib/inets/doc/src/httpc.xml b/lib/inets/doc/src/httpc.xml
index 741f2abaef..d9a27e7d1e 100644
--- a/lib/inets/doc/src/httpc.xml
+++ b/lib/inets/doc/src/httpc.xml
@@ -300,11 +300,11 @@ filename() = string()
process or to a file. When streaming to the calling process
using the option <c>self</c> the following stream messages
will be sent to that process: <c>{http, {RequestId,
- stream_start, Headers}, {http, {RequestId, stream,
- BinBodyPart}, {http, {RequestId, stream_end, Headers}</c>. When
+ stream_start, Headers}}, {http, {RequestId, stream,
+ BinBodyPart}}, {http, {RequestId, stream_end, Headers}}</c>. When
streaming to to the calling processes using the option
<c>{self, once}</c> the first message will have an additional
- element e.i. <c>{http, {RequestId, stream_start, Headers, Pid}</c>,
+ element e.i. <c>{http, {RequestId, stream_start, Headers, Pid}}</c>,
this is the process id that should be used as an argument to
<c>http:stream_next/1</c> to trigger the next message to be sent to
the calling process. </p>
diff --git a/lib/inets/doc/src/httpd.xml b/lib/inets/doc/src/httpd.xml
index 8438961511..4210aea3ec 100644
--- a/lib/inets/doc/src/httpd.xml
+++ b/lib/inets/doc/src/httpd.xml
@@ -251,14 +251,14 @@
</item>
<marker id="prop_max_uri"></marker>
- <tag>{max_uri, integer()}</tag>
+ <tag>{max_uri_size, integer()}</tag>
<item>
<p>Limits the size of the HTTP request URI. By
default there is no limit. </p>
</item>
<marker id="prop_max_keep_alive_req"></marker>
- <tag>{max_keep_alive_requests, integer()}</tag>
+ <tag>{max_keep_alive_request, integer()}</tag>
<item>
<p>The number of request that a client can do on one
connection. When the server has responded to the number of
@@ -406,7 +406,7 @@ bytes
begins with url-path is mapped to local files that begins with
directory-filename, for example:
- <code>{alias, {"/image", "/ftp/pub/image"}</code>
+ <code>{alias, {"/image", "/ftp/pub/image"}}</code>
and an access to http://your.server.org/image/foo.gif would refer to
the file /ftp/pub/image/foo.gif. </p>
@@ -421,7 +421,7 @@ bytes
by re:replace/3 to produce a path in the local filesystem.
For example:
- <code>{re_write, {"^/[~]([^/]+)(.*)$", "/home/\\1/public\\2"}</code>
+ <code>{re_write, {"^/[~]([^/]+)(.*)$", "/home/\\1/public\\2"}}</code>
and an access to http://your.server.org/~bob/foo.gif would refer to
the file /home/bob/public/foo.gif.
@@ -468,7 +468,7 @@ bytes
scripts. URLs with a path beginning with url-path are mapped to
scripts beginning with directory-filename, for example:
- <code>{script_alias, {"/cgi-bin/", "/web/cgi-bin/"}</code>
+ <code>{script_alias, {"/cgi-bin/", "/web/cgi-bin/"}}</code>
and an access to http://your.server.org/cgi-bin/foo would cause
the server to run the script /web/cgi-bin/foo. </p>
@@ -483,7 +483,7 @@ bytes
scripts. URLs with a path beginning with url-path are mapped to
scripts beginning with directory-filename, for example:
- <code>{script_re_write, {"^/cgi-bin/(\\d+)/", "/web/\\1/cgi-bin/"}</code>
+ <code>{script_re_write, {"^/cgi-bin/(\\d+)/", "/web/\\1/cgi-bin/"}}</code>
and an access to http://your.server.org/cgi-bin/17/foo would cause
the server to run the script /web/17/cgi-bin/foo. </p>
@@ -517,7 +517,7 @@ bytes
the standard CGI PATH_INFO and PATH_TRANSLATED environment
variables.
- <code>{action, {"text/plain", "/cgi-bin/log_and_deliver_text"}</code>
+ <code>{action, {"text/plain", "/cgi-bin/log_and_deliver_text"}}</code>
</p>
</item>
@@ -532,7 +532,7 @@ bytes
the standard CGI PATH_INFO and PATH_TRANSLATED environment
variables.
- <code>{script, {"PUT", "/cgi-bin/put"}</code>
+ <code>{script, {"PUT", "/cgi-bin/put"}}</code>
</p>
</item>
@@ -549,7 +549,7 @@ bytes
scheme scripts. A matching URL is mapped into a specific module
and function. For example:
- <code>{erl_script_alias, {"/cgi-bin/example", [httpd_example]}
+ <code>{erl_script_alias, {"/cgi-bin/example", [httpd_example]}}
</code>
and a request to
@@ -632,7 +632,7 @@ bytes
</item>
<marker id="prop_edlog"></marker>
- <tag>{error_disk_log, internal | external}</tag>
+ <tag>{error_disk_log, path()}</tag>
<item>
<p>Defines the filename of the (disk_log(3)) error log file
to be used to log server errors. If the filename does not begin
@@ -706,7 +706,7 @@ bytes
For example:
- <code>{allow_from, ["123.34.56.11", "150.100.23"] </code>
+ <code>{allow_from, ["123.34.56.11", "150.100.23"]}</code>
The host 123.34.56.11 and all machines on the 150.100.23
subnet are allowed access. </p>
@@ -719,7 +719,7 @@ bytes
which should be denied access to a given directory.
For example:
- <code>{deny_from, ["123.34.56.11", "150.100.23"] </code>
+ <code>{deny_from, ["123.34.56.11", "150.100.23"]}</code>
The host 123.34.56.11 and all machines on the 150.100.23
subnet are not allowed access. </p>
@@ -835,7 +835,7 @@ bytes
<p><em>Security properties - requires mod_security </em></p>
<marker id="prop_sec_dir"></marker>
- <p><em>{security_directory, {path(), [{property(), term()}]}</em></p>
+ <p><em>{security_directory, {path(), [{property(), term()}]}}</em></p>
<marker id="props_sdir"></marker>
<p>Here follows the valid properties for security directories</p>
@@ -1067,7 +1067,7 @@ bytes
<fsummary>Called for each request to the Web server.</fsummary>
<type>
<v>OldData = list()</v>
- <v>NewData = [{response,{StatusCode,Body}}] | [{response,{response,Head,Body}}] | [{response,{already_sent,Statuscode,Size}] </v>
+ <v>NewData = [{response,{StatusCode,Body}}] | [{response,{response,Head,Body}}] | [{response,{already_sent,Statuscode,Size}}] </v>
<v>StausCode = integer()</v>
<v>Body = io_list() | nobody | {Fun, Arg}</v>
<v>Head = [HeaderOption]</v>
diff --git a/lib/inets/doc/src/httpd_util.xml b/lib/inets/doc/src/httpd_util.xml
index 9f290084d2..9218ee91e2 100644
--- a/lib/inets/doc/src/httpd_util.xml
+++ b/lib/inets/doc/src/httpd_util.xml
@@ -337,10 +337,10 @@
<func>
<name>rfc1123_date() -> RFC1123Date</name>
- <name>rfc1123_date({{YYYY,MM,DD},{Hour,Min,Sec}}}) -> RFC1123Date</name>
+ <name>rfc1123_date({{YYYY,MM,DD},{Hour,Min,Sec}}) -> RFC1123Date</name>
<fsummary>Return the current date in RFC 1123 format.</fsummary>
<type>
- <v>YYYY = MM = DD = Hour = Min =Sec = integer()</v>
+ <v>YYYY = MM = DD = Hour = Min = Sec = integer()</v>
<v>RFC1123Date = string()</v>
</type>
<desc>
diff --git a/lib/inets/doc/src/mod_alias.xml b/lib/inets/doc/src/mod_alias.xml
index 265a1b8e76..b38be5db28 100644
--- a/lib/inets/doc/src/mod_alias.xml
+++ b/lib/inets/doc/src/mod_alias.xml
@@ -118,7 +118,7 @@
</func>
<func>
- <name>real_script_name(ConfigDB,RequestURI,ScriptAliases) -> Ret</name>
+ <name>real_script_name(ConfigDB, RequestURI, ScriptAliases) -> Ret</name>
<fsummary>Expand a request uri using ScriptAlias config directives.</fsummary>
<type>
<v>ConfigDB = config_db()</v>
@@ -129,7 +129,7 @@
</type>
<desc>
<marker id="real_script_name"></marker>
- <p><c>real_name/3</c> traverses <c>ScriptAliases</c>,
+ <p><c>real_script_name/3</c> traverses <c>ScriptAliases</c>,
typically extracted from <c>ConfigDB</c>, and matches each
<c>FakeName</c> with <c>RequestURI</c>. If a match is found
<c>FakeName</c> is replaced with <c>RealName</c> in the
diff --git a/lib/inets/doc/src/notes.xml b/lib/inets/doc/src/notes.xml
index d2e7ade5d6..f6bb2cca49 100644
--- a/lib/inets/doc/src/notes.xml
+++ b/lib/inets/doc/src/notes.xml
@@ -45,8 +45,6 @@
</item>
</list>
</section>
-
-
<section><title>Improvements and New Features</title>
<list>
<item>
@@ -158,7 +156,20 @@
</section>
</section>
+<section><title>Inets 5.9.2.2</title>
+ <section><title>Improvements and New Features</title>
+ <list>
+ <item>
+ <p>
+ Make log_alert configurable as option in ssl, SSLLogLevel
+ added as option to inets conf file</p>
+ <p>
+ Own Id: OTP-11259</p>
+ </item>
+ </list>
+ </section>
+</section>
<section><title>Inets 5.9.2.1</title>
<section><title>Improvements and New Features</title>
<list>
diff --git a/lib/inets/doc/src/notes_history.xml b/lib/inets/doc/src/notes_history.xml
index bd59c1ba47..4162ab97bb 100644
--- a/lib/inets/doc/src/notes_history.xml
+++ b/lib/inets/doc/src/notes_history.xml
@@ -834,7 +834,7 @@
<list type="bulleted">
<item>
<p>[ftp, client] - A new option {progress, {CBmodule,
- CBFunction, InitProgressTerm} has been added to allow
+ CBFunction, InitProgressTerm}} has been added to allow
users to create things such as progress bars in there
GUI's. The option affects ftp:send/[3,4] and
ftp:recv/[3,4].</p>
diff --git a/lib/inets/src/http_lib/http_transport.erl b/lib/inets/src/http_lib/http_transport.erl
index df58fa1b81..7e679531cf 100644
--- a/lib/inets/src/http_lib/http_transport.erl
+++ b/lib/inets/src/http_lib/http_transport.erl
@@ -159,7 +159,7 @@ listen(ip_comm = _SocketType, Addr, Port, Fd, IpFamily) ->
listen_ip_comm(Addr, Port, Fd, IpFamily);
listen({essl, SSLConfig}, Addr, Port, Fd, IpFamily) ->
- listen_ssl(Addr, Port, Fd, SSLConfig, IpFamily).
+ listen_ssl(Addr, Port, Fd, SSLConfig, IpFamily, []).
listen(ip_comm = _SocketType, Addr, Port, IpFamily) ->
listen_ip_comm(Addr, Port, undefined, IpFamily);
@@ -178,7 +178,13 @@ listen({essl, SSLConfig}, Addr, Port, IpFamily) ->
[{addr, Addr},
{port, Port},
{ssl_config, SSLConfig}]),
- listen_ssl(Addr, Port, undefined, SSLConfig, IpFamily).
+ {SSLConfig2, ExtraOpts} = case proplists:get_value(log_alert, SSLConfig, undefined) of
+ undefined ->
+ {SSLConfig, []};
+ LogAlert ->
+ {proplists:delete(log_alert, SSLConfig), [{log_alert, LogAlert}]}
+ end,
+ listen_ssl(Addr, Port, undefined, SSLConfig2, IpFamily, ExtraOpts).
listen_ip_comm(Addr, Port, Fd, IpFamily) ->
case (catch do_listen_ip_comm(Addr, Port, Fd, IpFamily)) of
@@ -221,24 +227,23 @@ do_listen_ip_comm(Addr, Port, Fd, IpFamily) ->
gen_tcp:listen(NewPort, Opts2)
end.
-
-listen_ssl(Addr, Port, Fd, Opts0, IpFamily) ->
+listen_ssl(Addr, Port, Fd, Opts0, IpFamily, ExtraOpts) ->
{NewPort, SockOpt} = get_socket_info(Addr, Port, Fd),
Opts = SockOpt ++ Opts0,
case IpFamily of
inet6fb4 ->
- Opts2 = [inet6 | Opts],
+ Opts2 = [inet6 | Opts] ++ ExtraOpts,
?hlrt("try ipv6 listen", [{opts, Opts2}]),
case (catch ssl:listen(Port, Opts2)) of
{error, Reason} when ((Reason =:= nxdomain) orelse
(Reason =:= eafnosupport)) ->
- Opts3 = [inet | Opts],
+ Opts3 = [inet | Opts] ++ ExtraOpts,
?hlrt("ipv6 listen failed - try ipv4 instead",
[{reason, Reason}, {opts, Opts3}]),
ssl:listen(NewPort, Opts3);
{'EXIT', Reason} ->
- Opts3 = [inet | Opts],
+ Opts3 = [inet | Opts] ++ ExtraOpts,
?hlrt("ipv6 listen exit - try ipv4 instead",
[{reason, Reason}, {opts, Opts3}]),
ssl:listen(NewPort, Opts3);
@@ -251,7 +256,7 @@ listen_ssl(Addr, Port, Fd, Opts0, IpFamily) ->
_ ->
Opts2 = [IpFamily | Opts],
?hlrt("listen", [{opts, Opts2}]),
- ssl:listen(NewPort, Opts2)
+ ssl:listen(NewPort, Opts2 ++ ExtraOpts)
end.
diff --git a/lib/inets/src/http_server/httpd_conf.erl b/lib/inets/src/http_server/httpd_conf.erl
index d45f3c0048..b3ca13e2fe 100644
--- a/lib/inets/src/http_server/httpd_conf.erl
+++ b/lib/inets/src/http_server/httpd_conf.erl
@@ -390,6 +390,13 @@ load("SSLCertificateFile " ++ SSLCertificateFile, []) ->
{error, ?NICE(clean(SSLCertificateFile)++
" is an invalid SSLCertificateFile")}
end;
+load("SSLLogLevel " ++ SSLLogAlert, []) ->
+ case SSLLogAlert of
+ "none" ->
+ {ok, [], {ssl_log_alert, false}};
+ _ ->
+ {ok, [], {ssl_log_alert, true}}
+ end;
load("SSLCertificateKeyFile " ++ SSLCertificateKeyFile, []) ->
case is_file(clean(SSLCertificateKeyFile)) of
{ok, File} ->
@@ -948,7 +955,8 @@ ssl_config(ConfigDB) ->
ssl_ciphers(ConfigDB) ++
ssl_password(ConfigDB) ++
ssl_verify_depth(ConfigDB) ++
- ssl_ca_certificate_file(ConfigDB).
+ ssl_ca_certificate_file(ConfigDB) ++
+ ssl_log_level(ConfigDB).
@@ -1214,6 +1222,14 @@ ssl_certificate_key_file(ConfigDB) ->
[{keyfile,SSLCertificateKeyFile}]
end.
+ssl_log_level(ConfigDB) ->
+ case httpd_util:lookup(ConfigDB,ssl_log_alert) of
+ undefined ->
+ [];
+ SSLLogLevel ->
+ [{log_alert,SSLLogLevel}]
+ end.
+
ssl_verify_client(ConfigDB) ->
case httpd_util:lookup(ConfigDB,ssl_verify_client) of
undefined ->
diff --git a/lib/inets/src/http_server/httpd_request_handler.erl b/lib/inets/src/http_server/httpd_request_handler.erl
index 0f47d785ef..cb20159794 100644
--- a/lib/inets/src/http_server/httpd_request_handler.erl
+++ b/lib/inets/src/http_server/httpd_request_handler.erl
@@ -106,7 +106,7 @@ init([Manager, ConfigDB, AcceptTimeout]) ->
case http_transport:negotiate(SocketType, Socket, TimeOut) of
{error, Error} ->
?hdrd("negotiation failed", [{error, Error}]),
- exit(Error); %% Can be 'normal'.
+ exit(shutdown); %% Can be 'normal'.
ok ->
?hdrt("negotiation successfull", []),
NewTimeout = TimeOut - timer:now_diff(now(),Then) div 1000,
diff --git a/lib/inets/src/http_server/httpd_response.erl b/lib/inets/src/http_server/httpd_response.erl
index 6b6532266b..a45b04f275 100644
--- a/lib/inets/src/http_server/httpd_response.erl
+++ b/lib/inets/src/http_server/httpd_response.erl
@@ -20,7 +20,7 @@
-module(httpd_response).
-export([generate_and_send_response/1, send_status/3, send_header/3,
send_body/3, send_chunk/3, send_final_chunk/2, split_header/2,
- is_disable_chunked_send/1, cache_headers/1]).
+ is_disable_chunked_send/1, cache_headers/2]).
-export([map_status_code/2]).
-include("httpd.hrl").
@@ -266,8 +266,8 @@ get_connection(false,"HTTP/1.1") ->
get_connection(_,_) ->
"".
-cache_headers(#mod{config_db = Db}) ->
- case httpd_util:lookup(Db, script_nocache, false) of
+cache_headers(#mod{config_db = Db}, NoCacheType) ->
+ case httpd_util:lookup(Db, NoCacheType, false) of
true ->
Date = httpd_util:rfc1123_date(),
[{"cache-control", "no-cache"},
diff --git a/lib/inets/src/http_server/mod_cgi.erl b/lib/inets/src/http_server/mod_cgi.erl
index c854166c29..f1b73810e6 100644
--- a/lib/inets/src/http_server/mod_cgi.erl
+++ b/lib/inets/src/http_server/mod_cgi.erl
@@ -295,7 +295,7 @@ receive_headers(Port, Module, Function, Args, Timeout) ->
end.
send_headers(ModData, {StatusCode, _}, HTTPHeaders) ->
- ExtraHeaders = httpd_response:cache_headers(ModData),
+ ExtraHeaders = httpd_response:cache_headers(ModData, script_nocache),
httpd_response:send_header(ModData, StatusCode,
ExtraHeaders ++ HTTPHeaders).
diff --git a/lib/inets/src/http_server/mod_esi.erl b/lib/inets/src/http_server/mod_esi.erl
index e36c33b282..b11df34f9e 100644
--- a/lib/inets/src/http_server/mod_esi.erl
+++ b/lib/inets/src/http_server/mod_esi.erl
@@ -440,7 +440,7 @@ receive_headers(Timeout) ->
end.
send_headers(ModData, StatusCode, HTTPHeaders) ->
- ExtraHeaders = httpd_response:cache_headers(ModData),
+ ExtraHeaders = httpd_response:cache_headers(ModData, erl_script_nocache),
httpd_response:send_header(ModData, StatusCode,
ExtraHeaders ++ HTTPHeaders).
diff --git a/lib/inets/test/httpd_basic_SUITE.erl b/lib/inets/test/httpd_basic_SUITE.erl
index 523cf9d38c..fef0a1f0f4 100644
--- a/lib/inets/test/httpd_basic_SUITE.erl
+++ b/lib/inets/test/httpd_basic_SUITE.erl
@@ -33,7 +33,8 @@ suite() -> [{ct_hooks,[ts_install_cth]}].
all() ->
[
uri_too_long_414,
- header_too_long_413,
+ header_too_long_413,
+ erl_script_nocache_opt,
escaped_url_in_error_body,
slowdose
].
@@ -178,6 +179,28 @@ header_too_long_413(Config) when is_list(Config) ->
{version, "HTTP/1.1"}]),
inets:stop(httpd, Pid).
+%%-------------------------------------------------------------------------
+%%-------------------------------------------------------------------------
+
+erl_script_nocache_opt(doc) ->
+ ["Test that too long headers's get 413 HTTP code"];
+erl_script_nocache_opt(suite) ->
+ [];
+erl_script_nocache_opt(Config) when is_list(Config) ->
+ HttpdConf = ?config(httpd_conf, Config),
+ {ok, Pid} = inets:start(httpd, [{port, 0}, {erl_script_nocache, true} | HttpdConf]),
+ Info = httpd:info(Pid),
+ Port = proplists:get_value(port, Info),
+ _Address = proplists:get_value(bind_address, Info),
+ URL1 = ?URL_START ++ integer_to_list(Port),
+ case httpc:request(get, {URL1 ++ "/dummy.html", []},
+ [{url_encode, false},
+ {version, "HTTP/1.0"}],
+ [{full_result, false}]) of
+ {ok, {200, _}} ->
+ ok
+ end,
+ inets:stop(httpd, Pid).
%%-------------------------------------------------------------------------
%%-------------------------------------------------------------------------
diff --git a/lib/jinterface/test/Makefile b/lib/jinterface/test/Makefile
index d9ff406994..90d4e01035 100644
--- a/lib/jinterface/test/Makefile
+++ b/lib/jinterface/test/Makefile
@@ -32,7 +32,7 @@ RELSYSDIR = $(RELEASE_PATH)/jinterface_test
# ----------------------------------------------------
# Target Specs
# ----------------------------------------------------
-TEST_SPEC_FILE = jinterface.spec
+TEST_SPEC_FILE = jinterface.spec jinterface_smoke.spec
COVER_FILE = jinterface.cover
MODULES = nc_SUITE \
diff --git a/lib/jinterface/test/jinterface_smoke.spec b/lib/jinterface/test/jinterface_smoke.spec
new file mode 100644
index 0000000000..4a76cce4cd
--- /dev/null
+++ b/lib/jinterface/test/jinterface_smoke.spec
@@ -0,0 +1 @@
+{cases,"../jinterface_test",jinterface_SUITE,[java_erlang_send_receive]}.
diff --git a/lib/kernel/doc/src/application.xml b/lib/kernel/doc/src/application.xml
index 362c373c6c..3909b11e59 100644
--- a/lib/kernel/doc/src/application.xml
+++ b/lib/kernel/doc/src/application.xml
@@ -253,15 +253,30 @@ Nodes = [cp1@cave, {cp2@cave, cp3@cave}]</code>
</warning>
</desc>
</func>
- <func>
+ <func>
<name name="ensure_started" arity="1"/>
<name name="ensure_started" arity="2"/>
<fsummary>Load and start an application</fsummary>
- <desc>
- <p>Equivalent to <seealso marker="#start/2"><c>application:start/1,2</c></seealso> except
- it returns <c>ok</c> for already started applications.</p>
- </desc>
- </func>
+ <desc>
+ <p>Equivalent to <seealso marker="#start/2"><c>application:start/1,2</c></seealso> except
+ it returns <c>ok</c> for already started applications.</p>
+ </desc>
+ </func>
+ <func>
+ <name name="ensure_all_started" arity="1"/>
+ <name name="ensure_all_started" arity="2"/>
+ <fsummary>Load and start an application and its dependencies, recursively</fsummary>
+ <desc>
+ <p>Equivalent to calling <seealso marker="#start/2"><c>application:start/1,2</c></seealso>
+ repeatedly on all dependencies that have not yet been started for an application.
+ The function returns <c>{ok, AppNames}</c> for a successful start or for an already started
+ application (which are however omitted from the <c>AppNames</c> list), and reports
+ <c>{error, {AppName,Reason}}</c> for errors, where <c>Reason</c> is any possible reason
+ returned by <seealso marker="#start/2"><c>application:start/1,2</c></seealso> when starting a
+ specific dependency. In case of an error, the applications that were started by the
+ function are stopped to bring the set of running applications back to its initial state.</p>
+ </desc>
+ </func>
<func>
<name name="start" arity="1"/>
<name name="start" arity="2"/>
diff --git a/lib/kernel/doc/src/inet.xml b/lib/kernel/doc/src/inet.xml
index 7cd98914d1..254dfbf034 100644
--- a/lib/kernel/doc/src/inet.xml
+++ b/lib/kernel/doc/src/inet.xml
@@ -76,11 +76,11 @@ FFFF::192.168.42.2
{16#3ffe,16#b80,16#1f8d,16#2,16#204,16#acff,16#fe17,16#bf38}
fe80::204:acff:fe17:bf38
{16#fe80,0,0,0,0,16#204,16#acff,16#fe17,16#bf38}</code>
- <p>A function that may be useful is <c>inet_parse:address/1</c>:</p>
+ <p>A function that may be useful is <seealso marker="#parse_address/1">parse_address/1</seealso>:</p>
<pre>
-1> <input>inet_parse:address("192.168.42.2").</input>
+1> <input>inet:parse_address("192.168.42.2").</input>
{ok,{192,168,42,2}}
-2> <input>inet_parse:address("FFFF::192.168.42.2").</input>
+2> <input>inet:parse_address("FFFF::192.168.42.2").</input>
{ok,{65535,0,0,0,0,0,49320,10754}}</pre>
</description>
@@ -375,6 +375,13 @@ fe80::204:acff:fe17:bf38
</desc>
</func>
<func>
+ <name name="ntoa" arity="1" />
+ <fsummary>Convert IPv6 / IPV4 adress to ascii</fsummary>
+ <desc>
+ <p>Parses an <a href="#type-ip_address">ip_address()</a> and returns an IPv4 or IPv6 address string.</p>
+ </desc>
+ </func>
+ <func>
<name name="parse_ipv4_address" arity="1" />
<fsummary>Parse an IPv4 address</fsummary>
<desc>
diff --git a/lib/kernel/src/application.erl b/lib/kernel/src/application.erl
index 5dd6b73857..4e8ba1b78a 100644
--- a/lib/kernel/src/application.erl
+++ b/lib/kernel/src/application.erl
@@ -18,7 +18,8 @@
%%
-module(application).
--export([start/1, start/2, start_boot/1, start_boot/2, stop/1,
+-export([ensure_all_started/1, ensure_all_started/2, start/1, start/2,
+ start_boot/1, start_boot/2, stop/1,
load/1, load/2, unload/1, takeover/2,
which_applications/0, which_applications/1,
loaded_applications/0, permit/2]).
@@ -113,6 +114,46 @@ load1(Application, DistNodes) ->
unload(Application) ->
application_controller:unload_application(Application).
+
+-spec ensure_all_started(Application) -> {'ok', Started} | {'error', Reason} when
+ Application :: atom(),
+ Started :: [atom()],
+ Reason :: term().
+ensure_all_started(Application) ->
+ ensure_all_started(Application, temporary).
+
+-spec ensure_all_started(Application, Type) -> {'ok', Started} | {'error', Reason} when
+ Application :: atom(),
+ Type :: restart_type(),
+ Started :: [atom()],
+ Reason :: term().
+ensure_all_started(Application, Type) ->
+ case ensure_all_started(Application, Type, []) of
+ {ok, Started} ->
+ {ok, lists:reverse(Started)};
+ {error, Reason, Started} ->
+ [stop(App) || App <- Started],
+ {error, Reason}
+ end.
+
+ensure_all_started(Application, Type, Started) ->
+ case start(Application, Type) of
+ ok ->
+ {ok, [Application | Started]};
+ {error, {already_started, Application}} ->
+ {ok, Started};
+ {error, {not_started, Dependency}} ->
+ case ensure_all_started(Dependency, Type, Started) of
+ {ok, NewStarted} ->
+ ensure_all_started(Application, Type, NewStarted);
+ Error ->
+ Error
+ end;
+ {error, Reason} ->
+ {error, {Application, Reason}, Started}
+ end.
+
+
-spec start(Application) -> 'ok' | {'error', Reason} when
Application :: atom(),
Reason :: term().
diff --git a/lib/kernel/src/inet.erl b/lib/kernel/src/inet.erl
index 3ea530a366..5749027acd 100644
--- a/lib/kernel/src/inet.erl
+++ b/lib/kernel/src/inet.erl
@@ -32,7 +32,7 @@
ip/1, stats/0, options/0,
pushf/3, popf/1, close/1, gethostname/0, gethostname/1,
parse_ipv4_address/1, parse_ipv6_address/1, parse_ipv4strict_address/1,
- parse_ipv6strict_address/1, parse_address/1, parse_strict_address/1]).
+ parse_ipv6strict_address/1, parse_address/1, parse_strict_address/1, ntoa/1]).
-export([connect_options/2, listen_options/2, udp_options/2, sctp_options/2]).
@@ -529,6 +529,13 @@ getservbyname(Name, Protocol) when is_atom(Name) ->
Error -> Error
end.
+-spec ntoa(IpAddress) ->
+ {ok, Address} | {error, einval} when
+ Address :: string(),
+ IpAddress :: ip_address().
+ntoa(Addr) ->
+ inet_parse:ntoa(Addr).
+
-spec parse_ipv4_address(Address) ->
{ok, IPv4Address} | {error, einval} when
Address :: string(),
diff --git a/lib/kernel/src/inet_parse.erl b/lib/kernel/src/inet_parse.erl
index 619c78a6ca..98bd8d386c 100644
--- a/lib/kernel/src/inet_parse.erl
+++ b/lib/kernel/src/inet_parse.erl
@@ -722,7 +722,9 @@ ntoa({0,0,0,0,0,16#ffff,A,B}) ->
"::FFFF:" ++ dig_to_dec(A) ++ "." ++ dig_to_dec(B);
ntoa({_,_,_,_,_,_,_,_}=T) ->
%% Find longest sequence of zeros, at least 2, to replace with "::"
- ntoa(tuple_to_list(T), []).
+ ntoa(tuple_to_list(T), []);
+ntoa(_) ->
+ {error, einval}.
%% Find first double zero
ntoa([], R) ->
diff --git a/lib/kernel/src/rpc.erl b/lib/kernel/src/rpc.erl
index ced6f47bfe..0e7e7d2031 100644
--- a/lib/kernel/src/rpc.erl
+++ b/lib/kernel/src/rpc.erl
@@ -407,7 +407,7 @@ cast(Node, Mod, Fun, Args) ->
true.
-%% Asynchronous broadcast, returns nothing, it's just send'n prey
+%% Asynchronous broadcast, returns nothing, it's just send 'n' pray
-spec abcast(Name, Msg) -> abcast when
Name :: atom(),
Msg :: term().
diff --git a/lib/kernel/src/user_drv.erl b/lib/kernel/src/user_drv.erl
index bb654495d3..7b4ffb09ca 100644
--- a/lib/kernel/src/user_drv.erl
+++ b/lib/kernel/src/user_drv.erl
@@ -418,7 +418,7 @@ list_commands(Iport, Oport) ->
true ->
[];
false ->
- [{put_chars,unicode," q - quit erlang\n"}]
+ [{put_chars, unicode," q - quit erlang\n"}]
end,
io_requests([{put_chars, unicode," c [nn] - connect to job\n"},
{put_chars, unicode," i [nn] - interrupt job\n"},
diff --git a/lib/kernel/test/Makefile b/lib/kernel/test/Makefile
index cb11d4e899..f1b8a105ed 100644
--- a/lib/kernel/test/Makefile
+++ b/lib/kernel/test/Makefile
@@ -145,7 +145,7 @@ release_tests_spec: make_emakefile
$(INSTALL_DIR) "$(RELSYSDIR)"
$(INSTALL_DATA) $(ERL_FILES) "$(RELSYSDIR)"
$(INSTALL_DATA) $(APP_FILES) "$(RELSYSDIR)"
- $(INSTALL_DATA) kernel.spec $(EMAKEFILE)\
+ $(INSTALL_DATA) kernel.spec kernel_smoke.spec $(EMAKEFILE)\
$(COVERFILE) "$(RELSYSDIR)"
chmod -R u+w "$(RELSYSDIR)"
@tar cf - *_SUITE_data | (cd "$(RELSYSDIR)"; tar xf -)
diff --git a/lib/kernel/test/application_SUITE.erl b/lib/kernel/test/application_SUITE.erl
index 1ff291be54..9ec8a15861 100644
--- a/lib/kernel/test/application_SUITE.erl
+++ b/lib/kernel/test/application_SUITE.erl
@@ -35,7 +35,7 @@
-export([config_change/1,
distr_changed_tc1/1, distr_changed_tc2/1,
- ensure_started/1,
+ ensure_started/1, ensure_all_started/1,
shutdown_func/1, do_shutdown/1, shutdown_timeout/1]).
-define(TESTCASE, testcase_name).
@@ -52,7 +52,7 @@ all() ->
[failover, failover_comp, permissions, load,
load_use_cache, ensure_started, {group, reported_bugs}, start_phases,
script_start, nodedown_start, permit_false_start_local,
- permit_false_start_dist, get_key, get_env,
+ permit_false_start_dist, get_key, get_env, ensure_all_started,
{group, distr_changed}, config_change, shutdown_func, shutdown_timeout].
groups() ->
@@ -978,6 +978,85 @@ ensure_started(Conf) ->
ok = application:unload(app1),
ok.
+ensure_all_started(suite) -> [];
+ensure_all_started(doc) -> ["Test application:ensure_all_started/1-2."];
+ensure_all_started(Conf) ->
+
+ {ok, Fd1} = file:open("app1.app", [write]),
+ w_app1(Fd1),
+ file:close(Fd1),
+ {ok, Fd9} = file:open("app9.app", [write]),
+ w_app9(Fd9),
+ file:close(Fd9),
+ {ok, Fd10} = file:open("app10.app", [write]),
+ w_app10_dep9(Fd10),
+ file:close(Fd10),
+ {ok, FdErr} = file:open("app_chain_error.app", [write]),
+ w_app(FdErr, app_chain_error()),
+ file:close(FdErr),
+ {ok, FdErr2} = file:open("app_chain_error2.app", [write]),
+ w_app(FdErr2, app_chain_error2()),
+ file:close(FdErr2),
+
+ %% Single app start/stop
+ false = lists:keyfind(app1, 1, application:which_applications()),
+ {ok, [app1]} = application:ensure_all_started(app1), % app1 started
+ {app1, _, _} = lists:keyfind(app1, 1, application:which_applications()),
+ {ok, []} = application:ensure_all_started(app1), % no start needed
+ ok = application:stop(app1),
+ false = lists:keyfind(app1, 1, application:which_applications()),
+ ok = application:unload(app1),
+
+ %% App or dependency not found.
+ Name = hopefully_not_an_existing_app_file,
+ {error,{Name, {"no such file or directory", _ }}} =
+ application:ensure_all_started(Name),
+
+ %% Start dependencies.
+ {error, {not_started, app9}} = application:start(app10),
+ {ok, [app9,app10]} = application:ensure_all_started(app10, temporary),
+ {app9, _, _} = lists:keyfind(app9, 1, application:which_applications()),
+ {app10, _, _} = lists:keyfind(app10, 1, application:which_applications()),
+ %% Only report apps/dependencies that actually needed to start
+ ok = application:stop(app10),
+ ok = application:unload(app10),
+ {ok, [app10]} = application:ensure_all_started(app10, temporary),
+ ok = application:stop(app9),
+ ok = application:unload(app9),
+ ok = application:stop(app10),
+ ok = application:unload(app10),
+
+ %% Deeper failure chain. We have the following dependencies:
+ %% app_chain_error -> app_chain_error2
+ %% app_chain_error2 -> app10
+ %% app_chain_error2 -> hopefully_not_an_existing_app
+ %% app10 -> app 9
+ %% First we have none running and we expect to have neither app9
+ %% nor app10 running after failing to start
+ %% hopefully_not_an_existing_app
+ {error, {hopefully_not_an_existing_app, {"no such file or directory", _}}}=
+ application:ensure_all_started(app_chain_error),
+ false = lists:keyfind(app9, 1, application:which_applications()),
+ false = lists:keyfind(app10, 1, application:which_applications()),
+ false = lists:keyfind(app_chain_error2,1,application:which_applications()),
+ false = lists:keyfind(app_chain_error, 1, application:which_applications()),
+ %% Here we will have app9 already running, and app10 should be
+ %% able to boot fine.
+ %% In this dependency failing, we expect app9 to still be running, but
+ %% not app10 after failing to start hopefully_not_an_existing_app
+ {ok, [app9]} = application:ensure_all_started(app9, temporary),
+ {error, {hopefully_not_an_existing_app, {"no such file or directory", _}}}=
+ application:ensure_all_started(app_chain_error),
+ {app9, _, _} = lists:keyfind(app9, 1, application:which_applications()),
+ false = lists:keyfind(app10, 1, application:which_applications()),
+ false = lists:keyfind(app_chain_error2,1,application:which_applications()),
+ false = lists:keyfind(app_chain_error, 1, application:which_applications()),
+ ok = application:stop(app9),
+ ok = application:unload(app9),
+ ok = application:unload(app10),
+ ok = application:unload(app_chain_error2),
+ ok = application:unload(app_chain_error),
+ ok.
%%%-----------------------------------------------------------------
%%% Testing of reported bugs and other tickets.
@@ -2125,6 +2204,24 @@ app_start_error() ->
{applications, [kernel]},
{mod, {app_start_error, []}}]}.
+app_chain_error() ->
+ {application, app_chain_error,
+ [{description, "ERTS CXC 138 ce"},
+ {vsn, "2.0"},
+ {modules, []},
+ {registered, []},
+ {applications, [kernel, app_chain_error2]},
+ {mod, {ch_sup, {app_chain_error, 20,20}}}]}.
+
+app_chain_error2() ->
+ {application, app_chain_error2,
+ [{description, "ERTS CXC 138 ce2"},
+ {vsn, "2.0"},
+ {modules, []},
+ {registered, []},
+ {applications, [kernel, app10, hopefully_not_an_existing_app]},
+ {mod, {ch_sup, {app_chain_error2, 21,21}}}]}.
+
app_group_leader() ->
{application, group_leader,
[{description, "GROUP_LEADER CXC 138 11"},
@@ -2374,6 +2471,12 @@ w_app7(Fd) ->
w_app8(Fd) ->
io:format(Fd, "~p.\n", [app8()]).
+w_app9(Fd) ->
+ io:format(Fd, "~p.\n", [app9()]).
+
+w_app10_dep9(Fd) ->
+ io:format(Fd, "~p.\n", [app10_dep9()]).
+
w_app_start_error(Fd) ->
io:format(Fd, "~p.\n", [app_start_error()]).
diff --git a/lib/kernel/test/code_SUITE.erl b/lib/kernel/test/code_SUITE.erl
index fc17db2745..cd9359f2aa 100644
--- a/lib/kernel/test/code_SUITE.erl
+++ b/lib/kernel/test/code_SUITE.erl
@@ -35,7 +35,7 @@
on_load_embedded/1, on_load_errors/1, big_boot_embedded/1,
native_early_modules/1, get_mode/1]).
--export([init_per_testcase/2, end_per_testcase/2,
+-export([init_per_testcase/2, end_per_testcase/2,
init_per_suite/1, end_per_suite/1,
sticky_compiler/1]).
@@ -48,7 +48,7 @@
suite() -> [{ct_hooks,[ts_install_cth]}].
-all() ->
+all() ->
[set_path, get_path, add_path, add_paths, del_path,
replace_path, load_file, load_abs, ensure_loaded,
delete, purge, soft_purge, is_loaded, all_loaded,
@@ -62,7 +62,7 @@ all() ->
on_load_binary, on_load_embedded, on_load_errors,
big_boot_embedded, native_early_modules, get_mode].
-groups() ->
+groups() ->
[].
init_per_group(_GroupName, Config) ->
@@ -76,10 +76,10 @@ init_per_suite(Config) ->
%% the module name does not match the filename, so
%% we must compile to a binary and write the Beam file
%% ourselves.
- ?line Dir = filename:dirname(code:which(?MODULE)),
- ?line File = filename:join(Dir, "code_a_test"),
- ?line {ok,code_b_test,Code} = compile:file(File, [binary]),
- ?line ok = file:write_file(File++".beam", Code),
+ Dir = filename:dirname(code:which(?MODULE)),
+ File = filename:join(Dir, "code_a_test"),
+ {ok,code_b_test,Code} = compile:file(File, [binary]),
+ ok = file:write_file(File++".beam", Code),
Config.
end_per_suite(Config) ->
@@ -98,7 +98,7 @@ init_per_testcase(_Func, Config) ->
P=code:get_path(),
[{watchdog, Dog}, {code_path, P}|Config].
-end_per_testcase(TC, Config) when TC == mult_lib_roots;
+end_per_testcase(TC, Config) when TC == mult_lib_roots;
TC == big_boot_embedded ->
{ok, HostName} = inet:gethostname(),
NodeName = list_to_atom(atom_to_list(TC)++"@"++HostName),
@@ -121,51 +121,49 @@ set_path(doc) -> [];
set_path(Config) when is_list(Config) ->
P = code:get_path(),
NonExDir = filename:join(?config(priv_dir, Config), ?t:temp_name("hej")),
- ?line {'EXIT',_} = (catch code:set_path({a})),
- ?line {error, bad_directory} = (catch code:set_path([{a}])),
- ?line {error, bad_directory} = code:set_path(NonExDir),
- ?line P = code:get_path(), % still the same path.
- ?line true = code:set_path(P), % set the same path again.
- ?line P = code:get_path(), % still the same path.
+ {'EXIT',_} = (catch code:set_path({a})),
+ {error, bad_directory} = (catch code:set_path([{a}])),
+ {error, bad_directory} = code:set_path(NonExDir),
+ P = code:get_path(), % still the same path.
+ true = code:set_path(P), % set the same path again.
+ P = code:get_path(), % still the same path.
LibDir = code:lib_dir(),
- ?line true = code:set_path([LibDir | P]),
- ?line [LibDir | P] = code:get_path(),
- ?line true = code:set_path([LibDir]),
- ?line [LibDir] = code:get_path(),
+ true = code:set_path([LibDir | P]),
+ [LibDir | P] = code:get_path(),
+ true = code:set_path([LibDir]),
+ [LibDir] = code:get_path(),
ok.
get_path(suite) -> [];
get_path(doc) -> [];
get_path(Config) when is_list(Config) ->
- ?line P = code:get_path(),
+ P = code:get_path(),
% test that all directories are strings (lists).
- ?line [] = lists:filter(fun(Dir) when is_list(Dir) ->
- false;
- (_) ->
- true
- end,
- P),
+ [] = lists:filter(fun
+ (Dir) when is_list(Dir) -> false;
+ (_) -> true
+ end, P),
ok.
add_path(suite) -> [];
add_path(doc) -> [];
add_path(Config) when is_list(Config) ->
P = code:get_path(),
- ?line {'EXIT',_} = (catch code:add_path({})),
- ?line {'EXIT',_} = (catch code:add_patha({})),
- ?line {'EXIT',_} = (catch code:add_pathz({})),
- ?line {error, bad_directory} = code:add_path("xyz"),
- ?line {error, bad_directory} = code:add_patha("xyz"),
- ?line {error, bad_directory} = code:add_pathz("xyz"),
+ {'EXIT',_} = (catch code:add_path({})),
+ {'EXIT',_} = (catch code:add_patha({})),
+ {'EXIT',_} = (catch code:add_pathz({})),
+ {error, bad_directory} = code:add_path("xyz"),
+ {error, bad_directory} = code:add_patha("xyz"),
+ {error, bad_directory} = code:add_pathz("xyz"),
LibDir = code:lib_dir(),
- ?line true = code:add_path(LibDir),
- ?line LibDir = lists:last(code:get_path()),
+ true = code:add_path(LibDir),
+ LibDir = lists:last(code:get_path()),
code:set_path(P),
- ?line true = code:add_pathz(LibDir),
- ?line LibDir = lists:last(code:get_path()),
+ true = code:add_pathz(LibDir),
+ LibDir = lists:last(code:get_path()),
code:set_path(P),
- ?line true = code:add_patha(LibDir),
- ?line [LibDir|_] = code:get_path(),
+ true = code:add_patha(LibDir),
+ [LibDir|_] = code:get_path(),
code:set_path(P),
ok.
@@ -173,134 +171,134 @@ add_paths(suite) -> [];
add_paths(doc) -> [];
add_paths(Config) when is_list(Config) ->
P = code:get_path(),
- ?line ok = code:add_paths([{}]),
- ?line ok = code:add_pathsa([{}]),
- ?line ok = code:add_pathsz([{}]),
- ?line ok = code:add_paths(["xyz"]),
- ?line ok = code:add_pathsa(["xyz"]),
- ?line ok = code:add_pathsz(["xyz"]),
+ ok = code:add_paths([{}]),
+ ok = code:add_pathsa([{}]),
+ ok = code:add_pathsz([{}]),
+ ok = code:add_paths(["xyz"]),
+ ok = code:add_pathsa(["xyz"]),
+ ok = code:add_pathsz(["xyz"]),
P = code:get_path(), % check that no directory is added.
LibDir = code:lib_dir(),
- ?line ok = code:add_paths([LibDir]),
- ?line LibDir = lists:last(code:get_path()),
+ ok = code:add_paths([LibDir]),
+ LibDir = lists:last(code:get_path()),
code:set_path(P),
- ?line ok = code:add_pathsz([LibDir]),
- ?line LibDir = lists:last(code:get_path()),
+ ok = code:add_pathsz([LibDir]),
+ LibDir = lists:last(code:get_path()),
code:set_path(P),
- ?line ok = code:add_pathsa([LibDir]),
- ?line [LibDir|P] = code:get_path(),
+ ok = code:add_pathsa([LibDir]),
+ [LibDir|P] = code:get_path(),
code:set_path(P),
RootDir = code:root_dir(),
Res = P ++ [LibDir, RootDir],
- ?line ok = code:add_paths([LibDir, RootDir]),
- ?line Res = code:get_path(),
+ ok = code:add_paths([LibDir, RootDir]),
+ Res = code:get_path(),
code:set_path(P),
- ?line ok = code:add_pathsz([LibDir, RootDir]),
- ?line Res = code:get_path(),
+ ok = code:add_pathsz([LibDir, RootDir]),
+ Res = code:get_path(),
code:set_path(P),
- ?line ok = code:add_pathsa([LibDir, RootDir]),
- ?line [RootDir, LibDir|P] = code:get_path(),
+ ok = code:add_pathsa([LibDir, RootDir]),
+ [RootDir, LibDir|P] = code:get_path(),
code:set_path(P),
- ?line ok = code:add_paths([LibDir, "xyz"]),
+ ok = code:add_paths([LibDir, "xyz"]),
Res1 = P ++ [LibDir],
- ?line Res1 = code:get_path(),
+ Res1 = code:get_path(),
code:set_path(P),
- ?line ok = code:add_pathsz([LibDir, "xyz"]),
- ?line Res1 = code:get_path(),
+ ok = code:add_pathsz([LibDir, "xyz"]),
+ Res1 = code:get_path(),
code:set_path(P),
- ?line ok = code:add_pathsa([LibDir, "xyz"]),
- ?line [LibDir|P] = code:get_path(),
+ ok = code:add_pathsa([LibDir, "xyz"]),
+ [LibDir|P] = code:get_path(),
code:set_path(P),
ok.
del_path(suite) -> [];
del_path(doc) -> [];
del_path(Config) when is_list(Config) ->
- ?line P = code:get_path(),
+ P = code:get_path(),
test_server:format("Initial code:get_path()=~p~n",[P]),
- ?line {'EXIT',_} = (catch code:del_path(3)),
- ?line false = code:del_path(my_dummy_name),
- ?line false = code:del_path("/kdlk/my_dummy_dir"),
+ {'EXIT',_} = (catch code:del_path(3)),
+ false = code:del_path(my_dummy_name),
+ false = code:del_path("/kdlk/my_dummy_dir"),
Dir = filename:join([code:lib_dir(kernel),"ebin"]),
test_server:format("kernel dir: ~p~n",[Dir]),
- ?line true = code:del_path(kernel),
+ true = code:del_path(kernel),
NewP = code:get_path(),
test_server:format("Path after removing 'kernel':~p~n",[NewP]),
ReferenceP = lists:delete(Dir,P),
test_server:format("Reference path:~p~n",[ReferenceP]),
- ?line NewP = ReferenceP, % check that dir is deleted
+ NewP = ReferenceP, % check that dir is deleted
code:set_path(P),
- ?line true = code:del_path(Dir),
+ true = code:del_path(Dir),
NewP1 = code:get_path(),
- ?line NewP1 = lists:delete(Dir,P), % check that dir is deleted
+ NewP1 = lists:delete(Dir,P), % check that dir is deleted
code:set_path(P),
ok.
replace_path(suite) -> [];
replace_path(doc) -> [];
replace_path(Config) when is_list(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
- ?line P = code:get_path(),
- ?line {'EXIT',_} = (catch code:replace_path(3,"")),
- ?line {error, bad_name} = code:replace_path(dummy_name,""),
- ?line {error, bad_name} = code:replace_path(kernel,
+ PrivDir = ?config(priv_dir, Config),
+ P = code:get_path(),
+ {'EXIT',_} = (catch code:replace_path(3,"")),
+ {error, bad_name} = code:replace_path(dummy_name,""),
+ {error, bad_name} = code:replace_path(kernel,
"/kdlk/my_dummy_dir"),
- ?line {error, bad_directory} = code:replace_path(kernel,
+ {error, bad_directory} = code:replace_path(kernel,
"/kdlk/kernel-1.2"),
- ?line P = code:get_path(), % Check that path is not changed.
+ P = code:get_path(), % Check that path is not changed.
- ?line ok = file:set_cwd(PrivDir),
+ ok = file:set_cwd(PrivDir),
%% Replace an existing application.
file:make_dir("./kernel-2.11"),
{ok, Cwd} = file:get_cwd(),
NewDir = Cwd ++ "/kernel-2.11",
- ?line true = code:replace_path(kernel, NewDir),
- ?line NewDir = code:lib_dir(kernel),
- ?line true = code:set_path(P), %Reset path
- ?line ok = file:del_dir("./kernel-2.11"),
+ true = code:replace_path(kernel, NewDir),
+ NewDir = code:lib_dir(kernel),
+ true = code:set_path(P), %Reset path
+ ok = file:del_dir("./kernel-2.11"),
%% Add a completly new application.
NewAppName = 'blurf_blarfer',
- ?line NewAppDir = filename:join(Cwd, atom_to_list(NewAppName) ++ "-6.33.1"),
- ?line ok = file:make_dir(NewAppDir),
- ?line true = code:replace_path(NewAppName, NewAppDir),
- ?line NewAppDir = code:lib_dir(NewAppName),
- ?line NewAppDir = lists:last(code:get_path()),
- ?line true = code:set_path(P), %Reset path
- ?line ok = file:del_dir(NewAppDir),
+ NewAppDir = filename:join(Cwd, atom_to_list(NewAppName) ++ "-6.33.1"),
+ ok = file:make_dir(NewAppDir),
+ true = code:replace_path(NewAppName, NewAppDir),
+ NewAppDir = code:lib_dir(NewAppName),
+ NewAppDir = lists:last(code:get_path()),
+ true = code:set_path(P), %Reset path
+ ok = file:del_dir(NewAppDir),
ok.
dir_disappeared(suite) -> [];
dir_disappeared(doc) -> ["OTP-3977"];
dir_disappeared(Config) when is_list(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Dir = filename:join(PrivDir, "temp"),
- ?line ok = file:make_dir(Dir),
- ?line true = code:add_path(Dir),
- ?line ok = file:del_dir(Dir),
- ?line non_existing = code:which(bubbelskrammel),
+ PrivDir = ?config(priv_dir, Config),
+ Dir = filename:join(PrivDir, "temp"),
+ ok = file:make_dir(Dir),
+ true = code:add_path(Dir),
+ ok = file:del_dir(Dir),
+ non_existing = code:which(bubbelskrammel),
ok.
load_file(suite) -> [];
load_file(doc) -> [];
load_file(Config) when is_list(Config) ->
- ?line {error, nofile} = code:load_file(duuuumy_mod),
- ?line {error, badfile} = code:load_file(code_a_test),
- ?line {'EXIT', _} = (catch code:load_file(123)),
- ?line {module, code_b_test} = code:load_file(code_b_test),
+ {error, nofile} = code:load_file(duuuumy_mod),
+ {error, badfile} = code:load_file(code_a_test),
+ {'EXIT', _} = (catch code:load_file(123)),
+ {module, code_b_test} = code:load_file(code_b_test),
TestDir = test_dir(),
code:stick_dir(TestDir),
- ?line {error, sticky_directory} = code:load_file(code_b_test),
+ {error, sticky_directory} = code:load_file(code_b_test),
code:unstick_dir(TestDir),
ok.
@@ -311,30 +309,30 @@ load_abs(suite) -> [];
load_abs(doc) -> [];
load_abs(Config) when is_list(Config) ->
TestDir = test_dir(),
- ?line {error, nofile} = code:load_abs(TestDir ++ "/duuuumy_mod"),
- ?line {error, badfile} = code:load_abs(TestDir ++ "/code_a_test"),
- ?line {'EXIT', _} = (catch code:load_abs({})),
- ?line {module, code_b_test} = code:load_abs(TestDir ++ "/code_b_test"),
+ {error, nofile} = code:load_abs(TestDir ++ "/duuuumy_mod"),
+ {error, badfile} = code:load_abs(TestDir ++ "/code_a_test"),
+ {'EXIT', _} = (catch code:load_abs({})),
+ {module, code_b_test} = code:load_abs(TestDir ++ "/code_b_test"),
code:stick_dir(TestDir),
- ?line {error, sticky_directory} = code:load_abs(TestDir ++ "/code_b_test"),
+ {error, sticky_directory} = code:load_abs(TestDir ++ "/code_b_test"),
code:unstick_dir(TestDir),
ok.
ensure_loaded(suite) -> [];
ensure_loaded(doc) -> [];
ensure_loaded(Config) when is_list(Config) ->
- ?line {module, lists} = code:ensure_loaded(lists),
+ {module, lists} = code:ensure_loaded(lists),
case init:get_argument(mode) of
{ok, [["embedded"]]} ->
- ?line {error, embedded} = code:ensure_loaded(code_b_test),
- ?line {error, badarg} = code:ensure_loaded(34),
+ {error, embedded} = code:ensure_loaded(code_b_test),
+ {error, badarg} = code:ensure_loaded(34),
ok;
_ ->
- ?line {error, nofile} = code:ensure_loaded(duuuumy_mod),
- ?line {error, badfile} = code:ensure_loaded(code_a_test),
- ?line {'EXIT', _} = (catch code:ensure_loaded(34)),
- ?line {module, code_b_test} = code:ensure_loaded(code_b_test),
- ?line {module, code_b_test} = code:ensure_loaded(code_b_test),
+ {error, nofile} = code:ensure_loaded(duuuumy_mod),
+ {error, badfile} = code:ensure_loaded(code_a_test),
+ {'EXIT', _} = (catch code:ensure_loaded(34)),
+ {module, code_b_test} = code:ensure_loaded(code_b_test),
+ {module, code_b_test} = code:ensure_loaded(code_b_test),
ok
end.
@@ -343,15 +341,15 @@ delete(doc) -> [];
delete(Config) when is_list(Config) ->
OldFlag = process_flag(trap_exit, true),
code:purge(code_b_test),
- ?line Pid = code_b_test:do_spawn(),
- ?line true = code:delete(code_b_test),
- ?line {'EXIT',_} = (catch code:delete(122)),
- ?line false = code_b_test:check_exit(Pid),
- ?line false = code:delete(code_b_test),
- ?line false = code_b_test:check_exit(Pid),
+ Pid = code_b_test:do_spawn(),
+ true = code:delete(code_b_test),
+ {'EXIT',_} = (catch code:delete(122)),
+ false = code_b_test:check_exit(Pid),
+ false = code:delete(code_b_test),
+ false = code_b_test:check_exit(Pid),
exit(Pid,kill),
- ?line true = code_b_test:check_exit(Pid),
- ?line false = code:delete(code_b_test),
+ true = code_b_test:check_exit(Pid),
+ false = code:delete(code_b_test),
code:purge(code_b_test),
process_flag(trap_exit, OldFlag),
ok.
@@ -361,13 +359,13 @@ purge(doc) -> [];
purge(Config) when is_list(Config) ->
OldFlag = process_flag(trap_exit, true),
code:purge(code_b_test),
- ?line {'EXIT',_} = (catch code:purge({})),
- ?line false = code:purge(code_b_test),
- ?line Pid = code_b_test:do_spawn(),
- ?line true = code:delete(code_b_test),
- ?line false = code_b_test:check_exit(Pid),
- ?line true = code:purge(code_b_test),
- ?line true = code_b_test:check_exit(Pid),
+ {'EXIT',_} = (catch code:purge({})),
+ false = code:purge(code_b_test),
+ Pid = code_b_test:do_spawn(),
+ true = code:delete(code_b_test),
+ false = code_b_test:check_exit(Pid),
+ true = code:purge(code_b_test),
+ true = code_b_test:check_exit(Pid),
process_flag(trap_exit, OldFlag),
ok.
@@ -376,16 +374,16 @@ soft_purge(doc) -> [];
soft_purge(Config) when is_list(Config) ->
OldFlag = process_flag(trap_exit, true),
code:purge(code_b_test),
- ?line {'EXIT',_} = (catch code:soft_purge(23)),
- ?line true = code:soft_purge(code_b_test),
- ?line Pid = code_b_test:do_spawn(),
- ?line true = code:delete(code_b_test),
- ?line false = code_b_test:check_exit(Pid),
- ?line false = code:soft_purge(code_b_test),
- ?line false = code_b_test:check_exit(Pid),
+ {'EXIT',_} = (catch code:soft_purge(23)),
+ true = code:soft_purge(code_b_test),
+ Pid = code_b_test:do_spawn(),
+ true = code:delete(code_b_test),
+ false = code_b_test:check_exit(Pid),
+ false = code:soft_purge(code_b_test),
+ false = code_b_test:check_exit(Pid),
exit(Pid,kill),
- ?line true = code_b_test:check_exit(Pid),
- ?line true = code:soft_purge(code_b_test),
+ true = code_b_test:check_exit(Pid),
+ true = code:soft_purge(code_b_test),
process_flag(trap_exit, OldFlag),
ok.
@@ -394,12 +392,12 @@ is_loaded(doc) -> [];
is_loaded(Config) when is_list(Config) ->
code:purge(code_b_test),
code:delete(code_b_test),
- ?line false = code:is_loaded(duuuuuumy_mod),
- ?line {'EXIT',_} = (catch code:is_loaded(23)),
- ?line {file, preloaded} = code:is_loaded(init),
+ false = code:is_loaded(duuuuuumy_mod),
+ {'EXIT',_} = (catch code:is_loaded(23)),
+ {file, preloaded} = code:is_loaded(init),
TestDir = test_dir(),
- ?line {module, code_b_test} = code:load_abs(TestDir ++ "/code_b_test"),
- ?line {file, _Loaded} = code:is_loaded(code_b_test),
+ {module, code_b_test} = code:load_abs(TestDir ++ "/code_b_test"),
+ {file, _Loaded} = code:is_loaded(code_b_test),
code:purge(code_b_test),
code:delete(code_b_test),
ok.
@@ -413,21 +411,19 @@ all_loaded(Config) when is_list(Config) ->
end.
all_loaded_1() ->
- ?line Preloaded = [{M,preloaded} || M <- lists:sort(erlang:pre_loaded())],
+ Preloaded = [{M,preloaded} || M <- lists:sort(erlang:pre_loaded())],
- ?line Loaded0 = lists:sort(code:all_loaded()),
- ?line all_unique(Loaded0),
- ?line Loaded1 = lists:keysort(2, Loaded0),
- ?line Loaded2 = match_and_remove(Preloaded, Loaded1),
+ Loaded0 = lists:sort(code:all_loaded()),
+ all_unique(Loaded0),
+ Loaded1 = lists:keysort(2, Loaded0),
+ Loaded2 = match_and_remove(Preloaded, Loaded1),
ObjExt = code:objfile_extension(),
- ?line [] = lists:filter(fun({Mod,AbsName}) when is_atom(Mod),
- is_list(AbsName) ->
- Mod =/= list_to_atom(filename:basename(AbsName,
- ObjExt));
- (_) -> true
- end,
- Loaded2),
+ [] = lists:filter(fun
+ ({Mod,AbsName}) when is_atom(Mod), is_list(AbsName) ->
+ Mod =/= list_to_atom(filename:basename(AbsName, ObjExt));
+ (_) -> true
+ end, Loaded2),
ok.
match_and_remove([], List) -> List;
@@ -442,19 +438,19 @@ load_binary(doc) -> [];
load_binary(Config) when is_list(Config) ->
TestDir = test_dir(),
File = TestDir ++ "/code_b_test" ++ code:objfile_extension(),
- ?line {ok,Bin} = file:read_file(File),
- ?line {'EXIT',_} = (catch code:load_binary(12, File, Bin)),
- ?line {'EXIT',_} = (catch code:load_binary(code_b_test, 12, Bin)),
- ?line {'EXIT',_} = (catch code:load_binary(code_b_test, File, 12)),
- ?line {module, code_b_test} = code:load_binary(code_b_test, File, Bin),
+ {ok,Bin} = file:read_file(File),
+ {'EXIT',_} = (catch code:load_binary(12, File, Bin)),
+ {'EXIT',_} = (catch code:load_binary(code_b_test, 12, Bin)),
+ {'EXIT',_} = (catch code:load_binary(code_b_test, File, 12)),
+ {module, code_b_test} = code:load_binary(code_b_test, File, Bin),
code:stick_dir(TestDir),
- ?line {error, sticky_directory} = code:load_binary(code_b_test, File, Bin),
+ {error, sticky_directory} = code:load_binary(code_b_test, File, Bin),
code:unstick_dir(TestDir),
code:purge(code_b_test),
code:delete(code_b_test),
ok.
-upgrade(Config) ->
+upgrade(Config) ->
DataDir = ?config(data_dir, Config),
%%T = [beam, hipe],
@@ -462,28 +458,28 @@ upgrade(Config) ->
[upgrade_do(DataDir, Client, U1, U2, O1, O2)
|| Client<-T, U1<-T, U2<-T, O1<-T, O2<-T],
-
+
ok.
upgrade_do(DataDir, Client, U1, U2, O1, O2) ->
- compile_load(upgrade_client, DataDir, undefined, Client),
+ compile_load(upgrade_client, DataDir, undefined, Client),
upgrade_client:run(DataDir, U1, U2, O1, O2),
ok.
compile_load(Mod, Dir, Ver, CodeType) ->
Version = case Ver of
- undefined ->
- io:format("Compiling '~p' as ~p\n", [Mod, CodeType]),
- [];
- _ ->
- io:format("Compiling version ~p of '~p' as ~p\n",
- [Ver, Mod, CodeType]),
- [{d,list_to_atom("VERSION_" ++ integer_to_list(Ver))}]
- end,
+ undefined ->
+ io:format("Compiling '~p' as ~p\n", [Mod, CodeType]),
+ [];
+ _ ->
+ io:format("Compiling version ~p of '~p' as ~p\n",
+ [Ver, Mod, CodeType]),
+ [{d,list_to_atom("VERSION_" ++ integer_to_list(Ver))}]
+ end,
Target = case CodeType of
- beam -> [];
- hipe -> [native]
- end,
+ beam -> [];
+ hipe -> [native]
+ end,
CompOpts = [binary, report] ++ Target ++ Version,
Src = filename:join(Dir, atom_to_list(Mod) ++ ".erl"),
@@ -497,17 +493,17 @@ compile_load(Mod, Dir, Ver, CodeType) ->
dir_req(suite) -> [];
dir_req(doc) -> [];
dir_req(Config) when is_list(Config) ->
- ?line {ok,[[Root0]]} = init:get_argument(root),
- ?line Root = filename:join([Root0]), % Normalised form.
- ?line Root = code:root_dir(),
+ {ok,[[Root0]]} = init:get_argument(root),
+ Root = filename:join([Root0]), % Normalised form.
+ Root = code:root_dir(),
LibDir = Root ++ "/lib",
- ?line LibDir = code:lib_dir(),
- ?line code:compiler_dir(),
- ?line {error, bad_name} = code:lib_dir(duuumy),
- ?line KernLib = code:lib_dir(kernel),
- ?line Priv = KernLib ++ "/priv",
- ?line Priv = code:priv_dir(kernel),
- ?line {error, bad_name} = code:priv_dir(duuumy),
+ LibDir = code:lib_dir(),
+ code:compiler_dir(),
+ {error, bad_name} = code:lib_dir(duuumy),
+ KernLib = code:lib_dir(kernel),
+ Priv = KernLib ++ "/priv",
+ Priv = code:priv_dir(kernel),
+ {error, bad_name} = code:priv_dir(duuumy),
ok.
object_code(suite) -> [];
@@ -517,19 +513,19 @@ object_code(Config) when is_list(Config) ->
P = code:get_path(),
P = code:get_path(),
code:add_path(TestDir),
- ?line {module, code_b_test} = code:load_abs(TestDir ++ "/code_b_test"),
+ {module, code_b_test} = code:load_abs(TestDir ++ "/code_b_test"),
LoadedFile = filename:absname(TestDir ++ "/code_b_test" ++
code:objfile_extension()),
- ?line case code:get_object_code(code_b_test) of
+ case code:get_object_code(code_b_test) of
{code_b_test,Bin,LoadedFile} when is_binary(Bin) ->
ok
end,
code:purge(code_b_test),
code:delete(code_b_test),
- ?line error = code:get_object_code(dddddddduuuuuuumy),
- ?line {'EXIT',_} = (catch code:get_object_code(23)),
- ?line code:set_path(P),
- ?line P=code:get_path(),
+ error = code:get_object_code(dddddddduuuuuuumy),
+ {'EXIT',_} = (catch code:get_object_code(23)),
+ code:set_path(P),
+ P=code:get_path(),
ok.
set_path_file(suite) -> [];
@@ -537,17 +533,17 @@ set_path_file(doc) -> ["Test that set_path does not accept ",
"files as pathnames (known previous bug)"];
set_path_file(Config) when is_list(Config) ->
File=filename:join(?config(priv_dir, Config), "testfil"),
- ?line ok=file:write_file(File, list_to_binary("lite data")),
- ?line {error, bad_directory}=code:set_path([File]).
+ ok=file:write_file(File, list_to_binary("lite data")),
+ {error, bad_directory}=code:set_path([File]).
sticky_dir(suite) -> [];
sticky_dir(doc) -> ["Test that a module with the same name as a module in ",
"a sticky directory cannot be loaded."];
sticky_dir(Config) when is_list(Config) ->
MyDir=filename:dirname(code:which(?MODULE)),
- ?line {ok, Node}=?t:start_node(sticky_dir, slave,[{args, "-pa \""++MyDir++"\""}]),
+ {ok, Node}=?t:start_node(sticky_dir, slave,[{args, "-pa \""++MyDir++"\""}]),
File=filename:join([?config(data_dir, Config), "calendar"]),
- ?line Ret=rpc:call(Node, ?MODULE, sticky_compiler, [File]),
+ Ret=rpc:call(Node, ?MODULE, sticky_compiler, [File]),
case Ret of
fail ->
?t:fail("c:c allowed a sticky module to be compiled and loaded.");
@@ -607,70 +603,70 @@ add_del_path(Config) when is_list(Config) ->
Dir1 = filename:join(DDir,"dummy_app-1.0/ebin"),
Dir2 = filename:join(DDir,"dummy_app-2.0/ebin"),
code:add_patha(Dir1),
- ?line PrivDir1 = filename:join(DDir,"dummy_app-1.0/priv"),
- ?line PrivDir1 = code:priv_dir(dummy_app),
- ?line code:add_path(Dir2), % put last in path
- ?line PrivDir1 = code:priv_dir(dummy_app),
- ?line code:del_path(Dir2),
- ?line PrivDir1 = code:priv_dir(dummy_app),
+ PrivDir1 = filename:join(DDir,"dummy_app-1.0/priv"),
+ PrivDir1 = code:priv_dir(dummy_app),
+ code:add_path(Dir2), % put last in path
+ PrivDir1 = code:priv_dir(dummy_app),
+ code:del_path(Dir2),
+ PrivDir1 = code:priv_dir(dummy_app),
ok.
clash(Config) when is_list(Config) ->
DDir = ?config(data_dir,Config)++"clash/",
P = code:get_path(),
- [TestServerPath|_] = [Path || Path <- code:get_path(),
+ [TestServerPath|_] = [Path || Path <- code:get_path(),
re:run(Path,"test_server/?$",[]) /= nomatch],
%% test non-clashing entries
%% remove TestServerPath to prevent clash with test-server path
- ?line true = code:del_path(TestServerPath),
- ?line true = code:add_path(DDir++"foobar-0.1/ebin"),
- ?line true = code:add_path(DDir++"zork-0.8/ebin"),
+ true = code:del_path(TestServerPath),
+ true = code:add_path(DDir++"foobar-0.1/ebin"),
+ true = code:add_path(DDir++"zork-0.8/ebin"),
test_server:capture_start(),
- ?line ok = code:clash(),
+ ok = code:clash(),
test_server:capture_stop(),
- ?line [OKMsg|_] = test_server:capture_get(),
- ?line true = lists:prefix("** Found 0 name clashes", OKMsg),
- ?line true = code:set_path(P),
+ [OKMsg|_] = test_server:capture_get(),
+ true = lists:prefix("** Found 0 name clashes", OKMsg),
+ true = code:set_path(P),
%% test clashing entries
%% remove TestServerPath to prevent clash with test-server path
- ?line true = code:del_path(TestServerPath),
- ?line true = code:add_path(DDir++"foobar-0.1/ebin"),
- ?line true = code:add_path(DDir++"foobar-0.1.ez/foobar-0.1/ebin"),
+ true = code:del_path(TestServerPath),
+ true = code:add_path(DDir++"foobar-0.1/ebin"),
+ true = code:add_path(DDir++"foobar-0.1.ez/foobar-0.1/ebin"),
test_server:capture_start(),
- ?line ok = code:clash(),
+ ok = code:clash(),
test_server:capture_stop(),
- ?line [ClashMsg|_] = test_server:capture_get(),
- ?line {match, [" hides "]} = re:run(ClashMsg, "\\*\\* .*( hides ).*",
+ [ClashMsg|_] = test_server:capture_get(),
+ {match, [" hides "]} = re:run(ClashMsg, "\\*\\* .*( hides ).*",
[{capture,all_but_first,list}]),
- ?line true = code:set_path(P),
+ true = code:set_path(P),
%% test "Bad path can't read"
%% remove TestServerPath to prevent clash with test-server path
Priv = ?config(priv_dir, Config),
- ?line true = code:del_path(TestServerPath),
+ true = code:del_path(TestServerPath),
TmpEzFile = Priv++"foobar-0.tmp.ez",
- ?line {ok, _} = file:copy(DDir++"foobar-0.1.ez", TmpEzFile),
- ?line true = code:add_path(TmpEzFile++"/foobar-0.1/ebin"),
+ {ok, _} = file:copy(DDir++"foobar-0.1.ez", TmpEzFile),
+ true = code:add_path(TmpEzFile++"/foobar-0.1/ebin"),
case os:type() of
{win32,_} ->
- %% The file wont be deleted on windows until it's closed, why we
+ %% The file wont be deleted on windows until it's closed, why we
%% need to rename instead.
- ?line ok = file:rename(TmpEzFile,TmpEzFile++".moved");
+ ok = file:rename(TmpEzFile,TmpEzFile++".moved");
_ ->
- ?line ok = file:delete(TmpEzFile)
+ ok = file:delete(TmpEzFile)
end,
test_server:capture_start(),
- ?line ok = code:clash(),
+ ok = code:clash(),
test_server:capture_stop(),
- ?line [BadPathMsg|_] = test_server:capture_get(),
- ?line true = lists:prefix("** Bad path can't read", BadPathMsg),
- ?line true = code:set_path(P),
+ [BadPathMsg|_] = test_server:capture_get(),
+ true = lists:prefix("** Bad path can't read", BadPathMsg),
+ true = code:set_path(P),
file:delete(TmpEzFile++".moved"), %% Only effect on windows
ok.
@@ -687,7 +683,7 @@ ext_mod_dep(Config) when is_list(Config) ->
xref:add_directory(s, filename:join(code:lib_dir(kernel),"ebin")),
xref:add_directory(s, filename:join(code:lib_dir(stdlib),"ebin")),
case catch ext_mod_dep2() of
- {'EXIT', Reason} ->
+ {'EXIT', Reason} ->
xref:stop(s),
exit(Reason);
Else ->
@@ -699,7 +695,7 @@ ext_mod_dep(Config) when is_list(Config) ->
end.
ext_mod_dep2() ->
- Exports0 = code_server:module_info(exports) --
+ Exports0 = code_server:module_info(exports) --
[{module_info,0},{module_info,1}],
Exports = [{code_server,M,A} || {M,A} <- Exports0],
case analyse(Exports, [], [], 0) of
@@ -709,17 +705,17 @@ ext_mod_dep2() ->
{not_verified,ErrCnt}
end.
-analyse([], [], Visited, ErrCnt) ->
+analyse([], [], Visited, ErrCnt) ->
{Visited,ErrCnt};
analyse([], [This={M,F,A}|Path], Visited, ErrCnt0) ->
%% The code_server has been granted to use the following modules,
- %% These modules should be loaded by code.erl before
+ %% These modules should be loaded by code.erl before
%% the code_server is started.
OK = [erlang, os, prim_file, erl_prim_loader, init, ets,
code_server, lists, lists_sort, unicode, binary, filename,
gb_sets, gb_trees, hipe_unified_loader, hipe_bifs,
prim_zip, zlib],
- ErrCnt1 =
+ ErrCnt1 =
case lists:member(M, OK) or erlang:is_builtin(M,F,A) of
true ->
0;
@@ -729,7 +725,7 @@ analyse([], [This={M,F,A}|Path], Visited, ErrCnt0) ->
{Visited, ErrCnt1+ErrCnt0};
analyse([MFA|R], Path, Visited0, ErrCnt0) ->
case lists:member(MFA,Visited0) of
- false ->
+ false ->
{Visited,ErrCnt1} = analyse2(MFA, Path, Visited0),
analyse(R, Path, Visited, ErrCnt1+ErrCnt0);
true ->
@@ -814,7 +810,7 @@ check_funs({'$M_EXPR','$F_EXPR',_},
{code_server,start_link,1}]) -> 0;
check_funs({'$M_EXPR','$F_EXPR',_},
[{erlang,spawn_link,1},{code_server,start_link,1}]) -> 0;
-check_funs({'$M_EXPR',module_info,1},
+check_funs({'$M_EXPR',module_info,1},
[{hipe_unified_loader,patch_to_emu_step1,1} | _]) -> 0;
check_funs({'$M_EXPR','$F_EXPR',2},
[{lists,foldl,3},
@@ -829,7 +825,7 @@ check_funs({'$M_EXPR','$F_EXPR',1},
check_funs({'$M_EXPR',warning_msg,2},
[{code_server,finish_on_load_report,2} | _]) -> 0;
%% This is cheating! /raimo
-%%
+%%
%% check_funs(This = {M,_,_}, Path) ->
%% case catch atom_to_list(M) of
%% [$h,$i,$p,$e | _] ->
@@ -861,9 +857,9 @@ load_cached(suite) ->
load_cached(doc) ->
[];
load_cached(Config) when is_list(Config) ->
- ?line Priv = ?config(priv_dir, Config),
- ?line WD = filename:dirname(code:which(?MODULE)),
- ?line {ok,Node} =
+ Priv = ?config(priv_dir, Config),
+ WD = filename:dirname(code:which(?MODULE)),
+ {ok,Node} =
?t:start_node(code_cache_node, peer, [{args,
"-pa \"" ++ WD ++ "\""},
{erl, [this]}]),
@@ -873,7 +869,7 @@ load_cached(Config) when is_list(Config) ->
_ -> false
end
end,
- ?line Tabs = rpc:call(Node, ets, all, []),
+ Tabs = rpc:call(Node, ets, all, []),
case rpc:call(Node, lists, any, [CCTabCreated,Tabs]) of
true ->
?t:stop_node(Node),
@@ -881,25 +877,25 @@ load_cached(Config) when is_list(Config) ->
false ->
ok
end,
- ?line rpc:call(Node, code, del_path, [Priv]),
- ?line rpc:call(Node, code, add_pathz, [Priv]),
+ rpc:call(Node, code, del_path, [Priv]),
+ rpc:call(Node, code, add_pathz, [Priv]),
FullModName = Priv ++ "/code_cache_test",
- ?line {ok,Dev} = file:open(FullModName ++ ".erl", [write]),
- ?line io:format(Dev, "-module(code_cache_test). -export([a/0]). a() -> ok.~n", []),
- ?line ok = file:close(Dev),
- ?line {ok,code_cache_test} = compile:file(FullModName, [{outdir,Priv}]),
+ {ok,Dev} = file:open(FullModName ++ ".erl", [write]),
+ io:format(Dev, "-module(code_cache_test). -export([a/0]). a() -> ok.~n", []),
+ ok = file:close(Dev),
+ {ok,code_cache_test} = compile:file(FullModName, [{outdir,Priv}]),
F = fun load_loop/2,
N = 1000,
- ?line {T0,T1} = rpc:call(Node, erlang, apply, [F, [N,code_cache_test]]),
+ {T0,T1} = rpc:call(Node, erlang, apply, [F, [N,code_cache_test]]),
TNoCache = now_diff(T1, T0),
- ?line rpc:call(Node, code, rehash, []),
- ?line {T2,T3} = rpc:call(Node, erlang, apply, [F, [N,code_cache_test]]),
- ?line TCache = now_diff(T3, T2),
+ rpc:call(Node, code, rehash, []),
+ {T2,T3} = rpc:call(Node, erlang, apply, [F, [N,code_cache_test]]),
+ TCache = now_diff(T3, T2),
AvgNoCache = TNoCache/N,
AvgCache = TCache/N,
- ?line io:format("Avg. load time (no_cache/cache): ~w/~w~n", [AvgNoCache,AvgCache]),
+ io:format("Avg. load time (no_cache/cache): ~w/~w~n", [AvgNoCache,AvgCache]),
?t:stop_node(Node),
if AvgNoCache =< AvgCache ->
?t:fail("Cache not working properly.");
@@ -916,7 +912,7 @@ load_loop(N, M, T0) ->
code:delete(M),
code:purge(M),
load_loop(N-1, M, T0).
-
+
now_diff({A2, B2, C2}, {A1, B1, C1}) ->
((A2-A1)*1000000 + B2-B1)*1000000 + C2-C1.
@@ -925,30 +921,30 @@ start_node_with_cache(suite) ->
start_node_with_cache(doc) ->
[];
start_node_with_cache(Config) when is_list(Config) ->
- ?line {ok,Node} =
- ?t:start_node(code_cache_node, peer, [{args,
+ {ok,Node} =
+ ?t:start_node(code_cache_node, peer, [{args,
"-code_path_cache"},
{erl, [this]}]),
- ?line Tabs = rpc:call(Node, ets, all, []),
+ Tabs = rpc:call(Node, ets, all, []),
io:format("Tabs: ~w~n", [Tabs]),
CCTabCreated = fun(Tab) ->
case rpc:call(Node, ets, info, [Tab,name]) of
code_cache -> true;
_ -> false
end
- end,
- ?line true = lists:any(CCTabCreated, Tabs),
+ end,
+ true = lists:any(CCTabCreated, Tabs),
?t:stop_node(Node),
ok.
-
+
add_and_rehash(suite) ->
[];
add_and_rehash(doc) ->
[];
add_and_rehash(Config) when is_list(Config) ->
- ?line Priv = ?config(priv_dir, Config),
- ?line WD = filename:dirname(code:which(?MODULE)),
- ?line {ok,Node} =
+ Priv = ?config(priv_dir, Config),
+ WD = filename:dirname(code:which(?MODULE)),
+ {ok,Node} =
?t:start_node(code_cache_node, peer, [{args,
"-pa \"" ++ WD ++ "\""},
{erl, [this]}]),
@@ -958,7 +954,7 @@ add_and_rehash(Config) when is_list(Config) ->
_ -> false
end
end,
- ?line Tabs0 = rpc:call(Node, ets, all, []),
+ Tabs0 = rpc:call(Node, ets, all, []),
case rpc:call(Node, lists, any, [CCTabCreated,Tabs0]) of
true ->
?t:stop_node(Node),
@@ -966,36 +962,36 @@ add_and_rehash(Config) when is_list(Config) ->
false ->
ok
end,
- ?line ok = rpc:call(Node, code, rehash, []), % create cache
- ?line Tabs1 = rpc:call(Node, ets, all, []),
- ?line true = rpc:call(Node, lists, any, [CCTabCreated,Tabs1]), % cache table created
- ?line ok = rpc:call(Node, code, rehash, []),
+ ok = rpc:call(Node, code, rehash, []), % create cache
+ Tabs1 = rpc:call(Node, ets, all, []),
+ true = rpc:call(Node, lists, any, [CCTabCreated,Tabs1]), % cache table created
+ ok = rpc:call(Node, code, rehash, []),
OkDir = filename:join(Priv, ""),
BadDir = filename:join(Priv, "guggemuffsussiputt"),
- ?line CP = [OkDir | rpc:call(Node, code, get_path, [])],
- ?line true = rpc:call(Node, code, set_path, [CP]),
+ CP = [OkDir | rpc:call(Node, code, get_path, [])],
+ true = rpc:call(Node, code, set_path, [CP]),
CP1 = [BadDir | CP],
- ?line {error,_} = rpc:call(Node, code, set_path, [CP1]),
- ?line true = rpc:call(Node, code, del_path, [OkDir]),
- ?line true = rpc:call(Node, code, add_path, [OkDir]),
- ?line true = rpc:call(Node, code, add_path, [OkDir]),
- ?line {error,_} = rpc:call(Node, code, add_path, [BadDir]),
- ?line ok = rpc:call(Node, code, rehash, []),
+ {error,_} = rpc:call(Node, code, set_path, [CP1]),
+ true = rpc:call(Node, code, del_path, [OkDir]),
+ true = rpc:call(Node, code, add_path, [OkDir]),
+ true = rpc:call(Node, code, add_path, [OkDir]),
+ {error,_} = rpc:call(Node, code, add_path, [BadDir]),
+ ok = rpc:call(Node, code, rehash, []),
?t:stop_node(Node),
ok.
-
+
where_is_file_no_cache(suite) ->
[];
where_is_file_no_cache(doc) ->
[];
where_is_file_no_cache(Config) when is_list(Config) ->
- ?line {T,KernelBeamFile} = timer:tc(code, where_is_file, ["kernel.beam"]),
+ {T,KernelBeamFile} = timer:tc(code, where_is_file, ["kernel.beam"]),
io:format("Load time: ~w ms~n", [T]),
- ?line KernelEbinDir = filename:dirname(KernelBeamFile),
- ?line AppFile = filename:join(KernelEbinDir, "kernel.app"),
- ?line AppFile = code:where_is_file("kernel.app"),
- ?line non_existing = code:where_is_file("kernel"), % no such file
+ KernelEbinDir = filename:dirname(KernelBeamFile),
+ AppFile = filename:join(KernelEbinDir, "kernel.app"),
+ AppFile = code:where_is_file("kernel.app"),
+ non_existing = code:where_is_file("kernel"), % no such file
ok.
where_is_file_cached(suite) ->
@@ -1003,97 +999,97 @@ where_is_file_cached(suite) ->
where_is_file_cached(doc) ->
[];
where_is_file_cached(Config) when is_list(Config) ->
- ?line {ok,Node} =
- ?t:start_node(code_cache_node, peer, [{args,
+ {ok,Node} =
+ ?t:start_node(code_cache_node, peer, [{args,
"-code_path_cache"},
{erl, [this]}]),
- ?line Tabs = rpc:call(Node, ets, all, []),
+ Tabs = rpc:call(Node, ets, all, []),
io:format("Tabs: ~w~n", [Tabs]),
CCTabCreated = fun(Tab) ->
case rpc:call(Node, ets, info, [Tab,name]) of
code_cache -> true;
_ -> false
end
- end,
- ?line true = lists:any(CCTabCreated, Tabs),
- ?line KernelBeamFile = rpc:call(Node, code, where_is_file, ["kernel.beam"]),
- ?line {T,KernelBeamFile} = rpc:call(Node, timer, tc, [code,where_is_file,["kernel.beam"]]),
+ end,
+ true = lists:any(CCTabCreated, Tabs),
+ KernelBeamFile = rpc:call(Node, code, where_is_file, ["kernel.beam"]),
+ {T,KernelBeamFile} = rpc:call(Node, timer, tc, [code,where_is_file,["kernel.beam"]]),
io:format("Load time: ~w ms~n", [T]),
- ?line KernelEbinDir = rpc:call(Node, filename, dirname, [KernelBeamFile]),
- ?line AppFile = rpc:call(Node, filename, join, [KernelEbinDir,"kernel.app"]),
- ?line AppFile = rpc:call(Node, code, where_is_file, ["kernel.app"]),
- ?line non_existing = rpc:call(Node, code, where_is_file, ["kernel"]), % no such file
+ KernelEbinDir = rpc:call(Node, filename, dirname, [KernelBeamFile]),
+ AppFile = rpc:call(Node, filename, join, [KernelEbinDir,"kernel.app"]),
+ AppFile = rpc:call(Node, code, where_is_file, ["kernel.app"]),
+ non_existing = rpc:call(Node, code, where_is_file, ["kernel"]), % no such file
?t:stop_node(Node),
ok.
-
+
purge_stacktrace(suite) ->
[];
purge_stacktrace(doc) ->
["Test that stacktrace is deleted when purging a referred module"];
purge_stacktrace(Config) when is_list(Config) ->
- ?line code:purge(code_b_test),
+ code:purge(code_b_test),
try code_b_test:call(fun(b) -> ok end, a)
catch
error:function_clause ->
- ?line code:load_file(code_b_test),
- ?line case erlang:get_stacktrace() of
+ code:load_file(code_b_test),
+ case erlang:get_stacktrace() of
[{?MODULE,_,[a],_},
{code_b_test,call,2,_},
{?MODULE,purge_stacktrace,1,_}|_] ->
- ?line false = code:purge(code_b_test),
- ?line [] = erlang:get_stacktrace()
+ false = code:purge(code_b_test),
+ [] = erlang:get_stacktrace()
end
end,
try code_b_test:call(nofun, 2)
catch
error:function_clause ->
- ?line code:load_file(code_b_test),
- ?line case erlang:get_stacktrace() of
+ code:load_file(code_b_test),
+ case erlang:get_stacktrace() of
[{code_b_test,call,[nofun,2],_},
{?MODULE,purge_stacktrace,1,_}|_] ->
- ?line false = code:purge(code_b_test),
- ?line [] = erlang:get_stacktrace()
+ false = code:purge(code_b_test),
+ [] = erlang:get_stacktrace()
end
end,
Args = [erlang,error,[badarg]],
try code_b_test:call(erlang, error, [badarg,Args])
catch
error:badarg ->
- ?line code:load_file(code_b_test),
- ?line case erlang:get_stacktrace() of
+ code:load_file(code_b_test),
+ case erlang:get_stacktrace() of
[{code_b_test,call,Args,_},
{?MODULE,purge_stacktrace,1,_}|_] ->
- ?line false = code:purge(code_b_test),
- ?line [] = erlang:get_stacktrace()
+ false = code:purge(code_b_test),
+ [] = erlang:get_stacktrace()
end
end,
ok.
mult_lib_roots(Config) when is_list(Config) ->
- ?line DataDir = filename:join(?config(data_dir, Config), "mult_lib_roots"),
- ?line mult_lib_compile(DataDir, "my_dummy_app-b/ebin/lists"),
- ?line mult_lib_compile(DataDir,
+ DataDir = filename:join(?config(data_dir, Config), "mult_lib_roots"),
+ mult_lib_compile(DataDir, "my_dummy_app-b/ebin/lists"),
+ mult_lib_compile(DataDir,
"my_dummy_app-c/ebin/code_SUITE_mult_root_module"),
%% Set up ERL_LIBS and start a slave node.
ErlLibs = filename:join(DataDir, "first_root") ++ mult_lib_sep() ++
filename:join(DataDir, "second_root"),
- ?line {ok,Node} =
+ {ok,Node} =
?t:start_node(mult_lib_roots, slave,
[{args,"-env ERL_LIBS "++ErlLibs}]),
- ?line TSPath = filename:dirname(code:which(test_server)),
- ?line Path0 = rpc:call(Node, code, get_path, []),
- ?line [TSPath,"."|Path1] = Path0,
- ?line [Kernel|Path2] = Path1,
- ?line [Stdlib|Path3] = Path2,
- ?line mult_lib_verify_lib(Kernel, "kernel"),
- ?line mult_lib_verify_lib(Stdlib, "stdlib"),
- ?line [Lib1,Lib2,Lib3,Lib4,Lib5|Path] = Path3,
+ TSPath = filename:dirname(code:which(test_server)),
+ Path0 = rpc:call(Node, code, get_path, []),
+ [TSPath,"."|Path1] = Path0,
+ [Kernel|Path2] = Path1,
+ [Stdlib|Path3] = Path2,
+ mult_lib_verify_lib(Kernel, "kernel"),
+ mult_lib_verify_lib(Stdlib, "stdlib"),
+ [Lib1,Lib2,Lib3,Lib4,Lib5|Path] = Path3,
+
-
["first_root/my_dummy_app-a/ebin",
"first_root/my_dummy_app-b/ebin",
"first_root/my_dummy_app-c/ebin",
@@ -1103,7 +1099,7 @@ mult_lib_roots(Config) when is_list(Config) ->
E <- lists:sort([Lib1,Lib2,Lib3,Lib4,Lib5])],
io:format("~p\n", [Path]),
- ?line true = rpc:call(Node, code_SUITE_mult_root_module, works_fine, []),
+ true = rpc:call(Node, code_SUITE_mult_root_module, works_fine, []),
ok.
@@ -1113,7 +1109,7 @@ mult_lib_compile(Root, Last) ->
Dir = filename:dirname(Name),
{ok,Mod} = compile:file(Name, [report,{outdir,Dir}]),
ok.
-
+
mult_lib_sep() ->
case os:type() of
{win32,_} -> ";";
@@ -1123,23 +1119,23 @@ mult_lib_sep() ->
mult_lib_verify_lib(Path, Expected) ->
Dir = filename:basename(filename:dirname(Path)),
true = lists:prefix(Expected, Dir).
-
+
mult_lib_remove_prefix([H|T1], [H|T2]) ->
mult_lib_remove_prefix(T1, T2);
mult_lib_remove_prefix([$/|T], []) -> T.
bad_erl_libs(Config) when is_list(Config) ->
- ?line {ok,Node} =
+ {ok,Node} =
?t:start_node(mult_lib_roots, slave,
[{args,"-env ERL_LIBS "}]),
- ?line ?t:stop_node(Node),
+ ?t:stop_node(Node),
- ?line {ok,Node2} =
+ {ok,Node2} =
?t:start_node(mult_lib_roots, slave,
[{args,"-env ERL_LIBS /no/such/dir"}]),
- ?line ?t:stop_node(Node2),
+ ?t:stop_node(Node2),
ok.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -1158,55 +1154,55 @@ do_code_archive(Config, Root, StripVsn) when is_list(Config) ->
PrivDir = ?config(priv_dir, Config),
App = code_archive_dict,
VsnBase = atom_to_list(App) ++ "-1.0",
- Base =
+ Base =
case StripVsn of
true -> atom_to_list(App);
false -> VsnBase
end,
Ext = init:archive_extension(),
RootDir = filename:join([PrivDir, Root]),
- ?line ok = file:make_dir(RootDir),
+ ok = file:make_dir(RootDir),
Archive = filename:join([RootDir, VsnBase ++ Ext]),
- ?line {ok, _} = zip:create(Archive, [VsnBase],
+ {ok, _} = zip:create(Archive, [VsnBase],
[{compress, []}, {cwd, DataDir}]),
- ?line {ok, _} = zip:extract(Archive, [{cwd, PrivDir}]),
+ {ok, _} = zip:extract(Archive, [{cwd, PrivDir}]),
case StripVsn of
true ->
- ?line ok = file:rename(filename:join([PrivDir, VsnBase]),
+ ok = file:rename(filename:join([PrivDir, VsnBase]),
filename:join([PrivDir, Base]));
false ->
ok
end,
-
+
io:format("DEBUG: ~p\n", [?LINE]),
%% Compile the code
- ?line ok = compile_app(PrivDir, Base),
-
+ ok = compile_app(PrivDir, Base),
+
%% Create the archive
- ?line ok = file:delete(Archive),
- ?line {ok, _} = zip:create(Archive, [Base],
+ ok = file:delete(Archive),
+ {ok, _} = zip:create(Archive, [Base],
[{compress, []}, {cwd, PrivDir}]),
%% Set up ERL_LIBS and start a slave node.
- ?line {ok, Node} =
+ {ok, Node} =
?t:start_node(code_archive, slave,
[{args,"-env ERL_LIBS " ++ RootDir}]),
- ?line CodePath = rpc:call(Node, code, get_path, []),
+ CodePath = rpc:call(Node, code, get_path, []),
AppEbin = filename:join([Archive, Base, "ebin"]),
io:format("AppEbin: ~p\n", [AppEbin]),
io:format("CodePath: ~p\n", [CodePath]),
io:format("Archive: ~p\n", [erl_prim_loader:read_file_info(Archive)]),
- ?line true = lists:member(AppEbin, CodePath),
+ true = lists:member(AppEbin, CodePath),
%% Start the app
- ?line ok = rpc:call(Node, application, start, [App]),
-
+ ok = rpc:call(Node, application, start, [App]),
+
%% Access the app priv dir
AppPrivDir = rpc:call(Node, code, priv_dir, [App]),
- ?line AppPrivFile = filename:join([AppPrivDir, "code_archive.txt"]),
+ AppPrivFile = filename:join([AppPrivDir, "code_archive.txt"]),
io:format("AppPrivFile: ~p\n", [AppPrivFile]),
- ?line {ok, _Bin, _Path} =
+ {ok, _Bin, _Path} =
rpc:call(Node, erl_prim_loader, get_file, [AppPrivFile]),
%% Use the app
@@ -1221,14 +1217,14 @@ do_code_archive(Config, Root, StripVsn) when is_list(Config) ->
error = rpc:call(Node, App, find, [Tab, Key]),
ok = rpc:call(Node, App, erase, [Tab]),
- ?line ?t:stop_node(Node),
+ ?t:stop_node(Node),
ok.
compile_app(TopDir, AppName) ->
AppDir = filename:join([TopDir, AppName]),
SrcDir = filename:join([AppDir, "src"]),
OutDir = filename:join([AppDir, "ebin"]),
- ?line {ok, Files} = file:list_dir(SrcDir),
+ {ok, Files} = file:list_dir(SrcDir),
compile_files(Files, SrcDir, OutDir).
compile_files([File | Files], SrcDir, OutDir) ->
@@ -1253,27 +1249,27 @@ big_boot_embedded(doc) ->
["Test that a boot file with (almost) all of OTP can be used to start an"
" embeddedd system."];
big_boot_embedded(Config) when is_list(Config) ->
- ?line {BootArg,AppsInBoot} = create_big_boot(Config),
- ?line {ok, Node} =
+ {BootArg,AppsInBoot} = create_big_boot(Config),
+ {ok, Node} =
?t:start_node(big_boot_embedded, slave,
[{args,"-boot "++BootArg++" -mode embedded"}]),
- ?line RemoteNodeApps =
- [ {X,Y} || {X,_,Y} <-
+ RemoteNodeApps =
+ [ {X,Y} || {X,_,Y} <-
rpc:call(Node,application,loaded_applications,[]) ],
- ?line true = lists:sort(AppsInBoot) =:= lists:sort(RemoteNodeApps),
+ true = lists:sort(AppsInBoot) =:= lists:sort(RemoteNodeApps),
ok.
on_load(Config) when is_list(Config) ->
Master = on_load_test_case_process,
- ?line Data = filename:join([?config(data_dir, Config),"on_load"]),
- ?line ok = file:set_cwd(Data),
- ?line up_to_date = make:all([{d,'MASTER',Master}]),
+ Data = filename:join([?config(data_dir, Config),"on_load"]),
+ ok = file:set_cwd(Data),
+ up_to_date = make:all([{d,'MASTER',Master}]),
%% Register a name for this process.
- ?line register(Master, self()),
-
- ?line {_,Ref} = spawn_monitor(fun() ->
+ register(Master, self()),
+
+ {_,Ref} = spawn_monitor(fun() ->
exit(on_load_a:data())
end),
receive
@@ -1285,8 +1281,8 @@ on_load(Config) when is_list(Config) ->
receive
{on_load_c,PidC} -> ok
end,
-
- ?line Refs = on_load_massive_spawn(lists:seq(1, 50)),
+
+ Refs = on_load_massive_spawn(lists:seq(1, 50)),
receive after 7 -> ok end,
PidC ! go,
@@ -1304,13 +1300,13 @@ on_load(Config) when is_list(Config) ->
receive
{'DOWN',Ref,process,_,Res} ->
- ?line [a,b,c] = Res
+ [a,b,c] = Res
end,
on_load_wait_for_all(Refs),
receive
Any ->
- ?line ?t:fail({unexpected,Any})
+ ?t:fail({unexpected,Any})
after 10 ->
ok
end.
@@ -1377,13 +1373,13 @@ on_load_embedded(Config) when is_list(Config) ->
end.
on_load_embedded_1(Config) ->
- ?line DataDir = ?config(data_dir, Config),
+ DataDir = ?config(data_dir, Config),
%% Link the on_load_app application into the lib directory.
- ?line LibRoot = code:lib_dir(),
- ?line LinkName = filename:join(LibRoot, "on_load_app-1.0"),
- ?line OnLoadApp = filename:join(DataDir, "on_load_app-1.0"),
- ?line del_link(LinkName),
+ LibRoot = code:lib_dir(),
+ LinkName = filename:join(LibRoot, "on_load_app-1.0"),
+ OnLoadApp = filename:join(DataDir, "on_load_app-1.0"),
+ del_link(LinkName),
io:format("LinkName :~p, OnLoadApp: ~p~n",[LinkName,OnLoadApp]),
case file:make_symlink(OnLoadApp, LinkName) of
{error,enotsup} ->
@@ -1392,28 +1388,28 @@ on_load_embedded_1(Config) ->
end,
%% Compile the code.
- ?line OnLoadAppEbin = filename:join(LinkName, "ebin"),
- ?line {ok,_ } = compile:file(filename:join([OnLoadApp,"src",
+ OnLoadAppEbin = filename:join(LinkName, "ebin"),
+ {ok,_ } = compile:file(filename:join([OnLoadApp,"src",
"on_load_embedded"]),
[{outdir,OnLoadAppEbin}]),
%% Create and compile a boot file.
- ?line true = code:add_pathz(OnLoadAppEbin),
+ true = code:add_pathz(OnLoadAppEbin),
Options = case is_source_dir() of
true -> [local];
false -> []
end,
- ?line BootScript = create_boot(Config, Options),
- ?line true = code:del_path(OnLoadAppEbin),
+ BootScript = create_boot(Config, Options),
+ true = code:del_path(OnLoadAppEbin),
%% Start the node and check that the on_load function was run.
- ?line {ok,Node} = start_node(on_load_embedded,
+ {ok,Node} = start_node(on_load_embedded,
"-mode embedded -boot " ++ BootScript),
ok = rpc:call(Node, on_load_embedded, status, []),
%% Clean up.
- ?line stop_node(Node),
- ?line ok = del_link(LinkName).
+ stop_node(Node),
+ ok = del_link(LinkName).
del_link(LinkName) ->
case file:delete(LinkName) of
@@ -1421,100 +1417,91 @@ del_link(LinkName) ->
file:del_dir(LinkName);
Other ->
Other
- end.
+ end.
create_boot(Config, Options) ->
- ?line {ok, OldDir} = file:get_cwd(),
- ?line {LatestDir,LatestName} = create_script(Config),
- ?line ok = file:set_cwd(LatestDir),
- ?line ok = systools:make_script(LatestName, Options),
- ?line ok = file:set_cwd(OldDir),
+ {ok, OldDir} = file:get_cwd(),
+ {LatestDir,LatestName} = create_script(Config),
+ ok = file:set_cwd(LatestDir),
+ ok = systools:make_script(LatestName, Options),
+ ok = file:set_cwd(OldDir),
filename:join(LatestDir, LatestName).
create_script(Config) ->
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Name = PrivDir ++ "on_load_test",
- ?line Apps = application_controller:which_applications(),
- ?line {value,{_,_,KernelVer}} = lists:keysearch(kernel, 1, Apps),
- ?line {value,{_,_,StdlibVer}} = lists:keysearch(stdlib, 1, Apps),
- ?line {ok,Fd} = file:open(Name ++ ".rel", [write]),
- ?line io:format(Fd,
+ PrivDir = ?config(priv_dir, Config),
+ Name = PrivDir ++ "on_load_test",
+ Apps = application_controller:which_applications(),
+ {value,{_,_,KernelVer}} = lists:keysearch(kernel, 1, Apps),
+ {value,{_,_,StdlibVer}} = lists:keysearch(stdlib, 1, Apps),
+ {ok,Fd} = file:open(Name ++ ".rel", [write]),
+ io:format(Fd,
"{release, {\"Test release 3\", \"P2A\"}, \n"
" {erts, \"9.42\"}, \n"
" [{kernel, \"~s\"}, {stdlib, \"~s\"},"
" {on_load_app, \"1.0\"}]}.\n",
[KernelVer,StdlibVer]),
- ?line file:close(Fd),
+ file:close(Fd),
{filename:dirname(Name),filename:basename(Name)}.
create_big_boot(Config) ->
- ?line {ok, OldDir} = file:get_cwd(),
- ?line {Options,Local} = case is_source_dir() of
- true -> {[no_module_tests,local],true};
- _ -> {[no_module_tests],false}
+ {ok, OldDir} = file:get_cwd(),
+ {Options,Local} = case is_source_dir() of
+ true -> {[no_module_tests,local],true};
+ _ -> {[no_module_tests],false}
end,
- ?line {LatestDir,LatestName,Apps} = create_big_script(Config,Local),
- ?line ok = file:set_cwd(LatestDir),
- ?line ok = systools:make_script(LatestName, Options),
- ?line ok = file:set_cwd(OldDir),
+ {LatestDir,LatestName,Apps} = create_big_script(Config,Local),
+ ok = file:set_cwd(LatestDir),
+ ok = systools:make_script(LatestName, Options),
+ ok = file:set_cwd(OldDir),
{filename:join(LatestDir, LatestName),Apps}.
-% The following apps cannot be loaded
+% The following apps cannot be loaded
% hipe .app references (or can reference) files that have no
% corresponding beam file (if hipe is not enabled)
-filter_app("hipe",_) ->
- false;
+filter_app("hipe",_) -> false;
% Dialyzer and typer depends on hipe
-filter_app("dialyzer",_) ->
- false;
-filter_app("typer",_) ->
- false;
+filter_app("dialyzer",_) -> false;
+filter_app("typer",_) -> false;
% Orber requires explicit configuration
-filter_app("orber",_) ->
- false;
+filter_app("orber",_) -> false;
% cos* depends on orber
-filter_app("cos"++_,_) ->
- false;
+filter_app("cos"++_,_) -> false;
% ic has a mod instruction in the app file but no corresponding start function
-filter_app("ic",_) ->
- false;
+filter_app("ic",_) -> false;
% Netconf has some dependency that I really do not understand (maybe like orber)
-filter_app("netconf",_) ->
- false;
+filter_app("netconf",_) -> false;
% Safe has the same kind of error in the .app file as ic
-filter_app("safe",_) ->
- false;
+filter_app("safe",_) -> false;
% Comte cannot be started in the "usual" way
-filter_app("comte",_) ->
- false;
+filter_app("comte",_) -> false;
% OS_mon does not find it's port program when running cerl
-filter_app("os_mon",true) ->
- false;
+filter_app("os_mon",true) -> false;
+% erts is not a "real" app either =/
+filter_app("erts",_) -> false;
% Other apps should be OK.
-filter_app(_,_) ->
- true.
+filter_app(_,_) -> true.
create_big_script(Config,Local) ->
- ?line PrivDir = ?config(priv_dir, Config),
- ?line Name = filename:join(PrivDir,"full_script_test"),
- ?line InitialApplications=application:loaded_applications(),
+ PrivDir = ?config(priv_dir, Config),
+ Name = filename:join(PrivDir,"full_script_test"),
+ InitialApplications=application:loaded_applications(),
%% Applications left loaded by the application suite, unload them!
- ?line UnloadFix=[app0,app1,app2,group_leader,app_start_error],
- ?line [application:unload(Leftover) ||
+ UnloadFix=[app0,app1,app2,group_leader,app_start_error],
+ [application:unload(Leftover) ||
Leftover <- UnloadFix,
lists:keymember(Leftover,1,InitialApplications) ],
%% Now we should have only "real" applications...
- ?line [application:load(list_to_atom(Y)) || {match,[Y]} <- [ re:run(X,code:lib_dir()++"/"++"([^/-]*).*/ebin",[{capture,[1],list}]) || X <- code:get_path()],filter_app(Y,Local)],
- ?line Apps = [ {N,V} || {N,_,V} <- application:loaded_applications()],
- ?line {ok,Fd} = file:open(Name ++ ".rel", [write]),
- ?line io:format(Fd,
+ [application:load(list_to_atom(Y)) || {match,[Y]} <- [ re:run(X,code:lib_dir()++"/"++"([^/-]*).*/ebin",[{capture,[1],list}]) || X <- code:get_path()],filter_app(Y,Local)],
+ Apps = [ {N,V} || {N,_,V} <- application:loaded_applications()],
+ {ok,Fd} = file:open(Name ++ ".rel", [write]),
+ io:format(Fd,
"{release, {\"Test release 3\", \"P2A\"}, \n"
" {erts, \"9.42\"}, \n"
" ~p}.\n",
[Apps]),
- ?line file:close(Fd),
- ?line NewlyLoaded =
+ file:close(Fd),
+ NewlyLoaded =
application:loaded_applications() -- InitialApplications,
- ?line [ application:unload(N) || {N,_,_} <- NewlyLoaded],
+ [ application:unload(N) || {N,_,_} <- NewlyLoaded],
{filename:dirname(Name),filename:basename(Name),Apps}.
is_source_dir() ->
@@ -1523,35 +1510,35 @@ is_source_dir() ->
on_load_errors(Config) when is_list(Config) ->
Master = on_load_error_test_case_process,
- ?line register(Master, self()),
+ register(Master, self()),
- ?line Data = filename:join([?config(data_dir, Config),"on_load_errors"]),
- ?line ok = file:set_cwd(Data),
- ?line up_to_date = make:all([{d,'MASTER',Master}]),
+ Data = filename:join([?config(data_dir, Config),"on_load_errors"]),
+ ok = file:set_cwd(Data),
+ up_to_date = make:all([{d,'MASTER',Master}]),
- ?line do_on_load_error(an_atom),
+ do_on_load_error(an_atom),
- ?line error_logger:add_report_handler(?MODULE, self()),
+ error_logger:add_report_handler(?MODULE, self()),
- ?line do_on_load_error({something,terrible,is,wrong}),
+ do_on_load_error({something,terrible,is,wrong}),
receive
Any1 ->
- ?line {_, "The on_load function"++_,
+ {_, "The on_load function"++_,
[on_load_error,
{something,terrible,is,wrong},_]} = Any1
end,
- ?line do_on_load_error(fail), %Cause exception.
+ do_on_load_error(fail), %Cause exception.
receive
Any2 ->
- ?line {_, "The on_load function"++_,
+ {_, "The on_load function"++_,
[on_load_error,{failed,[_|_]},_]} = Any2
end,
%% There should be no more messages.
receive
Unexpected ->
- ?line ?t:fail({unexpected,Unexpected})
+ ?t:fail({unexpected,Unexpected})
after 10 ->
ok
end,
@@ -1559,14 +1546,14 @@ on_load_errors(Config) when is_list(Config) ->
ok.
do_on_load_error(ReturnValue) ->
- ?line {_,Ref} = spawn_monitor(fun() ->
+ {_,Ref} = spawn_monitor(fun() ->
exit(on_load_error:main())
end),
receive {on_load_error,ErrorPid} -> ok end,
- ?line ErrorPid ! ReturnValue,
+ ErrorPid ! ReturnValue,
receive
{'DOWN',Ref,process,_,Exit} ->
- ?line {undef,[{on_load_error,main,[],_}|_]} = Exit
+ {undef,[{on_load_error,main,[],_}|_]} = Exit
end.
native_early_modules(suite) -> [];
@@ -1580,10 +1567,10 @@ native_early_modules(Config) when is_list(Config) ->
end.
native_early_modules_1(Architecture) ->
- ?line {lists, ListsBinary, _ListsFilename} = code:get_object_code(lists),
- ?line ChunkName = hipe_unified_loader:chunk_name(Architecture),
- ?line NativeChunk = beam_lib:chunks(ListsBinary, [ChunkName]),
- ?line IsHipeCompiled = case NativeChunk of
+ {lists, ListsBinary, _ListsFilename} = code:get_object_code(lists),
+ ChunkName = hipe_unified_loader:chunk_name(Architecture),
+ NativeChunk = beam_lib:chunks(ListsBinary, [ChunkName]),
+ IsHipeCompiled = case NativeChunk of
{ok,{_,[{_,Bin}]}} when is_binary(Bin) -> true;
{error, beam_lib, _} -> false
end,
@@ -1591,10 +1578,10 @@ native_early_modules_1(Architecture) ->
false ->
{skip,"OTP apparently not configured with --enable-native-libs"};
true ->
- ?line true = lists:all(fun code:is_module_native/1,
- [ets,file,filename,gb_sets,gb_trees,
- %%hipe_unified_loader, no_native as workaround
- lists,os]),
+ true = lists:all(fun code:is_module_native/1,
+ [ets,file,filename,gb_sets,gb_trees,
+ %%hipe_unified_loader, no_native as workaround
+ lists,os]),
ok
end.
diff --git a/lib/kernel/test/inet_SUITE.erl b/lib/kernel/test/inet_SUITE.erl
index 62ba95e1a3..46c8c0b88b 100644
--- a/lib/kernel/test/inet_SUITE.erl
+++ b/lib/kernel/test/inet_SUITE.erl
@@ -226,7 +226,7 @@ t_gethostbyname_v6(Config) when is_list(Config) ->
h_addr_list = [IP4]} = HEnt4,
{ok,IP46} =
inet_parse:ipv6_address(
- "::ffff:" ++ inet_parse:ntoa(IP4)),
+ "::ffff:" ++ inet:ntoa(IP4)),
check_elems(
[{HEnt#hostent.h_name,[Name,FullName]}])
end,
@@ -246,7 +246,7 @@ t_gethostbyname_v6(Config) when is_list(Config) ->
h_addr_list = [IP4F]} = HEnt4F,
{ok,IP46F} =
inet_parse:ipv6_address(
- "::ffff:" ++ inet_parse:ntoa(IP4F)),
+ "::ffff:" ++ inet:ntoa(IP4F)),
check_elems(
[{HEntF#hostent.h_name,[Name,FullName]}])
end;
diff --git a/lib/kernel/test/kernel_smoke.spec b/lib/kernel/test/kernel_smoke.spec
new file mode 100644
index 0000000000..e5d8273c56
--- /dev/null
+++ b/lib/kernel/test/kernel_smoke.spec
@@ -0,0 +1,9 @@
+{config, "../test_server/ts.config"}.
+{config, "../test_server/ts.unix.config"}.
+
+{cases,"../kernel_test", inet_SUITE,[t_gethostbyaddr,t_gethostbyname,
+ t_gethostbyaddr_v6,t_gethostbyname_v6,t_gethostnative,getifaddrs]}.
+{cases,"../kernel_test", inet_res_SUITE,[gethostbyaddr,gethostbyname,
+ gethostbyaddr_v6,gethostbyname_v6,basic]}.
+{cases,"../kernel_test", gen_tcp_echo_SUITE,[active_echo]}.
+{cases,"../kernel_test", heart_SUITE,[reboot]}.
diff --git a/lib/mnesia/src/mnesia_bup.erl b/lib/mnesia/src/mnesia_bup.erl
index fd87be1759..3b084e7371 100644
--- a/lib/mnesia/src/mnesia_bup.erl
+++ b/lib/mnesia/src/mnesia_bup.erl
@@ -1052,11 +1052,7 @@ local_uninstall_fallback(Master, FA) ->
Tmp = FA2#fallback_args.fallback_tmp,
Bup = FA2#fallback_args.fallback_bup,
file:delete(Tmp),
- Res =
- case fallback_exists(Bup) of
- true -> file:delete(Bup);
- false -> ok
- end,
+ Res = file:delete(Bup),
?eval_debug_fun({?MODULE, uninstall_fallback2, post_delete}, []),
Master ! {self(), Res},
unlink(Master),
diff --git a/lib/odbc/c_src/odbcserver.c b/lib/odbc/c_src/odbcserver.c
index 5730e20774..8de81a30ae 100644
--- a/lib/odbc/c_src/odbcserver.c
+++ b/lib/odbc/c_src/odbcserver.c
@@ -277,11 +277,15 @@ int main(void)
msg = receive_erlang_port_msg();
temp = strtok(msg, ";");
+ if (temp == NULL)
+ DO_EXIT(EXIT_STDIN_BODY);
length = strlen(temp);
supervisor_port = safe_malloc(length + 1);
strcpy(supervisor_port, temp);
temp = strtok(NULL, ";");
+ if (temp == NULL)
+ DO_EXIT(EXIT_STDIN_BODY);
length = strlen(temp);
odbc_port = safe_malloc(length + 1);
strcpy(odbc_port, temp);
@@ -1819,12 +1823,20 @@ static byte * receive_erlang_port_msg(void)
len |= lengthstr[i];
}
+ if (len <= 0 || len > 1024) {
+ DO_EXIT(EXIT_STDIN_HEADER);
+ }
+
buffer = (byte *)safe_malloc(len);
if (read_exact(buffer, len) <= 0) {
DO_EXIT(EXIT_STDIN_BODY);
}
+ if (buffer[len-1] != '\0') {
+ DO_EXIT(EXIT_STDIN_BODY);
+ }
+
return buffer;
}
diff --git a/lib/os_mon/c_src/ferrule.c b/lib/os_mon/c_src/ferrule.c
index 744f302b2d..c55f594f34 100644
--- a/lib/os_mon/c_src/ferrule.c
+++ b/lib/os_mon/c_src/ferrule.c
@@ -50,7 +50,7 @@
#define FDS_STDIN 0
#define FDS_PIPE 1
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
/* usage: ferrule ownpath */
{
int i, pipe_fd;
diff --git a/lib/os_mon/c_src/mod_syslog.c b/lib/os_mon/c_src/mod_syslog.c
index 87fbfbac22..b1bbf80b2a 100644
--- a/lib/os_mon/c_src/mod_syslog.c
+++ b/lib/os_mon/c_src/mod_syslog.c
@@ -47,7 +47,7 @@
#define TRUE 1
#define WAIT 1
-main(int argc, char *argv[])
+int main(int argc, char *argv[])
/* usage: mod_syslog mode ownpath syslogconf */
{
int syslogd_pid, n_lines_copied=0;
@@ -128,6 +128,7 @@ main(int argc, char *argv[])
make_exit(PIPE_NOT_FOUND);
else */
make_exit(OK);
+ return 0;
}
void make_exit(int exit_code)
diff --git a/lib/os_mon/src/disksup.erl b/lib/os_mon/src/disksup.erl
index 8c8bbe843a..278da26a20 100644
--- a/lib/os_mon/src/disksup.erl
+++ b/lib/os_mon/src/disksup.erl
@@ -263,10 +263,10 @@ check_disk_space({unix, dragonfly}, Port, Threshold) ->
Result = my_cmd("/bin/df -k -t ufs,hammer", Port),
check_disks_solaris(skip_to_eol(Result), Threshold);
check_disk_space({unix, freebsd}, Port, Threshold) ->
- Result = my_cmd("/bin/df -k -t ufs", Port),
+ Result = my_cmd("/bin/df -k -l", Port),
check_disks_solaris(skip_to_eol(Result), Threshold);
check_disk_space({unix, openbsd}, Port, Threshold) ->
- Result = my_cmd("/bin/df -k -t ffs", Port),
+ Result = my_cmd("/bin/df -k -l", Port),
check_disks_solaris(skip_to_eol(Result), Threshold);
check_disk_space({unix, netbsd}, Port, Threshold) ->
Result = my_cmd("/bin/df -k -t ffs", Port),
diff --git a/lib/os_mon/test/Makefile b/lib/os_mon/test/Makefile
index 461bebc102..cbb014324d 100644
--- a/lib/os_mon/test/Makefile
+++ b/lib/os_mon/test/Makefile
@@ -85,7 +85,8 @@ release_spec:
release_tests_spec: make_emakefile
$(INSTALL_DIR) "$(RELSYSDIR)"
- $(INSTALL_DATA) os_mon.spec os_mon.cover $(EMAKEFILE) $(SOURCE) "$(RELSYSDIR)"
+ $(INSTALL_DATA) os_mon.spec os_mon.cover os_mon_smoke.spec \
+ $(EMAKEFILE) $(SOURCE) "$(RELSYSDIR)"
$(INSTALL_DATA) os_mon_mib_SUITE.cfg "$(RELSYSDIR)"
## tar chf - *_SUITE_data | (cd "$(RELSYSDIR)"; tar xf -)
diff --git a/lib/os_mon/test/disksup_SUITE.erl b/lib/os_mon/test/disksup_SUITE.erl
index c1ff2c6afc..9c65d8b692 100644
--- a/lib/os_mon/test/disksup_SUITE.erl
+++ b/lib/os_mon/test/disksup_SUITE.erl
@@ -34,11 +34,11 @@
-define(default_timeout, ?t:minutes(1)).
init_per_suite(Config) when is_list(Config) ->
- ?line ok = application:start(os_mon),
+ ok = application:start(os_mon),
Config.
end_per_suite(Config) when is_list(Config) ->
- ?line ok = application:stop(os_mon),
+ ok = application:stop(os_mon),
Config.
init_per_testcase(unavailable, Config) ->
@@ -78,80 +78,71 @@ end_per_group(_GroupName, Config) ->
Config.
-api(suite) ->
- [];
-api(doc) ->
- ["Test of API functions"];
+api(suite) -> [];
+api(doc) -> ["Test of API functions"];
api(Config) when is_list(Config) ->
%% get_disk_data()
- ?line [{Id, KByte, Capacity}|_] = disksup:get_disk_data(),
- ?line true = io_lib:printable_list(Id),
- ?line true = is_integer(KByte),
- ?line true = is_integer(Capacity),
- ?line true = KByte>0,
- ?line true = Capacity>0,
+ [{Id,KByte,Capacity}|_] = get_disk_data(),
+ true = io_lib:printable_list(Id),
+ true = is_integer(KByte),
+ true = is_integer(Capacity),
+ true = Capacity>0,
+ true = KByte>0,
%% get_check_interval()
- ?line 1800000 = disksup:get_check_interval(),
+ 1800000 = disksup:get_check_interval(),
%% set_check_interval(Minutes)
- ?line ok = disksup:set_check_interval(20),
- ?line 1200000 = disksup:get_check_interval(),
- ?line {'EXIT',{badarg,_}} = (catch disksup:set_check_interval(0.5)),
- ?line 1200000 = disksup:get_check_interval(),
- ?line ok = disksup:set_check_interval(30),
+ ok = disksup:set_check_interval(20),
+ 1200000 = disksup:get_check_interval(),
+ {'EXIT',{badarg,_}} = (catch disksup:set_check_interval(0.5)),
+ 1200000 = disksup:get_check_interval(),
+ ok = disksup:set_check_interval(30),
%% get_almost_full_threshold()
- ?line 80 = disksup:get_almost_full_threshold(),
+ 80 = disksup:get_almost_full_threshold(),
%% set_almost_full_threshold(Float)
- ?line ok = disksup:set_almost_full_threshold(0.90),
- ?line 90 = disksup:get_almost_full_threshold(),
- ?line {'EXIT',{badarg,_}} =
+ ok = disksup:set_almost_full_threshold(0.90),
+ 90 = disksup:get_almost_full_threshold(),
+ {'EXIT',{badarg,_}} =
(catch disksup:set_almost_full_threshold(-0.5)),
- ?line 90 = disksup:get_almost_full_threshold(),
- ?line ok = disksup:set_almost_full_threshold(0.80),
+ 90 = disksup:get_almost_full_threshold(),
+ ok = disksup:set_almost_full_threshold(0.80),
ok.
-config(suite) ->
- [];
-config(doc) ->
- ["Test configuration"];
+config(suite) -> [];
+config(doc) -> ["Test configuration"];
config(Config) when is_list(Config) ->
%% Change configuration parameters and make sure change is reflected
%% when disksup is restarted
- ?line ok =
- application:set_env(os_mon, disk_space_check_interval, 29),
- ?line ok =
- application:set_env(os_mon, disk_almost_full_threshold, 0.81),
+ ok = application:set_env(os_mon, disk_space_check_interval, 29),
+ ok = application:set_env(os_mon, disk_almost_full_threshold, 0.81),
- ?line ok = supervisor:terminate_child(os_mon_sup, disksup),
- ?line {ok, _Child1} = supervisor:restart_child(os_mon_sup, disksup),
+ ok = supervisor:terminate_child(os_mon_sup, disksup),
+ {ok, _Child1} = supervisor:restart_child(os_mon_sup, disksup),
- ?line 1740000 = disksup:get_check_interval(),
- ?line 81 = disksup:get_almost_full_threshold(),
+ 1740000 = disksup:get_check_interval(),
+ 81 = disksup:get_almost_full_threshold(),
%% Also try this with bad parameter values, should be ignored
- ?line ok =
+ ok =
application:set_env(os_mon, disk_space_check_interval, 0.5),
- ?line ok =
+ ok =
application:set_env(os_mon, disk_almost_full_threshold, -0.81),
- ?line ok = supervisor:terminate_child(os_mon_sup, disksup),
- ?line {ok, _Child2} = supervisor:restart_child(os_mon_sup, disksup),
+ ok = supervisor:terminate_child(os_mon_sup, disksup),
+ {ok, _Child2} = supervisor:restart_child(os_mon_sup, disksup),
- ?line 1800000 = disksup:get_check_interval(),
- ?line 80 = disksup:get_almost_full_threshold(),
+ 1800000 = disksup:get_check_interval(),
+ 80 = disksup:get_almost_full_threshold(),
%% Reset configuration parameters
- ?line ok =
- application:set_env(os_mon, disk_space_check_interval, 30),
- ?line ok =
- application:set_env(os_mon, disk_almost_full_threshold, 0.80),
-
+ ok = application:set_env(os_mon, disk_space_check_interval, 30),
+ ok = application:set_env(os_mon, disk_almost_full_threshold, 0.80),
ok.
%%----------------------------------------------------------------------
@@ -159,24 +150,22 @@ config(Config) when is_list(Config) ->
%% changes too much during its course, or if there are timing problems
%% with the alarm_handler receiving the alarms too late
%%----------------------------------------------------------------------
-alarm(suite) ->
- [];
-alarm(doc) ->
- ["Test that alarms are set and cleared"];
+alarm(suite) -> [];
+alarm(doc) -> ["Test that alarms are set and cleared"];
alarm(Config) when is_list(Config) ->
%% Find out how many disks exceed the threshold
%% and make sure the corresponding number of alarms is set
- ?line Threshold1 = disksup:get_almost_full_threshold(), % 80
- ?line Data1 = disksup:get_disk_data(),
- ?line Over1 = over_threshold(Data1, Threshold1),
- ?line Alarms1 = get_alarms(),
+ Threshold1 = disksup:get_almost_full_threshold(), % 80
+ Data1 = disksup:get_disk_data(),
+ Over1 = over_threshold(Data1, Threshold1),
+ Alarms1 = get_alarms(),
if
Over1==length(Alarms1) ->
- ?line true;
+ true;
true ->
dump_info(),
- ?line ?t:fail({bad_alarms, Threshold1, Data1, Alarms1})
+ ?t:fail({bad_alarms, Threshold1, Data1, Alarms1})
end,
%% Try to find a disk with space usage below Threshold1,
@@ -187,24 +176,24 @@ alarm(Config) when is_list(Config) ->
true -> false
end
end,
- ?line case until(Fun1, Data1) of
+ case until(Fun1, Data1) of
{_, _, Cap1} ->
Threshold2 = Cap1-1,
- ?line ok =
+ ok =
disksup:set_almost_full_threshold(Threshold2/100),
- ?line disksup ! timeout, % force a disk check
- ?line Data2 = disksup:get_disk_data(),
- ?line Over2 = over_threshold(Data2, Threshold2),
- ?line Alarms2 = get_alarms(),
+ disksup ! timeout, % force a disk check
+ Data2 = disksup:get_disk_data(),
+ Over2 = over_threshold(Data2, Threshold2),
+ Alarms2 = get_alarms(),
if
Over2==length(Alarms2), Over2>Over1 ->
- ?line true;
+ true;
true ->
dump_info(),
- ?line ?t:fail({bad_alarms, Threshold2, Data2, Alarms2})
+ ?t:fail({bad_alarms, Threshold2, Data2, Alarms2})
end;
false ->
- ?line ignore
+ ignore
end,
%% Find out the highest space usage among all disks
@@ -216,40 +205,35 @@ alarm(Config) when is_list(Config) ->
true -> MaxAcc
end
end,
- ?line case lists:foldl(Fun2, 0, Data1) of
+ case lists:foldl(Fun2, 0, Data1) of
Max when Max<100 ->
Threshold3 = Max+1,
- ?line ok =
- disksup:set_almost_full_threshold(Threshold3/100),
- ?line disksup ! timeout, % force a disk check
- ?line Data3 = disksup:get_disk_data(),
- ?line Over3 = over_threshold(Data3, Threshold3),
- ?line Alarms3 = get_alarms(),
+ ok = disksup:set_almost_full_threshold(Threshold3/100),
+ disksup ! timeout, % force a disk check
+ Data3 = disksup:get_disk_data(),
+ Over3 = over_threshold(Data3, Threshold3),
+ Alarms3 = get_alarms(),
if
Over3==0, length(Alarms3)==0 ->
- ?line ok;
+ ok;
true ->
dump_info(),
- ?line ?t:fail({bad_alarms, Threshold3, Data3, Alarms3})
+ ?t:fail({bad_alarms, Threshold3, Data3, Alarms3})
end;
100 ->
- ?line ignore
+ ignore
end,
%% Reset threshold
- ?line ok = disksup:set_almost_full_threshold(Threshold1/100),
-
+ ok = disksup:set_almost_full_threshold(Threshold1/100),
ok.
over_threshold(Data, Threshold) ->
Data2 = remove_duplicated_disks(lists:keysort(1, Data)),
- lists:foldl(fun({_Id, _Kbyte, Cap}, N) when Cap>=Threshold ->
- N+1;
- (_DiskData, N) ->
- N
- end,
- 0,
- Data2).
+ lists:foldl(fun
+ ({_Id, _Kbyte, Cap}, N) when Cap>=Threshold -> N+1;
+ (_DiskData, N) -> N
+ end, 0, Data2).
%% On some platforms (for example MontaVista) data for one disk can be
%% "duplicated":
@@ -278,33 +262,30 @@ remove_duplicated_disks([]) ->
[].
get_alarms() ->
- lists:filter(fun({{disk_almost_full, _Disk},_}) -> true;
- (_) -> false
- end,
- alarm_handler:get_alarms()).
+ lists:filter(fun
+ ({{disk_almost_full, _Disk},_}) -> true;
+ (_) -> false
+ end, alarm_handler:get_alarms()).
until(Fun, [H|T]) ->
case Fun(H) of
true -> H;
- false ->
- until(Fun, T)
+ false -> until(Fun, T)
end;
-until(_Fun, []) ->
- false.
+until(_Fun, []) -> false.
-port(suite) ->
- [];
+port(suite) -> [];
port(doc) ->
["Test that disksup handles a terminating port program"];
port(Config) when is_list(Config) ->
- ?line Str = os:cmd("ps -ef | grep '[d]isksup'"),
+ Str = os:cmd("ps -ef | grep '[d]isksup'"),
case io_lib:fread("~s ~s", Str) of
- {ok, [_Uid,Pid], _Rest} ->
+ {ok, [_Uid,Pid], _Rest} ->
%% Monitor disksup
- ?line MonRef = erlang:monitor(process, disksup),
- ?line [{_Disk1,Kbyte1,_Cap1}|_] = disksup:get_disk_data(),
- ?line true = Kbyte1>0,
+ MonRef = erlang:monitor(process, disksup),
+ [{_Disk1,Kbyte1,_Cap1}|_] = disksup:get_disk_data(),
+ true = Kbyte1>0,
%% Kill the port program
case os:cmd("kill -9 " ++ Pid) of
@@ -315,17 +296,16 @@ port(Config) when is_list(Config) ->
{'DOWN', MonRef, _, _, {port_died, _Reason}} ->
ok;
{'DOWN', MonRef, _, _, Reason} ->
- ?line ?t:fail({unexpected_exit_reason, Reason})
+ ?t:fail({unexpected_exit_reason, Reason})
after
3000 ->
- ?line ?t:fail({still_alive, Str})
+ ?t:fail({still_alive, Str})
end,
%% Give os_mon_sup time to restart disksup
?t:sleep(?t:seconds(3)),
- ?line [{_Disk2,Kbyte2,_Cap2}|_] =
- disksup:get_disk_data(),
- ?line true = Kbyte2>0,
+ [{_Disk2,Kbyte2,_Cap2}|_] = disksup:get_disk_data(),
+ true = Kbyte2>0,
ok;
@@ -337,68 +317,61 @@ port(Config) when is_list(Config) ->
{skip, {os_pid_not_found, Str}}
end.
-terminate(suite) ->
- [];
+terminate(suite) -> [];
terminate(Config) when is_list(Config) ->
- ?line ok = application:set_env(os_mon, start_disksup, false),
- ?line ok = supervisor:terminate_child(os_mon_sup, disksup),
+ ok = application:set_env(os_mon, start_disksup, false),
+ ok = supervisor:terminate_child(os_mon_sup, disksup),
ok.
-unavailable(suite) ->
- [];
+unavailable(suite) -> [];
unavailable(doc) ->
["Test correct behaviour when service is unavailable"];
unavailable(Config) when is_list(Config) ->
%% Make sure all API functions return their dummy values
- ?line [{"none",0,0}] = disksup:get_disk_data(),
- ?line 1800000 = disksup:get_check_interval(),
- ?line ok = disksup:set_check_interval(5),
- ?line 80 = disksup:get_almost_full_threshold(),
- ?line ok = disksup:set_almost_full_threshold(0.9),
-
+ [{"none",0,0}] = disksup:get_disk_data(),
+ 1800000 = disksup:get_check_interval(),
+ ok = disksup:set_check_interval(5),
+ 80 = disksup:get_almost_full_threshold(),
+ ok = disksup:set_almost_full_threshold(0.9),
ok.
restart(suite) ->
[];
restart(Config) when is_list(Config) ->
- ?line ok = application:set_env(os_mon, start_disksup, true),
- ?line {ok, _Pid} = supervisor:restart_child(os_mon_sup, disksup),
+ ok = application:set_env(os_mon, start_disksup, true),
+ {ok, _Pid} = supervisor:restart_child(os_mon_sup, disksup),
ok.
-otp_5910(suite) ->
- [];
+otp_5910(suite) -> [];
otp_5910(doc) ->
["Test that alarms are cleared if disksup crashes or "
"if OS_Mon is stopped"];
otp_5910(Config) when is_list(Config) ->
%% Make sure disksup sets at least one alarm
- ?line Data = disksup:get_disk_data(),
- ?line Threshold0 = disksup:get_almost_full_threshold(),
- ?line Threshold = case over_threshold(Data, Threshold0) of
- 0 ->
- [{_Id,_Kbyte,Cap}|_] = Data,
- ?line ok = disksup:set_almost_full_threshold((Cap-1)/100),
- Cap-1;
- _N ->
- Threshold0
- end,
- ?line ok = application:set_env(os_mon,
- disk_almost_full_threshold,
- Threshold/100),
- ?line disksup ! timeout, % force a disk check
- ?line Data2 = disksup:get_disk_data(),
- ?line Over = over_threshold(Data2, Threshold),
- ?line Alarms = get_alarms(),
+ Data = disksup:get_disk_data(),
+ Threshold0 = disksup:get_almost_full_threshold(),
+ Threshold = case over_threshold(Data, Threshold0) of
+ 0 ->
+ [{_Id,_Kbyte,Cap}|_] = Data,
+ ok = disksup:set_almost_full_threshold((Cap-1)/100),
+ Cap-1;
+ _N -> Threshold0
+ end,
+ ok = application:set_env(os_mon, disk_almost_full_threshold, Threshold/100),
+ disksup ! timeout, % force a disk check
+ Data2 = disksup:get_disk_data(),
+ Over = over_threshold(Data2, Threshold),
+ Alarms = get_alarms(),
if
Over==0 ->
- ?line ?t:fail({threshold_too_low, Data2, Threshold});
+ ?t:fail({threshold_too_low, Data2, Threshold});
Over==length(Alarms) ->
ok;
true ->
dump_info(),
- ?line ?t:fail({bad_alarms, Threshold, Data2, Alarms})
+ ?t:fail({bad_alarms, Threshold, Data2, Alarms})
end,
%% Kill disksup
@@ -407,34 +380,42 @@ otp_5910(Config) when is_list(Config) ->
%% Wait a little to make sure disksup has been restarted,
%% then make sure the alarms are set once, but not twice
?t:sleep(?t:seconds(1)),
- ?line Data3 = disksup:get_disk_data(),
- ?line Alarms2 = get_alarms(),
+ Data3 = disksup:get_disk_data(),
+ Alarms2 = get_alarms(),
if
- length(Alarms2)==length(Alarms) ->
- ok;
+ length(Alarms2)==length(Alarms) -> ok;
true ->
dump_info(),
- ?line ?t:fail({bad_alarms, Threshold, Data3, Alarms,Alarms2})
+ ?t:fail({bad_alarms,Threshold,Data3,Alarms,Alarms2})
end,
%% Stop OS_Mon and make sure all disksup alarms are cleared
- ?line ok = application:stop(os_mon),
+ ok = application:stop(os_mon),
?t:sleep(?t:seconds(1)),
- ?line Alarms3 = get_alarms(),
- if
- length(Alarms3)==0 ->
- ok;
- true ->
- ?line ?t:fail({alarms_not_cleared, Alarms3})
+ Alarms3 = get_alarms(),
+ case get_alarms() of
+ [] -> ok;
+ _ -> ?t:fail({alarms_not_cleared, Alarms3})
end,
%% Reset threshold and restart OS_Mon
- ?line ok = application:set_env(os_mon,
- disksup_almost_full_threshold, 0.8),
- ?line ok = disksup:set_almost_full_threshold(0.8),
- ?line ok = application:start(os_mon),
-
+ ok = application:set_env(os_mon, disksup_almost_full_threshold, 0.8),
+ ok = disksup:set_almost_full_threshold(0.8),
+ ok = application:start(os_mon),
ok.
dump_info() ->
io:format("Status: ~p~n", [sys:get_status(disksup)]).
+
+% filter get_disk_data and remove entriew with zero capacity
+% "non-normal" filesystems report zero capacity
+% - Perhaps errorneous 'df -k -l'?
+% - Always list filesystems by type '-t ufs,zfs,..' instead?
+% It is unclear what the intention was from the beginning.
+get_disk_data() ->
+ get_disk_data(disksup:get_disk_data()).
+
+get_disk_data([{"none",0,0}=E]) -> [E];
+get_disk_data([{_,_,0}|Es]) -> get_disk_data(Es);
+get_disk_data([E|Es]) -> [E|get_disk_data(Es)];
+get_disk_data([]) -> [].
diff --git a/lib/os_mon/test/os_mon_smoke.spec b/lib/os_mon/test/os_mon_smoke.spec
new file mode 100644
index 0000000000..6f0d02494b
--- /dev/null
+++ b/lib/os_mon/test/os_mon_smoke.spec
@@ -0,0 +1,3 @@
+{cases,"../os_mon_test",disksup_SUITE,[api]}.
+{cases,"../os_mon_test",cpu_sup_SUITE,[load_api,util_api]}.
+{cases,"../os_mon_test",memsup_SUITE,[api]}. \ No newline at end of file
diff --git a/lib/runtime_tools/doc/src/dbg.xml b/lib/runtime_tools/doc/src/dbg.xml
index d8c82b2459..36b3b51a99 100644
--- a/lib/runtime_tools/doc/src/dbg.xml
+++ b/lib/runtime_tools/doc/src/dbg.xml
@@ -244,7 +244,7 @@ Error: fun containing local erlang function calls ('is_atomm' called in guard)\
</item>
<tag><c>all</c></tag>
<item>
- <p>Sets all flags.</p>
+ <p>Sets all flags except <c>silent</c>.</p>
</item>
<tag><c>clear</c></tag>
<item>
diff --git a/lib/runtime_tools/src/Makefile b/lib/runtime_tools/src/Makefile
index 2347986c53..8d2bcfe3d1 100644
--- a/lib/runtime_tools/src/Makefile
+++ b/lib/runtime_tools/src/Makefile
@@ -42,6 +42,7 @@ MODULES= \
dbg \
dyntrace \
percept_profile \
+ system_information \
observer_backend \
ttb_autostart
HRL_FILES= ../include/observer_backend.hrl
diff --git a/lib/runtime_tools/src/dbg.erl b/lib/runtime_tools/src/dbg.erl
index 6b2fb0460f..f0086e8cc7 100644
--- a/lib/runtime_tools/src/dbg.erl
+++ b/lib/runtime_tools/src/dbg.erl
@@ -1113,7 +1113,7 @@ transform_flags([sos|Tail],Acc) -> transform_flags(Tail,[set_on_spawn|Acc]);
transform_flags([sol|Tail],Acc) -> transform_flags(Tail,[set_on_link|Acc]);
transform_flags([sofs|Tail],Acc) -> transform_flags(Tail,[set_on_first_spawn|Acc]);
transform_flags([sofl|Tail],Acc) -> transform_flags(Tail,[set_on_first_link|Acc]);
-transform_flags([all|_],_Acc) -> all();
+transform_flags([all|_],_Acc) -> all()--[silent];
transform_flags([F|Tail]=List,Acc) when is_atom(F) ->
case lists:member(F, all()) of
true -> transform_flags(Tail,[F|Acc]);
@@ -1124,7 +1124,7 @@ transform_flags(Bad,_Acc) -> {error,{bad_flags,Bad}}.
all() ->
[send,'receive',call,procs,garbage_collection,running,
set_on_spawn,set_on_first_spawn,set_on_link,set_on_first_link,
- timestamp,arity,return_to].
+ timestamp,arity,return_to,silent].
display_info([Node|Nodes]) ->
io:format("~nNode ~w:~n",[Node]),
diff --git a/lib/runtime_tools/src/runtime_tools.app.src b/lib/runtime_tools/src/runtime_tools.app.src
index 602048dc21..d46cfe1f32 100644
--- a/lib/runtime_tools/src/runtime_tools.app.src
+++ b/lib/runtime_tools/src/runtime_tools.app.src
@@ -21,7 +21,7 @@
{vsn, "%VSN%"},
{modules, [appmon_info, dbg,observer_backend,percept_profile,
runtime_tools,runtime_tools_sup,erts_alloc_config,
- ttb_autostart,dyntrace]},
+ ttb_autostart,dyntrace,system_information]},
{registered, [runtime_tools_sup]},
{applications, [kernel, stdlib]},
{env, []},
diff --git a/lib/runtime_tools/src/system_information.erl b/lib/runtime_tools/src/system_information.erl
new file mode 100644
index 0000000000..1d4b878d79
--- /dev/null
+++ b/lib/runtime_tools/src/system_information.erl
@@ -0,0 +1,554 @@
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+
+
+%% The main purpose of system_information is to aggregate all information
+%% deemed useful for investigation, i.e. system_information:report/0.
+
+%% The server and all other utilities surrounding this is for inspecting
+%% reported values. Functions will be added to this as time goes by.
+
+-module(system_information).
+-behaviour(gen_server).
+
+%% API
+-export([
+ report/0,
+ from_file/1,
+ to_file/1
+ ]).
+-export([
+ start/0, stop/0,
+ load_report/0, load_report/2,
+ applications/0, applications/1,
+ application/1, application/2,
+ environment/0, environment/1,
+ module/1, module/2,
+ modules/1
+ ]).
+
+%% gen_server callbacks
+-export([
+ init/1,
+ handle_call/3,
+ handle_cast/2,
+ handle_info/2,
+ terminate/2,
+ code_change/3
+ ]).
+
+-define(SERVER, ?MODULE).
+
+%% change version if parsing of file changes
+-define(REPORT_FILE_VSN, "1.0").
+
+-record(state, {
+ report
+ }).
+
+%%===================================================================
+%% API
+%%===================================================================
+
+start() ->
+ gen_server:start({local, ?SERVER}, ?MODULE, [], []).
+
+stop() ->
+ gen_server:call(?SERVER, stop).
+
+load_report() -> load_report(data, report()).
+
+load_report(file, File) -> load_report(data, from_file(File));
+load_report(data, Report) ->
+ start(), gen_server:call(?SERVER, {load_report, Report}).
+
+report() -> [
+ {init_arguments, init:get_arguments()},
+ {code_paths, code:get_path()},
+ {code, code()},
+ {system_info, erlang_system_info()},
+ {erts_compile_info, erlang:system_info(compile_info)},
+ {beam_dynamic_libraries, get_dynamic_libraries()},
+ {environment_erts, os_getenv_erts_specific()},
+ {environment, [split_env(Env) || Env <- os:getenv()]}
+ ].
+
+to_file(File) ->
+ file:write_file(File, iolist_to_binary([
+ io_lib:format("{system_information_version, ~p}.~n", [
+ ?REPORT_FILE_VSN
+ ]),
+ io_lib:format("{system_information, ~p}.~n", [
+ report()
+ ])
+ ])).
+
+from_file(File) ->
+ case file:consult(File) of
+ {ok, Data} ->
+ case get_value([system_information_version], Data) of
+ ?REPORT_FILE_VSN ->
+ get_value([system_information], Data);
+ Vsn ->
+ erlang:error({unknown_version, Vsn})
+ end;
+ _ ->
+ erlang:error(bad_report_file)
+ end.
+
+applications() -> applications([]).
+applications(Opts) when is_list(Opts) ->
+ gen_server:call(?SERVER, {applications, Opts}).
+
+application(App) when is_atom(App) -> application(App, []).
+application(App, Opts) when is_atom(App), is_list(Opts) ->
+ gen_server:call(?SERVER, {application, App, Opts}).
+
+environment() -> environment([]).
+environment(Opts) when is_list(Opts) ->
+ gen_server:call(?SERVER, {environment, Opts}).
+
+module(M) when is_atom(M) -> module(M, []).
+module(M, Opts) when is_atom(M), is_list(Opts) ->
+ gen_server:call(?SERVER, {module, M, Opts}).
+
+modules(Opt) when is_atom(Opt) ->
+ gen_server:call(?SERVER, {modules, Opt}).
+
+%%===================================================================
+%% gen_server callbacks
+%%===================================================================
+
+init([]) ->
+ {ok, #state{}}.
+
+handle_call(stop, _From, S) ->
+ {stop, normal, ok, S};
+
+handle_call({load_report, Report}, _From, S) ->
+ Version = get_value([system_info, system_version], Report),
+ io:format("Loaded report from system version: ~s~n", [Version]),
+ {reply, ok, S#state{ report = Report }};
+
+handle_call(_Req, _From, #state{ report = undefined } = S) ->
+ {reply, {error, report_not_loaded}, S};
+
+handle_call({applications, Opts}, _From, #state{ report = Report } = S) ->
+ ok = print_applications(get_value([code], Report), Opts),
+ {reply, ok, S};
+
+handle_call({application, App, Opts}, _From, #state{ report = Report } = S) ->
+ Data = get_value([App], [AppInfo||{application, AppInfo}<-get_value([code], Report)]),
+ ok = print_application({App, Data}, Opts),
+ {reply, ok, S};
+
+
+handle_call({environment, Opts}, _From, #state{ report = Report } = S) ->
+ Choices = case proplists:get_bool(full, Opts) of
+ true -> [environment];
+ false -> [environment_erts]
+ end,
+ ok = print_environments(get_value(Choices, Report), Opts),
+ {reply, ok, S};
+
+
+handle_call({module, M, Opts}, _From, #state{ report = Report } = S) ->
+ Mods = find_modules_from_code(M, get_value([code], Report)),
+ print_modules_from_code(M, Mods, Opts),
+ {reply, ok, S};
+
+handle_call({modules, native}, _From, #state{ report = Report } = S) ->
+ Codes = get_native_modules_from_code(get_value([code],Report)),
+ io:format("~p~n", [Codes]),
+ {reply, ok, S};
+
+
+handle_call(_Request, _From, State) ->
+ {reply, ok, State}.
+
+handle_cast(_Msg, State) ->
+ {noreply, State}.
+
+handle_info(_Info, State) ->
+ {noreply, State}.
+
+terminate(_Reason, _State) ->
+ ok.
+
+code_change(_OldVsn, State, _Extra) ->
+ {ok, State}.
+
+%%===================================================================
+%% Internal functions
+%%===================================================================
+
+%% handle report values
+
+get_value([], Data) -> Data;
+get_value([K|Ks], Data) ->
+ get_value(Ks, proplists:get_value(K, Data, [])).
+
+find_modules_from_code(M, [{code, Info}|Codes]) ->
+ case find_modules(M, get_value([modules], Info)) of
+ [] -> find_modules_from_code(M, Codes);
+ Mods ->
+ Path = get_value([path], Info),
+ [{Path, Mods}|find_modules_from_code(M, Codes)]
+ end;
+find_modules_from_code(M, [{application, {App, Info}}|Codes]) ->
+ case find_modules(M, get_value([modules], Info)) of
+ [] -> find_modules_from_code(M, Codes);
+ Mods ->
+ Path = get_value([path], Info),
+ Vsn = get_value([vsn], Info),
+ [{App, Vsn, Path, Mods}|find_modules_from_code(M, Codes)]
+ end;
+find_modules_from_code(_, []) -> [].
+
+find_modules(M, [{M, _}=Info|Ms]) -> [Info|find_modules(M,Ms)];
+find_modules(M, [_|Ms]) -> find_modules(M, Ms);
+find_modules(_, []) -> [].
+
+get_native_modules_from_code([{application, {App, Info}}|Cs]) ->
+ case get_native_modules(get_value([modules], Info)) of
+ [] -> get_native_modules_from_code(Cs);
+ Mods ->
+ Path = get_value([path], Info),
+ Vsn = get_value([vsn], Info),
+ [{App, Vsn, Path, Mods}|get_native_modules_from_code(Cs)]
+ end;
+get_native_modules_from_code([{code, Info}|Cs]) ->
+ case get_native_modules(get_value([modules], Info)) of
+ [] -> get_native_modules_from_code(Cs);
+ Mods ->
+ Path = get_value([path], Info),
+ [{Path, Mods}|get_native_modules_from_code(Cs)]
+ end;
+get_native_modules_from_code([]) -> [].
+
+get_native_modules([]) -> [];
+get_native_modules([{Mod, Info}|Ms]) ->
+ case proplists:get_value(native, Info) of
+ false -> get_native_modules(Ms);
+ _ -> [Mod|get_native_modules(Ms)]
+ end.
+
+
+%% print information
+
+print_applications([{application, App}|Apps], Opts) ->
+ print_application(App, Opts),
+ print_applications(Apps, Opts);
+print_applications([{code,_}|Apps], Opts) ->
+ print_applications(Apps, Opts);
+print_applications([], _) ->
+ ok.
+
+print_application({App, Info}, Opts) ->
+ Vsn = get_value([vsn], Info),
+ io:format(" * ~w-~s~n", [App, Vsn]),
+ case proplists:get_bool(full, Opts) of
+ true ->
+ _ = [ begin
+ print_module(Minfo)
+ end || Minfo <- get_value([modules], Info) ],
+ ok;
+ false ->
+ ok
+ end.
+
+print_environments([Env|Envs],Opts) ->
+ print_environment(Env,Opts),
+ print_environments(Envs,Opts);
+print_environments([],_) ->
+ ok.
+
+print_environment({_Key, false},_) -> ok;
+print_environment({Key, Value},_) ->
+ io:format(" - ~s = ~s~n", [Key, Value]).
+
+print_modules_from_code(M, [Info|Ms], Opts) ->
+ print_module_from_code(M, Info),
+ case proplists:get_bool(full, Opts) of
+ true -> print_modules_from_code(M, Ms, Opts);
+ false -> ok
+ end;
+print_modules_from_code(_, [], _) ->
+ ok.
+
+print_module_from_code(M, {Path, [{M,ModInfo}]}) ->
+ io:format(" from path \"~s\" (no application):~n", [Path]),
+ io:format(" - compiler: ~s~n", [get_value([compiler], ModInfo)]),
+ io:format(" - md5: ~s~n", [get_value([md5], ModInfo)]),
+ io:format(" - native: ~w~n", [get_value([native], ModInfo)]),
+ io:format(" - loaded: ~w~n", [get_value([loaded], ModInfo)]),
+ ok;
+print_module_from_code(M, {App,Vsn,Path,[{M,ModInfo}]}) ->
+ io:format(" from path \"~s\" (~w-~s):~n", [Path,App,Vsn]),
+ io:format(" - compiler: ~s~n", [get_value([compiler], ModInfo)]),
+ io:format(" - md5: ~s~n", [get_value([md5], ModInfo)]),
+ io:format(" - native: ~w~n", [get_value([native], ModInfo)]),
+ io:format(" - loaded: ~w~n", [get_value([loaded], ModInfo)]),
+ ok.
+
+print_module({Mod, ModInfo}) ->
+ io:format(" - ~w:~n", [Mod]),
+ io:format(" - compiler: ~s~n", [get_value([compiler], ModInfo)]),
+ io:format(" - md5: ~s~n", [get_value([md5], ModInfo)]),
+ io:format(" - native: ~w~n", [get_value([native], ModInfo)]),
+ io:format(" - loaded: ~w~n", [get_value([loaded], ModInfo)]),
+ ok.
+
+
+
+%% get useful information from erlang:system_info/1
+
+erlang_system_info() ->
+ erlang_system_info([
+ allocator,
+ check_io,
+ otp_release,
+ port_limit,
+ process_limit,
+ % procs, % not needed
+ smp_support,
+ system_version,
+ system_architecture,
+ threads,
+ thread_pool_size,
+ {wordsize,internal},
+ {wordsize,external},
+ {cpu_topology, defined},
+ {cpu_topology, detected},
+ scheduler_bind_type,
+ scheduler_bindings,
+ compat_rel,
+ schedulers_state,
+ build_type,
+ logical_processors,
+ logical_processors_online,
+ logical_processors_available,
+ driver_version,
+ emu_args,
+ ethread_info,
+ beam_jump_table,
+ taints
+ ]).
+
+erlang_system_info([]) -> [];
+erlang_system_info([Type|Types]) ->
+ [{Type, erlang:system_info(Type)}|erlang_system_info(Types)].
+
+
+%% get known useful erts environment
+
+os_getenv_erts_specific() ->
+ os_getenv_erts_specific([
+ "BINDIR",
+ "DIALYZER_EMULATOR",
+ "CERL_DETACHED_PROG",
+ "EMU",
+ "ERL_CONSOLE_MODE",
+ "ERL_CRASH_DUMP",
+ "ERL_CRASH_DUMP_NICE",
+ "ERL_CRASH_DUMP_SECONDS",
+ "ERL_EPMD_PORT",
+ "ERL_EMULATOR_DLL",
+ "ERL_FULLSWEEP_AFTER",
+ "ERL_LIBS",
+ "ERL_MALLOC_LIB",
+ "ERL_MAX_PORTS",
+ "ERL_MAX_ETS_TABLES",
+ "ERL_NO_VFORK",
+ "ERL_NO_KERNEL_POLL",
+ "ERL_THREAD_POOL_SIZE",
+ "ERLC_EMULATOR",
+ "ESCRIPT_EMULATOR",
+ "HOME",
+ "HOMEDRIVE",
+ "HOMEPATH",
+ "LANG",
+ "LC_ALL",
+ "LC_CTYPE",
+ "PATH",
+ "PROGNAME",
+ "RELDIR",
+ "ROOTDIR",
+ "TERM",
+ %"VALGRIND_LOG_XML",
+
+ %% heart
+ "COMSPEC",
+ "HEART_COMMAND",
+
+ %% run_erl
+ "RUN_ERL_LOG_ALIVE_MINUTES",
+ "RUN_ERL_LOG_ACTIVITY_MINUTES",
+ "RUN_ERL_LOG_ALIVE_FORMAT",
+ "RUN_ERL_LOG_ALIVE_IN_UTC",
+ "RUN_ERL_LOG_GENERATIONS",
+ "RUN_ERL_LOG_MAXSIZE",
+ "RUN_ERL_DISABLE_FLOWCNTRL",
+
+ %% driver getenv
+ "CALLER_DRV_USE_OUTPUTV",
+ "ERL_INET_GETHOST_DEBUG",
+ "ERL_EFILE_THREAD_SHORT_CIRCUIT",
+ "ERL_WINDOW_TITLE",
+ "ERL_ABORT_ON_FAILURE",
+ "TTYSL_DEBUG_LOG"
+ ]).
+
+os_getenv_erts_specific([]) -> [];
+os_getenv_erts_specific([Key|Keys]) ->
+ [{Key, os:getenv(Key)}|os_getenv_erts_specific(Keys)].
+
+split_env(Env) ->
+ split_env(Env, []).
+
+split_env([$=|Vs], Key) -> {lists:reverse(Key), Vs};
+split_env([I|Vs], Key) -> split_env(Vs, [I|Key]);
+split_env([], KV) -> lists:reverse(KV). % should not happen.
+
+%% get applications
+
+code() ->
+ % order is important
+ get_code_from_paths(code:get_path()).
+
+get_code_from_paths([]) -> [];
+get_code_from_paths([Path|Paths]) ->
+ case is_application_path(Path) of
+ true ->
+ [{application, get_application_from_path(Path)}|get_code_from_paths(Paths)];
+ false ->
+ [{code, [
+ {path, Path},
+ {modules, get_modules_from_path(Path)}
+ ]}|get_code_from_paths(Paths)]
+ end.
+
+is_application_path(Path) ->
+ case filelib:wildcard(filename:join(Path, "*.app")) of
+ [] -> false;
+ _ -> true
+ end.
+
+get_application_from_path(Path) ->
+ [Appfile|_] = filelib:wildcard(filename:join(Path, "*.app")),
+ case file:consult(Appfile) of
+ {ok, [{application, App, Info}]} ->
+ {App, [
+ {description, proplists:get_value(description, Info, [])},
+ {vsn, proplists:get_value(vsn, Info, [])},
+ {path, Path},
+ {modules, get_modules_from_path(Path)}
+ ]}
+ end.
+
+get_modules_from_path(Path) ->
+ [
+ begin
+ {ok,{Mod, Md5}} = beam_lib:md5(Beam),
+ Loaded = case code:is_loaded(Mod) of
+ false -> false;
+ _ -> true
+ end,
+ {Mod, [
+ {loaded, Loaded},
+ {native, beam_is_native_compiled(Beam)},
+ {compiler, get_compiler_version(Beam)},
+ {md5, hexstring(Md5)}
+ ]}
+ end || Beam <- filelib:wildcard(filename:join(Path, "*.beam"))
+ ].
+
+hexstring(Bin) when is_binary(Bin) ->
+ lists:flatten([io_lib:format("~2.16.0b", [V]) || <<V>> <= Bin]).
+
+%% inspect beam files for information
+
+get_compiler_version(Beam) ->
+ case beam_lib:chunks(Beam, [compile_info]) of
+ {ok,{_,[{compile_info, Info}]}} ->
+ proplists:get_value(version, Info);
+ _ -> undefined
+ end.
+
+%% we don't know the specific chunk names of native code
+%% we don't want to load the code to check it
+beam_is_native_compiled(Beam) ->
+ Chunks = get_value([chunks], beam_lib:info(Beam)),
+ case check_known_hipe_chunks(Chunks) of
+ [] -> false;
+ [Arch] -> {true, Arch};
+ Archs -> {true, Archs}
+ end.
+
+
+check_known_hipe_chunks([{Tag,_,_}|Cs]) ->
+ case is_chunk_tag_hipe_arch(Tag) of
+ false -> check_known_hipe_chunks(Cs);
+ {true, Arch} -> [Arch|check_known_hipe_chunks(Cs)]
+ end;
+check_known_hipe_chunks([]) -> [].
+
+%% these values are taken from hipe_unified_loader
+%% perhaps these should be exported in that module?
+
+-define(HS8P_TAG,"HS8P").
+-define(HPPC_TAG,"HPPC").
+-define(HP64_TAG,"HP64").
+-define(HARM_TAG,"HARM").
+-define(HX86_TAG,"HX86").
+-define(HA64_TAG,"HA64").
+
+is_chunk_tag_hipe_arch(Tag) ->
+ case Tag of
+ ?HA64_TAG -> {true, amd64}; %% HiPE, x86_64, (implicit: 64-bit, Unix)
+ ?HARM_TAG -> {true, arm}; %% HiPE, arm, v5 (implicit: 32-bit, Linux)
+ ?HPPC_TAG -> {true, powerpc}; %% HiPE, PowerPC (implicit: 32-bit, Linux)
+ ?HP64_TAG -> {true, ppc64}; %% HiPE, ppc64 (implicit: 64-bit, Linux)
+ ?HS8P_TAG -> {true, ultrasparc}; %% HiPE, SPARC, V8+ (implicit: 32-bit)
+ %% Future: HSV9 %% HiPE, SPARC, V9 (implicit: 64-bit)
+ %% HW32 %% HiPE, x86, Win32
+ _ -> false
+ end.
+
+
+get_dynamic_libraries() ->
+ Beam = filename:join([os:getenv("BINDIR"),get_beam_name()]),
+ case os:type() of
+ {unix, darwin} -> os:cmd("otool -L " ++ Beam);
+ _ -> os:cmd("ldd " ++ Beam)
+ end.
+
+get_beam_name() ->
+ Type = case erlang:system_info(build_type) of
+ opt -> "";
+ TypeName -> "." ++ atom_to_list(TypeName)
+ end,
+ Flavor = case erlang:system_info(smp_support) of
+ false -> "";
+ true -> ".smp"
+ end,
+ Beam = case os:getenv("EMU") of
+ false -> "beam";
+ Value -> Value
+ end,
+ Beam ++ Type ++ Flavor.
diff --git a/lib/runtime_tools/test/Makefile b/lib/runtime_tools/test/Makefile
index bcabdf13ed..dcb9082231 100644
--- a/lib/runtime_tools/test/Makefile
+++ b/lib/runtime_tools/test/Makefile
@@ -5,6 +5,7 @@ include $(ERL_TOP)/make/$(TARGET)/otp.mk
MODULES = \
dyntrace_SUITE \
runtime_tools_SUITE \
+ system_information_SUITE \
dbg_SUITE \
erts_alloc_config_SUITE
diff --git a/lib/runtime_tools/test/system_information_SUITE.erl b/lib/runtime_tools/test/system_information_SUITE.erl
new file mode 100644
index 0000000000..fb9455a30f
--- /dev/null
+++ b/lib/runtime_tools/test/system_information_SUITE.erl
@@ -0,0 +1,300 @@
+%% %CopyrightBegin%
+%%
+%% Copyright Ericsson AB 2013. All Rights Reserved.
+%%
+%% The contents of this file are subject to the Erlang Public License,
+%% Version 1.1, (the "License"); you may not use this file except in
+%% compliance with the License. You should have received a copy of the
+%% Erlang Public License along with this software. If not, it can be
+%% retrieved online at http://www.erlang.org/.
+%%
+%% Software distributed under the License is distributed on an "AS IS"
+%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+%% the License for the specific language governing rights and limitations
+%% under the License.
+%%
+%% %CopyrightEnd%
+%%
+%%
+
+-module(system_information_SUITE).
+
+-include_lib("common_test/include/ct.hrl").
+
+%% Test server callbacks
+-export([suite/0, all/0, groups/0,
+ init_per_suite/1, end_per_suite/1,
+ init_per_group/2, end_per_group/2,
+ init_per_testcase/2, end_per_testcase/2]).
+
+%% Test cases
+-export([
+ %% API-test
+ api_report/1,
+ api_to_file/1,
+ api_from_file/1,
+ %% server
+ api_start_stop/1,
+ validate_server_interface/1
+ ]).
+
+%%--------------------------------------------------------------------
+%% COMMON TEST CALLBACK FUNCTIONS
+%%--------------------------------------------------------------------
+%%--------------------------------------------------------------------
+%% Function: groups() -> [Group]
+%%
+%% Group = {GroupName,Properties,GroupsAndTestCases}
+%% GroupName = atom()
+%% The name of the group.
+%% Properties = [parallel | sequence | Shuffle | {RepeatType,N}]
+%% Group properties that may be combined.
+%% GroupsAndTestCases = [Group | {group,GroupName} | TestCase]
+%% TestCase = atom()
+%% The name of a test case.
+%% Shuffle = shuffle | {shuffle,Seed}
+%% To get cases executed in random order.
+%% Seed = {integer(),integer(),integer()}
+%% RepeatType = repeat | repeat_until_all_ok | repeat_until_all_fail |
+%% repeat_until_any_ok | repeat_until_any_fail
+%% To get execution of cases repeated.
+%% N = integer() | forever
+%%
+%% Description: Returns a list of test case group definitions.
+%%--------------------------------------------------------------------
+groups() ->
+ [].
+
+%%--------------------------------------------------------------------
+%% Function: all() -> GroupsAndTestCases | {skip,Reason}
+%%
+%% GroupsAndTestCases = [{group,GroupName} | TestCase]
+%% GroupName = atom()
+%% Name of a test case group.
+%% TestCase = atom()
+%% Name of a test case.
+%% Reason = term()
+%% The reason for skipping all groups and test cases.
+%%
+%% Description: Returns the list of groups and test cases that
+%% are to be executed.
+%%--------------------------------------------------------------------
+all() -> [
+ api_report,
+ api_to_file,
+ api_from_file,
+ api_start_stop,
+ validate_server_interface
+ ].
+
+
+%%--------------------------------------------------------------------
+%% Function: suite() -> Info
+%%
+%% Info = [tuple()]
+%% List of key/value pairs.
+%%
+%% Description: Returns list of tuples to set default properties
+%% for the suite.
+%%
+%% Note: The suite/0 function is only meant to be used to return
+%% default data values, not perform any other operations.
+%%--------------------------------------------------------------------
+suite() -> [
+ {timetrap,{minutes,1}},
+ {ct_hooks,[ts_install_cth]}
+ ].
+
+%%--------------------------------------------------------------------
+%% Function: init_per_suite(Config0) ->
+%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
+%%
+%% Config0 = Config1 = [tuple()]
+%% A list of key/value pairs, holding the test case configuration.
+%% Reason = term()
+%% The reason for skipping the suite.
+%%
+%% Description: Initialization before the suite.
+%%
+%% Note: This function is free to add any key/value pairs to the Config
+%% variable, but should NOT alter/remove any existing entries.
+%%--------------------------------------------------------------------
+init_per_suite(Config) ->
+ Config.
+
+%%--------------------------------------------------------------------
+%% Function: end_per_suite(Config0) -> void() | {save_config,Config1}
+%%
+%% Config0 = Config1 = [tuple()]
+%% A list of key/value pairs, holding the test case configuration.
+%%
+%% Description: Cleanup after the suite.
+%%--------------------------------------------------------------------
+end_per_suite(_Config) ->
+ ok.
+
+%%--------------------------------------------------------------------
+%% Function: init_per_group(GroupName, Config0) ->
+%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
+%%
+%% GroupName = atom()
+%% Name of the test case group that is about to run.
+%% Config0 = Config1 = [tuple()]
+%% A list of key/value pairs, holding configuration data for the group.
+%% Reason = term()
+%% The reason for skipping all test cases and subgroups in the group.
+%%
+%% Description: Initialization before each test case group.
+%%--------------------------------------------------------------------
+init_per_group(_GroupName, Config) ->
+ Config.
+
+%%--------------------------------------------------------------------
+%% Function: end_per_group(GroupName, Config0) ->
+%% void() | {save_config,Config1}
+%%
+%% GroupName = atom()
+%% Name of the test case group that is finished.
+%% Config0 = Config1 = [tuple()]
+%% A list of key/value pairs, holding configuration data for the group.
+%%
+%% Description: Cleanup after each test case group.
+%%--------------------------------------------------------------------
+end_per_group(_GroupName, _Config) ->
+ ok.
+
+%%--------------------------------------------------------------------
+%% Function: init_per_testcase(TestCase, Config0) ->
+%% Config1 | {skip,Reason} | {skip_and_save,Reason,Config1}
+%%
+%% TestCase = atom()
+%% Name of the test case that is about to run.
+%% Config0 = Config1 = [tuple()]
+%% A list of key/value pairs, holding the test case configuration.
+%% Reason = term()
+%% The reason for skipping the test case.
+%%
+%% Description: Initialization before each test case.
+%%
+%% Note: This function is free to add any key/value pairs to the Config
+%% variable, but should NOT alter/remove any existing entries.
+%%--------------------------------------------------------------------
+init_per_testcase(_TestCase, Config) ->
+ Config.
+
+%%--------------------------------------------------------------------
+%% Function: end_per_testcase(TestCase, Config0) ->
+%% void() | {save_config,Config1} | {fail,Reason}
+%%
+%% TestCase = atom()
+%% Name of the test case that is finished.
+%% Config0 = Config1 = [tuple()]
+%% A list of key/value pairs, holding the test case configuration.
+%% Reason = term()
+%% The reason for failing the test case.
+%%
+%% Description: Cleanup after each test case.
+%%--------------------------------------------------------------------
+end_per_testcase(_TestCase, _Config) ->
+ ok.
+
+
+%%--------------------------------------------------------------------
+%% TEST CASES
+%%--------------------------------------------------------------------
+
+%%--------------------------------------------------------------------
+%% Function: TestCase(Config0) ->
+%% ok | exit() | {skip,Reason} | {comment,Comment} |
+%% {save_config,Config1} | {skip_and_save,Reason,Config1}
+%%
+%% Config0 = Config1 = [tuple()]
+%% A list of key/value pairs, holding the test case configuration.
+%% Reason = term()
+%% The reason for skipping the test case.
+%% Comment = term()
+%% A comment about the test case that will be printed in the html log.
+%%
+%% Description: Test case function. (The name of it must be specified in
+%% the all/0 list or in a test case group for the test case
+%% to be executed).
+%%--------------------------------------------------------------------
+
+
+api_report(_Config) ->
+ Report = system_information:report(),
+ ok = validate_report(Report),
+ ok.
+
+api_to_file(Config) ->
+ DataDir = ?config(data_dir, Config),
+ Filename = filename:join([DataDir, "system_information_report_1.dat"]),
+ ok = system_information:to_file(Filename),
+ {ok, _} = file:consult(Filename),
+ {save_config, [{report_name, Filename}]}.
+
+api_from_file(Config) ->
+ {api_to_file, Saved} = ?config(saved_config, Config),
+ DataDir = ?config(data_dir, Config),
+ Fname1 = filename:join([DataDir, "information_test_report.dat"]),
+ Report1 = system_information:from_file(Fname1),
+ ok = validate_report(Report1),
+ Fname2 = ?config(report_name, Saved),
+ Report2 = system_information:from_file(Fname2),
+ ok = validate_report(Report2),
+ ok.
+
+api_start_stop(_Config) ->
+ {ok, _} = system_information:start(),
+ ok = system_information:stop(),
+ ok.
+
+validate_server_interface(Config) ->
+ DataDir = ?config(data_dir, Config),
+ Fname1 = filename:join([DataDir, "information_test_report.dat"]),
+ %% load old report
+ ok = system_information:load_report(file, Fname1),
+ ok = validate_loaded_report(),
+ ok = system_information:stop(),
+ %% load local
+ ok = system_information:load_report(),
+ ok = validate_loaded_report(),
+ ok = system_information:stop(),
+ ok.
+
+
+%% aux
+
+validate_loaded_report() ->
+ ok = system_information:applications(),
+ ok = system_information:applications([full]),
+ ok = system_information:environment(),
+ ok = system_information:environment([full]),
+ ok = system_information:application(kernel),
+ ok = system_information:application(kernel,[full]),
+ ok = system_information:module(gen_server),
+ ok = system_information:module(gen_server,[full]),
+ ok = system_information:modules(native),
+ ok.
+
+
+validate_report([]) -> {error, no_entries};
+validate_report(Report) ->
+ ensure_report_keys([
+ init_arguments,
+ code_paths,
+ code,
+ system_info,
+ erts_compile_info,
+ beam_dynamic_libraries,
+ environment_erts,
+ environment
+ ], Report).
+
+ensure_report_keys([], _) -> ok;
+ensure_report_keys([K|Ks], Report) ->
+ case lists:keysearch(K, 1, Report) of
+ false -> {error, key_not_found, K};
+ _ -> ensure_report_keys(Ks, Report)
+ end.
+
diff --git a/lib/runtime_tools/test/system_information_SUITE_data/information_test_report.dat b/lib/runtime_tools/test/system_information_SUITE_data/information_test_report.dat
new file mode 100644
index 0000000000..0900eadd4a
--- /dev/null
+++ b/lib/runtime_tools/test/system_information_SUITE_data/information_test_report.dat
@@ -0,0 +1,9873 @@
+{system_information_version, "1.0"}.
+{system_information, [{init_arguments,
+ [{root,
+ ["/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp"]},
+ {progname,["erl"]},
+ {home,["/home/otptest"]}]},
+ {code_paths,
+ [".",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/kernel-2.16.3/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/stdlib-1.19.3/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/xmerl-1.3.3/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/wx-1.0/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/webtool-0.8.9.2/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/typer-0.9.5/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/tv-2.1.4.10/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/tools-2.6.11/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/toolbar-1.4.2.3/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/test_server-3.6.2/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/syntax_tools-1.6.11/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/ssl-5.3/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/ssh-2.1.7/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/snmp-4.24/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/sasl-2.3.2/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/runtime_tools-1.8.11/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/reltool-0.6.4/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/public_key-0.19/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/pman-2.7.1.4/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/percept-0.8.8.1/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/parsetools-2.0.9/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/otp_mibs-1.0.8/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/os_mon-2.2.12/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/orber-3.6.26.1/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/odbc-2.10.16/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/observer-1.3.1/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/mnesia-4.9/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/megaco-3.17.0.1/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/jinterface-1.5.8",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/inets-5.9.5/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/ic-4.3.2/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/hipe-3.10.2/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/gs-1.5.15.2/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/eunit-2.2.4/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/et-1.4.4.4/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/erts-5.10.3/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/erl_interface-3.7.13",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/erl_docgen-0.3.4/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/eldap-1.0.1/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/edoc-0.7.12/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/diameter-1.4.2/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/dialyzer-2.6.1/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/debugger-3.2.11/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/crypto-3.0/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosTransactions-1.2.13/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosTime-1.1.13/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosProperty-1.1.16/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosNotification-1.1.20/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosFileTransfer-1.1.15/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosEventDomain-1.1.13/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosEvent-2.1.14/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/compiler-4.9.2/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/common_test-1.7.2/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/asn1-2.0.2/ebin",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/appmon-2.1.14.2/ebin"]},
+ {code,
+ [{code,[{path,"."},{modules,[]}]},
+ {application,
+ {kernel,
+ [{description,"ERTS CXC 138 10"},
+ {vsn,"2.16.3"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/kernel-2.16.3/ebin"},
+ {modules,
+ [{application,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"69c3102d717e7258701a536ddae1eb89"}]},
+ {application_controller,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1bbfd81a8486ac040562ce0fd40c32aa"}]},
+ {application_master,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d8eee82bfd661e8f0d862f3aad5b85ca"}]},
+ {application_starter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d505f3189443053e586fdf270446ce2f"}]},
+ {auth,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"800c93bf9ba03b6e4951de0d5db28328"}]},
+ {code,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"84f37378526c5e82c5d0d967c1ca8f82"}]},
+ {code_server,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"09ce0ef7103f3151553c6badc7e96fc1"}]},
+ {disk_log,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a5ab0573095f258c87f6166af8f8425c"}]},
+ {disk_log_1,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"287f2521436a30a0567d54e2596c1034"}]},
+ {disk_log_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4c7972e5f3dedce5c87cf8ef88c59bb2"}]},
+ {disk_log_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c6012237e70b570585bfb58f60537d9c"}]},
+ {dist_ac,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4dfa17c94d63da8f6b9edb1532a3e537"}]},
+ {dist_util,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8fa19e7b4bca4b5aac847d138c85c553"}]},
+ {erl_boot_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"86ecca01e41b2321c01b7181cb826766"}]},
+ {erl_ddll,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"90f1c7a6fd3cf6595d95b9f57abd87ce"}]},
+ {erl_distribution,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"16a49a506b48567bd32b2021dac425ff"}]},
+ {erl_epmd,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"eee4870e061790054c43ff70bbccbe25"}]},
+ {erl_reply,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0e0a4f09b0877938b4d79b41122dad38"}]},
+ {error_handler,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1af2b51d167b017b3e1fae0beb408181"}]},
+ {error_logger,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"941136b080021af90dc32f23774b0def"}]},
+ {erts_debug,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e2a7b675323db5946605344ffccca170"}]},
+ {file,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5eccb55276e7162ab5bec77b46562332"}]},
+ {file_io_server,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"032292fd7d9e2bf08ff23de192710f97"}]},
+ {file_server,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"58bd1e532dee0fccff9e1fba1e429a5e"}]},
+ {gen_sctp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f1e5e5a8c7708c9a81f26d2a89e3987c"}]},
+ {gen_tcp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4cf58918602a7242ca4060bc1d6b5652"}]},
+ {gen_udp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"361b9b25604b9053a8a4c98b8df47408"}]},
+ {global,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e553137965978f64ffb9ef274c79e9c2"}]},
+ {global_group,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8ce6b230fef9340aeb41205a6ef4b4f3"}]},
+ {global_search,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0a82f2701d71d2a1576074dd69414e1b"}]},
+ {group,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6b3164d5d61625f0651c13107459627c"}]},
+ {heart,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b808d9003cf50d73ebf888da50d73e12"}]},
+ {hipe_unified_loader,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"879423975936fcf88729034f7d4a93b6"}]},
+ {inet,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bd325ceedcab3ca885eeaf4c982561e0"}]},
+ {inet6_sctp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d8b6d95ec571f5e669047b5f40455d21"}]},
+ {inet6_tcp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"93a9204ef927b17957c61a18f3ba47e2"}]},
+ {inet6_tcp_dist,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9a94acd2c5dc0e625d2c2b4292e9a27a"}]},
+ {inet6_udp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"17a90b344977dd2c657309507c99b516"}]},
+ {inet_config,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"741587fa47d6b66b96ef125b3d5ba61a"}]},
+ {inet_db,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f65160805d30ff194618a5ae4038ae9f"}]},
+ {inet_dns,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7f0c31b6cecf31d641bf46840f85ebee"}]},
+ {inet_gethost_native,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"09867d1d19f3c30b73fb47a48d0d843a"}]},
+ {inet_hosts,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a0f48322bd3a1bd0e75f248e39b41f69"}]},
+ {inet_parse,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"29aee7378a4d1f814e1fd311d0eaab3a"}]},
+ {inet_res,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c1018a662254323cfa45309afb3b3397"}]},
+ {inet_sctp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cbce09a1ffa13cb124d87eaecd25dfbf"}]},
+ {inet_tcp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0da6499cb44db53be6145a5dc3449d93"}]},
+ {inet_tcp_dist,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"797e28cd89efe3a1a9d83244afd0b880"}]},
+ {inet_udp,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"70908d7165a2b298a85d9a4c1f8f9fa2"}]},
+ {kernel,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cf5c248b778654e664e6d2368ec285df"}]},
+ {kernel_config,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"39fbe27956eeb0cca9d7871f7de40a2e"}]},
+ {net,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cb8595f084959a2b5e329ab32047dbc4"}]},
+ {net_adm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"628c961d8dbbab4c5b2b180e527530be"}]},
+ {net_kernel,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"049f43826000bfefbbc2376bd21c9919"}]},
+ {os,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"464c6c09afb87824ecf12bfa6065b3dc"}]},
+ {pg2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"34858fa3619c1dc17d01536593359ed2"}]},
+ {ram_file,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"28bf8253c5f8357ab68b4d505e170856"}]},
+ {rpc,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"895e080302ac8a39197dfac0cc53adc6"}]},
+ {seq_trace,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"845af954b395a80e5cf3d0c2ea0a3b99"}]},
+ {standard_error,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c0ac4192fd9f73885581481638c1648a"}]},
+ {user,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"93ad1841fa2dee776bff76f8989f5021"}]},
+ {user_drv,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"161f1a45735f77129c80bacd778e5632"}]},
+ {user_sup,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"baab537a62725bcbe4510c9f0b2d99eb"}]},
+ {wrap_log_reader,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5dceb6e671d0c51d181f51ec4e031798"}]}]}]}},
+ {application,
+ {stdlib,
+ [{description,"ERTS CXC 138 10"},
+ {vsn,"1.19.3"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/stdlib-1.19.3/ebin"},
+ {modules,
+ [{array,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c7c98b180715bd79794eef21a2930fff"}]},
+ {base64,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e45b571f2414c6131fbf62b1da3560e5"}]},
+ {beam_lib,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9e13b050aff529ecac6569f7101237ba"}]},
+ {binary,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1e77ffd0688b3f1ace1ac70936969da3"}]},
+ {c,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"402465a98ccec8e9314139daacf6203e"}]},
+ {calendar,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0c09413575ac7f80ea3d9217b1f7e1bc"}]},
+ {dets,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5154c82c2ffefa19096cf87ffb394a6c"}]},
+ {dets_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c810e731ba4101aba5f6b6c08481ea85"}]},
+ {dets_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9b4a9ef0f616b7c5464cf6813384e220"}]},
+ {dets_utils,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a64e0220f855e6e97d53a9bc4f0a111b"}]},
+ {dets_v8,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ebf2c94f62d180c3159b663ba2094189"}]},
+ {dets_v9,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9098391234b6304ff3d106dc56d467b6"}]},
+ {dict,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0bc1d74a65bd392960cd7e1b230f07bf"}]},
+ {digraph,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ac9049d6d7454a87c40c2f03f4223849"}]},
+ {digraph_utils,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"17bbe67d3314e9024825512c1ccc7be8"}]},
+ {edlin,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"518247b4963c998e742c0794091c9864"}]},
+ {edlin_expand,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"06c4ff7cf326df872bec9feed7f5984d"}]},
+ {epp,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"493760bc942ddd16df2a8e55f8b59774"}]},
+ {erl_bits,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bba2a00b28557c9678356247c36b0474"}]},
+ {erl_compile,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"291c9ddceeb66c7a7c36ab3505799513"}]},
+ {erl_eval,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9982f2bca01a352a45932a6db95a1336"}]},
+ {erl_expand_records,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"047c93973c9fbf83724cdf688e258cff"}]},
+ {erl_internal,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3225aadc9ec4f84cc9451f30833cdefb"}]},
+ {erl_lint,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"98ffb79824edc0f2a8ad49ff447e121c"}]},
+ {erl_parse,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f9a3d97b028bafa2bba7037bc1987d87"}]},
+ {erl_posix_msg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ecb0903ecde21b7cc58277424d8bac3d"}]},
+ {erl_pp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1b7945b193daf989e3f62c4a452f773e"}]},
+ {erl_scan,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1dd9fb779b35d1925a0ad68c092af1f0"}]},
+ {erl_tar,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0c6161b31a69bd3566a910d369baae00"}]},
+ {error_logger_file_h,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"218156df9bdedd04e37eecc76863940c"}]},
+ {error_logger_tty_h,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a2cac9386113d6879a4111be3e2d191b"}]},
+ {escript,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b77d5172cf00acd06fd6e42f03dc9b06"}]},
+ {ets,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"13c77916ba3c85e6e076aa0664f5674f"}]},
+ {eval_bits,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7bf8829d056519787fd0f7900bd04b73"}]},
+ {file_sorter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4e31c9ca53e59010980dfc4e46e8aaf1"}]},
+ {filelib,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"641651ced98857991b064b22c85cf90f"}]},
+ {filename,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9a007021a1e9de6af67e99cc48be13c5"}]},
+ {gb_sets,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4891f6d98f4bb81bc64415434d08ff9d"}]},
+ {gb_trees,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4e9a8ae86761c41dc0e9d32f57df63c3"}]},
+ {gen,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5beaa9b295439aa39187eeef56b8527b"}]},
+ {gen_event,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"79bc1c9f72e633331d4518d982221af0"}]},
+ {gen_fsm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fb95e4cf29f5cf640e486c789fe9f1f7"}]},
+ {gen_server,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"14f189569fb6420c633a5dab81f7b897"}]},
+ {io,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"75fd9a0dc5823e95b4543a09be83c6ce"}]},
+ {io_lib,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"34c18dd02ec6458cae20ddc323542eed"}]},
+ {io_lib_format,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f1f8f2a4d12d79d82420335d0e84107a"}]},
+ {io_lib_fread,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"27699e322a2de2004b057465f549fa3f"}]},
+ {io_lib_pretty,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"32d7bae40549bdd60298c0d17efe057b"}]},
+ {lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"394b1b967c909d1830939846963ac4f0"}]},
+ {lists,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f840b76db5f9e5d37dcc9dc39a436b90"}]},
+ {log_mf_h,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6f972dea76e360d99074b659327db69f"}]},
+ {math,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fe02e030a198ec343f3c4a62f60ebf8a"}]},
+ {ms_transform,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dba72a603f0a9382274671842d6aaf55"}]},
+ {orddict,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bedb6cdaf10530b2486b46f79853fbea"}]},
+ {ordsets,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f5dfe0e73da077c2f86dbbe846e0dab7"}]},
+ {otp_internal,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ff3edabfa0633b9553b6fed1e47e41fc"}]},
+ {pg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c3975b993694a2a465d331278b503f81"}]},
+ {pool,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3d0398428064137474f5acbb4122a70d"}]},
+ {proc_lib,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5542f4add07ef7bb54a76b0cdfa542ba"}]},
+ {proplists,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5723876c3ed585a5a4b10dc3aefaf170"}]},
+ {qlc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"75df6efc99d9a75bb4c989985125d3da"}]},
+ {qlc_pt,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e84b6da8fb84f811f2c58365e59dd47f"}]},
+ {queue,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"221ed57d299c2281992706fd6e2c6584"}]},
+ {random,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e703cb7ee27e2e23baf924c2f6b29f50"}]},
+ {re,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6eef786ed4f4dfec57a568e488e3596d"}]},
+ {sets,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c4fbf3b29bf971465a8dc4077fc3e7c8"}]},
+ {shell,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c4fdd7e1d18047b5f086b6fe8730c896"}]},
+ {shell_default,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5a94fd884c9594ff9056228503cd2731"}]},
+ {slave,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f5536e71d137302d699982fc65b9d025"}]},
+ {sofs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"10f13cd4626d429897246538c02c2cb4"}]},
+ {string,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d7440fe2e1838223f877286bf7d8f2a4"}]},
+ {supervisor,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"29c98bf9e58cc955d4c29d881d98e84f"}]},
+ {supervisor_bridge,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f58b58a1fefecc46a476490ef5231d7e"}]},
+ {sys,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7afd9c746450e5189048ff3635b37926"}]},
+ {timer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fa3e2b017848accc808f92910abf87b8"}]},
+ {unicode,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"be45160097c37c9144169f4ba54e0128"}]},
+ {win32reg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9f59ec1a4af1e6381d8770fc2c5915e4"}]},
+ {zip,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bc9aab95b5fc9ee7e534e890d8e5516c"}]}]}]}},
+ {application,
+ {xmerl,
+ [{description,"XML parser"},
+ {vsn,"1.3.3"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/xmerl-1.3.3/ebin"},
+ {modules,
+ [{xmerl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1eabeb9846b832059537e2bdf6fed2d2"}]},
+ {xmerl_b64Bin,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"62075ae2d95f3188143a41f582542bf9"}]},
+ {xmerl_b64Bin_scan,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bd99982371c4db3baf4883c96e146c96"}]},
+ {xmerl_eventp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"99aad15d2ad4be80d580fe7e3ba4178f"}]},
+ {xmerl_html,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f79915eaadae7d92946f1182110e6f81"}]},
+ {xmerl_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"91fe55408e50bf92a9f8ef8b402a3e51"}]},
+ {xmerl_otpsgml,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f2e027e7204405c168eaa598a6a4d476"}]},
+ {xmerl_regexp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"408f3ffbd843e09ed0326f5e6a72356e"}]},
+ {xmerl_sax_old_dom,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"66b229f3eec3dce1f8754de256ba8d1d"}]},
+ {xmerl_sax_parser,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"66e80c0d03a583d22abc40a54096777c"}]},
+ {xmerl_sax_parser_latin1,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e2a462359d6765811f41b1ac1260c81a"}]},
+ {xmerl_sax_parser_list,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"db56224dbccdf302e42479027c3f961b"}]},
+ {xmerl_sax_parser_utf16be,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"aaa379b8f1008944bd486f29a85ab1c2"}]},
+ {xmerl_sax_parser_utf16le,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"027d5c2218de2a7dd6f5db3b1c433a74"}]},
+ {xmerl_sax_parser_utf8,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"40f970e9b4eb4122589c0afec6b8907d"}]},
+ {xmerl_sax_simple_dom,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2c08dc40f819e4972a58a2fb2fcf6239"}]},
+ {xmerl_scan,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0afb5a6c37db1b5dd100297a149d9f8a"}]},
+ {xmerl_sgml,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"22933821d58054ab2941678ce2f8a298"}]},
+ {xmerl_simple,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8c83463864e0c2117c7659aae4e6ae50"}]},
+ {xmerl_text,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"661d77ea6d07fe6281f04e8e553528d4"}]},
+ {xmerl_ucs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8ace187d193a5314fbe329eba939dcf0"}]},
+ {xmerl_uri,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1121ced96856184d51daecddbb4b562f"}]},
+ {xmerl_validate,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fe1eb20e24d92db08eb03a7a3fbbd73a"}]},
+ {xmerl_xlate,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2515e06ee34909465fb4520f199f5a46"}]},
+ {xmerl_xml,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e04d0e513bb48336b9e69de89208e97c"}]},
+ {xmerl_xpath,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"02a4e2d946ffe93e960c66ce0d391628"}]},
+ {xmerl_xpath_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d6531ac82f1524946a0a31f40a90546d"}]},
+ {xmerl_xpath_parse,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7b3bd078c12f46cf5154d05c49880058"}]},
+ {xmerl_xpath_pred,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e2a7d97114507d23ad8cfdf967fd656f"}]},
+ {xmerl_xpath_scan,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1d43883f65aa0006900fc053453d1bd2"}]},
+ {xmerl_xs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6963383b4148fd4a7d51bf8e54b79640"}]},
+ {xmerl_xsd,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4660a75a540225ba8a88c00914923507"}]},
+ {xmerl_xsd_type,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"be422d840d07c53b8ba210889dd5d308"}]}]}]}},
+ {application,
+ {wx,
+ [{description,"Yet another graphics system"},
+ {vsn,"1.0"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/wx-1.0/ebin"},
+ {modules,
+ [{gl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2b2c807a7fbd4012871027dd4292448b"}]},
+ {glu,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"28a23cf86e317c54ebd1b609b38f2fe3"}]},
+ {wx,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"854481fd306d90c1fe6ad683045a1d98"}]},
+ {wxAcceleratorEntry,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3d7572b3e8662e26666964cc64ff7b90"}]},
+ {wxAcceleratorTable,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a261f6c3e0d571493a46fcd40b0361f7"}]},
+ {wxArtProvider,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"22bc145a24e52e15d6e0f66e3f057df7"}]},
+ {wxAuiDockArt,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"22fca5ae251c6592dda5b08c0688138a"}]},
+ {wxAuiManager,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6f87b4fc280d820edca4655bfc0388bd"}]},
+ {wxAuiManagerEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d08f2847271aae031ed49a0cab96e8f1"}]},
+ {wxAuiNotebook,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4b055991aa4efef19c59653db60d611e"}]},
+ {wxAuiNotebookEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f9fc2a85bda82dc6406833d3746a1313"}]},
+ {wxAuiPaneInfo,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"96dc39e65e2d04e597a76663651cbe45"}]},
+ {wxAuiTabArt,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0641080a257e4c0ce7030d7a404ea965"}]},
+ {wxBitmap,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"62ddedace917fe7d65ebfdd968e2b442"}]},
+ {wxBitmapButton,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"676cbd0f421681f3cdb110b08b89cdf4"}]},
+ {wxBitmapDataObject,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9ab868e8a18350bb427d08abd31d805c"}]},
+ {wxBoxSizer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8f30f0ad197cd2fe6bb6956ecf55009e"}]},
+ {wxBrush,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f41534b5b14c0528729f3faba6d97e1d"}]},
+ {wxBufferedDC,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"14bd8d1184f57ca3b71ae50c396b8fb6"}]},
+ {wxBufferedPaintDC,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b617bb74c090fd1bedd78a44e87620df"}]},
+ {wxButton,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cee0c2cf94d454426067a18f222b5175"}]},
+ {wxCalendarCtrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"684d559165e957aac543b2f75db8821a"}]},
+ {wxCalendarDateAttr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d3406fdefafb1e56b3b4b0c049e8f306"}]},
+ {wxCalendarEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"deb02e8741160ee9f1a44853db16a6d3"}]},
+ {wxCaret,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"543d4a99c593ac822143cc4c680fbe10"}]},
+ {wxCheckBox,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ae5b445190e6d0811bc3bf41c269ad7a"}]},
+ {wxCheckListBox,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"094de5ba936cca4c26ffc0b765d371be"}]},
+ {wxChildFocusEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d4d29ee311555ab76419724546859432"}]},
+ {wxChoice,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b7e31246a035375896498e17c366beaa"}]},
+ {wxChoicebook,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"32665c0637a00816a2fff4d4f5f418c1"}]},
+ {wxClientDC,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"400fdcc0f51e0e5043be4ca4da99a8a7"}]},
+ {wxClipboard,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4ddbb8e1f11321204d48d247e9f7548b"}]},
+ {wxCloseEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"815ac954da8b6cb7b694ca4cb28ccd50"}]},
+ {wxColourData,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"84cf04d6327af73aabd2f775d16bac5d"}]},
+ {wxColourDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d8e90d5109efec91ee6417d01b929951"}]},
+ {wxColourPickerCtrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e7fb673975f4cfa9946c34e30109d036"}]},
+ {wxColourPickerEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2cfa29b0fce7f98058c3d5ad016c1f2f"}]},
+ {wxComboBox,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b2aa520b9051f42a5e0f1ce1c6408101"}]},
+ {wxCommandEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e5fed22a39c6c80dcc029ebe5444b0c0"}]},
+ {wxContextMenuEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0a1739b84b365833c87232bfb298f681"}]},
+ {wxControl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"aed7a496290caa0b53740c681de998ec"}]},
+ {wxControlWithItems,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a14351fadd0f776a4deeaf5ec518a689"}]},
+ {wxCursor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"79eadaef3d9df7bae0a2146634d43e72"}]},
+ {wxDC,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3f88cfd62f368172c3ed90684df53ba3"}]},
+ {wxDataObject,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"065ea6f1e76ca8b6558ca3dd7ff42077"}]},
+ {wxDateEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"56c06074946764fbc74b7070f5759e19"}]},
+ {wxDatePickerCtrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c716525fffbc864c85159fb43b2a8d64"}]},
+ {wxDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1a480a0c1690092014cf8198ba52d2a3"}]},
+ {wxDirDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"43565cc473a21632555cb3151138b7c0"}]},
+ {wxDirPickerCtrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6463e54c6564a1f7f5d6bec082f9ea63"}]},
+ {wxDisplayChangedEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1dbd9061f370f3db0343c4f88f57cfa3"}]},
+ {wxEraseEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ff780a85a34cb23667b7e4072db17a2b"}]},
+ {wxEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8644675e2fd7bbc6965d4babd0d14d7a"}]},
+ {wxEvtHandler,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c0991f5d86247ce757145c326adea516"}]},
+ {wxFileDataObject,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cd9b5735e3994492c32ca099a70093d0"}]},
+ {wxFileDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b9cb446535683e7a9258953f53cd77de"}]},
+ {wxFileDirPickerEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6153d339ac822da8c4a9d766d0af22f9"}]},
+ {wxFilePickerCtrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5c9ff43ff739e3ee37aae637a494d7d3"}]},
+ {wxFindReplaceData,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bccc5beebb4aa0bfd424d26f472745a6"}]},
+ {wxFindReplaceDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c40b557d35e4bc527a715996daad0e0c"}]},
+ {wxFlexGridSizer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ed3da3c3822f59a6b2737f273397367d"}]},
+ {wxFocusEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1c04cb018d6c94d24a44ae365dae46c1"}]},
+ {wxFont,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"64303b1a35432898649e40e9c3f5bdd2"}]},
+ {wxFontData,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0135398ad369de2fd9beda1553f7d309"}]},
+ {wxFontDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a872a3b88df4faa051e4b1f8cb0397a0"}]},
+ {wxFontPickerCtrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5e5b363ea487a4284714346d43d6c418"}]},
+ {wxFontPickerEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a22e0effda4c521ce1b35bd5b2259758"}]},
+ {wxFrame,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"168aac11a6c3835b122ee653ce2e50a0"}]},
+ {wxGBSizerItem,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"857c0be340c9c324d39cd525749a7cf7"}]},
+ {wxGLCanvas,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"88461209c2234e4e166923d760a42164"}]},
+ {wxGauge,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4d998a1ffcf56ccf2ea3a12eabe375d9"}]},
+ {wxGenericDirCtrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c5f8f19f7fdf9545c1a08318a12782b8"}]},
+ {wxGraphicsBrush,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9eeb08fd93c17259400e13b1586ef6ee"}]},
+ {wxGraphicsContext,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bee681fb85f534a63c2747e704d9001d"}]},
+ {wxGraphicsFont,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"be1d636aa381e330db93a1deb9ff4b13"}]},
+ {wxGraphicsMatrix,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b452f9e3d87800b00e063b39d71583aa"}]},
+ {wxGraphicsObject,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"64dba881c5b70355d45323363715ba69"}]},
+ {wxGraphicsPath,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e93e67098fd350e7eb20ccc5f7287b30"}]},
+ {wxGraphicsPen,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9c8c8c3cf5277cdc526dca9e591a10b0"}]},
+ {wxGraphicsRenderer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4aeb3961b9b1a22263c8abf2473cc53f"}]},
+ {wxGrid,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e1195ea11e71c0534fffa76535efefbf"}]},
+ {wxGridBagSizer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"60ee2c7022f1feef9c169a191945d637"}]},
+ {wxGridCellAttr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"02222543db113d41d409cd4080764d49"}]},
+ {wxGridCellBoolEditor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"297c5d3648d99bef9bc294d52d28b619"}]},
+ {wxGridCellBoolRenderer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5cf8954049f0443ea2f9003deae7960d"}]},
+ {wxGridCellChoiceEditor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b77d6b8cb344c4512cef8adaf23ef93b"}]},
+ {wxGridCellEditor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a5cf6065e8754f96612cff48a1fdcd20"}]},
+ {wxGridCellFloatEditor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"723baea27c999730afcacb3280f611c4"}]},
+ {wxGridCellFloatRenderer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ab56332ebccd1245fff7cb86abfd670b"}]},
+ {wxGridCellNumberEditor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f0d86be445b03945610d9154c8905258"}]},
+ {wxGridCellNumberRenderer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"28ae774386962927dd552da4e9a28ca1"}]},
+ {wxGridCellRenderer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a6da61c7ff2464f3b007626b1f813dcb"}]},
+ {wxGridCellStringRenderer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"aefd3b8019cc4321037c8bd8e4faeba2"}]},
+ {wxGridCellTextEditor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dbce8b54a66e9a9869d84655ef26d908"}]},
+ {wxGridEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7b41f04ffe42c4602fe2911b5ca44dbe"}]},
+ {wxGridSizer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"37bfde707aa6f2a1f68f8377dcbd7580"}]},
+ {wxHelpEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"714f8b000f3d09fe7eae13b1a5daa0c7"}]},
+ {wxHtmlEasyPrinting,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"eaa59118b8408b91d16df3b600494e5e"}]},
+ {wxHtmlLinkEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6f527856d02011b9f480494b2f3118f0"}]},
+ {wxHtmlWindow,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"61e947b44d4ae81b9bb0faf9a443cbd3"}]},
+ {wxIcon,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1b4d9209343a029641204f334bd07dc5"}]},
+ {wxIconBundle,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3281d9d364552b38009405e79467d5c5"}]},
+ {wxIconizeEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d66e4289534961f6868d91e1d1399b53"}]},
+ {wxIdleEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fc82957c3a0181ef84ca78ace7a9271e"}]},
+ {wxImage,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"25de92b502b3a920e1247d2d1433aa32"}]},
+ {wxImageList,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3445492f371fe7d2a6f7534d61ad66a9"}]},
+ {wxJoystickEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"15c7352ac168dc5adc0de4a872b9740c"}]},
+ {wxKeyEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b2e23f50406c65d5f2269910467a9721"}]},
+ {wxLayoutAlgorithm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2f93e6eac8570144faabaea83388129a"}]},
+ {wxListBox,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"87aade14ade89a7021b6908143d339f1"}]},
+ {wxListCtrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1e35643c3218ee7db6bf18dbd72bc470"}]},
+ {wxListEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"90354ad1e09b594dd321bca68d8d3f02"}]},
+ {wxListItem,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"be95e4c22e265fbcfb14ab7c9c798684"}]},
+ {wxListItemAttr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0137573b7a2b2569b481548c26bb91a9"}]},
+ {wxListView,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c0022979dbcc2ac873adb72ea26c16aa"}]},
+ {wxListbook,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0e4b01ad81bf68f1784ba30772502e0b"}]},
+ {wxLogNull,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"17f8273288c6e880ec0c7a21842b022f"}]},
+ {wxMDIChildFrame,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5894b4a01bb643f208995257a0f9a00f"}]},
+ {wxMDIClientWindow,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fa7017cfb2e70f0492550a2ecd01d1c7"}]},
+ {wxMDIParentFrame,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"251cf2044002bbb5afc2acddf442f14a"}]},
+ {wxMask,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8b4ce241e6edd84d32df4b40a2f17a15"}]},
+ {wxMaximizeEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e8a766afd7de5050ced825a275c6cdba"}]},
+ {wxMemoryDC,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b4c1bb9fed0edf70b44f24ea3fb54f39"}]},
+ {wxMenu,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d2e48cd879d0ece5ee24260bc70e2f9b"}]},
+ {wxMenuBar,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"562e9979f8ce58c85032ae3e02307d7b"}]},
+ {wxMenuEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0571277ab11e756d18d34c6cb4f8f1c0"}]},
+ {wxMenuItem,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"900c9de70ac02a326bce22eec1c64d48"}]},
+ {wxMessageDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a15267b44d3cbeae16c294c4c0b96324"}]},
+ {wxMiniFrame,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2ca0204b8a167fd472a555695e58927b"}]},
+ {wxMirrorDC,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d521a1f1e4d37132a7a0de0eccc332f0"}]},
+ {wxMouseCaptureChangedEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f85672fbf15ee0b8306de4aaf4eb4719"}]},
+ {wxMouseEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"802c21f46105f957d8cd8c84ff36d986"}]},
+ {wxMoveEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4231fd181e0b305a82c595f66eb99b96"}]},
+ {wxMultiChoiceDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4eb40bfa965a25034ebe4b8fca335863"}]},
+ {wxNavigationKeyEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"04b113c9dcf181af633d0eae1f18c36f"}]},
+ {wxNotebook,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fef44c082d799a4d86e0cd8db58609df"}]},
+ {wxNotebookEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0ccae052bfd1cf87236add4c0b26143d"}]},
+ {wxNotifyEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d3d22b2b86ce1a94c57ccd9842211f05"}]},
+ {wxPageSetupDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"755792c8d70118493f5147ef26f40d00"}]},
+ {wxPageSetupDialogData,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"942f2c8bd296e971ea1d0f74ec700be5"}]},
+ {wxPaintDC,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c23afeac816efecc5417b0687437d8cf"}]},
+ {wxPaintEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a18ce83af679d334ce979df65607226c"}]},
+ {wxPalette,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a5b3e165b8ac3e3cb2d5ba6e149bb0ca"}]},
+ {wxPaletteChangedEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"785c765df0a50eac4b2c5c054453c0d9"}]},
+ {wxPanel,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"08c772b8c30e7441366bcfcd5005f21d"}]},
+ {wxPasswordEntryDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"62b860fd64e74f7d67c51a5d8a0fb157"}]},
+ {wxPen,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"51b981a9e2313e58123888c6b67192ed"}]},
+ {wxPickerBase,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2ab9e2f2d6c3b5f8184d5b1d806b0dce"}]},
+ {wxPostScriptDC,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8a820bdc1354c448a8b442016951a6b2"}]},
+ {wxPreviewCanvas,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e7b48321129f0e14c2006272c8926544"}]},
+ {wxPreviewControlBar,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"62393081a6ffcb6bf092b47703e31b4d"}]},
+ {wxPreviewFrame,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"78f39bbfead1330839955a50281a2329"}]},
+ {wxPrintData,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"928a6a97c5c4b664687015c40d660cdf"}]},
+ {wxPrintDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"acc4c816bf0a64c8ce31af3c001f1688"}]},
+ {wxPrintDialogData,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fc97f97b620110928f4093806b1b8ce4"}]},
+ {wxPrintPreview,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"92f04b064e7b041ee27bb202e5a60b80"}]},
+ {wxPrinter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"05626841c780ceaf3c5af0212f53fbaf"}]},
+ {wxPrintout,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"feea26109fa63e4d98c2924189762a43"}]},
+ {wxProgressDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"eb45280951aef0038b8130c91a333833"}]},
+ {wxQueryNewPaletteEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"be6c85603e81f7c90d4a949d42c0b32d"}]},
+ {wxRadioBox,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"33684d6ce3f3c5388e6faf4f06d90463"}]},
+ {wxRadioButton,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"92bebfd9b33658dcff2e592b5fcaeb7a"}]},
+ {wxRegion,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"18cb5a2a1dcb63a646135f2a6cb1b21c"}]},
+ {wxSashEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d4c51c14137513da9841890751deafd2"}]},
+ {wxSashLayoutWindow,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f6f5167ff888b73c603b2f641e96a49f"}]},
+ {wxSashWindow,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"91c5be41fbe95f5ad4504fae2f56f91f"}]},
+ {wxScreenDC,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fc9411f49fe7324bcbace2c05d31d39a"}]},
+ {wxScrollBar,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e60ffb44799a3684f74d783addbf42c9"}]},
+ {wxScrollEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4fbd1eb49f69e56894aa4a7fb26e1b4b"}]},
+ {wxScrollWinEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"be44e413061c515cb83a103a46572065"}]},
+ {wxScrolledWindow,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ccef65f1430df907d9bd34c27408f9cb"}]},
+ {wxSetCursorEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1aad98a9e1d08f792da0d73f23ceb7e5"}]},
+ {wxShowEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"89a775b3e6579b8e55e35bc6a46649ef"}]},
+ {wxSingleChoiceDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f0df9c7367cbb88a21c8dbfcff668fed"}]},
+ {wxSizeEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"78d4dff8fa58b02bd49c31b6de28b935"}]},
+ {wxSizer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"581f4ba6c9b3befca1efbcd221455b49"}]},
+ {wxSizerFlags,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"54ae0bf1305ef85943158c8f4bc58669"}]},
+ {wxSizerItem,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ff2680fb6f057abf757516aa98e26281"}]},
+ {wxSlider,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f1e0578ebbde06a5308c00e98e0fbb6b"}]},
+ {wxSpinButton,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d27cc12c048bf0b160f53ca416add6ab"}]},
+ {wxSpinCtrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6ce2382ed84ceb1585afea719fcddf73"}]},
+ {wxSpinEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"158d1777d9e8d840b6d8fa93982b876a"}]},
+ {wxSplashScreen,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2719e687a6f08135c305b0b0692b8f40"}]},
+ {wxSplitterEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a71231c8d2c06f12ee862be00ac91fb3"}]},
+ {wxSplitterWindow,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d7cf57a832b89c0e8574b09e632c7f1d"}]},
+ {wxStaticBitmap,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"709ad1816bd35aa84a5b1eca1a6571f2"}]},
+ {wxStaticBox,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"84480d00723cfae07f5c67ad463bec22"}]},
+ {wxStaticBoxSizer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b32933189486b806c14a04452a3a5887"}]},
+ {wxStaticLine,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"569ff89c23e697fc73de1f13d51b17d3"}]},
+ {wxStaticText,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6baa91538f6f4d374f0c8c4a2cb5f25c"}]},
+ {wxStatusBar,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1cbef8443710f5270baade15b9312c4e"}]},
+ {wxStdDialogButtonSizer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2325bcbc06870de4093489cae45bc2ee"}]},
+ {wxStyledTextCtrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"94cc5d191271e6c87926850e0ea8615d"}]},
+ {wxStyledTextEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"451ad9ce6872ea2035c3828713fe09c1"}]},
+ {wxSysColourChangedEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c6f80dd65e0c9731e4a6dfcb10c71059"}]},
+ {wxSystemOptions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3f3db4310f5e978392d4c6ec83347dae"}]},
+ {wxSystemSettings,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3bb2753eb2dde96fd7f4aac7f944f69e"}]},
+ {wxTaskBarIcon,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d221781abd0a15270e591e77e279a840"}]},
+ {wxTaskBarIconEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a3d865d9706104b122cab70b07fcc3a1"}]},
+ {wxTextAttr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3a6de5eb0c71625ca14606d4e3919e53"}]},
+ {wxTextCtrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"924adbbbade1b95c226a18484c6bba33"}]},
+ {wxTextDataObject,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4a3694d548ae60c8261f55b671ac834a"}]},
+ {wxTextEntryDialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6c3038c65992b9a6eef33dd1aff7ce1d"}]},
+ {wxToggleButton,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4471e21c4fb39eece7418adbcd0f0fd1"}]},
+ {wxToolBar,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"163743b59b5ec0b6af08d7a66f1f36a0"}]},
+ {wxToolTip,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"71dde961902117baba2d2b70f18ebad5"}]},
+ {wxToolbook,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"053b84811ff7ef240d44fa454f966e71"}]},
+ {wxTopLevelWindow,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c7dc3f9260823e5ebb2f99855f8d498f"}]},
+ {wxTreeCtrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"72e339bd396c87edd28d5a7cc6954e6d"}]},
+ {wxTreeEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"17bf2e16e1f41f451fde53d1b72f8b01"}]},
+ {wxTreebook,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b4889ab8905fd0fd8df5d06c900edf44"}]},
+ {wxUpdateUIEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b7e61e2de35af5257f49919be1304381"}]},
+ {wxWindow,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c5337193a39eb848cbcd1afc79f19c8f"}]},
+ {wxWindowCreateEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c898ff077b90017671180089c5b37048"}]},
+ {wxWindowDC,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dcdf0f184f2b85f0915bb8d89ae8be27"}]},
+ {wxWindowDestroyEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6c443d15978d3a61549f9817ff75fb48"}]},
+ {wxXmlResource,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7240754b5985cf7af7c3ff2a3aba3548"}]},
+ {wx_misc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1c24e9903d1b499f26e385d7aae15108"}]},
+ {wx_object,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b17d673c7c4f59b27e9625b62077ef41"}]},
+ {wxe_master,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cbafeb9aba24bb5e831dede889b317c1"}]},
+ {wxe_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d6fabc67e68c6a41d8fa0ae642f6b272"}]},
+ {wxe_util,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5d6e77598d0db8185bb1cb3bad9c5d14"}]}]}]}},
+ {application,
+ {webtool,
+ [{description,"Toolbar lookalike for the web"},
+ {vsn,"0.8.9.2"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/webtool-0.8.9.2/ebin"},
+ {modules,
+ [{webtool,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"29344486df5f854ae8fd3bd674c80e99"}]},
+ {webtool_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0130c653986734ecbcc9eb173c28c60a"}]}]}]}},
+ {application,
+ {typer,
+ [{description,
+ "TYPe annotator for ERlang programs, version 0.9.5"},
+ {vsn,"0.9.5"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/typer-0.9.5/ebin"},
+ {modules,
+ [{typer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bfd9dd08af18a1e70eacb4048fb641d9"}]}]}]}},
+ {application,
+ {tv,
+ [{description,"tv Table Visualizer"},
+ {vsn,"2.1.4.10"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/tv-2.1.4.10/ebin"},
+ {modules,
+ [{tv,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"be7275d94eee00787500a1a2116f2f42"}]},
+ {tv_comm_func,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ac45aad5047bb8c9fd5567c83f513db4"}]},
+ {tv_db,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"97de27d10499042aaf10e26289e1e92b"}]},
+ {tv_db_search,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"41a489c86d92bc1de3d2b1eba6884c6f"}]},
+ {tv_db_sort,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e8f3679aece6310ac4b2d574bb4e7180"}]},
+ {tv_ets_rpc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"71f7fcd2da96e0166340d5fecd7b3878"}]},
+ {tv_etsread,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"45a731d225555df8f910b7960330f095"}]},
+ {tv_info,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1c776d3c4a16bc432fed801d2e3c8d70"}]},
+ {tv_io_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6c34cbecb007f6b330646a192aac6163"}]},
+ {tv_io_lib_format,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"843ef9fc1762e75675f7a27b7ba99eb4"}]},
+ {tv_io_lib_pretty,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e749f6a7879008513c7194c145e0faf2"}]},
+ {tv_ip,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2d54724ccb30cfd4eaca323d38ef7861"}]},
+ {tv_main,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"de096a5d9d31dd3443e6bbbd4207ecd8"}]},
+ {tv_mnesia_rpc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"947c40384ab9d95074ee626b399d893d"}]},
+ {tv_new_table,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c3105970c5d4e109104492bf286bfb4b"}]},
+ {tv_nodewin,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bfd57496a2e56d57558891338db3e79e"}]},
+ {tv_pb,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fecb58bfc084d7d6dd979f14ea8c2796"}]},
+ {tv_pb_funcs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bcfb711f62ae07c91da02c5b145f3099"}]},
+ {tv_pc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"61f6f61fcc34826ca8bc3b450e94f92f"}]},
+ {tv_pc_graph_ctrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e8c763ad45fac44f4356a4739baa30b0"}]},
+ {tv_pc_menu_handling,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fc155c0472d92d089e6d74a1987d2223"}]},
+ {tv_pd,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"20b8ec33209b59d6775702be748d2da1"}]},
+ {tv_pd_display,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"73d810061bb4e923468e82e414f6c962"}]},
+ {tv_pd_frames,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8fd381887281403263da14b070a35ca1"}]},
+ {tv_pd_scale,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"daff409824df94f43198e08c00c8aadc"}]},
+ {tv_pg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"de42de073fbf5bd3ae58bef45ee05858"}]},
+ {tv_pg_gridfcns,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"663f41dd11d7fbca1f8eb58529e63e53"}]},
+ {tv_poll_dialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ef887432416a9931b8051963d9a97fdc"}]},
+ {tv_pw,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c4443616d58cadb7e473ff9ad95c473c"}]},
+ {tv_pw_window,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ef96313278caafa5e4cb0c1f5da9d165"}]},
+ {tv_rec_edit,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6cbd579d5ccd73e575e67d00fe9983d2"}]},
+ {tv_table_owner,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"af79fe7c2092cd90cd1cd360def69fec"}]},
+ {tv_utils,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d6967a2d5f7e03b34c4e26f47355ba43"}]}]}]}},
+ {application,
+ {tools,
+ [{description,"DEVTOOLS CXC 138 16"},
+ {vsn,"2.6.11"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/tools-2.6.11/ebin"},
+ {modules,
+ [{cover,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e7856ff33e1e956b68c9f6527b5700b5"}]},
+ {cover_web,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ead2c2bfdef49be858d1caee2d8878a0"}]},
+ {cprof,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0d6cd8fb042b31641c7869b4e148e7c5"}]},
+ {eprof,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c8fd5ee11ba9f1cdae8af5c8f1b367a1"}]},
+ {fprof,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c549341f79f954416e826f591645f676"}]},
+ {instrument,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cf9b95c95942f0ca0ca65db707873a74"}]},
+ {lcnt,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"04b27f3e814feb4f8d4f95705115ce98"}]},
+ {make,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9a69d24258713596763ad87c247cef15"}]},
+ {tags,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"450d10b82d488d74ab49eeef1d7277b7"}]},
+ {xref,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5f07cbb4541ab47dd30a29a9ad6df8c2"}]},
+ {xref_base,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cdb2414576f192e4f5df0f8b0d565598"}]},
+ {xref_compiler,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c1bba5a52fff82650e201bd08241277e"}]},
+ {xref_parser,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3ee075a14d4a9caf00fd422a5b8a4941"}]},
+ {xref_reader,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d257c5126f9d0cc4e9050fbbae796366"}]},
+ {xref_scanner,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c7e53f28338fe627ac6fd0821ae6c551"}]},
+ {xref_utils,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"66929f66fc0606d320c6e5d216cb3b29"}]}]}]}},
+ {application,
+ {toolbar,
+ [{description,"Toolbar"},
+ {vsn,"1.4.2.3"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/toolbar-1.4.2.3/ebin"},
+ {modules,
+ [{canvasbutton,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2432b0ceaf3b3cd6ab059067bb1b904c"}]},
+ {toolbar,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0264f53a2881d926b34401d0583b07fe"}]},
+ {toolbar_graphics,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"327c7483e8b5cd55e8478a2cea9f0c1f"}]},
+ {toolbar_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"64977a22d445c231a98bc12926186e0d"}]},
+ {toolbar_toolconfig,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"037bc3e6d48012cb0c18796d7870c33a"}]}]}]}},
+ {application,
+ {test_server,
+ [{description,"The OTP Test Server application"},
+ {vsn,"3.6.2"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/test_server-3.6.2/ebin"},
+ {modules,
+ [{erl2html2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"28fc702edc8365854f9f66fc2fe01793"}]},
+ {test_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"09cd3b380d55881b18f4020709ad1ef4"}]},
+ {test_server_ctrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"14f716cc55a7cb00e3db6f747c72bfa7"}]},
+ {test_server_gl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"91fa2c7419209a51361800e1a28f3891"}]},
+ {test_server_h,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"90c3fbf1bdd3260d8be29c0ab04279bf"}]},
+ {test_server_io,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"accd333c058e9b4da064190ef7cf48cc"}]},
+ {test_server_node,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"091d5d7aadb062a6e3812afbb130402a"}]},
+ {test_server_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9aad63f121b569e197e38735d5f3bf2a"}]}]}]}},
+ {application,
+ {syntax_tools,
+ [{description,"Syntax tools"},
+ {vsn,"1.6.11"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/syntax_tools-1.6.11/ebin"},
+ {modules,
+ [{epp_dodger,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ec04cd4dd5985f232fc3116ba222bfd6"}]},
+ {erl_comment_scan,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0b8dce1126af7468c5b30f73044c44db"}]},
+ {erl_prettypr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"020fefd3937417a2029a5278dfe6a6c3"}]},
+ {erl_recomment,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f9ef1a5c9ce3c6ce6b88966b1c766452"}]},
+ {erl_syntax,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1ee5f2f422313742a2d321fcd901909b"}]},
+ {erl_syntax_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f27de1f2cf65260fe863025c358c9c86"}]},
+ {erl_tidy,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f92471b03263f0cd77f35fd59686258a"}]},
+ {igor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"eabc7b07e7b92b8d34fa8eb20a507cff"}]},
+ {prettypr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c1e07ce1f5edda823216364302796ac1"}]}]}]}},
+ {application,
+ {ssl,
+ [{description,"Erlang/OTP SSL application"},
+ {vsn,"5.3"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/ssl-5.3/ebin"},
+ {modules,
+ [{dtls,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d3942c7ba7ffaf15f739485a0294f256"}]},
+ {dtls_connection,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0d3d571363ba45d10d8d772f107cd24f"}]},
+ {dtls_handshake,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"92217b2b0b6d3b16913521e333533ca6"}]},
+ {dtls_record,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4aa88c3ec82a97c9aef5efb0773c153c"}]},
+ {inet_tls_dist,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7c9e1c10262b46fce60dcd0127455cb0"}]},
+ {ssl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7c0cf688a767412c4de5ab3be9cb2e55"}]},
+ {ssl_alert,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ff069c184808a482f096e6cf5aeda43b"}]},
+ {ssl_app,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"08781acbe7e677b43923f943d54e17f5"}]},
+ {ssl_certificate,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"292c330ca048353298a264de596e2ee2"}]},
+ {ssl_cipher,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c7da7124e32552cf9438259bf544389c"}]},
+ {ssl_connection_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b46886f7e29fdc628a965ee9e2314e1f"}]},
+ {ssl_dist_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1db0e97b9d77cbb26348e98cf386210b"}]},
+ {ssl_manager,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1e170a0ac2f663c4396f5a3b00e36239"}]},
+ {ssl_pkix_db,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0c1b5a81345dcd39060c2fb177b29898"}]},
+ {ssl_session,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f9103614974d7d39d0f1ccb0a9e5b6f8"}]},
+ {ssl_session_cache,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"09b0d541e61e1ed9dbcb169b1d5b945a"}]},
+ {ssl_session_cache_api,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ffafcdc2ff0342c4c698df0dec3cdc96"}]},
+ {ssl_socket,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4e9d62b4943dddf16fbe39f781699260"}]},
+ {ssl_srp_primes,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8c2df3c9a38a3ceb9cb273a030bd423a"}]},
+ {ssl_ssl2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6822bde894695368a294a0e890183b67"}]},
+ {ssl_ssl3,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c5cd3fbdb5a3f1fdb4c78a2acf9735fa"}]},
+ {ssl_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a69f0e3bb4639f90a310b2b938cb9235"}]},
+ {ssl_tls1,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"14b5f8a146f51df359e9c1265e949564"}]},
+ {ssl_tls_dist_proxy,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1bbb1df174c32c1f424cfa64547d075f"}]},
+ {tls,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7ff734327614ac4d6e4d9acf49998c2d"}]},
+ {tls_connection,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ad4d62a6b8101cc5b928498752714ed7"}]},
+ {tls_handshake,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c2c5513a959ecbe56166df52dff06e6e"}]},
+ {tls_record,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"94501e4bda011f01fba860eebdff5a44"}]}]}]}},
+ {application,
+ {ssh,
+ [{description,"SSH-2 for Erlang/OTP"},
+ {vsn,"2.1.7"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/ssh-2.1.7/ebin"},
+ {modules,
+ [{ssh,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8b91a0a4f8271ff77d0efceb75ba5e8f"}]},
+ {ssh_acceptor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7c39ef119dbfcec7618d1cf223d445d6"}]},
+ {ssh_acceptor_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d79d965ce6a8121cfbcc1a57029fa06c"}]},
+ {ssh_app,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"11089687f3d5ff2e2ff4527efdb86920"}]},
+ {ssh_auth,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0ff2e66febd08d64ffbebed7e7880ca3"}]},
+ {ssh_bits,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5ab1a9f964ccce1e001d7484b37c561c"}]},
+ {ssh_channel,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e4259284ff9d7671940cfde40b8615fe"}]},
+ {ssh_channel_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2594f48f478040f5e861f92c63f78eb3"}]},
+ {ssh_cli,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6eb0733483419dc0a920452bb42b7344"}]},
+ {ssh_client_key_api,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f1a1ce3edce20525a435533b3f37fcfc"}]},
+ {ssh_connection,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b551f86d866df22232a147fca4ac7c04"}]},
+ {ssh_connection_handler,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9bec5a32b6f6199b3f52e1fbfbbceba3"}]},
+ {ssh_connection_manager,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"399ad1481f99b9d43c874c162742c91c"}]},
+ {ssh_connection_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cd1150bc1fe3673d2446811f54dc23de"}]},
+ {ssh_daemon_channel,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"17ceee1d84a542cf54dd487808e00a1e"}]},
+ {ssh_file,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d014774c5b5dbd368fad2bc809515e48"}]},
+ {ssh_io,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c1045e82cd74643c823a1bda96d24b47"}]},
+ {ssh_math,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9a4b44ed70c1938a7277f37d56f9de8f"}]},
+ {ssh_no_io,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c9bf450746c1bcc1fd90c463299fdaf5"}]},
+ {ssh_server_key_api,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"debb7d5dcdf2eb88d30ed95a56652366"}]},
+ {ssh_sftp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"74ed0ad4eaf38e4233ea40f4b4769b7d"}]},
+ {ssh_sftpd,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"472a422310ca8f6f289334ef64550afd"}]},
+ {ssh_sftpd_file,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5269b3e25dd16faeb466f76ba993ba50"}]},
+ {ssh_sftpd_file_api,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"627f97d4fb4abd5bee4b509d9225edaa"}]},
+ {ssh_shell,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5c7831c144031be28ec9dc12b4da3b94"}]},
+ {ssh_subsystem_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"755716a08c990d1f606e90420006a77e"}]},
+ {ssh_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"408837d884dc9e1f0a969ef64558d733"}]},
+ {ssh_system_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f384bcadd7cdca24ec6e40cbe04d71a0"}]},
+ {ssh_transport,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0b1c9ed65701948f63ddb181cfaf2744"}]},
+ {ssh_userreg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a4f27505cb543991360e10ddb88870cc"}]},
+ {ssh_xfer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0220668d75e0c89e7823990a0c968eaf"}]},
+ {sshc_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"483104e1f9410dfc4e1e29c61d8827ee"}]},
+ {sshd_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"aba8a2861b6f773e9016ff2859e8de24"}]}]}]}},
+ {application,
+ {snmp,
+ [{description,"SNMP CXC 138 13"},
+ {vsn,"4.24"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/snmp-4.24/ebin"},
+ {modules,
+ [{snmp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9ab098c46c4c009b5ab8a4a37673cf82"}]},
+ {snmp_app,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6a2ab3974db30a5b20ba308e1ef0c1d3"}]},
+ {snmp_app_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b81a8361da32fd1da51e85f36b678347"}]},
+ {snmp_community_mib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"14e553d78094cb09e2e2a1a3476fa9de"}]},
+ {snmp_conf,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5e5c6bc754f1fdf1dfaf7f9815163cc5"}]},
+ {snmp_config,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d9ec2fef69fed3fddbb122a5fd31853b"}]},
+ {snmp_framework_mib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0886188c6a8c18a6ff8a3b08172a0773"}]},
+ {snmp_generic,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b23bcb8a031ccd450999f71b41f1f0dc"}]},
+ {snmp_generic_mnesia,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"74806ef6c5e3a1af2cb14a4121f4442a"}]},
+ {snmp_index,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8a0358730d6b279e4056b9e78fdabbe2"}]},
+ {snmp_log,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f93d36dbfdfef30de3f4807efcec170e"}]},
+ {snmp_mini_mib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4bb79af4e373cdc2ec4e6f5fe71d0e01"}]},
+ {snmp_misc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2ccd6ba3cc7e504e0c163f8c0f7ff575"}]},
+ {snmp_note_store,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a3b5f37d8fc6663a63d177cb72a1c498"}]},
+ {snmp_notification_mib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c283ef6cba1ffb08a38c4228f119c1f2"}]},
+ {snmp_pdus,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"48138570bb1ff76dabe8f1fa5a6e662c"}]},
+ {snmp_shadow_table,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ba004cbc14fe13ad6b29515d6b3b84af"}]},
+ {snmp_standard_mib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"75c1099b71f4cde7703c1b651168196a"}]},
+ {snmp_target_mib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"52cfb682cf25e4c6ad7c6a31ea71bc41"}]},
+ {snmp_user_based_sm_mib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b3b454fe409f6cd24463bfca9369adf5"}]},
+ {snmp_usm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"667650cc1c2f535f771132907bf12342"}]},
+ {snmp_verbosity,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c8e3d33775ee83cca4d47f64df1dd5ca"}]},
+ {snmp_view_based_acm_mib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1dcc969b6786ab84f450e9f0875eab3e"}]},
+ {snmpa,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2057219be785ea520f5a3f1886d51360"}]},
+ {snmpa_acm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f21fee89e88dccc36afbae59e8ccd85f"}]},
+ {snmpa_agent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a1fcbbb2b5328095d05622eb5da5b1fa"}]},
+ {snmpa_agent_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"668a5398f181b8abce6b0c68716e175e"}]},
+ {snmpa_app,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"16cc3053b5568e50b5fa384baca6a40f"}]},
+ {snmpa_authentication_service,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fc05c3f08dbdec4878aae7816eb5033e"}]},
+ {snmpa_conf,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"826ab227f8829b50aabc3072cf2a8537"}]},
+ {snmpa_discovery_handler,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"50040fb1565d5888507dcffe6109cc16"}]},
+ {snmpa_discovery_handler_default,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"62413e2497c617d1dabf1ab269610eb3"}]},
+ {snmpa_error,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fb436bf4d7bf0615c02c649c0e04541e"}]},
+ {snmpa_error_io,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"98147b5cfad093916c0756b37f763e86"}]},
+ {snmpa_error_logger,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b0431d9de22543e6608515bc4afc07c2"}]},
+ {snmpa_error_report,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"214d6585224898ce39f6eef6554593c4"}]},
+ {snmpa_local_db,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"eb82eaa9a8486d087a27e834b58a2f6c"}]},
+ {snmpa_mib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e68b813ac1df34912af16ef01738f185"}]},
+ {snmpa_mib_data,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ed334445e6e025059b2c9b618109cb9c"}]},
+ {snmpa_mib_data_tttn,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2f39357a667d3cb530b431fed0dfa674"}]},
+ {snmpa_mib_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"79d8aff9ea8d71bce6eac0a6f01f53b8"}]},
+ {snmpa_mib_storage,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"22e11676e0303ea2f292534da8ae66f5"}]},
+ {snmpa_mib_storage_dets,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f8c4649828d764370112243ccdbd2da3"}]},
+ {snmpa_mib_storage_ets,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4410e4e89e46b6e2b818d3b002a98579"}]},
+ {snmpa_mib_storage_mnesia,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1e3d387a72c28b5bf76d7a55ac39071a"}]},
+ {snmpa_misc_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6c4244cad7870e2ec012bdd05281b182"}]},
+ {snmpa_mpd,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8475e9d61092213166efe3667bcf0c06"}]},
+ {snmpa_net_if,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"258227a8467ed99df2f9e55cc7b5e9ad"}]},
+ {snmpa_net_if_filter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f57faf094fd82ceadc8527983194b2cd"}]},
+ {snmpa_network_interface,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"247221ee7ec97ee189ef5a8b5eb2d18a"}]},
+ {snmpa_network_interface_filter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ec6d7d452145362e9dcc0a8be42b3280"}]},
+ {snmpa_notification_delivery_info_receiver,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"de84fce31ef758fbb04722b66e1b22d3"}]},
+ {snmpa_notification_filter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e0b2e493bbbe13f1f17f3fd0be7ce1f7"}]},
+ {snmpa_set,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7152d8c4f238062a801fb9b46115b1ee"}]},
+ {snmpa_set_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c1739e0cf36ad6a9249a8a200409813b"}]},
+ {snmpa_set_mechanism,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c3bef6423ec85b3b9a144f17c3e3f6c2"}]},
+ {snmpa_supervisor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"19aa2eef0602df46711bdc98c67d105c"}]},
+ {snmpa_svbl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e4079d7e9812ac1c42274316b0f883c0"}]},
+ {snmpa_symbolic_store,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e0fe1dda713ed3048f51155e47932e06"}]},
+ {snmpa_target_cache,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"02394ee2b706d7c26f027c960c659f39"}]},
+ {snmpa_trap,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6ffd78574b7c33a0a96bee64d310531e"}]},
+ {snmpa_usm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b121f7bf87a2d44a14aa42988c2072f3"}]},
+ {snmpa_vacm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d7c7855fb65468a2355c889aa26badb6"}]},
+ {snmpc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a474261cc18e1f80f0f742774e3b1417"}]},
+ {snmpc_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ce88a5b16fdc8fa367c8559a81eabcb8"}]},
+ {snmpc_mib_gram,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c8b4a0280a0bd9b0e89fd47361381583"}]},
+ {snmpc_mib_to_hrl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"88a2a7964f0b3501263eaf513a72e876"}]},
+ {snmpc_misc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"feadc3549879e928bcc4941ff25c1756"}]},
+ {snmpc_tok,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"37784c9fb162c53b0fae3cd77566bdb2"}]},
+ {snmpm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cfcde2ccea1b2dbfe7d6f3bead4df7d4"}]},
+ {snmpm_conf,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2d6eef427d28f7a96b5be06a0509ed8d"}]},
+ {snmpm_config,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5a026c01e17b82bd2fdcb31fb69ae51a"}]},
+ {snmpm_misc_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"02dd27ee95e3bbe3aab099b11120b826"}]},
+ {snmpm_mpd,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1b593b66256ce780231c57b31298fd29"}]},
+ {snmpm_net_if,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"68d325a69b69e7de7106965a049522d2"}]},
+ {snmpm_net_if_filter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a83bf186eec6c82fd6c9b164fc337edb"}]},
+ {snmpm_net_if_mt,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e44169e0549ab840243a2e4e0fa3d5fa"}]},
+ {snmpm_network_interface,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"47b0e15cd1537e1a3a1b41b8be44998e"}]},
+ {snmpm_network_interface_filter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"93b503aeb95e30d2fcf28c2b7d2e017e"}]},
+ {snmpm_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fdf5855cd385c8d4589d43f2aaddee8c"}]},
+ {snmpm_server_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1fc16c37e8db23a8b3e40d3696488a0d"}]},
+ {snmpm_supervisor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"289642b05307317c1684b5ba76cb81c5"}]},
+ {snmpm_user,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9c6e66b34460082bbcb99ccaf1cedbf3"}]},
+ {snmpm_user_default,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c8c7e1b66076bcbde4678471ee9066f0"}]},
+ {snmpm_user_old,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ae32fe52a746f3be59c94bac2b679fcb"}]},
+ {snmpm_usm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"59bb20fedd0aca2f57ce3b5dad4e50aa"}]}]}]}},
+ {application,
+ {sasl,
+ [{description,"SASL CXC 138 11"},
+ {vsn,"2.3.2"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/sasl-2.3.2/ebin"},
+ {modules,
+ [{alarm_handler,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"250185bf9caa8aafeefc21d2dc85671d"}]},
+ {erlsrv,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"656c183c67d6d7556d846752ac2e0168"}]},
+ {format_lib_supp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"be7d1b5e03f626bc3a081680842f3c69"}]},
+ {misc_supp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"57e2232dbb711535686b684350c6412a"}]},
+ {overload,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ce834faf427a10bffb528420385e75fc"}]},
+ {rb,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c791582aa44b9701a38bea7b12a737c9"}]},
+ {rb_format_supp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f6df90c6b446bfd31471022bae098995"}]},
+ {release_handler,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bc289c9b3ed6443f9e88a7a40b1bbd78"}]},
+ {release_handler_1,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0b7cbb150cbc1ad629936632bcf8700a"}]},
+ {sasl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8a39ff904fad2fb7b62b8745b34e29b9"}]},
+ {sasl_report,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"651a20fbd6df5b1c785152aecf691f13"}]},
+ {sasl_report_file_h,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6d21420c495fb60e6be13677a923ff7b"}]},
+ {sasl_report_tty_h,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"165b304307e62adee19805a95d9b6ccb"}]},
+ {si,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ecfe8c3c35aba098dd3530398086bcc1"}]},
+ {si_sasl_supp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"77c86cc1c9667be73a48dbcb3c480d36"}]},
+ {systools,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5514e0264308050ac1cc5cecaf74c950"}]},
+ {systools_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f1aa9e6a22dccb94499d5609ce1cf66b"}]},
+ {systools_make,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d2c4d3e4b7b322b6629575a64e553f90"}]},
+ {systools_rc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4337b68dc98fbbed9e93f2bde9ef4d0d"}]},
+ {systools_relup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dd4bb2c6c8422b979b5a75e6f545baab"}]}]}]}},
+ {application,
+ {runtime_tools,
+ [{description,"RUNTIME_TOOLS"},
+ {vsn,"1.8.11"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/runtime_tools-1.8.11/ebin"},
+ {modules,
+ [{appmon_info,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"62c6dd94499d20f1776df7cd3267c100"}]},
+ {dbg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5a7b449f37506a70985c5b3f69ec579c"}]},
+ {dyntrace,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"746609b1554ac41985637b5bba780905"}]},
+ {erts_alloc_config,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1a489439d8dded5734eab5eb575ce454"}]},
+ {observer_backend,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d9af82e565eecf62c161023fce415c58"}]},
+ {percept_profile,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"32909b64d30ade082680e9491a3ddbc8"}]},
+ {runtime_tools,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c569a23a42bf744f56abbf4215ca2a9d"}]},
+ {runtime_tools_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f52650d88ee6f6754ed9d109accb7eac"}]},
+ {system_information,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9ed879d33f6159b48fb25bc472369285"}]},
+ {ttb_autostart,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6838c97b9564b06d26e5f599adcee4a6"}]}]}]}},
+ {application,
+ {reltool,
+ [{description,"Reltool the release management tool"},
+ {vsn,"0.6.4"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/reltool-0.6.4/ebin"},
+ {modules,
+ [{reltool,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b15d15af1453d274df701f6c4b39da09"}]},
+ {reltool_app_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e15041fae657a7abcce63e7e775af842"}]},
+ {reltool_fgraph,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0c07b7a13c2ae36b59f5d1f0daf8a567"}]},
+ {reltool_fgraph_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"230041769919290efa2a3419cf70c8cb"}]},
+ {reltool_mod_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"752d8f1d674a79955de7afd3ba6b561b"}]},
+ {reltool_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"135d9bb6ea57344472c185d61c97573c"}]},
+ {reltool_sys_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f02ff065d17fa8203d711b9cc698ebf4"}]},
+ {reltool_target,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"036440a327b1c9cbe5e404ffaf02b9a4"}]},
+ {reltool_utils,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c623f90e0c5da5db65d4ca56d9088d7a"}]}]}]}},
+ {application,
+ {public_key,
+ [{description,"Public key infrastructure"},
+ {vsn,"0.19"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/public_key-0.19/ebin"},
+ {modules,
+ [{'OTP-PUB-KEY',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d6f796b3667abf21828ee3daf8df487c"}]},
+ {'PKCS-FRAME',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4419b1988012d2d620ac3cc7dec13d65"}]},
+ {pubkey_cert,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7a4ac659e84ddfb1dc14f0608460fbfb"}]},
+ {pubkey_cert_records,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d5b1f48543bb6b0e62b343c2b965615f"}]},
+ {pubkey_crl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"680633b53ae9815138f804c999e78bbd"}]},
+ {pubkey_pbe,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"517156230695474828dc4d30af59f656"}]},
+ {pubkey_pem,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"eef5632fcf01194dd6c98f116de8f923"}]},
+ {pubkey_ssh,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5acc6568d3caea9be2d2b93904f6bda9"}]},
+ {public_key,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7b054e72c6e34943c0143ac34edcc37e"}]}]}]}},
+ {application,
+ {pman,
+ [{description,"pman The Process Manager"},
+ {vsn,"2.7.1.4"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/pman-2.7.1.4/ebin"},
+ {modules,
+ [{pman,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3d0ea0aa857d089d112f46bed16fb83c"}]},
+ {pman_buf,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"efdccd7cb884a2a9c50cc70719d53575"}]},
+ {pman_buf_buffer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bfdd78d8905bd1bb7e07ee22414a0eae"}]},
+ {pman_buf_converter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"afd7e3173377b46ec7374c0e1118a158"}]},
+ {pman_buf_printer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7c592081860a9b92b08b557c46b11307"}]},
+ {pman_buf_utils,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"77e551e0bc43c59bf5a76f0e32daf822"}]},
+ {pman_main,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b4371d24cd7312794afb137de259b8e0"}]},
+ {pman_module_info,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0336677781cb813897e9306415f85b38"}]},
+ {pman_options,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"016b8cac7c507593a118b25ab3d642d2"}]},
+ {pman_process,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"faab007fad0f14fc692df152d60a8abd"}]},
+ {pman_relay,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b12bbe3e253211fac5006414f6f6162b"}]},
+ {pman_relay_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3b7eb65c7c1507892ed8f01a1b5e027d"}]},
+ {pman_shell,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3b9e7634fb49f1e84a57ed8cee5e3909"}]},
+ {pman_tool,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"58ab631eed4b29ddebd390b4cd30c82f"}]},
+ {pman_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"697f4a56a374bcacf06e8329356f7b9d"}]}]}]}},
+ {application,
+ {percept,
+ [{description,"PERCEPT Erlang Concurrency Profiling Tool"},
+ {vsn,"0.8.8.1"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/percept-0.8.8.1/ebin"},
+ {modules,
+ [{egd,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"810926c65926827a80dc5de6e9cace80"}]},
+ {egd_font,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3f41911d6aa5ada509332aca159c905e"}]},
+ {egd_png,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"201db7435f6981d1d5b738c5431d4a39"}]},
+ {egd_primitives,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cba1711d459930f92725953bca582106"}]},
+ {egd_render,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b86b9269dfad8feb8753abfa8e9be68e"}]},
+ {percept,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"af81f6c6164ac09eafdfbe02a985976b"}]},
+ {percept_analyzer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"efe67a4369a96144def43df906f2ac94"}]},
+ {percept_db,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9bff80fb7515c9c23977cceb2fba5e0f"}]},
+ {percept_graph,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1444b51fa93b12bb98f6bf5246e079f9"}]},
+ {percept_html,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b84fd915479ddaa158366217f7fb2ff7"}]},
+ {percept_image,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ec8d1dae1d54b90ccd7cce76d83573b6"}]}]}]}},
+ {application,
+ {parsetools,
+ [{description,"XLATETOOLS CXC 138 xx"},
+ {vsn,"2.0.9"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/parsetools-2.0.9/ebin"},
+ {modules,
+ [{leex,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c82fd5f503469e40008fb18b393b5421"}]},
+ {yecc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e644a07828dcb46e440058ec4e3ea83b"}]},
+ {yeccparser,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"43c2c84fbd4caf3c3eacfe0e25874f3a"}]},
+ {yeccscan,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cc55537c97f45738825ae56628fd4c71"}]}]}]}},
+ {application,
+ {otp_mibs,
+ [{description,
+ "SNMP managment information base for Erlang/OTP nodes."},
+ {vsn,"1.0.8"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/otp_mibs-1.0.8/ebin"},
+ {modules,
+ [{otp_mib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b92358a169666b58abe47dc98b1ea1f8"}]}]}]}},
+ {application,
+ {os_mon,
+ [{description,"CPO CXC 138 46"},
+ {vsn,"2.2.12"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/os_mon-2.2.12/ebin"},
+ {modules,
+ [{cpu_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"071d377ab6c706f3c4404dfddf95316c"}]},
+ {disksup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"53255f9176fdf57c6d2c62a1e3ca8ce2"}]},
+ {memsup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d5aa81b4c0017f97827b13d588e907cc"}]},
+ {nteventlog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d593ff9832f59a682cb9a7217eb1dc55"}]},
+ {os_mon,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f8fcf26c77f01a1542d007513e49c214"}]},
+ {os_mon_mib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"15ff2fbfd1c88ff31ff9c8e85bf10cb9"}]},
+ {os_mon_sysinfo,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2bed5dda663ec63a320198f44c90f388"}]},
+ {os_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"52837f657faabaab44288ba2d29ba473"}]}]}]}},
+ {application,
+ {orber,
+ [{description,"The Erlang ORB application"},
+ {vsn,"3.6.26.1"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/orber-3.6.26.1/ebin"},
+ {modules,
+ [{'CosNaming_Binding',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f894f1ca2a53e8c68579c9e786884b64"}]},
+ {'CosNaming_BindingIterator',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"938a503dbdbe3f091ce900dbe1efeeaa"}]},
+ {'CosNaming_BindingIterator_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"07513574b340d64ec6d50ebf98a772c7"}]},
+ {'CosNaming_BindingList',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"37aaba8fc8623355426055d3b9c2e2b8"}]},
+ {'CosNaming_Name',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7053bbff4a4dd27357c7ae2b7a1bd158"}]},
+ {'CosNaming_NameComponent',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4ef942efe3f30c93b89cbb79f0b0e372"}]},
+ {'CosNaming_NamingContext',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9e73232824e400a4b6f9a295922420a5"}]},
+ {'CosNaming_NamingContextExt',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fb072ace0d3d1445fa884fbb59d19ff6"}]},
+ {'CosNaming_NamingContextExt_InvalidAddress',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ba29a989c4d5c961c62bec9162bedd71"}]},
+ {'CosNaming_NamingContextExt_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ece2da1a74559421fd8c5a0fcce5a984"}]},
+ {'CosNaming_NamingContext_AlreadyBound',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ba2061d5ba1cd24262351fa0b92b8850"}]},
+ {'CosNaming_NamingContext_CannotProceed',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"175c9f998a255ce625568ff7d7258988"}]},
+ {'CosNaming_NamingContext_InvalidName',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4b5bb3702b8105f78101d3deeb4c3717"}]},
+ {'CosNaming_NamingContext_NotEmpty',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0dbdfc178f40394391977946fdbf331d"}]},
+ {'CosNaming_NamingContext_NotFound',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f2f4d6cf9150fcc92bd9568ff89d2774"}]},
+ {'OrberApp_IFR',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"67d245498b4abcae1f6acd51c4edc47e"}]},
+ {'OrberApp_IFR_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2ab7e63e7a7e47bac6d2cc7e703f2915"}]},
+ {any,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1339baf3e573eee6bb558d0097bce4c2"}]},
+ {cdr_decode,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dda23b10f13bec369113cf3ae72b9448"}]},
+ {cdr_encode,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4d36c6b8ee3a9fddfdc76246030287ba"}]},
+ {cdrlib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d97ec0db3640dda02a25e6ecc9d5fa5e"}]},
+ {corba,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3794dffcd3c921332af2b343bb9e8e40"}]},
+ {corba_boa,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3dfd1417d677ca18f73c4efe65b37bad"}]},
+ {corba_object,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"569d7993c599bd7c2f68bf7a2d11fdbd"}]},
+ {erlang_binary,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0ec91157e3e220cc5163b552f3a4050d"}]},
+ {erlang_pid,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"49b95cc1773eeed11661fc4cb36b7921"}]},
+ {erlang_port,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2b0dd3969488714fc2e2dce30b297b14"}]},
+ {erlang_ref,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"98b38f4a590a67a1fa34b2c6d60e8992"}]},
+ {fixed,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"469aed745e70550ecb4ee6b382a0c919"}]},
+ {iop_ior,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1d3eeb1d5401ad27f97b75926cbf8387"}]},
+ {lname,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"945467530d2858f1dfb87b970a3862bc"}]},
+ {lname_component,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c2cb0fe6e60c6d07d711cd8c3b28c8f7"}]},
+ {oe_CORBA,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"02e20118e9fd5c3f5d2f398851cbdcf1"}]},
+ {oe_OrberIFR,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ebc39f59cbd7848e61193c82ab0ee2b9"}]},
+ {oe_cos_naming,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"18745eadd8db295fc1e8e656a5c8d4d6"}]},
+ {oe_cos_naming_ext,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"56520dda2639eaadae720ac4974080d5"}]},
+ {oe_erlang,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"963486a48402a80366275f8dace2a80f"}]},
+ {orber,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0b4c2a1e44684d8f314230f21def86f2"}]},
+ {orber_acl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"76577170937f03fa23e69e4df6cfc424"}]},
+ {orber_cosnaming_utils,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f856cbb99314e9eb7d0d7bfcdb30994e"}]},
+ {orber_diagnostics,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"656103538d0ee20b1433c6b2909b26c0"}]},
+ {orber_env,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"75b0fa232da40432e3009ead263f3749"}]},
+ {orber_exceptions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2ef09c1b3026ef3aaae5e9c6a5dd2918"}]},
+ {orber_ifr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0fed5973a29d60ab161580bf07f3b185"}]},
+ {orber_ifr_aliasdef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"941404668a378948bbef59da18973eea"}]},
+ {orber_ifr_arraydef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4a1ebba0a7f7a26d5205972ac2bc6fc6"}]},
+ {orber_ifr_attributedef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"141fa0d0127d292e0bfc3f0e654059df"}]},
+ {orber_ifr_constantdef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"337388d13414ab58cdafcbd70a150741"}]},
+ {orber_ifr_contained,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a825abb903208287bc2dfb7323342fe6"}]},
+ {orber_ifr_container,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3027632d783e5db3440bead382fbc787"}]},
+ {orber_ifr_enumdef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f031b9d117143554a1db00a0f7f9d4af"}]},
+ {orber_ifr_exceptiondef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6e152b750cbb286b90ec49855c9f8115"}]},
+ {orber_ifr_fixeddef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c0f66c8a6999241daec6815a1eaf7112"}]},
+ {orber_ifr_idltype,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7f5b0c9c79289e56f5cfe24c5de10c26"}]},
+ {orber_ifr_interfacedef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"985cc443e424939f7f067e9d577c0044"}]},
+ {orber_ifr_irobject,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"441a6a89092f9059eddaafb3a19fddac"}]},
+ {orber_ifr_moduledef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"571791fe8c191478f9d99008066db451"}]},
+ {orber_ifr_operationdef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"26ff4727920661a5777fdfeb9542447d"}]},
+ {orber_ifr_orb,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9f82245f4568a7ad57b93005504b22f3"}]},
+ {orber_ifr_primitivedef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cad06f8ddc116042d7dd2f54f189dc9e"}]},
+ {orber_ifr_repository,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"88fc8f59fe5a883e6a5cc76c9db0a8f0"}]},
+ {orber_ifr_sequencedef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"55db89bec3e336bf1a1087b8b24ec0c9"}]},
+ {orber_ifr_stringdef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7119d2c1827fbfe04397a23e0c9b7bea"}]},
+ {orber_ifr_structdef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2e0643a9e51eb2fe1bb3268623005b9c"}]},
+ {orber_ifr_typecode,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"52a2bebb663486dfde545175b24f1db9"}]},
+ {orber_ifr_typedef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1440f73d398af50ec1f1854b68a7ba14"}]},
+ {orber_ifr_uniondef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1a767805d679f87ec96f566ea535b0ae"}]},
+ {orber_ifr_utils,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a7a7127b079023e8507c1963bb70c6a8"}]},
+ {orber_ifr_wstringdef,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5d9705c3d0a8e75958cfc92c0e065688"}]},
+ {orber_iiop,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"08e63cf45c6b87ef390f1ba44908df62"}]},
+ {orber_iiop_inproxy,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7d958ccebf1795810daf42c284df0b0e"}]},
+ {orber_iiop_inrequest,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"01cf6a0b86d8575aad71a64d1ead078f"}]},
+ {orber_iiop_insup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3f3e97ae477f58ab983bbf78c5691a6b"}]},
+ {orber_iiop_net,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cf48384275f94de84a88f985e69db8c5"}]},
+ {orber_iiop_net_accept,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"311c1717af0f83c768a7904bd4f35d87"}]},
+ {orber_iiop_outproxy,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"aadcfde8449aad07dda946c4fe8ae73f"}]},
+ {orber_iiop_outsup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4bb6aa4ab42569ea07e6410eec054d96"}]},
+ {orber_iiop_pm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3c23eac6eed61ab8f4b0376bada6a96c"}]},
+ {orber_iiop_socketsup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"41cb70052711397c5ff4346c78bad0bc"}]},
+ {orber_iiop_tracer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3db9add6a744c5d57f2f88593010189c"}]},
+ {orber_iiop_tracer_silent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ddc6f4254d9d55920c182bfc82174cd5"}]},
+ {orber_iiop_tracer_stealth,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b5c2faed84597fcc65a1f79f126d38ed"}]},
+ {orber_initial_references,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"52d7435fcf9d9b18c41cd15112211641"}]},
+ {orber_objectkeys,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"77601464765a034f2157e184b66b27bf"}]},
+ {orber_pi,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7772668cb95512b5068384cffb15f5ec"}]},
+ {orber_request_number,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ce4912e1c1726a3edd4d2709171895ad"}]},
+ {orber_socket,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ea78f1c75c253c070f2b3423b896667a"}]},
+ {orber_tb,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3d9b508906d187e6448fd06b88923aea"}]},
+ {orber_tc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f43cb767b9c01d13d190a56574aa504c"}]},
+ {orber_typedefs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"82369e4a3e862ef248d19c460b2df8ea"}]},
+ {orber_web,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"23cc5e9ac5ffe3b7ac2315ae0759243c"}]},
+ {orber_web_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c95b45e743c0a1f7a2e88e350075f78c"}]}]}]}},
+ {application,
+ {odbc,
+ [{description,"Erlang ODBC application"},
+ {vsn,"2.10.16"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/odbc-2.10.16/ebin"},
+ {modules,
+ [{odbc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2763e2d38d62e1fbe7c8ed231cce1905"}]},
+ {odbc_app,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"83f4d02ba9fd29ff84576abe0fde901e"}]},
+ {odbc_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3c39c9a6e602d66a2d12b662bf0a9b20"}]}]}]}},
+ {application,
+ {observer,
+ [{description,"OBSERVER version 1"},
+ {vsn,"1.3.1"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/observer-1.3.1/ebin"},
+ {modules,
+ [{crashdump_viewer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"77bff2805dfd88de4320b9f8c1469fe3"}]},
+ {crashdump_viewer_html,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d22f72c96ed77a6e4cabe125db6c8419"}]},
+ {etop,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"377b59a76eeb5edb5b8531b5f0267399"}]},
+ {etop_gui,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f0421b554807cd47031f0873f649d5e1"}]},
+ {etop_tr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d152946c82611d5f39b1ed3c720cb570"}]},
+ {etop_txt,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a02a670a9ee8ea7c3cea6de5bdcfa356"}]},
+ {observer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0e7d30dfe8122c8736eeac0582abb076"}]},
+ {observer_app_wx,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e6130cbc700be448c7f64c7f8bcefcc6"}]},
+ {observer_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0973e064b3b2ff3b79f2f1eed47a8539"}]},
+ {observer_perf_wx,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b5753467f635c1a98ad5e3f2e50f75f4"}]},
+ {observer_pro_wx,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f1e68919849e91012fd156d3ac6228af"}]},
+ {observer_procinfo,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"175c07cc3510655fbdfe95a35012a84a"}]},
+ {observer_sys_wx,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7637a94c99800b8b1c47467f7411fce6"}]},
+ {observer_trace_wx,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a836a58f29e21107efbf7fa3276c0ff6"}]},
+ {observer_traceoptions_wx,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e070e083bc809e6bd67284d46876292e"}]},
+ {observer_tv_table,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3dfa1b811025f5313ba91c620bdafa62"}]},
+ {observer_tv_wx,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0c8661053d6b3b563582c335e6e18bc2"}]},
+ {observer_wx,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"72d4b855d618e72367b3b26a9c9fe22e"}]},
+ {ttb,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"08eec178cb05729190be64adbfc06fd4"}]},
+ {ttb_et,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"18006f41b1483c5378d0d803bb73428f"}]}]}]}},
+ {application,
+ {mnesia,
+ [{description,"MNESIA CXC 138 12"},
+ {vsn,"4.9"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/mnesia-4.9/ebin"},
+ {modules,
+ [{mnesia,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7ef269bdcc2f2ebecc93eed4a7d97e43"}]},
+ {mnesia_backup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"50581e2e99465b9ab9adb11193ccbcb8"}]},
+ {mnesia_bup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"63c4dc59c47dedf48fb8a67b3aee3a5a"}]},
+ {mnesia_checkpoint,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"57fca37f2b0e856bb728f0660f6ad017"}]},
+ {mnesia_checkpoint_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"211e3b158a5869145c472cc12080a148"}]},
+ {mnesia_controller,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a4d98077e647433bbd4dfe9215bf45c0"}]},
+ {mnesia_dumper,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"32b0759359dcf8f05af72e914720ceaf"}]},
+ {mnesia_event,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bb423661483d17e8aaa683a22600aee7"}]},
+ {mnesia_frag,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"279eb6b4f1f713c9960f1697856030e7"}]},
+ {mnesia_frag_hash,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7ca1e314bdfa381005e047965e7fe435"}]},
+ {mnesia_frag_old_hash,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"70dd3592f65741eefd724448e56427a3"}]},
+ {mnesia_index,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"79261cc27d922d6eeecac20a90920cd0"}]},
+ {mnesia_kernel_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8f6da4fd3cf0ce074bf7b04e44e86470"}]},
+ {mnesia_late_loader,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"02a44f59cd50a3b6fcb78198781e8e7b"}]},
+ {mnesia_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"08abcd0826ef6dce6929ca1741c156d7"}]},
+ {mnesia_loader,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b316a61b4f5ce23b5c7e4bcfdaf6367f"}]},
+ {mnesia_locker,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"847d79bf891a9bcffda9e12458490e7e"}]},
+ {mnesia_log,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8ae50e4995027fe6229091521e842b1e"}]},
+ {mnesia_monitor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"105c199cb846668f52e583faee684690"}]},
+ {mnesia_recover,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"91044c669bf165c1d9bb72d76da7135c"}]},
+ {mnesia_registry,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"aa46aa5634381be997d54dbbf8da99d1"}]},
+ {mnesia_schema,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"19676af000bf38b666e545b3c6f22937"}]},
+ {mnesia_snmp_hook,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f994954a18270025bf505af1a1dd1244"}]},
+ {mnesia_snmp_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bb3f27cfb0a3fa51e062ca6e86973a3f"}]},
+ {mnesia_sp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"86565dac38aae327be11f08e8d2e05e8"}]},
+ {mnesia_subscr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a02b0b2458f5900927d72010d097ea94"}]},
+ {mnesia_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"309a5b00197c57437131eec4ce49c560"}]},
+ {mnesia_text,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3008beca178112720e4dc18ec6325583"}]},
+ {mnesia_tm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7be29c00407f6162375a0d855b36c68d"}]}]}]}},
+ {application,
+ {megaco,
+ [{description,"Megaco/H.248 protocol"},
+ {vsn,"3.17.0.1"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/megaco-3.17.0.1/ebin"},
+ {modules,
+ [{megaco,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1621bcd17d72f8165b568b33e80badff"}]},
+ {megaco_ber_encoder,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"12ccb5c139d29b2066d3317a2f6c166f"}]},
+ {megaco_ber_media_gateway_control_prev3a,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c13becbea3de6bd37af08cd022c5b5a1"}]},
+ {megaco_ber_media_gateway_control_prev3b,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"721176c1221d7ea112757ebe621508fb"}]},
+ {megaco_ber_media_gateway_control_prev3c,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c4546f9416ae2b969c41f114c777b994"}]},
+ {megaco_ber_media_gateway_control_v1,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0f352af0a5bfe76b5ca6a6393ef0782a"}]},
+ {megaco_ber_media_gateway_control_v2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2321767a4aeeadca11a92a77da4bb488"}]},
+ {megaco_ber_media_gateway_control_v3,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"851782cffe570769b46773bc55073bc5"}]},
+ {megaco_binary_encoder,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5e378f272d26a606b7d8b99accc472ff"}]},
+ {megaco_binary_encoder_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1eaa0f4ac077056d2753b4945acac2af"}]},
+ {megaco_binary_name_resolver_prev3a,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"afc05954d77f1580e3e3119b28b2ee18"}]},
+ {megaco_binary_name_resolver_prev3b,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"64eca1a5ca4891ec6cb56e5b3b747cb1"}]},
+ {megaco_binary_name_resolver_prev3c,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7ab8daa26dfc1ecd8593ea03f037e0b1"}]},
+ {megaco_binary_name_resolver_v1,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8a28e0729df9ed41a27d38e76d2b1efc"}]},
+ {megaco_binary_name_resolver_v2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6e831098553576721cfa3187f3246577"}]},
+ {megaco_binary_name_resolver_v3,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"adc24901b71b89a59191caa575777136"}]},
+ {megaco_binary_term_id,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"82f36dc610c932eb0e6ca2e9002d6c5b"}]},
+ {megaco_binary_term_id_gen,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0b1f0904c943c78f55b67da76203955d"}]},
+ {megaco_binary_transformer_prev3a,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fff3d874f36cfbc32dbbbc5078dcd380"}]},
+ {megaco_binary_transformer_prev3b,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"33cc44d1bf46cd3bfb5aea29887bcd57"}]},
+ {megaco_binary_transformer_prev3c,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ef3fe41f1f88c54aa4fb1caac2724337"}]},
+ {megaco_binary_transformer_v1,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f916e19a7725a6887c4f88395c9af607"}]},
+ {megaco_binary_transformer_v2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d4c8f6b31357bc55c13c7b7881a9a775"}]},
+ {megaco_binary_transformer_v3,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ab88024bec5e1fd3c03923d1d0e5119a"}]},
+ {megaco_compact_text_encoder,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bf7e1fe374598225fd46f38b81e07d9f"}]},
+ {megaco_compact_text_encoder_prev3a,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"23e6620407ec5197028fa798bf01e51a"}]},
+ {megaco_compact_text_encoder_prev3b,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a475f5b036fb0aa3dd35f86ff1d3c3fd"}]},
+ {megaco_compact_text_encoder_prev3c,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2cbd43381f15e24a25a85797028851d5"}]},
+ {megaco_compact_text_encoder_v1,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b193fe2860d7e926e73b71c501412b07"}]},
+ {megaco_compact_text_encoder_v2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"777b3a6ecc8b41b8bbab1ad70c7bf6ae"}]},
+ {megaco_compact_text_encoder_v3,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e481d7fc5b319d95e6b6d7301837211c"}]},
+ {megaco_config,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"895d349eeee863ee722653edb146eec3"}]},
+ {megaco_config_misc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"275e3e57bae4ae030b1e8f2be4a4ece2"}]},
+ {megaco_digit_map,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e82b7b9950adc2a9b92418b741056198"}]},
+ {megaco_edist_compress,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"de4bb8d979b71e2a77bc6480c755f0e0"}]},
+ {megaco_encoder,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"323b5d062600331842c9a23dd847ce29"}]},
+ {megaco_erl_dist_encoder,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6523fa00adc2e065d8418983cb9caa83"}]},
+ {megaco_erl_dist_encoder_mc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"41066ab829e0f8ebc457c8e087e029db"}]},
+ {megaco_filter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"778b451ec26564a06b01bb6449e62004"}]},
+ {megaco_flex_scanner,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"76674c634aab23d50f8746016a4a0be5"}]},
+ {megaco_flex_scanner_handler,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"eeafd9d64269893a5e719f9791e846ec"}]},
+ {megaco_messenger,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7fc902eabe8adb5b0fe33e79b000ddbd"}]},
+ {megaco_messenger_misc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3bee9043dce0a684cdd1cd8134a370a4"}]},
+ {megaco_misc_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"441b7ad486bf4eef899e02f97ba14768"}]},
+ {megaco_monitor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6da74b6f55cbbbacdea077af0a845ef1"}]},
+ {megaco_per_encoder,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"58c49d0f60e2132cef575414c82a917b"}]},
+ {megaco_per_media_gateway_control_prev3a,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b84247f3fbcda78fd09755f5368ade94"}]},
+ {megaco_per_media_gateway_control_prev3b,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a981605bd179636baebaef5ff6ebc806"}]},
+ {megaco_per_media_gateway_control_prev3c,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f30445cfec10f8cbd55fe17c6724b53c"}]},
+ {megaco_per_media_gateway_control_v1,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0fe217237913122558c928dd10ef79f5"}]},
+ {megaco_per_media_gateway_control_v2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d1a9dfc04639677dfb27b24b2829f7ad"}]},
+ {megaco_per_media_gateway_control_v3,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e967677da6dc54388db01f5c1545c77e"}]},
+ {megaco_pretty_text_encoder,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b9dce15ad90abfcf6a7cc93391dbdc64"}]},
+ {megaco_pretty_text_encoder_prev3a,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1b00d8cfa3efaae8d225da7007dada64"}]},
+ {megaco_pretty_text_encoder_prev3b,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"aa844b22554dca495b913fc57cfa3013"}]},
+ {megaco_pretty_text_encoder_prev3c,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"91b54a6e884a8afa32ffaa8352893baa"}]},
+ {megaco_pretty_text_encoder_v1,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0c6db8e013212168a6df39fca101e3aa"}]},
+ {megaco_pretty_text_encoder_v2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"079587bd6b00f80224aaeec199380224"}]},
+ {megaco_pretty_text_encoder_v3,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d3a6f2cc1885299f91fb769fd4a1cb01"}]},
+ {megaco_sdp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7e2d41d949f9ab2404116f809237301a"}]},
+ {megaco_stats,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"03152bbddea7c1e557224711c4b97892"}]},
+ {megaco_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cb7802016626e692d5a8519f536cf3d2"}]},
+ {megaco_tcp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"15cec9b1865d957412d0945e11bd5630"}]},
+ {megaco_tcp_accept,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4999b86506c5da0b256de8fdf1423c20"}]},
+ {megaco_tcp_accept_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"91e916f8b5d3aec78b129abb2064f229"}]},
+ {megaco_tcp_connection,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"53c5b634698b54c66de0676289c52222"}]},
+ {megaco_tcp_connection_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"48ff5ffa59eb95858702320eed91bf59"}]},
+ {megaco_tcp_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"597fe1780a9081757e42b57e5ebef1b2"}]},
+ {megaco_text_mini_decoder,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4675bc758b6dfade5a21f345c13fd523"}]},
+ {megaco_text_mini_parser,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dbc886fe01447c012941de8bbcb8b1e7"}]},
+ {megaco_text_parser_prev3a,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fc946659afb87b8bcd032cd513206016"}]},
+ {megaco_text_parser_prev3b,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d0158fa2aa0880bfcfcea1249e90a259"}]},
+ {megaco_text_parser_prev3c,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9acb9c582674145c94ada5f3bc58567f"}]},
+ {megaco_text_parser_v1,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cfc2972ed82568f1212b10aa5f54a5bf"}]},
+ {megaco_text_parser_v2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"38f90460cdfcaf135be0f96917b2f7fa"}]},
+ {megaco_text_parser_v3,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4e9afc2c639e48188d332c8bccf39588"}]},
+ {megaco_text_scanner,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3d050061e3c87e8f1964b063624202b3"}]},
+ {megaco_timer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1252b5457aeb62266567e5905d4fa76f"}]},
+ {megaco_trans_sender,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3be0e627b81fb19dc7a3e27885f0958d"}]},
+ {megaco_trans_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c89becbc7e0e3b62c0ee8fac09f5adef"}]},
+ {megaco_transport,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8ad32251f0bd50e9289ae09286daf84e"}]},
+ {megaco_udp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4274133166af4f35b78505125ca3280a"}]},
+ {megaco_udp_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"84b71d1f62b9e3958dc6bc55ea87dd5d"}]},
+ {megaco_udp_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e05c1a2e530417dee164ad41e4fa8888"}]},
+ {megaco_user_default,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"604d252f88e8e7de2e8b2941d6f2fc2f"}]}]}]}},
+ {code,
+ [{path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/jinterface-1.5.8"},
+ {modules,[]}]},
+ {application,
+ {inets,
+ [{description,"INETS CXC 138 49"},
+ {vsn,"5.9.5"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/inets-5.9.5/ebin"},
+ {modules,
+ [{ftp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f75e6a1763c0f8ad63c48fee7762bd08"}]},
+ {ftp_progress,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a9f1247decddc2091349cc0c561740ba"}]},
+ {ftp_response,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8184ca2df27024d938c1745b9b46b21b"}]},
+ {ftp_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"23491501dc6175d1a49c2bbb888642a9"}]},
+ {http_chunk,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2d127d36200e815d589b358178ae3d98"}]},
+ {http_request,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c9d27256b8abc0a4752a98c5fab193d9"}]},
+ {http_response,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a327d5e08590cae728288f395b5880ea"}]},
+ {http_transport,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fefac9e86284528e5883735ff02f9635"}]},
+ {http_uri,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6d8dafbcdb6a18c64161cda56b762aea"}]},
+ {http_util,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"948c60f737d5c6d13e9e19b518eb5dcc"}]},
+ {httpc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"12f827ea3b4a60e6abe352016df83794"}]},
+ {httpc_cookie,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"55dbb04357dcd95196eb831ae6c88924"}]},
+ {httpc_handler,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"13538972414b85062867ba8f72b63a6a"}]},
+ {httpc_handler_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6d291f5169c3ee61ab92b272e5612628"}]},
+ {httpc_manager,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fbc2349ce89229b7aab1397e920c4a23"}]},
+ {httpc_profile_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"71f19372131a26ce3fec7fe59cae62a6"}]},
+ {httpc_request,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0f9b151b009d24a06987f46db7a7ab32"}]},
+ {httpc_response,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"df4086639fe81d9d6b0b0f1c27d783c8"}]},
+ {httpc_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cac51bc379bec99f8e2fe737e6701177"}]},
+ {httpd,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"965f24797bd0ecb2662f8cccbf5a114f"}]},
+ {httpd_acceptor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"60c4ec255f9d3e71ca247d690fc050e3"}]},
+ {httpd_acceptor_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"146196f8aa54e2872ea09789bf43167e"}]},
+ {httpd_cgi,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"493bef6896bc09b2a84424756e6aa2d6"}]},
+ {httpd_conf,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"122f251eb11290e92a55da1a97647ff7"}]},
+ {httpd_esi,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f0a20e7f4efd148111074d6c027a749d"}]},
+ {httpd_example,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4e8699c78100cc50e49ac578b154e491"}]},
+ {httpd_file,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"30702eec4e62275db10ea6e81cd67866"}]},
+ {httpd_instance_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5d7ab2c856e6d5438dd3144b284ee396"}]},
+ {httpd_log,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"12fc1dfa3734ae50f2b5912d1245d63d"}]},
+ {httpd_manager,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ae9176839ab029c3685eaa1e9b2b90d9"}]},
+ {httpd_misc_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4c61eb0828079a16033e6b33e8095104"}]},
+ {httpd_request,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a91f7e3de28a17002b2923df84f4b01e"}]},
+ {httpd_request_handler,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2b44228586d6ef9df1fb9bbcdf8e395a"}]},
+ {httpd_response,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"73a06662a9f1ea7bb68ea6e0487ff3c0"}]},
+ {httpd_script_env,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"348c3920cf5e3c2137127c4a1e1345b4"}]},
+ {httpd_socket,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2f021c0b5923e108fd344cee27e360a2"}]},
+ {httpd_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7814cf6981a80379606be6a64d684e24"}]},
+ {httpd_util,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4b6d1e4e24096bf68e395c2105f9ddce"}]},
+ {inets,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5dea85fffabe81e273c12c78d57d3ea7"}]},
+ {inets_app,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0cc5b16bf76fdd61cc3fcc189509b4cb"}]},
+ {inets_regexp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3d90aa0458fda8b4878dc77b59f3a996"}]},
+ {inets_service,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fda2c34b97323c1cc7756e681f50073f"}]},
+ {inets_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5c8287946a050dad1ffd422678150174"}]},
+ {inets_trace,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"38930cb6dedec461e1cb409ee6902dc4"}]},
+ {mod_actions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cd04b142450e4b2a6681a67ff53fe983"}]},
+ {mod_alias,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"488cd71dcfc552f96603b8ae70cffbc8"}]},
+ {mod_auth,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e4c582f449cb199ea9cc8d5a7004a9da"}]},
+ {mod_auth_dets,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"43a467ba929f04d907a1a6ba11bb1893"}]},
+ {mod_auth_mnesia,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a3d3fe40e66d1a310a5814ead817db4f"}]},
+ {mod_auth_plain,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1692c15dbed5d5a680dbac4354569ec8"}]},
+ {mod_auth_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ee144579a7fd9a4a761307385f6ef449"}]},
+ {mod_browser,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b4187d14f39e293330958d7ed7f61ce5"}]},
+ {mod_cgi,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4e72a465306011f4ac2a88f03cd6c9dc"}]},
+ {mod_dir,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ec5cbec9126f452057ed437dba2051b2"}]},
+ {mod_disk_log,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"702d6f87d24465d11d91f561fd11f7b6"}]},
+ {mod_esi,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e83eabd7527ed663b93fd5a58a587be4"}]},
+ {mod_get,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8dd5d81c6a7cc426524180332edb7a14"}]},
+ {mod_head,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3a62a5beb75a1b60206669499f77130e"}]},
+ {mod_htaccess,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1bf3f03a28de0bf786813fc181fdb85f"}]},
+ {mod_include,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"145c3dccff68b053b1db14d5f92488a2"}]},
+ {mod_log,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5417983275ff4ded18c546c70b8cc7e5"}]},
+ {mod_range,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"03a0b6a05ae0fd306c5b3f20bb6e05b8"}]},
+ {mod_responsecontrol,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0ebe00aaf53af7508dabc9d09b949a0b"}]},
+ {mod_security,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"423eb8f57b9a8bde28e3da13db3de59d"}]},
+ {mod_security_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cca3960b3899a1a7a4581afc69d7a5cc"}]},
+ {mod_trace,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"62fba170a84e8fdb39c8744f64b37a64"}]},
+ {tftp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ade4b7390488800507debf97307bd963"}]},
+ {tftp_binary,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"67a1747702ba0bff57a6f8aaa883b9d2"}]},
+ {tftp_engine,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fb9e0ee93bfa57bd7ef5a038c23edecd"}]},
+ {tftp_file,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"48fd419a1467c45c1e7057cdbb59a0a7"}]},
+ {tftp_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f666dd774c5c60c7ff175b19ade12b2d"}]},
+ {tftp_logger,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"151ed197576a35d060b7bbf3c74bdf7f"}]},
+ {tftp_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7fc8de866dbc9c30b3d91a8adf8ebf0c"}]}]}]}},
+ {application,
+ {ic,
+ [{description,"The IDL Compiler"},
+ {vsn,"4.3.2"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/ic-4.3.2/ebin"},
+ {modules,
+ [{ic,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fe764abce09fdd454d880128d9ddda2c"}]},
+ {ic_array_java,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"227ce84fee6671f9cdf93fb8048f596c"}]},
+ {ic_attribute_java,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"975e0b45c8a9ce1cb4551fdfb76cbd11"}]},
+ {ic_cbe,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"43ac10b9d3c5142c747d99c3b9dad4d7"}]},
+ {ic_cclient,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"73ec31c28859c6c5d6e5dc91b6ce5411"}]},
+ {ic_code,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"02d51ffcaef78b26a0bc8c680938fb53"}]},
+ {ic_codegen,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"41159947a7c4259a58fec12f96d02d69"}]},
+ {ic_constant_java,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ca029a6c4023f792cdd8fb9052241416"}]},
+ {ic_cserver,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bf63d17869ccb762e0edab496be39e09"}]},
+ {ic_enum_java,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ab555fa7842eec8c99e22d11060e6430"}]},
+ {ic_erl_template,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"04c3d10872a5ab6edd781ae24512b6aa"}]},
+ {ic_erlbe,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"add3f7151efb782e2437bb626a7d51fd"}]},
+ {ic_error,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6379a791ac55b3542b5db5a1e329439d"}]},
+ {ic_fetch,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bdc5454c6fe20b3a28d3a10ea4a7b3ed"}]},
+ {ic_file,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6597963c839cab5b5591eb1dcaa6a9a1"}]},
+ {ic_forms,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9bcfeec18c0f2bc54dd64694b0f6d82e"}]},
+ {ic_genobj,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"97c379af6629a74a7b70c60e6338a245"}]},
+ {ic_java_type,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"40d0d5d7707b0d63119fdc658f7f3084"}]},
+ {ic_jbe,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7e2429e630ce4f7dad22af0d4ab242b7"}]},
+ {ic_noc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c8e61ad2dbb06818f812f1a3dcf0f16c"}]},
+ {ic_options,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f9f64ecd00b68edfcf38b61e79bd0b80"}]},
+ {ic_plainbe,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"44ee00595baf6554efbdb45d3ee28937"}]},
+ {ic_pp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"857d2fb9fea30b14657b1c4a86d08386"}]},
+ {ic_pragma,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4f69abbe96dd3cbebbff573664fe0997"}]},
+ {ic_sequence_java,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fdf12c1c5c020249ba9966ed529e5062"}]},
+ {ic_struct_java,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4120b045ef93f4db9bea6c9f14180ca6"}]},
+ {ic_symtab,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9c8ba1bfdd061a5e6864f86c957d6408"}]},
+ {ic_union_java,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b9b140a193c08210aa09a4484d9a54f3"}]},
+ {ic_util,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c6ce2a93793c15e09c8e18ccca534772"}]},
+ {icenum,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a53766074b7015a3bae4631d87f017e7"}]},
+ {iceval,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d60924eb402c253265ef229824856baa"}]},
+ {icparse,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f2a14e584b40aa5b9e79c5f3101dfb3e"}]},
+ {icpreproc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"14b63dc40d8160ee25e0f829a0d088c6"}]},
+ {icscan,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8c8e2841047e577935f05c0b5cb10b02"}]},
+ {icstruct,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3fc6b7d763b490773a0c893a541b3d3a"}]},
+ {ictk,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"00ad73c637ec333d51a0905c46381eb0"}]},
+ {ictype,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8cfb0ed8d61bdff82302c4b52716ebf0"}]},
+ {icunion,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"db222ee3335d7b431061d104f6ecf9b2"}]}]}]}},
+ {application,
+ {hipe,
+ [{description,"HiPE Native Code Compiler, version 3.10.2"},
+ {vsn,"3.10.2"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/hipe-3.10.2/ebin"},
+ {modules,
+ [{cerl_cconv,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"3f8e5afb7f644e20ecc93eff288091d3"}]},
+ {cerl_closurean,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"598014277bdc97eb3e42db827964786c"}]},
+ {cerl_hipeify,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c67cb3c827232c389de98edcb669a6f2"}]},
+ {cerl_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"81c8c4cc2fddba367e557bb8fa3e46b1"}]},
+ {cerl_messagean,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"d45d1cf2112a30de90c6e02674b471f5"}]},
+ {cerl_pmatch,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"592ae9106c429413eef5bca3404a312a"}]},
+ {cerl_prettypr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c10b7a51c482eaae5d5bb5156072faed"}]},
+ {cerl_to_icode,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"975ca9009d46f139766227e24f00167b"}]},
+ {cerl_typean,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"2407a7ab5367d3d2112283c1ddfc53a2"}]},
+ {erl_bif_types,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"0a6c9083ace0be207cc54681c6cbf565"}]},
+ {erl_types,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"42d756bf4eaf470785a1b81838979af7"}]},
+ {hipe,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"32e6ef5c8585a438373c41e5a5d75d91"}]},
+ {hipe_adj_list,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"e5bc155da44d7631411dfc1a02fec2ef"}]},
+ {hipe_amd64_assemble,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"1647b309190377cb226db1314fcac5cd"}]},
+ {hipe_amd64_defuse,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"d3829c95a7eed25abc393e29da9bbf19"}]},
+ {hipe_amd64_encode,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"49079178cae281b4645ae6f25ce18838"}]},
+ {hipe_amd64_frame,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"4476b9c0703b2a8473aa502dc6bdada8"}]},
+ {hipe_amd64_liveness,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"9fab826ab4bd5d716173c1f3b3b4d347"}]},
+ {hipe_amd64_main,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"52b41c777e65aeea7e35a9321585d34a"}]},
+ {hipe_amd64_pp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"4eb339172dae5c27d67b4410de84f51f"}]},
+ {hipe_amd64_ra,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"73bf464fdfd7cf668efdffc3fc78c352"}]},
+ {hipe_amd64_ra_finalise,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"7bc4f317d89794f58a1a0bda3b599879"}]},
+ {hipe_amd64_ra_ls,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"5c0509cfd228b140247a46214243a415"}]},
+ {hipe_amd64_ra_naive,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"6a50f0f7d1c454c50975d6d0b3eb3c4e"}]},
+ {hipe_amd64_ra_postconditions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"1ed593df4c9da2fe96da00274117f1b4"}]},
+ {hipe_amd64_ra_sse2_postconditions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"277417561a1fed88867bfdafe9e1c580"}]},
+ {hipe_amd64_ra_x87_ls,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"8684b37d2d952516b2f8e77426decaf2"}]},
+ {hipe_amd64_registers,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"02db134b8e57405134b8e68a9f0588d3"}]},
+ {hipe_amd64_specific,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c66c33708abe9f32d36337c358a73530"}]},
+ {hipe_amd64_specific_sse2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"f0e4d5df03612b82d8cffecd5f9d4a84"}]},
+ {hipe_amd64_specific_x87,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"3a28b90d577a9db6ef4b70d9defbd863"}]},
+ {hipe_amd64_spill_restore,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"81a80af9658effa33fdfe85f6161a35a"}]},
+ {hipe_amd64_x87,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"b55ded15ce4283908342b2824226406b"}]},
+ {hipe_arm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"160cf412bbc01adfb4229f8b73a45ba5"}]},
+ {hipe_arm_assemble,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"62390a02348b3abffcb4502ff1b2b9f3"}]},
+ {hipe_arm_cfg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"30d169daa65fe2104260b4621d500e17"}]},
+ {hipe_arm_defuse,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c464aa34b089a594edfc1cdb7012f39c"}]},
+ {hipe_arm_encode,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"ee3833e47107f465b35e3d9a255d0447"}]},
+ {hipe_arm_finalise,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"74ce09dca62bfdfdbe0f667075f78c35"}]},
+ {hipe_arm_frame,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"e46614b822aafd6233af080377bc8729"}]},
+ {hipe_arm_liveness_gpr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"19888211ce56a0eb039578ea485a7776"}]},
+ {hipe_arm_main,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"b745515f7f9a5b4dc2e3f03f8dba82c3"}]},
+ {hipe_arm_pp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"3b5de0ec46bf573c64151697e03dcbeb"}]},
+ {hipe_arm_ra,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"d129dfc23327601b4615e91f849c214f"}]},
+ {hipe_arm_ra_finalise,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"cdeccd5062db370b87cb350b317c041a"}]},
+ {hipe_arm_ra_ls,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"fd59b7eba19bd0985bfc527377e815ea"}]},
+ {hipe_arm_ra_naive,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"cbbdef9b7829ce07fc482451a8f7c7a8"}]},
+ {hipe_arm_ra_postconditions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"2a3a8e58a6ba75ca3902348a5b43ec79"}]},
+ {hipe_arm_registers,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"7bd890ef97657715f12f031658d4c9c4"}]},
+ {hipe_arm_specific,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"611f5b731b1c7fa6f589010db3443a81"}]},
+ {hipe_bb,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"66afe906c353f43505649b33dfed45a9"}]},
+ {hipe_beam_to_icode,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"826bf8aa6513c06c61e08faa9383b4fc"}]},
+ {hipe_coalescing_regalloc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"cf5f22f7e27c8ba6a1e73e29900fb096"}]},
+ {hipe_consttab,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"4a430042156f62e55b404d38b82ef6c1"}]},
+ {hipe_data_pp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"7843ffb243b1c8d66351c1452fec1cf5"}]},
+ {hipe_digraph,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"3caa6181724dc59e70a3c5ee5b886233"}]},
+ {hipe_dominators,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"4f7038336d002e637edb3b57cc6b7293"}]},
+ {hipe_dot,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"0218e226a92b4a444c90b4c18be48c76"}]},
+ {hipe_gen_cfg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"75a06ae623c2dd5a78903d11ba61cfd6"}]},
+ {hipe_gensym,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"1b5a357fb4e6833e55b574343d116217"}]},
+ {hipe_graph_coloring_regalloc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"e25c88384aaa7b7a16c5849b31db4fcf"}]},
+ {hipe_icode,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"899c47579553070995c5701f16f2c1ca"}]},
+ {hipe_icode2rtl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"cba4203ea542c9abfac6eaa92cb269e9"}]},
+ {hipe_icode_bincomp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"4e211977eb23242d6a2bf0b099eff090"}]},
+ {hipe_icode_callgraph,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"f79f8f10f1aaaf4280abf06cfa40d56d"}]},
+ {hipe_icode_cfg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"ca9529e58b378b731ac6aac84218e2da"}]},
+ {hipe_icode_coordinator,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"3a1caa6d31d48a3fb311a2ea97f0c30c"}]},
+ {hipe_icode_ebb,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"b6b088a13c02a03e5a28247be6d45b94"}]},
+ {hipe_icode_exceptions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"40dfad7ac3602fece6bb4b5a8c9ab98b"}]},
+ {hipe_icode_fp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"f3fcc6b3d555dfa882e7483eb64a6571"}]},
+ {hipe_icode_heap_test,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"fed11d612f8f3da9ea1e4cc67389eff5"}]},
+ {hipe_icode_inline_bifs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"3027c916d2ecc9762123585e1d91f467"}]},
+ {hipe_icode_instruction_counter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"cf488cc5eb29636045d2880b33254711"}]},
+ {hipe_icode_liveness,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"bb99ee17bd466d1b802a42b0583e26d7"}]},
+ {hipe_icode_mulret,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"323e6103d2511e5bd4a87ad2b4dcf3c3"}]},
+ {hipe_icode_pp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"56edb2552a5c36757005cebd6196f7ce"}]},
+ {hipe_icode_primops,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"3f14ad0079bdc8cf1feb08c6c2da287a"}]},
+ {hipe_icode_range,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"0040719dd6effa173e861e4eb0e3cff6"}]},
+ {hipe_icode_split_arith,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"5575b7299b149e93d358fdeccc999652"}]},
+ {hipe_icode_ssa,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"090ca01ba76f97f346c6fb260751cad3"}]},
+ {hipe_icode_ssa_const_prop,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"5944b123b3fcd4b0839b316ee68ee36d"}]},
+ {hipe_icode_ssa_copy_prop,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"997be266f8aa90058e1cc47807628ab4"}]},
+ {hipe_icode_ssa_struct_reuse,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"8fbe27064d4bb5a27507564d4ace240b"}]},
+ {hipe_icode_type,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"cd5755e095fcdc667aa925440a072104"}]},
+ {hipe_ig,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"023433ebf566fdd844f091a0d35af764"}]},
+ {hipe_ig_moves,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"b1d86094e8232686f4e234cca76178c6"}]},
+ {hipe_jit,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"d52c6fa1354f23d6c3234f2ba0adb467"}]},
+ {hipe_ls_regalloc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"af8f6022eafbf853ada08fe69e9509ca"}]},
+ {hipe_main,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c5c32cf830833284942651c29d48e796"}]},
+ {hipe_moves,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c4b6be3fb7b1fd8acaa60cf09a34ab92"}]},
+ {hipe_node_sets,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"8f506e9e71db4336c1ec699b1335dc17"}]},
+ {hipe_optimistic_regalloc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"43cd34d83f3c513ee455a446628c39eb"}]},
+ {hipe_pack_constants,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"09e240bfc2522acbaa543f356a28f9af"}]},
+ {hipe_ppc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"b4a1ef1f5d56e249be91954a55b35b5c"}]},
+ {hipe_ppc_assemble,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"be62cec21a026c5385d2482369ac59a0"}]},
+ {hipe_ppc_cfg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"7d0362cb062e78fb25852d9fcf943371"}]},
+ {hipe_ppc_defuse,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"45a4ac6be649d5ebd584abd44704addc"}]},
+ {hipe_ppc_encode,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"fb5b41996c46e440e0292565c786d9a2"}]},
+ {hipe_ppc_finalise,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"1475ac44aff754105fdd4e85687346ab"}]},
+ {hipe_ppc_frame,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"1fd18b642e945b3f6b384549c810f5c6"}]},
+ {hipe_ppc_liveness_all,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"5194b99327e725de7a0c94abb4d35974"}]},
+ {hipe_ppc_liveness_fpr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"b3958a1138f1f112f5ff4b357520fa4d"}]},
+ {hipe_ppc_liveness_gpr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"fc4585d446b47d4151671b7bc83f86eb"}]},
+ {hipe_ppc_main,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"ec4dd9d536fb6aa5cdb418dded96184b"}]},
+ {hipe_ppc_pp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c37b9de73810ceeaca37bc0520a76884"}]},
+ {hipe_ppc_ra,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"db4deb5ea2a237ff1e0984f7979e5d3f"}]},
+ {hipe_ppc_ra_finalise,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c4376f33857d9cb0cea29ff783ea82cf"}]},
+ {hipe_ppc_ra_ls,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"6ba2df5f54c48dc90c42547e8bd2ca48"}]},
+ {hipe_ppc_ra_naive,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"ba3d03b4267f315b10ed939a37d4597c"}]},
+ {hipe_ppc_ra_postconditions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"a9d4ca393bff97c1931d0eb18d38a811"}]},
+ {hipe_ppc_ra_postconditions_fp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"742e3f111a16eb5ca003f1a97804e5a9"}]},
+ {hipe_ppc_registers,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"40dd287c6853767e7083a8c5549681ce"}]},
+ {hipe_ppc_specific,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"d5e2330aa55edd677ecf3e77bf659781"}]},
+ {hipe_ppc_specific_fp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"34a6f358c60c47ebec7956b66205062f"}]},
+ {hipe_profile,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"210939fd9ea20991d7fae07b12348d35"}]},
+ {hipe_reg_worklists,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"ee79fa6eb3bca9a4f0025d9e4ce02a72"}]},
+ {hipe_regalloc_loop,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"19fc9f539fd5abb2ecc5aeaf6c2526db"}]},
+ {hipe_rtl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"2ab93246a0c75f83327de3e0234dbe08"}]},
+ {hipe_rtl_arch,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"3481cc7240b928da18df9e61214ceb25"}]},
+ {hipe_rtl_arith_32,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"328deb7987296b869279c7c0d588f337"}]},
+ {hipe_rtl_arith_64,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"64cc932e691e7743d06642103170de55"}]},
+ {hipe_rtl_binary,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"198df75c4eefcd2b7a7f769922d4ce60"}]},
+ {hipe_rtl_binary_construct,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"7a1b57215669ed36c40b335e6826be2c"}]},
+ {hipe_rtl_binary_match,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"1c22996f5b79a3818503a19059bdaf8e"}]},
+ {hipe_rtl_cfg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"60570bb8a1cbde7c72ad1c37e2b8e17d"}]},
+ {hipe_rtl_cleanup_const,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"a555a1c325dd9b3ae1775881af8abfad"}]},
+ {hipe_rtl_exceptions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"6c7f64efbed1c8e51f2323fa693d3b89"}]},
+ {hipe_rtl_lcm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"bd3735cbd4bc9eb9254b0c2ee67cd1ad"}]},
+ {hipe_rtl_liveness,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"0dcceb8fd82c12480e42399dd2869c41"}]},
+ {hipe_rtl_mk_switch,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"8890cf7e39302f57f3adf8987755b34c"}]},
+ {hipe_rtl_primops,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c734e269cbc4be78cb3fe47fa55053a5"}]},
+ {hipe_rtl_ssa,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"4d9ce36d8dc1168eecf173bde8a0871a"}]},
+ {hipe_rtl_ssa_avail_expr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"ef5653db422ed4115c734d9676f3b030"}]},
+ {hipe_rtl_ssa_const_prop,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"598dee97d9fd44735a534b250bf60e2a"}]},
+ {hipe_rtl_ssapre,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"93b3ea7957d2008d763bd4416ef98277"}]},
+ {hipe_rtl_symbolic,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"4e6b19de45d978326014a378368a6f8e"}]},
+ {hipe_rtl_to_amd64,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"6afb4d232649b0a0ee54e5a4859e85ce"}]},
+ {hipe_rtl_to_arm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"a12eb244baec0e0bcd2d39353ac69b90"}]},
+ {hipe_rtl_to_ppc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"521f595296e6c1bf0b7d1caf59bbfb77"}]},
+ {hipe_rtl_to_sparc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"66783d3f670bd939159b0abf3548dddc"}]},
+ {hipe_rtl_to_x86,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"2b4ebecd4e2fa29e952c650809ec89b6"}]},
+ {hipe_rtl_varmap,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"2b1e6ba5714a0764c0897a780fb38c8e"}]},
+ {hipe_sdi,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c305600fbb8905b9b0cf792f2f85ed72"}]},
+ {hipe_sparc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"6a5cf680abe539d1dfa669cb52ce1f80"}]},
+ {hipe_sparc_assemble,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"330f4c7130dc215c911ecfd48d9dedde"}]},
+ {hipe_sparc_cfg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"d8278464e9d1d65437625517255ae2ab"}]},
+ {hipe_sparc_defuse,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"a7f131d52962288326e844f28d13d4cc"}]},
+ {hipe_sparc_encode,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c1b5971e5e6f3304bcc00f1abeb268f7"}]},
+ {hipe_sparc_finalise,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"22d88316138d80c3ecf41ced21ec25cf"}]},
+ {hipe_sparc_frame,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"623fdaf78bfaff2b07733eb4a211f79b"}]},
+ {hipe_sparc_liveness_all,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"2bd5c26371c946fdbf9c1530c1478ca1"}]},
+ {hipe_sparc_liveness_fpr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"7dc401039841503524934a1b97990c2a"}]},
+ {hipe_sparc_liveness_gpr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"4c5e32e6adbbc37b4f793e8bde52ab2f"}]},
+ {hipe_sparc_main,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"3c063c4c5b1bd8ec02c6ffe60c561056"}]},
+ {hipe_sparc_pp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"f89846e24afb3795d259291e4613c155"}]},
+ {hipe_sparc_ra,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"6925c18182b17ee978041e26fbf490b3"}]},
+ {hipe_sparc_ra_finalise,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"45cef8c32ae3b2f6f01911592016924b"}]},
+ {hipe_sparc_ra_ls,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"2eedc8b13aac2efcd2e3649afd845d02"}]},
+ {hipe_sparc_ra_naive,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"81f0a231c4bde04b132bdb6748774c10"}]},
+ {hipe_sparc_ra_postconditions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"549d7dfb54dce00bb7f5317306694308"}]},
+ {hipe_sparc_ra_postconditions_fp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"9de491abdbbc1c156a20a692d463965b"}]},
+ {hipe_sparc_registers,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"1a4dd5b6dc938d539fead6b1ad9e2ba0"}]},
+ {hipe_sparc_specific,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"809b836428fcb194565eeee86ecf138b"}]},
+ {hipe_sparc_specific_fp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"4bf2be9b351b82024e81eabfd68806f9"}]},
+ {hipe_spillcost,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"b9ef65406aa671e28d1bd8428f102fe9"}]},
+ {hipe_spillmin,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"bde0ad7813cb8f86fc4ff110090af2da"}]},
+ {hipe_spillmin_color,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"e277f11303f44d6ea07be695c1057d7f"}]},
+ {hipe_spillmin_scan,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"b007825bb206e086b9ffc943213aa625"}]},
+ {hipe_tagscheme,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"568fc377e498aec5a73e1b2c9cd29432"}]},
+ {hipe_temp_map,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"56dff1fb8175d1d7c32f7e8d95e10488"}]},
+ {hipe_timing,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c3238c3b4adc08c290c37ba1ea7d3a31"}]},
+ {hipe_tool,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"f93194221b0e3756c9f0f70127b205bd"}]},
+ {hipe_vectors,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c4e6ef55b233f27c27bd2f781baf9c94"}]},
+ {hipe_x86,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"051e4ee3dd5298e2cee05b1fca82e64d"}]},
+ {hipe_x86_assemble,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"d1829f13a89049280e7cb22cd394af0d"}]},
+ {hipe_x86_cfg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"b9d6a090c32c03e6e91deac9bbb167ae"}]},
+ {hipe_x86_defuse,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"c81bb7a0dd72b256c57fb37042de68ff"}]},
+ {hipe_x86_encode,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"386d1abc98765c09c6bc6fe44cf2748d"}]},
+ {hipe_x86_frame,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"db2a440f5975688c7bf9a88c47aaf627"}]},
+ {hipe_x86_liveness,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"8783c19717dda46b566c465ba85b2588"}]},
+ {hipe_x86_main,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"236cd462abe386223cefe606b4f48928"}]},
+ {hipe_x86_postpass,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"57e5cb6ad12dceef612122c8f759ac15"}]},
+ {hipe_x86_pp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"6efd3b5cd8c70edbd326ffe9457a3192"}]},
+ {hipe_x86_ra,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"1e8b7f27a05e1e7fac9ea95cdd394909"}]},
+ {hipe_x86_ra_finalise,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"4a3c30788866a5e997e0a1687279732e"}]},
+ {hipe_x86_ra_ls,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"bb13a4d08391fe3f212fa4eba816029b"}]},
+ {hipe_x86_ra_naive,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"e26c0711db5e891c86b64da12fe064ff"}]},
+ {hipe_x86_ra_postconditions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"e3d6ad622a3017744106b653324c0edb"}]},
+ {hipe_x86_ra_x87_ls,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"a6092f1853a7a04f8d16228f6183dcc0"}]},
+ {hipe_x86_registers,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"ce77b4ffff06c9532943ad5f6907b18e"}]},
+ {hipe_x86_specific,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"ad074b1e645c06c2137a46cd19f88b72"}]},
+ {hipe_x86_specific_x87,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"a20c2c2b1742aa084dbb7395a92b650d"}]},
+ {hipe_x86_spill_restore,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"88e191ef5057ea6a50c75af85c814013"}]},
+ {hipe_x86_x87,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.2"},
+ {md5,"6edcc888c87ffc96414a8dce57d691da"}]}]}]}},
+ {application,
+ {gs,
+ [{description,"GS The Graphics System"},
+ {vsn,"1.5.15.2"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/gs-1.5.15.2/ebin"},
+ {modules,
+ [{gs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9d416ae60d6cda2ea55a05dbde8a53f7"}]},
+ {gs_frontend,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"eb02484f42ac799bdd086f6832b72330"}]},
+ {gs_make,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ea7a1edc4bd5b9867ce924130851f295"}]},
+ {gs_packer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4c5d911152526836f3487cd3de6b0bf9"}]},
+ {gs_widgets,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2efa721783d863bca4ff2e116c9593fd"}]},
+ {gse,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9355057cfe2b70da376f208739bd7c06"}]},
+ {gstk,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"684b9d8f370368e25ea2ca2ac708c1ee"}]},
+ {gstk_arc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1cd1114560c3839fb84380975d61d68b"}]},
+ {gstk_button,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"29ce4f10fe8dc2bb85649018aa64d71a"}]},
+ {gstk_canvas,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a637d6932415873666ed040817ed2a72"}]},
+ {gstk_checkbutton,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3cad265e62fb4cbeda02c089b5b309bb"}]},
+ {gstk_db,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dd236aeb7ff4658fd1a9d1302602a7af"}]},
+ {gstk_editor,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"17dd7595545d33bb3143ac3995711b39"}]},
+ {gstk_entry,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2740de840e6b8871909dfedd96d4b5b4"}]},
+ {gstk_font,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bc2fef06167d48c71cc434fa7411ca95"}]},
+ {gstk_frame,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5113cb91ebb88a4cb1a0b4cb7665607d"}]},
+ {gstk_generic,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3d392d9f2e6c6220245cff065e99a3f5"}]},
+ {gstk_grid,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"61def27e9610041778245948e5f82be1"}]},
+ {gstk_gridline,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"40c7173521b57e4c9243ec5258f65d6d"}]},
+ {gstk_gs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9c9ab7ac782c3e36e201d4760f37e478"}]},
+ {gstk_image,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"50a6a6b41de78e4f06b0c98cba97992a"}]},
+ {gstk_label,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"00b5826ce30fc11e417a7a43f0c7e563"}]},
+ {gstk_line,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b7785bc56e2f32b575a4240a60994d62"}]},
+ {gstk_listbox,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"053218bec49478a8334df6b0818e981f"}]},
+ {gstk_menu,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ccf11b45fdd908fafb781c897d379370"}]},
+ {gstk_menubar,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e801f2c6eccc8258d719028b706ec624"}]},
+ {gstk_menubutton,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1fc2d88da997bdc39a24f3f0db9963b3"}]},
+ {gstk_menuitem,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6a4442a7307d34c544783c9d22433135"}]},
+ {gstk_oval,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f4775c1b7522750f395f28a94eefe453"}]},
+ {gstk_polygon,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fdc96f316574995486c842b612722e25"}]},
+ {gstk_port_handler,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"95ec5d20c905e8cc7fef2df5f99ceb88"}]},
+ {gstk_radiobutton,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b67bb9cafd3bf67b210d7b0e0b1bd992"}]},
+ {gstk_rectangle,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6bf1f8e7953532468393090fe8d56ba2"}]},
+ {gstk_scale,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"848c7ee845d1a59a0a7c4775f64f220e"}]},
+ {gstk_text,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"719252f8d069544886ec473e16688530"}]},
+ {gstk_widgets,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"29b540f4612eb1f1e65123f08809bee4"}]},
+ {gstk_window,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"746a06674df1cd96678689e6ab92a95a"}]},
+ {tcl2erl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f67bcc59683d0c578cba1c0062ff6b3e"}]},
+ {tool_file_dialog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3763cc96ed8e2a6136a4c15e54a9adee"}]},
+ {tool_utils,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"96edfeab61de9b40618e7808d62225b2"}]}]}]}},
+ {application,
+ {eunit,
+ [{description,"EUnit"},
+ {vsn,"2.2.4"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/eunit-2.2.4/ebin"},
+ {modules,
+ [{eunit,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"800601aeceaf1de519df273ca25741b5"}]},
+ {eunit_autoexport,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"48f889ffaa560238fa2269614f93bbce"}]},
+ {eunit_data,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ed89782dac4c2b21da64d92bf74f1e22"}]},
+ {eunit_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"949ed8c5f494a8678c6f29775a7b5154"}]},
+ {eunit_listener,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6f107b19b4ecf45031a93afa5ace611f"}]},
+ {eunit_proc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cfc2da427b2bf7ba843f6b8d8121e2c9"}]},
+ {eunit_serial,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f07a040ebbba4af90fa9668c410befba"}]},
+ {eunit_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0842dedb36c3b1cd91229a7e4abfe328"}]},
+ {eunit_striptests,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"473b48509d28519ba18cfa83a8dea8b4"}]},
+ {eunit_surefire,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f1e6a5cebf210cdd8a558cd32b96ac13"}]},
+ {eunit_test,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cc3897e05a5146b24c109fbc5da83e86"}]},
+ {eunit_tests,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5d2b6b165201e0aad13a8d8f4d542f59"}]},
+ {eunit_tty,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a4faaab287e1fa52837cdfd1b58c7faf"}]}]}]}},
+ {application,
+ {et,
+ [{description,"Event Tracer"},
+ {vsn,"1.4.4.4"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/et-1.4.4.4/ebin"},
+ {modules,
+ [{et,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"82db3e8683420a2adb933306c8c822e8"}]},
+ {et_collector,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dd43f7a22b3c3e6a1799a88163c3d441"}]},
+ {et_gs_contents_viewer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"44e7ea855be084e48cd364735d79f5f7"}]},
+ {et_gs_viewer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d4ef2a5673c20444b198bdc185cc637a"}]},
+ {et_selector,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"267f60d2ecdad671eae269cdd2ff30f6"}]},
+ {et_viewer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3ae9af3449c17f045d25ca424e9873ae"}]},
+ {et_wx_contents_viewer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6d14826378988286a32fc85ca4246325"}]},
+ {et_wx_viewer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"87f45e31d50a82d9db2443ddff14ad22"}]}]}]}},
+ {application,
+ {erts,
+ [{description,"ERTS CXC 138 10"},
+ {vsn,"5.10.3"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/erts-5.10.3/ebin"},
+ {modules,
+ [{erl_prim_loader,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"719e5362c7c1f0d1fd96601b7f814981"}]},
+ {erlang,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"04b2444affe04bb9287d86e0e0c80578"}]},
+ {erts_internal,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a95c0409fe7b4ccf6e2fe509bfd23da8"}]},
+ {init,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"55bb9fddcdf820938be2efee15eccd82"}]},
+ {otp_ring0,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"47fe4e7e2d2a5f20cd3a9393e0743e57"}]},
+ {prim_eval,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"16d4fc3a8e5e2ef7200bd866fe8b1abb"}]},
+ {prim_file,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"da0745178ab8aa8fb8d3a373970ebfdd"}]},
+ {prim_inet,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4993598825a1083526cbc23cf027f494"}]},
+ {prim_zip,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9280fc2398f9eb3bd09f74cfa1d6d267"}]},
+ {zlib,
+ [{loaded,true},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"811834d04ac37676048717e1c51f63ac"}]}]}]}},
+ {code,
+ [{path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/erl_interface-3.7.13"},
+ {modules,[]}]},
+ {application,
+ {erl_docgen,
+ [{description,"Misc tools for building documentation"},
+ {vsn,"0.3.4"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/erl_docgen-0.3.4/ebin"},
+ {modules,
+ [{docgen_edoc_xml_cb,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"29c8b94e559528ca0aeacee089f52bcf"}]},
+ {docgen_otp_specs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c6d53404b1059d2da87ce44bee49d2dd"}]},
+ {docgen_xmerl_xml_cb,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"274ef03ec5cb146346fea794e77febcf"}]}]}]}},
+ {application,
+ {eldap,
+ [{description,"Ldap api"},
+ {vsn,"1.0.1"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/eldap-1.0.1/ebin"},
+ {modules,
+ [{'ELDAPv3',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"655b60d1b5b0629024e2a78708c64518"}]},
+ {eldap,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"df60096d034768188e0fd6eaa0fd571c"}]}]}]}},
+ {application,
+ {edoc,
+ [{description,"EDoc"},
+ {vsn,"0.7.12"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/edoc-0.7.12/ebin"},
+ {modules,
+ [{edoc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f2749685cb80a536ad42426933220065"}]},
+ {edoc_data,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3a444b7ae3acc249aac7fe40b38355af"}]},
+ {edoc_doclet,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"77b3ccaf177983dab1991425fd3d714b"}]},
+ {edoc_extract,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9effef62cfe9939a4c80b43b86041c6c"}]},
+ {edoc_layout,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f2b79a133f490b4de09b13f7519d37dd"}]},
+ {edoc_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4f421fb61a9b2c711d5fc28387b0ffd0"}]},
+ {edoc_macros,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ddb1e78cf2ddd20aadc87329067286f3"}]},
+ {edoc_parser,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"02fe39575dfda2cffd6031f6c8f470eb"}]},
+ {edoc_refs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5a3ba4e7f5211445d74a4d19bc4c5963"}]},
+ {edoc_report,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bfef03c1f2c7de294972d0ad185a3a11"}]},
+ {edoc_run,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0db629008caa57ebafde1dda9672306c"}]},
+ {edoc_scanner,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"165a8e826f458ac6de7c50c395d012df"}]},
+ {edoc_specs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"21a5746822e2ae01421fb064d9c8ccfd"}]},
+ {edoc_tags,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c9ad335a1ce6b99189cfbfaef2ca2038"}]},
+ {edoc_types,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"84530d798ce334278df4dea8a69098f4"}]},
+ {edoc_wiki,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"eabda8c28daf0cdc040eef58f31cc6a8"}]},
+ {otpsgml_layout,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a511240c5864dd31d4df687465e355f6"}]}]}]}},
+ {application,
+ {diameter,
+ [{description,"Diameter protocol"},
+ {vsn,"1.4.2"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/diameter-1.4.2/ebin"},
+ {modules,
+ [{diameter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b2fdb2feddc71bda9175711150823325"}]},
+ {diameter_app,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6dcc769947f323a9ff306c9bcab4dd2c"}]},
+ {diameter_callback,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d8c76e1ccf47e3c781cbdf3c8d3e293f"}]},
+ {diameter_capx,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"65e483a5f121d99db830329f3dc050cb"}]},
+ {diameter_codec,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9bd2e1ef215e88519ca3865601e479dc"}]},
+ {diameter_codegen,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"33696e30585762fe29ca103d67ffbb04"}]},
+ {diameter_config,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"76e885acd24a697d19b07ce5446f5c2b"}]},
+ {diameter_dbg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0954c1f71a204a0f2c8b3682d520c704"}]},
+ {diameter_dict,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1ed21a8d2eea031aa736e95870a7a165"}]},
+ {diameter_dict_parser,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c90e506d7eba4f18547238b8f025ce5e"}]},
+ {diameter_dict_scanner,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b3fc9ee26b660a97ad67b4c8728a0b75"}]},
+ {diameter_dict_util,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"70475203e0968747889eecc533af3f0f"}]},
+ {diameter_etcp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dde08c8d8311e2700c59b741274923fb"}]},
+ {diameter_etcp_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"85fc8320ca9eb8daceb03727bdadb6f8"}]},
+ {diameter_exprecs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"728aa8871c778eacc02313d922dde7ae"}]},
+ {diameter_gen_acct_rfc6733,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"53fb49bb8c354f36d6e1ad6366fe02a2"}]},
+ {diameter_gen_base_accounting,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"845f38b99248c11778453b628ddb4fed"}]},
+ {diameter_gen_base_rfc3588,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f6cd02c8318f4ccc198bd08d1ac789fb"}]},
+ {diameter_gen_base_rfc6733,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"49edd3b9955c82c872169f769c833482"}]},
+ {diameter_gen_relay,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c970d47476d2832f510b6b03699c95c6"}]},
+ {diameter_info,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"472b763fc9554c0c92992a3b36177667"}]},
+ {diameter_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8d49799607d7c7792a79dbc434b4d53e"}]},
+ {diameter_make,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"249d7f673e7f192ddff7c66b578e886e"}]},
+ {diameter_misc_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3996fa63b0e083301d35fc6d88b75ce4"}]},
+ {diameter_peer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"89f28d8d35bdeb8b05995daffb8d868c"}]},
+ {diameter_peer_fsm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"df03404577882e8cfba57087c91fe3ef"}]},
+ {diameter_peer_fsm_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b25500795639e63d9a591e33df6e4af7"}]},
+ {diameter_reg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1e7d427dafe432249d3535bc9e6ec538"}]},
+ {diameter_sctp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cb7487b2c41e3520b1a46738699a88c8"}]},
+ {diameter_sctp_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a02584b6b31789dd38493fd1a8d7d3e3"}]},
+ {diameter_service,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e990f54abf1c8706cd7717cba717594c"}]},
+ {diameter_service_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a66f4714fa96fd7d289260002851cbf9"}]},
+ {diameter_session,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d348e0ca8d3c827d647c3bea8f9c7691"}]},
+ {diameter_stats,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f12a18f52de33ca77dacd1bba99680c8"}]},
+ {diameter_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c910b68b3d0760f595a81ca58b1337f8"}]},
+ {diameter_sync,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ff62cfc82b044d2300345ac7912fe320"}]},
+ {diameter_tcp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e4dae7482d9a79d4ead66ef14d1c3a48"}]},
+ {diameter_tcp_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c1b03a96691e03eb93144bc50022a007"}]},
+ {diameter_traffic,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6d351fdbef0536bba235fe102fe8e697"}]},
+ {diameter_transport,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"386e129e240e91794ff79e1da6c6966a"}]},
+ {diameter_transport_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c9f8da23c3c870b8a6ed8648d7aac2d5"}]},
+ {diameter_types,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d2ecf24e368d30dbef34527e2971caf8"}]},
+ {diameter_watchdog,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a0ab7bd910bc959c0d1b64f0a2ae4bda"}]},
+ {diameter_watchdog_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e4b16aeb2713fd42bf5e9da7cbe43bcf"}]}]}]}},
+ {application,
+ {dialyzer,
+ [{description,
+ "DIscrepancy AnaLYZer of ERlang programs, version 2.6.1"},
+ {vsn,"2.6.1"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/dialyzer-2.6.1/ebin"},
+ {modules,
+ [{dialyzer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"929cdc37a18725b9710b9c4345c3aca0"}]},
+ {dialyzer_analysis_callgraph,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b679e22bb1edb9f0225b79d995342dc5"}]},
+ {dialyzer_behaviours,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5fb71e7e5129b4c2f74cb529d8a745c4"}]},
+ {dialyzer_callgraph,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5b03b559fdab4c77a8c955cdfe7a2036"}]},
+ {dialyzer_cl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"79a2208b0cc03af530473d2d2f49587f"}]},
+ {dialyzer_cl_parse,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b4fcced00882cfef0262398a14319c2a"}]},
+ {dialyzer_codeserver,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f5c8a1600210988f627559bc16a49a65"}]},
+ {dialyzer_contracts,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c002e8bcddf711ae9feef14b88f28873"}]},
+ {dialyzer_coordinator,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"51efdc15e07eaa495060e420585bb74f"}]},
+ {dialyzer_dataflow,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ddb43241a51460b67c67780ca6174bef"}]},
+ {dialyzer_dep,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ffffdcfd7edb9901be2e92b6d3a5f082"}]},
+ {dialyzer_explanation,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"79c9bc71edcc115a03c1bb00a4133627"}]},
+ {dialyzer_gui,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ec41553832cb5f49cce3b123ec763448"}]},
+ {dialyzer_gui_wx,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"00f5ef9bd8202d5bc303fca27c740b00"}]},
+ {dialyzer_options,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"713bf0249b3bb22c7461498b908db812"}]},
+ {dialyzer_plt,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e5b1ecae532cb2887c942c6bda2c7dc7"}]},
+ {dialyzer_races,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ec1b2f026e1dfd438fbb48dcf16a19de"}]},
+ {dialyzer_succ_typings,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"12a59523b727169f2f415b6e57768910"}]},
+ {dialyzer_timing,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b170424f433845fb9aab3e554ea61044"}]},
+ {dialyzer_typesig,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b6670ae353fa06c5c8a5f301a7079ca6"}]},
+ {dialyzer_utils,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cac59b9f59802633948d271fcf8ff92d"}]},
+ {dialyzer_worker,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1e9ff1cc342b308c73bab8c607a8437e"}]}]}]}},
+ {application,
+ {debugger,
+ [{description,"Debugger"},
+ {vsn,"3.2.11"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/debugger-3.2.11/ebin"},
+ {modules,
+ [{dbg_debugged,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"78bf1d9b43c718da5e198af36cabb1ce"}]},
+ {dbg_icmd,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"615470a6677e03a603c24cf821ba3471"}]},
+ {dbg_idb,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0e78e73c63bfe9149a11122857355f29"}]},
+ {dbg_ieval,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0e49ed51a1a1e7581334308cd3c9195e"}]},
+ {dbg_iload,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f249c44fee09e35262d2cafbfa22ce49"}]},
+ {dbg_iserver,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6a2911ffbd531888ac6e1b96a5475436"}]},
+ {dbg_istk,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ae44e86b7893633859292861275bdb7f"}]},
+ {dbg_ui_break,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e5397708044bd37bac2a6f4e24edbd30"}]},
+ {dbg_ui_break_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c974a8a9b180cfd4ccbcfd31a7bb88e5"}]},
+ {dbg_ui_edit,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7faadd987bb74826e5f5865d725ca177"}]},
+ {dbg_ui_edit_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0e912e444704ad322b3e25fc6393c068"}]},
+ {dbg_ui_filedialog_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"06a6b13cd9bcfe7d7d203a981352cfaa"}]},
+ {dbg_ui_interpret,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dcf7a340530f4807d774d4c719a1dbbf"}]},
+ {dbg_ui_mon,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5c79f2debfab06b86990ef7e390a61b7"}]},
+ {dbg_ui_mon_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8c43cdde20d4e66b6f51ef903af75250"}]},
+ {dbg_ui_settings,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8deedced7307e14f36cca3d9fe7e367f"}]},
+ {dbg_ui_trace,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c817c2cc2f62354d4f59be8b6e6fac96"}]},
+ {dbg_ui_trace_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"db1abdd3b7a7b45d3c74dbd9c48f07e8"}]},
+ {dbg_ui_view,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b10a46e072053a225a894ed76dceebca"}]},
+ {dbg_ui_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e51ec8a33c335245583f7a9ba8728f66"}]},
+ {dbg_ui_winman,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2056472842990c08dfdb81e56df2caa8"}]},
+ {dbg_wx_break,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"55c7dc041c4cd1b1da98d49def9c2b15"}]},
+ {dbg_wx_break_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ad9cde7d28f7de18dda8da80d97a8f00"}]},
+ {dbg_wx_code,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"27abac65970e6f7c6bbaca07e9ead6a4"}]},
+ {dbg_wx_filedialog_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"da924842b25d80b7b258100a4e597810"}]},
+ {dbg_wx_interpret,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8549ef4a5bad09472dccd1cb3ab2c764"}]},
+ {dbg_wx_mon,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"09140d34a402d7183cf9dfecb0b2b6e8"}]},
+ {dbg_wx_mon_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1fefe3be53da62cf504daf354579d910"}]},
+ {dbg_wx_settings,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"350aed0cb189f0b91979fc38752fd4c4"}]},
+ {dbg_wx_src_view,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"644bfb2c2d8fc6e9296722fef5f05b57"}]},
+ {dbg_wx_trace,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"024358a893f9b37296fc0c416074a4b1"}]},
+ {dbg_wx_trace_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b2348218e83d1704bcf894e71c2f3e82"}]},
+ {dbg_wx_view,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3d37489d27927cff9f19f76bc0c816c9"}]},
+ {dbg_wx_win,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d94add4e9adade091198438a278501a8"}]},
+ {dbg_wx_winman,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"caa1febd36494a9088fddbd5557c503f"}]},
+ {debugger,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2e242b76bc941785f65d1cf819fd98a5"}]},
+ {i,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2bebfb4e91c343a1ad89f1124b06e190"}]},
+ {int,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e1d4c0b2e30129359db05d3bc4df646c"}]}]}]}},
+ {application,
+ {crypto,
+ [{description,"CRYPTO version 2"},
+ {vsn,"3.0"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/crypto-3.0/ebin"},
+ {modules,
+ [{crypto,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"858d0e1779f13a6bfde511898916ae94"}]},
+ {crypto_app,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6d2de1cd4927d57e8eaa4467404c8c02"}]},
+ {crypto_server,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"17e05e4b0d772036706b76ba8f68de2e"}]},
+ {crypto_sup,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1342a18fe8d994974e41aa3e351d8500"}]}]}]}},
+ {application,
+ {cosTransactions,
+ [{description,"The Erlang CosTransactions application"},
+ {vsn,"1.2.13"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosTransactions-1.2.13/ebin"},
+ {modules,
+ [{'CosTransactions_Control',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9ee94b22194357e2374fe2c026d2a9fb"}]},
+ {'CosTransactions_Coordinator',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bca2be777e58bf130a3bf48252c0c0cb"}]},
+ {'CosTransactions_HeuristicCommit',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d12c1a0988d03c64a606ba471794e3cc"}]},
+ {'CosTransactions_HeuristicHazard',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"79d0dc47e6759987e5b45281bc4c39f2"}]},
+ {'CosTransactions_HeuristicMixed',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a77cb11ccf269fa85f2194ab16ec5ebb"}]},
+ {'CosTransactions_HeuristicRollback',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"67a56bf7b8084c29dd10db9daa8e08f7"}]},
+ {'CosTransactions_Inactive',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8f94debdaa1912d18bbea77492e6fc88"}]},
+ {'CosTransactions_InvalidControl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b14b9b82b831e56235c1bca1f6e02e16"}]},
+ {'CosTransactions_NoTransaction',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"24252bfbc89f79dac5c90b35e35a66ad"}]},
+ {'CosTransactions_NotPrepared',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ddbcd30a479a50fa2fed4b0cb019c0bd"}]},
+ {'CosTransactions_NotSubtransaction',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3904cf57a879720704d8b725802cc530"}]},
+ {'CosTransactions_PropagationContext',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4d0dd57873deb42ef62f2e9e8620e111"}]},
+ {'CosTransactions_RecoveryCoordinator',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2a670d242e21803d3a559b812b3f3bfd"}]},
+ {'CosTransactions_Resource',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"78bdc7f9989a5277bde7e066804fa1c0"}]},
+ {'CosTransactions_SubtransactionAwareResource',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e1194d19b4db72b1c571aec1847fa65f"}]},
+ {'CosTransactions_SubtransactionsUnavailable',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d6ffc90a293248735f58984f7a9f4fa9"}]},
+ {'CosTransactions_SynchronizationUnavailable',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9858316a8256791e5fe66729fcd364ef"}]},
+ {'CosTransactions_Terminator',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dbbba1c622d817538fba982cbefd4a15"}]},
+ {'CosTransactions_Terminator_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2db2696226a90215edb559cdae7ad928"}]},
+ {'CosTransactions_TransIdentity',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d38592cd26cbbbe3a963ca77b5264ea8"}]},
+ {'CosTransactions_TransactionFactory',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"04db55c2ba8df7975e98e1c7b7582bb6"}]},
+ {'CosTransactions_TransactionFactory_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1d8ff8a2434c10c4716b1b59aebbcb9e"}]},
+ {'CosTransactions_Unavailable',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a77c05d98c0c72e2f1d52a1f781a1b98"}]},
+ {'CosTransactions_WrongTransaction',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c836d95954f2374d89bfc9ff2bd86793"}]},
+ {'CosTransactions_otid_t',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1e903c81e783cb34153bbca99e047870"}]},
+ {'ETraP_Common',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ea5d3e59af9cadcb5587cc42fc750470"}]},
+ {'ETraP_Server',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8592fd689bdae07056a29bd258293371"}]},
+ {'ETraP_Server_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7f192b40f501fd2f5fb3f92b21c5e9d3"}]},
+ {cosTransactions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6d83a1fd7da7dc0b87658efe3039f484"}]},
+ {etrap_logmgr,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"91577f644192b682cb8739b9ce7ac7ad"}]},
+ {oe_CosTransactions,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6f6c79ffe50eac0c3ced0fba1a8c08a0"}]}]}]}},
+ {application,
+ {cosTime,
+ [{description,"The Erlang CosTime application"},
+ {vsn,"1.1.13"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosTime-1.1.13/ebin"},
+ {modules,
+ [{'CosTime_TIO',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"77717ab85418c3c1599b3238c879b770"}]},
+ {'CosTime_TIO_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3ce85958b051f2f97925e980f56115e2"}]},
+ {'CosTime_TimeService',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a92a3fc07bfeeae58a57075ecddb5ac6"}]},
+ {'CosTime_TimeService_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0885fbeef5bd4f72920ae716f0c73d54"}]},
+ {'CosTime_TimeUnavailable',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9ee0570f9b91eece7560cc1b6146f784"}]},
+ {'CosTime_UTO',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"799ddc99175222b61965c6c8e66e5cb3"}]},
+ {'CosTime_UTO_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"552c29f5ece131368c121b5a14c3ae06"}]},
+ {'CosTimerEvent_TimerEventHandler',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"76961fc9eaae9e46950b5eb52fe62ae3"}]},
+ {'CosTimerEvent_TimerEventHandler_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a69e243a494b80eb34b37456f2b1f855"}]},
+ {'CosTimerEvent_TimerEventService',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"62c54aabe64cb28b1245eb80f6b9190d"}]},
+ {'CosTimerEvent_TimerEventService_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0c6926dd7faed0366772908c8593691e"}]},
+ {'CosTimerEvent_TimerEventT',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"74b7db88a5dd4f17c263683a80bcfe3b"}]},
+ {'TimeBase_IntervalT',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5c8f966d02c9520f2d3a4f024892ded3"}]},
+ {'TimeBase_UtcT',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"15f72a9538e725e68e375f3d638c1b6d"}]},
+ {cosTime,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8c96cfbcafba8c9df1a9b57b7e09c4d8"}]},
+ {oe_CosTime,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e607ddba4a35690c39bfcbb1fa3e044e"}]},
+ {oe_CosTimerEvent,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"39f960f5b9c079eaecb87e75d9f90f2b"}]},
+ {oe_TimeBase,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"764d088e21dd985285d4ccfd723959fe"}]}]}]}},
+ {application,
+ {cosProperty,
+ [{description,"The Erlang CosProperty application"},
+ {vsn,"1.1.16"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosProperty-1.1.16/ebin"},
+ {modules,
+ [{'CosPropertyService_ConflictingProperty',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"67353514e217df9f5a5c5e0d3e97d9bd"}]},
+ {'CosPropertyService_ConstraintNotSupported',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ce577ca5520194130903c063d8f2211a"}]},
+ {'CosPropertyService_FixedProperty',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0ef0b79fd5dbcb18f7b9c94f941678e2"}]},
+ {'CosPropertyService_InvalidPropertyName',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bd173257499295fbdc728d60fd14af92"}]},
+ {'CosPropertyService_MultipleExceptions',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a3004385ac63dc6aa52bcb2aa46818f0"}]},
+ {'CosPropertyService_Properties',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"172b757c8a881b79146f50d9f3da1ea9"}]},
+ {'CosPropertyService_PropertiesIterator',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"37fa8c7f1e5ab4798845a1b101835900"}]},
+ {'CosPropertyService_PropertiesIterator_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"728fabf6239161186aa9f574ad27fbd6"}]},
+ {'CosPropertyService_Property',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a912eb5a31517a6f94ee3f8e3b898ece"}]},
+ {'CosPropertyService_PropertyDef',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d8ea474f53418bda870c1f98c522d15b"}]},
+ {'CosPropertyService_PropertyDefs',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3c997a6a4db17765d72f52953679fc7d"}]},
+ {'CosPropertyService_PropertyException',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3600a7d77fe924d3883a003b68ab8902"}]},
+ {'CosPropertyService_PropertyExceptions',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a516b05a720966d4a3568f7f087f22cf"}]},
+ {'CosPropertyService_PropertyMode',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b1e1e285b3a2b01a12e328ed94a65225"}]},
+ {'CosPropertyService_PropertyModes',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ed697876aa56c111eee5733379303ef3"}]},
+ {'CosPropertyService_PropertyNames',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"39684cd186c7d8da459f9d17637606a2"}]},
+ {'CosPropertyService_PropertyNamesIterator',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"97b170d84779dcb7b98460588de428e3"}]},
+ {'CosPropertyService_PropertyNamesIterator_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e06e012106df3651db1e9d52472bebd3"}]},
+ {'CosPropertyService_PropertyNotFound',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"86c83ceacb0b80d4ffa6042cfaec025f"}]},
+ {'CosPropertyService_PropertySet',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ffbb0b6b88d4a35cd836322dcc2b4603"}]},
+ {'CosPropertyService_PropertySetDef',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"429c3ed48018cc6eef3d28c2407fa42e"}]},
+ {'CosPropertyService_PropertySetDefFactory',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"86da518b687db630cd85921ebe96d07a"}]},
+ {'CosPropertyService_PropertySetDefFactory_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2f52585d44dd9d6863bd2b0e0359a24e"}]},
+ {'CosPropertyService_PropertySetDef_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a02a747cf3856996416253a5cbccfbd7"}]},
+ {'CosPropertyService_PropertySetFactory',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"faef66b15f43dc81cbf7dd9bde81c8a2"}]},
+ {'CosPropertyService_PropertySetFactory_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b538bc6740ae2b6934e08d831d5b0960"}]},
+ {'CosPropertyService_PropertyTypes',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ec088d6b4028f6a9dc2917e6722f1c32"}]},
+ {'CosPropertyService_ReadOnlyProperty',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3f4d338a44a7ab32daf202f4d2aa7cbb"}]},
+ {'CosPropertyService_UnsupportedMode',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"203ca7e42a209758ceea013cbff109bd"}]},
+ {'CosPropertyService_UnsupportedProperty',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"28e9e73be7eb82646e3713135d695a6d"}]},
+ {'CosPropertyService_UnsupportedTypeCode',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"da862aea1e36f6fb797bee192a2f3e08"}]},
+ {cosProperty,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e5c17adcc4dc9f93a8cf92c91a12c81e"}]},
+ {oe_CosProperty,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4c9d35f1b883b805a44e9864136958b1"}]}]}]}},
+ {application,
+ {cosNotification,
+ [{description,"The Erlang CosNotification application"},
+ {vsn,"1.1.20"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosNotification-1.1.20/ebin"},
+ {modules,
+ [{'CosNotification',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5a52684ebceaceebe3d7c971fd5e45e6"}]},
+ {'CosNotification_AdminPropertiesAdmin',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"aa2af8e932319a2ab715d799c31678b0"}]},
+ {'CosNotification_Common',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e908fdcf47fa3d9d234d4061db9760ab"}]},
+ {'CosNotification_EventBatch',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8c79e194e19df338bec34cee83d5c999"}]},
+ {'CosNotification_EventHeader',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9e08e276e855cfa3dd60bdc9b563b8e9"}]},
+ {'CosNotification_EventType',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"be0b154ef34f6279604f04d0be386d64"}]},
+ {'CosNotification_EventTypeSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3719ad475d47fd73c1a70891586f0b17"}]},
+ {'CosNotification_FixedEventHeader',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e512d2bce68fcb3de1336060be225cad"}]},
+ {'CosNotification_NamedPropertyRange',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e42690af83d192433daaadb6cbfc7e02"}]},
+ {'CosNotification_NamedPropertyRangeSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5eac2fb6027077046d918d30b36fb45a"}]},
+ {'CosNotification_Property',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d89e479fd34c1e6c46447dcb4aaa44e0"}]},
+ {'CosNotification_PropertyError',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c2b5a17b0ff2dd997013daf5a4d73a83"}]},
+ {'CosNotification_PropertyErrorSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2437aa1bdbeeb5f45213bc7e7922351a"}]},
+ {'CosNotification_PropertyRange',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b2392c8040a976dc8db3ba147f7911f2"}]},
+ {'CosNotification_PropertySeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6950965079eb678d5b2e010c8266cf13"}]},
+ {'CosNotification_QoSAdmin',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fafc8842d8f8e11febab4d341a2ce879"}]},
+ {'CosNotification_StructuredEvent',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"22a1eae09f5d8cf0d223d06cebf9d85b"}]},
+ {'CosNotification_UnsupportedAdmin',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0b1d7ff2796dd090e244cecdbfa4d2ce"}]},
+ {'CosNotification_UnsupportedQoS',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d0968f6f188653b1e292c34f3b18c51a"}]},
+ {'CosNotifyChannelAdmin_AdminIDSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"42791a7a0d5ca5fef186c441a81cf50b"}]},
+ {'CosNotifyChannelAdmin_AdminLimit',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5355d6a703102439e59b070eb6e61b45"}]},
+ {'CosNotifyChannelAdmin_AdminLimitExceeded',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"18b11c68d839f9aa90bfe6da07b15cd8"}]},
+ {'CosNotifyChannelAdmin_AdminNotFound',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c853cd178ef80d6a46a334d3cb5371d4"}]},
+ {'CosNotifyChannelAdmin_ChannelIDSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"992ab8f1ac2f4cc15edd6068c8dc1948"}]},
+ {'CosNotifyChannelAdmin_ChannelNotFound',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"475e742fdf1dd2ec932704ccb941f3c1"}]},
+ {'CosNotifyChannelAdmin_ConnectionAlreadyActive',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d8b95c202b2ebc28a7208928563b5382"}]},
+ {'CosNotifyChannelAdmin_ConnectionAlreadyInactive',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8b106140de30c6cd638b328efe453cb3"}]},
+ {'CosNotifyChannelAdmin_ConsumerAdmin',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4c8c31c812099afa148ed0662dc67ea0"}]},
+ {'CosNotifyChannelAdmin_ConsumerAdmin_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"172767d1c29ca64e810d8853c61a01e9"}]},
+ {'CosNotifyChannelAdmin_EventChannel',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e362f0dc4dc40c98e66b91632554ddb7"}]},
+ {'CosNotifyChannelAdmin_EventChannelFactory',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4798a326d18d53e9a7870454fb33ef4c"}]},
+ {'CosNotifyChannelAdmin_EventChannelFactory_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4bc146f5b9cc168505d2249e7f04a618"}]},
+ {'CosNotifyChannelAdmin_EventChannel_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"db6e5631fc1e5ff158dfc77123c7e752"}]},
+ {'CosNotifyChannelAdmin_NotConnected',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b7f5e3229c7849f94b0744a78e38012c"}]},
+ {'CosNotifyChannelAdmin_ProxyConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b1aa19779800f6e97852f5a2e8042641"}]},
+ {'CosNotifyChannelAdmin_ProxyIDSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bf0a62dd47773a5a4df90f70644c4e24"}]},
+ {'CosNotifyChannelAdmin_ProxyNotFound',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"735c610478319545c1a68c1c8b75609d"}]},
+ {'CosNotifyChannelAdmin_ProxyPullConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6cc803a524bd58d1c33bee3fb8f92ac7"}]},
+ {'CosNotifyChannelAdmin_ProxyPullSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f1683d6e08309fb3fc51d127c407348a"}]},
+ {'CosNotifyChannelAdmin_ProxyPushConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"94416e046b1c566bfa8df9bc1884bea5"}]},
+ {'CosNotifyChannelAdmin_ProxyPushSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"61c57643509be14cbb5e82090fb5bf6d"}]},
+ {'CosNotifyChannelAdmin_ProxySupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4c1c83635cd4d1e4a50577e68f084a39"}]},
+ {'CosNotifyChannelAdmin_SequenceProxyPullConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"af562a179799a5ae781278e980912710"}]},
+ {'CosNotifyChannelAdmin_SequenceProxyPullSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"da43e615a23f2485758bec039617792c"}]},
+ {'CosNotifyChannelAdmin_SequenceProxyPushConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6a876b3b2c655fa98e23510ca72be236"}]},
+ {'CosNotifyChannelAdmin_SequenceProxyPushSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"55954cf819fb29c74e8c7fa7dcb17eb8"}]},
+ {'CosNotifyChannelAdmin_StructuredProxyPullConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"aeb95ea3a9deb7c129dccfd77df7976c"}]},
+ {'CosNotifyChannelAdmin_StructuredProxyPullSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e72e1de7fb0ea440aae9ca791fbdd403"}]},
+ {'CosNotifyChannelAdmin_StructuredProxyPushConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d277b85ea15126c7645eccc585325ee2"}]},
+ {'CosNotifyChannelAdmin_StructuredProxyPushSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7339f8c2876066369e6afa27267bfd81"}]},
+ {'CosNotifyChannelAdmin_SupplierAdmin',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"043d43346f3ff5c2775bf7030a13e1d9"}]},
+ {'CosNotifyChannelAdmin_SupplierAdmin_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"efe73dc58fd1b27c2adc184018e4091a"}]},
+ {'CosNotifyComm_InvalidEventType',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"516a9a10d779d7b47a5752d0b4278017"}]},
+ {'CosNotifyComm_NotifyPublish',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c50da2c5c4d79c4cd3974c37b6165fbd"}]},
+ {'CosNotifyComm_NotifySubscribe',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"180ce40d1660bec349bb7ddf1275c985"}]},
+ {'CosNotifyComm_PullConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dd7be30cd0685dbb3e0f22b4de8ffb91"}]},
+ {'CosNotifyComm_PullSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e76b3f6be347a5d08350ae25cddc77c1"}]},
+ {'CosNotifyComm_PushConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c2c972f2affe7f936ec38997084045b1"}]},
+ {'CosNotifyComm_PushSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"416e6887077de70bf3aa7cf6c6b35a9c"}]},
+ {'CosNotifyComm_SequencePullConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1322fb2dadb5669a36391f12455c6969"}]},
+ {'CosNotifyComm_SequencePullSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"281779a70fdae7a1de3e569ae707d21a"}]},
+ {'CosNotifyComm_SequencePushConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"701eb7ecaef2fb7f13b5adf2ff8a97aa"}]},
+ {'CosNotifyComm_SequencePushSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ceb164baf53b3df5f90fdbef4c800d8d"}]},
+ {'CosNotifyComm_StructuredPullConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"70d2e255c8613a9d58a4f1f69b1adf51"}]},
+ {'CosNotifyComm_StructuredPullSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fa8164033103e1c40f7721471fa6b8fd"}]},
+ {'CosNotifyComm_StructuredPushConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"684f225a8d760e970a4380c303f82662"}]},
+ {'CosNotifyComm_StructuredPushSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"de1b05e00095ac428839c165db9f92fc"}]},
+ {'CosNotifyFilter_CallbackIDSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2ab4cfad0073e21b629ebd16f8973912"}]},
+ {'CosNotifyFilter_CallbackNotFound',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5ae7cd265c665a4cd4a969c75388b1fc"}]},
+ {'CosNotifyFilter_ConstraintExp',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"421355667259ba4906ed0b0ba89ae1ba"}]},
+ {'CosNotifyFilter_ConstraintExpSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2ef901d08223839966e5d67b55731e63"}]},
+ {'CosNotifyFilter_ConstraintIDSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"50d0d1e84309217b5a2864eb2df3653b"}]},
+ {'CosNotifyFilter_ConstraintInfo',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e988281d1a6d6d2ba412a86cb1b89e0b"}]},
+ {'CosNotifyFilter_ConstraintInfoSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ff21820130cfa051a6781e79f53171af"}]},
+ {'CosNotifyFilter_ConstraintNotFound',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1611f041bd2826435c850dc36b2a6953"}]},
+ {'CosNotifyFilter_DuplicateConstraintID',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"40c6d62f59e44a14649e3de2e78deafd"}]},
+ {'CosNotifyFilter_Filter',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"864d9d277d782fca9a15809c5c195c1c"}]},
+ {'CosNotifyFilter_FilterAdmin',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ee1e90ea0fbde4a0c53036e0efa4b89a"}]},
+ {'CosNotifyFilter_FilterFactory',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b59a3c5c5e24a9a389792ea9ff254312"}]},
+ {'CosNotifyFilter_FilterFactory_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"40bc158ddcbb31abff87fe4da270b55a"}]},
+ {'CosNotifyFilter_FilterIDSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3dd80855340f372c0682a53a6d3bc216"}]},
+ {'CosNotifyFilter_FilterNotFound',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fbdd34c6e28fb4c907410c2f7bc82f92"}]},
+ {'CosNotifyFilter_Filter_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a6911bf97e4ebe2333e7e19914d821ea"}]},
+ {'CosNotifyFilter_InvalidConstraint',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"beaedbe7bcec40b0d90a0404dde063a9"}]},
+ {'CosNotifyFilter_InvalidGrammar',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0055f6477430cf9c38cce84d93393a12"}]},
+ {'CosNotifyFilter_InvalidValue',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"041b66a4b7933005a983848254dec48c"}]},
+ {'CosNotifyFilter_MappingConstraintInfo',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ab3093c4688953509866f4128d0747d2"}]},
+ {'CosNotifyFilter_MappingConstraintInfoSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9f81b4c571998ef9f1cefa77c45be6e5"}]},
+ {'CosNotifyFilter_MappingConstraintPair',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"305991c110aca04df1398bd3b640e284"}]},
+ {'CosNotifyFilter_MappingConstraintPairSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7bd7692f2d9ad411d3d4323ff4ef9a2d"}]},
+ {'CosNotifyFilter_MappingFilter',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fbd3cd1cce0f195048025a19666e4bb8"}]},
+ {'CosNotifyFilter_MappingFilter_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5c337925555dac8714bcde4ff0ac3682"}]},
+ {'CosNotifyFilter_UnsupportedFilterableData',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"64044f951a82b03309ab90082ed6d354"}]},
+ {'PullerConsumer_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a96588beb8db62195c499ba6a61cc53f"}]},
+ {'PullerSupplier_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"90058bd6464dc08f79814185696ce1fb"}]},
+ {'PusherConsumer_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"72a8f62fb563174cf54b97aa1206b293"}]},
+ {'PusherSupplier_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1d03a842669765bf9907b644957fa7cb"}]},
+ {cosNotificationApp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0a6dabb21a8926c7f733904336b3375b"}]},
+ {cosNotification_Filter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"63cb134b80f03d8399abe10908055e40"}]},
+ {cosNotification_Grammar,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c5636b97c6e449aeafada1b5df5b6e91"}]},
+ {cosNotification_Scanner,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9c6334416492eb7be457c13d39b92222"}]},
+ {cosNotification_eventDB,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d52b15cf6eaba713bb979684b54fb8df"}]},
+ {oe_CosNotification,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"961cde96216694db976f1f714b0f4d6c"}]},
+ {oe_CosNotificationComm_Event,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"affa53e3f3dfcb411ff317d98a5ce64a"}]},
+ {oe_CosNotifyChannelAdmin,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4ed58499950adf48241f1701c2116857"}]},
+ {oe_CosNotifyComm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a944c5aa4379e8f3b07acc9c5fd56f9a"}]},
+ {oe_CosNotifyFilter,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c51f3aaa451621c060bdb0d707324fbd"}]},
+ {oe_cosNotificationAppComm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ed879b4fb4e5e3438e523069a29ce1aa"}]}]}]}},
+ {application,
+ {cosFileTransfer,
+ [{description,"The Erlang CosFileTransfer application"},
+ {vsn,"1.1.15"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosFileTransfer-1.1.15/ebin"},
+ {modules,
+ [{'CosFileTransfer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"537730bb6ac118a9f672ea5c5616502c"}]},
+ {'CosFileTransfer_AccessLevel',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"538517d444956f350c54176200fa9c2d"}]},
+ {'CosFileTransfer_CommandNotImplementedException',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"06bb7e58f28ad101e4cb2cd2336d3698"}]},
+ {'CosFileTransfer_Directory',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a3504d2207476a6439367e5e20b442bc"}]},
+ {'CosFileTransfer_Directory_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ca00e96f4f13619cbcaf663edf819405"}]},
+ {'CosFileTransfer_File',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"082fb7de49fb7a94ad34873e876fbdd8"}]},
+ {'CosFileTransfer_FileIterator',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d7fce306a50dbb7edaea5f9eeec1d5ce"}]},
+ {'CosFileTransfer_FileIterator_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bb5946f486a03df082e02ec55308e270"}]},
+ {'CosFileTransfer_FileList',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5f508ab863f8cf90e46fda1e2bc6a01b"}]},
+ {'CosFileTransfer_FileNameList',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2044a2695019499e1294315eea9f3092"}]},
+ {'CosFileTransfer_FileNotFoundException',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b00961e88651b5ab62c9d20b2d60c6e0"}]},
+ {'CosFileTransfer_FileTransferSession',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"102d05bd8c1fda9dfa1ba3769ef283fd"}]},
+ {'CosFileTransfer_FileTransferSession_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a6774a931a16efaa7bcbf342ef660b49"}]},
+ {'CosFileTransfer_FileWrapper',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4d19e7d1eeb8b381847003f8837be28d"}]},
+ {'CosFileTransfer_File_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"64eda7b0b054da3e646bba7fbe6be70d"}]},
+ {'CosFileTransfer_IllegalOperationException',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"25a05f47c3c2fc5d14d135acb6d72a5f"}]},
+ {'CosFileTransfer_ProtocolAddressList',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4587002261d4308181fc93122a15cea9"}]},
+ {'CosFileTransfer_ProtocolSupport',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c7937786969ccbba0967581d3c25ad54"}]},
+ {'CosFileTransfer_RequestFailureException',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"384095c7be94a7544378f029e966cf2e"}]},
+ {'CosFileTransfer_SessionException',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7ef101cef5808b9d7c08037e15ee66fa"}]},
+ {'CosFileTransfer_SupportedProtocolAddresses',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d145c64e85be77403b797ad505564018"}]},
+ {'CosFileTransfer_TransferException',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a4b8f0ca1710b11ed6d723ee1692c46c"}]},
+ {'CosFileTransfer_VirtualFileSystem',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"37e0d0057b23e3e1563b19539bc0a76d"}]},
+ {'CosFileTransfer_VirtualFileSystem_ContentList',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"165e5f4d21952fc5eb1f0a289c571fbc"}]},
+ {'CosFileTransfer_VirtualFileSystem_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"81b6bf0f44b0eab55cebc3d408671e0a"}]},
+ {cosFileTransferApp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ed8d595027fd9c5f7dd1e9398a4351bf"}]},
+ {cosFileTransferNATIVE_file,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"91cd6a5ac4ba42b3d2ef0c0cf4c48270"}]},
+ {oe_CosFileTransfer,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"683aa469ec95c19f32d0f62f5f7ef6e7"}]}]}]}},
+ {application,
+ {cosEventDomain,
+ [{description,"The Erlang CosEventDomain application"},
+ {vsn,"1.1.13"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosEventDomain-1.1.13/ebin"},
+ {modules,
+ [{'CosEventDomainAdmin',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2e2d9e538ddd0f2a2fa74f499e042db1"}]},
+ {'CosEventDomainAdmin_AlreadyExists',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a1ce2f0d94e633823bedf296aa1527e5"}]},
+ {'CosEventDomainAdmin_Connection',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a3d8e1bead63a2d7644f36edd4a66772"}]},
+ {'CosEventDomainAdmin_ConnectionIDSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"56929f00f5dcec6d75408d85921c693f"}]},
+ {'CosEventDomainAdmin_ConnectionNotFound',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4de106e024e8f9f45783dd7b45af2cc1"}]},
+ {'CosEventDomainAdmin_CycleCreationForbidden',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6a28090bafe2078be88ee5cb996f9d23"}]},
+ {'CosEventDomainAdmin_CycleSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3232a8bb21e31c81f7791fdf0359d945"}]},
+ {'CosEventDomainAdmin_DiamondCreationForbidden',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8b9e307237ee3408e348d4593c0de997"}]},
+ {'CosEventDomainAdmin_DiamondSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"65478f4d3f155d7547b52ea7d04f6628"}]},
+ {'CosEventDomainAdmin_DomainIDSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4f44a097ccf00511ed397775b33991a8"}]},
+ {'CosEventDomainAdmin_DomainNotFound',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e17639bb3b5f18e80cd8f505191dbc7c"}]},
+ {'CosEventDomainAdmin_EventDomain',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b21b34fcceae9698702dadc469ef2cd1"}]},
+ {'CosEventDomainAdmin_EventDomainFactory',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bcf4395bcda2d977235b24ec4416ddec"}]},
+ {'CosEventDomainAdmin_EventDomainFactory_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a7d21747fe63505e98037202798cca90"}]},
+ {'CosEventDomainAdmin_EventDomain_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2801240b7c96984648d565b9b210b8fb"}]},
+ {'CosEventDomainAdmin_MemberIDSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"889c0e92b864877d5c2bbbd2ed185575"}]},
+ {'CosEventDomainAdmin_RouteSeq',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f77038e040e610031d35f876dfa2925e"}]},
+ {cosEventDomainApp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ea692728e2b3d71f1f486a7aece4df48"}]},
+ {oe_CosEventDomainAdmin,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"939160a9e6adced7edf36e0a18927785"}]}]}]}},
+ {application,
+ {cosEvent,
+ [{description,"The Erlang CosEvent application"},
+ {vsn,"2.1.14"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/cosEvent-2.1.14/ebin"},
+ {modules,
+ [{'CosEventChannelAdmin_AlreadyConnected',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"64cb912070ade0d3254585904ba4c509"}]},
+ {'CosEventChannelAdmin_ConsumerAdmin',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e027fd366965c17a0b51c3cfd80dcd4f"}]},
+ {'CosEventChannelAdmin_EventChannel',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f8d2e64b53114282c8c353dd5110ea9e"}]},
+ {'CosEventChannelAdmin_ProxyPullConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9aef474c8cb0c5e9e2cb5d4cc43fe52d"}]},
+ {'CosEventChannelAdmin_ProxyPullConsumer_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9057fc161db130ea1ee3bd656b083ad0"}]},
+ {'CosEventChannelAdmin_ProxyPullSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"11cc90a016f1b493838f6f79caa959fa"}]},
+ {'CosEventChannelAdmin_ProxyPushConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"21b14ec7e74c8632349f31cb70324ca6"}]},
+ {'CosEventChannelAdmin_ProxyPushConsumer_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dabc851d850f372affa761150136640d"}]},
+ {'CosEventChannelAdmin_ProxyPushSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d32c6d87385b474519aa936d9bd79256"}]},
+ {'CosEventChannelAdmin_SupplierAdmin',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b26b61665649ea2af6fc2b7174d7c4f7"}]},
+ {'CosEventChannelAdmin_SupplierAdmin_impl',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8606a32b7269881c1f455edce89344db"}]},
+ {'CosEventChannelAdmin_TypeError',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"20bb7e990eb8d6b0e854919c0dff94cc"}]},
+ {'CosEventComm_Disconnected',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"c2ec0e6b1fa849a2ab22fdd1ce14ecb7"}]},
+ {'CosEventComm_PullConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"43972738bc29806b38419aaf76d8c393"}]},
+ {'CosEventComm_PullSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5206247fdf5b00621d3732805fe1854a"}]},
+ {'CosEventComm_PushConsumer',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"72937626c2c3f3689fb6dafed66bad17"}]},
+ {'CosEventComm_PushSupplier',
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"54875107d8748bac2b96a3037669a477"}]},
+ {cosEventApp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dab9a7b6c3106899fe7d2c9e74fcb021"}]},
+ {oe_CosEventChannelAdmin,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b192666923744044b3a0e652ec9e9948"}]},
+ {oe_CosEventComm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"884bef0af9742bfe5f3f7e345d24cd18"}]},
+ {oe_CosEventComm_CAdmin,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f344012f72ef7bfbdef3d29d525e2896"}]},
+ {oe_CosEventComm_CAdmin_impl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"935565447529d9e97da7b98c3631cc92"}]},
+ {oe_CosEventComm_Channel,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fe816f373688feb5c63c10543eedd3c2"}]},
+ {oe_CosEventComm_Channel_impl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5c3c48bf48ac0b63f62d82064f9ce32f"}]},
+ {oe_CosEventComm_Event,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7f5146f9630ff6e60665cf32fc7e6641"}]},
+ {oe_CosEventComm_PullerS,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dbd58f368f06b16fa0a7628594f84c44"}]},
+ {oe_CosEventComm_PullerS_impl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2bd0c1df9074f1a792985b4ff1b0ec98"}]},
+ {oe_CosEventComm_PusherS,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"36dc7eaaa1b298b7875dd41b3e6b5b85"}]},
+ {oe_CosEventComm_PusherS_impl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"63c64664227a2772b5ad3d0c6519f8c4"}]},
+ {oe_cosEventApp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cc2ca7e6febb762f39f337c5303390e6"}]}]}]}},
+ {application,
+ {compiler,
+ [{description,"ERTS CXC 138 10"},
+ {vsn,"4.9.2"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/compiler-4.9.2/ebin"},
+ {modules,
+ [{beam_a,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a338f3a7878d0c9a407950fcb5a2e7ed"}]},
+ {beam_asm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cef85f8577595b73910fa77803c58cdb"}]},
+ {beam_block,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7e7610e6f816e2c8d869e7ce1c44cba8"}]},
+ {beam_bool,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3fcb1cec9f4370800203e1189c01a10c"}]},
+ {beam_bsm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"973abf79efd649a3f0eb1b3351b4fe92"}]},
+ {beam_clean,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a0c6b67b764da86372deb11b4c5154f4"}]},
+ {beam_dead,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ff4f53d218b932103fcf093dbd366584"}]},
+ {beam_dict,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f1e8c36a21a5287a84844e7ffa0a9bbb"}]},
+ {beam_disasm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"63dd1f997343124a900e2fe982fe4cad"}]},
+ {beam_except,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"89dd12d9c4781f83554a9d2101d623d8"}]},
+ {beam_flatten,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a1e49fa674cc580042459878a27403e9"}]},
+ {beam_jump,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1a9f1ce9787205a57d137424b5ab022b"}]},
+ {beam_listing,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e9a84340142cd7c90e95851ab1260a0f"}]},
+ {beam_opcodes,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3d5d21bc2584bf078639eba76a18d221"}]},
+ {beam_peep,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5d81c38cab19af16ff472ce5838c63b1"}]},
+ {beam_receive,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"7d22ec74972c53f3f93bd01dbe369370"}]},
+ {beam_split,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"03b0416d0fee9081f68cf6468d036170"}]},
+ {beam_trim,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9a6a01870ff8f8bda3ea36184da7348a"}]},
+ {beam_type,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"cc4a9521730959ffc10d3ccebd20861d"}]},
+ {beam_utils,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d7d2b1d7cc0722d47c7fd72fa6487d27"}]},
+ {beam_validator,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ed5a82e40ba511c22291f87c1e2b705b"}]},
+ {beam_z,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2ffafc7070cf14ec69d569b0f8106f9a"}]},
+ {cerl,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"38c2ac91b52a3141d74df2f219b45eb5"}]},
+ {cerl_clauses,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"75da88dc5ced060fe52f177dae449ac0"}]},
+ {cerl_inline,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"976487fce255a37192ac2a9258cdacf9"}]},
+ {cerl_trees,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a240a6560f194a05956f572e436a6861"}]},
+ {compile,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"98a40d5fc6bcd14ac5e516a506b6161f"}]},
+ {core_lib,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9bdda978e16a885a17587e575cb2b369"}]},
+ {core_lint,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"633c18d069ada94f1f1dfec526de2a2a"}]},
+ {core_parse,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"21b745083d46bbe9725eb423f0c73c7a"}]},
+ {core_pp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9940bb6f480fe3438bf97863ad0a5755"}]},
+ {core_scan,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1f3ff89deb03f34714390b93e678989c"}]},
+ {erl_bifs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"74c0a1563ea88b196dc2a18b1a34ffed"}]},
+ {rec_env,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9a6fdcf8ffe126bb2838f86949ced210"}]},
+ {sys_core_dsetel,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2c45d53e09f1b3f4e92b8f2ff8adf258"}]},
+ {sys_core_fold,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ac092bdc7362a76cda76e27ad5610ec7"}]},
+ {sys_core_inline,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4f439077cdab9795b782412d556828fa"}]},
+ {sys_pre_attributes,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fc95feafdeca105f38589c4ca7b43532"}]},
+ {sys_pre_expand,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4b1c1e3bf39af00ca2988295aa2fbdbb"}]},
+ {v3_codegen,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"590be66e39ccc3e6260a412ccbc8becd"}]},
+ {v3_core,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5997d0774f74e0bad9b8887d24a8bfa3"}]},
+ {v3_kernel,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"21a4b3edd53de6b910df1b99219824fc"}]},
+ {v3_kernel_pp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1ec5b0e503bcf660d6da8aca9cba9682"}]},
+ {v3_life,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"eb4ae7606e9409846d17c5c60751b08f"}]}]}]}},
+ {application,
+ {common_test,
+ [{description,"The OTP Common Test application"},
+ {vsn,"1.7.2"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/common_test-1.7.2/ebin"},
+ {modules,
+ [{ct,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"1f3d139ac677184b601722b92977b971"}]},
+ {ct_config,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0257a2b9a5ed7e176df35b2c39a03a5a"}]},
+ {ct_config_plain,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8330eca3a0e4401b3a8f9508343df5cc"}]},
+ {ct_config_xml,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3502006ebdcc975febe9d750b28fd2b0"}]},
+ {ct_conn_log_h,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5f2e020e7c92f8a7c2c148faf855c9b0"}]},
+ {ct_cover,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"76b9cecb99d35c0bf38daa0a7107ddeb"}]},
+ {ct_event,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2dfbb0a114e64e69b012a83a29312fe8"}]},
+ {ct_framework,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d65dc75bd25fe8c45b3e574d18b0be87"}]},
+ {ct_ftp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f60d1979bd240e45fb63deb00c6dae6e"}]},
+ {ct_gen_conn,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"abb8aa2681d03230890eb5f3fcaffc6b"}]},
+ {ct_groups,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0f3c50d44938374c7e364cef4c905079"}]},
+ {ct_hooks,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5fbdbe96e81a1abe94ff6ce0c20c9574"}]},
+ {ct_hooks_lock,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6e94b9611b2abb9a665606264fb96c2c"}]},
+ {ct_logs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ec22f1709750c55acff646a44502c2db"}]},
+ {ct_make,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a2f7f755c88a136bbe56c5415901e217"}]},
+ {ct_master,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3d8a8fd7184fd07d8caec68f3653b7f8"}]},
+ {ct_master_event,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0c497dbbef03d74f085ee633998aecba"}]},
+ {ct_master_logs,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6a2180f96ad17256256d5ef731ac4d04"}]},
+ {ct_master_status,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5d63adbf76f9afa47c576284d77d75a9"}]},
+ {ct_netconfc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9bff4907efdc764c267f373d12956eca"}]},
+ {ct_repeat,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"b18f0f016143922207ef2dd5577d60dc"}]},
+ {ct_rpc,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"51957dfa13552f236dad5ad5ab1f83a0"}]},
+ {ct_run,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"bcaaaf893ba391b4ce961c33d48b3b5f"}]},
+ {ct_slave,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6b03499c65f734a1ad97e2fce458be92"}]},
+ {ct_snmp,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"8a6826b2fdf26d9e775f8352ab15b454"}]},
+ {ct_ssh,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"657b8f076669c2db4245acd4bc8254d7"}]},
+ {ct_telnet,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"47a92efe0ab4b30fe83d83d8d429a8fe"}]},
+ {ct_telnet_client,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"53f220488e09886c1933a060c000dddf"}]},
+ {ct_testspec,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"fb607ba1ef1abdab4ba76e654cbd1ce1"}]},
+ {ct_util,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e6178d700637198b47134c927348b72b"}]},
+ {cth_conn_log,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"113d8b745a6d162d678b03dba49ea048"}]},
+ {cth_log_redirect,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e7da913515a3b5841c7da153ce0883cb"}]},
+ {cth_surefire,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"3c7c9d2147289740b913895898126f1a"}]},
+ {unix_telnet,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d38cf476a56523e6222de857b16e89d0"}]},
+ {vts,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a31c45897c8d9fe60fbc9115599edcf7"}]}]}]}},
+ {application,
+ {asn1,
+ [{description,"The Erlang ASN1 compiler version 2.0.2"},
+ {vsn,"2.0.2"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/asn1-2.0.2/ebin"},
+ {modules,
+ [{asn1_db,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d9af64def8344330927cefe9a2bf9a8a"}]},
+ {asn1ct,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"352b6c8edb6cf7dfc39b3b6b6b0a7b35"}]},
+ {asn1ct_check,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"5ef3333d2a492df6b90deff919f28b58"}]},
+ {asn1ct_constructed_ber_bin_v2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"41e917757a2c1195b8f86749a5905d64"}]},
+ {asn1ct_constructed_per,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"63d5e7bf85a641a2529c81c7888bfb52"}]},
+ {asn1ct_eval_ext,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4f5e38c39875f699ad76e07de7b073b7"}]},
+ {asn1ct_func,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"ea7118ee0d45ac6641313e378a1733db"}]},
+ {asn1ct_gen,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e5b2688ada58f6ed45c2e7e841088e3e"}]},
+ {asn1ct_gen_ber_bin_v2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"26db838a5c213d6ec1fe2fdf997a06d1"}]},
+ {asn1ct_gen_per,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"a67d91fec991b9f08680c35e95f907f0"}]},
+ {asn1ct_imm,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"9288c73c656cf6d60fd74bd7946581b2"}]},
+ {asn1ct_name,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"2ea14b79e5eb0ae2c3f08f92241f9c4f"}]},
+ {asn1ct_parser2,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"6a7951b400104d9f72bcfbb7405e4404"}]},
+ {asn1ct_pretty_format,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"dc1240d0e121f12732f8469cbd23051a"}]},
+ {asn1ct_rtt,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"f24866e9e2295b4f6c5553ae44d53270"}]},
+ {asn1ct_table,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"4d4ec9835f20bc046769547da299363c"}]},
+ {asn1ct_tok,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"19908cc77297850954d101491e5eb97d"}]},
+ {asn1ct_value,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"388ba3507e46869822607142eef38d70"}]},
+ {asn1rt,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0160799421ccb619fc6b08099bfaf37b"}]},
+ {asn1rt_nif,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"0c579098c3d97270d004e54a94e42daa"}]}]}]}},
+ {application,
+ {appmon,
+ [{description,"DEVTOOLS CXC 138 16"},
+ {vsn,"2.1.14.2"},
+ {path,
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/lib/appmon-2.1.14.2/ebin"},
+ {modules,
+ [{appmon,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"97b8d88aecbd66963563a5aa5df0d0bc"}]},
+ {appmon_a,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"adb9049e71eb9e2131b6952974302b4c"}]},
+ {appmon_dg,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"438c40af3e96404e73904864597dcca0"}]},
+ {appmon_lb,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"d851ee67b54dbf0da46cb21a8c1f7bd9"}]},
+ {appmon_place,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"192140bb8bc7e74fd7121d8da2019c56"}]},
+ {appmon_txt,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"34c7f9da76880b4f7fcfeb0856fcc097"}]},
+ {appmon_web,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"449317a9770ff1aa4cf001604bd2261c"}]},
+ {process_info,
+ [{loaded,false},
+ {native,false},
+ {compiler,"4.9.1"},
+ {md5,"e6d86fad6d0d208318c48af00853ec5b"}]}]}]}}]},
+ {system_info,
+ [{allocator,
+ {glibc,
+ [2,4],
+ [sys_alloc,temp_alloc,sl_alloc,std_alloc,ll_alloc,
+ eheap_alloc,ets_alloc,fix_alloc,binary_alloc,driver_alloc,
+ mseg_alloc],
+ [{sys_alloc,[{e,true},{m,libc},{tt,131072},{tp,0}]},
+ {temp_alloc,
+ [{e,true},
+ {t,true},
+ {ramv,false},
+ {sbct,524288},
+ {asbcst,4145152},
+ {rsbcst,90},
+ {rsbcmt,80},
+ {rmbcmt,100},
+ {mmbcs,131072},
+ {mmmbc,18446744073709551615},
+ {mmsbc,256},
+ {lmbcs,10485760},
+ {smbcs,1048576},
+ {mbcgs,10},
+ {acul,0},
+ {mbsd,3},
+ {as,gf}]},
+ {sl_alloc,
+ [{e,true},
+ {t,true},
+ {ramv,false},
+ {sbct,524288},
+ {asbcst,4145152},
+ {rsbcst,80},
+ {rsbcmt,80},
+ {rmbcmt,50},
+ {mmbcs,32768},
+ {mmmbc,18446744073709551615},
+ {mmsbc,256},
+ {lmbcs,5242880},
+ {smbcs,262144},
+ {mbcgs,10},
+ {acul,0},
+ {mbsd,3},
+ {as,gf}]},
+ {std_alloc,
+ [{e,true},
+ {t,true},
+ {ramv,false},
+ {sbct,524288},
+ {asbcst,4145152},
+ {rsbcst,20},
+ {rsbcmt,80},
+ {rmbcmt,50},
+ {mmbcs,32768},
+ {mmmbc,18446744073709551615},
+ {mmsbc,256},
+ {lmbcs,5242880},
+ {smbcs,262144},
+ {mbcgs,10},
+ {acul,0},
+ {as,bf}]},
+ {ll_alloc,
+ [{e,true},
+ {t,false},
+ {ramv,false},
+ {sbct,18446744073709551615},
+ {asbcst,0},
+ {rsbcst,0},
+ {rsbcmt,0},
+ {rmbcmt,0},
+ {mmbcs,2097112},
+ {mmmbc,18446744073709551615},
+ {mmsbc,0},
+ {lmbcs,10485760},
+ {smbcs,1048576},
+ {mbcgs,10},
+ {acul,0},
+ {as,aobf}]},
+ {eheap_alloc,
+ [{e,true},
+ {t,true},
+ {ramv,false},
+ {sbct,524288},
+ {asbcst,4145152},
+ {rsbcst,50},
+ {rsbcmt,80},
+ {rmbcmt,50},
+ {mmbcs,131072},
+ {mmmbc,18446744073709551615},
+ {mmsbc,256},
+ {lmbcs,5242880},
+ {smbcs,262144},
+ {mbcgs,10},
+ {acul,0},
+ {mbsd,3},
+ {as,gf}]},
+ {ets_alloc,
+ [{e,true},
+ {t,true},
+ {ramv,false},
+ {sbct,524288},
+ {asbcst,4145152},
+ {rsbcst,20},
+ {rsbcmt,80},
+ {rmbcmt,50},
+ {mmbcs,32768},
+ {mmmbc,18446744073709551615},
+ {mmsbc,256},
+ {lmbcs,5242880},
+ {smbcs,262144},
+ {mbcgs,10},
+ {acul,0},
+ {as,bf}]},
+ {fix_alloc,
+ [{e,true},
+ {t,true},
+ {ramv,false},
+ {sbct,524288},
+ {asbcst,4145152},
+ {rsbcst,20},
+ {rsbcmt,80},
+ {rmbcmt,50},
+ {mmbcs,32768},
+ {mmmbc,18446744073709551615},
+ {mmsbc,256},
+ {lmbcs,5242880},
+ {smbcs,262144},
+ {mbcgs,10},
+ {acul,0},
+ {as,aobf}]},
+ {binary_alloc,
+ [{e,true},
+ {t,true},
+ {ramv,false},
+ {sbct,524288},
+ {asbcst,4145152},
+ {rsbcst,20},
+ {rsbcmt,80},
+ {rmbcmt,50},
+ {mmbcs,32768},
+ {mmmbc,18446744073709551615},
+ {mmsbc,256},
+ {lmbcs,5242880},
+ {smbcs,262144},
+ {mbcgs,10},
+ {acul,0},
+ {as,bf}]},
+ {driver_alloc,
+ [{e,true},
+ {t,true},
+ {ramv,false},
+ {sbct,524288},
+ {asbcst,4145152},
+ {rsbcst,20},
+ {rsbcmt,80},
+ {rmbcmt,50},
+ {mmbcs,32768},
+ {mmmbc,18446744073709551615},
+ {mmsbc,256},
+ {lmbcs,5242880},
+ {smbcs,262144},
+ {mbcgs,10},
+ {acul,0},
+ {as,bf}]},
+ {mseg_alloc,[{amcbf,4194304},{rmcbf,20},{mcs,10}]},
+ {alloc_util,[{mmc,1024},{ycs,1048576}]},
+ {instr,[{m,false},{s,false},{t,false}]}]}},
+ {check_io,
+ [{name,erts_poll},
+ {primary,poll},
+ {fallback,false},
+ {kernel_poll,false},
+ {memory_size,49808},
+ {total_poll_set_size,2},
+ {lazy_updates,true},
+ {pending_updates,0},
+ {batch_updates,false},
+ {concurrent_updates,false},
+ {max_fds,1024}]},
+ {otp_release,"R16B02"},
+ {port_limit,65536},
+ {process_limit,262144},
+ {smp_support,true},
+ {system_version,
+ "Erlang R16B02 (erts-5.10.3) [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]\n"},
+ {system_architecture,"x86_64-unknown-linux-gnu"},
+ {threads,true},
+ {thread_pool_size,10},
+ {{wordsize,internal},8},
+ {{wordsize,external},8},
+ {{cpu_topology,defined},undefined},
+ {{cpu_topology,detected},
+ [{node,
+ [{processor,[{core,{logical,0}},{core,{logical,1}}]}]},
+ {node,
+ [{processor,[{core,{logical,2}},{core,{logical,3}}]}]}]},
+ {scheduler_bind_type,unbound},
+ {scheduler_bindings,{unbound,unbound,unbound,unbound}},
+ {compat_rel,16},
+ {schedulers_state,{4,4,4}},
+ {build_type,opt},
+ {logical_processors,4},
+ {logical_processors_online,4},
+ {logical_processors_available,4},
+ {driver_version,"2.1"},
+ {taints,[]}]},
+ {erts_compile_info,
+ [{ldflags,[]},
+ {cflags,
+ "-g -O2 -I/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp_src_R16B02/erts/x86_64-unknown-linux-gnu -DOTP_RELEASE -D_GNU_SOURCE -DERTS_SMP -DHAVE_CONFIG_H -Wall -Wstrict-prototypes -Wmissing-prototypes -Wdeclaration-after-statement -DUSE_THREADS -D_THREAD_SAFE -D_REENTRANT -DPOSIX_THREADS -D_POSIX_THREAD_SAFE_FUNCTIONS "},
+ {config_h,
+ "/* x86_64-unknown-linux-gnu/config.h. Generated by configure. */\n/* config.h.in. Generated from configure.in by autoheader. */\n\n\n#define GHBN_R_SOLARIS 2\n#define GHBN_R_AIX 3\n#define GHBN_R_GLIBC 4\n\n\n/* Define the brk() argument type. */\n#define BRK_ARG_TYPE void *\n\n/* Define the brk() return type. */\n#define BRK_RET_TYPE int\n\n/* Define if you do not have a high-res. timer & want to use times() instead\n */\n/* #undef CORRECT_USING_TIMES */\n\n/* Modern style mcontext_t in MacOSX */\n/* #undef DARWIN_MODERN_MCONTEXT */\n\n/* Define if you need to include rpc/types.h to get INADDR_LOOPBACK defined */\n/* #undef DEF_INADDR_LOOPBACK_IN_RPC_TYPES_H */\n\n/* Define if you need to include winsock2.h to get INADDR_LOOPBACK defined */\n/* #undef DEF_INADDR_LOOPBACK_IN_WINSOCK2_H */\n\n/* Define if you want to disable child waiter thread */\n/* #undef DISABLE_CHILD_WAITER_THREAD */\n\n/* Define if you want to disable vfork. */\n/* #undef DISABLE_VFORK */\n\n/* Define to 1 if your processor stores the words in a double in middle-endian\n format (like some ARMs). */\n/* #undef DOUBLE_MIDDLE_ENDIAN */\n\n/* Define if you want to enable child waiter thread */\n/* #undef ENABLE_CHILD_WAITER_THREAD */\n\n/* Define if sbrk()/brk() wrappers can track malloc()s core memory use */\n/* #undef ERTS_BRK_WRAPPERS_CAN_TRACK_MALLOC */\n\n/* The only reason ERTS_EMU_CMDLINE_FLAGS exists is to force modification of\n config.h when the emulator command line flags are modified by configure */\n#define ERTS_EMU_CMDLINE_FLAGS \" -g -O2 -I/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp_src_R16B02/erts/x86_64-unknown-linux-gnu -DOTP_RELEASE -D_GNU_SOURCE -g -D_GNU_SOURCE -I/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp_src_R16B02/erts/x86_64-unknown-linux-gnu -DOTP_RELEASE -DUSE_THREADS -D_THREAD_SAFE -D_REENTRANT -DPOSIX_THREADS -D_POSIX_THREAD_SAFE_FUNCTIONS -Wall -Wstrict-prototypes -Wmissing-prototypes -Wdeclaration-after-statement\"\n\n/* Define if you have kernel poll and want to use it */\n#define ERTS_ENABLE_KERNEL_POLL 1\n\n/* Define if the smp emulator is built */\n#define ERTS_HAVE_SMP_EMU 1\n\n/* Define if dlopen() needs to be called before first call to dlerror() */\n/* #undef ERTS_NEED_DLOPEN_BEFORE_DLERROR */\n\n/* Define if poll() should be used instead of select() */\n#define ERTS_USE_POLL 1\n\n/* Define if __after_morecore_hook can track malloc()s core memory use. */\n#define ERTS___AFTER_MORECORE_HOOK_CAN_TRACK_MALLOC 1\n\n/* Define if bigendian */\n/* #undef ETHR_BIGENDIAN */\n\n/* Define if you get a register shortage with cmpxchg8b and position\n independent code */\n/* #undef ETHR_CMPXCHG8B_REGISTER_SHORTAGE */\n\n/* Define if you want to disable native ethread implementations */\n/* #undef ETHR_DISABLE_NATIVE_IMPLS */\n\n/* Define if you want to force usage of pthread rwlocks */\n/* #undef ETHR_FORCE_PTHREAD_RWLOCK */\n\n/* Define if you use a gcc that supports the double word cmpxchg instruction\n */\n#define ETHR_GCC_HAVE_DW_CMPXCHG_ASM_SUPPORT 1\n\n/* Define if you use a gcc that supports -msse2 and understand sse2 specific\n asm statements */\n/* #undef ETHR_GCC_HAVE_SSE2_ASM_SUPPORT */\n\n/* Define if you have all ethread defines */\n#define ETHR_HAVE_ETHREAD_DEFINES 1\n\n/* Define if you have libatomic_ops atomic operations */\n/* #undef ETHR_HAVE_LIBATOMIC_OPS */\n\n/* Define if you have a linux futex implementation. */\n#define ETHR_HAVE_LINUX_FUTEX 1\n\n/* Define if the pthread.h header file is in pthread/mit directory. */\n/* #undef ETHR_HAVE_MIT_PTHREAD_H */\n\n/* Define if you have the pthread_attr_setguardsize function. */\n#define ETHR_HAVE_PTHREAD_ATTR_SETGUARDSIZE 1\n\n/* Define if you have the <pthread.h> header file. */\n#define ETHR_HAVE_PTHREAD_H 1\n\n/* Define if you have the pthread_rwlockattr_setkind_np() function. */\n#define ETHR_HAVE_PTHREAD_RWLOCKATTR_SETKIND_NP 1\n\n/* Define if you have the PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP rwlock\n attribute. */\n#define ETHR_HAVE_PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP 1\n\n/* Define if you have the pthread_spin_lock function. */\n#define ETHR_HAVE_PTHREAD_SPIN_LOCK 1\n\n/* Define if you have the pthread_yield() function. */\n#define ETHR_HAVE_PTHREAD_YIELD 1\n\n/* Define if you have the <sched.h> header file. */\n#define ETHR_HAVE_SCHED_H 1\n\n/* Define if you have the sched_yield() function. */\n#define ETHR_HAVE_SCHED_YIELD 1\n\n/* Define if you have the <sys/time.h> header file. */\n#define ETHR_HAVE_SYS_TIME_H 1\n\n/* Define if you have _InterlockedAnd() */\n/* #undef ETHR_HAVE__INTERLOCKEDAND */\n\n/* Define if you have _InterlockedAnd64() */\n/* #undef ETHR_HAVE__INTERLOCKEDAND64 */\n\n/* Define if you have _InterlockedCompareExchange() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE */\n\n/* Define if you have _InterlockedCompareExchange128() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE128 */\n\n/* Define if you have _InterlockedCompareExchange64() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64 */\n\n/* Define if you have _InterlockedCompareExchange64_acq() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_ACQ */\n\n/* Define if you have _InterlockedCompareExchange64_rel() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE64_REL */\n\n/* Define if you have _InterlockedCompareExchange_acq() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_ACQ */\n\n/* Define if you have _InterlockedCompareExchange_rel() */\n/* #undef ETHR_HAVE__INTERLOCKEDCOMPAREEXCHANGE_REL */\n\n/* Define if you have _InterlockedDecrement() */\n/* #undef ETHR_HAVE__INTERLOCKEDDECREMENT */\n\n/* Define if you have _InterlockedDecrement64() */\n/* #undef ETHR_HAVE__INTERLOCKEDDECREMENT64 */\n\n/* Define if you have _InterlockedDecrement64_rel() */\n/* #undef ETHR_HAVE__INTERLOCKEDDECREMENT64_REL */\n\n/* Define if you have _InterlockedDecrement_rel() */\n/* #undef ETHR_HAVE__INTERLOCKEDDECREMENT_REL */\n\n/* Define if you have _InterlockedExchange() */\n/* #undef ETHR_HAVE__INTERLOCKEDEXCHANGE */\n\n/* Define if you have _InterlockedExchange64() */\n/* #undef ETHR_HAVE__INTERLOCKEDEXCHANGE64 */\n\n/* Define if you have _InterlockedExchangeAdd() */\n/* #undef ETHR_HAVE__INTERLOCKEDEXCHANGEADD */\n\n/* Define if you have _InterlockedExchangeAdd64() */\n/* #undef ETHR_HAVE__INTERLOCKEDEXCHANGEADD64 */\n\n/* Define if you have _InterlockedExchangeAdd64_acq() */\n/* #undef ETHR_HAVE__INTERLOCKEDEXCHANGEADD64_ACQ */\n\n/* Define if you have _InterlockedExchangeAdd_acq() */\n/* #undef ETHR_HAVE__INTERLOCKEDEXCHANGEADD_ACQ */\n\n/* Define if you have _InterlockedIncrement() */\n/* #undef ETHR_HAVE__INTERLOCKEDINCREMENT */\n\n/* Define if you have _InterlockedIncrement64() */\n/* #undef ETHR_HAVE__INTERLOCKEDINCREMENT64 */\n\n/* Define if you have _InterlockedIncrement64_acq() */\n/* #undef ETHR_HAVE__INTERLOCKEDINCREMENT64_ACQ */\n\n/* Define if you have _InterlockedIncrement_acq() */\n/* #undef ETHR_HAVE__INTERLOCKEDINCREMENT_ACQ */\n\n/* Define if you have _InterlockedOr() */\n/* #undef ETHR_HAVE__INTERLOCKEDOR */\n\n/* Define if you have _InterlockedOr64() */\n/* #undef ETHR_HAVE__INTERLOCKEDOR64 */\n\n/* Define if you have __sync_add_and_fetch() for 32-bit integers */\n#define ETHR_HAVE___SYNC_ADD_AND_FETCH32 1\n\n/* Define if you have __sync_add_and_fetch() for 64-bit integers */\n#define ETHR_HAVE___SYNC_ADD_AND_FETCH64 1\n\n/* Define if you have __sync_fetch_and_and() for 32-bit integers */\n#define ETHR_HAVE___SYNC_FETCH_AND_AND32 1\n\n/* Define if you have __sync_fetch_and_and() for 64-bit integers */\n#define ETHR_HAVE___SYNC_FETCH_AND_AND64 1\n\n/* Define if you have __sync_fetch_and_or() for 32-bit integers */\n#define ETHR_HAVE___SYNC_FETCH_AND_OR32 1\n\n/* Define if you have __sync_fetch_and_or() for 64-bit integers */\n#define ETHR_HAVE___SYNC_FETCH_AND_OR64 1\n\n/* Define if you have __sync_val_compare_and_swap() for 128-bit integers */\n/* #undef ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP128 */\n\n/* Define if you have __sync_val_compare_and_swap() for 32-bit integers */\n#define ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP32 1\n\n/* Define if you have __sync_val_compare_and_swap() for 64-bit integers */\n#define ETHR_HAVE___SYNC_VAL_COMPARE_AND_SWAP64 1\n\n/* Define if you want to modify the default stack size */\n/* #undef ETHR_MODIFIED_DEFAULT_STACK_SIZE */\n\n/* Define if you need the <nptl/pthread.h> header file. */\n/* #undef ETHR_NEED_NPTL_PTHREAD_H */\n\n/* Define if you prefer gcc native ethread implementations */\n/* #undef ETHR_PREFER_GCC_NATIVE_IMPLS */\n\n/* Define if you prefer libatomic_ops native ethread implementations */\n/* #undef ETHR_PREFER_LIBATOMIC_OPS_NATIVE_IMPLS */\n\n/* Define if you have pthreads */\n#define ETHR_PTHREADS 1\n\n/* Define if pthread_yield() returns an int. */\n#define ETHR_PTHREAD_YIELD_RET_INT 1\n\n/* Define if sched_yield() returns an int. */\n#define ETHR_SCHED_YIELD_RET_INT 1\n\n/* Define to the size of AO_t if libatomic_ops is used */\n/* #undef ETHR_SIZEOF_AO_T */\n\n/* Define to the size of int */\n#define ETHR_SIZEOF_INT 4\n\n/* Define to the size of long */\n#define ETHR_SIZEOF_LONG 8\n\n/* Define to the size of long long */\n#define ETHR_SIZEOF_LONG_LONG 8\n\n/* Define to the size of pointers */\n#define ETHR_SIZEOF_PTR 8\n\n/* Define to the size of __int128_t */\n#define ETHR_SIZEOF___INT128_T 16\n\n/* Define to the size of __int64 */\n#define ETHR_SIZEOF___INT64 0\n\n/* Define if only run in Sparc PSO, or TSO mode */\n/* #undef ETHR_SPARC_PSO */\n\n/* Define if run in Sparc RMO, PSO, or TSO mode */\n/* #undef ETHR_SPARC_RMO */\n\n/* Define if only run in Sparc TSO mode */\n/* #undef ETHR_SPARC_TSO */\n\n/* Define if you can safely include both <sys/time.h> and <time.h>. */\n#define ETHR_TIME_WITH_SYS_TIME 1\n\n/* Define if you have win32 threads */\n/* #undef ETHR_WIN32_THREADS */\n\n/* Define if x86/x86_64 out of order instructions should be synchronized */\n/* #undef ETHR_X86_OUT_OF_ORDER */\n\n/* Define if you want to use clock_gettime to simulate gethrtime */\n#define GETHRTIME_WITH_CLOCK_GETTIME 1\n\n/* Define if building a halfword-heap 64bit emulator */\n/* #undef HALFWORD_HEAP_EMULATOR */\n\n/* Define to 1 if you have the <arpa/nameser.h> header file. */\n#define HAVE_ARPA_NAMESER_H 1\n\n/* Define to 1 if you have the `brk' function. */\n#define HAVE_BRK 1\n\n/* define if clock_gettime() works for getting process time */\n/* #undef HAVE_CLOCK_GETTIME */\n\n/* Define if you have a decl of fread that conflicts with int fread */\n#define HAVE_CONFLICTING_FREAD_DECLARATION 1\n\n/* Define if you have a putenv() that stores a copy of the key-value pair */\n/* #undef HAVE_COPYING_PUTENV */\n\n/* Define if you have cpuset_getaffinity/cpuset_setaffinity */\n/* #undef HAVE_CPUSET_xETAFFINITY */\n\n/* Define to 1 if you have the declaration of `getrlimit', and to 0 if you\n don't. */\n#define HAVE_DECL_GETRLIMIT 1\n\n/* Define to 1 if you have the declaration of `IN6ADDR_ANY_INIT', and to 0 if\n you don't. */\n#define HAVE_DECL_IN6ADDR_ANY_INIT 1\n\n/* Define to 1 if you have the declaration of `IN6ADDR_LOOPBACK_INIT', and to\n 0 if you don't. */\n#define HAVE_DECL_IN6ADDR_LOOPBACK_INIT 1\n\n/* Define to 1 if you have the declaration of `IPV6_V6ONLY', and to 0 if you\n don't. */\n#define HAVE_DECL_IPV6_V6ONLY 1\n\n/* Define to 1 if you have the declaration of `posix2time', and to 0 if you\n don't. */\n#define HAVE_DECL_POSIX2TIME 0\n\n/* Define to 1 if you have the declaration of `RLIMIT_STACK', and to 0 if you\n don't. */\n#define HAVE_DECL_RLIMIT_STACK 1\n\n/* Define to 1 if you have the declaration of `SCTPS_BOUND', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTPS_BOUND 0\n\n/* Define to 1 if you have the declaration of `SCTPS_COOKIE_ECHOED', and to 0\n if you don't. */\n#define HAVE_DECL_SCTPS_COOKIE_ECHOED 0\n\n/* Define to 1 if you have the declaration of `SCTPS_COOKIE_WAIT', and to 0 if\n you don't. */\n#define HAVE_DECL_SCTPS_COOKIE_WAIT 0\n\n/* Define to 1 if you have the declaration of `SCTPS_ESTABLISHED', and to 0 if\n you don't. */\n#define HAVE_DECL_SCTPS_ESTABLISHED 0\n\n/* Define to 1 if you have the declaration of `SCTPS_IDLE', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTPS_IDLE 0\n\n/* Define to 1 if you have the declaration of `SCTPS_LISTEN', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTPS_LISTEN 0\n\n/* Define to 1 if you have the declaration of `SCTPS_SHUTDOWN_ACK_SENT', and\n to 0 if you don't. */\n#define HAVE_DECL_SCTPS_SHUTDOWN_ACK_SENT 0\n\n/* Define to 1 if you have the declaration of `SCTPS_SHUTDOWN_PENDING', and to\n 0 if you don't. */\n#define HAVE_DECL_SCTPS_SHUTDOWN_PENDING 0\n\n/* Define to 1 if you have the declaration of `SCTPS_SHUTDOWN_RECEIVED', and\n to 0 if you don't. */\n#define HAVE_DECL_SCTPS_SHUTDOWN_RECEIVED 0\n\n/* Define to 1 if you have the declaration of `SCTPS_SHUTDOWN_SENT', and to 0\n if you don't. */\n#define HAVE_DECL_SCTPS_SHUTDOWN_SENT 0\n\n/* Define to 1 if you have the declaration of `SCTP_ABORT', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_ABORT 1\n\n/* Define to 1 if you have the declaration of `SCTP_ADDR_CONFIRMED', and to 0\n if you don't. */\n#define HAVE_DECL_SCTP_ADDR_CONFIRMED 0\n\n/* Define to 1 if you have the declaration of `SCTP_ADDR_OVER', and to 0 if\n you don't. */\n#define HAVE_DECL_SCTP_ADDR_OVER 1\n\n/* Define to 1 if you have the declaration of `SCTP_BOUND', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_BOUND 0\n\n/* Define to 1 if you have the declaration of `SCTP_CLOSED', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_CLOSED 1\n\n/* Define to 1 if you have the declaration of `SCTP_COOKIE_ECHOED', and to 0\n if you don't. */\n#define HAVE_DECL_SCTP_COOKIE_ECHOED 1\n\n/* Define to 1 if you have the declaration of `SCTP_COOKIE_WAIT', and to 0 if\n you don't. */\n#define HAVE_DECL_SCTP_COOKIE_WAIT 1\n\n/* Define to 1 if you have the declaration of `SCTP_DELAYED_ACK_TIME', and to\n 0 if you don't. */\n#define HAVE_DECL_SCTP_DELAYED_ACK_TIME 1\n\n/* Define to 1 if you have the declaration of `SCTP_EMPTY', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_EMPTY 1\n\n/* Define to 1 if you have the declaration of `SCTP_EOF', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_EOF 1\n\n/* Define to 1 if you have the declaration of `SCTP_ESTABLISHED', and to 0 if\n you don't. */\n#define HAVE_DECL_SCTP_ESTABLISHED 1\n\n/* Define to 1 if you have the declaration of `SCTP_LISTEN', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_LISTEN 0\n\n/* Define to 1 if you have the declaration of `SCTP_SENDALL', and to 0 if you\n don't. */\n#define HAVE_DECL_SCTP_SENDALL 0\n\n/* Define to 1 if you have the declaration of `SCTP_SHUTDOWN_ACK_SENT', and to\n 0 if you don't. */\n#define HAVE_DECL_SCTP_SHUTDOWN_ACK_SENT 1\n\n/* Define to 1 if you have the declaration of `SCTP_SHUTDOWN_PENDING', and to\n 0 if you don't. */\n#define HAVE_DECL_SCTP_SHUTDOWN_PENDING 1\n\n/* Define to 1 if you have the declaration of `SCTP_SHUTDOWN_RECEIVED', and to\n 0 if you don't. */\n#define HAVE_DECL_SCTP_SHUTDOWN_RECEIVED 1\n\n/* Define to 1 if you have the declaration of `SCTP_SHUTDOWN_SENT', and to 0\n if you don't. */\n#define HAVE_DECL_SCTP_SHUTDOWN_SENT 1\n\n/* Define to 1 if you have the declaration of `SCTP_UNORDERED', and to 0 if\n you don't. */\n#define HAVE_DECL_SCTP_UNORDERED 1\n\n/* Define to 1 if you have the declaration of `setrlimit', and to 0 if you\n don't. */\n#define HAVE_DECL_SETRLIMIT 1\n\n/* Define to 1 if you have the declaration of `time2posix', and to 0 if you\n don't. */\n#define HAVE_DECL_TIME2POSIX 0\n\n/* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.\n */\n#define HAVE_DIRENT_H 1\n\n/* Define to 1 if you have the <dlfcn.h> header file. */\n#define HAVE_DLFCN_H 1\n\n/* Define to 1 if you have the `dlopen' function. */\n#define HAVE_DLOPEN 1\n\n/* Define to 1 if you don't have `vprintf' but do have `_doprnt.' */\n/* #undef HAVE_DOPRNT */\n\n/* Define if you have the 'end' symbol */\n#define HAVE_END_SYMBOL 1\n\n/* Define if you have a working fallocate() */\n/* #undef HAVE_FALLOCATE */\n\n/* Define to 1 if you have the <fcntl.h> header file. */\n#define HAVE_FCNTL_H 1\n\n/* Define to 1 if you have the `fdatasync' function. */\n#define HAVE_FDATASYNC 1\n\n/* Define to 1 if you have the `finite' function. */\n#define HAVE_FINITE 1\n\n/* Define to 1 if you have the `flockfile' function. */\n#define HAVE_FLOCKFILE 1\n\n/* Define to 1 if you have the `fork' function. */\n#define HAVE_FORK 1\n\n/* Define to 1 if you have the `fpsetmask' function. */\n/* #undef HAVE_FPSETMASK */\n\n/* Define to 1 if you have the `fstat' function. */\n#define HAVE_FSTAT 1\n\n/* Define if you have fwrite_unlocked */\n#define HAVE_FWRITE_UNLOCKED 1\n\n/* Define to 1 if you have a good `getaddrinfo' function. */\n#define HAVE_GETADDRINFO 1\n\n/* Define to 1 if you have the `gethostbyname2' function. */\n#define HAVE_GETHOSTBYNAME2 1\n\n/* Define to flavour of gethostbyname_r */\n#define HAVE_GETHOSTBYNAME_R GHBN_R_GLIBC\n\n/* Define to 1 if you have the `gethrtime' function. */\n/* #undef HAVE_GETHRTIME */\n\n/* define if gethrvtime() works and uses ioctl() to /proc/self */\n/* #undef HAVE_GETHRVTIME_PROCFS_IOCTL */\n\n/* Define to 1 if you have the `getifaddrs' function. */\n#define HAVE_GETIFADDRS 1\n\n/* Define to 1 if you have the `getipnodebyaddr' function. */\n/* #undef HAVE_GETIPNODEBYADDR */\n\n/* Define to 1 if you have the `getipnodebyname' function. */\n/* #undef HAVE_GETIPNODEBYNAME */\n\n/* Define to 1 if you have a good `getnameinfo' function. */\n#define HAVE_GETNAMEINFO 1\n\n/* Define to 1 if you have the `gmtime_r' function. */\n#define HAVE_GMTIME_R 1\n\n/* Define to 1 if you have the <ieeefp.h> header file. */\n/* #undef HAVE_IEEEFP_H */\n\n/* Define to 1 if you have the `ieee_handler' function. */\n/* #undef HAVE_IEEE_HANDLER */\n\n/* Define to 1 if you have the <ifaddrs.h> header file. */\n#define HAVE_IFADDRS_H 1\n\n/* Define if ipv6 is present */\n#define HAVE_IN6 1\n\n/* Define to 1 if you have the variable in6addr_any declared. */\n#define HAVE_IN6ADDR_ANY 1\n\n/* Define to 1 if you have the variable in6addr_loopback declared. */\n#define HAVE_IN6ADDR_LOOPBACK 1\n\n/* Define to 1 if you have the `inet_pton' function. */\n#define HAVE_INET_PTON 1\n\n/* Define to 1 if you have the <inttypes.h> header file. */\n#define HAVE_INTTYPES_H 1\n\n/* Early linux used in_addr6 instead of in6_addr, define if you have this */\n/* #undef HAVE_IN_ADDR6_STRUCT */\n\n/* Define to 1 if you have the `isinf' function. */\n#define HAVE_ISINF 1\n\n/* Define to 1 if you have the `isnan' function. */\n#define HAVE_ISNAN 1\n\n/* Define if you have kstat */\n/* #undef HAVE_KSTAT */\n\n/* Define to 1 if you have the <langinfo.h> header file. */\n#define HAVE_LANGINFO_H 1\n\n/* Define to 1 if you have the `dl' library (-ldl). */\n#define HAVE_LIBDL 1\n\n/* Define to 1 if you have the `dlpi' library (-ldlpi). */\n/* #undef HAVE_LIBDLPI */\n\n/* Define to 1 if you have the <libdlpi.h> header file. */\n/* #undef HAVE_LIBDLPI_H */\n\n/* Define to 1 if you have the `inet' library (-linet). */\n/* #undef HAVE_LIBINET */\n\n/* Define to 1 if you have the `m' library (-lm). */\n#define HAVE_LIBM 1\n\n/* Define to 1 if you have the `util' library (-lutil). */\n#define HAVE_LIBUTIL 1\n\n/* Define to 1 if you have the `z' library (-lz). */\n/* #undef HAVE_LIBZ */\n\n/* Define to 1 if you have the <limits.h> header file. */\n#define HAVE_LIMITS_H 1\n\n/* Define to 1 if you have the <linux/falloc.h> header file. */\n/* #undef HAVE_LINUX_FALLOC_H */\n\n/* Define to 1 if you have the `localtime_r' function. */\n#define HAVE_LOCALTIME_R 1\n\n/* Define to 1 if you have the <malloc.h> header file. */\n#define HAVE_MALLOC_H 1\n\n/* Define to 1 if you have the `mallopt' function. */\n#define HAVE_MALLOPT 1\n\n/* Define to 1 if you have the `memcpy' function. */\n#define HAVE_MEMCPY 1\n\n/* Define to 1 if you have the `memmove' function. */\n#define HAVE_MEMMOVE 1\n\n/* Define to 1 if you have the <memory.h> header file. */\n#define HAVE_MEMORY_H 1\n\n/* Define if the pthread.h header file is in pthread/mit directory. */\n/* #undef HAVE_MIT_PTHREAD_H */\n\n/* Define to 1 if you have the `mmap' function. */\n#define HAVE_MMAP 1\n\n/* Define to 1 if you have the `mremap' function. */\n#define HAVE_MREMAP 1\n\n/* Define if setsockopt() accepts multicast options */\n#define HAVE_MULTICAST_SUPPORT 1\n\n/* Define to 1 if you have the <ndir.h> header file, and it defines `DIR'. */\n/* #undef HAVE_NDIR_H */\n\n/* Define to 1 if you have the <netpacket/packet.h> header file. */\n#define HAVE_NETPACKET_PACKET_H 1\n\n/* Define to 1 if you have the <net/errno.h> header file. */\n/* #undef HAVE_NET_ERRNO_H */\n\n/* Define to 1 if you have the <net/if_dl.h> header file. */\n/* #undef HAVE_NET_IF_DL_H */\n\n/* Define to 1 if you have the `nl_langinfo' function. */\n#define HAVE_NL_LANGINFO 1\n\n/* Define if you don't have a definition of INADDR_LOOPBACK */\n/* #undef HAVE_NO_INADDR_LOOPBACK */\n\n/* Define to 1 if you have the `openpty' function. */\n#define HAVE_OPENPTY 1\n\n/* Define to 1 if you have the `poll' function. */\n#define HAVE_POLL 1\n\n/* Define to 1 if you have the <poll.h> header file. */\n#define HAVE_POLL_H 1\n\n/* Define to 1 if you have the `posix2time' function. */\n/* #undef HAVE_POSIX2TIME */\n\n/* Define to 1 if you have the `posix_fadvise' function. */\n#define HAVE_POSIX_FADVISE 1\n\n/* Define if you have a working posix_fallocate() */\n/* #undef HAVE_POSIX_FALLOCATE */\n\n/* Define to 1 if you have the `pread' function. */\n#define HAVE_PREAD 1\n\n/* Define if you have processor_bind functionality */\n/* #undef HAVE_PROCESSOR_BIND */\n\n/* Define if you have pset functionality */\n/* #undef HAVE_PSET */\n\n/* Define if you have the <pthread.h> header file. */\n#define HAVE_PTHREAD_H 1\n\n/* Define to 1 if you have the <pty.h> header file. */\n#define HAVE_PTY_H 1\n\n/* Define if you have putc_unlocked */\n#define HAVE_PUTC_UNLOCKED 1\n\n/* Define to 1 if you have the `pwrite' function. */\n#define HAVE_PWRITE 1\n\n/* Define to 1 if you have the `res_gethostbyname' function. */\n/* #undef HAVE_RES_GETHOSTBYNAME */\n\n/* Define to 1 if you have the `sbrk' function. */\n#define HAVE_SBRK 1\n\n/* Define if you have sched_getaffinity/sched_setaffinity */\n#define HAVE_SCHED_xETAFFINITY 1\n\n/* Define to 1 if you have the `sctp_bindx' function. */\n/* #undef HAVE_SCTP_BINDX */\n\n/* Define to 1 if you have the <netinet/sctp.h> header file */\n#define HAVE_SCTP_H 1\n\n/* Define to 1 if you have the `sctp_peeloff' function. */\n/* #undef HAVE_SCTP_PEELOFF */\n\n/* Define to 1 if you have the <sdkddkver.h> header file. */\n/* #undef HAVE_SDKDDKVER_H */\n\n/* Define to 1 if you have the `sendfile' function. */\n#define HAVE_SENDFILE 1\n\n/* Define to 1 if you have the `sendfilev' function. */\n/* #undef HAVE_SENDFILEV */\n\n/* Define to 1 if you have the `setlocale' function. */\n#define HAVE_SETLOCALE 1\n\n/* Define to 1 if you have the `setsid' function. */\n#define HAVE_SETSID 1\n\n/* Define if we have socklen_t */\n#define HAVE_SOCKLEN_T 1\n\n/* define if you have the Solaris/ultrasparc /dev/perfmon interface */\n/* #undef HAVE_SOLARIS_SPARC_PERFMON */\n\n/* Define if you have SO_BSDCOMPAT flag on sockets */\n/* #undef HAVE_SO_BSDCOMPAT */\n\n/* Define to 1 if you have the <stdint.h> header file. */\n#define HAVE_STDINT_H 1\n\n/* Define to 1 if you have the <stdlib.h> header file. */\n#define HAVE_STDLIB_H 1\n\n/* Define to 1 if you have the `strerror' function. */\n#define HAVE_STRERROR 1\n\n/* Define to 1 if you have the `strerror_r' function. */\n#define HAVE_STRERROR_R 1\n\n/* Define to 1 if you have the <strings.h> header file. */\n#define HAVE_STRINGS_H 1\n\n/* Define to 1 if you have the <string.h> header file. */\n#define HAVE_STRING_H 1\n\n/* Define to 1 if you have the `strlcat' function. */\n/* #undef HAVE_STRLCAT */\n\n/* Define to 1 if you have the `strlcpy' function. */\n/* #undef HAVE_STRLCPY */\n\n/* Define to 1 if you have the `strncasecmp' function. */\n#define HAVE_STRNCASECMP 1\n\n/* Define to 1 if `ifr_enaddr' is member of `struct ifreq'. */\n/* #undef HAVE_STRUCT_IFREQ_IFR_ENADDR */\n\n/* Define to 1 if `ifr_hwaddr' is member of `struct ifreq'. */\n#define HAVE_STRUCT_IFREQ_IFR_HWADDR 1\n\n/* Define to 1 if `spp_flags' is member of `struct sctp_paddrparams'. */\n#define HAVE_STRUCT_SCTP_PADDRPARAMS_SPP_FLAGS 1\n\n/* Define to 1 if `spp_pathmtu' is member of `struct sctp_paddrparams'. */\n#define HAVE_STRUCT_SCTP_PADDRPARAMS_SPP_PATHMTU 1\n\n/* Define to 1 if `spp_sackdelay' is member of `struct sctp_paddrparams'. */\n#define HAVE_STRUCT_SCTP_PADDRPARAMS_SPP_SACKDELAY 1\n\n/* Define to 1 if `sre_data' is member of `struct sctp_remote_error'. */\n#define HAVE_STRUCT_SCTP_REMOTE_ERROR_SRE_DATA 1\n\n/* Define to 1 if `ssf_data' is member of `struct sctp_send_failed'. */\n#define HAVE_STRUCT_SCTP_SEND_FAILED_SSF_DATA 1\n\n/* Define to 1 if you have the <syslog.h> header file. */\n#define HAVE_SYSLOG_H 1\n\n/* Define if you have <sys/devpoll.h> header file. */\n/* #undef HAVE_SYS_DEVPOLL_H */\n\n/* Define to 1 if you have the <sys/dir.h> header file, and it defines `DIR'.\n */\n/* #undef HAVE_SYS_DIR_H */\n\n/* Define if you have the <sys/epoll.h> header file. */\n#define HAVE_SYS_EPOLL_H 1\n\n/* Define if you have <sys/event.h> header file. */\n/* #undef HAVE_SYS_EVENT_H */\n\n/* Define to 1 if you have the <sys/ioctl.h> header file. */\n#define HAVE_SYS_IOCTL_H 1\n\n/* Define to 1 if you have the <sys/ndir.h> header file, and it defines `DIR'.\n */\n/* #undef HAVE_SYS_NDIR_H */\n\n/* Define to 1 if you have the <sys/resource.h> header file */\n#define HAVE_SYS_RESOURCE_H 1\n\n/* Define to 1 if you have the <sys/sdt.h> header file. */\n/* #undef HAVE_SYS_SDT_H */\n\n/* Define to 1 if you have the <sys/socketio.h> header file. */\n/* #undef HAVE_SYS_SOCKETIO_H */\n\n/* Define to 1 if you have the <sys/socket.h> header file. */\n#define HAVE_SYS_SOCKET_H 1\n\n/* Define to 1 if you have the <sys/sockio.h> header file. */\n/* #undef HAVE_SYS_SOCKIO_H */\n\n/* Define to 1 if you have the <sys/stat.h> header file. */\n#define HAVE_SYS_STAT_H 1\n\n/* Define to 1 if you have the <sys/stropts.h> header file. */\n#define HAVE_SYS_STROPTS_H 1\n\n/* Define to 1 if you have the <sys/sysctl.h> header file. */\n#define HAVE_SYS_SYSCTL_H 1\n\n/* Define to 1 if you have the <sys/time.h> header file. */\n#define HAVE_SYS_TIME_H 1\n\n/* Define to 1 if you have the <sys/types.h> header file. */\n#define HAVE_SYS_TYPES_H 1\n\n/* Define to 1 if you have the <sys/uio.h> header file. */\n#define HAVE_SYS_UIO_H 1\n\n/* Define to 1 if you have <sys/wait.h> that is POSIX.1 compatible. */\n#define HAVE_SYS_WAIT_H 1\n\n/* Define if termcap functions exists */\n#define HAVE_TERMCAP 1\n\n/* Define to 1 if you have the `time2posix' function. */\n/* #undef HAVE_TIME2POSIX */\n\n/* Define to 1 if you have the <unistd.h> header file. */\n#define HAVE_UNISTD_H 1\n\n/* Define to 1 if you have the <util.h> header file. */\n/* #undef HAVE_UTIL_H */\n\n/* Define to 1 if you have the <utmp.h> header file. */\n#define HAVE_UTMP_H 1\n\n/* Define to 1 if you have the `vfork' function. */\n#define HAVE_VFORK 1\n\n/* Define to 1 if you have the <vfork.h> header file. */\n/* #undef HAVE_VFORK_H */\n\n/* Define to 1 if you have the `vprintf' function. */\n#define HAVE_VPRINTF 1\n\n/* Define to 1 if you have a `wcwidth' function. */\n#define HAVE_WCWIDTH 1\n\n/* Define to 1 if you have the <windows.h> header file. */\n/* #undef HAVE_WINDOWS_H */\n\n/* Define to 1 if you have the <winsock2.h> header file. */\n/* #undef HAVE_WINSOCK2_H */\n\n/* Define to 1 if `fork' works. */\n#define HAVE_WORKING_FORK 1\n\n/* Define if you have a working posix_openpt implementation */\n#define HAVE_WORKING_POSIX_OPENPT 1\n\n/* Define to 1 if `vfork' works. */\n#define HAVE_WORKING_VFORK 1\n\n/* Define to 1 if you have the `writev' function. */\n#define HAVE_WRITEV 1\n\n/* Define to 1 if you have the <ws2tcpip.h> header file. */\n/* #undef HAVE_WS2TCPIP_H */\n\n/* Define to 1 if you have the `_brk' function. */\n/* #undef HAVE__BRK */\n\n/* Define if you have the '_end' symbol */\n#define HAVE__END_SYMBOL 1\n\n/* Define to 1 if you have the `_sbrk' function. */\n/* #undef HAVE__SBRK */\n\n/* Define to 1 if you have the `__brk' function. */\n/* #undef HAVE___BRK */\n\n/* Define to 1 if you have the `__sbrk' function. */\n#define HAVE___SBRK 1\n\n/* Define to enable HiPE */\n#define HIPE 1\n\n/* define if h_errno is declared (in some way) in a system header file */\n#define H_ERRNO_DECLARED 1\n\n/* Define if netdb.h needs struct sockaddr_in ans in.h CAN be included before\n */\n#define NETDB_H_NEEDS_IN_H 1\n\n/* Define if floating points exceptions are non-existing/not reliable */\n#define NO_FPE_SIGNALS \n\n/* Defined if no found C compiler can handle jump tables */\n/* #undef NO_JUMP_TABLE */\n\n/* Define if you dont have salen */\n#define NO_SA_LEN 1\n\n/* Define to the address where bug reports for this package should be sent. */\n#define PACKAGE_BUGREPORT \"\"\n\n/* Define to the full name of this package. */\n#define PACKAGE_NAME \"\"\n\n/* Define to the full name and version of this package. */\n#define PACKAGE_STRING \"\"\n\n/* Define to the one symbol short name of this package. */\n#define PACKAGE_TARNAME \"\"\n\n/* Define to the version of this package. */\n#define PACKAGE_VERSION \"\"\n\n/* Define if you wish to redefine FD_SETSIZE to be able to select on more fd\n */\n/* #undef REDEFINE_FD_SETSIZE */\n\n/* Define as the return type of signal handlers (`int' or `void'). */\n#define RETSIGTYPE void\n\n/* Define the sbrk() argument type. */\n#define SBRK_ARG_TYPE intptr_t\n\n/* Define the sbrk() return type. */\n#define SBRK_RET_TYPE void *\n\n/* The size of a `AO_t', as computed by sizeof. */\n/* #undef SIZEOF_AO_T */\n\n/* The size of a `char', as computed by sizeof. */\n#define SIZEOF_CHAR 1\n\n/* The size of a `int', as computed by sizeof. */\n#define SIZEOF_INT 4\n\n/* The size of a `long', as computed by sizeof. */\n#define SIZEOF_LONG 8\n\n/* The size of a `long long', as computed by sizeof. */\n#define SIZEOF_LONG_LONG 8\n\n/* The size of a `off_t', as computed by sizeof. */\n#define SIZEOF_OFF_T 8\n\n/* The size of a `short', as computed by sizeof. */\n#define SIZEOF_SHORT 2\n\n/* The size of a `size_t', as computed by sizeof. */\n#define SIZEOF_SIZE_T 8\n\n/* The size of a `time_t', as computed by sizeof. */\n#define SIZEOF_TIME_T 8\n\n/* The size of a `void *', as computed by sizeof. */\n#define SIZEOF_VOID_P 8\n\n/* The size of a `__int128_t', as computed by sizeof. */\n#define SIZEOF___INT128_T 16\n\n/* The size of a `__int64', as computed by sizeof. */\n#define SIZEOF___INT64 0\n\n/* Define to 1 if you have the ANSI C header files. */\n#define STDC_HEADERS 1\n\n/* define if the variable sys_errlist is declared in a system header file */\n#define SYS_ERRLIST_DECLARED \n\n/* Define to 1 if you can safely include both <sys/time.h> and <time.h>. */\n#define TIME_WITH_SYS_TIME 1\n\n/* Define to 1 if your <sys/time.h> declares `struct tm'. */\n/* #undef TM_IN_SYS_TIME */\n\n/* Define if you want to use dtrace for dynamic tracing */\n/* #undef USE_DTRACE */\n\n/* Define if you want to use dynamic tracing */\n/* #undef USE_DYNAMIC_TRACE */\n\n/* Define if you have matherr() function and struct exception type */\n#define USE_MATHERR 1\n\n/* Define to enable hrvtime() on Linux systems with perfctr extension */\n/* #undef USE_PERFCTR */\n\n/* Define if select() should be used instead of poll() */\n/* #undef USE_SELECT */\n\n/* Define if you want to use systemtap for dynamic tracing */\n/* #undef USE_SYSTEMTAP */\n\n/* Define to enable VM dynamic trace probes */\n/* #undef USE_VM_PROBES */\n\n/* Define if windows.h includes winsock2.h */\n/* #undef WINDOWS_H_INCLUDES_WINSOCK2_H */\n\n/* Define to 1 if your processor stores words with the most significant byte\n first (like Motorola and SPARC, unlike Intel and VAX). */\n/* #undef WORDS_BIGENDIAN */\n\n/* Define to empty if `const' does not conform to ANSI C. */\n/* #undef const */\n\n/* Define to `long' if <sys/types.h> does not define. */\n/* #undef off_t */\n\n/* Define to `int' if <sys/types.h> does not define. */\n/* #undef pid_t */\n\n/* Define to `unsigned' if <sys/types.h> does not define. */\n/* #undef size_t */\n\n/* Define as `fork' if `vfork' does not work. */\n/* #undef vfork */\n\n\n/* Redefine in6_addr. XXX this should be moved to the files where it's used? */\n#ifdef HAVE_IN_ADDR6_STRUCT\n#define in6_addr in_addr6\n#endif\n\n/* Define a reasonable default for INADDR_LOOPBACK */\n/* XXX this should be moved to the files where it's used? */\n#ifdef HAVE_NO_INADDR_LOOPBACK\n#define INADDR_LOOPBACK (u_long)0x7F000001\n#endif\n\n#ifdef REDEFINE_FD_SETSIZE\n#define FD_SETSIZE 1024\n#endif\n\n#ifdef HAVE_GETHRVTIME_PROCFS_IOCTL\n#define HAVE_GETHRVTIME\n#endif\n\n#ifndef HAVE_FINITE\n# if defined(HAVE_ISINF) && defined(HAVE_ISNAN)\n# define USE_ISINF_ISNAN\n# endif\n#endif\n\n#if defined(DEBUG) && defined(USE_THREADS) && !defined(ERTS_ENABLE_LOCK_CHECK)\n#define ERTS_ENABLE_LOCK_CHECK 1\n#endif\n\n"}]},
+ {beam_dynamic_libraries,
+ "\tlibutil.so.1 => /lib64/libutil.so.1 (0x00002b3e06a05000)\n\tlibdl.so.2 => /lib64/libdl.so.2 (0x00002b3e06b08000)\n\tlibm.so.6 => /lib64/libm.so.6 (0x00002b3e06c0c000)\n\tlibncurses.so.5 => /lib64/libncurses.so.5 (0x00002b3e06d62000)\n\tlibpthread.so.0 => /lib64/libpthread.so.0 (0x00002b3e06ec5000)\n\tlibrt.so.1 => /lib64/librt.so.1 (0x00002b3e06fdc000)\n\tlibc.so.6 => /lib64/libc.so.6 (0x00002b3e070e6000)\n\t/lib64/ld-linux-x86-64.so.2 (0x00002b3e068e9000)\n"},
+ {environment_erts,
+ [{"BINDIR",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/erts-5.10.3/bin"},
+ {"DIALYZER_EMULATOR",false},
+ {"CERL_DETACHED_PROG",false},
+ {"EMU","beam"},
+ {"ERL_CONSOLE_MODE",false},
+ {"ERL_CRASH_DUMP",false},
+ {"ERL_CRASH_DUMP_NICE",false},
+ {"ERL_CRASH_DUMP_SECONDS",false},
+ {"ERL_EPMD_PORT",false},
+ {"ERL_EMULATOR_DLL",false},
+ {"ERL_FULLSWEEP_AFTER",false},
+ {"ERL_LIBS",false},
+ {"ERL_MALLOC_LIB",false},
+ {"ERL_MAX_PORTS",false},
+ {"ERL_MAX_ETS_TABLES",false},
+ {"ERL_NO_VFORK",false},
+ {"ERL_NO_KERNEL_POLL",false},
+ {"ERL_THREAD_POOL_SIZE",false},
+ {"ERLC_EMULATOR",false},
+ {"ESCRIPT_EMULATOR",false},
+ {"HOME","/home/otptest"},
+ {"HOMEDRIVE",false},
+ {"HOMEPATH",false},
+ {"LANG","sv_SE.UTF-8"},
+ {"LC_ALL",false},
+ {"LC_CTYPE",false},
+ {"PATH",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/erts-5.10.3/bin:/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/bin:/opt/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/otp/patch/bin:/home/otp/obe/bin"},
+ {"PROGNAME","erl"},
+ {"RELDIR",false},
+ {"ROOTDIR",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp"},
+ {"TERM","xterm-256color"},
+ {"COMSPEC",false},
+ {"HEART_COMMAND",false},
+ {"RUN_ERL_LOG_ALIVE_MINUTES",false},
+ {"RUN_ERL_LOG_ACTIVITY_MINUTES",false},
+ {"RUN_ERL_LOG_ALIVE_FORMAT",false},
+ {"RUN_ERL_LOG_ALIVE_IN_UTC",false},
+ {"RUN_ERL_LOG_GENERATIONS",false},
+ {"RUN_ERL_LOG_MAXSIZE",false},
+ {"RUN_ERL_DISABLE_FLOWCNTRL",false},
+ {"CALLER_DRV_USE_OUTPUTV",false},
+ {"ERL_INET_GETHOST_DEBUG",false},
+ {"ERL_EFILE_THREAD_SHORT_CIRCUIT",false},
+ {"ERL_WINDOW_TITLE",false},
+ {"ERL_ABORT_ON_FAILURE",false},
+ {"TTYSL_DEBUG_LOG",false}]},
+ {environment,
+ [{"JAVA_ROOT","/usr/lib64/jvm/java"},
+ {"COLORTERM","1"},
+ {"LC_NAME","sv_SE.UTF-8"},
+ {"G_BROKEN_FILENAMES","1"},
+ {"LESSCLOSE","lessclose.sh %s %s"},
+ {"LC_TIME","sv_SE.UTF-8"},
+ {"DISPLAY","localhost:11.0"},
+ {"INFOPATH",
+ "/usr/local/info:/usr/share/info:/usr/info:/opt/gnome/share/info"},
+ {"LPDEST","lw5"},
+ {"PKG_CONFIG_PATH",
+ "/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:/usr/lib64/pkgconfig:/usr/share/pkgconfig:/opt/kde3/lib64/pkgconfig:/opt/gnome/lib64/pkgconfig:/opt/gnome/lib64/pkgconfig:/opt/gnome/share/pkgconfig"},
+ {"LESSOPEN","lessopen.sh %s"},
+ {"XDG_DATA_DIRS",
+ "/usr/local/share/:/usr/share/:/etc/opt/kde3/share/:/opt/kde3/share/:/opt/gnome/share/"},
+ {"ACLOCAL_FLAGS","-I /opt/gnome/share/aclocal"},
+ {"PRINTER","lw5"},
+ {"VISUAL","vim"},
+ {"GTK_PATH64",
+ "/usr/local/lib64/gtk-2.0:/opt/gnome/lib64/gtk-2.0:/usr/lib64/gtk-2.0"},
+ {"CVS_RSH","ssh"},
+ {"LOGIN_PROFILE_RUN","true"},
+ {"G_FILENAME_ENCODING","@locale,UTF-8,ISO-8859-15,CP1252"},
+ {"LESS","-M -I"},
+ {"MACHTYPE","x86_64-suse-linux"},
+ {"LOGNAME","otptest"},
+ {"GTK_PATH",
+ "/usr/local/lib/gtk-2.0:/opt/gnome/lib/gtk-2.0:/usr/lib/gtk-2.0"},
+ {"WINDOWMANAGER","/usr/X11R6/bin/gnome"},
+ {"LS_OPTIONS","-N --color=none -T 0"},
+ {"LESS_ADVANCED_PREPROCESSOR","no"},
+ {"OSTYPE","linux"},
+ {"QT_SYSTEM_DIR","/usr/share/desktop-data"},
+ {"JDK_HOME","/usr/lib64/jvm/java"},
+ {"SHLVL","1"},
+ {"HOME","/home/otptest"},
+ {"https_proxy","http://www-proxy.ericsson.se:8080"},
+ {"SDK_HOME","/usr/lib64/jvm/java"},
+ {"LC_MEASUREMENT","sv_SE.UTF-8"},
+ {"PYTHONSTARTUP","/etc/pythonstart"},
+ {"PROGNAME","erl"},
+ {"LANG","sv_SE.UTF-8"},
+ {"EDITOR","vim"},
+ {"JAVA_HOME","/usr/lib64/jvm/java"},
+ {"INPUTRC","/etc/inputrc"},
+ {"PWD", "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20"},
+ {"LC_IDENTIFICATION","sv_SE.UTF-8"},
+ {"JAVA_BINDIR","/usr/lib64/jvm/java/bin"},
+ {"SSH_SENDS_LOCALE","yes"},
+ {"CPU","x86_64"},
+ {"LC_MESSAGES","POSIX"},
+ {"MAIL","/var/mail/otptest"},
+ {"PATH",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/erts-5.10.3/bin:/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/bin:/opt/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/otp/patch/bin:/home/otp/obe/bin"},
+ {"MINICOM","-c on"},
+ {"XDG_CONFIG_DIRS",
+ "/usr/local/etc/xdg/:/etc/xdg/:/etc/opt/gnome/xdg/"},
+ {"CSHEDIT","emacs"},
+ {"PAGER","less"},
+ {"HOSTTYPE","x86_64"},
+ {"ENV","/home/otptest/.bashrc"},
+ {"ROOTDIR", "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp"},
+ {"XNLSPATH","/usr/X11R6/lib/X11/nls"},
+ {"LS_COLORS",[]},
+ {"LC_TELEPHONE","sv_SE.UTF-8"},
+ {"GROFF_NO_SGR","yes"},
+ {"JRE_HOME","/usr/lib64/jvm/java/jre"},
+ {"USER","otptest"},
+ {"SSH_TTY","/dev/pts/3"},
+ {"MORE","-sl"},
+ {"LC_NUMERIC","sv_SE.UTF-8"},
+ {"BINDIR",
+ "/ldisk/daily_build/r16b02_opu_c_Muacul100.2013-07-10_20/otp/erts-5.10.3/bin"},
+ {"PROFILEREAD","true"},
+ {"HISTSIZE","1000"},
+ {"HOST","duilin"},
+ {"TERM","xterm-256color"},
+ {"SHELL","/bin/sh"},
+ {"GNOME2_PATH","/usr/local:/opt/gnome:/usr"},
+ {"XKEYSYMDB","/usr/X11R6/lib/X11/XKeysymDB"},
+ {"HOSTNAME","duilin"},
+ {"LC_MONETARY","sv_SE.UTF-8"},
+ {"EMU","beam"},
+ {"LC_ADDRESS","sv_SE.UTF-8"},
+ {"LASER","lw5"},
+ {"NNTPSERVER","news"},
+ {"INFODIR","/usr/local/info:/usr/share/info:/usr/info"},
+ {"MANPATH",
+ "/usr/local/man:/usr/share/man:/usr/X11R6/man:/opt/gnome/share/man"},
+ {"LESSKEY","/etc/lesskey.bin"},
+ {"LC_PAPER","sv_SE.UTF-8"}]}]}.
diff --git a/lib/snmp/doc/src/notes.xml b/lib/snmp/doc/src/notes.xml
index 80de9738f1..21c417f0c1 100644
--- a/lib/snmp/doc/src/notes.xml
+++ b/lib/snmp/doc/src/notes.xml
@@ -34,6 +34,86 @@
<section>
+ <title>SNMP Development Toolkit 4.24.1</title>
+ <p>Version 4.24.1 supports code replacement in runtime from/to
+ version 4.24, 4.23.1 and 4.23. </p>
+
+ <section>
+ <title>Improvements and new features</title>
+ <p>-</p>
+
+<!--
+ <list type="bulleted">
+ <item>
+ <p>[agent,manager] Updated to support the new crypto interface. </p>
+ <p>Own Id: OTP-11009</p>
+ </item>
+
+ </list>
+-->
+
+ </section>
+
+ <section>
+ <title>Fixed Bugs and Malfunctions</title>
+<!--
+ <p>-</p>
+-->
+
+ <list type="bulleted">
+ <item>
+ <p>[agent] Reading the value of the vacmViewTreeFamilyMask returns
+ it in the wrong (internal bitlist) format. </p>
+ <p>The vacmViewTreeFamilyMask is defined as a bit string in the MIB
+ (OCTET STRING). Internally a bitlist (list of 1's and 0's,
+ see <seealso marker="snmp_agent_config_files#vacm">vacm config file</seealso>
+ for more info) is used.
+ However, the MIB implementation assumed the latter, effectively
+ rendering all attempts to read/set masks via SNMP unsuccessful. </p>
+ <p>Since the mask is used in hot paths (e.g. access permission checks
+ for each SNMP operation, the bitlist representation of the mask has
+ benefits (e.g. faster processing). Reading/writing the view mask
+ objects is less time-critical. Therefore, to fix the issue, convert
+ between the bitlist (internal) representation and bitstring
+ (external) when the vacmViewTreeFamilyMask objects are accessed. </p>
+ <p>Also, the check of the vacm config file was invalid with
+ regard to the mask value. It was assumed to be a proper oid, which
+ is not strictly the case (see bitlist above). </p>
+ <p>Own Id: OTP-11177</p>
+ <p>Stefan Zegenhagen</p>
+ </item>
+
+ <item>
+ <p>[agent] The counter increment function in the local-db was
+ incorrect. It did not handle counter wrap correctly. </p>
+ <p>Own Id: OTP-11192</p>
+ </item>
+
+ </list>
+
+ </section>
+
+ <section>
+ <title>Incompatibilities</title>
+ <p>-</p>
+
+<!--
+ <list type="bulleted">
+ <item>
+ <p>[manager] The old Addr-and-Port based API functions, previously
+ long deprecated and marked for deletion in R16B, has now been
+ removed. </p>
+ <p>Own Id: OTP-10027</p>
+ </item>
+
+ </list>
+-->
+ </section>
+
+ </section> <!-- 4.24.1 -->
+
+
+ <section>
<title>SNMP Development Toolkit 4.24</title>
<p>Version 4.24 supports code replacement in runtime from/to
version 4.23.1 and 4.23. </p>
diff --git a/lib/snmp/doc/src/snmp_agent_config_files.xml b/lib/snmp/doc/src/snmp_agent_config_files.xml
index bd5c537522..866b00b77b 100644
--- a/lib/snmp/doc/src/snmp_agent_config_files.xml
+++ b/lib/snmp/doc/src/snmp_agent_config_files.xml
@@ -4,7 +4,7 @@
<chapter>
<header>
<copyright>
- <year>1997</year><year>2011</year>
+ <year>1997</year><year>2013</year>
<holder>Ericsson AB. All Rights Reserved.</holder>
</copyright>
<legalnotice>
@@ -32,13 +32,15 @@
<file>snmp_agent_config_files.xml</file>
</header>
<p>All configuration data must be included in configuration files
- that are located in the configuration directory. The name of this
- directory is given in the <c>config_dir</c> configuration
- parameter. These files are read at start-up, and are used to
- initialize the SNMPv2-MIB or STANDARD-MIB, SNMP-FRAMEWORK-MIB,
- SNMP-MPD-MIB, SNMP-VIEW-BASED-ACM-MIB, SNMP-COMMUNITY-MIB,
- SNMP-USER-BASED-SM-MIB, SNMP-TARGET-MIB and SNMP-NOTIFICATION-MIB
- (refer to the <seealso marker="snmp_agent_funct_descr#management">Management of the Agent</seealso> for a description of the MIBs). </p>
+ that are located in the configuration directory. The name of this
+ directory is given in the <c>config_dir</c> configuration
+ parameter. These files are read at start-up, and are used to
+ initialize the SNMPv2-MIB or STANDARD-MIB, SNMP-FRAMEWORK-MIB,
+ SNMP-MPD-MIB, SNMP-VIEW-BASED-ACM-MIB, SNMP-COMMUNITY-MIB,
+ SNMP-USER-BASED-SM-MIB, SNMP-TARGET-MIB and SNMP-NOTIFICATION-MIB
+ (refer to the
+ <seealso marker="snmp_agent_funct_descr#management">Management of the Agent</seealso>
+ for a description of the MIBs). </p>
<p>The files are: </p>
<list type="bulleted">
<item>
@@ -79,35 +81,35 @@
</item>
</list>
<p>The directory where the configuration files are found is given as
- a parameter to the agent. </p>
+ a parameter to the agent. </p>
<p>The entry format in all files are Erlang terms, separated by a
- '<em>.</em>' and a <em>newline</em>. In the following sections, the
- formats of these terms are described. Comments may be specified as
- ordinary Erlang comments. </p>
+ '<em>.</em>' and a <em>newline</em>. In the following sections, the
+ formats of these terms are described. Comments may be specified as
+ ordinary Erlang comments. </p>
<p>Syntax errors in these files are discovered and reported with the
- function <c>config_err/2</c> of the error report module at start-up. </p>
-
+ function <c>config_err/2</c> of the error report module at start-up. </p>
+
+ <marker id="agent_information"></marker>
+
<section>
- <marker id="agent_information"></marker>
<title>Agent Information</title>
<p>The agent information should be stored in a file called
- <c>agent.conf</c>.
- </p>
- <p>Each entry is a tuple of size two:
- </p>
+ <c>agent.conf</c>. </p>
+ <p>Each entry is a tuple of size two:</p>
<p><c>{AgentVariable, Value}.</c></p>
<list type="bulleted">
- <item><c>AgentVariable</c> is one of the variables is
- SNMP-FRAMEWORK-MIB or one of the internal variables
- <c>intAgentUDPPort</c>, which defines which UDP port the agent
- listens to, or <c>intAgentIpAddress</c>, which defines the IP
- address of the agent.
+ <item>
+ <p><c>AgentVariable</c> is one of the variables is
+ SNMP-FRAMEWORK-MIB or one of the internal variables
+ <c>intAgentUDPPort</c>, which defines which UDP port the agent
+ listens to, or <c>intAgentIpAddress</c>, which defines the IP
+ address of the agent. </p>
</item>
- <item><c>Value</c> is the value for the variable.
+ <item>
+ <p><c>Value</c> is the value for the variable.</p>
</item>
</list>
- <p>The following example shows a <c>agent.conf</c> file:
- </p>
+ <p>The following example shows a <c>agent.conf</c> file: </p>
<pre>
{intAgentUDPPort, 4000}.
{intAgentIpAddress,[141,213,11,24]}.
@@ -115,49 +117,47 @@
{snmpEngineMaxPacketSize, 484}.
</pre>
<p>The value of <c>snmpEngineID</c> is a string, which for a
- deployed agent should have a very specific structure. See
- RFC 2271/2571 for details.
- </p>
+ deployed agent should have a very specific structure. See
+ RFC 2271/2571 for details.</p>
+
+ <marker id="context"></marker>
</section>
<section>
- <marker id="context"></marker>
<title>Contexts</title>
<p>The context information should be stored in a file called
- <c>context.conf</c>. The default context <c>""</c>
- need not be present.
- </p>
+ <c>context.conf</c>. The default context <c>""</c>
+ need not be present.</p>
<p>Each row defines a context in the agent. This information is
- used in the table <c>vacmContextTable</c> in the
- SNMP-VIEW-BASED-ACM-MIB.
- </p>
- <p>Each entry is a term:
- </p>
+ used in the table <c>vacmContextTable</c> in the
+ SNMP-VIEW-BASED-ACM-MIB.</p>
+ <p>Each entry is a term:</p>
<p><c>ContextName.</c></p>
<list type="bulleted">
- <item><c>ContextName</c> is a string.
+ <item>
+ <p><c>ContextName</c> is a string.</p>
</item>
</list>
+
+ <marker id="system_information"></marker>
</section>
<section>
- <marker id="system_information"></marker>
<title>System Information</title>
<p>The system information should be stored in a file called
- <c>standard.conf</c>.
- </p>
- <p>Each entry is a tuple of size two:
- </p>
+ <c>standard.conf</c>.</p>
+ <p>Each entry is a tuple of size two:</p>
<p><c>{SystemVariable, Value}.</c></p>
<list type="bulleted">
- <item><c>SystemVariable</c> is one of the variables in the
- system group, or <c>snmpEnableAuthenTraps</c>.
+ <item>
+ <p><c>SystemVariable</c> is one of the variables in the
+ system group, or <c>snmpEnableAuthenTraps</c>. </p>
</item>
- <item><c>Value</c> is the value for the variable.
+ <item>
+ <p><c>Value</c> is the value for the variable. </p>
</item>
</list>
- <p>The following example shows a valid <c>standard.conf</c> file:
- </p>
+ <p>The following example shows a valid <c>standard.conf</c> file: </p>
<pre>
{sysDescr, "Erlang SNMP agent"}.
{sysObjectID, [1,2,3]}.
@@ -167,59 +167,60 @@
{snmpEnableAuthenTraps, enabled}.
</pre>
<p>A value must be provided for all variables, which lack default
- values in the MIB.
- </p>
+ values in the MIB. </p>
+
+ <marker id="community"></marker>
</section>
<section>
- <marker id="community"></marker>
<title>Communities</title>
<p>The community information should be stored in a file called
- <c>community.conf</c>. It must be present if the agent is
- configured for SNMPv1 or SNMPv2c.
- </p>
+ <c>community.conf</c>. It must be present if the agent is
+ configured for SNMPv1 or SNMPv2c. </p>
<p>An SNMP <em>community</em> is a relationship between an SNMP
agent and a set of SNMP managers that defines authentication, access
control and proxy characteristics. </p>
<p>The corresponding table is <c>snmpCommunityTable</c> in the
- SNMP-COMMUNITY-MIB. </p>
+ SNMP-COMMUNITY-MIB. </p>
<p>Each entry is a term: </p>
- <p><c>{CommunityIndex, CommunityName, SecurityName, ContextName, TransportTag}.</c></p>
+ <p><c>{CommunityIndex, CommunityName, SecurityName, ContextName, TransportTag}.</c> </p>
<list type="bulleted">
- <item><c>CommunityIndex</c> is a non-empty string.
+ <item>
+ <p><c>CommunityIndex</c> is a non-empty string.</p>
</item>
- <item><c>CommunityName</c> is a string.
+ <item>
+ <p><c>CommunityName</c> is a string.</p>
</item>
- <item><c>SecurityName</c> is a string.
+ <item>
+ <p><c>SecurityName</c> is a string.</p>
</item>
- <item><c>ContextName</c> is a string.
+ <item>
+ <p><c>ContextName</c> is a string.</p>
</item>
- <item><c>TransportTag</c> is a string.
+ <item>
+ <p><c>TransportTag</c> is a string.</p>
</item>
</list>
+
+ <marker id="vacm"></marker>
</section>
<section>
- <marker id="vacm"></marker>
<title>MIB Views for VACM</title>
<p>The information about MIB Views for VACM should be stored in a
- file called
- <c>vacm.conf</c>.
- </p>
+ file called <c>vacm.conf</c>.</p>
<p>The corresponding tables are <c>vacmSecurityToGroupTable</c>,
- <c>vacmAccessTable</c> and <c>vacmViewTreeFamilyTable</c> in the
- SNMP-VIEW-BASED-ACM-MIB.
- </p>
+ <c>vacmAccessTable</c> and <c>vacmViewTreeFamilyTable</c> in the
+ SNMP-VIEW-BASED-ACM-MIB.</p>
<p>Each entry is one of the terms, one entry corresponds to one
- row in one of the tables.
- </p>
+ row in one of the tables.</p>
<p><c>{vacmSecurityToGroup, SecModel, SecName, GroupName}.</c></p>
<p><c>{vacmAccess, GroupName, Prefix, SecModel, SecLevel, Match, ReadView, WriteView, NotifyView}.</c></p>
<p><c>{vacmViewTreeFamily, ViewIndex, ViewSubtree, ViewStatus, ViewMask}.</c></p>
<list type="bulleted">
<item>
<p><c>SecModel</c> is <c>any</c>, <c>v1</c>, <c>v2c</c>, or
- <c>usm</c>.</p>
+ <c>usm</c>.</p>
</item>
<item>
<p><c>SecName</c> is a string.</p>
@@ -232,7 +233,7 @@
</item>
<item>
<p><c>SecLevel</c> is <c>noAuthNoPriv</c>, <c>authNoPriv</c>,
- or <c>authPriv</c></p>
+ or <c>authPriv</c></p>
</item>
<item>
<p><c>Match</c> is <c>prefix</c> or <c>exact</c>.</p>
@@ -244,8 +245,7 @@
<p><c>WriteView</c> is a string.</p>
</item>
<item>
- <p><c>NotifyView</c> is a string.
- </p>
+ <p><c>NotifyView</c> is a string.</p>
</item>
<item>
<p><c>ViewIndex</c> is an integer.</p>
@@ -258,33 +258,29 @@
</item>
<item>
<p><c>ViewMask</c> is either <c>null</c> or a list of ones and
- zeros. Ones nominate that an exact match is used for this
- sub-identifier. Zeros are wild-cards which match any
- sub-identifier. If the mask is shorter than the sub-tree, the
- tail is regarded as all ones. <c>null</c> is shorthand for a
- mask with all ones.</p>
+ zeros. Ones nominate that an exact match is used for this
+ sub-identifier. Zeros are wild-cards which match any
+ sub-identifier. If the mask is shorter than the sub-tree, the
+ tail is regarded as all ones. <c>null</c> is shorthand for a
+ mask with all ones. </p>
</item>
</list>
+
+ <marker id="usm"></marker>
</section>
<section>
- <marker id="usm"></marker>
<title>Security data for USM</title>
<p>The information about Security data for USM should be stored in a
- file called
- <c>usm.conf</c>, which must be present if the agent is configured
- for SNMPv3.
- </p>
+ file called <c>usm.conf</c>, which must be present if the agent is
+ configured for SNMPv3. </p>
<p>The corresponding table is <c>usmUserTable</c> in the
- SNMP-USER-BASED-SM-MIB.
- </p>
- <p>Each entry is a term:
- </p>
+ SNMP-USER-BASED-SM-MIB.</p>
+ <p>Each entry is a term:</p>
<p><c>{EngineID, UserName, SecName, Clone, AuthP, AuthKeyC, OwnAuthKeyC, PrivP, PrivKeyC, OwnPrivKeyC, Public, AuthKey, PrivKey}.</c></p>
<list type="bulleted">
<item>
- <p><c>EngineID</c> is a string.
- </p>
+ <p><c>EngineID</c> is a string.</p>
</item>
<item>
<p><c>UserName</c> is a string.</p>
@@ -297,7 +293,7 @@
</item>
<item>
<p><c>AuthP</c> is a <c>usmNoAuthProtocol</c>,
- <c>usmHMACMD5AuthProtocol</c>, or <c>usmHMACSHAAuthProtocol</c>.</p>
+ <c>usmHMACMD5AuthProtocol</c>, or <c>usmHMACSHAAuthProtocol</c>.</p>
</item>
<item>
<p><c>AuthKeyC</c> is a string.</p>
@@ -307,7 +303,7 @@
</item>
<item>
<p><c>PrivP</c> is a <c>usmNoPrivProtocol</c>,
- <c>usmDESPrivProtocol</c> or <c>usmAesCfb128Protocol</c>.</p>
+ <c>usmDESPrivProtocol</c> or <c>usmAesCfb128Protocol</c>.</p>
</item>
<item>
<p><c>PrivKeyC</c> is a string.</p>
@@ -319,66 +315,59 @@
<p><c>Public</c> is a string.</p>
</item>
<item>
- <p><c>AuthKey</c> is a list (of integer). This is the User's secret
- localized authentication key. It is not visible in the MIB. The length
- of this key needs to be 16 if <c>usmHMACMD5AuthProtocol</c> is used, and
- 20 if <c>usmHMACSHAAuthProtocol</c> is used.</p>
+ <p><c>AuthKey</c> is a list (of integer). This is the User's secret
+ localized authentication key. It is not visible in the MIB. The length
+ of this key needs to be 16 if <c>usmHMACMD5AuthProtocol</c> is used,
+ and 20 if <c>usmHMACSHAAuthProtocol</c> is used.</p>
</item>
<item>
<p><c>PrivKey</c> is a list (of integer). This is the User's secret
- localized encryption key. It is not visible in the MIB. The length
- of this key needs to be 16 if <c>usmDESPrivProtocol</c> or
- <c>usmAesCfb128Protocol</c> is used.
- </p>
+ localized encryption key. It is not visible in the MIB. The length
+ of this key needs to be 16 if <c>usmDESPrivProtocol</c> or
+ <c>usmAesCfb128Protocol</c> is used. </p>
</item>
</list>
+
+ <marker id="notify"></marker>
</section>
<section>
- <marker id="notify"></marker>
<title>Notify Definitions</title>
<p>The information about Notify Definitions should be stored in a
- file called
- <c>notify.conf</c>.
- </p>
+ file called <c>notify.conf</c>. </p>
<p>The corresponding table is <c>snmpNotifyTable</c> in the
- SNMP-NOTIFICATION-MIB.
- </p>
- <p>Each entry is a term:
- </p>
+ SNMP-NOTIFICATION-MIB.</p>
+ <p>Each entry is a term:</p>
<p><c>{NotifyName, Tag, Type}.</c></p>
<list type="bulleted">
<item>
- <p><c>NotifyName</c> is a unique non-empty string.
- </p>
+ <p><c>NotifyName</c> is a unique non-empty string.</p>
</item>
<item>
- <p><c>Tag</c> is a string.
- </p>
+ <p><c>Tag</c> is a string.</p>
</item>
<item>
- <p><c>Type</c> is <c>trap</c> or <c>inform</c>.
- </p>
+ <p><c>Type</c> is <c>trap</c> or <c>inform</c>.</p>
</item>
</list>
+
+ <marker id="target_addr"></marker>
</section>
<section>
- <marker id="target_addr"></marker>
<title>Target Address Definitions</title>
<p>The information about Target Address Definitions should be
- stored in a file called <c>target_addr.conf</c>. </p>
+ stored in a file called <c>target_addr.conf</c>. </p>
<p>The corresponding tables are <c>snmpTargetAddrTable</c> in the
- SNMP-TARGET-MIB and <c>snmpTargetAddrExtTable</c> in the
- SNMP-COMMUNITY-MIB. </p>
+ SNMP-TARGET-MIB and <c>snmpTargetAddrExtTable</c> in the
+ SNMP-COMMUNITY-MIB. </p>
<p>Each entry is a term: </p>
<p><c>{TargetName, Ip, Udp, Timeout, RetryCount, TagList, ParamsName, EngineId}.</c> <br></br> or <br></br>
<c>{TargetName, Ip, Udp, Timeout, RetryCount, TagList, ParamsName, EngineId, TMask, MaxMessageSize}.</c> <br></br> or <br></br>
-<c>{TargetName, Domain, Ip, Udp, Timeout, RetryCount, TagList, ParamsName, EngineId, TMask, MaxMessageSize}.</c></p>
+<c>{TargetName, Domain, Ip, Udp, Timeout, RetryCount, TagList, ParamsName, EngineId, TMask, MaxMessageSize}.</c> </p>
<list type="bulleted">
<item>
- <p><c>TargetName</c> is a unique non-empty string.
- </p>
+ <p><c>TargetName</c> is a unique non-empty string. </p>
</item>
<item>
<p><c>Domain</c> is one of the atoms:
@@ -414,40 +403,37 @@
</item>
</list>
<p>Note that if <c>EngineId</c> has the value <c>discovery</c>,
- the agent cannot send
- <c>inform</c> messages to that manager until it has performed the
- <em>discovery</em> process with that manager. </p>
+ the agent cannot send
+ <c>inform</c> messages to that manager until it has performed the
+ <em>discovery</em> process with that manager. </p>
+
+ <marker id="target_params"></marker>
</section>
<section>
- <marker id="target_params"></marker>
<title>Target Parameters Definitions</title>
<p>The information about Target Parameters Definitions should be
- stored in a file called <c>target_params.conf</c>. </p>
+ stored in a file called <c>target_params.conf</c>. </p>
<p>The corresponding table is <c>snmpTargetParamsTable</c> in the
- SNMP-TARGET-MIB. </p>
+ SNMP-TARGET-MIB. </p>
<p>Each entry is a term: </p>
<p><c>{ParamsName, MPModel, SecurityModel, SecurityName, SecurityLevel}.</c></p>
<list type="bulleted">
<item>
- <p><c>ParamsName</c> is a unique non-empty string.
- </p>
+ <p><c>ParamsName</c> is a unique non-empty string. </p>
</item>
<item>
<p><c>MPModel</c> is <c>v1</c>, <c>v2c</c> or <c>v3</c></p>
</item>
<item>
- <p><c>SecurityModel</c> is <c>v1</c>, <c>v2c</c>, or <c>usm</c>.
- </p>
+ <p><c>SecurityModel</c> is <c>v1</c>, <c>v2c</c>, or <c>usm</c>.</p>
</item>
<item>
- <p><c>SecurityName</c> is a string.
- </p>
+ <p><c>SecurityName</c> is a string.</p>
</item>
<item>
<p><c>SecurityLevel</c> is <c>noAuthNoPriv</c>, <c>authNoPriv</c>
- or <c>authPriv</c>.
- </p>
+ or <c>authPriv</c>. </p>
</item>
</list>
</section>
diff --git a/lib/snmp/src/agent/snmp_view_based_acm_mib.erl b/lib/snmp/src/agent/snmp_view_based_acm_mib.erl
index ad9540e886..c0177b1cea 100644
--- a/lib/snmp/src/agent/snmp_view_based_acm_mib.erl
+++ b/lib/snmp/src/agent/snmp_view_based_acm_mib.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1999-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1999-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -49,6 +49,14 @@
-endif.
+-type internal_view_mask() :: null | [internal_view_mask_element()].
+-type internal_view_mask_element() :: 0 | 1.
+
+-type external_view_mask() :: octet_string(). % At most length of 16 octet
+-type octet_string() :: [octet()].
+-type octet() :: byte().
+
+
%%-----------------------------------------------------------------
%% Func: configure/1
%% Args: Dir is the directory where the configuration files are found.
@@ -160,14 +168,7 @@ check_vacm({vacmViewTreeFamily, ViewName, Tree, Type, Mask}) ->
{ok, TypeVal} =
snmp_conf:check_atom(Type, [{included, ?view_included},
{excluded, ?view_excluded}]),
- MaskVal =
- case (catch snmp_conf:check_atom(Mask, [{null, []}])) of
- {error, _} ->
- snmp_conf:check_oid(Mask),
- Mask;
- {ok, X} ->
- X
- end,
+ {ok, MaskVal} = snmp_conf:check_imask(Mask),
Vacm = {ViewName, Tree, MaskVal, TypeVal,
?'StorageType_nonVolatile', ?'RowStatus_active'},
{ok, {vacmViewTreeFamily, Vacm}};
@@ -194,8 +195,8 @@ init_tabs(Sec2Group, Access, View) ->
ok.
init_sec2group_table([Row | T]) ->
-%% ?vtrace("init security-to-group table: "
-%% "~n Row: ~p",[Row]),
+ %% ?vtrace("init security-to-group table: "
+ %% "~n Row: ~p",[Row]),
Key1 = element(1, Row),
Key2 = element(2, Row),
Key = [Key1, length(Key2) | Key2],
@@ -953,13 +954,23 @@ verify_vacmViewTreeFamilyTable_col(?vacmViewTreeFamilySubtree, Tree) ->
wrongValue(?vacmViewTreeFamilySubtree)
end;
verify_vacmViewTreeFamilyTable_col(?vacmViewTreeFamilyMask, Mask) ->
+ %% Mask here is in the "external" format. That is, according
+ %% to the MIB, which means that its an OCTET STRING of max 16
+ %% octets.
+ %% We however store the mask as a list of 1's (exact) and
+ %% 0's (wildcard), which means we have to convert the mask.
case Mask of
- null -> [];
- [] -> [];
+ %% The Mask can only have this value if the vacmViewTreeFamilyTable
+ %% is called locally!
+ null ->
+ [];
+ [] ->
+ [];
_ ->
- case (catch snmp_conf:check_oid(Mask)) of
- ok ->
- Mask;
+ %% Check and convert to our internal format
+ case check_mask(Mask) of
+ {ok, IMask} ->
+ IMask;
_ ->
wrongValue(?vacmViewTreeFamilyMask)
end
@@ -977,6 +988,60 @@ verify_vacmViewTreeFamilyTable_col(_, Val) ->
Val.
+check_mask(Mask) when is_list(Mask) andalso (length(Mask) =< 16) ->
+ try
+ begin
+ {ok, emask2imask(Mask)}
+ end
+ catch
+ throw:{error, _} ->
+ {error, {bad_mask, Mask}};
+ T:E ->
+ {error, {bad_mask, Mask, T, E}}
+ end;
+check_mask(BadMask) ->
+ {error, {bad_mask, BadMask}}.
+
+-spec emask2imask(EMask :: external_view_mask()) ->
+ IMask :: internal_view_mask().
+
+%% Convert an External Mask (OCTET STRING) to Internal Mask (list of 0 or 1)
+emask2imask(EMask) ->
+ lists:flatten([octet2bits(Octet) || Octet <- EMask]).
+
+octet2bits(Octet)
+ when is_integer(Octet) andalso (Octet >= 16#00) andalso (16#FF >= Octet) ->
+ <<A:1, B:1, C:1, D:1, E:1, F:1, G:1, H:1>> = <<Octet>>,
+ [A, B, C, D, E, F, G, H];
+octet2bits(BadOctet) ->
+ throw({error, {bad_octet, BadOctet}}).
+
+-spec imask2emask(IMask :: internal_view_mask()) ->
+ EMask :: external_view_mask().
+
+%% Convert an Internal Mask (list of 0 or 1) to External Mask (OCTET STRING)
+imask2emask(IMask) ->
+ imask2emask(IMask, []).
+
+imask2emask([], EMask) ->
+ lists:reverse(EMask);
+imask2emask(IMask, EMask) ->
+ %% Make sure we have atleast 8 bits
+ %% (maybe extend with 1's)
+ IMask2 =
+ case length(IMask) of
+ Small when Small < 8 ->
+ IMask ++ lists:duplicate(8-Small, 1);
+ _ ->
+ IMask
+ end,
+ %% Extract 8 bits
+ [A, B, C, D, E, F, G, H | IMaskRest] = IMask2,
+ <<Octet:8>> = <<A:1, B:1, C:1, D:1, E:1, F:1, G:1, H:1>>,
+ imask2emask(IMaskRest, [Octet | EMask]).
+
+
+
table_next(Name, RestOid) ->
snmp_generic:table_next(db(Name), RestOid).
@@ -1014,11 +1079,41 @@ stc(vacmSecurityToGroupTable) -> ?vacmSecurityToGroupStorageType;
stc(vacmViewTreeFamilyTable) -> ?vacmViewTreeFamilyStorageType.
next(Name, RowIndex, Cols) ->
- snmp_generic:handle_table_next(db(Name), RowIndex, Cols,
- fa(Name), foi(Name), noc(Name)).
+ Result = snmp_generic:handle_table_next(db(Name), RowIndex, Cols,
+ fa(Name), foi(Name), noc(Name)),
+ externalize_next(Name, Result).
get(Name, RowIndex, Cols) ->
- snmp_generic:handle_table_get(db(Name), RowIndex, Cols, foi(Name)).
+ Result = snmp_generic:handle_table_get(db(Name), RowIndex, Cols,
+ foi(Name)),
+ externalize_get(Name, Cols, Result).
+
+
+externalize_next(Name, Result) when is_list(Result) ->
+ F = fun({[Col | _] = Idx, Val}) -> {Idx, externalize(Name, Col, Val)};
+ (Other) -> Other
+ end,
+ [F(R) || R <- Result];
+externalize_next(_, Result) ->
+ Result.
+
+
+externalize_get(Name, Cols, Result) when is_list(Result) ->
+ %% Patch returned values
+ F = fun({Col, {value, Val}}) -> {value, externalize(Name, Col, Val)};
+ ({_, Other}) -> Other
+ end,
+ %% Merge column numbers and return values. there must be as much
+ %% return values as there are columns requested. And then patch all values
+ [F(R) || R <- lists:zip(Cols, Result)];
+externalize_get(_, _, Result) ->
+ Result.
+
+externalize(vacmViewTreeFamilyTable, ?vacmViewTreeFamilyMask, Val) ->
+ imask2emask(Val);
+externalize(_, _, Val) ->
+ Val.
+
wrongValue(V) -> throw({wrongValue, V}).
diff --git a/lib/snmp/src/agent/snmpa_local_db.erl b/lib/snmp/src/agent/snmpa_local_db.erl
index 2c0cad807a..5198c6ec4e 100644
--- a/lib/snmp/src/agent/snmpa_local_db.erl
+++ b/lib/snmp/src/agent/snmpa_local_db.erl
@@ -583,7 +583,7 @@ handle_cast({variable_inc, Name, Db, N}, State) ->
{value, Val} -> Val;
_ -> 0
end,
- insert(Db, Name, M+N rem 4294967296, State),
+ insert(Db, Name, (M+N) rem 4294967296, State),
{noreply, State};
handle_cast({verbosity,Verbosity}, State) ->
diff --git a/lib/snmp/src/app/snmp.appup.src b/lib/snmp/src/app/snmp.appup.src
index 7ffa4a725d..16b626111b 100644
--- a/lib/snmp/src/app/snmp.appup.src
+++ b/lib/snmp/src/app/snmp.appup.src
@@ -17,18 +17,44 @@
%% %CopyrightEnd%
%%
+
{"%VSN%",
%% ----- U p g r a d e -------------------------------------------------------
+%% Instruction examples:
+%% {restart_application, snmp}
+%% {load_module, snmp_pdus, soft_purge, soft_purge, []}
+%% {update, snmpa_local_db, soft, soft_purge, soft_purge, []}
+%% {add_module, snmpm_net_if_mt}
+
[
+ {"4.24",
+ [
+ {load_module, snmp_conf, soft_purge, soft_purge, []},
+ {load_module, snmp_view_based_acm_mib, soft_purge, soft_purge,
+ [snmp_conf]},
+ {update, snmpa_local_db, soft, soft_purge, soft_purge, []}
+ ]
+ },
{"4.23.1", [{restart_application, snmp}]},
{"4.23", [{restart_application, snmp}]}
],
%% ------D o w n g r a d e ---------------------------------------------------
+%% Instruction examples:
+%% {remove, {snmpm_net_if_mt, soft_purge, soft_purge}}
+
[
+ {"4.24",
+ [
+ {load_module, snmp_conf, soft_purge, soft_purge, []},
+ {load_module, snmp_view_based_acm_mib, soft_purge, soft_purge,
+ [snmp_conf]},
+ {update, snmpa_local_db, soft, soft_purge, soft_purge, []}
+ ]
+ },
{"4.23.1", [{restart_application, snmp}]},
{"4.23", [{restart_application, snmp}]}
]
diff --git a/lib/snmp/src/misc/snmp_conf.erl b/lib/snmp/src/misc/snmp_conf.erl
index e1e7fab57b..46625989d5 100644
--- a/lib/snmp/src/misc/snmp_conf.erl
+++ b/lib/snmp/src/misc/snmp_conf.erl
@@ -1,7 +1,7 @@
%%
%% %CopyrightBegin%
%%
-%% Copyright Ericsson AB 1996-2012. All Rights Reserved.
+%% Copyright Ericsson AB 1996-2013. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
@@ -50,6 +50,7 @@
check_packet_size/1,
check_oid/1,
+ check_imask/1, check_emask/1,
check_mp_model/1,
check_sec_model/1, check_sec_model/2, check_sec_model/3,
@@ -488,6 +489,7 @@ do_check_timer(WaitFor, Factor, Incr, Retry) ->
check_integer(Retry, {gte, 0}),
ok.
+
%% ---------
all_domains() ->
@@ -618,6 +620,37 @@ check_oid(X) ->
%% ---------
+%% Check a (view) mask in the internal form (all 0 and 1):
+check_imask(null) ->
+ {ok, []};
+check_imask(IMask) when is_list(IMask) ->
+ do_check_imask(IMask),
+ {ok, IMask}.
+
+do_check_imask([0|IMask]) ->
+ do_check_imask(IMask);
+do_check_imask([1|IMask]) ->
+ do_check_imask(IMask);
+do_check_imask([X|_]) ->
+ error({invalid_internal_mask_element, X}).
+
+
+%% Check a (view) mask in the external form (according to MIB,
+%% an OCTET STRING of at most length 16).
+check_emask(EMask) when is_list(EMask) andalso (length(EMask) =< 16) ->
+ do_check_emask(EMask).
+
+do_check_emask([]) ->
+ ok;
+do_check_emask([X|EMask])
+ when is_integer(X) andalso (X >= 16#00) andalso (X =< 16#FF) ->
+ do_check_emask(EMask);
+do_check_emask([X|_]) ->
+ error({invalid_external_mask_element, X}).
+
+
+%% ---------
+
all_integer([H|T]) when is_integer(H) -> all_integer(T);
all_integer([_H|_T]) -> false;
all_integer([]) -> true.
diff --git a/lib/snmp/test/Makefile b/lib/snmp/test/Makefile
index 546d46a002..f22b7ea8ee 100644
--- a/lib/snmp/test/Makefile
+++ b/lib/snmp/test/Makefile
@@ -86,7 +86,7 @@ RELSYSDIR = $(RELEASE_PATH)/snmp_test
# SNMP FLAGS
# ----------------------------------------------------
ifeq ($(SNMP_DEBUG),)
- SNMP_DEBUG = d
+ # SNMP_DEBUG = d
endif
ifeq ($(SNMP_DEBUG),e)
diff --git a/lib/snmp/vsn.mk b/lib/snmp/vsn.mk
index 0e48e7ea56..e987649e11 100644
--- a/lib/snmp/vsn.mk
+++ b/lib/snmp/vsn.mk
@@ -18,6 +18,6 @@
# %CopyrightEnd%
APPLICATION = snmp
-SNMP_VSN = 4.24
+SNMP_VSN = 4.24.1
PRE_VSN =
APP_VSN = "$(APPLICATION)-$(SNMP_VSN)$(PRE_VSN)"
diff --git a/lib/ssh/doc/src/ssh.xml b/lib/ssh/doc/src/ssh.xml
index bd0d3d49dd..141d3df38e 100644
--- a/lib/ssh/doc/src/ssh.xml
+++ b/lib/ssh/doc/src/ssh.xml
@@ -88,6 +88,7 @@
number for SSH.</d>
<v>Options = [{Option, Value}]</v>
<v>Timeout = infinity | integer(milliseconds)</v>
+ <d>Negotiation timeout, for connection timeout use the option <c>{connect_timeout, timeout()}</c>.</d>
</type>
<desc>
<p>Connects to an SSH server. No channel is started. This is done
diff --git a/lib/ssh/src/ssh.hrl b/lib/ssh/src/ssh.hrl
index da5750b6c3..4fd347ba8f 100644
--- a/lib/ssh/src/ssh.hrl
+++ b/lib/ssh/src/ssh.hrl
@@ -127,7 +127,8 @@
userauth_supported_methods , %
userauth_methods,
userauth_preference,
- available_host_keys
+ available_host_keys,
+ authenticated = false
}).
-record(alg,
diff --git a/lib/ssh/src/ssh_connection_handler.erl b/lib/ssh/src/ssh_connection_handler.erl
index df6175e27c..9de4dd5967 100644
--- a/lib/ssh/src/ssh_connection_handler.erl
+++ b/lib/ssh/src/ssh_connection_handler.erl
@@ -426,10 +426,10 @@ userauth(#ssh_msg_userauth_info_response{} = Msg,
language = "en"}, State)
end;
-userauth(#ssh_msg_userauth_success{}, #state{ssh_params = #ssh{role = client},
+userauth(#ssh_msg_userauth_success{}, #state{ssh_params = #ssh{role = client} = Ssh,
manager = Pid} = State) ->
Pid ! ssh_connected,
- {next_state, connected, next_packet(State)};
+ {next_state, connected, next_packet(State#state{ssh_params = Ssh#ssh{authenticated = true}})};
userauth(#ssh_msg_userauth_failure{},
#state{ssh_params = #ssh{role = client,
diff --git a/lib/ssh/src/ssh_transport.erl b/lib/ssh/src/ssh_transport.erl
index beaffdc025..682d766d99 100644
--- a/lib/ssh/src/ssh_transport.erl
+++ b/lib/ssh/src/ssh_transport.erl
@@ -206,6 +206,7 @@ key_exchange_init_msg(Ssh0) ->
kex_init(#ssh{role = Role, opts = Opts, available_host_keys = HostKeyAlgs}) ->
Random = ssh_bits:random(16),
Compression = case proplists:get_value(compression, Opts, none) of
+ openssh_zlib -> ["[email protected]", "none"];
zlib -> ["zlib", "none"];
none -> ["none", "zlib"]
end,
@@ -855,13 +856,14 @@ decrypt(#ssh{decrypt = 'aes128-cbc', decrypt_keys = Key,
IV = crypto:next_iv(aes_cbc, Data),
{Ssh#ssh{decrypt_ctx = IV}, Dec}.
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Compression
%%
-%% none REQUIRED no compression
-%% zlib OPTIONAL ZLIB (LZ77) compression
+%% none REQUIRED no compression
+%% zlib OPTIONAL ZLIB (LZ77) compression
+%% openssh_zlib OPTIONAL ZLIB (LZ77) compression
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
compress_init(SSH) ->
compress_init(SSH, 1).
@@ -870,19 +872,32 @@ compress_init(#ssh{compress = none} = Ssh, _) ->
compress_init(#ssh{compress = zlib} = Ssh, Level) ->
Zlib = zlib:open(),
ok = zlib:deflateInit(Zlib, Level),
+ {ok, Ssh#ssh{compress_ctx = Zlib}};
+compress_init(#ssh{compress = '[email protected]'} = Ssh, Level) ->
+ Zlib = zlib:open(),
+ ok = zlib:deflateInit(Zlib, Level),
{ok, Ssh#ssh{compress_ctx = Zlib}}.
-
compress_final(#ssh{compress = none} = Ssh) ->
{ok, Ssh};
compress_final(#ssh{compress = zlib, compress_ctx = Context} = Ssh) ->
zlib:close(Context),
+ {ok, Ssh#ssh{compress = none, compress_ctx = undefined}};
+compress_final(#ssh{compress = '[email protected]', authenticated = false} = Ssh) ->
+ {ok, Ssh};
+compress_final(#ssh{compress = '[email protected]', compress_ctx = Context, authenticated = true} = Ssh) ->
+ zlib:close(Context),
{ok, Ssh#ssh{compress = none, compress_ctx = undefined}}.
compress(#ssh{compress = none} = Ssh, Data) ->
{Ssh, Data};
compress(#ssh{compress = zlib, compress_ctx = Context} = Ssh, Data) ->
Compressed = zlib:deflate(Context, Data, sync),
+ {Ssh, list_to_binary(Compressed)};
+compress(#ssh{compress = '[email protected]', authenticated = false} = Ssh, Data) ->
+ {Ssh, Data};
+compress(#ssh{compress = '[email protected]', compress_ctx = Context, authenticated = true} = Ssh, Data) ->
+ Compressed = zlib:deflate(Context, Data, sync),
{Ssh, list_to_binary(Compressed)}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -894,18 +909,32 @@ decompress_init(#ssh{decompress = none} = Ssh) ->
decompress_init(#ssh{decompress = zlib} = Ssh) ->
Zlib = zlib:open(),
ok = zlib:inflateInit(Zlib),
+ {ok, Ssh#ssh{decompress_ctx = Zlib}};
+decompress_init(#ssh{decompress = '[email protected]'} = Ssh) ->
+ Zlib = zlib:open(),
+ ok = zlib:inflateInit(Zlib),
{ok, Ssh#ssh{decompress_ctx = Zlib}}.
decompress_final(#ssh{decompress = none} = Ssh) ->
{ok, Ssh};
decompress_final(#ssh{decompress = zlib, decompress_ctx = Context} = Ssh) ->
zlib:close(Context),
+ {ok, Ssh#ssh{decompress = none, decompress_ctx = undefined}};
+decompress_final(#ssh{decompress = '[email protected]', authenticated = false} = Ssh) ->
+ {ok, Ssh};
+decompress_final(#ssh{decompress = '[email protected]', decompress_ctx = Context, authenticated = true} = Ssh) ->
+ zlib:close(Context),
{ok, Ssh#ssh{decompress = none, decompress_ctx = undefined}}.
decompress(#ssh{decompress = none} = Ssh, Data) ->
{Ssh, Data};
decompress(#ssh{decompress = zlib, decompress_ctx = Context} = Ssh, Data) ->
Decompressed = zlib:inflate(Context, Data),
+ {Ssh, list_to_binary(Decompressed)};
+decompress(#ssh{decompress = '[email protected]', authenticated = false} = Ssh, Data) ->
+ {Ssh, Data};
+decompress(#ssh{decompress = '[email protected]', decompress_ctx = Context, authenticated = true} = Ssh, Data) ->
+ Decompressed = zlib:inflate(Context, Data),
{Ssh, list_to_binary(Decompressed)}.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/lib/ssh/test/ssh_basic_SUITE.erl b/lib/ssh/test/ssh_basic_SUITE.erl
index 93029c5038..0aa60624bf 100644
--- a/lib/ssh/test/ssh_basic_SUITE.erl
+++ b/lib/ssh/test/ssh_basic_SUITE.erl
@@ -48,8 +48,8 @@ all() ->
close].
groups() ->
- [{dsa_key, [], [send, exec, exec_compressed, shell, known_hosts, idle_time, rekey]},
- {rsa_key, [], [send, exec, exec_compressed, shell, known_hosts, idle_time, rekey]},
+ [{dsa_key, [], [send, exec, exec_compressed, shell, known_hosts, idle_time, rekey, openssh_zlib_basic_test]},
+ {rsa_key, [], [send, exec, exec_compressed, shell, known_hosts, idle_time, rekey, openssh_zlib_basic_test]},
{dsa_pass_key, [], [pass_phrase]},
{rsa_pass_key, [], [pass_phrase]},
{internal_error, [], [internal_error]}
@@ -493,7 +493,24 @@ close(Config) when is_list(Config) ->
exit(CM, {shutdown, normal}),
ok = ssh:close(CM).
-
+
+openssh_zlib_basic_test() ->
+ [{doc, "Test basic connection with openssh_zlib"}].
+openssh_zlib_basic_test(Config) ->
+ SystemDir = filename:join(?config(priv_dir, Config), system),
+ UserDir = ?config(priv_dir, Config),
+
+ {Pid, Host, Port} = ssh_test_lib:daemon([{system_dir, SystemDir},
+ {user_dir, UserDir},
+ {failfun, fun ssh_test_lib:failfun/2}]),
+ ConnectionRef =
+ ssh_test_lib:connect(Host, Port, [{silently_accept_hosts, true},
+ {user_dir, UserDir},
+ {user_interaction, false},
+ {compression, openssh_zlib}]),
+ ok = ssh:close(ConnectionRef),
+ ssh:stop_daemon(Pid).
+
%%--------------------------------------------------------------------
%% Internal functions ------------------------------------------------
%%--------------------------------------------------------------------
diff --git a/lib/ssl/doc/src/notes.xml b/lib/ssl/doc/src/notes.xml
index 8875d07535..301ff21068 100644
--- a/lib/ssl/doc/src/notes.xml
+++ b/lib/ssl/doc/src/notes.xml
@@ -25,7 +25,6 @@
<file>notes.xml</file>
</header>
<p>This document describes the changes made to the SSL application.</p>
-
<section><title>SSL 5.3</title>
<section><title>Fixed Bugs and Malfunctions</title>
@@ -100,7 +99,6 @@
</section>
<section><title>SSL 5.2.1</title>
-
<section><title>Improvements and New Features</title>
<list>
<item>
@@ -126,9 +124,20 @@
</section>
</section>
-
+<section><title>SSL 5.1.2.1</title>
+<section><title>Improvements and New Features</title>
+<list>
+ <item>
+ <p>
+ Make log_alert configurable as option in ssl, SSLLogLevel
+ added as option to inets conf file</p>
+ <p>
+ Own Id: OTP-11259</p>
+ </item>
+</list>
+</section>
+</section>
<section><title>SSL 5.2</title>
-
<section><title>Fixed Bugs and Malfunctions</title>
<list>
<item>
diff --git a/lib/ssl/src/ssl.erl b/lib/ssl/src/ssl.erl
index 0c1e47311d..dc6898d001 100644
--- a/lib/ssl/src/ssl.erl
+++ b/lib/ssl/src/ssl.erl
@@ -219,4 +219,3 @@ format_error(Error) ->
random_bytes(N) ->
tls:random_bytes(N).
-
diff --git a/lib/ssl/src/ssl_internal.hrl b/lib/ssl/src/ssl_internal.hrl
index 14db4a6067..de8d20d399 100644
--- a/lib/ssl/src/ssl_internal.hrl
+++ b/lib/ssl/src/ssl_internal.hrl
@@ -111,7 +111,8 @@
%% This option should only be set to true by inet_tls_dist
erl_dist = false,
next_protocols_advertised = undefined, %% [binary()],
- next_protocol_selector = undefined %% fun([binary()]) -> binary())
+ next_protocol_selector = undefined, %% fun([binary()]) -> binary())
+ log_alert
}).
-record(socket_options,
diff --git a/lib/ssl/src/tls.erl b/lib/ssl/src/tls.erl
index bb02695c12..b220a48f73 100644
--- a/lib/ssl/src/tls.erl
+++ b/lib/ssl/src/tls.erl
@@ -663,7 +663,8 @@ handle_options(Opts0, _Role) ->
handle_option(next_protocols_advertised, Opts, undefined),
next_protocol_selector =
make_next_protocol_selector(
- handle_option(client_preferred_next_protocols, Opts, undefined))
+ handle_option(client_preferred_next_protocols, Opts, undefined)),
+ log_alert = handle_option(log_alert, Opts, true)
},
CbInfo = proplists:get_value(cb_info, Opts, {gen_tcp, tcp, tcp_closed, tcp_error}),
@@ -675,7 +676,7 @@ handle_options(Opts0, _Role) ->
reuse_session, reuse_sessions, ssl_imp,
cb_info, renegotiate_at, secure_renegotiate, hibernate_after,
erl_dist, next_protocols_advertised,
- client_preferred_next_protocols],
+ client_preferred_next_protocols, log_alert],
SockOpts = lists:foldl(fun(Key, PropList) ->
proplists:delete(Key, PropList)
@@ -840,6 +841,9 @@ validate_option(client_preferred_next_protocols = Opt, {Precedence, PreferredPro
validate_option(client_preferred_next_protocols, undefined) ->
undefined;
+validate_option(log_alert, Value) when Value == true;
+ Value == false ->
+ Value;
validate_option(next_protocols_advertised = Opt, Value) when is_list(Value) ->
case tls_record:highest_protocol_version([]) of
{3,0} ->
diff --git a/lib/ssl/src/tls_connection.erl b/lib/ssl/src/tls_connection.erl
index 246fecf34a..159ba406d3 100644
--- a/lib/ssl/src/tls_connection.erl
+++ b/lib/ssl/src/tls_connection.erl
@@ -89,7 +89,6 @@
cert_db_ref, % ref()
bytes_to_read, % integer(), # bytes to read in passive mode
user_data_buffer, % binary()
- log_alert, % boolean()
renegotiation, % {boolean(), From | internal | peer}
start_or_recv_from, % "gen_fsm From"
timer, % start_or_recv_timer
@@ -978,7 +977,7 @@ handle_sync_event(negotiated_next_protocol, _From, StateName, #state{next_protoc
handle_sync_event(negotiated_next_protocol, _From, StateName, #state{next_protocol = NextProtocol} = State) ->
{reply, {ok, NextProtocol}, StateName, State, get_timeout(State)};
-handle_sync_event({set_opts, Opts0}, _From, StateName,
+handle_sync_event({set_opts, Opts0}, _From, StateName0,
#state{socket_options = Opts1,
socket = Socket,
transport_cb = Transport,
@@ -987,11 +986,12 @@ handle_sync_event({set_opts, Opts0}, _From, StateName,
State1 = State0#state{socket_options = Opts},
if
Opts#socket_options.active =:= false ->
- {reply, Reply, StateName, State1, get_timeout(State1)};
+ {reply, Reply, StateName0, State1, get_timeout(State1)};
Buffer =:= <<>>, Opts1#socket_options.active =:= false ->
%% Need data, set active once
{Record, State2} = next_record_if_active(State1),
- case next_state(StateName, StateName, Record, State2) of
+ %% Note: Renogotiation may cause StateName0 =/= StateName
+ case next_state(StateName0, StateName0, Record, State2) of
{next_state, StateName, State, Timeout} ->
{reply, Reply, StateName, State, Timeout};
{stop, Reason, State} ->
@@ -999,13 +999,14 @@ handle_sync_event({set_opts, Opts0}, _From, StateName,
end;
Buffer =:= <<>> ->
%% Active once already set
- {reply, Reply, StateName, State1, get_timeout(State1)};
+ {reply, Reply, StateName0, State1, get_timeout(State1)};
true ->
case read_application_data(<<>>, State1) of
Stop = {stop,_,_} ->
Stop;
{Record, State2} ->
- case next_state(StateName, StateName, Record, State2) of
+ %% Note: Renogotiation may cause StateName0 =/= StateName
+ case next_state(StateName0, StateName0, Record, State2) of
{next_state, StateName, State, Timeout} ->
{reply, Reply, StateName, State, Timeout};
{stop, Reason, State} ->
@@ -2458,7 +2459,7 @@ do_format_reply(list, _,_, Data) ->
binary_to_list(Data).
header(0, <<>>) ->
- [];
+ <<>>;
header(_, <<>>) ->
[];
header(0, Binary) ->
@@ -2677,7 +2678,6 @@ initial_state(Role, Host, Port, Socket, {SSLOptions, SocketOptions}, User,
tls_cipher_texts = [],
user_application = {Monitor, User},
user_data_buffer = <<>>,
- log_alert = true,
session_cache_cb = SessionCacheCb,
renegotiation = {false, first},
start_or_recv_from = undefined,
@@ -2778,12 +2778,11 @@ handle_alerts([Alert | Alerts], {next_state, StateName, State, _Timeout}) ->
handle_alerts(Alerts, handle_alert(Alert, StateName, State)).
handle_alert(#alert{level = ?FATAL} = Alert, StateName,
- #state{socket = Socket, transport_cb = Transport,
- start_or_recv_from = From, host = Host,
+ #state{socket = Socket, transport_cb = Transport, ssl_options = SslOpts, start_or_recv_from = From, host = Host,
port = Port, session = Session, user_application = {_Mon, Pid},
- log_alert = Log, role = Role, socket_options = Opts} = State) ->
+ role = Role, socket_options = Opts} = State) ->
invalidate_session(Role, Host, Port, Session),
- log_alert(Log, StateName, Alert),
+ log_alert(SslOpts#ssl_options.log_alert, StateName, Alert),
alert_user(Transport, Socket, StateName, Opts, Pid, From, Alert, Role),
{stop, normal, State};
@@ -2793,21 +2792,21 @@ handle_alert(#alert{level = ?WARNING, description = ?CLOSE_NOTIFY} = Alert,
{stop, {shutdown, peer_close}, State};
handle_alert(#alert{level = ?WARNING, description = ?NO_RENEGOTIATION} = Alert, StateName,
- #state{log_alert = Log, renegotiation = {true, internal}} = State) ->
- log_alert(Log, StateName, Alert),
+ #state{ssl_options = SslOpts, renegotiation = {true, internal}} = State) ->
+ log_alert(SslOpts#ssl_options.log_alert, StateName, Alert),
handle_normal_shutdown(Alert, StateName, State),
{stop, {shutdown, peer_close}, State};
handle_alert(#alert{level = ?WARNING, description = ?NO_RENEGOTIATION} = Alert, StateName,
- #state{log_alert = Log, renegotiation = {true, From}} = State0) ->
- log_alert(Log, StateName, Alert),
+ #state{ssl_options = SslOpts, renegotiation = {true, From}} = State0) ->
+ log_alert(SslOpts#ssl_options.log_alert, StateName, Alert),
gen_fsm:reply(From, {error, renegotiation_rejected}),
{Record, State} = next_record(State0),
next_state(StateName, connection, Record, State);
handle_alert(#alert{level = ?WARNING, description = ?USER_CANCELED} = Alert, StateName,
- #state{log_alert = Log} = State0) ->
- log_alert(Log, StateName, Alert),
+ #state{ssl_options = SslOpts} = State0) ->
+ log_alert(SslOpts#ssl_options.log_alert, StateName, Alert),
{Record, State} = next_record(State0),
next_state(StateName, StateName, Record, State).
@@ -2845,7 +2844,7 @@ handle_own_alert(Alert, Version, StateName,
#state{transport_cb = Transport,
socket = Socket,
connection_states = ConnectionStates,
- log_alert = Log} = State) ->
+ ssl_options = SslOpts} = State) ->
try %% Try to tell the other side
{BinMsg, _} =
encode_alert(Alert, Version, ConnectionStates),
@@ -2855,7 +2854,7 @@ handle_own_alert(Alert, Version, StateName,
ignore
end,
try %% Try to tell the local user
- log_alert(Log, StateName, Alert),
+ log_alert(SslOpts#ssl_options.log_alert, StateName, Alert),
handle_normal_shutdown(Alert,StateName, State)
catch _:_ ->
ok
diff --git a/lib/ssl/test/ssl_packet_SUITE.erl b/lib/ssl/test/ssl_packet_SUITE.erl
index 36f7af784d..d50498f547 100644
--- a/lib/ssl/test/ssl_packet_SUITE.erl
+++ b/lib/ssl/test/ssl_packet_SUITE.erl
@@ -1631,8 +1631,8 @@ header_decode_one_byte_active(Config) when is_list(Config) ->
{from, self()},
{mfa, {?MODULE, client_header_decode_active,
[Data, [11 | <<"Hello world">> ]]}},
- {options, [{active, true}, {header, 1},
- binary | ClientOpts]}]),
+ {options, [{active, true}, binary, {header, 1}
+ | ClientOpts]}]),
ssl_test_lib:check_result(Server, ok, Client, ok),
@@ -1688,7 +1688,7 @@ header_decode_two_bytes_two_sent_active(Config) when is_list(Config) ->
Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0},
{from, self()},
{mfa, {?MODULE, server_header_decode_active,
- [Data, [$H, $e]]}},
+ [Data, [$H, $e | <<>>]]}},
{options, [{active, true}, binary,
{header,2}|ServerOpts]}]),
@@ -1697,7 +1697,7 @@ header_decode_two_bytes_two_sent_active(Config) when is_list(Config) ->
{host, Hostname},
{from, self()},
{mfa, {?MODULE, client_header_decode_active,
- [Data, [$H, $e]]}},
+ [Data, [$H, $e | <<>>]]}},
{options, [{active, true}, {header, 2},
binary | ClientOpts]}]),
@@ -1765,8 +1765,8 @@ header_decode_one_byte_passive(Config) when is_list(Config) ->
{from, self()},
{mfa, {?MODULE, client_header_decode_passive,
[Data, [11 | <<"Hello world">> ]]}},
- {options, [{active, false}, {header, 1},
- binary | ClientOpts]}]),
+ {options, [{active, false}, binary, {header, 1}
+ | ClientOpts]}]),
ssl_test_lib:check_result(Server, ok, Client, ok),
@@ -1822,7 +1822,7 @@ header_decode_two_bytes_two_sent_passive(Config) when is_list(Config) ->
Server = ssl_test_lib:start_server([{node, ClientNode}, {port, 0},
{from, self()},
{mfa, {?MODULE, server_header_decode_passive,
- [Data, [$H, $e]]}},
+ [Data, [$H, $e | <<>>]]}},
{options, [{active, false}, binary,
{header,2}|ServerOpts]}]),
@@ -1831,7 +1831,7 @@ header_decode_two_bytes_two_sent_passive(Config) when is_list(Config) ->
{host, Hostname},
{from, self()},
{mfa, {?MODULE, client_header_decode_passive,
- [Data, [$H, $e]]}},
+ [Data, [$H, $e | <<>>]]}},
{options, [{active, false}, {header, 2},
binary | ClientOpts]}]),
@@ -2124,10 +2124,14 @@ client_header_decode_passive(Socket, Packet, Result) ->
%% option and the bitsynax makes it obsolete!
check_header_result([Byte1 | _], [Byte1]) ->
ok;
+check_header_result([Byte1 | _], [Byte1| <<>>]) ->
+ ok;
check_header_result([Byte1, Byte2 | _], [Byte1, Byte2]) ->
ok;
-check_header_result(_,Got) ->
- exit({?LINE, Got}).
+check_header_result([Byte1, Byte2 | _], [Byte1, Byte2 | <<>>]) ->
+ ok;
+check_header_result(Expected,Got) ->
+ exit({?LINE, {Expected, Got}}).
server_line_packet_decode(Socket, Packet) when is_binary(Packet) ->
[L1, L2] = string:tokens(binary_to_list(Packet), "\n"),
diff --git a/lib/stdlib/doc/src/filelib.xml b/lib/stdlib/doc/src/filelib.xml
index bd780b2b2f..d24d17be80 100644
--- a/lib/stdlib/doc/src/filelib.xml
+++ b/lib/stdlib/doc/src/filelib.xml
@@ -49,6 +49,12 @@
<datatype>
<name name="dirname"/>
</datatype>
+ <datatype>
+ <name name="dirname_all"/>
+ </datatype>
+ <datatype>
+ <name name="filename_all"/>
+ </datatype>
</datatypes>
<funcs>
diff --git a/lib/stdlib/doc/src/io_lib.xml b/lib/stdlib/doc/src/io_lib.xml
index 3dac259477..68352ffeb1 100644
--- a/lib/stdlib/doc/src/io_lib.xml
+++ b/lib/stdlib/doc/src/io_lib.xml
@@ -54,6 +54,9 @@
<name name="fread_error"/>
</datatype>
<datatype>
+ <name name="fread_item"/>
+ </datatype>
+ <datatype>
<name name="latin1_string"/>
</datatype>
</datatypes>
diff --git a/lib/stdlib/src/dets.erl b/lib/stdlib/src/dets.erl
index 50812cc532..68b157c13c 100644
--- a/lib/stdlib/src/dets.erl
+++ b/lib/stdlib/src/dets.erl
@@ -951,10 +951,10 @@ do_trav(Proc, Acc, Fun) ->
Error
end.
-do_trav(#dets_cont{bin = eof}, _Proc, Acc, _Fun) ->
- Acc;
do_trav(State, Proc, Acc, Fun) ->
case req(Proc, {match_init, State, safe}) of
+ '$end_of_table'->
+ Acc;
{cont, {Bins, NewState}} ->
do_trav_bins(NewState, Proc, Acc, Fun, lists:reverse(Bins));
Error ->
diff --git a/lib/stdlib/src/erl_lint.erl b/lib/stdlib/src/erl_lint.erl
index 08b8541014..8f07750b9b 100644
--- a/lib/stdlib/src/erl_lint.erl
+++ b/lib/stdlib/src/erl_lint.erl
@@ -3219,7 +3219,8 @@ modify_line(T, F0) ->
%% Forms.
modify_line1({function,F,A}, _Mf) -> {function,F,A};
-modify_line1({function,M,F,A}, _Mf) -> {function,M,F,A};
+modify_line1({function,M,F,A}, Mf) ->
+ {function,modify_line1(M, Mf),modify_line1(F, Mf),modify_line1(A, Mf)};
modify_line1({attribute,L,record,{Name,Fields}}, Mf) ->
{attribute,Mf(L),record,{Name,modify_line1(Fields, Mf)}};
modify_line1({attribute,L,spec,{Fun,Types}}, Mf) ->
diff --git a/lib/stdlib/src/filelib.erl b/lib/stdlib/src/filelib.erl
index 42ef3679a2..9ef4954194 100644
--- a/lib/stdlib/src/filelib.erl
+++ b/lib/stdlib/src/filelib.erl
@@ -41,6 +41,9 @@
-type filename() :: file:name().
-type dirname() :: filename().
+-type filename_all() :: file:name_all().
+-type dirname_all() :: filename_all().
+
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-spec wildcard(Wildcard) -> [file:filename()] when
@@ -62,29 +65,29 @@ wildcard(Pattern, Cwd, Mod)
?HANDLE_ERROR(do_wildcard(Pattern, Cwd, Mod)).
-spec is_dir(Name) -> boolean() when
- Name :: filename() | dirname().
+ Name :: filename_all() | dirname_all().
is_dir(Dir) ->
do_is_dir(Dir, file).
--spec is_dir(file:name(), atom()) -> boolean().
+-spec is_dir(file:name_all(), atom()) -> boolean().
is_dir(Dir, Mod) when is_atom(Mod) ->
do_is_dir(Dir, Mod).
-spec is_file(Name) -> boolean() when
- Name :: filename() | dirname().
+ Name :: filename_all() | dirname_all().
is_file(File) ->
do_is_file(File, file).
--spec is_file(file:name(), atom()) -> boolean().
+-spec is_file(file:name_all(), atom()) -> boolean().
is_file(File, Mod) when is_atom(Mod) ->
do_is_file(File, Mod).
-spec is_regular(Name) -> boolean() when
- Name :: filename().
+ Name :: filename_all().
is_regular(File) ->
do_is_regular(File, file).
--spec is_regular(file:name(), atom()) -> boolean().
+-spec is_regular(file:name_all(), atom()) -> boolean().
is_regular(File, Mod) when is_atom(Mod) ->
do_is_regular(File, Mod).
@@ -103,16 +106,16 @@ fold_files(Dir, RegExp, Recursive, Fun, Acc, Mod) when is_atom(Mod) ->
do_fold_files(Dir, RegExp, Recursive, Fun, Acc, Mod).
-spec last_modified(Name) -> file:date_time() | 0 when
- Name :: filename() | dirname().
+ Name :: filename_all() | dirname_all().
last_modified(File) ->
do_last_modified(File, file).
--spec last_modified(file:name(), atom()) -> file:date_time() | 0.
+-spec last_modified(file:name_all(), atom()) -> file:date_time() | 0.
last_modified(File, Mod) when is_atom(Mod) ->
do_last_modified(File, Mod).
-spec file_size(Filename) -> non_neg_integer() when
- Filename :: filename().
+ Filename :: filename_all().
file_size(File) ->
do_file_size(File, file).
@@ -218,7 +221,7 @@ do_file_size(File, Mod) ->
%% ensures that the directory name required to create D exists
-spec ensure_dir(Name) -> 'ok' | {'error', Reason} when
- Name :: filename() | dirname(),
+ Name :: filename_all() | dirname_all(),
Reason :: file:posix().
ensure_dir("/") ->
ok;
diff --git a/lib/stdlib/src/gen_server.erl b/lib/stdlib/src/gen_server.erl
index b18d3dc0c0..7f65131f67 100644
--- a/lib/stdlib/src/gen_server.erl
+++ b/lib/stdlib/src/gen_server.erl
@@ -217,7 +217,7 @@ reply({To, Tag}, Reply) ->
catch To ! {Tag, Reply}.
%% -----------------------------------------------------------------
-%% Asyncronous broadcast, returns nothing, it's just send'n prey
+%% Asynchronous broadcast, returns nothing, it's just send 'n' pray
%%-----------------------------------------------------------------
abcast(Name, Request) when is_atom(Name) ->
do_abcast([node() | nodes()], Name, cast_msg(Request)).
diff --git a/lib/stdlib/src/io.erl b/lib/stdlib/src/io.erl
index 53728237ca..b11d41e2eb 100644
--- a/lib/stdlib/src/io.erl
+++ b/lib/stdlib/src/io.erl
@@ -40,7 +40,7 @@
%%-------------------------------------------------------------------------
-type device() :: atom() | pid().
--type prompt() :: atom() | string().
+-type prompt() :: atom() | unicode:chardata().
%% ErrorDescription is whatever the I/O-server sends.
-type server_no_data() :: {'error', ErrorDescription :: term()} | 'eof'.
diff --git a/lib/stdlib/src/io_lib.erl b/lib/stdlib/src/io_lib.erl
index a9b6d4131e..92a086b077 100644
--- a/lib/stdlib/src/io_lib.erl
+++ b/lib/stdlib/src/io_lib.erl
@@ -83,7 +83,8 @@
-export([write_unicode_string/1, write_unicode_char/1,
deep_unicode_char_list/1]).
--export_type([chars/0, latin1_string/0, continuation/0, fread_error/0]).
+-export_type([chars/0, latin1_string/0, continuation/0,
+ fread_error/0, fread_item/0]).
%%----------------------------------------------------------------------
@@ -106,6 +107,8 @@
| 'string'
| 'unsigned'.
+-type fread_item() :: string() | atom() | integer() | float().
+
%%----------------------------------------------------------------------
%% Interface calls to sub-modules.
@@ -120,7 +123,7 @@ fwrite(Format, Args) ->
-spec fread(Format, String) -> Result when
Format :: string(),
String :: string(),
- Result :: {'ok', InputList :: [term()], LeftOverChars :: string()}
+ Result :: {'ok', InputList :: [fread_item()], LeftOverChars :: string()}
| {'more', RestFormat :: string(),
Nchars :: non_neg_integer(),
InputStack :: chars()}
@@ -135,7 +138,7 @@ fread(Chars, Format) ->
Format :: string(),
Return :: {'more', Continuation1 :: continuation()}
| {'done', Result, LeftOverChars :: string()},
- Result :: {'ok', InputList :: [term()]}
+ Result :: {'ok', InputList :: [fread_item()]}
| 'eof'
| {'error', {'fread', What :: fread_error()}}.
diff --git a/lib/stdlib/src/io_lib_fread.erl b/lib/stdlib/src/io_lib_fread.erl
index 92a34995b8..491e1f40d7 100644
--- a/lib/stdlib/src/io_lib_fread.erl
+++ b/lib/stdlib/src/io_lib_fread.erl
@@ -41,9 +41,9 @@
Format :: string(),
Return :: {'more', Continuation1 :: io_lib:continuation()}
| {'done', Result, LeftOverChars :: string()},
- Result :: {'ok', InputList :: io_lib:chars()}
+ Result :: {'ok', InputList :: [io_lib:fread_item()]}
| 'eof'
- | {'error', {'read', What :: io_lib:fread_error()}}.
+ | {'error', {'fread', What :: io_lib:fread_error()}}.
fread([], Chars, Format) ->
%%io:format("FREAD: ~w `~s'~n", [Format,Chars]),
@@ -101,11 +101,12 @@ fread_line(Format0, Line, N0, Results0, More, Newline) ->
-spec fread(Format, String) -> Result when
Format :: string(),
String :: string(),
- Result :: {'ok', InputList :: io_lib:chars(), LeftOverChars :: string()}
+ Result :: {'ok', InputList :: [io_lib:fread_item()],
+ LeftOverChars :: string()}
| {'more', RestFormat :: string(),
Nchars :: non_neg_integer(),
InputStack :: io_lib:chars()}
- | {'error', What :: term()}.
+ | {'error', {'fread', What :: io_lib:fread_error()}}.
fread(Format, Line) ->
fread(Format, Line, 0, []).
diff --git a/lib/stdlib/test/dets_SUITE.erl b/lib/stdlib/test/dets_SUITE.erl
index 8ff7c3ccc9..059d553b00 100644
--- a/lib/stdlib/test/dets_SUITE.erl
+++ b/lib/stdlib/test/dets_SUITE.erl
@@ -52,7 +52,7 @@
simultaneous_open/1, insert_new/1, repair_continuation/1,
otp_5487/1, otp_6206/1, otp_6359/1, otp_4738/1, otp_7146/1,
otp_8070/1, otp_8856/1, otp_8898/1, otp_8899/1, otp_8903/1,
- otp_8923/1, otp_9282/1]).
+ otp_8923/1, otp_9282/1, otp_11245/1]).
-export([dets_dirty_loop/0]).
@@ -109,7 +109,7 @@ all() ->
many_clients, otp_4906, otp_5402, simultaneous_open,
insert_new, repair_continuation, otp_5487, otp_6206,
otp_6359, otp_4738, otp_7146, otp_8070, otp_8856, otp_8898,
- otp_8899, otp_8903, otp_8923, otp_9282
+ otp_8899, otp_8903, otp_8923, otp_9282, otp_11245
].
groups() ->
@@ -3898,6 +3898,28 @@ some_calls(Tab, Config) ->
file:delete(File).
+otp_11245(doc) ->
+ ["OTP-11245. Tables remained fixed after traversal"];
+otp_11245(suite) ->
+ [];
+otp_11245(Config) when is_list(Config) ->
+ Tab = otp_11245,
+ File = filename(Tab, Config),
+ {ok, Tab} = dets:open_file(Tab, [{file,File}]),
+ N = 1024,
+ ins(Tab, N),
+ N = length(dets:match(Tab, '_')),
+ false = dets:info(Tab, safe_fixed),
+ dets:traverse(Tab, fun(_) -> continue end),
+ false = dets:info(Tab, safe_fixed),
+ N = dets:foldl(fun(_, N2) -> N2+1 end, 0, Tab),
+ false = dets:info(Tab, safe_fixed),
+ N = dets:foldr(fun(_, N2) -> N2+1 end, 0, Tab),
+ false = dets:info(Tab, safe_fixed),
+ ok = dets:close(Tab),
+ file:delete(File),
+ ok.
+
%%
%% Parts common to several test cases
%%
diff --git a/lib/stdlib/test/erl_lint_SUITE.erl b/lib/stdlib/test/erl_lint_SUITE.erl
index f8345559c4..4dc7a44064 100644
--- a/lib/stdlib/test/erl_lint_SUITE.erl
+++ b/lib/stdlib/test/erl_lint_SUITE.erl
@@ -50,7 +50,7 @@
unsafe_vars_try/1,
guard/1, otp_4886/1, otp_4988/1, otp_5091/1, otp_5276/1, otp_5338/1,
otp_5362/1, otp_5371/1, otp_7227/1, otp_5494/1, otp_5644/1, otp_5878/1,
- otp_5917/1, otp_6585/1, otp_6885/1, otp_10436/1,
+ otp_5917/1, otp_6585/1, otp_6885/1, otp_10436/1, otp_11254/1,
export_all/1,
bif_clash/1,
behaviour_basic/1, behaviour_multiple/1,
@@ -82,7 +82,7 @@ all() ->
unsafe_vars, unsafe_vars2, unsafe_vars_try, guard,
otp_4886, otp_4988, otp_5091, otp_5276, otp_5338,
otp_5362, otp_5371, otp_7227, otp_5494, otp_5644,
- otp_5878, otp_5917, otp_6585, otp_6885, otp_10436, export_all,
+ otp_5878, otp_5917, otp_6585, otp_6885, otp_10436, otp_11254,export_all,
bif_clash, behaviour_basic, behaviour_multiple,
otp_7550, otp_8051, format_warn, {group, on_load},
too_many_arguments, basic_errors, bin_syntax_errors].
@@ -2418,6 +2418,20 @@ otp_10436(Config) when is_list(Config) ->
run_test2(Config, Ts2, []),
ok.
+otp_11254(doc) ->
+ "OTP-11254. Warnings for opaque types.";
+otp_11254(suite) -> [];
+otp_11254(Config) when is_list(Config) ->
+ Ts = <<"-module(p2).
+ -export([manifest/2]).
+ manifest(Module, Name) ->
+ fun Module:Nine/1.
+ ">>,
+ {error,[{4,erl_lint,{unbound_var,'Nine'}}],
+ [{3,erl_lint,{unused_var,'Name'}}]} =
+ run_test2(Config, Ts, []),
+ ok.
+
export_all(doc) ->
"OTP-7392. Warning for export_all.";
export_all(Config) when is_list(Config) ->
diff --git a/lib/test_server/src/ts.erl b/lib/test_server/src/ts.erl
index 4e5dc1b759..8e71c69d35 100644
--- a/lib/test_server/src/ts.erl
+++ b/lib/test_server/src/ts.erl
@@ -28,6 +28,7 @@
tests/0, tests/1,
install/0, install/1,
bench/0, bench/1, bench/2, benchmarks/0,
+ smoke_test/0, smoke_test/1,smoke_test/2, smoke_tests/0,
estone/0, estone/1,
cross_cover_analyse/1,
compile_testcases/0, compile_testcases/1,
@@ -174,6 +175,13 @@ help(installed) ->
" ts:bench(Spec) - Runs all benchmarks in the given spec file.\n"
" The spec file is actually ../*_test/Spec_bench.spec\n\n"
" ts:bench can take the same Options argument as ts:run.\n"
+ "Smoke test functions:\n"
+ " ts:smoke_tests() - Get all available families of smoke tests\n"
+ " ts:smoke_test() - Runs all smoke tests\n"
+ " ts:smoke_test(Spec)\n"
+ " - Runs all smoke tests in the given spec file.\n"
+ " The spec file is actually ../*_test/Spec_smoke.spec\n\n"
+ " ts:smoke_test can take the same Options argument as ts:run.\n"
"\n"
"Installation (already done):\n"
],
@@ -258,6 +266,7 @@ run(List, Opts) when is_list(List), is_list(Opts) ->
%% Runs one test spec with Options
run(Testspec, Config) when is_atom(Testspec), is_list(Config) ->
Options=check_test_get_opts(Testspec, Config),
+ IsSmoke=proplists:get_value(smoke,Config),
File=atom_to_list(Testspec),
WhatToDo =
case Testspec of
@@ -293,6 +302,8 @@ run(Testspec, Config) when is_atom(Testspec), is_list(Config) ->
case WhatToDo of
skip ->
create_skip_spec(Testspec, tests(Testspec));
+ test when IsSmoke ->
+ File++"_smoke.spec";
test ->
File++".spec"
end,
@@ -507,7 +518,22 @@ bench(Specs, Opts) ->
benchmarks() ->
ts_benchmark:benchmarks().
+smoke_test() ->
+ smoke_test([]).
+smoke_test(Opts) when is_list(Opts) ->
+ smoke_test(smoke_tests(),Opts);
+smoke_test(Spec) ->
+ smoke_test([Spec],[]).
+
+smoke_test(Spec, Opts) when is_atom(Spec) ->
+ smoke_test([Spec],Opts);
+smoke_test(Specs, Opts) ->
+ run(Specs, [{smoke,true}|Opts]).
+
+smoke_tests() ->
+ {ok, Cwd} = file:get_cwd(),
+ ts_lib:specialized_specs(Cwd,"smoke").
%%
%% estone/0, estone/1
diff --git a/lib/test_server/src/ts_benchmark.erl b/lib/test_server/src/ts_benchmark.erl
index 516d22fd2d..bd6abc3372 100644
--- a/lib/test_server/src/ts_benchmark.erl
+++ b/lib/test_server/src/ts_benchmark.erl
@@ -30,12 +30,7 @@
benchmarks() ->
{ok, Cwd} = file:get_cwd(),
- Benches = filelib:wildcard(
- filename:join([Cwd,"..","*_test","*_bench.spec"])),
- [begin
- Base = filename:basename(N),
- list_to_atom(string:substr(Base,1,string:rstr(Base,"_")-1))
- end || N <- Benches].
+ ts_lib:specialized_specs(Cwd,"bench").
run(Specs, Opts, Vars) ->
{ok, Cwd} = file:get_cwd(),
diff --git a/lib/test_server/src/ts_lib.erl b/lib/test_server/src/ts_lib.erl
index a00f607fc1..52bb346043 100644
--- a/lib/test_server/src/ts_lib.erl
+++ b/lib/test_server/src/ts_lib.erl
@@ -27,6 +27,7 @@
erlang_type/1,
initial_capital/1,
specs/1, suites/2,
+ specialized_specs/2,
subst_file/3, subst/2, print_data/1,
make_non_erlang/2,
maybe_atom_to_list/1, progress/4,
@@ -91,13 +92,22 @@ initial_capital([C|Rest]) when $a =< C, C =< $z ->
initial_capital(String) ->
String.
+specialized_specs(Dir,PostFix) ->
+ Specs = filelib:wildcard(filename:join([filename:dirname(Dir),
+ "*_test", "*_"++PostFix++".spec"])),
+ sort_tests([begin
+ Base = filename:basename(Name),
+ list_to_atom(string:substr(Base,1,string:rstr(Base,"_")-1))
+ end || Name <- Specs]).
+
specs(Dir) ->
Specs = filelib:wildcard(filename:join([filename:dirname(Dir),
"*_test", "*.{dyn,}spec"])),
- % Filter away all spec which end with _bench.spec
+ % Filter away all spec which end with {_bench,_smoke}.spec
NoBench = fun(SpecName) ->
case lists:reverse(SpecName) of
"ceps.hcneb_"++_ -> false;
+ "ceps.ekoms_"++_ -> false;
_ -> true
end
end,
diff --git a/lib/tools/emacs/erlang.el b/lib/tools/emacs/erlang.el
index f3bc95e3e5..3ecda1d285 100644
--- a/lib/tools/emacs/erlang.el
+++ b/lib/tools/emacs/erlang.el
@@ -2813,6 +2813,9 @@ Return nil if inside string, t if in a comment."
(- (+ previous erlang-argument-indent) 1))))
(t
(nth 2 stack-top))))
+ ((= (following-char) ?,)
+ ;; a comma at the start of the line: line up with opening parenthesis.
+ (nth 2 stack-top))
(t
(goto-char (nth 1 stack-top))
(let ((base (cond ((looking-at "[({]\\s *\\($\\|%\\)")
diff --git a/lib/tools/emacs/test.erl.indented b/lib/tools/emacs/test.erl.indented
index 6c9343f6cb..7e61bcc45b 100644
--- a/lib/tools/emacs/test.erl.indented
+++ b/lib/tools/emacs/test.erl.indented
@@ -700,3 +700,34 @@ some_function_name_xyz(xyzzy, #some_record{
field2 = Field1,
field2 = Field2}}),
{ok, SomeVariable}.
+
+commas_first() ->
+ {abc, [ {some_var, 1}
+ , {some_other_var, 2}
+ , {erlang_ftw, 9}
+ , {erlang_cookie, 'cookie'}
+ , {cmds,
+ [ {one, "sudo ls"}
+ , {one, "sudo ls"}
+ , {two, "sudo ls"}
+ , {three, "sudo ls"}
+ , {four, "sudo ls"}
+ , {three, "sudo ls"}
+ ] }
+ , {ssh_username, "yow"}
+ , {cluster,
+ [ {aaaa, [ {"10.198.55.12" , "" }
+ , {"10.198.55.13" , "" }
+ ] }
+ , {bbbb, [ {"10.198.55.151", "" }
+ , {"10.198.55.123", "" }
+ , {"10.198.55.34" , "" }
+ , {"10.198.55.85" , "" }
+ , {"10.198.55.67" , "" }
+ ] }
+ , {cccc, [ {"10.198.55.68" , "" }
+ , {"10.198.55.69" , "" }
+ ] }
+ ] }
+ ]
+ }.
diff --git a/lib/tools/emacs/test.erl.orig b/lib/tools/emacs/test.erl.orig
index 0f8c4a9175..932758997d 100644
--- a/lib/tools/emacs/test.erl.orig
+++ b/lib/tools/emacs/test.erl.orig
@@ -700,3 +700,34 @@ some_function_name_xyz(xyzzy, #some_record{
field2 = Field1,
field2 = Field2}}),
{ok, SomeVariable}.
+
+commas_first() ->
+ {abc, [ {some_var, 1}
+ , {some_other_var, 2}
+ , {erlang_ftw, 9}
+ , {erlang_cookie, 'cookie'}
+ , {cmds,
+ [ {one, "sudo ls"}
+ , {one, "sudo ls"}
+ , {two, "sudo ls"}
+ , {three, "sudo ls"}
+ , {four, "sudo ls"}
+ , {three, "sudo ls"}
+ ] }
+ , {ssh_username, "yow"}
+ , {cluster,
+ [ {aaaa, [ {"10.198.55.12" , "" }
+ , {"10.198.55.13" , "" }
+ ] }
+ , {bbbb, [ {"10.198.55.151", "" }
+ , {"10.198.55.123", "" }
+ , {"10.198.55.34" , "" }
+ , {"10.198.55.85" , "" }
+ , {"10.198.55.67" , "" }
+ ] }
+ , {cccc, [ {"10.198.55.68" , "" }
+ , {"10.198.55.69" , "" }
+ ] }
+ ] }
+]
+}.
diff --git a/lib/xmerl/doc/src/xmerl_ug.xmlsrc b/lib/xmerl/doc/src/xmerl_ug.xmlsrc
index 8a0805020e..10c770c400 100644
--- a/lib/xmerl/doc/src/xmerl_ug.xmlsrc
+++ b/lib/xmerl/doc/src/xmerl_ug.xmlsrc
@@ -409,9 +409,9 @@ Data =
specification but the basic functionality. For all details see
the <seealso marker="xmerl_xs">reference manual</seealso></p>
<p>First, some words about the xmerl_xs functionality:</p>
- <p>You need to wright template functions to be able to control
+ <p>You need to write template functions to be able to control
what kind of output you want. Thus if you want to encapsulate a
- <c>bike</c> element in &lt;p&gt; tags you simply wright a
+ <c>bike</c> element in &lt;p&gt; tags you simply write a
function:</p>
<pre>
template(E = #xmlElement{name='bike'}) ->