diff --git a/CMakeLists.txt b/CMakeLists.txt index 5e30b9ef5..1fc60e3aa 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -55,17 +55,17 @@ if (NOT COMMAND find_host_package) endmacro() endif () if (NOT COMMAND find_host_program) - macro(find_host_program) - find_program(${ARGN}) - endmacro() +macro(find_host_program) +find_program(${ARGN}) +endmacro() endif () if (POLICY CMP0003) - cmake_policy(SET CMP0003 NEW) +cmake_policy(SET CMP0003 NEW) endif () if (POLICY CMP0068) - cmake_policy(SET CMP0068 NEW) - endif() +cmake_policy(SET CMP0068 NEW) +endif() if (POLICY CMP0075) cmake_policy(SET CMP0075 NEW) endif () @@ -80,59 +80,59 @@ option(WITH_YAP_STATIC "compile YAP statically" OFF) option(WITH_YAP_CONDOR "allow YAP to be used from condor" OFF) option(WITH_YAP_DLL "compile YAP as a DLL" ON) if (WITH_YAP_CONDOR) - set(WITH_YAP_STATIC ON) - set(WITH_YAP_DLL OFF) +set(WITH_YAP_STATIC ON) +set(WITH_YAP_DLL OFF) endif () ## options: libraries option(WITH_THREADED_CODE "threaded code" ON) if (NOT ANDROID) option(WITH_MPI "Interface to OpenMPI/MPICH" ON) - endif() +endif() option(WITH_JIT "just in Time Clause Compilation" OFF) if (APPLE) - set(MACOSX_RPATH ON) +set(MACOSX_RPATH ON) - option(WITH_BREW "brew" ON) - if (WITH_BREW) - EXECUTE_PROCESS(COMMAND brew --prefix RESULT_VARIABLE DETECT_BREW OUTPUT_VARIABLE BREW_PREFIX ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) +option(WITH_BREW "brew" ON) +if (WITH_BREW) +EXECUTE_PROCESS(COMMAND brew --prefix RESULT_VARIABLE DETECT_BREW OUTPUT_VARIABLE BREW_PREFIX ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) - IF (${DETECT_BREW} EQUAL 0) +IF (${DETECT_BREW} EQUAL 0) - # "/opt/local" is where MacPorts lives, add `/lib` suffix and link - LINK_DIRECTORIES( ${BREW_PREFIX}/lib) +# "/opt/local" is where MacPorts lives, add `/lib` suffix and link +LINK_DIRECTORIES( ${BREW_PREFIX}/lib) - list(INSERT CMAKE_PREFIX_PATH pos - ${BREW_PREFIX}/opt/gmp - ${BREW_PREFIX}/opt/libxml2 - ${BREW_PREFIX}/opt/openmpi - ${BREW_PREFIX}/opt/openssl - ${BREW_PREFIX}/opt/postgresql - ${BREW_PREFIX}/opt/python3 - ${BREW_PREFIX}/opt/readline - ${BREW_PREFIX}/opt/swig - ) - else() - option(WITH_MACPORTS "mac-ports" ON) - if (WITH_MACPORTS) - # Add MacPorts - # Detect if the "port" command is valid on this system; if so, return full path - EXECUTE_PROCESS(COMMAND which port RESULT_VARIABLE DETECT_MACPORTS OUTPUT_VARIABLE MACPORTS_PREFIX ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) +list(INSERT CMAKE_PREFIX_PATH pos +${BREW_PREFIX}/opt/gmp +${BREW_PREFIX}/opt/libxml2 +${BREW_PREFIX}/opt/openmpi +${BREW_PREFIX}/opt/openssl +${BREW_PREFIX}/opt/postgresql +${BREW_PREFIX}/opt/python3 +${BREW_PREFIX}/opt/readline +${BREW_PREFIX}/opt/swig +) +else() +option(WITH_MACPORTS "mac-ports" ON) +if (WITH_MACPORTS) +# Add MacPorts +# Detect if the "port" command is valid on this system; if so, return full path +EXECUTE_PROCESS(COMMAND which port RESULT_VARIABLE DETECT_MACPORTS OUTPUT_VARIABLE MACPORTS_PREFIX ERROR_QUIET OUTPUT_STRIP_TRAILING_WHITESPACE) - IF (${DETECT_MACPORTS} EQUAL 0) - # "/opt/local/bin/port" doesn't have libs, so we get the parent directory - GET_FILENAME_COMPONENT(MACPORTS_PREFIX ${MACPORTS_PREFIX} DIRECTORY) +IF (${DETECT_MACPORTS} EQUAL 0) +# "/opt/local/bin/port" doesn't have libs, so we get the parent directory +GET_FILENAME_COMPONENT(MACPORTS_PREFIX ${MACPORTS_PREFIX} DIRECTORY) - # "/opt/local/bin" doesn't have libs, so we get the parent directory - GET_FILENAME_COMPONENT(MACPORTS_PREFIX ${MACPORTS_PssREFIX} DIRECTORY) +# "/opt/local/bin" doesn't have libs, so we get the parent directory +GET_FILENAME_COMPONENT(MACPORTS_PREFIX ${MACPORTS_PssREFIX} DIRECTORY) - # "/opt/local" is where MacPorts lives, add `/lib` suffix and link - LINK_DIRECTORIES(${LINK DIRECTORIES} ${MACPORTS_PREFIX}/lib) - endif() - endif() - endif() - endif() +# "/opt/local" is where MacPorts lives, add `/lib` suffix and link +LINK_DIRECTORIES(${LINK DIRECTORIES} ${MACPORTS_PREFIX}/lib) +endif() +endif() +endif() +endif() endif() OPTION(WITH_MYDDAS " Enable MYDDAS DBMS interface" ON) @@ -142,21 +142,21 @@ option (WITH_PACKAGES "packages and libraries that add value to YAP" OFF) OPTION(WITH_SWIG " Enable SWIG interfaces to foreign languages" ON) OPTION(WITH_SQLITE3 " Enable MYDDAS SQLITE3 driver" ON) else() - option (WITH_PACKAGES "packages and libraries that add value to YAP" ON) - OPTION(WITH_SWIG " Enable SWIG interfaces to foreign languages" ${WITH_PACKAGES}) - OPTION(WITH_SQLITE3 " Enable MYDDAS SQLITE3 driver" ${WITH_PACKAGES}) +option (WITH_PACKAGES "packages and libraries that add value to YAP" ON) +OPTION(WITH_SWIG " Enable SWIG interfaces to foreign languages" ${WITH_PACKAGES}) +OPTION(WITH_SQLITE3 " Enable MYDDAS SQLITE3 driver" ${WITH_PACKAGES}) endif() - OPTION(WITH_MYSQL " Enable MYDDAS MYSQL driver" ${WITH_MYDDAS}}) +OPTION(WITH_MYSQL " Enable MYDDAS MYSQL driver" ${WITH_MYDDAS}}) OPTION(WITH_ODBC " Enable MYDDAS ODBC driver" ${WITH_MYDDAS}) OPTION(WITH_POSTGRES " Enable MYDDAS POSTGRES driver" ${WITH_MYDDAS}) IF (WITH_SWIG) - find_host_package(SWIG) - # macro_log_feature (SWIG_FOUND "Swig" - # "Use SWIG Interface Generator " - # "http://www.swig.org" ON) +find_host_package(SWIG) +# macro_log_feature (SWIG_FOUND "Swig" +# "Use SWIG Interface Generator " +# "http://www.swig.org" ON) ENDIF (WITH_SWIG) @@ -182,120 +182,120 @@ set(CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS TRUE) include(MacroLogFeature) if (POLICY CMP0042) - cmake_policy(SET CMP0042 NEW) +cmake_policy(SET CMP0042 NEW) endif () if (ANDROID) function(add_to_dir list output) - endfunction(add_to_dir list output) +endfunction(add_to_dir list output) function(add_to_libgroup el list) - # add_custom_command( TARGET ${el} POST_BUILD - # COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_BINARY_DIR}/packages/python/swig/yap4py - # DEPENDS ${el} ) - #list(APPEND ${list} ${${el}}) - #set(${list} ${${list}} CACHE INTERNAL "prolog dll files") +# add_custom_command( TARGET ${el} POST_BUILD +# COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_BINARY_DIR}/packages/python/swig/yap4py +# DEPENDS ${el} ) +#list(APPEND ${list} ${${el}}) +#set(${list} ${${list}} CACHE INTERNAL "prolog dll files") endfunction(add_to_libgroup el list) function(add_to_corelibgroup el list) - # add_custom_command( TARGET ${el} POST_BUILD - # COMMAND ${CMAKE_COMMAND} -E copy $ $ $ ${CMAKE_BINARY_DIR}/packages/python/swig/yap4py - # DEPENDS ${el} ) - list(APPEND ${list} ${${el}}) - set(${list} ${${list}} CACHE INTERNAL "prolog dll files") +# add_custom_command( TARGET ${el} POST_BUILD +# COMMAND ${CMAKE_COMMAND} -E copy $ $ $ ${CMAKE_BINARY_DIR}/packages/python/swig/yap4py +# DEPENDS ${el} ) +list(APPEND ${list} ${${el}}) +set(${list} ${${list}} CACHE INTERNAL "prolog dll files") endfunction(add_to_corelibgroup el list) else() - function(add_to_dir list output) - endfunction(add_to_dir list output) +function(add_to_dir list output) +endfunction(add_to_dir list output) endif() if (ANDROID_OLD) - macro(MY_add_custom_target) - endmacro() +macro(MY_add_custom_target) +endmacro() else () - macro(MY_add_custom_target) - add_custom_target(${ARGN}) - endmacro() +macro(MY_add_custom_target) +add_custom_target(${ARGN}) +endmacro() endif () if (WIN32) - macro(add_component arg1) - add_library(${arg1} OBJECT ${ARGN}) - endmacro() +macro(add_component arg1) +add_library(${arg1} OBJECT ${ARGN}) +endmacro() else () - macro(add_component arg1) - add_library(${arg1} OBJECT ${ARGN}) - endmacro() +macro(add_component arg1) +add_library(${arg1} OBJECT ${ARGN}) +endmacro() endif () macro(add_corelib arg1) - add_library(${arg1} SHARED ${ARGN}) - add_to_corelibgroup(${arg1} YAP_DLLS) +add_library(${arg1} SHARED ${ARGN}) +add_to_corelibgroup(${arg1} YAP_DLLS) endmacro() if (ANDROID_OLD) - macro(MY_add_dependencies) - endmacro() +macro(MY_add_dependencies) +endmacro() else () - macro(MY_add_dependencies) - add_dependencies(${ARGN}) - endmacro() +macro(MY_add_dependencies) +add_dependencies(${ARGN}) +endmacro() endif () if (ANDROID_OLD) - macro(MY_add_library) - endmacro() +macro(MY_add_library) +endmacro() else () - macro(MY_add_library) - add_library(${ARGN}) - endmacro() +macro(MY_add_library) +add_library(${ARGN}) +endmacro() endif () if (ANDROID) - macro(MY_add_subdirectory) - endmacro() +macro(MY_add_subdirectory) +endmacro() else () - macro(MY_add_subdirectory) - add_subdirectory(${ARGN}) - endmacro() +macro(MY_add_subdirectory) +add_subdirectory(${ARGN}) +endmacro() endif () if (ANDROID_OLD) - macro(MY_include) - endmacro() +macro(MY_include) +endmacro() else () - macro(MY_include) - include(${ARGN}) - endmacro() +macro(MY_include) +include(${ARGN}) +endmacro() endif () if (ANDROID) - macro(MY_install) - endmacro() +macro(MY_install) +endmacro() else () - macro(MY_install) - install(${ARGN}) - endmacro() +macro(MY_install) +install(${ARGN}) +endmacro() endif () if (ANDROID_OLD) - macro(MY_set_target_properties) - endmacro() +macro(MY_set_target_properties) +endmacro() else () - macro(MY_set_target_properties) - set_target_properties(${ARGN}) - endmacro() +macro(MY_set_target_properties) +set_target_properties(${ARGN}) +endmacro() endif () if (ANDROID_OLD) - macro(MY_target_link_libraries) - endmacro() +macro(MY_target_link_libraries) +endmacro() else () - macro(MY_target_link_libraries) - target_link_libraries(${ARGN}) - endmacro() +macro(MY_target_link_libraries) +target_link_libraries(${ARGN}) +endmacro() endif () @@ -310,21 +310,21 @@ disallow_intree_builds() # set(CMAKE_BUILD_TYPE Debug) - if ($ENV{CONDA_BUILD}x STREQUAL "1x" ) - set(CMAKE_LIBRARY_ARCHITECTURE $ENV{PREFIX}) - set(CMAKE_PREFIX_PATH $ENV{PREFIX}) - set( R_COMMAND "$ENV{R}") - set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS CONDA_BUILD=1) - set(YAP_IS_MOVABLE 1) +if ($ENV{CONDA_BUILD}x STREQUAL "1x" ) +set(CMAKE_LIBRARY_ARCHITECTURE $ENV{PREFIX}) +set(CMAKE_PREFIX_PATH $ENV{PREFIX}) +set( R_COMMAND "$ENV{R}") +set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS CONDA_BUILD=1) +set(YAP_IS_MOVABLE 1) endif() ADD_CUSTOM_TARGET(run_install COMMAND ${CMAKE_MAKE_PROGRAM} install) - list (APPEND CMAKE_REQUIRED_INCLUDES - ${PREFIX}/include - ${SYS_PREFIX}/include - ) +list (APPEND CMAKE_REQUIRED_INCLUDES +${PREFIX}/include +${SYS_PREFIX}/include +) @@ -345,7 +345,7 @@ set(YAP_INSTALL_INCLUDEDIR ${CMAKE_INSTALL_INCLUDEDIR}/Yap) set(YAP_INSTALL_LIBDIR ${CMAKE_INSTALL_LIBDIR}/Yap) if (ANDROID) set(YAP_INSTALL_DATADIR ${CMAKE_SOURCE_DIR}/../yaplib/src/generated/assets/Yap) - else() +else() set(YAP_INSTALL_DATADIR ${CMAKE_INSTALL_DATADIR}/Yap) endif() # @@ -370,9 +370,9 @@ find_package(GMP) list(APPEND YAP_SYSTEM_OPTIONS big_numbers) if (GMP_INCLUDE_DIRS) - #config.h needs this (TODO: change in code latter) - include_directories(${GMP_INCLUDE_DIRS}) - endif () +#config.h needs this (TODO: change in code latter) +include_directories(${GMP_INCLUDE_DIRS}) +endif () # - Find the readline library @@ -385,24 +385,24 @@ if (GMP_INCLUDE_DIRS) # READLINE_ncurses_LIBRARY, where to find the ncurses library [might not be defined] if (ANDROID) - option (WITH_READLINE "use Readline" OFF) - else() +option (WITH_READLINE "use Readline" OFF) +else() - include(FindReadline) +include(FindReadline) - option (WITH_READLINE "use Readline" ON) - # include subdirectories configuration - ## after we have all functionality in - # - # ADD_SUBDIRECTORY(console/terminal) +option (WITH_READLINE "use Readline" ON) +# include subdirectories configuration +## after we have all functionality in +# +# ADD_SUBDIRECTORY(console/terminal) - if (READLINE_FOUND AND READLINE_INCLUDE_DIR) - List(APPEND YAP_SYSTEM_OPTIONS readline) - # required for configure - include_directories( ${READLINE_INCLUDE_DIR} - ${READLINE_INCLUDE_DIR}/readline - ) - endif () +if (READLINE_FOUND AND READLINE_INCLUDE_DIR) +List(APPEND YAP_SYSTEM_OPTIONS readline) +# required for configure +include_directories( ${READLINE_INCLUDE_DIR} +${READLINE_INCLUDE_DIR}/readline +) +endif () endif() include_directories( @@ -412,13 +412,13 @@ ${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/os ${CMAKE_SOURCE_DIR}/OPTYap ${CMAKE_SOURCE_DIR}/utf8proc - ${CMAKE_SOURCE_DIR}/JIT/HPP - ${GMP_INCLUDE_DIRS} - ${READLINE_INCLUDE_DIR} - ${CMAKE_BINARY_DIR} - ) +${CMAKE_SOURCE_DIR}/JIT/HPP +${GMP_INCLUDE_DIRS} +${READLINE_INCLUDE_DIR} +${CMAKE_BINARY_DIR} +) - add_subdirectory( H ) +add_subdirectory( H ) #MPI STUFF # library/mpi/mpi.c library/mpi/mpe.c @@ -439,27 +439,27 @@ set(YAP_MINOR_VERSION 5) set(YAP_PATCH_VERSION 0) set(YAP_FULL_VERSION - ${YAP_MAJOR_VERSION}.${YAP_MINOR_VERSION}.${YAP_PATCH_VERSION}) +${YAP_MAJOR_VERSION}.${YAP_MINOR_VERSION}.${YAP_PATCH_VERSION}) set(YAP_FVERSION - ${YAP_MAJOR_VERSION}.${YAP_MINOR_VERSION}.${YAP_PATCH_VERSION}) +${YAP_MAJOR_VERSION}.${YAP_MINOR_VERSION}.${YAP_PATCH_VERSION}) set(YAP_NUMERIC_VERSION - ${YAP_MAJOR_VERSION}*10000+${YAP_MINOR_VERSION}*100+${YAP_PATCH_VERSION}) +${YAP_MAJOR_VERSION}*10000+${YAP_MINOR_VERSION}*100+${YAP_PATCH_VERSION}) set(MYDDAS_VERSION MYDDAS-0.9.1) site_name(YAP_SITE) if (WIN32) - set(YAP_ARCH $ENV{PROCESSOR_ARCHITECTURE}) - set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS "MS_WIN64=1") - set(YAP_SYSTEM_OPTIONS "windows " ${YAP_SYSTEM_OPTIONS}) +set(YAP_ARCH $ENV{PROCESSOR_ARCHITECTURE}) +set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS "MS_WIN64=1") +set(YAP_SYSTEM_OPTIONS "windows " ${YAP_SYSTEM_OPTIONS}) endif () if (UNIX) - find_program(UNAME uname) - execute_process( - COMMAND ${UNAME} -m - OUTPUT_VARIABLE YAP_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE) - set(YAP_SYSTEM_OPTIONS "unix " ${YAP_SYSTEM_OPTIONS}) +find_program(UNAME uname) +execute_process( +COMMAND ${UNAME} -m +OUTPUT_VARIABLE YAP_ARCH OUTPUT_STRIP_TRAILING_WHITESPACE) +set(YAP_SYSTEM_OPTIONS "unix " ${YAP_SYSTEM_OPTIONS}) endif () @@ -499,16 +499,16 @@ set(MSHIFTOFFS 1) set(C_COMPILER CMAKE_C_COMPILER_ID) if (${C_COMPILER} MATCHES "GNU") - set(HAVE_GCC 1) +set(HAVE_GCC 1) endif () # compatible compilers if (${C_COMPILER} MATCHES "Clang") - set(HAVE_GCC 1) +set(HAVE_GCC 1) endif () if (${C_COMPILER} MATCHES "Intel") - set(HAVE_GCC 1) +set(HAVE_GCC 1) endif () # rpath stuff, hopefully it works @@ -534,15 +534,15 @@ endif () #ENDIF("${isSystemDir}" STREQUAL "-1") # IF(NOT WIN32 AND NOT APPLE) - LIST(APPEND CMAKE_INSTALL_RPATH \\$ORIGIN/../lib/Yap) - LIST(APPEND CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_FULL_LIBDIR}) - LIST(APPEND CMAKE_INSTALL_RPATH \\$ORIGIN/../lib) - LIST(APPEND CMAKE_INSTALL_RPATH \\$ORIGIN/../../../lib) +LIST(APPEND CMAKE_INSTALL_RPATH \\$ORIGIN/../lib/Yap) +LIST(APPEND CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_FULL_LIBDIR}) +LIST(APPEND CMAKE_INSTALL_RPATH \\$ORIGIN/../lib) +LIST(APPEND CMAKE_INSTALL_RPATH \\$ORIGIN/../../../lib) ELSE() - LIST(APPEND CMAKE_INSTALL_RPATH @loader_path/../lib/Yap) - LIST(APPEND CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_FULL_LIBDIR}) - LIST(APPEND CMAKE_INSTALL_RPATH @loader_path/../lib) - LIST(APPEND CMAKE_INSTALL_RPATH @loader_path/../../../lib) +LIST(APPEND CMAKE_INSTALL_RPATH @loader_path/../lib/Yap) +LIST(APPEND CMAKE_INSTALL_RPATH ${CMAKE_INSTALL_FULL_LIBDIR}) +LIST(APPEND CMAKE_INSTALL_RPATH @loader_path/../lib) +LIST(APPEND CMAKE_INSTALL_RPATH @loader_path/../../../lib) ENDIF() set(YAP_STARTUP startup.yss) @@ -550,21 +550,21 @@ set(YAP_SOURCEBOOT boot.yap ) # Model Specific if (HAVE_GCC) - set_property(DIRECTORY APPEND PROPERTY COMPILE_OPTIONS -Wall) - if (${C_COMPILER} MATCHES "GNU") - set_property(DIRECTORY APPEND PROPERTY COMPILE_OPTIONS $<$:-O3;-fomit-frame-pointer;-fstrict-aliasing;-freorder-blocks;-fsched-interblock>) - else () - set_property(DIRECTORY APPEND PROPERTY COMPILE_OPTIONS $<$:-O3;-fstrict-aliasing;-freorder-blocks;-fsched-interblock>) - endif () - set_property(DIRECTORY APPEND PROPERTY COMPILE_OPTIONS -fexceptions) +set_property(DIRECTORY APPEND PROPERTY COMPILE_OPTIONS -Wall) +if (${C_COMPILER} MATCHES "GNU") +set_property(DIRECTORY APPEND PROPERTY COMPILE_OPTIONS $<$:-O3;-fomit-frame-pointer;-fstrict-aliasing;-freorder-blocks;-fsched-interblock>) +else () +set_property(DIRECTORY APPEND PROPERTY COMPILE_OPTIONS $<$:-O3;-fstrict-aliasing;-freorder-blocks;-fsched-interblock>) +endif () +set_property(DIRECTORY APPEND PROPERTY COMPILE_OPTIONS -fexceptions) endif () # set_property( DIRECTORY APPEND_STRING PROPERTY -fsanitize=memory;-fsanitize-memory-track-origins=2) if (HAVE_GCC) - # replace instructions codes by the address of their code - if (WITH_THREADED_CODE) - set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS THREADED_CODE=1) - endif (WITH_THREADED_CODE) +# replace instructions codes by the address of their code +if (WITH_THREADED_CODE) +set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS THREADED_CODE=1) +endif (WITH_THREADED_CODE) endif (HAVE_GCC) # @@ -573,8 +573,8 @@ endif (HAVE_GCC) #TODO: #TODO: if (WITH_CALL_TRACER) - list(APPEND YAP_SYSTEM_OPTIONS "call_tracer " ${YAP_SYSTEM_OPTIONS}) - set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$:LOW_LEVEL_TRACER=1>) +list(APPEND YAP_SYSTEM_OPTIONS "call_tracer " ${YAP_SYSTEM_OPTIONS}) +set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS $<$:LOW_LEVEL_TRACER=1>) endif (WITH_CALL_TRACER) set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS UTF8PROC=1) @@ -583,14 +583,14 @@ set_property(SOURCE ${LIBYAP_SOURCES} APPEND PROPERTY COMPILE_DEFINITIONS YAP_KE IF (WITH_PYTHON) - include(python ) +include(python ) ENDIF (WITH_PYTHON) IF (WITH_R) - find_host_package(LibR) - add_subDIRECTORY(packages/real) - ENDIF (WITH_R) +find_host_package(LibR) +add_subDIRECTORY(packages/real) +ENDIF (WITH_R) include(Sources) @@ -611,27 +611,27 @@ add_subDIRECTORY(utf8proc ) - if(ANDROID) +if(ANDROID) - set(CXX_SWIG_OUTDIR ${CMAKE_BINARY_DIR}/packages/swig/android) - add_subdirectory(packages/swig/android) - add_definitions(-DMYDDAS=1 -DEMBEDDED_MYDDAS=1 -DMYDDAS_SQLITE3=1 -DEMBEDDED_SQLITE3=1) +set(CXX_SWIG_OUTDIR ${CMAKE_BINARY_DIR}/packages/swig/android) +add_subdirectory(packages/swig/android) +add_definitions(-DMYDDAS=1 -DEMBEDDED_MYDDAS=1 -DMYDDAS_SQLITE3=1 -DEMBEDDED_SQLITE3=1) - else() - add_definitions(-DMYDDAS=1 -DEMBEDDED_MYDDAS=1 -DMYDDAS_SQLITE3=1 ) +else() +add_definitions(-DMYDDAS=1 -DEMBEDDED_MYDDAS=1 -DMYDDAS_SQLITE3=1 ) endif() - if (MYSQL_FOUND) - add_definitions( -DMYDDAS_MYSQL=1) - endif () +if (MYSQL_FOUND) +add_definitions( -DMYDDAS_MYSQL=1) +endif () - if (ODBC_FOUND) - add_definitions( -DMYDDAS_ODBC=1) - endif () +if (ODBC_FOUND) +add_definitions( -DMYDDAS_ODBC=1) +endif () - if (POSTGRES_FOUND) - add_definitions( -DMYDDAS_POSTGRES=1) - endif() +if (POSTGRES_FOUND) +add_definitions( -DMYDDAS_POSTGRES=1) +endif() #utf-8 is not aPconn option # we use the nice UTF-8 package #available at the Julia project @@ -647,45 +647,45 @@ List(APPEND YLIBS $) List(APPEND YLIBS $) List(APPEND YLIBS $) if (WIN32 OR ANDROID) - List(APPEND YLIBS $) - if (WIN32 AND WITH_PYTHON) - List(APPEND YLIBS $) - list (APPEND WINDLLS ${PYTHON_LIBRARIES}) - endif () - if (ANDROID) - List(APPEND YLIBS $) - List(APPEND YLIBS $) - set(ANDROID_LIBRARIES ${CMAKE_SOURCE_DIR}/../sqlite-android/jni/${ANDROID_ABI}/libsqliteX.so android log) - link_directories(${CMAKE_SOURCE_DIR}/../sqlite-android/jni/${ANDROID_ABI}) +List(APPEND YLIBS $) +if (WIN32 AND WITH_PYTHON) +List(APPEND YLIBS $) +list (APPEND WINDLLS ${PYTHON_LIBRARIES}) +endif () +if (ANDROID) +List(APPEND YLIBS $) +List(APPEND YLIBS $) +set(ANDROID_LIBRARIES ${CMAKE_SOURCE_DIR}/../sqlite-android/jni/${ANDROID_ABI}/libsqliteX.so android log) +link_directories(${CMAKE_SOURCE_DIR}/../sqlite-android/jni/${ANDROID_ABI}) - endif () +endif () endif () add_library( # Sets the name of the library. - libYap +libYap - # Sets the library as a shared library. - SHARED - ${ENGINE_SOURCES} - ${C_INTERFACE_SOURCES} - ${STATIC_SOURCES} - # cmake object libraries - ${YLIBS} - ) +# Sets the library as a shared library. +SHARED +${ENGINE_SOURCES} +${C_INTERFACE_SOURCES} +${STATIC_SOURCES} +# cmake object libraries +${YLIBS} +) - target_link_libraries(libYap - m - ${GMP_LIBRARIES} - ${READLINE_LIBRARIES} - ${ANDROID_LIBRARIES} - ${WINDLLS} - ${PYTHON_LIBRARIES} - ) +target_link_libraries(libYap +m +${GMP_LIBRARIES} +${READLINE_LIBRARIES} +${ANDROID_LIBRARIES} +${WINDLLS} +${PYTHON_LIBRARIES} +) - set_target_properties(libYap - PROPERTIES OUTPUT_NAME Yap - ) +set_target_properties(libYap +PROPERTIES OUTPUT_NAME Yap +) ## define system @@ -707,7 +707,7 @@ set_property(DIRECTORY PROPERTY CXX_STANDARD 11) if (ANDROID) - include_directories(CXX ${CMAKE_SOURCE_DIR}/../yaplib/generated/src/jni) +include_directories(CXX ${CMAKE_SOURCE_DIR}/../yaplib/generated/src/jni) endif () include(Threads) # @@ -719,37 +719,37 @@ include(Threads) list(APPEND YAP_SYSTEM_OPTIONS "thread support") set_target_properties(libYap - PROPERTIES OUTPUT_NAME Yap - ) +PROPERTIES OUTPUT_NAME Yap +) MY_set_target_properties(libYap - PROPERTIES VERSION ${YAP_FULL_VERSION} - SOVERSION ${YAP_MAJOR_VERSION}.${YAP_MINOR_VERSION} - ) +PROPERTIES VERSION ${YAP_FULL_VERSION} +SOVERSION ${YAP_MAJOR_VERSION}.${YAP_MINOR_VERSION} +) # file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/packages/python/swig/yap4py) if (WITH_PYTHON AND PYTHONLIBS_FOUND AND SWIG_FOUND) - if (CONDA) - set(bdist bdist_conda) +if (CONDA) +set(bdist bdist_conda) else() - set(bdist bdist_wheel) +set(bdist bdist_wheel) endif() set( ENV{PYTHONPATH} ${CMAKE_BINARY_DIR}/packages/python/swig:${CMAKE_BINARY_DIR}/packages/python/yap_kernel:. ) - add_subdirectory(packages/python/swig) +add_subdirectory(packages/python/swig) - include(FindPythonModule) +include(FindPythonModule) - find_python_module(jupyter) - find_python_module(wheel) - find_python_module(setuptools) - if (PY_JUPYTER AND PY_WHEEL AND PY_SETUPTOOLS) - add_subdirectory(packages/python/yap_kernel) - else() - message("will not compile yap_kernel, as jupyter=${PY_JUPYTER};wheel=${PY_WHEEL};setuptools=${PY_SETUPTOOLS}") - ENDIF () +find_python_module(jupyter) +find_python_module(wheel) +find_python_module(setuptools) +if (PY_JUPYTER AND PY_WHEEL AND PY_SETUPTOOLS) +add_subdirectory(packages/python/yap_kernel) +else() +message("will not compile yap_kernel, as jupyter=${PY_JUPYTER};wheel=${PY_WHEEL};setuptools=${PY_SETUPTOOLS}") +ENDIF () endif () @@ -759,161 +759,161 @@ message(STATUS "Building YAP packages version ${YAP_VERSION}") if (NOT WIN32) - set(BUILD_SHARED_LIBS ON) +set(BUILD_SHARED_LIBS ON) endif () if (WITH_JIT) - add_subDIRECTORY(JIT) +add_subDIRECTORY(JIT) endif (WITH_JIT) if (WITH_XML2 OR WITH_RAPTOR) - add_subDIRECTORY(packages/raptor) +add_subDIRECTORY(packages/raptor) endif() if (WITH_XML) - add_subDIRECTORY(packages/xml) +add_subDIRECTORY(packages/xml) endif () IF (WITH_CLPBN) - add_subDIRECTORY(packages/CLPBN) +add_subDIRECTORY(packages/CLPBN) ENDIF (WITH_CLPBN) IF (WITH_CPLINT) - add_subDIRECTORY(packages/cplint) +add_subDIRECTORY(packages/cplint) ENDIF (WITH_CPLINT) IF (WITH_DOCS) - get_target_property(YAP_SOURCES libYap SOURCES) +get_target_property(YAP_SOURCES libYap SOURCES) - add_subDIRECTORY(docs) +add_subDIRECTORY(docs) - find_host_package(Doxygen) +find_host_package(Doxygen) ENDIF (WITH_DOCS) # add_subDIRECTORY (packages/cuda) if (WITH_GECODE) - add_subDIRECTORY(packages/gecode) +add_subDIRECTORY(packages/gecode) endif () if (WITH_LBFGS) - add_subDIRECTORY(packages/yap-lbfgs) +add_subDIRECTORY(packages/yap-lbfgs) endif () if (WITH_JAVA) - #detect java setup, as it is shared between different installations. +#detect java setup, as it is shared between different installations. - find_package(Java COMPONENTS Development Runtime) - # find_package(Java COMPONENTS Development) - # find_package(Java COMPONENTS Runtime) - #find_package(JavaLibs) +find_package(Java COMPONENTS Development Runtime) +# find_package(Java COMPONENTS Development) +# find_package(Java COMPONENTS Runtime) +#find_package(JavaLibs) - if (Java_Development_FOUND) +if (Java_Development_FOUND) - set (STD_CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK}) - set (CMAKE_FIND_FRAMEWORK LAST) # CMake will find the Java returned by /usr/libexec/java_home. +set (STD_CMAKE_FIND_FRAMEWORK ${CMAKE_FIND_FRAMEWORK}) +set (CMAKE_FIND_FRAMEWORK LAST) # CMake will find the Java returned by /usr/libexec/java_home. - macro_optional_find_package(JNI ON) +macro_optional_find_package(JNI ON) - set (CMAKE_FIND_FRAMEWORK ${STD_CMAKE_FIND_FRAMEWORK}) +set (CMAKE_FIND_FRAMEWORK ${STD_CMAKE_FIND_FRAMEWORK}) - if (JNI_FOUND) +if (JNI_FOUND) - get_filename_component(JAVA_HOME ${JAVA_INCLUDE_PATH} DIRECTORY) +get_filename_component(JAVA_HOME ${JAVA_INCLUDE_PATH} DIRECTORY) - include(UseJava) +include(UseJava) - # - # Java_JAVA_EXECUTABLE = the full path to the Java runtime - # Java_JAVAC_EXECUTABLE = the full path to the Java compiler - # Java_JAVAH_EXECUTABLE = the full path to the Java header generator - # Java_JAVADOC_EXECUTABLE = the full path to the Java documention generator - # Java_IDLJ_EXECUTABLE = the full path to the Java idl compiler - # Java_JAR_EXECUTABLE = the full path to the Java archiver - # Java_JARSIGNER_EXECUTABLE = the full path to the Java jar signer - # Java_VERSION_STRING = Version of java found, eg. 1.6.0_12 - # Java_VERSION_MAJOR = The major version of the package found. - # Java_VERSION_MINOR = The minor version of the package found. - # Java_VERSION_PATCH = The patch version of the package found. - # Java_VERSION_TWEAK = The tweak version of the package found (after '_') - # Java_VERSION = This is set to: $major.$minor.$patch(.$tweak) - # - # The Java_ADDITIONAL_VERSIONS variable can be used to specify a list - # of version numbers that should be taken into account when searching - # for Java. You need to set this variable before calling +# +# Java_JAVA_EXECUTABLE = the full path to the Java runtime +# Java_JAVAC_EXECUTABLE = the full path to the Java compiler +# Java_JAVAH_EXECUTABLE = the full path to the Java header generator +# Java_JAVADOC_EXECUTABLE = the full path to the Java documention generator +# Java_IDLJ_EXECUTABLE = the full path to the Java idl compiler +# Java_JAR_EXECUTABLE = the full path to the Java archiver +# Java_JARSIGNER_EXECUTABLE = the full path to the Java jar signer +# Java_VERSION_STRING = Version of java found, eg. 1.6.0_12 +# Java_VERSION_MAJOR = The major version of the package found. +# Java_VERSION_MINOR = The minor version of the package found. +# Java_VERSION_PATCH = The patch version of the package found. +# Java_VERSION_TWEAK = The tweak version of the package found (after '_') +# Java_VERSION = This is set to: $major.$minor.$patch(.$tweak) +# +# The Java_ADDITIONAL_VERSIONS variable can be used to specify a list +# of version numbers that should be taken into account when searching +# for Java. You need to set this variable before calling - # - #macro_optional_find_package(JNI ON) - # JNI_INCLUDE_DIRS = the include dirs to use - # JNI_LIBRARIES = the libraries to use - # JNI_FOUND = TRUE if JNI headers and libraries were found. - # JAVA_AWT_LIBRARY = the path to the jawt library - # JAVA_JVM_LIBRARY = the path to the jvm library - # JAVA_INCLUDE_PATH = the include path to jni.h - # JAVA_INCLUDE_PATH2 = the include path to jni_md.h - # JAVA_AWT_INCLUDE_PATH = the include path to jawt.h +# +#macro_optional_find_package(JNI ON) +# JNI_INCLUDE_DIRS = the include dirs to use +# JNI_LIBRARIES = the libraries to use +# JNI_FOUND = TRUE if JNI headers and libraries were found. +# JAVA_AWT_LIBRARY = the path to the jawt library +# JAVA_JVM_LIBRARY = the path to the jvm library +# JAVA_INCLUDE_PATH = the include path to jni.h +# JAVA_INCLUDE_PATH2 = the include path to jni_md.h +# JAVA_AWT_INCLUDE_PATH = the include path to jawt.h - get_filename_component ( JAVA_AWT_DIR ${JAVA_AWT_LIBRARY} DIRECTORY) - get_filename_component ( JAVA_JNI_DIR ${JAVA_JVM_LIBRARY} DIRECTORY) - list(APPEND CMAKE_INSTALL_RPATH ${JAVA_AWT_DIR};${JAVA_JNI_DIR}) +get_filename_component ( JAVA_AWT_DIR ${JAVA_AWT_LIBRARY} DIRECTORY) +get_filename_component ( JAVA_JNI_DIR ${JAVA_JVM_LIBRARY} DIRECTORY) +list(APPEND CMAKE_INSTALL_RPATH ${JAVA_AWT_DIR};${JAVA_JNI_DIR}) if (APPLE) - set(CMAKE_MACOSX_RPATH 1) - find_library (JLI jli ${JAVA_AWT_DIR}/jli) - #find_library (JAL JavaApplicationLauncher FRAMEWORK ONLY PATH /System/Library/PrivateFrameworks) - #find_library (JL JavaLaunching FRAMEWORK ONLY PATH /System/Library/PrivateFrameworks) - list(APPEND CMAKE_INSTALL_RPATH ${JAVA_AWT_DIR}/jli) +set(CMAKE_MACOSX_RPATH 1) +find_library (JLI jli ${JAVA_AWT_DIR}/jli) +#find_library (JAL JavaApplicationLauncher FRAMEWORK ONLY PATH /System/Library/PrivateFrameworks) +#find_library (JL JavaLaunching FRAMEWORK ONLY PATH /System/Library/PrivateFrameworks) +list(APPEND CMAKE_INSTALL_RPATH ${JAVA_AWT_DIR}/jli) list(APPEND JNI_LIBRARIES ${JLI};${JAL};${JL}) endif() - endif (JNI_FOUND) +endif (JNI_FOUND) - endif (Java_Development_FOUND) +endif (Java_Development_FOUND) - add_subDIRECTORY(packages/jpl) +add_subDIRECTORY(packages/jpl) endif(WITH_JAVA) if (WITH_CUDD) - add_subDIRECTORY(packages/bdd) +add_subDIRECTORY(packages/bdd) endif() if (WITH_PROBLOG) - add_subDIRECTORY(packages/ProbLog) +add_subDIRECTORY(packages/ProbLog) endif() if (WITH_MINISAT) - add_subDIRECTORY(packages/swi-minisat2) +add_subDIRECTORY(packages/swi-minisat2) endif() if (WITH_CLPQR) - add_subDIRECTORY(packages/clpqr) +add_subDIRECTORY(packages/clpqr) endif() @@ -959,11 +959,11 @@ endif() if (WIN32) - if (MSVC) - set(MSVC_RUNTIME "dynamic") - ENDIF (MSVC) +if (MSVC) +set(MSVC_RUNTIME "dynamic") +ENDIF (MSVC) - target_link_libraries(libYap wsock32 ws2_32 shlwapi) +target_link_libraries(libYap wsock32 ws2_32 shlwapi) endif (WIN32) @@ -976,33 +976,33 @@ set_target_properties(yap-bin PROPERTIES OUTPUT_NAME yap) target_link_libraries(yap-bin libYap) install(TARGETS libYap yap-bin - RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} - LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} - ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} - ) +RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} +LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} +ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} +) endif() if (WITH_MPI) - add_subDIRECTORY(library/lammpi) +add_subDIRECTORY(library/lammpi) - if (MPI_C_FOUND) +if (MPI_C_FOUND) - macro_optional_add_subDIRECTORY(library/mpi) - set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MPI_C_COMPILE_FLAGS} ") - include_directories(${MPI_C_INCLUDE_PATH}) - target_link_libraries(yap-bin ${MPI_C_LIBRARIES}) - if (MPI_C_COMPILE_FLAGS) - set_target_properties(yap-bin PROPERTIES - COMPILE_FLAGS "${MPI_C_COMPILE_FLAGS}") - endif (MPI_C_COMPILE_FLAGS) +macro_optional_add_subDIRECTORY(library/mpi) +set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MPI_C_COMPILE_FLAGS} ") +include_directories(${MPI_C_INCLUDE_PATH}) +target_link_libraries(yap-bin ${MPI_C_LIBRARIES}) +if (MPI_C_COMPILE_FLAGS) +set_target_properties(yap-bin PROPERTIES +COMPILE_FLAGS "${MPI_C_COMPILE_FLAGS}") +endif (MPI_C_COMPILE_FLAGS) - if (MPI_C_LINK_FLAGS) - set_target_properties(yap-bin PROPERTIES - LINK_FLAGS "${MPI_C_LINK_FLAGS}") - endif () - endif (MPI_C_FOUND) +if (MPI_C_LINK_FLAGS) +set_target_properties(yap-bin PROPERTIES +LINK_FLAGS "${MPI_C_LINK_FLAGS}") +endif () +endif (MPI_C_FOUND) endif(WITH_MPI) @@ -1014,15 +1014,15 @@ install(FILES ${INCLUDE_HEADERS} ${CONFIGURATION_HEADERS} DESTINATION ${CMAKE_IN macro_display_feature_log() if (POLICY CMP0058) - cmake_policy(SET CMP0058 NEW) +cmake_policy(SET CMP0058 NEW) endif (POLICY CMP0058) include(Config ) feature_summary(DESCRIPTION "Packages found:" - WHAT PACKAGES_FOUND - ) +WHAT PACKAGES_FOUND +) feature_summary(DESCRIPTION "Packages not found:" - WHAT PACKAGES_NOT_FOUND - ) +WHAT PACKAGES_NOT_FOUND +) diff --git a/packages/myddas/pl/myddas_prolog2sql_optimizer.ypp b/packages/myddas/pl/myddas_prolog2sql_optimizer.ypp index 7d297b6ee..56e5c117e 100644 --- a/packages/myddas/pl/myddas_prolog2sql_optimizer.ypp +++ b/packages/myddas/pl/myddas_prolog2sql_optimizer.ypp @@ -2,7 +2,7 @@ optimize_sql/2 ]). -:- use_module(lists,[ +:- use_module(library(lists),[ append/3, member/2, delete/3, diff --git a/packages/myddas/pl/myddas_top_level.ypp b/packages/myddas/pl/myddas_top_level.ypp index 02f22b5a8..e9b0cccb4 100644 --- a/packages/myddas/pl/myddas_top_level.ypp +++ b/packages/myddas/pl/myddas_top_level.ypp @@ -27,15 +27,15 @@ db_my_result_set/1 ]). -:- use_module(system,[ +:- use_module(library(system),[ system/2 ]). -:- use_module(charsio,[ +:- use_module(library(charsio),[ read_from_chars/2 ]). -:- use_module(terms,[ +:- use_module(library(terms),[ term_variables/2 ]). diff --git a/packages/python/yap_kernel/yap_ipython/yapi.py b/packages/python/yap_kernel/yap_ipython/yapi.py index e83ee0fa6..d3b964f0c 100644 --- a/packages/python/yap_kernel/yap_ipython/yapi.py +++ b/packages/python/yap_kernel/yap_ipython/yapi.py @@ -13,6 +13,7 @@ from IPython.core.inputtransformer import * from IPython.core.interactiveshell import * from ipython_genutils.py3compat import builtin_mod +import copy import json from yap_kernel.displayhook import ZMQShellDisplayHook @@ -535,13 +536,14 @@ class YAPRun(InteractiveShell): self.engine.mgoal(errors(self,text),"user",True) return self.errors - def prolog(self, program, squery, howmany, result): + def prolog(self, ccell, result): # # construct a self.query from a one-line string # self.q is opaque to Python try: # sys.settrace(tracefunc) + (program, squery, _, howmany) = ccell if self.q and self.os == (program,squery): howmany += self.iterations else: @@ -551,7 +553,6 @@ class YAPRun(InteractiveShell): self.answers = [] result.result = [] self.os = (program,squery) - self.iterations = 0 pg = jupyter_query(self,program,squery) self.q = Query(self.engine, pg) for v in self.q: @@ -614,13 +615,6 @@ class YAPRun(InteractiveShell): `result : :class:`ExecutionResult` """ - if store_history: - # Write output to the database. Does nothing unless - # history output logging is enabled. - self.shell.history_manager.store_output(self.shell.execution_count) - # Each cell is a *single* input, regardless of how many lines it has - self.shell.execution_count += 1 - # construct a query from a one-line string # q is opaque to Python # vs is the list of variables @@ -656,6 +650,8 @@ class YAPRun(InteractiveShell): # # Display the exception if input processing failed. if preprocessing_exc_tuple is not None: self.showtraceback(preprocessing_exc_tuple) + if store_history: + self.shell.execution_count += 1 return self.error_before_exec(preprocessing_exc_tuple[2]) # Our own compiler remembers the __future__ environment. If we want to @@ -665,7 +661,7 @@ class YAPRun(InteractiveShell): self.cell_name = str( self.shell.execution_count) self.shell.displayhook.exec_result= result cell = raw_cell.strip() - while cell and cell[0] == '%': + while cell[0] == '%': if cell[1] == '%': ## cell magic txt0 = cell[2:].split(maxsplit = 1, sep = '\n') @@ -675,6 +671,7 @@ class YAPRun(InteractiveShell): except: magic = cell[2:].strip() body = "" + linec = False try: [magic,line] = magic.split(maxsplit=1) except: @@ -683,6 +680,7 @@ class YAPRun(InteractiveShell): result.result = self.shell.run_cell_magic(magic, line, body) return else: + linec = True rcell = cell[1:].strip() try: [magic,cell] = rcell.split(maxsplit = 1, sep = '\n') @@ -699,8 +697,9 @@ class YAPRun(InteractiveShell): # Give the displayhook a reference to our ExecutionResult so it # can fill in the output value. self.shell.displayhook.exec_result = result - (program,squery,_ ,howmany) = self.prolog_cell(cell) - if howmany <= 0 and not program: + ccell = self.prolog_cell(cell) + (program,squery,_ ,howmany) = ccell + if howmany == 0 and not program: return result if self.syntaxErrors(program+squery+".\n") : result.result = [] @@ -724,7 +723,7 @@ class YAPRun(InteractiveShell): # run the new command using the given tracer # # tracer.runfunc(f,self,cell,state) - answers = self.prolog( program, squery, howmany, result ) + answers = self.prolog( ccell, result ) # state = tracer.runfunc(hist # er_query( self, cell ) ) except Exception as e: @@ -732,7 +731,6 @@ class YAPRun(InteractiveShell): try: (etype, value, tb) = e traceback.print_exception(etype, value, tb) - self.engine.mgoal(streams(False),"user", True) except: print(e) @@ -745,26 +743,32 @@ class YAPRun(InteractiveShell): if not silent: self.shell.events.trigger('post_run_cell') + if store_history: + # Write output to the database. Does nothing unless + # history output logging is enabled. + self.shell.history_manager.store_output(self.shell.execution_count) + # Each cell is a *single* input, regardless of how many lines it has + self.shell.execution_count += 1 + self.engine.mgoal(streams(False),"user", True) return def prolog_cell(self, s): - return pcell(s) + return cell_structure(s) - -def pcell(s): +def cell_structure(s): """ - Trasform a text into program+query. A query is the - last line if the last line is non-empty and does not terminate - on a dot. You can also finish with + Trasform a text into program+query. A query is the + last line if the last line is non-empty and does not terminate + on a dot. You can also finish with - - `*`: you request all solutions - - ';'[N]: you want an answer; optionally you want N answers + - `*`: you request all solutions + - ';'[N]: you want an answer; optionally you want N answers - If the line terminates on a `*/` or starts on a `%` we assume the line - is a comment. + If the line terminates on a `*/` or starts on a `%` we assume the line + is a comment. """ try: sl = s.splitlines() @@ -780,32 +784,35 @@ def pcell(s): if line[-1] == '.': return (s,'','.',0) query = '' - loop = '' while i -#include #include +#include #include "real.h" - using namespace Rcpp; class yap4r { @@ -19,29 +18,26 @@ class yap4r { YAPQuery *q; std::vector args; bool failed; - public: - SEXP qsexp; yap4r(); - bool query(std::string p_name, GenericVector sexps=R_NilValue, std::string p_module="user"); + bool query(std::string p_name, GenericVector sexps = R_NilValue, + std::string p_module = "user"); bool more(); bool done(); SEXP peek(int i); bool compile(std::string s); bool library(std::string s); }; - - yap4r::yap4r() { + +yap4r::yap4r() { YAPEngineArgs *yargs = new YAPEngineArgs(); yap = new YAPEngine(yargs); }; - - - -bool yap4r::query(std::string p_name, GenericVector sexps, std::string p_module) { +bool yap4r::query(std::string p_name, GenericVector sexps, + std::string p_module) { if (q) { q->close(); q = nullptr; @@ -50,21 +46,21 @@ bool yap4r::query(std::string p_name, GenericVector sexps, std::string p_module arity_t arity; if (sexps.isNULL()) { YAPTerm qt = YAPAtomTerm(p_name.c_str()); - q = new YAPQuery(qt); -t =qt.handle(); + q = new YAPQuery(qt); + t = qt.handle(); } else { -arity = sexps.length(); + arity = sexps.length(); std::vector args = std::vector(); - yhandle_t sls = Yap_NewHandles(sexps.length()); - for (int i=0; imgoal(YAPApplTerm("compile",fs).term(), USER_MODULE); - + return yap->mgoal(YAPApplTerm("compile", fs).term(), USER_MODULE); } bool yap4r::library(std::string s) { YAPTerm fs[1], l[1]; l[0] = YAPAtomTerm(s.c_str()); fs[0] = YAPApplTerm("library", l); - return yap->mgoal(YAPApplTerm("compile",fs).term(), USER_MODULE); - + return yap->mgoal(YAPApplTerm("compile", fs).term(), USER_MODULE); } - bool yap4r::more() { - bool rc = true; - if (failed) - return false; - if (q) - rc = q->next(); - if (!rc) { - failed = true; - } - return rc; +bool yap4r::more() { + bool rc = true; + if (failed) + return false; + if (q) + rc = q->next(); + if (!rc) { + failed = true; } + return rc; +} +bool yap4r::done() { - bool yap4r::done() { + if (failed) + return false; + if (q) + q->cut(); + q = NULL; + return true; +} - if (failed) - return false; - if (q) - q->cut(); - q = NULL; - return true; - } +SEXP yap4r::peek(int i) { + if (failed || q == nullptr) + return R_MissingArg; + if (i == 0) + return qsexp; + return term_to_sexp(Yap_InitSlot(Yap_XREGS[i]), false); +} - - SEXP yap4r::peek(int i) { - if (failed || q==nullptr) - return R_MissingArg; - if (i==0) - return qsexp; - return term_to_sexp(Yap_InitSlot(Yap_XREGS[i]), false); - } - - - RCPP_MODULE(mod_yap4r) { - class_( "yap4r" ) +RCPP_MODULE(mod_yap4r) { + class_("yap4r") .constructor("create an object encapsulating a Prolog engine") - .method( "query", &yap4r::query, "create an active query within the engine") - .method( "more", &yap4r::more, "ask for an extra solution") - .method( "done", &yap4r::done, "terminate the query") - .method( "compile", &yap4r::compile, "compile the file") - .method( "library", &yap4r::library, "compile the library") - .method( "peek", &yap4r::peek, "load arg[i] into R") - ; + .method("query", &yap4r::query, + "create an active query within the engine") + .method("more", &yap4r::more, "ask for an extra solution") + .method("done", &yap4r::done, "terminate the query") + .method("compile", &yap4r::compile, "compile the file") + .method("library", &yap4r::library, "compile the library") + .method("peek", &yap4r::peek, "load arg[i] into R"); } diff --git a/pl/init.yap b/pl/init.yap index 008b7be68..82a84b04e 100644 --- a/pl/init.yap +++ b/pl/init.yap @@ -225,7 +225,35 @@ '$extend_file_search_path'(P). '$init_path_extensions'. +/** + * @pred top_query(?0 Goal). + * + * run _Goal_ as f it had been called from the Prolog + * top-level. + */ +top_quer(G) :- + '$init_step'(2), % consult + '$init_step'(3), % globals + '$init_step'(4), % check if a saved state, + '$init_step'(5), % queues + '$init_step'(6), % I/O, threads. + '$alarm'(0, 0, _, _), + '$clean_up_dead_clauses', + flush_output, + '$run_toplevel_hooks', + prompt1(' ?- '), + nb_setval('$spy_gn',1), + % stop at spy-points if debugging is on. + nb_setval('$debug_run',off), + nb_setval('$debug_jump',off), + '__NB_setval__'('$trace',off), + nb_setval('$debug_status', state(zip, 0, stop,off)), + set_prolog_flag(break_level, 0). + call(user:G, Error, '$Errors'(Error)). + + /** * * @} */ + diff --git a/regression/sqlitest.yap b/regression/sqlitest.yap new file mode 100644 index 000000000..75601d911 --- /dev/null +++ b/regression/sqlitest.yap @@ -0,0 +1,100 @@ + +:- use_module(library(plunit)). + +:- begin_tests(sqlite3). + +:- use_module(library(lists)). +:- use_module(library(maplist)). +:- use_module(library(myddas)). + +:- if( current_prolog_flag(android,true) ). +test(db_open) :- + db_open(sqlite3, '/data/user/0/pt.up.yap/files/chinook.db', _, _). +:- else. +test(db_open) :- + db_open(sqlite3,myddas,dataset('chinook.db'),_,_). +:-endif. + +test(schema0, all((Desc ==[(table albums), + (table artists), + (table customers), + (table employees), + (table genres), + (table invoice_items), + (table invoices), + (table media_types), + (table playlist_track), + (table playlists), + (table sqlite_sequence), + (table sqlite_stat1),(table tracks)]))) :- + db_show_tables(myddas,Desc). + +test(import) :- + db_import('artists', user:artists), + db_import('albums', user:albums), + db_import('tracks', user:tracks). + +test(all_artists, all(( + X-Y == [1-'AC/DC',2-'Accept',3-'Aerosmith',4-'Alanis Morissette',5-'Alice In Chains',6-'Antônio Carlos Jobim',7-'Apocalyptica',8-'Audioslave',9-'BackBeat',10-'Billy Cobham',11-'Black Label Society',12-'Black Sabbath',13-'Body Count',14-'Bruce Dickinson',15-'Buddy Guy',16-'Caetano Veloso',17-'Chico Buarque',18-'Chico Science & Nação Zumbi',19-'Cidade Negra',20-'Cláudio Zoli',21-'Various Artists',22-'Led Zeppelin',23-'Frank Zappa & Captain Beefheart',24-'Marcos Valle',25-'Milton Nascimento & Bebeto',26-'Azymuth',27-'Gilberto Gil',28-'João Gilberto',29-'Bebel Gilberto',30-'Jorge Vercilo',31-'Baby Consuelo',32-'Ney Matogrosso',33-'Luiz Melodia',34-'Nando Reis',35-'Pedro Luís & A Parede',36-'O Rappa',37-'Ed Motta',38-'Banda Black Rio',39-'Fernanda Porto',40-'Os Cariocas',41-'Elis Regina',42-'Milton Nascimento',43-'A Cor Do Som',44-'Kid Abelha',45-'Sandra De Sá',46-'Jorge Ben',47-'Hermeto Pascoal',48-'Barão Vermelho',49-'Edson, DJ Marky & DJ Patife Featuring Fernanda Porto',50-'Metallica',51-'Queen',52-'Kiss',53-'Spyro Gyra',54-'Green Day',55-'David Coverdale',56-'Gonzaguinha',57-'Os Mutantes',58-'Deep Purple',59-'Santana',60-'Santana Feat. Dave Matthews',61-'Santana Feat. Everlast',62-'Santana Feat. Rob Thomas',63-'Santana Feat. Lauryn Hill & Cee-Lo',64-'Santana Feat. The Project G&B',65-'Santana Feat. Maná',66-'Santana Feat. Eagle-Eye Cherry',67-'Santana Feat. Eric Clapton',68-'Miles Davis',69-'Gene Krupa',70-'Toquinho & Vinícius',71-'Vinícius De Moraes & Baden Powell',72-'Vinícius De Moraes',73-'Vinícius E Qurteto Em Cy',74-'Vinícius E Odette Lara',75-'Vinicius, Toquinho & Quarteto Em Cy',76-'Creedence Clearwater Revival',77-'Cássia Eller',78-'Def Leppard',79-'Dennis Chambers',80-'Djavan',81-'Eric Clapton',82-'Faith No More',83-'Falamansa',84-'Foo Fighters',85-'Frank Sinatra',86-'Funk Como Le Gusta',87-'Godsmack',88-'Guns N\' Roses',89-'Incognito',90-'Iron Maiden',91-'James Brown',92-'Jamiroquai',93-'JET',94-'Jimi Hendrix',95-'Joe Satriani',96-'Jota Quest',97-'João Suplicy',98-'Judas Priest',99-'Legião Urbana',100-'Lenny Kravitz',101-'Lulu Santos',102-'Marillion',103-'Marisa Monte',104-'Marvin Gaye',105-'Men At Work',106-'Motörhead',107-'Motörhead & Girlschool',108-'Mônica Marianno',109-'Mötley Crüe',110-'Nirvana',111-'O Terço',112-'Olodum',113-'Os Paralamas Do Sucesso',114-'Ozzy Osbourne',115-'Page & Plant',116-'Passengers',117-'Paul D\'Ianno',118-'Pearl Jam',119-'Peter Tosh',120-'Pink Floyd',121-'Planet Hemp',122-'R.E.M. Feat. Kate Pearson',123-'R.E.M. Feat. KRS-One',124-'R.E.M.',125-'Raimundos',126-'Raul Seixas',127-'Red Hot Chili Peppers',128-'Rush',129-'Simply Red',130-'Skank',131-'Smashing Pumpkins',132-'Soundgarden',133-'Stevie Ray Vaughan & Double Trouble',134-'Stone Temple Pilots',135-'System Of A Down',136-'Terry Bozzio, Tony Levin & Steve Stevens',137-'The Black Crowes',138-'The Clash',139-'The Cult',140-'The Doors',141-'The Police',142-'The Rolling Stones',143-'The Tea Party',144-'The Who',145-'Tim Maia',146-'Titãs',147-'Battlestar Galactica',148-'Heroes',149-'Lost',150-'U2',151-'UB40',152-'Van Halen',153-'Velvet Revolver',154-'Whitesnake',155-'Zeca Pagodinho',156-'The Office',157-'Dread Zeppelin',158-'Battlestar Galactica (Classic)',159-'Aquaman',160-'Christina Aguilera featuring BigElf',161-'Aerosmith & Sierra Leone\'s Refugee Allstars',162-'Los Lonely Boys',163-'Corinne Bailey Rae',164-'Dhani Harrison & Jakob Dylan',165-'Jackson Browne',166-'Avril Lavigne',167-'Big & Rich',168-'Youssou N\'Dour',169-'Black Eyed Peas',170-'Jack Johnson',171-'Ben Harper',172-'Snow Patrol',173-'Matisyahu',174-'The Postal Service',175-'Jaguares',176-'The Flaming Lips',177-'Jack\'s Mannequin & Mick Fleetwood',178-'Regina Spektor',179-'Scorpions',180-'House Of Pain',181-'Xis',182-'Nega Gizza',183-'Gustavo & Andres Veiga & Salazar',184-'Rodox',185-'Charlie Brown Jr.',186-'Pedro Luís E A Parede',187-'Los Hermanos',188-'Mundo Livre S/A',189-'Otto',190-'Instituto',191-'Nação Zumbi',192-'DJ Dolores & Orchestra Santa Massa',193-'Seu Jorge',194-'Sabotage E Instituto',195-'Stereo Maracana',196-'Cake',197-'Aisha Duo',198-'Habib Koité and Bamada',199-'Karsh Kale',200-'The Posies',201-'Luciana Souza/Romero Lubambo',202-'Aaron Goldberg',203-'Nicolaus Esterhazy Sinfonia',204-'Temple of the Dog',205-'Chris Cornell',206-'Alberto Turco & Nova Schola Gregoriana',207-'Richard Marlow & The Choir of Trinity College, Cambridge',208-'English Concert & Trevor Pinnock',209-'Anne-Sophie Mutter, Herbert Von Karajan & Wiener Philharmoniker',210-'Hilary Hahn, Jeffrey Kahane, Los Angeles Chamber Orchestra & Margaret Batjer',211-'Wilhelm Kempff',212-'Yo-Yo Ma',213-'Scholars Baroque Ensemble',214-'Academy of St. Martin in the Fields & Sir Neville Marriner',215-'Academy of St. Martin in the Fields Chamber Ensemble & Sir Neville Marriner',216-'Berliner Philharmoniker, Claudio Abbado & Sabine Meyer',217-'Royal Philharmonic Orchestra & Sir Thomas Beecham',218-'Orchestre Révolutionnaire et Romantique & John Eliot Gardiner',219-'Britten Sinfonia, Ivor Bolton & Lesley Garrett',220-'Chicago Symphony Chorus, Chicago Symphony Orchestra & Sir Georg Solti',221-'Sir Georg Solti & Wiener Philharmoniker',222-'Academy of St. Martin in the Fields, John Birch, Sir Neville Marriner & Sylvia McNair',223-'London Symphony Orchestra & Sir Charles Mackerras',224-'Barry Wordsworth & BBC Concert Orchestra',225-'Herbert Von Karajan, Mirella Freni & Wiener Philharmoniker',226-'Eugene Ormandy',227-'Luciano Pavarotti',228-'Leonard Bernstein & New York Philharmonic',229-'Boston Symphony Orchestra & Seiji Ozawa',230-'Aaron Copland & London Symphony Orchestra',231-'Ton Koopman',232-'Sergei Prokofiev & Yuri Temirkanov',233-'Chicago Symphony Orchestra & Fritz Reiner',234-'Orchestra of The Age of Enlightenment',235-'Emanuel Ax, Eugene Ormandy & Philadelphia Orchestra',236-'James Levine',237-'Berliner Philharmoniker & Hans Rosbaud',238-'Maurizio Pollini',239-'Academy of St. Martin in the Fields, Sir Neville Marriner & William Bennett',240-'Gustav Mahler',241-'Felix Schmidt, London Symphony Orchestra & Rafael Frühbeck de Burgos',242-'Edo de Waart & San Francisco Symphony',243-'Antal Doráti & London Symphony Orchestra',244-'Choir Of Westminster Abbey & Simon Preston',245-'Michael Tilson Thomas & San Francisco Symphony',246-'Chor der Wiener Staatsoper, Herbert Von Karajan & Wiener Philharmoniker',247-'The King\'s Singers',248-'Berliner Philharmoniker & Herbert Von Karajan',249-'Sir Georg Solti, Sumi Jo & Wiener Philharmoniker',250-'Christopher O\'Riley',251-'Fretwork',252-'Amy Winehouse',253-'Calexico',254-'Otto Klemperer & Philharmonia Orchestra',255-'Yehudi Menuhin',256-'Philharmonia Orchestra & Sir Neville Marriner',257-'Academy of St. Martin in the Fields, Sir Neville Marriner & Thurston Dart',258-'Les Arts Florissants & William Christie',259-'The 12 Cellists of The Berlin Philharmonic',260-'Adrian Leaper & Doreen de Feis',261-'Roger Norrington, London Classical Players',262-'Charles Dutoit & L\'Orchestre Symphonique de Montréal',263-'Equale Brass Ensemble, John Eliot Gardiner & Munich Monteverdi Orchestra and Choir',264-'Kent Nagano and Orchestre de l\'Opéra de Lyon',265-'Julian Bream',266-'Martin Roscoe',267-'Göteborgs Symfoniker & Neeme Järvi',268-'Itzhak Perlman',269-'Michele Campanella',270-'Gerald Moore',271-'Mela Tenenbaum, Pro Musica Prague & Richard Kapp', +272-'Emerson String Quartet', +273-'C. Monteverdi, Nigel Rogers - Chiaroscuro; London Baroque; London Cornett & Sackbu', +274-'Nash Ensemble', +275-'Philip Glass Ensemble'] ))) :- + artists(X,Y). + +test(cut_artists, true((X-Y == 1-'AC/DC'))) :- + artists(X, Y), + !. + +test(select_with_1st, true(Y == 'Nação Zumbi')) :- + artists(191, Y), !. + +test(select_with_2st, true(X == 97)) :- + artists(X, 'João Suplicy'), + !. + +test(join, true((A == 'AC/DC', + AId == 1, + Artist == 1, + GId == 1, + I == 1, + MId == 1, + T == 1, + Bs == 11170334, + CId == 'Angus Young, Malcolm Young, Brian Johnson', + Msec == 343719, + N == 'For Those About To Rock (We Salute You)', + P == 0.9900000000000000, + Tit == 'For Those About To Rock We Salute You'))) :- + artists(I,A), + tracks(T,N,AId,MId,GId,CId,Msec,Bs,P), + albums(AId,Tit,Artist), + !. + +test(att_types, true((Als == ['AlbumId','','Title','','ArtistId',''], + As == ['ArtistId','','Name',''], + Ts == ['TrackId','','Name','','AlbumId','','MediaTypeId','','GenreId','', + 'Composer','','Milliseconds','','Bytes','','UnitPrice','']))) :- + ., + db_get_attributes_types(tracks,Ts), + db_get_attributes_types(artists,As). + +test(nb_atts, true((Als = 3, As = 2,Ts = 9 ))) :- + db_number_of_fields(albums,Als), + db_number_of_fields(tracks,Ts), + db_number_of_fields(artists,As). + +test(describe, all((Als == [tableinfo('AlbumId','INTEGER',1,1,null(0),''), + tableinfo('Title','NVARCHAR(160)',1,0,null(1),''), + tableinfo('ArtistId','INTEGER',1,0,null(2),'')]))) :- + db_describe(albums, Als). + +test(close) :- + db_close. + + + +:- end_tests(sqlite3). + +:- run_tests. +