[PATCH] gnu: Add nuklear.

  • Open
  • quality assurance status badge
Details
3 participants
  • Antero Mejr
  • 宋文武
  • Maxime Devos
Owner
unassigned
Submitted by
Antero Mejr
Severity
normal
A
A
Antero Mejr wrote on 15 Jul 2022 16:57
(address . guix-patches@gnu.org)
20220715145735.5752-1-antero@mailbox.org
* gnu/packages/c.scm (nuklear): New variable.
---
gnu/packages/c.scm | 35 +++++++++++++++++++++++++++++++++++
1 file changed, 35 insertions(+)

Toggle diff (45 lines)
diff --git a/gnu/packages/c.scm b/gnu/packages/c.scm
index b1f68c706b..61bc1f13dc 100644
--- a/gnu/packages/c.scm
+++ b/gnu/packages/c.scm
@@ -1219,3 +1219,38 @@ (define-public utest-h
(description
"This package provides a header-only unit testing library for C/C++.")
(license license:unlicense))))
+
+(define-public nuklear
+ (package
+ (name "nuklear")
+ (version "4.9.6")
+ (home-page "https://github.com/Immediate-Mode-UI/Nuklear")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url home-page)
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "18hvrmynycv5msc20f5v4drgapbig85s67iqq6k87n9l816zi1qg"))))
+ (build-system python-build-system)
+ (arguments
+ (list #:tests? #f ;no tests
+ #:phases #~(modify-phases %standard-phases
+ (delete 'configure)
+ (replace 'build
+ (lambda _
+ (with-directory-excursion "src"
+ (invoke "./paq.sh"))))
+ (replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (install-file "nuklear.h"
+ (string-append #$output "/include")))))))
+ (synopsis "Graphical user interface toolkit written in ANSI C")
+ (description "This package provides an immediate-mode graphical user
+interface toolkit. It was designed as an embeddable user interface
+for applications and does not have any dependencies, a default render backend
+or OS window/input handling. The library is self contained in one single header
+file and can be used either in header only mode or in implementation mode.")
+ (license (list license:unlicense license:expat))))
--
2.36.1
宋文武 wrote on 5 Aug 2022 05:03
(name . Antero Mejr)(address . antero@mailbox.org)(address . 56576@debbugs.gnu.org)
874jyrz90h.fsf@envs.net
Antero Mejr <antero@mailbox.org> writes:

Toggle quote (5 lines)
> * gnu/packages/c.scm (nuklear): New variable.
> ---
> gnu/packages/c.scm | 35 +++++++++++++++++++++++++++++++++++
> 1 file changed, 35 insertions(+)

Hello, I think better put it in toolkits.scm, as imgui is there.
Toggle quote (14 lines)
>
> diff --git a/gnu/packages/c.scm b/gnu/packages/c.scm
> index b1f68c706b..61bc1f13dc 100644
> --- a/gnu/packages/c.scm
> +++ b/gnu/packages/c.scm
> @@ -1219,3 +1219,38 @@ (define-public utest-h
> (description
> "This package provides a header-only unit testing library for C/C++.")
> (license license:unlicense))))
> +
> +(define-public nuklear
> + (package
> + (name "nuklear")
> + (version "4.9.6")
4.10.1 was released yesterday, time to update!

Toggle quote (25 lines)
> + (source (origin
> + (method git-fetch)
> + (uri (git-reference
> + (url home-page)
> + (commit version)))
> + (file-name (git-file-name name version))
> + (sha256
> + (base32
> + "18hvrmynycv5msc20f5v4drgapbig85s67iqq6k87n9l816zi1qg"))))
> + (build-system python-build-system)
> + (arguments
> + (list #:tests? #f ;no tests
> + #:phases #~(modify-phases %standard-phases
> + (delete 'configure)
> + (replace 'build
> + (lambda _
> + (with-directory-excursion "src"
> + (invoke "./paq.sh"))))
> + (replace 'install
> + (lambda* (#:key outputs #:allow-other-keys)
> + (install-file "nuklear.h"
> + (string-append #$output
> "/include")))))))

How about install the html doc too?

Toggle quote (8 lines)
> + (synopsis "Graphical user interface toolkit written in ANSI C")
> + (description "This package provides an immediate-mode graphical user
> +interface toolkit. It was designed as an embeddable user interface
> +for applications and does not have any dependencies, a default render backend
> +or OS window/input handling. The library is self contained in one single header
> +file and can be used either in header only mode or in implementation mode.")
> + (license (list license:unlicense license:expat))))

Could you send an update, thank you!
A
A
Antero Mejr wrote on 7 Aug 2022 00:57
[PATCH 1/2] gnu: Add stddoc.
(address . 56576@debbugs.gnu.org)
20220806225743.422102-1-antero@mailbox.org
* gnu/packages/documentation.scm (stddoc): New variable.
---
Need this to generate Nuklear's HTML doc from source (code comments).

gnu/packages/documentation.scm | 42 ++++++++++++++++++++++++++++++++++
1 file changed, 42 insertions(+)

Toggle diff (52 lines)
diff --git a/gnu/packages/documentation.scm b/gnu/packages/documentation.scm
index 6f24149b5d..9b98db4d40 100644
--- a/gnu/packages/documentation.scm
+++ b/gnu/packages/documentation.scm
@@ -393,3 +393,45 @@ (define-public zeal
(description "Zeal is a simple offline documentation browser
inspired by Dash.")
(license gpl3+))))
+
+(define-public stddoc
+ (let ((commit "6eef9deaf2e36bae812f50e448a8012b3e5efb14"))
+ (package
+ (name "stddoc")
+ (version "1.0.2")
+ (home-page "https://github.com/r-lyeh/stddoc.c")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url home-page)
+ (commit commit)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "06phjp7wbf4x1sagxwfapgv6iyiixmijxxbg2clb48kyvjg5mlwn"))
+ (snippet #~(delete-file "stddoc.c.html"))))
+ (build-system gnu-build-system)
+ (arguments
+ (list #:tests? #f ;no tests
+ #:phases #~(modify-phases %standard-phases
+ (delete 'configure)
+ (replace 'build
+ (lambda _
+ (invoke "gcc" "-O2" "-g" "-o" "stddoc" "stddoc.c")
+ (with-input-from-file "stddoc.c"
+ (lambda _
+ (with-output-to-file "stddoc.c.html"
+ (lambda _
+ (invoke "./stddoc")))))))
+ (replace 'install
+ (lambda _
+ (install-file "stddoc"
+ (string-append #$output "/bin"))
+ (install-file "stddoc.c.html"
+ (string-append #$output
+ "/share/doc")))))))
+ (synopsis "Documentation generator for 60 programming languages")
+ (description "@code{stddoc.c} is a tiny documentation generator for 60
+programming languages. Markdeep code comments are extracted from stdin and
+printed into stdout as a HTML file.")
+ (license unlicense))))
--
2.37.1
A
A
Antero Mejr wrote on 7 Aug 2022 00:57
[PATCH 2/2] gnu: Add nuklear.
(address . 56576@debbugs.gnu.org)
20220806225743.422102-2-antero@mailbox.org
* gnu/packages/toolkits.scm (nuklear): New variable.
---
Package moved to toolkits.scm, updated to 4.10.1, installs HTML doc generated
using stddoc.

gnu/packages/toolkits.scm | 49 +++++++++++++++++++++++++++++++++++++++
1 file changed, 49 insertions(+)

Toggle diff (73 lines)
diff --git a/gnu/packages/toolkits.scm b/gnu/packages/toolkits.scm
index 3030e3aa49..79ea8068f1 100644
--- a/gnu/packages/toolkits.scm
+++ b/gnu/packages/toolkits.scm
@@ -19,6 +19,7 @@
;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
(define-module (gnu packages toolkits)
+ #:use-module (gnu packages documentation)
#:use-module (gnu packages fontutils)
#:use-module (gnu packages gl)
#:use-module (gnu packages sdl)
@@ -27,6 +28,7 @@ (define-module (gnu packages toolkits)
#:use-module (guix packages)
#:use-module (guix utils)
#:use-module (guix build-system gnu)
+ #:use-module (guix build-system python)
#:use-module (guix git-download))
(define-public imgui
@@ -141,3 +143,50 @@ (define-public imgui-1.86
(sha256
(base32
"02a7b05zrka20jhzag2jb4jl624i1m456bsv69jb9zgys2p9dv1n"))))))
+
+(define-public nuklear
+ (package
+ (name "nuklear")
+ (version "4.10.1")
+ (home-page "https://github.com/Immediate-Mode-UI/Nuklear")
+ (source (origin
+ (method git-fetch)
+ (uri (git-reference
+ (url home-page)
+ (commit version)))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32
+ "0qmaza0iiq3da3qya23znnajmv9prm6rv0nbqg58qdrl23207kar"))
+ (snippet #~(begin (delete-file "nuklear.h")
+ (delete-file "doc/index.html")))))
+ (build-system python-build-system)
+ (arguments
+ (list #:tests? #f ;no tests
+ #:phases #~(modify-phases %standard-phases
+ (delete 'configure)
+ (replace 'build
+ (lambda _
+ (with-directory-excursion "src"
+ (invoke "./paq.sh"))
+ (with-directory-excursion "doc"
+ (with-input-from-file "../nuklear.h"
+ (lambda _
+ (with-output-to-file "index.html"
+ (lambda _
+ (invoke "stddoc"))))))))
+ (replace 'install
+ (lambda* (#:key outputs #:allow-other-keys)
+ (install-file "nuklear.h"
+ (string-append #$output "/include"))
+ (install-file "doc/index.html"
+ (string-append #$output
+ "/share/doc")))))))
+ (native-inputs (list stddoc))
+ (synopsis "Graphical user interface toolkit written in ANSI C")
+ (description "This package provides an immediate-mode graphical user
+interface toolkit. It was designed as an embeddable user interface
+for applications and does not have any dependencies, a default render backend
+or OS window/input handling. The library is self contained in one single header
+file and can be used either in header only mode or in implementation mode.")
+ (license (list license:unlicense license:expat))))
--
2.37.1
M
M
Maxime Devos wrote on 7 Aug 2022 14:10
Re: [bug#56576] [PATCH 1/2] gnu: Add stddoc.
(address . iyzsong@envs.net)
3d908ca5-78a5-fc92-5d8a-5e16aee1eda5@telenet.be
On 07-08-2022 00:57, Antero Mejr via Guix-patches via wrote:
Toggle quote (1 lines)
> + (invoke "gcc" "-O2" "-g" "-o" "stddoc" "stddoc.c")
For cross-compilation, you need to use #$(cc-for-target) instead of
"gcc", otherwise it will be compiled for the wrong architecture.
Toggle quote (5 lines)
> + (with-input-from-file "stddoc.c"
> + (lambda _
> + (with-output-to-file "stddoc.c.html"
> + (lambda _
> + (invoke "./stddoc")))))))
Except when emulation is used, cross-compiled binaries cannot be run.
However, you can add 'this-package' to native-inputs (conditional on
cross-compilation, otherwise you get a loop) and run that stddoc:
(native-inputs (if (%current-target-system) (list this-package) '()))
[...]
(invoke #$(if (%current-target-system) "stddoc" "./stddoc"))
(untested!).
It includes Javascript and CSS from external sources:
Toggle quote (6 lines)
> static void stddoc( FILE *in, FILE *out ) {
>     fprintf(out, "%s\n", "<meta charset='utf-8' emacsmode='-*-
> markdown -*-'>");
>     fprintf(out, "%s\n", "<link rel='stylesheet'
> href='https://casual-effects.com/m""arkdeep/latest/apidoc.css?'>");
>
I don't think this is good, privacy-wise, could you substitute them with
a local copy?
Also, on
it looks like it forgets to quote things like &. I don't know if that's
important in this particular case but often forgetting to quote things
can be pretty bad.
(Ignoring the return value of printf also isn't ideal, but less important)
Toggle quote (3 lines)
> + (description "@code{stddoc.c} is a tiny documentation generator for 60
> +programming languages. Markdeep code comments are extracted from stdin and
> +printed into stdout as a HTML file.")
This seems misleading to me, the Markdown->HTML happens at runtime, via
the Javascript. Also, instead of mentioning the number 60, you could
refer to the Javascript package; that way, the user can check if their
language is in the list. I also don't think that the generator
stdout -> output, stdin -> input
Greetings,
Maxime
Attachment: OpenPGP_signature
?