aboutsummaryrefslogtreecommitdiff
path: root/gnu/packages/xfig.scm
blob: 2e65000eb7e3e0c6c989fd966f85efe5bc706a22 (about) (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2014 Eric Bavier <bavier@member.fsf.org>
;;; Copyright © 2014 Federico Beffa <beffa@fbengineering.ch>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu packages xfig)
  #:use-module (guix packages)
  #:use-module ((guix licenses) #:select (bsd-2))
  #:use-module (guix download)
  #:use-module (guix build-system gnu)
  #:use-module (gnu packages)
  #:use-module (gnu packages xorg)
  #:use-module (gnu packages image)
  #:use-module (gnu packages groff)
  #:use-module (gnu packages compression))

(define-public xfig
  (package
    (name "xfig")
    (version "3.2.5c")
    (source
     (origin
       (method url-fetch)
       (uri (string-append "mirror://sourceforge/mcj/mcj-source/xfig."
                           version ".full.tar.gz"))
       (sha256
        (base32
         "1yd1jclvw5w3ja4jjzr1ysbn8iklh88wq84jn9d1gavrbfbqyqpa"))))
    (build-system gnu-build-system)
    (native-inputs
     `(("imake" ,imake)
       ("makedepend" ,makedepend)
       ("groff" ,groff)))               ;for creating some doc
    (inputs
     `(("libxaw3d" ,libxaw3d)
       ;; Requires libjpeg>=9a, otherwise jmorecfg.h define an enum FALSE that
       ;; conflicts with the FALSE macro from X11/Intrinsic.h
       ("libjpeg"  ,libjpeg)
       ("libpng"   ,libpng)
       ("libxpm"   ,libxpm)
       ("libx11"   ,libx11)
       ("libxmu"   ,libxmu)
       ("libxt"    ,libxt)
       ("zlib"     ,zlib)))
    (arguments
     `(#:tests? #f
       #:phases
       (modify-phases %standard-phases
         (replace 'configure
                  (lambda* (#:key inputs outputs #:allow-other-keys)
                    (let ((imake (assoc-ref inputs "imake"))
                          (out   (assoc-ref outputs "out")))
                      (substitute* "Imakefile"
                        (("XCOMM XAPPLOADDIR = /home/user/xfig *")
                         (string-append "XAPPLOADDIR = " out ,%app-defaults-dir))
                        (("XCOMM (BINDIR = )[[:graph:]]*" _ front)
                         (string-append front out "/bin"))
                        (("(PNGLIBDIR = )[[:graph:]]*" _ front)
                         (string-append front (assoc-ref inputs "libpng") "/lib"))
                        (("(PNGINC = -I)[[:graph:]]*" _ front)
                         (string-append front (assoc-ref inputs "libpng") "/include"))
                        (("(JPEGLIBDIR = )[[:graph:]]*" _ front)
                         (string-append front (assoc-ref inputs "libjpeg") "/lib"))
                        (("(JPEGINC = -I)[[:graph:]]*" _ front)
                         (string-append front (assoc-ref inputs "libjpeg") "/include"))
                        (("(ZLIBDIR = )[[:graph:]]*" _ front)
                         (string-append front (assoc-ref inputs "zlib") "/lib"))
                        (("(XPMLIBDIR = )[[:graph:]]*" _ front)
                         (string-append front (assoc-ref inputs "libxpm") "/lib"))
                        (("(XPMINC = -I)[[:graph:]]*" _ front)
                         (string-append front (assoc-ref inputs "libxpm") "/include"))
                        (("(XFIGLIBDIR = )[[:graph:]]*" _ front)
                         (string-append front out "/lib"))
                        (("(XFIGDOCDIR = )[[:graph:]]*" _ front)
                         (string-append front out "/share/doc"))
                        (("XCOMM USEINLINE") "USEINLINE"))
                      ;; The -a argument is required in order to pick up the correct paths
                      ;; to several X header files.
                      (zero? (system* "xmkmf" "-a"))
                      ;; Reset some variables that are inherited from imake templates
                      (substitute* "Makefile"
                        ;; These imake variables somehow remain undefined
                        (("DefaultGcc2[[:graph:]]*Opt") "-O2")
                        ;; Reset a few variable defaults that are set in imake templates
                        ((imake) out)
                        (("(MANPATH = )[[:graph:]]*" _ front)
                         (string-append front out "/share/man"))
                        (("(CONFDIR = )([[:graph:]]*)" _ front default)
                         (string-append front out default))))
                    #t))
         (add-after
          'install 'install/libs
          (lambda _
            (zero? (system* "make" "install.libs"))))
         (add-after
          'install 'install/doc
          (lambda _
            (begin
              ;; The Doc/xfig_man.html file is expected by the install.html
              ;; target, but is not present in the tarball, so generate it.
              (use-modules (ice-9 popen))
              (let* ((in  (open-pipe* OPEN_READ
                                      "groff" "-mandoc" "-Thtml"
                                      "Doc/xfig.man"))
                     (out (open-output-file "Doc/xfig_man.html")))
                (begin
                  (dump-port in out)
                  (close-pipe in)
                  (close-port out)))
              (zero? (system* "make" "install.doc"))))))))
    (home-page "http://xfig.org/")
    (synopsis "Interactive drawing tool")
    (description
     "Xfig is an interactive drawing tool which runs under X Window System.
In xfig, figures may be drawn using objects such as circles, boxes, lines,
spline curves, text, etc.  It is also possible to import images in formats
such as GIF, JPEG, EPSF (PostScript), etc.  Those objects can be created,
deleted, moved or modified.  Attributes such as colors or line styles can be
selected in various ways.  For text, 35 fonts are available.")
    (license bsd-2)))

(define-public transfig
  (package
    (name "transfig")
    (version "3.2.5e")
    (source
     (origin
       (method url-fetch)
       (uri (string-append "mirror://sourceforge/mcj/mcj-source/transfig."
                           version ".tar.gz"))
       (sha256
        (base32
         "0i3p7qmg2w8qrad3pn42b0miwarql7yy0gpd49b1bpal6bqsiicf"))))
    (build-system gnu-build-system)
    (native-inputs
     `(("imake" ,imake)
       ("makedepend" ,makedepend)))
    (inputs
     `(("xfig"    ,xfig)
       ("libjpeg" ,libjpeg)
       ("libpng"  ,libpng)
       ("libxpm"  ,libxpm)
       ("libx11"  ,libx11)
       ("zlib"    ,zlib)))
    (arguments
     `(#:tests? #f
       #:phases
       (alist-replace
        'configure
        (lambda* (#:key inputs outputs #:allow-other-keys)
          (let ((imake (assoc-ref inputs "imake"))
                (out   (assoc-ref outputs "out")))
            (substitute* '("fig2dev/Imakefile"
                           "transfig/Imakefile")
              (("XCOMM (BINDIR = )[[:graph:]]*" _ front)
               (string-append front out "/bin"))
              (("XCOMM USEINLINE") "USEINLINE")
              ;; The variable name is deceptive.  The directory is used as an
              ;; installation path for bitmaps.
              (("(XFIGLIBDIR =[[:blank:]]*)[[:graph:]]*" _ front)
               (string-append front out "/lib"))
              (("(XPMLIBDIR = )[[:graph:]]*" _ front)
               (string-append front (assoc-ref inputs "libxpm") "/lib"))
              (("(XPMINC = -I)[[:graph:]]*" _ front)
               (string-append front (assoc-ref inputs "libxpm") "/include/X11"))
              (("/usr/local/lib/fig2dev") (string-append out "/lib")))
            ;; The -a argument is required in order to pick up the correct paths
            ;; to several X header files.
            (zero? (system* "xmkmf" "-a"))
            (substitute* '("Makefile"
                           "fig2dev/Makefile"
                           "transfig/Makefile")
              ;; These imake variables somehow remain undefined
              (("DefaultGcc2[[:graph:]]*Opt") "-O2")
              ;; Reset a few variable defaults that are set in imake templates
              ((imake) out)
              (("(MANPATH = )[[:graph:]]*" _ front)
               (string-append front out "/share/man"))
              (("(CONFDIR = )([[:graph:]]*)" _ front default)
               (string-append front out default)))))
        (alist-cons-after
         'install 'install/doc
         (lambda _
           (zero? (system* "make" "install.man")))
         %standard-phases))))
    (home-page "http://www.xfig.org/")
    (synopsis "Create portable LaTeX figures")
    (description
     "Transfig creates a makefile to translate figures described in Fig code
or PIC into a specified LaTeX graphics language.  PIC files are identified by
the suffix \".pic\"; Fig files can be specified either with or without the
suffix \".fig\".  Transfig also creates a TeX macro file appropriate to the
target language.")
    (license bsd-2)))
22178782d6598865e1d6a780a756dd0cb3'>services: configuration: Fix interpose implementation....* gnu/services/configuration.scm (interpose, serialize-text-config): Fix interpose implementation, move file-like object code to serialize-text-config. Signed-off-by: Oleg Pykhalov <go.wigust@gmail.com> Andrew Tropin 2021-10-09home: services: configuration: Support file-like objects....* gnu/home/services/configuration.scm (interpose): Operate only with file-like objects. (string-or-gexp?): Delete procedure. (serialize-string-or-gexp): Rename to 'serialize-file-like'. (text-config?): Call 'file-like' intead of 'string-or-gexp?'. * guix/scripts/home/import.scm: (generate-bash-module+configuration): Don't call slurp-file-gexp. * gnu/home/services/configuration.scm: Move content ... * gnu/services/configuration.scm: here. * gnu/home/services/shells.scm: Delete (gnu home services configuration). * gnu/home/services/xdg.scm: Same. * gnu/local.mk: Same. * tests/guix-home.sh: Test home-bash-service-type and extension with home-bash-extension. Oleg Pykhalov 2021-08-02services: configuration: Derive the default value from the package variable....If the type of a configuration field is a package, show the name of its package *variable* as the default value. * gnu/services/configuration.scm (generate-documentation){show-default} {package->symbol}: New nested procedures. Use them to format the field entries. Co-authored-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Xinglu Chen 2021-08-02services: configuration: Uniformize the generated documentation....Make the formatting of the generated docs more consistent with the rest of the docs in the “Services” section of the manual. * gnu/services/configuration (generate-documentation): Represent the data type documentation of a field using a DEFTP table rather than DEFTYPEVR elements. Modified-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Xinglu Chen 2021-06-29services: configuration: Allow specifying prefix for serializer names....Sometimes two configurations might have the same types for their field values, but the values might be serialized in two completely different ways (e.g. because the two programs have different configuration languages). An example of this would be the ‘serialize-boolean’ procedure in (gnu services mail) and (gnu services getmail). They both serialize a boolean value, but because the Dovecot’s configuration language has a different syntax to the configuration language for Getmail, two different procedures have to be defined. One way to workaround this would be to specify custom serializers for many fields in order to separate the serialization of the values that have the same type but serialize in different ways. This could get very tedious, especially if there are many configurations in the same module. Another way would be to move one of the configurations to its own module, like what was done with (gnu services getmail). However, this would mean that there would be multiple modules containing configurations for related programs, e.g. we have (gnu services mail) and (gnu services getmail), it doesn’t make much sense to keep the Getmail configuration in its own module. This patch will allow one to write something like this: (define-configuration foo-configuration (bar (string "bob") "Option bar.") (prefix bar-)) and the value of the ‘bar’ field would be serialized using a procedure named ‘bar-serialize-string’ instead of just ‘serialize-string’. * gnu/services/configuration.scm (define-maybe-helper): Accept ‘prefix’ argument for using serializer with custom prefix. (define-maybe): Pattern match on ‘prefix’ literal. (define-configuration-helper): Accept ‘prefix’ argument for using serializer with custom prefix. (define-configuration): Pattern match on ‘prefix’ literal. * tests/services/configuration.scm ("serialize-configuration with prefix"): New test. Signed-off-by: Ludovic Courtès <ludo@gnu.org> Xinglu Chen 2021-05-17services: configuration: Add a define-configuration/no-serialization syntax....This is added for convenience and for uniformity with the define-maybe/no-serialization syntax introduced in the previous commit. * gnu/services/configuration.scm (define-configuration/no-serialization): New syntax. Maxim Cournoyer 2021-05-17services: configuration: Add a define-maybe/no-serialization syntax....Before this change, using define-maybe along define-configuration with the no-serialization syntactic keyword would result in the following warning: warning: possibly unbound variable `VARIABLE-NAME' This change introduces the define-maybe/no-serialization variant that does away with defining a serialization helper procedure, which makes it possible to avoid the above warning. * gnu/services/configuration.scm (define-maybe/no-serialization): New syntax. (define-maybe-helper): New procedure. (define-maybe): Define syntax using the above procedure. * tests/services/configuration.scm (tests): Fix module name. (custom-number-serializer): Do not print to standard output. (maybe-number?, serialize-maybe-number): New procedures defined via the define-maybe macro. (config-with-maybe-number): New configuration. (serialize-number): New procedure. ("maybe value serialization"): New test. (maybe-string?): New procedure defined via the define-maybe/no-serialization macro. (config-with-maybe-string/no-serialization): New configuration. ("maybe value without serialization no procedure bound"): New test. Maxim Cournoyer 2021-05-08services: configuration: Export 'no-serialization' syntactic keyword....This is a followup to 3f9a12dc082b20426fc740416601b69ea1897193. * gnu/services/configuration.scm (no-serialization): New variable. Ludovic Courtès 2021-05-08services: configuration: Fix %location accessor name....The non-hygienic binding of the source location accessor was set to '-location'; in modules where multiple configurations were defined, it would cause compilation warnings such as: gnu/services/mail.scm:175:0: warning: shadows previous definition of `%-location-procedure' at gnu/services/mail.scm:165:0 * gnu/services/configuration.scm (define-configuration-helper) <id>: Add a missing #'stem argument to use the configuration name as a prefix to the location accessor identifier. Maxim Cournoyer 2021-05-08services: configuration: Allow specifying a custom serializer....In some cases, rather than globally disabling serialization, it may be more appropriate to disable or otherwise alter the serialization procedure of a specific field. In large module, multiple configurations may also exist that would need to alter the default serialization procedure, which is named after the field type. Being able to specify a per-field serialization procedure provides more flexibility. * gnu/services/configuration.scm (define-configuration): Add an optional pattern variable to allow specifying a custom serialization procedure. (define-configuration-helper) <field-serializer>: Use it to transform the syntax. (empty-serializer): New procedure. (serialize-package): Alias to ‘empty-serializer’. Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Xinglu Chen 2021-05-08services: configuration: Allow disabling serialization....Serialization is not always useful, for example when deriving command line arguments from a configuration. This change provides a way to turn it off, which removes the need to define a bunch of dummy serialization procedures. Credit goes to Andrew Gierth (RhodiumToad) from #guile for providing the solution. Thank you! * gnu/services/configuration.scm (define-configuration-helper): New procedure. (define-configuration) <no-serialization>: New syntactic keyword. Use it in a new pattern. Refactor the macro so that it makes use of the above helper procedure. Maxim Cournoyer 2021-05-08services: configuration: Avoid a compilation warning....This resolves a compilation warning introduced with commit bb716e8d9d. * gnu/services/configuration.scm (configuration->documentation): Use display to print the string instead of format. Maxim Cournoyer 2021-05-07services: configuration: Add a new helper to ease generating documentation....The original (undocumented) procedure to generate the doc has a difficult to grasp interface; add a simpler one on top of it. * gnu/services/configuration.scm (configuration->documentation): New procedure. Maxim Cournoyer 2021-05-07services: configuration: Support fields without default values....Not all fields in a configuration have a sensible default value. This changes makes it possible to omit a default value for a configuration field, requiring the user to provide a value. * gnu/services/configuration.scm (configuration-missing-field): New procedure. (define-configuration): Make default value optional. Signed-off-by: Maxim Cournoyer <maxim.cournoyer@gmail.com> Xinglu Chen