help to make Yap work with dynamic libs

git-svn-id: https://yap.svn.sf.net/svnroot/yap/trunk@1638 b08c6af1-5177-4d33-ba66-4b1c6b8b522a
This commit is contained in:
vsc 2006-05-19 13:48:11 +00:00
parent f9987d9fe9
commit 871bb9e024
21 changed files with 446 additions and 96 deletions

View File

@ -252,6 +252,10 @@ mark_global_cell(CELL *pt)
#else
return pt + 3;
#endif
case (CELL)FunctorIntArray:
return pt + (4+pt[1]);
case (CELL)FunctorDoubleArray:
return pt + (4+((SIZEOF_DOUBLE -SIZEOF_LONG_INT) + pt[1]*SIZEOF_DOUBLE)/SIZEOF_LONG_INT);
#if USE_GMP
case (CELL)FunctorBigInt:
{

View File

@ -44,7 +44,7 @@ float_to_int(Float v, union arith_ret *o)
Int i = (Int)v;
if (i-v == 0.0) {
o->Int = i;
return(long_int_e);
return long_int_e;
} else {
mpz_init_set_d(o->big, v);
return big_int_e;

View File

@ -334,59 +334,125 @@ compare(Term t1, Term t2) /* compare terms t1 and t2 */
if (IsExtensionFunctor(fun1)) {
/* float, long, big, dbref */
if (IsFloatTerm(t1)) {
if (IsFloatTerm(t2))
return(rfloat(FloatOfTerm(t1) - FloatOfTerm(t2)));
if (IsRefTerm(t2))
return 1;
return -1;
}
if (IsLongIntTerm(t1)) {
if (IsIntTerm(t2))
return LongIntOfTerm(t1) - IntOfTerm(t2);
if (IsFloatTerm(t2)) {
return 1;
switch ((CELL)fun1) {
case double_e:
{
if (IsFloatTerm(t2))
return(rfloat(FloatOfTerm(t1) - FloatOfTerm(t2)));
if (IsRefTerm(t2))
return 1;
return -1;
}
if (IsLongIntTerm(t2))
return LongIntOfTerm(t1) - LongIntOfTerm(t2);
case long_int_e:
{
if (IsIntTerm(t2))
return LongIntOfTerm(t1) - IntOfTerm(t2);
if (IsFloatTerm(t2)) {
return 1;
}
if (IsLongIntTerm(t2))
return LongIntOfTerm(t1) - LongIntOfTerm(t2);
#ifdef USE_GMP
if (IsBigIntTerm(t2))
return -mpz_cmp_si(Yap_BigIntOfTerm(t2), LongIntOfTerm(t1));
if (IsBigIntTerm(t2))
return -mpz_cmp_si(Yap_BigIntOfTerm(t2), LongIntOfTerm(t1));
#endif
if (IsRefTerm(t2))
return 1;
return -1;
}
#ifdef USE_GMP
if (IsBigIntTerm(t1)) {
if (IsIntTerm(t2))
return mpz_cmp_si(Yap_BigIntOfTerm(t1), IntOfTerm(t2));
if (IsFloatTerm(t2)) {
return 1;
if (IsRefTerm(t2))
return 1;
return -1;
}
#ifdef USE_GMP
case big_int_e:
{
if (IsIntTerm(t2))
return mpz_cmp_si(Yap_BigIntOfTerm(t1), IntOfTerm(t2));
if (IsFloatTerm(t2)) {
return 1;
}
if (IsLongIntTerm(t2))
return mpz_cmp_si(Yap_BigIntOfTerm(t1), LongIntOfTerm(t2));
if (IsBigIntTerm(t2))
return mpz_cmp(Yap_BigIntOfTerm(t1), Yap_BigIntOfTerm(t2));
if (IsRefTerm(t2))
return 1;
return -1;
}
if (IsLongIntTerm(t2))
return mpz_cmp_si(Yap_BigIntOfTerm(t1), LongIntOfTerm(t2));
if (IsBigIntTerm(t2))
return mpz_cmp(Yap_BigIntOfTerm(t1), Yap_BigIntOfTerm(t2));
if (IsRefTerm(t2))
return 1;
return -1;
}
#endif
if (IsRefTerm(t1)) {
case int_array_e:
{
Functor f2;
if (!IsApplTerm(t2))
return 1;
f2 = FunctorOfTerm(t2);
if (f2 == FunctorDoubleArray) {
UInt dim, i;
Int *ar1, *ar2;
if ((dim = Yap_SizeOfIntArray(t1)) != Yap_SizeOfIntArray(t2)) {
return dim-Yap_SizeOfIntArray(t2);
}
ar1 = Yap_IntArrayOfTerm(t1);
ar2 = Yap_IntArrayOfTerm(t2);
for (i=0;i<dim;i++) {
if (ar1[i]-ar2[i])
return ar1[i]-ar2[i] > 0;
}
return 0;
} else if (f2 == FunctorIntArray) {
return -1;
} else
return 1;
}
case double_array_e:
{
Functor f2;
if (!IsApplTerm(t2))
return 1;
f2 = FunctorOfTerm(t2);
if (f2 == FunctorDoubleArray) {
UInt dim, i;
Float *ar1, *ar2;
if ((dim = Yap_SizeOfFloatArray(t1)) != Yap_SizeOfFloatArray(t2)) {
return dim-Yap_SizeOfFloatArray(t2);
}
ar1 = Yap_FloatArrayOfTerm(t1);
ar2 = Yap_FloatArrayOfTerm(t2);
for (i=0;i<dim;i++) {
if (ar1[i]-ar2[i])
return ar1[i]-ar2[i];
}
return 0;
} else {
return 1;
}
}
case db_ref_e:
if (IsRefTerm(t2))
return Unsigned(RefOfTerm(t2)) -
Unsigned(RefOfTerm(t1));
Unsigned(RefOfTerm(t1));
return -1;
}
}
if (!IsApplTerm(t2)) {
if (IsPairTerm(t2)) {
Int out;
Functor f = FunctorOfTerm(t1);
if (!(out = ArityOfFunctor(f))-2)
out = strcmp(RepAtom(NameOfFunctor(f))->StrOfAE,".");
return out;
}
return 1;
} else {
Functor fun2 = FunctorOfTerm(t2);
Int r;
if (IsExtensionFunctor(fun2)) {
if (fun2 == FunctorDoubleArray ||
fun2 == FunctorIntArray)
return -1;
return 1;
}
r = ArityOfFunctor(fun1) - ArityOfFunctor(fun2);
@ -404,7 +470,7 @@ compare(Term t1, Term t2) /* compare terms t1 and t2 */
}
}
int Yap_compare_terms(register CELL d0, register CELL d1)
int Yap_compare_terms(CELL d0, CELL d1)
{
return (compare(Deref(d0),Deref(d1)));
}

View File

@ -11,8 +11,13 @@
* File: compiler.c *
* comments: Clause compiler *
* *
* Last rev: $Date: 2006-05-16 18:37:30 $,$Author: vsc $ *
* Last rev: $Date: 2006-05-19 13:48:11 $,$Author: vsc $ *
* $Log: not supported by cvs2svn $
* Revision 1.75 2006/05/16 18:37:30 vsc
* WIN32 fixes
* compiler bug fixes
* extend interface
*
* Revision 1.74 2006/04/13 02:04:24 vsc
* fix debugging typo
*
@ -541,8 +546,14 @@ c_arg(Int argno, Term t, unsigned int arity, unsigned int level, compiler_struct
Yap_emit((cglobs->onhead ? (argno == (Int)arity ? unify_last_atom_op
: unify_atom_op) :
write_atom_op), (CELL) t, Zero, &cglobs->cint);
}
else if (IsIntegerTerm(t) || IsFloatTerm(t) || IsBigIntTerm(t)) {
} else if (Yap_IsIntArrayTerm(t) || Yap_IsFloatArrayTerm(t)) {
Yap_Error_TYPE = TYPE_ERROR_NUMBER;
Yap_Error_Term = t;
Yap_ErrorMessage = Yap_ErrorSay;
sprintf(Yap_ErrorMessage, "compiling array term");
save_machine_regs();
longjmp(cglobs->cint.CompilerBotch,1);
} else if (IsIntegerTerm(t) || IsFloatTerm(t) || IsBigIntTerm(t)) {
if (!IsIntTerm(t)) {
/* we are taking a blob, that is a binary that is supposed to be
guarded in the clause itself. Possible examples include

View File

@ -198,6 +198,8 @@ static int can_unify_complex(register CELL *pt0,
if (IsExtensionFunctor(f)) {
switch((CELL)f) {
case (CELL)FunctorDBRef:
case (CELL)FunctorIntArray:
case (CELL)FunctorDoubleArray:
if (d0 == d1) continue;
goto comparison_failed;
case (CELL)FunctorLongInt:
@ -337,7 +339,9 @@ can_unify(Term t1, Term t2, Term *Vars)
if (IsExtensionFunctor(f)) {
switch((CELL)f) {
case (CELL)FunctorDBRef:
if (t1 == t2) return(FALSE);
case (CELL)FunctorIntArray:
case (CELL)FunctorDoubleArray:
if (t1 == t2) return FALSE;
return FALSE;
case (CELL)FunctorLongInt:
if (RepAppl(t1)[1] == RepAppl(t2)[1]) return(TRUE);

View File

@ -663,6 +663,22 @@ copy_double(CELL *st, CELL *pt)
return st+(2+SIZEOF_DOUBLE/SIZEOF_LONG_INT);
}
static CELL *
copy_int_array(CELL *st, CELL *pt)
{
UInt sz = SIZEOF_LONG_INT*(pt[1]+4);
memcpy((void *)st, (void *)pt, sz);
return (CELL *)((char *)st+sz);
}
static CELL *
copy_double_array(CELL *st, CELL *pt)
{
UInt sz = SIZEOF_LONG_INT*4+SIZEOF_DOUBLE*pt[1]+(SIZEOF_DOUBLE-SIZEOF_LONG_INT);
memcpy((void *)st, (void *)pt, sz);
return (CELL *)((char *)st+sz);
}
#ifdef USE_GMP
static CELL *
copy_big_int(CELL *st, CELL *pt)
@ -780,9 +796,29 @@ static CELL *MkDBTerm(register CELL *pt0, register CELL *pt0_end,
CodeMax = copy_long_int(CodeMax, ap2);
++pt0;
continue;
case (CELL)FunctorIntArray:
CheckDBOverflow(4+Yap_SizeOfIntArray(d0));
#ifdef IDB_USE_MBIT
*StoPoint++ = AbsAppl(CodeMax)|MBIT;
#else
*StoPoint++ = AbsAppl(CodeMax);
#endif
CodeMax = copy_int_array(CodeMax, ap2);
++pt0;
continue;
case (CELL)FunctorDoubleArray:
CheckDBOverflow(4+Yap_SizeOfFloatArray(d0));
#ifdef IDB_USE_MBIT
*StoPoint++ = AbsAppl(CodeMax)|MBIT;
#else
*StoPoint++ = AbsAppl(CodeMax);
#endif
CodeMax = copy_double_array(CodeMax, ap2);
++pt0;
continue;
#ifdef USE_GMP
case (CELL)FunctorBigInt:
CheckDBOverflow(3);
CheckDBOverflow(2+Yap_SizeOfBigInt(d0));
/* first thing, store a link to the list before we move on */
#ifdef IDB_USE_MBIT
*StoPoint++ = AbsAppl(CodeMax)|MBIT;
@ -1523,6 +1559,12 @@ CreateDBStruct(Term Tm, DBProp p, int InFlag, int *pstat, UInt extra_size, struc
fun = FunctorOfTerm(Tm);
if (IsExtensionFunctor(fun)) {
switch((CELL)fun) {
case (CELL)FunctorIntArray:
ntp = copy_int_array(ntp0, RepAppl(Tm));
break;
case (CELL)FunctorDoubleArray:
ntp = copy_double_array(ntp0, RepAppl(Tm));
break;
case (CELL)FunctorDouble:
ntp = copy_double(ntp0, RepAppl(Tm));
break;

View File

@ -485,6 +485,18 @@ AdjustGlobal(void)
pt += 2;
#endif
break;
case (CELL)FunctorDoubleArray:
{
Int sz = 3+(SIZEOF_DOUBLE-SIZEOF_LONG_INT)/SIZEOF_LONG_INT+pt[0];
pt += sz;
}
break;
case (CELL)FunctorIntArray:
{
Int sz = 3+pt[0];
pt += sz;
}
break;
#if USE_GMP
case (CELL)FunctorBigInt:
{

View File

@ -1277,6 +1277,43 @@ mark_variable(CELL_PTR current)
MARK(next+2);
#endif
POP_CONTINUATION();
case (CELL)FunctorIntArray:
MARK(next);
/* size is given by functor + friends */
if (next < HGEN) {
total_oldies+=4+next[1];
}
total_marked += 4+next[1];
{
int i;
for (i = 0; i <= 4+next[1]; i++) {
PUSH_POINTER(next+i);
}
#if GC_NO_TAGS
MARK(next+(3+next[1]));
#endif
}
POP_CONTINUATION();
case (CELL)FunctorDoubleArray:
MARK(next);
{
UInt sz = 4+next[1]+(SIZEOF_DOUBLE-SIZEOF_LONG_INT);
/* size is given by functor + friends */
if (next < HGEN) {
total_oldies+=sz;
}
total_marked += sz;
{
int i;
for (i = 0; i <= sz; i++) {
PUSH_POINTER(next+i);
}
#if GC_NO_TAGS
MARK(next+(sz-1));
#endif
}
}
POP_CONTINUATION();
#ifdef USE_GMP
case (CELL)FunctorBigInt:
MARK(next);
@ -3025,8 +3062,13 @@ compact_heap(void)
) {
/* oops, we found a blob */
int nofcells = (UNMARK_CELL(*current)-EndSpecials) / sizeof(CELL);
CELL *ptr = current - nofcells ;
CELL *ptr;
if (!nofcells) {
/* Arrays */
nofcells = current[-1];
}
ptr = current - nofcells;
if (MARKED_PTR(ptr)) {
#ifdef DEBUG
found_marked+=nofcells;
@ -3130,6 +3172,8 @@ compact_heap(void)
/* oops, we found a blob */
int nofcells = (uccur-EndSpecials) / sizeof(CELL) , i;
//FIX THIS
*dest++ = current[nofcells-1];
current ++;
for (i = 0; i < nofcells-2; i++) {

View File

@ -319,6 +319,9 @@ p_eq(void)
return (d0 == d1);
case (CELL)FunctorLongInt:
return(LongIntOfTerm(d0) == LongIntOfTerm(d1));
case (CELL)FunctorIntArray:
case (CELL)FunctorDoubleArray:
return !Yap_compare_terms(d0,d1);
#ifdef USE_GMP
case (CELL)FunctorBigInt:
return (mpz_cmp(Yap_BigIntOfTerm(d0), Yap_BigIntOfTerm(d1)) == 0);

View File

@ -22,6 +22,9 @@ static char SccsId[] = "%W% %G%";
#include "Yap.h"
#include "Yatom.h"
#include "Heap.h"
#if HAVE_STRING_H
#include <string.h>
#endif
/* exile Yap_standard_regs here, otherwise WIN32 linkers may complain */
REGSTORE Yap_standard_regs;
@ -95,3 +98,43 @@ Yap_MkNewApplTerm(Functor f, unsigned int n)
}
return (AbsAppl(t));
}
Term
Yap_MkIntArrayTerm (UInt sz, Int *ptr)
{
CELL *h0 = H;
H[0] = (CELL) FunctorLongInt;
H[1] = (CELL) (sz);
memcpy((void *)(H+2), (void *)ptr, sz*sizeof(Int));
H += sz+2;
H[0] = (CELL) (sz);
#if GC_NO_TAGS
H[1] = EndSpecials;
#else
H[1] = EndSpecials | MBIT;
#endif
H += 2;
return AbsAppl(h0);
}
Term
Yap_MkFloatArrayTerm (UInt sz, Float *ptr)
{
CELL *h0 = H;
H[0] = (CELL) FunctorLongInt;
H[1] = (CELL) (sz);
H[2] = 0;
memcpy((void *)(H+3), (void *)ptr, sz*sizeof(Float));
H += sz+3;
H[0] = (CELL) (sz);
#if GC_NO_TAGS
H[1] = EndSpecials;
#else
H[1] = EndSpecials | MBIT;
#endif
H += 2;
return AbsAppl(h0);
}

View File

@ -227,6 +227,8 @@ OCUnify_complex(register CELL *pt0, register CELL *pt0_end,
if (IsExtensionFunctor(f)) {
switch((CELL)f) {
case (CELL)FunctorDBRef:
case (CELL)FunctorIntArray:
case (CELL)FunctorDoubleArray:
if (d0 == d1) continue;
goto cufail;
case (CELL)FunctorLongInt:
@ -385,6 +387,8 @@ oc_unify_nvar_nvar:
if (IsExtensionFunctor((Functor)d0)) {
switch(d0) {
case (CELL)FunctorDBRef:
case (CELL)FunctorIntArray:
case (CELL)FunctorDoubleArray:
return(pt0 == pt1);
case (CELL)FunctorLongInt:
return(pt0[1] == pt1[1]);
@ -526,6 +530,8 @@ unify_nvar_nvar:
if (IsExtensionFunctor((Functor)d0)) {
switch(d0) {
case (CELL)FunctorDBRef:
case (CELL)FunctorIntArray:
case (CELL)FunctorDoubleArray:
return(pt0 == pt1);
case (CELL)FunctorLongInt:
return(pt0[1] == pt1[1]);

View File

@ -442,6 +442,8 @@ writeTerm(Term t, int p, int depth, int rinfixarg, struct write_globs *wglb)
case (CELL)FunctorDouble:
wrputf(FloatOfTerm(t),wglb->writech);
return;
case (CELL)FunctorIntArray:
case (CELL)FunctorDoubleArray:
case (CELL)FunctorDBRef:
wrputref(RefOfTerm(t), wglb->Quote_illegal, wglb->writech);
return;

View File

@ -10,7 +10,7 @@
* File: TermExt.h *
* mods: *
* comments: Extensions to standard terms for YAP *
* version: $Id: TermExt.h,v 1.7 2006-03-03 23:11:03 vsc Exp $ *
* version: $Id: TermExt.h,v 1.8 2006-05-19 13:48:11 vsc Exp $ *
*************************************************************************/
#ifdef USE_SYSTEM_MALLOC
@ -41,35 +41,37 @@
#define TermNil MkAtomTerm(AtomNil)
#define TermDot MkAtomTerm(AtomDot)
typedef enum
{
#if defined(IN_SECOND_QUADRANT) && !GC_NO_TAGS
typedef enum
{
db_ref_e = sizeof (Functor *) | RBIT,
long_int_e = 2 * sizeof (Functor *) | RBIT,
int_array_e = 2 * sizeof (Functor *) | RBIT,
double_array_e = 3 * sizeof (Functor *) | RBIT,
long_int_e = 4 * sizeof (Functor *) | RBIT,
#ifdef USE_GMP
big_int_e = 3 * sizeof (Functor *) | RBIT,
double_e = 4 * sizeof (Functor *) | RBIT
big_int_e = 5 * sizeof (Functor *) | RBIT,
double_e = 6 * sizeof (Functor *) | RBIT
#else
double_e = 3 * sizeof (Functor *) | RBIT
double_e = 5 * sizeof (Functor *) | RBIT
#endif
}
blob_type;
#else
typedef enum
{
db_ref_e = sizeof (Functor *),
long_int_e = 2 * sizeof (Functor *),
int_array_e = 2 * sizeof (Functor *),
double_array_e = 3 * sizeof (Functor *),
long_int_e = 4 * sizeof (Functor *),
#ifdef USE_GMP
big_int_e = 3 * sizeof (Functor *),
double_e = 4 * sizeof (Functor *)
big_int_e = 5 * sizeof (Functor *),
double_e = 6 * sizeof (Functor *)
#else
double_e = 3 * sizeof (Functor *)
double_e = 5 * sizeof (Functor *)
#endif
#endif
}
blob_type;
#endif
#define FunctorDBRef ((Functor)(db_ref_e))
#define FunctorIntArray ((Functor)(int_array_e))
#define FunctorDoubleArray ((Functor)(double_array_e))
#define FunctorLongInt ((Functor)(long_int_e))
#ifdef USE_GMP
#define FunctorBigInt ((Functor)(big_int_e))
@ -324,6 +326,58 @@ IsLongIntTerm (Term t)
}
Term Yap_MkIntArrayTerm (UInt, Int *);
inline EXTERN Int *Yap_IntArrayOfTerm (Term t);
inline EXTERN Int *
Yap_IntArrayOfTerm (Term t)
{
return (Int *) (RepAppl(t)+2);
}
inline EXTERN UInt Yap_SizeOfIntArray (Term t);
inline EXTERN UInt
Yap_SizeOfIntArray (Term t)
{
return (UInt) (RepAppl(t)[1]);
}
inline EXTERN int Yap_IsIntArrayTerm (Term);
inline EXTERN int
Yap_IsIntArrayTerm (Term t)
{
return (int) (IsApplTerm (t) && FunctorOfTerm (t) == FunctorIntArray);
}
Term Yap_MkFloatArrayTerm (UInt, Float *);
inline EXTERN Float *Yap_FloatArrayOfTerm (Term t);
inline EXTERN Float *
Yap_FloatArrayOfTerm (Term t)
{
return (Float *) (RepAppl(t)+2);
}
inline EXTERN UInt Yap_SizeOfFloatArray (Term t);
inline EXTERN UInt
Yap_SizeOfFloatArray (Term t)
{
return (UInt) (RepAppl(t)[1]);
}
inline EXTERN int Yap_IsFloatArrayTerm (Term);
inline EXTERN int
Yap_IsFloatArrayTerm (Term t)
{
return (int) (IsApplTerm (t) && FunctorOfTerm (t) == FunctorDoubleArray);
}
#ifdef USE_GMP
@ -363,6 +417,17 @@ IsLargeIntTerm (Term t)
}
inline EXTERN UInt Yap_SizeOfBigInt (Term);
inline EXTERN UInt
Yap_SizeOfBigInt (Term t)
{
CELL *pt = RepAppl(t)+1;
return 2+(sizeof(MP_INT)+
(((MP_INT *)pt)->_mp_alloc*sizeof(mp_limb_t)))/sizeof(CELL);
}
#else
@ -542,6 +607,8 @@ unify_extension (Functor f, CELL d0, CELL * pt0, CELL d1)
switch (BlobOfFunctor (f))
{
case db_ref_e:
case int_array_e:
case double_array_e:
return (d0 == d1);
case long_int_e:
return (pt0[1] == RepAppl (d1)[1]);

View File

@ -1,4 +1,4 @@
/* $Id: jpl.yap,v 1.5 2005-05-25 18:18:00 vsc Exp $
/* $Id: jpl.yap,v 1.6 2006-05-19 13:48:11 vsc Exp $
Part of JPL -- SWI-Prolog/Java interface
@ -4272,28 +4272,32 @@ report_java_setup_problem(E) :-
load_jpl_lib :-
jpl_java_home(JavaHome),
fetch_arch(Arch),
gen_jvm_lib(JavaHome,Arch,JLib),
load_foreign_files([jpl], [JLib], jpl_install), !.
gen_jvm_lib(JavaHome,Arch,JPL,JLibs),
load_foreign_files(JPL, JLibs, jpl_install), !.
fetch_arch(Arch) :-
current_prolog_flag(host_type,Name),
atom_codes(Name,Codes),
gen_arch(Codes,Arch).
gen_arch(L,mac) :-
append(_,[0'd,0'a,0'r,0'w,0'i,0'n|_],L), !.
gen_arch([0'x,0'8,0'6,0'_,0'6,0'4|_],amd64).
gen_arch([0'i,_,0'8,0'6|_],i386). % take all versions of X86
gen_arch([0's,0'p,0'a,0'r,0'c|_],sparc).
gen_arch([0'/,0'u,0's,0'r|_],mac).
gen_jvm_lib(JavaHome,Arch,JLib) :-
gen_jvm_lib(_,mac,[jpl],[]) :- !.
gen_jvm_lib(JavaHome,Arch,[jpl], [JLib]) :-
atom_concat([JavaHome,'/jre/lib/',Arch,'/client/libjvm.so'],JLib),
exists(JLib), !.
gen_jvm_lib(JavaHome,Arch,JLib) :-
gen_jvm_lib(JavaHome,Arch,[jpl], [JLib]) :-
atom_concat([JavaHome,'/jre/lib/',Arch,'/server/libjvm.so'],JLib),
exists(JLib), !.
gen_jvm_lib(JavaHome,Arch,JLib) :-
gen_jvm_lib(JavaHome,Arch,[jpl], [JLib]) :-
atom_concat([JavaHome,'/jre/lib/',Arch,'/classic/libjvm.so'],JLib),
exists(JLib), !.
gen_jvm_lib(JavaHome,Arch,JLib) :-
gen_jvm_lib(JavaHome,Arch,[jpl], [JLib]) :-
atom_concat([JavaHome,'/jre/lib/',Arch,'/libjvm.so'],JLib),
exists(JLib), !.

View File

@ -1,8 +1,8 @@
#
#
JAVA_HOME=@JAVA_HOME@
JVM_INC = -I$(JAVA_HOME)/include -I$(JAVA_HOME)/include/linux
JVM_LIB = -L$(JAVA_HOME)/jre/lib/i386 -L$(JAVA_HOME)/jre/lib/i386/client -ljava -lverify -ljvm
JVM_INC = @JAVAINCPATH@
JVM_LIB = @JAVALIBPATH@ -ljava -lverify -ljvm
#
#
#

View File

@ -1,4 +1,4 @@
/* $Id: jpl.c,v 1.9 2006-02-01 13:28:56 vsc Exp $
/* $Id: jpl.c,v 1.10 2006-05-19 13:48:11 vsc Exp $
Part of JPL -- SWI-Prolog/Java interface
@ -608,7 +608,7 @@ JNI_term_to_ref(JNIEnv *env, term_t tp, jobject *J)
YAP_Term t = YAP_GetFromSlot(tp);
if (YAP_IsAtomTerm(t)) {
char *cp = YAP_AtomName(YAP_AtomOfTerm(t));
const char *cp = YAP_AtomName(YAP_AtomOfTerm(t));
return ((*J=(*env)->NewStringUTF(env,cp)) != NULL);
} else if (YAP_IsApplTerm(t) &&
YAP_FunctorOfTerm(t) == JNI_functor_at_1) {
@ -630,7 +630,7 @@ JNI_term_to_jobject(JNIEnv *env, term_t tp, jobject *J)
YAP_Term t = YAP_GetFromSlot(tp);
if (YAP_IsAtomTerm(t)) {
char *cp = YAP_AtomName(YAP_AtomOfTerm(t));
const char *cp = YAP_AtomName(YAP_AtomOfTerm(t));
return ((*J=(*env)->NewStringUTF(env,cp)) != NULL);
} else if (YAP_IsApplTerm(t) &&
YAP_FunctorOfTerm(t) == JNI_functor_at_1) {
@ -1853,7 +1853,7 @@ jni_supported_jvm_version(
static int
jni_get_created_jvm_count(void)
{
int n;
jint n;
return ( JNI_GetCreatedJavaVMs(NULL,0,&n) == 0 // what does the '0' arg mean?
? n
@ -1890,7 +1890,7 @@ jni_create_jvm_c(
char cpopt[1000];
JavaVMOption opt[MAX_JVM_OPTIONS];
int r;
int n;
jint n;
int optn = 0;
DEBUG(1, Sdprintf( "[creating JVM with 'java.class.path=%s']\n", classpath));
@ -2938,7 +2938,7 @@ jni_func_1_plc(
// jlong jl; // "
void *p1; // temp for converted (JVM) arg
char *c1; // "
int i1; // "
jint i1; // "
// jlong l1; // "
// double d1; // "
jboolean r; // Prolog exit/fail outcome
@ -3078,7 +3078,7 @@ jni_func_2_plc(
char *c1; // "
char *c2; // "
// int i1; // "
int i2; // "
jint i2; // "
// jlong l1; // "
// jlong l2; // "
// double d1; // "
@ -4852,14 +4852,15 @@ Java_jpl_fli_Prolog_reset_1term_1refs(
jobject jafter
)
{
term_t term;
long term;
if ( jpl_ensure_pvm_init(env)
// && jafter != NULL // redundant: getLongValue checks this
&& getLongValue(env,jafter,&term) // SWI RM -> oughta be non-null
&& getLongValue(env,jafter,&term) // SWI RM -> oughta be non-null
)
{
PL_reset_term_refs( term); // void; SWI RM -> "always succeeds"
PL_reset_term_refs( (term_t)term); // void; SWI RM -> "always succeeds"
}
}

View File

@ -526,8 +526,8 @@ libYap.a: $(LIB_OBJECTS)
$(AR) rc libYap.a $(LIB_OBJECTS)
$(RANLIB) libYap.a
@IN_UNIX@@DO_SECOND_LD@libYap@SHLIB_SUFFIX@: $(LIB_OBJECTS)
@IN_UNIX@@DO_SECOND_LD@ @SHLIB_LD@ -o libYap@SHLIB_SUFFIX@ $(LIB_OBJECTS) $(LIBS)
@IN_UNIX@@DO_SECOND_LD@@YAPLIB@: $(LIB_OBJECTS)
@IN_UNIX@@DO_SECOND_LD@ @DYNLIB_LD@ -o @YAPLIB@ $(LIB_OBJECTS) $(LIBS)
install: install_bin install_data

View File

@ -28,6 +28,7 @@ allocate up to 3GB).</li>
<li> FIXED: compilation bug in arg(X,1,A).</li>
<li> NEW: extend interface to pass chunks of integers/floats.</li>
<li> FIXED: get rid of some more global variables.</li>
>>>>>>> 1.73
<li> NEW: thread_yield/0 (request Paulo Moura).</li>
<li> FIXED: current_thread was not returning aliases (obs Paulo Moura).</li>
<li> FIXED: AuxSp was not properly initialised for new threads (obs Paulo Moura).</li>

41
configure vendored
View File

@ -309,7 +309,7 @@ ac_includes_default="\
# include <unistd.h>
#endif"
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT GCC C_INTERF_FLAGS C_PARSER_FLAGS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os LN_S INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA RANLIB ac_ct_RANLIB INDENT ac_ct_INDENT AR ac_ct_AR MPI_CC ac_ct_MPI_CC INSTALL_INFO CPP EGREP M4 M4GENHDRS INSTALL_DLLS MERGE_DLL_OBJS SHLIB_CFLAGS SHLIB_SUFFIX EXEC_SUFFIX DO_SECOND_LD SHLIB_LD YAPLIB YAP_EXTRAS NO_BUILTIN_REGEXP ENABLE_JPL JAVA_HOME JAVAC JAR IN_UNIX YAPMPILIB MPI_OBJS MPI_LIBS INSTALL_COMMAND CROSS_SIMULATOR INSTALLCLP M4GENABSMI LIBOBJS LTLIBOBJS'
ac_subst_vars='SHELL PATH_SEPARATOR PACKAGE_NAME PACKAGE_TARNAME PACKAGE_VERSION PACKAGE_STRING PACKAGE_BUGREPORT exec_prefix prefix program_transform_name bindir sbindir libexecdir datadir sysconfdir sharedstatedir localstatedir libdir includedir oldincludedir infodir mandir build_alias host_alias target_alias DEFS ECHO_C ECHO_N ECHO_T LIBS CC CFLAGS LDFLAGS CPPFLAGS ac_ct_CC EXEEXT OBJEXT GCC C_INTERF_FLAGS C_PARSER_FLAGS build build_cpu build_vendor build_os host host_cpu host_vendor host_os target target_cpu target_vendor target_os LN_S INSTALL_PROGRAM INSTALL_SCRIPT INSTALL_DATA RANLIB ac_ct_RANLIB INDENT ac_ct_INDENT AR ac_ct_AR MPI_CC ac_ct_MPI_CC INSTALL_INFO CPP EGREP M4 M4GENHDRS INSTALL_DLLS MERGE_DLL_OBJS SHLIB_CFLAGS SHLIB_SUFFIX EXEC_SUFFIX DO_SECOND_LD SHLIB_LD DYNLIB_LD YAPLIB YAP_EXTRAS NO_BUILTIN_REGEXP ENABLE_JPL JAVA_HOME JAVAC JAR IN_UNIX YAPMPILIB MPI_OBJS MPI_LIBS INSTALL_COMMAND CROSS_SIMULATOR INSTALLCLP JAVALIBPATH JAVAINCPATH M4GENABSMI LIBOBJS LTLIBOBJS'
ac_subst_files=''
# Initialize some variables set by options.
@ -6017,6 +6017,8 @@ fi
LDFLAGS="-dynamic $LDFLAGS"
;;
*)
JAVALIBPATH="-L$JAVA_HOME/jre/lib/i386 -L$JAVA_HOME/jre/lib/i386/client"
JAVAINCPATH="-I$JAVA_HOME/include -I$JAVA_HOME/include/linux"
if test "$CC" != "lcc"
then
LDFLAGS="-rdynamic $LDFLAGS"
@ -6263,11 +6265,13 @@ fi
fi
fi
SHLIB_CFLAGS="-fno-common"
SHLIB_SUFFIX=".so"
SHLIB_SUFFIX=".dylib"
DO_SECOND_LD=""
SHLIB_LD="cc -bundle -flat_namespace -undefined suppress"
SHLIB_LD="gcc -bundle -flat_namespace -undefined suppress"
INSTALL_DLLS=""
CC="cc -no-cpp-precomp"
JAVALIBPATH="-L/System/Library/Frameworks/JavaVM.framework/Libraries"
JAVAINCPATH="-I/System/Library/Frameworks/JavaVM.framework/Headers"
;;
*netbsd*|*freebsd*)
if echo __ELF__ | ${CC:-cc} -E - | grep -q __ELF__
@ -6392,9 +6396,18 @@ esac
if test "$dynamic_loading" = "yes"
then
YAP_EXTRAS="$SHLIB_CFLAGS $YAP_EXTRAS"
YAPLIB=libYap"$SHLIB_SUFFIX"
CROSS_SIMULATOR="LD_LIBRARY_PATH=."
LDFLAGS="$LDFLAGS -Wl,-R,$prefix/lib"
case "$target_os" in
*darwin*)
YAPLIB=libYap"$SHLIB_SUFFIX"
DYNLIB_LD="gcc -dynamiclib"
;;
*)
LDFLAGS="$LDFLAGS -Wl,-R,$prefix/lib"
YAPLIB=libYap"$SHLIB_SUFFIX"
DYNLIB_LD="$SHLIB_LD"
;;
esac
fi
if test "$coroutining" = "yes"
@ -12637,6 +12650,10 @@ EXEC_SUFFIX=""
@ -15218,6 +15235,7 @@ _ACEOF
fi
mkdir -p library/matrices
mkdir -p library/mpi
mkdir -p library/random
mkdir -p library/regex
@ -15237,7 +15255,7 @@ mkdir -p LGPL/clp
mkdir -p LGPL/clpr
mkdir -p LGPL/chr
ac_config_files="$ac_config_files Makefile library/regex/Makefile library/system/Makefile library/random/Makefile library/yap2swi/Makefile library/mpi/Makefile .depend library/Makefile LGPL/chr/Makefile LGPL/chr/chr_swi_bootstrap.yap CLPBN/Makefile LGPL/clp/Makefile LGPL/clpr/Makefile library/Tries/Makefile LGPL/JPL/Makefile LGPL/JPL/src/Makefile LGPL/JPL/java/Makefile LGPL/JPL/jpl_paths.yap"
ac_config_files="$ac_config_files Makefile library/matrices/Makefile library/regex/Makefile library/system/Makefile library/random/Makefile library/yap2swi/Makefile library/mpi/Makefile .depend library/Makefile LGPL/chr/Makefile LGPL/chr/chr_swi_bootstrap.yap CLPBN/Makefile LGPL/clp/Makefile LGPL/clpr/Makefile library/Tries/Makefile LGPL/JPL/Makefile LGPL/JPL/src/Makefile LGPL/JPL/java/Makefile LGPL/JPL/jpl_paths.yap"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
# tests run on this system so they can be shared between configure
@ -15320,10 +15338,9 @@ for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
# 1. Remove the extension, and $U if already installed.
ac_i=`echo "$ac_i" |
sed 's/\$U\././;s/\.o$//;s/\.obj$//'`
# 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR
# will be set to the directory where LIBOBJS objects are built.
ac_libobjs="$ac_libobjs \${LIBOBJDIR}$ac_i\$U.$ac_objext"
ac_ltlibobjs="$ac_ltlibobjs \${LIBOBJDIR}$ac_i"'$U.lo'
# 2. Add them.
ac_libobjs="$ac_libobjs $ac_i\$U.$ac_objext"
ac_ltlibobjs="$ac_ltlibobjs $ac_i"'$U.lo'
done
LIBOBJS=$ac_libobjs
@ -15765,6 +15782,7 @@ do
case "$ac_config_target" in
# Handling of arguments.
"Makefile" ) CONFIG_FILES="$CONFIG_FILES Makefile" ;;
"library/matrices/Makefile" ) CONFIG_FILES="$CONFIG_FILES library/matrices/Makefile" ;;
"library/regex/Makefile" ) CONFIG_FILES="$CONFIG_FILES library/regex/Makefile" ;;
"library/system/Makefile" ) CONFIG_FILES="$CONFIG_FILES library/system/Makefile" ;;
"library/random/Makefile" ) CONFIG_FILES="$CONFIG_FILES library/random/Makefile" ;;
@ -15913,6 +15931,7 @@ s,@SHLIB_SUFFIX@,$SHLIB_SUFFIX,;t t
s,@EXEC_SUFFIX@,$EXEC_SUFFIX,;t t
s,@DO_SECOND_LD@,$DO_SECOND_LD,;t t
s,@SHLIB_LD@,$SHLIB_LD,;t t
s,@DYNLIB_LD@,$DYNLIB_LD,;t t
s,@YAPLIB@,$YAPLIB,;t t
s,@YAP_EXTRAS@,$YAP_EXTRAS,;t t
s,@NO_BUILTIN_REGEXP@,$NO_BUILTIN_REGEXP,;t t
@ -15927,6 +15946,8 @@ s,@MPI_LIBS@,$MPI_LIBS,;t t
s,@INSTALL_COMMAND@,$INSTALL_COMMAND,;t t
s,@CROSS_SIMULATOR@,$CROSS_SIMULATOR,;t t
s,@INSTALLCLP@,$INSTALLCLP,;t t
s,@JAVALIBPATH@,$JAVALIBPATH,;t t
s,@JAVAINCPATH@,$JAVAINCPATH,;t t
s,@M4GENABSMI@,$M4GENABSMI,;t t
s,@LIBOBJS@,$LIBOBJS,;t t
s,@LTLIBOBJS@,$LTLIBOBJS,;t t

View File

@ -591,6 +591,8 @@ case "$target_os" in
LDFLAGS="-dynamic $LDFLAGS"
;;
*)
JAVALIBPATH="-L$JAVA_HOME/jre/lib/i386 -L$JAVA_HOME/jre/lib/i386/client"
JAVAINCPATH="-I$JAVA_HOME/include -I$JAVA_HOME/include/linux"
if test "$CC" != "lcc"
then
LDFLAGS="-rdynamic $LDFLAGS"
@ -692,11 +694,13 @@ dnl Linux has both elf and a.out, in this case we found elf
fi
fi
SHLIB_CFLAGS="-fno-common"
SHLIB_SUFFIX=".so"
SHLIB_SUFFIX=".dylib"
DO_SECOND_LD=""
SHLIB_LD="cc -bundle -flat_namespace -undefined suppress"
SHLIB_LD="gcc -bundle -flat_namespace -undefined suppress"
INSTALL_DLLS=""
CC="cc -no-cpp-precomp"
JAVALIBPATH="-L/System/Library/Frameworks/JavaVM.framework/Libraries"
JAVAINCPATH="-I/System/Library/Frameworks/JavaVM.framework/Headers"
;;
*netbsd*|*freebsd*)
if echo __ELF__ | ${CC:-cc} -E - | grep -q __ELF__
@ -754,9 +758,18 @@ esac
if test "$dynamic_loading" = "yes"
then
YAP_EXTRAS="$SHLIB_CFLAGS $YAP_EXTRAS"
YAPLIB=libYap"$SHLIB_SUFFIX"
CROSS_SIMULATOR="LD_LIBRARY_PATH=."
LDFLAGS="$LDFLAGS -Wl,-R,$prefix/lib"
case "$target_os" in
*darwin*)
YAPLIB=libYap"$SHLIB_SUFFIX"
DYNLIB_LD="gcc -dynamiclib"
;;
*)
LDFLAGS="$LDFLAGS -Wl,-R,$prefix/lib"
YAPLIB=libYap"$SHLIB_SUFFIX"
DYNLIB_LD="$SHLIB_LD"
;;
esac
fi
if test "$coroutining" = "yes"
@ -945,8 +958,10 @@ AC_SUBST(EXEC_SUFFIX)
dnl how to call the loader
AC_SUBST(DO_SECOND_LD)
AC_SUBST(SHLIB_LD)
AC_SUBST(DYNLIB_LD)
dnl objects in YAP library
AC_SUBST(YAPLIB)
AC_SUBST(LDFLAGS)
dnl install_info
AC_SUBST(INSTALL_INFO)
dnl let YAP_EXTRAS fall through configure, from the env into Makefile
@ -963,6 +978,8 @@ AC_SUBST(MPI_LIBS)
AC_SUBST(INSTALL_COMMAND)
AC_SUBST(CROSS_SIMULATOR)
AC_SUBST(INSTALLCLP)
AC_SUBST(JAVALIBPATH)
AC_SUBST(JAVAINCPATH)
dnl check for threaded code
@ -1231,6 +1248,7 @@ AC_DEFINE(GC_NO_TAGS,1)
AC_DEFINE(USE_DL_MALLOC,1)
fi
mkdir -p library/matrices
mkdir -p library/mpi
mkdir -p library/random
mkdir -p library/regex
@ -1250,7 +1268,7 @@ mkdir -p LGPL/clp
mkdir -p LGPL/clpr
mkdir -p LGPL/chr
AC_OUTPUT(Makefile library/regex/Makefile library/system/Makefile library/random/Makefile library/yap2swi/Makefile library/mpi/Makefile .depend library/Makefile LGPL/chr/Makefile LGPL/chr/chr_swi_bootstrap.yap CLPBN/Makefile LGPL/clp/Makefile LGPL/clpr/Makefile library/Tries/Makefile LGPL/JPL/Makefile LGPL/JPL/src/Makefile LGPL/JPL/java/Makefile LGPL/JPL/jpl_paths.yap)
AC_OUTPUT(Makefile library/matrices/Makefile library/regex/Makefile library/system/Makefile library/random/Makefile library/yap2swi/Makefile library/mpi/Makefile .depend library/Makefile LGPL/chr/Makefile LGPL/chr/chr_swi_bootstrap.yap CLPBN/Makefile LGPL/clp/Makefile LGPL/clpr/Makefile library/Tries/Makefile LGPL/JPL/Makefile LGPL/JPL/src/Makefile LGPL/JPL/java/Makefile LGPL/JPL/jpl_paths.yap)
make depend

View File

@ -36,6 +36,7 @@ PROGRAMS= $(srcdir)/apply_macros.yap \
$(srcdir)/listing.yap \
$(srcdir)/lists.yap \
$(srcdir)/logtalk.yap \
$(srcdir)/matrices.yap \
$(srcdir)/ordsets.yap \
$(srcdir)/prandom.yap \
$(srcdir)/queues.yap \