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

List:       kde-devel
Subject:    Re: kcm_keyboard 4.5.4 fails to build
From:       Erik <esigra () gmail ! com>
Date:       2010-12-25 7:01:46
Message-ID: 4D1596DA.5020508 () gmail ! com
[Download RAW message or body]

2010-12-25 02:17, Andriy Rysin skrev:
> 2010/12/24 Andreas Pakulat<apaku@gmx.de>
>
>> On 24.12.10 16:06:54, Erik wrote:
>>> kcm_keyboard 4.5.4 fails to build
>>>
>>> Steps to reproduce:
>>> 1. tar jxvf /usr/portage/distfiles/kdebase-workspace-4.5.4.tar.bz2
>>> 2. cd kdebase-workspace-4.5.4
>>> 3. mkdir build
>>> 4. cd build
>>> 5. cmake -DKDE4_ENABLE_FINAL=ON ..
>>> 6. make kcm_keyboard
>>>
>>> Actual result:
>>> In file included from /usr/include/qt4/QtCore/QDir:1,
>>>                    from
>>>
>> /home/work/programmering/kdebase-workspace-4.5.4/kcontrol/keyboard/xkb_helper.cpp:22,
>>>                    from
>>>
>> /home/work/programmering/kdebase-workspace-4.5.4/build/kcontrol/keyboard/kcm_keyboard_final_cpp.cpp:8:
>>> /usr/include/qt4/QtCore/qdir.h:107: fel: expected identifier before
>>> numeric constant
>>> /usr/include/qt4/QtCore/qdir.h:107: fel: expected "}" before numeric
>>> constant
>>> /usr/include/qt4/QtCore/qdir.h:107: fel: expected unqualified-id before
>>> numeric constant
>> Note that for most of the errors you posted you won't get much help here
>> I think. The reason is that this list is mostly concerned with
>> development-questions when using KDE code. If you find such build
>> problems you're probably better of finding the maintainer of the
>> relevant bit of code (svn blame or a README file) and talk to those
>> people directly.
>>
> I hope by "maintainer of relevant bit of code" you mean "maintainer of
> qdir.h", as I am the maintainer of kcm_keyboard and I have not idea why it
> breaks in FINAL mode. :) I guess some includes are messed up/missing with
> FINAL=ON but I am afraid it'll take somebody who really knows what FINAL
> mode is to help with this.

Final mode is no magic at all. It just compiles a file that includes all 
cc/cpp files. I looked at qdir.h, and the problematic piece is this:
     enum SortFlag { Name        = 0x00,
                     Time        = 0x01,
                     Size        = 0x02,
                     Unsorted    = 0x03,
                     SortByMask  = 0x03,

                     DirsFirst   = 0x04,
                     Reversed    = 0x08,
                     IgnoreCase  = 0x10,
                     DirsLast    = 0x20,
                     LocaleAware = 0x40,
                     Type        = 0x80,
                     NoSort = -1
#ifdef QT3_SUPPORT
                   ,DefaultSort = NoSort
#endif
     };


Then I used
     cmake -DKDE4_ENABLE_FINAL=ON -DCMAKE_VERBOSE_MAKEFILE=ON ..
to see the build command, and modified it to only preprocess the source. 
Then I searched for "enum SortFlag" in the preprocessor output. There I 
found this:
     enum SortFlag { Name = 0x00,
                     Time = 0x01,
                     Size = 0x02,
                     0 = 0x03,
                     SortByMask = 0x03,

                     DirsFirst = 0x04,
                     Reversed = 0x08,
                     IgnoreCase = 0x10,
                     DirsLast = 0x20,
                     LocaleAware = 0x40,
                     Type = 0x80,
                     NoSort = -1



     };



So for some reason Unsorted was substituted with 0 during preprocessing. 
I see traces of other people finding the same issue and trying to work 
around it:
$ grep "#undef Unsorted" -r kdebase-workspace-4.5.4
kdebase-workspace-4.5.4/kcontrol/krdb/krdb.cpp:#undef Unsorted
kdebase-workspace-4.5.4/kcontrol/kdm/background/bgsettings.cpp:#undef 
Unsorted
kdebase-workspace-4.5.4/kcontrol/fonts/fonts.cpp:#undef Unsorted

I notice that the occurence in 
kdebase-workspace-4.5.4/kcontrol/kdm/background/bgsettings.cpp has the 
comment "Clean up after X.h/Xlib.h". I look what that means:
$ grep Unsorted /usr/include/X11/ -r
/usr/include/X11/X.h:#define Unsorted           0

So obviously X.org pollutes the namespace. I was able to fix the build 
with the attached patch.

["kcm_keyboard-cleanup_after_X11_includes-1.diff" (text/plain)]

diff -ru kdebase-workspace-4.5.4/kcontrol/keyboard/x11_helper.cpp.orig \
                kdebase-workspace-4.5.4/kcontrol/keyboard/x11_helper.cpp
--- kdebase-workspace-4.5.4/kcontrol/keyboard/x11_helper.cpp	2010-09-30 \
                23:20:14.000000000 +0200
+++ /home/work/programmering/kdebase-workspace-4.5.4/kcontrol/keyboard/x11_helper.cpp	2010-12-25 \
07:42:24.628000182 +0100 @@ -27,6 +27,9 @@
 #include <X11/Xatom.h>
 #include <X11/XKBlib.h>
 #include <X11/extensions/XKBrules.h>
+// clean up after X.h/Xlib.h
+#undef Bool
+#undef Unsorted
 
 
 // more information about the limit \
                https://bugs.freedesktop.org/show_bug.cgi?id=19501
diff -ru kdebase-workspace-4.5.4/kcontrol/keyboard/xinput_helper.cpp \
                kdebase-workspace-4.5.4/kcontrol/keyboard/xinput_helper.cpp
--- kdebase-workspace-4.5.4/kcontrol/keyboard/xinput_helper.cpp	2010-09-30 \
                23:20:14.000000000 +0200
+++ /home/work/programmering/kdebase-workspace-4.5.4/kcontrol/keyboard/xinput_helper.cpp	2010-12-25 \
07:51:18.672999713 +0100 @@ -31,6 +31,10 @@
 #include <X11/extensions/XInput.h>
 #endif
 
+// clean up after X.h/Xlib.h
+#undef Bool
+#undef Unsorted
+
 #include "x11_helper.h"
 
 



>> 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