summaryrefslogtreecommitdiff
path: root/var/spack/repos/builtin/packages/pdftk/package.py
blob: 6b6484df539be89eaf1a9a9f253812ea25d575bb (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
# Copyright 2013-2024 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)

import os

from spack.package import *


class Pdftk(MakefilePackage):
    """PDFtk Server is a command-line tool for working with PDFs. It is
    commonly used for client-side scripting or server-side processing
    of PDFs."""

    homepage = "https://www.pdflabs.com/tools/pdftk-server"
    url = "https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/pdftk-2.02-src.zip"
    # Alternative download locations:
    # https://sources.debian.org/src/pdftk/
    # http://archive.ubuntu.com/ubuntu/pool/universe/p/pdftk/pdftk_2.02.orig.tar.gz

    maintainers("citibeth")

    version("2.02", sha256="118f6a25fd3acaafb58824dce6f97cdc07e56050e666b90e4c4ef426ea37b8c1")

    depends_on("eclipse-gcj-parser", type="build")

    # Only takes effect in phases not overridden here
    build_directory = "pdftk"

    # https://www.pdflabs.com/docs/install-pdftk-on-redhat-or-centos/
    def edit(self, spec, prefix):
        # ------ Fix install directory in main Makefile
        makefile = FileFilter(join_path("pdftk", "Makefile.Base"))
        makefile.filter("/usr/local/bin", spec.prefix.bin)

        # ------ Create new config file
        compiler = self.compiler
        gcc_base = os.path.split(os.path.split(compiler.cxx)[0])[0]
        gcc_version = compiler.version

        cppflags = (
            "-DPATH_DELIM=0x2f",
            "-DASK_ABOUT_WARNINGS=false",
            "-DUNBLOCK_SIGNALS",
            "-fdollars-in-identifiers",
        )
        cxxflags = ("-Wall", "-Wextra", "-Weffc++", "-O2")
        gcjflags = ("-Wall", "-Wextra", "-O2")
        vars = [
            ("VERSUFF", "-%s" % gcc_version),
            ("CXX", compiler.cxx),
            ("GCJ", spec["eclipse-gcj-parser"].package.gcj),
            ("GCJH", join_path(gcc_base, "bin", "gcjh")),
            ("GJAR", join_path(gcc_base, "bin", "gjar")),
            ("LIBGCJ", join_path(gcc_base, "share", "java", "libgcj-{0}.jar".format(gcc_version))),
            ("AR", "ar"),
            ("RM", "rm"),
            ("ARFLAGS", "rs"),
            ("RMFLAGS", "-vf"),
            ("CPPFLAGS", " ".join(cppflags)),
            ("CXXFLAGS", " ".join(cxxflags)),
            ("GCJFLAGS", " ".join(gcjflags)),
            ("GCJHFLAGS", "-force"),
            ("LDLIBS", "-lgcj"),
        ]
        with open(join_path("pdftk", "Makefile.Spack"), "w") as mk:
            for var, val in vars:
                mk.write("export {0}={1}\n".format(var, str(val)))
            mk.write("include Makefile.Base\n")

    def build(self, spec, prefix):
        compiler = self.compiler
        gcc_base = os.path.split(os.path.split(compiler.cxx)[0])[0]
        env["PATH"] = join_path(gcc_base, "bin") + ":" + env["PATH"]
        with working_dir(self.build_directory):
            make("-f", "Makefile.Spack", parallel=False)

    def install(self, spec, prefix):
        mkdirp(self.spec.prefix.bin)
        with working_dir(self.build_directory):
            make("-f", "Makefile.Spack", "install", parallel=False)