-# provide headers in builddir, so they do not end up in /usr/include/ext/psi/src
+# provide headers in builddir, so they do not end up in a "src" subdirectory
PHP_PSI_HEADERS := $(addprefix $(PHP_PSI_BUILDDIR)/,$(PHP_PSI_HEADERS))
PHP_PSI_SOURCES := $(addprefix $(PHP_PSI_SRCDIR)/,$(PHP_PSI_SOURCES))
PHP_PSI_GENERATED:=$(addprefix $(PHP_PSI_SRCDIR)/,$(PHP_PSI_GENERATED))
+$(PHP_PSI_BUILDDIR)/calc:
+ mkdir -p $@
+$(PHP_PSI_BUILDDIR)/calc/%.h: $(PHP_PSI_SRCDIR)/src/calc/%.h | $(PHP_PSI_BUILDDIR)/calc
+ @cat >$@ <$<
$(PHP_PSI_BUILDDIR)/types:
mkdir -p $@
$(PHP_PSI_BUILDDIR)/types/%.h: $(PHP_PSI_SRCDIR)/src/types/%.h | $(PHP_PSI_BUILDDIR)/types
m4_foreach(incfile, [
+ [ax/ax_check_compile_flag.m4],
[ax/ax_check_sign.m4],
[ax/ax_pthread.m4],
[psi/psi.m4],
- [psi/psi_const.m4],
[psi/psi_type.m4]], [
dnl pecl build
sinclude([m4/]incfile)
PSI_CHECK_CPP
PSI_CHECK_STD_TYPES
+ AC_HEADER_DIRENT
AC_FUNC_FNMATCH
AC_FUNC_MMAP
AC_CHECK_FUNCS([mknodat eaccess])
psi_save_LIBS=$LIBS
LIBS=
- ac_includes_default="AC_INCLUDES_DEFAULT"
-
AC_MSG_CHECKING([psi source dir])
PHP_PSI_SRCDIR=PHP_EXT_SRCDIR(psi)
AC_MSG_RESULT([$PHP_PSI_SRCDIR])
PSI_STDTYPES=
PSI_CONSTS=
- AC_CONFIG_FILES(
- [$PHP_PSI_BUILDDIR/php_psi_stdinc.h:$PHP_PSI_SRCDIR/php_psi_stdinc.h.in]
- [$PHP_PSI_BUILDDIR/php_psi_posix.h:$PHP_PSI_SRCDIR/php_psi_posix.h.in]
- [$PHP_PSI_BUILDDIR/php_psi_cpp.h:$PHP_PSI_SRCDIR/php_psi_cpp.h.in]
- )
+ AC_CONFIG_FILES([$PHP_PSI_BUILDDIR/php_psi_predef.h:$PHP_PSI_SRCDIR/php_psi_predef.h.in])
])
LIBS=$psi_save_LIBS
PHP_EVAL_LIBLINE($psi_eval_LIBS, PSI_SHARED_LIBADD)
- [PSI_INCLUDES]="PSI_INCLUDES"
- AC_SUBST([PSI_INCLUDES])
AC_SUBST([PSI_STDTYPES])
- AC_SUBST([PSI_CONSTS])
AC_SUBST([PSI_CPP_SEARCH])
AC_SUBST([PSI_CPP_PREDEF])
PHP_ADD_BUILD_DIR($PHP_PSI_BUILDDIR/src/types)
PHP_PSI_HEADERS=" \
- src/calc/basic.h src/calc/bin.h src/calc/bool.h src/calc/cast.h \
- src/calc/unary.h src/calc/cmp.h src/calc/oper.h \
+ calc/basic.h calc/bin.h calc/bool.h calc/cast.h \
+ calc/unary.h calc/cmp.h calc/oper.h \
`(cd $PHP_PSI_SRCDIR/src && ls *.h types/*.h)` \
"
# parser_* should come first
PSI_DEPS=true
PHP_SUBST(PSI_DEPS)
CFLAGS="$CFLAGS -Wall -Wextra"
+ m4_foreach(flag, [
+ [fstack-protector],
+ [Wduplicate-decl-specifier],
+ [Wnull-dereference],
+ [Winit-self],
+ [Wimplicit-fallthrough=1],
+ [Wshift-overflow],
+ [Wuninitialized],
+ [Walloc-zero],
+ [Wduplicated-branches],
+ [Wduplicated-cond],
+ [Wtrampolines],
+ [Wpointer-arith],
+ [Wcast-align],
+ [Wmissing-prototypes],
+ [Wmissing-declarations],
+ [Wredundant-decls],
+ [Wdisabled-optimization],
+ [Wno-sign-compare],
+ [Wno-unused-parameter],
+ [Wno-cast-function-type]],
+ [
+ AX_CHECK_COMPILE_FLAG([-][flag], [CFLAGS="$CFLAGS -"]flag)
+ ])
else
PSI_DEPS=false
fi
AC_REQUIRE([PSI_PTHREAD_ONCE])
])
-dnl PSI_INCLUDES()
-dnl Expands to a complete list of include statements including
-dnl autoconf defaults.
-AC_DEFUN(PSI_INCLUDES, [
-#ifndef _GNU_SOURCE
-# define _GNU_SOURCE
-#endif
-#ifndef _REENTRANT
-# define _REENTRANT
-#endif
-$ac_includes_default
-#ifdef HAVE_STDBOOL_H
-# include <stdbool.h>
-#else
-# ifndef HAVE__BOOL
-# ifdef __cplusplus
-typedef bool _Bool;
-# else
-# define _Bool signed char
-# endif
-# endif
-# define bool _Bool
-# define false 0
-# define true 1
-# define __bool_true_false_are_defined 1
-#endif
-#ifdef HAVE_ERRNO_H
-# include <errno.h>
-#endif
-#ifdef HAVE_GLOB_H
-# include <glob.h>
-#endif
-#ifdef HAVE_LOCALE_H
-# include <locale.h>
-#endif
-#ifdef HAVE_XLOCALE_H
-# include <xlocale.h>
-#endif
-#ifdef HAVE_NETINET_IN_H
-# include <netinet/in.h>
-#endif
-#ifdef HAVE_NETINET_TCP_H
-# include <netinet/tcp.h>
-#endif
-#ifdef HAVE_ARPA_NAMESER_H
-# include <arpa/nameser.h>
-#endif
-#ifdef HAVE_ARPA_INET_H
-# include <arpa/inet.h>
-#endif
-#ifdef HAVE_FCNTL_H
-# include <fcntl.h>
-#endif
-#ifdef HAVE_RELIC_H
-# include <relic.h>
-#elif HAVE_NDBM_H
-# include <ndbm.h>
-#elif HAVE_GDBM_NDBM_H
-# include <gdbm-ndbm.h>
-#endif
-#ifdef HAVE_NETDB_H
-# include <netdb.h>
-#endif
-#ifdef HAVE_POLL_H
-# include <poll.h>
-#endif
-#ifdef HAVE_RESOLV_H
-# include <resolv.h>
-#endif
-#ifdef HAVE_SYS_SELECT_H
-# include <sys/select.h>
-#endif
-#ifdef HAVE_SYS_SOCKET_H
-# include <sys/socket.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-# include <sys/time.h>
-#endif
-#ifdef HAVE_SYS_TIMES_H
-# include <sys/times.h>
-#endif
-#ifdef HAVE_SYS_UIO_H
-# include <sys/uio.h>
-#endif
-#ifdef HAVE_SYS_UTSNAME_H
-# include <sys/utsname.h>
-#endif
-#ifdef HAVE_TIME_H
-# include <time.h>
-#endif
-#ifdef HAVE_SIGNAL_H
-# include <signal.h>
-#endif
-#ifdef HAVE_SYSLOG_H
-# include <syslog.h>
-#endif
-#ifdef HAVE_WCHAR_H
-# include <wchar.h>
-#endif
-#ifdef HAVE_WCTYPE_H
-# include <wctype.h>
-#endif
-])
-
dnl PSI_PKG_CONFIG()
dnl Check for `pkg-config` and add possible libjit and libffi directories to
dnl $PKG_CONFIG_PATH, because those libs often ship with headers etc. in
AC_DEFUN([PSI_SH_TEST_SIZEOF], [test -n "$AS_TR_SH([ac_cv_sizeof_]$1)" && test "$AS_TR_SH([ac_cv_sizeof_]$1)" -gt 0])
dnl PSI_CHECK_SIZEOF(type, special-includes)
-dnl AC_CHECK_SIZEOF wrapper with PSI_INCLUDES
-dnl Defines psi\\SIZEOF_<TYPE> pre-defined constant in $PSI_CONSTS_H.
AC_DEFUN(PSI_CHECK_SIZEOF, [
- AC_CHECK_SIZEOF($1, [], PSI_INCLUDES
+ AC_CHECK_SIZEOF($1, [],
$2)
- if PSI_SH_TEST_SIZEOF($1); then
- psi_add_int_const "AS_TR_CPP([SIZEOF_]$1)" "$AS_TR_SH([ac_cv_sizeof_]$1)"
- fi
])
dnl PSI_CHECK_LIBJIT()
psi_add_int_const "$1"
;;
esac
- ],, PSI_INCLUDES)
+ ])
])
psi_add_stdtype() {
+ if test "$2" != ""; then
+ local stdtype="
+#ifdef $2
+ $1,
+#endif
+"
+ else
+ local stdtype=" $1,"
+ fi
PSI_STDTYPES="$PSI_STDTYPES
- $1,"
+$stdtype"
}
# psi_type_pair(type, size)
AC_DEFUN(PSI_STDTYPE, [
ifdef(AS_TR_CPP(AC_TYPE_$1), AS_TR_CPP(AC_TYPE_$1))
- PSI_CHECK_SIZEOF($1)
+ PSI_CHECK_SIZEOF([$1], [ifelse([$1],bool,[
+ #ifdef HAVE_STDBOOL_H
+ # include <stdbool.h>
+ #endif
+ ])])
if PSI_SH_TEST_SIZEOF($1); then
m4_case(ifelse(,[$2],[$1],[$2]),
- [bool],[psi_add_stdtype "{PSI_T_BOOL, \"bool\", NULL}"],
+ [bool],[psi_add_stdtype "{PSI_T_BOOL, \"bool\", NULL}" HAVE_BOOL],
[float],[psi_add_stdtype "{PSI_T_FLOAT, \"float\", NULL}"],
[double],[psi_add_stdtype "{PSI_T_DOUBLE, \"double\", NULL}"],
- [long double],[psi_add_stdtype "{PSI_T_LONG_DOUBLE, \"long double\", NULL}"],
+ [long double],[psi_add_stdtype "{PSI_T_LONG_DOUBLE, \"long double\", NULL}" HAVE_LONG_DOUBLE],
[
- AX_CHECK_SIGN($1, psi_basic_type=int, psi_basic_type=uint, PSI_INCLUDES)
+ AX_CHECK_SIGN($1, psi_basic_type=int, psi_basic_type=uint)
AS_TR_SH(psi_basic_type_$1)=$psi_basic_type
psi_add_stdtype "{`psi_type_pair $psi_basic_type PSI_SH_SIZEOF($1)`, \"$1\"}"
])
dnl Checks for standard ANSI-C, stdint and stdbool types.
AC_DEFUN(PSI_CHECK_STD_TYPES, [
- AC_HEADER_STDBOOL
PSI_CHECK_SIZEOF(void *)
AC_CHECK_ALIGNOF(void *)
PSI_STDTYPE(long double)
AC_CHECK_ALIGNOF(long double)
+ AC_HEADER_STDBOOL
PSI_STDTYPE(bool)
- AC_CHECK_ALIGNOF(bool, PSI_INCLUDES)
+ AC_CHECK_ALIGNOF(bool,[
+ #ifdef HAVE_STDBOOL_H
+ # include <stdbool.h>
+ #endif
+ ])
PSI_STDTYPE(char, int)
AC_CHECK_ALIGNOF(char)
+++ /dev/null
-/*******************************************************************************
- Copyright (c) 2016, Michael Wallner <mike@php.net>.
- All rights reserved.
-
- Redistribution and use in source and binary forms, with or without
- modification, are permitted provided that the following conditions are met:
-
- * Redistributions of source code must retain the above copyright notice,
- this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
-
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
- AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
- FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
- SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
- CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
- OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
- OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-*******************************************************************************/
-
-/* generated by configure */
-
-#include "php_psi_stdinc.h"
-
-#ifdef PSI_STD_TYPES
-static struct psi_std_type {
- token_t type_tag;
- const char *type_name;
- const char *alias;
-} psi_std_types[] = {
-@PSI_STDTYPES@
- {0}
-};
-#endif
-
-#ifdef PSI_PREDEF_CONSTS
-static struct psi_predef_const {
- token_t type_tag;
- const char *type_name;
- const char *var_name;
- impl_val value;
-} psi_predef_consts[] = {
-@PSI_CONSTS@
- {0}
-};
-#endif
-
-#ifdef PSI_FUNC_REDIRS
-typedef void (*psi_func_ptr)();
-static struct psi_func_redir {
- const char *name;
- psi_func_ptr func;
-} psi_func_redirs[] = {
- /* inline byte swapping */
-#ifdef __APPLE__
- {"_OSSwapInt16", (psi_func_ptr) psi_swap16},
- {"_OSSwapInt32", (psi_func_ptr) psi_swap32},
- {"_OSSwapInt64", (psi_func_ptr) psi_swap64},
-#elif defined(__FreeBSD__)
- {"bswap16", (psi_func_ptr) psi_swap16},
- {"bswap32", (psi_func_ptr) psi_swap32},
- {"bswap64", (psi_func_ptr) psi_swap64},
-#elif defined(__OpenBSD__)
- {"swap16", (psi_func_ptr) psi_swap16},
- {"swap32", (psi_func_ptr) psi_swap32},
- {"swap64", psi_swap64},
-#elif defined(__NetBSD__)
- {"bswap16", (psi_func_ptr) psi_swap16},
- {"bswap32", (psi_func_ptr) psi_swap32},
- {"bswap64", (psi_func_ptr) psi_swap64},
-#else
- {"bswap_16", (psi_func_ptr) psi_swap16},
- {"bswap_32", (psi_func_ptr) psi_swap32},
- {"bswap_64", (psi_func_ptr) psi_swap64},
-#endif
- /* needed from libc_nonshared.a */
- {"fstat", (psi_func_ptr) fstat},
- {"fstatat", (psi_func_ptr) fstatat},
- {"lstat", (psi_func_ptr) lstat},
- {"mknod", (psi_func_ptr) mknod},
-#ifdef HAVE_MKNODAT
- {"mknodat", (psi_func_ptr) mknodat},
-#endif
- {"stat", (psi_func_ptr) stat},
- {0}
-};
-#endif
-
--- /dev/null
+/*******************************************************************************
+ Copyright (c) 2016, Michael Wallner <mike@php.net>.
+ All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without
+ modification, are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice,
+ this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*******************************************************************************/
+
+/* generated by configure */
+
+#ifdef PSI_STD_TYPES
+static struct psi_std_type {
+ token_t type_tag;
+ const char *type_name;
+ const char *alias;
+} psi_std_types[] = {
+@PSI_STDTYPES@
+ {0}
+};
+#endif
+
+#ifdef PSI_FUNC_REDIRS
+typedef void (*psi_func_ptr)(void);
+static struct psi_func_redir {
+ const char *name;
+ psi_func_ptr func;
+} psi_func_redirs[] = {
+ /* inline byte swapping */
+#ifdef __APPLE__
+ {"_OSSwapInt16", (psi_func_ptr) psi_swap16},
+ {"_OSSwapInt32", (psi_func_ptr) psi_swap32},
+ {"_OSSwapInt64", (psi_func_ptr) psi_swap64},
+#elif defined(__FreeBSD__)
+ {"bswap16", (psi_func_ptr) psi_swap16},
+ {"bswap32", (psi_func_ptr) psi_swap32},
+ {"bswap64", (psi_func_ptr) psi_swap64},
+#elif defined(__OpenBSD__)
+ {"swap16", (psi_func_ptr) psi_swap16},
+ {"swap32", (psi_func_ptr) psi_swap32},
+ {"swap64", psi_swap64},
+#elif defined(__NetBSD__)
+ {"bswap16", (psi_func_ptr) psi_swap16},
+ {"bswap32", (psi_func_ptr) psi_swap32},
+ {"bswap64", (psi_func_ptr) psi_swap64},
+#else
+ {"bswap_16", (psi_func_ptr) psi_swap16},
+ {"bswap_32", (psi_func_ptr) psi_swap32},
+ {"bswap_64", (psi_func_ptr) psi_swap64},
+#endif
+ /* needed from libc_nonshared.a */
+ {"fstat", (psi_func_ptr) fstat},
+ {"fstatat", (psi_func_ptr) fstatat},
+ {"lstat", (psi_func_ptr) lstat},
+ {"mknod", (psi_func_ptr) mknod},
+#ifdef HAVE_MKNODAT
+ {"mknodat", (psi_func_ptr) mknodat},
+#endif
+ {"stat", (psi_func_ptr) stat},
+ {0}
+};
+#endif
+
+#ifdef PSI_CPP_SEARCH
+static const char psi_cpp_search[] = ""
+@PSI_CPP_SEARCH@
+;
+#endif
+
+#ifdef PSI_CPP_PREDEF
+static const char psi_cpp_predef[] = ""
+@PSI_CPP_PREDEF@
+;
+#endif
+
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************/
-#include "php_psi_stdinc.h"
#include <assert.h>
#include "token.h"
\ No newline at end of file
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************/
-#include "php_psi_stdinc.h"
#include <assert.h>
#include "token.h"
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************/
-#include "php_psi_stdinc.h"
+#ifdef HAVE_CONFIG_H
+# include "config.h"
+#endif
#include "php.h"
#include "token.h"
#include "parser.h"
-#include "php_psi_posix.h"
-
PHP_MINIT_FUNCTION(psi_context)
{
unsigned flags = 0;
#define PSI_CPP_SEARCH
#define PSI_CPP_PREDEF
-#include "php_psi_cpp.h"
+#include "php_psi_predef.h"
#include "php_psi.h"
void *hn;
int fd;
};
-typedef void (*psi_dump_cb)(union psi_dump_arg, const char *msg, ...);
+typedef int (*psi_dump_cb)(union psi_dump_arg, const char *msg, ...);
struct psi_dump {
union psi_dump_arg ctx;
psi_dump_cb fun;
psi_plist_get(tokens, last, &T);
if (T) {
- int i = (last >= 5) ? last - 5 : 0;
+ size_t i = (last >= 5) ? last - 5 : 0;
P->error(PSI_DATA(P), T, PSI_WARNING, "PSI %s at col %u", msg, T->col);
while (i <= last || T->type != PSI_T_EOS) {
psi_plist_get(tokens, last, &T);
if (T) {
- int i = (last >= 5) ? last - 5 : 0;
+ size_t i = (last >= 5) ? last - 5 : 0;
P->error(PSI_DATA(P), T, PSI_WARNING, "PSI %s at col %u", msg, T->col);
while (i <= last || T->type != PSI_T_EOS) {
-/* Generated by re2c 1.1.1 on Sat Nov 24 09:32:55 2018 */
+/* Generated by re2c 1.1.1 on Mon Dec 3 16:17:20 2018 */
#line 1 "src/parser_scan.re"
/*******************************************************************************
Copyright (c) 2016, Michael Wallner <mike@php.net>.
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*******************************************************************************/
-#include "php_psi_stdinc.h"
-
#include "data.h"
#include "calc.h"