cmmake
This commit is contained in:
parent
a115024aee
commit
abdc8a35f9
@ -45,14 +45,14 @@ if (CMAKE_MAJOR_VERSION GREATER 2)
|
|||||||
${CMAKE_CURRENT_SOURCE_DIR}
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
ADD_LIBRARY(horus SHARED ${HORUS_SOURCES} HorusYap.cpp )
|
ADD_LIB(horus ${HORUS_SOURCES} HorusYap.cpp )
|
||||||
|
|
||||||
if(DEFINED YAP_MAJOR_VERSION)
|
if(DEFINED YAP_MAJOR_VERSION)
|
||||||
TARGET_LINK_LIBRARIES(horus
|
TARGET_LINK_LIBRARIES(horus
|
||||||
libYap
|
libYap
|
||||||
)
|
)
|
||||||
else()
|
else()
|
||||||
ADD_LIBRARY(horus SHARED ${HORUS_SOURCES} )
|
ADD_LIB(horus ${HORUS_SOURCES} )
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
#set_property(TARGET horus PROPERTY CXX_STANDARD 11)
|
#set_property(TARGET horus PROPERTY CXX_STANDARD 11)
|
||||||
|
@ -33,7 +33,7 @@ if (GECODE_FOUND)
|
|||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library (gecode_yap SHARED ${GECODE_SOURCES})
|
add_lib(gecode_yap ${GECODE_SOURCES})
|
||||||
|
|
||||||
target_link_libraries(gecode_yap libYap ${GECODE_LIBRARIES})
|
target_link_libraries(gecode_yap libYap ${GECODE_LIBRARIES})
|
||||||
|
|
||||||
|
@ -132,7 +132,7 @@ IF (CUDD_FOUND)
|
|||||||
${CMAKE_CURRENT_BINARY_DIR}/../bdd
|
${CMAKE_CURRENT_BINARY_DIR}/../bdd
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library (bddem SHARED
|
add_lib(bddem
|
||||||
${BDDEM_SOURCES}
|
${BDDEM_SOURCES}
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -153,7 +153,7 @@ IF (CUDD_FOUND)
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
add_library (cplint SHARED
|
add_lib(cplint
|
||||||
${CPLINT_SOURCES}
|
${CPLINT_SOURCES}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ cuda.c
|
|||||||
cuda.yap
|
cuda.yap
|
||||||
)
|
)
|
||||||
|
|
||||||
cuda_add_library (libcuda SHARED ${CUDA_SOURCES})
|
cuda_add_lib(libcuda ${CUDA_SOURCES})
|
||||||
|
|
||||||
target_link_libraries(libcuda libYap
|
target_link_libraries(libcuda libYap
|
||||||
${CUDA_LIBRARIES} ${CUDA_npp_LIBRARY} # ${CUDA_nppc_LIBRARY}
|
${CUDA_LIBRARIES} ${CUDA_npp_LIBRARY} # ${CUDA_nppc_LIBRARY}
|
||||||
|
@ -32,7 +32,7 @@ if (GECODE_FOUND)
|
|||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library (gecode_yap SHARED ${GECODE_SOURCES})
|
add_lib(gecode_yap ${GECODE_SOURCES})
|
||||||
|
|
||||||
target_link_libraries(gecode_yap libYap ${GECODE_LIBRARIES})
|
target_link_libraries(gecode_yap libYap ${GECODE_LIBRARIES})
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
|
|
||||||
add_library (jplYap SHARED jpl.h jpl.c hacks.h)
|
add_lib(jplYap jpl.h jpl.c hacks.h)
|
||||||
|
|
||||||
include_directories (${JAVA_INCLUDE_DIRS} ${JNI_INCLUDE_DIRS} )
|
include_directories (${JAVA_INCLUDE_DIRS} ${JNI_INCLUDE_DIRS} )
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@
|
|||||||
if (WIN32)
|
if (WIN32)
|
||||||
add_library(Yapmysql OBJECT ${MYSQL_SOURCES})
|
add_library(Yapmysql OBJECT ${MYSQL_SOURCES})
|
||||||
else()
|
else()
|
||||||
add_library(Yapmysql SHARED ${MYSQL_SOURCES})
|
add_lib(Yapmysql ${MYSQL_SOURCES})
|
||||||
target_link_libraries(Yapmysql ${MYSQL_LIBRARIES} libYap)
|
target_link_libraries(Yapmysql ${MYSQL_LIBRARIES} libYap)
|
||||||
install(TARGETS Yapmysql
|
install(TARGETS Yapmysql
|
||||||
RUNTIME DESTINATION ${dlls}
|
RUNTIME DESTINATION ${dlls}
|
||||||
|
@ -13,7 +13,7 @@ if (ODBC_FOUND)
|
|||||||
# ODBC_INCLUDE_DIRECTORIES, where to find sql.h
|
# ODBC_INCLUDE_DIRECTORIES, where to find sql.h
|
||||||
# ODBC_LIBRARIES, the libraries to link against to use ODBC
|
# ODBC_LIBRARIES, the libraries to link against to use ODBC
|
||||||
# ODBC_FOUND. If false, you cannot build anything that requires Odbc.
|
# ODBC_FOUND. If false, you cannot build anything that requires Odbc.
|
||||||
add_library (Yapodbc SHARED ${YAPODBC_SOURCES})
|
add_lib(Yapodbc ${YAPODBC_SOURCES})
|
||||||
target_link_libraries(Yapodbc libYap ${ODBC_LIBRARIES})
|
target_link_libraries(Yapodbc libYap ${ODBC_LIBRARIES})
|
||||||
include_directories (${ODBC_INCLUDE_DIRECTORIES} ..)
|
include_directories (${ODBC_INCLUDE_DIRECTORIES} ..)
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ if (PostgreSQL_FOUND)
|
|||||||
# PostgreSQL_INCLUDE_DIRS - Include directories for PostgreSQL
|
# PostgreSQL_INCLUDE_DIRS - Include directories for PostgreSQL
|
||||||
# PostgreSQL_LIBRARY_DIRS - Link directories for PostgreSQL libraries
|
# PostgreSQL_LIBRARY_DIRS - Link directories for PostgreSQL libraries
|
||||||
# PostgreSQL_LIBRARIES - The PostgreSQL libraries.
|
# PostgreSQL_LIBRARIES - The PostgreSQL libraries.
|
||||||
add_library (Yappostgres SHARED ${YAPPOSTGRES_SOURCES})
|
add_lib(Yappostgres ${YAPPOSTGRES_SOURCES})
|
||||||
target_link_libraries(Yappostgres libYap ${PostgreSQL_LIBRARIES})
|
target_link_libraries(Yappostgres libYap ${PostgreSQL_LIBRARIES})
|
||||||
include_directories (${PostgreSQL_INCLUDE_DIRS} ..)
|
include_directories (${PostgreSQL_INCLUDE_DIRS} ..)
|
||||||
set_target_properties (Yappostgres PROPERTIES
|
set_target_properties (Yappostgres PROPERTIES
|
||||||
|
@ -47,7 +47,7 @@ src/Android/jni/sqlite/nativehelper/ScopedLocalRef.h
|
|||||||
|
|
||||||
endif (ANDROID)
|
endif (ANDROID)
|
||||||
|
|
||||||
add_library( Yapsqlite3 SHARED
|
add_lib( Yapsqlite3
|
||||||
${YAPSQLITE3_SOURCES} )
|
${YAPSQLITE3_SOURCES} )
|
||||||
|
|
||||||
MY_set_target_properties(Yapsqlite3
|
MY_set_target_properties(Yapsqlite3
|
||||||
@ -57,6 +57,7 @@ add_library( Yapsqlite3 SHARED
|
|||||||
POSITION_INDEPENDENT_CODE TRUE
|
POSITION_INDEPENDENT_CODE TRUE
|
||||||
)
|
)
|
||||||
|
|
||||||
|
target_link_libraries(Yapsqlite3 libYap)
|
||||||
|
|
||||||
if (ANDROID)
|
if (ANDROID)
|
||||||
target_link_libraries(Yapsqlite3 android log)
|
target_link_libraries(Yapsqlite3 android log)
|
||||||
|
@ -5,31 +5,33 @@ set (PYTHON_SOURCES python.c pl2py.c pybips.c py2pl.c pl2pl.c pypreds.c)
|
|||||||
|
|
||||||
set (PYTHON_HEADERS py4yap.h)
|
set (PYTHON_HEADERS py4yap.h)
|
||||||
|
|
||||||
|
|
||||||
set (CMAKE_POSITION_INDEPENDENT_CODE TRUE)
|
set (CMAKE_POSITION_INDEPENDENT_CODE TRUE)
|
||||||
|
|
||||||
include_directories( ${CMAKE_BINARY_DIR} ${CMAKE_SOURCE_DIR}/include )
|
include_directories( ${CMAKE_BINARY_DIR}
|
||||||
|
${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/os )
|
||||||
|
|
||||||
|
#talk to python.pl
|
||||||
|
add_lib(YAPPython pyload.c ${PYTHON_HEADERS} )
|
||||||
|
|
||||||
add_library (YAPPython SHARED pyload.c ${PYTHON_HEADERS} )
|
|
||||||
|
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
add_library (Py4YAP OBJECT ${PYTHON_SOURCES} ${PYTHON_HEADERS})
|
add_library (Py4YAP OBJECT ${PYTHON_SOURCES} ${PYTHON_HEADERS})
|
||||||
|
|
||||||
target_link_libraries(YAPPython libYap ${PYTHON_LIBRARIES})
|
|
||||||
|
|
||||||
else()
|
else()
|
||||||
add_library (Py4YAP SHARED ${PYTHON_SOURCES} ${PYTHON_HEADERS})
|
add_lib(Py4YAP ${PYTHON_SOURCES} ${PYTHON_HEADERS})
|
||||||
|
|
||||||
# arithmetic hassle.
|
|
||||||
set_property(TARGET Py4YAP PROPERTY CXX_STANDARD_REQUIRED ON)
|
|
||||||
|
|
||||||
target_link_libraries(Py4YAP libYap ${PYTHON_LIBRARIES})
|
target_link_libraries(Py4YAP libYap ${PYTHON_LIBRARIES})
|
||||||
|
|
||||||
MY_install(TARGETS Py4YAP
|
# arithmetic hassle.
|
||||||
LIBRARY DESTINATION ${libdir}
|
|
||||||
RUNTIME DESTINATION ${dlls}
|
|
||||||
ARCHIVE DESTINATION ${libdir} )
|
|
||||||
endif()
|
|
||||||
|
|
||||||
|
target_link_libraries( YAPPython Py4YAP )
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_link_libraries(YAPPython libYap ${PYTHON_LIBRARIES})
|
||||||
|
|
||||||
# arithmetic hassle.
|
# arithmetic hassle.
|
||||||
set_property(TARGET YAPPython PROPERTY CXX_STANDARD_REQUIRED ON)
|
set_property(TARGET YAPPython PROPERTY CXX_STANDARD_REQUIRED ON)
|
||||||
|
@ -222,7 +222,6 @@ PyObject *term_to_python(term_t t, bool eval, PyObject *o, bool cvt) {
|
|||||||
atom_t name;
|
atom_t name;
|
||||||
int arity;
|
int arity;
|
||||||
PyObject *rc;
|
PyObject *rc;
|
||||||
size_t len;
|
|
||||||
|
|
||||||
if (!PL_get_functor(t, &fun)) {
|
if (!PL_get_functor(t, &fun)) {
|
||||||
PL_reset_term_refs(tail);
|
PL_reset_term_refs(tail);
|
||||||
|
@ -879,7 +879,6 @@ PyObject *compound_to_pyeval(term_t t, PyObject *context, bool cvt) {
|
|||||||
atom_t name;
|
atom_t name;
|
||||||
int arity;
|
int arity;
|
||||||
functor_t fun;
|
functor_t fun;
|
||||||
PyObject *d = NULL;
|
|
||||||
|
|
||||||
o = find_obj(context, t, true);
|
o = find_obj(context, t, true);
|
||||||
AOK(PL_get_name_arity(t, &name, &arity), NULL);
|
AOK(PL_get_name_arity(t, &name, &arity), NULL);
|
||||||
|
@ -53,7 +53,7 @@ static bool py_close(int sno) {
|
|||||||
|
|
||||||
|
|
||||||
static int py_put(int sno, int ch) {
|
static int py_put(int sno, int ch) {
|
||||||
PyObject *pyw; // buffer
|
// PyObject *pyw; // buffer
|
||||||
//int pyw_kind;
|
//int pyw_kind;
|
||||||
//PyObject *pyw_data;
|
//PyObject *pyw_data;
|
||||||
|
|
||||||
|
@ -1,94 +1,80 @@
|
|||||||
|
|
||||||
# This is a CMake example for Python
|
# This is a CMake example for Python
|
||||||
|
|
||||||
#INCLUDE(NewUseSWIG)
|
INCLUDE(UseSWIG)
|
||||||
|
|
||||||
include(FindPythonModule)
|
include(FindPythonModule)
|
||||||
|
|
||||||
set (PROLOG_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/yapi.yap)
|
list (APPEND pl_library ${CMAKE_CURRENT_SOURCE_DIR}/prolog/jupyter.yap ${CMAKE_CURRENT_SOURCE_DIR}/prolog/yapi.yap )
|
||||||
set (PYTHON_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/yapi.py ${CMAKE_CURRENT_SOURCE_DIR}/__init__.py ${CMAKE_CURRENT_SOURCE_DIR}/__main__.py)
|
set (PYTHON_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/yap4py/yapi.py ${CMAKE_CURRENT_SOURCE_DIR}/yap4py/__init__.py ${CMAKE_CURRENT_SOURCE_DIR}/yap4py/__main__.py)
|
||||||
|
|
||||||
file(RELATIVE_PATH RELATIVE_SOURCE ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR})
|
|
||||||
|
|
||||||
configure_file("setup.py.in" ${CMAKE_CURRENT_BINARY_DIR}/setup.py)
|
configure_file("setup.py.in" ${CMAKE_CURRENT_BINARY_DIR}/setup.py)
|
||||||
configure_file("MANIFEST.in" ${CMAKE_CURRENT_BINARY_DIR}/MANIFEST.in)
|
configure_file("MANIFEST.in" ${CMAKE_CURRENT_BINARY_DIR}/MANIFEST.in)
|
||||||
|
configure_file(../../swig/yap.i ${CMAKE_CURRENT_BINARY_DIR}/yap.i)
|
||||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/YAP4PY.md" ${CMAKE_CURRENT_BINARY_DIR}/README)
|
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/YAP4PY.md" ${CMAKE_CURRENT_BINARY_DIR}/README)
|
||||||
|
|
||||||
|
|
||||||
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH})
|
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH})
|
||||||
|
|
||||||
INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_SOURCE_DIR}/CXX")
|
INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_SOURCE_DIR}/packages/python" "${CMAKE_SOURCE_DIR}/CXX")
|
||||||
|
|
||||||
SET_SOURCE_FILES_PROPERTIES(../../swig/yap.i PROPERTIES CPLUSPLUS ON)
|
SET_SOURCE_FILES_PROPERTIES(../../swig/yap.i PROPERTIES CPLUSPLUS ON)
|
||||||
SET_SOURCE_FILES_PROPERTIES(../../swig/yap.i PROPERTIES SWIG_FLAGS "-O;-py3")
|
SET_SOURCE_FILES_PROPERTIES(../../swig/yap.i PROPERTIES SWIG_FLAGS "-O;-py3")
|
||||||
SET_SOURCE_FILES_PROPERTIES(../../swig/yap.i PROPERTIES SWIG_MODULE_NAME yap)
|
SET_SOURCE_FILES_PROPERTIES(../../swiyap.i PROPERTIES SWIG_MODULE_NAME yap)
|
||||||
|
#SET_SOURCE_FILES_PROPERTIES(../../swi/yap.i PROPERTIES OUTPUT_NAME yap)
|
||||||
|
|
||||||
|
SWIG_ADD_LIBRARY(Py2YAP LANGUAGE python SHARED SOURCES ../../swig/yap.i )
|
||||||
if (WIN32)
|
if (WIN32)
|
||||||
|
SWIG_LINK_LIBRARIES(Py2YAP YAPPython libYap ${PYTHON_LIBRARIES} )
|
||||||
set (SYS_DLLS ${GMP_LIBRARIES} c:/msys64/mingw64/bin/libgmp-10.dll)
|
else()
|
||||||
|
SWIG_LINK_LIBRARIES( Py2YAP libYap YAP++ YAPPython ${PYTHON_LIBRARIES} )
|
||||||
endif()
|
endif()
|
||||||
|
set_target_properties ( ${SWIG_MODULE_Py2YAP_REAL_NAME}
|
||||||
|
PROPERTIES
|
||||||
|
NO_SONAME ON
|
||||||
|
OUTPUT_NAME _yap
|
||||||
|
LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
|
||||||
|
DEPENDS YAPPython YAPPython YAP++
|
||||||
|
)
|
||||||
# inform we are compiling YAP
|
# inform we are compiling YAP
|
||||||
# s used in MSYS
|
# s used in MSYS
|
||||||
#
|
#
|
||||||
#
|
#
|
||||||
# INSTALL ( TARGETS ${SWIG_MODULE_Py2YAP_REAL_NAME}
|
# INSTALL ( TARGETS ${SWIG_MODULE_Py2YAP_REAL_NAME}
|
||||||
# RUNTIME DESTINATION ${PYTHON_MODULE_PATH}
|
# RUNTIME DESTINATION ${PYTHON_MODULE_PATH}
|
||||||
# ARCHIVE DESTINATION ${PYTHON_MODULE_PATH}
|
# ARCHIVE DESTINATION ${PYTHON_MODULE_PATH}
|
||||||
# LIBRARY DESTINATION ${PYTHON_MODULE_PATH}
|
# LIBRARY DESTINATION ${PYTHON_MODULE_PATH}
|
||||||
# )
|
# )
|
||||||
|
|
||||||
|
|
||||||
set (python_dlls $<TARGET_FILE:matrix>
|
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4py)
|
||||||
$<TARGET_FILE:regexp>
|
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog)
|
||||||
$<TARGET_FILE:yap_rl>
|
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog/os)
|
||||||
$<TARGET_FILE:tries>
|
file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog/pl)
|
||||||
$<TARGET_FILE:itries>
|
|
||||||
$<TARGET_FILE:sys>
|
|
||||||
$<TARGET_FILE:yap_random>
|
|
||||||
)
|
|
||||||
if (TARGET real)
|
|
||||||
list(APPEND python_dlls $<TARGET_FILE:real>
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
if (NOT WIN32)
|
|
||||||
list(APPEND python_dlls $<TARGET_FILE:YAP++> $<TARGET_FILE:Py4YAP>
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
set (PL ${pl_library} ${PROLOG_SOURCES} )
|
add_custom_target( YAP4PY ALL
|
||||||
|
# COMMAND ${CMAKE_COMMAND} -E copy ${YAP_DLLS} ${CMAKE_BINARY_DIR}/startup.yss ${CMAKE_CURRENT_BINARY_DIR}/yap4py
|
||||||
add_custom_target( YAP4PY_SETUP
|
COMMAND ${PYTHON_EXECUTABLE} setup.py sdist bdist_wheel
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SOURCE_DIR}/packages/swig/yap.i ${CMAKE_CURRENT_BINARY_DIR}
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_BINARY_DIR}/config.h ${CMAKE_CURRENT_BINARY_DIR}
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${PYTHON_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/yap4py
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${python_dlls} ${SYS_DLLS} ${CMAKE_BINARY_DIR}/libYap${CMAKE_SHARED_LIBRARY_SUFFIX} ${CMAKE_BINARY_DIR}/${YAP_STARTUP} ${PYTHON_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/yap4py
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${PL} ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${pl_boot_library} ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog/pl
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${pl_os_library} ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog/os
|
|
||||||
DEPENDS YAP4PY_SETUP_DIRS STARTUP ${python_dlls} ${PYTHON_SOURCES} ${PROLOG_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/setup.py ${SWIG_MODULE_Py2YAP_REAL_NAME} )
|
|
||||||
|
|
||||||
add_custom_target( YAP4PY_SETUP_DIRS
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/yap4py
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog/pl
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog/os
|
|
||||||
)
|
|
||||||
|
|
||||||
add_custom_target( YAP4PY ALL
|
|
||||||
COMMAND ${SWIG_EXECUTABLE} -python -modern -c++ -py3 -DX_API -I${CMAKE_SOURCE_DIR}/CXX -I${CMAKE_SOURCE_DIR}/include -I${CMAKE_SOURCE_DIR}/H -I${CMAKE_SOURCE_DIR}/H/generated -I${CMAKE_SOURCE_DIR}/OPTYap -I../../.. -o yap_wrap.cpp yap.i
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} setup.py sdist bdist_wheel
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
||||||
DEPENDS YAP4PY_SETUP)
|
DEPENDS STARTUP ${PYTHON_SOURCES} ${PROLOG_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/setup.py ${SWIG_MODULE_Py2YAP_REAL_NAME} )
|
||||||
|
|
||||||
|
function(f_copy filename output )
|
||||||
|
get_filename_component(base ${filename} NAME_WE)
|
||||||
|
set(outfile ${output}/${base})
|
||||||
|
file (COPY ${filename} DESTiNATION ${output})
|
||||||
|
add_custom_command(
|
||||||
|
OUTPUT ${outfile}
|
||||||
|
COMMAND ${CMAKE_COMMAND} -E COPY ${filename} ${outfile}
|
||||||
|
DEPENDS ${filename}
|
||||||
|
)
|
||||||
|
set_source_files_properties(${outfile} PROPERTIES GENERATED TRUE)
|
||||||
|
endfunction()
|
||||||
|
|
||||||
|
|
||||||
install(CODE "execute_process(
|
install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} -m pip install --no-index -f dist yap4py
|
||||||
COMMAND ${PYTHON_EXECUTABLE} -m pip install --ignore-installed ${CMAKE_CURRENT_BINARY_DIR}
|
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})"
|
||||||
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})"
|
DEPENDS Py4YAP ${CMAKE_BINARY_DIR}/${YAP_STARTUP} ${dlls} )
|
||||||
DEPENDS Py4YAP ${CMAKE_BINARY_DIR}/${YAP_STARTUP} ${dlls} )
|
|
||||||
|
|
||||||
install(FILES ${PROLOG_SOURCES} DESTINATION ${libpl})
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (WITH_DOCS AND DOXYGEN_FOUND)
|
if (WITH_DOCS AND DOXYGEN_FOUND)
|
||||||
@ -114,142 +100,3 @@ install(FILES ${PROLOG_SOURCES} DESTINATION ${libpl})
|
|||||||
add_dependencies(${SWIG_MODULE_ftdi1_REAL_NAME} doc_i)
|
add_dependencies(${SWIG_MODULE_ftdi1_REAL_NAME} doc_i)
|
||||||
|
|
||||||
ENDIF ()
|
ENDIF ()
|
||||||
|
|
||||||
# This is a CMake example for Python
|
|
||||||
|
|
||||||
#INCLUDE(NewUseSWIG)
|
|
||||||
|
|
||||||
include(FindPythonModule)
|
|
||||||
|
|
||||||
set (PROLOG_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/yapi.yap
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/jupyter.yap)
|
|
||||||
set (PYTHON_SOURCES
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/yap4py/yapi.py
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/yap4py/__init__.py
|
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/yap4py/__main__.py
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
set (PL ${pl_library} ${PROLOG_SOURCES} )
|
|
||||||
|
|
||||||
|
|
||||||
set (python_dlls
|
|
||||||
$<TARGET_FILE:libYap>
|
|
||||||
$<TARGET_FILE:YAPPython>
|
|
||||||
$<TARGET_FILE:matrix>
|
|
||||||
$<TARGET_FILE:regexp>
|
|
||||||
$<TARGET_FILE:yap_rl>
|
|
||||||
$<TARGET_FILE:tries>
|
|
||||||
$<TARGET_FILE:itries>
|
|
||||||
$<TARGET_FILE:sys>
|
|
||||||
$<TARGET_FILE:yap_random>
|
|
||||||
)
|
|
||||||
if (TARGET real)
|
|
||||||
list(APPEND python_dlls $<TARGET_FILE:real>
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
if (NOT WIN32)
|
|
||||||
list(APPEND python_dlls $<TARGET_FILE:YAP++>
|
|
||||||
)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
file(RELATIVE_PATH RELATIVE_SOURCE ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR})
|
|
||||||
|
|
||||||
configure_file("setup.py.in" ${CMAKE_CURRENT_BINARY_DIR}/setup.py)
|
|
||||||
configure_file("MANIFEST.in" ${CMAKE_CURRENT_BINARY_DIR}/MANIFEST.in)
|
|
||||||
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/YAP4PY.md" ${CMAKE_CURRENT_BINARY_DIR}/README)
|
|
||||||
|
|
||||||
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH})
|
|
||||||
|
|
||||||
INCLUDE_DIRECTORIES("${CMAKE_CURRENT_SOURCE_DIR}" "${CMAKE_SOURCE_DIR}/CXX")
|
|
||||||
|
|
||||||
SET_SOURCE_FILES_PROPERTIES(../../swig/yap.i PROPERTIES CPLUSPLUS ON)
|
|
||||||
SET_SOURCE_FILES_PROPERTIES(../../swig/yap.i PROPERTIES SWIG_FLAGS "-O;-py3")
|
|
||||||
SET_SOURCE_FILES_PROPERTIES(../../swig/yap.i PROPERTIES SWIG_MODULE_NAME yap)
|
|
||||||
|
|
||||||
if (WIN32)
|
|
||||||
|
|
||||||
#set (SYS_DLLS ${GMP_LIBRARIES} c:/msys64/mingw64/bin/libgmp-10.dll)
|
|
||||||
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# inform we are compiling YAP
|
|
||||||
# s used in MSYS
|
|
||||||
#
|
|
||||||
#
|
|
||||||
# INSTALL ( TARGETS ${SWIG_MODULE_Py2YAP_REAL_NAME}
|
|
||||||
# RUNTIME DESTINATION ${PYTHON_MODULE_PATH}
|
|
||||||
# ARCHIVE DESTINATION ${PYTHON_MODULE_PATH}
|
|
||||||
# LIBRARY DESTINATION ${PYTHON_MODULE_PATH}
|
|
||||||
# )
|
|
||||||
|
|
||||||
|
|
||||||
add_custom_target( YAP4PY_SETUP_DIRS
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/yap4py
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog/pl
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog/os
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
add_custom_COMMAND( OUTPUT yap4py/prolog/lists,yap
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${PL} yap4py/prolog
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
||||||
DEPENDS YAP4PY_SETUP_DIRS ${PL} )
|
|
||||||
|
|
||||||
add_custom_COMMAND( OUTPUT yap4py/prolog/pl/boot.yap
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${pl_boot_library} yap4py/prolog/pl
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
||||||
DEPENDS YAP4PY_SETUP_DIRS ${pl_boot_library} )
|
|
||||||
|
|
||||||
add_custom_COMMAND( OUTPUT yap4py/prolog/os/yio.yap
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${pl_os_library} yap4py/prolog/os
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
||||||
DEPENDS YAP4PY_SETUP_DIRS ${pl_os_library} )
|
|
||||||
|
|
||||||
add_custom_COMMAND( OUTPUT yap4py/startup.yss
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy ${PYTHON_SOURCES} ${python_dlls} ${CMAKE_BINARY_DIR}/startup.yss yap4py
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
||||||
DEPENDS YAP4PY_SETUP_DIRS STARTUP )
|
|
||||||
|
|
||||||
add_custom_target( YAP4PY ALL
|
|
||||||
COMMAND ${SWIG_EXECUTABLE} -python -modern -c++ -py3 -DX_API -I${CMAKE_SOURCE_DIR}/CXX -I${CMAKE_SOURCE_DIR}/include -I${CMAKE_SOURCE_DIR}/H -I${CMAKE_SOURCE_DIR}/H/generated -I${CMAKE_SOURCE_DIR}/OPTYap -I../../.. -o yap_wrap.cpp yap.i
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} setup.py sdist bdist_conda
|
|
||||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
|
|
||||||
DEPENDS yap4py/yapi.py yap4py/prolog/lists,yap yap4py/prolog/pl/boot.yap yap4py/startup.yss yap4py/prolog/os/yio.yap )
|
|
||||||
|
|
||||||
|
|
||||||
install(CODE "execute_process"
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} -m pip install --force --no-index -f packages/python/swig/dist YAP4PY
|
|
||||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
||||||
DEPENDS YAP4PY ${CMAKE_BINARY_DIR}/${YAP_STARTUP} ${dlls} )
|
|
||||||
|
|
||||||
install(FILES ${PROLOG_SOURCES} DESTINATION ${libpl})
|
|
||||||
|
|
||||||
|
|
||||||
if (WITH_DOCS AND DOXYGEN_FOUND)
|
|
||||||
|
|
||||||
set(CMAKE_SWIG_FLAGS -DDOXYGEN=${DOXYGEN_FOUND})
|
|
||||||
|
|
||||||
# Run doxygen to only generate the xml
|
|
||||||
add_custom_command(OUTPUT ${CMAKE_BINARY_DIR}/doc/xml/ftdi_8c.xml
|
|
||||||
COMMAND ${CMAKE_COMMAND} -E make_directory ${CMAKE_BINARY_DIR}/doc
|
|
||||||
COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_BINARY_DIR}/Doxyfile.xml
|
|
||||||
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
|
|
||||||
DEPENDS ${c_headers};${c_sources};${cpp_sources};${cpp_headers}
|
|
||||||
)
|
|
||||||
|
|
||||||
# generate .i from doxygen .xml
|
|
||||||
add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/ftdi1_doc.i
|
|
||||||
COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/doxy2swig.py -n
|
|
||||||
${CMAKE_BINARY_DIR}/doc/xm11l/ftdi_8c.xml
|
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/ftdi1_doc.i
|
|
||||||
DEPENDS ${CMAKE_BINARY_DIR}/doc/xml/ftdi_8c.xml
|
|
||||||
)
|
|
||||||
add_custom_target(doc_i DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/ftdi1_doc.i)
|
|
||||||
add_dependencies(${SWIG_MODULE_ftdi1_REAL_NAME} doc_i)
|
|
||||||
|
|
||||||
ENDIF ()
|
|
||||||
>>>>>>> 11e81b457dcc145e07b457482698a90e0ec350a2
|
|
||||||
|
122
packages/python/swig/prolog/jupyter.yap
Normal file
122
packages/python/swig/prolog/jupyter.yap
Normal file
@ -0,0 +1,122 @@
|
|||||||
|
|
||||||
|
:- use_module(library(yapi)).
|
||||||
|
:- use_module(library(lists)).
|
||||||
|
:- use_module(library(maplist)).
|
||||||
|
:- use_module(library(python)).
|
||||||
|
|
||||||
|
:- python_import(sys).
|
||||||
|
|
||||||
|
jupyter_query(Self, Cell) :-
|
||||||
|
setup_call_cleanup(
|
||||||
|
enter_cell(Self),
|
||||||
|
python_query(Self, Cell),
|
||||||
|
exit_cell(Self)
|
||||||
|
).
|
||||||
|
|
||||||
|
enter_cell(_Self) :-
|
||||||
|
open('//python/sys.stdout', append, _Output, [alias(jupo)]),
|
||||||
|
open('//python/sys.stdout', append, _, [alias(jupe)]),
|
||||||
|
set_prolog_flag(user_output, jupo),
|
||||||
|
set_prolog_flag(user_error, jupe).
|
||||||
|
|
||||||
|
exit_cell(_Self) :-
|
||||||
|
close( jupo),
|
||||||
|
close( jupe).
|
||||||
|
|
||||||
|
|
||||||
|
completions(S, Self) :-
|
||||||
|
open_mem_read_stream(S, St),
|
||||||
|
scan_to_list(St, Tokens),
|
||||||
|
close(St),
|
||||||
|
reverse(Tokens, RTokens),
|
||||||
|
strip_final_tokens(RTokens, MyTokens),
|
||||||
|
setof( Completion, complete(MyTokens, Completion), Cs),
|
||||||
|
Self.completions := Cs.
|
||||||
|
|
||||||
|
|
||||||
|
strip_final_tokens(['EOT'|Ts], Ts) :- !.
|
||||||
|
strip_final_tokens( Ts, Ts ).|_],
|
||||||
|
complete([E,l,C,l,A|More],
|
||||||
|
isconsult(A),
|
||||||
|
%B = l,
|
||||||
|
library(C,Lib),
|
||||||
|
%D=l,
|
||||||
|
E=atom(Prefix),
|
||||||
|
\+ arg( Rest ),
|
||||||
|
check_library( Prefix, Lib, C).
|
||||||
|
complete([E,l,C,l,-,'['|More],
|
||||||
|
isconsult(A),
|
||||||
|
%B = l,
|
||||||
|
library(C,Lib),
|
||||||
|
%D=l,
|
||||||
|
E=atom(Prefix),
|
||||||
|
\+ arg( Rest ),
|
||||||
|
check_library( Prefix, Lib, C).
|
||||||
|
complete([C,l,A|More],
|
||||||
|
isconsult(A),
|
||||||
|
%B = l,
|
||||||
|
C=atom(Prefix),
|
||||||
|
\+ arg( Rest ),
|
||||||
|
file_or_library( Prefix, C).
|
||||||
|
complete([C,l,-,'['|More],
|
||||||
|
isconsult(A),
|
||||||
|
%B = l,
|
||||||
|
C=atom(Prefix),
|
||||||
|
\+ arg( Rest ),
|
||||||
|
file_or_library( Prefix, C).
|
||||||
|
complete( [atom(F)|Rest], C) :-
|
||||||
|
\+ arg( Rest ),
|
||||||
|
predicate( F, Pred, Arity ),
|
||||||
|
cont( Arity, F, Pred, C).
|
||||||
|
|
||||||
|
isconsult( atom(use_module) ).
|
||||||
|
isconsult( atom(ensure_loaded) ).
|
||||||
|
isconsult( atom(compile) ).
|
||||||
|
isconsult( atom(consult) ).
|
||||||
|
isconsult( atom(reconsult) ).
|
||||||
|
isconsult( atom(load_files) ).
|
||||||
|
isconsult( '[' ).
|
||||||
|
|
||||||
|
arg([']'|_]).
|
||||||
|
arg([l|_]).
|
||||||
|
|
||||||
|
fileerrors-or_library(F,C) :-
|
||||||
|
libsym(C0),
|
||||||
|
atom_cooncat(F,C,Co).
|
||||||
|
fileerrors-or_library(F,C) :-
|
||||||
|
check_file(F0,C).
|
||||||
|
|
||||||
|
check_file(F0,C) :-
|
||||||
|
atom_concat('\'',F,F0),
|
||||||
|
!,
|
||||||
|
absolute_file_name( F, FF, [access(none)] ),
|
||||||
|
atom_concat( F, '*' , Pat),
|
||||||
|
absolute_file_name( Pat, C0, [glob(true)] ),
|
||||||
|
atom_concat(Pat,C00,C0),
|
||||||
|
atom_conct(C00,'\'',C).
|
||||||
|
check_file(F0,C) :-
|
||||||
|
atom_concat( F, '*' , Pat),
|
||||||
|
absolute_file_name( Pat, C0, [glob(true)] ),
|
||||||
|
atom_concat(Pat,C,C0).
|
||||||
|
|
||||||
|
check_library( Lib, F, C) :-
|
||||||
|
atom_concat( F, '*' , Pat),
|
||||||
|
LibF =.. [Lib(Pat)],
|
||||||
|
absolute_file_name( LibF, Lib, [glob(true)] ),
|
||||||
|
file_directory_name( Lib, Name),
|
||||||
|
( atom_concat(C, '.yap', Name) -> true ;
|
||||||
|
atom_concat(C, '.ypp', Name) -> true ;
|
||||||
|
atom_concat(C, '.prolog', Name) -> true
|
||||||
|
).
|
||||||
|
|
||||||
|
predicate(N,P,A) :-
|
||||||
|
system_predicate(P0/A),
|
||||||
|
atom_concat(N,P,P0).
|
||||||
|
predicate(N,P,A) :-
|
||||||
|
current_predicate(P0/A),
|
||||||
|
atom_concat(N,P,P0).
|
||||||
|
|
||||||
|
cont(0, F, P, P0)- :-
|
||||||
|
atom_concat( F, P, PB ).
|
||||||
|
cont( _, F, P, PB ):-
|
||||||
|
atom_concat( [F, P, '('], PB ).
|
@ -5,6 +5,7 @@
|
|||||||
# Distributed under the terms of the Modified BSD License.
|
# Distributed under the terms of the Modified BSD License.
|
||||||
from __future__ import print_function
|
from __future__ import print_function
|
||||||
|
|
||||||
|
import setuptools
|
||||||
from setuptools import setup
|
from setuptools import setup
|
||||||
from setuptools.extension import Extension
|
from setuptools.extension import Extension
|
||||||
from codecs import open
|
from codecs import open
|
||||||
@ -49,7 +50,9 @@ from distutils.core import setup
|
|||||||
|
|
||||||
pjoin = os.path.join
|
pjoin = os.path.join
|
||||||
here = os.path.abspath(os.path.dirname(__file__))
|
here = os.path.abspath(os.path.dirname(__file__))
|
||||||
pkg_root = pjoin(here, name)
|
#pkg_root = pjoin(here, name)
|
||||||
|
|
||||||
|
sys.path.insert(0, "${CMAKE_CURRENT_SOURCE_DIR}")
|
||||||
|
|
||||||
my_extra_link_args = []
|
my_extra_link_args = []
|
||||||
if platform.system() == 'Windows':
|
if platform.system() == 'Windows':
|
||||||
@ -64,13 +67,26 @@ else:
|
|||||||
# or dll in glob('yap/dlls/*'):
|
# or dll in glob('yap/dlls/*'):
|
||||||
# move( dll ,'lib' )
|
# move( dll ,'lib' )
|
||||||
|
|
||||||
cplus = ['']
|
native_sources = ["yap.i"]
|
||||||
bpy2yap = []
|
|
||||||
native_sources = ['yap_wrap.cpp']
|
|
||||||
here = path.abspath(path.dirname(__file__))
|
|
||||||
gmp_dir = path.abspath(path.dirname("${GMP_LIBRARIES}"))
|
|
||||||
python_libdir = path.abspath(path.dirname("${PYTHON_LIBRARIES}"))
|
|
||||||
|
|
||||||
|
for i in '${PYTHON_SOURCES}'.split(";"):
|
||||||
|
copy2(i, 'yap4py')
|
||||||
|
for i in '${pl_library}'.split(";") + '${pl_swi_library}'.split(";") :
|
||||||
|
copy2(i, 'yap4py/prolog')
|
||||||
|
for i in '${pl_os_library}'.split(";") :
|
||||||
|
copy2(i, 'yap4py/prolog/os')
|
||||||
|
for i in '${pl_boot_library}'.split(";") :
|
||||||
|
copy2(i, 'yap4py/prolog/pl')
|
||||||
|
my_libs0 = '${YAP_DLLS}'.split(";")+['${CMAKE_BINARY_DIR}/startup.yss']
|
||||||
|
my_libs = []
|
||||||
|
for i in my_libs0:
|
||||||
|
my_libs = glob(i) + my_libs
|
||||||
|
for i in my_libs:
|
||||||
|
copy2(i, 'yap4py')
|
||||||
|
bpy2yap = []
|
||||||
|
here = path.abspath(path.dirname(__file__))
|
||||||
|
#gmp_dir = path.abspath(path.dirname("${GMP_LIBRARIES}"))
|
||||||
|
#python_libdir = path.abspath(path.dirname("${PYTHON_LIBRARIES}")
|
||||||
# Get the long description from the README file
|
# Get the long description from the README file
|
||||||
|
|
||||||
|
|
||||||
@ -85,8 +101,9 @@ extensions = [Extension('_yap', native_sources,
|
|||||||
swig_opts=['-modern', '-c++', '-py3',
|
swig_opts=['-modern', '-c++', '-py3',
|
||||||
'-DX_API', '-I${CMAKE_SOURCE_DIR}/CXX', '-I${CMAKE_SOURCE_DIR}/include',
|
'-DX_API', '-I${CMAKE_SOURCE_DIR}/CXX', '-I${CMAKE_SOURCE_DIR}/include',
|
||||||
'-I${CMAKE_SOURCE_DIR}/H', '-I${CMAKE_SOURCE_DIR}/H/generated',
|
'-I${CMAKE_SOURCE_DIR}/H', '-I${CMAKE_SOURCE_DIR}/H/generated',
|
||||||
'-I${CMAKE_SOURCE_DIR}/os', '-I${CMAKE_SOURCE_DIR}/OPTYap', '-I../../..'],
|
'-I${CMAKE_SOURCE_DIR}/os', '-I${CMAKE_SOURCE_DIR}/OPTYap',
|
||||||
library_dirs=['../../..', '../../../CXX', '..', "${dlls}", "${bindir}", 'c:/Anaconda3'],
|
'-I${CMAKE_SOURCE_DIR}/packages/python'],
|
||||||
|
library_dirs=['../../..', '../../../CXX', '..', "${bindir}"],
|
||||||
extra_link_args=my_extra_link_args,
|
extra_link_args=my_extra_link_args,
|
||||||
libraries=['Yap','gmp']+win_libs+local_libs,
|
libraries=['Yap','gmp']+win_libs+local_libs,
|
||||||
include_dirs=['../../..',
|
include_dirs=['../../..',
|
||||||
@ -95,26 +112,18 @@ extensions = [Extension('_yap', native_sources,
|
|||||||
'${CMAKE_SOURCE_DIR}/H/generated',
|
'${CMAKE_SOURCE_DIR}/H/generated',
|
||||||
'${CMAKE_SOURCE_DIR}/OPTYap',
|
'${CMAKE_SOURCE_DIR}/OPTYap',
|
||||||
'${CMAKE_SOURCE_DIR}/os',
|
'${CMAKE_SOURCE_DIR}/os',
|
||||||
|
'${CMAKE_SOURCE_DIR}/packages/python',
|
||||||
'${CMAKE_SOURCE_DIR}/include',
|
'${CMAKE_SOURCE_DIR}/include',
|
||||||
'${CMAKE_SOURCE_DIR}/CXX', '.']
|
'${CMAKE_SOURCE_DIR}/CXX', '.']
|
||||||
)]
|
)]#
|
||||||
|
|
||||||
packages = ['yap4py']
|
packages = packages = setuptools.find_packages('${CMAKE_CURRENT_SOURCE_DIR}')
|
||||||
|
|
||||||
|
|
||||||
def visit(d0, pls):
|
|
||||||
for (r, ds, fs) in walk('.'):
|
|
||||||
for f in fs:
|
|
||||||
f0, ext = os.path.splitext(f)
|
|
||||||
if (ext == 'yap' or ext == 'pl' or ext == 'so' or ext == 'dll' or ext == 'yss'):
|
|
||||||
pls += [os.path.join(r, f)]
|
|
||||||
for i in ds:
|
|
||||||
pls = visit(os.path.join(d0, i), pls)
|
|
||||||
return pls
|
|
||||||
|
|
||||||
|
|
||||||
package_data = {
|
package_data = {
|
||||||
'yap4py.prolog': """${PL}""".split(sep=";")
|
'yap4py/prolog': 'prolog/*.*',
|
||||||
|
'': '*.*'
|
||||||
}
|
}
|
||||||
|
|
||||||
version_ns = {'__version__': '6.3.5', 'minor-version': '6', 'minor-version': '3', 'patch': '5'}
|
version_ns = {'__version__': '6.3.5', 'minor-version': '6', 'minor-version': '3', 'patch': '5'}
|
||||||
@ -124,7 +133,7 @@ setup_args = dict(
|
|||||||
version=version_ns['__version__'],
|
version=version_ns['__version__'],
|
||||||
scripts=glob(pjoin('scripts', '*')),
|
scripts=glob(pjoin('scripts', '*')),
|
||||||
packages=packages,
|
packages=packages,
|
||||||
py_modules=['yap'],
|
py_modules=['yap','yap4py'],
|
||||||
package_data=package_data,
|
package_data=package_data,
|
||||||
include_package_data=True,
|
include_package_data=True,
|
||||||
requirements=[
|
requirements=[
|
||||||
|
@ -3,15 +3,25 @@ import os
|
|||||||
import ctypes
|
import ctypes
|
||||||
import glob
|
import glob
|
||||||
import os.path
|
import os.path
|
||||||
|
import platform
|
||||||
import sys
|
import sys
|
||||||
|
|
||||||
global yap_lib_path
|
global yap_lib_path
|
||||||
yap_lib_path = os.path.dirname(__file__)
|
yap_lib_path = os.path.dirname(__file__)
|
||||||
|
|
||||||
|
if platform.system() == 'Windows':
|
||||||
|
def load( dll ):
|
||||||
|
dll = glob.glob(os.path.join(yap_lib_path,dll))[0]
|
||||||
|
dll = os.path.abspath(dll)
|
||||||
|
ctypes.WinDLL(dll)
|
||||||
|
load('libYap*')
|
||||||
|
else:
|
||||||
|
def load( dll ):
|
||||||
|
dll = glob.glob(os.path.join(yap_lib_path,dll))[0]
|
||||||
|
dll = os.path.abspath(dll)
|
||||||
|
ctypes.CDLL(dll, mode=ctypes.RTLD_GLOBAL)
|
||||||
|
|
||||||
def load( dll ):
|
load('libYap*')
|
||||||
dll = glob.glob(os.path.join(yap_lib_path,dll))[0]
|
if platform.system() == 'Apple':
|
||||||
dll = os.path.abspath(dll)
|
load('libYAP+*')
|
||||||
ctypes.CDLL(dll, mode=ctypes.RTLD_GLOBAL)
|
load('libPy4YAP*')
|
||||||
|
|
||||||
load('libYap*')
|
|
||||||
|
@ -1,238 +0,0 @@
|
|||||||
|
|
||||||
import os.path
|
|
||||||
import sys
|
|
||||||
import keyword
|
|
||||||
# debugging support.
|
|
||||||
# import pdb
|
|
||||||
from collections import namedtuple
|
|
||||||
|
|
||||||
from yap import *
|
|
||||||
|
|
||||||
|
|
||||||
class Engine( YAPEngine ):
|
|
||||||
def __init__(self, args=None,**kwargs):
|
|
||||||
# type: (object) -> object
|
|
||||||
if not args:
|
|
||||||
args = EngineArgs(**kwargs)
|
|
||||||
yap_lib_path = os.path.dirname(__file__)
|
|
||||||
args.setYapShareDir(os.path.join(yap_lib_path,"prolog"))
|
|
||||||
args.setYapLibDir(yap_lib_path)
|
|
||||||
args.setSavedState(os.path.join(yap_lib_path,"startup.yss"))
|
|
||||||
YAPEngine.__init__(self,args)
|
|
||||||
self.goal( set_prolog_flag('verbose', 'silent' ) )
|
|
||||||
self.goal( use_module(library('yapi') ) )
|
|
||||||
self.goal( set_prolog_flag('verbose', 'normal' ) )
|
|
||||||
|
|
||||||
|
|
||||||
def run(self, g, m=None):
|
|
||||||
if m:
|
|
||||||
self.mgoal(g, m)
|
|
||||||
else:
|
|
||||||
self.goal(g)
|
|
||||||
|
|
||||||
def f(self, g):
|
|
||||||
self.E.fun(g)
|
|
||||||
|
|
||||||
|
|
||||||
class EngineArgs( YAPEngineArgs ):
|
|
||||||
""" Interface to Engine Options class"""
|
|
||||||
def __init__(self, args=None,**kwargs):
|
|
||||||
super().__init__()
|
|
||||||
|
|
||||||
|
|
||||||
class Predicate( YAPPredicate ):
|
|
||||||
""" Interface to Generic Predicate"""
|
|
||||||
|
|
||||||
class Predicate:
|
|
||||||
"""Goal is a predicate instantiated under a specific environment """
|
|
||||||
def __init__( self, name, args, module=None, engine = None):
|
|
||||||
self = namedtuple( name, args )
|
|
||||||
if module:
|
|
||||||
self.p = YAPPredicate( name, len(self), module )
|
|
||||||
else:
|
|
||||||
self.p = YAPPredicate( name, len(self) )
|
|
||||||
self.e = engine
|
|
||||||
|
|
||||||
def goals( self, engine):
|
|
||||||
self.e = engine
|
|
||||||
|
|
||||||
def __iter__(self):
|
|
||||||
return PrologTableIter(self.e, self.p)
|
|
||||||
|
|
||||||
def holds(self):
|
|
||||||
return self.e.run(self._make_())
|
|
||||||
|
|
||||||
class PrologTableIter:
|
|
||||||
|
|
||||||
def __init__(self, e, goal):
|
|
||||||
try:
|
|
||||||
self.e = e
|
|
||||||
self.q = e.YAPQuery(goal)
|
|
||||||
except:
|
|
||||||
print('Error')
|
|
||||||
|
|
||||||
def __iter__(self):
|
|
||||||
# Iterators are iterables too.
|
|
||||||
# Adding this functions to make them so.
|
|
||||||
return self
|
|
||||||
|
|
||||||
def next(self):
|
|
||||||
if self.q.next():
|
|
||||||
return goal
|
|
||||||
else:
|
|
||||||
self.q.close()
|
|
||||||
self.q = None
|
|
||||||
raise StopIteration()
|
|
||||||
|
|
||||||
f2p = []
|
|
||||||
for i in range(16):
|
|
||||||
f2p += [{}]
|
|
||||||
|
|
||||||
def named( name, arity):
|
|
||||||
if arity > 0 and name.isidentifier() and not keyword.iskeyword(name):
|
|
||||||
s = []
|
|
||||||
for i in range(arity):
|
|
||||||
s += ["A" + str(i)]
|
|
||||||
f2p[arity][name] = namedtuple(name, s)
|
|
||||||
|
|
||||||
class PrologPredicate( YAPPrologPredicate ):
|
|
||||||
""" Interface to Prolog Predicate"""
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
global engine, handler
|
|
||||||
|
|
||||||
yap_lib_path = os.path.dirname(__file__)
|
|
||||||
|
|
||||||
use_module = namedtuple('use_module', 'file')
|
|
||||||
bindvars = namedtuple('bindvars', 'list')
|
|
||||||
library = namedtuple('library', 'list')
|
|
||||||
v = namedtuple( 'v', 'slot')
|
|
||||||
yap_query = namedtuple( 'yap_query', 'query owner')
|
|
||||||
jupyter_query = namedtuple( 'jupyter_query', 'vars dict')
|
|
||||||
python_query = namedtuple( 'python_query', 'vars dict')
|
|
||||||
yapi_query = namedtuple( 'yapi_query', 'vars dict')
|
|
||||||
show_answer = namedtuple( 'show_answer', 'vars dict')
|
|
||||||
set_prolog_flag = namedtuple('set_prolog_flag', 'flag new_value')
|
|
||||||
|
|
||||||
class v(YAPVarTerm):
|
|
||||||
def __init__(self):
|
|
||||||
super().__init__()
|
|
||||||
|
|
||||||
def binding(self):
|
|
||||||
return self.term()
|
|
||||||
|
|
||||||
def numbervars( q ):
|
|
||||||
Dict = {}
|
|
||||||
if True:
|
|
||||||
engine.goal(show_answer( q.namedVars(), Dict))
|
|
||||||
return Dict
|
|
||||||
rc = q.namedVarsVector()
|
|
||||||
q.r = q.goal().numbervars()
|
|
||||||
o = []
|
|
||||||
for i in rc:
|
|
||||||
if len(i) == 2:
|
|
||||||
do = str(i[0]) + " = " + str( i[1] ) + "\n"
|
|
||||||
o += do
|
|
||||||
else:
|
|
||||||
do = str(i[0]) + " = " + str( i[1] ) + "\n"
|
|
||||||
o += do
|
|
||||||
return o
|
|
||||||
|
|
||||||
class YAPShell:
|
|
||||||
|
|
||||||
|
|
||||||
def answer(self, q):
|
|
||||||
try:
|
|
||||||
self.bindings = {}
|
|
||||||
v = q.next()
|
|
||||||
if v:
|
|
||||||
print( self.bindings )
|
|
||||||
return v
|
|
||||||
except Exception as e:
|
|
||||||
print(e.args[1])
|
|
||||||
return False
|
|
||||||
|
|
||||||
def query_prolog(self, engine, s):
|
|
||||||
# import pdb; pdb.set_trace()
|
|
||||||
#
|
|
||||||
# construct a query from a one-line string
|
|
||||||
# q is opaque to Python
|
|
||||||
#
|
|
||||||
q = engine.query(python_query(self, s))
|
|
||||||
#
|
|
||||||
# # vs is the list of variables
|
|
||||||
# you can print it out, the left-side is the variable name,
|
|
||||||
# the right side wraps a handle to a variable
|
|
||||||
# pdb.set_trace()
|
|
||||||
# #pdb.set_trace()
|
|
||||||
# atom match either symbols, or if no symbol exists, sttrings, In this case
|
|
||||||
# variable names should match strings
|
|
||||||
#for eq in vs:
|
|
||||||
# if not isinstance(eq[0],str):
|
|
||||||
# print( "Error: Variable Name matches a Python Symbol")
|
|
||||||
# return
|
|
||||||
do_ask = True
|
|
||||||
self.port = "call"
|
|
||||||
# launch the query
|
|
||||||
while self.answer(q):
|
|
||||||
if self.port == "exit":
|
|
||||||
# done
|
|
||||||
q.close()
|
|
||||||
return True, True
|
|
||||||
if do_ask:
|
|
||||||
s = input("more(;), all(*), no(\\n), python(#) ?").lstrip()
|
|
||||||
if s.startswith(';') or s.startswith('y'):
|
|
||||||
continue
|
|
||||||
elif s.startswith('#'):
|
|
||||||
try:
|
|
||||||
exec(s.lstrip('#'))
|
|
||||||
except:
|
|
||||||
raise
|
|
||||||
elif s.startswith('*') or s.startswith('a'):
|
|
||||||
do_ask = False
|
|
||||||
continue
|
|
||||||
else:
|
|
||||||
break
|
|
||||||
print("No (more) answers")
|
|
||||||
q.close()
|
|
||||||
return
|
|
||||||
|
|
||||||
def live(self, engine, **kwargs):
|
|
||||||
loop = True
|
|
||||||
while loop:
|
|
||||||
try:
|
|
||||||
s = input("?- ")
|
|
||||||
if not s:
|
|
||||||
loop = False
|
|
||||||
else:
|
|
||||||
self.query_prolog(engine, s)
|
|
||||||
except SyntaxError as err:
|
|
||||||
print("Syntax Error error: {0}".format(err))
|
|
||||||
except EOFError:
|
|
||||||
return
|
|
||||||
except RuntimeError as err:
|
|
||||||
print("YAP Execution Error: {0}".format(err))
|
|
||||||
except ValueError:
|
|
||||||
print("Could not convert data to an integer.")
|
|
||||||
except:
|
|
||||||
print("Unexpected error:", sys.exc_info()[0])
|
|
||||||
raise
|
|
||||||
engine.close()
|
|
||||||
#
|
|
||||||
# initialize engine
|
|
||||||
# engine = yap.YAPEngine();
|
|
||||||
# engine = yap.YAPEngine(yap.YAPParams());
|
|
||||||
#
|
|
||||||
def __init__(self, engine, **kwargs):
|
|
||||||
self.live(engine)
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
engine = Engine()
|
|
||||||
handler = numbervars
|
|
||||||
YAPShell(engine)
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
@ -35,38 +35,69 @@ completions(S, Self) :-
|
|||||||
|
|
||||||
|
|
||||||
strip_final_tokens(['EOT'|Ts], Ts) :- !.
|
strip_final_tokens(['EOT'|Ts], Ts) :- !.
|
||||||
strip_final_tokens( Ts, Ts ).
|
strip_final_tokens( Ts, Ts ).|_],
|
||||||
|
complete([E,l,C,l,A|More],
|
||||||
complete( [atom(F)|LibRest], C) :-
|
isconsult(A),
|
||||||
LibRest = [l, atom(Where)|Consult],
|
%B = l,
|
||||||
isconsult(Consult, Rest),
|
library(C,Lib),
|
||||||
|
%D=l,
|
||||||
|
E=atom(Prefix),
|
||||||
\+ arg( Rest ),
|
\+ arg( Rest ),
|
||||||
check_library( F, Where, C).
|
check_library( Prefix, Lib, C).
|
||||||
complete( [atom(F)|Consult], C) :-
|
complete([E,l,C,l,-,'['|More],
|
||||||
isconsult(Consult, Rest),
|
isconsult(A),
|
||||||
|
%B = l,
|
||||||
|
library(C,Lib),
|
||||||
|
%D=l,
|
||||||
|
E=atom(Prefix),
|
||||||
\+ arg( Rest ),
|
\+ arg( Rest ),
|
||||||
check_file( F, C).
|
check_library( Prefix, Lib, C).
|
||||||
|
complete([C,l,A|More],
|
||||||
|
isconsult(A),
|
||||||
|
%B = l,
|
||||||
|
C=atom(Prefix),
|
||||||
|
\+ arg( Rest ),
|
||||||
|
file_or_library( Prefix, C).
|
||||||
|
complete([C,l,-,'['|More],
|
||||||
|
isconsult(A),
|
||||||
|
%B = l,
|
||||||
|
C=atom(Prefix),
|
||||||
|
\+ arg( Rest ),
|
||||||
|
file_or_library( Prefix, C).
|
||||||
complete( [atom(F)|Rest], C) :-
|
complete( [atom(F)|Rest], C) :-
|
||||||
\+ arg( Rest ),
|
\+ arg( Rest ),
|
||||||
predicate( F, Pred, Arity ),
|
predicate( F, Pred, Arity ),
|
||||||
cont( Arity, F, Pred, C).
|
cont( Arity, F, Pred, C).
|
||||||
|
|
||||||
isconsult( [l, use_module| Rest], Rest).
|
isconsult( atom(use_module) ).
|
||||||
isconsult( [l, ensure_loaded| Rest], Rest).
|
isconsult( atom(ensure_loaded) ).
|
||||||
isconsult( [l, compile| Rest], Rest).
|
isconsult( atom(compile) ).
|
||||||
isconsult( [l, consult| Rest], Rest).
|
isconsult( atom(consult) ).
|
||||||
isconsult( [l, reconsult| Rest], Rest).
|
isconsult( atom(reconsult) ).
|
||||||
isconsult( [l, load_files| Rest], Rest).
|
isconsult( atom(load_files) ).
|
||||||
isconsult( ['-', ']'| Rest], Rest).
|
isconsult( '[' ).
|
||||||
isconsult( [']'| Rest], Rest ).
|
|
||||||
|
|
||||||
arg([']'|_]).
|
arg([']'|_]).
|
||||||
arg([l|_]).
|
arg([l|_]).
|
||||||
|
|
||||||
check_file(F,C) :-
|
fileerrors-or_library(F,C) :-
|
||||||
|
libsym(C0),
|
||||||
|
atom_cooncat(F,C,Co).
|
||||||
|
fileerrors-or_library(F,C) :-
|
||||||
|
check_file(F0,C).
|
||||||
|
|
||||||
|
check_file(F0,C) :-
|
||||||
|
atom_concat('\'',F,F0),
|
||||||
|
!,
|
||||||
|
absolute_file_name( F, FF, [access(none)] ),
|
||||||
atom_concat( F, '*' , Pat),
|
atom_concat( F, '*' , Pat),
|
||||||
absolute_file_name( Pat, C0, [glob(true)] ),
|
absolute_file_name( Pat, C0, [glob(true)] ),
|
||||||
atom_concat(['\'',C0,'\''], C).
|
atom_concat(Pat,C00,C0),
|
||||||
|
atom_conct(C00,'\'',C).
|
||||||
|
check_file(F0,C) :-
|
||||||
|
atom_concat( F, '*' , Pat),
|
||||||
|
absolute_file_name( Pat, C0, [glob(true)] ),
|
||||||
|
atom_concat(Pat,C,C0).
|
||||||
|
|
||||||
check_library( Lib, F, C) :-
|
check_library( Lib, F, C) :-
|
||||||
atom_concat( F, '*' , Pat),
|
atom_concat( F, '*' , Pat),
|
||||||
|
@ -39,7 +39,7 @@ if (WIN32)
|
|||||||
set( CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${LIBXML2_LIBRARIES} )
|
set( CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${LIBXML2_LIBRARIES} )
|
||||||
|
|
||||||
else (WIN32)
|
else (WIN32)
|
||||||
ADD_LIBRARY(libxml2 SHARED ${LIBXML2_SOURCES} )
|
ADD_LIB(libxml2 ${LIBXML2_SOURCES} )
|
||||||
|
|
||||||
if(DEFINED YAP_MAJOR_VERSION)
|
if(DEFINED YAP_MAJOR_VERSION)
|
||||||
TARGET_LINK_LIBRARIES(libxml2
|
TARGET_LINK_LIBRARIES(libxml2
|
||||||
@ -88,7 +88,7 @@ IF (RAPTOR_FOUND)
|
|||||||
raptor_yap.c
|
raptor_yap.c
|
||||||
)
|
)
|
||||||
|
|
||||||
ADD_LIBRARY(raptor SHARED ${RAPTOR_SOURCES} )
|
ADD_LIB(raptor ${RAPTOR_SOURCES} )
|
||||||
|
|
||||||
if(DEFINED YAP_MAJOR_VERSION)
|
if(DEFINED YAP_MAJOR_VERSION)
|
||||||
TARGET_LINK_LIBRARIES(raptor
|
TARGET_LINK_LIBRARIES(raptor
|
||||||
|
@ -32,7 +32,7 @@ include_directories (
|
|||||||
${LIBR_INCLUDE_DIRS}
|
${LIBR_INCLUDE_DIRS}
|
||||||
)
|
)
|
||||||
|
|
||||||
add_library (real SHARED ${REAL_SOURCES})
|
add_lib(real ${REAL_SOURCES})
|
||||||
|
|
||||||
target_link_libraries (real ${LIBR_LIBRARIES} libYap)
|
target_link_libraries (real ${LIBR_LIBRARIES} libYap)
|
||||||
|
|
||||||
|
@ -24,7 +24,7 @@ pl-minisat.C
|
|||||||
${CMAKE_CURRENT_SOURCE_DIR}
|
${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
)
|
)
|
||||||
|
|
||||||
ADD_LIBRARY(minisat2 SHARED ${MINISAT2_SOURCES} ${MINISAT2_HEADERS} )
|
ADD_LIB(minisat2 ${MINISAT2_SOURCES} ${MINISAT2_HEADERS} )
|
||||||
|
|
||||||
set_target_properties (minisat2 PROPERTIES OUTPUT_NAME pl-minisat)
|
set_target_properties (minisat2 PROPERTIES OUTPUT_NAME pl-minisat)
|
||||||
set_target_properties (minisat2 PROPERTIES PREFIX "")
|
set_target_properties (minisat2 PROPERTIES PREFIX "")
|
||||||
|
@ -15,7 +15,7 @@ INCLUDE(${SWIG_USE_FILE})
|
|||||||
if (ANDROID)
|
if (ANDROID)
|
||||||
add_subdirectory(android)
|
add_subdirectory(android)
|
||||||
else(ANDROID)
|
else(ANDROID)
|
||||||
add_subdirectory(java)
|
# add_subdirectory(java)
|
||||||
endif(ANDROID)
|
endif(ANDROID)
|
||||||
|
|
||||||
set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS SWIGYAP=1)
|
set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS SWIGYAP=1)
|
||||||
|
@ -45,7 +45,7 @@ FILE( MAKE_DIRECTORY ${YAP_APP_DIR}/src/generated/assets)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
add_library (YAPJava SHARED
|
add_lib(YAPJava
|
||||||
yap_swig.cpp swig_streamer.cpp streamer.cpp streamer.h
|
yap_swig.cpp swig_streamer.cpp streamer.cpp streamer.h
|
||||||
)
|
)
|
||||||
target_link_libraries(YAPJava ${GMP_LIBRARIES} )
|
target_link_libraries(YAPJava ${GMP_LIBRARIES} )
|
||||||
|
@ -33,7 +33,7 @@ if (JNI_FOUND)
|
|||||||
endif()
|
endif()
|
||||||
#SET(CMAKE_SWIG_FLAGS "${CMAKE_SWIG_FLAGS} ")
|
#SET(CMAKE_SWIG_FLAGS "${CMAKE_SWIG_FLAGS} ")
|
||||||
|
|
||||||
SWIG_ADD_MODULE(Native java ${SWIG_SOURCES}
|
SWIG_ADD_LIBRARY(Native LANGUAGE java SOURCES ${SWIG_SOURCES}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,342 +1,324 @@
|
|||||||
// supports Java and Python
|
// supports Java and Python
|
||||||
|
|
||||||
|
|
||||||
%{
|
|
||||||
|
|
||||||
#include <cmath>
|
|
||||||
#include <gmpxx.h>
|
|
||||||
|
|
||||||
extern "C"{
|
|
||||||
#ifdef SWIGPYTHON
|
|
||||||
#include <Python.h>
|
|
||||||
#endif
|
|
||||||
#include "Yap.h"
|
|
||||||
}
|
|
||||||
%}
|
|
||||||
|
|
||||||
/* example.i */
|
/* example.i */
|
||||||
%module(directors = "1") yap
|
%module(directors = "1") yap
|
||||||
|
|
||||||
// Language independent exception handler
|
// Language independent exception handler
|
||||||
%include exception.i
|
%include exception.i
|
||||||
%include stdint.i
|
%include stdint.i
|
||||||
%include std_string.i
|
%include std_string.i
|
||||||
%include std_vector.i
|
%include std_vector.i
|
||||||
|
|
||||||
|
|
||||||
<<<<<<< HEAD
|
%feature("novaluewrapper") std::vector<Term>;
|
||||||
%feature("novaluewrapper") std::vector<Term>;
|
|
||||||
=======
|
|
||||||
>>>>>>> 11e81b457dcc145e07b457482698a90e0ec350a2
|
|
||||||
|
|
||||||
%ignore *::operator[];
|
%ignore *::operator[];
|
||||||
|
|
||||||
|
class YAPAtom;
|
||||||
class YAPPredicate;
|
class YAPPredicate;
|
||||||
class YAPEngine;
|
class YAPEngine;
|
||||||
|
|
||||||
%{
|
%{
|
||||||
|
|
||||||
#include "yapi.hh"
|
|
||||||
|
|
||||||
#ifdef SWIGPYTHON
|
#include <cmath>
|
||||||
|
#include <gmpxx.h>
|
||||||
|
|
||||||
extern "C" {
|
extern "C"{
|
||||||
|
#include "Yap.h"
|
||||||
|
#ifdef SWIGPYTHON
|
||||||
|
#include <py4yap.h>
|
||||||
|
|
||||||
extern X_API YAP_Term pythonToYAP(PyObject *pVal);
|
extern inline PyObject *AtomToPy(const char *s) {
|
||||||
extern X_API PyObject * yap_to_python(YAP_Term t, bool eval, PyObject *ctx, bool cvt);
|
if (strcmp(s, "true") == 0)
|
||||||
X_API extern bool init_python(void);
|
|
||||||
extern X_API PyObject *py_Main;
|
|
||||||
extern X_API PyObject *py_Builtin;
|
|
||||||
extern X_API PyObject *py_Yapex;
|
|
||||||
}
|
|
||||||
|
|
||||||
extern inline PyObject *AtomToPy(const char *s) {
|
|
||||||
if (strcmp(s, "true") == 0)
|
|
||||||
return Py_True;
|
return Py_True;
|
||||||
if (strcmp(s, "false") == 0)
|
if (strcmp(s, "false") == 0)
|
||||||
return Py_False;
|
return Py_False;
|
||||||
if (strcmp(s, "none") == 0)
|
if (strcmp(s, "none") == 0)
|
||||||
return Py_None;
|
return Py_None;
|
||||||
if (strcmp(s, "[]") == 0)
|
if (strcmp(s, "[]") == 0)
|
||||||
return PyList_New(0);
|
return PyList_New(0);
|
||||||
else if (strcmp(s, "{}") == 0)
|
else if (strcmp(s, "{}") == 0)
|
||||||
return PyDict_New();
|
return PyDict_New();
|
||||||
/* return __main__,s */
|
/* return __main__,s */
|
||||||
else if (PyObject_HasAttrString(py_Main, s)) {
|
else if (PyObject_HasAttrString(py_Main, s)) {
|
||||||
return PyObject_GetAttrString(py_Main, s);
|
return PyObject_GetAttrString(py_Main, s);
|
||||||
}
|
|
||||||
// no way to translate
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
%}
|
|
||||||
|
|
||||||
#ifdef SWIGPYTHON
|
|
||||||
%typemap(typecheck) Term* {
|
|
||||||
$1 = PySequence_Check($input);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Map a Python sequence into any sized C double array
|
|
||||||
%typemap(in) Term* {
|
|
||||||
int i;
|
|
||||||
if (!PySequence_Check($input)) {
|
|
||||||
PyErr_SetString(PyExc_TypeError,"Expecting a sequence");
|
|
||||||
$1 = nullptr;
|
|
||||||
} else {
|
|
||||||
int sz = PyObject_Length($input);
|
|
||||||
std::vector<Term> v(sz);
|
|
||||||
for (i =0; i < sz; i++) {
|
|
||||||
PyObject *o = PySequence_GetItem($input,i);
|
|
||||||
v[i] = Term(pythonToYAP(o));
|
|
||||||
//Py_DECREF(o);
|
|
||||||
}
|
|
||||||
$1 = &v[0];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
//%typemap(check) YAPEngine::fun(Term) { $1 = 1; }
|
|
||||||
//%typemap(check) YAPEngine::fun(YAPTerm) { $1 = 0; }
|
|
||||||
|
|
||||||
|
|
||||||
%typemap(in) Int { if (PyLong_Check($input)) {
|
|
||||||
$1 = PyLong_AsLong($input);} }
|
|
||||||
|
|
||||||
//%typemap(in) double { if (PyFloat_Check($input)) {
|
|
||||||
// $1 = PyFloat_AsDouble($input); } }
|
|
||||||
|
|
||||||
//%typemap(in) char const * { if (PyUnicode_Check($input)) {
|
|
||||||
// $1 = PyUnicode_AsUTF8($input); } }
|
|
||||||
|
|
||||||
//%typemap(in) YAPTerm { $1 = new YAPTerm(pythonToYAP($input)); PyErr_Clear(); }
|
|
||||||
%typemap(in) YAP_Term { $1 = pythonToYAP($input); PyErr_Clear(); }
|
|
||||||
%typemap(in) Term { $1 = pythonToYAP($input); PyErr_Clear(); }
|
|
||||||
%typemap(in) YAPTerm { YAPTerm(($1 = pythonToYAP($input))); PyErr_Clear(); }
|
|
||||||
|
|
||||||
%typecheck(2) Int { $1 = PyLong_Check($input); }
|
|
||||||
%typecheck(3) double { $1 = PyFloat_Check($input); }
|
|
||||||
%typecheck(2) const char * { $1 = PyUnicode_Check($input); }
|
|
||||||
|
|
||||||
%typecheck(1) Term { $1 = !PyUnicode_Check($input); }
|
|
||||||
%typecheck(1) YAP_Term { $1 = PyUnicode_Check($input); }
|
|
||||||
|
|
||||||
%typecheck(0) YAPTerm { $1 = !PyUnicode_Check($input); }
|
|
||||||
|
|
||||||
|
|
||||||
%typemap(out) YAP_Term { return $result = yap_to_python($1, false, 0, true); }
|
|
||||||
|
|
||||||
%typemap(out) Term { return $result = yap_to_python($1, false, 0, true); }
|
|
||||||
|
|
||||||
%typemap(out) std::vector<Term> {
|
|
||||||
size_t len = $1.size();
|
|
||||||
$result = PyList_New(len);
|
|
||||||
for (size_t i = 0; i< len; i++) {
|
|
||||||
PyObject *o = yap_to_python($1[i],false,0,true);
|
|
||||||
PyList_SetItem($result,i,o);
|
|
||||||
|
|
||||||
}
|
|
||||||
return $result; }
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Language independent exception handler
|
|
||||||
|
|
||||||
%exception next {
|
|
||||||
try {
|
|
||||||
$action
|
|
||||||
} catch (YAPError &e) {
|
|
||||||
yap_error_number en = e.getID();
|
|
||||||
PyObject *pyerr = PyExc_RuntimeError;
|
|
||||||
|
|
||||||
LOCAL_Error_TYPE = YAP_NO_ERROR;
|
|
||||||
switch (e.getErrorClass()) {
|
|
||||||
case YAPC_NO_ERROR:
|
|
||||||
break;
|
|
||||||
/// bad domain, "first argument often is the predicate.
|
|
||||||
case DOMAIN_ERROR: {
|
|
||||||
switch (en) {
|
|
||||||
case DOMAIN_ERROR_OUT_OF_RANGE:
|
|
||||||
pyerr = PyExc_GeneratorExit;
|
|
||||||
break;
|
|
||||||
case DOMAIN_ERROR_NOT_LESS_THAN_ZERO:
|
|
||||||
pyerr = PyExc_IndexError;
|
|
||||||
break;
|
|
||||||
case DOMAIN_ERROR_CLOSE_OPTION:
|
|
||||||
case DOMAIN_ERROR_ENCODING:
|
|
||||||
case DOMAIN_ERROR_PROLOG_FLAG:
|
|
||||||
case DOMAIN_ERROR_ABSOLUTE_FILE_NAME_OPTION:
|
|
||||||
case DOMAIN_ERROR_READ_OPTION:
|
|
||||||
case DOMAIN_ERROR_SET_STREAM_OPTION:
|
|
||||||
pyerr = PyExc_KeyError;
|
|
||||||
break;
|
|
||||||
case DOMAIN_ERROR_FILE_ERRORS:
|
|
||||||
case DOMAIN_ERROR_FILE_TYPE:
|
|
||||||
case DOMAIN_ERROR_IO_MODE:
|
|
||||||
case DOMAIN_ERROR_SOURCE_SINK:
|
|
||||||
case DOMAIN_ERROR_STREAM_POSITION:
|
|
||||||
pyerr = PyExc_IOError;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
pyerr = PyExc_ValueError;
|
|
||||||
}
|
|
||||||
} break;
|
|
||||||
/// bad arithmetic
|
|
||||||
case EVALUATION_ERROR: {
|
|
||||||
switch (en) {
|
|
||||||
case EVALUATION_ERROR_FLOAT_OVERFLOW:
|
|
||||||
case EVALUATION_ERROR_INT_OVERFLOW:
|
|
||||||
pyerr = PyExc_OverflowError;
|
|
||||||
break;
|
|
||||||
case EVALUATION_ERROR_FLOAT_UNDERFLOW:
|
|
||||||
case EVALUATION_ERROR_UNDERFLOW:
|
|
||||||
case EVALUATION_ERROR_ZERO_DIVISOR:
|
|
||||||
pyerr = PyExc_ArithmeticError;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
pyerr = PyExc_RuntimeError;
|
|
||||||
}
|
|
||||||
} break;
|
|
||||||
/// missing object (I/O mostly)
|
|
||||||
case EXISTENCE_ERROR:
|
|
||||||
pyerr = PyExc_NotImplementedError;
|
|
||||||
break;
|
|
||||||
/// should be bound
|
|
||||||
case INSTANTIATION_ERROR_CLASS:
|
|
||||||
pyerr = PyExc_RuntimeError;
|
|
||||||
break;
|
|
||||||
/// bad access, I/O
|
|
||||||
case PERMISSION_ERROR: {
|
|
||||||
switch (en) {
|
|
||||||
case PERMISSION_ERROR_INPUT_BINARY_STREAM:
|
|
||||||
case PERMISSION_ERROR_INPUT_PAST_END_OF_STREAM:
|
|
||||||
case PERMISSION_ERROR_INPUT_STREAM:
|
|
||||||
case PERMISSION_ERROR_INPUT_TEXT_STREAM:
|
|
||||||
case PERMISSION_ERROR_OPEN_SOURCE_SINK:
|
|
||||||
case PERMISSION_ERROR_OUTPUT_BINARY_STREAM:
|
|
||||||
case PERMISSION_ERROR_REPOSITION_STREAM:
|
|
||||||
case PERMISSION_ERROR_OUTPUT_STREAM:
|
|
||||||
case PERMISSION_ERROR_OUTPUT_TEXT_STREAM:
|
|
||||||
pyerr = PyExc_OverflowError;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
pyerr = PyExc_RuntimeError;
|
|
||||||
}
|
|
||||||
} break;
|
|
||||||
/// something that could not be represented into a type
|
|
||||||
case REPRESENTATION_ERROR:
|
|
||||||
pyerr = PyExc_RuntimeError;
|
|
||||||
break;
|
|
||||||
/// not enough ....
|
|
||||||
case RESOURCE_ERROR:
|
|
||||||
pyerr = PyExc_RuntimeError;
|
|
||||||
break;
|
|
||||||
/// bad text
|
|
||||||
case SYNTAX_ERROR_CLASS:
|
|
||||||
pyerr = PyExc_SyntaxError;
|
|
||||||
break;
|
|
||||||
/// OS or internal
|
|
||||||
case SYSTEM_ERROR_CLASS:
|
|
||||||
pyerr = PyExc_RuntimeError;
|
|
||||||
break;
|
|
||||||
/// bad typing
|
|
||||||
case TYPE_ERROR:
|
|
||||||
pyerr = PyExc_TypeError;
|
|
||||||
break;
|
|
||||||
/// should be unbound
|
|
||||||
case UNINSTANTIATION_ERROR_CLASS:
|
|
||||||
pyerr = PyExc_RuntimeError;
|
|
||||||
break;
|
|
||||||
/// escape hatch
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
PyErr_SetString(pyerr, e.text().c_str());
|
// no way to translate
|
||||||
|
return NULL;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
%typemap(in) arity_t { (jlong)($input); }
|
|
||||||
|
|
||||||
%typecheck(2) Int { $1 = PyLong_Check($input); }
|
|
||||||
%typecheck(3) double { $1 = PyFloat_Check($input); }
|
|
||||||
%typecheck(2) const char * { $1 = PyUnicode_Check($input); }
|
|
||||||
|
|
||||||
%typecheck(1) Term { $1 = !PyUnicode_Check($input); }
|
|
||||||
%typecheck(1) YAP_Term { $1 = PyUnicode_Check($input); }
|
|
||||||
|
|
||||||
%typecheck(0) YAPTerm { $1 = !PyUnicode_Check($input); }
|
|
||||||
|
|
||||||
|
|
||||||
%typemap(in) jlong %{
|
|
||||||
$1 = (jlong)$input;
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%typemap(out) arity_t { *(jlong *)&$result = $1; }
|
#ifdef SWIGPYTHON
|
||||||
|
%typemap(typecheck) Term* {
|
||||||
// Language independent exception handler
|
$1 = PySequence_Check($input);
|
||||||
// simplified version
|
|
||||||
%include <exception.i>
|
|
||||||
|
|
||||||
%exception {
|
|
||||||
try {
|
|
||||||
$action
|
|
||||||
} catch (const std::out_of_range& e) {
|
|
||||||
SWIG_exception(SWIG_IndexError, e.what());
|
|
||||||
} catch (const std::exception& e) {
|
|
||||||
SWIG_exception(SWIG_RuntimeError, e.what());
|
|
||||||
} catch (...) {
|
|
||||||
SWIG_exception(SWIG_RuntimeError, "unknown exception");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
%{
|
|
||||||
/* Put header files here or function declarations like below */
|
|
||||||
|
|
||||||
|
|
||||||
extern "C" {
|
|
||||||
|
|
||||||
#if THREADS
|
|
||||||
#define Yap_regp regcache
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// we cannot consult YapInterface.h, that conflicts with what we
|
|
||||||
// declare, though
|
|
||||||
// it shouldn't
|
|
||||||
}
|
}
|
||||||
|
|
||||||
extern void init_sqlite();
|
// Map a Python sequence into any sized C double array
|
||||||
|
%typemap(in) Term* {
|
||||||
%}
|
int i;
|
||||||
|
if (!PySequence_Check($input)) {
|
||||||
|
PyErr_SetString(PyExc_TypeError,"Expecting a sequence");
|
||||||
|
$1 = nullptr;
|
||||||
|
} else {
|
||||||
|
int sz = PyObject_Length($input);
|
||||||
|
std::vector<Term> v(sz);
|
||||||
|
for (i =0; i < sz; i++) {
|
||||||
|
PyObject *o = PySequence_GetItem($input,i);
|
||||||
|
v[i] = Term(pythonToYAP(o));
|
||||||
|
//Py_DECREF(o);
|
||||||
|
}
|
||||||
|
$1 = &v[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* turn on director wrapping Callback */
|
//%typemap(check) YAPEngine::fun(Term) { $1 = 1; }
|
||||||
//%feature("director") YAPCallback;
|
//%typemap(check) YAPEngine::fun(YAPTerm) { $1 = 0; }
|
||||||
|
|
||||||
%include "yapa.hh"
|
|
||||||
|
|
||||||
%include "yapie.hh"
|
%typemap(in) Int { if (PyLong_Check($input)) {
|
||||||
|
$1 = PyLong_AsLong($input);}
|
||||||
|
}
|
||||||
|
|
||||||
%include "yapt.hh"
|
//%typemap(in) double { if (PyFloat_Check($input)) {
|
||||||
|
// $1 = PyFloat_AsDouble($input); } }
|
||||||
|
|
||||||
%include "yapdb.hh"
|
//%typemap(in) char const * { if (PyUnicode_Check($input)) {
|
||||||
|
// $1 = PyUnicode_AsUTF8($input); } }
|
||||||
|
|
||||||
%include "yapq.hh"
|
//%typemap(in) YAPTerm { $1 = new YAPTerm(pythonToYAP($input)); PyErr_Clear(); }
|
||||||
|
%typemap(in) YAP_Term { $1 = pythonToYAP($input); PyErr_Clear(); }
|
||||||
|
%typemap(in) Term { $1 = pythonToYAP($input); PyErr_Clear(); }
|
||||||
|
%typemap(in) YAPTerm { YAPTerm(($1 = pythonToYAP($input))); PyErr_Clear(); }
|
||||||
|
|
||||||
|
%typecheck(2) Int { $1 = PyLong_Check($input); }
|
||||||
|
%typecheck(3) double { $1 = PyFloat_Check($input); }
|
||||||
|
%typecheck(2) const char * { $1 = PyUnicode_Check($input); }
|
||||||
|
|
||||||
|
%typecheck(1) Term { $1 = !PyUnicode_Check($input); }
|
||||||
|
%typecheck(1) YAP_Term { $1 = PyUnicode_Check($input); }
|
||||||
|
|
||||||
|
%typecheck(0) YAPTerm { $1 = !PyUnicode_Check($input); }
|
||||||
|
|
||||||
|
|
||||||
|
%typemap(out) YAP_Term { return $result = yap_to_python($1, false, 0, true); }
|
||||||
|
|
||||||
|
%typemap(out) Term { return $result = yap_to_python($1, false, 0, true); }
|
||||||
|
|
||||||
|
%typemap(out) std::vector<Term> {
|
||||||
|
size_t len = $1.size();
|
||||||
|
$result = PyList_New(len);
|
||||||
|
for (size_t i = 0; i< len; i++) {
|
||||||
|
PyObject *o = yap_to_python($1[i],false,0,true);
|
||||||
|
PyList_SetItem($result,i,o);
|
||||||
|
|
||||||
|
}
|
||||||
|
return $result; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
namespace std {
|
// Language independent exception handler
|
||||||
|
|
||||||
%template(TermVector) vector<Term>;
|
%exception next {
|
||||||
%feature("novaluewrapper") vector<Term>;
|
try {
|
||||||
|
$action
|
||||||
|
} catch (YAPError &e) {
|
||||||
|
yap_error_number en = e.getID();
|
||||||
|
PyObject *pyerr = PyExc_RuntimeError;
|
||||||
|
|
||||||
//%template(YAPTermVector) vector<YAPTerm>;
|
LOCAL_Error_TYPE = YAP_NO_ERROR;
|
||||||
//%feature("novaluewrapper") vector<YAPTerm>;
|
switch (e.getErrorClass()) {
|
||||||
};
|
case YAPC_NO_ERROR:
|
||||||
|
break;
|
||||||
|
/// bad domain, "first argument often is the predicate.
|
||||||
|
case DOMAIN_ERROR: {
|
||||||
|
switch (en) {
|
||||||
|
case DOMAIN_ERROR_OUT_OF_RANGE:
|
||||||
|
pyerr = PyExc_GeneratorExit;
|
||||||
|
break;
|
||||||
|
case DOMAIN_ERROR_NOT_LESS_THAN_ZERO:
|
||||||
|
pyerr = PyExc_IndexError;
|
||||||
|
break;
|
||||||
|
case DOMAIN_ERROR_CLOSE_OPTION:
|
||||||
|
case DOMAIN_ERROR_ENCODING:
|
||||||
|
case DOMAIN_ERROR_PROLOG_FLAG:
|
||||||
|
case DOMAIN_ERROR_ABSOLUTE_FILE_NAME_OPTION:
|
||||||
|
case DOMAIN_ERROR_READ_OPTION:
|
||||||
|
case DOMAIN_ERROR_SET_STREAM_OPTION:
|
||||||
|
pyerr = PyExc_KeyError;
|
||||||
|
break;
|
||||||
|
case DOMAIN_ERROR_FILE_ERRORS:
|
||||||
|
case DOMAIN_ERROR_FILE_TYPE:
|
||||||
|
case DOMAIN_ERROR_IO_MODE:
|
||||||
|
case DOMAIN_ERROR_SOURCE_SINK:
|
||||||
|
case DOMAIN_ERROR_STREAM_POSITION:
|
||||||
|
pyerr = PyExc_IOError;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
pyerr = PyExc_ValueError;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
/// bad arithmetic
|
||||||
|
case EVALUATION_ERROR: {
|
||||||
|
switch (en) {
|
||||||
|
case EVALUATION_ERROR_FLOAT_OVERFLOW:
|
||||||
|
case EVALUATION_ERROR_INT_OVERFLOW:
|
||||||
|
pyerr = PyExc_OverflowError;
|
||||||
|
break;
|
||||||
|
case EVALUATION_ERROR_FLOAT_UNDERFLOW:
|
||||||
|
case EVALUATION_ERROR_UNDERFLOW:
|
||||||
|
case EVALUATION_ERROR_ZERO_DIVISOR:
|
||||||
|
pyerr = PyExc_ArithmeticError;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
pyerr = PyExc_RuntimeError;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
/// missing object (I/O mostly)
|
||||||
|
case EXISTENCE_ERROR:
|
||||||
|
pyerr = PyExc_NotImplementedError;
|
||||||
|
break;
|
||||||
|
/// should be bound
|
||||||
|
case INSTANTIATION_ERROR_CLASS:
|
||||||
|
pyerr = PyExc_RuntimeError;
|
||||||
|
break;
|
||||||
|
/// bad access, I/O
|
||||||
|
case PERMISSION_ERROR: {
|
||||||
|
switch (en) {
|
||||||
|
case PERMISSION_ERROR_INPUT_BINARY_STREAM:
|
||||||
|
case PERMISSION_ERROR_INPUT_PAST_END_OF_STREAM:
|
||||||
|
case PERMISSION_ERROR_INPUT_STREAM:
|
||||||
|
case PERMISSION_ERROR_INPUT_TEXT_STREAM:
|
||||||
|
case PERMISSION_ERROR_OPEN_SOURCE_SINK:
|
||||||
|
case PERMISSION_ERROR_OUTPUT_BINARY_STREAM:
|
||||||
|
case PERMISSION_ERROR_REPOSITION_STREAM:
|
||||||
|
case PERMISSION_ERROR_OUTPUT_STREAM:
|
||||||
|
case PERMISSION_ERROR_OUTPUT_TEXT_STREAM:
|
||||||
|
pyerr = PyExc_OverflowError;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
pyerr = PyExc_RuntimeError;
|
||||||
|
}
|
||||||
|
} break;
|
||||||
|
/// something that could not be represented into a type
|
||||||
|
case REPRESENTATION_ERROR:
|
||||||
|
pyerr = PyExc_RuntimeError;
|
||||||
|
break;
|
||||||
|
/// not enough ....
|
||||||
|
case RESOURCE_ERROR:
|
||||||
|
pyerr = PyExc_RuntimeError;
|
||||||
|
break;
|
||||||
|
/// bad text
|
||||||
|
case SYNTAX_ERROR_CLASS:
|
||||||
|
pyerr = PyExc_SyntaxError;
|
||||||
|
break;
|
||||||
|
/// OS or internal
|
||||||
|
case SYSTEM_ERROR_CLASS:
|
||||||
|
pyerr = PyExc_RuntimeError;
|
||||||
|
break;
|
||||||
|
/// bad typing
|
||||||
|
case TYPE_ERROR:
|
||||||
|
pyerr = PyExc_TypeError;
|
||||||
|
break;
|
||||||
|
/// should be unbound
|
||||||
|
case UNINSTANTIATION_ERROR_CLASS:
|
||||||
|
pyerr = PyExc_RuntimeError;
|
||||||
|
break;
|
||||||
|
/// escape hatch
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
PyErr_SetString(pyerr, e.text().c_str());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
|
%typemap(in) arity_t { (jlong)($input); }
|
||||||
|
|
||||||
|
%typecheck(2) Int { $1 = PyLong_Check($input); }
|
||||||
|
%typecheck(3) double { $1 = PyFloat_Check($input); }
|
||||||
|
%typecheck(2) const char * { $1 = PyUnicode_Check($input); }
|
||||||
|
|
||||||
|
%typecheck(1) Term { $1 = !PyUnicode_Check($input); }
|
||||||
|
%typecheck(1) YAP_Term { $1 = PyUnicode_Check($input); }
|
||||||
|
|
||||||
|
%typecheck(0) YAPTerm { $1 = !PyUnicode_Check($input); }
|
||||||
|
|
||||||
|
|
||||||
%init %{
|
%typemap(in) jlong %{
|
||||||
%}
|
$1 = (jlong)$input;
|
||||||
|
%}
|
||||||
|
|
||||||
|
%typemap(out) arity_t { *(jlong *)&$result = $1; }
|
||||||
|
|
||||||
|
// Language independent exception handler
|
||||||
|
// simplified version
|
||||||
|
%include <exception.i>
|
||||||
|
|
||||||
|
%exception {
|
||||||
|
try {
|
||||||
|
$action
|
||||||
|
} catch (const std::out_of_range& e) {
|
||||||
|
SWIG_exception(SWIG_IndexError, e.what());
|
||||||
|
} catch (const std::exception& e) {
|
||||||
|
SWIG_exception(SWIG_RuntimeError, e.what());
|
||||||
|
} catch (...) {
|
||||||
|
SWIG_exception(SWIG_RuntimeError, "unknown exception");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
%{
|
||||||
|
/* Put header files here or function declarations like below */
|
||||||
|
#include "yapi.hh"
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
|
||||||
|
#if THREADS
|
||||||
|
#define Yap_regp regcache
|
||||||
|
#endif
|
||||||
|
|
||||||
|
// we cannot consult YapInterface.h, that conflicts with what we
|
||||||
|
// declare, though
|
||||||
|
// it shouldn't
|
||||||
|
}
|
||||||
|
|
||||||
|
extern void init_sqlite();
|
||||||
|
|
||||||
|
%}
|
||||||
|
|
||||||
|
#define X_API
|
||||||
|
|
||||||
|
/* turn on director wrapping Callback */
|
||||||
|
//%feature("director") YAPCallback;
|
||||||
|
|
||||||
|
%include "yapa.hh"
|
||||||
|
|
||||||
|
%include "yapie.hh"
|
||||||
|
|
||||||
|
%include "yapt.hh"
|
||||||
|
|
||||||
|
%include "yapdb.hh"
|
||||||
|
|
||||||
|
%include "yapq.hh"
|
||||||
|
|
||||||
|
|
||||||
|
namespace std {
|
||||||
|
|
||||||
|
%template(TermVector) vector<Term>;
|
||||||
|
%feature("novaluewrapper") vector<Term>;
|
||||||
|
|
||||||
|
//%template(YAPTermVector) vector<YAPTerm>;
|
||||||
|
//%feature("novaluewrapper") vector<YAPTerm>;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
%init %{
|
||||||
|
%}
|
||||||
|
@ -11,7 +11,7 @@ SET ( SOURCES
|
|||||||
b+tree_udi.c
|
b+tree_udi.c
|
||||||
)
|
)
|
||||||
|
|
||||||
ADD_LIBRARY(udi_b+tree SHARED ${SOURCES})
|
ADD_LIB(udi_b+tree ${SOURCES})
|
||||||
|
|
||||||
INSTALL(TARGETS udi_b+tree DESTINATION ${YAP_PL_LIBRARY_DIR})
|
INSTALL(TARGETS udi_b+tree DESTINATION ${YAP_PL_LIBRARY_DIR})
|
||||||
INSTALL(FILES b+tree.yap DESTINATION ${YAP_PL_LIBRARY_DIR})
|
INSTALL(FILES b+tree.yap DESTINATION ${YAP_PL_LIBRARY_DIR})
|
||||||
|
@ -11,7 +11,7 @@ SET ( SOURCES
|
|||||||
rtree_udi.c
|
rtree_udi.c
|
||||||
)
|
)
|
||||||
|
|
||||||
ADD_LIBRARY(udi_rtree SHARED ${SOURCES})
|
ADD_LIB(udi_rtree ${SOURCES})
|
||||||
|
|
||||||
INSTALL(TARGETS udi_rtree DESTINATION ${YAP_PL_LIBRARY_DIR})
|
INSTALL(TARGETS udi_rtree DESTINATION ${YAP_PL_LIBRARY_DIR})
|
||||||
INSTALL(FILES rtree.yap DESTINATION ${YAP_PL_LIBRARY_DIR})
|
INSTALL(FILES rtree.yap DESTINATION ${YAP_PL_LIBRARY_DIR})
|
||||||
|
@ -10,7 +10,7 @@ SET ( SOURCES
|
|||||||
uthash_udi.c
|
uthash_udi.c
|
||||||
)
|
)
|
||||||
|
|
||||||
ADD_LIBRARY(udi_uthash SHARED ${SOURCES})
|
ADD_LIB(udi_uthash ${SOURCES})
|
||||||
|
|
||||||
INSTALL(TARGETS udi_uthash DESTINATION ${YAP_PL_LIBRARY_DIR})
|
INSTALL(TARGETS udi_uthash DESTINATION ${YAP_PL_LIBRARY_DIR})
|
||||||
INSTALL(FILES uthash.yap DESTINATION ${YAP_PL_LIBRARY_DIR})
|
INSTALL(FILES uthash.yap DESTINATION ${YAP_PL_LIBRARY_DIR})
|
||||||
|
Reference in New Issue
Block a user