Re: [OUTREACHY]: Integration of desktop environments into GNU Guix

2020-05-29 Thread Danny Milosavljevic
Hi Raghav,

On Fri, 29 May 2020 17:01:26 -0400
Raghav Gururajan  wrote:

> > Please if you update the actual package from upstream, mention that fact in
> > the commit log.  If the actual upstream package changes, that's a serious
> > change, right?  People might wanna know where that happens.  
> 
> Sure! I usually mention the version update as a part of * gnu/packages
> [...]. Should that be enough or do I also mention as a part of gnu: [...]?

Also right in front, like "gnu: xxx: Update to 1.2.3.".  For better or for
worse that's what the majority of our git log looks--nobody does
"[version]: Update to 1.2.3.", although it would be technically correct.

> IIRC, propagated-inputs are installed along-side the package, whereas,
> inputs are not. But I do not see any use of mentioning something in both.

I think you did that in one of the packages, though.


pgpyypDFz7eqm.pgp
Description: OpenPGP digital signature


Re: [OUTREACHY]: Integration of desktop environments into GNU Guix

2020-05-29 Thread Raghav Gururajan
@Danny

> Please find the attached patches.

Please ignore the cogl patch in previous email and use the one attached
with this email.

Regards,
RG.
From a3639116f5912fb957041c844050f1e4f3adeb45 Mon Sep 17 00:00:00 2001
From: Raghav Gururajan 
Date: Fri, 29 May 2020 17:05:50 -0400
Subject: [PATCH 4/4] gnu: cogl: Update package definition.

* gnu/packages/gnome.scm (cogl): Update package definition.
[build-system]: Change from gnu to glib-or-gtk.
[outputs]: New output 'doc'.
[arguments]<#:configure-flags>[--enable-gtk-doc]: New flag.
[--with-html-dir]: New flag.
<#:phases>['patch-docbook-xml]: New phase.
[native-inputs]: Add docbook-xml, gettext, gtk-doc and  python-wrapper.
[inputs]: Add libdrm and sdl2. Remove mesa, cairo, pango, gstreamer,
gst-plugins-base and wayland.
[propagated-inputs]: Add cairo, gstreamer, gst-plugins-base, mesa
and wayland.
[synopsis]: Modify.
---
 gnu/packages/gnome.scm | 124 +
 1 file changed, 75 insertions(+), 49 deletions(-)

diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index 54e1c940c6..a741a6a284 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -161,6 +161,7 @@
   #:use-module (gnu packages rust)
   #:use-module (gnu packages samba)
   #:use-module (gnu packages scanner)
+  #:use-module (gnu packages sdl)
   #:use-module (gnu packages selinux)
   #:use-module (gnu packages slang)
   #:use-module (gnu packages speech)
@@ -4711,70 +4712,95 @@ throughout GNOME for API documentation).")
 (source
  (origin
(method url-fetch)
-   (uri (string-append "mirror://gnome/sources/cogl/"
-   (version-major+minor version) "/"
-   "cogl-" version ".tar.xz"))
+   (uri
+(string-append "mirror://gnome/sources/cogl/"
+   (version-major+minor version) "/"
+   "cogl-" version ".tar.xz"))
(sha256
 (base32 "0x8v4n61q89qy27v824bqswpz6bmn801403w2q3pa1lcwk9ln4vd"
 ;; NOTE: mutter exports a bundled fork of cogl, so when making changes to
 ;; cogl, corresponding changes may be appropriate in mutter as well.
-(build-system gnu-build-system)
+(build-system glib-or-gtk-build-system)
+(outputs '("out" "doc"))
+(arguments
+ `(#:disallowed-references (,xorg-server-for-tests)
+   #:configure-flags
+   (list
+"--enable-cogl-gst"
+"--enable-wayland-egl-platform"
+"--enable-wayland-egl-server"
+"--enable-gtk-doc"
+(string-append "--with-html-dir="
+   (assoc-ref %outputs "doc")
+   "/share/gtk-doc/html")
+(string-append "--with-gl-libname="
+   (assoc-ref %build-inputs "mesa")
+   "/lib/libGL.so"))
+   #:phases
+   (modify-phases %standard-phases
+ (add-after 'unpack 'patch-docbook-xml
+   (lambda* (#:key inputs #:allow-other-keys)
+ (let* ((xmldoc (string-append (assoc-ref inputs "docbook-xml")
+   "/xml/dtd/docbook")))
+   (with-directory-excursion "doc/reference"
+ (substitute*
+ '("cogl/cogl-docs.xml.in"
+   "cogl/blend-strings.xml"
+   "cogl-gst/cogl-gst-docs.xml.in"
+   "cogl-2.0-experimental/cogl-2.0-experimental-docs.xml.in"
+   "cogl-2.0-experimental/blend-strings.xml")
+   (("http://.*/docbookx\\.dtd";)
+(string-append xmldoc "/docbookx.dtd"
+   #t)))
+ (add-before 'check 'start-xorg-server
+   (lambda* (#:key tests? inputs #:allow-other-keys)
+ (if tests?
+ (begin
+   ;; The test suite requires a running X server.
+   (system (format #f "~a/bin/Xvfb :1 +extension GLX &"
+   (assoc-ref inputs "xorg-server")))
+   (setenv "DISPLAY" ":1")
+   #t)
+ (format #t "test suite not run~%"))
+ #t)
 (native-inputs
- `(("glib:bin" ,glib "bin") ; for glib-mkenums
+ `(("docbook-xml" ,docbook-xml-4.1.2)
+   ("gettext" ,gettext-minimal)
+   ("glib:bin" ,glib "bin")
("gobject-introspection" ,gobject-introspection)
-   ("xorg-server" ,xorg-server-for-tests)
-   ("pkg-config" ,pkg-config)))
+   ("gtk-doc" ,gtk-doc)
+   ("pkg-config" ,pkg-config)
+   ("python-wrapper" ,python-wrapper)
+   ("xorg-server" ,xorg-server-for-tests)))
+(inputs
+ `(("libdrm" ,libdrm)))
 (propagated-inputs
- `(("glib" ,glib)
-   ("gdk-pixbuf" ,gdk-pixbuf)
+ `(("cairo" ,cairo)
+   ("glib" ,glib)
+   ("gdk-pixbuf+svg" ,gdk-pixbuf+svg)
+   ("gstreamer" ,gstreamer)
+   ("gst-plugins-base" ,gst-plugins-base)
("libx11" ,libx11)
("libxext" ,libxext)
 

Re: [OUTREACHY]: Integration of desktop environments into GNU Guix

2020-05-29 Thread Raghav Gururajan
Hi Danny!

> thanks for the patches!

:-)

> In my opinion, in patch 1 you are goading Guix to keep a reference to
> .../bin/true .
> 
> coreutils is an implicit build input anyway, so no need to do that stuff.
> 
> And if you do it, it looks as if you want it to keep a reference to coreutils
> at runtime (it doesn't, but just saying).  It looks more complicated, too.

Thanks for the tip. I will keep this mind moving forward.

> Please if you update the actual package from upstream, mention that fact in
> the commit log.  If the actual upstream package changes, that's a serious
> change, right?  People might wanna know where that happens.

Sure! I usually mention the version update as a part of * gnu/packages
[...]. Should that be enough or do I also mention as a part of gnu: [...]?

> In patch 2 could have used rename-file instead of (copy; delete).

Thanks for the tip. I will keep this mind moving forward.

> What use is having a thing both propagated-input and regular input?
> (genuinely asking)

IIRC, propagated-inputs are installed along-side the package, whereas,
inputs are not. But I do not see any use of mentioning something in both.

> Pushed to wip-desktop with minor changes (almost none of the above except
> for the (copy; delete) thing).

Thank you!

Regards,
RG.




signature.asc
Description: OpenPGP digital signature


Re: [OUTREACHY]: Integration of desktop environments into GNU Guix

2020-05-29 Thread Raghav Gururajan
@Danny

Please find the attached patches.

Regards,
RG.
From daaf04cbc2a1c9ad894fbe788e4089593d287c84 Mon Sep 17 00:00:00 2001
From: Raghav Gururajan 
Date: Fri, 29 May 2020 05:33:21 -0400
Subject: [PATCH 1/4] gnu: clutter: Update package definition.

* gnu/packages/gnome.scm (clutter) [version]: Update to 1.26.4.
[build-system]: Change from gnu to meson.
[arguments]<#:glib-or-gtk?>: New argument.
<#:tests?>: Remove argument.
<#:configure-flags>[-Dwayland_compositor]: New flag.
[--with-html-dir]: Remove flag.
<#:phases>['patch-docbook-xml]: New phase.
['patch-docbook-examples]: New phase.
['move-doc]: New phase.
['pre-check]: New phase.
[native-inputs]: Add docbook-xml, docbook-xsl, gtk-doc, perl, ruby and
xorg-server.
[inputs]: Remove eudev and libxkbcommon.
[propagated-inputs]: Add gdk-pixbuf+svg, eudev, libgudev, libinput,
libx11, libxi, libxkbcommon, pango and wayland. Remove xinput.
[home-page]: Change from http to https.
[license]: Update to lgpl2.1+.
---
 gnu/packages/gnome.scm | 108 -
 1 file changed, 74 insertions(+), 34 deletions(-)

diff --git a/gnu/packages/gnome.scm b/gnu/packages/gnome.scm
index df29ba..6608f8228b 100644
--- a/gnu/packages/gnome.scm
+++ b/gnu/packages/gnome.scm
@@ -4779,57 +4779,97 @@ without stepping on each others toes.")
 (define-public clutter
   (package
 (name "clutter")
-(version "1.26.2")
+(version "1.26.4")
 (source
  (origin
(method url-fetch)
-   (uri (string-append "mirror://gnome/sources/" name "/"
-   (version-major+minor version) "/"
-   name "-" version ".tar.xz"))
+   (uri
+(string-append "mirror://gnome/sources/" name "/"
+   (version-major+minor version) "/"
+   name "-" version ".tar.xz"))
(sha256
-(base32
- "0mif1qnrpkgxi43h7pimim6w6zwywa16ixcliw0yjm9hk0a368z7"
+(base32 "1rn4cd1an6a9dfda884aqpcwcgq8dgydpqvb19nmagw4b70zlj4b"
 ;; NOTE: mutter exports a bundled fork of clutter, so when making changes
 ;; to clutter, corresponding changes may be appropriate in mutter as well.
-(build-system gnu-build-system)
-(outputs '("out"
-   "doc"));9 MiB of gtk-doc HTML pages
+(build-system meson-build-system)
+(outputs '("out" "doc"))
+(arguments
+ `(#:glib-or-gtk? #t; To wrap binaries and/or compile schemas.
+   #:configure-flags
+   (list
+"-Dwayland_compositor=true")
+   #:phases
+   (modify-phases %standard-phases
+ (add-after 'unpack 'patch-docbook-xml
+   (lambda* (#:key inputs #:allow-other-keys)
+ (let* ((xmldoc (string-append (assoc-ref inputs "docbook-xml")
+   "/xml/dtd/docbook")))
+   (substitute* "doc/reference/clutter-docs.xml"
+ (("http://.*/docbookx\\.dtd";)
+  (string-append xmldoc "/docbookx.dtd")))
+   #t)))
+ (add-after 'unpack 'patch-cookbook-examples
+   (lambda _
+ (substitute* "doc/cookbook/meson.build"
+   (("subdir\\('examples'\\)")
+""))
+ #t))
+ (add-after 'install 'move-doc
+   (lambda* (#:key outputs #:allow-other-keys)
+ (let* ((out (assoc-ref outputs "out"))
+(doc (assoc-ref outputs "doc")))
+   (mkdir-p (string-append doc "/share"))
+   (rename-file
+(string-append out "/share/gtk-doc")
+(string-append doc "/share/gtk-doc"))
+   #t)))
+ (add-before 'check 'pre-check
+   (lambda* (#:key tests? inputs #:allow-other-keys)
+ (if tests?
+ (begin
+   ;; The test suite requires a running X server.
+   (system (format #f "~a/bin/Xvfb :1 +extension GLX &"
+   (assoc-ref inputs "xorg-server")))
+   (setenv "DISPLAY" ":1")
+   #t)
+ (format #t "test suite not run~%"))
+ #t)
 (native-inputs
- `(("glib:bin" ,glib "bin") ; for glib-genmarshal
+ `(("docbook-xml" ,docbook-xml-4.3)
+   ("docbook-xsl" ,docbook-xsl)
+   ("glib:bin" ,glib "bin")
("gobject-introspection" ,gobject-introspection)
+   ("gtk-doc" ,gtk-doc)
+   ("libxslt" ,libxslt)
+   ("perl" ,perl)
("pkg-config" ,pkg-config)
-   ("xsltproc" ,libxslt)))
+   ("ruby" ,ruby)
+   ("xorg-server" ,xorg-server-for-tests)))
 (propagated-inputs
- `(("cogl" ,cogl)
+ `(("atk" ,atk)
+   ("cogl" ,cogl)
("cairo" ,cairo)
-   ("atk" ,atk)
+   ("eudev" ,eudev)
+   ("gdk-pixbuf+svg" ,gdk-pixbuf+svg)
+   ("glib" ,glib)
("gtk+" ,gtk+)
("json-glib" ,json-glib)
-   ("glib" ,glib)
+   ("libgudev" ,libgudev)
+  

[PATCH] gnu: Add font-sarasa-gothic

2020-05-29 Thread Zhu Zihao
This patch adds Sarasa Gothic. Sarasa Gothic is based on Iosevka and Source Han
Sans, intends to make a really monospaced(inclduing CJK characters) programming
fonts. In Sarasa Gothic, a normal CJK character is same height and double width
as an ASCII character.

>From cebd1e00a8bd29a555d5b109f4aae2adea7f977f Mon Sep 17 00:00:00 2001
From: Zhu Zihao 
Date: Sat, 30 May 2020 00:40:05 +0800
Subject: [PATCH] gnu: Add font-sarasa-gothic

* gnu/packages/fonts.scm (font-sarasa-gothic): New variable
---
 gnu/packages/fonts.scm | 28 
 1 file changed, 28 insertions(+)

diff --git a/gnu/packages/fonts.scm b/gnu/packages/fonts.scm
index 21423ba..92f96b5 100644
--- a/gnu/packages/fonts.scm
+++ b/gnu/packages/fonts.scm
@@ -1251,6 +1251,34 @@ programming.  Iosevka is completely generated from its 
source code.")
  (for-each make-file-writable (find-files "." ".*"))
  #t)))
 
+(define-public font-sarasa-gothic
+  (package
+(name "font-sarasa-gothic")
+(version "0.12.6")
+(source
+ (origin
+   (method url-fetch)
+   (uri (string-append "https://github.com/be5invis/Sarasa-Gothic";
+   "/releases/download/v" version
+   "/sarasa-gothic-ttc-" version ".7z"))
+   (sha256
+(base32 "1g6k9d5lajchbhsh3g12fk5cgilyy6yw09fals9vc1f9wsqvac86"
+(build-system font-build-system)
+(arguments
+ `(#:phases (modify-phases %standard-phases
+  (replace 'unpack
+(lambda* (#:key source #:allow-other-keys)
+  (mkdir "source")
+  (chdir "source")
+  (invoke "7z" "x" source))
+(native-inputs `(("p7zip" ,(@ (gnu packages compression) p7zip
+(home-page "https://github.com/be5invis/Sarasa-Gothic";)
+(license license:silofl1.1)
+(synopsis "Sarasa Gothic / 更纱黑体 / 更紗黑體 / 更紗ゴシック / 사라사 고딕")
+(description
+ "Sarasa Gothic is based on Iosevka and Source Han Sans, most CJK 
characters
+are same height, and double width as ASCII characters.")))
+
 (define-public font-go
   (let ((commit "f03a046406d4d7fbfd4ed29f554da8f6114049fc")
 (revision "1"))
-- 
2.26.2




Re: Heads-up: “pre-push” Git hook updated

2020-05-29 Thread Christopher Baines

Ludovic Courtès  writes:

> Hi!
>
> Ludovic Courtès  skribis:
>
>> I think we should change our pre-push hook as shown below.
>
> I’ve pushed it in e65a44649e8d7698c4a888f1de625a67052520e9.
> To all committers: please do use it from now on:
>
>   cp etc/guix/pre-push .git/hooks/
>
> If you never run “make authenticate” before, the first run takes a few
> minutes.  You might want to run it before your first ‘git push’.
>
> Please report any issues, slowness, errors, unhappiness, whatever!

So, I think make authenticate dislikes the naming I use for Git remotes,
in particular I don't have an origin remote.

→ make authenticate
Compiling Scheme modules...
Authenticating Git checkout...
Authenticating d68de95 to 776409c (0 commits)...
Backtrace:
In ice-9/boot-9.scm:
  1736:10 10 (with-exception-handler _ _ #:unwind? _ # _)
In unknown file:
   9 (apply-smob/0 #)
In ice-9/boot-9.scm:
718:2  8 (call-with-prompt _ _ #)
In ice-9/eval.scm:
619:8  7 (_ #(#(#)))
   293:34  6 (_ #(#(#(#(#(#(#(#(#(#(#<…> …) …) …) …) …) …) …) …) …) …))
In guix/progress.scm:
71:36  5 (call-with-progress-reporter _ _)
In ice-9/eval.scm:
619:8  4 (_ #(#(#(#) # …) #))
   626:19  3 (_ #(#(#(#) # …) #))
   293:34  2 (_ #(#(#) # …))
In git/branch.scm:
101:8  1 (_ _ _ _)
In git/bindings.scm:
 77:2  0 (raise-git-error _)

git/bindings.scm:77:2: In procedure raise-git-error:
Git error: cannot locate remote-tracking branch 'origin/keyring'

make: *** [Makefile:5965: authenticate] Error 1


I tried renaming my savannah remote to origin, and then it seemed to
work. Any ideas?

Thanks,

Chris


signature.asc
Description: PGP signature


Re: Heads-up: hard reset of the 'staging' branch

2020-05-29 Thread Marius Bakke
Ludovic Courtès  writes:

> Hi!
>
> Marius Bakke  skribis:
>
>> I have good news and bad news.  The good news is that the new commit
>> verification infrastructure works great.  'make authenticate' will
>> verify that all commits were signed by a key that was authorized by
>> .guix-authorizations at that point in time.
>>
>> The bad news is that we need to ensure .guix-authorizations has been
>> updated on any branches that new committers/keys will be pushing to.
>> Currently the 'staging' branch has one commit
>> (8229ce3116c1f522c7157ab2dcd50dc2d765686a) signed by a
>> not-yet-authorized key (it had been authorized on 'master' by
>> d074f73aacc5a39aed0202d6e45721f53f34a8c0, but that was not yet merged to
>> 'staging' at the time).
>>
>> To fix it properly without leaving a gap where 'make authenticate' will
>> fail, we actually need to rewrite the history.  Luckily git supports
>> rebasing merges(!), and the merge we need was the next commit on that
>> branch.
>
> To be clear, it wouldn’t just “leave a gap”: all future commits would
> also be rejected.  The authentication code ensures that each commit is
> signed by one of the keys authorized in its parent commit(s).  (See the
> latest discussions at .)

Indeed, sorry for being unclear.  The gap I was referring to was based
on a hypothetical situation where we worked around this issue in
git-authenticate.scm, similar to %commits-with-known-bad-signature.

> This is a good opportunity to remind all fellow committers of the latest
> changes in that area, which are summarized here:
>
>   https://guix.gnu.org/manual/devel/en/html_node/Commit-Access.html
>
> Please take a look.
>
> SCARY WARNING:
>
>   When ‘guix pull’ runs that authentication code, which I hope will be
>   the case in a few weeks, any such mistakes means that users will not
>   be able to pull at all, so we all have to be very cautious.  If we do
>   make a mistake, we’ll have to reset the branch to a known-good state,
>   like you did.

I am really looking forward to strong authentication in 'guix pull'.
Sounds like a good excuse to make a new release!  :-)

> That said… thanks *a lot* for carrying out this rebase, Marius!  I’ve
> never done a rebase including merge commits before (sounds scary!), and
> I learned that ‘git rerere’ is not a typo.  Thumbs up!

Rebasing merges was a first for me too, and hopefully a last!  I only
learned about (and enabled) 'git rerere' recently and it has saved me a
lot of time already, mainly when a merge had to be aborted and redone.

But it's a double edged sword, no wonder it's not enabled by default.


signature.asc
Description: PGP signature


Re: Packaging ‘clang-tools-extra’ (‘clang-tidy’, etc.)

2020-05-29 Thread Ludovic Courtès
Hi,

Ludovic Courtès  skribis:

> The patch below produces a ‘clang’ package that contains
> ‘clang-tools-extra’ commands¹.
>
> The problem is the size.  Before:
>
> $ guix size /gnu/store/qxdpxbvfdxfy5dnz4haql4xlxpmb5r6b-clang-10.0.0 |tail -1
> total: 995.2 MiB
> $ guix size /gnu/store/qxdpxbvfdxfy5dnz4haql4xlxpmb5r6b-clang-10.0.0 |head -2
> store item   totalself
> /gnu/store/qxdpxbvfdxfy5dnz4haql4xlxpmb5r6b-clang-10.0.0   995.2   
> 456.5  45.9%
>
>
> After:
>
> $ guix size /gnu/store/5h3xgpg33wip2b8ccri690jp6ikbq16s-clang-10.0.0 |tail -1
> total: 1525.4 MiB
> $ guix size /gnu/store/5h3xgpg33wip2b8ccri690jp6ikbq16s-clang-10.0.0 |head -2
> store item   totalself
> /gnu/store/5h3xgpg33wip2b8ccri690jp6ikbq16s-clang-10.0.0  1525.4   
> 986.8  64.7%
>
> (How they manage to fill that much disk space, I wonder.)
>
> Any idea how to best package it?
>
> We could of course have a ‘clang-full’ package, but it seems wasteful.
> We could also have a separate output for the extra commands, but it’s
> inconvenient.  It would be ideal to have a ‘clang-tools-extra’ package
> that depends on ‘clang’, but building them separately appears to be
> impossible.

After spending an unreasonable amount of time trying to build
‘clang-tools-extra’ as a separate package, I gave up and went for the
multiple output solution in commit
77a87ad4aceed9d89d615540e0fd147e3a8b2f64.  One can now get ‘clang-tidy’
and its friends with:

  guix install clang:extra

Ludo’.



Re: Heads-up: hard reset of the 'staging' branch

2020-05-29 Thread Ludovic Courtès
Hi!

Marius Bakke  skribis:

> I have good news and bad news.  The good news is that the new commit
> verification infrastructure works great.  'make authenticate' will
> verify that all commits were signed by a key that was authorized by
> .guix-authorizations at that point in time.
>
> The bad news is that we need to ensure .guix-authorizations has been
> updated on any branches that new committers/keys will be pushing to.
> Currently the 'staging' branch has one commit
> (8229ce3116c1f522c7157ab2dcd50dc2d765686a) signed by a
> not-yet-authorized key (it had been authorized on 'master' by
> d074f73aacc5a39aed0202d6e45721f53f34a8c0, but that was not yet merged to
> 'staging' at the time).
>
> To fix it properly without leaving a gap where 'make authenticate' will
> fail, we actually need to rewrite the history.  Luckily git supports
> rebasing merges(!), and the merge we need was the next commit on that
> branch.

To be clear, it wouldn’t just “leave a gap”: all future commits would
also be rejected.  The authentication code ensures that each commit is
signed by one of the keys authorized in its parent commit(s).  (See the
latest discussions at .)

This is a good opportunity to remind all fellow committers of the latest
changes in that area, which are summarized here:

  https://guix.gnu.org/manual/devel/en/html_node/Commit-Access.html

Please take a look.

SCARY WARNING:

  When ‘guix pull’ runs that authentication code, which I hope will be
  the case in a few weeks, any such mistakes means that users will not
  be able to pull at all, so we all have to be very cautious.  If we do
  make a mistake, we’ll have to reset the branch to a known-good state,
  like you did.

That said… thanks *a lot* for carrying out this rebase, Marius!  I’ve
never done a rebase including merge commits before (sounds scary!), and
I learned that ‘git rerere’ is not a typo.  Thumbs up!

Ludo’.



Heads-up: “pre-push” Git hook updated

2020-05-29 Thread Ludovic Courtès
Hi!

Ludovic Courtès  skribis:

> I think we should change our pre-push hook as shown below.

I’ve pushed it in e65a44649e8d7698c4a888f1de625a67052520e9.
To all committers: please do use it from now on:

  cp etc/guix/pre-push .git/hooks/

If you never run “make authenticate” before, the first run takes a few
minutes.  You might want to run it before your first ‘git push’.

Please report any issues, slowness, errors, unhappiness, whatever!

Ludo’.


signature.asc
Description: PGP signature