aboutsummaryrefslogtreecommitdiffstats
path: root/lib/tools/examples
diff options
context:
space:
mode:
Diffstat (limited to 'lib/tools/examples')
-rw-r--r--lib/tools/examples/Makefile56
-rw-r--r--lib/tools/examples/xref_examples.erl42
2 files changed, 98 insertions, 0 deletions
diff --git a/lib/tools/examples/Makefile b/lib/tools/examples/Makefile
new file mode 100644
index 0000000000..9fb8434633
--- /dev/null
+++ b/lib/tools/examples/Makefile
@@ -0,0 +1,56 @@
+# ``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 via the world wide web 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.
+#
+# The Initial Developer of the Original Code is Ericsson Utvecklings AB.
+# Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings
+# AB. All Rights Reserved.''
+#
+# $Id$
+#
+include $(ERL_TOP)/make/target.mk
+include $(ERL_TOP)/make/$(TARGET)/otp.mk
+
+# ----------------------------------------------------
+# Application version
+# ----------------------------------------------------
+include ../vsn.mk
+VSN=$(TOOLS_VSN)
+
+# ----------------------------------------------------
+# Release directory specification
+# ----------------------------------------------------
+RELSYSDIR = $(RELEASE_PATH)/lib/tools-$(VSN)
+
+# ----------------------------------------------------
+# Common macros
+# ----------------------------------------------------
+EXAMPLE_FILES = xref_examples.erl
+
+# ----------------------------------------------------
+# Targets
+# ----------------------------------------------------
+
+debug opt:
+
+clean:
+
+docs:
+
+# ----------------------------------------------------
+# Release Target
+# ----------------------------------------------------
+include $(ERL_TOP)/make/otp_release_targets.mk
+
+release_spec: opt
+ $(INSTALL_DIR) $(RELSYSDIR)/examples
+ $(INSTALL_DATA) $(EXAMPLE_FILES) $(RELSYSDIR)/examples
+
+release_docs_spec:
diff --git a/lib/tools/examples/xref_examples.erl b/lib/tools/examples/xref_examples.erl
new file mode 100644
index 0000000000..4c082195a2
--- /dev/null
+++ b/lib/tools/examples/xref_examples.erl
@@ -0,0 +1,42 @@
+-module(xref_examples).
+
+-export([script/0]).
+
+%% Used at Erlang/OTP for finding undefined functions and unused local
+%% functions. Output are the two files ${HOME}/undefined.txt and
+%% ${HOME}/unused_locals.txt.
+script() ->
+ Root = code:root_dir(),
+ Dir = os:getenv("HOME"),
+ Server = s,
+ xref:start(Server),
+ {ok, _Relname} = xref:add_release(Server, code:lib_dir(), {name,otp}),
+ %% Exclude undefined functions in some modules...
+ Exclude = "(CORBA|Cos|Orber|Puller|Pusher|"
+ "StackModule|oe_Cos|mnesia).*_impl",
+ UndefS = "XC || (XU - X - B)",
+ Q = io_lib:format("Undef = ~s,"
+ "Excluded = ~p:_/_,"
+ "Undef - Undef || Excluded",
+ [UndefS, Exclude]),
+ {ok, Undef} = xref:q(Server, lists:flatten(Q)),
+ {ok, NotCalled} = xref:analyze(Server, locals_not_used),
+ dump("%% " ++ Root ++
+ "\n%% Undefined external functions." ++
+ "\n%% The second MFA is the undefined function." ++
+ "\n%% Functions in modules matching the following "
+ "regular expression have been skipped:" ++
+ "\n%% " ++ Exclude,
+ filename:join(Dir, "undefined.txt"),
+ Undef),
+ dump("%% " ++ Root ++ "\n%% Unused local functions.",
+ filename:join(Dir, "unused_locals.txt"),
+ NotCalled),
+ catch xref:stop(Server),
+ halt().
+
+dump(H, F, T) ->
+ {ok, IoDev} = file:open(F,[write]),
+ io:format(IoDev, "~s~n", [H]),
+ io:format(IoDev, "~p.~n", [T]),
+ file:close(IoDev).