On Wed, Sep 12, 2012 at 7:13 PM, Luiz Romário Santana Rios
<luizroma...@gmail.com> wrote:
> 2012/9/11 Sandro Andrade <sandroandr...@kde.org>:
>> On Mon, Sep 10, 2012 at 9:29 PM, Luiz Romário Santana Rios
>> <luizroma...@gmail.com> wrote:
>>> Hi.
>>>
>>> So, I recently started to write a "pluggable" library. You can check it from
>>> here:
>>> http://quickgit.kde.org/index.php?p=scratch%2Fromariorios%2Flibkodri.git&a=summary
>>> .
>>>
>>> It was all good until I tried to write a dummy plugin for it (currently
>>> available in the dummy_packagesource branch of the above repo). It was a
>>> pretty trivial plugin, it just implemented the pure virtual functions from
>>> the interface. But I kept getting this error:
>>>
>>> [100%] Building CXX object
>>> packagesources/CMakeFiles/kodri_packagesource_dummy.dir/dummypackagesource.o
>>> In file included from
>>> /home/kde4/kde-master-install/include/kodri/abstractpackagesource.h:29:0,
>>>                  from
>>> /home/kde4/kdesrc/libkodri/packagesources/dummypackagesource.h:23,
>>>                  from
>>> /home/kde4/kdesrc/libkodri/packagesources/dummypackagesource.cpp:20:
>>> /home/kde4/kde-master-install/include/kodri/version.h:31:28: error: expected
>>> initializer before ‘:’ token
>>> /home/kde4/kdesrc/libkodri/packagesources/dummypackagesource.cpp:1381:1:
>>> error: expected ‘}’ at end of input
>>> make[2]: **
>>> [packagesources/CMakeFiles/kodri_packagesource_dummy.dir/dummypackagesource.o]
>>> Erro 1
>>> make[1]: ** [packagesources/CMakeFiles/kodri_packagesource_dummy.dir/all]
>>> Erro 2
>>> make: ** [all] Erro 2
>>>
>>> I then suspected that the KODRI_EXPORT macro wasn't being expanded when the
>>> exported classes were included outside the library. Then I manually replaced
>>> KODRI_EXPORT by __attribute__ ((visibility("default")) and, as I suspected,
>>> the error vanished. Of course, other errors appeared afterwards, but I'll
>>> try to solve them later.
>>>
>>> My question is: why doesn't the macro expand? I followed the techbase
>>> tutorial on creating new libraries step by step, so I can't see where I got
>>> it wrong.
>>
>> It doesn't expand because you have a wrong kodri_export.h:
>>
>> #ifndef KODRI_EXPORT
>> # if defined(MAKE_KODRI_LIB)
>> #  define KODRI_EXPORT KDE_EXPORT
>> # else
>> #  define KODRI_IMPORT KDE_IMPORT
>> # endif
>> #endif
>>
>> It should be:
>>
>> #ifndef KODRI_EXPORT
>> # if defined(MAKE_KODRI_LIB)
>> #  define KODRI_EXPORT KDE_EXPORT
>> # else
>> #  define KODRI_EXPORT KDE_IMPORT
>> # endif
>> #endif
> Whoops...
>
> Thank you, I'd take ages to notice that.
>
>>
>> Besides that, I'd rearrange CMakeLists.txt's in order to have lib and
>> plugin as sibling sub-CMakeLists.txt (or even as separated projects).
>> Find a possible refactoring at:
>>
>> http://d01.megashares.com/dl/dTjbpUz/libkodri-refactored.tar.gz
> I'll take a look at it.
>
>>
>> Plugin's CMakeLists.txt also contains some errors:
>>
>> target_link_libraries(kodri_packagesource_dummy ${KDE4_CORE_LIBS}
>> ${KDE4_KODRI_LIBS})
>>
>> The correct var is ${KDE4_KDECORE_LIBS}. ${KDE4_KODRI_LIBS} isn't
>> automatically generated
>> at all. You should write a cmake module in order to detect your library.
> I have this in CMakeLists.txt:37:
>
> install(TARGETS kodri EXPORT kdelibsLibraryTargets
> ${INSTALL_TARGETS_DEFAULT_ARGS})
>
> Doesn't it do the job?

Not completely. If you try to build the plugin in an environment which
doesn't have your
lib installed, cmake won't detect that. You'll get only a compiler error.

See for example:
https://projects.kde.org/projects/extragear/kdevelop/kdevelop/repository/revisions/master/entry/cmake/modules/FindKDevPlatform.cmake

That will allow you to use a:

find_package(Kodri 1.0.0 REQUIRED)

in the plugin's CMakeLists.txt. If it's not found cmake will early detect that.

[]s,
Sandro

>
> Thanks for the pointers.
>
>>
>> Sandro
>>
>>>
>>> Best regards.
>>>
>>> --
>>> Luiz Romário Santana Rios
>>>
>>>
>>>>> Visit http://mail.kde.org/mailman/listinfo/kde-devel#unsub to unsubscribe
>>>>> <<
>>>
>>
>>>> Visit http://mail.kde.org/mailman/listinfo/kde-devel#unsub to unsubscribe 
>>>> <<
>
>
>
> --
> Luiz Romário Santana Rios
>
>>> Visit http://mail.kde.org/mailman/listinfo/kde-devel#unsub to unsubscribe <<

>> Visit http://mail.kde.org/mailman/listinfo/kde-devel#unsub to unsubscribe <<

Reply via email to