type => "string",
default => "",
example => "$ENV{HOME}/.ikiwiki/",
- description => "extra library and plugin directory",
+ description => "extra library and plugin directorys. Can be either a string (for backward compatibility) or a list of strings.",
advanced => 1,
safe => 0, # directory
rebuild => 0,
},
}
+sub getlibdirs () {
+ my $libdirs;
+ if (! ref $config{libdir}) {
+ if (length $config{libdir}) {
+ $libdirs = [$config{libdir}];
+ } else {
+ $libdirs = [];
+ }
+ } else {
+ $libdirs = $config{libdir};
+ }
+ return @{$libdirs};
+}
+
sub defaultconfig () {
my %s=getsetup();
my @ret;
sub listplugins () {
my %ret;
- foreach my $dir (@INC, $config{libdir}) {
+ foreach my $dir (@INC, getlibdirs()) {
next unless defined $dir && length $dir;
foreach my $file (glob("$dir/IkiWiki/Plugin/*.pm")) {
my ($plugin)=$file=~/.*\/(.*)\.pm$/;
$ret{$plugin}=1;
}
}
- foreach my $dir ($config{libdir}, "$installdir/lib/ikiwiki") {
+ foreach my $dir (getlibdirs(), "$installdir/lib/ikiwiki") {
next unless defined $dir && length $dir;
foreach my $file (glob("$dir/plugins/*")) {
$ret{basename($file)}=1 if -x $file;
sub loadplugins () {
if (defined $config{libdir} && length $config{libdir}) {
- unshift @INC, possibly_foolish_untaint($config{libdir});
+ foreach my $dir (getlibdirs()) {
+ unshift @INC, possibly_foolish_untaint($dir);
+ }
}
foreach my $plugin (@{$config{default_plugins}}, @{$config{add_plugins}}) {
return if ! $force && grep { $_ eq $plugin} @{$config{disable_plugins}};
- foreach my $dir (defined $config{libdir} ? possibly_foolish_untaint($config{libdir}) : undef,
- "$installdir/lib/ikiwiki") {
+ foreach my $possiblytainteddir (getlibdirs(), "$installdir/lib/ikiwiki") {
+ my $dir = defined $possiblytainteddir ? possibly_foolish_untaint($possiblytainteddir) : undef;
if (defined $dir && -x "$dir/plugins/$plugin") {
eval { require IkiWiki::Plugin::external };
if ($@) {
`/usr/local/lib/site_perl` for modules, you can locally install ikiwiki
plugins to `/usr/local/lib/site_perl/IkiWiki/Plugin`
-You can use the `libdir` configuration option to add a directory to the
+You can use the `libdir` configuration option to add directories to the
search path. For example, if you set `libdir` to `/home/you/.ikiwiki/`,
-then ikiwiki will look for plugins in `/home/you/.ikiwiki/IkiWiki/Plugin`.
+then ikiwiki will look for plugins in `/home/you/.ikiwiki/IkiWiki/Plugin`. This
+configuration option can be either a string (for backward compatibility) or a
+list of strings (to add several directories to the search path).
Ikiwiki also supports plugins that are external programs. These are
typically written in some other language than perl. Ikiwiki searches for