+ run_hooks(needsbuild => sub { shift->(\@needsbuild) });
+
+ # before scanning, make a note of where pages'
+ # old links pointed
+ my %oldlink_targets;
+ foreach my $file (@needsbuild, @del) {
+ my $page=pagename($file);
+ if (exists $oldlinks{$page}) {
+ foreach my $l (@{$oldlinks{$page}}) {
+ $oldlink_targets{$page}{$l}=bestlink($page, $l);
+ }
+ }
+ }
+
+ # scan and render changed files
+ foreach my $file (@needsbuild) {
+ debug(sprintf(gettext("scanning %s"), $file));
+ scan($file);
+ }
+ calculate_links();
+ foreach my $file (@needsbuild) {
+ debug(sprintf(gettext("building %s"), $file));
+ render($file);
+ $rendered{$file}=1;
+ }
+ foreach my $file (@internal, @internal_change) {
+ # internal pages are not rendered
+ my $page=pagename($file);
+ delete $depends{$page};
+ delete $depends_simple{$page};
+ foreach my $old (@{$renderedfiles{$page}}) {
+ delete $destsources{$old};
+ }
+ $renderedfiles{$page}=[];
+ }