[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-devel
Subject:    Re: Custom EXPORT macro won't expand when included outside lib
From:       Luiz_Romário_Santana_Rios <luizromario () gmail ! com>
Date:       2012-09-12 22:13:58
Message-ID: CABCW-kr0VVt3UaxOsG_6V-8uQ=JBPX0+GJvN48mxLQp_t_PWrg () mail ! gmail ! com
[Download RAW message or body]

2012/9/11 Sandro Andrade <sandroandrade@kde.org>:
> On Mon, Sep 10, 2012 at 9:29 PM, Luiz Romário Santana Rios
> <luizromario@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?

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 <<
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic