diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/HPMHookGen/HPMDataCheckGen.pl | 3 | ||||
-rwxr-xr-x | tools/HPMHookGen/HPMHookGen.pl | 91 | ||||
-rw-r--r-- | tools/HPMHookGen/doxygen.conf | 2 |
3 files changed, 69 insertions, 27 deletions
diff --git a/tools/HPMHookGen/HPMDataCheckGen.pl b/tools/HPMHookGen/HPMDataCheckGen.pl index 0e5f628cd..791d6cf6b 100644 --- a/tools/HPMHookGen/HPMDataCheckGen.pl +++ b/tools/HPMHookGen/HPMDataCheckGen.pl @@ -51,6 +51,9 @@ print FH <<"EOF"; #ifndef HPM_DATA_CHECK_H #define HPM_DATA_CHECK_H +#if !defined(HERCULES_CORE) && !defined(HPMHOOKGEN) +#include "common/HPMSymbols.inc.h" +#endif // ! HERCULES_CORE && ! HPMHOOKGEN HPExport const struct s_HPMDataCheck HPMDataCheck[] = { EOF diff --git a/tools/HPMHookGen/HPMHookGen.pl b/tools/HPMHookGen/HPMHookGen.pl index 0b1df8388..d1b96efb3 100755 --- a/tools/HPMHookGen/HPMHookGen.pl +++ b/tools/HPMHookGen/HPMHookGen.pl @@ -264,8 +264,9 @@ my %keys = ( login => [ ], char => [ ], map => [ ], - common => [ ], + all => [ ], ); +my %fileguards = ( ); foreach my $file (@files) { # Loop through the xml files my $xml = new XML::Simple; @@ -279,22 +280,28 @@ foreach my $file (@files) { # Loop through the xml files my $key = $data->{compounddef}->{$filekey}->{compoundname}->[0]; my $original = $key; my @servertypes = (); + my $servermask = 'SERVER_TYPE_NONE'; if ($servertype ne "common") { push @servertypes, $1; + $servermask = 'SERVER_TYPE_' . uc($1); } elsif ($key eq "mapindex_interface") { push @servertypes, ("map", "char"); # Currently not used by the login server + $servermask = 'SERVER_TYPE_MAP|SERVER_TYPE_CHAR'; } else { push @servertypes, ("map", "char", "login"); + $servermask = 'SERVER_TYPE_ALL'; } + my @filepath = split(/[\/\\]/, $loc->{file}); + my $foldername = uc($filepath[-2]); + my $filename = uc($filepath[-1]); $filename =~ s/-/_/g; $filename =~ s/\.[^.]*$//; + my $guardname = "${foldername}_${filename}_H"; # Some known interfaces with different names if ($key =~ /battleground/) { $key = "bg"; } elsif ($key =~ /guild_storage/) { $key = "gstorage"; - } elsif ($key =~ /inter_homunculus/) { # to avoid replace to homun - $key = "inter_homunculus"; - } elsif ($key =~ /homunculus/) { + } elsif ($key eq "homunculus_interface") { $key = "homun"; } elsif ($key eq "irc_bot_interface") { $key = "ircbot"; @@ -416,6 +423,11 @@ foreach my $file (@files) { # Loop through the xml files foreach $servertype (@servertypes) { push(@{ $keys{$servertype} }, $key) if $key2original{$key}; } + push(@{ $keys{all} }, $key) if $key2original{$key}; + $fileguards{$key} = { + guard => $guardname, + type => $servermask, + }; } foreach my $servertype (keys %keys) { @@ -423,14 +435,61 @@ foreach my $servertype (keys %keys) { # Some interfaces use different names my %exportsymbols = map { $_ => &{ sub ($) { - return 'battlegrounds' if $servertype eq 'map' and $_ =~ /^bg$/; - return 'pc_groups' if $servertype eq 'map' and $_ =~ /^pcg$/; + return 'battlegrounds' if $_ =~ /^bg$/; + return 'pc_groups' if $_ =~ /^pcg$/; return $_; }}($_); } @$keysref; my ($maxlen, $idx) = (0, 0); my $fname; + + if ($servertype eq 'all') { + $fname = "../../src/common/HPMSymbols.inc.h"; + open(FH, ">", $fname) + or die "cannot open > $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. + +#if !defined(HERCULES_CORE) +EOF + + foreach my $key (@$keysref) { + print FH <<"EOF"; +#ifdef $fileguards{$key}->{guard} /* $key */ +struct $key2original{$key} *$key; +#endif // $fileguards{$key}->{guard} +EOF + } + + print FH <<"EOF"; +#endif // ! HERCULES_CORE + +HPExport const char *HPM_shared_symbols(int server_type) +{ +EOF + + foreach my $key (@$keysref) { + print FH <<"EOF"; +#ifdef $fileguards{$key}->{guard} /* $key */ +if ((server_type&($fileguards{$key}->{type})) && !HPM_SYMBOL("$exportsymbols{$key}", $key)) return "$exportsymbols{$key}"; +#endif // $fileguards{$key}->{guard} +EOF + } + + print FH <<"EOF"; + return NULL; +} +EOF + close FH; + next; + } + $fname = "../../src/plugins/HPMHooking/HPMHooking_${servertype}.HookingPoints.inc"; open(FH, ">", $fname) or die "cannot open > $fname: $!"; @@ -484,26 +543,6 @@ EOF } close FH; - $fname = "../../src/plugins/HPMHooking/HPMHooking_${servertype}.GetSymbol.inc"; - open(FH, ">", $fname) - or die "cannot open > $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. - -EOF - foreach my $key (@$keysref) { - - print FH <<"EOF"; -if( !($key = GET_SYMBOL("$exportsymbols{$key}") ) ) return "$exportsymbols{$key}"; -EOF - } - close FH; - $fname = "../../src/plugins/HPMHooking/HPMHooking_${servertype}.HPMHooksCore.inc"; open(FH, ">", $fname) or die "cannot open > $fname: $!"; diff --git a/tools/HPMHookGen/doxygen.conf b/tools/HPMHookGen/doxygen.conf index 3a848abe4..66c1d6158 100644 --- a/tools/HPMHookGen/doxygen.conf +++ b/tools/HPMHookGen/doxygen.conf @@ -178,7 +178,7 @@ EXPAND_ONLY_PREDEF = NO SEARCH_INCLUDES = YES INCLUDE_PATH = INCLUDE_FILE_PATTERNS = -PREDEFINED = __attribute__(x)= +PREDEFINED = __attribute__(x)= HPMHOOKGEN EXPAND_AS_DEFINED = SKIP_FUNCTION_MACROS = NO TAGFILES = |