Hi Alan >My point is CMake find commands only look for a certain tiny subset of a >given >installation, and if you haven't clobbered anything in that subset it won't >detect >anything wrong. But of course when you try and build and run with >Visual Studio, the missing .lib files were detected.
yes that was what happened. In the end the missing files are detected, but I was under the impression that the cmake step would detect the missing files when I assumed they were there, therefore my original report (where I was thinking the files existed, it was only after sending the first report that I noticed they did not exist). all good then -Pedro ----- Original Message ----- From: "Alan W. Irwin" <ir...@beluga.phys.uvic.ca> To: "Pedro Vicente" <pedro.vice...@space-research.org> Cc: "PLplot development list" <plplot-devel@lists.sourceforge.net> Sent: Sunday, December 18, 2016 2:28 AM Subject: Re: [Plplot-devel] Cmake generation with wxWidgets on Windows > On 2016-12-17 19:25-0500 Pedro Vicente wrote: > >> >> Hi Alan >> >>> (3) Static PLplot libraries + device driver code embedded in our core >>> static library (identified by its "plplot" basename). >> >> I always use (3). >> >> I repeated what I had done before: >> >> My wxwidgets libraries are located at >> >> M:\wx\wxwidgets-3.1.0\lib\vc_lib >> >> here there are several .lib files like this one >> >> wxmsw31ud_core.lib >> >> 1) I deleted all .lib files from that location >> 2) did a PLplot cmake run with >> >> cmake ".." -G "Visual Studio >> 14" -DPL_DOUBLE:BOOL=ON -DBUILD_TEST:BOOL=ON >> -DCMAKE_CONFIGURATION_TYPES:STRING="Debug" >> -DCMAKE_BUILD_TYPE:STRING="Debug" -DBUILD_SHARED_LIBS:BOOL=OFF >> -DSTATIC_RUNTIME:BOOL=ON >> -DPLD_wxwidgets:BOOL=ON -DwxWidgets_ROOT_DIR:PATH=%WXWIN% >> -DwxWidgets_LIB_DIR:PATH=%WXWIN%\lib\vc_lib >> -DwxWidgets_CONFIGURATION=mswud >> -DwxWidgets_EXCLUDE_COMMON_LIBRARIES:BOOL=OFF >>> cmake.out.txt 2>&1 >> >> where >> %WXWIN% >> is >> M:\wx\wxwidgets-3.1.0 >> >> cmake.out.txt is attached and it detected wxwidgets >> >> 2) Built the Visual Studio generated solution and got the wxwidgets >> linking errors >> >> 4) rebuilt wxwidgets libraries at M:\wx\wxwidgets-3.1.0\lib\vc_lib >> >> 5) did the same PLplot cmake run >> >> 6) Built the Visual Studio generated solution , no errors > > Hi Pedro: > > Am I understanding your test properly? You clobbered your wxwidgets > installation (by removing the .lib files), our build system did not > detect those removed .lib files, but Visual Studio did in step 2. You > fixed that wxwidgets installation issue, ran cmake again, and this > time Visual Studio worked. Isn't this exactly how you would like > our build system to work in conjunction with Visual Studio? > > My point is CMake find commands only look for a certain tiny subset of a > given > installation, and if you haven't clobbered anything in that subset it > won't detect > anything wrong. But of course when you try and build and run with > Visual Studio, the missing .lib files were detected. > > Anyhow, I don't see anything wrong here. Am I missing something? > >> >> I took a look at the PLplot >> FindwxWidgets.cmake >> module and it seems that there is an attempt to find the wxwidgets >> libraries (the actual file names), here >> >> find_library(WX_${LIB}${_DBG} >> NAMES >> wxbase31${_UCD}${_DBG}_${LIB} >> >> >> so, not sure exactly what happened, and probably we could leave this >> possible non-critical bug for after the release (if it's a bug). > > As far as I can tell from the above argument it is not a bug. But if it > turns out to be a bug, I will likely wait to fix it until post-release > because it doesn't seem to be release critical (if a bug at all). > >> >> I started using cmake in my projects some months ago, and what I do to >> detect libraries is like this, >> an example for the JSON jansson library: >> >> >> find_library(JANSSON_LIBRARY NAMES jansson HINTS >> "/data/data127/pvicente/install/jansson-2.9/lib/") >> if(NOT JANSSON_LIBRARY) >> message(FATAL_ERROR "jansson library not found") >> else() >> message("-- Found jansson library at: " ${JANSSON_LIBRARY}) >> endif() > > Good. > > [....] >> Here's my Windows call (the path like /C/ is because this is in Git Bash) >> >> cmake >> .. -DSTATIC_CRT:BOOL=ON -DJANSSON_INCLUDE:PATH=/C/include >> -DJANSSON_LIBRARY=/C/lib/jansson.lib >> >> >> my library file is actually called (extra _d) >> /C/lib/jansson_d.lib >> >> and cmake said >> >> -- Found jansson.h header file at: C:/include >> -- Found jansson library at: C:/lib/jansson.lib > > find_library (in fact, all the CMake find technology) is a no-op if > you specify the answer it is trying to determine (JANSSON_LIBRARY). > So if your specification (-DJANSSON_LIBRARY=/C/lib/jansson.lib) points to > a file that doesn't exist, CMake will happily accept that > and move on. However, if you don't specify, CMake find technology > will only find existing files. > >> >> then when I build Visual Studio I get >> >> LINK : fatal error LNK1104: cannot open file 'C:\lib\jansson.lib' >> >> my understanding is that >> find_library >> >> does not actually detect if the argument is an existent file > > That depends, see above. > >> >> Or could be that it does not because I am using the same variable name >> JANSSON_LIBRARY >> for both the argument of >> cmake .. -DJANSSON_LIBRARY >> and >> find_library(JANSSON_LIBRARY >> >> so , this print >> -- Found jansson library at: C:/lib/jansson.lib >> >> is not actually true for this example. > > Exactly. You have specified what find_library was trying to > determine, and the CMake find technology is designed following the > philosophy that the customer must always be right. :-) > > So it is better if you tell CMake as little as possible with > command-line options in case you make some mistake with those as > in the above example. Also, try > > cmake --help-full |less > > to look at complete documentation of cmake. So within > that less command you can look for the regexp "find_library$", and > there you will find (heh) everything you need to know > about that command and how to influence its results (e.g., > by specifying CMAKE_LIBRARY_PATH) without telling it > something that turns out to be incorrect such as in your > example above. > > The above is what I routinely do on the command line on Linux to > access CMake documentation. Let's face it, "less" is a simple but > wonderful app that does a limited job well. A perfect example, of the > Unix philosopy. So this method should work on any Unix system or > Unix-like Windows system (e.g., Cygwin or MinGW-w64/MSYS2). But if > you don't have Unix tools like "less" at hand, you can also instantly > get complete documentation for find_library from a google search, and > by playing with the URL in an obvious way you can get any version of > the find_library documentation from 3.0.x to 3.7.x in case there were > any changes during that range of releases. > > Alan > __________________________ > Alan W. Irwin > > Astronomical research affiliation with Department of Physics and > Astronomy, > University of Victoria (astrowww.phys.uvic.ca). > > Programming affiliations with the FreeEOS equation-of-state > implementation for stellar interiors (freeeos.sf.net); the Time > Ephemerides project (timeephem.sf.net); PLplot scientific plotting > software package (plplot.sf.net); the libLASi project > (unifont.org/lasi); the Loads of Linux Links project (loll.sf.net); > and the Linux Brochure Project (lbproject.sf.net). > __________________________ > > Linux-powered Science > __________________________ > ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, SlashDot.org! http://sdm.link/slashdot _______________________________________________ Plplot-devel mailing list Plplot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/plplot-devel