Bug 282865 - Issues with incude files for marble lib
Summary: Issues with incude files for marble lib
Status: RESOLVED FIXED
Alias: None
Product: marble
Classification: Applications
Component: general (show other bugs)
Version: unspecified
Platform: Compiled Sources Linux
: NOR crash
Target Milestone: 1.3 (KDE 4.8)
Assignee: marble-bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2011-09-26 20:47 UTC by Jarosław Staniek
Modified: 2012-05-14 19:55 UTC (History)
1 user (show)

See Also:
Latest Commit:
Version Fixed In:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Jarosław Staniek 2011-09-26 20:47:13 UTC
Version:           unspecified (using KDE 4.7.0) 
OS:                Linux

1. FindMarble.cmake defines MARBLE_INCLUDE_DIR with "marble" suffix because it uses PATH_SUFFIXES in:

FIND_PATH( MARBLE_INCLUDE_DIR NAMES MarbleMap.h PATH_SUFFIXES marble)

This means users of the marble lib cannot use e.g. #include <marble/MarbleWidget.h> since this won'twork with custom location of marble includes - now the system one is used.
Used are forced by MARBLE_INCLUDE_DIR to use #include <MarbleWidget.h>. This can also lead to nonunique filenames e.g. when other <global.h> is somewhere on the path.

If MARBLE_INCLUDE_DIR has no marble/ suffix, e.g. by default it is : /usr/include instead of /usr/include/marble, the issue would be fixed.
So it's enough to remove SUFFIX from FIND_PATH in the FindMarble.cmake file.

_Alternatively_ you can keep MARBLE_INCLUDE_DIR as is the do what Qt does: name al lthe headers with as-much-as-posible-unique-headers e.g. rename global.h to MarbleGlobal.h, 
AbstractDataPlugin.h to MarbleAbstractDataPlugin.h, etc.

2. At least one public file is not installed: GeoSceneDocument.h in marble lib 1.2. There may be more.
This makes Marble::MapThemeManager API not available while it is documented as public. Even if you remove its documentation, you would have to remove its uses from the public API, 
e.g. from QList<GeoSceneDocument const*>  Marble::MapThemeManager::mapThemes() const.


Reproducible: Always

Steps to Reproduce:
A. Build and install marble in custom PREFIX. Define includes in CMakeLists.txt with ${MARBLE_INCLUDE_DIR} and use #include <marble/MarbleWidget.h> in user code. 

or B. Try to use #include <marble/GeoSceneDocument.h>

Actual Results:  
A. MarbleWidget.h will not be found.

or B. <marble/GeoSceneDocument.h> will not be found.

Expected Results:  
Both headers should be found.
Comment 1 Dennis Nienhüser 2012-01-08 10:31:04 UTC
Thanks for the bug report. I made a review request for 1. at https://git.reviewboard.kde.org/r/103656/
Comment 2 Dennis Nienhüser 2012-01-08 10:59:19 UTC
Git commit f4702b2076e84d89bba80731bd2a0b4977271bd5 by Dennis Nienhüser.
Committed on 08/01/2012 at 11:54.
Pushed by nienhueser into branch 'master'.

Improve headers for external inclusion.

Search locally for own headers, copy publically referenced ones to
include/, rename AdjustNavigation to AutoNavigation.

This commit does not yet catch forward includes (e.g. GeoSceneDocument) and
RunnerPlugin.h still fails inclusion.

R  +21   -21   src/lib/AutoNavigation.cpp [from: src/lib/routing/AdjustNavigation.cpp - 088% similarity]
R  +5    -5    src/lib/AutoNavigation.h [from: src/lib/routing/AdjustNavigation.h - 088% similarity]
M  +3    -1    src/lib/CMakeLists.txt
M  +14   -14   src/lib/CurrentLocationWidget.cpp
M  +3    -4    src/lib/CurrentLocationWidget.h
M  +1    -1    src/lib/MarbleControlBox.h
M  +2    -2    src/lib/PositionProviderPluginInterface.h
M  +4    -0    src/lib/QtMarbleConfigDialog.cpp
M  +2    -6    src/lib/QtMarbleConfigDialog.h
M  +1    -1    src/lib/geodata/data/GeoDataAccuracy.h
M  +5    -5    src/lib/routing/RoutingManager.cpp
M  +6    -6    src/lib/routing/RoutingManager.h
M  +5    -5    src/plugins/declarative/Tracking.cpp
M  +2    -2    src/plugins/declarative/Tracking.h

http://commits.kde.org/marble/f4702b2076e84d89bba80731bd2a0b4977271bd5
Comment 3 Dennis Nienhüser 2012-05-14 19:55:23 UTC
Git commit 87cce17ba8156d7aee03a799b7fda8e78702f290 by Dennis Nienhüser.
Committed on 14/05/2012 at 21:20.
Pushed by nienhueser into branch 'master'.

Endorse marble/class.h #includes (instead of simple class.h)
REVIEW: 103656

M  +5    -12   FindMarble.cmake

http://commits.kde.org/marble/87cce17ba8156d7aee03a799b7fda8e78702f290
Comment 4 Dennis Nienhüser 2012-05-14 19:55:23 UTC
Git commit bd40a2bc5722ceded5bea08b011518a368c7dc68 by Dennis Nienhüser.
Committed on 14/05/2012 at 21:40.
Pushed by nienhueser into branch 'master'.

Rename global.h to MarbleGlobal.h

The new name is consistent with the class declared by it and avoids
name conflicts with other libraries (once the placeholder global.h
will be removed). The old style inclusion using global.h is still
possible for backward compatibility and issues a friendly reminder
to switch to the renamed file.

M  +1    -1    examples/cpp/map-properties/main.cpp
M  +1    -1    src/MarbleTest.cpp
M  +2    -2    src/bindings/python/sip/global.sip
M  +1    -1    src/lib/AutoNavigation.cpp
M  +1    -1    src/lib/BookmarkManager.h
M  +2    -1    src/lib/CMakeLists.txt
M  +1    -1    src/lib/ClipPainter.h
M  +1    -1    src/lib/DownloadPolicy.h
M  +1    -1    src/lib/EquirectScanlineTextureMapper.h
M  +1    -1    src/lib/FileStoragePolicy.cpp
M  +1    -1    src/lib/FileStorageWatcher.cpp
M  +1    -1    src/lib/GeoGraphicsScene.h
M  +1    -1    src/lib/GeoPainter.cpp
M  +1    -1    src/lib/GeoPainter.h
M  +1    -1    src/lib/GeoPainter_p.h
M  +1    -1    src/lib/HttpDownloadManager.h
M  +1    -1    src/lib/HttpJob.h
M  +1    -1    src/lib/LatLonEdit.cpp
M  +1    -1    src/lib/LatLonEdit.h
M  +1    -1    src/lib/MapViewWidget.h
M  +1    -1    src/lib/MapWizard.cpp
M  +1    -1    src/lib/MarbleAboutDialog.cpp
M  +1    -1    src/lib/MarbleControlBox.cpp
M  +1    -1    src/lib/MarbleControlBox.h
R  +2    -2    src/lib/MarbleGlobal.cpp [from: src/lib/global.cpp - 096% similarity]
C  +1    -1    src/lib/MarbleGlobal.h [from: src/lib/global.h - 099% similarity]
R  +1    -1    src/lib/MarbleGlobal_p.h [from: src/lib/global_p.h - 096% similarity]
M  +1    -1    src/lib/MarbleLineEdit.cpp
M  +1    -1    src/lib/MarbleModel.cpp
M  +1    -1    src/lib/MarbleModel.h
M  +1    -1    src/lib/MarbleThemeSelectView.cpp
M  +1    -1    src/lib/MarbleWidget.h
M  +1    -1    src/lib/MarbleWidgetInputHandler.cpp
M  +1    -1    src/lib/MercatorScanlineTextureMapper.h
M  +1    -1    src/lib/MergedLayerDecorator.cpp
M  +1    -1    src/lib/Planet.cpp
M  +1    -1    src/lib/Projections/SphericalProjection.cpp
M  +1    -1    src/lib/QtMarbleConfigDialog.cpp
M  +1    -1    src/lib/QtMarbleConfigDialog.h
M  +1    -1    src/lib/ServerLayout.cpp
M  +1    -1    src/lib/SphericalScanlineTextureMapper.cpp
M  +1    -1    src/lib/SphericalScanlineTextureMapper.h
M  +1    -1    src/lib/StackedTile.h
M  +1    -1    src/lib/StackedTileLoader.cpp
M  +1    -1    src/lib/StackedTileLoader.h
M  +1    -1    src/lib/SunLocator.cpp
M  +1    -1    src/lib/TextureColorizer.cpp
M  +1    -1    src/lib/TextureColorizer.h
M  +1    -1    src/lib/TileCreator.cpp
M  +1    -1    src/lib/TileLoader.h
M  +1    -1    src/lib/TileLoaderHelper.cpp
M  +1    -1    src/lib/TinyWebBrowser.cpp
M  +1    -1    src/lib/VectorComposer.cpp
M  +1    -1    src/lib/VectorMap.cpp
M  +1    -1    src/lib/VectorMap.h
M  +1    -1    src/lib/ViewParams.h
M  +1    -1    src/lib/ViewportParams.h
M  +1    -1    src/lib/blendings/SunLightBlending.cpp
M  +1    -1    src/lib/geodata/data/GeoDataCoordinates.cpp
M  +1    -1    src/lib/geodata/data/GeoDataCoordinates.h
M  +1    -1    src/lib/geodata/data/GeoDataGeometry.h
M  +1    -1    src/lib/geodata/data/GeoDataGroundOverlay.h
M  +1    -1    src/lib/geodata/data/GeoDataLatLonAltBox.h
M  +1    -1    src/lib/geodata/data/GeoDataLatLonBox.h
M  +1    -1    src/lib/geodata/data/GeoDataLineString.h
M  +1    -1    src/lib/geodata/data/GeoDataPhotoOverlay.h
M  +1    -1    src/lib/geodata/data/GeoDataPoint.cpp
M  +1    -1    src/lib/geodata/data/GeoDataPolygon.h
M  +1    -1    src/lib/geodata/handlers/dgml/DgmlDownloadPolicyTagHandler.cpp
M  +1    -1    src/lib/geodata/handlers/kml/KmlAltitudeTagHandler.cpp
M  +1    -1    src/lib/geodata/handlers/kml/KmlCoordinatesTagHandler.cpp
M  +1    -1    src/lib/geodata/handlers/kml/KmlLatitudeTagHandler.cpp
M  +1    -1    src/lib/geodata/handlers/kml/KmlLongitudeTagHandler.cpp
M  +1    -1    src/lib/geodata/handlers/kml/KmlRangeTagHandler.cpp
M  +1    -1    src/lib/geodata/scene/GeoSceneTexture.h
M  +1    -1    src/lib/geodata/scene/GeoSceneXmlDataSource.cpp
M  +2    -298  src/lib/global.h
M  +1    -1    src/lib/layers/PlacemarkLayout.cpp
M  +1    -1    src/lib/layers/TextureLayer.h
M  +1    -1    src/lib/routing/RoutingModel.cpp
M  +1    -1    src/lib/routing/RoutingProfileSettingsDialog.cpp
M  +1    -1    src/marble.kcfg
M  +1    -1    src/marble_part.h
M  +1    -1    src/plasmoid/worldclock.cpp
M  +1    -1    src/plugins/declarative/MarbleDeclarativeObject.cpp
M  +1    -1    src/plugins/render/aprs/AprsPlugin.cpp
M  +1    -1    src/plugins/render/earthquake/EarthquakeModel.cpp
M  +1    -1    src/plugins/render/mapscale/MapScaleFloatItem.cpp
M  +1    -1    src/plugins/render/navigation/NavigationFloatItem.h
M  +1    -1    src/plugins/render/opencaching/OpenCachingModel.cpp
M  +1    -1    src/plugins/render/opendesktop/OpenDesktopModel.cpp
M  +1    -1    src/plugins/render/postalcode/PostalCodeModel.cpp
M  +1    -1    src/plugins/render/satellites/SatellitesItem.cpp
M  +1    -1    src/plugins/render/speedometer/Speedometer.cpp
M  +1    -1    src/plugins/render/weather/BBCParser.cpp
M  +1    -1    src/plugins/render/weather/BBCWeatherService.cpp
M  +1    -1    src/plugins/render/weather/StationListParser.cpp
M  +1    -1    src/plugins/render/weather/WeatherData.cpp
M  +1    -1    src/plugins/render/weather/WeatherPlugin.cpp
M  +1    -1    src/plugins/render/wikipedia/GeonamesParser.cpp
M  +1    -1    src/plugins/render/wikipedia/WikipediaModel.cpp
M  +1    -1    src/plugins/runner/gpx/handlers/GPXgpxTagHandler.cpp
M  +1    -1    src/plugins/runner/osm/handlers/OsmGlobals.cpp
M  +1    -1    src/plugins/runner/osm/handlers/OsmOsmTagHandler.cpp
M  +1    -1    src/qt-components/marble-touch/main.cpp
M  +1    -1    tests/QuaternionTest.cpp
M  +1    -1    tests/TestGeoDataCoordinates.cpp
M  +1    -1    tests/TestGeoDataLatLonAltBox.cpp
M  +1    -1    tests/TestGeoPainter.cpp

http://commits.kde.org/marble/bd40a2bc5722ceded5bea08b011518a368c7dc68