summaryrefslogtreecommitdiffstats
path: root/solenv/bin/fix-includes.pl
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:06:44 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-07 09:06:44 +0000
commited5640d8b587fbcfed7dd7967f3de04b37a76f26 (patch)
tree7a5f7c6c9d02226d7471cb3cc8fbbf631b415303 /solenv/bin/fix-includes.pl
parentInitial commit. (diff)
downloadlibreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.tar.xz
libreoffice-ed5640d8b587fbcfed7dd7967f3de04b37a76f26.zip
Adding upstream version 4:7.4.7.upstream/4%7.4.7upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'solenv/bin/fix-includes.pl')
-rwxr-xr-xsolenv/bin/fix-includes.pl95
1 files changed, 95 insertions, 0 deletions
diff --git a/solenv/bin/fix-includes.pl b/solenv/bin/fix-includes.pl
new file mode 100755
index 000000000..837fcf2d8
--- /dev/null
+++ b/solenv/bin/fix-includes.pl
@@ -0,0 +1,95 @@
+#!/usr/bin/env perl
+# This file is part of the LibreOffice project.
+#
+# This Source Code Form is subject to the terms of the Mozilla Public
+# License, v. 2.0. If a copy of the MPL was not distributed with this
+# file, You can obtain one at http://mozilla.org/MPL/2.0/.
+#
+#
+# fix-includes, a simple script replace local includes which should be global
+# , to global includes. And global includes which should be local, to local includes.
+# The script is expected to run in the root of the git repo, so it can fetch all the include directory's.
+#
+use strict;
+use warnings;
+use File::Basename;
+use File::Find;
+use IO::All;
+
+my $dirname = "include";
+
+# Fetch the list of includes
+my @subdirs = map {basename $_} grep {-d} glob("$dirname/*");
+
+# Add boost
+push(@subdirs,"boost");
+
+# Simple function to check and replace headers
+sub check_headers
+{
+ my ($dir,$file, @includes) = @_;
+ open(my $fh,"+<",$file) or die "Couldn't open file $file $!\n";
+ my @content = <$fh>;
+ my $line;
+
+ # seek to the first line, so we can replace then lines correctly
+ seek $fh,0,0;
+ foreach $line (@content){
+ if($line =~ m/#include "(\w*)\//){
+ # If an include is local and it should be global, make it global
+ if($1 ~~ @includes){
+ print "local header $line\n";
+ $line =~ s/"/</;
+ $line =~ s/"/>/;
+ print $fh $line;
+ print "converted to global header $line\n";
+ }
+ else {
+ print $fh $line;
+ }
+ }
+ # If a local file is defined global, make it local
+ elsif($line =~ /#include <((\w*)\.(hxx|h|hrc|src))>/){
+ # check if file exists, then it must be local so replace the <> to ""
+ if(-e "$dir/$1" ){
+ print "global header $line\n";
+ $line =~ s/</"/g;
+ $line =~ s/>/"/g;
+ print $fh $line;
+ print "converted to local header $line\n";
+ }
+ else {
+ print $fh $line;
+ }
+ }
+ else {
+ print $fh $line;
+ }
+ }
+ close($fh);
+}
+
+# routine that checks the headers of every cxx,hxx,c,h,hrc,src file in a directory
+sub check_routine
+{
+ my ($dir) = @_;
+ opendir(my $fh, $dir) or die "Program stopping, couldn't open directory \n";
+ while(my $file = readdir($fh)){
+ if($file =~ m/\.(cxx|hxx|c|h|hrc|src)$/i ){
+ check_headers($dir,"$dir/$file",@subdirs);
+ }
+ }
+ closedir($fh);
+}
+
+# Expect ARGV[0] to be a directory, then fetch all subdirectory's and check the header files.
+if(-d $ARGV[0]){
+ my @directories = io->dir($ARGV[0])->All_Dirs;
+ foreach my $dir (@directories){
+ print "checking header files in $dir\n";
+ check_routine($dir);
+ }
+}
+else{
+ print "$ARGV[0] isn't a directory\n";
+}