diff options
author | Petr Vaněk <arkamar@atlas.cz> | 2021-07-05 11:17:05 +0200 |
---|---|---|
committer | Andreas K. Hüttel <dilfridge@gentoo.org> | 2021-09-25 17:58:54 +0200 |
commit | b5cf24fbb7854095f11b294e4999374fe2cdaadc (patch) | |
tree | 398f2a4c0a019e19b017a37ef9e4ca42e1ba0d7a /media-gfx/inkscape | |
parent | media-gfx/inkscape: sync live (diff) | |
download | gentoo-b5cf24fbb7854095f11b294e4999374fe2cdaadc.tar.gz gentoo-b5cf24fbb7854095f11b294e4999374fe2cdaadc.tar.bz2 gentoo-b5cf24fbb7854095f11b294e4999374fe2cdaadc.zip |
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@atlas.cz>
Closes: https://github.com/gentoo/gentoo/pull/22353
Signed-off-by: Andreas K. Hüttel <dilfridge@gentoo.org>
Diffstat (limited to 'media-gfx/inkscape')
-rw-r--r-- | media-gfx/inkscape/Manifest | 1 | ||||
-rw-r--r-- | media-gfx/inkscape/files/inkscape-1.1-sentinels.patch | 727 | ||||
-rw-r--r-- | media-gfx/inkscape/inkscape-1.1.ebuild | 162 |
3 files changed, 890 insertions, 0 deletions
diff --git a/media-gfx/inkscape/Manifest b/media-gfx/inkscape/Manifest index 595bd98db344..1810db369290 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 000000000000..b4768d44f278 --- /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?= <arkamar@atlas.cz> +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", >kIconThemeName, NULL); +- g_object_get(settings, "gtk-theme-name", >kThemeName, NULL); +- g_object_get(settings, "gtk-application-prefer-dark-theme", >kApplicationPreferDarkTheme, NULL); ++ g_object_get(settings, "gtk-icon-theme-name", >kIconThemeName, nullptr); ++ g_object_get(settings, "gtk-theme-name", >kThemeName, nullptr); ++ g_object_get(settings, "gtk-application-prefer-dark-theme", >kApplicationPreferDarkTheme, 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", >kThemeName, NULL); +- g_object_get(settings, "gtk-application-prefer-dark-theme", >kApplicationPreferDarkTheme, NULL); ++ g_object_get(settings, "gtk-theme-name", >kThemeName, nullptr); ++ g_object_get(settings, "gtk-application-prefer-dark-theme", >kApplicationPreferDarkTheme, 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 000000000000..642643d65ca8 --- /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." +} |