diff options
Diffstat (limited to 'lib/tools/examples')
-rw-r--r-- | lib/tools/examples/Makefile | 56 | ||||
-rw-r--r-- | lib/tools/examples/xref_examples.erl | 42 |
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). |