On 26 August 2010 01:34, Mark Roden <mmro...@gmail.com> wrote: > I'm starting to get deep into CMake, and I have a few questions as I > try to convert the socket++ library such that it can be compiled by > CMake on Windows. > > 1) The default install directory on Windows is C:\Program Files, or > C:\Program Files (x86) on 64 bit. This default will not work on > Windows 7 (and perhaps Vista), because the user isn't running as > administrator anymore, and only administrators can modify that > directory. There should probably be a warning to that effect on > windows systems; otherwise, there are painful ways to run install, but > they are painful.
Most developers run as administrator so I don't think there should be a warning. > 2) I'm trying to check to see if a certain C++ code chunk will > compile. The line is: > > CHECK_CXX_SOURCE_COMPILES(" > #include <string.h> > #include <stdio.h> > void main(){ > char buf[100]; > char buf2[100]; > strncpy(buf2, buf, 5); > buf2[5] = '\0'; > puts(buf2); > }" EXTERN_C) > > The EXTERN_C test is failing here. The problem is, I can cut and > paste that code into a blank project in vs2008 and it compiles just > fine. Is there a way to see the compiler error, or to determine why > that would fail? > > The code in the configure.in file is: > > AC_TRY_LINK([ > # include <string.h> > # include <stdio.h> > ], [ > char buf[100]; > strcpy(buf, "Hello world\n"); > ], > bz_cv_cplusplus_needexternCwrapper=no, > bz_cv_cplusplus_needexternCwrapper=yes) > ]) > > I can't use that directly (or can I?) because the quotation marks in > "Hello World" prematurely cut off the code in the SOURCE section of > CHECK_CXX_SOURCE_COMPILES, and I get an error that the variable World" > makes no sense. You can use quotes by doing \" rather than ". > 3) There is a check for the presence of the Libg++ library, but no > specific mention of which function is needed. According to what I can > find on CheckLibraryExists, I need to provide a specific function to > determine if that library is present. The code in configure.in is: > > AC_CHECK_HEADER(_G_config.h, AC_DEFINE(_S_LIBGXX)) > > In that case, should I be looking for a particular function in > _G_config.h (which I don't have, since I'm on Windows) and just using > it arbitrarily? I'm not even close to the point where this code can > fail in compilation and therefore determine the error directly. I don't think you need to check for that library, certainly not on Windows. > 4) There are two checks for potentially predefined variables, namely > sys_siglist and sys_errlist. The code to check for these looks like: > > AC_CACHE_VAL(socketxx_cv_siglist, [ > AC_TRY_LINK([ > # include <unistd.h> > # include <sys/signal.h> > ], [ > #ifndef _sys_siglist > extern char* _sys_siglist[]; > #endif > puts(*_sys_siglist); > ], > socketxx_cv_siglist=_sys_siglist, > socketxx_cv_siglist=sys_siglist) ]) > AC_DEFINE_UNQUOTED(SYS_SIGLIST, $socketxx_cv_siglist) > > Windows doesn't have unistd.h or sys/signal.h, so I know that this > will fail, regardless of the test. I'm unfamiliar with these > variables; does anyone have any insight into them? It looks like if > the code compiles, the variable _sys_siglist will be used, otherwise, > sys_siglist, whatever that is. I'm tempted to just say that it is > what it is, and if other unix users have issues, we can fix the cmake > file then. The typical sloppiness of someone not dealing with their > native platform, I guess :) > > There are other problems with converting this file, but I want to > start with this one and still hack away at the others. I'd recommend looking at the manpages for these functions and trying to find a native equivalent you can check for and extend the check. I wouldn't try and copy all the autoconf checks exactly, just get your project building first and then create the ones you actually need. -- Cheers, Mike McQuaid http://mikemcquaid.com/ _______________________________________________ Powered by www.kitware.com Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Follow this link to subscribe/unsubscribe: http://www.cmake.org/mailman/listinfo/cmake