[Patch] fix compile kdecore with msvc

Ralf Habacker ralf.habacker at freenet.de
Sat Oct 29 22:15:08 BST 2005


Am Samstag, 29. Oktober 2005 20:20 schrieb Christian Ehrlicher:
> Hi,
>
> i've attached a small patch which allows me to compile and link kdecore
> with msvc.
>
> Changes:
> network/kresolver.cpp
> - masked '#warning' - is gnuc-specific
> network/kresolver.h
> - don't export KResolverResults to avoid compiler errors (*)
> network/ksocketdevice.cpp
> - don't include ksockssocketdevice in windows to avoid linker errors
> - indentation fixes (tabulator -> spaces)
> - add kde_ioctl because ioctl isn't available in windows
> network/syssocket.h
> - add kde_ioctl (**)

there may be a similar function required for close. 
Windoes does closesocket() for sockets and close for files() :-(

A function like kde_close() may be usefull. I've tried to write one, but fails 
in detecting if a fd is a socket fd. Perhaps anyone else know this. 

// replacement for unix close function 
inline void kde_close(int fd, char *a, int b)
{
	u_long res; 
	if (/* is socket file descriptor */ /*ioctlsocket(fd,FIONREAD,&res) == 0*/ ){
		closesocket(fd);
	}
	else {
		close(fd);
	}
}


> SConscript
> - add 'DMAKE_KDECORE_LIB' to ccflags instead cxxflags
>
> * there is imho no need to export KResolverResults because nobody
> derivates a class from KResolverResults. And if you really want to
> export this class, you have to implement all functions QList<T> defines
> because otherwise when someone wants to use a function you forgot to
> implement he will get a linker error.
>
> ** I don't know excatly if this is the correct place, but I wouldn't put
> this into win/include/msvc and win/include/mingw. The problem here is,
> that ioctl is defined as ioctlsocket(int fd, int cmd, u_long* argp) and
> I have to use a temporary variable to map between int and long.
>
> I've another question regarding some header files: In win/include/ we've
> some headers which are empty. Wouldn't it be better to avoid including
> them instead using empty headerfiles? Shouldn't be a problem to mask
> them with '#ifdef HAVE_XXX', or?
which would require additional configure checks and source patching. For mingw 
is seems easier to me to add empty  header as placeholder. If sometime in the 
future additional definitions in such file is placed, it is already there. 

The platform related win/include dirs are designed as a compiler specific 
"posix gap filler" , because every compiler on windows has  more or less 
complete posix support which also are different between each other. 

Ralf 




More information about the kde-core-devel mailing list