valac output is nondeterministic
While working on reproducible builds for openSUSE, I found that when building the shotwell package, there were sometimes slight differences between builds, likely related to this source diff:
+++ /home/abuild/rpmbuild/BUILD.unsorted/shotwell-0.30.9/build/src/25a6634@@shotwell@exe/Photo.c 2020-05-06 09:11:37.273426847 +0000
@@ -26131,8 +26131,8 @@
iface->is_offline = (gboolean (*) (Monitorable*)) library_photo_real_is_offline;
iface->mark_offline = (void (*) (Monitorable*)) library_photo_real_mark_offline;
iface->mark_online = (void (*) (Monitorable*)) library_photo_real_mark_online;
- iface->set_master_timestamp = (void (*) (Monitorable*, GFileInfo*)) photo_set_master_timestamp;
iface->set_master_file = (void (*) (Monitorable*, GFile*)) photo_set_master_file;
+ iface->set_master_timestamp = (void (*) (Monitorable*, GFileInfo*)) photo_set_master_timestamp;
}
See https://reproducible-builds.org/ for why this matters.
Tests show that the nondeterminism might go away when disabling ASLR with setarch -R
Also, some of the time, 2 identical results were produced, so there might only be 1 bit of entropy introduced.
The Photo.c is generated by ["valac", "-C", "--target-glib=2.40", "--vapidir=/home/abuild/rpmbuild/BUILD/shotwell-0.30.9/vapi", "--enable-checking", "--enable-experimental", "--enable-deprecated", "--define=NEW_GEXIV2_API", "--define=HAVE_FLICKR", "--define=HAVE_GOOGLEPHOTOS", "--define=HAVE_PIWIGO", "--define=HAVE_YOUTUBE", "--define=HAVE_GALLERY3", "--define=HAVE_TUMBLR", "--define=TRACE_", "--define=MEASURE_", "--define=NO_DUPE_DETECTION", "--define=HAVE_UDEV", "--pkg", "posix", "--pkg", "libexif", "--pkg", "libraw", "--pkg", "gmodule-2.0", "--pkg", "gexiv2", "--pkg", "gudev-1.0", "--pkg", "gio-unix-2.0", "--pkg", "gstreamer-pbutils-1.0", "--pkg", "libgphoto2", "--pkg", "posix", "--pkg", "gtk+-3.0", "--pkg", "sqlite3", "--pkg", "gee-0.8", "--pkg", "gio-2.0", "--color=always", "--directory", "src/25a6634@@shotwell@exe", "--basedir", "../src", "--gresources=../org.gnome.Shotwell.gresource.xml", "--pkg", "libgphoto2", "--pkg", "libraw", "--pkg", "libexif", "--gresources", "/home/abuild/rpmbuild/BUILD/shotwell-0.30.9/org.gnome.Shotwell.gresource.xml", "../src/unit/Unit.vala", "../src/util/Util.vala", "../src/util/file.vala", "../src/util/image.vala", "../src/util/misc.vala", "../src/util/string.vala", "../src/util/system.vala", "../src/util/ui.vala", "../src/threads/Threads.vala", "../src/threads/Workers.vala", "../src/threads/BackgroundJob.vala", "../src/threads/Semaphore.vala", "../src/db/Db.vala", "../src/db/DatabaseTable.vala", "../src/db/PhotoTable.vala", "../src/db/EventTable.vala", "../src/db/TagTable.vala", "../src/db/TombstoneTable.vala", "../src/db/VideoTable.vala", "../src/db/VersionTable.vala", "../src/db/SavedSearchDBTable.vala", "../src/editing_tools/EditingTools.vala", "../src/editing_tools/RGBHistogramManipulator.vala", "../src/editing_tools/StraightenTool.vala", "../src/slideshow/Slideshow.vala", "../src/slideshow/TransitionEffects.vala", "../src/photos/Photos.vala", "../src/photos/PhotoFileAdapter.vala", "../src/photos/PhotoFileFormat.vala", "../src/photos/PhotoFileSniffer.vala", "../src/photos/PhotoMetadata.vala", "../src/photos/GRaw.vala", "../src/photos/GdkSupport.vala", "../src/photos/GifSupport.vala", "../src/photos/JfifSupport.vala", "../src/photos/BmpSupport.vala", "../src/photos/RawSupport.vala", "../src/photos/PngSupport.vala", "../src/photos/TiffSupport.vala", "../src/plugins/Plugins.vala", "../src/plugins/StandardHostInterface.vala", "../src/plugins/ManifestWidget.vala", "../src/publishing/Publishing.vala", "../src/publishing/PublishingUI.vala", "../src/publishing/PublishingPluginHost.vala", "../src/publishing/APIGlue.vala", "../src/library/Library.vala", "../src/library/LibraryWindow.vala", "../src/library/LibraryBranch.vala", "../src/library/TrashSidebarEntry.vala", "../src/library/OfflineSidebarEntry.vala", "../src/library/FlaggedSidebarEntry.vala", "../src/library/LastImportSidebarEntry.vala", "../src/library/ImportQueueSidebarEntry.vala", "../src/library/FlaggedPage.vala", "../src/library/ImportQueuePage.vala", "../src/library/LastImportPage.vala", "../src/library/OfflinePage.vala", "../src/library/TrashPage.vala", "../src/direct/Direct.vala", "../src/direct/DirectWindow.vala", "../src/direct/DirectPhoto.vala", "../src/direct/DirectPhotoPage.vala", "../src/direct/DirectView.vala", "../src/core/Core.vala", "../src/core/DataCollection.vala", "../src/core/DataSet.vala", "../src/core/util.vala", "../src/core/SourceCollection.vala", "../src/core/SourceHoldingTank.vala", "../src/core/DatabaseSourceCollection.vala", "../src/core/ContainerSourceCollection.vala", "../src/core/ViewCollection.vala", "../src/core/DataObject.vala", "../src/core/Alteration.vala", "../src/core/DataSource.vala", "../src/core/DataSourceTypes.vala", "../src/core/DataView.vala", "../src/core/DataViewTypes.vala", "../src/core/Tracker.vala", "../src/core/SourceInterfaces.vala", "../src/sidebar/Sidebar.vala", "../src/sidebar/Branch.vala", "../src/sidebar/Entry.vala", "../src/sidebar/Tree.vala", "../src/sidebar/common.vala", "../src/events/Events.vala", "../src/events/EventsBranch.vala", "../src/events/EventsDirectoryPage.vala", "../src/events/EventPage.vala", "../src/events/EventDirectoryItem.vala", "../src/tags/Tags.vala", "../src/tags/TagsBranch.vala", "../src/tags/TagPage.vala", "../src/tags/HierarchicalTagIndex.vala", "../src/tags/HierarchicalTagUtilities.vala", "../src/camera/Camera.vala", "../src/camera/CameraBranch.vala", "../src/camera/CameraTable.vala", "../src/camera/GPhoto.vala", "../src/camera/ImportPage.vala", "../src/searches/Searches.vala", "../src/searches/SearchesBranch.vala", "../src/searches/SearchBoolean.vala", "../src/searches/SavedSearchPage.vala", "../src/searches/SavedSearchDialog.vala", "../src/config/Config.vala", "../src/config/ConfigurationInterfaces.vala", "../src/config/GSettingsEngine.vala", "../src/data_imports/DataImports.vala", "../src/data_imports/DataImportsPluginHost.vala", "../src/data_imports/DataImportsUI.vala", "../src/data_imports/DataImportJob.vala", "../src/data_imports/DataImportSource.vala", "../src/folders/Folders.vala", "../src/folders/FoldersBranch.vala", "../src/folders/FoldersPage.vala", "../src/import-roll/ImportRollBranch.vala", "../src/import-roll/ImportRollEntry.vala", "../src/main.vala", "../src/AppWindow.vala", "../src/CollectionPage.vala", "../src/NaturalCollate.vala", "../src/Thumbnail.vala", "../src/ThumbnailCache.vala", "../src/CheckerboardLayout.vala", "../src/PhotoPage.vala", "../src/Page.vala", "../src/SortedList.vala", "../src/Dimensions.vala", "../src/Box.vala", "../src/Photo.vala", "../src/Orientation.vala", "../src/BatchImport.vala", "../src/Dialogs.vala", "../src/Resources.vala", "../src/Debug.vala", "../src/Properties.vala", "../src/Event.vala", "../src/International.vala", "../src/AppDirs.vala", "../src/PixbufCache.vala", "../src/CommandManager.vala", "../src/Commands.vala", "../src/SlideshowPage.vala", "../src/LibraryFiles.vala", "../src/Printing.vala", "../src/Tag.vala", "../src/Screensaver.vala", "../src/Exporter.vala", "../src/DirectoryMonitor.vala", "../src/LibraryMonitor.vala", "../src/VideoSupport.vala", "../src/Tombstone.vala", "../src/MetadataWriter.vala", "../src/Application.vala", "../src/TimedQueue.vala", "../src/MediaPage.vala", "../src/MediaDataRepresentation.vala", "../src/DesktopIntegration.vala", "../src/MediaInterfaces.vala", "../src/MediaMetadata.vala", "../src/VideoMetadata.vala", "../src/MediaMonitor.vala", "../src/PhotoMonitor.vala", "../src/VideoMonitor.vala", "../src/SearchFilter.vala", "../src/MediaViewTracker.vala", "../src/UnityProgressBar.vala", "../src/Upgrades.vala", "../src/dialogs/AdjustDateTimeDialog.vala", "../src/dialogs/EntryMultiCompletion.vala", "../src/dialogs/ExportDialog.vala", "../src/dialogs/MultiTextEntryDialog.vala", "../src/dialogs/Preferences.vala", "../src/dialogs/ProgressDialog.vala", "../src/dialogs/SetBackgroundSlideshow.vala", "../src/dialogs/SetBackground.vala", "../src/dialogs/TextEntry.vala", "../src/dialogs/WelcomeDialog.vala", "../src/.unitize/_UnitInternals.vala", "../src/.unitize/_UtilInternals.vala", "../src/.unitize/_ThreadsInternals.vala", "../src/.unitize/_DbInternals.vala", "../src/.unitize/_EditingToolsInternals.vala", "../src/.unitize/_PluginsInternals.vala", "../src/.unitize/_SlideshowInternals.vala", "../src/.unitize/_PhotosInternals.vala", "../src/.unitize/_PublishingInternals.vala", "../src/.unitize/_LibraryInternals.vala", "../src/.unitize/_DirectInternals.vala", "../src/.unitize/_CoreInternals.vala", "../src/.unitize/_SidebarInternals.vala", "../src/.unitize/_EventsInternals.vala", "../src/.unitize/_TagsInternals.vala", "../src/.unitize/_CameraInternals.vala", "../src/.unitize/_SearchesInternals.vala", "../src/.unitize/_ConfigInternals.vala", "../src/.unitize/_DataImportsInternals.vala", "../src/.unitize/_FoldersInternals.vala", "../src/.unitize/_Library_unitize_entry.vala", "../src/.unitize/_Direct_unitize_entry.vala", "src/shotwell-graphics-processor.vapi", "src/plugins/shotwell-plugin-dev-1.0.vapi"]
This is using vala-0_48 in openSUSE-Tumbleweed 20200504
Could it be because there are two .vala files defining a public set_master_timestamp function?