diff --git a/contrib/ChangeLog b/contrib/ChangeLog index 3b0d76349e2e..b5adf051d4c5 100644 --- a/contrib/ChangeLog +++ b/contrib/ChangeLog @@ -1,3 +1,7 @@ +2013-12-19 Yury Gribov + + * mklog: Split generated message in parts. + 2013-10-31 Chung-Ju Wu * config-list.mk (nds32le-elf, nds32be-elf): Add nds32 target. diff --git a/contrib/mklog b/contrib/mklog index a874c7215c55..d3f044ee8581 100755 --- a/contrib/mklog +++ b/contrib/mklog @@ -34,6 +34,10 @@ $name = @n[1]; chop($name); $addr = $username . "\@my.domain.org"; $date = `date +%Y-%m-%d`; chop ($date); +$gcc_root = $0; +$gcc_root =~ s/[^\\\/]+$/../; +chdir $gcc_root; + #----------------------------------------------------------------------------- # Program starts here. You should not need to edit anything below this @@ -50,16 +54,28 @@ if ( $#ARGV != 0 ) { $diff = $ARGV[0]; $dir = `dirname $diff`; chop ($dir); $basename = `basename $diff`; chop ($basename); -$cl = `mktemp /tmp/$basename.XXXXXX` || exit 1; chop ($cl); $hdrline = "$date $name <$addr>"; -open (CLFILE, ">$cl") or die "Could not open file $cl for writing"; +my %cl_entries; -print CLFILE "$hdrline\n\n"; +sub get_clname($) { + my $dirname = $_[0]; + while ($dirname) { + my $clname = "$dirname/ChangeLog"; + if (-f $clname) { + my $filename_rel = substr ($_[0], length ($dirname) + 1); + return ($filename_rel, $clname); + } else { + $dirname =~ s/[\/\\]?[^\/\\]*$//; + } + } + return ($_[0], 'Unknown Changelog'); +} # For every file in the .diff print all the function names in ChangeLog # format. $bof = 0; +$clname = get_clname(''); open (DFILE, $diff) or die "Could not open file $diff for reading"; while () { # Check if we found a new file. @@ -68,10 +84,11 @@ while () { # $bof == 1), we just write out a ':' before starting the next # file. if ($bof == 1) { - print CLFILE ":\n"; + $cl_entries{$clname} .= ":\n"; } $filename = $2; - print CLFILE "\t* $filename"; + ($filename_rel, $clname) = get_clname ($filename); + $cl_entries{$clname} .= "\t* $filename_rel"; $bof = 1; } @@ -122,13 +139,13 @@ while () { # to the filename, so we need an extra space before the opening # brace. if ($bof) { - print CLFILE " "; + $cl_entries{$clname} .= " "; $bof = 0; } else { - print CLFILE "\t"; + $cl_entries{$clname} .= "\t"; } - print CLFILE "($fn):\n"; + $cl_entries{$clname} .= "($fn):\n"; $seen_names{$fn} = 1; } } @@ -138,14 +155,20 @@ while () { # write out a ':'. This happens when there is only one file with no # functions. if ($bof == 1) { - print CLFILE ":\n"; + $cl_entries{$clname} .= ":\n"; +} + +$temp = `mktemp /tmp/$basename.XXXXXX` || exit 1; chop ($temp); +open (CLFILE, ">$temp") or die "Could not open file $temp for writing"; + +foreach my $clname (keys %cl_entries) { + print CLFILE "$clname:\n\n$hdrline\n\n$cl_entries{$clname}\n"; } -print CLFILE "\n"; close (DFILE); # Concatenate the ChangeLog template and the original .diff file. -system ("cat $diff >>$cl && mv $cl $diff") == 0 +system ("cat $diff >>$temp && mv $temp $diff") == 0 or die "Could not add the ChangeLog entry to $diff"; exit 0;