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

    List:       kde-edu
    Subject:    [kde-edu]: KDE_EXPORT in libkdeedu (long)
    From:       Jason Harris <kstars () 30doradus ! org>
    Date:       2005-03-08 20:07:27
    Message-ID: 200503081307.27418.kstars () 30doradus ! org
    [Download message RAW]

    Hello,

    At work I am running KDE-3.3.1 and gcc-3.4.2 on Fedora Core 3.  I have noticed
    that with this combination, I cannot compile kdeedu from HEAD, because I get
    "visibility" errors in libkdeedu, due to the use of the "KDE_EXPORT" macro.

    After some searching, I think I have narrowed down the problem.  In KDE-3.3.1,
    the kdemacros.h file contains:

    #if __GNUC__ - 0 > 3 || (__GNUC__ - 0 == 3 && __GNUC_MINOR__ - 0 > 2)
    #define KDE_NO_EXPORT __attribute__ ((visibility("hidden")))
    #define KDE_EXPORT __attribute__ ((visibility("visible")))
    #else
    #define KDE_NO_EXPORT
    #define KDE_EXPORT
    #endif

    Whereas, it has since been changed to:

    #if __GNUC__ - 0 > 3 || (__GNUC__ - 0 == 3 && __GNUC_MINOR__ - 0 > 4)
    /* Visibility is available for GCC newer than 3.4.
     * See: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=9283
     */
    #define KDE_NO_EXPORT __attribute__ ((visibility("hidden")))
    #define KDE_EXPORT __attribute__ ((visibility("default")))
    #elif defined(Q_WS_WIN)
    #define KDE_NO_EXPORT
    #define KDE_EXPORT __declspec(dllexport)
    #else
    #define KDE_NO_EXPORT
    #define KDE_EXPORT
    #endif

    So, KDE_EXPORT used to mean visibility="visible", and it now means
    visibility="default".  My compile error states that 'visibility must be one
    of "default",  "hidden", "protected" or "internal" ', because it's picking up
    the deprecated(?) "visible" definition of KDE_EXPORT.

    I have read that this is fixed in KDE-3.3.2, so maybe it isn't worth fixing
    and we should simply tell any users who complain about this to upgrade to
    3.3.2 or newer.  However, I have implemented a workaround in my local copies
    of libkdeedu/kdeeduplot and libkdeedu/extdate.  In pertinent header files, I
    placed the following:

    #if __GNUC__ - 0 > 3 || (__GNUC__ - 0 == 3 && __GNUC_MINOR__ - 0 > 3)
    #define KSTARS_NO_EXPORT __attribute__ ((visibility("hidden")))
    #define KSTARS_EXPORT __attribute__ ((visibility("default")))
    #else
    #define KSTARS_NO_EXPORT KDE_NO_EXPORT
    #define KSTARS_EXPORT KDE_EXPORT
    #endif

    and then replaced all instances of "KDE_EXPORT" with "KSTARS_EXPORT".  Note
    that this not only fixes the deprecated visibility flag ("visible" ->
    "default"), it also modifies the GNUC_MINOR check from ">4" to ">3".  I
    changed this because my GNUC_MINOR is not >4 (I have gcc-3.4.2), yet it knows
    about visibility.

    Do you think it is worth applying a patch like this?  I would like my app to
    be usable by any version of KDE-3.3.x, not just >=KDE-3.3.2.  I believe this
    is the only issue preventing it.

    Also, do you think that the GNUC_MINOR check in kdemacros is in error?  I
    don't know anything about this visibility stuff, all I know is what my
    gcc-3.4.2 compiler is telling me...

    thanks,
    Jason
    --
    -------------------------------
    KStars: KDE Desktop Planetarium
    http://edu.kde.org/kstars
    _______________________________________________
    kde-edu mailing list
    kde-edu@mail.kde.org
    https://mail.kde.org/mailman/listinfo/kde-edu
    [prev in list] [next in list] [prev in thread] [next in thread]

Configure | The K Desktop Environment home page | Other List Archives at MARC