commit:     b5cf24fbb7854095f11b294e4999374fe2cdaadc
Author:     Petr Vaněk <arkamar <AT> atlas <DOT> cz>
AuthorDate: Mon Jul  5 09:17:05 2021 +0000
Commit:     Andreas K. Hüttel <dilfridge <AT> gentoo <DOT> org>
CommitDate: Sat Sep 25 15:58:54 2021 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=b5cf24fb

media-gfx/inkscape: add 1.1

- Add optional readline support
- gtkspell dependency was changed to gspell, aspell is not required
  anymore
- backported sentinel patch from upstream in order to support musl libc
- dropping ~hppa and ~ia64 keyword because they are missing in
  app-text/gspell dependency

Closes: https://bugs.gentoo.org/791925
Signed-off-by: Petr Vaněk <arkamar <AT> atlas.cz>
Closes: https://github.com/gentoo/gentoo/pull/22353
Signed-off-by: Andreas K. Hüttel <dilfridge <AT> gentoo.org>

 media-gfx/inkscape/Manifest                        |   1 +
 .../inkscape/files/inkscape-1.1-sentinels.patch    | 727 +++++++++++++++++++++
 media-gfx/inkscape/inkscape-1.1.ebuild             | 162 +++++
 3 files changed, 890 insertions(+)

diff --git a/media-gfx/inkscape/Manifest b/media-gfx/inkscape/Manifest
index 595bd98db34..1810db36929 100644
--- a/media-gfx/inkscape/Manifest
+++ b/media-gfx/inkscape/Manifest
@@ -1 +1,2 @@
 DIST inkscape-1.0.2.tar.xz 32421620 BLAKE2B 
c3f9c37b15343ba0955a6d06810aef5fb9e035a240f99579301b8cd93858a62b5ed1a3ff528a9642ec74b8900305495236cf7f4c672864369a4e33dca3b34bd4
 SHA512 
f4fbc627c0f07db11194715c505b771a60af29a9a7f8be0232e4f7eb6b1c5814c3f160c2003d64ec62aeb92ef44174320a47aa6b6abc7a67cc27c996cba9522d
+DIST inkscape-1.1.tar.xz 34203156 BLAKE2B 
38896509dcdcf1ef18523c790855035ef16dfae75e27c2d69f782270f52a579557edcb790bef30f3210b9f797a619369d7d16dd23f098debdd8e5b6abf9b30aa
 SHA512 
54b75f8794d748ef59d5b719ea04e3debadc1a5cf3f62f14254502567973bbd634850edd0a3bc082be878dacf041e9bd10982c4846bf154f89aa5319eda4ee80

diff --git a/media-gfx/inkscape/files/inkscape-1.1-sentinels.patch 
b/media-gfx/inkscape/files/inkscape-1.1-sentinels.patch
new file mode 100644
index 00000000000..b4768d44f27
--- /dev/null
+++ b/media-gfx/inkscape/files/inkscape-1.1-sentinels.patch
@@ -0,0 +1,727 @@
+From 3abc0aac5ffed8a130086e93b1fdba596f505a1c Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20Van=C4=9Bk?= <[email protected]>
+Date: Fri, 2 Jul 2021 12:10:48 +0200
+Subject: [PATCH] Fix sentinel errors for builds against musl libc
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+This change fixes failing builds on systems with musl libc, where one
+can experience lots of errors similar to following one:
+
+```
+FAILED: src/libnrtype/CMakeFiles/nrtype_LIB.dir/font-lister.cpp.o
+/usr/bin/c++ ... -c ../src/libnrtype/font-lister.cpp
+../src/libnrtype/font-lister.cpp: In function ‘void 
font_lister_cell_data_func2(GtkCellLayout*, GtkCellRenderer*, GtkTreeModel*, 
GtkTreeIter*, gpointer)’:
+../src/libnrtype/font-lister.cpp:1236:64: error: missing sentinel in function 
call [-Werror=format=]
+ 1236 |     g_object_set(G_OBJECT(cell), "markup", markup.c_str(), NULL);
+      |                                                                ^
+```
+
+Those errors are triggered by the compiler, because musl does not use
+GCC's or Clang's __null extension for NULL definition, because it seems
+non-conforming to the standard's requirements [1]. However, it is
+possible to trigger this error with -Wstrict-null-sentinel GCC flag on
+systems with glibc.
+
+[1]: 
https://git.musl-libc.org/cgit/musl/commit/?id=c8a9c22173f485c8c053709e1dfa0a617cb6be1a
+
+---
+
+The patch is taken from upstream 1.1.x branch.
+
+Upstream-issue: https://gitlab.com/inkscape/inkscape/-/issues/1880
+Upstream-MR: https://gitlab.com/inkscape/inkscape/-/merge_requests/3378
+Backported-from: 
https://gitlab.com/inkscape/inkscape/-/merge_requests/3378/diffs?commit_id=8d8d7adb07649fa64f9879b56187708ab7166149
+
+
+
+diff --git a/src/display/nr-filter-image.cpp b/src/display/nr-filter-image.cpp
+index bfc2b6bb1f..5311d8cbce 100644
+--- a/src/display/nr-filter-image.cpp
++++ b/src/display/nr-filter-image.cpp
+@@ -158,7 +158,7 @@ void FilterImage::render_cairo(FilterSlot &slot)
+         if ( !g_file_test( fullname, G_FILE_TEST_EXISTS ) ) {
+             // Try to load from relative position combined with document base
+             if( document ) {
+-                fullname = g_build_filename( document->getDocumentBase(), 
feImageHref, NULL );
++                fullname = g_build_filename( document->getDocumentBase(), 
feImageHref, nullptr );
+             }
+         }
+         if ( !g_file_test( fullname, G_FILE_TEST_EXISTS ) ) {
+diff --git a/src/extension/dbus/document-interface.cpp 
b/src/extension/dbus/document-interface.cpp
+index 5021734722..f490b5b6d5 100644
+--- a/src/extension/dbus/document-interface.cpp
++++ b/src/extension/dbus/document-interface.cpp
+@@ -474,7 +474,7 @@ document_interface_spiral (DocumentInterface 
*doc_interface, int cx, int cy,
+     sp_repr_set_int(newNode, "sodipodi:expansion", 1);
+     gchar * retval = finish_create_shape (doc_interface, error, newNode, 
(gchar *)"create spiral");
+     //Makes sure there is no fill for spirals by default.
+-    gchar* newString = g_strconcat(newNode->attribute("style"), ";fill:none", 
NULL);
++    gchar* newString = g_strconcat(newNode->attribute("style"), ";fill:none", 
nullptr);
+     newNode->setAttribute("style", newString);
+     g_free(newString);
+     return retval;
+diff --git a/src/extension/dependency.cpp b/src/extension/dependency.cpp
+index f94634bbc3..09928c64f7 100644
+--- a/src/extension/dependency.cpp
++++ b/src/extension/dependency.cpp
+@@ -186,7 +186,7 @@ bool Dependency::check ()
+                         break;
+                     }
+                     /* Look for deprecated locations next */
+-                    auto deprloc = g_build_filename("inkex", 
"deprecated-simple", location.c_str(), NULL);
++                    auto deprloc = g_build_filename("inkex", 
"deprecated-simple", location.c_str(), nullptr);
+                     std::string tempdepr =
+                         
Inkscape::IO::Resource::get_filename_string(Inkscape::IO::Resource::EXTENSIONS, 
deprloc, false, true);
+                     g_free(deprloc);
+diff --git a/src/inkscape.cpp b/src/inkscape.cpp
+index 29b7e08c25..07794fd8b9 100644
+--- a/src/inkscape.cpp
++++ b/src/inkscape.cpp
+@@ -434,15 +434,15 @@ void Application::add_gtk_css(bool only_providers)
+     gboolean gtkApplicationPreferDarkTheme;
+     GtkSettings *settings = gtk_settings_get_default();
+     if (settings && !only_providers) {
+-        g_object_get(settings, "gtk-icon-theme-name", &gtkIconThemeName, 
NULL);
+-        g_object_get(settings, "gtk-theme-name", &gtkThemeName, NULL);
+-        g_object_get(settings, "gtk-application-prefer-dark-theme", 
&gtkApplicationPreferDarkTheme, NULL);
++        g_object_get(settings, "gtk-icon-theme-name", &gtkIconThemeName, 
nullptr);
++        g_object_get(settings, "gtk-theme-name", &gtkThemeName, nullptr);
++        g_object_get(settings, "gtk-application-prefer-dark-theme", 
&gtkApplicationPreferDarkTheme, nullptr);
+         prefs->setBool("/theme/defaultPreferDarkTheme", 
gtkApplicationPreferDarkTheme);
+         prefs->setString("/theme/defaultGtkTheme", 
Glib::ustring(gtkThemeName));
+         prefs->setString("/theme/defaultIconTheme", 
Glib::ustring(gtkIconThemeName));
+         Glib::ustring gtkthemename = prefs->getString("/theme/gtkTheme");
+         if (gtkthemename != "") {
+-            g_object_set(settings, "gtk-theme-name", gtkthemename.c_str(), 
NULL);
++            g_object_set(settings, "gtk-theme-name", gtkthemename.c_str(), 
nullptr);
+         } else {
+             Glib::RefPtr<Gdk::Display> display = Gdk::Display::get_default();
+             Glib::RefPtr<Gdk::Screen>  screen = display->get_default_screen();
+@@ -451,13 +451,13 @@ void Application::add_gtk_css(bool only_providers)
+             prefs->setBool("/theme/symbolicIcons", iconinfo.is_symbolic());
+         }
+         bool preferdarktheme = prefs->getBool("/theme/preferDarkTheme", 
false);
+-        g_object_set(settings, "gtk-application-prefer-dark-theme", 
preferdarktheme, NULL);
++        g_object_set(settings, "gtk-application-prefer-dark-theme", 
preferdarktheme, nullptr);
+         themeiconname = prefs->getString("/theme/iconTheme");
+         // legacy cleanup
+         if (themeiconname == prefs->getString("/theme/defaultIconTheme")) {
+             prefs->setString("/theme/iconTheme", "");
+         } else if (themeiconname != "") {
+-            g_object_set(settings, "gtk-icon-theme-name", 
themeiconname.c_str(), NULL);
++            g_object_set(settings, "gtk-icon-theme-name", 
themeiconname.c_str(), nullptr);
+         }
+     }
+ 
+@@ -684,7 +684,7 @@ Application::crash_handler (int /*signum*/)
+             FILE *file = nullptr;
+             for(auto & location : locations) {
+                 if (!location) continue; // It seems to be okay, but just in 
case
+-                gchar * filename = g_build_filename(location, c, NULL);
++                gchar * filename = g_build_filename(location, c, nullptr);
+                 Inkscape::IO::dump_fopen_call(filename, "E");
+                 file = Inkscape::IO::fopen_utf8name(filename, "w");
+                 if (file) {
+diff --git a/src/io/resource.cpp b/src/io/resource.cpp
+index fec933f1a9..c75c4ed6cf 100644
+--- a/src/io/resource.cpp
++++ b/src/io/resource.cpp
+@@ -445,14 +445,14 @@ char const *profile_path()
+             }
+ 
+             if (prefdir) {
+-                const char *prefdir_profile = g_build_filename(prefdir, 
INKSCAPE_PROFILE_DIR, NULL);
++                const char *prefdir_profile = g_build_filename(prefdir, 
INKSCAPE_PROFILE_DIR, nullptr);
+                 g_free((void *)prefdir);
+                 prefdir = prefdir_profile;
+             }
+         }
+ #endif
+         if (!prefdir) {
+-            prefdir = g_build_filename(g_get_user_config_dir(), 
INKSCAPE_PROFILE_DIR, NULL);
++            prefdir = g_build_filename(g_get_user_config_dir(), 
INKSCAPE_PROFILE_DIR, nullptr);
+             // In case the XDG user config dir of the moment does not yet 
exist...
+             int mode = S_IRWXU;
+ #ifdef S_IRGRP
+@@ -471,7 +471,7 @@ char const *profile_path()
+                 gchar const *userDirs[] = { "keys", "templates", "icons", 
"extensions", "ui",
+                                             "symbols", "paint", "themes", 
"palettes", nullptr };
+                 for (gchar const** name = userDirs; *name; ++name) {
+-                    gchar *dir = g_build_filename(prefdir, *name, NULL);
++                    gchar *dir = g_build_filename(prefdir, *name, nullptr);
+                     g_mkdir_with_parents(dir, mode);
+                     g_free(dir);
+                 }
+@@ -495,7 +495,7 @@ char *homedir_path(const char *filename)
+     static const gchar *homedir = nullptr;
+     homedir = g_get_home_dir();
+ 
+-    return g_build_filename(homedir, filename, NULL);
++    return g_build_filename(homedir, filename, nullptr);
+ }
+ 
+ }
+diff --git a/src/libnrtype/font-lister.cpp b/src/libnrtype/font-lister.cpp
+index 6177e7479d..75ff172c05 100644
+--- a/src/libnrtype/font-lister.cpp
++++ b/src/libnrtype/font-lister.cpp
+@@ -1233,7 +1233,7 @@ void font_lister_cell_data_func2(GtkCellLayout * 
/*cell_layout*/,
+         g_free(sample_escaped);
+     }
+ 
+-    g_object_set(G_OBJECT(cell), "markup", markup.c_str(), NULL);
++    g_object_set(G_OBJECT(cell), "markup", markup.c_str(), nullptr);
+     g_free(family);
+     g_free(family_escaped);
+ }
+diff --git a/src/object/color-profile.cpp b/src/object/color-profile.cpp
+index da103e90d1..a2464194dc 100644
+--- a/src/object/color-profile.cpp
++++ b/src/object/color-profile.cpp
+@@ -700,7 +700,7 @@ std::set<ColorProfile::FilePlusHome> 
ColorProfile::getBaseProfileDirs() {
+     std::set<ColorProfile::FilePlusHome> sources;
+ 
+     // first try user's local dir
+-    gchar* path = g_build_filename(g_get_user_data_dir(), "color", "icc", 
NULL);
++    gchar* path = g_build_filename(g_get_user_data_dir(), "color", "icc", 
nullptr);
+     sources.insert(FilePlusHome(path, true));
+     g_free(path);
+ 
+@@ -708,11 +708,11 @@ std::set<ColorProfile::FilePlusHome> 
ColorProfile::getBaseProfileDirs() {
+     // (see 
https://github.com/hughsie/colord/blob/fe10f76536bb27614ced04e0ff944dc6fb4625c0/lib/colord/cd-icc-store.c#L590)
+ 
+     // user store
+-    path = g_build_filename(g_get_user_data_dir(), "icc", NULL);
++    path = g_build_filename(g_get_user_data_dir(), "icc", nullptr);
+     sources.insert(FilePlusHome(path, true));
+     g_free(path);
+ 
+-    path = g_build_filename(g_get_home_dir(), ".color", "icc", NULL);
++    path = g_build_filename(g_get_home_dir(), ".color", "icc", nullptr);
+     sources.insert(FilePlusHome(path, true));
+     g_free(path);
+ 
+@@ -722,7 +722,7 @@ std::set<ColorProfile::FilePlusHome> 
ColorProfile::getBaseProfileDirs() {
+ 
+     const gchar* const * dataDirs = g_get_system_data_dirs();
+     for ( int i = 0; dataDirs[i]; i++ ) {
+-        gchar* path = g_build_filename(dataDirs[i], "color", "icc", NULL);
++        gchar* path = g_build_filename(dataDirs[i], "color", "icc", nullptr);
+         sources.insert(FilePlusHome(path, false));
+         g_free(path);
+     }
+@@ -732,7 +732,7 @@ std::set<ColorProfile::FilePlusHome> 
ColorProfile::getBaseProfileDirs() {
+         sources.insert(FilePlusHome("/System/Library/ColorSync/Profiles", 
false));
+         sources.insert(FilePlusHome("/Library/ColorSync/Profiles", false));
+ 
+-        gchar *path = g_build_filename(g_get_home_dir(), "Library", 
"ColorSync", "Profiles", NULL);
++        gchar *path = g_build_filename(g_get_home_dir(), "Library", 
"ColorSync", "Profiles", nullptr);
+         sources.insert(FilePlusHome(path, true));
+         g_free(path);
+     }
+diff --git a/src/object/sp-guide.cpp b/src/object/sp-guide.cpp
+index 01e7596801..678c2b20bc 100644
+--- a/src/object/sp-guide.cpp
++++ b/src/object/sp-guide.cpp
+@@ -538,7 +538,7 @@ char* SPGuide::description(bool const verbose) const
+         
+         if (verbose) {
+             gchar *oldDescr = descr;
+-            descr = g_strconcat(oldDescr, shortcuts, NULL);
++            descr = g_strconcat(oldDescr, shortcuts, nullptr);
+             g_free(oldDescr);
+         }
+ 
+diff --git a/src/object/sp-image.cpp b/src/object/sp-image.cpp
+index 3c3fc5dd8a..459ecd4243 100644
+--- a/src/object/sp-image.cpp
++++ b/src/object/sp-image.cpp
+@@ -756,7 +756,7 @@ void sp_embed_image(Inkscape::XML::Node *image_node, 
Inkscape::Pixbuf *pb)
+     if (data == nullptr) {
+         // if there is no supported MIME data, embed as PNG
+         data_mimetype = "image/png";
+-        gdk_pixbuf_save_to_buffer(pb->getPixbufRaw(), 
reinterpret_cast<gchar**>(&data), &len, "png", nullptr, NULL);
++        gdk_pixbuf_save_to_buffer(pb->getPixbufRaw(), 
reinterpret_cast<gchar**>(&data), &len, "png", nullptr, nullptr);
+         free_data = true;
+     }
+ 
+diff --git a/src/rdf.cpp b/src/rdf.cpp
+index 563776a19b..3aeb0afa9d 100644
+--- a/src/rdf.cpp
++++ b/src/rdf.cpp
+@@ -543,7 +543,7 @@ const gchar *RDFImpl::getReprText( Inkscape::XML::Node 
const * repr, struct rdf_
+                     const gchar * str = temp->firstChild()->content();
+                     if (bag) {
+                         holder = bag;
+-                        bag = g_strconcat(holder, ", ", str, NULL);
++                        bag = g_strconcat(holder, ", ", str, nullptr);
+                         g_free(holder);
+                     }
+                     else {
+diff --git a/src/selection-chemistry.cpp b/src/selection-chemistry.cpp
+index 5596030a64..38c5d59063 100644
+--- a/src/selection-chemistry.cpp
++++ b/src/selection-chemistry.cpp
+@@ -3663,7 +3663,7 @@ void ObjectSet::createBitmapCopy()
+     if (directory == nullptr) {
+         directory = Inkscape::IO::Resource::homedir_path(nullptr);
+     }
+-    gchar *filepath = g_build_filename(directory, basename, NULL);
++    gchar *filepath = g_build_filename(directory, basename, nullptr);
+     g_free(directory);
+ 
+     //g_print("%s\n", filepath);
+diff --git a/src/ui/clipboard.cpp b/src/ui/clipboard.cpp
+index 0cddf4586c..426ec52e81 100644
+--- a/src/ui/clipboard.cpp
++++ b/src/ui/clipboard.cpp
+@@ -1221,7 +1221,7 @@ bool ClipboardManagerImpl::_pasteImage(SPDocument *doc)
+     prefs->setBool("/dialogs/import/ask", false);
+     png->set_gui(false);
+ 
+-    gchar *filename = g_build_filename( g_get_user_cache_dir(), 
"inkscape-clipboard-import", NULL );
++    gchar *filename = g_build_filename( g_get_user_cache_dir(), 
"inkscape-clipboard-import", nullptr );
+     img->save(filename, "png");
+     file_import(doc, filename, png);
+     g_free(filename);
+@@ -1320,7 +1320,7 @@ std::unique_ptr<SPDocument> 
ClipboardManagerImpl::_retrieveClipboard(Glib::ustri
+ 
+     // FIXME: Temporary hack until we add memory input.
+     // Save the clipboard contents to some file, then read it
+-    gchar *filename = g_build_filename( g_get_user_cache_dir(), 
"inkscape-clipboard-import", NULL );
++    gchar *filename = g_build_filename( g_get_user_cache_dir(), 
"inkscape-clipboard-import", nullptr );
+ 
+     bool file_saved = false;
+     Glib::ustring target = best_target;
+@@ -1413,7 +1413,7 @@ void ClipboardManagerImpl::_onGet(Gtk::SelectionData 
&sel, guint /*info*/)
+ 
+     // FIXME: Temporary hack until we add support for memory output.
+     // Save to a temporary file, read it back and then set the clipboard 
contents
+-    gchar *filename = g_build_filename( g_get_user_cache_dir(), 
"inkscape-clipboard-export", NULL );
++    gchar *filename = g_build_filename( g_get_user_cache_dir(), 
"inkscape-clipboard-export", nullptr );
+     gchar *data = nullptr;
+     gsize len;
+ 
+@@ -1675,7 +1675,7 @@ void ClipboardManagerImpl::_setClipboardTargets()
+             if ( out != outlist.end() ) {
+                 // FIXME: Temporary hack until we add support for memory 
output.
+                 // Save to a temporary file, read it back and then set the 
clipboard contents
+-                gchar *filename = g_build_filename( g_get_user_cache_dir(), 
"inkscape-clipboard-export.emf", NULL );
++                gchar *filename = g_build_filename( g_get_user_cache_dir(), 
"inkscape-clipboard-export.emf", nullptr );
+ 
+                 try {
+                     (*out)->save(_clipboardSPDoc.get(), filename);
+diff --git a/src/ui/dialog/clonetiler.cpp b/src/ui/dialog/clonetiler.cpp
+index 7802c37449..cd8af7f4a8 100644
+--- a/src/ui/dialog/clonetiler.cpp
++++ b/src/ui/dialog/clonetiler.cpp
+@@ -159,7 +159,7 @@ CloneTiler::CloneTiler()
+             auto cell_list = 
gtk_cell_layout_get_cells(GTK_CELL_LAYOUT(combo->gobj()));
+             gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo->gobj()),
+                                            GTK_CELL_RENDERER(cell_list->data),
+-                                           "markup", 0, NULL);
++                                           "markup", 0, nullptr);
+ 
+             for (const auto & sg : sym_groups) {
+                 // Add the description of the symgroup to a new row
+diff --git a/src/ui/dialog/export.cpp b/src/ui/dialog/export.cpp
+index 7496284cec..7f83143992 100644
+--- a/src/ui/dialog/export.cpp
++++ b/src/ui/dialog/export.cpp
+@@ -490,7 +490,7 @@ void Export::set_default_filename () {
+                 extension_point = g_strrstr(uri_copy, old_extension);
+                 extension_point[0] = '\0';
+ 
+-                final_name = g_strconcat(uri_copy, ".png", NULL);
++                final_name = g_strconcat(uri_copy, ".png", nullptr);
+                 filename_entry.set_text(final_name);
+                 filename_entry.set_position(strlen(final_name));
+ 
+@@ -498,7 +498,7 @@ void Export::set_default_filename () {
+                 g_free(uri_copy);
+             }
+         } else {
+-            gchar *name = g_strconcat(uri, ".png", NULL);
++            gchar *name = g_strconcat(uri, ".png", nullptr);
+             filename_entry.set_text(name);
+             filename_entry.set_position(strlen(name));
+ 
+diff --git a/src/ui/dialog/inkscape-preferences.cpp 
b/src/ui/dialog/inkscape-preferences.cpp
+index 940ef1b834..520e6091d1 100644
+--- a/src/ui/dialog/inkscape-preferences.cpp
++++ b/src/ui/dialog/inkscape-preferences.cpp
+@@ -1623,7 +1623,7 @@ void InkscapePreferences::initPageUI()
+         _page_theme.add_line(false, _("Change GTK theme:"), _gtk_theme, "", 
"", false);
+         _gtk_theme.signal_changed().connect(sigc::mem_fun(*this, 
&InkscapePreferences::themeChange));
+     }
+-    _sys_user_themes_dir_copy.init(g_build_filename(g_get_user_data_dir(), 
"themes", NULL), _("Open themes folder"));
++    _sys_user_themes_dir_copy.init(g_build_filename(g_get_user_data_dir(), 
"themes", nullptr), _("Open themes folder"));
+     _page_theme.add_line(true, _("User themes:"), _sys_user_themes_dir_copy, 
"", _("Location of the user’s themes"), true, Gtk::manage(new Gtk::Box()));
+     //_contrast_theme.init("/theme/contrast", 1, 10, 1, 2, 10, 1);
+     Gtk::Widget *space = new Gtk::Box(Gtk::ORIENTATION_HORIZONTAL);
+@@ -3351,7 +3351,7 @@ void InkscapePreferences::initPageSystem()
+                              _("Open fonts folder"));
+     _page_system.add_line(true, _("User fonts:"), _sys_user_fonts_dir, "", 
_("Location of the user’s fonts"), true);
+ 
+-    _sys_user_themes_dir.init(g_build_filename(g_get_user_data_dir(), 
"themes", NULL), _("Open themes folder"));
++    _sys_user_themes_dir.init(g_build_filename(g_get_user_data_dir(), 
"themes", nullptr), _("Open themes folder"));
+     _page_system.add_line(true, _("User themes:"), _sys_user_themes_dir, "", 
_("Location of the user’s themes"), true);
+ 
+     _sys_user_icons_dir.init((char const 
*)IO::Resource::get_path(IO::Resource::USER, IO::Resource::ICONS, ""),
+diff --git a/src/ui/drag-and-drop.cpp b/src/ui/drag-and-drop.cpp
+index 880906c34b..c99bd0f4f5 100644
+--- a/src/ui/drag-and-drop.cpp
++++ b/src/ui/drag-and-drop.cpp
+@@ -357,7 +357,7 @@ ink_drag_data_received(GtkWidget *widget,
+             ext->set_param_optiongroup("link", "embed");
+             ext->set_gui(false);
+ 
+-            gchar *filename = g_build_filename( g_get_tmp_dir(), 
"inkscape-dnd-import", NULL );
++            gchar *filename = g_build_filename( g_get_tmp_dir(), 
"inkscape-dnd-import", nullptr );
+             g_file_set_contents(filename,
+                 reinterpret_cast<gchar const *>(gtk_selection_data_get_data 
(data)),
+                 gtk_selection_data_get_length (data),
+diff --git a/src/ui/interface.cpp b/src/ui/interface.cpp
+index 089327c7ac..8ae64382d6 100644
+--- a/src/ui/interface.cpp
++++ b/src/ui/interface.cpp
+@@ -203,7 +203,7 @@ sp_ui_overwrite_file(gchar const *filename)
+         gtk_dialog_add_buttons( GTK_DIALOG(dialog),
+                                 _("_Cancel"), GTK_RESPONSE_NO,
+                                 _("Replace"), GTK_RESPONSE_YES,
+-                                NULL );
++                                nullptr );
+         gtk_dialog_set_default_response( GTK_DIALOG(dialog), GTK_RESPONSE_YES 
);
+ 
+         if ( gtk_dialog_run( GTK_DIALOG(dialog) ) == GTK_RESPONSE_YES ) {
+diff --git a/src/ui/themes.cpp b/src/ui/themes.cpp
+index f874c4c1a8..ff1eca4a9f 100644
+--- a/src/ui/themes.cpp
++++ b/src/ui/themes.cpp
+@@ -30,15 +30,15 @@
+ static void inkscape_fill_gtk(const gchar *path, gtkThemeList &themes)
+ {
+     const gchar *dir_entry;
+-    GDir *dir = g_dir_open(path, 0, NULL);
++    GDir *dir = g_dir_open(path, 0, nullptr);
+     if (!dir)
+         return;
+     while ((dir_entry = g_dir_read_name(dir))) {
+-        gchar *filename = g_build_filename(path, dir_entry, "gtk-3.0", 
"gtk.css", NULL);
++        gchar *filename = g_build_filename(path, dir_entry, "gtk-3.0", 
"gtk.css", nullptr);
+         bool has_prefer_dark = false;
+   
+         Glib::ustring theme = dir_entry;
+-        gchar *filenamedark = g_build_filename(path, dir_entry, "gtk-3.0", 
"gtk-dark.css", NULL);
++        gchar *filenamedark = g_build_filename(path, dir_entry, "gtk-3.0", 
"gtk-dark.css", nullptr);
+         if (g_file_test(filenamedark, G_FILE_TEST_IS_REGULAR))
+             has_prefer_dark = true;
+         if (themes.find(theme) != themes.end() && !has_prefer_dark) {
+@@ -67,7 +67,7 @@ std::map<Glib::ustring, bool> get_available_themes()
+     const gchar *const *dirs;
+   
+     /* Builtin themes */
+-    builtin_themes = g_resources_enumerate_children("/org/gtk/libgtk/theme", 
G_RESOURCE_LOOKUP_FLAGS_NONE, NULL);
++    builtin_themes = g_resources_enumerate_children("/org/gtk/libgtk/theme", 
G_RESOURCE_LOOKUP_FLAGS_NONE, nullptr);
+     for (i = 0; builtin_themes[i] != NULL; i++) {
+         if (g_str_has_suffix(builtin_themes[i], "/")) {
+             theme = builtin_themes[i];
+@@ -75,7 +75,7 @@ std::map<Glib::ustring, bool> get_available_themes()
+             Glib::ustring theme_path = "/org/gtk/libgtk/theme";
+             theme_path += "/" + theme;
+             gchar **builtin_themes_files =
+-                g_resources_enumerate_children(theme_path.c_str(), 
G_RESOURCE_LOOKUP_FLAGS_NONE, NULL);
++                g_resources_enumerate_children(theme_path.c_str(), 
G_RESOURCE_LOOKUP_FLAGS_NONE, nullptr);
+             bool has_prefer_dark = false;
+             if (builtin_themes_files != NULL) {
+                 for (j = 0; builtin_themes_files[j] != NULL; j++) {
+@@ -92,17 +92,17 @@ std::map<Glib::ustring, bool> get_available_themes()
+ 
+     g_strfreev(builtin_themes);
+ 
+-    path = g_build_filename(g_get_user_data_dir(), "themes", NULL);
++    path = g_build_filename(g_get_user_data_dir(), "themes", nullptr);
+     inkscape_fill_gtk(path, themes);
+     g_free(path);
+   
+-    path = g_build_filename(g_get_home_dir(), ".themes", NULL);
++    path = g_build_filename(g_get_home_dir(), ".themes", nullptr);
+     inkscape_fill_gtk(path, themes);
+     g_free(path);
+   
+     dirs = g_get_system_data_dirs();
+     for (i = 0; dirs[i]; i++) {
+-        path = g_build_filename(dirs[i], "themes", NULL);
++        path = g_build_filename(dirs[i], "themes", nullptr);
+         inkscape_fill_gtk(path, themes);
+         g_free(path);
+     }
+diff --git a/src/ui/tool/control-point.cpp b/src/ui/tool/control-point.cpp
+index c29b09d93f..13f2e60c6e 100644
+--- a/src/ui/tool/control-point.cpp
++++ b/src/ui/tool/control-point.cpp
+@@ -185,7 +185,7 @@ void 
ControlPoint::_setControlType(Inkscape::CanvasItemCtrlType type)
+ 
+ void ControlPoint::_setAnchor(SPAnchorType anchor)
+ {
+-//     g_object_set(_canvas_item_ctrl, "anchor", anchor, NULL);
++//     g_object_set(_canvas_item_ctrl, "anchor", anchor, nullptr);
+ }
+ 
+ void ControlPoint::_setPixbuf(Glib::RefPtr<Gdk::Pixbuf> p)
+diff --git a/src/ui/toolbar/arc-toolbar.cpp b/src/ui/toolbar/arc-toolbar.cpp
+index b663d905f4..986b28b3f8 100644
+--- a/src/ui/toolbar/arc-toolbar.cpp
++++ b/src/ui/toolbar/arc-toolbar.cpp
+@@ -309,7 +309,7 @@ 
ArcToolbar::startend_value_changed(Glib::RefPtr<Gtk::Adjustment>&  adj,
+     // in turn, prevent listener from responding
+     _freeze = true;
+ 
+-    gchar* namespaced_name = g_strconcat("sodipodi:", value_name, NULL);
++    gchar* namespaced_name = g_strconcat("sodipodi:", value_name, nullptr);
+ 
+     bool modmade = false;
+     auto itemlist= _desktop->getSelection()->items();
+diff --git a/src/ui/toolbar/spiral-toolbar.cpp 
b/src/ui/toolbar/spiral-toolbar.cpp
+index 05ce654242..bae2f8c064 100644
+--- a/src/ui/toolbar/spiral-toolbar.cpp
++++ b/src/ui/toolbar/spiral-toolbar.cpp
+@@ -175,7 +175,7 @@ SpiralToolbar::value_changed(Glib::RefPtr<Gtk::Adjustment> 
&adj,
+     // in turn, prevent listener from responding
+     _freeze = true;
+ 
+-    gchar* namespaced_name = g_strconcat("sodipodi:", value_name.data(), 
NULL);
++    gchar* namespaced_name = g_strconcat("sodipodi:", value_name.data(), 
nullptr);
+ 
+     bool modmade = false;
+     auto itemlist= _desktop->getSelection()->items();
+diff --git a/src/ui/tools/gradient-tool.cpp b/src/ui/tools/gradient-tool.cpp
+index e83d2b4613..6aecf92ce4 100644
+--- a/src/ui/tools/gradient-tool.cpp
++++ b/src/ui/tools/gradient-tool.cpp
+@@ -116,7 +116,7 @@ void GradientTool::selection_changed(Inkscape::Selection*) 
{
+                 _("%s selected"),
+                 //TRANSLATORS: Mind the space in front. This is part of a 
compound message
+                 ngettext(" out of %d gradient handle"," out of %d gradient 
handles",n_tot),
+-                ngettext(" on %d selected object"," on %d selected 
objects",n_obj),NULL);
++                ngettext(" on %d selected object"," on %d selected 
objects",n_obj),nullptr);
+             message_context->setF(Inkscape::NORMAL_MESSAGE,
+                                   
message,_(gr_handle_descr[drag->singleSelectedDraggerSingleDraggableType()]), 
n_tot, n_obj);
+         } else {
+@@ -125,14 +125,14 @@ void 
GradientTool::selection_changed(Inkscape::Selection*) {
+                 ngettext("One handle merging %d stop (drag with <b>Shift</b> 
to separate) selected",
+                          "One handle merging %d stops (drag with <b>Shift</b> 
to separate) selected",drag->singleSelectedDraggerNumDraggables()),
+                 ngettext(" out of %d gradient handle"," out of %d gradient 
handles",n_tot),
+-                ngettext(" on %d selected object"," on %d selected 
objects",n_obj),NULL);
++                ngettext(" on %d selected object"," on %d selected 
objects",n_obj),nullptr);
+             
message_context->setF(Inkscape::NORMAL_MESSAGE,message,drag->singleSelectedDraggerNumDraggables(),
 n_tot, n_obj);
+         }
+     } else if (n_sel > 1) {
+         //TRANSLATORS: The plural refers to number of selected gradient 
handles. This is part of a compound message (part two indicates selected object 
count)
+         gchar * message = g_strconcat(ngettext("<b>%d</b> gradient handle 
selected out of %d","<b>%d</b> gradient handles selected out of %d",n_sel),
+                                       //TRANSLATORS: Mind the space in front. 
(Refers to gradient handles selected). This is part of a compound message
+-                                      ngettext(" on %d selected object"," on 
%d selected objects",n_obj),NULL);
++                                      ngettext(" on %d selected object"," on 
%d selected objects",n_obj),nullptr);
+         message_context->setF(Inkscape::NORMAL_MESSAGE,message, n_sel, n_tot, 
n_obj);
+     } else if (n_sel == 0) {
+         message_context->setF(Inkscape::NORMAL_MESSAGE,
+diff --git a/src/ui/tools/mesh-tool.cpp b/src/ui/tools/mesh-tool.cpp
+index 07bf68bd12..fbde77f36f 100644
+--- a/src/ui/tools/mesh-tool.cpp
++++ b/src/ui/tools/mesh-tool.cpp
+@@ -131,7 +131,7 @@ void MeshTool::selection_changed(Inkscape::Selection* 
/*sel*/) {
+                 _("%s selected"),
+                 //TRANSLATORS: Mind the space in front. This is part of a 
compound message
+                 ngettext(" out of %d mesh handle"," out of %d mesh 
handles",n_tot),
+-                ngettext(" on %d selected object"," on %d selected 
objects",n_obj),NULL);
++                ngettext(" on %d selected object"," on %d selected 
objects",n_obj),nullptr);
+             this->message_context->setF(Inkscape::NORMAL_MESSAGE,
+                                        
message,_(ms_handle_descr[drag->singleSelectedDraggerSingleDraggableType()]), 
n_tot, n_obj);
+         } else {
+@@ -142,7 +142,7 @@ void MeshTool::selection_changed(Inkscape::Selection* 
/*sel*/) {
+                              "One handle merging %d stops (drag with 
<b>Shift</b> to separate) selected",
+                              drag->singleSelectedDraggerNumDraggables()),
+                     ngettext(" out of %d mesh handle"," out of %d mesh 
handles",n_tot),
+-                    ngettext(" on %d selected object"," on %d selected 
objects",n_obj),NULL);
++                    ngettext(" on %d selected object"," on %d selected 
objects",n_obj),nullptr);
+             
this->message_context->setF(Inkscape::NORMAL_MESSAGE,message,drag->singleSelectedDraggerNumDraggables(),
 n_tot, n_obj);
+         }
+     } else if (n_sel > 1) {
+@@ -150,7 +150,7 @@ void MeshTool::selection_changed(Inkscape::Selection* 
/*sel*/) {
+         gchar * message =
+             g_strconcat(ngettext("<b>%d</b> mesh handle selected out of 
%d","<b>%d</b> mesh handles selected out of %d",n_sel),
+                         //TRANSLATORS: Mind the space in front. (Refers to 
gradient handles selected). This is part of a compound message
+-                        ngettext(" on %d selected object"," on %d selected 
objects",n_obj),NULL);
++                        ngettext(" on %d selected object"," on %d selected 
objects",n_obj),nullptr);
+         this->message_context->setF(Inkscape::NORMAL_MESSAGE,message, n_sel, 
n_tot, n_obj);
+     } else if (n_sel == 0) {
+         this->message_context->setF(Inkscape::NORMAL_MESSAGE,
+diff --git a/src/ui/tools/text-tool.cpp b/src/ui/tools/text-tool.cpp
+index 4d0d7f5885..8f7aba97b1 100644
+--- a/src/ui/tools/text-tool.cpp
++++ b/src/ui/tools/text-tool.cpp
+@@ -100,8 +100,8 @@ TextTool::~TextTool() {
+ void TextTool::setup() {
+     GtkSettings* settings = gtk_settings_get_default();
+     gint timeout = 0;
+-    g_object_get( settings, "gtk-cursor-blink-time", &timeout, NULL );
+-    
++    g_object_get( settings, "gtk-cursor-blink-time", &timeout, nullptr );
++
+     if (timeout < 0) {
+         timeout = 200;
+     } else {
+diff --git a/src/ui/widget/color-icc-selector.cpp 
b/src/ui/widget/color-icc-selector.cpp
+index 99c6b57af0..cf3b4b4b9b 100644
+--- a/src/ui/widget/color-icc-selector.cpp
++++ b/src/ui/widget/color-icc-selector.cpp
+@@ -369,7 +369,7 @@ void ColorICCSelector::init()
+ 
+     GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
+     gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(_impl->_profileSel), renderer, 
TRUE);
+-    gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(_impl->_profileSel), 
renderer, "text", 0, NULL);
++    gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(_impl->_profileSel), 
renderer, "text", 0, nullptr);
+ 
+     GtkTreeIter iter;
+     gtk_list_store_append(store, &iter);
+diff --git a/src/ui/widget/combo-box-entry-tool-item.cpp 
b/src/ui/widget/combo-box-entry-tool-item.cpp
+index 60f87d938b..9bce9ce91b 100644
+--- a/src/ui/widget/combo-box-entry-tool-item.cpp
++++ b/src/ui/widget/combo-box-entry-tool-item.cpp
+@@ -74,8 +74,8 @@ ComboBoxEntryToolItem::ComboBoxEntryToolItem(Glib::ustring 
name,
+     set_name(name);
+ 
+     gchar *action_name = g_strdup( get_name().c_str() );
+-    gchar *combobox_name = g_strjoin( nullptr, action_name, "_combobox", NULL 
);
+-    gchar *entry_name =    g_strjoin( nullptr, action_name, "_entry", NULL );
++    gchar *combobox_name = g_strjoin( nullptr, action_name, "_combobox", 
nullptr );
++    gchar *entry_name =    g_strjoin( nullptr, action_name, "_entry", nullptr 
);
+     g_free( action_name );
+ 
+     GtkWidget* comboBoxEntry = gtk_combo_box_new_with_model_and_entry 
(_model);
+diff --git a/src/ui/widget/marker-combo-box.cpp 
b/src/ui/widget/marker-combo-box.cpp
+index 6ecc77be14..82199c547d 100644
+--- a/src/ui/widget/marker-combo-box.cpp
++++ b/src/ui/widget/marker-combo-box.cpp
+@@ -201,7 +201,7 @@ const gchar * MarkerComboBox::get_active_marker_uri()
+         gchar *markurn;
+         if (stockid)
+         {
+-            markurn = g_strconcat("urn:inkscape:marker:",markid,NULL);
++            markurn = g_strconcat("urn:inkscape:marker:",markid,nullptr);
+         }
+         else
+         {
+@@ -211,7 +211,7 @@ const gchar * MarkerComboBox::get_active_marker_uri()
+         g_free(markurn);
+         if (mark) {
+             Inkscape::XML::Node *repr = mark->getRepr();
+-            marker = g_strconcat("url(#", repr->attribute("id"), ")", NULL);
++            marker = g_strconcat("url(#", repr->attribute("id"), ")", 
nullptr);
+         }
+     } else {
+         marker = g_strdup(markid);
+@@ -366,7 +366,7 @@ void MarkerComboBox::add_markers (std::vector<SPMarker *> 
const& marker_list, SP
+ void
+ MarkerComboBox::update_marker_image(gchar const *mname)
+ {
+-    gchar *cache_name = g_strconcat(combo_id, mname, NULL);
++    gchar *cache_name = g_strconcat(combo_id, mname, nullptr);
+     Glib::ustring key = svg_preview_cache.cache_key(doc->getDocumentURI(), 
cache_name, 24);
+     g_free (cache_name);
+     svg_preview_cache.remove_preview_from_cache(key);
+@@ -403,7 +403,7 @@ MarkerComboBox::create_marker_image(unsigned psize, gchar 
const *mname,
+     }
+ 
+     /* Get from cache right away */
+-    gchar *cache_name = g_strconcat(combo_id, mname, NULL);
++    gchar *cache_name = g_strconcat(combo_id, mname, nullptr);
+     Glib::ustring key = svg_preview_cache.cache_key(source->getDocumentURI(), 
cache_name, psize);
+     g_free (cache_name);
+     GdkPixbuf *pixbuf = svg_preview_cache.get_preview_from_cache(key); // no 
ref created
+diff --git a/src/ui/widget/paint-selector.cpp 
b/src/ui/widget/paint-selector.cpp
+index 26a5a56032..d196654f2b 100644
+--- a/src/ui/widget/paint-selector.cpp
++++ b/src/ui/widget/paint-selector.cpp
+@@ -878,7 +878,7 @@ void PaintSelector::set_mode_mesh(PaintSelector::Mode mode)
+             GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
+             gtk_cell_renderer_set_padding(renderer, 2, 0);
+             gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combo), renderer, 
TRUE);
+-            gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), renderer, 
"text", COMBO_COL_LABEL, NULL);
++            gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combo), renderer, 
"text", COMBO_COL_LABEL, nullptr);
+ 
+             ink_mesh_menu(combo);
+             g_signal_connect(G_OBJECT(combo), "changed", 
G_CALLBACK(PaintSelector::mesh_change), this);
+@@ -947,7 +947,7 @@ SPMeshGradient *PaintSelector::getMeshGradient()
+ 
+         gchar *mesh_name;
+         if (stockid) {
+-            mesh_name = g_strconcat("urn:inkscape:mesh:", meshid, NULL);
++            mesh_name = g_strconcat("urn:inkscape:mesh:", meshid, nullptr);
+         } else {
+             mesh_name = g_strdup(meshid);
+         }
+@@ -1202,7 +1202,7 @@ void PaintSelector::set_mode_pattern(PaintSelector::Mode 
mode)
+             GtkCellRenderer *renderer = gtk_cell_renderer_text_new();
+             gtk_cell_renderer_set_padding(renderer, 2, 0);
+             gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(_patternmenu), 
renderer, TRUE);
+-            gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(_patternmenu), 
renderer, "text", COMBO_COL_LABEL, NULL);
++            gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(_patternmenu), 
renderer, "text", COMBO_COL_LABEL, nullptr);
+ 
+             ink_pattern_menu(_patternmenu);
+             g_signal_connect(G_OBJECT(_patternmenu), "changed", 
G_CALLBACK(PaintSelector::pattern_change), this);
+@@ -1298,7 +1298,7 @@ SPPattern *PaintSelector::getPattern()
+         gchar *paturn;
+ 
+         if (stockid) {
+-            paturn = g_strconcat("urn:inkscape:pattern:", patid, NULL);
++            paturn = g_strconcat("urn:inkscape:pattern:", patid, nullptr);
+         } else {
+             paturn = g_strdup(patid);
+         }
+diff --git a/src/widgets/desktop-widget.cpp b/src/widgets/desktop-widget.cpp
+index 5a018301de..7a5607b57c 100644
+--- a/src/widgets/desktop-widget.cpp
++++ b/src/widgets/desktop-widget.cpp
+@@ -612,8 +612,8 @@ void SPDesktopWidget::on_realize()
+     GtkSettings *settings = gtk_settings_get_default();
+     Gtk::Container *window = get_toplevel();
+     if (settings && window) {
+-        g_object_get(settings, "gtk-theme-name", &gtkThemeName, NULL);
+-        g_object_get(settings, "gtk-application-prefer-dark-theme", 
&gtkApplicationPreferDarkTheme, NULL);
++        g_object_get(settings, "gtk-theme-name", &gtkThemeName, nullptr);
++        g_object_get(settings, "gtk-application-prefer-dark-theme", 
&gtkApplicationPreferDarkTheme, nullptr);
+         bool dark = isCurrentThemeDark(dynamic_cast<Gtk::Container 
*>(window));
+         if (dark) {
+             prefs->setBool("/theme/darkTheme", true);
+diff --git a/src/widgets/sp-xmlview-tree.cpp b/src/widgets/sp-xmlview-tree.cpp
+index b07ce2475e..67b0e9094b 100644
+--- a/src/widgets/sp-xmlview-tree.cpp
++++ b/src/widgets/sp-xmlview-tree.cpp
+@@ -164,7 +164,7 @@ GtkWidget *sp_xmlview_tree_new(Inkscape::XML::Node * repr, 
void * /*factory*/, v
+     gtk_tree_view_set_search_equal_func (GTK_TREE_VIEW(tree), 
search_equal_func, nullptr, nullptr);
+ 
+     GtkCellRenderer *renderer = gtk_cell_renderer_text_new ();
+-    GtkTreeViewColumn *column = gtk_tree_view_column_new_with_attributes ("", 
renderer, "text", STORE_TEXT_COL, NULL);
++    GtkTreeViewColumn *column = gtk_tree_view_column_new_with_attributes ("", 
renderer, "text", STORE_TEXT_COL, nullptr);
+     gtk_tree_view_append_column (GTK_TREE_VIEW (tree), column);
+     gtk_cell_renderer_set_padding (renderer, 2, 0);
+     gtk_tree_view_column_set_sizing (column, GTK_TREE_VIEW_COLUMN_AUTOSIZE);
+diff --git a/src/xml/repr-io.cpp b/src/xml/repr-io.cpp
+index f3cbdcb8f3..d891f07e09 100644
+--- a/src/xml/repr-io.cpp
++++ b/src/xml/repr-io.cpp
+@@ -449,7 +449,7 @@ void promote_to_namespace(Node *repr, const gchar *prefix) 
{
+     if ( repr->type() == Inkscape::XML::NodeType::ELEMENT_NODE ) {
+         GQuark code = repr->code();
+         if (!qname_prefix(code).id()) {
+-            gchar *svg_name = g_strconcat(prefix, ":", 
g_quark_to_string(code), NULL);
++            gchar *svg_name = g_strconcat(prefix, ":", 
g_quark_to_string(code), nullptr);
+             repr->setCodeUnsafe(g_quark_from_string(svg_name));
+             g_free(svg_name);
+         }
+-- 
+2.31.1
+

diff --git a/media-gfx/inkscape/inkscape-1.1.ebuild 
b/media-gfx/inkscape/inkscape-1.1.ebuild
new file mode 100644
index 00000000000..642643d65ca
--- /dev/null
+++ b/media-gfx/inkscape/inkscape-1.1.ebuild
@@ -0,0 +1,162 @@
+# Copyright 1999-2021 Gentoo Authors
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI=7
+
+PYTHON_COMPAT=( python3_{8,9} )
+PYTHON_REQ_USE="xml"
+
+inherit cmake flag-o-matic xdg toolchain-funcs python-single-r1
+
+DESCRIPTION="SVG based generic vector-drawing program"
+HOMEPAGE="https://inkscape.org/";
+SRC_URI="https://media.inkscape.org/dl/resources/file/${P}.tar.xz";
+
+LICENSE="GPL-2 LGPL-2.1"
+SLOT="0"
+KEYWORDS="~amd64 ~arm ~arm64 ~ppc ~ppc64 ~riscv ~s390 ~sparc ~x86"
+IUSE="cdr dbus dia exif graphicsmagick imagemagick inkjar jemalloc jpeg lcms
+openmp postscript readline spell static-libs svg2 visio wpg"
+
+REQUIRED_USE="${PYTHON_REQUIRED_USE}"
+
+BDEPEND="
+       dev-util/glib-utils
+       >=dev-util/intltool-0.40
+       >=sys-devel/gettext-0.17
+       virtual/pkgconfig
+"
+COMMON_DEPEND="${PYTHON_DEPS}
+       >=app-text/poppler-0.57.0:=[cairo]
+       >=dev-cpp/cairomm-1.12:0
+       >=dev-cpp/glibmm-2.54.1:2
+       dev-cpp/gtkmm:3.0
+       >=dev-cpp/pangomm-2.40:1.4
+       >=dev-libs/boehm-gc-7.1:=
+       dev-libs/double-conversion:=
+       >=dev-libs/glib-2.41
+       >=dev-libs/libsigc++-2.8:2
+       >=dev-libs/libxml2-2.7.4
+       >=dev-libs/libxslt-1.1.25
+       dev-libs/gdl:3
+       dev-libs/popt
+       media-gfx/potrace
+       media-libs/fontconfig
+       media-libs/freetype:2
+       media-libs/libpng:0=
+       net-libs/libsoup:2.4
+       sci-libs/gsl:=
+       x11-libs/libX11
+       >=x11-libs/pango-1.37.2
+       x11-libs/gtk+:3
+       $(python_gen_cond_dep '
+               dev-python/lxml[${PYTHON_USEDEP}]
+               media-gfx/scour[${PYTHON_USEDEP}]
+       ')
+       cdr? (
+               app-text/libwpg:0.3
+               dev-libs/librevenge
+               media-libs/libcdr
+       )
+       dbus? ( dev-libs/dbus-glib )
+       exif? ( media-libs/libexif )
+       imagemagick? (
+               !graphicsmagick? ( media-gfx/imagemagick:=[cxx] )
+               graphicsmagick? ( media-gfx/graphicsmagick:=[cxx] )
+       )
+       jemalloc? ( dev-libs/jemalloc )
+       jpeg? ( virtual/jpeg:0 )
+       lcms? ( media-libs/lcms:2 )
+       readline? ( sys-libs/readline:= )
+       spell? ( app-text/gspell )
+       visio? (
+               app-text/libwpg:0.3
+               dev-libs/librevenge
+               media-libs/libvisio
+       )
+       wpg? (
+               app-text/libwpg:0.3
+               dev-libs/librevenge
+       )
+"
+# These only use executables provided by these packages
+# See share/extensions for more details. inkscape can tell you to
+# install these so we could of course just not depend on those and rely
+# on that.
+RDEPEND="${COMMON_DEPEND}
+       $(python_gen_cond_dep '
+               dev-python/numpy[${PYTHON_USEDEP}]
+       ')
+       dia? ( app-office/dia )
+       postscript? ( app-text/ghostscript-gpl )
+"
+DEPEND="${COMMON_DEPEND}
+       >=dev-libs/boost-1.65
+"
+
+RESTRICT="test"
+
+S="${WORKDIR}/${P}_2021-05-24_c4e8f9ed74"
+
+PATCHES=(
+       "${FILESDIR}/${P}-sentinels.patch" # 1.1 is the last affected version, 
it is already fixed in upstream
+)
+
+pkg_pretend() {
+       if [[ ${MERGE_TYPE} != binary ]] && use openmp; then
+               tc-has-openmp || die "Please switch to an openmp compatible 
compiler"
+       fi
+}
+
+src_prepare() {
+       cmake_src_prepare
+       sed -i "/install.*COPYING/d" CMakeScripts/ConfigCPack.cmake || die
+}
+
+src_configure() {
+       # aliasing unsafe wrt #310393
+       append-flags -fno-strict-aliasing
+
+       local mycmakeargs=(
+               # -DWITH_LPETOOL   # Compile with LPE Tool and experimental 
LPEs enabled
+               -DWITH_NLS=ON
+               -DENABLE_POPPLER=ON
+               -DENABLE_POPPLER_CAIRO=ON
+               -DWITH_PROFILING=OFF
+               -DBUILD_TESTING=OFF
+               -DWITH_LIBCDR=$(usex cdr)
+               -DWITH_DBUS=$(usex dbus)
+               -DWITH_IMAGE_MAGICK=$(usex imagemagick $(usex !graphicsmagick)) 
# requires ImageMagick 6, only IM must be enabled
+               -DWITH_GRAPHICS_MAGICK=$(usex graphicsmagick $(usex 
imagemagick)) # both must be enabled to use GraphicsMagick
+               -DWITH_GNU_READLINE=$(usex readline)
+               -DWITH_GSPELL=$(usex spell)
+               -DWITH_JEMALLOC=$(usex jemalloc)
+               -DENABLE_LCMS=$(usex lcms)
+               -DWITH_OPENMP=$(usex openmp)
+               -DBUILD_SHARED_LIBS=$(usex !static-libs)
+               -DWITH_SVG2=$(usex svg2)
+               -DWITH_LIBVISIO=$(usex visio)
+               -DWITH_LIBWPG=$(usex wpg)
+       )
+
+       cmake_src_configure
+}
+
+src_install() {
+       cmake_src_install
+
+       find "${ED}" -type f -name "*.la" -delete || die
+
+       find "${ED}"/usr/share/man -type f -maxdepth 3 -name '*.bz2' -exec 
bzip2 -d {} \; || die
+
+       find "${ED}"/usr/share/man -type f -maxdepth 3 -name '*.gz' -exec gzip 
-d {} \; || die
+
+       local extdir="${ED}"/usr/share/${PN}/extensions
+
+       if [[ -e "${extdir}" ]] && [[ -n $(find "${extdir}" -mindepth 1) ]]; 
then
+               python_optimize "${ED}"/usr/share/${PN}/extensions
+       fi
+
+       # Empty directory causes sandbox issues, see bug #761915
+       rm -r "${ED}/usr/share/inkscape/fonts" || die "Failed to remove fonts 
directory."
+}

Reply via email to