On 2014-11-03 07:40-0500 Hazen Babcock wrote: > On 08/28/2014 11:54 PM, Alan W. Irwin wrote: >> >> To take up this old topic again, the above speculation turned out to be >> the issue which >> was extremely easy to fix (commits 022a53b and b6e9afe). >> >> To test this build fix for yourself, use the cmake option >> -DENABLE_smoke=ON (which I currently have defaulted to OFF for the >> build system since this smoke binding should be considered >> experimental until we install at least one run-time test, see below). >> >> Then run >> >> make VERBOSE=1 smokeplplotqt >& smokeplplotqt.out >> >> and all should be well (at least it was for me). >> >> One test I did was >> >> ldd -r bindings/qt_gui/smoke/libsmokeplplotqt.so 2>&1 |less >> >> which showed no undefined symbols. (Without commit b6e9afe there >> are such undefined symbols). >> >> Please follow up by pushing at least one example that uses this smoke >> binding of libplplotqt so we have a test that this binding actually >> works at run time. > > Hi Alan, > > Returning to this old topic. Thank you for this fix which also enables me to > also compile the smoke bindings. Unfortunately however they are "empty" in > the sense that they contain no symbols specifically related to PLplot. I was > expecting to see symbols containing QtPLDriver, QtPLWidget and QtExtWidget. > You can verify this by running: > > nm -gC libsmokeplplotqt.so > > It appears to me as though what is happening is that smoke is parsing the > include/qt.h file in an environment where PLD_qtwidget and PLD_extqt widget > are not defined. I'm not sure why this is happening since these qt devices > are getting built. As I had done in a different project, I tried to define > these in bindings/qt_gui/smoke/plplotqt.h, but now they are either being > ignored or over-written during the build. > >> more plplotqt.h > #define PLD_qtwidget > #define PLD_extqt > #include "qt.h"
This fixup should have absolutely no effect since qt.h #includes plDevs.h which overwrites the above macros. On the other hand, on my platform at least both PLD_qtwidget and PLD_extqt are #defined in plDevs.h (as expected), and that should be the case for you as well. However, if you want to double check that conclusion, the make "VERBOSE=1" result will give you the exact series of commands that produce the incorrect result. To analyze how g++ is interpreting the macros, what you need to do is repeat by hand the exact g++ build command that compiles the generated source code by cutting and pasting with the exception that you use macro debug options that are mentioned in <http://gcc.gnu.org/onlinedocs/gcc-3.4.5/gcc/Debugging-Options.html>. It's been a while since I used those, but for both the C and C++ cases, it looks like (from <http://danilogiulianelli.blogspot.ca/2013/01/how-to-inspect-expanded-c-macros-with.html> the options to be added are -E -dD. I also recall the (large but extremely helpful!) results are dumped in the file mentioned in the -o option (which is normally the object file produced, but not in this case!). Once you have convinced yourself with the above that the macros are being processed correctly by g++, then the next question is why does smokegen seem to be ignoring most of qt.h when it generates code (which I confirm below). Of course, one possibility is that smokegen has a bug in how it processes macros so that it does not follow how g++ processes them, but more likely there is something wrong with our configuration of smokegen by our build system, but more about that below. I was concerned that the -g option might be hiding the symbols from you so I ran the smokeplplotqt target as reported above. The nm results on my platform confirm the issue you have reported software@raven> nm -a --demangle bindings/qt_gui/smoke/libsmokeplplotqt.so |grep -i pl 00000000002022f8 d .got.plt 0000000000000f00 t .plt 0000000000000d08 r .rela.plt 0000000000001aa0 t __smokeplplotqt::xcall_QGlobalSpace(short, void*, Smoke::StackItem*) 0000000000202470 b __smokeplplotqt::methodMaps 0000000000202430 d __smokeplplotqt::methodNames 0000000000202492 b __smokeplplotqt::argumentList 0000000000202490 b __smokeplplotqt::inheritanceList 0000000000202494 b __smokeplplotqt::ambiguousMethodList 00000000000011a0 t __smokeplplotqt::cast(void*, short, short) 0000000000202480 b __smokeplplotqt::types 00000000002023e0 d __smokeplplotqt::classes 0000000000202462 b __smokeplplotqt::methods 0000000000202440 b completed.6092 00000000000011b0 t delete_plplotqt_Smoke 00000000000011c0 t init_plplotqt_Smoke 0000000000202450 b plplotqt_Smoke For the VERBOSE=1 case, the messages issued by the smokegen command are the following: using generator "/usr/bin/../lib/smokegen/generator_smoke.so" parsing "/home/software/plplot/HEAD/plplot.git/bindings/qt_gui/smoke/plplotqt.h" QIODevice::setTextModeEnabled: The device is not open Generating SMOKE sources... preparing SMOKE data [plplotqt] writing out smokedata.cpp [plplotqt] writing out x_*.cpp [plplotqt] Done. The above "device is not open" message seems a bit suspicious. Also, in bindings/qt_gui/smoke in the build tree smokegen generates the file generator.log which contains the following line: plplotqt.h: (3, 0): Unexpected token 'K_DCOP' : This seems a bit suspicious as well. But if none of the above helps, then the fundamental question you should ask yourself is whether you also have similar issues for the hand-crafted smoke bindings you started with. If so, then I would get those issues worked out with smokegen experts before you attempt to mimic whatever you do by hand with our build system. If not, then I suggest you look very carefully at the VERBOSE=1 results to see how our build system is deviating from what you do by hand. I hope the above response to your question is of some help to you. Please let me know the answer to my fundamental question and good luck taking it from there! 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 __________________________ ------------------------------------------------------------------------------ _______________________________________________ Plplot-devel mailing list Plplot-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/plplot-devel