diff --git a/packages/CLPBN/horus/CMakeLists.txt b/packages/CLPBN/horus/CMakeLists.txt index 92260c68d..c1e1d917a 100644 --- a/packages/CLPBN/horus/CMakeLists.txt +++ b/packages/CLPBN/horus/CMakeLists.txt @@ -45,14 +45,14 @@ if (CMAKE_MAJOR_VERSION GREATER 2) ${CMAKE_CURRENT_SOURCE_DIR} ) - ADD_LIBRARY(horus SHARED ${HORUS_SOURCES} HorusYap.cpp ) + ADD_LIB(horus ${HORUS_SOURCES} HorusYap.cpp ) if(DEFINED YAP_MAJOR_VERSION) TARGET_LINK_LIBRARIES(horus libYap ) else() - ADD_LIBRARY(horus SHARED ${HORUS_SOURCES} ) + ADD_LIB(horus ${HORUS_SOURCES} ) endif() #set_property(TARGET horus PROPERTY CXX_STANDARD 11) diff --git a/packages/CMakeLists.txt b/packages/CMakeLists.txt index 6f7366f73..485c7c4c4 100644 --- a/packages/CMakeLists.txt +++ b/packages/CMakeLists.txt @@ -33,7 +33,7 @@ if (GECODE_FOUND) 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}) diff --git a/packages/cplint/CMakeLists.txt b/packages/cplint/CMakeLists.txt index a28e64f24..ee04a40df 100644 --- a/packages/cplint/CMakeLists.txt +++ b/packages/cplint/CMakeLists.txt @@ -132,7 +132,7 @@ IF (CUDD_FOUND) ${CMAKE_CURRENT_BINARY_DIR}/../bdd ) - add_library (bddem SHARED + add_lib(bddem ${BDDEM_SOURCES} ) @@ -153,7 +153,7 @@ IF (CUDD_FOUND) ) - add_library (cplint SHARED + add_lib(cplint ${CPLINT_SOURCES} ) diff --git a/packages/cuda/CMakeLists.txt b/packages/cuda/CMakeLists.txt index bbdcc40dc..919bf03e5 100644 --- a/packages/cuda/CMakeLists.txt +++ b/packages/cuda/CMakeLists.txt @@ -77,7 +77,7 @@ cuda.c cuda.yap ) - cuda_add_library (libcuda SHARED ${CUDA_SOURCES}) + cuda_add_lib(libcuda ${CUDA_SOURCES}) target_link_libraries(libcuda libYap ${CUDA_LIBRARIES} ${CUDA_npp_LIBRARY} # ${CUDA_nppc_LIBRARY} diff --git a/packages/gecode/CMakeLists.txt b/packages/gecode/CMakeLists.txt index 46b7b4410..ebb3c5251 100644 --- a/packages/gecode/CMakeLists.txt +++ b/packages/gecode/CMakeLists.txt @@ -32,7 +32,7 @@ if (GECODE_FOUND) 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}) diff --git a/packages/jpl/src/c/CMakeLists.txt b/packages/jpl/src/c/CMakeLists.txt index 826dc9171..85d95845a 100644 --- a/packages/jpl/src/c/CMakeLists.txt +++ b/packages/jpl/src/c/CMakeLists.txt @@ -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} ) diff --git a/packages/myddas/mysql/CMakeLists.txt b/packages/myddas/mysql/CMakeLists.txt index 6186d730d..293d35698 100644 --- a/packages/myddas/mysql/CMakeLists.txt +++ b/packages/myddas/mysql/CMakeLists.txt @@ -22,7 +22,7 @@ if (WIN32) add_library(Yapmysql OBJECT ${MYSQL_SOURCES}) else() - add_library(Yapmysql SHARED ${MYSQL_SOURCES}) + add_lib(Yapmysql ${MYSQL_SOURCES}) target_link_libraries(Yapmysql ${MYSQL_LIBRARIES} libYap) install(TARGETS Yapmysql RUNTIME DESTINATION ${dlls} diff --git a/packages/myddas/odbc/CMakeLists.txt b/packages/myddas/odbc/CMakeLists.txt index e2444b78b..b55cd3262 100644 --- a/packages/myddas/odbc/CMakeLists.txt +++ b/packages/myddas/odbc/CMakeLists.txt @@ -13,7 +13,7 @@ if (ODBC_FOUND) # ODBC_INCLUDE_DIRECTORIES, where to find sql.h # ODBC_LIBRARIES, the libraries to link against to use 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}) include_directories (${ODBC_INCLUDE_DIRECTORIES} ..) diff --git a/packages/myddas/postgres/CMakeLists.txt b/packages/myddas/postgres/CMakeLists.txt index 8076d919b..e907c7e06 100644 --- a/packages/myddas/postgres/CMakeLists.txt +++ b/packages/myddas/postgres/CMakeLists.txt @@ -14,7 +14,7 @@ if (PostgreSQL_FOUND) # PostgreSQL_INCLUDE_DIRS - Include directories for PostgreSQL # PostgreSQL_LIBRARY_DIRS - Link directories for 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}) include_directories (${PostgreSQL_INCLUDE_DIRS} ..) set_target_properties (Yappostgres PROPERTIES diff --git a/packages/myddas/sqlite3/CMakeLists.txt b/packages/myddas/sqlite3/CMakeLists.txt index f84e10aae..2afd44ae8 100644 --- a/packages/myddas/sqlite3/CMakeLists.txt +++ b/packages/myddas/sqlite3/CMakeLists.txt @@ -47,7 +47,7 @@ src/Android/jni/sqlite/nativehelper/ScopedLocalRef.h endif (ANDROID) -add_library( Yapsqlite3 SHARED +add_lib( Yapsqlite3 ${YAPSQLITE3_SOURCES} ) MY_set_target_properties(Yapsqlite3 @@ -57,8 +57,9 @@ add_library( Yapsqlite3 SHARED POSITION_INDEPENDENT_CODE TRUE ) + target_link_libraries(Yapsqlite3 libYap) if (ANDROID) target_link_libraries(Yapsqlite3 android log) -endif () \ No newline at end of file +endif () diff --git a/packages/python/CMakeLists.txt b/packages/python/CMakeLists.txt index f2684dbec..0f0b30c59 100644 --- a/packages/python/CMakeLists.txt +++ b/packages/python/CMakeLists.txt @@ -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 (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) add_library (Py4YAP OBJECT ${PYTHON_SOURCES} ${PYTHON_HEADERS}) -target_link_libraries(YAPPython libYap ${PYTHON_LIBRARIES}) + 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}) - MY_install(TARGETS Py4YAP - LIBRARY DESTINATION ${libdir} - RUNTIME DESTINATION ${dlls} - ARCHIVE DESTINATION ${libdir} ) -endif() +# arithmetic hassle. +target_link_libraries( YAPPython Py4YAP ) + endif() + +target_link_libraries(YAPPython libYap ${PYTHON_LIBRARIES}) # arithmetic hassle. set_property(TARGET YAPPython PROPERTY CXX_STANDARD_REQUIRED ON) diff --git a/packages/python/pl2py.c b/packages/python/pl2py.c index b1186d8d5..8d25fe38a 100644 --- a/packages/python/pl2py.c +++ b/packages/python/pl2py.c @@ -222,7 +222,6 @@ PyObject *term_to_python(term_t t, bool eval, PyObject *o, bool cvt) { atom_t name; int arity; PyObject *rc; - size_t len; if (!PL_get_functor(t, &fun)) { PL_reset_term_refs(tail); diff --git a/packages/python/pybips.c b/packages/python/pybips.c index 3f49089e5..71498fe1f 100644 --- a/packages/python/pybips.c +++ b/packages/python/pybips.c @@ -879,7 +879,6 @@ PyObject *compound_to_pyeval(term_t t, PyObject *context, bool cvt) { atom_t name; int arity; functor_t fun; - PyObject *d = NULL; o = find_obj(context, t, true); AOK(PL_get_name_arity(t, &name, &arity), NULL); diff --git a/packages/python/python.c b/packages/python/python.c index f49ce1240..842999199 100644 --- a/packages/python/python.c +++ b/packages/python/python.c @@ -53,7 +53,7 @@ static bool py_close(int sno) { static int py_put(int sno, int ch) { - PyObject *pyw; // buffer + // PyObject *pyw; // buffer //int pyw_kind; //PyObject *pyw_data; diff --git a/packages/python/swig/CMakeLists.txt b/packages/python/swig/CMakeLists.txt index 9c28ffb4c..0c482dcfa 100644 --- a/packages/python/swig/CMakeLists.txt +++ b/packages/python/swig/CMakeLists.txt @@ -1,94 +1,80 @@ # This is a CMake example for Python -#INCLUDE(NewUseSWIG) +INCLUDE(UseSWIG) include(FindPythonModule) -set (PROLOG_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/yapi.yap) -set (PYTHON_SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/yapi.py ${CMAKE_CURRENT_SOURCE_DIR}/__init__.py ${CMAKE_CURRENT_SOURCE_DIR}/__main__.py) +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}/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("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) + 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 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) - -set (SYS_DLLS ${GMP_LIBRARIES} c:/msys64/mingw64/bin/libgmp-10.dll) - -endif() - + SWIG_LINK_LIBRARIES(Py2YAP YAPPython libYap ${PYTHON_LIBRARIES} ) +else() + SWIG_LINK_LIBRARIES( Py2YAP libYap YAP++ YAPPython ${PYTHON_LIBRARIES} ) + 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 # 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} + # RUNTIME DESTINATION ${PYTHON_MODULE_PATH} + # ARCHIVE DESTINATION ${PYTHON_MODULE_PATH} + # LIBRARY DESTINATION ${PYTHON_MODULE_PATH} # ) - set (python_dlls $ - $ - $ - $ - $ - $ - $ - ) - if (TARGET real) - list(APPEND python_dlls $ - ) - endif() - if (NOT WIN32) - list(APPEND python_dlls $ $ - ) - endif() +file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4py) +file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog) +file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog/os) +file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/yap4py/prolog/pl) -set (PL ${pl_library} ${PROLOG_SOURCES} ) - -add_custom_target( YAP4PY_SETUP - 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 +add_custom_target( YAP4PY ALL +# COMMAND ${CMAKE_COMMAND} -E copy ${YAP_DLLS} ${CMAKE_BINARY_DIR}/startup.yss ${CMAKE_CURRENT_BINARY_DIR}/yap4py + COMMAND ${PYTHON_EXECUTABLE} setup.py sdist bdist_wheel 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( - COMMAND ${PYTHON_EXECUTABLE} -m pip install --ignore-installed ${CMAKE_CURRENT_BINARY_DIR} - WORKING_DIRECTORY ${CMAKE_SOURCE_DIR})" - DEPENDS Py4YAP ${CMAKE_BINARY_DIR}/${YAP_STARTUP} ${dlls} ) - -install(FILES ${PROLOG_SOURCES} DESTINATION ${libpl}) - + install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} -m pip install --no-index -f dist yap4py + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})" + DEPENDS Py4YAP ${CMAKE_BINARY_DIR}/${YAP_STARTUP} ${dlls} ) 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) 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 - $ - $ - $ - $ - $ - $ - $ - $ - $ - ) -if (TARGET real) - list(APPEND python_dlls $ - ) -endif() -if (NOT WIN32) - list(APPEND python_dlls $ - ) -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 diff --git a/packages/python/swig/prolog/jupyter.yap b/packages/python/swig/prolog/jupyter.yap new file mode 100644 index 000000000..e0f6c39c8 --- /dev/null +++ b/packages/python/swig/prolog/jupyter.yap @@ -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 ). diff --git a/packages/python/swig/yapi.yap b/packages/python/swig/prolog/yapi.yap similarity index 100% rename from packages/python/swig/yapi.yap rename to packages/python/swig/prolog/yapi.yap diff --git a/packages/python/swig/setup.py.in b/packages/python/swig/setup.py.in index 4cc0c70ec..b75143fb3 100644 --- a/packages/python/swig/setup.py.in +++ b/packages/python/swig/setup.py.in @@ -5,6 +5,7 @@ # Distributed under the terms of the Modified BSD License. from __future__ import print_function +import setuptools from setuptools import setup from setuptools.extension import Extension from codecs import open @@ -49,7 +50,9 @@ from distutils.core import setup pjoin = os.path.join 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 = [] if platform.system() == 'Windows': @@ -64,13 +67,26 @@ else: # or dll in glob('yap/dlls/*'): # move( dll ,'lib' ) -cplus = [''] -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}")) +native_sources = ["yap.i"] +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 @@ -85,8 +101,9 @@ extensions = [Extension('_yap', native_sources, swig_opts=['-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}/os', '-I${CMAKE_SOURCE_DIR}/OPTYap', '-I../../..'], - library_dirs=['../../..', '../../../CXX', '..', "${dlls}", "${bindir}", 'c:/Anaconda3'], + '-I${CMAKE_SOURCE_DIR}/os', '-I${CMAKE_SOURCE_DIR}/OPTYap', + '-I${CMAKE_SOURCE_DIR}/packages/python'], + library_dirs=['../../..', '../../../CXX', '..', "${bindir}"], extra_link_args=my_extra_link_args, libraries=['Yap','gmp']+win_libs+local_libs, include_dirs=['../../..', @@ -95,26 +112,18 @@ extensions = [Extension('_yap', native_sources, '${CMAKE_SOURCE_DIR}/H/generated', '${CMAKE_SOURCE_DIR}/OPTYap', '${CMAKE_SOURCE_DIR}/os', + '${CMAKE_SOURCE_DIR}/packages/python', '${CMAKE_SOURCE_DIR}/include', '${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 = { - 'yap4py.prolog': """${PL}""".split(sep=";") + 'yap4py/prolog': 'prolog/*.*', + '': '*.*' } 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__'], scripts=glob(pjoin('scripts', '*')), packages=packages, - py_modules=['yap'], + py_modules=['yap','yap4py'], package_data=package_data, include_package_data=True, requirements=[ diff --git a/packages/python/swig/yap4py/__init__.py b/packages/python/swig/yap4py/__init__.py index aa2bffb4b..d18628837 100644 --- a/packages/python/swig/yap4py/__init__.py +++ b/packages/python/swig/yap4py/__init__.py @@ -3,15 +3,25 @@ import os import ctypes import glob import os.path +import platform import sys global yap_lib_path yap_lib_path = os.path.dirname(__file__) - -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) +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) -load('libYap*') + load('libYap*') + if platform.system() == 'Apple': + load('libYAP+*') + load('libPy4YAP*') diff --git a/packages/python/swig/yapi.py b/packages/python/swig/yapi.py deleted file mode 100644 index 00ebe680a..000000000 --- a/packages/python/swig/yapi.py +++ /dev/null @@ -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() diff --git a/packages/python/yap_kernel/yap_ipython/prolog/jupyter.yap b/packages/python/yap_kernel/yap_ipython/prolog/jupyter.yap index c28098935..e0f6c39c8 100644 --- a/packages/python/yap_kernel/yap_ipython/prolog/jupyter.yap +++ b/packages/python/yap_kernel/yap_ipython/prolog/jupyter.yap @@ -35,38 +35,69 @@ completions(S, Self) :- strip_final_tokens(['EOT'|Ts], Ts) :- !. -strip_final_tokens( Ts, Ts ). - -complete( [atom(F)|LibRest], C) :- - LibRest = [l, atom(Where)|Consult], - isconsult(Consult, Rest), +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( F, Where, C). -complete( [atom(F)|Consult], C) :- - isconsult(Consult, 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_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) :- \+ arg( Rest ), predicate( F, Pred, Arity ), cont( Arity, F, Pred, C). -isconsult( [l, use_module| Rest], Rest). -isconsult( [l, ensure_loaded| Rest], Rest). -isconsult( [l, compile| Rest], Rest). -isconsult( [l, consult| Rest], Rest). -isconsult( [l, reconsult| Rest], Rest). -isconsult( [l, load_files| Rest], Rest). -isconsult( ['-', ']'| Rest], Rest). -isconsult( [']'| Rest], Rest ). +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|_]). -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), 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) :- atom_concat( F, '*' , Pat), diff --git a/packages/raptor/CMakeLists.txt b/packages/raptor/CMakeLists.txt index 489b66568..2f626b7c6 100644 --- a/packages/raptor/CMakeLists.txt +++ b/packages/raptor/CMakeLists.txt @@ -39,7 +39,7 @@ if (WIN32) set( CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} ${LIBXML2_LIBRARIES} ) else (WIN32) - ADD_LIBRARY(libxml2 SHARED ${LIBXML2_SOURCES} ) + ADD_LIB(libxml2 ${LIBXML2_SOURCES} ) if(DEFINED YAP_MAJOR_VERSION) TARGET_LINK_LIBRARIES(libxml2 @@ -88,7 +88,7 @@ IF (RAPTOR_FOUND) raptor_yap.c ) - ADD_LIBRARY(raptor SHARED ${RAPTOR_SOURCES} ) + ADD_LIB(raptor ${RAPTOR_SOURCES} ) if(DEFINED YAP_MAJOR_VERSION) TARGET_LINK_LIBRARIES(raptor diff --git a/packages/real/CMakeLists.txt b/packages/real/CMakeLists.txt index 137f474d1..7be33e8b9 100644 --- a/packages/real/CMakeLists.txt +++ b/packages/real/CMakeLists.txt @@ -32,7 +32,7 @@ include_directories ( ${LIBR_INCLUDE_DIRS} ) - add_library (real SHARED ${REAL_SOURCES}) + add_lib(real ${REAL_SOURCES}) target_link_libraries (real ${LIBR_LIBRARIES} libYap) diff --git a/packages/swi-minisat2/C/CMakeLists.txt b/packages/swi-minisat2/C/CMakeLists.txt index 919549d8e..91fec660e 100644 --- a/packages/swi-minisat2/C/CMakeLists.txt +++ b/packages/swi-minisat2/C/CMakeLists.txt @@ -24,7 +24,7 @@ pl-minisat.C ${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 PREFIX "") diff --git a/packages/swig/CMakeLists.txt b/packages/swig/CMakeLists.txt index 291a67071..1c1438487 100644 --- a/packages/swig/CMakeLists.txt +++ b/packages/swig/CMakeLists.txt @@ -15,7 +15,7 @@ INCLUDE(${SWIG_USE_FILE}) if (ANDROID) add_subdirectory(android) else(ANDROID) - add_subdirectory(java) +# add_subdirectory(java) endif(ANDROID) set_property( DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS SWIGYAP=1) diff --git a/packages/swig/android/CMakeLists.txt b/packages/swig/android/CMakeLists.txt index 72115a321..95f8d281c 100644 --- a/packages/swig/android/CMakeLists.txt +++ b/packages/swig/android/CMakeLists.txt @@ -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 ) target_link_libraries(YAPJava ${GMP_LIBRARIES} ) diff --git a/packages/swig/java/CMakeLists.txt b/packages/swig/java/CMakeLists.txt index f642d839a..c6fb05022 100644 --- a/packages/swig/java/CMakeLists.txt +++ b/packages/swig/java/CMakeLists.txt @@ -33,7 +33,7 @@ if (JNI_FOUND) endif() #SET(CMAKE_SWIG_FLAGS "${CMAKE_SWIG_FLAGS} ") - SWIG_ADD_MODULE(Native java ${SWIG_SOURCES} + SWIG_ADD_LIBRARY(Native LANGUAGE java SOURCES ${SWIG_SOURCES} ) diff --git a/packages/swig/yap.i b/packages/swig/yap.i index 0416fcae1..19a42b218 100644 --- a/packages/swig/yap.i +++ b/packages/swig/yap.i @@ -1,342 +1,324 @@ // supports Java and Python -%{ - -#include -#include - - extern "C"{ -#ifdef SWIGPYTHON -#include -#endif -#include "Yap.h" - } - %} - /* example.i */ %module(directors = "1") yap - // Language independent exception handler +// Language independent exception handler %include exception.i %include stdint.i %include std_string.i %include std_vector.i -<<<<<<< HEAD - %feature("novaluewrapper") std::vector; -======= ->>>>>>> 11e81b457dcc145e07b457482698a90e0ec350a2 +%feature("novaluewrapper") std::vector; %ignore *::operator[]; +class YAPAtom; class YAPPredicate; class YAPEngine; %{ -#include "yapi.hh" -#ifdef SWIGPYTHON + #include + #include - extern "C" { + extern "C"{ + #include "Yap.h" + #ifdef SWIGPYTHON + #include - extern X_API YAP_Term pythonToYAP(PyObject *pVal); - extern X_API PyObject * yap_to_python(YAP_Term t, bool eval, PyObject *ctx, bool cvt); - 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) + extern inline PyObject *AtomToPy(const char *s) { + if (strcmp(s, "true") == 0) return Py_True; - if (strcmp(s, "false") == 0) + if (strcmp(s, "false") == 0) return Py_False; - if (strcmp(s, "none") == 0) + if (strcmp(s, "none") == 0) return Py_None; - if (strcmp(s, "[]") == 0) + if (strcmp(s, "[]") == 0) return PyList_New(0); - else if (strcmp(s, "{}") == 0) + else if (strcmp(s, "{}") == 0) return PyDict_New(); - /* return __main__,s */ - else if (PyObject_HasAttrString(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 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 { - 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; + /* return __main__,s */ + else if (PyObject_HasAttrString(py_Main, s)) { + return PyObject_GetAttrString(py_Main, s); } - 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; } - - // Language independent exception handler - // simplified version -%include - -%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 +#ifdef SWIGPYTHON + %typemap(typecheck) Term* { + $1 = PySequence_Check($input); } -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 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 */ -//%feature("director") YAPCallback; + //%typemap(check) YAPEngine::fun(Term) { $1 = 1; } + //%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 { + 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; - %feature("novaluewrapper") vector; + %exception next { + try { + $action + } catch (YAPError &e) { + yap_error_number en = e.getID(); + PyObject *pyerr = PyExc_RuntimeError; - //%template(YAPTermVector) vector; - //%feature("novaluewrapper") vector; - }; + 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()); + } + } + + #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 { + 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; + %feature("novaluewrapper") vector; + + //%template(YAPTermVector) vector; + //%feature("novaluewrapper") vector; + }; + + + %init %{ + %} diff --git a/packages/udi/b+tree/CMakeLists.txt b/packages/udi/b+tree/CMakeLists.txt index 8264b72dc..da4f93405 100644 --- a/packages/udi/b+tree/CMakeLists.txt +++ b/packages/udi/b+tree/CMakeLists.txt @@ -11,7 +11,7 @@ SET ( SOURCES 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(FILES b+tree.yap DESTINATION ${YAP_PL_LIBRARY_DIR}) diff --git a/packages/udi/rtree/CMakeLists.txt b/packages/udi/rtree/CMakeLists.txt index d39bc1d40..dbd33f825 100644 --- a/packages/udi/rtree/CMakeLists.txt +++ b/packages/udi/rtree/CMakeLists.txt @@ -11,7 +11,7 @@ SET ( SOURCES rtree_udi.c ) -ADD_LIBRARY(udi_rtree SHARED ${SOURCES}) +ADD_LIB(udi_rtree ${SOURCES}) INSTALL(TARGETS udi_rtree DESTINATION ${YAP_PL_LIBRARY_DIR}) INSTALL(FILES rtree.yap DESTINATION ${YAP_PL_LIBRARY_DIR}) diff --git a/packages/udi/uthash/CMakeLists.txt b/packages/udi/uthash/CMakeLists.txt index e62c90246..f465e5986 100644 --- a/packages/udi/uthash/CMakeLists.txt +++ b/packages/udi/uthash/CMakeLists.txt @@ -10,7 +10,7 @@ SET ( SOURCES uthash_udi.c ) -ADD_LIBRARY(udi_uthash SHARED ${SOURCES}) +ADD_LIB(udi_uthash ${SOURCES}) INSTALL(TARGETS udi_uthash DESTINATION ${YAP_PL_LIBRARY_DIR}) INSTALL(FILES uthash.yap DESTINATION ${YAP_PL_LIBRARY_DIR})