view build-aux/mk-octave-config-h.sh @ 21240:7af5ca01ecac

allow octave-config.h to be included unconditionally * oct-conf-post.in.h (OCTAVE_AUTOCONFIG_H_INCLUDED): Rename from OCTAVE_CONFIG_H_INCLUDED. * mk-octave-config-h.sh: Protect contents of generated file with OCTAVE_AUTOCONFIG_H_INCLUDED. * oct-refcount.h: Simply include octave-config.h instead of checking OCTAVE_CONFIG_H_INCLUDED.
author John W. Eaton <jwe@octave.org>
date Wed, 10 Feb 2016 11:57:17 -0500
parents ffc9806bb300
children 1bca6c72d2b1
line wrap: on
line source

#! /bin/sh
#
# Copyright (C) 2016 John W. Eaton
#
# This file is part of Octave.
#
# Octave is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by the
# Free Software Foundation; either version 3 of the License, or (at
# your option) any later version.
#
# Octave is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# for more details.
#
# You should have received a copy of the GNU General Public License
# along with Octave; see the file COPYING.  If not, see
# <http://www.gnu.org/licenses/>.

# Generate a header file that provides the public symbols from Octave's
# autoconf-generated config.h file.  See the notes at the top of the
# generated octave-config.h file for more details.

if [ $# -ne 1 ]; then
  echo "usage: mk-octave-config-h.sh CONFIG-FILE" 1>&2
  exit 1
fi

config_h_file=$1

cat << EOF
/* DO NOT EDIT!  Generated by mk-octave-config-h.sh.  */
/*

Copyright (C) 2016 John W. Eaton

This file is part of Octave.

Octave is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 3 of the License, or (at your
option) any later version.

Octave is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
for more details.

You should have received a copy of the GNU General Public License
along with Octave; see the file COPYING.  If not, see
<http://www.gnu.org/licenses/>.

*/

/*

All Octave source files should begin with

  #if defined (HAVE_CONFIG_H)
  #  include <config.h>
  #endif

All public Octave header files should have the form

  #if ! defined (INCLUSION_GUARD_SYMBOL)
  #define INCLUSION_GUARD_SYMBOL 1

  #include "octave-config.h"

  // Contents of header file.

  #endif

In Octave source files, INCLUSION_GUARD_SYMBOL should have the form

  octave_NAME_h

with NAME formed from the header file name with '-' replaced by '_'.

It is safe to include octave-config.h unconditionally since it will
expand to an empty file if it is included after Octave's
autoconf-generated config.h file.

Users of Octave's libraries should not need to include octave-config.h
since all of Octave's header files already include it.

*/

#if ! defined (octave_octave_config_h)
#define octave_octave_config_h 1

#if ! defined (OCTAVE_AUTOCONFIG_H_INCLUDED)

#include <stdint.h>

#if defined (__GNUC__)
#  define OCTAVE_DEPRECATED(msg) __attribute__ ((__deprecated__ (msg)))
#  define OCTAVE_NORETURN __attribute__ ((__noreturn__))
#  define OCTAVE_UNUSED __attribute__ ((__unused__))

#  define HAVE_OCTAVE_DEPRECATED_ATTR 1
#  define HAVE_OCTAVE_NORETURN_ATTR 1
#  define HAVE_OCTAVE_UNUSED_ATTR 1
#else
#  define OCTAVE_DEPRECATED(msg)
#  define OCTAVE_NORETURN
#  define OCTAVE_UNUSED

/* #  undef HAVE_OCTAVE_DEPRECATED_ATTR */
/* #  undef HAVE_OCTAVE_NORETURN_ATTR */
/* #  undef HAVE_OCTAVE_UNUSED_ATTR */
#endif

#if defined (_MSC_VER)
#  define OCTAVE_API __declspec(dllimport)
#  define OCTINTERP_API __declspec(dllimport)
#else
#  define OCTAVE_API
#  define OCTINTERP_API
#endif

#include <stdint.h>
EOF

octave_idx_type="`sed -n 's/#define OCTAVE_IDX_TYPE \([_a-zA-Z][_a-zA-Z0-9]*\)/\1/p' $config_h_file`"

if test -z "$octave_idx_type"; then
  echo "mk-octave-config-h.sh: failed to find OCTAVE_IDX_TYPE in $config_h_file" 1>&2
  exit 1
fi

cat << EOF

typedef $octave_idx_type octave_idx_type;

EOF

if grep "#define OCTAVE_ENABLE_FLOAT_TRUNCATE 1" $config_h_file > /dev/null;
then
  echo "#define OCTAVE_FLOAT_TRUNCATE volatile"
else
  echo "#define OCTAVE_FLOAT_TRUNCATE"
fi

grep "#\(undef\|define\) OCTAVE_ENABLE_64" $config_h_file
grep "#\(undef\|define\) OCTAVE_ENABLE_ATOMIC_REFCOUNT" $config_h_file
grep "#\(undef\|define\) OCTAVE_ENABLE_BOUNDS_CHECK" $config_h_file
grep "#\(undef\|define\) OCTAVE_ENABLE_OPENMP" $config_h_file

if grep "#undef HAVE_DEV_T" $config_h_file > /dev/null;
then
  cat << EOF

typedef short dev_t;

EOF
else
  cat << EOF

/* typedef short dev_t; */

EOF
fi

if grep "#undef HAVE_INO_T" $config_h_file > /dev/null;
then
    cat << EOF

typedef unsigned long ino_t;

EOF
else
    cat << EOF

/* typedef unsigned long ino_t; */

EOF
fi

have_roundl=no
if grep "#define HAVE_ROUNDL" $config_h_file > /dev/null;
then
  have_roundl=yes
fi

sizeof_long_double="`sed -n 's/#define SIZEOF_LONG_DOUBLE \([0-9]*\)/\1/p' $config_h_file`"

if test -z "$sizeof_long_double"; then
  echo "mk-octave-config-h.sh: failed to find SIZEOF_LONG_DOUBLE in $config_h_file" 1>&2
  exit 1
fi

if test $sizeof_long_double -ge 10 && test $have_roundl = yes; then
  echo "#define OCTAVE_INT_USE_LONG_DOUBLE 1"
  if test $sizeof_long_double -lt 16; then
    cat << EOF

#if (defined (__i386__) || defined (__x86_64__)) && defined (__GNUC__)
#  define OCTAVE_ENSURE_LONG_DOUBLE_OPERATIONS_ARE_NOT_TRUNCATED 1
#endif
EOF
  else
    cat << EOF
/* #undef OCTAVE_ENSURE_LONG_DOUBLE_OPERATIONS_ARE_NOT_TRUNCATED */
EOF
  fi
else
  cat << EOF
/* #undef OCTAVE_INT_USE_LONG_DOUBLE */
/* #undef OCTAVE_ENSURE_LONG_DOUBLE_OPERATIONS_ARE_NOT_TRUNCATED */
EOF
fi

cat << EOF

#endif

#endif
EOF