Mercurial > octave
diff build-aux/mk-octave-config-h.sh @ 21229:a83e7a384ee0
create and install a subset of config.h in octave-config.h
* mk-octave-config-h.sh: New file.
* Makefile.am (EXTRA_DIST): Add mk-octave-config.h.sh to the list.
(octinclude_HEADERS): Add octave-config.h to the list.
(octave-config.h): New rule.
* common.mk (do_subst_config_vals, do_subst_cross_config_vals):
Don't substitute unused ENABLE options.
* configure.ac: Note the reason for using oct-conf-post.in.h.
Add OCTAVE_ prefix to ENABLE_BOUNDS_CHECK ENABLE_ATOMIC_REFCOUNT,
ENABLE_64, ENABLE_OPENMP, and ENABLE_FLOAT_TRUNCATE in calls to
AC_DEFINE. Change all uses.
* oct-conf-post.in.h: Define HAVE_OCTAVE_DEPRECATED_ATTR instead of
HAVE_ATTR_DEPRECATED. Likewise for HAVE_ATTR_NORETURN and
HAVE_ATTR_UNUSED. Change all uses.
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Mon, 08 Feb 2016 17:30:29 -0500 |
parents | |
children | ffc9806bb300 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/build-aux/mk-octave-config-h.sh Mon Feb 08 17:30:29 2016 -0500 @@ -0,0 +1,178 @@ +#! /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/>. + +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/>. + +*/ + +#if ! defined (octave_octave_config_h) +#define octave_octave_config_h 1 + +#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 +EOF