trying to improve Python interface
This commit is contained in:
@@ -1,4 +1,9 @@
|
||||
#CHECK: SWIG
|
||||
option (WITH_SWiG
|
||||
"Allow Python->YAP and Java->YAP" ON)
|
||||
|
||||
IF (WITH_SWiG)
|
||||
|
||||
find_host_package (SWIG)
|
||||
macro_log_feature (SWIG_FOUND "Swig"
|
||||
"Use SWIG Documentation System "
|
||||
@@ -20,7 +25,10 @@ if (ANDROID)
|
||||
add_subdirectory(android)
|
||||
else(ANDROID)
|
||||
add_subdirectory(python)
|
||||
add_subdirectory(java)
|
||||
# add_subdirectory(java)
|
||||
endif(ANDROID)
|
||||
|
||||
endif (SWIG_FOUND)
|
||||
|
||||
ENDIF (WITH_SWiG)
|
||||
|
||||
|
||||
@@ -1,95 +0,0 @@
|
||||
|
||||
|
||||
macro_optional_find_package(Java ON)
|
||||
|
||||
find_package(Java COMPONENTS Runtime Development)
|
||||
#find_ mmmk]\']package(Java COMPONENTS Runtime)
|
||||
|
||||
macro_log_feature (Java_Development_FOUND "Java"
|
||||
"Use Java System"
|
||||
"http://www.java.org" FALSE)
|
||||
macro_optional_find_package(JNI ON)
|
||||
macro_log_feature (JNI_FOUND "JNI"
|
||||
"Use Java Native Interface"
|
||||
"http://www.java.org" FALSE)
|
||||
|
||||
|
||||
if (Java_Development_FOUND)
|
||||
|
||||
include ( UseJava )
|
||||
include ( UseSWIG )
|
||||
|
||||
|
||||
# SET(CMAKE_SWIG_FLAGS -package YAP)
|
||||
|
||||
set (CMAKE_SWIG_OUTDIR ${CMAKE_CURRENT_BINARY_DIR} )
|
||||
|
||||
SET(SWIG_SOURCES
|
||||
../yap.i
|
||||
)
|
||||
|
||||
#set (CMAKE_JAVA_CLASS_OUTPUT_PATH java)
|
||||
|
||||
|
||||
SET_SOURCE_FILES_PROPERTIES(${SWIG_SOURCES} PROPERTIES CPLUSPLUS ON)
|
||||
|
||||
|
||||
include_directories (
|
||||
${CMAKE_SOURCE_DIR}/CXX
|
||||
${JAVA_INCLUDE_DIRS}
|
||||
${JNI_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
if ( ${C_COMPILER} MATCHES "Clang")
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-missing-prototypes")
|
||||
endif()
|
||||
if ( ${C_COMPILER} MATCHES "GNU")
|
||||
set( CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-missing-declarations")
|
||||
endif()
|
||||
#SET(CMAKE_SWIG_FLAGS "${CMAKE_SWIG_FLAGS} ")
|
||||
|
||||
SWIG_ADD_MODULE(Native java ${SWIG_SOURCES}
|
||||
)
|
||||
|
||||
add_dependencies(Native Yap++ )
|
||||
|
||||
SWIG_LINK_LIBRARIES (Native Yap++ )
|
||||
|
||||
|
||||
set(CMAKE_JNI_TARGET 1)
|
||||
ADD_JAR( NativeJar
|
||||
SOURCES "../../../misc/icons/yap_16x16x32.png"
|
||||
DEPENDS Native
|
||||
PROPERTIES OUTPUT_NAME Native
|
||||
)
|
||||
install_jar(NativeJar ${libpl})
|
||||
add_dependencies(NativeJar Native )
|
||||
#install_jni_symlink(NativeJar .)
|
||||
|
||||
|
||||
ADD_CUSTOM_COMMAND(TARGET NativeJar
|
||||
POST_BUILD
|
||||
COMMAND cmake -E echo "Compiling Java files..."
|
||||
COMMAND ${Java_JAVAC_EXECUTABLE} *.java -cp .
|
||||
COMMAND cmake -E echo "Creating jar file..."
|
||||
COMMAND ${Java_JAR_EXECUTABLE} -ufM Native.jar *.class
|
||||
)
|
||||
|
||||
ADD_JAR( JavaYAP
|
||||
SOURCES "JavaYAP.java"
|
||||
ENTRY_POINT JavaYAP
|
||||
INCLUDE_JARS NativeJar )
|
||||
|
||||
SET(CMAKE_JAVA_COMPILE_FLAGS "-source" "1.8" "-target" "1.8")
|
||||
install( TARGETS Native
|
||||
RUNTIME DESTINATION ${bindir}
|
||||
ARCHIVE DESTINATION ${libdir}
|
||||
LIBRARY DESTINATION ${libdir}
|
||||
)
|
||||
|
||||
install_jar(JavaYAP ${libpl})
|
||||
#install_jni_symlink(JavaYAP ${libpl})
|
||||
|
||||
|
||||
|
||||
Endif (Java_Development_FOUND)
|
||||
@@ -43,7 +43,7 @@ if (JNI_FOUND)
|
||||
|
||||
set(CMAKE_JNI_TARGET 1)
|
||||
ADD_JAR( NativeJar
|
||||
SOURCES "../../../docs/icons/yap_16x16x32.png"
|
||||
SOURCES "${CMAKE_SOURCES_DIR}/docs/icons/yap_16x16x32.png"
|
||||
DEPENDS Native
|
||||
PROPERTIES OUTPUT_NAME Native
|
||||
)
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
//package pt.up.fc.dcc.yap;
|
||||
|
||||
//package pt.up.yap;
|
||||
//
|
||||
import java.io.* ;
|
||||
//import YAP.* ;
|
||||
import pt.up.yap.* ;
|
||||
class JavaYAP {
|
||||
|
||||
YAPQuery q;
|
||||
@@ -34,10 +34,10 @@ class JavaYAP {
|
||||
q.close();
|
||||
return false;
|
||||
}
|
||||
YAPListTerm vs = q.namedVars();
|
||||
YAPTerm vs = YAPTerm( q.namedVars() );
|
||||
System.out.println("Another one "+vs);
|
||||
while(!vs.nil()){
|
||||
YAPTerm eq = vs.car();
|
||||
eq = YAPTerm( vs.car() );
|
||||
//outputText.append(Integer.toString(i) + ": " + eq.text() );
|
||||
System.out.println(":\t" + eq.getArg(1).text() + " = " + eq.getArg(2).text() +"\n" );
|
||||
vs = vs.cdr();
|
||||
@@ -89,7 +89,7 @@ class JavaYAP {
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
public static void main(String args[])
|
||||
{
|
||||
System.loadLibrary("Native");
|
||||
|
||||
@@ -3,11 +3,20 @@
|
||||
|
||||
INCLUDE(${SWIG_USE_FILE})
|
||||
|
||||
GET_PROPERTY(OBJECTS TARGET core PROPERTY SOURCES)
|
||||
GET_PROPERTY(OBJECTS TARGET libYAPOs PROPERTY SOURCES)
|
||||
GET_PROPERTY(OBJECTS TARGET libOPTYap PROPERTY SOURCES)
|
||||
# list( APPEND OBJECTS GET_PROPERTY(sourcefiles TARGET myddas PROPERTY SOURCES))
|
||||
# list( APPEND OBJECTS GET_PROPERTY(sourcefiles TARGET Yapsqlite3 PROPERTY SOURCES))
|
||||
# list( APPEND OBJECTS GET_PROPERTY(sourcefiles TARGET libswi PROPERTY SOURCES))
|
||||
# list( APPEND OBJECTS GET_PROPERTY(sourcefiles TARGET myddas PROPERTY SOURCES))
|
||||
# list( APPEND OBJECTS GET_PROPERTY(sourcefiles TARGET utf8proc PROPERTY SOURCES))
|
||||
# list( APPEND OBJECTS GET_PROPERTY(sourcefiles TARGET Yap++ PROPERTY SOURCES))
|
||||
|
||||
if (PYTHONLIBS_FOUND)
|
||||
|
||||
include(FindPythonModule)
|
||||
|
||||
include(FindPythonModule)
|
||||
|
||||
INCLUDE_DIRECTORIES(${PYTHON_INCLUDE_PATH})
|
||||
|
||||
INCLUDE_DIRECTORIES( ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_SOURCE_DIR}/CXX)
|
||||
@@ -16,45 +25,46 @@ if (PYTHONLIBS_FOUND)
|
||||
|
||||
SET_SOURCE_FILES_PROPERTIES(../yap.i PROPERTIES CPLUSPLUS ON)
|
||||
SET_SOURCE_FILES_PROPERTIES(../yap.i PROPERTIES SWIG_FLAGS "-includeall")
|
||||
SET_SOURCE_FILES_PROPERTIES(../yap.i PROPERTY SWIG_MODULE_NAME libPy2YAP )
|
||||
SET_SOURCE_FILES_PROPERTIES(../yap.i PROPERTIES SWIG_FLAGS "-py3")
|
||||
SET_SOURCE_FILES_PROPERTIES(../yap.i PROPERTY SWIG_MODULE_NAME yap )
|
||||
SET_SOURCE_FILES_PROPERTIES(../yap.i PROPERTY OUTPUT_NAME yap )
|
||||
|
||||
configure_file ("setup.py.cmake" "setup.py" )
|
||||
configure_file ("../yap.i" "yap.i" )
|
||||
#configure_file ("setup.py.cmake" "setup.py" )
|
||||
#configure_file ("../yap.i" "yap.i" )
|
||||
|
||||
|
||||
#SET( CMAKE_SWIG_OUTDIR "yap" )
|
||||
SET( CMAKE_SWIG_OUTDIR "${CMAKE_CURRENT_BINARY_DIR}/yap" )
|
||||
|
||||
|
||||
# SWIG_ADD_MODULE(Py2YAP python ../yap.i )
|
||||
# SWIG_LINK_LIBRARIES(Py2YAP ${PYTHON_LIBRARIES} Yap++ libYap YAPPython)
|
||||
# set_target_properties ( ${SWIG_MODULE_Py2YAP_REAL_NAME} PROPERTIES
|
||||
# NO_SONAME ON )
|
||||
SWIG_ADD_MODULE(Py2YAP python ../yap.i )
|
||||
SWIG_LINK_LIBRARIES(Py2YAP ${PYTHON_LIBRARIES} Yap++ YAPPython libYap)
|
||||
set_target_properties ( ${SWIG_MODULE_Py2YAP_REAL_NAME} PROPERTIES
|
||||
NO_SONAME ON OUTPUT_NAME _yap LIBRARY_OUTPUT_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/yap" )
|
||||
|
||||
|
||||
# execute_process ( COMMAND ${PYTHON_EXECUTABLE} -c "from distutils import sysconfig; print( sysconfig.get_python_lib( plat_specific=True, prefix='${CMAKE_INSTALL_PREFIX}' ) )"
|
||||
# OUTPUT_VARIABLE _ABS_PYTHON_MODULE_PATH
|
||||
# OUTPUT_STRIP_TRAILING_WHITESPACE )
|
||||
# get_filename_component ( _ABS_PYTHON_MODULE_PATH ${_ABS_PYTHON_MODULE_PATH} ABSOLUTE )
|
||||
# file ( RELATIVE_PATH _REL_PYTHON_MOULE_PATH ${CMAKE_INSTALL_PREFIX} ${_ABS_PYTHON_MODULE_PATH} )
|
||||
execute_process ( COMMAND ${PYTHON_EXECUTABLE} -c "import sysconfig; print( sysconfig.get_path( 'platlib' ) )"
|
||||
OUTPUT_VARIABLE _ABS_PYTHON_MODULE_PATH
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE )
|
||||
get_filename_component ( ABS_PYTHON_MODULE_PATH ${_ABS_PYTHON_MODULE_PATH} ABSOLUTE )
|
||||
file ( RELATIVE_PATH _REL_PYTHON_MOULE_PATH ${CMAKE_INSTALL_PREFIX} ${_ABS_PYTHON_MODULE_PATH} )
|
||||
|
||||
# set ( PYTHON_MODULE_PATH
|
||||
# ${_REL_PYTHON_MODULE_PATH}
|
||||
# )
|
||||
set ( PYTHON_MODULE_PATH
|
||||
${_ABS_PYTHON_MODULE_PATH}
|
||||
)
|
||||
|
||||
set(SETUP_PY "${CMAKE_CURRENT_BINARY_DIR}/setup.py")
|
||||
# set(SETUP_PY "${CMAKE_CURRENT_BINARY_DIR}/setup.py")
|
||||
|
||||
add_custom_target ( py2yap ALL
|
||||
COMMAND ${PYTHON_EXECUTABLE} setup.py bdist
|
||||
DEPENDS ../yap.i YAPPython )
|
||||
# add_custom_target ( py2yap ALL
|
||||
# COMMAND ${PYTHON_EXECUTABLE} setup.py bdist
|
||||
# DEPENDS ../yap.i YAPPython )
|
||||
|
||||
|
||||
install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} ${SETUP_PY} install
|
||||
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})")
|
||||
|
||||
# INSTALL ( FILES ${CMAKE_CURRENT_BINARY_DIR}/yap/_yap.so DESTINATION ${PYTHON_MODULE_PATH} )
|
||||
# INSTALL ( FILES ${CMAKE_CURRENT_BINARY_DIR}/yap/yap.py DESTINATION ${PYTHON_MODULE_PATH} )
|
||||
# INSTALL ( FILES ${CMAKE_CURRENT_SOURCE_DIR}/yap/yapex.py DESTINATION ${PYTHON_MODULE_PATH} )
|
||||
# install(CODE "execute_process(COMMAND ${PYTHON_EXECUTABLE} ${SETUP_PY} install
|
||||
# WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})")
|
||||
|
||||
INSTALL ( FILES ${CMAKE_CURRENT_BINARY_DIR}/yap/_yap.so DESTINATION ${PYTHON_MODULE_PATH} )
|
||||
INSTALL ( FILES ${CMAKE_CURRENT_BINARY_DIR}/yap/yap.py DESTINATION ${PYTHON_MODULE_PATH} )
|
||||
|
||||
|
||||
if ( DOCUMENTATION AND DOXYGEN_FOUND )
|
||||
|
||||
@@ -81,7 +91,7 @@ if (PYTHONLIBS_FOUND)
|
||||
endif ()
|
||||
|
||||
|
||||
install(TARGETS ${SWIG_MODULE_Py2YAP_REAL_NAME}
|
||||
install(TARGETS ${SWIG_MODULE_Py2YAP_REAL_NAME}
|
||||
LIBRARY DESTINATION ${dlls}
|
||||
ARCHIVE DESTINATION ${dlls}
|
||||
)
|
||||
|
||||
@@ -7,19 +7,22 @@ if platform.system() == 'Darwin':
|
||||
my_extra_link_args = ['-Wl,-rpath','-Wl,${dlls}']
|
||||
else:
|
||||
my_extra_link_args = []
|
||||
|
||||
|
||||
python_sources = ['yap.i'] # ,'../../CXX/yapi.cpp'] + ${PYTHON_SOURCES}
|
||||
|
||||
set objects = split('${OBJECTS}',';')
|
||||
|
||||
setup(
|
||||
name = "yap",
|
||||
version = "0.1",
|
||||
ext_modules=[Extension('_yap', ['yap.i'],
|
||||
ext_modules=[Extension('_yap', python_sources,
|
||||
define_macros = [('MAJOR_VERSION', '1'),
|
||||
('MINOR_VERSION', '0'),
|
||||
('_YAP_NOT_INSTALLED_', '1'),
|
||||
('YAP_PYTHON', '1')],
|
||||
runtime_library_dirs=['${dlls}'],
|
||||
swig_opts=['-modern','-outcurrentdir', '-c++', '-py3','-I${CMAKE_SOURCE_DIR}/CXX'],
|
||||
library_dirs=['../../..','../../../CXX',
|
||||
'../../python',
|
||||
library_dirs=['../../.o.',
|
||||
'.'],
|
||||
extra_link_args=my_extra_link_args,
|
||||
libraries=['Yap++','Yap','YAPPython'],
|
||||
|
||||
@@ -1,67 +1,52 @@
|
||||
/* example.i */
|
||||
%module(directors = "1") yap
|
||||
|
||||
|
||||
|
||||
// Language independent exception handler
|
||||
%include exception.i
|
||||
%include stdint.i
|
||||
|
||||
%ignore *::operator[];
|
||||
|
||||
class YAPPredicate;
|
||||
class YAPEngine;
|
||||
%{
|
||||
/* Put header files here or function declarations like below */
|
||||
|
||||
#define arity_t uintptr_t
|
||||
#define YAP_CPP_INTERFACE 1
|
||||
|
||||
#include "yapi.hh"
|
||||
|
||||
extern "C" {
|
||||
|
||||
#if THREADS
|
||||
#define Yap_regp regcache
|
||||
#endif
|
||||
|
||||
// we cannot consult YapInterface.h, that conflicts with what we
|
||||
// declare, though
|
||||
// it shouldn't
|
||||
}
|
||||
|
||||
%}
|
||||
|
||||
#ifdef SWIGPYTHON
|
||||
|
||||
%typemap(typecheck) Term* {
|
||||
$1 = PySequence_Check($input);
|
||||
}
|
||||
//include python/python.i
|
||||
|
||||
// Map a Python sequence into any sized C double array
|
||||
%typemap(in) Term* {
|
||||
int i;
|
||||
if (!PySequence_Check($input)) {
|
||||
PyErr_SetString(PyExc_TypeError,"Expecting a sequence");
|
||||
$1 = nullptr;
|
||||
} else {
|
||||
int sz = PyObject_Length($input);
|
||||
std::vector<Term> v(sz);
|
||||
for (i =0; i < sz; i++) {
|
||||
PyObject *o = PySequence_GetItem($input,i);
|
||||
v[i] = Term(pythonToYAP(o));
|
||||
Py_DECREF(o);
|
||||
}
|
||||
$1 = &v[0];
|
||||
}
|
||||
}
|
||||
|
||||
%typemap(typecheck) YPTerm {
|
||||
$1 = true;
|
||||
}
|
||||
|
||||
%inline %{
|
||||
YAPTerm T(PyObject *input ) { return *new YAPTerm( pythonToYAP(input) ); }
|
||||
%}
|
||||
|
||||
%typemap(in) YAPTerm { $1 = *new YAPTerm( pythonToYAP($input) ); }
|
||||
|
||||
|
||||
%typemap(in) Term { $1 = pythonToYAP($input); }
|
||||
|
||||
|
||||
%typemap(out) YAPTerm { return $result = yap_to_python($1.term(), false);}
|
||||
%typemap(out) Term { return $result = yap_to_python($1, false);}
|
||||
|
||||
|
||||
%extend(out) Term{Term & __getitem__(size_t i){Term t0 = $self;
|
||||
|
||||
if (IsApplTerm(t0)) {
|
||||
Functor f = FunctorOfTerm(t0);
|
||||
if (!IsExtensionFunctor(f))
|
||||
return (ArgOfTerm(i + 1, t0);
|
||||
} else if (IsPairTerm(t0)) {
|
||||
if (i == 0)
|
||||
return HeadOfTerm(t0);
|
||||
else if (i == 1)
|
||||
return TailOfTerm(t0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Language independent exception handler
|
||||
|
||||
@@ -291,26 +276,6 @@ LOCAL_Error_TYPE = YAP_NO_ERROR;
|
||||
|
||||
#endif
|
||||
|
||||
%{
|
||||
/* Put header files here or function declarations like below */
|
||||
|
||||
#define YAP_CPP_INTERFACE 1
|
||||
|
||||
#include "yapi.hh"
|
||||
|
||||
extern "C" {
|
||||
|
||||
#if THREADS
|
||||
#define Yap_regp regcache
|
||||
#endif
|
||||
|
||||
// we cannot consult YapInterface.h, that conflicts with what we
|
||||
// declare, though
|
||||
// it shouldn't
|
||||
}
|
||||
|
||||
%}
|
||||
|
||||
/* turn on director wrapping Callback */
|
||||
%feature("director") YAPCallback;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user