netpbm: new package (#24063)
This commit is contained in:
parent
0e3f7ce0ed
commit
09d89ef265
1 changed files with 208 additions and 0 deletions
208
var/spack/repos/builtin/packages/netpbm/package.py
Normal file
208
var/spack/repos/builtin/packages/netpbm/package.py
Normal file
|
@ -0,0 +1,208 @@
|
|||
# Copyright 2013-2021 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 shutil import copyfile
|
||||
|
||||
from spack import *
|
||||
|
||||
|
||||
class Netpbm(MakefilePackage):
|
||||
"""Netpbm - graphics tools and converters.
|
||||
|
||||
A whole bunch of utilities for primitive manipulation of
|
||||
graphic images. Wide array of converters
|
||||
from one graphics format to another. E.g.
|
||||
from g3 fax format to jpeg. Many basic graphics
|
||||
editing tools such as magnifying and cropping.
|
||||
"""
|
||||
|
||||
homepage = "http://netpbm.sourceforge.net"
|
||||
url = "https://sourceforge.net/projects/netpbm/files/super_stable/10.73.35/netpbm-10.73.35.tgz"
|
||||
|
||||
maintainers = ['cessenat']
|
||||
|
||||
version('10.73.35', sha256='628dbe8490bc43557813d1fedb2720dfdca0b80dd3f2364cb2a45c6ff04b0f18')
|
||||
|
||||
# As a default we wish to commpile absolutely everything at once.
|
||||
# Variants are there in case compilation was a problem.
|
||||
variant('all', default=True,
|
||||
description='Enable all 3rd party libs')
|
||||
variant('X', default=True,
|
||||
description='Enable X libs for pamx')
|
||||
variant('fiasco', default=True,
|
||||
description='Enable fiasco')
|
||||
variant('ghostscript', default=True,
|
||||
description='Ghostscript is called by pstopnm and pbmtextps')
|
||||
# netpbm can provide it's own jasper and jbig : better use the ones
|
||||
# from their respective spack package.
|
||||
variant('builtin', default=False,
|
||||
description='Use builtin libs instead of 3rd party')
|
||||
|
||||
depends_on('perl', type=('build', 'run'))
|
||||
depends_on('gmake', type='build')
|
||||
depends_on('pkgconfig', type='build')
|
||||
|
||||
# These are general pre-requisites indicated at
|
||||
# http://netpbm.sourceforge.net/prereq.html
|
||||
depends_on('zlib')
|
||||
depends_on('jpeg')
|
||||
depends_on('libtiff')
|
||||
depends_on('libpng')
|
||||
# Ghostscript is called as "gs" by pstopnm and pbmtextps
|
||||
depends_on('ghostscript', type='run', when='+ghostscript')
|
||||
|
||||
# These are the optional libs:
|
||||
# svgtopam : http://netpbm.sourceforge.net/prereq.html
|
||||
# homebrew also sets a dependancy to libxml2
|
||||
# https://github.com/Homebrew/homebrew-core/blob/HEAD/Formula/netpbm.rb
|
||||
depends_on('libxml2', when='+all')
|
||||
# thinkjettopbm : http://netpbm.sourceforge.net/prereq.html
|
||||
depends_on('flex', type=('build', 'run'), when='+all')
|
||||
# https://formulae.brew.sh/formula/netpbm
|
||||
depends_on('jasper', when='+all~builtin')
|
||||
# Only Mac Ports sets a dependency to jbig
|
||||
# https://ports.macports.org/port/netpbm/summary
|
||||
depends_on('jbigkit', when='+all~builtin')
|
||||
|
||||
# pamx depends on X11 libraries:
|
||||
depends_on('libx11', when='+X')
|
||||
|
||||
def edit(self, spec, prefix):
|
||||
# We better not run the interactive perl script buildtools/configure.pl
|
||||
# as explained by Todd in
|
||||
# https://groups.google.com/g/spack/c/8sEqDkZ68DA/m/wpbB0wHaAgAJ
|
||||
# so we will mimic the perl script bahavior
|
||||
copyfile('config.mk.in', 'config.mk')
|
||||
config = []
|
||||
config.append('####Lines above were copied from config.mk.in')
|
||||
# This is already the default but we make sure it is set
|
||||
# even for a dev release for instance:
|
||||
config.append('DEFAULT_TARGET = nonmerge')
|
||||
config.append('NETPBMLIBSUFFIX={0}'.format(dso_suffix))
|
||||
if 'platform=darwin' in spec:
|
||||
config.append('NETPBMLIBTYPE=dylib')
|
||||
args = ['-dynamiclib', '-Wl,-install_name']
|
||||
args.append('-Wl,@rpath/libnetpbm.dylib')
|
||||
config.append('LDSHLIB = {0}'.format(' '.join(args)))
|
||||
elif 'platform=cygwin' in spec:
|
||||
config.append('NETPBMLIBTYPE=dll')
|
||||
config.append('NETPBMLIBSUFFIX=dll')
|
||||
config.append('SHLIBPREFIXLIST=cyg lib')
|
||||
config.append('EXE = .exe')
|
||||
config.append('SYMLINK = cp')
|
||||
config.append('LINKERISCOMPILER = Y')
|
||||
config.append('WINICON_OBJECT = $(BUILDDIR)/icon/netpbm.o')
|
||||
config.append('DLLVER=$(NETPBM_MAJOR_RELEASE)')
|
||||
args = ['-shared', '-Wl,--image-base=0x10000000']
|
||||
args.append('-Wl,--enable-auto-import')
|
||||
config.append('LDSHLIB = {0}'.format(' '.join(args)))
|
||||
else:
|
||||
config.append('NETPBMLIBTYPE=unixshared')
|
||||
|
||||
if '~fiasco' in spec:
|
||||
config.append('BUILD_FIASCO = N')
|
||||
|
||||
config.append('STATICLIB_TOO=Y')
|
||||
config.append('OMIT_NETWORK = Y')
|
||||
config.append('CC = {0}'.format(spack_cc))
|
||||
config.append('LD = {0}'.format(spack_cc))
|
||||
config.append('CC_FOR_BUILD = {0}'.format(spack_cc))
|
||||
config.append('LD_FOR_BUILD = {0}'.format(spack_cc))
|
||||
config.append('CFLAGS_SHLIB += {0}'.format(self.compiler.cc_pic_flag))
|
||||
if '%gcc' in spec or 'platform=darwin' in spec:
|
||||
cflags = ['-O3', '-ffast-math', '-pedantic', '-Wall', '-Wimplicit']
|
||||
cflags.extend(['-Wno-uninitialized', '-Wmissing-declarations'])
|
||||
cflags.extend(['-Wwrite-strings', '-Wmissing-prototypes'])
|
||||
cflags.extend(['-Wundef', '-Wno-unknown-pragmas'])
|
||||
if 'platform=darwin' in spec:
|
||||
# https://github.com/macports/macports-ports/blob/master/graphics/netpbm/Portfile
|
||||
cflags.append('-D_DARWIN_C_SOURCE')
|
||||
# http://www.linuxquestions.org/questions/linux-from-scratch-13/can't-compile-luit-xorg-applications-4175476308/
|
||||
# cflags.append('-U_XOPEN_SOURCE')
|
||||
# http://www.mistys-internet.website/blog/blog/2013/10/19/no-cpp-precomp-the-compiler-flag-that-time-forgot/
|
||||
# cflags.append('-no-cpp-precomp')
|
||||
config.append('CFLAGS = {0}'.format(' '.join(cflags)))
|
||||
config.append('CFLAGS_SHLIB += -fno-common')
|
||||
|
||||
if '+all' in spec:
|
||||
flex = join_path(spec['flex'].prefix.bin, 'flex')
|
||||
if os.path.exists(flex):
|
||||
config.append('LEX = {0}'.format(flex))
|
||||
|
||||
config.append('TIFFLIB={0}'.format(
|
||||
spec['libtiff'].libs.ld_flags))
|
||||
config.append('TIFFHDR_DIR={0}'.format(
|
||||
spec['libtiff'].headers.directories[0]))
|
||||
config.append('PNGLIB={0}'.format(
|
||||
spec['libpng'].libs.ld_flags))
|
||||
config.append('PNGHDR_DIR={0}'.format(
|
||||
spec['libpng'].headers.directories[0]))
|
||||
config.append('JPEGLIB={0}'.format(
|
||||
spec['jpeg'].libs.ld_flags))
|
||||
config.append('JPEGHDR_DIR={0}'.format(
|
||||
spec['jpeg'].headers.directories[0]))
|
||||
if '+all' in spec and '+builtin' not in spec:
|
||||
config.append('JASPERLIB={0}'.format(
|
||||
spec['jasper'].libs.ld_flags))
|
||||
config.append('JASPERHDR_DIR={0}'.format(
|
||||
spec['jasper'].headers.directories[0]))
|
||||
config.append('JBIGLIB={0}'.format(
|
||||
spec['jbigkit'].libs.ld_flags))
|
||||
config.append('JBIGHDR_DIR={0}'.format(
|
||||
spec['jbigkit'].headers.directories[0]))
|
||||
if '+X' in spec:
|
||||
pkg_config = which('pkg-config')
|
||||
if not pkg_config('x11', '--exists'):
|
||||
config.append('X11LIB={0}'.format(
|
||||
spec['libx11'].libs.ld_flags))
|
||||
config.append('X11HDR_DIR={0}'.format(
|
||||
spec['libx11'].headers.directories[0]))
|
||||
config.append('ZLIB={0}'.format(spec['zlib'].libs.ld_flags))
|
||||
config.append('NETPBM_DOCURL = http://netpbm.sourceforge.net/doc/')
|
||||
if spec.target.family == 'x86_64':
|
||||
config.append('WANT_SSE = Y')
|
||||
|
||||
with open('config.mk', 'a') as mk:
|
||||
mk.write('\n'.join(config))
|
||||
|
||||
def build(self, spec, prefix):
|
||||
make()
|
||||
|
||||
def install(self, spec, prefix):
|
||||
bdir = join_path(self.build_directory, 'build')
|
||||
make('package', 'pkgdir={0}'.format(bdir), parallel=False)
|
||||
# Same as before build, mimic the interactive
|
||||
# perl script buildtools/installnetpbm.pl
|
||||
mkdirp(prefix.bin)
|
||||
mkdirp(prefix.lib)
|
||||
mkdirp(prefix.include)
|
||||
mkdirp(prefix.man)
|
||||
with working_dir('build'):
|
||||
install_tree("bin", prefix.bin)
|
||||
install_tree("lib", prefix.lib)
|
||||
install_tree("misc", prefix.lib)
|
||||
install_tree("include", prefix.include)
|
||||
install_tree(join_path("include", "netpbm"), prefix.include)
|
||||
if os.path.exists('man'):
|
||||
install_tree("man", prefix.man)
|
||||
# As a default a static lib is also created.
|
||||
# We could put that as an option
|
||||
staticlib = join_path('staticlink', 'libnetpbm.a')
|
||||
if os.path.exists(staticlib):
|
||||
install(staticlib, prefix.lib)
|
||||
else:
|
||||
staticlib = join_path('link', 'libnetpbm.a')
|
||||
if os.path.exists(staticlib):
|
||||
install(staticlib, prefix.lib)
|
||||
# Make the .pc as done by installnetpbm.pl
|
||||
src = join_path('buildtools', 'pkgconfig_template')
|
||||
pdir = join_path(prefix.lib, 'pkgconfig')
|
||||
mkdirp(pdir)
|
||||
copyfile(src, join_path(pdir, 'netpbm.pc'))
|
||||
pfic = FileFilter(join_path(pdir, 'netpbm.pc'))
|
||||
pfic.filter('@VERSION@', 'Netpbm {0}'.format(str(spec.version)))
|
||||
pfic.filter('@LINKDIR@', '{0}'.format(prefix.lib))
|
||||
pfic.filter('@INCLUDEDIR@', '{0}'.format(prefix.include))
|
Loading…
Reference in a new issue