aboutsummaryrefslogtreecommitdiff
path: root/doc/todo/support_multiple_perl_libraries.mdwn
blob: 579e35749399c376da64a5f55f671801a80d9615 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
It would be useful to have 

    libdir=>[ qw{libdir1 libdir2 libdir3} ]

as a setup option.  I have a couple of different directories that e.g. come from different git repos, so merging them is a bit messy.

I think the change is a one-liner, but I put this here for discussion before attempting a patch. If some more confident person wants to have a go, feel free.

[[DavidBremner]]

> I would like this feature too, for the very same reasons.
>
> To preserve backward compatibility, I tried to implement it in the following way: if `libdir` is a string, it is (as it is right now), a directory in which plugins can be searched; if `libdir` is an array of strings, it is a list of libdirs. The ideal place to put it in would be in subroutine [checkconfig](http://source.ikiwiki.branchable.com/?p=source.git;a=blob;f=IkiWiki.pm;hb=56f8223f9594ae687099dada0c138d669a6f931f#l569). However, plugins are loaded (and option `libdir` is used) in subroutine [loadplugins](http://source.ikiwiki.branchable.com/?p=source.git;a=blob;f=IkiWiki.pm;hb=56f8223f9594ae687099dada0c138d669a6f931f#l713), which is called [just before `checkconfig`](http://source.ikiwiki.branchable.com/?p=source.git;a=blob;f=ikiwiki.in;hb=729991564ec7e1116fc023c51e73b47af8b6fce7#l143).
>
> A solution would be to check `libdir` (and turn it into a list if necessary) somewhere in subroutine [getconfig](http://source.ikiwiki.branchable.com/?p=source.git;a=blob;f=ikiwiki.in;hb=729991564ec7e1116fc023c51e73b47af8b6fce7#l26), but I do not know where to put it not to make it look like a bad hack…
>
> Any idea about the best place to preprocess `libdir`? Or any better idea to implement this?
>
> [[Louis|spalax]]

>> Modifying `getconfig` is not a valid solution, because IkiWiki.pm is also imported by
>> [[ikiwiki-transition]], [[ikiwiki-calendar]], the regression tests, etc.
>>
>> The way I would personally do it is to have a new non-exported function `getlibdirs`
>> or something, have it do something like this:
>>
>>     if (! ref $config{libdir}) {
>>             if (length $config{libdir}) {
>>                     $config{libdir} = [$config{libdir}];
>>             } else {
>>                     $config{libdir} = [];
>>             }
>>     }
>>     return @{$config{libdir}};
>>
>> and replace all uses of $config{libdir} with it.
>>
>> --[[smcv]]
>>>
>>> I implemented it (see branch ``paternal/libdirs``). I used [[smcv]]'s idea, but
>>> avoiding side effects. I edited documentation as well. As usual, as neither
>>> English nor Perl are my first languages (damn! I would be so much more
>>> efficient in Python) feel free to improve my [[!taglink patch]].
>>> [[!template  id=gitbranch branch=spalax/paternal/libdirs browse="https://github.com/paternal/ikiwiki/tree/paternal/libdirs" author="[[Louis|spalax]]"]]

>>>> While reviewing and applying your patch I decided the new
>>>> "sometimes a list, sometimes not" behaviour of `libdir` was
>>>> too confusing in documentation, so I made it work like underlaydir(s)
>>>> instead: ikiwiki will now search each item of `$config{libdirs}`, then
>>>> `$config{libdir}`. [[done]] --[[smcv]]

>>>>> Good. I cannot see any justification apart from historical reasons, but I
>>>>> agree with your choice.
>>>>> -- [[Louis|spalax]]

[[!taglink wishlist]]