automatic kbuildsycoca recreate when home dir and/or install dir changes
Ralf Habacker
ralf.habacker at freenet.de
Mon Apr 7 21:54:04 BST 2008
Ralf Habacker schrieb:
> David Faure schrieb:
>> On Friday 04 April 2008, Ralf Habacker wrote:
>>
>>> Hi,
>>>
>>> appended is a patch for kbuildsycoca which checks a changed home and/or
>>> install directory and triggers a complete recreate of the ksycoca
>>> database in those cases. This is required for usb stick installations.
>>>
>>> The patch is currently limited to windows, although it may also be
>>> usefull for unix os. In that case i would remove the conditionals.
>>>
>>
>> Yes this would be most useful, on unix too, please commit without
>> ifdefs.
>>
>>
>> In fact it makes me think again about my idea of having one ksycoca
>> per value of kfsstnd_prefixes,
>> and a config file (ksycocarc?) to do the mapping...
>>
>> ... pasting from my 27/03/2006 email: ...
>>
>> [/opt/kde3]
>> FileName=ksycoca1
>> [/d/kde/inst/kofficedir:/d/kde/inst/kde3]
>> FileName=ksycoca2
>>
>> This way, for a given value of KDEDIRS, the code can easily lookup
>> the ksycoca to
>> use, and two sessions of KDE with different parameters will stop
>> overwriting
>> each other's ksycoca.
>>
>> ... end paste...
>>
>> Of course this is all "for a given value of $KDEHOME". When using
>> another kdehome you end
>> up with another ksycocarc, just like right now you end up with a
>> different ksycoca.
>>
>> This is happening to me right now with kdelibs-4.0 and kdelibs-trunk
>> on the same computer,
>> and even though I don't run both as a user, the unit tests from both
>> use KDEHOME=~/.kde-unit-test
>> so I have to remove the ksycoca db by hand if I don't want mixups
>> happening...
>>
>> What do you think about my proposed solution?
>>
> As you said - this is a request/proposal for a
> multi-ksycoca-database-handling in a single-user-environment which the
> windows developers are faced too, for example when having a release
> build and a debug build in different pathes under the same windows user.
>
> Using different ksycoca databases
to clarify: for each kdedirs location
> will add extra complexitivity to building, maintaing and accessing
> those files (iterating over entries of more than one data streams),
> may add extra delay on application startup loading all those ksycoca's
> - I'm not sure if the required effort would be worth. Additional using
> hard coded paths in a ksycocarc file would add headache in maintaining
> this files - on windows this would not be a reliable solution.
>
> At least on windows it would be enough to add kde installation path to
> the ksyscoca database name to have unique databases for each
> installation for the same user. The kde installation path on windows
> is detected at runtime by the location of kdecore.dll.
>
> Unfortunally there are two problems:
>
> - the ksycoca path is generated in two places - one in bool
> kdecore/ksycoca/ksycoca.cpp KSycocaPrivate::openDatabase( bool
> openDummyIfNotFound ) and one in kded/kbuildsycoca.cpp in static
> QString sycocaPath(). At first it is required to move this to a common
> place - my suggestion would be a static method of class KSycoca say
> QString KSycoca::absoluteFilePath() which can be used by both places -
> Appended is a related patch for reviewing.
> - I have not found any QString KStandardDirs::installPath(const char
> *type) with type "root" to get the install path or do i have missed
> something ?
>
> Ralf
>
More information about the kde-core-devel
mailing list