Allow use of system-provided pugixml #2863
Closed
PureTryOut wants to merge 1 commit from
support-system-pugixml
into master
pull from: support-system-pugixml
merge into: organicmaps:master
organicmaps:master
organicmaps:weblate-i18n
organicmaps:beta/ios-hotfix-search
organicmaps:ios/search-fix-to-child-vc
organicmaps:ios/update-toast-ui
organicmaps:pastk-generator-genorder
organicmaps:pastk-autogen-subways
organicmaps:ios/pp-for-track-recording
organicmaps:ios/add-icons-to-the-live-activity-widget
organicmaps:ios/fix-search-on-map-tests-for-ipad
organicmaps:release/2025.03.02
organicmaps:pastk-drape-subways-greying-out
organicmaps:ios/update-search-vc-ui
organicmaps:alpha/2025.02.23
organicmaps:crowdin-master
organicmaps:l10n
organicmaps:ios/search-ui-redesign
organicmaps:ios/show-new-search-vc-from-the-route-building
organicmaps:release/2025.01.24
organicmaps:drop-appstream-glib
organicmaps:separate-locationservice-lib
organicmaps:release/2025.01.12
organicmaps:int/anrdoid-auto/permissions-screen
organicmaps:rt-docs-release-management-principles
organicmaps:generator-wikipedia
organicmaps:generator-actions
organicmaps:generator-subways
organicmaps:ios/enable-cpp-swift-interop
organicmaps:pastk-docs-values
organicmaps:fix-deprecated-atomic-load
organicmaps:rt-docs-communication
organicmaps:rt-docs-collaboration
organicmaps:ios/fix-compile-warnings-and-cleanup-unsupported-code
organicmaps:rt-ios-managed-signing
organicmaps:ios/fix-ios-test-ci-action-failure
organicmaps:ab-ios-bookmarks-last-category
organicmaps:pastk-docs-teams
organicmaps:qt-3d-preferences
organicmaps:fix-file-read-exception
organicmaps:fix-track-length-calculation
organicmaps:pastk-styles-feature-types-migration
organicmaps:release/24.11.27
organicmaps:alpha/2024.11.26
organicmaps:beta/2024.11.26
organicmaps:ab-tests-macro-fixes
organicmaps:ios/track-recording-fifth-bar-button
organicmaps:vng-fix
organicmaps:release/24.11.12
organicmaps:alpha/2024.11.10
organicmaps:vng-langs
organicmaps:patch-3
organicmaps:release/2024.10.22
organicmaps:alpha/2024.10.22
organicmaps:beta/2024.10.22
organicmaps:place-page-for-tracks-backup
organicmaps:release/2024.10.08
organicmaps:release/2024.10.04
organicmaps:alpha/2024.10.01
organicmaps:vng-search
organicmaps:beta/2024.09.19
organicmaps:release/2024.09.19
organicmaps:rdb-weblate
organicmaps:release/2024.09.08
organicmaps:android/speed-limit-exceed-flag
organicmaps:alpha/2024.09.03
organicmaps:alpha/2024.09.03-ios-track-recording-feature
organicmaps:mb-PendingIntent-requestCode-fix
organicmaps:alpha/2024.08.29
organicmaps:add-timestamps-to-track
organicmaps:ab-ios-crash-on-assert
organicmaps:alpha/2024.08.25-ios-track-recording-feature
organicmaps:alpha/2024.08.29-ios-track-recording-feature
organicmaps:android/speed-limit-threshold
organicmaps:android-oauth2-with-browser
organicmaps:release/2024.08.17
organicmaps:changes-from-release
organicmaps:release/2024.08.15
organicmaps:alpha-iOS-Bluetooth
organicmaps:rdb-cldr-plural-order
organicmaps:ab-unused-code
organicmaps:ab-android-location-fix
organicmaps:recent-track-recorder
organicmaps:ab-cleaner-shutdown
organicmaps:localized_address_ordering
organicmaps:ab-android-layer-button-highlight
organicmaps:weblate
organicmaps:release/2024.07.08
organicmaps:alpha/2024.07.25-rtsisyk-ios-test
organicmaps:ios-implement-the-recently-deleted-support-to-icloud-sync
organicmaps:recently-deleted-categories-using-postfix
organicmaps:fix-ios-simulator-version
organicmaps:alpha/2024.07.02
organicmaps:vng-test-data
organicmaps:release/2024.06.02
organicmaps:ios/undo-for-the-bookmark-deletion
organicmaps:ios/restore-bookmark-by-tap-on-the-map
organicmaps:ios/undo-for-the-bookmark-deletion-with-restoring-by-tap-on-the-map
organicmaps:revert-7969-pastk-drape-transparent-areas
organicmaps:ab-drape-use-constant-base-font-height
organicmaps:rt-beta
organicmaps:vng-alt-routes
organicmaps:pastk-styles-shared-paths-tune-down
organicmaps:android-auto/8015-8019-8022
organicmaps:pastk-beta-0420
organicmaps:pastk-2generate-paths
organicmaps:ab-fix-shaders-rebuild
organicmaps:ios/fix-drape-failure-during-test-running
organicmaps:ios/add-test-target-terminate
organicmaps:cleanup/base
organicmaps:ab-max-open-file-limit
organicmaps:weblate-appstore-i18n
organicmaps:2024.03.27-3-android-hotfix
organicmaps:ab-3party-oauthcpp
organicmaps:android-hotfix-24031805
organicmaps:ab-android-revert-links
organicmaps:ab-tts-simpler-strings
organicmaps:rt-android-huawei-crash
organicmaps:rt-android-release-2024.03.02
organicmaps:rt-android-release-2024.03.01
organicmaps:ab-ios-release-2024.02.27
organicmaps:ab-from-chars
organicmaps:gplay-android-auto-hotfix
organicmaps:ab-case-folding
organicmaps:rt-store-metadata
organicmaps:ab-buffer-vector-string-view
organicmaps:ab-update-gh-cache-action
organicmaps:rt-android-bookmark-export
organicmaps:osm-oauth2-support
organicmaps:vng-test
organicmaps:rt-geo-links
organicmaps:vng-lines
organicmaps:windows3
organicmaps:android-auto-disable
organicmaps:rt-android-paranoid-mode
organicmaps:rt-android-outdoor
organicmaps:ios-hotfix-release-dec-2023
organicmaps:rt-android-location-providers
organicmaps:pastk-outdoors-hiking-routes
organicmaps:pastk-2generate
organicmaps:pastk-classif-hiking-routes
organicmaps:vng-gen-kk
organicmaps:poc-disable-route-build-zoom
organicmaps:kk2
organicmaps:ab-thread-checker-qt-download-dialog-fix
organicmaps:revert-6461-category-letterbox-it
organicmaps:beta-outdoor
organicmaps:protobuf-24.4
organicmaps:designer-fixes
organicmaps:vng-bookmarks
organicmaps:vng-outdoors
organicmaps:navigation/save-mode
organicmaps:pastk-TEST-rel-w-lines-stats
organicmaps:ab-kml-remove-unique-ptr
organicmaps:vng-bench
organicmaps:aa
organicmaps:rt-android-remove-workmanager
organicmaps:rt-android-debug
organicmaps:protobuf-24.3
organicmaps:pastk-core-housenumbers
organicmaps:ruler-disable-reordering
organicmaps:android-warning-suppress
organicmaps:pastk-drape-bucket-discard-optimization
organicmaps:beta-ios-gpx-fix
organicmaps:pastk-generator-isolines-skip-resimplify
organicmaps:pastk-styles-world-railways
organicmaps:pastk-styles-TMP_dump_priorities
organicmaps:ab-increase-long-tap-radius
organicmaps:car-checkpoint-tolerance
organicmaps:rt-android-fix-viewport
organicmaps:vng-addr-test
organicmaps:downloader
organicmaps:obsolete-position-color
organicmaps:pastk-styles-geometryfallback
organicmaps:pastk-DEMO-geometry-1more-detailed
organicmaps:strings-be-ru-uk-miles
organicmaps:ios/external-keyboard-fix2
organicmaps:alex-outdoors
organicmaps:ios/blue-route-to
organicmaps:pastk-styles-fixpriorities2
organicmaps:pastk-styles-fixpriorities
organicmaps:rt-android-accent-color
organicmaps:pastk-drape-path_text_zoom_mask
organicmaps:pastk-drape-roadshields
organicmaps:update-appstore-metadata
organicmaps:pastk-styles-outdoors
organicmaps:3p/disable-system-jansson
organicmaps:ios/newly-created-list-order
organicmaps:czech-release
organicmaps:rt-fix-monkey-gh
organicmaps:ios/fix-tableview-headers-font
organicmaps:rt-android-google-location-annoying
organicmaps:pastk-loc-share
organicmaps:ctest
organicmaps:windows2
organicmaps:kml-load-robust
organicmaps:tr-screenshots
organicmaps:vng-nav
organicmaps:d4f5409d-patch-1
organicmaps:rt-fix-location-resolution
organicmaps:github-actions-update
organicmaps:android_auto
organicmaps:matheusgomesms-store-releasenotes-pt_BRtranslation
organicmaps:rt-add-ci-timeout
organicmaps:rq-alterRoutes-vng
organicmaps:euskara
organicmaps:windows
organicmaps:tests-fix
organicmaps:pastk-styles-geometryfallback-1more-detailed
organicmaps:pastk-styles-zoomlessareas
organicmaps:pastk-outdoors-beta
organicmaps:android/R8
organicmaps:pastk-android-writability
organicmaps:rt-location-api
organicmaps:pastk-android-verifyerror
organicmaps:qt6
organicmaps:vng-my_pos
organicmaps:pastk-scripts
organicmaps:vng-sdfimage
organicmaps:vng-vehicle-refactoring
organicmaps:release-gp-fdroid-without-location-fixes
organicmaps:rt-android-track-recorder
organicmaps:rt-android-gplay-compliance
organicmaps:rt-android-remove-gms
organicmaps:rt-android-track-recorder-alarm
organicmaps:rt-android-keep-data
organicmaps:fix-odr
organicmaps:build/no-unity
organicmaps:backup-resources
organicmaps:android/warning-fixes
organicmaps:weblate-ios-i18n
organicmaps:rt-android-symlinks
organicmaps:weblate-android-i18n
organicmaps:weblate-whitespacing
organicmaps:rt-weblate-consume
organicmaps:ios/fixes
organicmaps:i18n-android
organicmaps:i18n-ios
organicmaps:rt-xcode-desktop
Labels
Clear labels
issues affecting users with specific needs
issues affecting users with specific needs
Issues with addresses, post codes, city/town/village borders
Issues with addresses, post codes, city/town/village borders
Android development
Android development
Android Auto
Android Auto
Short Links, deep links and url schemes, including ge0 and om://
Short Links, deep links and url schemes, including ge0 and om://
Huawei AppGallery
Huawei AppGallery
Apple AppStore
Apple AppStore
Performance and battery consumption-related issues and optimizations
Performance and battery consumption-related issues and optimizations
An issue blocking the release
An issue blocking the release
Bookmarks, imported tracks, and KML, KMZ, KMB, GPX, GPZ import or export
Bookmarks, imported tracks, and KML, KMZ, KMB, GPX, GPZ import or export
Country borders and polygons
Country borders and polygons
Something isn't working
Something isn't working
Compilation issue
Compilation issue
CarPlay Integration
CarPlay Integration
Classify object by types
Classify object by types
Community relations
Community relations
Cross-platform C++ libraries with a core functionality
Cross-platform C++ libraries with a core functionality
Crash Reporting
Crash Reporting
Bike, cycle, biking and related
Bike, cycle, biking and related
Desktop application
Desktop application
Developer Experience
Developer Experience
Automation and pipelines
Automation and pipelines
A desktop app to debug rendering
A desktop app to debug rendering
Issues with next turns, labels, streets, voice instructions
Issues with next turns, labels, streets, voice instructions
Improvements or additions to documentation
Improvements or additions to documentation
Map dowloader
Map dowloader
Drape OpenGL, Vulkan and Metal graphics rendering engine
Drape OpenGL, Vulkan and Metal graphics rendering engine
Drive a car related issues
Drive a car related issues
This issue or pull request already exists
This issue or pull request already exists
OSM Editor
OSM Editor
Isolines and altitude
Isolines and altitude
New feature or request, an improvement of some existing feature
New feature or request, an improvement of some existing feature
A large body work
A large body work
TIGER, Ordnance Survey, ASTER, SRTM, etc.
TIGER, Ordnance Survey, ASTER, SRTM, etc.
F-Droid build and distribution
F-Droid build and distribution
Font and text rendering
Font and text rendering
Most annoying UX and other issues for users reported by many people
Most annoying UX and other issues for users reported by many people
Related to generator tool.
Related to generator tool.
Good for newcomers
Good for newcomers
Google Play
Google Play
Location and positioning issues
Location and positioning issues
Ideas for Google Summer of Code
Ideas for Google Summer of Code
Map and app icons
Map and app icons
iOS development
iOS development
Legal aspects
Legal aspects
Ubuntu, Gentoo, Red Hat, Debian, Cent OS, Fedora, etc.
Ubuntu, Gentoo, Red Hat, Debian, Cent OS, Fedora, etc.
LibreM, PinePhone, Wayland and other mobile Linux versions
LibreM, PinePhone, Wayland and other mobile Linux versions
Desktop issues related to Mac OS X, OM running on M1, M2, M3 Apple silicon, or Qt version
Desktop issues related to Mac OS X, OM running on M1, M2, M3 Apple silicon, or Qt version
OpenStreetMap data related issues
OpenStreetMap data related issues
Subway, Tube, light-rail public transport issues
Subway, Tube, light-rail public transport issues
Issues related to the active Navigator / Navigation mode
Issues related to the active Navigator / Navigation mode
Further information is requested
Further information is requested
Night or dark mode feature
Night or dark mode feature
Tasks related to NLnet 2024-06-281 project.
Tasks related to NLnet 2024-06-281 project.
A platform needs this to be implemented to have feature parity with other platforms
A platform needs this to be implemented to have feature parity with other platforms
Business Hours, off time, holidays, seasonal
Business Hours, off time, holidays, seasonal
Hiking, mtb, 4x4...
Hiking, mtb, 4x4...
Feature metadata, OSM tags that are displayed in Place Page
Feature metadata, OSM tags that are displayed in Place Page
Privacy
Privacy
Bus, trolleybus, train, tram, metro, subway, light rail
Bus, trolleybus, train, tram, metro, subway, light rail
An idea that needs to be elaborated
An idea that needs to be elaborated
This issue is different depending on the country or region
This issue is different depending on the country or region
A regression bug
A regression bug
Meta-tickets for tracking the release procedure
Meta-tickets for tracking the release procedure
Robo / Monkey Auto Tests
Robo / Monkey Auto Tests
Preview and plan your track
Preview and plan your track
Route building issues, e.g. valid route, valid ETA
Route building issues, e.g. valid route, valid ETA
Helicopter routing, "as a crow flies"
Helicopter routing, "as a crow flies"
Search
Search
Security improvements
Security improvements
Map drawing styles
Map drawing styles
Track Recording
Track Recording
Localization and translations issues
Localization and translations issues
Text-to-Speech
Text-to-Speech
User interface issues
User interface issues
User eXperience, an issue with usability
User eXperience, an issue with usability
Foot pedestrian mode
Foot pedestrian mode
Android Watches or Apple Watches support
Android Watches or Apple Watches support
https://organicmaps.app/
https://organicmaps.app/
Issues related to Wiki articles embedded in OM data files.
Issues related to Wiki articles embedded in OM data files.
Windows
Windows
Unfeasible or impossible to resolve
Unfeasible or impossible to resolve
Issues about improving the base map of the whole world that is bundled with the app
Issues about improving the base map of the whole world that is bundled with the app
Accessibility
issues affecting users with specific needs
Accessibility
issues affecting users with specific needs
Address
Issues with addresses, post codes, city/town/village borders
Address
Issues with addresses, post codes, city/town/village borders
Android
Android development
Android
Android development
Android Auto
Android Auto
Android Auto
Android Auto
Android Automotive (AAOS)
Android Automotive (AAOS)
API
Short Links, deep links and url schemes, including ge0 and om://
API
Short Links, deep links and url schemes, including ge0 and om://
AppGallery
Huawei AppGallery
AppGallery
Huawei AppGallery
AppStore
Apple AppStore
AppStore
Apple AppStore
Battery and Performance
Performance and battery consumption-related issues and optimizations
Battery and Performance
Performance and battery consumption-related issues and optimizations
Blocker
An issue blocking the release
Blocker
An issue blocking the release
Bookmarks and Tracks
Bookmarks, imported tracks, and KML, KMZ, KMB, GPX, GPZ import or export
Bookmarks and Tracks
Bookmarks, imported tracks, and KML, KMZ, KMB, GPX, GPZ import or export
Borders
Country borders and polygons
Borders
Country borders and polygons
Bug
Something isn't working
Bug
Something isn't working
Build
Compilation issue
Build
Compilation issue
CarPlay
CarPlay Integration
CarPlay
CarPlay Integration
Classificator
Classify object by types
Classificator
Classify object by types
Community
Community relations
Community
Community relations
Core
Cross-platform C++ libraries with a core functionality
Core
Cross-platform C++ libraries with a core functionality
CrashReports
Crash Reporting
CrashReports
Crash Reporting
Cycling
Bike, cycle, biking and related
Cycling
Bike, cycle, biking and related
Desktop
Desktop application
Desktop
Desktop application
DevEx
Developer Experience
DevEx
Developer Experience
DevOps
Automation and pipelines
DevOps
Automation and pipelines
dev_sandbox
A desktop app to debug rendering
dev_sandbox
A desktop app to debug rendering
Directions
Issues with next turns, labels, streets, voice instructions
Directions
Issues with next turns, labels, streets, voice instructions
Documentation
Improvements or additions to documentation
Documentation
Improvements or additions to documentation
Downloader
Map dowloader
Downloader
Map dowloader
Drape
Drape OpenGL, Vulkan and Metal graphics rendering engine
Drape
Drape OpenGL, Vulkan and Metal graphics rendering engine
Driving
Drive a car related issues
Driving
Drive a car related issues
Duplicate
This issue or pull request already exists
Duplicate
This issue or pull request already exists
Editor
OSM Editor
Editor
OSM Editor
Elevation
Isolines and altitude
Elevation
Isolines and altitude
Enhancement
New feature or request, an improvement of some existing feature
Enhancement
New feature or request, an improvement of some existing feature
Epic
A large body work
Epic
A large body work
External Map Datasets
TIGER, Ordnance Survey, ASTER, SRTM, etc.
External Map Datasets
TIGER, Ordnance Survey, ASTER, SRTM, etc.
F-Droid
F-Droid build and distribution
F-Droid
F-Droid build and distribution
Fonts
Font and text rendering
Fonts
Font and text rendering
Frequently User Reported
Most annoying UX and other issues for users reported by many people
Frequently User Reported
Most annoying UX and other issues for users reported by many people
Fund
Fund
Generator
Related to generator tool.
Generator
Related to generator tool.
Good first issue
Good for newcomers
Good first issue
Good for newcomers
Google Play
Google Play
Google Play
Google Play
GPS
Location and positioning issues
GPS
Location and positioning issues
GSoC
Ideas for Google Summer of Code
GSoC
Ideas for Google Summer of Code
iCloud
iCloud
Icons
Map and app icons
Icons
Map and app icons
iOS
iOS development
iOS
iOS development
Legal
Legal aspects
Legal
Legal aspects
Linux Desktop
Ubuntu, Gentoo, Red Hat, Debian, Cent OS, Fedora, etc.
Linux Desktop
Ubuntu, Gentoo, Red Hat, Debian, Cent OS, Fedora, etc.
Linux packaging
Linux packaging
Linux Phone
LibreM, PinePhone, Wayland and other mobile Linux versions
Linux Phone
LibreM, PinePhone, Wayland and other mobile Linux versions
Mac OS
Desktop issues related to Mac OS X, OM running on M1, M2, M3 Apple silicon, or Qt version
Mac OS
Desktop issues related to Mac OS X, OM running on M1, M2, M3 Apple silicon, or Qt version
Map Data
OpenStreetMap data related issues
Map Data
OpenStreetMap data related issues
Metro
Subway, Tube, light-rail public transport issues
Metro
Subway, Tube, light-rail public transport issues
Navigation
Issues related to the active Navigator / Navigation mode
Navigation
Issues related to the active Navigator / Navigation mode
Need Feedback
Further information is requested
Need Feedback
Further information is requested
Night Mode
Night or dark mode feature
Night Mode
Night or dark mode feature
NLnet 2024-06-281
Tasks related to NLnet 2024-06-281 project.
NLnet 2024-06-281
Tasks related to NLnet 2024-06-281 project.
No Feature Parity
A platform needs this to be implemented to have feature parity with other platforms
No Feature Parity
A platform needs this to be implemented to have feature parity with other platforms
Opening Hours
Business Hours, off time, holidays, seasonal
Opening Hours
Business Hours, off time, holidays, seasonal
Outdoors
Hiking, mtb, 4x4...
Outdoors
Hiking, mtb, 4x4...
POI Info
Feature metadata, OSM tags that are displayed in Place Page
POI Info
Feature metadata, OSM tags that are displayed in Place Page
Privacy
Privacy
Privacy
Privacy
Public Transport
Bus, trolleybus, train, tram, metro, subway, light rail
Public Transport
Bus, trolleybus, train, tram, metro, subway, light rail
Raw Idea
An idea that needs to be elaborated
Raw Idea
An idea that needs to be elaborated
Refactoring
Refactoring
Regional
This issue is different depending on the country or region
Regional
This issue is different depending on the country or region
Regression
A regression bug
Regression
A regression bug
Releases
Meta-tickets for tracking the release procedure
Releases
Meta-tickets for tracking the release procedure
RoboTest
Robo / Monkey Auto Tests
RoboTest
Robo / Monkey Auto Tests
Route Planning
Preview and plan your track
Route Planning
Preview and plan your track
Routing
Route building issues, e.g. valid route, valid ETA
Routing
Route building issues, e.g. valid route, valid ETA
Ruler
Helicopter routing, "as a crow flies"
Ruler
Helicopter routing, "as a crow flies"
Search
Search
Search
Search
Security
Security improvements
Security
Security improvements
Styles
Map drawing styles
Styles
Map drawing styles
Tests
Tests
Track Recording
Track Recording
Track Recording
Track Recording
Translations
Localization and translations issues
Translations
Localization and translations issues
TTS
Text-to-Speech
TTS
Text-to-Speech
UI
User interface issues
UI
User interface issues
UX
User eXperience, an issue with usability
UX
User eXperience, an issue with usability
Walk Navigation
Foot pedestrian mode
Walk Navigation
Foot pedestrian mode
Watches
Android Watches or Apple Watches support
Watches
Android Watches or Apple Watches support
Web
https://organicmaps.app/
Web
https://organicmaps.app/
Wikipedia
Issues related to Wiki articles embedded in OM data files.
Wikipedia
Issues related to Wiki articles embedded in OM data files.
Windows
Windows
Windows
Windows
Won't fix
Unfeasible or impossible to resolve
Won't fix
Unfeasible or impossible to resolve
World Map
Issues about improving the base map of the whole world that is bundled with the app
World Map
Issues about improving the base map of the whole world that is bundled with the app
No labels
Accessibility
Accessibility
Address
Address
Android
Android
Android Auto
Android Auto
Android Automotive (AAOS)
Android Automotive (AAOS)
API
API
AppGallery
AppGallery
AppStore
AppStore
Battery and Performance
Battery and Performance
Blocker
Blocker
Bookmarks and Tracks
Bookmarks and Tracks
Borders
Borders
Bug
Bug
Build
Build
CarPlay
CarPlay
Classificator
Classificator
Community
Community
Core
Core
CrashReports
CrashReports
Cycling
Cycling
Desktop
Desktop
DevEx
DevEx
DevOps
DevOps
dev_sandbox
dev_sandbox
Directions
Directions
Documentation
Documentation
Downloader
Downloader
Drape
Drape
Driving
Driving
Duplicate
Duplicate
Editor
Editor
Elevation
Elevation
Enhancement
Enhancement
Epic
Epic
External Map Datasets
External Map Datasets
F-Droid
F-Droid
Fonts
Fonts
Frequently User Reported
Frequently User Reported
Fund
Fund
Generator
Generator
Good first issue
Good first issue
Google Play
Google Play
GPS
GPS
GSoC
GSoC
iCloud
iCloud
Icons
Icons
iOS
iOS
Legal
Legal
Linux Desktop
Linux Desktop
Linux packaging
Linux packaging
Linux Phone
Linux Phone
Mac OS
Mac OS
Map Data
Map Data
Metro
Metro
Navigation
Navigation
Need Feedback
Need Feedback
Night Mode
Night Mode
NLnet 2024-06-281
NLnet 2024-06-281
No Feature Parity
No Feature Parity
Opening Hours
Opening Hours
Outdoors
Outdoors
POI Info
POI Info
Privacy
Privacy
Public Transport
Public Transport
Raw Idea
Raw Idea
Refactoring
Refactoring
Regional
Regional
Regression
Regression
Releases
Releases
RoboTest
RoboTest
Route Planning
Route Planning
Routing
Routing
Ruler
Ruler
Search
Search
Security
Security
Styles
Styles
Tests
Tests
Track Recording
Track Recording
Translations
Translations
TTS
TTS
UI
UI
UX
UX
Walk Navigation
Walk Navigation
Watches
Watches
Web
Web
Wikipedia
Wikipedia
Windows
Windows
Won't fix
Won't fix
World Map
World Map
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
No assignees
2 participants
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".
No due date set.
Dependencies
No dependencies set.
Reference: organicmaps/organicmaps-tmp#2863
Reference in a new issue
No description provided.
Delete branch "support-system-pugixml"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Linux distributions don't like vendoring of libraries by applications and prefer to ship their own version.
This makes the build look for a system-provided pugixml first and if not found, fallback to the vendored one like before.
Can you please clarify that "don't like" statement? We manually update all our dependencies, usually to the latest versions. There is a high risk that it won't compile on some non-recent Linux distro.
pugixml consists of 3 source files, what is the strong reason to make the code more complex to rewrite it and create this PR?
Distributions want full control of the software in their repositories. They fix things locally where needed and might have custom settings and options enabled that upstream (read: you) doesn't account of. They might also ship an older version of a dependency (you use an old expat version actually) than upstream does but with various bugfixes made to it.
Now being compatible with older and custom versions of library is not something you should as an upstream developer care much about, let the distribution developer handle that since they are the one doing custom things. Being able to build at all with system-provided versions however is something you should allows/support.
It doesn't really matter how many source files a dependency has, I would make such a PR even if the source only had a single file. My distribution (Alpine Linux) is quite tolerant when it comes to this stuff but e.g. a Debian would never allow packages vendoring their deps and they put a lot of effort in to make sure everything works even if they ship some older dependency.
I'm planning on making equivalent PR's for other dependencies like expat. I hope I explained the need well enough?
I still don't get your point. "Because distros do like that" is not an argument for OM.
We build and link libraries statically for several reasons. One of them is to avoid any issues when OS has a different version. Another reason is that we sometimes use custom defines/flags, and even patches or use non-released branches of dependencies. One more reason is that it saves us a lot of time for maintenance, and eases the way for contributors to start working on the project. One more reason is that we don't want to spend a lot of time debugging an issue caused by some outdated/not compatible/wrongly configured system dependency.
Our approach is to update the outdated library and fix the code if necessary, instead of linking something dynamically from the system and hoping that it will build and work well.
What are the PROS of following your path, compared to the arguments mentioned above? Being able to add OM into Debian?
The reasons you list for doing it like you do are things the distribution maintainers should take care off. If somebody has a problem with say the Debian package because they ship some patched or older version of a dependency, that's not for you to solve but for Debian (Debian is just an example here, it could be any distribution). You don't have to spent time debugging that issue, that maintainer will. They might ask for help but you can just answer "that's not a use-case we support, either ship <version you want> or fix it yourself" if you don't feel like helping out.
When applications manage and ship their own versions of libraries, as a user and distribution you have to trust the developer to do the right thing. You have to trust they update to a newer version in time, you have to trust they actively follow and fix any security issues that might pop up, you have to trust they don't do weird things that might screw up your system in some way. I rather not trust all individual application developers to do this, they just focus on their application and not on all the individual dependencies they might use. When using a system-provided version and some new security issue comes up, just that one library has to be fixed by the distribution and all packages using it will automatically be secure. You don't have to wait and check if all applications using that one library are updated to pull in a newer version.
And yes, I would consider being able to add OM to Debian a pro. It's a big distribution with quite a lot of users and thus a lot of potential OM users. Also Mobian is based on it and probably wants a nice mapping/navigation application for their users. If applications like OM don't support dynamically linking to system-provided libraries then either the application won't be shipped on that distribution, or they will forever carry a downstream patch to make it possible.
I still don't understand your points. We do not ship any dependencies with our statically built binary. Statically build OM uses only a small subset from any static lib, removing everything that is not used on a linking stage.
And we never planned/wanted to add some work for maintainers. We are responsible for our binary, and it consists of our code + all 3party deps we're using, so it's our responsibility to make it work and to support it. And there are many benefits from this approach that I listed above.
There is no security risk to the system in this approach because OM does not expose the interfaces of libraries it uses. See it from that point: we ship a single binary, and we are responsible for its functionality.
I'm not sure I'll be able to convince you. You do not ship the libraries as separate files no, but the parts you link to still "suffer" from the things I mentioned. Also there is the portability argument: if a bug gets found in a library when porting to a new platform, not every application linking to/using that library has to be fixed.
Yes there is a security risk, as your application might be using some vulnerable part of the library. Like I said, as an end-user I do not want to have to trust every developer of every application I use to do it right. OM is just one of the applications in use, now consider e.g. protobuf getting a CVE in the parts OM uses and possibly 30 other applications I might have installed. I now have to verify for each of those applications if they started shipping an updated version of protobuf yet (and if they even use the functionality in question) rather than just making sure once I have the newest and fixed version of protobuf.
That's just not workable and distributions have solved this problem for years and years already.
I'm hoping that even if you do not really want to support the use-cases I'm talking about you would accept the PR on a basis of "fine but we don't support this so make sure you fix problems that come from this yourself and don't come to us".
Anyway if you don't want to accept this then that's fine, you of course have the right too, it just means I'll have to ship this patch downstream forever and deal with the maintenance burden that comes from it (rebasing mainly) or not ship OM at all. Alpine Linux and postmarketOS (for which I'm packaging this) are small and you probably won't miss it's users, but it'd be a shame to miss out on any potential users from Debian, Fedora, openSUSE, <insert other distribution here>.
It's really a question of ownership and where responsibilities belong.
Developers like to have ownership of their code. And for small, statically linked projects, that makes sense, even if they have to embed a copy of some project - as long as they can maintain it, it's fine. No dilution of responsibility; authors know exactly what's happening with their code, and if a problem is reported they can fix it without having to test N+1 configurations. As a dev, I absolutely understand this, and I've had several prickly exchanges with distributions that were packaging my software all wrong - I hate that.
Distributors, however, are used to packaging bigger projects with more complex dependencies, and what they hate is when authors vendor these complex dependencies - because it's a lot of code duplication, build burden, and maintenance burden. Vendored code is usually pretty poorly maintained by developers who ship it, and from the distributor's side, using vendored libraries instead of maintained system-provided libraries is a waste of machine and support resources, a security risk, etc.
No one's wrong in this, it's just a question of balance and choices. How big is pugixml? Can the organicmaps team fully support a vendored version without burdening distribution maintainers with bug-reports they cannot fix? Would it be a better factorization of resources to delegate pugixml maintainership to distributions? There is no inherently correct answer, and you'll have to agree on where the line should be drawn.
This problem is trivially solved. You can have the build system check for a minimum version of the dependency, and refuse to support anything older.
It is not your problem if Debian oldstale doesn't have a good enough version. They can conform to their mandatory policies w.r.t. building software against system dependencies, by upgrading the dependency. Or only package the software in debian testing which has the new version of the dependency.
In general, it's not a good idea to fork and maintain a diverging version of your dependencies. So the answer is probably "don't do that". Is there some kind of compelling reason you need to do this, or is it the sunk cost fallacy -- you've already soft-forked it for the sake of vendoring, and while you're there you might as well patch it arbitrarily? Because this is still going to make merging updates from upstream harder.
There is zero (0%) debugging involved in responding to user support tickets in which the user says "help, I tried to tell the software to build using the system $dependency, but it told me that my version wasn't new enough".
The fact that you statically link the dependencies you ship doesn't mean you aren't shipping it. :)
This is guaranteed provably wrong in the generic sense, but depending on the software and on the dependency, it may be right in specific circumstances, you'd probably want a security expert to vet it for that.
Security vulnerabilities aren't made manifest by the fact that there's a shared library with that vulnerability in a function exposed by its symbol table. Security vulnerabilities are made manifest by the fact that some application does something wrong or dangerous when given certain input (files, command line arguments, network requests...).
Obviously, the application uses the dependency internally in some manner or it wouldn't depend on it. If the dependency has a vulnerability, that vulnerability may be in a function that the application uses, or it may not be. If it is, then the application can be assumed by default to be vulnerable, unless you can guarantee that the application's input as given to that function is always sourced from a trusted location.
If the application is vulnerable, it does not matter that only the application invulnerable! The application is part of the system, so by extension the system is vulnerable.
...
The easiest way to solve all these issues is to allow ISVs the chance to, if they so wish, use shared linkage to the dependency (bounded by the minimum version pins in the build system). This gives them the opportunity to update the dependency with new security releases, so that regardless of whether the application used to be vulnerable, it isn't any more.
They don't usually like to make exceptions, because everyone thinks they should be the exception and usually turn out not to be, and having this discussion 15k times isn't a great use of time. Also their policies may not actually permit making exceptions. The distros most likely to make a fuss about it are also the ones most likely to not do exceptions.
Again, if you're going to use released versions of your dependencies (you should!) there's no real downside to permitting those exact versions, at least (but ideally that version and any newer version) from being found as a system dependency.
You can even default to using the vendored copy. :)
This can be done in more "natural" way:
Add to 3party/pugixml/CMakeList.txt
Then each dependent library can declare in CMakeList.txt just:
and in source files:
Did you check that it actually works with system pugi? Because I have added this function into pugi
to use in our code a few months ago.
My system pugixml for now has the patch that adds that so yes, it works. 😉 Till that's merged upstream however it won't work out of the box
For now, I see a more religious-like approach "let's remove all statically linked libs, and make them dynamically linked ones, ignoring any reasons behind it because Linux distro maintainers are doing like that".
Can you please make a full and honest list of PROS and CONS for us and our users in the short and long term, with your proposed approach? So we can confirm that 1) you fully understand the concerns I mentioned above and 2) everyone will see what we get and what we lose?
There is no such file in the current directory, it leads to unnecessary
stat
calls by the compiler.<>
should be used instead.I uh, am not sure what to respond. I gave a honest list of PROS, and you gave a honest list of CONS. I'm not sure why you think it's a religious-like approach when all I try to do is explain my reasoning.
I do understand your concerns and I tried to address them but it seems you don't agree with them. That's fine but please don't try to make it appear like I (or others) didn't try to give any reasoning for doing this. Let's try it again I suppose... I'll try to counter the cons you mentioned in-line.
PROS mentioned so far:
CONS mentioned so far:
CMakeLists.txt
). You can just increase this version every time you update the vendored version and force distributions to use a minimum of that versionIf you want I can put use of system dependencies behind a CMake flag (something like
-DUSE_SYSTEM_PUGIXML=True
or-DUSE_SYSTEM_PUGIXML_YES_I_KNOW_THIS_CAN_BREAK_THINGS_AND_IM_RESPONSIBLE_FOR_IT_MYSELF=True
) so unless users explicitly set this it'll use the vendored deps.Ok, but now latest pugixml 1.12 doesn't have needed function set_value.
If we merged this PR now as is, we will break compilation for devs, who have system pugixml 1.12, no?
Yeah I would recommend waiting with merging till either a new release of pugixml, or I can set this to 1.13 so it'll fail automatically till pugixml 1.13 is available.
Maybe let me give a few examples regarding advantages for security:
2014, the Heardbleed security issue in OpenSSL was revealed. Since OpenSSL was provided by the distribution directly, it was enough for them to update this one package (since OpenSSL usually is also dynamically linked they don't even needed to (re)compile any other package that depended on OpenSSL).
My system currently contains 102 packages that depend on OpenSSL. All of these were secured at once back in that time.
Rust applications (only as an example) do not support shared linking and also don't support precompiled static libraries, so essentially everything is "bundled" within a rust distribution package. Given that, Gentoo for example has 51 rust ebuilds (programs) that depend on the "regex" crate (their form of libraries). If there is a bug in "regex", it is not enough for Gentoo to just update the "regex"-ebuild (actually, no such ebuild exists). They need to update every "regex" dependency of the 51 packages or wait for every upstream to do that.
Other than that, there is a good summary of pros and cons in the Gentoo Wiki and in this blog post (of a very active Gentoo developer).
We do understand all implications for you as maintainers.
The problem is that you do not understand or ignore implications for us, developers.
We also know the attack surface better, and can estimate the security risks better. You just trying to blindly follow the pattern.
That is just not true though. I tried to counter your arguments several times, indicating I very much understand the implications for you as developers. It's fine to disagree with my arguments, but you seem to suggest I/we ignore your arguments while to me it feels the other way around. No we do not "blindly" follow a pattern, we have good reasons for doing so and I mentioned them several times. Yes I read and understood why you do not want to follow that "pattern", and I do not agree with it and tried to tell you why. But you just keep saying we are ignoring your arguments while we are not.
At this point please just close the PR if you are not going to change your mind, rather than continuing this back and forth discussion. Distributions will either just carry this PR downstream or not ship OM at all, and that'll be it.
You still do not hear what I'm trying to say. I'll try to repeat it again:
By following your approach, any contributor who wants to help us will hit a build error on his Linux system immediately after checking out the repo. And chances are high that this contributor won't continue. Because people expect that the build should just work, instead of googling and finding "your OS is too outdated, and you should do 1, 2, 3 to update or patch that pugixml dependency before you can compile it and contribute your fix which is completely not relevant to that pugixml build error".
See, that's just new information to me. I fail to see where you said that but let's just keep that at a miscommunication. I did suggest earlier I can change it so it'll favour the vendored dependencies, using something like a
-DSYSTEM_PUGIXML
switch. I have no problem making that change, will it do?I mentioned it in my first and second comments to this thread. Let's call it miscommunication.
I'm ok with some custom approach if it:
Ok done. It'll now always use the vendored pugixml unless
-DSYSTEM_PUGIXML=ON
is set. No code changes are necessary besides the ones I made in this PR.Now it uses the vendored pugixml unless the user explicitly adds
-DSYSTEM_PUGIXML=ON
to the cmake call, this is safe to merge. If you pass that argument you are presumed to know what you are doing and should realize any problems will come from that switch.@biodranik anything blocking this still? I have some more changes like this ready to go but I'd like this in first.
There are some issues with code changes (formatting, not all includes are properly replaced, hard-coded version, etc.).
But as our patch is still not merged into the upstream, I don't see any sense to merge it now.
It would be great if you can help with updating our 3party libs in the repo, or at least point to some most important updates that we should include.
Sorry, hardcoded version? Do you mean
find_package(pugixml 1.12)
or something else? It's a specific version on purpose, as one of your earlier arguments was that you can not guarantee the application working with for example a way older dependency than you use yourself. The 1.12 call here makes sure it searches for at least (so this and anything higher) 1.12. Only if I addEXACT
it will look for the specific version.I think I caught all includes though, could you point to the specific ones I missed? And same for formatting.
Version 1.12 does not contain the required changes.
Also, another option could be to try using the specific min system version (when our changes are merged), and fall back to the repo's one.
But again, that could be important only for production releases, not for app development. We don't distribute/support the Linux app officially (it is a dev version!), it's based solely on someone else's enthusiasm.
I have sent an extra commit upstream to pugixml hoping to help the upstreaming effort.
Does it make sense in the meantime to create further organicmaps PRs, for enabling other system-provided dependencies?
Strictly behind a
-DSYSTEM_....
option?I have a better idea. It should be possible to specify a min required version for 3party lib in CMake and make a macro/function that checks if there is at least this version is available, then it should be used from the system. But if not, then use the embedded 3p version. In this way, maintainers will be happy, and contributors won't get any compilation errors/won't waste their time on the system setup.
Maybe something like this works:
Interestingly, Meson has exactly that built-in.
Meson guys are smart ;-)
So the patches have been upstreamed, and organicmaps builds with upstream pugixml now.
@PureTryOut would this PR branch benefit from a rebase?
Done. Do note that pugixml hasn't had a release yet and according to the author won't any time soon either. "Some time later this year". Annoyingly vague but we'll have to deal with it.
@biodranik What could one do to move this PR forward?
As we discussed before, there are several pre-requisites:
lessgreater or equal to the embedded version.Note that the one patch OrganicMaps dependent on that wasn't in upstream pugixml has now been merged, and because of that I made it depend on a minimum of 1.13. I don't think anything is holding this back anymore.
I think the idea here was to make use of the
find_package_or_fallback_to_3party
macro.As #3811 has been merged, please, rebase, and make sure that your code works in all cases: no pugi in the system (our 3party is used), old pugi in the system (our 3party is used), new pugi in the system.
Rebased and done. I've tested all the scenarios you mentioned when I made this PR (of course) and have multiple times since, but also did just now to be sure. 🤷
@PureTryOut have you found a fault in the macro, or is it not possible to use it?
As mentioned, please use the already implemented universal macro. And clean up unnecessary CMakeLists.txt changes.
I did not realize a macro existed for that nowadays. I thought @Ferenc- said I should make one. I'll change the PR to use it.
Done, works as expected.
Is this alias really necessary now?
@ -314,6 +314,9 @@ if (NOT WITH_SYSTEM_PROVIDED_3PARTY)
set(JANSSON_WITHOUT_TESTS ON)
Just make it a one-liner, the indentation looks strange and inconsistent.
Yes it is. The target is different when used from 3party vs the system dep so this is to prevent conditional statements everywhere we link against it.
I meant that you didn't remove pugixml::pugixml in other CMakeLists.txt files.
I'm not sure I understand. The system library provides
pugixml::pugixml
, the 3party version providespugixml
instead. To make it work everywhere with both system and 3party version this alias is used.I highlighted the required changes.
Please remove this change, it is unnecessary.
Please remove this change, it is unnecessary.
Please remove this change, it is unnecessary.
Please remove this change, it is unnecessary.
Please remove this change, it is unnecessary.
Please remove this change, it is unnecessary.
Either you or I am misunderstanding something. I can't remove those changes as that won't work with the system-provided pugixml. The system version doesn't provide
pugixml
as a target, it providespugixml::pugixml
.I removed this line. Also, I removed other mentioned lines in CMakeLists.txt files. And it works on Mac with and without system pugixml installed.
Doesn't it work for you? What kind of error do you get?
Honestly, I believe you. 🤷 It didn't work for me at the time but this PR is so long open now that I don't really remember the details. I removed the alias, should be fine now.
Let me know if you need help with fixing the iOS build.
@ -2,3 +2,3 @@
#include "pugixml/src/pugixml.hpp"
#include <pugixml.hpp>
This change currently breaks iOS build, as the iOS build doesn't use CMake, and does not have the
pugixml/src/
among the include paths.That should be fixed. If you need help with that then let me know.
@ -2,3 +2,3 @@
#include "pugixml/src/pugixml.hpp"
#include <pugixml.hpp>
I have no clue about iOS (and don't really care personally) so yes I'd like some help there 🤔
@ -2,3 +2,3 @@
#include "pugixml/src/pugixml.hpp"
#include <pugixml.hpp>
OK, I have added changes to get the iOS build compile,
in this commit based on your current PR branch.
You can
cherry-pick
that hash orrebase
onto my support-system-pugixml branch.@PureTryOut your changes in this PR have been merged to
master
with organicmaps/organicmaps#4268. So I would close this now.Interesting. Thanks!