diff --git a/C/blobs.c b/C/blobs.c index d04b5e083..2223478cc 100644 --- a/C/blobs.c +++ b/C/blobs.c @@ -17,14 +17,6 @@ /* for freeBSD9.1 */ #define _WITH_DPRINTF -#ifdef CONDA_BUILD -#undef HAVE_FMEMOPEN -#endif - -#ifdef __APPLE__ -#include "fmemopen.h" -#endif - #include "blobs.h" static blob_type_t unregistered_blob_atom = { diff --git a/C/c_interface.c b/C/c_interface.c index 805c3257d..3e554be13 100755 --- a/C/c_interface.c +++ b/C/c_interface.c @@ -2171,7 +2171,7 @@ X_API void YAP_EndConsult(int sno, int *osnop) { X_API Term YAP_Read(FILE *f) { Term o; - int sno = Yap_FileStream(f, NULL, TermNil, Input_Stream_f); + int sno = Yap_FileStream(f, NULL, TermNil, Input_Stream_f, NULL); BACKUP_MACHINE_REGS(); o = Yap_read_term(sno, TermNil, 1); @@ -2199,7 +2199,7 @@ X_API Term YAP_ReadClauseFromStream(int sno) { X_API void YAP_Write(Term t, FILE *f, int flags) { BACKUP_MACHINE_REGS(); - int sno = Yap_FileStream(f, NULL, TermNil, Output_Stream_f); + int sno = Yap_FileStream(f, NULL, TermNil, Output_Stream_f, NULL); Yap_plwrite(t, GLOBAL_Stream + sno, 0, flags, GLOBAL_MaxPriority); Yap_ReleaseStream(sno); diff --git a/C/yap-args.c b/C/yap-args.c index 70e4769a6..c1a145fc8 100755 --- a/C/yap-args.c +++ b/C/yap-args.c @@ -319,6 +319,7 @@ static const char *find_directory(YAP_init_args *iap, const char *paths[], } int i = 0; while ((inp = paths[i++]) != NULL) { + printf("%s\n", inp); out[0] = '\0'; char *o = location(iap, inp, out), *no; if (o && o[0] && Yap_isDirectory(o)) { @@ -329,11 +330,14 @@ static const char *find_directory(YAP_init_args *iap, const char *paths[], int j = 0; while ((p = names[j++])) { char *io = o + s; + printf("-> %s\n", o); if ((no = location(iap, p, io)) && io[0] != '\0' && Yap_Exists(o)) return pop_output_text_stack(lvl, realpath(o, full)); } - } else + } else { + printf("-> %s\n", o); return pop_output_text_stack(lvl, o); + } } } pop_text_stack(lvl); diff --git a/CMakeLists.txt b/CMakeLists.txt index 29e47171a..15704642f 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -209,21 +209,17 @@ disallow_intree_builds() # set(CMAKE_BUILD_TYPE Debug) -if (ANACONDA) +if ($ENV{CONDA_BUILD}x STREQUAL "1x" ) set(CMAKE_LIBRARY_ARCHITECTURE $ENV{PREFIX}) - set(CMAKE_PREFIX_PATH $ENV{PREFIX} $ENV{SYS_PREFIX}) - set( PATH $ENV{PREFIX}/bin $ENV{SYS_PREFIX}/bin ${PATH} ) - set( PYTHON_EXECUTABLE "$ENV{PYTHON}") + set(CMAKE_PREFIX_PATH $ENV{PREFIX}) set( R_COMMAND "$ENV{R}") -# set(CMAKE_INCLUDE_PATH $ENV{SYS_PREFIX}/include ${CMAKE_INCLUDE_PATH} ) -#set(CMAKE_LIBRARY_PATH $ENV{SYS_PREFIX}/lib $ENV{SYS_PREFIX}/lib ${CMAKE_LIBRARY_PATH}) -# set(ENV{PATH} PATH $ENV{PREFIX}/bin $ENV{SYS_PREFIX}/bin $ENV{PATH}) -# set(PATH $ENV{PATH} ${PATH}) - #set( CMAKE_INSTALL_FULL_PREFIX $ENV{PREFIX} ) - set( PYTHON_LIBRARY $ENV{PREFIX}/lib/libpython$ENV{PY_VER}m$ENV{SHLIB_EXT}) - set( PYTHON_INCLUDE_DIR $ENV{PREFIX}/include/python$ENV{PY_VER}m) -set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS CONDA_BUILD=1) + set_property(DIRECTORY APPEND PROPERTY COMPILE_DEFINITIONS CONDA_BUILD=1) + list (APPEND CMAKE_REQUIRED_INCLUDES + ${PREFIX}/include + ${SYS_PREFIX}/include + ) set(YAP_IS_MOVABLE 1) + endif() ADD_CUSTOM_TARGET(run_install COMMAND ${CMAKE_MAKE_PROGRAM} install) @@ -304,6 +300,12 @@ find_package(GMP) list(APPEND YAP_SYSTEM_OPTIONS big_numbers) + +if (GMP_FOUND) + #config.h needs this (TODO: change in code latter) + include_directories(${GMP_INCLUDE_DIRS}) +endif (GMP_FOUND) + include(FindReadline) List(APPEND YAP_SYSTEM_OPTIONS readline) @@ -312,6 +314,13 @@ List(APPEND YAP_SYSTEM_OPTIONS readline) # # ADD_SUBDIRECTORY(console/terminal) +if (READLINE_FOUND) + include_directories(${READLINE_INCLUDE_DIR}) + # required for configure + list(APPEND CMAKE_REQUIRED_LIBRARIES ${READLINE_LIBRARIES}) + list(APPEND CMAKE_REQUIRED_INCLUDES ${READLINE_INCLUDE_DIR}) +endif () + #MPI STUFF # library/mpi/mpi.c library/mpi/mpe.c @@ -539,6 +548,16 @@ add_corelib( # Sets the name of the library. ${YLIBS} ) +if (GMP_FOUND) + target_link_libraries(libYap ${GMP_LIBRARIES}) +endif (GMP_FOUND) + +if (READLINE_FOUND) + target_link_libraries(libYap ${READLINE_LIBRARIES}) + # required for configure + +endif () + if (WIN32) target_link_libraries(libYap ${WINDLLS}) if (PYTHON_INCLUDE_DIRS AND PYTHON_LIBRARIES) @@ -548,20 +567,6 @@ endif (WIN32) target_link_libraries(libYap m) -if (GMP_FOUND) - #config.h needs this (TODO: change in code latter) - include_directories(${GMP_INCLUDE_DIRS}) - target_link_libraries(libYap ${GMP_LIBRARIES}) -endif (GMP_FOUND) - -if (READLINE_FOUND) - include_directories(${READLINE_INCLUDE_DIR}) - target_link_libraries(libYap ${READLINE_LIBRARIES}) - # required for configure - list(APPEND CMAKE_REQUIRED_LIBRARIES ${READLINE_LIBRARIES}) - list(APPEND CMAKE_REQUIRED_INCLUDES ${READLINE_INCLUDE_DIR}) -endif () - set(YAP_STARTUP startup.yss) set(YAP_BOOTFILE boot.yap ) diff --git a/cmake/Config.cmake b/cmake/Config.cmake index bf56773ad..f6681693b 100644 --- a/cmake/Config.cmake +++ b/cmake/Config.cmake @@ -403,6 +403,7 @@ check_function_exists( rl_insert_close HAVE_RL_INSERT_CLOSE ) check_function_exists( rl_reset_after_signal HAVE_RL_RESET_AFTER_SIGNAL ) check_function_exists( rl_set_keyboard_input_timeout HAVE_RL_SET_KEYBOARD_INPUT_TIMEOUT ) check_function_exists( rl_set_prompt HAVE_RL_SET_PROMPT) +check_function_exists( rl_set_signals HAVE_RL_SET_SIGNALS) check_symbol_exists( rl_catch_signals "stdio.h;readline/readline.h" HAVE_DECL_RL_CATCH_SIGNALS ) check_type_size( rl_completion_func_t RL_COMPLETION_FUNC_T ) check_symbol_exists( rl_done stdio.h;readline/readline.h HAVE_DECL_RL_DONE ) diff --git a/cmake/PackageDocs.cmake b/cmake/PackageDocs.cmake index 2dcce4fb5..d72d36345 100644 --- a/cmake/PackageDocs.cmake +++ b/cmake/PackageDocs.cmake @@ -1,4 +1,4 @@ -#get package NAME + #get package NAME get_filename_component( TMPD ${CMAKE_CURRENT_SOURCE_DIR} DIRECTORY ) diff --git a/cmake/python.cmake b/cmake/python.cmake index b4df26e2f..2b4aeac53 100644 --- a/cmake/python.cmake +++ b/cmake/python.cmake @@ -9,7 +9,9 @@ set (Python_ADDITIONAL_VERSIONS 3.7 3.6 ) #3.5 3.6 3.4 ) # PYTHONLIBS_VERSION_STRING - version of the Python libs found (since CMake 2.8.8) ## # -if (WIN320) + + # ensure the script is in your cmake module path +if (WIN32) set (PYTHONLIBS_FOUND YES CACHE BOOL "MINGW/MSYS2" FORCE ) set (PYTHON_LIBRARY C:/msys64/mingw64/lib/libpython3.6m.dll.a CACHE FILEPATH "MINGW/MSYS2" FORCE ) set (PYTHON_LIBRARIES C:/msys64/mingw64/lib/libpython3.5m.dll.a CACHE FILEPATH "MINGW/MSYS2" FORCE ) @@ -18,21 +20,25 @@ if (WIN320) set (PYTHON_EXECUTABLE C:/msys64/mingw64/bin/python3.exe CACHE FILEPATH "MINGW/MSYS2" FORCE ) set (PYTHONLIBS_VERSION_STRING 3.5 CACHE STRING "MINGW/MSYS2" FORCE ) +elseif ($ENV{CONDA_BUILD}x STREQUAL "1x") + + + set (PYTHONLIBS_FOUND YES CACHE BOOL "MINGW/MSYS2" FORCE ) +set( PYTHON_EXECUTABLE $ENV{PYTHON} CACHE FILEPATH "MINGW/MSYS2" FORCE ) +set( PYTHON_LIBRARIES $ENV{PYTHON_LIBRARIES} CACHE FILEPATH "MINGW/MSYS2" FORCE ) +set( PYTHON_INCLUDE_PATH $ENV{PYTHON_INCLUDE_DIRS} CACHE PATH "MINGW/MSYS2" FORCE ) +set( PYTHON_INCLUDE_DIRS $ENV{PYTHON_INCLUDE_DIRS} CACHE PATH "MINGW/MSYS2" FORCE ) + set (PYTHONLIBS_VERSION_STRING $ENV{PY_VER} CACHE STRING "MINGW/MSYS2" FORCE ) + list (APPEND CMAKE_REQUIRED_INCLUDES + ${PYTHON_INCLUDE_PATH}) + else() find_package(PythonInterp) - find_package(PythonLibs) - - endif() -include_directories( BEFORE ${PYTHON_INCLUDE_DIRS} ) - -LIST( APPEND -CMAKE_REQUIRED_INCLUDES ${PYTHON_INCLUDE_DIRS} ${CMAKE_REQUIRED_INCLUDES} ${GMP_INCLUDE_DIRS}) - check_include_file(Python.h HAVE_PYTHON_H) IF (PYTHONLIBS_FOUND) add_subDIRECTORY (packages/python) -ENDIF() +ENDIF() \ No newline at end of file diff --git a/config.h.cmake b/config.h.cmake index 333d978ac..b55ff4772 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -416,6 +416,9 @@ function. */ #ifndef HAVE_FMEMOPEN #cmakedefine HAVE_FMEMOPEN ${HAVE_FMEMOPEN} #endif +#if CONDA_BUILD +#undef HAVE_FMEMOPEN +#endif /* Define to 1 if you have the `fpclass' function. */ #ifndef HAVE_FPCLASS @@ -978,6 +981,10 @@ function. */ #ifndef HAVE_OPEN_MEMSTREAM #cmakedefine HAVE_OPEN_MEMSTREAM ${HAVE_OPEN_MEMSTREAM} #endif +#if CONDA_BUILD +#undef HAVE_OPEN_MEMSTREAM +#endif + /* Define to 1 if you have the `opendir' function. */ #ifndef HAVE_OPENDIR diff --git a/info/build.sh b/info/build.sh index 8c5c1ddce..98ccbf15e 100644 --- a/info/build.sh +++ b/info/build.sh @@ -1,11 +1,13 @@ #!/bin/bash -export MACOSX_DEPLOYMENT_TARGET=10.9 +export MACOSX_DEPLOYMENT_TARGET=10.12 export CMAKE_BUILD_TYPE=Debug export CMAKE=$PREFIX/bin/cmake export MAKE=$PREFIX/bin/make export GENERATOR="-GNinja" export PATH=$PREFIX/bin:$SYS_PREFIX/bin:$PATH +export PYTHON_INCLUDE_DIRS=$($PYTHON -c "import sysconfig; print(sysconfig.get_config_var('INCLUDEPY'))") +export PYTHON_LIBRARIES=$($PYTHON -c "import sysconfig, os.path; print(os.path.join(sysconfig.get_config_var('LIBDIR'),sysconfig.get_config_var('LDLIBRARY')))") mkdir $PREFIX/conda cd $PREFIX/conda @@ -13,7 +15,7 @@ cd $PREFIX/conda $CMAKE --build=. --target=install \ -DCMAKE_BUILD_TYPE=Debug \ -DCMAKE_INSTALL_PREFIX="$PREFIX" \ - $RECIPE_DIR/.. + $RECIPE_DIR/.. make -j install diff --git a/info/meta.yaml b/info/meta.yaml index 46a8959fa..a7978e72b 100644 --- a/info/meta.yaml +++ b/info/meta.yaml @@ -1,6 +1,6 @@ package: name: yap4py - version: 1.8.0 + version: 6.4.0 requirements: ignore_prefix_files: @@ -16,12 +16,15 @@ requirements: - notebook - pkgconfig - make + - libxml2 run: - jupyterlab + - python - readline - gmp - r - notebook + - libxml2 about: home: http://www.github.com/vscosta/yap-6.3.git license: LGPL2 diff --git a/os/YapIOConfig.h.cmake b/os/YapIOConfig.h.cmake index 2d0701eea..9f5a87a76 100644 --- a/os/YapIOConfig.h.cmake +++ b/os/YapIOConfig.h.cmake @@ -110,3 +110,8 @@ you don't. */ #ifndef HAVE_RL_SET_PROMPT #cmakedefine HAVE_RL_SET_PROMPT ${HAVE_RL_SET_PROMPT} #endif + +/* Define to 1 if you have the `rl_set_signals' function. */ +#ifndef HAVE_RL_SET_SIGNALS +#cmakedefine HAVE_RL_SET_SIGNALS ${HAVE_RL_SET_SIGNALS} +#endif diff --git a/os/alias.c b/os/alias.c index b0dabeb32..96c8dd97d 100644 --- a/os/alias.c +++ b/os/alias.c @@ -224,28 +224,7 @@ Yap_SetAlias (Atom arg, int sno) while (aliasp < aliasp_max) { // replace alias if (aliasp->name == arg) { - Int alno = aliasp-GLOBAL_FileAliases; aliasp->alias_stream = sno; - if (!(GLOBAL_Stream[sno].status & - (Null_Stream_f|InMemory_Stream_f|Socket_Stream_f)) && - !GLOBAL_Stream[sno].vfs) { - switch(alno) { - case 0: - Yap_stdin = GLOBAL_Stream[sno].file; - break; - case 1: - Yap_stdout = GLOBAL_Stream[sno].file; - break; - case 2: - Yap_stderr = GLOBAL_Stream[sno].file; -#if HAVE_SETBUF - setvbuf (GLOBAL_Stream[sno].file, NULL, _IONBF, 0); -#endif /* HAVE_SETBUF */ - break; - default: - break; - } - } return; } aliasp++; @@ -272,17 +251,6 @@ Yap_DeleteAliases (int sno) /* get back to std streams, but keep alias around */ Int alno = aliasp-GLOBAL_FileAliases; new_aliasp->alias_stream = alno; - switch(alno) { - case 0: - Yap_stdin = stdin; - break; - case 1: - Yap_stdout = stdout; - break; - case 2: - Yap_stderr = stderr; - break; /* just put something here */ - } new_aliasp++; } else { GLOBAL_NOfFileAliases--; diff --git a/os/iopreds.c b/os/iopreds.c index 8193b4c8b..69bb81696 100644 --- a/os/iopreds.c +++ b/os/iopreds.c @@ -1091,7 +1091,7 @@ if (st-> file == NULL) { } } -bool Yap_initStream(int sno, FILE *fd, const char *name, Term file_name, + bool Yap_initStream(int sno, FILE *fd, const char *name, Term file_name, encoding_t encoding, stream_flags_t flags, Atom open_mode, void *vfs) { StreamDesc *st = &GLOBAL_Stream[sno]; @@ -1326,7 +1326,6 @@ return false; } #endif // __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "open %s", fname); - Yap_DefaultStreamOps(st); if (needs_bom && !write_bom(sno, st)) { return false; } else if (open_mode == AtomRead && !avoid_bom) { @@ -1523,6 +1522,7 @@ int Yap_OpenStream(const char *fname, const char *io_mode, Term user_name) { st = GLOBAL_Stream + sno; // read, write, append st->file = NULL; + st->status = 0; fname = Yap_VF(fname); if ((vfsp = vfs_owner(fname)) != NULL ) { if (!vfsp->open(vfsp, sno, fname, io_mode)) { @@ -1558,20 +1558,21 @@ int Yap_OpenStream(const char *fname, const char *io_mode, Term user_name) { at = AtomWrite; flags |= Output_Stream_f; } - } else { + } + if (strchr(io_mode, 'r')) { at = AtomRead; flags |= Input_Stream_f; } if (strchr(io_mode, 'b')) { flags |= Binary_Stream_f; } - Yap_initStream(sno, st->file, fname, user_name, LOCAL_encoding, flags, at, NULL); + Yap_initStream(sno, st->file, fname, user_name, LOCAL_encoding, flags, at, vfsp); __android_log_print(ANDROID_LOG_INFO, "YAPDroid", "exists %s <%d>", fname, sno); return sno; } -int Yap_FileStream(FILE *fd, char *name, Term file_name, int flags) { +int Yap_FileStream(FILE *fd, char *name, Term file_name, int flags, VFS_t *vfsp) { CACHE_REGS int sno; Atom at; @@ -1587,28 +1588,10 @@ int Yap_FileStream(FILE *fd, char *name, Term file_name, int flags) { at = AtomWrite; } else at = AtomRead; - Yap_initStream(sno, fd, name, file_name, LOCAL_encoding, flags, at, NULL); + Yap_initStream(sno, fd, name, file_name, LOCAL_encoding, flags, at, vfsp); return sno; } -int FileStream(FILE *fd, char *name, Term file_name, int flags) { - int sno; - Atom at; - - sno = GetFreeStreamD(); - if (sno < 0) - return (PlIOError(RESOURCE_ERROR_MAX_STREAMS, MkAtomTerm(Yap_LookupAtom(name)), - "new stream not available for opening")); - if (flags & Output_Stream_f) { - if (flags & Append_Stream_f) - at = AtomAppend; - else - at = AtomWrite; - } else - at = AtomRead; - Yap_initStream(sno, fd, name, file_name, LOCAL_encoding, flags, at, NULL); - return sno; -} #define CheckStream(arg, kind, msg) \ CheckStream__(__FILE__, __FUNCTION__, __LINE__, arg, kind, msg) @@ -1754,13 +1737,13 @@ static Int close1 /** @pred close(+ _S_) is iso */ (USES_REGS1) { /* '$close'(+GLOBAL_Stream) */ - Int sno = CheckStream( + int sno = CheckStream( ARG1, (Input_Stream_f | Output_Stream_f | Socket_Stream_f), "close/2"); if (sno < 0) - return (FALSE); + return false; if (sno <= StdErrStream) { UNLOCK(GLOBAL_Stream[sno].streamlock); - return TRUE; + return true; } Yap_CloseStream(sno); UNLOCK(GLOBAL_Stream[sno].streamlock); diff --git a/os/iopreds.h b/os/iopreds.h index 753df467e..3d88036c7 100644 --- a/os/iopreds.h +++ b/os/iopreds.h @@ -267,10 +267,6 @@ inline static Term CurrentPositionToTerm(void) { return Yap_MkApplTerm(FunctorStreamPos, 5, sargs); } -extern FILE *Yap_stdin; -extern FILE *Yap_stdout; -extern FILE *Yap_stderr; - char *Yap_MemExportStreamPtr(int sno); diff --git a/os/readline.c b/os/readline.c index ba93187d3..5d8727dc0 100644 --- a/os/readline.c +++ b/os/readline.c @@ -253,8 +253,10 @@ void Yap_ReadlineFlush(int sno) { } } -bool Yap_readline_clear_pending_input(StreamDesc *s) { +bool Yap_readline_clear_pending_input(StreamDesc *s) { +#if HAVE_RL_CLEAR_PENDING_INPUT rl_clear_pending_input(); +#endif if (s->u.irl.buf) { free((void *)s->u.irl.buf); } @@ -307,6 +309,11 @@ bool Yap_InitReadline(Term enable) { return Yap_ReadlineOps(GLOBAL_Stream + StdInStream); } +#if !HAVE_RL_SET_SIGNALS +#define rl_clear_signals() +#define rl_set_signals() +#endif + static bool getLine(int inp) { CACHE_REGS rl_instream = GLOBAL_Stream[inp].file; diff --git a/os/streams.c b/os/streams.c index 70017ee4e..384854c2e 100644 --- a/os/streams.c +++ b/os/streams.c @@ -960,10 +960,16 @@ static void CloseStream(int sno) { CACHE_REGS //fflush(NULL); - if (GLOBAL_Stream[sno].file && - !(GLOBAL_Stream[sno].status & - (Null_Stream_f | Socket_Stream_f | InMemory_Stream_f | Pipe_Stream_f))) - fclose(GLOBAL_Stream[sno].file); + VFS_t *me; + if ((me = GLOBAL_Stream[sno].vfs) != NULL) { + if (me->close) { + me->close(sno); + } + GLOBAL_Stream[sno].vfs = NULL; + } else if (GLOBAL_Stream[sno].file && + !(GLOBAL_Stream[sno].status & + (Null_Stream_f | Socket_Stream_f | InMemory_Stream_f | Pipe_Stream_f))) + fclose(GLOBAL_Stream[sno].file); #if HAVE_SOCKET else if (GLOBAL_Stream[sno].status & (Socket_Stream_f)) { Yap_CloseSocket(GLOBAL_Stream[sno].u.socket.fd, @@ -1001,7 +1007,8 @@ void Yap_ReleaseStream(int sno) { CACHE_REGS GLOBAL_Stream[sno].status = Free_Stream_f; GLOBAL_Stream[sno].user_name = 0; - GLOBAL_Stream[sno].vfs = NULL; + + GLOBAL_Stream[sno].vfs = NULL; GLOBAL_Stream[sno].file = NULL; Yap_DeleteAliases(sno); if (LOCAL_c_input_stream == sno) { diff --git a/os/yapio.h b/os/yapio.h index d30542aca..b8fe01516 100644 --- a/os/yapio.h +++ b/os/yapio.h @@ -87,7 +87,7 @@ extern int Yap_PlFGetchar(void); extern int Yap_GetCharForSIGINT(void); extern Int Yap_StreamToFileNo(Term); extern int Yap_OpenStream(const char*, const char*, Term); -extern int Yap_FileStream(FILE*, char *, Term, int); +extern int Yap_FileStream(FILE*, char *, Term, int, VFS_t *); extern char *Yap_TermToBuffer(Term t, encoding_t encoding, int flags); extern char *Yap_HandleToString(yhandle_t l, size_t sz, size_t *length, encoding_t *encoding, int flags); diff --git a/packages/python/CMakeLists.txt b/packages/python/CMakeLists.txt index 30dafe151..b44c66a60 100644 --- a/packages/python/CMakeLists.txt +++ b/packages/python/CMakeLists.txt @@ -2,12 +2,11 @@ #CHECK: PythonLibs, changed to work in WIN32 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) -message( ${GMP_INCLUDE_DIRS} ) -include_directories( ${CMAKE_BINARY_DIR} -${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/os ${GMP_INCLUDE_DIRS} ) +include_directories( ${CMAKE_BINARY_DIR} ${PYTHON_INCLUDE_DIRS} +${CMAKE_SOURCE_DIR}/include ${CMAKE_SOURCE_DIR}/os ) #talk to python.pl add_lib(YAPPython pyload.c ${PYTHON_HEADERS} ) diff --git a/packages/python/python.c b/packages/python/python.c index ac741eef0..c7337a456 100644 --- a/packages/python/python.c +++ b/packages/python/python.c @@ -41,13 +41,15 @@ StreamDesc *st = YAP_RepStreamFromId(sno); if (stream == Py_None) return NULL; Py_INCREF(stream); - st->vfs_handle = stream; + st->u.private_data = stream; st->vfs = me; st->status = Append_Stream_f | Output_Stream_f; + Yap_DefaultStreamOps(st); return stream; } static bool py_close(int sno) { + return true; StreamDesc *s = YAP_GetStreamFromId(sno); PyObject *fclose = PyObject_GetAttrString(s->u.private_data, "close"); PyObject *rc = PyObject_CallObject(fclose, NULL); @@ -67,7 +69,7 @@ static int py_put(int sno, int ch) { PyObject *fput = PyObject_GetAttrString(st->u.private_data, "write"); s[0] = ch; s[1] = '\0'; - PyObject_CallFunctionObjArgs(fput, PyBytes_FromString(s), NULL); + PyObject_CallFunctionObjArgs(fput, PyUnicode_FromString(s), NULL); return ch; } diff --git a/packages/python/swig/__init__.py b/packages/python/swig/__init__.py deleted file mode 100644 index 3d74eafde..000000000 --- a/packages/python/swig/__init__.py +++ /dev/null @@ -1,31 +0,0 @@ -import imp -import os -import ctypes -import glob -import os.path -import sys -import platform - -global yap_lib_path -yap_lib_path = os.path.dirname(__file__) - -if @CONDA_BUILD@ == "1": - # do not do nothing -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 = os.path.join(yap_lib_path,dll) - dll = os.path.abspath(dll) - ctypes.CDLL(dll, mode=ctypes.RTLD_GLOBAL) - if platform.system() == 'Apple': - load('libYap.dylib') - load('libPy4YAP.dylib' ) - else: - load('libYap.os') - load('libPy4YAP.os' ) - \ No newline at end of file diff --git a/packages/python/swig/yap4py/__init__.py b/packages/python/swig/yap4py/__init__.py deleted file mode 100644 index 3a6bbafc8..000000000 --- a/packages/python/swig/yap4py/__init__.py +++ /dev/null @@ -1,31 +0,0 @@ -import imp -import os -import ctypes -import glob -import os.path -import platform -import sys - -global yap_lib_path -yap_lib_path = os.path.dirname(__file__) - -if platform.system() == 'Windows': - def load( dll ): - dll = glob.glob(os.path.join(yap_lib_path,dll))[0] - dll = os.path.abspath(dll) - ctypes.WinDLL(dll) -elseif 
platform.system() == 'Apple': - def load( dll ): - dll = glob.glob(os.path.join(yap_lib_path,dll))[0] - dll = os.path.abspath(dll) - ctypes.CDLL(dll) - load('libYap.dylib') - load('libPy4YAP.dylib') -else: - def load( dll ): - dll = glob.glob(os.path.join(yap_lib_path,dll))[0] - dll = os.path.abspath(dll) - ctypes.CDLL(dll) - load('libYap.so') - load('libPy4YAP.so') - \ No newline at end of file diff --git a/packages/python/swig/yap4py/__init__.py.in b/packages/python/swig/yap4py/__init__.py.in index cb93233af..26f8dd79c 100644 --- a/packages/python/swig/yap4py/__init__.py.in +++ b/packages/python/swig/yap4py/__init__.py.in @@ -14,7 +14,7 @@ if platform.system() == 'Windows': dll = glob.glob(os.path.join(yap_lib_path,dll))[0] dll = os.path.abspath(dll) ctypes.WinDLL(dll) -elif platform.system() == 'Apple': +elif platform.system() == 'Darwin': def load( dll ): dll = glob.glob(os.path.join(yap_lib_path,dll))[0] dll = os.path.abspath(dll) @@ -28,4 +28,4 @@ else: ctypes.CDLL(dll) load('libYap.so') load('libPy4YAP.so') - \ No newline at end of file + diff --git a/packages/python/swig/yap4py/yapi.py b/packages/python/swig/yap4py/yapi.py index eba1e28d8..363c0be6d 100644 --- a/packages/python/swig/yap4py/yapi.py +++ b/packages/python/swig/yap4py/yapi.py @@ -183,6 +183,7 @@ class YAPShell: self.port = "call" # launch the query while self.answer(q): + print( self.port ) if self.port == "exit": # done q.close() diff --git a/packages/python/yap_kernel/yap_ipython/prolog/jupyter.yap b/packages/python/yap_kernel/yap_ipython/prolog/jupyter.yap index cc276a68b..14c5f4c0f 100644 --- a/packages/python/yap_kernel/yap_ipython/prolog/jupyter.yap +++ b/packages/python/yap_kernel/yap_ipython/prolog/jupyter.yap @@ -15,13 +15,13 @@ jupyter_query(Self, Cell) :- 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). + open('//python/sys.stdout', append, _Error, [alias(jupe)]), + set_prolog_flag(user_output, _Output), + set_prolog_flag(user_error, _Error). exit_cell(_Self) :- - close( jupo), - close( jupe). + close( user_output), + close( user_error). completions(S, Self) :- @@ -83,20 +83,20 @@ arg([l|_]). file_or_library(F,C) :- libsym(C0), - atom_cooncat(F,C,Co). + atom_cooncat(F,C,C0). file_or_library(F,C) :- - check_file(F0,C). - + check_file(F,C). + check_file(F0,C) :- atom_concat('\'',F,F0), !, absolute_file_name( F, FF, [access(none)] ), - atom_concat( F, '*' , Pat), + atom_concat( FF, '*' , 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), + atom_concat( F0, '*' , Pat), absolute_file_name( Pat, C0, [glob(true)] ), atom_concat(Pat,C,C0). @@ -117,7 +117,7 @@ predicate(N,P,A) :- current_predicate(P0/A), atom_concat(N,P,P0). -cont(0, F, P, P0)- :- +cont(0, F, P, P0) :- atom_concat( F, P, P0 ). cont( _, F, P, PB ):- atom_concat( [F, P, '('], PB ). diff --git a/packages/real/CMakeLists.txt b/packages/real/CMakeLists.txt index 5d9015642..07b777fba 100644 --- a/packages/real/CMakeLists.txt +++ b/packages/real/CMakeLists.txt @@ -46,9 +46,9 @@ include_directories ( ${R_INCLUDE_DIR} ) - set (CMAKE_REQUIRED_INCLUDES + list (APPEND CMAKE_REQUIRED_INCLUDES ${CMAKE_CURRENT_BINARY_DIR} - ${LIBR_INCLUDE_DIRS} + ${R_INCLUDE_DIR} ) add_lib(real ${REAL_SOURCES}) diff --git a/pl/boot.yap b/pl/boot.yap index 437f8cc98..5c683e0c0 100644 --- a/pl/boot.yap +++ b/pl/boot.yap @@ -1279,6 +1279,7 @@ not(G) :- \+ '$execute'(G). '$call'([A|B], _, _, M) :- !, '$csult'([A|B], M). '$call'(G, _CP, _G0, CurMod) :- +/* ( '$is_metapredicate'(G,CurMod) -> @@ -1288,7 +1289,8 @@ not(G) :- \+ '$execute'(G). ; NG = G ), - '$execute0'(NG, CurMod). + */ + '$execute0'(G, CurMod). '$check_callable'(V,G) :- var(V), !, '$do_error'(instantiation_error,G). diff --git a/pl/debug.yap b/pl/debug.yap index a6175aee0..996e68e13 100644 --- a/pl/debug.yap +++ b/pl/debug.yap @@ -593,7 +593,7 @@ be lost. !, fail. '$re_trace_query'(forward(redo,G0), G, M, GoalNumber, H) :- - GoalNumber >= G0, + GoalNumber > G0, !, catch( '$trace_goal'(G, M, GoalNumber, H),