- Drop obsolete and unused pkgconfig(gdl-3.0) BuildRequires.

- Add explicit pkgconfig(glibmm-2.4), pkgconfig(gdkmm-3.0),
  pkgconfig(gdkmm-3.0), pkgconfig(gtk+-3.0) and pkgconfig(gdk-3.0)
  BuildRequires: Align with what cmake checks for.

OBS-URL: https://build.opensuse.org/package/show/graphics/inkscape?expand=0&rev=123
This commit is contained in:
Marcus Meissner 2024-11-21 08:41:04 +00:00 committed by Git OBS Bridge
commit c80ee018ce
18 changed files with 2553 additions and 0 deletions

23
.gitattributes vendored Normal file
View File

@ -0,0 +1,23 @@
## Default LFS
*.7z filter=lfs diff=lfs merge=lfs -text
*.bsp filter=lfs diff=lfs merge=lfs -text
*.bz2 filter=lfs diff=lfs merge=lfs -text
*.gem filter=lfs diff=lfs merge=lfs -text
*.gz filter=lfs diff=lfs merge=lfs -text
*.jar filter=lfs diff=lfs merge=lfs -text
*.lz filter=lfs diff=lfs merge=lfs -text
*.lzma filter=lfs diff=lfs merge=lfs -text
*.obscpio filter=lfs diff=lfs merge=lfs -text
*.oxt filter=lfs diff=lfs merge=lfs -text
*.pdf filter=lfs diff=lfs merge=lfs -text
*.png filter=lfs diff=lfs merge=lfs -text
*.rpm filter=lfs diff=lfs merge=lfs -text
*.tbz filter=lfs diff=lfs merge=lfs -text
*.tbz2 filter=lfs diff=lfs merge=lfs -text
*.tgz filter=lfs diff=lfs merge=lfs -text
*.ttf filter=lfs diff=lfs merge=lfs -text
*.txz filter=lfs diff=lfs merge=lfs -text
*.whl filter=lfs diff=lfs merge=lfs -text
*.xz filter=lfs diff=lfs merge=lfs -text
*.zip filter=lfs diff=lfs merge=lfs -text
*.zst filter=lfs diff=lfs merge=lfs -text

1
.gitignore vendored Normal file
View File

@ -0,0 +1 @@
.osc

14
_constraints Normal file
View File

@ -0,0 +1,14 @@
<constraints>
<hardware>
<disk>
<size unit="G">5</size>
</disk>
<memory>
<size unit="M">4000</size>
</memory>
<memoryperjob>
<size unit="M">800</size>
</memoryperjob>
</hardware>
</constraints>

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:dbd1844dc443fe5e10d3e9a887144e5fb7223852fff191cfb5ef7adeab0e086b
size 44720944

Binary file not shown.

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:c59a85453b699addebcd51c1dc07684dd96a10c8aec716b19551db50562e13f5
size 46321868

Binary file not shown.

33
inkscape-libxml2.12.patch Normal file
View File

@ -0,0 +1,33 @@
From 694d8ae43d06efff21adebf377ce614d660b24cd Mon Sep 17 00:00:00 2001
From: Christian Hesse <mail@eworm.de>
Date: Fri, 17 Nov 2023 22:30:42 +0100
Subject: [PATCH] include missing header file
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
This fixes build error:
```
/build/inkscape/src/inkscape/src/object/uri.cpp: In constructor Inkscape::URI::URI(const gchar*, const char*):
/build/inkscape/src/inkscape/src/object/uri.cpp:86:9: error: xmlFree was not declared in this scope; did you mean xmlFreeURI?
86 | xmlFree(full);
```
---
src/object/uri.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/object/uri.h b/src/object/uri.h
index 381adec58cf..d5b211fe2b2 100644
--- a/src/object/uri.h
+++ b/src/object/uri.h
@@ -13,6 +13,7 @@
#define INKSCAPE_URI_H
#include <libxml/uri.h>
+#include <libxml/xmlmemory.h>
#include <memory>
#include <string>
--
GitLab

View File

@ -0,0 +1,62 @@
From 3dd9846ab99260134e11938f0e575be822507037 Mon Sep 17 00:00:00 2001
From: Andreas Sturmlechner <asturm@gentoo.org>
Date: Mon, 4 Mar 2024 22:59:40 +0100
Subject: [PATCH] Fix build with >=poppler-24.03.0
Fixes build errors caused by:
"Use an enum for Function getType"
Upstream commit 6e3824d45d42cb806a28a2df84e4ab6bb3587083
Signed-off-by: Andreas Sturmlechner <asturm@gentoo.org>
---
src/extension/internal/pdfinput/svg-builder.cpp | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/src/extension/internal/pdfinput/svg-builder.cpp b/src/extension/internal/pdfinput/svg-builder.cpp
index 525fbfec0a..bcd7b1f61b 100644
--- a/src/extension/internal/pdfinput/svg-builder.cpp
+++ b/src/extension/internal/pdfinput/svg-builder.cpp
@@ -1175,9 +1175,13 @@ static bool svgGetShadingColor(GfxShading *shading, double offset, GfxColor *res
#define INT_EPSILON 8
bool SvgBuilder::_addGradientStops(Inkscape::XML::Node *gradient, GfxShading *shading,
_POPPLER_CONST Function *func) {
- int type = func->getType();
+ auto type = func->getType();
auto space = shading->getColorSpace();
+#if POPPLER_CHECK_VERSION(24, 3, 0)
+ if ( type == Function::Type::Sampled || type == Function::Type::Exponential ) { // Sampled or exponential function
+#else
if ( type == 0 || type == 2 ) { // Sampled or exponential function
+#endif
GfxColor stop1, stop2;
if (!svgGetShadingColor(shading, 0.0, &stop1) || !svgGetShadingColor(shading, 1.0, &stop2)) {
return false;
@@ -1185,7 +1189,11 @@ bool SvgBuilder::_addGradientStops(Inkscape::XML::Node *gradient, GfxShading *sh
_addStopToGradient(gradient, 0.0, &stop1, space, 1.0);
_addStopToGradient(gradient, 1.0, &stop2, space, 1.0);
}
+#if POPPLER_CHECK_VERSION(24, 3, 0)
+ } else if ( type == Function::Type::Stitching ) { // Stitching
+#else
} else if ( type == 3 ) { // Stitching
+#endif
auto stitchingFunc = static_cast<_POPPLER_CONST StitchingFunction*>(func);
const double *bounds = stitchingFunc->getBounds();
const double *encode = stitchingFunc->getEncode();
@@ -1200,7 +1208,11 @@ bool SvgBuilder::_addGradientStops(Inkscape::XML::Node *gradient, GfxShading *sh
for ( int i = 0 ; i < num_funcs ; i++ ) {
svgGetShadingColor(shading, bounds[i + 1], &color);
// Add stops
+#if POPPLER_CHECK_VERSION(24, 3, 0)
+ if (stitchingFunc->getFunc(i)->getType() == Function::Type::Exponential) { // process exponential fxn
+#else
if (stitchingFunc->getFunc(i)->getType() == 2) { // process exponential fxn
+#endif
double expE = (static_cast<_POPPLER_CONST ExponentialFunction*>(stitchingFunc->getFunc(i)))->getE();
if (expE > 1.0) {
expE = (bounds[i + 1] - bounds[i])/expE; // approximate exponential as a single straight line at x=1
--
GitLab

View File

@ -0,0 +1,46 @@
Index: inkscape-1.3.2_2023-11-25_091e20ef0f/src/extension/internal/pdfinput/poppler-transition-api.h
===================================================================
--- inkscape-1.3.2_2023-11-25_091e20ef0f.orig/src/extension/internal/pdfinput/poppler-transition-api.h
+++ inkscape-1.3.2_2023-11-25_091e20ef0f/src/extension/internal/pdfinput/poppler-transition-api.h
@@ -13,6 +13,15 @@
#define SEEN_POPPLER_TRANSITION_API_H
#include <glib/poppler-features.h>
+#include <poppler/UTF.h>
+
+#if POPPLER_CHECK_VERSION(24, 5, 0)
+#define _POPPLER_HAS_UNICODE_BOM(value) (hasUnicodeByteOrderMark(value->toStr()))
+#define _POPPLER_HAS_UNICODE_BOMLE(value) (hasUnicodeByteOrderMarkLE(value->toStr()))
+#else
+#define _POPPLER_HAS_UNICODE_BOM(value) (value->hasUnicodeMarker())
+#define _POPPLER_HAS_UNICODE_BOMLE(value) (value->hasUnicodeMarkerLE())
+#endif
#if POPPLER_CHECK_VERSION(22, 4, 0)
#define _POPPLER_FONTPTR_TO_GFX8(font_ptr) ((Gfx8BitFont *)font_ptr.get())
Index: inkscape-1.3.2_2023-11-25_091e20ef0f/src/extension/internal/pdfinput/poppler-utils.cpp
===================================================================
--- inkscape-1.3.2_2023-11-25_091e20ef0f.orig/src/extension/internal/pdfinput/poppler-utils.cpp
+++ inkscape-1.3.2_2023-11-25_091e20ef0f/src/extension/internal/pdfinput/poppler-utils.cpp
@@ -12,6 +12,8 @@
#include "poppler-utils.h"
+#include <poppler/UTF.h>
+
#include "2geom/affine.h"
#include "GfxFont.h"
#include "GfxState.h"
@@ -563,10 +565,10 @@ std::string getDictString(Dict *dict, co
*/
std::string getString(const GooString *value)
{
- if (value->hasUnicodeMarker()) {
+ if (_POPPLER_HAS_UNICODE_BOM(value)) {
return g_convert(value->getCString () + 2, value->getLength () - 2,
"UTF-8", "UTF-16BE", NULL, NULL, NULL);
- } else if (value->hasUnicodeMarkerLE()) {
+ } else if (_POPPLER_HAS_UNICODE_BOMLE(value)) {
return g_convert(value->getCString () + 2, value->getLength () - 2,
"UTF-8", "UTF-16LE", NULL, NULL, NULL);
}

View File

@ -0,0 +1,13 @@
Index: inkscape-1.3.2_2023-11-25_091e20ef0f/src/ui/dialog/filter-effects-dialog.cpp
===================================================================
--- inkscape-1.3.2_2023-11-25_091e20ef0f.orig/src/ui/dialog/filter-effects-dialog.cpp
+++ inkscape-1.3.2_2023-11-25_091e20ef0f/src/ui/dialog/filter-effects-dialog.cpp
@@ -202,7 +202,7 @@ public:
template< typename T> class ComboWithTooltip : public Gtk::EventBox
{
public:
- ComboWithTooltip<T>(T default_value, const Util::EnumDataConverter<T>& c, const SPAttr a = SPAttr::INVALID, char* tip_text = nullptr)
+ ComboWithTooltip(T const default_value, Util::EnumDataConverter<T> const &c, SPAttr const a = SPAttr::INVALID, char* tip_text = nullptr)
{
if (tip_text) {
set_tooltip_text(tip_text);

View File

@ -0,0 +1,76 @@
Index: inkscape-1.3.2_2023-11-25_091e20ef0f/CMakeLists.txt
===================================================================
--- inkscape-1.3.2_2023-11-25_091e20ef0f.orig/CMakeLists.txt
+++ inkscape-1.3.2_2023-11-25_091e20ef0f/CMakeLists.txt
@@ -18,9 +18,9 @@ message("Binary Dir: ${CMAKE_CURRENT_BIN
# -----------------------------------------------------------------------------
# CMake Configuration
# -----------------------------------------------------------------------------
-set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
-# set(CMAKE_CXX_EXTENSIONS OFF) # enforces -std=c++17 instead of -std=gnu++17
+# set(CMAKE_CXX_EXTENSIONS OFF) # enforces -std=c++20 instead of -std=gnu++20
# TODO: build currently fails with it as we actually depend on GNU compiler extensions...
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/CMakeScripts/Modules")
Index: inkscape-1.3.2_2023-11-25_091e20ef0f/_clang-format
===================================================================
--- inkscape-1.3.2_2023-11-25_091e20ef0f.orig/_clang-format
+++ inkscape-1.3.2_2023-11-25_091e20ef0f/_clang-format
@@ -103,7 +103,7 @@ SpacesInContainerLiterals: false
SpacesInCStyleCastParentheses: false
SpacesInParentheses: false
SpacesInSquareBrackets: false
-Standard: c++17
+Standard: c++20
StatementMacros: []
TypenameMacros: []
TabWidth: 4
Index: inkscape-1.3.2_2023-11-25_091e20ef0f/src/ui/knot/knot-holder-entity.cpp
===================================================================
--- inkscape-1.3.2_2023-11-25_091e20ef0f.orig/src/ui/knot/knot-holder-entity.cpp
+++ inkscape-1.3.2_2023-11-25_091e20ef0f/src/ui/knot/knot-holder-entity.cpp
@@ -329,7 +329,7 @@ PatternKnotHolderEntityScale::knot_set(G
double scale_x = std::clamp(new_extent[X] / _cached_diagonal[X], _cached_min_scale, 1e9);
double scale_y = std::clamp(new_extent[Y] / _cached_diagonal[Y], _cached_min_scale, 1e9);
- Affine new_transform = (state & GDK_CONTROL_MASK) ? Scale(lerp(0.5, scale_x, scale_y))
+ Affine new_transform = (state & GDK_CONTROL_MASK) ? Scale((scale_x + scale_y) * 0.5)
: Scale(scale_x, scale_y);
// 2. Calculate offset to keep pattern origin aligned
Index: inkscape-1.3.2_2023-11-25_091e20ef0f/src/ui/tools/pencil-tool.cpp
===================================================================
--- inkscape-1.3.2_2023-11-25_091e20ef0f.orig/src/ui/tools/pencil-tool.cpp
+++ inkscape-1.3.2_2023-11-25_091e20ef0f/src/ui/tools/pencil-tool.cpp
@@ -17,7 +17,11 @@
* Released under GNU GPL v2+, read the file 'COPYING' for more information.
*/
-#include <numeric> // For std::accumulate
+#include "pencil-tool.h"
+
+#include <cmath> // std::lerp
+#include <numeric> // std::accumulate
+
#include <gdk/gdkkeysyms.h>
#include <glibmm/i18n.h>
@@ -26,7 +30,6 @@
#include <2geom/sbasis-to-bezier.h>
#include <2geom/svg-path-parser.h>
-#include "pencil-tool.h"
#include "context-fns.h"
#include "desktop.h"
@@ -814,7 +817,7 @@ void PencilTool::_addFreehandPoint(Geom:
min = max;
}
double dezoomify_factor = 0.05 * 1000 / _desktop->current_zoom();
- double const pressure_shrunk = pressure * (max - min) + min; // C++20 -> use std::lerp()
+ double const pressure_shrunk = std::lerp(min, max, pressure);
double pressure_computed = std::abs(pressure_shrunk * dezoomify_factor);
double pressure_computed_scaled = std::abs(pressure_computed * _desktop->getDocument()->getDocumentScale().inverse()[Geom::X]);
if (p != this->p[this->_npoints - 1]) {

View File

@ -0,0 +1,136 @@
#!/usr/bin/env python3
# List all files, that depend on base_extra_modules, explicitly or implicitly.
import os
import pathlib
import re
import sys
# Search all .py files that are imported by mentioned modules.
def make_deplist(inx_list, module_list):
modules = set()
inx_regex = re.compile(rf">(.+)\.py</(dependency|command)>")
for entry in inx_list:
with open(os.path.join(".", entry), encoding="utf-8") as file:
for line in file:
match = inx_regex.search(line)
if (match and match.group(1)
and match.group(1) not in module_list):
modules.add(match.group(1))
for module in module_list.union(modules):
name = os.path.join(".", f"{module}.py")
if os.path.isfile(name):
with open(name, encoding="utf-8") as file:
for line in file:
match = re.match(r"from (.+) import", line)
if not match:
match = re.match(r"import ([^#]+).*? *", line)
if match and match.group(1):
needle = re.sub(r"as .+", "", match.group(1)).strip()
if (needle not in module_list.union(modules)
and os.path.isfile(f"{needle}.py")):
modules.add(needle)
return modules
if __name__ == "__main__":
work_dir = pathlib.Path(os.getcwd())
os.chdir(sys.argv[1])
prefix = sys.argv[2]
base_extra_modules = set(["lxml", "numpy", "scour", "xml"])
extra_modules = set()
prev_modules = base_extra_modules
while True:
prev_module_regex = rf"({'|'.join(map(re.escape, prev_modules))})"
import_regex = re.compile(rf"(import|from).* {prev_module_regex}")
next_modules = set()
# Search all .py files importing one of the mentioned modules.
for entry in pathlib.Path(".").glob("**/*.py"):
with entry.open(encoding="utf-8") as file:
for line in file:
if import_regex.search(line):
name = str(entry.as_posix())
module = name.split(os.sep, 1)[0]
if module.endswith(".py"):
module = entry.stem
if module not in next_modules:
next_modules.add(module)
prev_modules = next_modules
if extra_modules.issuperset(prev_modules):
break
extra_modules.update(prev_modules)
std_inx = set()
extra_inx = set()
# We have a complete list of .py files dependent on base_extra_modules.
# Now we need a list of .inx module descriptors.
inx_regex = re.compile(rf'({"|".join(map(re.escape, extra_modules))})\.py')
for entry in pathlib.Path(".").iterdir():
if entry.is_file() and entry.suffix == ".inx":
with entry.open(encoding="utf-8") as file:
for line in file:
if inx_regex.search(line):
extra_inx.add(entry.name)
# inx files that do not belong in extra_inx.
if entry.name not in extra_inx:
std_inx.add(entry.name)
# Now create list of .py files that should belong in the std package.
std_modules = make_deplist(std_inx, set())
# Now create list of .py files that are required by extra modules
# (If no std module needs it, then they will belong in the extra package).
extradep_modules = make_deplist(extra_inx, extra_modules)
# And now verify everything and generate final list.
exclusion_regex = re.compile(r"^(cdr|fig|.*gimp|scribus)")
std_list = work_dir / "inkscape.lst"
extra_list = work_dir / "inkscape-extensions-extra.lst"
with std_list.open("w", encoding="utf-8") as file:
for inx in std_inx:
if not exclusion_regex.match(inx):
print(f"{prefix}{inx}", file=file)
with extra_list.open("w", encoding="utf-8") as file:
for inx in extra_inx:
if not exclusion_regex.match(inx):
print(f"{prefix}{inx}", file=file)
with std_list.open("a", encoding="utf-8") as std_file, extra_list.open("a", encoding="utf-8") as extra_file:
for entry in pathlib.Path(".").iterdir():
if entry.is_file() and entry.suffix == ".py":
name = str(entry.as_posix())
if exclusion_regex.match(name):
pass
elif entry.is_file() and entry.stem in extra_modules:
print(f"{prefix}{entry.name}", file=extra_file)
elif entry.is_file() and entry.stem in std_modules:
print(f"{prefix}{entry.name}", file=std_file)
elif entry.is_file() and entry.stem in extradep_modules:
print(f"{prefix}{entry.name}", file=extra_file)
else:
print(f"ERROR: Undecided file {name}", file=sys.stderr)
elif entry.is_dir():
if entry.name in extra_modules:
print(f"{prefix}{entry.name}/", file=extra_file)
elif entry.name in std_modules:
print(f"{prefix}{entry.name}/", file=std_file)
elif entry.name in extradep_modules:
print(f"{prefix}{entry.name}/", file=extra_file)

1442
inkscape.changes Normal file

File diff suppressed because it is too large Load Diff

410
inkscape.keyring Normal file
View File

@ -0,0 +1,410 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
=v6yp
-----END PGP PUBLIC KEY BLOCK-----

261
inkscape.spec Normal file
View File

@ -0,0 +1,261 @@
#
# spec file for package inkscape
#
# Copyright (c) 2024 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
# upon. The license for this file, and modifications and additions to the
# file, is the same license as for the pristine package itself (unless the
# license for the pristine package is not an Open Source License, in which
# case the license is the MIT License). An "Open Source License" is a
# license that conforms to the Open Source Definition (Version 1.9)
# published by the Open Source Initiative.
# Please submit bugfixes or comments via https://bugs.opensuse.org/
#
%define _version 1.4_2024-10-09_e7c3feb100
Name: inkscape
Version: 1.4
Release: 0
Summary: Vector Illustration Program
License: GPL-3.0-only
URL: https://inkscape.org/
Source: https://inkscape.org/gallery/item/44615/inkscape-%{version}.tar.xz#/inkscape-%{_version}.tar.xz
# openSUSE palette file
Source1: openSUSE.gpl
Source2: inkscape-split-extensions-extra.py
Source98: https://media.inkscape.org/media/resources/sigs/inkscape-%{_version}.tar.xz.sig
Source99: https://inkscape.org/~MarcJeanmougin/gpg#/%name.keyring
BuildRequires: cmake
BuildRequires: double-conversion-devel
BuildRequires: fdupes
BuildRequires: gc-devel
%if 0%{suse_version} < 1550
BuildRequires: gcc10-c++
%else
BuildRequires: gcc-c++
%endif
BuildRequires: intltool
# boost/container_hash/hash.hpp >= 1.67
BuildRequires: libboost_filesystem-devel >= 1.67
BuildRequires: libboost_headers-devel >= 1.67
BuildRequires: libboost_stacktrace-devel >= 1.67
BuildRequires: liblcms2-devel
BuildRequires: libpoppler-glib-devel > 22.01.0
BuildRequires: libxslt-devel
BuildRequires: ninja
BuildRequires: perl
BuildRequires: pkgconfig
BuildRequires: popt-devel
BuildRequires: potrace-devel
BuildRequires: python3-devel
BuildRequires: python3-gobject-devel
BuildRequires: python3-xml
BuildRequires: readline-devel
BuildRequires: update-desktop-files
BuildRequires: pkgconfig(2geom) >= 1.4.0
BuildRequires: pkgconfig(GraphicsMagick++)
BuildRequires: pkgconfig(dbus-1)
BuildRequires: pkgconfig(dbus-glib-1)
BuildRequires: pkgconfig(gdk-3.0)
BuildRequires: pkgconfig(gdkmm-3.0)
BuildRequires: pkgconfig(glibmm-2.4)
BuildRequires: pkgconfig(gsl)
BuildRequires: pkgconfig(gspell-1)
BuildRequires: pkgconfig(gtk+-3.0)
BuildRequires: pkgconfig(gtkmm-3.0)
BuildRequires: pkgconfig(libcdr-0.1)
BuildRequires: pkgconfig(libexif)
BuildRequires: pkgconfig(libjpeg)
BuildRequires: pkgconfig(libpng)
BuildRequires: pkgconfig(librevenge-0.0)
BuildRequires: pkgconfig(libsoup-2.4)
BuildRequires: pkgconfig(libvisio-0.1)
BuildRequires: pkgconfig(libwpg-0.3)
# extensions use annotations which requires 3.7+
Requires: python(abi) >= 3.7
Requires: python3-gobject
# python3-imaging is generic for python3-Pillow
Recommends: python3-imaging
Recommends: python3-lxml
Recommends: python3-numpy
Recommends: python3-scour
Recommends: python3-xml
Obsoletes: %{name}-extensions-dia < %{version}
Obsoletes: %{name}-extensions-skencil < %{version}
%description
Inkscape is a vector graphics editor.
%package extensions-extra
Summary: Additional extensions for Inkscape
Requires: %{name} = %{version}
# ps_input.py is a wrapper around ps2pdf, which lives in ghostscript package.
Requires: ghostscript
Requires: python3-lxml
Requires: python3-numpy
Requires: python3-scour
Requires: python3-xml
Enhances: %{name}
Supplements: (%{name} and python3-lxml and python3-numpy and python3-scour and python3-xml)
%description extensions-extra
Extra extensions for Inkscape. Recommended for everybody who wants to
use Inkscape.
Inkscape is a vector graphics editor.
%package extensions-fig
Summary: Fig import extensions for Inkscape
Requires: %{name} = %{version}
Requires: %{name}-extensions-extra = %{version}
Requires: transfig
Enhances: %{name}
Supplements: (%{name} and transfig)
%description extensions-fig
Fig family (XFig, Figurine, JFig, WinFig,...) import extension for
Inkscape.
Inkscape is a vector graphics editor.
%package extensions-gimp
Summary: GIMP extensions for Inkscape
Requires: %{name} = %{version}
Requires: %{name}-extensions-extra = %{version}
Requires: gimp
Enhances: %{name}
Supplements: (%{name} and gimp)
%description extensions-gimp
The GIMP import and export extensions for Inkscape.
Inkscape is a vector graphics editor.
%package extensions-scribus
Summary: Scribus extensions for Inkscape
Requires: %{name} = %{version}
Requires: %{name}-extensions-extra = %{version}
Requires: scribus
Enhances: %{name}
Supplements: (%{name} and scribus)
%description extensions-scribus
The Scribus-based PDF export extension for Inkscape.
Inkscape is a vector graphics editor.
%lang_package
%prep
%autosetup -n %{name}-%{_version} -p1
%build
%ifarch %{arm}
export LDFLAGS+="-Wl,--no-keep-memory -Wl,--reduce-memory-overheads"
%endif
%if 0%{suse_version} < 1550
export CXX=g++-10
%endif
%cmake \
-GNinja \
-DINKSCAPE_INSTALL_LIBDIR=%{_libdir} \
-DCMAKE_SKIP_RPATH:BOOL=OFF \
-DCMAKE_SKIP_INSTALL_RPATH:BOOL=OFF \
-DWITH_MANPAGE_COMPRESSION=OFF \
-DWITH_DBUS=ON \
%{nil}
%ninja_build
%install
%ninja_install -C build
# Packaging/distribution info.
rm %{buildroot}%{_datadir}/inkscape/extensions/LICENSE.txt
# Test framework.
rm -rf %{buildroot}%{_datadir}/inkscape/extensions/.pytest_cache
# extensions/doc
rm -rf %{buildroot}%{_datadir}/inkscape/extensions/docs
install -Dpm 0644 %{SOURCE1} %{buildroot}%{_datadir}/inkscape/palettes/
%find_lang %{name} %{?no_lang_C}
sed -i -e "1 s|#! *%{_bindir}/env python|#!%{_bindir}/python3|" %{buildroot}%{_datadir}/inkscape/extensions/*.py
# Split extensions.
python3 %{SOURCE2} %{buildroot}%{_datadir}/inkscape/extensions "%%{_datadir}/inkscape/extensions/"
%fdupes %{buildroot}
%post -n %{name} -p /sbin/ldconfig
%postun -n %{name} -p /sbin/ldconfig
%files -f inkscape.lst
%{_bindir}/*
%dir %{_libdir}/inkscape
%{_libdir}/inkscape/lib%{name}_base.so
%{_libdir}/inkscape/lib%{name}_base.so.*
%{_datadir}/applications/*Inkscape.desktop
%{_datadir}/icons/hicolor/*/apps/*Inkscape.png
%{_datadir}/icons/hicolor/*/apps/*Inkscape.svg
%{_datadir}/icons/hicolor/*/apps/*Inkscape-symbolic.svg
%{_datadir}/metainfo/*Inkscape.appdata.xml
%dir %{_datadir}/inkscape/
%{_datadir}/inkscape/[cdf-z]*
%{_datadir}/inkscape/examples/
%dir %{_datadir}/inkscape/extensions/
%{_datadir}/inkscape/extensions/svg_fonts/
%{_datadir}/inkscape/extensions/*.xsl*
%{_datadir}/inkscape/extensions/colors.xml
%{_datadir}/inkscape/extensions/Poly3DObjects/
%{_datadir}/inkscape/extensions/alphabet_soup/
%{_datadir}/inkscape/extensions/inkweb.js
%{_datadir}/inkscape/extensions/jessyInk.js
%{_datadir}/inkscape/extensions/jessyInk_core_mouseHandler_noclick.js
%{_datadir}/inkscape/extensions/jessyInk_core_mouseHandler_zoomControl.js
%{_datadir}/inkscape/extensions/jessyink_video.svg
%{_datadir}/inkscape/extensions/fontfix.conf
%{_datadir}/inkscape/extensions/seamless_pattern.svg
%{_datadir}/inkscape/extensions/raster_output_jpg.svg
%dir %{_datadir}/inkscape/extensions/icons
%{_datadir}/inkscape/extensions/icons/*.svg
%{_datadir}/inkscape/attributes/
%{_datadir}/inkscape/branding/
%dir %{_datadir}/bash-completion/
%dir %{_datadir}/bash-completion/completions/
%{_datadir}/bash-completion/completions/inkscape
%{_mandir}/man1/*.1%{?ext_man}
# We can't really move the localized manpages to the lang package, since they'd
# create a conflict between the lang subpackage and bundles
%dir %{_mandir}/hr/
%dir %{_mandir}/hr/man1/
%dir %{_mandir}/ko/
%dir %{_mandir}/ko/man1/
%{_mandir}/*/man1/*.1%{?ext_man}
%files extensions-extra -f inkscape-extensions-extra.lst
%{_datadir}/inkscape/extensions/output_scour.svg
%{_datadir}/inkscape/extensions/dxf14_*.txt
%{_datadir}/inkscape/extensions/dxf_input_text_scale_factor.svg
%files extensions-fig
%{_datadir}/inkscape/extensions/fig*
%files extensions-gimp
# NOTE: export_gimp_palette* does not depend on gimp, but belongs here logically:
%{_datadir}/inkscape/extensions/*gimp*
%files extensions-scribus
%{_datadir}/inkscape/extensions/*scribus*
%files lang -f %{name}.lang
%changelog

View File

@ -0,0 +1,11 @@
diff -ur inkscape-1.3.2_2023-11-25_091e20ef0f/share/extensions/raster_output_tiff.py inkscape-1.3.2_2023-11-25_091e20ef0f_fix/share/extensions/raster_output_tiff.py
--- inkscape-1.3.2_2023-11-25_091e20ef0f/share/extensions/raster_output_tiff.py 2023-03-26 19:12:31.000000000 +0200
+++ inkscape-1.3.2_2023-11-25_091e20ef0f_fix/share/extensions/raster_output_tiff.py 2024-09-12 13:02:36.671294086 +0200
@@ -20,7 +20,6 @@
format="tiff",
compression=(self.options.compression or None),
dpi=self.img.info["dpi"],
- quality=100,
)
stream.write(tempstream.getvalue())
# TODO: Add other fields such as copyright etc.

19
openSUSE.gpl Normal file
View File

@ -0,0 +1,19 @@
GIMP Palette
Name: openSUSE
Columns: 7
#
252 177 28 Orange Light
255 255 102 Butter Light
145 208 7 Lemon Light
212 196 255 Plum Light
80 128 255 Sky Light
186 189 182 Dust Light
255 77 77 Blood Light
227 83 2 Orange
178 178 71 Butter
33 120 8 Lemon
77 68 102 Plum
0 0 116 Sky
46 52 54 Dust
140 0 0 Blood
115 186 37 SUSE Green