]> jfr.im git - irc/atheme/atheme.git/commitdiff
scripting/perl: Fix lack of perl_hooks.c ordering
authorShockk <redacted>
Wed, 11 Feb 2015 17:06:23 +0000 (17:06 +0000)
committerShockk <redacted>
Wed, 11 Feb 2015 17:29:16 +0000 (17:29 +0000)
This patch resolves the contents of perl_hooks.c being different between
identical compilations due to Perl hashes being looped over in an
intentionally unique order each execution.

modules/scripting/perl/api/make_perl_hooks.pl

index 50d9e38c492b30ca09eaf1600c63ca8856fce75a..1dd561797c3476eb51d95b6baa35dfb73e4ccc13 100755 (executable)
@@ -204,7 +204,7 @@ EOF
 # Write the hook-data marshalling functions.
 #
 
-foreach my $arg_type (keys %arg_types) {
+foreach my $arg_type (sort keys %arg_types) {
        next if ($arg_type eq 'void');
 
        if (defined $perl_api_types{$arg_type}) {
@@ -231,7 +231,8 @@ EOF
 
                my @members;
 
-               while (my ($member, $definition) = each %$struct) {
+               foreach my $member (sort keys %$struct) {
+                       my $definition = $struct->{$member};
                        my ($type, $pretty_name, $rw);
 
                        if (ref $definition eq 'ARRAY') {
@@ -301,7 +302,8 @@ EOF
 # Now write the actual hook handlers.
 #
 
-while (my ($hookname, $arg_type) = each %hooks) {
+foreach my $hookname (sort keys %hooks) {
+       my $arg_type = $hooks{$hookname};
        next if grep { $_ eq $arg_type } @special_types;
        print $outfile <<"EOF";
 static void perl_hook_$hookname ($arg_type * data)
@@ -346,7 +348,7 @@ print $outfile <<EOF;
 void enable_perl_hook_handler(const char *hookname)
 {
 EOF
-foreach my $hookname (keys %hooks) {
+foreach my $hookname (sort keys %hooks) {
        print $outfile <<"EOF";
        if (0 == strcmp(hookname, "$hookname")) {
                hook_add_$hookname(perl_hook_$hookname);
@@ -363,7 +365,7 @@ print $outfile <<EOF;
 void disable_perl_hook_handler(const char *hookname)
 {
 EOF
-foreach my $hookname (keys %hooks) {
+foreach my $hookname (sort keys %hooks) {
        print $outfile <<"EOF";
        if (0 == strcmp(hookname, "$hookname")) {
                hook_del_$hookname(perl_hook_$hookname);