<?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Meson on Thibault Saunier</title><link>https://blog.thibaultsaunier.com/</link><description>Thibault Saunier's blog: GStreamer, multimedia, open source.</description><language>en</language><lastBuildDate>Mon, 02 Nov 2026 17:51:09 +0000</lastBuildDate><atom:link href="https://blog.thibaultsaunier.com/tags/meson/" rel="self" type="application/rss+xml"/><item><title>GStreamer: one repository to rule them all</title><link>https://blog.thibaultsaunier.com/2021/09/gstreamer-one-repository-to-rule-them-all/</link><pubDate>Wed, 29 Sep 2021 00:00:00 +0000</pubDate><guid isPermaLink="false">https://blogs.gnome.org/tsaunier/2021/09/29/gstreamer-one-repository-to-rule-them-all/</guid><description>&lt;p&gt;For the last years, the &lt;a href="https://gstreamer.freedesktop.org/" class="external" target="_blank" rel="noopener"&gt;GStreamer&lt;/a&gt; community has been &lt;a href="https://gitlab.freedesktop.org/gstreamer/gstreamer/-/issues/474" class="external"&gt;analysing and discussing&lt;/a&gt; the idea of merging all &lt;a href="https://gstreamer.freedesktop.org/documentation/additional/splitup.html" class="external" target="_blank" rel="noopener"&gt;the modules&lt;/a&gt; into one single repository. Since all the official modules are released in sync and the code evolves simultaneously between those repositories, having the code split was a burden and several core GStreamer developers believed that it was worth making the effort to consolidate them into a single repository. As &lt;a href="https://lists.freedesktop.org/archives/gstreamer-devel/2020-November/076754.html" class="external" target="_blank" rel="noopener"&gt;announced&lt;/a&gt; a while back this is now effective and this post is about explaining the technical choices and implications of that change.&lt;/p&gt;&#10;&lt;p&gt;You can also check out our &lt;a href="https://gstreamer.freedesktop.org/documentation/frequently-asked-questions/mono-repository.html" class="external" target="_blank" rel="noopener"&gt;Monorepo FAQ&lt;/a&gt; for a list of questions and answers.&lt;/p&gt;&#10;&lt;h2 id="technicall-details-of-the-unification"&gt;Technicall details of the unification&lt;/h2&gt;&#10;&lt;p&gt;Since we moved to &lt;a href="https://mesonbuild.com/" class="external" target="_blank" rel="noopener"&gt;meson&lt;/a&gt; as a build system a few years ago we implemented &lt;a href="https://gitlab.freedesktop.org/gstreamer/gst-build/-/tree/29352ad0f82c38649424801c97473e33d75caf41" class="external" target="_blank" rel="noopener"&gt;gst-build&lt;/a&gt; which leverages the &lt;a href="https://mesonbuild.com/Subprojects.html" class="external"&gt;meson subproject&lt;/a&gt; feature to build all GStreamer modules as one single project. This greatly enhanced the development experience of the GStreamer framework but we considered that we could improve it even more by having all GStreamer code in a single repository that looks the same as &lt;code&gt;gst-build&lt;/code&gt;.&lt;/p&gt;&#10;&lt;p&gt;This is what the new unified git repository looks like, &lt;code&gt;gst-build&lt;/code&gt; in the main &lt;code&gt;gstreamer&lt;/code&gt; repository, except that all the code from the GStreamer modules located in the &lt;code&gt;subprojects/&lt;/code&gt; directory are checked in.&lt;/p&gt;&#10;&lt;p&gt;This new setup now lives in the &lt;code&gt;main&lt;/code&gt; default branch of &lt;a href="https://gitlab.freedesktop.org/gstreamer/gstreamer/-/tree/main" class="external" target="_blank" rel="noopener"&gt;the gstreamer repository&lt;/a&gt;, the &lt;code&gt;master&lt;/code&gt; branches for all the other modules repositories are now retired and frozen, no new merge request or code change will be accepted there.&lt;/p&gt;&#10;&lt;p&gt;This is only the first step and we will consider reorganizing the repository in the future, but the goal is to minimize disruptions.&lt;/p&gt;&#10;&lt;p&gt;The technical process for merging the repositories looks like:&lt;/p&gt;&#10;&lt;pre&gt;&lt;code&gt;foreach GSTREAMER_MODULE&#10; git remote add GSTREAMER_MODULE.name GSTREAMER_MODULE.url&#10; git fetch GSTREAMER_MODULE.name&#10; git merge GSTREAMER_MODULE.name/master&#10; git mv list_all_files_from_merged_gstreamer_module() GSTREAMER_MODULE.shortname&#10; git commit -m &amp;quot;Moved all files from &amp;quot; + GSTREAMER_MODULE.name&#10;endforeach&#10;&lt;/code&gt;&lt;/pre&gt;&#10;&lt;p&gt;This allows us to keep the exact same history (and checksum of each commit) for all the old gstreamer modules in the new repository which guarantees that the code is still exactly the same as before.&lt;/p&gt;&#10;&lt;h2 id="releases-with-the-new-setup"&gt;Releases with the new setup&lt;/h2&gt;&#10;&lt;p&gt;In the same spirit of avoiding disruption, releases will look &lt;strong&gt;exactly the same&lt;/strong&gt; as before. In the new unique &lt;code&gt;gstreamer&lt;/code&gt; repository we still have meson subprojects for each GStreamer modules and they will have their own release tarballs. In practice, this means that not much (nothing?) should change for distribution packagers and consumers of GStreamer tarballs.&lt;/p&gt;&#10;&lt;h2 id="what-should-i-do-with-my-pending-mrs-in-old-modules-repositories"&gt;What should I do with my pending MRs in old modules repositories?&lt;/h2&gt;&#10;&lt;p&gt;Since we can not create new merge requests in your name on gitlab, we wrote a &lt;a href="https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/scripts/move_mrs_to_monorepo.py" class="external" target="_blank" rel="noopener"&gt;move_mrs_to_monorepo&lt;/a&gt; script that you can run yourself. The script is located in &lt;a href="https://gitlab.freedesktop.org/gstreamer/gstreamer/-/tree/main" class="external" target="_blank" rel="noopener"&gt;the gstreamer repository&lt;/a&gt; and you can start moving all your pending MRs by simply calling it (&lt;code&gt;scripts/move_mrs_to_monorepo.py&lt;/code&gt; and follow the instructions).&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;p&gt;You can also check out our &lt;a href="https://gstreamer.freedesktop.org/documentation/frequently-asked-questions/mono-repository.html" class="external" target="_blank" rel="noopener"&gt;Monorepo FAQ&lt;/a&gt; for a list of questions and answers.&lt;/p&gt;&#10;&lt;p&gt;Thanks to everyone in the community for providing us with all the feedback and thanks to &lt;a href="https://blogs.gnome.org/xclaesse/" target="_blank" rel="noopener"&gt;Xavier Claessens&lt;/a&gt; for co-leading the effort.&lt;/p&gt;&#10;&lt;p&gt;We are still working on ensuring the transition as smoothly as possible and if you have any question don’t hesitate to come talk to us in #gstreamer on the oftc IRC network.&lt;/p&gt;&#10;&lt;p&gt;Happy GStreamer hacking!&lt;/p&gt;&#10;</description></item></channel></rss>