]> sipb.mit.edu Git - ikiwiki.git/blobdiff - IkiWiki.pm
Allow several extra library and plugin directories (libdir option)
[ikiwiki.git] / IkiWiki.pm
index 1043ef4024ba5994d773b524103c46baad50b084..73fedb0a64598de0cd922117a3ac6ab7b0be16bb 100644 (file)
@@ -361,7 +361,7 @@ sub getsetup () {
                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,
@@ -551,6 +551,17 @@ sub getsetup () {
        },
 }
 
+sub getlibdirs () {
+       if (! ref $config{libdir}) {
+               if (length $config{libdir}) {
+                       return [$config{libdir}];
+               } else {
+                       return [];
+               }
+       }
+       return $config{libdir};
+}
+
 sub defaultconfig () {
        my %s=getsetup();
        my @ret;
@@ -693,14 +704,14 @@ sub checkconfig () {
 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;
@@ -712,7 +723,9 @@ sub listplugins () {
 
 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}}) {
@@ -745,8 +758,8 @@ sub loadplugin ($;$) {
 
        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 ($@) {