~obeancomputer/BLSPE

f05dacb33b640edb2b780791b699ee6e4eebc3f4 — ocsmit 8 months ago 1e5b4b4 main
Update sampler and add initial R interface

Sampler code in src has been updated and split apart a bit.

An initial test interface for R is under r/
23 files changed, 3646 insertions(+), 558 deletions(-)

A r/.lintr
A r/DESCRIPTION
A r/NAMESPACE
A r/R/blsp_r.R
A r/cleanup
A r/configure
A r/configure.ac
A r/src/.gitignore
A r/src/Makevars.in
A r/src/blsp_r.c
A r/src/blsp_r.h
A r/src/init.c
A r/testing.R
A src/blsp.c
A src/blsp.h
A src/blsp_data.c
R src/{ts_data.h => blsp_data.h}
A src/blsp_math.c
A src/blsp_math.h
A src/sampler.c
A src/sampler.h
D src/sampler1.c
D src/ts_data.c
A r/.lintr => r/.lintr +7 -0
@@ 0,0 1,7 @@
linters: linters_with_defaults(
  line_length_linter = line_length_linter(80),
  object_name_linter = NULL,
  object_length_linter = object_length_linter(40),
  object_usage_linter = NULL,
  cyclocomp_linter = cyclocomp_linter(26)
  )

A r/DESCRIPTION => r/DESCRIPTION +12 -0
@@ 0,0 1,12 @@
Package: blspR
Title: What the Package Does (One Line, Title Case)
Version: 0.0.0.9000
Authors@R:
    person("First", "Last", , "first.last@example.com", role = c("aut", "cre"),
	   comment = c(ORCID = "YOUR-ORCID-ID"))
Description: What the package does (one paragraph).
License: `use_mit_license()`, `use_gpl3_license()` or friends to pick a
    license
Encoding: UTF-8
Roxygen: list(markdown = TRUE)
RoxygenNote: 7.2.3

A r/NAMESPACE => r/NAMESPACE +8 -0
@@ 0,0 1,8 @@
# Generated by roxygen2: do not edit by hand

# Load dynamic libraries (shared object files)
useDynLib(blspR, .registration = TRUE, .fixes = "C_")


# Export functions defined in R code
export("blsp_test")

A r/R/blsp_r.R => r/R/blsp_r.R +4 -0
@@ 0,0 1,4 @@
blsp_test <- function(a, b, c) {
  result <- .Call(C_generate_data, a, b, c)#, PACKAGE = "blspR")
  return(result)
}

A r/cleanup => r/cleanup +5 -0
@@ 0,0 1,5 @@
#!/bin/sh

rm -f config.*
rm -f src/Makevars
rm -rf autom4te.cache

A r/configure => r/configure +2935 -0
@@ 0,0 1,2935 @@
#! /bin/sh
# Guess values for system-dependent variables and create Makefiles.
# Generated by GNU Autoconf 2.71 for blspR 0.0.1.
#
#
# Copyright (C) 1992-1996, 1998-2017, 2020-2021 Free Software Foundation,
# Inc.
#
#
# This configure script is free software; the Free Software Foundation
# gives unlimited permission to copy, distribute and modify it.
## -------------------- ##
## M4sh Initialization. ##
## -------------------- ##

# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
as_nop=:
if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
then :
  emulate sh
  NULLCMD=:
  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
  # is contrary to our usage.  Disable this feature.
  alias -g '${1+"$@"}'='"$@"'
  setopt NO_GLOB_SUBST
else $as_nop
  case `(set -o) 2>/dev/null` in #(
  *posix*) :
    set -o posix ;; #(
  *) :
     ;;
esac
fi



# Reset variables that may have inherited troublesome values from
# the environment.

# IFS needs to be set, to space, tab, and newline, in precisely that order.
# (If _AS_PATH_WALK were called with IFS unset, it would have the
# side effect of setting IFS to empty, thus disabling word splitting.)
# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
IFS=" ""	$as_nl"

PS1='$ '
PS2='> '
PS4='+ '

# Ensure predictable behavior from utilities with locale-dependent output.
LC_ALL=C
export LC_ALL
LANGUAGE=C
export LANGUAGE

# We cannot yet rely on "unset" to work, but we need these variables
# to be unset--not just set to an empty or harmless value--now, to
# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh).  This construct
# also avoids known problems related to "unset" and subshell syntax
# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
do eval test \${$as_var+y} \
  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
done

# Ensure that fds 0, 1, and 2 are open.
if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
if (exec 3>&2)            ; then :; else exec 2>/dev/null; fi

# The user is always right.
if ${PATH_SEPARATOR+false} :; then
  PATH_SEPARATOR=:
  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
      PATH_SEPARATOR=';'
  }
fi


# Find who we are.  Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
  *[\\/]* ) as_myself=$0 ;;
  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
  IFS=$as_save_IFS
  case $as_dir in #(((
    '') as_dir=./ ;;
    */) ;;
    *) as_dir=$as_dir/ ;;
  esac
    test -r "$as_dir$0" && as_myself=$as_dir$0 && break
  done
IFS=$as_save_IFS

     ;;
esac
# We did not find ourselves, most probably we were run as `sh COMMAND'
# in which case we are not to be found in the path.
if test "x$as_myself" = x; then
  as_myself=$0
fi
if test ! -f "$as_myself"; then
  printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
  exit 1
fi


# Use a proper internal environment variable to ensure we don't fall
  # into an infinite loop, continuously re-executing ourselves.
  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
    _as_can_reexec=no; export _as_can_reexec;
    # We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
# works around shells that cannot unset nonexistent variables.
# Preserve -v and -x to the replacement shell.
BASH_ENV=/dev/null
ENV=/dev/null
(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
case $- in # ((((
  *v*x* | *x*v* ) as_opts=-vx ;;
  *v* ) as_opts=-v ;;
  *x* ) as_opts=-x ;;
  * ) as_opts= ;;
esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
exit 255
  fi
  # We don't want this to propagate to other subprocesses.
          { _as_can_reexec=; unset _as_can_reexec;}
if test "x$CONFIG_SHELL" = x; then
  as_bourne_compatible="as_nop=:
if test \${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
then :
  emulate sh
  NULLCMD=:
  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
  # is contrary to our usage.  Disable this feature.
  alias -g '\${1+\"\$@\"}'='\"\$@\"'
  setopt NO_GLOB_SUBST
else \$as_nop
  case \`(set -o) 2>/dev/null\` in #(
  *posix*) :
    set -o posix ;; #(
  *) :
     ;;
esac
fi
"
  as_required="as_fn_return () { (exit \$1); }
as_fn_success () { as_fn_return 0; }
as_fn_failure () { as_fn_return 1; }
as_fn_ret_success () { return 0; }
as_fn_ret_failure () { return 1; }

exitcode=0
as_fn_success || { exitcode=1; echo as_fn_success failed.; }
as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
if ( set x; as_fn_ret_success y && test x = \"\$1\" )
then :

else \$as_nop
  exitcode=1; echo positional parameters were not saved.
fi
test x\$exitcode = x0 || exit 1
blah=\$(echo \$(echo blah))
test x\"\$blah\" = xblah || exit 1
test -x / || exit 1"
  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1"
  if (eval "$as_required") 2>/dev/null
then :
  as_have_required=yes
else $as_nop
  as_have_required=no
fi
  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null
then :

else $as_nop
  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
as_found=false
for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
do
  IFS=$as_save_IFS
  case $as_dir in #(((
    '') as_dir=./ ;;
    */) ;;
    *) as_dir=$as_dir/ ;;
  esac
  as_found=:
  case $as_dir in #(
	 /*)
	   for as_base in sh bash ksh sh5; do
	     # Try only shells that exist, to save several forks.
	     as_shell=$as_dir$as_base
	     if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
		    as_run=a "$as_shell" -c "$as_bourne_compatible""$as_required" 2>/dev/null
then :
  CONFIG_SHELL=$as_shell as_have_required=yes
		   if as_run=a "$as_shell" -c "$as_bourne_compatible""$as_suggested" 2>/dev/null
then :
  break 2
fi
fi
	   done;;
       esac
  as_found=false
done
IFS=$as_save_IFS
if $as_found
then :

else $as_nop
  if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
	      as_run=a "$SHELL" -c "$as_bourne_compatible""$as_required" 2>/dev/null
then :
  CONFIG_SHELL=$SHELL as_have_required=yes
fi
fi


      if test "x$CONFIG_SHELL" != x
then :
  export CONFIG_SHELL
             # We cannot yet assume a decent shell, so we have to provide a
# neutralization value for shells without unset; and this also
# works around shells that cannot unset nonexistent variables.
# Preserve -v and -x to the replacement shell.
BASH_ENV=/dev/null
ENV=/dev/null
(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
case $- in # ((((
  *v*x* | *x*v* ) as_opts=-vx ;;
  *v* ) as_opts=-v ;;
  *x* ) as_opts=-x ;;
  * ) as_opts= ;;
esac
exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
# Admittedly, this is quite paranoid, since all the known shells bail
# out after a failed `exec'.
printf "%s\n" "$0: could not re-execute with $CONFIG_SHELL" >&2
exit 255
fi

    if test x$as_have_required = xno
then :
  printf "%s\n" "$0: This script requires a shell more modern than all"
  printf "%s\n" "$0: the shells that I found on your system."
  if test ${ZSH_VERSION+y} ; then
    printf "%s\n" "$0: In particular, zsh $ZSH_VERSION has bugs and should"
    printf "%s\n" "$0: be upgraded to zsh 4.3.4 or later."
  else
    printf "%s\n" "$0: Please tell bug-autoconf@gnu.org about your system,
$0: including any error possibly output before this
$0: message. Then install a modern shell, or manually run
$0: the script under such a shell if you do have one."
  fi
  exit 1
fi
fi
fi
SHELL=${CONFIG_SHELL-/bin/sh}
export SHELL
# Unset more variables known to interfere with behavior of common tools.
CLICOLOR_FORCE= GREP_OPTIONS=
unset CLICOLOR_FORCE GREP_OPTIONS

## --------------------- ##
## M4sh Shell Functions. ##
## --------------------- ##
# as_fn_unset VAR
# ---------------
# Portably unset VAR.
as_fn_unset ()
{
  { eval $1=; unset $1;}
}
as_unset=as_fn_unset


# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
as_fn_set_status ()
{
  return $1
} # as_fn_set_status

# as_fn_exit STATUS
# -----------------
# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
as_fn_exit ()
{
  set +e
  as_fn_set_status $1
  exit $1
} # as_fn_exit
# as_fn_nop
# ---------
# Do nothing but, unlike ":", preserve the value of $?.
as_fn_nop ()
{
  return $?
}
as_nop=as_fn_nop

# as_fn_mkdir_p
# -------------
# Create "$as_dir" as a directory, including parents if necessary.
as_fn_mkdir_p ()
{

  case $as_dir in #(
  -*) as_dir=./$as_dir;;
  esac
  test -d "$as_dir" || eval $as_mkdir_p || {
    as_dirs=
    while :; do
      case $as_dir in #(
      *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
      *) as_qdir=$as_dir;;
      esac
      as_dirs="'$as_qdir' $as_dirs"
      as_dir=`$as_dirname -- "$as_dir" ||
$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
	 X"$as_dir" : 'X\(//\)[^/]' \| \
	 X"$as_dir" : 'X\(//\)$' \| \
	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
printf "%s\n" X"$as_dir" |
    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)[^/].*/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`
      test -d "$as_dir" && break
    done
    test -z "$as_dirs" || eval "mkdir $as_dirs"
  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"


} # as_fn_mkdir_p

# as_fn_executable_p FILE
# -----------------------
# Test if FILE is an executable regular file.
as_fn_executable_p ()
{
  test -f "$1" && test -x "$1"
} # as_fn_executable_p
# as_fn_append VAR VALUE
# ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
then :
  eval 'as_fn_append ()
  {
    eval $1+=\$2
  }'
else $as_nop
  as_fn_append ()
  {
    eval $1=\$$1\$2
  }
fi # as_fn_append

# as_fn_arith ARG...
# ------------------
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
then :
  eval 'as_fn_arith ()
  {
    as_val=$(( $* ))
  }'
else $as_nop
  as_fn_arith ()
  {
    as_val=`expr "$@" || test $? -eq 1`
  }
fi # as_fn_arith

# as_fn_nop
# ---------
# Do nothing but, unlike ":", preserve the value of $?.
as_fn_nop ()
{
  return $?
}
as_nop=as_fn_nop

# as_fn_error STATUS ERROR [LINENO LOG_FD]
# ----------------------------------------
# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
# script with STATUS, using 1 if that was 0.
as_fn_error ()
{
  as_status=$1; test $as_status -eq 0 && as_status=1
  if test "$4"; then
    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
    printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
  fi
  printf "%s\n" "$as_me: error: $2" >&2
  as_fn_exit $as_status
} # as_fn_error

if expr a : '\(a\)' >/dev/null 2>&1 &&
   test "X`expr 00001 : '.*\(...\)'`" = X001; then
  as_expr=expr
else
  as_expr=false
fi

if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
  as_basename=basename
else
  as_basename=false
fi

if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
  as_dirname=dirname
else
  as_dirname=false
fi

as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
	 X"$0" : 'X\(//\)$' \| \
	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
printf "%s\n" X/"$0" |
    sed '/^.*\/\([^/][^/]*\)\/*$/{
	    s//\1/
	    q
	  }
	  /^X\/\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\/\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`

# Avoid depending upon Character Ranges.
as_cr_letters='abcdefghijklmnopqrstuvwxyz'
as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
as_cr_Letters=$as_cr_letters$as_cr_LETTERS
as_cr_digits='0123456789'
as_cr_alnum=$as_cr_Letters$as_cr_digits


  as_lineno_1=$LINENO as_lineno_1a=$LINENO
  as_lineno_2=$LINENO as_lineno_2a=$LINENO
  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
  sed -n '
    p
    /[$]LINENO/=
  ' <$as_myself |
    sed '
      s/[$]LINENO.*/&-/
      t lineno
      b
      :lineno
      N
      :loop
      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
      t loop
      s/-\n.*//
    ' >$as_me.lineno &&
  chmod +x "$as_me.lineno" ||
    { printf "%s\n" "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }

  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
  # already done that, so ensure we don't try to do so again and fall
  # in an infinite loop.  This has already happened in practice.
  _as_can_reexec=no; export _as_can_reexec
  # Don't try to exec as it changes $[0], causing all sort of problems
  # (the dirname of $[0] is not the place where we might find the
  # original and so on.  Autoconf is especially sensitive to this).
  . "./$as_me.lineno"
  # Exit status is that of the last command.
  exit
}


# Determine whether it's possible to make 'echo' print without a newline.
# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
  case `echo 'xy\c'` in
  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
  xy)  ECHO_C='\c';;
  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
       ECHO_T='	';;
  esac;;
*)
  ECHO_N='-n';;
esac

# For backward compatibility with old third-party macros, we provide
# the shell variables $as_echo and $as_echo_n.  New code should use
# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
as_echo='printf %s\n'
as_echo_n='printf %s'


rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
  rm -f conf$$.dir/conf$$.file
else
  rm -f conf$$.dir
  mkdir conf$$.dir 2>/dev/null
fi
if (echo >conf$$.file) 2>/dev/null; then
  if ln -s conf$$.file conf$$ 2>/dev/null; then
    as_ln_s='ln -s'
    # ... but there are two gotchas:
    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
    # In both cases, we have to default to `cp -pR'.
    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
      as_ln_s='cp -pR'
  elif ln conf$$.file conf$$ 2>/dev/null; then
    as_ln_s=ln
  else
    as_ln_s='cp -pR'
  fi
else
  as_ln_s='cp -pR'
fi
rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
rmdir conf$$.dir 2>/dev/null

if mkdir -p . 2>/dev/null; then
  as_mkdir_p='mkdir -p "$as_dir"'
else
  test -d ./-p && rmdir ./-p
  as_mkdir_p=false
fi

as_test_x='test -x'
as_executable_p=as_fn_executable_p

# Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"

# Sed expression to map a string onto a valid variable name.
as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"


test -n "$DJDIR" || exec 7<&0 </dev/null
exec 6>&1

# Name of the host.
# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
# so uname gets run too.
ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`

#
# Initializations.
#
ac_default_prefix=/usr/local
ac_clean_files=
ac_config_libobj_dir=.
LIBOBJS=
cross_compiling=no
subdirs=
MFLAGS=
MAKEFLAGS=

# Identity of this package.
PACKAGE_NAME='blspR'
PACKAGE_TARNAME='blspr'
PACKAGE_VERSION='0.0.1'
PACKAGE_STRING='blspR 0.0.1'
PACKAGE_BUGREPORT=''
PACKAGE_URL=''

ac_subst_vars='LTLIBOBJS
LIBOBJS
GSL_LIBS
GSL_CFLAGS
GSL_CONFIG
target_alias
host_alias
build_alias
LIBS
ECHO_T
ECHO_N
ECHO_C
DEFS
mandir
localedir
libdir
psdir
pdfdir
dvidir
htmldir
infodir
docdir
oldincludedir
includedir
runstatedir
localstatedir
sharedstatedir
sysconfdir
datadir
datarootdir
libexecdir
sbindir
bindir
program_transform_name
prefix
exec_prefix
PACKAGE_URL
PACKAGE_BUGREPORT
PACKAGE_STRING
PACKAGE_VERSION
PACKAGE_TARNAME
PACKAGE_NAME
PATH_SEPARATOR
SHELL'
ac_subst_files=''
ac_user_opts='
enable_option_checking
'
      ac_precious_vars='build_alias
host_alias
target_alias'


# Initialize some variables set by options.
ac_init_help=
ac_init_version=false
ac_unrecognized_opts=
ac_unrecognized_sep=
# The variables have the same names as the options, with
# dashes changed to underlines.
cache_file=/dev/null
exec_prefix=NONE
no_create=
no_recursion=
prefix=NONE
program_prefix=NONE
program_suffix=NONE
program_transform_name=s,x,x,
silent=
site=
srcdir=
verbose=
x_includes=NONE
x_libraries=NONE

# Installation directory options.
# These are left unexpanded so users can "make install exec_prefix=/foo"
# and all the variables that are supposed to be based on exec_prefix
# by default will actually change.
# Use braces instead of parens because sh, perl, etc. also accept them.
# (The list follows the same order as the GNU Coding Standards.)
bindir='${exec_prefix}/bin'
sbindir='${exec_prefix}/sbin'
libexecdir='${exec_prefix}/libexec'
datarootdir='${prefix}/share'
datadir='${datarootdir}'
sysconfdir='${prefix}/etc'
sharedstatedir='${prefix}/com'
localstatedir='${prefix}/var'
runstatedir='${localstatedir}/run'
includedir='${prefix}/include'
oldincludedir='/usr/include'
docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
infodir='${datarootdir}/info'
htmldir='${docdir}'
dvidir='${docdir}'
pdfdir='${docdir}'
psdir='${docdir}'
libdir='${exec_prefix}/lib'
localedir='${datarootdir}/locale'
mandir='${datarootdir}/man'

ac_prev=
ac_dashdash=
for ac_option
do
  # If the previous option needs an argument, assign it.
  if test -n "$ac_prev"; then
    eval $ac_prev=\$ac_option
    ac_prev=
    continue
  fi

  case $ac_option in
  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
  *=)   ac_optarg= ;;
  *)    ac_optarg=yes ;;
  esac

  case $ac_dashdash$ac_option in
  --)
    ac_dashdash=yes ;;

  -bindir | --bindir | --bindi | --bind | --bin | --bi)
    ac_prev=bindir ;;
  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
    bindir=$ac_optarg ;;

  -build | --build | --buil | --bui | --bu)
    ac_prev=build_alias ;;
  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
    build_alias=$ac_optarg ;;

  -cache-file | --cache-file | --cache-fil | --cache-fi \
  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
    ac_prev=cache_file ;;
  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
    cache_file=$ac_optarg ;;

  --config-cache | -C)
    cache_file=config.cache ;;

  -datadir | --datadir | --datadi | --datad)
    ac_prev=datadir ;;
  -datadir=* | --datadir=* | --datadi=* | --datad=*)
    datadir=$ac_optarg ;;

  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
  | --dataroo | --dataro | --datar)
    ac_prev=datarootdir ;;
  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
    datarootdir=$ac_optarg ;;

  -disable-* | --disable-*)
    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
    # Reject names that are not valid shell variable names.
    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
      as_fn_error $? "invalid feature name: \`$ac_useropt'"
    ac_useropt_orig=$ac_useropt
    ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
    case $ac_user_opts in
      *"
"enable_$ac_useropt"
"*) ;;
      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
	 ac_unrecognized_sep=', ';;
    esac
    eval enable_$ac_useropt=no ;;

  -docdir | --docdir | --docdi | --doc | --do)
    ac_prev=docdir ;;
  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
    docdir=$ac_optarg ;;

  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
    ac_prev=dvidir ;;
  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
    dvidir=$ac_optarg ;;

  -enable-* | --enable-*)
    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
    # Reject names that are not valid shell variable names.
    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
      as_fn_error $? "invalid feature name: \`$ac_useropt'"
    ac_useropt_orig=$ac_useropt
    ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
    case $ac_user_opts in
      *"
"enable_$ac_useropt"
"*) ;;
      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
	 ac_unrecognized_sep=', ';;
    esac
    eval enable_$ac_useropt=\$ac_optarg ;;

  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
  | --exec | --exe | --ex)
    ac_prev=exec_prefix ;;
  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
  | --exec=* | --exe=* | --ex=*)
    exec_prefix=$ac_optarg ;;

  -gas | --gas | --ga | --g)
    # Obsolete; use --with-gas.
    with_gas=yes ;;

  -help | --help | --hel | --he | -h)
    ac_init_help=long ;;
  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
    ac_init_help=recursive ;;
  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
    ac_init_help=short ;;

  -host | --host | --hos | --ho)
    ac_prev=host_alias ;;
  -host=* | --host=* | --hos=* | --ho=*)
    host_alias=$ac_optarg ;;

  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
    ac_prev=htmldir ;;
  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
  | --ht=*)
    htmldir=$ac_optarg ;;

  -includedir | --includedir | --includedi | --included | --include \
  | --includ | --inclu | --incl | --inc)
    ac_prev=includedir ;;
  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
  | --includ=* | --inclu=* | --incl=* | --inc=*)
    includedir=$ac_optarg ;;

  -infodir | --infodir | --infodi | --infod | --info | --inf)
    ac_prev=infodir ;;
  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
    infodir=$ac_optarg ;;

  -libdir | --libdir | --libdi | --libd)
    ac_prev=libdir ;;
  -libdir=* | --libdir=* | --libdi=* | --libd=*)
    libdir=$ac_optarg ;;

  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
  | --libexe | --libex | --libe)
    ac_prev=libexecdir ;;
  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
  | --libexe=* | --libex=* | --libe=*)
    libexecdir=$ac_optarg ;;

  -localedir | --localedir | --localedi | --localed | --locale)
    ac_prev=localedir ;;
  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
    localedir=$ac_optarg ;;

  -localstatedir | --localstatedir | --localstatedi | --localstated \
  | --localstate | --localstat | --localsta | --localst | --locals)
    ac_prev=localstatedir ;;
  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
    localstatedir=$ac_optarg ;;

  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
    ac_prev=mandir ;;
  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
    mandir=$ac_optarg ;;

  -nfp | --nfp | --nf)
    # Obsolete; use --without-fp.
    with_fp=no ;;

  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
  | --no-cr | --no-c | -n)
    no_create=yes ;;

  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
    no_recursion=yes ;;

  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
  | --oldin | --oldi | --old | --ol | --o)
    ac_prev=oldincludedir ;;
  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
    oldincludedir=$ac_optarg ;;

  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
    ac_prev=prefix ;;
  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
    prefix=$ac_optarg ;;

  -program-prefix | --program-prefix | --program-prefi | --program-pref \
  | --program-pre | --program-pr | --program-p)
    ac_prev=program_prefix ;;
  -program-prefix=* | --program-prefix=* | --program-prefi=* \
  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
    program_prefix=$ac_optarg ;;

  -program-suffix | --program-suffix | --program-suffi | --program-suff \
  | --program-suf | --program-su | --program-s)
    ac_prev=program_suffix ;;
  -program-suffix=* | --program-suffix=* | --program-suffi=* \
  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
    program_suffix=$ac_optarg ;;

  -program-transform-name | --program-transform-name \
  | --program-transform-nam | --program-transform-na \
  | --program-transform-n | --program-transform- \
  | --program-transform | --program-transfor \
  | --program-transfo | --program-transf \
  | --program-trans | --program-tran \
  | --progr-tra | --program-tr | --program-t)
    ac_prev=program_transform_name ;;
  -program-transform-name=* | --program-transform-name=* \
  | --program-transform-nam=* | --program-transform-na=* \
  | --program-transform-n=* | --program-transform-=* \
  | --program-transform=* | --program-transfor=* \
  | --program-transfo=* | --program-transf=* \
  | --program-trans=* | --program-tran=* \
  | --progr-tra=* | --program-tr=* | --program-t=*)
    program_transform_name=$ac_optarg ;;

  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
    ac_prev=pdfdir ;;
  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
    pdfdir=$ac_optarg ;;

  -psdir | --psdir | --psdi | --psd | --ps)
    ac_prev=psdir ;;
  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
    psdir=$ac_optarg ;;

  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
  | -silent | --silent | --silen | --sile | --sil)
    silent=yes ;;

  -runstatedir | --runstatedir | --runstatedi | --runstated \
  | --runstate | --runstat | --runsta | --runst | --runs \
  | --run | --ru | --r)
    ac_prev=runstatedir ;;
  -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \
  | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \
  | --run=* | --ru=* | --r=*)
    runstatedir=$ac_optarg ;;

  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
    ac_prev=sbindir ;;
  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
  | --sbi=* | --sb=*)
    sbindir=$ac_optarg ;;

  -sharedstatedir | --sharedstatedir | --sharedstatedi \
  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
  | --sharedst | --shareds | --shared | --share | --shar \
  | --sha | --sh)
    ac_prev=sharedstatedir ;;
  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
  | --sha=* | --sh=*)
    sharedstatedir=$ac_optarg ;;

  -site | --site | --sit)
    ac_prev=site ;;
  -site=* | --site=* | --sit=*)
    site=$ac_optarg ;;

  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
    ac_prev=srcdir ;;
  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
    srcdir=$ac_optarg ;;

  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
  | --syscon | --sysco | --sysc | --sys | --sy)
    ac_prev=sysconfdir ;;
  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
    sysconfdir=$ac_optarg ;;

  -target | --target | --targe | --targ | --tar | --ta | --t)
    ac_prev=target_alias ;;
  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
    target_alias=$ac_optarg ;;

  -v | -verbose | --verbose | --verbos | --verbo | --verb)
    verbose=yes ;;

  -version | --version | --versio | --versi | --vers | -V)
    ac_init_version=: ;;

  -with-* | --with-*)
    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
    # Reject names that are not valid shell variable names.
    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
      as_fn_error $? "invalid package name: \`$ac_useropt'"
    ac_useropt_orig=$ac_useropt
    ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
    case $ac_user_opts in
      *"
"with_$ac_useropt"
"*) ;;
      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
	 ac_unrecognized_sep=', ';;
    esac
    eval with_$ac_useropt=\$ac_optarg ;;

  -without-* | --without-*)
    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
    # Reject names that are not valid shell variable names.
    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
      as_fn_error $? "invalid package name: \`$ac_useropt'"
    ac_useropt_orig=$ac_useropt
    ac_useropt=`printf "%s\n" "$ac_useropt" | sed 's/[-+.]/_/g'`
    case $ac_user_opts in
      *"
"with_$ac_useropt"
"*) ;;
      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
	 ac_unrecognized_sep=', ';;
    esac
    eval with_$ac_useropt=no ;;

  --x)
    # Obsolete; use --with-x.
    with_x=yes ;;

  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
  | --x-incl | --x-inc | --x-in | --x-i)
    ac_prev=x_includes ;;
  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
    x_includes=$ac_optarg ;;

  -x-libraries | --x-libraries | --x-librarie | --x-librari \
  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
    ac_prev=x_libraries ;;
  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
    x_libraries=$ac_optarg ;;

  -*) as_fn_error $? "unrecognized option: \`$ac_option'
Try \`$0 --help' for more information"
    ;;

  *=*)
    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
    # Reject names that are not valid shell variable names.
    case $ac_envvar in #(
      '' | [0-9]* | *[!_$as_cr_alnum]* )
      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
    esac
    eval $ac_envvar=\$ac_optarg
    export $ac_envvar ;;

  *)
    # FIXME: should be removed in autoconf 3.0.
    printf "%s\n" "$as_me: WARNING: you should use --build, --host, --target" >&2
    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
      printf "%s\n" "$as_me: WARNING: invalid host type: $ac_option" >&2
    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
    ;;

  esac
done

if test -n "$ac_prev"; then
  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
  as_fn_error $? "missing argument to $ac_option"
fi

if test -n "$ac_unrecognized_opts"; then
  case $enable_option_checking in
    no) ;;
    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
    *)     printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
  esac
fi

# Check all directory arguments for consistency.
for ac_var in	exec_prefix prefix bindir sbindir libexecdir datarootdir \
		datadir sysconfdir sharedstatedir localstatedir includedir \
		oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
		libdir localedir mandir runstatedir
do
  eval ac_val=\$$ac_var
  # Remove trailing slashes.
  case $ac_val in
    */ )
      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
      eval $ac_var=\$ac_val;;
  esac
  # Be sure to have absolute directory names.
  case $ac_val in
    [\\/$]* | ?:[\\/]* )  continue;;
    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
  esac
  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
done

# There might be people who depend on the old broken behavior: `$host'
# used to hold the argument of --host etc.
# FIXME: To remove some day.
build=$build_alias
host=$host_alias
target=$target_alias

# FIXME: To remove some day.
if test "x$host_alias" != x; then
  if test "x$build_alias" = x; then
    cross_compiling=maybe
  elif test "x$build_alias" != "x$host_alias"; then
    cross_compiling=yes
  fi
fi

ac_tool_prefix=
test -n "$host_alias" && ac_tool_prefix=$host_alias-

test "$silent" = yes && exec 6>/dev/null


ac_pwd=`pwd` && test -n "$ac_pwd" &&
ac_ls_di=`ls -di .` &&
ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
  as_fn_error $? "working directory cannot be determined"
test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
  as_fn_error $? "pwd does not report name of working directory"


# Find the source files, if location was not specified.
if test -z "$srcdir"; then
  ac_srcdir_defaulted=yes
  # Try the directory containing this script, then the parent directory.
  ac_confdir=`$as_dirname -- "$as_myself" ||
$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
	 X"$as_myself" : 'X\(//\)[^/]' \| \
	 X"$as_myself" : 'X\(//\)$' \| \
	 X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
printf "%s\n" X"$as_myself" |
    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)[^/].*/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`
  srcdir=$ac_confdir
  if test ! -r "$srcdir/$ac_unique_file"; then
    srcdir=..
  fi
else
  ac_srcdir_defaulted=no
fi
if test ! -r "$srcdir/$ac_unique_file"; then
  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
fi
ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
ac_abs_confdir=`(
	cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
	pwd)`
# When building in place, set srcdir=.
if test "$ac_abs_confdir" = "$ac_pwd"; then
  srcdir=.
fi
# Remove unnecessary trailing slashes from srcdir.
# Double slashes in file names in object file debugging info
# mess up M-x gdb in Emacs.
case $srcdir in
*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
esac
for ac_var in $ac_precious_vars; do
  eval ac_env_${ac_var}_set=\${${ac_var}+set}
  eval ac_env_${ac_var}_value=\$${ac_var}
  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
  eval ac_cv_env_${ac_var}_value=\$${ac_var}
done

#
# Report the --help message.
#
if test "$ac_init_help" = "long"; then
  # Omit some internal or obsolete options to make the list less imposing.
  # This message is too long to be a string in the A/UX 3.1 sh.
  cat <<_ACEOF
\`configure' configures blspR 0.0.1 to adapt to many kinds of systems.

Usage: $0 [OPTION]... [VAR=VALUE]...

To assign environment variables (e.g., CC, CFLAGS...), specify them as
VAR=VALUE.  See below for descriptions of some of the useful variables.

Defaults for the options are specified in brackets.

Configuration:
  -h, --help              display this help and exit
      --help=short        display options specific to this package
      --help=recursive    display the short help of all the included packages
  -V, --version           display version information and exit
  -q, --quiet, --silent   do not print \`checking ...' messages
      --cache-file=FILE   cache test results in FILE [disabled]
  -C, --config-cache      alias for \`--cache-file=config.cache'
  -n, --no-create         do not create output files
      --srcdir=DIR        find the sources in DIR [configure dir or \`..']

Installation directories:
  --prefix=PREFIX         install architecture-independent files in PREFIX
                          [$ac_default_prefix]
  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
                          [PREFIX]

By default, \`make install' will install all the files in
\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
an installation prefix other than \`$ac_default_prefix' using \`--prefix',
for instance \`--prefix=\$HOME'.

For better control, use the options below.

Fine tuning of the installation directories:
  --bindir=DIR            user executables [EPREFIX/bin]
  --sbindir=DIR           system admin executables [EPREFIX/sbin]
  --libexecdir=DIR        program executables [EPREFIX/libexec]
  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
  --runstatedir=DIR       modifiable per-process data [LOCALSTATEDIR/run]
  --libdir=DIR            object code libraries [EPREFIX/lib]
  --includedir=DIR        C header files [PREFIX/include]
  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
  --infodir=DIR           info documentation [DATAROOTDIR/info]
  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
  --mandir=DIR            man documentation [DATAROOTDIR/man]
  --docdir=DIR            documentation root [DATAROOTDIR/doc/blspr]
  --htmldir=DIR           html documentation [DOCDIR]
  --dvidir=DIR            dvi documentation [DOCDIR]
  --pdfdir=DIR            pdf documentation [DOCDIR]
  --psdir=DIR             ps documentation [DOCDIR]
_ACEOF

  cat <<\_ACEOF
_ACEOF
fi

if test -n "$ac_init_help"; then
  case $ac_init_help in
     short | recursive ) echo "Configuration of blspR 0.0.1:";;
   esac
  cat <<\_ACEOF

Report bugs to the package provider.
_ACEOF
ac_status=$?
fi

if test "$ac_init_help" = "recursive"; then
  # If there are subdirs, report their specific --help.
  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
    test -d "$ac_dir" ||
      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
      continue
    ac_builddir=.

case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
  ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
  # A ".." for each directory in $ac_dir_suffix.
  ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
  case $ac_top_builddir_sub in
  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
  esac ;;
esac
ac_abs_top_builddir=$ac_pwd
ac_abs_builddir=$ac_pwd$ac_dir_suffix
# for backward compatibility:
ac_top_builddir=$ac_top_build_prefix

case $srcdir in
  .)  # We are building in place.
    ac_srcdir=.
    ac_top_srcdir=$ac_top_builddir_sub
    ac_abs_top_srcdir=$ac_pwd ;;
  [\\/]* | ?:[\\/]* )  # Absolute name.
    ac_srcdir=$srcdir$ac_dir_suffix;
    ac_top_srcdir=$srcdir
    ac_abs_top_srcdir=$srcdir ;;
  *) # Relative name.
    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
    ac_top_srcdir=$ac_top_build_prefix$srcdir
    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
esac
ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix

    cd "$ac_dir" || { ac_status=$?; continue; }
    # Check for configure.gnu first; this name is used for a wrapper for
    # Metaconfig's "Configure" on case-insensitive file systems.
    if test -f "$ac_srcdir/configure.gnu"; then
      echo &&
      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
    elif test -f "$ac_srcdir/configure"; then
      echo &&
      $SHELL "$ac_srcdir/configure" --help=recursive
    else
      printf "%s\n" "$as_me: WARNING: no configuration information is in $ac_dir" >&2
    fi || ac_status=$?
    cd "$ac_pwd" || { ac_status=$?; break; }
  done
fi

test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
  cat <<\_ACEOF
blspR configure 0.0.1
generated by GNU Autoconf 2.71

Copyright (C) 2021 Free Software Foundation, Inc.
This configure script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it.
_ACEOF
  exit
fi

## ------------------------ ##
## Autoconf initialization. ##
## ------------------------ ##
ac_configure_args_raw=
for ac_arg
do
  case $ac_arg in
  *\'*)
    ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
  esac
  as_fn_append ac_configure_args_raw " '$ac_arg'"
done

case $ac_configure_args_raw in
  *$as_nl*)
    ac_safe_unquote= ;;
  *)
    ac_unsafe_z='|&;<>()$`\\"*?[ ''	' # This string ends in space, tab.
    ac_unsafe_a="$ac_unsafe_z#~"
    ac_safe_unquote="s/ '\\([^$ac_unsafe_a][^$ac_unsafe_z]*\\)'/ \\1/g"
    ac_configure_args_raw=`      printf "%s\n" "$ac_configure_args_raw" | sed "$ac_safe_unquote"`;;
esac

cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.

It was created by blspR $as_me 0.0.1, which was
generated by GNU Autoconf 2.71.  Invocation command line was

  $ $0$ac_configure_args_raw

_ACEOF
exec 5>>config.log
{
cat <<_ASUNAME
## --------- ##
## Platform. ##
## --------- ##

hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
uname -m = `(uname -m) 2>/dev/null || echo unknown`
uname -r = `(uname -r) 2>/dev/null || echo unknown`
uname -s = `(uname -s) 2>/dev/null || echo unknown`
uname -v = `(uname -v) 2>/dev/null || echo unknown`

/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`

/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`

_ASUNAME

as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
  IFS=$as_save_IFS
  case $as_dir in #(((
    '') as_dir=./ ;;
    */) ;;
    *) as_dir=$as_dir/ ;;
  esac
    printf "%s\n" "PATH: $as_dir"
  done
IFS=$as_save_IFS

} >&5

cat >&5 <<_ACEOF


## ----------- ##
## Core tests. ##
## ----------- ##

_ACEOF


# Keep a trace of the command line.
# Strip out --no-create and --no-recursion so they do not pile up.
# Strip out --silent because we don't want to record it for future runs.
# Also quote any args containing shell meta-characters.
# Make two passes to allow for proper duplicate-argument suppression.
ac_configure_args=
ac_configure_args0=
ac_configure_args1=
ac_must_keep_next=false
for ac_pass in 1 2
do
  for ac_arg
  do
    case $ac_arg in
    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
    | -silent | --silent | --silen | --sile | --sil)
      continue ;;
    *\'*)
      ac_arg=`printf "%s\n" "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
    esac
    case $ac_pass in
    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
    2)
      as_fn_append ac_configure_args1 " '$ac_arg'"
      if test $ac_must_keep_next = true; then
	ac_must_keep_next=false # Got value, back to normal.
      else
	case $ac_arg in
	  *=* | --config-cache | -C | -disable-* | --disable-* \
	  | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
	  | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
	  | -with-* | --with-* | -without-* | --without-* | --x)
	    case "$ac_configure_args0 " in
	      "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
	    esac
	    ;;
	  -* ) ac_must_keep_next=true ;;
	esac
      fi
      as_fn_append ac_configure_args " '$ac_arg'"
      ;;
    esac
  done
done
{ ac_configure_args0=; unset ac_configure_args0;}
{ ac_configure_args1=; unset ac_configure_args1;}

# When interrupted or exit'd, cleanup temporary files, and complete
# config.log.  We remove comments because anyway the quotes in there
# would cause problems or look ugly.
# WARNING: Use '\'' to represent an apostrophe within the trap.
# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
trap 'exit_status=$?
  # Sanitize IFS.
  IFS=" ""	$as_nl"
  # Save into config.log some information that might help in debugging.
  {
    echo

    printf "%s\n" "## ---------------- ##
## Cache variables. ##
## ---------------- ##"
    echo
    # The following way of writing the cache mishandles newlines in values,
(
  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
    eval ac_val=\$$ac_var
    case $ac_val in #(
    *${as_nl}*)
      case $ac_var in #(
      *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
      esac
      case $ac_var in #(
      _ | IFS | as_nl) ;; #(
      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
      *) { eval $ac_var=; unset $ac_var;} ;;
      esac ;;
    esac
  done
  (set) 2>&1 |
    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
    *${as_nl}ac_space=\ *)
      sed -n \
	"s/'\''/'\''\\\\'\'''\''/g;
	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
      ;; #(
    *)
      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
      ;;
    esac |
    sort
)
    echo

    printf "%s\n" "## ----------------- ##
## Output variables. ##
## ----------------- ##"
    echo
    for ac_var in $ac_subst_vars
    do
      eval ac_val=\$$ac_var
      case $ac_val in
      *\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
      esac
      printf "%s\n" "$ac_var='\''$ac_val'\''"
    done | sort
    echo

    if test -n "$ac_subst_files"; then
      printf "%s\n" "## ------------------- ##
## File substitutions. ##
## ------------------- ##"
      echo
      for ac_var in $ac_subst_files
      do
	eval ac_val=\$$ac_var
	case $ac_val in
	*\'\''*) ac_val=`printf "%s\n" "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
	esac
	printf "%s\n" "$ac_var='\''$ac_val'\''"
      done | sort
      echo
    fi

    if test -s confdefs.h; then
      printf "%s\n" "## ----------- ##
## confdefs.h. ##
## ----------- ##"
      echo
      cat confdefs.h
      echo
    fi
    test "$ac_signal" != 0 &&
      printf "%s\n" "$as_me: caught signal $ac_signal"
    printf "%s\n" "$as_me: exit $exit_status"
  } >&5
  rm -f core *.core core.conftest.* &&
    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
    exit $exit_status
' 0
for ac_signal in 1 2 13 15; do
  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
done
ac_signal=0

# confdefs.h avoids OS command line length limits that DEFS can exceed.
rm -f -r conftest* confdefs.h

printf "%s\n" "/* confdefs.h */" > confdefs.h

# Predefined preprocessor variables.

printf "%s\n" "#define PACKAGE_NAME \"$PACKAGE_NAME\"" >>confdefs.h

printf "%s\n" "#define PACKAGE_TARNAME \"$PACKAGE_TARNAME\"" >>confdefs.h

printf "%s\n" "#define PACKAGE_VERSION \"$PACKAGE_VERSION\"" >>confdefs.h

printf "%s\n" "#define PACKAGE_STRING \"$PACKAGE_STRING\"" >>confdefs.h

printf "%s\n" "#define PACKAGE_BUGREPORT \"$PACKAGE_BUGREPORT\"" >>confdefs.h

printf "%s\n" "#define PACKAGE_URL \"$PACKAGE_URL\"" >>confdefs.h


# Let the site file select an alternate cache file if it wants to.
# Prefer an explicitly selected file to automatically selected ones.
if test -n "$CONFIG_SITE"; then
  ac_site_files="$CONFIG_SITE"
elif test "x$prefix" != xNONE; then
  ac_site_files="$prefix/share/config.site $prefix/etc/config.site"
else
  ac_site_files="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
fi

for ac_site_file in $ac_site_files
do
  case $ac_site_file in #(
  */*) :
     ;; #(
  *) :
    ac_site_file=./$ac_site_file ;;
esac
  if test -f "$ac_site_file" && test -r "$ac_site_file"; then
    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
printf "%s\n" "$as_me: loading site script $ac_site_file" >&6;}
    sed 's/^/| /' "$ac_site_file" >&5
    . "$ac_site_file" \
      || { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error $? "failed to load site script $ac_site_file
See \`config.log' for more details" "$LINENO" 5; }
  fi
done

if test -r "$cache_file"; then
  # Some versions of bash will fail to source /dev/null (special files
  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
printf "%s\n" "$as_me: loading cache $cache_file" >&6;}
    case $cache_file in
      [\\/]* | ?:[\\/]* ) . "$cache_file";;
      *)                      . "./$cache_file";;
    esac
  fi
else
  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
printf "%s\n" "$as_me: creating cache $cache_file" >&6;}
  >$cache_file
fi

# Check that the precious variables saved in the cache have kept the same
# value.
ac_cache_corrupted=false
for ac_var in $ac_precious_vars; do
  eval ac_old_set=\$ac_cv_env_${ac_var}_set
  eval ac_new_set=\$ac_env_${ac_var}_set
  eval ac_old_val=\$ac_cv_env_${ac_var}_value
  eval ac_new_val=\$ac_env_${ac_var}_value
  case $ac_old_set,$ac_new_set in
    set,)
      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
printf "%s\n" "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
      ac_cache_corrupted=: ;;
    ,set)
      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
printf "%s\n" "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
      ac_cache_corrupted=: ;;
    ,);;
    *)
      if test "x$ac_old_val" != "x$ac_new_val"; then
	# differences in whitespace do not lead to failure.
	ac_old_val_w=`echo x $ac_old_val`
	ac_new_val_w=`echo x $ac_new_val`
	if test "$ac_old_val_w" != "$ac_new_val_w"; then
	  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
printf "%s\n" "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
	  ac_cache_corrupted=:
	else
	  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
printf "%s\n" "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
	  eval $ac_var=\$ac_old_val
	fi
	{ printf "%s\n" "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
printf "%s\n" "$as_me:   former value:  \`$ac_old_val'" >&2;}
	{ printf "%s\n" "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
printf "%s\n" "$as_me:   current value: \`$ac_new_val'" >&2;}
      fi;;
  esac
  # Pass precious variables to config.status.
  if test "$ac_new_set" = set; then
    case $ac_new_val in
    *\'*) ac_arg=$ac_var=`printf "%s\n" "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
    *) ac_arg=$ac_var=$ac_new_val ;;
    esac
    case " $ac_configure_args " in
      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
    esac
  fi
done
if $ac_cache_corrupted; then
  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
printf "%s\n" "$as_me: error: in \`$ac_pwd':" >&2;}
  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
printf "%s\n" "$as_me: error: changes in the environment can compromise the build" >&2;}
  as_fn_error $? "run \`${MAKE-make} distclean' and/or \`rm $cache_file'
	    and start over" "$LINENO" 5
fi
## -------------------- ##
## Main body of script. ##
## -------------------- ##

ac_ext=c
ac_cpp='$CPP $CPPFLAGS'
ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
ac_compiler_gnu=$ac_cv_c_compiler_gnu



## Use gsl-config to find arguments for compiler and linker flags
##
## Check for non-standard programs: gsl-config(1)
# Extract the first word of "gsl-config", so it can be a program name with args.
set dummy gsl-config; ac_word=$2
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
printf %s "checking for $ac_word... " >&6; }
if test ${ac_cv_path_GSL_CONFIG+y}
then :
  printf %s "(cached) " >&6
else $as_nop
  case $GSL_CONFIG in
  [\\/]* | ?:[\\/]*)
  ac_cv_path_GSL_CONFIG="$GSL_CONFIG" # Let the user override the test with a path.
  ;;
  *)
  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
  IFS=$as_save_IFS
  case $as_dir in #(((
    '') as_dir=./ ;;
    */) ;;
    *) as_dir=$as_dir/ ;;
  esac
    for ac_exec_ext in '' $ac_executable_extensions; do
  if as_fn_executable_p "$as_dir$ac_word$ac_exec_ext"; then
    ac_cv_path_GSL_CONFIG="$as_dir$ac_word$ac_exec_ext"
    printf "%s\n" "$as_me:${as_lineno-$LINENO}: found $as_dir$ac_word$ac_exec_ext" >&5
    break 2
  fi
done
  done
IFS=$as_save_IFS

  ;;
esac
fi
GSL_CONFIG=$ac_cv_path_GSL_CONFIG
if test -n "$GSL_CONFIG"; then
  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GSL_CONFIG" >&5
printf "%s\n" "$GSL_CONFIG" >&6; }
else
  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5
printf "%s\n" "no" >&6; }
fi


## If gsl-config was found, let's use it
if test "${GSL_CONFIG}" != ""; then
    # Use gsl-config for header and linker arguments
    GSL_CFLAGS=`${GSL_CONFIG} --cflags`
    GSL_LIBS=`${GSL_CONFIG} --libs`
else
    as_fn_error $? "gsl-config not found, is GSL installed?" "$LINENO" 5
fi

# Now substitute these variables in src/Makevars.in to create src/Makevars



ac_config_files="$ac_config_files src/Makevars"

cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
# scripts and configure runs, see configure's option --config-cache.
# It is not useful on other systems.  If it contains results you don't
# want to keep, you may remove or edit it.
#
# config.status only pays attention to the cache file if you give it
# the --recheck option to rerun configure.
#
# `ac_cv_env_foo' variables (set or unset) will be overridden when
# loading this file, other *unset* `ac_cv_foo' will be assigned the
# following values.

_ACEOF

# The following way of writing the cache mishandles newlines in values,
# but we know of no workaround that is simple, portable, and efficient.
# So, we kill variables containing newlines.
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
(
  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
    eval ac_val=\$$ac_var
    case $ac_val in #(
    *${as_nl}*)
      case $ac_var in #(
      *_cv_*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
printf "%s\n" "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
      esac
      case $ac_var in #(
      _ | IFS | as_nl) ;; #(
      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
      *) { eval $ac_var=; unset $ac_var;} ;;
      esac ;;
    esac
  done

  (set) 2>&1 |
    case $as_nl`(ac_space=' '; set) 2>&1` in #(
    *${as_nl}ac_space=\ *)
      # `set' does not quote correctly, so add quotes: double-quote
      # substitution turns \\\\ into \\, and sed turns \\ into \.
      sed -n \
	"s/'/'\\\\''/g;
	  s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
      ;; #(
    *)
      # `set' quotes correctly as required by POSIX, so do not add quotes.
      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
      ;;
    esac |
    sort
) |
  sed '
     /^ac_cv_env_/b end
     t clear
     :clear
     s/^\([^=]*\)=\(.*[{}].*\)$/test ${\1+y} || &/
     t end
     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
     :end' >>confcache
if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
  if test -w "$cache_file"; then
    if test "x$cache_file" != "x/dev/null"; then
      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
printf "%s\n" "$as_me: updating cache $cache_file" >&6;}
      if test ! -f "$cache_file" || test -h "$cache_file"; then
	cat confcache >"$cache_file"
      else
        case $cache_file in #(
        */* | ?:*)
	  mv -f confcache "$cache_file"$$ &&
	  mv -f "$cache_file"$$ "$cache_file" ;; #(
        *)
	  mv -f confcache "$cache_file" ;;
	esac
      fi
    fi
  else
    { printf "%s\n" "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
printf "%s\n" "$as_me: not updating unwritable cache $cache_file" >&6;}
  fi
fi
rm -f confcache

test "x$prefix" = xNONE && prefix=$ac_default_prefix
# Let make expand exec_prefix.
test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'

# Transform confdefs.h into DEFS.
# Protect against shell expansion while executing Makefile rules.
# Protect against Makefile macro expansion.
#
# If the first sed substitution is executed (which looks for macros that
# take arguments), then branch to the quote section.  Otherwise,
# look for a macro that doesn't take arguments.
ac_script='
:mline
/\\$/{
 N
 s,\\\n,,
 b mline
}
t clear
:clear
s/^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 (][^	 (]*([^)]*)\)[	 ]*\(.*\)/-D\1=\2/g
t quote
s/^[	 ]*#[	 ]*define[	 ][	 ]*\([^	 ][^	 ]*\)[	 ]*\(.*\)/-D\1=\2/g
t quote
b any
:quote
s/[	 `~#$^&*(){}\\|;'\''"<>?]/\\&/g
s/\[/\\&/g
s/\]/\\&/g
s/\$/$$/g
H
:any
${
	g
	s/^\n//
	s/\n/ /g
	p
}
'
DEFS=`sed -n "$ac_script" confdefs.h`


ac_libobjs=
ac_ltlibobjs=
U=
for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
  # 1. Remove the extension, and $U if already installed.
  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
  ac_i=`printf "%s\n" "$ac_i" | sed "$ac_script"`
  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
  #    will be set to the directory where LIBOBJS objects are built.
  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
done
LIBOBJS=$ac_libobjs

LTLIBOBJS=$ac_ltlibobjs



: "${CONFIG_STATUS=./config.status}"
ac_write_fail=0
ac_clean_files_save=$ac_clean_files
ac_clean_files="$ac_clean_files $CONFIG_STATUS"
{ printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
printf "%s\n" "$as_me: creating $CONFIG_STATUS" >&6;}
as_write_fail=0
cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
#! $SHELL
# Generated by $as_me.
# Run this file to recreate the current configuration.
# Compiler output produced by configure, useful for debugging
# configure, is in config.log if it exists.

debug=false
ac_cs_recheck=false
ac_cs_silent=false

SHELL=\${CONFIG_SHELL-$SHELL}
export SHELL
_ASEOF
cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
## -------------------- ##
## M4sh Initialization. ##
## -------------------- ##

# Be more Bourne compatible
DUALCASE=1; export DUALCASE # for MKS sh
as_nop=:
if test ${ZSH_VERSION+y} && (emulate sh) >/dev/null 2>&1
then :
  emulate sh
  NULLCMD=:
  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
  # is contrary to our usage.  Disable this feature.
  alias -g '${1+"$@"}'='"$@"'
  setopt NO_GLOB_SUBST
else $as_nop
  case `(set -o) 2>/dev/null` in #(
  *posix*) :
    set -o posix ;; #(
  *) :
     ;;
esac
fi



# Reset variables that may have inherited troublesome values from
# the environment.

# IFS needs to be set, to space, tab, and newline, in precisely that order.
# (If _AS_PATH_WALK were called with IFS unset, it would have the
# side effect of setting IFS to empty, thus disabling word splitting.)
# Quoting is to prevent editors from complaining about space-tab.
as_nl='
'
export as_nl
IFS=" ""	$as_nl"

PS1='$ '
PS2='> '
PS4='+ '

# Ensure predictable behavior from utilities with locale-dependent output.
LC_ALL=C
export LC_ALL
LANGUAGE=C
export LANGUAGE

# We cannot yet rely on "unset" to work, but we need these variables
# to be unset--not just set to an empty or harmless value--now, to
# avoid bugs in old shells (e.g. pre-3.0 UWIN ksh).  This construct
# also avoids known problems related to "unset" and subshell syntax
# in other old shells (e.g. bash 2.01 and pdksh 5.2.14).
for as_var in BASH_ENV ENV MAIL MAILPATH CDPATH
do eval test \${$as_var+y} \
  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
done

# Ensure that fds 0, 1, and 2 are open.
if (exec 3>&0) 2>/dev/null; then :; else exec 0</dev/null; fi
if (exec 3>&1) 2>/dev/null; then :; else exec 1>/dev/null; fi
if (exec 3>&2)            ; then :; else exec 2>/dev/null; fi

# The user is always right.
if ${PATH_SEPARATOR+false} :; then
  PATH_SEPARATOR=:
  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
      PATH_SEPARATOR=';'
  }
fi


# Find who we are.  Look in the path if we contain no directory separator.
as_myself=
case $0 in #((
  *[\\/]* ) as_myself=$0 ;;
  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
  IFS=$as_save_IFS
  case $as_dir in #(((
    '') as_dir=./ ;;
    */) ;;
    *) as_dir=$as_dir/ ;;
  esac
    test -r "$as_dir$0" && as_myself=$as_dir$0 && break
  done
IFS=$as_save_IFS

     ;;
esac
# We did not find ourselves, most probably we were run as `sh COMMAND'
# in which case we are not to be found in the path.
if test "x$as_myself" = x; then
  as_myself=$0
fi
if test ! -f "$as_myself"; then
  printf "%s\n" "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
  exit 1
fi



# as_fn_error STATUS ERROR [LINENO LOG_FD]
# ----------------------------------------
# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
# script with STATUS, using 1 if that was 0.
as_fn_error ()
{
  as_status=$1; test $as_status -eq 0 && as_status=1
  if test "$4"; then
    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
    printf "%s\n" "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
  fi
  printf "%s\n" "$as_me: error: $2" >&2
  as_fn_exit $as_status
} # as_fn_error



# as_fn_set_status STATUS
# -----------------------
# Set $? to STATUS, without forking.
as_fn_set_status ()
{
  return $1
} # as_fn_set_status

# as_fn_exit STATUS
# -----------------
# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
as_fn_exit ()
{
  set +e
  as_fn_set_status $1
  exit $1
} # as_fn_exit

# as_fn_unset VAR
# ---------------
# Portably unset VAR.
as_fn_unset ()
{
  { eval $1=; unset $1;}
}
as_unset=as_fn_unset

# as_fn_append VAR VALUE
# ----------------------
# Append the text in VALUE to the end of the definition contained in VAR. Take
# advantage of any shell optimizations that allow amortized linear growth over
# repeated appends, instead of the typical quadratic growth present in naive
# implementations.
if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null
then :
  eval 'as_fn_append ()
  {
    eval $1+=\$2
  }'
else $as_nop
  as_fn_append ()
  {
    eval $1=\$$1\$2
  }
fi # as_fn_append

# as_fn_arith ARG...
# ------------------
# Perform arithmetic evaluation on the ARGs, and store the result in the
# global $as_val. Take advantage of shells that can avoid forks. The arguments
# must be portable across $(()) and expr.
if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null
then :
  eval 'as_fn_arith ()
  {
    as_val=$(( $* ))
  }'
else $as_nop
  as_fn_arith ()
  {
    as_val=`expr "$@" || test $? -eq 1`
  }
fi # as_fn_arith


if expr a : '\(a\)' >/dev/null 2>&1 &&
   test "X`expr 00001 : '.*\(...\)'`" = X001; then
  as_expr=expr
else
  as_expr=false
fi

if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
  as_basename=basename
else
  as_basename=false
fi

if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
  as_dirname=dirname
else
  as_dirname=false
fi

as_me=`$as_basename -- "$0" ||
$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
	 X"$0" : 'X\(//\)$' \| \
	 X"$0" : 'X\(/\)' \| . 2>/dev/null ||
printf "%s\n" X/"$0" |
    sed '/^.*\/\([^/][^/]*\)\/*$/{
	    s//\1/
	    q
	  }
	  /^X\/\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\/\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`

# Avoid depending upon Character Ranges.
as_cr_letters='abcdefghijklmnopqrstuvwxyz'
as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
as_cr_Letters=$as_cr_letters$as_cr_LETTERS
as_cr_digits='0123456789'
as_cr_alnum=$as_cr_Letters$as_cr_digits


# Determine whether it's possible to make 'echo' print without a newline.
# These variables are no longer used directly by Autoconf, but are AC_SUBSTed
# for compatibility with existing Makefiles.
ECHO_C= ECHO_N= ECHO_T=
case `echo -n x` in #(((((
-n*)
  case `echo 'xy\c'` in
  *c*) ECHO_T='	';;	# ECHO_T is single tab character.
  xy)  ECHO_C='\c';;
  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
       ECHO_T='	';;
  esac;;
*)
  ECHO_N='-n';;
esac

# For backward compatibility with old third-party macros, we provide
# the shell variables $as_echo and $as_echo_n.  New code should use
# AS_ECHO(["message"]) and AS_ECHO_N(["message"]), respectively.
as_echo='printf %s\n'
as_echo_n='printf %s'

rm -f conf$$ conf$$.exe conf$$.file
if test -d conf$$.dir; then
  rm -f conf$$.dir/conf$$.file
else
  rm -f conf$$.dir
  mkdir conf$$.dir 2>/dev/null
fi
if (echo >conf$$.file) 2>/dev/null; then
  if ln -s conf$$.file conf$$ 2>/dev/null; then
    as_ln_s='ln -s'
    # ... but there are two gotchas:
    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
    # In both cases, we have to default to `cp -pR'.
    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
      as_ln_s='cp -pR'
  elif ln conf$$.file conf$$ 2>/dev/null; then
    as_ln_s=ln
  else
    as_ln_s='cp -pR'
  fi
else
  as_ln_s='cp -pR'
fi
rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
rmdir conf$$.dir 2>/dev/null


# as_fn_mkdir_p
# -------------
# Create "$as_dir" as a directory, including parents if necessary.
as_fn_mkdir_p ()
{

  case $as_dir in #(
  -*) as_dir=./$as_dir;;
  esac
  test -d "$as_dir" || eval $as_mkdir_p || {
    as_dirs=
    while :; do
      case $as_dir in #(
      *\'*) as_qdir=`printf "%s\n" "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
      *) as_qdir=$as_dir;;
      esac
      as_dirs="'$as_qdir' $as_dirs"
      as_dir=`$as_dirname -- "$as_dir" ||
$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
	 X"$as_dir" : 'X\(//\)[^/]' \| \
	 X"$as_dir" : 'X\(//\)$' \| \
	 X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
printf "%s\n" X"$as_dir" |
    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)[^/].*/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`
      test -d "$as_dir" && break
    done
    test -z "$as_dirs" || eval "mkdir $as_dirs"
  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"


} # as_fn_mkdir_p
if mkdir -p . 2>/dev/null; then
  as_mkdir_p='mkdir -p "$as_dir"'
else
  test -d ./-p && rmdir ./-p
  as_mkdir_p=false
fi


# as_fn_executable_p FILE
# -----------------------
# Test if FILE is an executable regular file.
as_fn_executable_p ()
{
  test -f "$1" && test -x "$1"
} # as_fn_executable_p
as_test_x='test -x'
as_executable_p=as_fn_executable_p

# Sed expression to map a string onto a valid CPP name.
as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"

# Sed expression to map a string onto a valid variable name.
as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"


exec 6>&1
## ----------------------------------- ##
## Main body of $CONFIG_STATUS script. ##
## ----------------------------------- ##
_ASEOF
test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1

cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# Save the log message, to keep $0 and so on meaningful, and to
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
This file was extended by blspR $as_me 0.0.1, which was
generated by GNU Autoconf 2.71.  Invocation command line was

  CONFIG_FILES    = $CONFIG_FILES
  CONFIG_HEADERS  = $CONFIG_HEADERS
  CONFIG_LINKS    = $CONFIG_LINKS
  CONFIG_COMMANDS = $CONFIG_COMMANDS
  $ $0 $@

on `(hostname || uname -n) 2>/dev/null | sed 1q`
"

_ACEOF

case $ac_config_files in *"
"*) set x $ac_config_files; shift; ac_config_files=$*;;
esac



cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
# Files that config.status was made for.
config_files="$ac_config_files"

_ACEOF

cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
ac_cs_usage="\
\`$as_me' instantiates files and other configuration actions
from templates according to the current configuration.  Unless the files
and actions are specified as TAGs, all are instantiated by default.

Usage: $0 [OPTION]... [TAG]...

  -h, --help       print this help, then exit
  -V, --version    print version number and configuration settings, then exit
      --config     print configuration, then exit
  -q, --quiet, --silent
                   do not print progress messages
  -d, --debug      don't remove temporary files
      --recheck    update $as_me by reconfiguring in the same conditions
      --file=FILE[:TEMPLATE]
                   instantiate the configuration file FILE

Configuration files:
$config_files

Report bugs to the package provider."

_ACEOF
ac_cs_config=`printf "%s\n" "$ac_configure_args" | sed "$ac_safe_unquote"`
ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\''/g"`
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config='$ac_cs_config_escaped'
ac_cs_version="\\
blspR config.status 0.0.1
configured by $0, generated by GNU Autoconf 2.71,
  with options \\"\$ac_cs_config\\"

Copyright (C) 2021 Free Software Foundation, Inc.
This config.status script is free software; the Free Software Foundation
gives unlimited permission to copy, distribute and modify it."

ac_pwd='$ac_pwd'
srcdir='$srcdir'
test -n "\$AWK" || AWK=awk
_ACEOF

cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# The default lists apply if the user does not specify any file.
ac_need_defaults=:
while test $# != 0
do
  case $1 in
  --*=?*)
    ac_option=`expr "X$1" : 'X\([^=]*\)='`
    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
    ac_shift=:
    ;;
  --*=)
    ac_option=`expr "X$1" : 'X\([^=]*\)='`
    ac_optarg=
    ac_shift=:
    ;;
  *)
    ac_option=$1
    ac_optarg=$2
    ac_shift=shift
    ;;
  esac

  case $ac_option in
  # Handling of the options.
  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
    ac_cs_recheck=: ;;
  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
    printf "%s\n" "$ac_cs_version"; exit ;;
  --config | --confi | --conf | --con | --co | --c )
    printf "%s\n" "$ac_cs_config"; exit ;;
  --debug | --debu | --deb | --de | --d | -d )
    debug=: ;;
  --file | --fil | --fi | --f )
    $ac_shift
    case $ac_optarg in
    *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
    '') as_fn_error $? "missing file argument" ;;
    esac
    as_fn_append CONFIG_FILES " '$ac_optarg'"
    ac_need_defaults=false;;
  --he | --h |  --help | --hel | -h )
    printf "%s\n" "$ac_cs_usage"; exit ;;
  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
  | -silent | --silent | --silen | --sile | --sil | --si | --s)
    ac_cs_silent=: ;;

  # This is an error.
  -*) as_fn_error $? "unrecognized option: \`$1'
Try \`$0 --help' for more information." ;;

  *) as_fn_append ac_config_targets " $1"
     ac_need_defaults=false ;;

  esac
  shift
done

ac_configure_extra_args=

if $ac_cs_silent; then
  exec 6>/dev/null
  ac_configure_extra_args="$ac_configure_extra_args --silent"
fi

_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
if \$ac_cs_recheck; then
  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
  shift
  \printf "%s\n" "running CONFIG_SHELL=$SHELL \$*" >&6
  CONFIG_SHELL='$SHELL'
  export CONFIG_SHELL
  exec "\$@"
fi

_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
exec 5>>config.log
{
  echo
  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
## Running $as_me. ##
_ASBOX
  printf "%s\n" "$ac_log"
} >&5

_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
_ACEOF

cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1

# Handling of arguments.
for ac_config_target in $ac_config_targets
do
  case $ac_config_target in
    "src/Makevars") CONFIG_FILES="$CONFIG_FILES src/Makevars" ;;

  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
  esac
done


# If the user did not use the arguments to specify the items to instantiate,
# then the envvar interface is used.  Set only those that are not.
# We use the long form for the default assignment because of an extremely
# bizarre bug on SunOS 4.1.3.
if $ac_need_defaults; then
  test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files
fi

# Have a temporary directory for convenience.  Make it in the build tree
# simply because there is no reason against having it here, and in addition,
# creating and moving files from /tmp can sometimes cause problems.
# Hook for its removal unless debugging.
# Note that there is a small window in which the directory will not be cleaned:
# after its creation but before its name has been assigned to `$tmp'.
$debug ||
{
  tmp= ac_tmp=
  trap 'exit_status=$?
  : "${ac_tmp:=$tmp}"
  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
' 0
  trap 'as_fn_exit 1' 1 2 13 15
}
# Create a (secure) tmp directory for tmp files.

{
  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
  test -d "$tmp"
}  ||
{
  tmp=./conf$$-$RANDOM
  (umask 077 && mkdir "$tmp")
} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
ac_tmp=$tmp

# Set up the scripts for CONFIG_FILES section.
# No need to generate them if there are no CONFIG_FILES.
# This happens for instance with `./config.status config.h'.
if test -n "$CONFIG_FILES"; then


ac_cr=`echo X | tr X '\015'`
# On cygwin, bash can eat \r inside `` if the user requested igncr.
# But we know of no other shell where ac_cr would be empty at this
# point, so we can use a bashism as a fallback.
if test "x$ac_cr" = x; then
  eval ac_cr=\$\'\\r\'
fi
ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
  ac_cs_awk_cr='\\r'
else
  ac_cs_awk_cr=$ac_cr
fi

echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
_ACEOF


{
  echo "cat >conf$$subs.awk <<_ACEOF" &&
  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
  echo "_ACEOF"
} >conf$$subs.sh ||
  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
ac_delim='%!_!# '
for ac_last_try in false false false false false :; do
  . ./conf$$subs.sh ||
    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5

  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
  if test $ac_delim_n = $ac_delim_num; then
    break
  elif $ac_last_try; then
    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
  else
    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
  fi
done
rm -f conf$$subs.sh

cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
_ACEOF
sed -n '
h
s/^/S["/; s/!.*/"]=/
p
g
s/^[^!]*!//
:repl
t repl
s/'"$ac_delim"'$//
t delim
:nl
h
s/\(.\{148\}\)..*/\1/
t more1
s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
p
n
b repl
:more1
s/["\\]/\\&/g; s/^/"/; s/$/"\\/
p
g
s/.\{148\}//
t nl
:delim
h
s/\(.\{148\}\)..*/\1/
t more2
s/["\\]/\\&/g; s/^/"/; s/$/"/
p
b
:more2
s/["\\]/\\&/g; s/^/"/; s/$/"\\/
p
g
s/.\{148\}//
t delim
' <conf$$subs.awk | sed '
/^[^""]/{
  N
  s/\n//
}
' >>$CONFIG_STATUS || ac_write_fail=1
rm -f conf$$subs.awk
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
_ACAWK
cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
  for (key in S) S_is_set[key] = 1
  FS = ""

}
{
  line = $ 0
  nfields = split(line, field, "@")
  substed = 0
  len = length(field[1])
  for (i = 2; i < nfields; i++) {
    key = field[i]
    keylen = length(key)
    if (S_is_set[key]) {
      value = S[key]
      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
      len += length(value) + length(field[++i])
      substed = 1
    } else
      len += 1 + keylen
  }

  print line
}

_ACAWK
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
else
  cat
fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
_ACEOF

# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
# trailing colons and then remove the whole line if VPATH becomes empty
# (actually we leave an empty line to preserve line numbers).
if test "x$srcdir" = x.; then
  ac_vpsub='/^[	 ]*VPATH[	 ]*=[	 ]*/{
h
s///
s/^/:/
s/[	 ]*$/:/
s/:\$(srcdir):/:/g
s/:\${srcdir}:/:/g
s/:@srcdir@:/:/g
s/^:*//
s/:*$//
x
s/\(=[	 ]*\).*/\1/
G
s/\n//
s/^[^=]*=[	 ]*$//
}'
fi

cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
fi # test -n "$CONFIG_FILES"


eval set X "  :F $CONFIG_FILES      "
shift
for ac_tag
do
  case $ac_tag in
  :[FHLC]) ac_mode=$ac_tag; continue;;
  esac
  case $ac_mode$ac_tag in
  :[FHL]*:*);;
  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
  :[FH]-) ac_tag=-:-;;
  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
  esac
  ac_save_IFS=$IFS
  IFS=:
  set x $ac_tag
  IFS=$ac_save_IFS
  shift
  ac_file=$1
  shift

  case $ac_mode in
  :L) ac_source=$1;;
  :[FH])
    ac_file_inputs=
    for ac_f
    do
      case $ac_f in
      -) ac_f="$ac_tmp/stdin";;
      *) # Look for the file first in the build tree, then in the source tree
	 # (if the path is not absolute).  The absolute path cannot be DOS-style,
	 # because $ac_f cannot contain `:'.
	 test -f "$ac_f" ||
	   case $ac_f in
	   [\\/$]*) false;;
	   *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
	   esac ||
	   as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
      esac
      case $ac_f in *\'*) ac_f=`printf "%s\n" "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
      as_fn_append ac_file_inputs " '$ac_f'"
    done

    # Let's still pretend it is `configure' which instantiates (i.e., don't
    # use $as_me), people would be surprised to read:
    #    /* config.h.  Generated by config.status.  */
    configure_input='Generated from '`
	  printf "%s\n" "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
	`' by configure.'
    if test x"$ac_file" != x-; then
      configure_input="$ac_file.  $configure_input"
      { printf "%s\n" "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
printf "%s\n" "$as_me: creating $ac_file" >&6;}
    fi
    # Neutralize special characters interpreted by sed in replacement strings.
    case $configure_input in #(
    *\&* | *\|* | *\\* )
       ac_sed_conf_input=`printf "%s\n" "$configure_input" |
       sed 's/[\\\\&|]/\\\\&/g'`;; #(
    *) ac_sed_conf_input=$configure_input;;
    esac

    case $ac_tag in
    *:-:* | *:-) cat >"$ac_tmp/stdin" \
      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
    esac
    ;;
  esac

  ac_dir=`$as_dirname -- "$ac_file" ||
$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
	 X"$ac_file" : 'X\(//\)[^/]' \| \
	 X"$ac_file" : 'X\(//\)$' \| \
	 X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
printf "%s\n" X"$ac_file" |
    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)[^/].*/{
	    s//\1/
	    q
	  }
	  /^X\(\/\/\)$/{
	    s//\1/
	    q
	  }
	  /^X\(\/\).*/{
	    s//\1/
	    q
	  }
	  s/.*/./; q'`
  as_dir="$ac_dir"; as_fn_mkdir_p
  ac_builddir=.

case "$ac_dir" in
.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
*)
  ac_dir_suffix=/`printf "%s\n" "$ac_dir" | sed 's|^\.[\\/]||'`
  # A ".." for each directory in $ac_dir_suffix.
  ac_top_builddir_sub=`printf "%s\n" "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
  case $ac_top_builddir_sub in
  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
  esac ;;
esac
ac_abs_top_builddir=$ac_pwd
ac_abs_builddir=$ac_pwd$ac_dir_suffix
# for backward compatibility:
ac_top_builddir=$ac_top_build_prefix

case $srcdir in
  .)  # We are building in place.
    ac_srcdir=.
    ac_top_srcdir=$ac_top_builddir_sub
    ac_abs_top_srcdir=$ac_pwd ;;
  [\\/]* | ?:[\\/]* )  # Absolute name.
    ac_srcdir=$srcdir$ac_dir_suffix;
    ac_top_srcdir=$srcdir
    ac_abs_top_srcdir=$srcdir ;;
  *) # Relative name.
    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
    ac_top_srcdir=$ac_top_build_prefix$srcdir
    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
esac
ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix


  case $ac_mode in
  :F)
  #
  # CONFIG_FILE
  #

_ACEOF

cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# If the template does not know about datarootdir, expand it.
# FIXME: This hack should be removed a few years after 2.60.
ac_datarootdir_hack=; ac_datarootdir_seen=
ac_sed_dataroot='
/datarootdir/ {
  p
  q
}
/@datadir@/p
/@docdir@/p
/@infodir@/p
/@localedir@/p
/@mandir@/p'
case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
*datarootdir*) ac_datarootdir_seen=yes;;
*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
printf "%s\n" "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
_ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
  ac_datarootdir_hack='
  s&@datadir@&$datadir&g
  s&@docdir@&$docdir&g
  s&@infodir@&$infodir&g
  s&@localedir@&$localedir&g
  s&@mandir@&$mandir&g
  s&\\\${datarootdir}&$datarootdir&g' ;;
esac
_ACEOF

# Neutralize VPATH when `$srcdir' = `.'.
# Shell code in configure.ac might set extrasub.
# FIXME: do we really want to maintain this feature?
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_sed_extra="$ac_vpsub
$extrasub
_ACEOF
cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
:t
/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
s|@configure_input@|$ac_sed_conf_input|;t t
s&@top_builddir@&$ac_top_builddir_sub&;t t
s&@top_build_prefix@&$ac_top_build_prefix&;t t
s&@srcdir@&$ac_srcdir&;t t
s&@abs_srcdir@&$ac_abs_srcdir&;t t
s&@top_srcdir@&$ac_top_srcdir&;t t
s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
s&@builddir@&$ac_builddir&;t t
s&@abs_builddir@&$ac_abs_builddir&;t t
s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
$ac_datarootdir_hack
"
eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5

test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
  { ac_out=`sed -n '/^[	 ]*datarootdir[	 ]*:*=/p' \
      "$ac_tmp/out"`; test -z "$ac_out"; } &&
  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined.  Please make sure it is defined" >&5
printf "%s\n" "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
which seems to be undefined.  Please make sure it is defined" >&2;}

  rm -f "$ac_tmp/stdin"
  case $ac_file in
  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
  esac \
  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
 ;;



  esac

done # for ac_tag


as_fn_exit 0
_ACEOF
ac_clean_files=$ac_clean_files_save

test $ac_write_fail = 0 ||
  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5


# configure is writing to config.log, and then calls config.status.
# config.status does its own redirection, appending to config.log.
# Unfortunately, on DOS this fails, as config.log is still kept open
# by configure, so config.status won't be able to write to it; its
# output is simply discarded.  So we exec the FD to /dev/null,
# effectively closing config.log, so it can be properly (re)opened and
# appended to by config.status.  When coming back to configure, we
# need to make the FD available again.
if test "$no_create" != yes; then
  ac_cs_success=:
  ac_config_status_args=
  test "$silent" = yes &&
    ac_config_status_args="$ac_config_status_args --quiet"
  exec 5>/dev/null
  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
  exec 5>>config.log
  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
  # would make configure fail if this is the last instruction.
  $ac_cs_success || as_fn_exit 1
fi
if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
  { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
printf "%s\n" "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
fi



A r/configure.ac => r/configure.ac +21 -0
@@ 0,0 1,21 @@
AC_INIT([blspR], [0.0.1])

## Use gsl-config to find arguments for compiler and linker flags
##
## Check for non-standard programs: gsl-config(1)
AC_PATH_PROG([GSL_CONFIG], [gsl-config])
## If gsl-config was found, let's use it
if test "${GSL_CONFIG}" != ""; then
    # Use gsl-config for header and linker arguments
    GSL_CFLAGS=`${GSL_CONFIG} --cflags`
    GSL_LIBS=`${GSL_CONFIG} --libs`
else
    AC_MSG_ERROR([gsl-config not found, is GSL installed?])
fi

# Now substitute these variables in src/Makevars.in to create src/Makevars
AC_SUBST(GSL_CFLAGS)
AC_SUBST(GSL_LIBS)

AC_CONFIG_FILES([src/Makevars])
AC_OUTPUT

A r/src/.gitignore => r/src/.gitignore +3 -0
@@ 0,0 1,3 @@
*.o
*.so
*.dll

A r/src/Makevars.in => r/src/Makevars.in +14 -0
@@ 0,0 1,14 @@
# set by configure
GSL_CFLAGS = @GSL_CFLAGS@
GSL_LIBS   = @GSL_LIBS@

# combine with standard arguments for R
PKG_CPPFLAGS = $(GSL_CFLAGS) #-I../inst/c
PKG_LIBS = $(GSL_LIBS)

#OBJECTS =$(SOURCES_CPP:.cpp=.o)  $(SOURCES_C:.c=.o)
SOURCES=$(wildcard ../../src/**/*.c ../../src/*.c ./*.c)
OBJECTS=$(patsubst %.c, %.o, $(SOURCES)) # list *.c -> *.o


#all : $(SHLIB)

A r/src/blsp_r.c => r/src/blsp_r.c +57 -0
@@ 0,0 1,57 @@
#include <R.h>
#include <Rdefines.h>
#include <Rinternals.h>


#include "../../src/blsp.h"
#include "../../src/blsp_data.h"
#include "../../src/sampler.h"

SEXP generate_data(SEXP data_vector, SEXP doy_vector, SEXP year_idx_vector) {


  int n_obs = length(data_vector);
  int n_years = length(year_idx_vector);


  double *data_vec = REAL(data_vector);
  double *doy_vec = REAL(doy_vector);
  int *year_idx_vec = INTEGER(year_idx_vector);

  SEXP theta_matrix;
  PROTECT(theta_matrix = Rf_allocMatrix(REALSXP, n_years, 7));

  BLSP_Data_t *BLSP_Data = BLSP_Data_alloc(n_years, n_obs);

  gsl_vector_view pp = gsl_vector_view_array(data_vec, n_obs);
  BLSP_Data->obs = &pp.vector;

  gsl_vector_view pv = gsl_vector_view_array(doy_vec, n_obs);
  BLSP_Data->doy = &pv.vector;

  for (size_t i = 1; i < n_years + 1; ++i) {
    gsl_vector_set(BLSP_Data->year_idx, i,
		   gsl_vector_get(BLSP_Data->year_idx, i - 1) +
		       year_idx_vec[i - 1]);
  }


  double theta_mean[7] = {-2.030660, 0.9576184,   119.2568116,
				    8.7140161, 291.0681806, 9.9803594,
				    -6.6876395};

  double theta_sd[7] = {0.03324139, 0.02499047, 0.46365685,
				  0.35526145, 0.75144906, 0.55121990,
				  0.09682220};

  gsl_matrix* theta = blsp_sampler(BLSP_Data, theta_mean, theta_sd, 0.8, 7000, 2000);

  for (int i = 0; i < n_years; i++) {
    for (int p = 0; p < 7; p++) {
      REAL(theta_matrix)[i + n_years*p] = gsl_matrix_get(theta, i, p);
    }
  }

  UNPROTECT(1);
  return theta_matrix;
}

A r/src/blsp_r.h => r/src/blsp_r.h +5 -0
@@ 0,0 1,5 @@
#include <R.h>
#include <Rinternals.h>
#include <R_ext/Rdynload.h>

SEXP generate_data(SEXP data_vector, SEXP doy_vector, SEXP year_idx_vector);

A r/src/init.c => r/src/init.c +18 -0
@@ 0,0 1,18 @@
#define R_NO_REMAP
#include <R.h>
#include <Rinternals.h>
#include <R_ext/Rdynload.h>
#include "blsp_r.h"



static const R_CallMethodDef CallEntries[] = {
  {"generate_data", (DL_FUNC) &generate_data, 3},
  {NULL, NULL, 0}
};

void R_init_blspR(DllInfo *dll) {
  R_registerRoutines(dll, NULL, CallEntries, NULL, NULL);
  R_useDynamicSymbols(dll, TRUE);
  R_forceSymbols(dll, TRUE);
}

A r/testing.R => r/testing.R +8 -0
@@ 0,0 1,8 @@
data_path <- file.path("../test_data.Rdata")

load(data_path)
ls()

devtools::load_all()

blspR::blsp_test(unlist(y), unlist(t), yr_idx)

A src/blsp.c => src/blsp.c +35 -0
@@ 0,0 1,35 @@
#include "blsp.h"

BLSP_Model_t *BLSP_Model_alloc(size_t year_cnt, size_t obs_cnt,
			       size_t parameter_cnt) {

  BLSP_Model_t *BLSP_Model = malloc(sizeof(BLSP_Model));

  if (BLSP_Model == NULL) {
    printf("Couldn't allocate memory for BLSP_Model\n");
    exit(EXIT_FAILURE);
  }

  BLSP_Model->theta_mean_vector = gsl_vector_calloc(parameter_cnt);
  BLSP_Model->theta_stddev_vector = gsl_vector_calloc(parameter_cnt);
  BLSP_Model->global_log_likelihood_vector = gsl_vector_calloc(parameter_cnt);

  BLSP_Model->theta_hat_matrix = gsl_matrix_calloc(year_cnt, parameter_cnt);
  BLSP_Model->attempts_matrix = gsl_matrix_calloc(year_cnt, parameter_cnt);
  BLSP_Model->acceptence_matrix = gsl_matrix_calloc(year_cnt, parameter_cnt);
  BLSP_Model->metropolis_hastings_matrix =
      gsl_matrix_calloc(year_cnt, parameter_cnt);

  // NOTE: Surely there is a way to allocate all the needed memory in a single
  // gsl_block for the vectors and matricies at once?
  /* size_t memory_block_size = */
  /*     ((year_cnt * parameter_cnt) * 4) + (parameter_cnt * 3); */

  /* gsl_block *memory_block = gsl_block_calloc(memory_block_size); */

  /* size_t stride = sizeof(double); */

  /* gsl_vector_alloc_from_block(memory_block, 0, parameter_cnt, stride); */

  return BLSP_Model;
}

A src/blsp.h => src/blsp.h +23 -0
@@ 0,0 1,23 @@
#ifndef BLSP_H_
#define BLSP_H_
#include "common.h"

typedef struct BLSP_Model {
  gsl_vector *theta_mean_vector;
  gsl_vector *theta_stddev_vector;

  gsl_matrix *theta_hat_matrix;

  gsl_vector *global_log_likelihood_vector;
  gsl_matrix *attempts_matrix;
  gsl_matrix *acceptence_matrix;

  gsl_matrix *metropolis_hastings_matrix;

} BLSP_Model_t;

BLSP_Model_t *BLSP_Model_alloc(size_t year_cnt, size_t obs_cnt,
			       size_t parameter_cnt);


#endif

A src/blsp_data.c => src/blsp_data.c +64 -0
@@ 0,0 1,64 @@
#include "blsp_data.h"

BLSP_Data_t *BLSP_Data_alloc(size_t n_years, size_t n_obs) {
  BLSP_Data_t *BLSP_Data = malloc(sizeof(BLSP_Data_t));
  if (BLSP_Data == NULL) {
    printf("Couldn't allocate memory for BLSP_Data\n");
    exit(EXIT_FAILURE);
  }

  BLSP_Data->n_years = n_years;
  BLSP_Data->n_obs = n_obs;

  // right now we are overidding these externally so we just wont allocate them
  // BLSP_Data->obs = gsl_vector_calloc(n_obs);
  // BLSP_Data->doy = gsl_vector_calloc(n_obs);
  BLSP_Data->year_idx = gsl_vector_calloc(n_years + 1);

  return BLSP_Data;
}


void BLSP_Data_free(BLSP_Data_t* BLSP_Data) {
  free(BLSP_Data->obs);
  free(BLSP_Data->doy);
  free(BLSP_Data->year_idx);
  free(BLSP_Data);
}

unsigned int BLSP_Data_get_year(BLSP_Data_t *BLSP_Data, size_t i) {
  return gsl_vector_get(BLSP_Data->year_idx, i);
}


double BLSP_Data_get_doy(BLSP_Data_t *BLSP_Data, size_t i) {
  return gsl_vector_get(BLSP_Data->doy, i);
}

gsl_vector_view BLSP_Data_get_year_doy(BLSP_Data_t *BLSP_Data, size_t year_idx) {
  size_t idx_s, idx_e;

  if (year_idx > (BLSP_Data->n_years) - 1)
    exit(EXIT_FAILURE); // TODO: Add message

  idx_s = BLSP_Data_get_year(BLSP_Data, year_idx);
  idx_e = BLSP_Data_get_year(BLSP_Data, year_idx + 1);

  return gsl_vector_subvector(BLSP_Data->doy, idx_s, idx_e - idx_s);
}

double BLSP_Data_get_obs(BLSP_Data_t *BLSP_Data, size_t i) {
  return gsl_vector_get(BLSP_Data->obs, i);
}

gsl_vector_view BLSP_Data_get_year_obs(BLSP_Data_t *BLSP_Data, size_t year_idx) {
  size_t idx_s, idx_e;

  if (year_idx > (BLSP_Data->n_years) - 1)
    exit(EXIT_FAILURE); // TODO: Add message

  idx_s = BLSP_Data_get_year(BLSP_Data, year_idx);
  idx_e = BLSP_Data_get_year(BLSP_Data, year_idx + 1);

  return gsl_vector_subvector(BLSP_Data->obs, idx_s, idx_e - idx_s);
}

R src/ts_data.h => src/blsp_data.h +13 -11
@@ 1,5 1,5 @@
#ifndef TS_DATA_H_
#define TS_DATA_H_
#ifndef BLSP_DATA_H_
#define BLSP_DATA_H_

#include "common.h"



@@ 30,25 30,27 @@
 *
 */

typedef struct TS_Data {

// Observation
typedef struct BLSP_Data {
  unsigned int n_years; // Total number of years
  unsigned int n_obs;   // total number of observations
  gsl_vector *obs;      // GSL vector holding signal data
  gsl_vector *doy;      // GLS vector holding DOY for each observation
  gsl_vector *year_idx; // GSL vector holding idx for each year
} TS_Data_t;
} BLSP_Data_t;

TS_Data_t *TS_Data_alloc(size_t n_years, size_t n_obs);
void TS_Data_free(TS_Data_t* TS_Data);
BLSP_Data_t *BLSP_Data_alloc(size_t n_years, size_t n_obs);
void BLSP_Data_free(BLSP_Data_t* BLSP_Data);

unsigned int TS_Data_get_year(TS_Data_t *TS_Data, size_t i);
unsigned int BLSP_Data_get_year(BLSP_Data_t *BLSP_Data, size_t i);

double TS_Data_get_doy(TS_Data_t *TS_Data, size_t i);
gsl_vector_view TS_Data_get_year_doy(TS_Data_t *TS_Data, size_t year_idx);
double BLSP_Data_get_doy(BLSP_Data_t *BLSP_Data, size_t i);
gsl_vector_view BLSP_Data_get_year_doy(BLSP_Data_t *BLSP_Data, size_t year_idx);


double TS_Data_get_obs(TS_Data_t *TS_Data, size_t i);
gsl_vector_view TS_Data_get_year_obs(TS_Data_t *TS_Data, size_t year_idx);
double BLSP_Data_get_obs(BLSP_Data_t *BLSP_Data, size_t i);
gsl_vector_view BLSP_Data_get_year_obs(BLSP_Data_t *BLSP_Data, size_t year_idx);


#endif // !TS_DATA_H_

A src/blsp_math.c => src/blsp_math.c +74 -0
@@ 0,0 1,74 @@
#include "blsp_math.h"

/*
 * Double logistic function with greendown parameter (Elmore et al., 2012)
 */
double vi_double_logistic(double doy, gsl_vector *parameter_vector) {

  double m1_l = gsl_cdf_logistic_P(gsl_vector_get(parameter_vector, 0), 1);
  double m7_l = gsl_cdf_logistic_P(gsl_vector_get(parameter_vector, 6), 1);

  double term1, // (m2 - m7 * t)
      term2,    // 1 / (1 + e^((m3 - t) / m4))
      term3;    // 1 / (1 + e^((m5 - t) / m6))
  int status = 0;

  gsl_sf_result_e10 term2_exp;
  gsl_sf_result_e10 term3_exp;
  term1 = gsl_vector_get(parameter_vector, 1) - m7_l * doy;

  gsl_sf_exp_e10_e((gsl_vector_get(parameter_vector, 2) - doy) /
		       gsl_vector_get(parameter_vector, 3),
		   &term2_exp);
  term2 = (1 / (1 + term2_exp.val));

  gsl_sf_exp_e10_e((gsl_vector_get(parameter_vector, 4) - doy) /
		       gsl_vector_get(parameter_vector, 5),
		   &term3_exp);

  term3 = (1 / (1 + term3_exp.val));

  return m1_l + term1 * (term2 - term3);
}

/*
 * Safely compute /log/ probabilty from normal distribution.
 * Adapated from dnorm.c & dnorm4() from R Core.
 */
double log_norm(double x, double mu, double sigma) {
  double xx;
  xx = (x - mu) / sigma;
  xx = fabs(xx);
  return -(M_LN_SQRT_2PI + 0.5 * xx * xx + gsl_sf_log(sigma));
}


double log_likelihood_ratio(double candidate_value,
			    double candidate_log_likelihood, double mean_local,
			    double current_log_likelihood, double mean_global,
			    double stddev_global) {

  // Compute values to compute accetence ratio
  double log_1 = log_norm(candidate_value, mean_global, stddev_global);
  double log_2 = log_norm(mean_local, mean_global, stddev_global);

  return (candidate_log_likelihood - current_log_likelihood) + log_1 - log_2;
}

double draw_ran_gaussian(gsl_rng *RNG_ptr, double mean, double sttdev) {
  // Draw a candidate for parameter
  return gsl_ran_gaussian(RNG_ptr, sttdev) + mean;
}

double vi_log_likelihood(gsl_vector *vi_vector, gsl_vector *doy_vector,
			 gsl_vector *param_vector, size_t size, double sigma) {
  double final_likelihood = 0, A_i, B_i;
  for (size_t i = 0; i < size; ++i) {
    A_i = gsl_vector_get(vi_vector, i);
    B_i = gsl_vector_get(doy_vector, i);
    final_likelihood += log_norm(
	gsl_vector_get(vi_vector, i),
	vi_double_logistic(gsl_vector_get(doy_vector, i), param_vector), sigma);
  }
  return final_likelihood;
}

A src/blsp_math.h => src/blsp_math.h +24 -0
@@ 0,0 1,24 @@
#ifndef BLSP_MATH_H_
#define BLSP_MATH_H_

#include "common.h"

#define M_LN_SQRT_2PI 0.918938533204672741780329736406

double vi_double_logistic(double doy, gsl_vector *parameter_vector);

double log_norm(double x, double mu, double sigma);

double log_likelihood_ratio(double candidate_value,
			    double candidate_log_likelihood, double mean_local,
			    double current_log_likelihood, double mean_global,
			    double stddev_global);


double draw_ran_gaussian(gsl_rng *RNG_ptr, double mean, double sttdev);


double vi_log_likelihood(gsl_vector *vi_vector, gsl_vector *doy_vector,
			 gsl_vector *param_vector, size_t size, double sigma);

#endif

A src/sampler.c => src/sampler.c +308 -0
@@ 0,0 1,308 @@
#include "blsp.h"
#include "blsp_data.h"
#include "blsp_math.h"
#include "common.h"
#define PARAMETER_COUNT 7
#define BURN_STEPS 50

gsl_matrix *blsp_sampler(BLSP_Data_t *TS_Data, double *theta_mean, double *theta_sd,
		  double sigma, size_t iterations, size_t burn) {

  size_t observation_count = TS_Data->n_obs;
  size_t year_count = TS_Data->n_years;
  double m = 0.1;
  double w = year_count / (year_count + m);

  gsl_vector *theta_mean_vector;
  gsl_vector *theta_sd_vector;
  gsl_vector *current_log_like;
  gsl_vector *theta_hat_candidate_vector;

  gsl_matrix *theta_hat;
  gsl_matrix *attempts;
  gsl_matrix *acceptences;
  gsl_matrix *metropolis_hastings_matrix;


  // Create random number generator
  const gsl_rng_type *RNG_t;
  gsl_rng *RNG_ptr;
  gsl_rng_env_setup();
  RNG_t = gsl_rng_taus;
  RNG_ptr = gsl_rng_alloc(RNG_t);
  gsl_rng_set(RNG_ptr, 1);

  /* BLSP_Model_t *BLSP_Model = */
  /*     BLSP_Model_alloc(year_count, observation_count, PARAMETER_COUNT); */

  gsl_vector_view initial_theta_hat =
      gsl_vector_view_array(theta_mean, PARAMETER_COUNT);
  gsl_vector_view initial_theta_sd =
      gsl_vector_view_array(theta_sd, PARAMETER_COUNT);

  theta_mean_vector = gsl_vector_alloc(PARAMETER_COUNT);
  gsl_vector_memcpy(theta_mean_vector, &initial_theta_hat.vector);
  theta_sd_vector = gsl_vector_alloc(PARAMETER_COUNT);
  gsl_vector_memcpy(theta_sd_vector, &initial_theta_sd.vector);

  // Initialize matrix of parameter means
  // The state of each parameter for each year is stored
  theta_hat = gsl_matrix_alloc(year_count, PARAMETER_COUNT);
  for (size_t j = 0; j < year_count; ++j) {
    gsl_matrix_set_row(theta_hat, j, &initial_theta_hat.vector);
  }

  // INITIAL LOG LIKELIHOOD
  // Initialize empty (zeroed) vector to hold log likelihoods
  current_log_like = gsl_vector_calloc(year_count);
  for (size_t year = 0; year < TS_Data->n_years; ++year) {
    // Variable to store summed log likelihood for each year
    double year_i_log_likelihood = 0;
    // Get value vectors for year i

    gsl_vector_view year_i_obs = BLSP_Data_get_year_obs(TS_Data, year);
    gsl_vector_view year_i_doy = BLSP_Data_get_year_doy(TS_Data, year);

    // Get parameter vector for year i
    gsl_vector_view curr_theta_hat = gsl_matrix_row(theta_hat, year);

    double ll = vi_log_likelihood(&year_i_obs.vector, &year_i_doy.vector,
				  &curr_theta_hat.vector,
				  year_i_obs.vector.size, sigma);

    // Set log likelihood
    gsl_vector_set(current_log_like, year, year_i_log_likelihood);
  }

  // Set up matrix for attempts and for acceptences for metropolis hastings
  attempts = gsl_matrix_alloc(year_count, PARAMETER_COUNT);
  gsl_matrix_set_all(attempts, 0.1);

  acceptences = gsl_matrix_alloc(year_count, PARAMETER_COUNT);
  gsl_matrix_set_all(acceptences, 0.1);

  // Set up metropolis hastings grid and initialize
  // This stores the current standard deviation for sampling a specific
  // parameter in a specific year.
  metropolis_hastings_matrix = gsl_matrix_alloc(year_count, PARAMETER_COUNT);
  for (size_t j = 0; j < year_count; ++j) {
    gsl_matrix_set_row(metropolis_hastings_matrix, j, theta_sd_vector);
  }
  gsl_matrix_scale(metropolis_hastings_matrix, 5.0);

  // Initialize a vector to hold a /copy/ of the current year's vector so that
  // we can update the years parameter vector with the current parameters draw
  // without overwriting the value in the original theta_hat matrix until we
  // decide to accept the candidate draw.
  theta_hat_candidate_vector =
      gsl_vector_calloc(PARAMETER_COUNT); // Candidate vector

  // Declare vector views to be initalized with each year at each iteration
  gsl_vector_view year_i_obs;
  gsl_vector_view year_i_doy;
  gsl_vector_view theta_hat_year;

  for (size_t iter = 0; iter < iterations; ++iter) {
    for (size_t year = 0; year < year_count; ++year) {

      // Create vector views for the data in the current year
      year_i_obs = BLSP_Data_get_year_obs(TS_Data, year);
      year_i_doy = BLSP_Data_get_year_doy(TS_Data, year);
      theta_hat_year = gsl_matrix_row(theta_hat, year);

      for (size_t param = 0; param < PARAMETER_COUNT; ++param) {

	// Increment attempt matrix
	gsl_matrix_set(attempts, year, param,
		       gsl_matrix_get(attempts, year, param) + 1);

	// memcopy so we can change the current parameter without setting it in
	// the original
	gsl_vector_memcpy(theta_hat_candidate_vector, &theta_hat_year.vector);

	// Draw a candidate for parameter from gaussian distribution
	double candidate_draw = draw_ran_gaussian(
	    RNG_ptr, gsl_matrix_get(theta_hat, year, param),
	    gsl_matrix_get(metropolis_hastings_matrix, year, param));

	gsl_vector_set(theta_hat_candidate_vector, param, candidate_draw);

	// Compute the candidate log likelihood for current year
	double candidate_year_i_log_likelihood = vi_log_likelihood(
	    &year_i_obs.vector, &year_i_doy.vector, theta_hat_candidate_vector,
	    year_i_doy.vector.size, sigma);

	/* for (size_t obs_i = 0; obs_i < year_i_obs.vector.size; ++obs_i) { */
	/*   // Compute simulated VI */
	/*   double doy_i = gsl_vector_get(&year_i_doy.vector, obs_i); */
	/*   vi_sim = vi_double_logistic(doy_i, theta_hat_candidate_vector); */

	/*   // Draw logp(x) */
	/*   ll_draw = log_norm(gsl_vector_get(&year_i_obs.vector, obs_i),
	 * vi_sim, */
	/*		     sigma); */

	/*   // Sum up log likelihood */
	/*   candidate_year_i_log_likelihood += ll_draw; */
	/* } */

	// Compute acceptance ratio
	double R = log_likelihood_ratio(
	    candidate_draw, candidate_year_i_log_likelihood,
	    gsl_matrix_get(theta_hat, year, param),
	    gsl_vector_get(current_log_like, year),
	    gsl_vector_get(theta_mean_vector, param),
	    gsl_vector_get(theta_sd_vector, param));

	// Decide to accept or reject
	double acceptence_prob = logl(gsl_ran_flat(RNG_ptr, 0, 1));

	if (acceptence_prob < R) {
	  double current_acceptences = gsl_matrix_get(acceptences, year, param);

	  gsl_matrix_set(theta_hat, year, param, candidate_draw);
	  gsl_vector_set(current_log_like, year,
			 candidate_year_i_log_likelihood);
	  gsl_matrix_set(acceptences, year, param, current_acceptences + 1);
	}

	// Tune metropolis hastings samples
	if (iter < burn) {
	  double attempt_cnt = gsl_matrix_get(attempts, year, param);
	  double acceptence_cnt = gsl_matrix_get(acceptences, year, param);

	  // Tune every 50 iterations
	  if (attempt_cnt > BURN_STEPS) {
	    double current_sample_stddev =
		gsl_matrix_get(metropolis_hastings_matrix, year, param);

	    // If acceptence rate is low, tighten stddev
	    if (acceptence_cnt / attempt_cnt < 0.2) {
	      gsl_matrix_set(metropolis_hastings_matrix, year, param,
			     0.8 * current_sample_stddev);
	    }

	    // If acceptence rate is high, expand sttdev
	    if (acceptence_cnt / attempt_cnt > 0.6) {
	      gsl_matrix_set(metropolis_hastings_matrix, year, param,
			     1.2 * current_sample_stddev);
	    }

	    // Reset the attempt and acceptence value for current parameter
	    gsl_matrix_set(acceptences, year, param, 0);
	    gsl_matrix_set(attempts, year, param, 0);
	  }
	}
      } // End metropolis hastings for parameter vector

      // TODO: Store parameters here
    } // End year loop

    // **** GIBBS *************************************************************
    // Sample for global mean and stddev

    // THETA MEAN *************************************************************
    // Update the vector storing global mean for each parameter
    //
    // NOTE: When refactoring, see if it's faster to use BLAS to calculate
    // column means instead of iterating fully over each column:
    // gsl_blas_dgemv(CblasTrans, 1.0 / theta_hat->size1, theta_hat,
    // scale_vector, 0.0, col_means);

    for (size_t p = 0; p < PARAMETER_COUNT; ++p) {
      double column_mean = 0, column_sum = 0;
      double theta_mean_draw = 0;

      // calculate column mean for parameter p
      for (size_t year = 0; year < TS_Data->n_years; ++year) {
	double th_p = gsl_matrix_get(theta_hat, year, p);
	column_sum += th_p;
      }
      column_mean = column_sum / TS_Data->n_years;

      theta_mean_draw = draw_ran_gaussian(
	  RNG_ptr, w * column_mean + (1 - w) * theta_mean[p],
	  gsl_vector_get(theta_sd_vector, p) / sqrtl((year_count + 0.1)));

      gsl_vector_set(theta_mean_vector, p, theta_mean_draw);
    } // END THETA MEAN UPDATE

    // THETA STDDEV ***********************************************************
    // Update the vector storing global stddev for each parameter
    // 1. Calculate SSE
    // 2. Draw new stddev from gamma dist

    for (size_t p = 0; p < PARAMETER_COUNT; ++p) {
      // 1. SSE for parameter p
      double xi = 0, xj = 0, stddev_sse = 0;
      double sse_i = 0;
      double sse_2 = 0;
      for (size_t year = 0; year < TS_Data->n_years; ++year) {
	xi = gsl_matrix_get(theta_hat, year, p);
	xj = gsl_vector_get(theta_mean_vector, p); // move this out (future)
	sse_i = xi - xj;
	sse_2 = gsl_pow_2(sse_i);

	stddev_sse += sse_2;
      }

      // 2. Draw new stddev from gamma dist
      double gamma_a = 0, gamma_b = 0, theta_stddev_p = 0;
      // Compute parameters
      gamma_a = year_count / 2.0 + 0.1;
      gamma_b = stddev_sse / 2.0 + 0.1;

      // Draw sample
      theta_stddev_p = gsl_ran_gamma(RNG_ptr, gamma_a, 1.0 / gamma_b);

      // intermediate variable for debugging
      double theta_stddev_p_final = 1 / sqrtl(theta_stddev_p);

      gsl_vector_set(theta_sd_vector, p, theta_stddev_p_final);
    } // END THETA STDDEV UPDATE

    // GLOBAL STDDEV **********************************************************
    // update overall standard dev (noise)
    double sse_sim = 0;
    for (size_t year = 0; year < TS_Data->n_years; ++year) {
      // 1. Calculate VI SSE for each year and add to SSE

      // Get value vectors for year i
      gsl_vector_view year_i_obs = BLSP_Data_get_year_obs(TS_Data, year);
      gsl_vector_view year_i_doy = BLSP_Data_get_year_doy(TS_Data, year);

      // We use the scale vector as a temporary place to memcpy our parameter
      // vector for year i
      // gsl_matrix_get_row(candidate_vector, theta_hat, year);

      gsl_vector_view curr_theta_hat = gsl_matrix_row(theta_hat, year);
      // Iterate over each obs date in year i summing up SSE with each i
      double vi_sim = 0;
      for (size_t obs_i = 0; obs_i < year_i_obs.vector.size; ++obs_i) {
	// Calculate the VI for obs_i with year_i parameter vector
	double doy_i = gsl_vector_get(&year_i_doy.vector, obs_i);
	vi_sim = vi_double_logistic(doy_i, &curr_theta_hat.vector);

	double indv_obs = gsl_vector_get(&year_i_obs.vector, obs_i);

	sse_sim += gsl_pow_2(indv_obs - vi_sim);
      }
    }

    // 2. Draw global sigma from gamma distribution
    double sigma_tmp;
    double sigma_gamma_a, sigma_gamma_b;

    sigma_gamma_a = TS_Data->n_obs / 2.0 + 0.1;
    sigma_gamma_b = sse_sim / 2.0 + 0.1;

    sigma_tmp = gsl_ran_gamma(RNG_ptr, sigma_gamma_a, 1 / sigma_gamma_b);

    sigma = 1 / sqrtl(sigma_tmp);
  }

  /* FILE *out_f = fopen("./data/test.dat", "wb"); */
  /* gsl_matrix_fwrite(out_f, metropolis_hastings_matrix); */
  /* fclose(out_f); */
  return theta_hat;
}

A src/sampler.h => src/sampler.h +8 -0
@@ 0,0 1,8 @@
#ifndef SAMPLER_H_
#define SAMPLER_H_

#include "blsp_data.h"
gsl_matrix *blsp_sampler(BLSP_Data_t *TS_Data, double *theta_mean, double *theta_sd,
		  double sigma, size_t iterations, size_t burn);

#endif

D src/sampler1.c => src/sampler1.c +0 -479
@@ 1,479 0,0 @@
//#define DEBUG
#include "common.h"
#include "ts_data.h"
#include <stdio.h>

#define GSL_RNG_SEED 1
#define W 0.9950249 //     w <- nyear / (nyear + m) # coeff for post norm

#define M_LN_SQRT_2PI 0.918938533204672741780329736406
#define N_PARAMETER 7

// GENERAL FUNKS **************************************************************

/*
 * Double logistic function with greendown parameter (Elmore et al., 2012)
 */
double vi_double_logistic(double doy, gsl_vector *parameter_vector) {

  double m1_l = gsl_cdf_logistic_P(gsl_vector_get(parameter_vector, 0), 1);
  double m7_l = gsl_cdf_logistic_P(gsl_vector_get(parameter_vector, 6), 1);

  double term1, // (m2 - m7 * t)
      term2,    // 1 / (1 + e^((m3 - t) / m4))
      term3;    // 1 / (1 + e^((m5 - t) / m6))
  int status = 0;

  gsl_sf_result_e10 term2_exp;
  gsl_sf_result_e10 term3_exp;
  term1 = gsl_vector_get(parameter_vector, 1) - m7_l * doy;

  gsl_sf_exp_e10_e((gsl_vector_get(parameter_vector, 2) - doy) /
                       gsl_vector_get(parameter_vector, 3),
                   &term2_exp);
  term2 = (1 / (1 + term2_exp.val));

  gsl_sf_exp_e10_e((gsl_vector_get(parameter_vector, 4) - doy) /
                       gsl_vector_get(parameter_vector, 5),
                   &term3_exp);

  term3 = (1 / (1 + term3_exp.val));

  return m1_l + term1 * (term2 - term3);
}

/*
 * Safely compute /log/ probabilty from normal distribution.
 * Adapated from dnorm.c & dnorm4() from R Core.
 */
double log_norm(double x, double mu, double sigma) {
  double xx;
  xx = (x - mu) / sigma;
  xx = fabs(xx);
  return -(M_LN_SQRT_2PI + 0.5 * xx * xx + gsl_sf_log(sigma));
}

// MAIN ***********************************************************************
int main(int argc, char const *argv[]) {

  // Parameters taken from simulated data in R
  double theta_mean[N_PARAMETER] = {-1.998392,  0.960355, 120.702350, 9.263498,
                                    288.853856, 9.166685, -6.592421};
  double theta_sd[N_PARAMETER] = {0.07057906, 0.05609551, 1.08944966,
                                  0.88183154, 1.55979462, 1.20727157,
                                  0.19881890};

  // Copy over theta mean and theta standard deviation to GSL_Vectors
  // Could also just create a GSL array view to the two arrays but would rather
  // just copy the data for now
  gsl_vector *theta_sd_view = gsl_vector_calloc(N_PARAMETER);
  gsl_vector *theta_mean_view = gsl_vector_calloc(N_PARAMETER);
  for (size_t i = 0; i < N_PARAMETER; ++i) {
    gsl_vector_set(theta_mean_view, i, theta_mean[i]);
    gsl_vector_set(theta_sd_view, i, theta_sd[i]);
  }

  // Set up RNG
  const gsl_rng_type *RNG_t;
  gsl_rng *RNG_ptr;
  // Create random number generator
  gsl_rng_env_setup();
  RNG_t = gsl_rng_taus;
  RNG_ptr = gsl_rng_alloc(RNG_t);
  gsl_rng_set(RNG_ptr, 1);

  // We simulated 20 years and 334 obs
  size_t num_years = 20, num_obs = 334, curr_yr_id = 0;
  double prior_strength = 0.1; // used when updating MCMC

  // GSL vectors to store data
  gsl_vector *doy_vector = gsl_vector_alloc(num_obs);
  gsl_vector *y_vector = gsl_vector_alloc(num_obs);
  gsl_vector *yr_id_vector = gsl_vector_alloc(num_years);

  plog("Reading data");
  // Read in test data. GLS will throw error if file not found
  FILE *file_doy = fopen("./data/doy_full.dat", "r");
  gsl_vector_fscanf(file_doy, doy_vector);
  fclose(file_doy);

  FILE *file_y = fopen("./data/y_full.dat", "r");
  gsl_vector_fscanf(file_y, y_vector);
  fclose(file_y);

  FILE *file_yr_id = fopen("./data/year_idx.dat", "r");
  gsl_vector_fscanf(file_y, yr_id_vector);
  fclose(file_yr_id);

  // Store our initial state. This is used in the sampler but *does not change*
  gsl_vector *initial_theta_hat = gsl_vector_alloc(N_PARAMETER);
  gsl_vector_memcpy(initial_theta_hat, theta_mean_view);

  // Allocate structure to hold data allowing us to slice data by year
  TS_Data_t *TS_Data = TS_Data_alloc(num_years, num_obs);

  // Change pointer to the needed vectors
  TS_Data->obs = y_vector;
  TS_Data->doy = doy_vector;

  // Set up the year_idx vector. Important to note that we iterate from one so
  // that we make sure the year indexing values start from 0.
  // See ts_data.h for more info
  plog("Set up year idx");
  for (size_t i = 1; i < TS_Data->n_years +1; ++i) {
    gsl_vector_set(TS_Data->year_idx, i,
                   gsl_vector_get(TS_Data->year_idx, i - 1) +
                       gsl_vector_get(yr_id_vector, i - 1));
  }



  // Initialize matrix of parameter means.
  // The parameter vector state for each year is updated in this matrix,
  // and the global mean and stddev are updated using the values stored here
  // as well.
  plog("initializing theta hat");
  gsl_matrix *theta_hat = gsl_matrix_alloc(num_years, N_PARAMETER);
  for (size_t j = 0; j < num_years; ++j) {
    gsl_matrix_set_row(theta_hat, j, theta_mean_view);
  }

  double sigma = 0.08040725;

  // INITIAL LOG LIKELIHOOD ***************************************************
  // Initial Log likelihood at the current value of theta for each year.

  // Initialize empty (zeroed) vector to hold log likelihoods
  gsl_vector *current_log_like = gsl_vector_calloc(num_years);

  // Iterate over each year

  plog("Computing initial log likelihoods");
  for (size_t year = 0; year < num_years; ++year) {
    // Variable to store summed log likelihood for each year
    double year_i_log_likelihood = 0;
    // Get value vectors for year i

    gsl_vector_view year_i_obs = TS_Data_get_year_obs(TS_Data, year);
    gsl_vector_view year_i_doy = TS_Data_get_year_doy(TS_Data, year);

    // Get parameter vector for year i
    gsl_vector_view curr_theta_hat = gsl_matrix_row(theta_hat, year);

    // Iterate over each obs in year
    double vi_sim = 0;
    double ll_draw = 0;

    for (size_t obs_i = 0; obs_i < year_i_obs.vector.size; ++obs_i) {
      // Compute simulated VI
      double doy_i = gsl_vector_get(&year_i_doy.vector, obs_i);
      vi_sim = vi_double_logistic(doy_i, &curr_theta_hat.vector);

      // Draw logp(x)
      double vi_true = gsl_vector_get(&year_i_obs.vector, obs_i);
      ll_draw = log_norm(vi_true, vi_sim, sigma);

      // Sum up log likelihood
      year_i_log_likelihood += ll_draw;
    }

    // Set log likelihood
    gsl_vector_set(current_log_like, year, year_i_log_likelihood);
  }

  plog("Initializing metropolis hastings acceptence and attempt grids");
  // Set up matrix for attempts and for acceptences for metropolis hastings
  gsl_matrix *attempts = gsl_matrix_alloc(num_years, N_PARAMETER);
  gsl_matrix_set_all(attempts, 0.1);

  gsl_matrix *acceptences = gsl_matrix_alloc(num_years, N_PARAMETER);
  gsl_matrix_set_all(acceptences, 0.1);

  // Set up metropolis hastings grid and initialize
  // This stores the current standard deviation for sampling a specific
  // parameter in a specific year.
  plog("Initializing metropolis hastings sampling grid");
  gsl_matrix *mh_matrix = gsl_matrix_alloc(num_years, N_PARAMETER);
  for (size_t j = 0; j < num_years; ++j) {
    gsl_matrix_set_row(mh_matrix, j, theta_sd_view);
  }
  gsl_matrix_scale(mh_matrix, 5.0);

  unsigned int iterations = 7000;
  unsigned int burn = 2000;

  // NOTE: Right now we are not keeping track each parameter draw.
  //       I am diagnosing the sampler based off the final SD and mean grids.
  // gsl_matrix *parameter_tracker =
  //     gsl_matrix_calloc(num_years * 7000, N_PARAMETER);
  // gsl_matrix *parameter_tracker_1 = gsl_matrix_calloc(num_years,
  // N_PARAMETER);

  // Initialize a vector to hold a /copy/ of the current year's vector so that
  // we can update the years parameter vector with the current parameters draw
  // without overwriting the value in the original theta_hat matrix until we
  // decide to accept the candidate draw.
  gsl_vector *candidate_theta_hat_vector =
      gsl_vector_calloc(N_PARAMETER); // Candidate vector

  // **** BEGIN ***************************************************************
  plog("Starting sampler");
  for (size_t iter = 0; iter < iterations; ++iter) {
    for (size_t year = 0; year < TS_Data->n_years; ++year) {
      // Create vector views for the data in the current year
      gsl_vector_view year_i_obs = TS_Data_get_year_obs(TS_Data, year);
      gsl_vector_view year_i_doy = TS_Data_get_year_doy(TS_Data, year);
      gsl_vector_view theta_hat_year = gsl_matrix_row(theta_hat, year);

      for (size_t param = 0; param < N_PARAMETER; ++param) {

        plog("ITER: %lu\t | YEAR: %lu\t | PARAM: %lu", iter, year, param);

        // attempts ++
        gsl_matrix_set(attempts, year, param,
                       gsl_matrix_get(attempts, year, param) + 1);

        // memcopy so we can change the current parameter without setting it in
        // the original
        // Get current years parameter vector
        // gsl_vector_view candidate_theta = gsl_matrix_row(theta_hat, year);
        // gsl_vector_memcpy(candidate_vector, &candidate_theta.vector);
        // gsl_matrix_get_row(candidate_theta_hat_vector, theta_hat, year);
        gsl_vector_memcpy(candidate_theta_hat_vector, &theta_hat_year.vector);

        double cc_sd = gsl_matrix_get(mh_matrix, year, param); // Current stddev
        double cc_mn = gsl_matrix_get(theta_hat, year, param); // current mean

        // Draw a candidate for parameter
        double candidate_draw = gsl_ran_gaussian(RNG_ptr, cc_sd) + cc_mn;
        gsl_vector_set(candidate_theta_hat_vector, param, candidate_draw);

        // Compute the candidate log likelihood for year
        double vi_sim = 0;
        double ll_draw = 0;
        double candidate_year_i_log_likelihood = 0;
        for (size_t obs_i = 0; obs_i < year_i_obs.vector.size; ++obs_i) {
          // Compute simulated VI
          double doy_i = gsl_vector_get(&year_i_doy.vector, obs_i);
          vi_sim = vi_double_logistic(doy_i, candidate_theta_hat_vector);

          // Draw logp(x)
          double vi_true = gsl_vector_get(&year_i_obs.vector, obs_i);
          ll_draw = log_norm(vi_true, vi_sim, sigma);

          // Sum up log likelihood
          candidate_year_i_log_likelihood += ll_draw;
        }

        // Get the global mean and stddev for current parameter
        double theta_mn_j, theta_sd_j;
        theta_mn_j = gsl_vector_get(theta_mean_view, param);
        theta_sd_j = gsl_vector_get(theta_sd_view, param);

        // Compute values to compute accetence ratio
        double theta_i = gsl_matrix_get(theta_hat, year, param);
        double log_1 = log_norm(candidate_draw, theta_mn_j, theta_sd_j);
        double log_2 = log_norm(theta_i, theta_mn_j, theta_sd_j);

        double cur_ll = gsl_vector_get(current_log_like, year);
        double ll_dif = candidate_year_i_log_likelihood - cur_ll;

        // Compute acceptance ratio
        double R = ll_dif + log_1 - log_2;

        // Decide to accept or reject
        double ttt = gsl_ran_flat(RNG_ptr, 0, 1); // TODO: change shit variable
                                                  //       name
        double l_ttt = logl(ttt);
        // double ttt = logf((rand()/(double)(RAND_MAX)) * 2 - 1);

        // int status = gsl_fcmp(R, gsl_sf_log(gsl_ran_flat(r, 0, 1)),
        // 0.000001f);
        // if (status > 0) {
        if (l_ttt < R) { // Update values for current parameter
          double c_a = gsl_matrix_get(acceptences, year, param);

          gsl_matrix_set(theta_hat, year, param, candidate_draw);
          gsl_vector_set(current_log_like, year,
                         candidate_year_i_log_likelihood);
          gsl_matrix_set(acceptences, year, param, c_a + 1);
        }

        // Tune metropolis hastings sampler
        if (iter < burn) {
          double attempt_cnt = gsl_matrix_get(attempts, year, param);
          double acceptence_cnt = gsl_matrix_get(acceptences, year, param);

          // Tune every 50 iterations
          if (attempt_cnt > 50) {
            double curr_mh = gsl_matrix_get(mh_matrix, year, param);
            // NOTE: mh_matrix is not converging correctly

            // If acceptence rate is low, tighten stddev
            if (acceptence_cnt / attempt_cnt < 0.2) {
              gsl_matrix_set(mh_matrix, year, param, 0.8 * curr_mh);
            }

            // If acceptence rate is high, expand sttdev
            if (acceptence_cnt / attempt_cnt > 0.6) {
              gsl_matrix_set(mh_matrix, year, param, 1.2 * curr_mh);
            }

            // Reset the attempt and acceptence value for current parameter
            gsl_matrix_set(acceptences, year, param, 0);
            gsl_matrix_set(attempts, year, param, 0);
          }
        }
      } // END metropolis hastings for parameter vector

      // NOTE: When storing parameters, here is where to do it
      // printf("%lu %lu ", iter, year);
      // for (size_t i = 0; i < N_PARAMETER; ++i) printf("%f ", gsl_matrix_get(theta_hat, year, i));
      // printf("\n");

    }   // END year loop

    // **** GIBBS *************************************************************
    // Sample for global mean and stddev

    // THETA MEAN *************************************************************
    // Update the vector storing global mean for each parameter
    // theta_mn <- rnorm(npar, w * colMeans(theta_hat) + (1 - w) * mu,
    // theta_sd / sqrt((nyear + m)))
    //
    // NOTE: When refactoring, see if it's faster to use BLAS to calculate
    // column means instead of iterating fully over each column:
    // gsl_blas_dgemv(CblasTrans, 1.0 / theta_hat->size1, theta_hat,
    // scale_vector, 0.0, col_means);

    for (size_t p = 0; p < N_PARAMETER; ++p) {
      double column_mean = 0, column_sum = 0;
      double theta_mn_mu = 0, theta_mn_sig = 0;
      double theta_mean_p = 0;

      // calculate column mean for parameter p
      for (size_t year = 0; year < TS_Data->n_years; ++year) {
        double th_p = gsl_matrix_get(theta_hat, year, p);
        column_sum += th_p;
      }
      column_mean = column_sum / TS_Data->n_years;

      // calculate mu parameter for distribution
      theta_mn_mu =
          W * column_mean + (1 - W) * gsl_vector_get(initial_theta_hat, p);

      // calculate sigma parameter for distribution
      theta_mn_sig =
          gsl_vector_get(theta_sd_view, p) / sqrtl((num_years + 0.1));

      // Pull draw
      theta_mean_p = gsl_ran_gaussian(RNG_ptr, theta_mn_sig);
      // Apply mean transformation
      theta_mean_p += theta_mn_mu;

      // Set theta_mn[p]
      gsl_vector_set(theta_mean_view, p, theta_mean_p);
    } // END THETA MEAN UPDATE

    // THETA STDDEV ***********************************************************
    // Update the vector storing global stddev for each parameter
    // 1. Calculate SSE
    // 2. Draw new stddev from gamma dist

    for (size_t p = 0; p < N_PARAMETER; ++p) {
      // 1. SSE for parameter p
      double xi = 0, xj = 0, stddev_sse = 0;
      double sse_i = 0;
      double sse_2 = 0;
      for (size_t year = 0; year < TS_Data->n_years; ++year) {
        xi = gsl_matrix_get(theta_hat, year, p);
        xj = gsl_vector_get(theta_mean_view, p); // move this out (future)
        sse_i = xi - xj;
        sse_2 = gsl_pow_2(sse_i);

        stddev_sse += sse_2;
      }

      // 2. Draw new stddev from gamma dist
      double gamma_a = 0, gamma_b = 0, theta_stddev_p = 0;
      // Compute parameters
      gamma_a = num_years / 2.0 + 0.1;
      gamma_b = stddev_sse / 2.0 + 0.1;

      // Draw sample
      theta_stddev_p = gsl_ran_gamma(RNG_ptr, gamma_a, 1.0 / gamma_b);


      // intermediate variable for debugging
      double theta_stddev_p_final = 1 / sqrtl(theta_stddev_p);

      gsl_vector_set(theta_sd_view, p, theta_stddev_p_final);
    } // END THETA STDDEV UPDATE

    // GLOBAL STDDEV **********************************************************
    // update overall standard dev (noise)
    double sse_sim = 0;
    for (size_t year = 0; year < TS_Data->n_years; ++year) {
      // 1. Calculate VI SSE for each year and add to SSE

      // Get value vectors for year i
      gsl_vector_view year_i_obs = TS_Data_get_year_obs(TS_Data, year);
      gsl_vector_view year_i_doy = TS_Data_get_year_doy(TS_Data, year);

      // We use the scale vector as a temporary place to memcpy our parameter
      // vector for year i
      // gsl_matrix_get_row(candidate_vector, theta_hat, year);

      gsl_vector_view curr_theta_hat = gsl_matrix_row(theta_hat, year);
      // Iterate over each obs date in year i summing up SSE with each i
      double vi_sim = 0;
      for (size_t obs_i = 0; obs_i < year_i_obs.vector.size; ++obs_i) {
        // Calculate the VI for obs_i with year_i parameter vector
        double doy_i = gsl_vector_get(&year_i_doy.vector, obs_i);
        vi_sim = vi_double_logistic(doy_i, &curr_theta_hat.vector);

        double indv_obs = gsl_vector_get(&year_i_obs.vector, obs_i);

        sse_sim += gsl_pow_2(indv_obs - vi_sim);
      }
    }

    // 2. Draw global sigma from gamma distribution
    double sigma_tmp;
    double sigma_gamma_a, sigma_gamma_b;

    sigma_gamma_a = TS_Data->n_obs / 2.0 + 0.1;
    sigma_gamma_b = sse_sim / 2.0 + 0.1;

    sigma_tmp = gsl_ran_gamma(RNG_ptr, sigma_gamma_a, 1 / sigma_gamma_b);

    sigma = 1 / sqrtl(sigma_tmp);

  } // END iter loop

  FILE *out_f = fopen("./data/test.dat", "wb");
  // gsl_matrix_fprintf(out_f, theta_hat, "%f");
  gsl_matrix_fwrite(out_f, mh_matrix);
  fclose(out_f);


  TS_Data_free(TS_Data);
  // these are freed by TS_Data_free currently
  // gsl_vector_free(doy_vector);
  // gsl_vector_free(y_vector);
  // gsl_vector_free(yr_id_vector);

  gsl_vector_free(theta_mean_view);
  gsl_vector_free(theta_sd_view);
  gsl_vector_free(initial_theta_hat);
  gsl_vector_free(current_log_like);
  gsl_vector_free(candidate_theta_hat_vector);

  gsl_matrix_free(theta_hat);
  gsl_matrix_free(attempts);
  gsl_matrix_free(acceptences);
  gsl_matrix_free(mh_matrix);


  return 0;
}

D src/ts_data.c => src/ts_data.c +0 -68
@@ 1,68 0,0 @@
#include "ts_data.h"
#include <stdio.h>
#include <stdlib.h>

TS_Data_t *TS_Data_alloc(size_t n_years, size_t n_obs) {
  TS_Data_t *TS_Data = malloc(sizeof(TS_Data_t));
  if (TS_Data == NULL) {
    printf("Couldn't allocate memory for TS_Data\n");
    exit(EXIT_FAILURE);
  }

  TS_Data->n_years = n_years;
  TS_Data->n_obs = n_obs;


  // right now we are overidding these externally so we just wont allocate them
  // TS_Data->obs = gsl_vector_calloc(n_obs);
  // TS_Data->doy = gsl_vector_calloc(n_obs);
  TS_Data->year_idx = gsl_vector_calloc(n_years + 1);

  return TS_Data;
}


void TS_Data_free(TS_Data_t* TS_Data) {
  free(TS_Data->obs);
  free(TS_Data->doy);
  free(TS_Data->year_idx);
  free(TS_Data);
}

unsigned int TS_Data_get_year(TS_Data_t *TS_Data, size_t i) {
  return gsl_vector_get(TS_Data->year_idx, i);
}


double TS_Data_get_doy(TS_Data_t *TS_Data, size_t i) {
  return gsl_vector_get(TS_Data->doy, i);
}

gsl_vector_view TS_Data_get_year_doy(TS_Data_t *TS_Data, size_t year_idx) {
  size_t idx_s, idx_e;

  if (year_idx > (TS_Data->n_years) - 1)
    exit(EXIT_FAILURE); // TODO: Add message

  idx_s = TS_Data_get_year(TS_Data, year_idx);
  idx_e = TS_Data_get_year(TS_Data, year_idx + 1);

  return gsl_vector_subvector(TS_Data->doy, idx_s, idx_e - idx_s);
}

double TS_Data_get_obs(TS_Data_t *TS_Data, size_t i) {
  return gsl_vector_get(TS_Data->obs, i);
}

gsl_vector_view TS_Data_get_year_obs(TS_Data_t *TS_Data, size_t year_idx) {
  size_t idx_s, idx_e;

  if (year_idx > (TS_Data->n_years) - 1)
    exit(EXIT_FAILURE); // TODO: Add message

  idx_s = TS_Data_get_year(TS_Data, year_idx);
  idx_e = TS_Data_get_year(TS_Data, year_idx + 1);

  return gsl_vector_subvector(TS_Data->obs, idx_s, idx_e - idx_s);
}