diff options
author | Richard Levitte <levitte@openssl.org> | 2016-01-30 07:14:58 +0100 |
---|---|---|
committer | Richard Levitte <levitte@openssl.org> | 2016-02-10 14:36:32 +0100 |
commit | e84193e43dbd3da23845ef9fcfcb5e364049a396 (patch) | |
tree | 05cd92323c3ac2a5ceea773e5a432c41d07c2513 /VMS/translatesyms.pl | |
parent | 9c44c29ef2cadb2f0ff214096ccf731ce2660d64 (diff) |
unified build scheme: add a "unified" template for VMS descrip.mms
As part of this, change util/mkdef.pl to stop adding libraries to
depend on in its output. mkdef.pl should ONLY output a symbol
vector.
Because symbol names can't be longer than 31 characters, we use the
compiler to shorten those that are longer down to 23 characters plus
an 8 character CRC. To make sure users of our header files will pick
up on that automatically, add the DEC C supported extra headers files
__decc_include_prologue.h and __decc_include_epilogue.h.
Furthermore, we add a config.com, so VMS people can configure just as
comfortably as any Unix folks, thusly:
@config
Reviewed-by: Rich Salz <rsalz@openssl.org>
Diffstat (limited to 'VMS/translatesyms.pl')
-rw-r--r-- | VMS/translatesyms.pl | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/VMS/translatesyms.pl b/VMS/translatesyms.pl new file mode 100644 index 0000000000..8ffdbd8aa8 --- /dev/null +++ b/VMS/translatesyms.pl @@ -0,0 +1,55 @@ +#! /usr/bin/perl + +# This script will translate any SYMBOL_VECTOR item that has a translation +# in CXX$DEMANGLER_DB. The latter is generated by and CC/DECC command that +# uses the qualifier /REPOSITORY with the build directory as value. When +# /NAMES=SHORTENED has been used, this file will hold the translations from +# the original symbols to the shortened variants. +# +# CXX$DEMAGLER_DB. is an ISAM file, but with the magic of RMS, it can be +# read as a text file, with each record as one line. +# +# The lines will have the following syntax for any symbol found that's longer +# than 31 characters: +# +# LONG_symbol_34567890123{cksum}$LONG_symbol_34567890123_more_than_31_chars +# +# $ is present at the end of the shortened symbol name, and is preceded by a +# 7 character checksum. The $ makes it easy to separate the shortened name +# from the original one. + +use strict; +use warnings; + +usage() if scalar @ARGV < 1; + +my %translations = (); + +open DEMANGLER_DATA, $ARGV[0] + or die "Couldn't open $ARGV[0]: $!\n"; +while(<DEMANGLER_DATA>) { + chomp; + (my $translated, my $original) = split /\$/; + $translations{$original} = $translated.'$'; +} +close DEMANGLER_DATA; + +$| = 1; # Autoflush +while(<STDIN>) { + s@ + ((?:[A-Za-z0-9_]+)\/)?([A-Za-z0-9_]+)=(PROCEDURE|DATA) + @ + if (defined($translations{$2})) { + my $trans = $translations{$2}; + my $trans_uc = uc $trans; + if (defined($1) && $trans ne $trans_uc) { + "$trans_uc/$trans=$3" + } else { + "$trans=$3" + } + } else { + $& + } + @gxe; + print $_; +} |