opengribs / XyGrib

This is the new home for the development of zyGrib
https://opengribs.org
GNU General Public License v3.0
120 stars 47 forks source link

Build and packaging issues #29

Closed dominiquehausser closed 6 years ago

dominiquehausser commented 6 years ago

The package libjasper-dev is no more available in recent distro of ubuntu : https://pkgs.org/download/libjasper-dev.

We have to find a solution (or include the packages in the XyGrib source or explain how to install it, as it has dependancies not valid with 17.10 and 18.04).

I may not be able to find a solution within the next few weeks.

MennoTammens commented 6 years ago

Debian and Ubuntu have g2clib in their repository, with a patch that replaces libjasper with OpenJPEG.

With this patch XyGrib can build on Debian/Ubuntu: https://github.com/MennoTammens/XyGrib/commit/eaf7c8ff15d450413d5e2e885a1039150660b671

New dependency:

No longer needed:

dominiquehausser commented 6 years ago

Thanks, work well

norulz commented 6 years ago

Menno and Dominique,

I would like to debate this issue a bit further as I feel that we need to find a broader solution for Linux builds in as many distros and distro versions as possible.

The solution that Menno sugested is great but it applies only to the most recent version of Ubuntu & Debian as the modified libg2c that uses libopenjpeg is a private Ubuntu/Debian thing.

My feeling is that we should provide sources for libg2c with the Ubuntu/Deb modifications and also provide a compatible version of libopenjpeg (2.x and not 1.x which won't work with the modified libg2c). These should all be integrated and build using our main makefile.

So far I get good builds using the Ubuntu/Deb built package but not with my own builds of the two libraries. (Ubuntu/Deb publish the patch files for changing the sources. I used these).

What are your thoughts on this? Has anyone been able to build the two libraries from source and then get a good XyGrib build?

dominiquehausser commented 6 years ago

I have not check in details the different solutions and I agree with the idea to avoid to have x different versions for each OS and version of OS. But the absence of libjasper in the recent versions of Debian and derivates seems to create problems to a couple of projects.

Libjasper had a minor code modification 2 days ago and before it was 6-7 months ago and 2 years ago (https://github.com/mdadams/jasper), but it is used by many projects. We could imagine this project will continue. I have no idea of the future plans for libg2c and libopenjpeg.

Providing our own source could be a temporary solution, but with the risk of being blocked by the future evolution of these libraries. It would be interesting if someone decide to manage the packaging of libjsaper in paralell of the official debian/ubuntu repositories (like in a PPA).

norulz commented 6 years ago

libg2c changed to internally provided one that uses openjpeg instead of jasper. Should solve these issues

MennoTammens commented 6 years ago

In my opinion XyGrib should bundle as little third-party libraries as possible.

The g2clib is available as package for almost all major Linux distributions. For XyGrib it doesn't matter whether the packaged version of g2clib is build against jasper or openjpeg, as they function the same.

My solution would be like this:

The users who are building XyGrib themselves probably have enough knowledge to build the dependencies as well, or to find a distributed version of it.

norulz commented 6 years ago

Let's map choices:

Assumption is that we want to provide 2 types of Linux installs. One for the user who does not wish to build the application him or herself and wants to have it working with only a few clicks and preferably not even use a terminal. The second type of install is the "build it yourself" one for the more experienced user.

As I see it we have at least two options for the first type of install:

For the "build it yourself" type of install, we also currently have two options:

Open discussion:

This is how I see it:

For the first type of installation I see the advantage of the AppImage as truly "one package fits all". It is much less work to prepare and can be distributed as a simple download from the Joomla site. On the con side, it is a new concept and may not be too acceptable to users who already know how to use a RPM or DEB type of package. It may also have performance or other issues that we have not yet encountered.

As for RPM packages. I think we will need at least 7-8 types. 2 for each versions of Ubuntu, Fedora and openSUSE. Second issue with this is the hosting. I personally am not up to speed on preparing and distributing RPM's and I'm therefore, a bit hesitant to take this route.

For the "do it yourself builds" it is only a matter of saving us sweat and tears. Jasper is not being updated, is already being dropped in some Distros and conflicts are not being fixed. g2clib is also not in Distros and we have to provide it in any case. Users are going to have to find libjasper elsewhere and revert to old versions of libpng and then other stuff may suffer.

Can we provide only a modified g2clib and list openjpeg in the prerequisite libs? Probably not a good idea as the openjpeg - g2clib - libpng marriage only works with openjpeg 2.x and there is a lot of old stuff around.

I feel that a well documented and smooth build makes for happy users. Posts in the forum with build problems turn people away.

What are your feelings? (Anyone else can also chip in!)

David

norulz commented 6 years ago

It looks like a long post kills the discussion :-)

I'm ready to roll with release 1.1.0 as:

@dominiquehausser How do you feel about it? @MennoTammens How do you feel about it? @tsenga How do you feel about it? @ofextar How do you feel about it?

dominiquehausser commented 6 years ago

1.a I agree to have one source working on all environment (otherwise it is going to become a nightmare to ensure a precise followup, with no new bug in one or the other "sub"version. 1.b I compile the beta release on Ubuntu 17.10 64 bit with no problem. 2.a appimage is probably an interesting solution, but they are 2 other ready to use format ( snap and ???); I am not sure now, if they all are going to survive, if they will be "accepted" by all distros (Ubuntu seems to support snap, installed by default since 17.04). So I will not consider this is a longterm solution. 2.b For DEB packages there is a need of a 32bit version as till now the Rasberry Pi (which has an environment for sailors at least for one of them under Debian/ubuntu 32bit) is still not with 64bits. 2.c As I am travelling I do not have the environment to make DEB packages, so it will have to wait till the automn to do proper DEB packages under 16.04 LTS and 18.04 LTS (64bits and 32 bits); they normally also work under Debian. 2.d I will be able to prepare a archive file ready to use in /opt, see as example https://github.com/dominiquehausser/XyGrib/releases/tag/v1.0.99beta.

  1. If nobody else is setting up a PPA to have the DEB distro, I will put them in the repository I set up for zyGrib (see http://zygrib.org/forum/viewtopic.php?f=7&t=156); and XyGrib will be installed in /opt, as I am not sure that I respect all the standards to have it install as "normal" packages.

In summary, I agree that is time to move to v1.1.0, with a compiled deb version available (I do it as mentionned in 2.d) that would work in the recent Debian/Ubuntu distros.

dominiquehausser commented 6 years ago

build ubuntu 17.10 64bit here : https://github.com/dominiquehausser/XyGrib/releases/tag/v1.1.0

tsenga commented 6 years ago

Happy to take a shot at the Mac side of things. Can't get to it until next week though.

norulz commented 6 years ago

@tsenga Hi Andrew, Pavel from openCPN helped out with the Mac build after suffering a major crash due to the modified g2clib. He applied some workaround and got the packages done. When you get back on line we might take a look at a different approach to leave g2clib untouched (The Debian mod seems to be the problem) and then embed a modified jasper that won't have conflicts. That's what they did in openCPN. All a little bit out of my depth :-)

nohal commented 6 years ago

For the interested, the "major crash" means that the patched g2clib is not buildable at all with clang (neither the one distributed by Apple, nor the upstream 6.0) as the compiler crashes on jpeg2000_openjpeg.c. And the workaround was simply to build g2clib using GCC (8) and then link it with the rest of the stuff built normally using clang. But that certainly is not something you want to use long term and explain to newcomers...

dominiquehausser commented 6 years ago

This become a bit too complicated for me, apart that, if I understand what is said, that the proposed solution create new problems with OS Mac (UNIX derivate and Linux seems to be really different ;-) ).

As JasPer is a problem with debian and derivates and modified g2clib a problem with OS Mac, is there an alternative ?

nohal commented 6 years ago

No, there is no good, effortless, cross platform, alternative.

If the upstream g2clib and Debian's patched version are mostly API compatible, you sure may use the system-wide available library where it exists and build your own when it does not. To do that you need to implement something smarter to configure the build, like cmake. (You should do it anyway as currently the build process in many places relies on hardcoded paths and anticipates things that may not exist.)

If you ever want to be included in Debian official repositories, be prepared that the mentors will push you to remove absolutely everything that is even just theoretically replaceable with packages available in Debian. That will of course break or at least complicate the build pretty much everywhere else, including other Linux distributions.

norulz commented 6 years ago

@dominiquehausser @nohal What is bad about universal packaging such as AppImage?

I can't find a bad word about it anywhere on the vine! The more I read about it I find more and more advantages.

The current alternative is tough to cope with. We already have 3 builds (win, unx, mac) that all have different solutions regarding jasper-g2clib issues. The thought of 3 to 4 each of .deb and .rmp packages that we will need to host is daunting. Not to mention that the official repository route is not even an option with our resources.

Even the next generation Snap and Flatpack have the two major Linux forces going in different directions. This may add 3 to 4 each of Snap and Flatpack to the list of .deb's and .rmp's that we would need to maintain.

Right now our Linux users are downloading more AppImages than source tarballs. I have not heard of one complaint out of 250 downloads. This in comparison with the usual batch of users who ran into tarball build issues on both regular and esoteric distributions.

My vote is that, at our current level of developer resources*, we stick to a Linux source tarball and one universal package i.e AppImage. I'm open to be convinced otherwise.

* Which is primarily me and to be frank, half the time I have no idea what I'm doing.

nohal commented 6 years ago

Well, there of course is nothing wrong about AppImage. But it again is not a universal solution. What if the user needs/wants a Snap? Or a Flatpak? Or none of them because his distro is "old" and supports none of the three? And what if his arch is i386? Armhf? Arm64? (Just to name the common ones that are regularly out there these days). Over the years, providing the DEBs via a PPA became a standard. For RPM packages you can get the same service from Copr or SuSE OBS. That saves you a lot of work building, uploading and hosting the packages. You can implement automatic packaging on Windows and macOS using Travis and Appveyor CI engines (which you should use anyway to automatically check if the code is buildable on all the platforms supported)

Building from source IMO can't be counted as a way to distribute stuff to the end users at all as longer term you burn more time explaining people what they did wrong trying to build than actually implementing the packaging well.

Your current technical problem with JasPer is just a minor hiccup, the real issue is that the only thing you can do to make "everybody" happy is to simply support all of the above, which of course is time and resource consuming and not fun at all.

The first step to address the above really is implementing some standard build system based on cmake or autotools or whatever else you may prefer that locates the dependencies on the builder and adjusts stuff as needed.

nohal commented 6 years ago

I have put together https://github.com/opengribs/XyGrib/pull/48 which shows how I think this has to be done to be maintainable for the future. Comments of course welcome.

norulz commented 6 years ago

WOW! Pavel, I am at loss for words.... a huge contribution.... many thanks

I'll start testing it today on as many Linux distros as I can

free-x commented 6 years ago

Sooooo, I have tried on Debian Stretch and Cmake Magick doesn't work yet completely :-(

XyGrib/build$ cmake ../
-- The C compiler identification is GNU 6.3.0
-- The CXX compiler identification is GNU 6.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found PROJ4: /usr/lib/x86_64-linux-gnu/libproj.so  
-- Found BZip2: /usr/lib/x86_64-linux-gnu/libbz2.so (found version "1.0.6") 
-- Looking for BZ2_bzCompressInit
-- Looking for BZ2_bzCompressInit - found
-- Found ZLIB: /usr/lib/x86_64-linux-gnu/libz.so (found version "1.2.8") 
-- Found PNG: /usr/lib/x86_64-linux-gnu/libpng.so (found version "1.6.28") 
CMake Error: The following variables are used in this project, but they are set to NOTFOUND.
Please set them or make sure they are set and tested correctly in the CMake files:
OPENJPEG_INCLUDE_DIR
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/g2clib-1.6.0
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/g2clib-1.6.0
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/g2clib-1.6.0
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/g2clib-1.6.0
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/g2clib-1.6.0
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/g2clib-1.6.0
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/g2clib-1.6.0
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/GUI
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/GUI
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/GUI
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/GUI
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/GUI
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/GUI
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/GUI
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/util
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/util
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/util
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/util
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/util
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/util
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/util
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/map
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/map
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/map
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/map
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/map
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/map
   used as include directory in directory /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/map

-- Configuring incomplete, errors occurred!
See also "/home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/build/CMakeFiles/CMakeOutput.log".
nohal commented 6 years ago

OK. And how is the OpenJPEG -dev package called on Stretch, where is it installed and what does it contain? And is it actually installed on your system?

free-x commented 6 years ago

Hi Pavel,

i'm now one step further I have added /usr/include/openjpeg-2.1 to CMakeLists.txt. CMake can find now openjpeg headers Now I want to compile, but it's unsuccesfully

$ make
/usr/bin/cmake -H/home/oleg/segeln/OpenCPN-build/xygrib/XyGrib -B/home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/build --check-build-system CMakeFiles/Makefile.cmake 0
/usr/bin/cmake -E cmake_progress_start /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/build/CMakeFiles /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/build/CMakeFiles/progress.marks
make -f CMakeFiles/Makefile2 all
make[1]: Entering directory '/home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/build'
make -f src/CMakeFiles/XyGrib_automoc.dir/build.make src/CMakeFiles/XyGrib_automoc.dir/depend
make[2]: Entering directory '/home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/build'
cd /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/build && /usr/bin/cmake -E cmake_depends "Unix Makefiles" /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/build /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/build/src /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/build/src/CMakeFiles/XyGrib_automoc.dir/DependInfo.cmake --color=
Scanning dependencies of target XyGrib_automoc
make[2]: Leaving directory '/home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/build'
make -f src/CMakeFiles/XyGrib_automoc.dir/build.make src/CMakeFiles/XyGrib_automoc.dir/build
make[2]: Entering directory '/home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/build'
[  1%] Automatic moc and uic for target XyGrib
cd /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/build/src && /usr/bin/cmake -E cmake_autogen /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/build/src/CMakeFiles/XyGrib_automoc.dir/ ""
Generating moc source XyGrib_automoc.dir/moc_DateChooser_KZJXQBIBRSTTLL.cpp
Generating moc source XyGrib_automoc.dir/moc_MainWindow_AH7KPGTJ5NM6T5.cpp
Generating moc source XyGrib_automoc.dir/moc_MenuBar_ZAQ3E25UVPNBCS.cpp
Generating moc source XyGrib_automoc.dir/moc_Terrain_6FIDMQHHRAJWPU.cpp
Generating moc compilation XyGrib_automoc.cpp
Generating ui header ui_GraphicsParamsDialog.h
File '/home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/GraphicsParamsDialog.ui' is not valid
AUTOUIC: error: process for ui_GraphicsParamsDialog.h needed by
 "/home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/DialogGraphicsParams.h"
failed:
File '/home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/src/GraphicsParamsDialog.ui' is not valid

uic failed...
src/CMakeFiles/XyGrib_automoc.dir/build.make:60: recipe for target 'src/CMakeFiles/XyGrib_automoc' failed
make[2]: *** [src/CMakeFiles/XyGrib_automoc] Error 1
make[2]: Leaving directory '/home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/build'
CMakeFiles/Makefile2:141: recipe for target 'src/CMakeFiles/XyGrib_automoc.dir/all' failed
make[1]: *** [src/CMakeFiles/XyGrib_automoc.dir/all] Error 2
make[1]: Leaving directory '/home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/build'
Makefile:130: recipe for target 'all' failed
make: *** [all] Error 2
nohal commented 6 years ago

Qt5 in Stretch being too old for the XyGrib codebase? The problem is what it says - uic you have is not able to handle the .ui files.

free-x commented 6 years ago

Weird.... I swear, I could compile XyGrib 1.1.0 Release with Qt from the stretch

nohal commented 6 years ago

The question is a little different: Were you able to generate the ui_*.h files from the *.ui designs? These are build products and as such should not be in the code repository and I have removed them in https://github.com/opengribs/XyGrib/pull/48/commits/40cb3359103fea53e3b16c63d02c8d7791731656 What is the Qt5 version included in Stretch? They can sure be put back and AUTOUIC turned off, it is just not exactly right...

free-x commented 6 years ago

aptitude show qtbase5-dev

Package: qtbase5-dev
Version: 5.7.1+dfsg-3+b1 State: installed Automatically installed: no Multi-Arch: same Priority: optional Section: libdevel Maintainer: Debian Qt/KDE Maintainers debian-qt-kde@lists.debian.org Architecture: amd64

nohal commented 6 years ago

I think I know what's going on - AUTOUIC_SEARCH_PATHS is not available before cmake 3.9 so https://github.com/opengribs/XyGrib/blob/master/CMakeLists.txt#L18 likely has no effect on your system (Without looking, I suppose the cmake version in Stretch be older) Let me think if we can have some smarter solution than moving half the code tree around or using qt_wrap_ui()

free-x commented 6 years ago

You are right $ cmake --version cmake version 3.7.2

dominiquehausser commented 6 years ago

I tried to build on ubuntu 17.10 64bits from the opengribs/XyGrib/master rep. cmake OK but make with errors (see attached files) mentioning undefined references.

XyGrib_build.err.txt XyGrib_build.std.txt

nohal commented 6 years ago

If my rusty French serves I have seen stuff like this without AUTOMOC enabled, but let's fix the Stretch issue first and get to this later.

dominiquehausser commented 6 years ago

OK thanks a lot

free-x commented 6 years ago

With #50 looks better. I can compile with make. But linking failed

[100%] Linking CXX executable XyGrib
cd /home/oleg/segeln/OpenCPN-build/xygrib/XyGrib/build/src && /usr/bin/cmake -E cmake_link_script CMakeFiles/XyGrib.dir/link.txt --verbose=1
/usr/bin/c++    -O3 -fPIC   CMakeFiles/XyGrib.dir/Astro.cpp.o CMakeFiles/XyGrib.dir/BoardPanel.cpp.o CMakeFiles/XyGrib.dir/ColorScale.cpp.o CMakeFiles/XyGrib.dir/ColorScaleWidget.cpp.o CMakeFiles/XyGrib.dir/DataColors.cpp.o CMakeFiles/XyGrib.dir/DataMeteoAbstract.cpp.o CMakeFiles/XyGrib.dir/DataPointInfo.cpp.o CMakeFiles/XyGrib.dir/DataQString.cpp.o CMakeFiles/XyGrib.dir/DateChooser.cpp.o CMakeFiles/XyGrib.dir/DialogBoxColumn.cpp.o CMakeFiles/XyGrib.dir/DialogFonts.cpp.o CMakeFiles/XyGrib.dir/DialogGraphicsParams.cpp.o CMakeFiles/XyGrib.dir/DialogLoadGRIB.cpp.o CMakeFiles/XyGrib.dir/DialogProxy.cpp.o CMakeFiles/XyGrib.dir/DialogSelectMetar.cpp.o CMakeFiles/XyGrib.dir/DialogServerStatus.cpp.o CMakeFiles/XyGrib.dir/DialogUnits.cpp.o CMakeFiles/XyGrib.dir/FileLoaderGRIB.cpp.o CMakeFiles/XyGrib.dir/Grib2Plot.cpp.o CMakeFiles/XyGrib.dir/Grib2Reader.cpp.o CMakeFiles/XyGrib.dir/Grib2Record.cpp.o CMakeFiles/XyGrib.dir/GribAnimator.cpp.o CMakeFiles/XyGrib.dir/GribPlot.cpp.o CMakeFiles/XyGrib.dir/GribReader.cpp.o CMakeFiles/XyGrib.dir/GribRecord.cpp.o CMakeFiles/XyGrib.dir/GriddedPlotter.cpp.o CMakeFiles/XyGrib.dir/GriddedReader.cpp.o CMakeFiles/XyGrib.dir/GriddedRecord.cpp.o CMakeFiles/XyGrib.dir/ImageWriter.cpp.o CMakeFiles/XyGrib.dir/IrregularGridded.cpp.o CMakeFiles/XyGrib.dir/IsoLine.cpp.o CMakeFiles/XyGrib.dir/LonLatGrid.cpp.o CMakeFiles/XyGrib.dir/LongTaskProgress.cpp.o CMakeFiles/XyGrib.dir/MainWindow.cpp.o CMakeFiles/XyGrib.dir/MapDrawer.cpp.o CMakeFiles/XyGrib.dir/MenuBar.cpp.o CMakeFiles/XyGrib.dir/Metar.cpp.o CMakeFiles/XyGrib.dir/MeteoTable.cpp.o CMakeFiles/XyGrib.dir/MeteoTableWidget.cpp.o CMakeFiles/XyGrib.dir/MeteotableOptionsDialog.cpp.o CMakeFiles/XyGrib.dir/SkewT.cpp.o CMakeFiles/XyGrib.dir/SkewTWindow.cpp.o CMakeFiles/XyGrib.dir/Terrain.cpp.o CMakeFiles/XyGrib.dir/Therm.cpp.o CMakeFiles/XyGrib.dir/main.cpp.o CMakeFiles/XyGrib.dir/XyGrib_automoc.cpp.o  -o XyGrib -rdynamic g2clib-1.6.0/libg2clib.a GUI/libgui.a util/libutil.a map/libmap.a -lnova -lopenjp2 /usr/lib/x86_64-linux-gnu/libQt5Network.so.5.7.1 /usr/lib/x86_64-linux-gnu/libQt5Xml.so.5.7.1 /usr/lib/x86_64-linux-gnu/libQt5PrintSupport.so.5.7.1 -lbz2 -lz -lproj -lpng -lz GUI/libgui.a -lproj -lpng /usr/lib/x86_64-linux-gnu/libQt5Widgets.so.5.7.1 /usr/lib/x86_64-linux-gnu/libQt5Gui.so.5.7.1 /usr/lib/x86_64-linux-gnu/libQt5Core.so.5.7.1 
CMakeFiles/XyGrib.dir/BoardPanel.cpp.o: In function `BoardPanel::showDataPointInfo(DataPointInfo const&, Altitude const&)':
BoardPanel.cpp:(.text+0x419): undefined reference to `BoardPanel::staticMetaObject'
BoardPanel.cpp:(.text+0x85a): undefined reference to `BoardPanel::staticMetaObject'
BoardPanel.cpp:(.text+0x14e4): undefined reference to `BoardPanel::staticMetaObject'
BoardPanel.cpp:(.text+0x1cb6): undefined reference to `BoardPanel::staticMetaObject'
BoardPanel.cpp:(.text+0x271e): undefined reference to `BoardPanel::staticMetaObject'
CMakeFiles/XyGrib.dir/BoardPanel.cpp.o:BoardPanel.cpp:(.text+0x2de2): more undefined references to `BoardPanel::staticMetaObject' follow
CMakeFiles/XyGrib.dir/BoardPanel.cpp.o: In function `BoardPanel::BoardPanel(QWidget*)':
BoardPanel.cpp:(.text+0x76ae): undefined reference to `vtable for BoardPanel'
BoardPanel.cpp:(.text+0x7b2f): undefined reference to `BoardPanel::staticMetaObject'
CMakeFiles/XyGrib.dir/GribAnimator.cpp.o: In function `AnimCommand::AnimCommand(int, int, bool, QWidget*)':
GribAnimator.cpp:(.text+0x239): undefined reference to `vtable for AnimCommand'
GribAnimator.cpp:(.text+0x275): undefined reference to `AnimCommand::staticMetaObject'
CMakeFiles/XyGrib.dir/GribAnimator.cpp.o: In function `CreateAnimProgressBar::CreateAnimProgressBar(int, QWidget*)':
GribAnimator.cpp:(.text+0x187c): undefined reference to `vtable for CreateAnimProgressBar'
CMakeFiles/XyGrib.dir/GribAnimator.cpp.o: In function `GribAnimator::showImage(int, bool)':
GribAnimator.cpp:(.text+0x19cd): undefined reference to `GribAnimator::staticMetaObject'
GribAnimator.cpp:(.text+0x1aef): undefined reference to `GribAnimator::changeCurrentImage(int)'
CMakeFiles/XyGrib.dir/GribAnimator.cpp.o: In function `GribAnimator::createFrameGui(QWidget*)':
GribAnimator.cpp:(.text+0x1fc4): undefined reference to `GribAnimator::staticMetaObject'
CMakeFiles/XyGrib.dir/GribAnimator.cpp.o: In function `GribAnimator::~GribAnimator()':
GribAnimator.cpp:(.text+0x20b3): undefined reference to `vtable for GribAnimator'
CMakeFiles/XyGrib.dir/GribAnimator.cpp.o: In function `GribAnimator::createImages()':
GribAnimator.cpp:(.text+0x24d2): undefined reference to `GribAnimator::staticMetaObject'
GribAnimator.cpp:(.text+0x2632): undefined reference to `GribAnimator::staticMetaObject'
GribAnimator.cpp:(.text+0x2658): undefined reference to `GribAnimator::staticMetaObject'
CMakeFiles/XyGrib.dir/GribAnimator.cpp.o: In function `GribAnimator::GribAnimator(Terrain*)':
GribAnimator.cpp:(.text+0x28e3): undefined reference to `vtable for GribAnimator'
GribAnimator.cpp:(.text+0x2951): undefined reference to `GribAnimator::staticMetaObject'
GribAnimator.cpp:(.text+0x2bea): undefined reference to `POI::staticMetaObject'
CMakeFiles/XyGrib.dir/GribAnimator.cpp.o: In function `AnimCommand::actionsCommonSlot()':
GribAnimator.cpp:(.text+0x130): undefined reference to `AnimCommand::setCurrentImage(int)'
GribAnimator.cpp:(.text+0x13a): undefined reference to `AnimCommand::exitAnim()'
GribAnimator.cpp:(.text+0x142): undefined reference to `AnimCommand::saveAnimFile()'
GribAnimator.cpp:(.text+0x158): undefined reference to `AnimCommand::startAnim(int)'
GribAnimator.cpp:(.text+0x162): undefined reference to `AnimCommand::pauseAnim()'
GribAnimator.cpp:(.text+0x172): undefined reference to `AnimCommand::rewindAnim()'
GribAnimator.cpp:(.text+0x18f): undefined reference to `AnimCommand::setSpeed(int)'
GribAnimator.cpp:(.text+0x1a8): undefined reference to `AnimCommand::setAutoLoop(bool)'
CMakeFiles/XyGrib.dir/ImageWriter.cpp.o: In function `ImageWriterDialog::ImageWriterDialog(QWidget*, int, int, int, bool, bool, bool, int, int)':
ImageWriter.cpp:(.text+0x1f): undefined reference to `ImageWriterDialog::staticMetaObject'
ImageWriter.cpp:(.text+0xea): undefined reference to `vtable for ImageWriterDialog'
CMakeFiles/XyGrib.dir/ImageWriter.cpp.o: In function `ImageWriter::ImageWriter(QWidget*, Terrain*)':
ImageWriter.cpp:(.text+0x8e7): undefined reference to `vtable for ImageWriter'
CMakeFiles/XyGrib.dir/ImageWriter.cpp.o: In function `ImageWriter::~ImageWriter()':
ImageWriter.cpp:(.text+0x903): undefined reference to `vtable for ImageWriter'
CMakeFiles/XyGrib.dir/ImageWriter.cpp.o: In function `ImageWriter::createImage(long, ImageWriterDialog&, int, int)':
ImageWriter.cpp:(.text+0xff9): undefined reference to `vtable for ColorScaleGraph'
ImageWriter.cpp:(.text+0x11b0): undefined reference to `vtable for ColorScaleGraph'
CMakeFiles/XyGrib.dir/ImageWriter.cpp.o: In function `ImageWriter::saveImage(long)':
ImageWriter.cpp:(.text+0x15d7): undefined reference to `ImageWriter::staticMetaObject'
ImageWriter.cpp:(.text+0x15ff): undefined reference to `ImageWriter::staticMetaObject'
CMakeFiles/XyGrib.dir/ImageWriter.cpp.o: In function `ImageWriter::saveAllImages()':
ImageWriter.cpp:(.text+0x203a): undefined reference to `ImageWriter::staticMetaObject'
ImageWriter.cpp:(.text+0x2068): undefined reference to `ImageWriter::staticMetaObject'
ImageWriter.cpp:(.text+0x23fa): undefined reference to `ImageWriter::staticMetaObject'
CMakeFiles/XyGrib.dir/ImageWriter.cpp.o:ImageWriter.cpp:(.text+0x248a): more undefined references to `ImageWriter::staticMetaObject' follow
CMakeFiles/XyGrib.dir/MapDrawer.cpp.o: In function `MapDrawer::draw_Cartouche_Gridded(QPainter&, Projection const*, GriddedPlotter*)':
MapDrawer.cpp:(.text+0x3a50): undefined reference to `MapDrawer::staticMetaObject'
MapDrawer.cpp:(.text+0x3e6a): undefined reference to `MapDrawer::staticMetaObject'
MapDrawer.cpp:(.text+0x413a): undefined reference to `MapDrawer::staticMetaObject'
MapDrawer.cpp:(.text+0x4291): undefined reference to `MapDrawer::staticMetaObject'
MapDrawer.cpp:(.text+0x449b): undefined reference to `MapDrawer::staticMetaObject'
CMakeFiles/XyGrib.dir/MapDrawer.cpp.o:MapDrawer.cpp:(.text+0x4739): more undefined references to `MapDrawer::staticMetaObject' follow
CMakeFiles/XyGrib.dir/MapDrawer.cpp.o: In function `MapDrawer::MapDrawer(GshhsReader*)':
MapDrawer.cpp:(.text+0x596e): undefined reference to `vtable for MapDrawer'
CMakeFiles/XyGrib.dir/MapDrawer.cpp.o: In function `MapDrawer::MapDrawer(MapDrawer const&)':
MapDrawer.cpp:(.text+0x5c1e): undefined reference to `vtable for MapDrawer'
CMakeFiles/XyGrib.dir/MapDrawer.cpp.o: In function `MapDrawer::~MapDrawer()':
MapDrawer.cpp:(.text+0x5f6c): undefined reference to `vtable for MapDrawer'
CMakeFiles/XyGrib.dir/MeteoTable.cpp.o: In function `MeteoTableDialog::~MeteoTableDialog()':
MeteoTable.cpp:(.text+0x37c): undefined reference to `vtable for MeteoTableDialog'
CMakeFiles/XyGrib.dir/MeteoTable.cpp.o: In function `MeteoTableDialog::SYLK_addData_wind(SylkFile&, int, int, DataCode)':
MeteoTable.cpp:(.text+0x1d51): undefined reference to `MeteoTableDialog::staticMetaObject'
MeteoTable.cpp:(.text+0x1d79): undefined reference to `MeteoTableDialog::staticMetaObject'
MeteoTable.cpp:(.text+0x2106): undefined reference to `MeteoTableDialog::staticMetaObject'
MeteoTable.cpp:(.text+0x212c): undefined reference to `MeteoTableDialog::staticMetaObject'
MeteoTable.cpp:(.text+0x2424): undefined reference to `MeteoTableDialog::staticMetaObject'
CMakeFiles/XyGrib.dir/MeteoTable.cpp.o:MeteoTable.cpp:(.text+0x2c71): more undefined references to `MeteoTableDialog::staticMetaObject' follow
CMakeFiles/XyGrib.dir/MeteoTable.cpp.o: In function `MeteoTableDialog::MeteoTableDialog(GriddedPlotter*, double, double, QString)':
MeteoTable.cpp:(.text+0x4d74): undefined reference to `vtable for MeteoTableDialog'
MeteoTable.cpp:(.text+0x50e2): undefined reference to `MeteoTableDialog::staticMetaObject'
MeteoTable.cpp:(.text+0x52b2): undefined reference to `MeteoTableDialog::staticMetaObject'
MeteoTable.cpp:(.text+0x5977): undefined reference to `MeteoTableDialog::staticMetaObject'
MeteoTable.cpp:(.text+0x5a6e): undefined reference to `MeteoTableDialog::staticMetaObject'
MeteoTable.cpp:(.text+0x613b): undefined reference to `MeteoTableDialog::staticMetaObject'
CMakeFiles/XyGrib.dir/MeteoTable.cpp.o:MeteoTable.cpp:(.text+0x67f2): more undefined references to `MeteoTableDialog::staticMetaObject' follow
CMakeFiles/XyGrib.dir/MeteoTableWidget.cpp.o: In function `MeteoTableWidget::~MeteoTableWidget()':
MeteoTableWidget.cpp:(.text+0x2f3): undefined reference to `vtable for MeteoTableWidget'
CMakeFiles/XyGrib.dir/MeteoTableWidget.cpp.o: In function `TableCell::TableCell(QWidget*, QString, bool, QColor, QFlags<Qt::AlignmentFlag>)':
MeteoTableWidget.cpp:(.text+0x5bb): undefined reference to `vtable for TableCell'
CMakeFiles/XyGrib.dir/MeteoTableWidget.cpp.o: In function `TableCell_Wind::TableCell_Wind(double, double, bool, GriddedPlotter*, QWidget*, QString, bool, QColor)':
MeteoTableWidget.cpp:(.text+0x1529): undefined reference to `vtable for TableCell_Wind'
MeteoTableWidget.cpp:(.text+0x16d5): undefined reference to `vtable for TableCell'
CMakeFiles/XyGrib.dir/MeteoTableWidget.cpp.o: In function `TableCell_Current::TableCell_Current(double, double, bool, GriddedPlotter*, QWidget*, QString, bool, QColor)':
MeteoTableWidget.cpp:(.text+0x1899): undefined reference to `vtable for TableCell_Current'
MeteoTableWidget.cpp:(.text+0x1a55): undefined reference to `vtable for TableCell'
CMakeFiles/XyGrib.dir/MeteoTableWidget.cpp.o: In function `TableCell_Clouds::TableCell_Clouds(double, GriddedPlotter*, QWidget*, QString, bool, QColor)':
MeteoTableWidget.cpp:(.text+0x2bfa): undefined reference to `vtable for TableCell_Clouds'
MeteoTableWidget.cpp:(.text+0x2fc0): undefined reference to `vtable for TableCell'
CMakeFiles/XyGrib.dir/MeteoTableWidget.cpp.o: In function `MeteoTableWidget::addLine_WaveWhitecap(int, int)':
MeteoTableWidget.cpp:(.text+0x336d): undefined reference to `MeteoTableWidget::staticMetaObject'
CMakeFiles/XyGrib.dir/MeteoTableWidget.cpp.o: In function `MeteoTableWidget::addLine_Isotherm0Height(int)':
MeteoTableWidget.cpp:(.text+0x3fa4): undefined reference to `MeteoTableWidget::staticMetaObject'
CMakeFiles/XyGrib.dir/MeteoTableWidget.cpp.o: In function `MeteoTableWidget::addLine_GeopotentialAltitude(Altitude const&, int)':
MeteoTableWidget.cpp:(.text+0x4303): undefined reference to `MeteoTableWidget::staticMetaObject'
CMakeFiles/XyGrib.dir/MeteoTableWidget.cpp.o: In function `MeteoTableWidget::addLine_Pressure(Altitude const&, int)':
MeteoTableWidget.cpp:(.text+0x4873): undefined reference to `MeteoTableWidget::staticMetaObject'
CMakeFiles/XyGrib.dir/MeteoTableWidget.cpp.o: In function `MeteoTableWidget::addLine_Wind(Altitude const&, int)':
MeteoTableWidget.cpp:(.text+0x4ebf): undefined reference to `MeteoTableWidget::staticMetaObject'
CMakeFiles/XyGrib.dir/MeteoTableWidget.cpp.o:MeteoTableWidget.cpp:(.text+0x524a): more undefined references to `MeteoTableWidget::staticMetaObject' follow
CMakeFiles/XyGrib.dir/MeteoTableWidget.cpp.o: In function `TableCell_SkewT::TableCell_SkewT(QWidget*, double, double, QString, long, GriddedReader*)':
MeteoTableWidget.cpp:(.text+0x98d1): undefined reference to `vtable for TableCell_SkewT'
MeteoTableWidget.cpp:(.text+0x99c1): undefined reference to `vtable for MiniSkewT'
MeteoTableWidget.cpp:(.text+0x9a2d): undefined reference to `vtable for MiniSkewT'
MeteoTableWidget.cpp:(.text+0x9a65): undefined reference to `vtable for TableCell'
CMakeFiles/XyGrib.dir/MeteoTableWidget.cpp.o: In function `MeteoTableWidget::addLine_SkewT(int)':
MeteoTableWidget.cpp:(.text+0x9bd2): undefined reference to `MeteoTableWidget::staticMetaObject'
CMakeFiles/XyGrib.dir/MeteoTableWidget.cpp.o: In function `MeteoTableWidget::createTable()':
MeteoTableWidget.cpp:(.text+0xa2af): undefined reference to `MeteoTableWidget::staticMetaObject'
MeteoTableWidget.cpp:(.text+0xa2d4): undefined reference to `MeteoTableWidget::staticMetaObject'
CMakeFiles/XyGrib.dir/MeteoTableWidget.cpp.o: In function `MeteoTableWidget::MeteoTableWidget(GriddedPlotter*, double, double, QString, QWidget*)':
MeteoTableWidget.cpp:(.text+0xb154): undefined reference to `vtable for MeteoTableWidget'
CMakeFiles/XyGrib.dir/SkewT.cpp.o: In function `SkewT::draw_comments(QPainter&)':
SkewT.cpp:(.text+0x29f4): undefined reference to `SkewT::staticMetaObject'
SkewT.cpp:(.text+0x2c92): undefined reference to `SkewT::staticMetaObject'
SkewT.cpp:(.text+0x3085): undefined reference to `SkewT::staticMetaObject'
SkewT.cpp:(.text+0x338e): undefined reference to `SkewT::staticMetaObject'
SkewT.cpp:(.text+0x3445): undefined reference to `SkewT::staticMetaObject'
CMakeFiles/XyGrib.dir/SkewT.cpp.o:SkewT.cpp:(.text+0x3512): more undefined references to `SkewT::staticMetaObject' follow
CMakeFiles/XyGrib.dir/SkewT.cpp.o: In function `SkewT::SkewT(int, int, QWidget*)':
SkewT.cpp:(.text+0x5d37): undefined reference to `vtable for SkewT'
CMakeFiles/XyGrib.dir/SkewT.cpp.o: In function `SkewT::~SkewT()':
SkewT.cpp:(.text+0x6393): undefined reference to `vtable for SkewT'
CMakeFiles/XyGrib.dir/SkewT.cpp.o: In function `MiniSkewT::MiniSkewT(int, int, QWidget*)':
SkewT.cpp:(.text+0x6817): undefined reference to `vtable for MiniSkewT'
CMakeFiles/XyGrib.dir/SkewTWindow.cpp.o: In function `SkewTWindow::~SkewTWindow()':
SkewTWindow.cpp:(.text+0x3): undefined reference to `vtable for SkewTWindow'
CMakeFiles/XyGrib.dir/SkewTWindow.cpp.o: In function `SkewTWindow::createToolBar()':
SkewTWindow.cpp:(.text+0x203): undefined reference to `SkewTWindow::staticMetaObject'
SkewTWindow.cpp:(.text+0x25e): undefined reference to `SkewTWindow::staticMetaObject'
SkewTWindow.cpp:(.text+0x42a): undefined reference to `SkewTWindow::staticMetaObject'
SkewTWindow.cpp:(.text+0x5fd): undefined reference to `SkewTWindow::staticMetaObject'
SkewTWindow.cpp:(.text+0x7d0): undefined reference to `SkewTWindow::staticMetaObject'
CMakeFiles/XyGrib.dir/SkewTWindow.cpp.o:SkewTWindow.cpp:(.text+0x996): more undefined references to `SkewTWindow::staticMetaObject' follow
CMakeFiles/XyGrib.dir/SkewTWindow.cpp.o: In function `SkewTWindow::SkewTWindow(SkewT*)':
SkewTWindow.cpp:(.text+0x2843): undefined reference to `vtable for SkewTWindow'
CMakeFiles/XyGrib.dir/SkewTWindow.cpp.o: In function `SkewTWindow::saveFileSYLK(SylkFile&)':
SkewTWindow.cpp:(.text+0x44d2): undefined reference to `SkewTWindow::staticMetaObject'
SkewTWindow.cpp:(.text+0x46b8): undefined reference to `SkewTWindow::staticMetaObject'
SkewTWindow.cpp:(.text+0x4877): undefined reference to `SkewTWindow::staticMetaObject'
SkewTWindow.cpp:(.text+0x4a83): undefined reference to `SkewTWindow::staticMetaObject'
CMakeFiles/XyGrib.dir/SkewTWindow.cpp.o: In function `SkewTWindow::actionsCommonSlot()':
SkewTWindow.cpp:(.text+0x5b69): undefined reference to `SkewTWindow::staticMetaObject'
CMakeFiles/XyGrib.dir/SkewTWindow.cpp.o:SkewTWindow.cpp:(.text+0x6497): more undefined references to `SkewTWindow::staticMetaObject' follow
CMakeFiles/XyGrib.dir/Terrain.cpp.o: In function `Terrain::setShowPOIs(bool)':
Terrain.cpp:(.text+0x48d7): undefined reference to `POI::staticMetaObject'
CMakeFiles/XyGrib.dir/Terrain.cpp.o: In function `Terrain::setProjection(Projection*)':
Terrain.cpp:(.text+0x4bf6): undefined reference to `POI::staticMetaObject'
CMakeFiles/XyGrib.dir/Terrain.cpp.o: In function `Terrain::createPixmap(long, int, int)':
Terrain.cpp:(.text+0x57ca): undefined reference to `POI::staticMetaObject'
Terrain.cpp:(.text+0x5874): undefined reference to `POI::staticMetaObject'
CMakeFiles/XyGrib.dir/XyGrib_automoc.cpp.o: In function `MainWindow::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)':
XyGrib_automoc.cpp:(.text+0xf68): undefined reference to `POI::staticMetaObject'
CMakeFiles/XyGrib.dir/XyGrib_automoc.cpp.o:XyGrib_automoc.cpp:(.text+0x12a0): more undefined references to `POI::staticMetaObject' follow
map/libmap.a(POI.cpp.o): In function `POI::POI(unsigned int)':
POI.cpp:(.text+0xbef): undefined reference to `vtable for POI'
map/libmap.a(POI.cpp.o): In function `POI::setName(QString)':
POI.cpp:(.text+0x189c): undefined reference to `POI::staticMetaObject'
map/libmap.a(POI.cpp.o): In function `POI::POI(unsigned int, QString, double, double, Projection*, QWidget*, QWidget*)':
POI.cpp:(.text+0x19ca): undefined reference to `vtable for POI'
map/libmap.a(POI.cpp.o): In function `POI::POI(unsigned int, Projection*, QWidget*, QWidget*)':
POI.cpp:(.text+0x1b9f): undefined reference to `vtable for POI'
map/libmap.a(POI.cpp.o): In function `POI::mouseMoveEvent(QMouseEvent*)':
POI.cpp:(.text+0x23f7): undefined reference to `POI::signalPOImoved(POI*)'
map/libmap.a(POI.cpp.o): In function `POI::timerClickEvent()':
POI.cpp:(.text+0x2714): undefined reference to `POI::signalOpenMeteotablePOI(POI*)'
map/libmap.a(POI.cpp.o): In function `POI::POI(QString)':
POI.cpp:(.text+0x2ab0): undefined reference to `vtable for POI'
CMakeFiles/XyGrib.dir/ColorScaleWidget.cpp.o: In function `ColorScaleGraph::ColorScaleGraph(QWidget*)':
ColorScaleWidget.cpp:(.text+0xe): undefined reference to `vtable for ColorScaleGraph'
CMakeFiles/XyGrib.dir/ColorScaleWidget.cpp.o: In function `ColorScaleWidget::ColorScaleWidget(QWidget*)':
ColorScaleWidget.cpp:(.text+0xaa5): undefined reference to `vtable for ColorScaleWidget'
ColorScaleWidget.cpp:(.text+0xb0e): undefined reference to `ColorScaleWidget::staticMetaObject'
CMakeFiles/XyGrib.dir/DataQString.cpp.o: In function `AltitudeStr::toString(Altitude const&)':
DataQString.cpp:(.text+0x2a2): undefined reference to `AltitudeStr::staticMetaObject'
DataQString.cpp:(.text+0x31e): undefined reference to `AltitudeStr::staticMetaObject'
DataQString.cpp:(.text+0x3b5): undefined reference to `AltitudeStr::staticMetaObject'
DataQString.cpp:(.text+0x42e): undefined reference to `AltitudeStr::staticMetaObject'
DataQString.cpp:(.text+0x4ac): undefined reference to `AltitudeStr::staticMetaObject'
CMakeFiles/XyGrib.dir/DataQString.cpp.o:DataQString.cpp:(.text+0x56b): more undefined references to `AltitudeStr::staticMetaObject' follow
CMakeFiles/XyGrib.dir/DataQString.cpp.o: In function `DataCodeStr::toString_name(DataCode const&)':
DataQString.cpp:(.text+0x12e3): undefined reference to `DataCodeStr::staticMetaObject'
DataQString.cpp:(.text+0x1313): undefined reference to `DataCodeStr::staticMetaObject'
DataQString.cpp:(.text+0x1333): undefined reference to `DataCodeStr::staticMetaObject'
DataQString.cpp:(.text+0x1353): undefined reference to `DataCodeStr::staticMetaObject'
DataQString.cpp:(.text+0x1373): undefined reference to `DataCodeStr::staticMetaObject'
CMakeFiles/XyGrib.dir/DataQString.cpp.o:DataQString.cpp:(.text+0x1393): more undefined references to `DataCodeStr::staticMetaObject' follow
CMakeFiles/XyGrib.dir/DialogBoxColumn.cpp.o: In function `DialogBoxColumn::DialogBoxColumn(QWidget*, int, QString, QString, int)':
DialogBoxColumn.cpp:(.text+0x29): undefined reference to `vtable for DialogBoxColumn'
DialogBoxColumn.cpp:(.text+0x22e): undefined reference to `DialogBoxColumn::staticMetaObject'
CMakeFiles/XyGrib.dir/DialogFonts.cpp.o: In function `FontSelector::FontSelector(FontCode, QString, QWidget*)':
DialogFonts.cpp:(.text+0x28): undefined reference to `vtable for FontSelector'
DialogFonts.cpp:(.text+0x22f): undefined reference to `FontSelector::staticMetaObject'
CMakeFiles/XyGrib.dir/DialogFonts.cpp.o: In function `FontSelector::btfontClicked()':
DialogFonts.cpp:(.text+0x7a8): undefined reference to `FontSelector::staticMetaObject'
CMakeFiles/XyGrib.dir/DialogFonts.cpp.o: In function `DialogFonts::createFrameGui(QWidget*)':
DialogFonts.cpp:(.text+0xb3f): undefined reference to `DialogFonts::staticMetaObject'
CMakeFiles/XyGrib.dir/DialogFonts.cpp.o: In function `DialogFonts::DialogFonts(QWidget*)':
DialogFonts.cpp:(.text+0x28ce): undefined reference to `vtable for DialogFonts'
DialogFonts.cpp:(.text+0x28d5): undefined reference to `DialogFonts::staticMetaObject'
CMakeFiles/XyGrib.dir/DialogGraphicsParams.cpp.o: In function `DialogChooseLang::DialogChooseLang(QWidget*, QString)':
DialogGraphicsParams.cpp:(.text+0x46d): undefined reference to `vtable for DialogChooseLang'
CMakeFiles/XyGrib.dir/DialogGraphicsParams.cpp.o: In function `DialogGraphicsParams::initInterface()':
DialogGraphicsParams.cpp:(.text+0x41b6): undefined reference to `DialogGraphicsParams::staticMetaObject'
DialogGraphicsParams.cpp:(.text+0x4246): undefined reference to `DialogGraphicsParams::staticMetaObject'
CMakeFiles/XyGrib.dir/DialogGraphicsParams.cpp.o: In function `DialogGraphicsParams::DialogGraphicsParams(QWidget*)':
DialogGraphicsParams.cpp:(.text+0x4ae3): undefined reference to `vtable for DialogGraphicsParams'
CMakeFiles/XyGrib.dir/DialogLoadGRIB.cpp.o: In function `DialogLoadGRIB::~DialogLoadGRIB()':
DialogLoadGRIB.cpp:(.text+0xd3): undefined reference to `vtable for DialogLoadGRIB'
CMakeFiles/XyGrib.dir/DialogLoadGRIB.cpp.o: In function `DialogLoadGRIB::slotGribFileError(QString)':
DialogLoadGRIB.cpp:(.text+0x283): undefined reference to `DialogLoadGRIB::staticMetaObject'
CMakeFiles/XyGrib.dir/DialogLoadGRIB.cpp.o: In function `DialogLoadGRIB::slotGribReadProgress(int, int, int)':
DialogLoadGRIB.cpp:(.text+0x598): undefined reference to `DialogLoadGRIB::staticMetaObject'
CMakeFiles/XyGrib.dir/DialogLoadGRIB.cpp.o: In function `DialogLoadGRIB::slotParameterUpdated()':
DialogLoadGRIB.cpp:(.text+0x245a): undefined reference to `DialogLoadGRIB::staticMetaObject'
DialogLoadGRIB.cpp:(.text+0x2642): undefined reference to `DialogLoadGRIB::staticMetaObject'
CMakeFiles/XyGrib.dir/DialogLoadGRIB.cpp.o: In function `DialogLoadGRIB::slotBtOK()':
DialogLoadGRIB.cpp:(.text+0x2a55): undefined reference to `DialogLoadGRIB::staticMetaObject'
CMakeFiles/XyGrib.dir/DialogLoadGRIB.cpp.o: In function `DialogLoadGRIB::slotBtProxy()':
DialogLoadGRIB.cpp:(.text+0x2fa2): undefined reference to `vtable for DialogProxy'
DialogLoadGRIB.cpp:(.text+0x301d): undefined reference to `vtable for DialogProxy'
CMakeFiles/XyGrib.dir/DialogLoadGRIB.cpp.o: In function `DialogLoadGRIB::slotBtCancel()':
DialogLoadGRIB.cpp:(.text+0x30b4): undefined reference to `DialogLoadGRIB::staticMetaObject'
CMakeFiles/XyGrib.dir/DialogLoadGRIB.cpp.o: In function `DialogLoadGRIB::setWaveSelectors()':
DialogLoadGRIB.cpp:(.text+0x371a): undefined reference to `DialogLoadGRIB::staticMetaObject'
DialogLoadGRIB.cpp:(.text+0x3ad6): undefined reference to `DialogLoadGRIB::staticMetaObject'
DialogLoadGRIB.cpp:(.text+0x3ec8): undefined reference to `DialogLoadGRIB::staticMetaObject'
CMakeFiles/XyGrib.dir/DialogLoadGRIB.cpp.o: In function `DialogLoadGRIB::slotAtmModelSettings()':
DialogLoadGRIB.cpp:(.text+0x4885): undefined reference to `DialogLoadGRIB::staticMetaObject'
CMakeFiles/XyGrib.dir/DialogLoadGRIB.cpp.o:DialogLoadGRIB.cpp:(.text+0x4f37): more undefined references to `DialogLoadGRIB::staticMetaObject' follow
CMakeFiles/XyGrib.dir/DialogLoadGRIB.cpp.o: In function `DialogLoadGRIB::DialogLoadGRIB(QNetworkAccessManager*, QWidget*)':
DialogLoadGRIB.cpp:(.text+0xa834): undefined reference to `vtable for DialogLoadGRIB'
DialogLoadGRIB.cpp:(.text+0xa8f6): undefined reference to `DialogLoadGRIB::staticMetaObject'
CMakeFiles/XyGrib.dir/DialogLoadGRIB.cpp.o: In function `DialogLoadGRIB::slotGribDataReceived(QByteArray*, QString)':
DialogLoadGRIB.cpp:(.text+0xb640): undefined reference to `DialogLoadGRIB::staticMetaObject'
DialogLoadGRIB.cpp:(.text+0xb772): undefined reference to `DialogLoadGRIB::staticMetaObject'
DialogLoadGRIB.cpp:(.text+0xb795): undefined reference to `DialogLoadGRIB::staticMetaObject'
DialogLoadGRIB.cpp:(.text+0xb893): undefined reference to `DialogLoadGRIB::staticMetaObject'
CMakeFiles/XyGrib.dir/DialogLoadGRIB.cpp.o:DialogLoadGRIB.cpp:(.text+0xbb00): more undefined references to `DialogLoadGRIB::staticMetaObject' follow
CMakeFiles/XyGrib.dir/DialogProxy.cpp.o: In function `DialogProxy::createFrameGui(QWidget*)':
DialogProxy.cpp:(.text+0x922): undefined reference to `DialogProxy::staticMetaObject'
CMakeFiles/XyGrib.dir/DialogProxy.cpp.o: In function `DialogProxy::DialogProxy(QWidget*)':
DialogProxy.cpp:(.text+0x1471): undefined reference to `vtable for DialogProxy'
DialogProxy.cpp:(.text+0x14e1): undefined reference to `DialogProxy::staticMetaObject'
CMakeFiles/XyGrib.dir/DialogSelectMetar.cpp.o: In function `DialogSelectMetar::slotBtOK()':
DialogSelectMetar.cpp:(.text+0x619): undefined reference to `DialogSelectMetar::metarListChanged()'
CMakeFiles/XyGrib.dir/DialogSelectMetar.cpp.o: In function `DialogSelectMetar::make_metar_tree()':
DialogSelectMetar.cpp:(.text+0xb01): undefined reference to `DialogSelectMetar::staticMetaObject'
CMakeFiles/XyGrib.dir/DialogSelectMetar.cpp.o: In function `DialogSelectMetar::DialogSelectMetar(QWidget*)':
DialogSelectMetar.cpp:(.text+0x2c92): undefined reference to `vtable for DialogSelectMetar'
DialogSelectMetar.cpp:(.text+0x2c99): undefined reference to `DialogSelectMetar::staticMetaObject'
CMakeFiles/XyGrib.dir/DialogServerStatus.cpp.o: In function `DialogServerStatus::~DialogServerStatus()':
DialogServerStatus.cpp:(.text+0x3): undefined reference to `vtable for DialogServerStatus'
CMakeFiles/XyGrib.dir/DialogServerStatus.cpp.o: In function `DialogServerStatus::slotNetworkError(QNetworkReply::NetworkError)':
DialogServerStatus.cpp:(.text+0x26a): undefined reference to `DialogServerStatus::staticMetaObject'
CMakeFiles/XyGrib.dir/DialogServerStatus.cpp.o: In function `DialogServerStatus::createFrameGui(QWidget*)':
DialogServerStatus.cpp:(.text+0x3b4): undefined reference to `DialogServerStatus::staticMetaObject'
DialogServerStatus.cpp:(.text+0x100f): undefined reference to `DialogServerStatus::staticMetaObject'
DialogServerStatus.cpp:(.text+0x1100): undefined reference to `DialogServerStatus::staticMetaObject'
DialogServerStatus.cpp:(.text+0x11f1): undefined reference to `DialogServerStatus::staticMetaObject'
CMakeFiles/XyGrib.dir/DialogServerStatus.cpp.o: In function `DialogServerStatus::DialogServerStatus(QNetworkAccessManager*, QWidget*)':
DialogServerStatus.cpp:(.text+0x219b): undefined reference to `vtable for DialogServerStatus'
DialogServerStatus.cpp:(.text+0x2273): undefined reference to `DialogServerStatus::staticMetaObject'
DialogServerStatus.cpp:(.text+0x233c): undefined reference to `DialogServerStatus::staticMetaObject'
DialogServerStatus.cpp:(.text+0x249b): undefined reference to `DialogServerStatus::staticMetaObject'
CMakeFiles/XyGrib.dir/DialogServerStatus.cpp.o: In function `DialogServerStatus::slotFinished()':
DialogServerStatus.cpp:(.text+0x2b7c): undefined reference to `DialogServerStatus::staticMetaObject'
DialogServerStatus.cpp:(.text+0x2dae): undefined reference to `DialogServerStatus::staticMetaObject'
CMakeFiles/XyGrib.dir/DialogServerStatus.cpp.o:DialogServerStatus.cpp:(.text+0x345d): more undefined references to `DialogServerStatus::staticMetaObject' follow
CMakeFiles/XyGrib.dir/DialogUnits.cpp.o: In function `DialogUnits::slotBtOK()':
DialogUnits.cpp:(.text+0x685): undefined reference to `DialogUnits::signalTimeZoneChanged()'
CMakeFiles/XyGrib.dir/DialogUnits.cpp.o: In function `DialogUnits::createFrameGui(QWidget*)':
DialogUnits.cpp:(.text+0xa15): undefined reference to `DialogUnits::staticMetaObject'
DialogUnits.cpp:(.text+0xab8): undefined reference to `DialogUnits::staticMetaObject'
DialogUnits.cpp:(.text+0xb43): undefined reference to `DialogUnits::staticMetaObject'
DialogUnits.cpp:(.text+0xbc9): undefined reference to `DialogUnits::staticMetaObject'
DialogUnits.cpp:(.text+0xc6c): undefined reference to `DialogUnits::staticMetaObject'
CMakeFiles/XyGrib.dir/DialogUnits.cpp.o:DialogUnits.cpp:(.text+0xd0c): more undefined references to `DialogUnits::staticMetaObject' follow
CMakeFiles/XyGrib.dir/DialogUnits.cpp.o: In function `DialogUnits::DialogUnits(QWidget*)':
DialogUnits.cpp:(.text+0x2a98): undefined reference to `vtable for DialogUnits'
DialogUnits.cpp:(.text+0x2a9f): undefined reference to `DialogUnits::staticMetaObject'
DialogUnits.cpp:(.text+0x2b40): undefined reference to `DialogUnits::staticMetaObject'
DialogUnits.cpp:(.text+0x2c9b): undefined reference to `DialogUnits::staticMetaObject'
DialogUnits.cpp:(.text+0x2cff): undefined reference to `DialogUnits::staticMetaObject'
CMakeFiles/XyGrib.dir/DialogUnits.cpp.o: In function `DialogUnits::slotTimeZoneChanged(int)':
DialogUnits.cpp:(.text+0x417c): undefined reference to `DialogUnits::staticMetaObject'
CMakeFiles/XyGrib.dir/FileLoaderGRIB.cpp.o: In function `FileLoaderGRIB::FileLoaderGRIB(QNetworkAccessManager*, QWidget*)':
FileLoaderGRIB.cpp:(.text+0x1b): undefined reference to `vtable for FileLoaderGRIB'
CMakeFiles/XyGrib.dir/FileLoaderGRIB.cpp.o: In function `FileLoaderGRIB::~FileLoaderGRIB()':
FileLoaderGRIB.cpp:(.text+0x113): undefined reference to `vtable for FileLoaderGRIB'
CMakeFiles/XyGrib.dir/FileLoaderGRIB.cpp.o: In function `FileLoaderGRIB::slotNetworkError(QNetworkReply::NetworkError)':
FileLoaderGRIB.cpp:(.text+0x347): undefined reference to `FileLoaderGRIB::signalGribLoadError(QString)'
FileLoaderGRIB.cpp:(.text+0x39f): undefined reference to `FileLoaderGRIB::signalGribLoadError(QString)'
CMakeFiles/XyGrib.dir/FileLoaderGRIB.cpp.o: In function `FileLoaderGRIB::slotFinished_step1()':
FileLoaderGRIB.cpp:(.text+0x833): undefined reference to `FileLoaderGRIB::staticMetaObject'
FileLoaderGRIB.cpp:(.text+0x974): undefined reference to `FileLoaderGRIB::signalGribSendMessage(QString)'
FileLoaderGRIB.cpp:(.text+0x9b3): undefined reference to `FileLoaderGRIB::signalGribStartLoadData()'
FileLoaderGRIB.cpp:(.text+0xb71): undefined reference to `FileLoaderGRIB::staticMetaObject'
CMakeFiles/XyGrib.dir/FileLoaderGRIB.cpp.o: In function `FileLoaderGRIB::slotFinished_step2()':
FileLoaderGRIB.cpp:(.text+0xf4d): undefined reference to `FileLoaderGRIB::staticMetaObject'
FileLoaderGRIB.cpp:(.text+0xf67): undefined reference to `FileLoaderGRIB::signalGribSendMessage(QString)'
FileLoaderGRIB.cpp:(.text+0x105f): undefined reference to `FileLoaderGRIB::staticMetaObject'
FileLoaderGRIB.cpp:(.text+0x10a4): undefined reference to `FileLoaderGRIB::signalGribSendMessage(QString)'
FileLoaderGRIB.cpp:(.text+0x11c7): undefined reference to `FileLoaderGRIB::signalGribDataReceived(QByteArray*, QString)'
FileLoaderGRIB.cpp:(.text+0x126b): undefined reference to `FileLoaderGRIB::staticMetaObject'
FileLoaderGRIB.cpp:(.text+0x1285): undefined reference to `FileLoaderGRIB::signalGribLoadError(QString)'
FileLoaderGRIB.cpp:(.text+0x12db): undefined reference to `FileLoaderGRIB::staticMetaObject'
FileLoaderGRIB.cpp:(.text+0x12fd): undefined reference to `FileLoaderGRIB::signalGribLoadError(QString)'
CMakeFiles/XyGrib.dir/FileLoaderGRIB.cpp.o: In function `FileLoaderGRIB::getGribFile(QString, float, float, float, float, float, int, int, QString, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, bool, QString, bool, bool, bool)':
FileLoaderGRIB.cpp:(.text+0x18f1): undefined reference to `FileLoaderGRIB::staticMetaObject'
FileLoaderGRIB.cpp:(.text+0x191b): undefined reference to `FileLoaderGRIB::signalGribSendMessage(QString)'
FileLoaderGRIB.cpp:(.text+0x194c): undefined reference to `FileLoaderGRIB::signalGribReadProgress(int, int, int)'
FileLoaderGRIB.cpp:(.text+0x2679): undefined reference to `FileLoaderGRIB::staticMetaObject'
CMakeFiles/XyGrib.dir/FileLoaderGRIB.cpp.o: In function `FileLoaderGRIB::downloadProgress(long long, long long)':
FileLoaderGRIB.cpp:(.text+0x410): undefined reference to `FileLoaderGRIB::signalGribReadProgress(int, int, int)'
CMakeFiles/XyGrib.dir/LongTaskProgress.cpp.o: In function `LongTaskProgress::~LongTaskProgress()':
LongTaskProgress.cpp:(.text+0x3): undefined reference to `vtable for LongTaskProgress'
CMakeFiles/XyGrib.dir/LongTaskProgress.cpp.o: In function `LongTaskProgress::LongTaskProgress(QWidget*)':
LongTaskProgress.cpp:(.text+0x251): undefined reference to `vtable for LongTaskProgress'
LongTaskProgress.cpp:(.text+0x350): undefined reference to `LongTaskProgress::staticMetaObject'
CMakeFiles/XyGrib.dir/Metar.cpp.o: In function `MetarWidget::MetarWidget(Airport const&, Projection*, QWidget*)':
Metar.cpp:(.text+0x4a67): undefined reference to `vtable for MetarWidget'
CMakeFiles/XyGrib.dir/MeteotableOptionsDialog.cpp.o: In function `DialogMeteotableOptions::~DialogMeteotableOptions()':
MeteotableOptionsDialog.cpp:(.text+0x3f8): undefined reference to `vtable for DialogMeteotableOptions'
CMakeFiles/XyGrib.dir/MeteotableOptionsDialog.cpp.o: In function `DialogMeteotableOptions::createDataLists()':
MeteotableOptionsDialog.cpp:(.text+0x1b6a): undefined reference to `DialogMeteotableOptions::staticMetaObject'
CMakeFiles/XyGrib.dir/MeteotableOptionsDialog.cpp.o: In function `DialogMeteotableOptions::initInterface()':
MeteotableOptionsDialog.cpp:(.text+0x485c): undefined reference to `DialogMeteotableOptions::staticMetaObject'
MeteotableOptionsDialog.cpp:(.text+0x48e7): undefined reference to `DialogMeteotableOptions::staticMetaObject'
CMakeFiles/XyGrib.dir/MeteotableOptionsDialog.cpp.o: In function `DialogMeteotableOptions::DialogMeteotableOptions()':
MeteotableOptionsDialog.cpp:(.text+0x4d5d): undefined reference to `vtable for DialogMeteotableOptions'
collect2: error: ld returned 1 exit status
nohal commented 6 years ago

Seems to be exactly the same issue as reported by @dominiquehausser - AUTOMOC is not identifying all the instances it should generate, looking into it now.

nohal commented 6 years ago

The AUTOMOC issue should be addressed by https://github.com/opengribs/XyGrib/pull/51

nohal commented 6 years ago

So, as we seem to be happy on the various *nixes now, anybody tried to build on Windows?

free-x commented 6 years ago

confirmed. Looks perfect on Debian Stretch amd64

P.S. What's about some targets for make? For example "make package", "make install"? P.P.S. What's about PREFIX?

nohal commented 6 years ago

No cpack support implemented yet and I think the current requirement to have the data directory next to the executable should be addressed first as it means XyGrib needs to violate the packaging best practices on pretty much every platform.

cmake -DCMAKE_INSTALL_PREFIX=/wherever ..
sudo make install

works just fine for me, doesn't it for you?

free-x commented 6 years ago

cmake -DCMAKE_INSTALL_PREFIX=/wherever .. sudo make install

works partially If not defined: will be installed to /usr/local/XyGrib if defined CMAKE_INSTALL_PREFIX=/usr -> /usr/XyGrib .... it's not UNIX style Should be /usr/bin & /usr/share/XyGrib ?

Next thing: If started /usr/local/XyGrib/XyGrib, screen is empty ( ./data is not found). I found the PATHS definitions in src/util/Util.h static QString pathData () {return "./";}; static QString pathColors () {return pathData()+"data/colors/";} static QString pathConfig () {return pathData()+"data/config/";} static QString pathFonts () {return pathData()+"data/fonts/";} static QString pathGis () {return pathData()+"data/gis/";} static QString pathGshhs () {return pathData()+"data/maps/gshhs/";} static QString pathStuff () {return pathData()+"data/stuff/";} Is it better to change to $PREFIX/share/XyGrib/ ?

nohal commented 6 years ago

yes, the logic around pathData() is clearly wrong on most of the platforms. But as it has been like this even before and has nothing to do with cmake, I simply don't do anything with it.

And I'm afraid you won't get out of this as cheap as what you outlined - there simply is not just Linux out there...

nohal commented 6 years ago

BTW, to solve your empty screen you need to cd /usr/local/XyGrib/ && ./XyGrib or fix the code.

free-x commented 6 years ago

it's all connected somehow. Set correct environment variables via cmake and then handle the platforms in sourcecode with #ifdef. you don't do differently in OpenCPN either... or?

nohal commented 6 years ago

In OpenCPN we definitely do not rely on the current working directory to look for data files and of course do have platform specific logic to locate data, configuration, location to store the logs etc. I really don't have any idea what you mean by "Set correct environment variables via cmake" but if you think there is something like a PREFIX environment variable that perhaps should somehow magically be created on the enduser machines by the build toolchain, there isn't. You of course can get both the current working directory (mostly useless piece of information for what we discuss here) and the location of the application executable (more useful) at runtime and that (and more) is what pathData() should do instead of what it does now.

dominiquehausser commented 6 years ago

builds of v1.1.1 OK on Ubuntu 17.10. Thanks a lot for your work.

norulz commented 6 years ago

Has anyone been able to build openjpeg2.3 on mingw32 ? This is needed for XyGrib_win. Going sailing - I need to cool off from this!

tsenga commented 6 years ago

Had issues with mac build:

Attempted OSX build - failed in a couple of areas:

1) no proj library (needed to be installed in the home-brew lines), 2) cmake needs to be told where to find QT, 3) packaging referred to ....src/build should be ....build/src

Not sure if it was my setup, however I have submitted a pull request fixing the above (just needs minor adjustments to build instructions)

FredericGuilbault commented 5 years ago

+1 for PPA, AppImage works but they build as standalone app witch make Linux bloated. One of the beauty of packages on linux is that you can share libs. witch avoid most of code duplication. appimage break this principle.