File 2784-macros.xml-Document-OTP_RELEASE-if-and-elif.patch of Package erlang

From 46237d41e7455ae5801d78e85a82216b73697f44 Mon Sep 17 00:00:00 2001
From: Tomas Abrahamsson <tomas.abrahamsson@gmail.com>
Date: Wed, 9 May 2018 00:20:53 +0200
Subject: [PATCH 4/4] macros.xml: Document ?OTP_RELEASE, -if and -elif

---
 system/doc/reference_manual/macros.xml | 35 ++++++++++++++++++++++++++++++++--
 1 file changed, 33 insertions(+), 2 deletions(-)

diff --git a/system/doc/reference_manual/macros.xml b/system/doc/reference_manual/macros.xml
index a341307ab7..760599308c 100644
--- a/system/doc/reference_manual/macros.xml
+++ b/system/doc/reference_manual/macros.xml
@@ -150,6 +150,11 @@ bar(X) ->
       <item>The name of the current function.</item>
       <tag><c>?FUNCTION_ARITY</c></tag>
       <item>The arity (number of arguments) for the current function.</item>
+      <tag><c>?OTP_RELEASE</c></tag>
+      <item>The OTP release that the currently executing ERTS
+        application is part of, as an integer. For details, see
+        <seealso marker="erts:erlang#system_info/1"><c>erlang:system_info(otp_release)</c></seealso>.
+        This macro was introduced in OTP release 21.</item>
     </taglist>
   </section>
 
@@ -202,8 +207,16 @@ f() ->
        directive. If that condition is false, the lines following
       <c>else</c> are evaluated instead.</item>
       <tag><c>-endif.</c></tag>
-      <item>Specifies the end of an <c>ifdef</c> or <c>ifndef</c>
-       directive.</item>
+      <item>Specifies the end of an <c>ifdef</c>, an <c>ifndef</c>
+       directive, or the end of an <c>if</c> or <c>elif</c> directive.</item>
+      <tag><c>-if(Condition).</c></tag>
+      <item>Evaluates the following lines only if <c>Condition</c>
+       evaluates to true.</item>
+      <tag><c>-elif(Condition).</c></tag>
+      <item>Only allowed after an <c>if</c> or another <c>elif</c> directive.
+       If the preceding <c>if</c> or <c>elif</c> directives do not
+       evaluate to true, and the <c>Condition</c> evaluates to true,
+       the lines following the <c>elif</c> are evaluated instead.</item>
     </taglist>
     <note>
       <p>The macro directives cannot be used inside functions.</p>
@@ -231,6 +244,24 @@ or
 {ok,m}</pre>
     <p><c>?LOG(Arg)</c> is then expanded to a call to <c>io:format/2</c>
       and provide the user with some simple trace output.</p>
+
+    <p><em>Example:</em></p>
+    <code type="none">
+-module(m)
+...
+-ifdef(OTP_RELEASE).
+  %% OTP 21 or higher
+  -if(?OTP_RELEASE >= 22).
+    %% Code that will work in OTP 22 or higher
+  -elif(?OTP_RELEASE >= 21).
+    %% Code that will work in OTP 21 or higher
+  -endif.
+-else.
+  %% OTP 20 or lower.
+-endif.
+...</code>
+    <p>The code uses the <c>OTP_RELEASE</c> macro to conditionally
+    select code depending on release.</p>
   </section>
 
   <section>
-- 
2.16.3

openSUSE Build Service is sponsored by