#ifndef IVL_config_H #define IVL_config_H /* * Copyright (c) 2001-2022 Stephen Williams (steve@icarus.com) * * This source code is free software; you can redistribute it * and/or modify it in source code form under the terms of the GNU * General Public License as published by the Free Software * Foundation; either version 2 of the License, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ # define SIZEOF_UNSIGNED_LONG_LONG 0 #ifndef SIZEOF_UNSIGNED_LONG # define SIZEOF_UNSIGNED_LONG 0 #endif # define SIZEOF_UNSIGNED 0 # define SIZEOF_VOID_P 0 # undef NEED_LU # undef NEED_TU # undef WLU # undef WTU # undef HAVE_IOSFWD # undef HAVE_DLFCN_H # undef HAVE_DL_H # undef HAVE_GETOPT_H # undef HAVE_LIBREADLINE # undef HAVE_READLINE_READLINE_H # undef HAVE_LIBHISTORY # undef HAVE_READLINE_HISTORY_H # undef HAVE_INTTYPES_H # undef HAVE_LROUND # undef HAVE_LLROUND # undef HAVE_NAN # undef UINT64_T_AND_ULONG_SAME /* * Define this if you want to compile vvp with memory freeing and * special valgrind hooks for the memory pools. */ # undef CHECK_WITH_VALGRIND /* Figure if I can use readline. */ #undef USE_READLINE #ifdef HAVE_LIBREADLINE #ifdef HAVE_READLINE_READLINE_H # define USE_READLINE #endif #endif /* Figure if I can use history. */ #undef USE_HISTORY #ifdef HAVE_LIBHISTORY #ifdef HAVE_READLINE_HISTORY_H # define USE_HISTORY #endif #endif #ifndef MODULE_DIR # define MODULE_DIR "." #endif #ifdef HAVE_INTTYPES_H /* This is needed in C++ to get the PRI?64 formats. */ # ifndef __STDC_FORMAT_MACROS # define __STDC_FORMAT_MACROS # endif # include typedef uint64_t vvp_time64_t; # define TIME_FMT_O PRIo64 # define TIME_FMT_U PRIu64 # define TIME_FMT_X PRIx64 # ifdef UINT64_T_AND_ULONG_SAME # define UL_AND_TIME64_SAME # endif #else /* HAVE_INTTYPES_H */ #if SIZEOF_UNSIGNED >= 8 typedef unsigned vvp_time64_t; # define TIME_FMT_O "o" # define TIME_FMT_U "u" # define TIME_FMT_X "x" #else # if SIZEOF_UNSIGNED_LONG >= 8 typedef unsigned long vvp_time64_t; # define UL_AND_TIME64_SAME # define TIME_FMT_O "lo" # define TIME_FMT_U "lu" # define TIME_FMT_X "lx" # else # if SIZEOF_UNSIGNED_LONG_LONG > SIZEOF_UNSIGNED_LONG typedef unsigned long long vvp_time64_t; # define TIME_FMT_O "llo" # define TIME_FMT_U "llu" # define TIME_FMT_X "llx" # else typedef unsigned long vvp_time64_t; # define UL_AND_TIME64_SAME # define TIME_FMT_O "lo" # define TIME_FMT_U "lu" # define TIME_FMT_X "lx" # endif # endif #endif #endif /* HAVE_INTTYPES_H */ # if SIZEOF_VOID_P == SIZEOF_UNSIGNED_LONG # define UINTPTR_C(n) n ## UL # else # if SIZEOF_VOID_P == SIZEOF_UNSIGNED_LONG_LONG # define UINTPTR_C(n) n ## ULL # else # error "Unexpected pointer size" # endif # endif # include /* getrusage, /proc/self/statm */ # undef HAVE_SYS_RESOURCE_H # undef LINUX #if !defined(HAVE_LROUND) /* * If the system doesn't provide the lround function, then we provide * it ourselves here. It is simply the nearest integer, rounded away * from zero. */ inline long int lround(double x) { if (x >= 0.0) return (long)floor(x+0.5); else return (long)ceil(x-0.5); } #endif /* HAVE_LROUND */ #if ((SIZEOF_UNSIGNED_LONG < 8) && (SIZEOF_UNSIGNED_LONG_LONG >= 8)) #if !defined(HAVE_LLROUND) /* * We also need an equivalent function with a 64-bit return value if * it is not available. */ inline int64_t i64round(double x) { if (x >= 0.0) return (int64_t)floor(x+0.5); else return (int64_t)ceil(x-0.5); } #else /* HAVE_LLROUND */ # define i64round llround #endif /* HAVE_LLROUND */ #else # define i64round lround #endif #if !defined(HAVE_NAN) # define nan(x) (NAN) #endif #if !defined(INFINITY) # define INFINITY HUGE_VAL #endif /* * When doing dynamic linking, we need a uniform way to identify the * symbol. Some compilers put leading _, some trailing _. The * configure script figures out which is the local convention and * defines NEED_LU and NEED_TU as required. */ #ifdef NEED_LU #define LU "_" #else #define LU "" #endif #ifdef NEED_TU #define TU "_" #else #define TU "" #endif #ifdef __MINGW32__ # include # include static inline char*strndup(const char*s, size_t n) { if (strlen(s) < n) return strdup(s); char*tmp = (char*)malloc(n+1); strncpy(tmp, s, n); tmp[n] = 0; return tmp; } #endif #endif /* IVL_config_H */