mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-25 05:48:07 -05:00
gnu: Add xsane.
* gnu/packages/scanner.scm (xsane): New public variable.
This commit is contained in:
parent
ee4db149c2
commit
a608666d74
5 changed files with 396 additions and 0 deletions
34
gnu/packages/patches/xsane-fix-memory-leak.patch
Normal file
34
gnu/packages/patches/xsane-fix-memory-leak.patch
Normal file
|
@ -0,0 +1,34 @@
|
|||
From bbd54510f0297afa2d1a81927db060cb0b791f14 Mon Sep 17 00:00:00 2001
|
||||
From: Ralph Little <littlesincanada@yahoo.co.uk>
|
||||
Date: Sun, 1 Sep 2019 17:34:19 -0700
|
||||
Subject: [PATCH] Apply opensuse upstream patch xsane_memory_leak
|
||||
|
||||
Removes completely redundant memory allocation.
|
||||
---
|
||||
src/xsane-batch-scan.c | 3 ---
|
||||
1 file changed, 3 deletions(-)
|
||||
|
||||
diff --git a/src/xsane-batch-scan.c b/src/xsane-batch-scan.c
|
||||
index 90cc0e0..e77caca 100644
|
||||
--- a/src/xsane-batch-scan.c
|
||||
+++ b/src/xsane-batch-scan.c
|
||||
@@ -680,7 +680,6 @@ static GtkWidget *xsane_batch_scan_create_list_entry(Batch_Scan_Parameters *para
|
||||
GtkWidget *list_item;
|
||||
GtkWidget *hbox;
|
||||
int size = 120;
|
||||
- char *data;
|
||||
|
||||
list_item = gtk_list_item_new();
|
||||
|
||||
@@ -688,8 +687,6 @@ static GtkWidget *xsane_batch_scan_create_list_entry(Batch_Scan_Parameters *para
|
||||
gtk_container_add(GTK_CONTAINER(list_item), hbox);
|
||||
gtk_widget_show(hbox);
|
||||
|
||||
- data = calloc(size, size);
|
||||
-
|
||||
parameters->gtk_preview = gtk_preview_new(GTK_PREVIEW_COLOR);
|
||||
gtk_preview_size(GTK_PREVIEW(parameters->gtk_preview), size, size);
|
||||
gtk_box_pack_start(GTK_BOX(hbox), parameters->gtk_preview, FALSE, FALSE, 0);
|
||||
--
|
||||
2.22.0
|
||||
|
85
gnu/packages/patches/xsane-fix-pdf-floats.patch
Normal file
85
gnu/packages/patches/xsane-fix-pdf-floats.patch
Normal file
|
@ -0,0 +1,85 @@
|
|||
From c126eea11c4ee39cbe9c0c76f920626b618b6ee9 Mon Sep 17 00:00:00 2001
|
||||
From: Ralph Little <littlesincanada@yahoo.co.uk>
|
||||
Date: Sun, 1 Sep 2019 17:03:44 -0700
|
||||
Subject: [PATCH] Apply debian upstream patch 0135-fix_pdf_floats
|
||||
|
||||
Original patch commentary:
|
||||
|
||||
Description: Fix floats in PDF and PostScript
|
||||
Set LC_NUMERIC to POSIX before printing floats when building
|
||||
PostScript or PDF output.
|
||||
Author: Julien BLACHE <jblache@debian.org>
|
||||
Forwarded: yes
|
||||
|
||||
------------
|
||||
Looks like float printing format is affected by the current locale.
|
||||
Ensures that we always get POSIX formatting of floats.
|
||||
---
|
||||
src/xsane-save.c | 19 +++++++++++++++++++
|
||||
1 file changed, 19 insertions(+)
|
||||
|
||||
diff --git a/src/xsane-save.c b/src/xsane-save.c
|
||||
index f14df05..63550cc 100644
|
||||
--- a/src/xsane-save.c
|
||||
+++ b/src/xsane-save.c
|
||||
@@ -26,6 +26,8 @@
|
||||
#include "xsane-back-gtk.h"
|
||||
#include "xsane-front-gtk.h"
|
||||
#include "xsane-save.h"
|
||||
+#include <locale.h>
|
||||
+#include <string.h>
|
||||
#include <time.h>
|
||||
#include <sys/wait.h>
|
||||
|
||||
@@ -2425,6 +2427,7 @@ static void xsane_save_ps_create_image_header(FILE *outfile,
|
||||
int flatedecode)
|
||||
{
|
||||
int depth;
|
||||
+ char *save_locale;
|
||||
|
||||
depth = image_info->depth;
|
||||
|
||||
@@ -2442,8 +2445,15 @@ static void xsane_save_ps_create_image_header(FILE *outfile,
|
||||
|
||||
fprintf(outfile, "%d rotate\n", degree);
|
||||
fprintf(outfile, "%d %d translate\n", position_left, position_bottom);
|
||||
+
|
||||
+ save_locale = strdup(setlocale(LC_NUMERIC, NULL));
|
||||
+ setlocale(LC_NUMERIC, "POSIX");
|
||||
+
|
||||
fprintf(outfile, "%f %f scale\n", width, height);
|
||||
|
||||
+ setlocale(LC_NUMERIC, save_locale);
|
||||
+ free(save_locale);
|
||||
+
|
||||
fprintf(outfile, "<<\n");
|
||||
fprintf(outfile, " /ImageType 1\n");
|
||||
fprintf(outfile, " /Width %d\n", image_info->image_width);
|
||||
@@ -3921,6 +3931,7 @@ static void xsane_save_pdf_create_page_header(FILE *outfile, struct pdf_xref *xr
|
||||
int position_left, position_bottom, box_left, box_bottom, box_right, box_top, depth;
|
||||
int left, bottom;
|
||||
float rad;
|
||||
+ char *save_locale;
|
||||
|
||||
DBG(DBG_proc, "xsane_save_pdf_create_page_header\n");
|
||||
|
||||
@@ -4035,8 +4046,16 @@ static void xsane_save_pdf_create_page_header(FILE *outfile, struct pdf_xref *xr
|
||||
|
||||
fprintf(outfile, "q\n");
|
||||
fprintf(outfile, "1 0 0 1 %d %d cm\n", position_left, position_bottom); /* translate */
|
||||
+
|
||||
+ save_locale = strdup(setlocale(LC_NUMERIC, NULL));
|
||||
+ setlocale(LC_NUMERIC, "POSIX");
|
||||
+
|
||||
fprintf(outfile, "%f %f -%f %f 0 0 cm\n", cos(rad), sin(rad), sin(rad), cos(rad)); /* rotate */
|
||||
fprintf(outfile, "%f 0 0 %f 0 0 cm\n", width, height); /* scale */
|
||||
+
|
||||
+ setlocale(LC_NUMERIC, save_locale);
|
||||
+ free(save_locale);
|
||||
+
|
||||
fprintf(outfile, "BI\n");
|
||||
fprintf(outfile, " /W %d\n", image_info->image_width);
|
||||
fprintf(outfile, " /H %d\n", image_info->image_height);
|
||||
--
|
||||
2.22.0
|
||||
|
153
gnu/packages/patches/xsane-support-ipv6.patch
Normal file
153
gnu/packages/patches/xsane-support-ipv6.patch
Normal file
|
@ -0,0 +1,153 @@
|
|||
From 62d9c172f258769e3a7540fe710e013bb39a704f Mon Sep 17 00:00:00 2001
|
||||
From: Ralph Little <littlesincanada@yahoo.co.uk>
|
||||
Date: Sat, 7 Sep 2019 12:39:45 -0700
|
||||
Subject: [PATCH] Apply opensuse upstream patch 004-ipv6-support
|
||||
|
||||
Appears to be related to this:
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=198422
|
||||
|
||||
-----
|
||||
Changes email socket connection code to use more IP version agnostic
|
||||
calls. It appears to only be used by the scan email option and
|
||||
originally comes from the RedHat IPv6 awareness program mentioned
|
||||
in the bug report.
|
||||
|
||||
In practice, I'm not sure how practical the implementation for emailing
|
||||
scans in xsane is as it does not look to support encryption, pretty
|
||||
much a given in today's world.
|
||||
---
|
||||
src/xsane-save.c | 96 +++++++++++++++++++++++++++++++-----------------
|
||||
1 file changed, 62 insertions(+), 34 deletions(-)
|
||||
|
||||
diff --git a/src/xsane-save.c b/src/xsane-save.c
|
||||
index 63550cc..ff3c459 100644
|
||||
--- a/src/xsane-save.c
|
||||
+++ b/src/xsane-save.c
|
||||
@@ -31,6 +31,8 @@
|
||||
#include <time.h>
|
||||
#include <sys/wait.h>
|
||||
|
||||
+#include <glib.h>
|
||||
+
|
||||
/* the following test is always false */
|
||||
#ifdef _native_WIN32
|
||||
# include <winsock.h>
|
||||
@@ -7540,55 +7542,81 @@ void write_email_attach_file(int fd_socket, char *boundary, FILE *infile, char *
|
||||
/* returns fd_socket if sucessfull, < 0 when error occured */
|
||||
int open_socket(char *server, int port)
|
||||
{
|
||||
- int fd_socket;
|
||||
- struct sockaddr_in sin;
|
||||
- struct hostent *he;
|
||||
+ int fd_socket, e;
|
||||
+
|
||||
+ struct addrinfo *ai_list, *ai;
|
||||
+ struct addrinfo hints;
|
||||
+ gchar *port_s;
|
||||
+ gint connected;
|
||||
+
|
||||
+ memset(&hints, '\0', sizeof(hints));
|
||||
+ hints.ai_flags = AI_ADDRCONFIG;
|
||||
+ hints.ai_socktype = SOCK_STREAM;
|
||||
+
|
||||
+ port_s = g_strdup_printf("%d", port);
|
||||
+ e = getaddrinfo(server, port_s, &hints, &ai_list);
|
||||
+ g_free(port_s);
|
||||
|
||||
- he = gethostbyname(server);
|
||||
- if (!he)
|
||||
+ if (e != 0)
|
||||
{
|
||||
- DBG(DBG_error, "open_socket: Could not get hostname of \"%s\"\n", server);
|
||||
+ DBG(DBG_error, "open_socket: Could not lookup \"%s\"\n", server);
|
||||
return -1;
|
||||
}
|
||||
- else
|
||||
+
|
||||
+ connected = 0;
|
||||
+ for (ai = ai_list; ai != NULL && !connected; ai = ai->ai_next)
|
||||
{
|
||||
- DBG(DBG_info, "open_socket: connecting to \"%s\" = %d.%d.%d.%d\n",
|
||||
- he->h_name,
|
||||
- (unsigned char) he->h_addr_list[0][0],
|
||||
- (unsigned char) he->h_addr_list[0][1],
|
||||
- (unsigned char) he->h_addr_list[0][2],
|
||||
- (unsigned char) he->h_addr_list[0][3]);
|
||||
- }
|
||||
+ gchar hostname[NI_MAXHOST];
|
||||
+ gchar hostaddr[NI_MAXHOST];
|
||||
+
|
||||
+ /* If all else fails */
|
||||
+ strncpy(hostname, "(unknown name)", NI_MAXHOST-1);
|
||||
+ strncpy(hostaddr, "(unknown address)", NI_MAXHOST-1);
|
||||
+
|
||||
+ /* Determine canonical name and IPv4/IPv6 address */
|
||||
+ (void) getnameinfo(ai->ai_addr, ai->ai_addrlen, hostname, sizeof(hostname),
|
||||
+ NULL, 0, 0);
|
||||
+ (void) getnameinfo(ai->ai_addr, ai->ai_addrlen, hostaddr, sizeof(hostaddr),
|
||||
+ NULL, 0, NI_NUMERICHOST);
|
||||
+
|
||||
+ DBG(DBG_info, "open_socket: connecting to \"%s\" (\"%s\"): %s\n",
|
||||
+ server, hostname, hostaddr);
|
||||
|
||||
- if (he->h_addrtype != AF_INET)
|
||||
- {
|
||||
- DBG(DBG_error, "open_socket: Unknown address family: %d\n", he->h_addrtype);
|
||||
- return -1;
|
||||
- }
|
||||
+ if ((ai->ai_family != AF_INET) && (ai->ai_family != AF_INET6))
|
||||
+ {
|
||||
+ DBG(DBG_error, "open_socket: Unknown address family: %d\n", ai->ai_family);
|
||||
+ continue;
|
||||
+ }
|
||||
|
||||
- fd_socket = socket(AF_INET, SOCK_STREAM, 0);
|
||||
+ fd_socket = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
|
||||
|
||||
- if (fd_socket < 0)
|
||||
- {
|
||||
- DBG(DBG_error, "open_socket: Could not create socket: %s\n", strerror(errno));
|
||||
- return -1;
|
||||
- }
|
||||
+ if (fd_socket < 0)
|
||||
+ {
|
||||
+ DBG(DBG_error, "open_socket: Could not create socket: %s\n", strerror(errno));
|
||||
+ continue;
|
||||
+ }
|
||||
|
||||
-/* setsockopt (dev->ctl, level, TCP_NODELAY, &on, sizeof (on)); */
|
||||
+ /* setsockopt (dev->ctl, level, TCP_NODELAY, &on, sizeof (on)); */
|
||||
|
||||
- sin.sin_port = htons(port);
|
||||
- sin.sin_family = AF_INET;
|
||||
- memcpy(&sin.sin_addr, he->h_addr_list[0], he->h_length);
|
||||
+ if (connect(fd_socket, ai->ai_addr, ai->ai_addrlen) != 0)
|
||||
+ {
|
||||
+ DBG(DBG_error, "open_socket: Could not connect with port %d of socket: %s\n", port, strerror(errno));
|
||||
+ continue;
|
||||
+ }
|
||||
+
|
||||
+ /* All went well */
|
||||
+ connected = 1;
|
||||
+ }
|
||||
|
||||
- if (connect(fd_socket, &sin, sizeof(sin)))
|
||||
+ if (!connected)
|
||||
{
|
||||
- DBG(DBG_error, "open_socket: Could not connect with port %d of socket: %s\n", ntohs(sin.sin_port), strerror(errno));
|
||||
- return -1;
|
||||
+ DBG(DBG_info, "open_socket: Could not connect to any address");
|
||||
+ return -1;
|
||||
}
|
||||
|
||||
- DBG(DBG_info, "open_socket: Connected with port %d\n", ntohs(sin.sin_port));
|
||||
+ DBG(DBG_info, "open_socket: Connected with port %d\n", port);
|
||||
|
||||
- return fd_socket;
|
||||
+ return fd_socket;
|
||||
}
|
||||
|
||||
/* ---------------------------------------------------------------------------------------------------------------------- */
|
||||
--
|
||||
2.22.0
|
||||
|
36
gnu/packages/patches/xsane-tighten-default-umask.patch
Normal file
36
gnu/packages/patches/xsane-tighten-default-umask.patch
Normal file
|
@ -0,0 +1,36 @@
|
|||
From 5dc1e301a165709c60c435f00ec9bb6d7d5f21f3 Mon Sep 17 00:00:00 2001
|
||||
From: Ralph Little <littlesincanada@yahoo.co.uk>
|
||||
Date: Tue, 27 Aug 2019 21:40:02 -0700
|
||||
Subject: [PATCH] Apply debian upstream patch 0160-fix_tighten_default_umask
|
||||
|
||||
Original patch commentary:
|
||||
|
||||
Description: Change default XSane umask from 0007 to 0077
|
||||
A default umask of 0007 can be mildly insecure in a multiuser environment,
|
||||
so tighten things up a bit and go with 0077 instead.
|
||||
Author: Adrien Thebo
|
||||
Bug-Debian: http://bugs.debian.org/592972
|
||||
Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/+source/xsane/+bug/611950
|
||||
|
||||
----
|
||||
As above.
|
||||
---
|
||||
src/xsane.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/xsane.h b/src/xsane.h
|
||||
index 67f06d4..fa04418 100644
|
||||
--- a/src/xsane.h
|
||||
+++ b/src/xsane.h
|
||||
@@ -104,7 +104,7 @@
|
||||
#define XSANE_DEBUG_ENVIRONMENT "XSANE_DEBUG"
|
||||
|
||||
#define XSANE_PROGRESS_BAR_MIN_DELTA_PERCENT 0.025
|
||||
-#define XSANE_DEFAULT_UMASK 0007
|
||||
+#define XSANE_DEFAULT_UMASK 0077
|
||||
#define XSANE_HOLD_TIME 200
|
||||
#define XSANE_CONTINUOUS_HOLD_TIME 10
|
||||
#define XSANE_DEFAULT_DEVICE "SANE_DEFAULT_DEVICE"
|
||||
--
|
||||
2.22.0
|
||||
|
|
@ -21,11 +21,16 @@
|
|||
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
(define-module (gnu packages scanner)
|
||||
#:use-module (gnu packages)
|
||||
#:use-module (gnu packages freedesktop)
|
||||
#:use-module (gnu packages ghostscript)
|
||||
#:use-module (gnu packages gtk)
|
||||
#:use-module (gnu packages image)
|
||||
#:use-module (gnu packages libusb)
|
||||
#:use-module (gnu packages pkg-config)
|
||||
#:use-module (guix build-system gnu)
|
||||
#:use-module (guix download)
|
||||
#:use-module (guix git-download)
|
||||
#:use-module ((guix licenses)
|
||||
#:prefix licence:)
|
||||
#:use-module (guix packages)
|
||||
|
@ -148,3 +153,86 @@ (define out (string-append (assoc-ref outputs "out")
|
|||
proving access to any raster image scanner hardware (flatbed scanner,
|
||||
hand-held scanner, video- and still-cameras, frame-grabbers, etc.). The
|
||||
package contains the library and drivers.")))
|
||||
|
||||
(define-public xsane
|
||||
(package
|
||||
(name "xsane")
|
||||
(version "0.999")
|
||||
(source
|
||||
(origin
|
||||
(method git-fetch)
|
||||
(uri (git-reference
|
||||
(url "https://gitlab.com/sane-project/frontend/xsane.git")
|
||||
(commit version)))
|
||||
(file-name (git-file-name name version))
|
||||
(sha256
|
||||
(base32 "08zvxj7i1s88ckrsqldmsrikc3g62a6p3s3i5b5x4krcfpi3vs50"))
|
||||
;; Apply some important-looking fixes. There are many more unreleased
|
||||
;; commits upstream. A 1.0 release is planned.
|
||||
(patches (search-patches "xsane-fix-memory-leak.patch"
|
||||
"xsane-fix-pdf-floats.patch"
|
||||
"xsane-support-ipv6.patch"
|
||||
"xsane-tighten-default-umask.patch"))
|
||||
(modules '((guix build utils)))
|
||||
(snippet
|
||||
'(begin
|
||||
;; Remove ancient bundled lprng code under a non-free licence. See
|
||||
;; <https://trisquel.info/en/issues/10713>, which solves the problem
|
||||
;; by replacing it with a newer (free) copy. We let the build fall
|
||||
;; back to the system version instead, which appears to work fine.
|
||||
(delete-file "lib/snprintf.c")
|
||||
(substitute* "lib/Makefile.in"
|
||||
(("snprintf\\.o ") ""))
|
||||
#t))))
|
||||
(build-system gnu-build-system)
|
||||
(arguments
|
||||
`(#:make-flags
|
||||
(list (string-append "xsanedocdir=" (assoc-ref %outputs "out")
|
||||
"/share/doc/" ,name "-" ,version))
|
||||
#:tests? #f ; no test suite
|
||||
#:phases
|
||||
(modify-phases %standard-phases
|
||||
(add-after 'unpack 'patch-invalid-dereference
|
||||
;; Fix the following compilation error with libpng:
|
||||
;; xsane-save.c: In function ‘xsane_save_png’:
|
||||
;; xsane-save.c:4913:21: error: dereferencing pointer to
|
||||
;; incomplete type ‘png_struct {aka struct png_struct_def}’
|
||||
;; if (setjmp(png_ptr->jmpbuf))
|
||||
;; ^
|
||||
(lambda _
|
||||
(substitute* "src/xsane-save.c"
|
||||
(("png_ptr->jmpbuf") "png_jmpbuf(png_ptr)"))
|
||||
#t))
|
||||
(add-after 'unpack 'use-sane-help-browser
|
||||
(lambda _
|
||||
(substitute* "src/xsane.h"
|
||||
(("netscape") (which "xdg-open")))
|
||||
#t))
|
||||
(add-after 'install 'delete-empty-/sbin
|
||||
(lambda* (#:key outputs #:allow-other-keys)
|
||||
(let ((out (assoc-ref outputs "out")))
|
||||
(rmdir (string-append out "/sbin"))
|
||||
#t))))))
|
||||
(native-inputs
|
||||
`(("pkg-config" ,pkg-config)))
|
||||
(inputs
|
||||
`(("gtk+" ,gtk+-2)
|
||||
("lcms" ,lcms)
|
||||
("libjpeg" ,libjpeg)
|
||||
("libtiff" ,libtiff)
|
||||
("sane-backends" ,sane-backends)
|
||||
|
||||
;; To open the manual from the Help menu.
|
||||
("xdg-utils" ,xdg-utils)))
|
||||
(home-page "https://gitlab.com/sane-project/frontend/xsane")
|
||||
(synopsis "Featureful graphical interface for document and image scanners")
|
||||
(description
|
||||
"XSane is a graphical interface for controlling a scanner and acquiring
|
||||
images from it. You can photocopy multi-page documents and save, fax, print,
|
||||
or e-mail your scanned images. It is highly configurable and exposes all
|
||||
device settings, letting you fine-tune the final result. It can also be used
|
||||
as a GIMP plugin to acquire images directly from a scanner.
|
||||
|
||||
XSane talks to scanners through the @acronym{SANE, Scanner Access Now Easy}
|
||||
back-end library, which supports almost all existing scanners.")
|
||||
(license licence:gpl2+)))
|
||||
|
|
Loading…
Reference in a new issue