diff options
author | Javier Cervantes <javiercvilla@gmail.com> | 2018-06-06 19:07:16 +0200 |
---|---|---|
committer | Adam J. Stewart <ajstewart426@gmail.com> | 2018-06-06 12:07:16 -0500 |
commit | 34149e9a2b7718d2e8e5d66db33d88b7f9bd9d61 (patch) | |
tree | 5c0dd782eaa20c97d9e36cfc5d1b88e8c67a69ac | |
parent | 1a27f911d35a9f0cb90cf9a36eafffbc2c195d1d (diff) | |
download | spack-34149e9a2b7718d2e8e5d66db33d88b7f9bd9d61.tar.gz spack-34149e9a2b7718d2e8e5d66db33d88b7f9bd9d61.tar.bz2 spack-34149e9a2b7718d2e8e5d66db33d88b7f9bd9d61.tar.xz spack-34149e9a2b7718d2e8e5d66db33d88b7f9bd9d61.zip |
Add new package: prng (#8396)
* Add new package: prng
* Add missing dependencies and use force_autoreconf option
* Add dependency types
3 files changed, 243 insertions, 0 deletions
diff --git a/var/spack/repos/builtin/packages/prng/package.py b/var/spack/repos/builtin/packages/prng/package.py new file mode 100644 index 0000000000..2b1cde5ce2 --- /dev/null +++ b/var/spack/repos/builtin/packages/prng/package.py @@ -0,0 +1,45 @@ +############################################################################## +# Copyright (c) 2013-2018, 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 * + + +class Prng(AutotoolsPackage): + """Pseudo-Random Number Generator library.""" + + homepage = "http://statmath.wu.ac.at/prng/" + url = "http://statmath.wu.ac.at/prng/prng-3.0.2.tar.gz" + + version('3.0.2', '80cb0870f2d18618bd2772f9e1dc1a70') + + depends_on('automake', type='build') + depends_on('autoconf', type='build') + depends_on('libtool', type='build') + depends_on('m4', type='build') + + patch('prng-3.0.2-shared.patch', when="@3.0.2") + patch('prng-3.0.2-fix-c99-inline-semantics.patch', when="@3.0.2") + + # Force the autoreconf step + force_autoreconf = True diff --git a/var/spack/repos/builtin/packages/prng/prng-3.0.2-fix-c99-inline-semantics.patch b/var/spack/repos/builtin/packages/prng/prng-3.0.2-fix-c99-inline-semantics.patch new file mode 100644 index 0000000000..c84a288d47 --- /dev/null +++ b/var/spack/repos/builtin/packages/prng/prng-3.0.2-fix-c99-inline-semantics.patch @@ -0,0 +1,146 @@ +Use portable 'static inline' semantics that work in GNU89 and C99 +See also: http://www.greenend.org.uk/rjk/tech/inline.html + +--- a/src/dicg.c ++++ b/src/dicg.c +@@ -441,7 +441,7 @@ + * Algorithm by Karin Schaber and Otmar Lendl. + * + */ +-inline prng_num prng_dicg_multiply(int k,prng_num c, prng_num d) ++prng_num prng_dicg_multiply(int k,prng_num c, prng_num d) + { + int i; + struct mtable *t; +--- a/src/external.c ++++ b/src/external.c +@@ -139,7 +139,7 @@ + * gen: Pointer to a struct prng. + * + */ +-inline prng_num prng_tt800_get_next_int(struct prng *gen) ++prng_num prng_tt800_get_next_int(struct prng *gen) + { + unsigned int y; + struct tt800_state *g; +--- a/src/icg.c ++++ b/src/icg.c +@@ -110,7 +110,7 @@ + * gen: Pointer to a struct prng. + * + */ +-inline prng_num prng_icg_get_next_int(struct prng *gen) ++prng_num prng_icg_get_next_int(struct prng *gen) + { + s_prng_num inv, current, prod; + +--- a/src/lcg.c ++++ b/src/lcg.c +@@ -111,7 +111,7 @@ + * gen: Pointer to a struct prng. + * + */ +-inline prng_num prng_lcg_get_next_int(struct prng *gen) ++prng_num prng_lcg_get_next_int(struct prng *gen) + { + s_prng_num ax, current; + +--- a/src/meicg.c ++++ b/src/meicg.c +@@ -106,7 +106,7 @@ + * gen: Pointer to a struct prng. + * + */ +-inline prng_num prng_meicg_get_next_int(struct prng *gen) ++prng_num prng_meicg_get_next_int(struct prng *gen) + { + s_prng_num an, sum, inv, n; + +--- a/src/mt19937.c ++++ b/src/mt19937.c +@@ -172,7 +172,7 @@ + * gen: Pointer to a struct prng. + * + */ +-inline prng_num prng_mt19937_get_next_int(struct prng *gen) ++prng_num prng_mt19937_get_next_int(struct prng *gen) + { + #define MT gen->data.mt19937_data.mt + #define MTI gen->data.mt19937_data.mti +--- a/src/prng.h ++++ b/src/prng.h +@@ -406,7 +406,7 @@ + /* INLINE fnk def. for mult_mod, I don't know if this works for non-GCC */ + + #ifdef __GNUC__ +-extern __inline__ prng_num mult_mod(prng_num s,struct mult_mod_struct *mm) ++static inline prng_num mult_mod(prng_num s,struct mult_mod_struct *mm) + { + s_prng_num s_tmp; + +--- a/src/qcg.c ++++ b/src/qcg.c +@@ -107,7 +107,7 @@ + * gen: Pointer to a struct prng. + * + */ +-inline prng_num prng_qcg_get_next_int(struct prng *gen) ++prng_num prng_qcg_get_next_int(struct prng *gen) + { + s_prng_num current, sum, square, q_term, l_term; + +--- a/src/support.c ++++ b/src/support.c +@@ -449,52 +449,6 @@ + } + } + +-#ifndef __cplusplus +-/* +- * Modular Multiplication. Uses the precalculated values from mult_mod_setup. +- * +- * +- * Input: +- * s An prng_num. +- * mm pointer to a struct mult_mod_struct initialized +- * by mult_mod_setup. +- * +- * Output: +- * (mm->a*s) mod mm->p +- * +- */ +-prng_num mult_mod(prng_num s,struct mult_mod_struct *mm) +-{ +-s_prng_num s_tmp; +- +-switch(mm->algorithm) +- { +- case PRNG_MM_ZERO: return(0); +- break; +- case PRNG_MM_ONE: return(s); +- break; +- case PRNG_MM_SIMPLE: return((s * mm->a) % mm->p ); +- break; +- case PRNG_MM_SCHRAGE: +- s_tmp = mm->a * ( s % mm->q ) - +- mm->r * ( s / mm->q ); +- if (s_tmp < 0) s_tmp += mm->p; +- return(s_tmp); +- break; +- case PRNG_MM_DECOMP: return(mult_mod_generic(s,mm->a,mm->p)); +- break; +-#ifdef HAVE_LONGLONG +- case PRNG_MM_LL: return(mult_mod_ll(s,mm->a,mm->p)); +- break; +-#endif +- case PRNG_MM_POW2: return((s*mm->a) & mm->mask); +- break; +- } +-/* not reached */ +-return(0); +-} +-#endif +- + + /* + * Modular Multiplication: Decomposition method (from L'Ecuyer & Cote) diff --git a/var/spack/repos/builtin/packages/prng/prng-3.0.2-shared.patch b/var/spack/repos/builtin/packages/prng/prng-3.0.2-shared.patch new file mode 100644 index 0000000000..cee8de060f --- /dev/null +++ b/var/spack/repos/builtin/packages/prng/prng-3.0.2-shared.patch @@ -0,0 +1,52 @@ +--- a/configure.ac ++++ b/configure.ac +@@ -23,6 +23,7 @@ + AC_PROG_RANLIB + AC_PROG_INSTALL + AC_PROG_LN_S ++AC_PROG_LIBTOOL + + dnl Checks for typedefs, structures, and compiler characteristics. + AC_C_CONST +@@ -39,10 +40,7 @@ + dnl Checks for library functions. + AC_CHECK_FUNCS(strtoul) + +-dnl Set flags for compiler +-if test X"$GCC" = Xyes ; then +- AC_SUBST(AM_CFLAGS,"-Wall -fomit-frame-pointer") +-fi ++AC_CHECK_LIB([m], [pow]) + + AC_CONFIG_FILES([\ + Makefile \ +--- a/examples/Makefile.am ++++ b/examples/Makefile.am +@@ -1,11 +1,11 @@ + ## Process this file with automake to produce Makefile.in + # $Id$ + +-LDADD = $(top_builddir)/src/libprng.a -lm ++LDADD = $(top_builddir)/src/libprng.la -lm + + INCLUDES = -I$(top_srcdir)/src + +-noinst_PROGRAMS = pairs tuples ++check_PROGRAMS = pairs tuples + + # clean backup files + CLEANFILES = *~ +--- a/src/Makefile.am ++++ b/src/Makefile.am +@@ -3,9 +3,9 @@ + + INCLUDES = + +-lib_LIBRARIES = libprng.a ++lib_LTLIBRARIES = libprng.la + +-libprng_a_SOURCES = \ ++libprng_la_SOURCES = \ + prng.c \ + dicg.c \ + eicg.c \ |