aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorTomas Johansson <[email protected]>2010-02-04 10:34:01 +0100
committerBjörn Gustavsson <[email protected]>2010-02-16 13:04:49 +0100
commit9d247b1f12dcec885e361d61a738463dae3237b0 (patch)
tree24f75738a6b385d2455ded26783c216a6d46db9a /lib
parent991d3def715c9edda47298878ab7bad0d614ab73 (diff)
downloadotp-9d247b1f12dcec885e361d61a738463dae3237b0.tar.gz
otp-9d247b1f12dcec885e361d61a738463dae3237b0.tar.bz2
otp-9d247b1f12dcec885e361d61a738463dae3237b0.zip
Add support for prefixing macro names generated by the compiler
This is useful when multiple protocols that contains macros with identical names are included in a single module. Add the missing record_name_prefix compiler option to the documentation.
Diffstat (limited to 'lib')
-rw-r--r--lib/asn1/doc/src/asn1ct.xml16
-rw-r--r--lib/asn1/src/asn1ct_gen.erl11
2 files changed, 25 insertions, 2 deletions
diff --git a/lib/asn1/doc/src/asn1ct.xml b/lib/asn1/doc/src/asn1ct.xml
index 9c04956e86..114578b1b4 100644
--- a/lib/asn1/doc/src/asn1ct.xml
+++ b/lib/asn1/doc/src/asn1ct.xml
@@ -52,9 +52,11 @@
<v>Options = [Option| OldOption]</v>
<v>Option = ber_bin | per_bin | uper_bin | der | compact_bit_string |
noobj | {n2n,EnumTypeName} |{outdir,Dir} | {i,IncludeDir} | optimize |
- driver | asn1config | undec_rest | {inline,OutputName} | inline</v>
+ driver | asn1config | undec_rest | {inline,OutputName} | inline |
+ {macro_name_prefix, Prefix} | {record_name_prefix, Prefix}</v>
<v>OldOption = ber | per</v>
<v>Reason = term()</v>
+ <v>Prefix = string()</v>
</type>
<desc>
<p>Compiles the ASN.1 module <c>Asn1module</c> and generates an
@@ -270,6 +272,18 @@ Binary = binary()
It is as <c>{inline,OutputName}</c>, but the output file gets the
default name of the source <c>.set.asn</c> file.</p>
</item>
+ <tag><c>{macro_name_prefix, Prefix}</c></tag>
+ <item>
+ <p>All macro names generated by the compiler are prefixed with
+ <c>Prefix</c>. This is useful when multiple protocols that contains
+ macros with identical names are included in a single module.</p>
+ </item>
+ <tag><c>{record_name_prefix, Prefix}</c></tag>
+ <item>
+ <p>All record names generated by the compiler are prefixed with
+ <c>Prefix</c>. This is useful when multiple protocols that contains
+ records with identical names are included in a single module.</p>
+ </item>
</taglist>
<p>Any additional option that is applied will be passed to
the final step when the generated .erl file is compiled.
diff --git a/lib/asn1/src/asn1ct_gen.erl b/lib/asn1/src/asn1ct_gen.erl
index fefb92bb34..f0f253be70 100644
--- a/lib/asn1/src/asn1ct_gen.erl
+++ b/lib/asn1/src/asn1ct_gen.erl
@@ -1357,7 +1357,8 @@ pgen_hrltypes(Erules,Module,[H|T],NumRecords) ->
%% Generates a macro for value Value defined in the ASN.1 module
gen_macro(Value) when is_record(Value,valuedef) ->
- emit({"-define('",Value#valuedef.name,"', ",
+ Prefix = get_macro_name_prefix(),
+ emit({"-define('",Prefix,Value#valuedef.name,"', ",
{asis,Value#valuedef.value},").",nl}).
%% Generate record functions **************
@@ -2064,3 +2065,11 @@ get_record_name_prefix() ->
{value,{_,Prefix}} ->
Prefix
end.
+
+get_macro_name_prefix() ->
+ case lists:keysearch(macro_name_prefix,1,get(encoding_options)) of
+ false ->
+ "";
+ {value,{_,Prefix}} ->
+ Prefix
+ end.