From 23d07e2d78cf285e32b6f42c635edf506ff70c78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Tue, 9 Nov 2010 16:39:34 +0000 Subject: [PATCH 1/7] fix chr install (from Keri) --- configure.in | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/configure.in b/configure.in index 920d01acd..3bc0c1d36 100755 --- a/configure.in +++ b/configure.in @@ -924,7 +924,7 @@ case "$target_os" in then YAPLIB_LD="\$(CC) -shared" EXTRA_LIBS_FOR_DLLS="$EXTRA_LIBS_FOR_DLLS -L\$(abs_top_builddir) -lYap -Wl,-R,\$(YAPLIBDIR) -Wl,-R,\$(LIBDIR)" - INSTALL_ENV="LD_LIBRARY_PATH=\$(DESTDIR)\$(LIBDIR): YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR) YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)" + INSTALL_ENV="LD_LIBRARY_PATH=\$(DESTDIR)\$(LIBDIR):\$(DESTDIR)\$(YAPLIBDIR): YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR) YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)" PRE_INSTALL_ENV="LD_LIBRARY_PATH=\$(abs_top_builddir)" else YAPLIB_LD="\$(CC)" @@ -946,7 +946,7 @@ case "$target_os" in DYNYAPLIB=libYap."$SO" EXTRA_LIBS_FOR_DLLS="$EXTRA_LIBS_FOR_DLLS -L\$(abs_top_builddir) -lYap -Wl,-R,\$(YAPLIBDIR) -Wl,-R,\$(LIBDIR)" PRE_INSTALL_ENV="LD_LIBRARY_PATH=\$(abs_top_builddir)" - INSTALL_ENV="LD_LIBRARY_PATH=\$(DESTDIR)\$(LIBDIR): YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR) YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)" + INSTALL_ENV="LD_LIBRARY_PATH=\$(DESTDIR)\$(LIBDIR):\$(DESTDIR)\$(YAPLIBDIR): YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR) YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)" ;; *hpux*) #do not use the first memory quadrant @@ -985,7 +985,7 @@ case "$target_os" in DYNYAPLIB=libYap."$SO" EXTRA_LIBS_FOR_DLLS="$EXTRA_LIBS_FOR_DLLS -L\$(abs_top_builddir) -lYap -Wl,-R,\$(YAPLIBDIR) -Wl,-R,\$(LIBDIR)" PRE_INSTALL_ENV="LD_LIBRARY_PATH=\$(abs_top_builddir)" - INSTALL_ENV="LD_LIBRARY_PATH=\$(DESTDIR)\$(LIBDIR): YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR) YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)" + INSTALL_ENV="LD_LIBRARY_PATH=\$(DESTDIR)\$(LIBDIR):\$(DESTDIR)\$(YAPLIBDIR): YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR) YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)" ;; *aix*) # To actually use dlls in AIX I'd need to build YAP as a DLL first. @@ -998,7 +998,7 @@ case "$target_os" in DYNYAPLIB=libYap."$SO" EXTRA_LIBS_FOR_DLLS="$EXTRA_LIBS_FOR_DLLS -L\$(abs_top_builddir) -lYap -Wl,-R,\$(YAPLIBDIR) -Wl,\$(LIBDIR)" PRE_INSTALL_ENV="LD_LIBRARY_PATH=\$(abs_top_builddir)" - INSTALL_ENV="LD_LIBRARY_PATH=\$(DESTDIR)\$(LIBDIR): YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR) YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)" + INSTALL_ENV="LD_LIBRARY_PATH=\$(DESTDIR)\$(LIBDIR):\$(DESTDIR)\$(YAPLIBDIR): YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR) YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)" ;; *osf*) if ${use_condor} = no @@ -1016,7 +1016,7 @@ dnl Linux has both elf and a.out, in this case we found elf DYNYAPLIB=libYap."$SO" EXTRA_LIBS_FOR_DLLS="$EXTRA_LIBS_FOR_DLLS -L\$(abs_top_builddir) -lYap -Wl,-R,\$(YAPLIBDIR) -Wl,-R,\$(LIBDIR)" PRE_INSTALL_ENV="LD_LIBRARY_PATH=\$(abs_top_builddir)" - INSTALL_ENV="LD_LIBRARY_PATH=\$(DESTDIR)\$(LIBDIR): YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR) YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)" + INSTALL_ENV="LD_LIBRARY_PATH=\$(DESTDIR)\$(LIBDIR):\$(DESTDIR)\$(YAPLIBDIR): YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR) YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)" ;; *irix6*) SHLIB_CFLAGS="$CFLAGS" @@ -1030,7 +1030,7 @@ dnl Linux has both elf and a.out, in this case we found elf DYNYAPLIB=libYap."$SO" EXTRA_LIBS_FOR_DLLS="$EXTRA_LIBS_FOR_DLLS -L\$(abs_top_builddir) -lYap -Wl,-R,\$(YAPLIBDIR) -Wl,-R,\$(LIBDIR)" PRE_INSTALL_ENV="LD_LIBRARY_PATH=\$(abs_top_builddir)" - INSTALL_ENV="LD_LIBRARY_PATH=\$(DESTDIR)\$(LIBDIR): YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR) YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)" + INSTALL_ENV="LD_LIBRARY_PATH=\$(DESTDIR)\$(LIBDIR):\$(DESTDIR)\$(YAPLIBDIR): YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR) YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)" ;; *darwin*) if test ${use_dlcompat} = yes @@ -1051,7 +1051,7 @@ dnl Linux has both elf and a.out, in this case we found elf SHLIB_LD="$CC -dynamiclib" SHLIB_CXX_LD="$CXX -dynamiclib" EXTRA_LIBS_FOR_DLLS="$EXTRA_LIBS_FOR_DLLS -L\$(abs_top_builddir) -lYap -Wl,-install_name,\$(YAPLIBDIR)/\$@" - INSTALL_ENV="DYLD_LIBRARY_PATH=\$(DESTDIR)\$(LIBDIR): YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR) YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)" + INSTALL_ENV="DYLD_LIBRARY_PATH=\$(DESTDIR)\$(LIBDIR):\$(DESTDIR)\$(YAPLIBDIR): YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR) YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)" else SHLIB_LD="$CC -dynamiclib -Wl,-undefined,dynamic_lookup" SHLIB_CXX_LD="$CXX -dynamiclib -Wl,-undefined,dynamic_lookup" @@ -1091,7 +1091,7 @@ dnl Linux has both elf and a.out, in this case we found elf DYNYAPLIB=libYap."$SO" EXTRA_LIBS_FOR_DLLS="$EXTRA_LIBS_FOR_DLLS -L\$(abs_top_builddir) -Wl,-R,\$(YAPLIBDIR)" PRE_INSTALL_ENV="LD_LIBRARY_PATH=\$(abs_top_builddir)" - INSTALL_ENV="LD_LIBRARY_PATH=\$(DESTDIR)\$(LIBDIR): YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR) YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)" + INSTALL_ENV="LD_LIBRARY_PATH=\$(DESTDIR)\$(LIBDIR):\$(DESTDIR)\$(YAPLIBDIR): YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR) YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)" ;; *solaris*) #an elf system @@ -1110,7 +1110,7 @@ dnl Linux has both elf and a.out, in this case we found elf YAPLIB_LD="\$(CC)" EXTRA_LIBS_FOR_DLLS="$EXTRA_LIBS_FOR_DLLS -L\$(abs_top_builddir) -lYap -Wl,-R,\$(YAPLIBDIR) -Wl,-R,\$(LIBDIR)" PRE_INSTALL_ENV="LD_LIBRARY_PATH=\$(abs_top_builddir)" - INSTALL_ENV="LD_LIBRARY_PATH=\$(DESTDIR)\$(LIBDIR): YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR) YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)" + INSTALL_ENV="LD_LIBRARY_PATH=\$(DESTDIR)\$(LIBDIR):\$(DESTDIR)\$(YAPLIBDIR): YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR) YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)" else EXTRA_LIBS_FOR_DLLS="$EXTRA_LIBS_FOR_DLLS -Wl,-R,\$(YAPLIBDIR) -Wl,-R,\$(LIBDIR)" PRE_INSTALL_ENV="" @@ -1165,7 +1165,7 @@ dnl Linux has both elf and a.out, in this case we found elf DYNYAPLIB=libYap."$SO" EXTRA_LIBS_FOR_DLLS="$EXTRA_LIBS_FOR_DLLS -L\$(abs_top_builddir) -lYap -Wl,-R,\$(YAPLIBDIR) -Wl,-R,\$(LIBDIR)" PRE_INSTALL_ENV="LD_LIBRARY_PATH=\$(abs_top_builddir)" - INSTALL_ENV="LD_LIBRARY_PATH=\$(DESTDIR)\$(LIBDIR): YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR) YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)" + INSTALL_ENV="LD_LIBRARY_PATH=\$(DESTDIR)\$(LIBDIR):\$(DESTDIR)\$(YAPLIBDIR): YAPSHAREDIR=\$(DESTDIR)\$(SHAREDIR) YAPLIBDIR=\$(DESTDIR)\$(YAPLIBDIR)" ;; esac From a2286354c8dcd9c88004b7175a1046493fb10646 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Mon, 22 Nov 2010 18:07:01 +0000 Subject: [PATCH 2/7] fix shared object stuff (obs from Roberto Bagnara). --- C/load_foreign.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/C/load_foreign.c b/C/load_foreign.c index 13c86b782..ead46aa76 100755 --- a/C/load_foreign.c +++ b/C/load_foreign.c @@ -261,7 +261,8 @@ Yap_ReOpenLoadForeign(void) while (f_code != NULL) { CurrentModule = f_code->module; if(Yap_ReLoadForeign(f_code->objs,f_code->libs,f_code->f,&InitProc)==LOAD_SUCCEEDED) { - (*InitProc)(); + if (InitProc) + (*InitProc)(); } f_code = f_code->next; } From 576d37510c67f9285bea5c0942272f10349aac32 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?V=C3=ADtor=20Santos=20Costa?= Date: Mon, 22 Nov 2010 18:22:53 +0000 Subject: [PATCH 3/7] fix ls/0. --- pl/utils.yap | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/pl/utils.yap b/pl/utils.yap index eb5f705b0..bf31e3640 100644 --- a/pl/utils.yap +++ b/pl/utils.yap @@ -220,9 +220,17 @@ cd :- ls :- getcwd(X), - system:directory_files(X, L), + '$load_system_ls'(X,L), '$do_print_files'(L). +'$load_system_ls'(X,L) :- + '$undefined'(directory_files(X, L), operating_system_support), + load_files(library(system),[silent(true)]), + fail. +'$load_system_ls'(X,L) :- + operating_system_support:directory_files(X, L). + + '$do_print_files'([]) :- nl. '$do_print_files'([F| Fs]) :- From f9cd010242beeca97efa6206b5ce2eaceba1df8f Mon Sep 17 00:00:00 2001 From: Vitor Santos Costa Date: Mon, 22 Nov 2010 21:47:17 +0000 Subject: [PATCH 4/7] do not reexecute function on restore if f_name is NULL. --- C/load_dl.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/C/load_dl.c b/C/load_dl.c index 5edeb56da..10b2b0e50 100755 --- a/C/load_dl.c +++ b/C/load_dl.c @@ -133,7 +133,7 @@ LoadForeign(StringList ofiles, StringList libs, ofiles->handle = handle; - if (!*init_proc) + if (proc_name && !*init_proc) *init_proc = (YapInitProc) dlsym(handle,proc_name); ofiles = ofiles->next; From 35100fe51534e9f4a9e3c1c4bde51044e035c379 Mon Sep 17 00:00:00 2001 From: Vitor Santos Costa Date: Wed, 24 Nov 2010 08:41:21 +0000 Subject: [PATCH 5/7] add interface to SWI's prolog_to_os_filename/2 --- pl/yio.yap | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/pl/yio.yap b/pl/yio.yap index 9a406d509..89d1510b1 100644 --- a/pl/yio.yap +++ b/pl/yio.yap @@ -1209,3 +1209,21 @@ with_output_to(Output, Command) :- atom_codes(Char, [Code]), '$codes_to_chars'(String0, String, Chars). +prolog_to_os_filename(Prolog, OS) :- + '$undefined'(swi_prolog_to_os_filename(Prolog, OS), system), + '$current_module'(Old, system), + load_foreign_files([libplstream], [], initIO), + '$current_module'(system, Old), + fail. +prolog_to_os_filename(Prolog, OS) :- + system:swi_prolog_to_os_filename(Prolog, OS). + + + + + + + + + + From bd59f1e908c25ccb8b5053eca5e0785661e5112a Mon Sep 17 00:00:00 2001 From: Vitor Santos Costa Date: Wed, 24 Nov 2010 08:42:26 +0000 Subject: [PATCH 6/7] process needs maplist (obs from Nicos). --- packages/clib/process.pl | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/clib/process.pl b/packages/clib/process.pl index 0e600a9eb..9950d38c7 100644 --- a/packages/clib/process.pl +++ b/packages/clib/process.pl @@ -45,6 +45,8 @@ :- use_module(library(option)). :- use_module(library(error)). +:- use_module(library(maplist)). + :- use_foreign_library(foreign(process)). /** Create processes and redirect I/O From 69cde79ba663191d4fc3245e503f9d30e13f7061 Mon Sep 17 00:00:00 2001 From: Vitor Santos Costa Date: Wed, 24 Nov 2010 08:44:03 +0000 Subject: [PATCH 7/7] PL_malloc and friends should call malloc, not Yap_Alloc --- include/SWI-Prolog.h | 4 ++-- library/yap2swi/yap2swi.c | 34 +++++++++++++++++++++++----------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/include/SWI-Prolog.h b/include/SWI-Prolog.h index d439a1ca6..5ccbdafd9 100755 --- a/include/SWI-Prolog.h +++ b/include/SWI-Prolog.h @@ -513,8 +513,8 @@ extern X_API int PL_recorded_external(char *, term_t); extern X_API int PL_erase_external(char *); extern X_API int PL_action(int,...); extern X_API void PL_on_halt(void (*)(int, void *), void *); -extern X_API void *PL_malloc(int); -extern X_API void *PL_realloc(void*,int); +extern X_API void *PL_malloc(size_t); +extern X_API void *PL_realloc(void*,size_t); extern X_API void PL_free(void *); extern X_API int PL_eval_expression_to_int64_ex(term_t t, int64_t *val); extern X_API void PL_cleanup_fork(void); diff --git a/library/yap2swi/yap2swi.c b/library/yap2swi/yap2swi.c index 7f4572cb1..aff9330bb 100755 --- a/library/yap2swi/yap2swi.c +++ b/library/yap2swi/yap2swi.c @@ -272,8 +272,8 @@ ensure_space(char **sp, size_t room, unsigned flags) { min += 512; if (flags & BUF_MALLOC) { - free(*sp); - *sp = malloc(room); + PL_free(*sp); + *sp = PL_malloc(room); return *sp; } else if (flags & BUF_RING) { for (i=1; i<= SWI_BUF_RINGS; i++) @@ -512,7 +512,7 @@ static int do_yap_putc(int sno, wchar_t ch) { UInt bufsize = putc_cur_lim-putc_cur_buf; UInt bufpos = putc_curp-putc_cur_buf; - if (!(putc_cur_buf = realloc(putc_cur_buf, bufsize+SWI_BUF_SIZE))) { + if (!(putc_cur_buf = PL_realloc(putc_cur_buf, bufsize+SWI_BUF_SIZE))) { /* we can+t go forever */ return FALSE; } @@ -564,7 +564,7 @@ X_API int PL_get_chars(term_t l, char **sp, unsigned flags) if ((flags & BUF_RING)) { tmp = alloc_ring_buf(); } else if ((flags & BUF_MALLOC)) { - tmp = malloc(SWI_BUF_SIZE); + tmp = PL_malloc(SWI_BUF_SIZE); } else { tmp = SWI_buffers[0]; } @@ -641,7 +641,7 @@ X_API int PL_get_chars(term_t l, char **sp, unsigned flags) } if (flags & BUF_MALLOC) { size_t sz = strlen(tmp); - char *nbf = malloc(sz+1); + char *nbf = PL_malloc(sz+1); if (!nbf) return 0; strncpy(nbf,tmp,sz+1); @@ -685,7 +685,7 @@ X_API int PL_get_wchars(term_t l, size_t *len, wchar_t **wsp, unsigned flags) } room = (sz+1)*sizeof(wchar_t); if (flags & BUF_MALLOC) { - *wsp = buf = (wchar_t *)malloc(room); + *wsp = buf = (wchar_t *)PL_malloc(room); } else if (flags & BUF_RING) { *wsp = (wchar_t *)alloc_ring_buf(); buf = (wchar_t *)ensure_space((char **)wsp, room, flags); @@ -3011,21 +3011,33 @@ PL_set_engine(PL_engine_t engine, PL_engine_t *old) X_API void * -PL_malloc(int sz) +PL_malloc(size_t sz) { - return (void *)Yap_AllocCodeSpace((long unsigned int)sz); + if ( sz == 0 ) + return NULL; + return (void *)malloc((long unsigned int)sz); } X_API void * -PL_realloc(void *ptr, int sz) +PL_realloc(void *ptr, size_t sz) { - return Yap_ReallocCodeSpace((char *)ptr,(long unsigned int)sz); + if (ptr) { + if (sz) { + return realloc((char *)ptr,(long unsigned int)sz); + } else { + free(ptr); + return NULL; + } + } else { + return PL_malloc(sz); + } } X_API void PL_free(void *obj) { - return Yap_FreeCodeSpace((char *)obj); + if (obj) + free(obj); } X_API int