summaryrefslogtreecommitdiffstats
path: root/contrib
diff options
context:
space:
mode:
authorStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2014-10-12 11:11:06 (GMT)
committerStefan Radomski <radomski@tk.informatik.tu-darmstadt.de>2014-10-12 11:11:06 (GMT)
commitfa90b5749693d9f5817ad1f106334a0877171fd3 (patch)
tree8d53b5c820590cad54893bc575ef55df38f55d23 /contrib
parentc36b123a60278caef5d06e8a7d0b3d338d669c75 (diff)
downloaduscxml-fa90b5749693d9f5817ad1f106334a0877171fd3.zip
uscxml-fa90b5749693d9f5817ad1f106334a0877171fd3.tar.gz
uscxml-fa90b5749693d9f5817ad1f106334a0877171fd3.tar.bz2
Major work on PROMELA datamodel
Diffstat (limited to 'contrib')
-rw-r--r--contrib/cmake/FindSWI.cmake20
-rw-r--r--contrib/src/swi-pl/SWI-cpp.h16
2 files changed, 27 insertions, 9 deletions
diff --git a/contrib/cmake/FindSWI.cmake b/contrib/cmake/FindSWI.cmake
index f89f705..51cfe82 100644
--- a/contrib/cmake/FindSWI.cmake
+++ b/contrib/cmake/FindSWI.cmake
@@ -53,7 +53,9 @@ if (SWI_FOUND)
FIND_PROGRAM(SWI_BINARY swipl)
FIND_PATH(SWI_CPP_INCLUDE_DIR SWI-cpp.h
- PATHS ${SWI_INCLUDE_DIRS}
+ PATHS
+ ${SWI_INCLUDE_DIRS}
+ ${PROJECT_SOURCE_DIR}/contrib/src/swi-pl
)
else()
@@ -136,7 +138,9 @@ else()
PATH_SUFFIXES
packages/cpp
lib/swipl-${SWI_VERSION}/include
- PATHS ${SWI_SEARCH_PATHS}
+ PATHS
+ ${SWI_SEARCH_PATHS}
+ ${PROJECT_SOURCE_DIR}/contrib/src/swi-pl
)
#message("SWI_CPP_INCLUDE_DIR: ${SWI_CPP_INCLUDE_DIR}")
@@ -186,15 +190,23 @@ endif()
#message(FATAL_ERROR "SWI_BINARY: ${SWI_BINARY} / SWI_LIBRARY_RELEASE: ${SWI_LIBRARY_RELEASE} / SWI_LIBRARY_DEBUG: ${SWI_LIBRARY_DEBUG} / SWI_INCLUDE_DIR: ${SWI_INCLUDE_DIR} / SWI_CPP_INCLUDE_DIR: ${SWI_CPP_INCLUDE_DIR}")
INCLUDE(FindPackageHandleStandardArgs)
-FIND_PACKAGE_HANDLE_STANDARD_ARGS(SWI DEFAULT_MSG SWI_LIBRARY SWI_BINARY SWI_INCLUDE_DIR)
+FIND_PACKAGE_HANDLE_STANDARD_ARGS(SWI DEFAULT_MSG SWI_LIBRARY SWI_BINARY SWI_INCLUDE_DIR SWI_CPP_INCLUDE_DIR)
if (SWI_FOUND)
include(CheckCXXSourceCompiles)
- set(CMAKE_REQUIRED_INCLUDES ${SWI_INCLUDE_DIR})
+ set(CMAKE_REQUIRED_INCLUDES ${SWI_INCLUDE_DIR} ${SWI_CPP_INCLUDE_DIR})
+
set(CMAKE_REQUIRED_LIBRARIES ${SWI_LIBRARY})
+ # check for new reinterpret_cast<void (*)()>(f) for foreign functions with in SWI 7.x and above
+ check_cxx_source_compiles("
+ #include <SWI-cpp.h>
+ int main(){
+ }
+ " SWI_REINTERPRET_FOREIGN)
+
check_cxx_source_compiles("
#include <SWI-Prolog.h>
int main(){
diff --git a/contrib/src/swi-pl/SWI-cpp.h b/contrib/src/swi-pl/SWI-cpp.h
index d32a052..22c02a8 100644
--- a/contrib/src/swi-pl/SWI-cpp.h
+++ b/contrib/src/swi-pl/SWI-cpp.h
@@ -25,6 +25,12 @@
#ifndef _SWI_CPP_H
#define _SWI_CPP_H
+#ifdef SWI_REINTERPRET_FOREIGN
+# define PL_FOREIGN_TO_FUNCTION(f) reinterpret_cast<void (*)()>(f)
+#else
+# define PL_FOREIGN_TO_FUNCTION(f) (void *)f
+#endif
+
#include <SWI-Prolog.h>
#include <string.h>
#ifndef __APPLE__
@@ -466,23 +472,23 @@ public:
PlRegister(const char *module, const char *name, int arity,
foreign_t (f)(term_t t0, int a, control_t ctx))
- { PL_register_foreign_in_module(module, name, arity, (void *)f, PL_FA_VARARGS);
+ { PL_register_foreign_in_module(module, name, arity, PL_FOREIGN_TO_FUNCTION(f), PL_FA_VARARGS);
}
PlRegister(const char *module, const char *name, foreign_t (*f)(PlTerm a0))
- { PL_register_foreign_in_module(module, name, 1, (void *)f, 0);
+ { PL_register_foreign_in_module(module, name, 1, PL_FOREIGN_TO_FUNCTION(f), 0);
}
PlRegister(const char *module, const char *name, foreign_t (*f)(PlTerm a0, PlTerm a1))
- { PL_register_foreign_in_module(module, name, 2, (void *)f, 0);
+ { PL_register_foreign_in_module(module, name, 2, PL_FOREIGN_TO_FUNCTION(f), 0);
}
PlRegister(const char *module, const char *name, foreign_t (*f)(PlTerm a0, PlTerm a1, PlTerm a2))
- { PL_register_foreign_in_module(module, name, 3, (void *)f, 0);
+ { PL_register_foreign_in_module(module, name, 3, PL_FOREIGN_TO_FUNCTION(f), 0);
}
// for non-deterministic calls
PlRegister(const char *module, const char *name, int arity,
foreign_t (f)(term_t t0, int a, control_t ctx), short flags)
- { PL_register_foreign_in_module(module, name, arity, (void *)f, flags);
+ { PL_register_foreign_in_module(module, name, arity, PL_FOREIGN_TO_FUNCTION(f), flags);
}
};