diff options
author | Haru <haru@dotalux.com> | 2014-02-03 18:27:19 +0100 |
---|---|---|
committer | Haru <haru@dotalux.com> | 2014-02-03 18:27:19 +0100 |
commit | 35e1b99c2d1ecab5fa67b2033c87a90512b5d9aa (patch) | |
tree | d4c6744cdd5c79d79a3b14765f289c8d2a58fb10 /tools/HPMHookGen/HPMDataCheckGen.pl | |
parent | 42b5c048e3d97be93c71f81f84ff37c502f96163 (diff) | |
download | hercules-35e1b99c2d1ecab5fa67b2033c87a90512b5d9aa.tar.gz hercules-35e1b99c2d1ecab5fa67b2033c87a90512b5d9aa.tar.bz2 hercules-35e1b99c2d1ecab5fa67b2033c87a90512b5d9aa.tar.xz hercules-35e1b99c2d1ecab5fa67b2033c87a90512b5d9aa.zip |
Updated HPMHookGen with a HPMDataCheck generator
- It will be used by an upcoming commit by Ind.
- Added dummy HPMDataCheck.h, to test the API bot's capability to
re-generate it.
- Improved XML parser performance.
Signed-off-by: Haru <haru@dotalux.com>
Diffstat (limited to 'tools/HPMHookGen/HPMDataCheckGen.pl')
-rw-r--r-- | tools/HPMHookGen/HPMDataCheckGen.pl | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/tools/HPMHookGen/HPMDataCheckGen.pl b/tools/HPMHookGen/HPMDataCheckGen.pl new file mode 100644 index 000000000..1d4ed21b0 --- /dev/null +++ b/tools/HPMHookGen/HPMDataCheckGen.pl @@ -0,0 +1,68 @@ +#!/usr/bin/perl + +# Copyright (c) Hercules Dev Team, licensed under GNU GPL. +# See the LICENSE file + +use strict; +use warnings; +use XML::Simple; + +# XML Parser hint (some are faster than others) +#local $ENV{XML_SIMPLE_PREFERRED_PARSER} = ''; # 0m14.181s +local $ENV{XML_SIMPLE_PREFERRED_PARSER} = 'XML::Parser'; # 0m4.256s +#local $ENV{XML_SIMPLE_PREFERRED_PARSER} = 'XML::SAX::Expat'; # 0m14.186s +#local $ENV{XML_SIMPLE_PREFERRED_PARSER} = 'XML::LibXML::SAX'; # 0m7.055s + +my @files = grep { -f } grep { /[^h]\.xml/ } glob 'doxyoutput/xml/struct*.xml'; +my %out; + +foreach my $file (@files) { + my $xml = new XML::Simple; + my $data = $xml->XMLin($file); + next unless $data->{compounddef}->{includes}; # means its a struct from a .c file, plugins cant access those so we don't care. + next if $data->{compounddef}->{compoundname} =~ /::/; # its a duplicate with a :: name e.g. struct script_state {<...>} ay; + my @filepath = split(/[\/\\]/, $data->{compounddef}->{location}->{file}); + my $foldername = uc($filepath[-2]); + my $filename = uc($filepath[-1]); $filename =~ s/-/_/g; $filename =~ s/\.[^.]*$//; + my $name = "_${foldername}_${filename}_H_"; + push @{ $out{$name} }, $data->{compounddef}->{compoundname}; +} + +my $fname = '../../src/common/HPMDataCheck.h'; +open(FH, '>', $fname); + +print FH <<"EOF"; +// Copyright (c) Hercules Dev Team, licensed under GNU GPL. +// See the LICENSE file +// +// NOTE: This file was auto-generated and should never be manually edited, +// as it will get overwritten. +#ifndef _HPM_DATA_CHECK_H_ +#define _HPM_DATA_CHECK_H_ + + +const struct s_HPMDataCheck HPMDataCheck[] = { +EOF + +foreach my $key (sort keys %out) { + print FH <<"EOF"; + #ifdef $key +EOF + foreach my $entry (@{ $out{$key} }) { + print FH <<"EOF" + { "$entry", sizeof(struct $entry) }, +EOF + } + print FH <<"EOF" + #else + #define $key + #endif // $key +EOF +} +print FH <<"EOF"; +}; +unsigned int HPMDataCheckLen = ARRAYLENGTH(HPMDataCheck); + +#endif /* _HPM_DATA_CHECK_H_ */ +EOF +close(FH); |