aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2007-08-28 01:59:01 +0000
committerjoey <joey@0fa5a96a-9a0e-0410-b3b2-a0fd24251071>2007-08-28 01:59:01 +0000
commit9c5f4761d8bf785ca98d5fda66fbbe9dbe11897c (patch)
tree6e2c8fab91dd051a7acc2cf0ab7c71fc58f6c278
parent21c4bd8444480d6038d217fa2892d13ecce500ff (diff)
downloadikiwiki-9c5f4761d8bf785ca98d5fda66fbbe9dbe11897c.tar
ikiwiki-9c5f4761d8bf785ca98d5fda66fbbe9dbe11897c.tar.gz
* Support for looking in multiple directories for underlay files.
* Plugins can add new directories to the search path with the add_underlay function. * Split out smiley underlay files into a separate underlay, so if the plugin isn't used, the wiki isn't bloated with all those files.
-rw-r--r--IkiWiki.pm21
-rw-r--r--IkiWiki/CGI.pm7
-rw-r--r--IkiWiki/Plugin/smiley.pm1
-rw-r--r--IkiWiki/Render.pm51
-rwxr-xr-xMakefile.PL10
l---------basewiki/blog.mdwn1
l---------basewiki/favicon.ico1
l---------basewiki/helponformatting.mdwn1
l---------basewiki/index.mdwn1
l---------basewiki/local.css1
l---------basewiki/markdown.mdwn1
l---------basewiki/openid.mdwn1
l---------basewiki/pagespec.mdwn1
l---------basewiki/preprocessordirective.mdwn1
l---------basewiki/sandbox.mdwn1
l---------basewiki/shortcuts.mdwn1
l---------basewiki/smileys1
l---------basewiki/smileys.mdwn1
l---------basewiki/style.css1
l---------basewiki/subpage1
l---------basewiki/subpage.mdwn1
l---------basewiki/templates.mdwn1
l---------basewiki/templates/note.mdwn1
l---------basewiki/templates/popup.mdwn1
l---------basewiki/wikiicons1
l---------basewiki/wikilink.mdwn1
-rw-r--r--debian/changelog9
-rw-r--r--doc/basewiki.mdwn1
-rw-r--r--doc/blog.mdwn2
-rw-r--r--doc/bugs/brokenlinks_false_positives.mdwn6
-rw-r--r--doc/plugins/write.mdwn12
-rw-r--r--doc/smileys.mdwn4
-rw-r--r--doc/todo/conditional_underlay_files.mdwn7
-rw-r--r--doc/todo/wikiwyg/discussion.mdwn3
-rw-r--r--po/ikiwiki.pot42
-rwxr-xr-xt/basewiki_brokenlinks.t13
l---------underlays/basewiki/blog.mdwn1
l---------underlays/basewiki/favicon.ico1
l---------underlays/basewiki/helponformatting.mdwn1
l---------underlays/basewiki/index.mdwn1
l---------underlays/basewiki/local.css1
l---------underlays/basewiki/markdown.mdwn1
l---------underlays/basewiki/openid.mdwn1
l---------underlays/basewiki/pagespec.mdwn1
l---------underlays/basewiki/preprocessordirective.mdwn1
l---------underlays/basewiki/sandbox.mdwn1
l---------underlays/basewiki/shortcuts.mdwn1
l---------underlays/basewiki/style.css1
l---------underlays/basewiki/subpage1
l---------underlays/basewiki/subpage.mdwn1
l---------underlays/basewiki/templates.mdwn1
l---------underlays/basewiki/templates/note.mdwn1
l---------underlays/basewiki/templates/popup.mdwn1
l---------underlays/basewiki/wikiicons1
l---------underlays/basewiki/wikilink.mdwn1
l---------underlays/smiley/smileys1
l---------underlays/smiley/smileys.mdwn1
57 files changed, 142 insertions, 89 deletions
diff --git a/IkiWiki.pm b/IkiWiki.pm
index 18a518f3f..0485da75c 100644
--- a/IkiWiki.pm
+++ b/IkiWiki.pm
@@ -17,6 +17,7 @@ use Exporter q{import};
our @EXPORT = qw(hook debug error template htmlpage add_depends pagespec_match
bestlink htmllink readfile writefile pagetype srcfile pagename
displaytime will_render gettext urlto targetpage
+ add_underlay
%config %links %renderedfiles %pagesources %destsources);
our $VERSION = 2.00; # plugin interface version, next is ikiwiki version
our $version='unknown'; # VERSION_AUTOREPLACE done by Makefile, DNE
@@ -83,6 +84,7 @@ sub defaultconfig () { #{{{
pingurl => [],
templatedir => "$installdir/share/ikiwiki/templates",
underlaydir => "$installdir/share/ikiwiki/basewiki",
+ underlaydirs => [],
setup => undef,
adminuser => undef,
adminemail => undef,
@@ -285,11 +287,26 @@ sub srcfile ($) { #{{{
my $file=shift;
return "$config{srcdir}/$file" if -e "$config{srcdir}/$file";
- return "$config{underlaydir}/$file" if -e "$config{underlaydir}/$file";
- error("internal error: $file cannot be found in $config{srcdir} or $config{underlaydir}");
+ foreach my $dir (@{$config{underlaydirs}}, $config{underlaydir}) {
+ return "$dir/$file" if -e "$dir/$file";
+ }
+ error("internal error: $file cannot be found in $config{srcdir} or underlay");
return;
} #}}}
+sub add_underlay ($) { #{{{
+ my $dir=shift;
+
+ if ($dir=~/^\//) {
+ unshift @{$config{underlaydirs}}, $dir;
+ }
+ else {
+ unshift @{$config{underlaydirs}}, "$config{underlaydir}/../$dir";
+ }
+
+ return 1;
+} #}}}
+
sub readfile ($;$$) { #{{{
my $file=shift;
my $binary=shift;
diff --git a/IkiWiki/CGI.pm b/IkiWiki/CGI.pm
index 82b619592..c785e31de 100644
--- a/IkiWiki/CGI.pm
+++ b/IkiWiki/CGI.pm
@@ -335,7 +335,8 @@ sub cgi_editpage ($$) { #{{{
# characters.
my ($page)=$form->field('page');
$page=titlepage(possibly_foolish_untaint($page));
- if (! defined $page || ! length $page || file_pruned($page, $config{srcdir}) || $page=~/^\//) {
+ if (! defined $page || ! length $page ||
+ file_pruned($page, $config{srcdir}) || $page=~/^\//) {
error("bad page name");
}
@@ -512,8 +513,8 @@ sub cgi_editpage ($$) { #{{{
my $exists=-e "$config{srcdir}/$file";
- if ($form->field("do") ne "create" &&
- ! $exists && ! -e "$config{underlaydir}/$file") {
+ if ($form->field("do") ne "create" && ! $exists &&
+ ! eval { srcfile($file) }) {
$form->tmpl_param("page_gone", 1);
$form->field(name => "do", value => "create", force => 1);
$form->tmpl_param("page_select", 0);
diff --git a/IkiWiki/Plugin/smiley.pm b/IkiWiki/Plugin/smiley.pm
index 96e714d3d..932c2c4fe 100644
--- a/IkiWiki/Plugin/smiley.pm
+++ b/IkiWiki/Plugin/smiley.pm
@@ -9,6 +9,7 @@ my %smileys;
my $smiley_regexp;
sub import { #{{{
+ add_underlay("smiley");
hook(type => "filter", id => "smiley", call => \&filter);
} # }}}
diff --git a/IkiWiki/Render.pm b/IkiWiki/Render.pm
index 5fd0dea0d..35d663a7a 100644
--- a/IkiWiki/Render.pm
+++ b/IkiWiki/Render.pm
@@ -270,34 +270,37 @@ sub refresh () { #{{{
}
},
}, $config{srcdir});
- find({
- no_chdir => 1,
- wanted => sub {
- $_=decode_utf8($_);
- if (file_pruned($_, $config{underlaydir})) {
- $File::Find::prune=1;
- }
- elsif (! -d $_ && ! -l $_) {
- my ($f)=/$config{wiki_file_regexp}/; # untaint
- if (! defined $f) {
- warn(sprintf(gettext("skipping bad filename %s"), $_)."\n");
+ foreach my $dir (@{$config{underlaydirs}}, $config{underlaydir}) {
+ find({
+ no_chdir => 1,
+ wanted => sub {
+ $_=decode_utf8($_);
+ if (file_pruned($_, $dir)) {
+ $File::Find::prune=1;
}
- else {
- # Don't add pages that are in the
- # srcdir.
- $f=~s/^\Q$config{underlaydir}\E\/?//;
- if (! -e "$config{srcdir}/$f" &&
- ! -l "$config{srcdir}/$f") {
- my $page=pagename($f);
- if (! $exists{$page}) {
- push @files, $f;
- $exists{$page}=1;
+ elsif (! -d $_ && ! -l $_) {
+ my ($f)=/$config{wiki_file_regexp}/; # untaint
+ if (! defined $f) {
+ warn(sprintf(gettext("skipping bad filename %s"), $_)."\n");
+ }
+ else {
+ $f=~s/^\Q$dir\E\/?//;
+ # avoid underlaydir
+ # override attacks; see
+ # security.mdwn
+ if (! -e "$config{srcdir}/$f" &&
+ ! -l "$config{srcdir}/$f") {
+ my $page=pagename($f);
+ if (! $exists{$page}) {
+ push @files, $f;
+ $exists{$page}=1;
+ }
}
}
}
- }
- },
- }, $config{underlaydir});
+ },
+ }, $dir);
+ };
my %rendered;
diff --git a/Makefile.PL b/Makefile.PL
index aba4239d8..1add3cf1c 100755
--- a/Makefile.PL
+++ b/Makefile.PL
@@ -32,7 +32,7 @@ ikiwiki.out: ikiwiki.in
extra_build: ikiwiki.out
LANG= perl -I. $(extramodules) $(tflag) ikiwiki.out doc html --templatedir=templates \
- --underlaydir=basewiki --nousedirs\
+ --underlaydir=underlays/basewiki --nousedirs\
--wikiname="ikiwiki" --verbose \
--exclude=/discussion --no-discussion --userdir=users \
--plugin=goodstuff \
@@ -49,7 +49,13 @@ extra_clean:
extra_install:
install -d $(DESTDIR)$(PREFIX)/share/ikiwiki
- for dir in `find basewiki templates -follow -type d ! -regex '.*\.svn.*'`; do \
+ for dir in `cd underlays && find . -follow -type d ! -regex '.*\.svn.*'`; do \
+ install -d $(DESTDIR)$(PREFIX)/share/ikiwiki/$$dir; \
+ for file in `find underlays/$$dir -follow -maxdepth 1 -type f`; do \
+ install -m 644 $$file $(DESTDIR)$(PREFIX)/share/ikiwiki/$$dir; \
+ done; \
+ done
+ for dir in `find templates -follow -type d ! -regex '.*\.svn.*'`; do \
install -d $(DESTDIR)$(PREFIX)/share/ikiwiki/$$dir; \
for file in `find $$dir -follow -maxdepth 1 -type f`; do \
install -m 644 $$file $(DESTDIR)$(PREFIX)/share/ikiwiki/$$dir; \
diff --git a/basewiki/blog.mdwn b/basewiki/blog.mdwn
deleted file mode 120000
index 1b35deb8a..000000000
--- a/basewiki/blog.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-../doc/blog.mdwn \ No newline at end of file
diff --git a/basewiki/favicon.ico b/basewiki/favicon.ico
deleted file mode 120000
index 0572371db..000000000
--- a/basewiki/favicon.ico
+++ /dev/null
@@ -1 +0,0 @@
-../doc/favicon.ico \ No newline at end of file
diff --git a/basewiki/helponformatting.mdwn b/basewiki/helponformatting.mdwn
deleted file mode 120000
index 56c810f3c..000000000
--- a/basewiki/helponformatting.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-../doc/helponformatting.mdwn \ No newline at end of file
diff --git a/basewiki/index.mdwn b/basewiki/index.mdwn
deleted file mode 120000
index d9f08acd6..000000000
--- a/basewiki/index.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-../doc/basewiki/index.mdwn \ No newline at end of file
diff --git a/basewiki/local.css b/basewiki/local.css
deleted file mode 120000
index f081a6a60..000000000
--- a/basewiki/local.css
+++ /dev/null
@@ -1 +0,0 @@
-../doc/local.css \ No newline at end of file
diff --git a/basewiki/markdown.mdwn b/basewiki/markdown.mdwn
deleted file mode 120000
index 1724caec2..000000000
--- a/basewiki/markdown.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-../doc/markdown.mdwn \ No newline at end of file
diff --git a/basewiki/openid.mdwn b/basewiki/openid.mdwn
deleted file mode 120000
index 3a37eab73..000000000
--- a/basewiki/openid.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-../doc/openid.mdwn \ No newline at end of file
diff --git a/basewiki/pagespec.mdwn b/basewiki/pagespec.mdwn
deleted file mode 120000
index 71ea44d15..000000000
--- a/basewiki/pagespec.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-../doc/pagespec.mdwn \ No newline at end of file
diff --git a/basewiki/preprocessordirective.mdwn b/basewiki/preprocessordirective.mdwn
deleted file mode 120000
index f786ed33b..000000000
--- a/basewiki/preprocessordirective.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-../doc/preprocessordirective.mdwn \ No newline at end of file
diff --git a/basewiki/sandbox.mdwn b/basewiki/sandbox.mdwn
deleted file mode 120000
index e92d4a31c..000000000
--- a/basewiki/sandbox.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-../doc/basewiki/sandbox.mdwn \ No newline at end of file
diff --git a/basewiki/shortcuts.mdwn b/basewiki/shortcuts.mdwn
deleted file mode 120000
index 33892d73a..000000000
--- a/basewiki/shortcuts.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-../doc/shortcuts.mdwn \ No newline at end of file
diff --git a/basewiki/smileys b/basewiki/smileys
deleted file mode 120000
index 56eec0317..000000000
--- a/basewiki/smileys
+++ /dev/null
@@ -1 +0,0 @@
-../doc/smileys \ No newline at end of file
diff --git a/basewiki/smileys.mdwn b/basewiki/smileys.mdwn
deleted file mode 120000
index 057df5adf..000000000
--- a/basewiki/smileys.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-../doc/smileys.mdwn \ No newline at end of file
diff --git a/basewiki/style.css b/basewiki/style.css
deleted file mode 120000
index f32009635..000000000
--- a/basewiki/style.css
+++ /dev/null
@@ -1 +0,0 @@
-../doc/style.css \ No newline at end of file
diff --git a/basewiki/subpage b/basewiki/subpage
deleted file mode 120000
index 3b66a5531..000000000
--- a/basewiki/subpage
+++ /dev/null
@@ -1 +0,0 @@
-../doc/subpage \ No newline at end of file
diff --git a/basewiki/subpage.mdwn b/basewiki/subpage.mdwn
deleted file mode 120000
index 04ec383fc..000000000
--- a/basewiki/subpage.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-../doc/subpage.mdwn \ No newline at end of file
diff --git a/basewiki/templates.mdwn b/basewiki/templates.mdwn
deleted file mode 120000
index 414cb4233..000000000
--- a/basewiki/templates.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-../doc/templates.mdwn \ No newline at end of file
diff --git a/basewiki/templates/note.mdwn b/basewiki/templates/note.mdwn
deleted file mode 120000
index 40337b9b1..000000000
--- a/basewiki/templates/note.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-../../doc/templates/note.mdwn \ No newline at end of file
diff --git a/basewiki/templates/popup.mdwn b/basewiki/templates/popup.mdwn
deleted file mode 120000
index 9391631f6..000000000
--- a/basewiki/templates/popup.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-../../doc/templates/popup.mdwn \ No newline at end of file
diff --git a/basewiki/wikiicons b/basewiki/wikiicons
deleted file mode 120000
index 0d4968c84..000000000
--- a/basewiki/wikiicons
+++ /dev/null
@@ -1 +0,0 @@
-../doc/wikiicons \ No newline at end of file
diff --git a/basewiki/wikilink.mdwn b/basewiki/wikilink.mdwn
deleted file mode 120000
index f63c38ed2..000000000
--- a/basewiki/wikilink.mdwn
+++ /dev/null
@@ -1 +0,0 @@
-../doc/wikilink.mdwn \ No newline at end of file
diff --git a/debian/changelog b/debian/changelog
index 8552edfd1..7b8e956e0 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,13 @@
-ikiwiki (2.6.2) UNRELEASED; urgency=low
+ikiwiki (2.7) UNRELEASED; urgency=low
* Add an editcontent hook.
+ * Support for looking in multiple directories for underlay files.
+ * Plugins can add new directories to the search path with the add_underlay
+ function.
+ * Split out smiley underlay files into a separate underlay, so if the plugin
+ isn't used, the wiki isn't bloated with all those files.
- -- Joey Hess <joeyh@debian.org> Sun, 26 Aug 2007 16:50:24 -0400
+ -- Joey Hess <joeyh@debian.org> Mon, 27 Aug 2007 20:48:51 -0400
ikiwiki (2.6.1) unstable; urgency=low
diff --git a/doc/basewiki.mdwn b/doc/basewiki.mdwn
index acc1b3a60..fca8902eb 100644
--- a/doc/basewiki.mdwn
+++ b/doc/basewiki.mdwn
@@ -13,7 +13,6 @@ It currently includes these pages:
* [[pagespec]]
* [[PreprocessorDirective]]
* [[shortcuts]]
-* [[smileys]]
* [[subpage]]
* [[wikilink]]
diff --git a/doc/blog.mdwn b/doc/blog.mdwn
index be4ed41e2..1593278d1 100644
--- a/doc/blog.mdwn
+++ b/doc/blog.mdwn
@@ -67,7 +67,7 @@ directive:
* `quick` - Build archives in quick mode, without reading page contents for
metadata. By default, this also turns off generation of any feeds.
* `template` - Specifies the template to fill out to display each inlined
- page. By default the `inlinepage` [[template|wikitemplates]] is used, while
+ page. By default the `inlinepage` template is used, while
the `archivepage` template is used for archives. Set this parameter to
use some other, custom template, such as the `titlepage` template that
only shows post titles. Note that you should still set `archive=yes` if
diff --git a/doc/bugs/brokenlinks_false_positives.mdwn b/doc/bugs/brokenlinks_false_positives.mdwn
new file mode 100644
index 000000000..64287dd89
--- /dev/null
+++ b/doc/bugs/brokenlinks_false_positives.mdwn
@@ -0,0 +1,6 @@
+The [[plugin/brokenlinks]] plugin falsely complains that
+[[helponformatting]] has a broken link to [[smileys]], if the smiley plgin
+is disabled. While the helponformatting page links to it inside a
+conditional, and so doesn't show the link in this case, ikiwiki scans for
+links w/o looking at conditionals and so still thinks the page contains the
+link.
diff --git a/doc/plugins/write.mdwn b/doc/plugins/write.mdwn
index 0c192eb64..4ec9e8c7b 100644
--- a/doc/plugins/write.mdwn
+++ b/doc/plugins/write.mdwn
@@ -461,8 +461,16 @@ that corresponds to that file.
#### `srcfile($)`
Given the name of a source file in the wiki, searches for the file in
-the source directory and the underlay directory, and returns the full
-path to the first file found.
+the source directory and the underlay directories (most recently added
+underlays first), and returns the full path to the first file found.
+
+#### `add_underlay($)`
+
+Adds a directory to the set of underlay directories that ikiwiki will
+search for files.
+
+If the directory name is not absolute, ikiwiki will assume it is in
+the parent directory of the configured underlaydir.
#### `displaytime($)`
diff --git a/doc/smileys.mdwn b/doc/smileys.mdwn
index dfe30430b..9915ec587 100644
--- a/doc/smileys.mdwn
+++ b/doc/smileys.mdwn
@@ -1,7 +1,3 @@
-[[if test="enabled(smiley)"
- then="This wiki has smileys **enabled**."
- else="This wiki has smileys **disabled**."]]
-
This page is used to control what smileys are supported by the wiki.
Just write the text of a smiley to display it.
diff --git a/doc/todo/conditional_underlay_files.mdwn b/doc/todo/conditional_underlay_files.mdwn
index 87f70696b..14ab4dac3 100644
--- a/doc/todo/conditional_underlay_files.mdwn
+++ b/doc/todo/conditional_underlay_files.mdwn
@@ -21,4 +21,9 @@ hackish.
> plugins were enabled.
>
> Using the conditionals in a page to control what other pages get built
-> feels complex to me, --[[Joey]]
+> feels complex to me.
+>
+> Instead, this has been implmented as the `add_underlay()` function.
+> [[done]]
+> --[[Joey]]
+
diff --git a/doc/todo/wikiwyg/discussion.mdwn b/doc/todo/wikiwyg/discussion.mdwn
index 642576b7c..79bb83a87 100644
--- a/doc/todo/wikiwyg/discussion.mdwn
+++ b/doc/todo/wikiwyg/discussion.mdwn
@@ -70,6 +70,9 @@ changes.diff:
you have something pretty specific in mind. I can talk to you about that more
on IRC later(assuming my internet is working right).
* Basically the idea is to change `$config{underlaydir}` to an array..
+ Ok, take a look at the new `add_underlay()` function. You can now just
+ `add_underlay("wikiwyg")` and it'll look in
+ /usr/share/ikiwiki/wikiwyg/ for the files.
* When is the WIKIWYG variable in misc.tmpl used?
* The WIKIWYG variable in misc.tmpl is used for the edit page. I believe that is what
you wanted me to do (Check [Revision 3840][]).
diff --git a/po/ikiwiki.pot b/po/ikiwiki.pot
index 6ebf2848d..e262569f2 100644
--- a/po/ikiwiki.pot
+++ b/po/ikiwiki.pot
@@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2007-08-26 13:39-0400\n"
+"POT-Creation-Date: 2007-08-27 21:24-0400\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@@ -36,34 +36,34 @@ msgstr ""
msgid "Preferences saved."
msgstr ""
-#: ../IkiWiki/CGI.pm:353
+#: ../IkiWiki/CGI.pm:354
#, perl-format
msgid "%s is not an editable page"
msgstr ""
-#: ../IkiWiki/CGI.pm:432 ../IkiWiki/Plugin/brokenlinks.pm:24
+#: ../IkiWiki/CGI.pm:441 ../IkiWiki/Plugin/brokenlinks.pm:24
#: ../IkiWiki/Plugin/inline.pm:209 ../IkiWiki/Plugin/opendiscussion.pm:17
#: ../IkiWiki/Plugin/orphans.pm:28 ../IkiWiki/Render.pm:99
#: ../IkiWiki/Render.pm:179
msgid "discussion"
msgstr ""
-#: ../IkiWiki/CGI.pm:478
+#: ../IkiWiki/CGI.pm:487
#, perl-format
msgid "creating %s"
msgstr ""
-#: ../IkiWiki/CGI.pm:496 ../IkiWiki/CGI.pm:514 ../IkiWiki/CGI.pm:524
-#: ../IkiWiki/CGI.pm:550 ../IkiWiki/CGI.pm:594
+#: ../IkiWiki/CGI.pm:505 ../IkiWiki/CGI.pm:523 ../IkiWiki/CGI.pm:533
+#: ../IkiWiki/CGI.pm:566 ../IkiWiki/CGI.pm:610
#, perl-format
msgid "editing %s"
msgstr ""
-#: ../IkiWiki/CGI.pm:688
+#: ../IkiWiki/CGI.pm:704
msgid "You are banned."
msgstr ""
-#: ../IkiWiki/CGI.pm:708
+#: ../IkiWiki/CGI.pm:724
msgid "login failed, perhaps you need to turn on cookies?"
msgstr ""
@@ -374,7 +374,7 @@ msgstr ""
msgid "shortcut %s points to <i>%s</i>"
msgstr ""
-#: ../IkiWiki/Plugin/smiley.pm:22
+#: ../IkiWiki/Plugin/smiley.pm:23
msgid "failed to parse any smileys"
msgstr ""
@@ -476,47 +476,47 @@ msgid ""
"notifications"
msgstr ""
-#: ../IkiWiki/Render.pm:263 ../IkiWiki/Render.pm:283
+#: ../IkiWiki/Render.pm:263 ../IkiWiki/Render.pm:284
#, perl-format
msgid "skipping bad filename %s"
msgstr ""
-#: ../IkiWiki/Render.pm:323
+#: ../IkiWiki/Render.pm:326
#, perl-format
msgid "removing old page %s"
msgstr ""
-#: ../IkiWiki/Render.pm:356
+#: ../IkiWiki/Render.pm:359
#, perl-format
msgid "scanning %s"
msgstr ""
-#: ../IkiWiki/Render.pm:361
+#: ../IkiWiki/Render.pm:364
#, perl-format
msgid "rendering %s"
msgstr ""
-#: ../IkiWiki/Render.pm:373
+#: ../IkiWiki/Render.pm:376
#, perl-format
msgid "rendering %s, which links to %s"
msgstr ""
-#: ../IkiWiki/Render.pm:390
+#: ../IkiWiki/Render.pm:393
#, perl-format
msgid "rendering %s, which depends on %s"
msgstr ""
-#: ../IkiWiki/Render.pm:428
+#: ../IkiWiki/Render.pm:431
#, perl-format
msgid "rendering %s, to update its backlinks"
msgstr ""
-#: ../IkiWiki/Render.pm:440
+#: ../IkiWiki/Render.pm:443
#, perl-format
msgid "removing %s, no longer rendered by %s"
msgstr ""
-#: ../IkiWiki/Render.pm:466
+#: ../IkiWiki/Render.pm:469
#, perl-format
msgid "ikiwiki: cannot render %s"
msgstr ""
@@ -593,11 +593,11 @@ msgstr ""
msgid "usage: --set var=value"
msgstr ""
-#: ../IkiWiki.pm:126
+#: ../IkiWiki.pm:128
msgid "Must specify url to wiki with --url when using --cgi"
msgstr ""
-#: ../IkiWiki.pm:191 ../IkiWiki.pm:192
+#: ../IkiWiki.pm:193 ../IkiWiki.pm:194
msgid "Error"
msgstr ""
@@ -605,7 +605,7 @@ msgstr ""
#. translators: preprocessor directive name,
#. translators: the second a page name, the
#. translators: third a number.
-#: ../IkiWiki.pm:688
+#: ../IkiWiki.pm:705
#, perl-format
msgid "%s preprocessing loop detected on %s at depth %i"
msgstr ""
diff --git a/t/basewiki_brokenlinks.t b/t/basewiki_brokenlinks.t
index fbcc10554..00811a5e3 100755
--- a/t/basewiki_brokenlinks.t
+++ b/t/basewiki_brokenlinks.t
@@ -1,9 +1,12 @@
#!/usr/bin/perl
use warnings;
use strict;
-use Test::More tests => 3;
+use Test::More 'no_plan';
-ok(! system("make ikiwiki.out"));
-ok(! system("LANG=C perl -T -I. ./ikiwiki.out -plugin brokenlinks -rebuild -underlaydir=basewiki -templatedir=templates t/basewiki_brokenlinks t/basewiki_brokenlinks/out"));
-ok(`grep 'no broken links' t/basewiki_brokenlinks/out/index.html`);
-system("rm -rf t/basewiki_brokenlinks/out t/basewiki_brokenlinks/.ikiwiki");
+ok(! system("mkdir t/tmp"));
+ok(! system("make -q ikiwiki.out"));
+ok(! system("make extra_install DESTDIR=t/tmp/install PREFIX=/usr >/dev/null"));
+ok(! system("LANG= perl -T -I. ./ikiwiki.out -plugin smiley -plugin brokenlinks -rebuild -underlaydir=t/tmp/install/usr/share/ikiwiki/basewiki -templatedir=templates t/basewiki_brokenlinks t/tmp/out"));
+ok(`grep 'no broken links' t/tmp/out/index.html`);
+ok(-e "t/tmp/out/style.css");
+ok(! system("rm -rf t/tmp t/basewiki_brokenlinks/.ikiwiki"));
diff --git a/underlays/basewiki/blog.mdwn b/underlays/basewiki/blog.mdwn
new file mode 120000
index 000000000..9ab431078
--- /dev/null
+++ b/underlays/basewiki/blog.mdwn
@@ -0,0 +1 @@
+../../doc/blog.mdwn \ No newline at end of file
diff --git a/underlays/basewiki/favicon.ico b/underlays/basewiki/favicon.ico
new file mode 120000
index 000000000..399fec7c6
--- /dev/null
+++ b/underlays/basewiki/favicon.ico
@@ -0,0 +1 @@
+../../doc/favicon.ico \ No newline at end of file
diff --git a/underlays/basewiki/helponformatting.mdwn b/underlays/basewiki/helponformatting.mdwn
new file mode 120000
index 000000000..6d0d82f71
--- /dev/null
+++ b/underlays/basewiki/helponformatting.mdwn
@@ -0,0 +1 @@
+../../doc/helponformatting.mdwn \ No newline at end of file
diff --git a/underlays/basewiki/index.mdwn b/underlays/basewiki/index.mdwn
new file mode 120000
index 000000000..37c114529
--- /dev/null
+++ b/underlays/basewiki/index.mdwn
@@ -0,0 +1 @@
+../../doc/basewiki/index.mdwn \ No newline at end of file
diff --git a/underlays/basewiki/local.css b/underlays/basewiki/local.css
new file mode 120000
index 000000000..01a7b0448
--- /dev/null
+++ b/underlays/basewiki/local.css
@@ -0,0 +1 @@
+../../doc/local.css \ No newline at end of file
diff --git a/underlays/basewiki/markdown.mdwn b/underlays/basewiki/markdown.mdwn
new file mode 120000
index 000000000..7b555fd91
--- /dev/null
+++ b/underlays/basewiki/markdown.mdwn
@@ -0,0 +1 @@
+../../doc/markdown.mdwn \ No newline at end of file
diff --git a/underlays/basewiki/openid.mdwn b/underlays/basewiki/openid.mdwn
new file mode 120000
index 000000000..f2d584b4c
--- /dev/null
+++ b/underlays/basewiki/openid.mdwn
@@ -0,0 +1 @@
+../../doc/openid.mdwn \ No newline at end of file
diff --git a/underlays/basewiki/pagespec.mdwn b/underlays/basewiki/pagespec.mdwn
new file mode 120000
index 000000000..b5eb02e04
--- /dev/null
+++ b/underlays/basewiki/pagespec.mdwn
@@ -0,0 +1 @@
+../../doc/pagespec.mdwn \ No newline at end of file
diff --git a/underlays/basewiki/preprocessordirective.mdwn b/underlays/basewiki/preprocessordirective.mdwn
new file mode 120000
index 000000000..4b45d4966
--- /dev/null
+++ b/underlays/basewiki/preprocessordirective.mdwn
@@ -0,0 +1 @@
+../../doc/preprocessordirective.mdwn \ No newline at end of file
diff --git a/underlays/basewiki/sandbox.mdwn b/underlays/basewiki/sandbox.mdwn
new file mode 120000
index 000000000..0761adf3c
--- /dev/null
+++ b/underlays/basewiki/sandbox.mdwn
@@ -0,0 +1 @@
+../../doc/basewiki/sandbox.mdwn \ No newline at end of file
diff --git a/underlays/basewiki/shortcuts.mdwn b/underlays/basewiki/shortcuts.mdwn
new file mode 120000
index 000000000..2e6bfcdc2
--- /dev/null
+++ b/underlays/basewiki/shortcuts.mdwn
@@ -0,0 +1 @@
+../../doc/shortcuts.mdwn \ No newline at end of file
diff --git a/underlays/basewiki/style.css b/underlays/basewiki/style.css
new file mode 120000
index 000000000..9383b4afe
--- /dev/null
+++ b/underlays/basewiki/style.css
@@ -0,0 +1 @@
+../../doc/style.css \ No newline at end of file
diff --git a/underlays/basewiki/subpage b/underlays/basewiki/subpage
new file mode 120000
index 000000000..a22701f64
--- /dev/null
+++ b/underlays/basewiki/subpage
@@ -0,0 +1 @@
+../../doc/subpage \ No newline at end of file
diff --git a/underlays/basewiki/subpage.mdwn b/underlays/basewiki/subpage.mdwn
new file mode 120000
index 000000000..6c225fc92
--- /dev/null
+++ b/underlays/basewiki/subpage.mdwn
@@ -0,0 +1 @@
+../../doc/subpage.mdwn \ No newline at end of file
diff --git a/underlays/basewiki/templates.mdwn b/underlays/basewiki/templates.mdwn
new file mode 120000
index 000000000..a7bb48f95
--- /dev/null
+++ b/underlays/basewiki/templates.mdwn
@@ -0,0 +1 @@
+../../doc/templates.mdwn \ No newline at end of file
diff --git a/underlays/basewiki/templates/note.mdwn b/underlays/basewiki/templates/note.mdwn
new file mode 120000
index 000000000..f44d40c80
--- /dev/null
+++ b/underlays/basewiki/templates/note.mdwn
@@ -0,0 +1 @@
+../../../doc/templates/note.mdwn \ No newline at end of file
diff --git a/underlays/basewiki/templates/popup.mdwn b/underlays/basewiki/templates/popup.mdwn
new file mode 120000
index 000000000..4761d7f4f
--- /dev/null
+++ b/underlays/basewiki/templates/popup.mdwn
@@ -0,0 +1 @@
+../../../doc/templates/popup.mdwn \ No newline at end of file
diff --git a/underlays/basewiki/wikiicons b/underlays/basewiki/wikiicons
new file mode 120000
index 000000000..b333d714a
--- /dev/null
+++ b/underlays/basewiki/wikiicons
@@ -0,0 +1 @@
+../../doc/wikiicons \ No newline at end of file
diff --git a/underlays/basewiki/wikilink.mdwn b/underlays/basewiki/wikilink.mdwn
new file mode 120000
index 000000000..146ac42bb
--- /dev/null
+++ b/underlays/basewiki/wikilink.mdwn
@@ -0,0 +1 @@
+../../doc/wikilink.mdwn \ No newline at end of file
diff --git a/underlays/smiley/smileys b/underlays/smiley/smileys
new file mode 120000
index 000000000..5ccf882ba
--- /dev/null
+++ b/underlays/smiley/smileys
@@ -0,0 +1 @@
+../../doc/smileys \ No newline at end of file
diff --git a/underlays/smiley/smileys.mdwn b/underlays/smiley/smileys.mdwn
new file mode 120000
index 000000000..fdfdbf66d
--- /dev/null
+++ b/underlays/smiley/smileys.mdwn
@@ -0,0 +1 @@
+../../doc/smileys.mdwn \ No newline at end of file