summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/w3m/package.py
blob: a94a0a79acff7c56bf20ebe8899b0ab0647f5eee (plain) (blame)
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
# Copyright 2013-2023 Lawrence Livermore National Security, LLC and other
# Spack Project Developers. See the top-level COPYRIGHT file for details.
#
# SPDX-License-Identifier: (Apache-2.0 OR MIT)

from spack.package import *


class W3m(AutotoolsPackage):
    """
    w3m is a text-based web browser as well as a pager like `more' or `less'.
    With w3m you can browse web pages through a terminal emulator window (xterm,
    rxvt or something like that). Moreover, w3m can be used as a text formatting
    tool which typesets HTML into plain text.
    """

    # The main w3m project is not active anymore, but distributions still keep
    # and maintain it:
    # https://sourceforge.net/p/w3m/support-requests/17/
    # What source should distro packagers use for their w3m packages?
    # Feel free to use Debian's branch as you need.
    # Currently, Arch and Ubuntu (and Debian derivatives) use Debian's branch.
    # Also, Gentoo, Fedora and openSUSE switched to Debian's branch.
    homepage = "http://w3m.sourceforge.net/index.en.html"
    url = "https://downloads.sourceforge.net/project/w3m/w3m/w3m-0.5.3/w3m-0.5.3.tar.gz"
    maintainers("ronin_gw")

    license("MIT")

    version("0.5.3", sha256="e994d263f2fd2c22febfbe45103526e00145a7674a0fda79c822b97c2770a9e3")

    # mandatory dependency
    depends_on("bdw-gc")

    # termlib
    variant(
        "termlib",
        default="ncurses",
        description="select termlib",
        values=("ncurses", "termcap", "none"),
        multi=False,
    )
    depends_on("termcap", when="termlib=termcap")
    depends_on("ncurses+termlib", when="termlib=ncurses")

    # https support
    variant("https", default=True, description="support https protocol")
    depends_on("openssl@:1.0.2u", when="+https")

    # X11 support
    variant("image", default=True, description="enable image")
    depends_on("libx11", when="+image")

    # inline image support
    variant(
        "imagelib",
        default="imlib2",
        description="select imagelib",
        values=("gdk-pixbuf", "imlib2"),
        multi=False,
    )
    depends_on("gdk-pixbuf@2:+x11", when="imagelib=gdk-pixbuf +image")
    depends_on("imlib2@1.0.5:", when="imagelib=imlib2 +image")

    # fix for modern libraries
    patch("fix_redef.patch")
    patch("fix_gc.patch")

    def patch(self):
        # w3m is not developed since 2012, everybody is doing this:
        # https://www.google.com/search?q=USE_EGD+w3m
        filter_file("#define USE_EGD", "#undef USE_EGD", "config.h.in")

    def _add_arg_for_variant(self, args, variant, choices):
        for avail_lib in choices:
            if self.spec.variants[variant].value == avail_lib:
                args.append("--with-{0}={1}".format(variant, avail_lib))
                return

    def configure_args(self):
        args = ["ac_cv_search_gettext=no", "--enable-unicode"]

        self._add_arg_for_variant(args, "termlib", ("termcap", "ncurses"))
        if "+image" in self.spec:
            args.append("--enable-image")
            self._add_arg_for_variant(args, "imagelib", ("gdk-pixbuf", "imlib2"))

        return args

    def setup_build_environment(self, env):
        if self.spec.variants["termlib"].value == "ncurses":
            env.append_flags("LDFLAGS", "-ltinfo")
            env.append_flags("LDFLAGS", "-lncurses")
        if "+image" in self.spec:
            env.append_flags("LDFLAGS", "-lX11")

    # parallel build causes build failure
    parallel = False

    def build(self, spec, prefix):
        make("NLSTARGET=scripts/w3mman")

    def install(self, spec, prefix):
        make("NLSTARGET=scripts/w3mman", "install")