]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
new log-id targets and scripts
authorAlan T. DeKok <aland@freeradius.org>
Tue, 26 Oct 2021 19:06:15 +0000 (15:06 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Tue, 26 Oct 2021 19:08:18 +0000 (15:08 -0400)
scripts/boiler.mk
scripts/build/logid-check.pl [new file with mode: 0755]
scripts/build/logid-update.pl [new file with mode: 0755]
scripts/build/logid.mk [new file with mode: 0644]
scripts/build/max_id.txt [new file with mode: 0644]

index 7d63f5a16a289905cb366227f2c3508319363293..365b8c7aebb4e140e13205beb9f7251081c18fc7 100644 (file)
@@ -490,6 +490,8 @@ define INCLUDE_SUBMAKEFILE
         # Qualify and canonicalize paths.
         SOURCES     := $$(call QUALIFY_PATH,$${DIR},$${SOURCES})
         SOURCES     := $$(call CANONICAL_PATH,$${SOURCES})
+       ALL_SRCS    += $$(SOURCES)
+
         SRC_INCDIRS := $$(call QUALIFY_PATH,$${DIR},$${SRC_INCDIRS})
         SRC_INCDIRS := $$(call CANONICAL_PATH,$${SRC_INCDIRS})
 
diff --git a/scripts/build/logid-check.pl b/scripts/build/logid-check.pl
new file mode 100755 (executable)
index 0000000..d0e47c9
--- /dev/null
@@ -0,0 +1,93 @@
+#!/usr/bin/env perl
+######################################################################
+#
+#  Copyright (C) 2021 Alan DeKok <aland@freeradius.org>
+#
+#  $Id$
+#
+######################################################################
+
+use strict;
+use warnings;
+use Data::Dumper;
+
+my %id2name;
+my %name2id;
+
+my %section_id2name;
+my %section_name2id;
+
+my $status = 0;
+
+sub process {
+    my $file = shift;
+    my $name = $file;
+
+    $name =~ s,.*/,,;
+    $name =~ s/libfreeradius-//;
+    $name =~ s/\.mk//;
+
+    open(my $FILE, "<", $file) or die "Failed to open $file: $!\n";
+
+    my $line = 0;
+    while (<$FILE>) {
+       next if ! /LOG_ID/;
+
+       if (/^\s*LOG_ID_LIB/) {
+           my @fields = split /\s+/;
+           my $id = $fields[2];
+
+           if (defined $id2name{$id}) {
+               print STDERR "ID $id is defined in both $id2name{$id} and $name\n";
+               $status = 1;
+               last;
+           }
+
+           if (defined $name2id{$name}) {
+               print STDERR "Library '$name' is defined as two different IDs $name2id{$name} and $id\n";
+               $status = 1;
+               last;
+           }
+
+           $id2name{$id} = $name;
+           $name2id{$name} = $id;
+           next;
+       }
+
+       if (/DEFINE_LOG_ID_SECTION/) {
+           my @fields = split /,/;
+
+           my $section = $fields[1];
+           $section =~ s/\s+//g;
+
+           my $id = $fields[2];
+           $id =~ s/\s+//g;
+
+           if (defined $section_id2name{$name}{$id}) {
+               print STDERR "ID $id is defined in both $section_id2name{$name}{$id} and $name\n";
+               $status = 1;
+               last;
+           }
+
+           if (defined $section_name2id{$name}{$section}) {
+               print STDERR "Library name $name defines '$section' as two different IDs $section_name2id{$name}{$section} and $id\n";
+               $status = 1;
+               last;
+           }
+
+           $section_id2name{$name}{$id} = $section;
+           $section_name2id{$name}{$section} = $id;
+           next;
+       }
+    }
+
+    close $FILE;
+}
+
+foreach my $file (@ARGV) {
+    $file =~ s,//,/,g;
+
+    process($file);
+}
+
+exit $status;
diff --git a/scripts/build/logid-update.pl b/scripts/build/logid-update.pl
new file mode 100755 (executable)
index 0000000..3a6ec03
--- /dev/null
@@ -0,0 +1,98 @@
+#!/usr/bin/env perl
+######################################################################
+#
+#  Copyright (C) 2021 Alan DeKok <aland@freeradius.org>
+#
+#  $Id$
+#
+#  Updates log IDs
+#
+#
+######################################################################
+
+use strict;
+use warnings;
+use Data::Dumper;
+
+my $status = 0;
+my $max_id;
+my $regex;
+
+sub process {
+    my $file = shift;
+
+    open(my $FILE, "<", $file) or die "Failed to open $file: $!\n";
+    open(my $OUTPUT, ">", "$file.tmp") or die "Failed to create $file.tmp: $!\n";
+
+    while (<$FILE>) {
+       #
+       #  Change the various non-ID messages to ID-based messages
+       #
+       #  Allow "R" variants of the macros, and DEBUG(2,3,4)
+       #
+       if (s/^(\s*R?(DEBUG|P?ERROR|INFO)[0-9]?)\((\s*0\s*,)?/${1}_ID\(\@/g) {
+           s/_ID\(\@/\($max_id, /;
+           $max_id++;
+       }
+
+       print $OUTPUT $_;
+    }
+
+    close $FILE;
+    close $OUTPUT;
+
+    rename "$file.tmp", $file;
+}
+
+sub read_max_id {
+    my $file = shift;
+
+    open(my $FILE, "<", $file) or die "Failed opening $file";
+    while (<$FILE>) {
+       next if /\s*#/;
+
+       /(\d+)/;                        # get digits
+
+       $max_id = $1;
+       last;
+    }
+
+    close $FILE;
+}
+
+sub write_max_id {
+    my $file = shift;
+
+    open(my $FILE, "<", $file) or die "Failed opening $file";
+    open(my $OUTPUT, ">", "$file.tmp") or die "Failed opening $file.tmp";
+
+    while (<$FILE>) {
+       if (/\s*#/) {
+           print $OUTPUT $_;
+           next;
+       }
+
+       s/(\d+)/$max_id/;
+       print $OUTPUT $_;
+       last;
+    }
+
+    close $FILE;
+    close $OUTPUT;
+
+    rename "$file.tmp", $file;
+}
+
+read_max_id("scripts/build/max_id.txt");
+
+foreach my $file (@ARGV) {
+    $file =~ s,//,/,g;
+
+    next if $file !~ /\.[ch]$/;
+
+    process($file);
+}
+
+write_max_id("scripts/build/max_id.txt") if ($status == 0);
+
+exit $status;
diff --git a/scripts/build/logid.mk b/scripts/build/logid.mk
new file mode 100644 (file)
index 0000000..522bdbe
--- /dev/null
@@ -0,0 +1,14 @@
+.PHONY: logid.help
+logid.help:
+       @echo ""
+       @echo "Make targets:"
+       @echo "    logid.check              - check and verify log IDs"
+       @echo "    logid.update             - update log IDs"
+
+LOGID_FILES := $(shell grep -l LOG_ID ${ALL_MAKEFILES})
+
+logid.check: $(LOGID_FILES)
+       @./scripts/build/logid-check.pl $^
+
+logid.update: $(ALL_SRCS)
+       @./scripts/build/logid-update.pl $^
diff --git a/scripts/build/max_id.txt b/scripts/build/max_id.txt
new file mode 100644 (file)
index 0000000..a712e76
--- /dev/null
@@ -0,0 +1 @@
+503