#!/usr/bin/perl -w use strict; use File::Find; use File::Copy; use Getopt::Long; my %g_config; GetOptions ( \%g_config, qw( dir=s ) ) || Usage(); if (!defined $g_config{dir}) { &Usage(); } my $modified = 0; print "Adding pragma once...\n"; find (\&RecurseFiles, $g_config{dir}); print "Done. $modified files modified.\n"; sub RecurseFiles { if ($_ =~ /\.h$/) { &AddPragmaOnce ($_, $File::Find::name); } } sub AddPragmaOnce { my ($filename, $fullname) = @_; my $added = 0; my $tmpname = $filename.".tmp"; open (FIN, "<$filename") or die "Can't open $filename for read."; open (FOUT, ">$tmpname") or die "Can't open $tmpname for write."; while (my $line = ) { if (!$added && $line =~ /\w+/) { print FOUT "#pragma once\n"; $added = 1; } print FOUT "$line"; } close FOUT or die; close FIN or die; if ($added) { copy ($tmpname, $filename) or die; $modified++; } unlink $tmpname or die; } sub Usage { print STDERR "Usage: $0 -dir directory\n"; print STDERR "\n"; exit(1); }