On 2016-02-11 13:51-0000 Arjen Markus wrote: > Hi Alan, > > > >> -----Original Message----- >> From: Alan W. Irwin [mailto:ir...@beluga.phys.uvic.ca] >> Sent: Thursday, February 11, 2016 10:39 AM >> To: PLplot development list >> Subject: [Plplot-devel] CMake-3.5.x works flawlessly on Linux so far >> >> A bad efficiency regression in CMake-3.5.0-rc1 and a whole host of other 3.5 >> issues >> got fixed for CMake-3.5.0-rc2 so I decided to test that CMake version by >> doing a >> complete comprehensive PLplot test (except the interactive part was dropped >> so I >> wouldn't have to babysit the test). >> >> That noninteractive comprehensive PLplot test of CMake-3.5.0-rc2 worked >> flawlessly on Linux just like CMake versions 3.3.2 and 3.4.3 did before this >> test. So >> I urge you all to try 3.4.3 now (especially on non-Linux platforms since as >> noted >> yesterday a bump to that minimum version for those platforms is imminent >> [i.e., >> soon after both Cygwin and MinGW-w64/MSYS2 provide that version of cmake]) >> and also try 3.5.0 as soon as that finalized version is released. And >> please share >> those good or bad results for your various platforms with this list to give >> us all a >> better idea of the reliability of the various CMake versions on various >> platforms. >> > > > I have now Cmake 3.4.3 for Windows (should be useable under MingW as well as > bare Windows), but after correcting the plplotf95_ifort.def file I ran into a > problem with Tcl: > > tclAPI.c > > D:\plplot-svn\plplot-git\bindings\tcl\tclAPI.c(792) : warning C4996: > '_getcwd': The POSIX name for this item is deprecated. Instead, use the ISO > C++ conformant name: _getcwd. See online help for details. > > C:\Program Files (x86)\Microsoft Visual Studio > 12.0\VC\INCLUDE\direct.h(59) : see declaration of '_getcwd' > > D:\plplot-svn\plplot-git\bindings\tcl\tclAPI.c(3783) : warning C4101: 'argc' > : unreferenced local variable > > [ 13%] Linking C shared library ..\..\dll\plplottcltk.dll > > Creating library ..\..\dll\plplottcltk.lib and object > ..\..\dll\plplottcltk.exp > > tclAPI.c.obj : error LNK2001: unresolved external symbol plplotLibDir > > ..\..\dll\plplottcltk.dll : fatal error LNK1120: 1 unresolved externals > > LINK Pass 1 failed. with 1120 > > NMAKE : fatal error U1077: 'D:\cmake3.4.3\bin\cmake.exe' : return code > '0xffffffff' > > Stop. > > NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio > 12.0\VC\BIN\amd64\nmake.exe"' : return code '0x2' > > Stop. > > NMAKE : fatal error U1077: '"C:\Program Files (x86)\Microsoft Visual Studio > 12.0\VC\BIN\amd64\nmake.exe"' : return code '0x2' > > Stop. > > The problem is not the message about _getcwd(), but the linkage of > plplotLibDir. I haven't analysed the problem in sufficient detail to really > understand what is going and why it worked before, but my current guess - and > that is a guess, no more - is that the macros that are defined cause the > relevant macro PLDLLIMPEXP_TCLTK_DATA( type ) to be defined as "export" > instead of "import". > > More to follow.
Hi Arjen: Could you check if this is really a CMake-3.4.3 issue? That is if you run the exact same test with CMake-3.3.2 does that solve it? Or does that linker error persist for both cases presumably due to a long-term MSVC visibility issue for the combination of libplplottcltk and libplplot? The reason I suspect the latter case is the only way I can see that the CMake version affects our visibility implementation is if there is an an unlikely CMake regression in the way that include/pldll.h(.in) is configured or an unlikely regression in the way that CMake emits the plplot_EXPORTS macro when compiling libplplot and the plplottcltk_EXPORTS when compiling libplplottcltk. Furthermore, the linker only gave an error message for one symbol, plplotLibDir. That is, visibility seems OK for everything but plplotLibDir. Also software@raven> find . -type f |grep -v .git |xargs grep -l plplotLibDir tells me that symbol only occurs in ./bindings/tcl/tclAPI.c ./src/plctrl.c in our source code. If I understand the purpose of plplotLibDir correctly, it allows libtcltk to get plLibOpenPdfstrm within libplplot to open a particular file. Anyhow, the visibility of plplotLibDir is implemented in an extremely unique way in _both_ the above files, and it appears to me the use of different _forms_ of visibility macros (i.e., PLDLLIMPEXP_TCLTK_DATA in the former case and PLDLLIMPEXP in the latter case) is problematic as well. Linux tests of visibility that are normally made as part of my routine testing on that platform are less demanding than the equivalent MSVC tests. So if it turns out this is a long-term MSVC visibility issue between libplottcltk and libplplot, I would carefully review the plplotLibDir visibility implementation in the above two files to see what might be problematic with it for the MSVC case. 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 __________________________ ------------------------------------------------------------------------------ Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now! http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140 _______________________________________________ Plplot-devel mailing list Plplot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/plplot-devel