From 253444d7ca4a040aab78abb6d0a4418e46a106e3 Mon Sep 17 00:00:00 2001 From: Vitor Santos Costa Date: Fri, 23 Oct 2009 09:09:16 +0100 Subject: [PATCH] support parms.h pass argv[0] --- C/init.c | 2 +- C/load_foreign.c | 6 ++--- C/save.c | 16 +++--------- C/sysbits.c | 8 +++--- H/Yap.h | 5 ---- Makefile.in | 56 +++++++++++++++++++++++++++++++--------- config.h.in | 2 ++ configure | 60 +++++++++++++++++++++++++++++++++++++++++++ configure.in | 19 ++++++++++++++ console/yap.c | 19 +++++++++++--- include/yap_structs.h | 2 ++ 11 files changed, 154 insertions(+), 41 deletions(-) diff --git a/C/init.c b/C/init.c index 5ef68a94e..90917a6e4 100644 --- a/C/init.c +++ b/C/init.c @@ -1295,7 +1295,7 @@ static void InitVersion(void) { Yap_PutValue(AtomVersionNumber, - MkAtomTerm(Yap_LookupAtom(YAP_VERSION))); + MkAtomTerm(Yap_LookupAtom(YAP_SVERSION))); #if defined MYDDAS_MYSQL || defined MYDDAS_ODBC Yap_PutValue(AtomMyddasVersionName, MkAtomTerm(Yap_LookupAtom(MYDDAS_VERSION))); diff --git a/C/load_foreign.c b/C/load_foreign.c index d042ed810..a872f5fd6 100755 --- a/C/load_foreign.c +++ b/C/load_foreign.c @@ -29,8 +29,8 @@ static char SccsId[] = "%W% %G%.2"; #include "Foreign.h" #if _WIN32 || defined(__CYGWIN__) -#ifndef SHLIB_SUFFIX -#define SHLIB_SUFFIX "dll" +#ifndef YAP_SHLIB_SUFFIX +#define YAP_SHLIB_SUFFIX ".dll" #endif #endif @@ -111,7 +111,7 @@ p_load_foreign(void) static Int p_obj_suffix(void) { - return(Yap_unify(Yap_StringToList(SHLIB_SUFFIX),ARG1)); + return(Yap_unify(TailOfTerm(Yap_StringToList(YAP_SHLIB_SUFFIX)),ARG1)); } void diff --git a/C/save.c b/C/save.c index 8eae21322..429e82672 100644 --- a/C/save.c +++ b/C/save.c @@ -364,7 +364,7 @@ put_info(int info, int mode) { char msg[256]; - sprintf(msg, "#!/bin/sh\nexec_dir=${YAPBINDIR:-%s}\nexec $exec_dir/yap $0 \"$@\"\n%cYAPV%s", BIN_DIR, 1, YAP_VERSION); + sprintf(msg, "#!/bin/sh\nexec_dir=${YAPBINDIR:-%s}\nexec $exec_dir/yap $0 \"$@\"\n%cYAP-%s", YAP_BINDIR, 1, YAP_SVERSION); mywrite(splfild, msg, strlen(msg) + 1); putout(Unsigned(info)); /* say whether we just saved the heap or everything */ @@ -631,7 +631,7 @@ check_header(CELL *info, CELL *ATrail, CELL *AStack, CELL *AHeap) } } while (pp[0] != 1); /* now check the version */ - sprintf(msg, "YAPV%s", YAP_VERSION); + sprintf(msg, "YAP-%s", YAP_SVERSION); { int count = 0, n, to_read = Unsigned(strlen(msg) + 1); while (count < to_read) { @@ -642,14 +642,6 @@ check_header(CELL *info, CELL *ATrail, CELL *AStack, CELL *AHeap) count += n; } } - if (pp[0] != 'Y' && pp[1] != 'A' && pp[0] != 'P') { - Yap_ErrorMessage = Yap_ErrorSay; - strncpy(Yap_ErrorMessage, "saved state ", MAX_ERROR_MSG_SIZE); - strncat(Yap_ErrorMessage, Yap_FileNameBuf, MAX_ERROR_MSG_SIZE); - strncat(Yap_ErrorMessage, " failed to match `YAP\'", MAX_ERROR_MSG_SIZE); - Yap_Error_TYPE = CONSISTENCY_ERROR; - return FAIL_RESTORE; - } if (strcmp(pp, msg) != 0) { Yap_ErrorMessage = Yap_ErrorSay; strncpy(Yap_ErrorMessage, "saved state ", MAX_ERROR_MSG_SIZE); @@ -1502,8 +1494,8 @@ OpenRestore(char *inpf, char *YapLibDir, CELL *Astate, CELL *ATrail, CELL *AStac } } #endif - if (LIB_DIR != NULL) { - cat_file_name(Yap_FileNameBuf, LIB_DIR, inpf, YAP_FILENAME_MAX); + if (YAP_LIBDIR != NULL) { + cat_file_name(Yap_FileNameBuf, YAP_LIBDIR, inpf, YAP_FILENAME_MAX); if ((splfild = open_file(Yap_FileNameBuf, O_RDONLY)) > 0) { if ((mode = commit_to_saved_state(Yap_FileNameBuf,Astate,ATrail,AStack,AHeap)) != FAIL_RESTORE) { Yap_ErrorMessage = NULL; diff --git a/C/sysbits.c b/C/sysbits.c index 8bfd54337..005671bb7 100644 --- a/C/sysbits.c +++ b/C/sysbits.c @@ -209,7 +209,7 @@ Yap_InitSysPath(void) { if (dir_done && commons_done) return; #endif - strncpy(Yap_FileNameBuf, SHARE_DIR, YAP_FILENAME_MAX); + strncpy(Yap_FileNameBuf, YAP_SHAREDIR, YAP_FILENAME_MAX); #if _MSC_VER || defined(__MINGW32__) { DWORD fatts; @@ -1883,7 +1883,7 @@ TrueFileName (char *source, char *root, char *result, int in_lib) strncpy(ares1, libdir, YAP_FILENAME_MAX); else #endif - strncpy(ares1, LIB_DIR, YAP_FILENAME_MAX); + strncpy(ares1, YAP_LIBDIR, YAP_FILENAME_MAX); } #if HAVE_GETENV } @@ -2679,7 +2679,7 @@ p_host_type(void) { static Int p_yap_home(void) { - Term out = MkAtomTerm(Yap_LookupAtom(YAP_HOME_DIR)); + Term out = MkAtomTerm(Yap_LookupAtom(YAP_ROOTDIR)); return(Yap_unify(out,ARG1)); } @@ -2977,7 +2977,7 @@ p_disable_interrupts(void) static Int p_ld_path(void) { - return Yap_unify(ARG1,MkAtomTerm(Yap_LookupAtom(LIB_DIR))); + return Yap_unify(ARG1,MkAtomTerm(Yap_LookupAtom(YAP_LIBDIR))); } diff --git a/H/Yap.h b/H/Yap.h index ed91b8656..50b27df17 100644 --- a/H/Yap.h +++ b/H/Yap.h @@ -87,11 +87,6 @@ #define inline __inline #define YAP_VERSION "Yap-6.0.0" -/* This is also exported in YapInclude.h */ -#ifndef YAPVERSION -#define YAPVERSION 60000 -#endif - #define BIN_DIR "c:\\Yap\\bin" #define LIB_DIR "c:\\Yap\\lib\\Yap" #define SHARE_DIR "c:\\Yap\\share\\Yap" diff --git a/Makefile.in b/Makefile.in index 83925b8cd..78e8aa5d6 100644 --- a/Makefile.in +++ b/Makefile.in @@ -51,6 +51,8 @@ DOCSDIR=$(SHAREDIR)/docs/yap # YAP_EXTRAS=@YAP_EXTRAS@ +YAPSTARTUP=startup.yss + # # Please do not add YAP_EXTRA flags here: if you do check the flags # for c_interface.c @@ -65,6 +67,8 @@ C_PARSER_FLAGS= @C_PARSER_FLAGS@ $(YAP_EXTRAS) $(DEFS) $(CPPFLAGS) # # You shouldn't need to change what follows. # +ARCH=@ARCH@ +AWK=@AWK@ CPP=@CPP@ DEFS=@DEFS@ LIBS=@LIBS@ @@ -89,11 +93,12 @@ MAKEINFO=makeinfo TEXI2DVI=texi2dvi TEXI2HTML=texi2html TEXI2PDF=texi2pdf +YAPLIB=@YAPLIB@ #4.1VPATH=@srcdir@:@srcdir@/OPTYap CWD=$(PWD) # -VERSION=Yap-6.0.0 +VERSION=6.0.0 MYDDAS_VERSION=MYDDAS-0.9.1 # @@ -275,11 +280,34 @@ OBJECTS = yap.o $(LIB_OBJECTS) -all: Makefile startup.yss - +all: parms.h startup.yss Makefile: $(srcdir)/Makefile.in +$(srcdir)/H/Yap.h: config.h + +config.h: parms.h + +parms.h: Makefile + @echo "#define YAP_ROOTDIR \"$(prefix)\"" > $@% + @echo "#define YAP_BINDIR \"$(BINDIR)\"" >> $@% + @echo "#define YAP_LIBDIR \"$(LIBDIR)\"" >> $@% + @echo "#define YAP_SHAREDIR \"$(SHAREDIR)\"" >> $@% + @echo "#define YAP_PL_SRCDIR \"$(SHAREDIR)/Yap/pl\"" >> $@% + @echo "#define YAP_STARTUP \"$(YAPSTARTUP)\"" >> $@% + @echo "#define YAP_SVERSION \"$(VERSION)\"" >> $@% + @echo $(VERSION) | $(AWK) -F. '{ printf("#define YAP_VERSION %d\n", $$1 * 10000 + $$2 * 100 + $$3); }' >> $@% + @echo "#define MYDDAS_VERSION \"$(MYDDAS_VERSION)\"" >> $@% + @echo "#define YAP_ARCH \"$(ARCH)\"" >> $@% + @echo "#define YAP_LIBS \"$(LIBS)\"" >> $@% + @echo "#define YAP_YAPLIB \"$(YAPLIB)\"" >> $@% + @echo "#define YAP_CC \"$(CC)\"" >> $@% + @echo "#define YAP_CFLAGS \"$(CFLAGS)\"" >> $@% + @echo "#define YAP_LDFLAGS \"$(LDFLAGS)\"" >> $@% + @echo "#define YAP_SHLIB_SUFFIX \"$(SHLIB_SUFFIX)\"" >> $@% + @echo | $(AWK) '{ printf("#define YAP_TIMESTAMP %d\n", systime()); }' >> $@% + @if cmp -s $@% $@; then rm $@%; else mv $@% $@; fi + #special rule for this one: we cannot use -fomit-frame-pointer because this will # interface with the outside world. @@ -290,16 +318,16 @@ clause_list.o: $(srcdir)/C/clause_list.c $(srcdir)/include/clause_list.h $(CC) $(C_INTERF_FLAGS) -c $(srcdir)/C/clause_list.c -o clause_list.o init.o: $(srcdir)/C/init.c - $(CC) -c $(CFLAGS) -DMYDDAS_VERSION=\"$(MYDDAS_VERSION)\" -DYAP_VERSION=\"$(VERSION)\" $(srcdir)/C/init.c -o $@ + $(CC) -c $(CFLAGS) $(srcdir)/C/init.c -o $@ load_foreign.o: $(srcdir)/C/load_foreign.c - $(CC) -c $(CFLAGS) $(srcdir)/C/load_foreign.c -DSHLIB_SUFFIX=\"$(SHLIB_SUFFIX)\" -o $@ + $(CC) -c $(CFLAGS) $(srcdir)/C/load_foreign.c -o $@ save.o: $(srcdir)/C/save.c - $(CC) -c $(CFLAGS) -DYAP_VERSION=\"$(VERSION)\" -DBIN_DIR=\"$(BINDIR)\" -DLIB_DIR=\"$(YAPLIBDIR)\" $(srcdir)/C/save.c -o $@ + $(CC) -c $(CFLAGS) $(srcdir)/C/save.c -o $@ sysbits.o: $(srcdir)/C/sysbits.c - $(CC) -c $(CFLAGS) -DYAP_HOME_DIR=\"$(ROOTDIR)\" -DLIB_DIR=\"$(YAPLIBDIR)\" -DSHARE_DIR=\"$(SHAREDIR)\" $(srcdir)/C/sysbits.c -o $@ + $(CC) -c $(CFLAGS) $(srcdir)/C/sysbits.c -o $@ udi.o: $(srcdir)/C/udi.c $(CC) -c $(C_INTERF_FLAGS) $(srcdir)/C/udi.c -o $@ @@ -310,8 +338,8 @@ rtree.o: $(srcdir)/packages/udi/rtree.c rtree_udi.o: $(srcdir)/packages/udi/rtree_udi.c $(CC) -c $(C_INTERF_FLAGS) $(srcdir)/packages/udi/rtree_udi.c -o $@ -yap.o: $(srcdir)/console/yap.c - $(CC) -c $(CFLAGS) -I$(srcdir)/include -DYAP_VERSION=\"$(VERSION)\" -DPL_SRC_DIR=\"$(SHAREDIR)/Yap/pl/\" $(srcdir)/console/yap.c -o $@ +yap.o: $(srcdir)/console/yap.c parms.h + $(CC) -c $(CFLAGS) -I$(srcdir)/include $(srcdir)/console/yap.c -o $@ mpi.o: $(srcdir)/library/mpi/mpi.c $(MPI_CC) -c $(CFLAGS) $(srcdir)/library/mpi/mpi.c -o $@ @@ -448,7 +476,7 @@ all: startup.yss @ENABLE_CPLINT@ (cd cplint; $(MAKE)) @USE_CUDD@ (cd packages/ProbLog/simplecudd; $(MAKE)) -startup.yss: yap@EXEC_SUFFIX@ $(PL_SOURCES) +startup.yss: yap@EXEC_SUFFIX@ $(PL_SOURCES) parms.h -rm -f startup.yss echo "bootstrap('$(srcdir)/pl/init.yap'). module(user). save_program('startup.yss')." | @PRE_DYNLOADER_PATH@ ./yap -b $(srcdir)/pl/boot.yap @@ -488,7 +516,10 @@ install_unix: startup.yss libYap.a @INSTALL_MATLAB@ (cd library/matlab; $(MAKE) install) @ENABLE_JPL@ @INSTALL_DLLS@ (cd packages/jpl; $(MAKE) install) mkdir -p $(DESTDIR)$(INCLUDEDIR) + $(INSTALL) $(HEADERS) $(DESTDIR)$(INCLUDEDIR) for h in $(INTERFACE_HEADERS); do $(INSTALL) $$h $(DESTDIR)$(INCLUDEDIR); done + $(INSTALL) config.h $(DESTDIR)$(INCLUDEDIR)/config.h + $(INSTALL) parms.h $(DESTDIR)$(INCLUDEDIR)/parms.h @ENABLE_CPLINT@ (cd cplint; $(MAKE) install) @USE_CUDD@ (cd packages/ProbLog/simplecudd; $(MAKE) install) @@ -508,7 +539,8 @@ install_win32: startup.yss for f in $(PL_SOURCES); do $(INSTALL) $$f $(DESTDIR)$(SHAREDIR)/Yap/pl; done $(INSTALL) $(HEADERS) $(DESTDIR)$(INCLUDEDIR) for h in $(INTERFACE_HEADERS); do $(INSTALL) $$h $(DESTDIR)$(INCLUDEDIR); done - $(INSTALL) config.h $(INCLUDEDIR)/config.h + $(INSTALL) config.h $(DESTDIR)$(INCLUDEDIR)/config.h + $(INSTALL) parms.h $(DESTDIR)$(INCLUDEDIR)/parms.h (cd packages/PLStream; $(MAKE) install) (cd packages/sgml; $(MAKE) install) (cd library/random; $(MAKE) install) @@ -624,7 +656,7 @@ install_docs: info: yap.info yap.info: $(YAPDOCS) - $(MAKEINFO) $(srcdir)/docs/yap.tex + $(MAKEINFO) $(srcdir)/docs/yap.tex html: yap.html diff --git a/config.h.in b/config.h.in index 75920977e..e75a81435 100755 --- a/config.h.in +++ b/config.h.in @@ -1,4 +1,6 @@ +#include "parms.h" + /* are we using gcc */ #undef HAVE_GCC diff --git a/configure b/configure index 75453a597..596706ab9 100755 --- a/configure +++ b/configure @@ -683,6 +683,7 @@ SHLIB_SUFFIX SHLIB_CFLAGS MERGE_DLL_OBJS INSTALL_DLLS +ARCH M4GENHDRS M4 EXTEND_DYNLOADER_PATH @@ -719,6 +720,7 @@ build C_PARSER_FLAGS C_INTERF_FLAGS GCC +AWK OBJEXT EXEEXT ac_ct_CC @@ -2872,6 +2874,48 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu +for ac_prog in gawk mawk nawk awk +do + # Extract the first word of "$ac_prog", so it can be a program name with args. +set dummy $ac_prog; ac_word=$2 +{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5 +$as_echo_n "checking for $ac_word... " >&6; } +if test "${ac_cv_prog_AWK+set}" = set; then + $as_echo_n "(cached) " >&6 +else + if test -n "$AWK"; then + ac_cv_prog_AWK="$AWK" # Let the user override the test. +else +as_save_IFS=$IFS; IFS=$PATH_SEPARATOR +for as_dir in $PATH +do + IFS=$as_save_IFS + test -z "$as_dir" && as_dir=. + for ac_exec_ext in '' $ac_executable_extensions; do + if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then + ac_cv_prog_AWK="$ac_prog" + $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5 + break 2 + fi +done +done +IFS=$as_save_IFS + +fi +fi +AWK=$ac_cv_prog_AWK +if test -n "$AWK"; then + { $as_echo "$as_me:$LINENO: result: $AWK" >&5 +$as_echo "$AWK" >&6; } +else + { $as_echo "$as_me:$LINENO: result: no" >&5 +$as_echo "no" >&6; } +fi + + + test -n "$AWK" && break +done + @@ -13867,6 +13911,21 @@ fi +if test "x$ARCH" = "x"; then + case "$host" in + *linux*) + ARCH=`echo $host | sed 's/-.*/-linux/'` + ;; + *-gnu) + ARCH=`echo $host | sed 's/\([^-]*\)-[^-]*-\([^-]*\)-gnu/\1-\2/'` + ;; + *) + ARCH=`echo $host | sed 's/\([^-]*\)-[^-]*-\([^-]*\)/\1-\2/'` + ;; + esac +fi + + @@ -17677,6 +17736,7 @@ gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' +AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF diff --git a/configure.in b/configure.in index ccd70235a..6f4b87ccf 100755 --- a/configure.in +++ b/configure.in @@ -11,6 +11,7 @@ dnl store the environment's compilation flags mycflags="$CFLAGS" AC_PROG_CC +AC_PROG_AWK AC_SUBST(GCC) AC_SUBST(C_INTERF_FLAGS) AC_SUBST(C_PARSER_FLAGS) @@ -1218,6 +1219,24 @@ fi AC_SUBST(M4) AC_SUBST(M4GENHDRS) +dnl SWI compatibility, I don't know why just use host... +changequote(,)dnl +if test "x$ARCH" = "x"; then + case "$host" in + *linux*) + ARCH=`echo $host | sed 's/-.*/-linux/'` + ;; + *-gnu) + ARCH=`echo $host | sed 's/\([^-]*\)-[^-]*-\([^-]*\)-gnu/\1-\2/'` + ;; + *) + ARCH=`echo $host | sed 's/\([^-]*\)-[^-]*-\([^-]*\)/\1-\2/'` + ;; + esac +fi +changequote([,])dnl +AC_SUBST(ARCH) + dnl System stuff for dynamic linking. dnl dnl Exports: diff --git a/console/yap.c b/console/yap.c index 8b14d4352..d5f4f73fb 100644 --- a/console/yap.c +++ b/console/yap.c @@ -292,6 +292,11 @@ add_end_dot(char arg[]) return arg; } +static int +dump_runtime_variables(void) +{ +} + /* * proccess command line arguments: valid switches are: -b boot -s * stack area size (K) -h heap area size -a aux stack size -e @@ -336,8 +341,13 @@ parse_yap_arguments(int argc, char *argv[], YAP_init_args *iap) ssize = &(iap->NumberWorkers); goto GetSize; case 'd': + if (!strcmp("dump-runtime-variables",p)) + return dump_runtime_variables(); ssize = &(iap->DelayedReleaseLoad); goto GetSize; +#else + if (!strcmp("dump-runtime-variables",p)) + return dump_runtime_variables(); #endif /* ENV_COPY || ACOW || SBA */ #ifdef USE_SOCKET case 'c': /* running as client */ @@ -746,14 +756,15 @@ init_standard_system(int argc, char *argv[], YAP_init_args *iap) iap->ErrorNo = 0; iap->ErrorCause = NULL; iap->QuietMode = FALSE; + iap->Argv0 = argv[0]; BootMode = parse_yap_arguments(argc,argv,iap); if (BootMode == YAP_FULL_BOOT_FROM_PROLOG) { #if HAVE_STRNCAT - strncpy(boot_file, PL_SRC_DIR, 256); + strncpy(boot_file, YAP_PL_SRCDIR, 256); #else - strcpy(boot_file, PL_SRC_DIR); + strcpy(boot_file, YAP_PL_SRCDIR); #endif #if HAVE_STRNCAT strncat(boot_file, BootFile, 255); @@ -805,9 +816,9 @@ exec_top_level(int BootMode, YAP_init_args *iap) YAP_Term goal, as[2]; #if HAVE_STRNCAT - strncpy(init_file, PL_SRC_DIR, 256); + strncpy(init_file, YAP_PL_SRCDIR, 256); #else - strcpy(init_file, PL_SRC_DIR); + strcpy(init_file, YAP_PL_SRCDIR); #endif #if HAVE_STRNCAT strncat(init_file, InitFile, 255); diff --git a/include/yap_structs.h b/include/yap_structs.h index d009e5970..161313776 100644 --- a/include/yap_structs.h +++ b/include/yap_structs.h @@ -142,6 +142,8 @@ typedef struct { int ErrorNo; /* errorstring */ char *ErrorCause; + /* argv[0] */ + char *Argv0; } YAP_init_args;