############################################################################## # Copyright (c) 2013-2017, Lawrence Livermore National Security, LLC. # Produced at the Lawrence Livermore National Laboratory. # # This file is part of Spack. # Created by Todd Gamblin, tgamblin@llnl.gov, All rights reserved. # LLNL-CODE-647188 # # For details, see https://github.com/spack/spack # Please also see the NOTICE and LICENSE files for our notice and the LGPL. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License (as # published by the Free Software Foundation) version 2.1, February 1999. # # This program 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 terms and # conditions of the GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ############################################################################## from spack import * from glob import glob from os.path import exists, join from os import makedirs from shutil import copy class Ncurses(AutotoolsPackage): """The ncurses (new curses) library is a free software emulation of curses in System V Release 4.0, and more. It uses terminfo format, supports pads and color and multiple highlights and forms characters and function-key mapping, and has all the other SYSV-curses enhancements over BSD curses.""" homepage = "http://invisible-island.net/ncurses/ncurses.html" url = "http://ftp.gnu.org/pub/gnu/ncurses/ncurses-6.0.tar.gz" version('6.0', 'ee13d052e1ead260d7c28071f46eefb1') version('5.9', '8cb9c412e5f2d96bc6f459aa8c6282a1') variant('symlinks', default=False, description='Enables symlinks. Needed on AFS filesystem.') depends_on('pkg-config', type='build') patch('patch_gcc_5.txt', when='@6.0%gcc@5.0:') patch('sed_pgi.patch', when='@:6.0') def configure(self, spec, prefix): opts = [ 'CFLAGS={0}'.format(self.compiler.pic_flag), 'CXXFLAGS={0}'.format(self.compiler.pic_flag), '--with-shared', '--with-cxx-shared', '--enable-overwrite', '--without-ada', '--enable-pc-files', '--with-pkg-config-libdir={0}/lib/pkgconfig'.format(self.prefix) ] nwide_opts = ['--disable-widec', '--without-manpages', '--without-tests'] wide_opts = ['--enable-widec'] if '+symlinks' in self.spec: opts.append('--enable-symlinks') prefix = '--prefix={0}'.format(prefix) configure = Executable('../configure') with working_dir('build_ncurses', create=True): configure(prefix, *(opts + nwide_opts)) with working_dir('build_ncursesw', create=True): configure(prefix, *(opts + wide_opts)) def build(self, spec, prefix): with working_dir('build_ncurses'): make() with working_dir('build_ncursesw'): make() def install(self, spec, prefix): with working_dir('build_ncurses'): make('install') with working_dir('build_ncursesw'): make('install') # fix for packages like hstr that use "#include " headers = glob(join(prefix.include, '*')) for p_dir in ['ncurses', 'ncursesw']: path = join(prefix.include, p_dir) if not exists(path): makedirs(path) for header in headers: copy(header, path) @property def libs(self): return find_libraries( ['libncurses', 'libncursesw'], root=self.prefix, recurse=True)