[Kde-windows] KDE/kdelibs/win

Jarosław Staniek js at iidea.pl
Tue Oct 18 09:41:46 CEST 2005


Ralf Habacker said the following, On 2005-10-18 08:32:

> Am Montag, 17. Oktober 2005 23:38 schrieb Ralf Habacker:
> 
>>Am Montag, 17. Oktober 2005 20:12 schrieb Jarosław Staniek:
>>
>>>Ralf Habacker said the following, On 2005-10-17 19:41:
>>>
>>>>Am Montag, 17. Oktober 2005 18:34 schrieb Jarosław Staniek:
>>>>
>>>>>Ralf Habacker said the following, On 2005-10-17 18:06:
>>>>>
>>>>>>Am Montag, 17. Oktober 2005 16:59 schrieb Jarosław Staniek:
>>>>>>
>>>>>>>Ralf Habacker said the following, On 2005-10-17 16:47:
>>>>>>>
>>>>>>>>SVN commit 471384 by habacker:
>>>>>>>>
>>>>>>>>don't need this stuff for qt4, dcopserver runs without it
>>>>>>>>
>>>>>>>>D             bootstrap.cpp
>>>>>>>
>>>>>>>Hm?
>>>>>>>bootstrap.cpp is not only for qeventloop. Look at the code and
>>>>>>>docs... More code like this will go here too. Or have you moved this
>>>>>>>somewhere?
>>>>>>
>>>>>>You mean this bootstrap stuff which is called  before main and
>>>>>>requires special hacking of the main function ?
>>>>>>
>>>>>>The eventloop startup is obsolate , but I have overseen that there
>>>>>>will be directories created and the HOME var set in win95 case,
>>>>>>sorry. I have readded this file without the qeventloop stuff.
>>>>>>
>>>>>>BTW: Should KDE really  support win95 ?
>>>>>
>>>>>KDE? I never worked on KDE for windows but on kdelibs.
>>>>>Read explanation here, again (hmm, offline currently):
>>>>>http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32
> 
> 
> no problem here, I mean that the stuff we are talking about is for win 95 and 
> the question was intended to ask general, if windows 95 should be support or 
> not (I prefer not, because of the huge gdi resource problems, to which we 
> will be faced) 
> 
> 
>>>>>>And what about the network startup
>>>>>>stuff ? KICE calls it too and QT as far as I can see too ?
>>>>>
>>>>>which one 'network startup'?
>>>>
>>>>KDEWIN32_EXPORT void kde_bootstrap()
>>>>{
>>>>	...
>>>>	WSADATA wsadata;
>>>>	WSAStartup(MAKEWORD(2,2),&wsadata);
>>>>
>>>>This function starts up networking.
>>>
>>>I guess this was for dcop. So now can be removed (better: commented out).
> 
> 
>>>>See
>>>>http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winsoc
>>>>k/ winsock/wsastartup_2.asp
> 
> 
> After reading some more docs I recognized, that QT only calls WSAStartup if an 
> application uses  network related classes like QTcpServer (call is used only 
> in QT/4.0.1/src/network)  or if an application uses kICE. Any other 
> applications will not start network. This explains the problem I had with 
> winsock gethostbyname(), which does not return a valid hostname for the first 
> time before kICE was setup. Seems that there are some more thoughts to deal 
> with required. 
> 
> 
>>>>>>BTW2: I think that there is a better way to create pre/after main
>>>>>>functions. You can create a class and create a global instance of
>>>>>>this. This instance will be created and the constructor be called
>>>>>>before main.
>>>>>>
>>>>>>
>>>>>>#include <stdio.h>
>>>>>>
>>>>>>class KDEbootstrap {
>>>>>>public:
>>>>>>	KDEbootstrap();
>>>>>>	~KDEbootstrap();
>>>>>>};
>>>>>>
>>>>>>
>>>>>>KDEbootstrap::KDEbootstrap()
>>>>>>{
>>>>>>	printf("bootstrap created\n");
>>>>>>	// stuff called before main
>>>>>>}
>>>>>>
>>>>>>KDEbootstrap::~KDEbootstrap()
>>>>>>{
>>>>>>	printf("bootstrap delete\n");
>>>>>>	// stuff called after main
>>>>>>}
>>>>>>
>>>>>>KDEbootstrap bootstrap;
>>>>>
>>>>>We dont want to require devs to put
>>>>>
>>>>>KDEbootstrap bootstrap;
>>>>>
>>>>>into application code (e.g. main.cpp).
>>>>>
>>>>>
>>>>>So where do you want to put it? My candidate could be KInstance....
>>>>
>>>>See the updated bootsrap.cpp (kde_bootstrap() may be directly included
>>>>into the constructor and kde_destroy() in the destructor)
>>>
>>>First, read dfaure answer - existing solution doesn't break anything:
>>>developers cannot see a difference...
>>>
>>>Now note it's dangerous to rely on static members destruction: you never
>>>know in which order destructors are called. With kdemain() it's always
>>>deterministic. SO here I'd vote for not using KDEbootstrap object, unles
>>>you know something annoing our devs..
>>
>>The testcase below illustrate the recent implementation, showing that
>>kde_bootstrap will be called after all global object instantiation, which
>>will be to late and kde_destroy() before all global object destruction.
>>
>> TestClass stands for any external class, whch has global objects. They are
>>initialised before main().  kde_bootstrap() setup a env var like the recent
>>implementation setting HOME. If you compile and run the testcase, the env
>>var in
>>TestClass::TestClass() isn't set.
>>
>>I have appended  another testcase (c++constructor-order.zip), which shows
>>the ordering of global constructor and destructor.
>>on mingw constructors are called in reverse order and destructors in normal
>>order based on the file sequence.
>>
>>C:\Daten\kde4\kdelibs\test\constructor>scons
>>scons: Reading SConscript files ...
>>win32
>>win32
>>scons: done reading SConscript files.
>>scons: Building targets ...
>>g++ -o first.o -c first.cpp
>>g++ -o main.o -c main.cpp
>>g++ -o second.o -c second.cpp
>>g++ -o third.o -c third.cpp
>>g++ -o test.exe first.o second.o third.o main.o
>>scons: done building targets.
>>
>>C:\Daten\kde4\kdelibs\test\constructor>test
>>ThirdClass created (null)
>>SecondClass created (null)
>>FirstClass created (null)
>>main
>>FirstClass deleted
>>SecondClass deleted
>>ThirdClass deleted
>>
> 
> This let me assume, that using a global object in kdewin32, which will be the 
> last library on the link line, would be run first
> 
> Any infos about msvc order  ? 

No idea *in general* and that's why the macro exists...

> BTW: If the global object ordering will be a problem on other compilers, a  
> complete other approach for problems like the HOME env var on windows 95 is 
> to redefine the getenv() function and do the required initialisation on the 
> first call. This  will be independent off any global objects and it is 
> guarantated that HOME will be set before. 

Could you help with this one?



-- 
regards / pozdrawiam,
  Jaroslaw Staniek / OpenOffice Polska
  Kexi Developer:
      http://www.kexi-project.org | http://koffice.org/kexi
  KDE3, KDE4 libraries for developing MS Windows applications:
      http://wiki.kde.org/tiki-index.php?page=KDElibs+for+win32



More information about the Kde-buildsystem mailing list