From: Alan T. DeKok Date: Tue, 26 Oct 2021 19:06:15 +0000 (-0400) Subject: new log-id targets and scripts X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=11c1a052fc1408ca98e5c55013a807b1f4668c77;p=thirdparty%2Ffreeradius-server.git new log-id targets and scripts --- diff --git a/scripts/boiler.mk b/scripts/boiler.mk index 7d63f5a16a2..365b8c7aebb 100644 --- a/scripts/boiler.mk +++ b/scripts/boiler.mk @@ -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 index 00000000000..d0e47c9a5e5 --- /dev/null +++ b/scripts/build/logid-check.pl @@ -0,0 +1,93 @@ +#!/usr/bin/env perl +###################################################################### +# +# Copyright (C) 2021 Alan DeKok +# +# $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 index 00000000000..3a6ec038a0b --- /dev/null +++ b/scripts/build/logid-update.pl @@ -0,0 +1,98 @@ +#!/usr/bin/env perl +###################################################################### +# +# Copyright (C) 2021 Alan DeKok +# +# $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 index 00000000000..522bdbe8e67 --- /dev/null +++ b/scripts/build/logid.mk @@ -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 index 00000000000..a712e764002 --- /dev/null +++ b/scripts/build/max_id.txt @@ -0,0 +1 @@ +503