Environment
Sunjdk1.7
Python2.7.3
Jython2.7b1
JyNI.alpha.2
编译JyNI.alpha.2是出错(系统库不兼容)
In file included from /usr/include/string.h:159:0, from ./JyNI-C/include/Python_JyNI/Python_JyNI.h:94, from ./JyNI-C/include/JyNI.h:58, from JyNI-C/src/abstract.c:49: /usr/include/xlocale.h:39:4: error: declaration for parameter ‘__locale_t’ but no such parameter In file included from ./JyNI-C/include/Python_JyNI/Python_JyNI.h:94:0, from ./JyNI-C/include/JyNI.h:58, from JyNI-C/src/abstract.c:49: /usr/include/string.h:150:15: error: declaration for parameter ‘strxfrm’ but no such parameter /usr/include/string.h:147:12: error: declaration for parameter ‘strcoll’ but no such parameter /usr/include/string.h:143:12: error: declaration for parameter ‘strncmp’ but no such parameter /usr/include/string.h:140:12: error: declaration for parameter ‘strcmp’ but no such parameter /usr/include/string.h:136:14: error: declaration for parameter ‘strncat’ but no such parameter /usr/include/string.h:133:14: error: declaration for parameter ‘strcat’ but no such parameter /usr/include/string.h:128:14: error: declaration for parameter ‘strncpy’ but no such parameter /usr/include/string.h:125:14: error: declaration for parameter ‘strcpy’ but no such parameter /usr/include/string.h:92:14: error: declaration for parameter ‘memchr’ but no such parameter /usr/include/string.h:65:12: error: declaration for parameter ‘memcmp’ but no such parameter /usr/include/string.h:62:14: error: declaration for parameter ‘memset’ but no such parameter /usr/include/string.h:54:14: error: declaration for parameter ‘memccpy’ but no such parameter /usr/include/string.h:46:14: error: declaration for parameter ‘memmove’ but no such parameter /usr/include/string.h:42:14: error: declaration for parameter ‘memcpy’ but no such parameter JyNI-C/src/abstract.c:2801:1: error: expected ‘{’ at end of input make: *** [JyNI-C/src/abstract.o] Error 1
|
使用官方提供的jyni-loader.so jyni.so jyni.jar 不起作用
OpenJdk1.7
Python2.7.3 (python dev source)
Jython2.7b1
JyNI.alpha.2
编译可以成功 jyNIsrc/build生成jyni-load.so jyni.so jyni.jar, DemoExtension.so
Jython+jyNI调用DemoExtension
java -cp jython.jar:build/JyNI.jar org.python.util.jython JyNI-Demo/src/JyNIDemo.py |
和Cpython输出一样(其他两个alpha2可以通过,alpha1不能通过)(输出和Powerlinux环境Cpython一样,不再展示)
在java 应用程序也可调用
调用代码若下
/home/modules:scripts为(/root/workspace/JavaCallPython/natvielib)
目录内有编译好的(DemoExtension.so)(这是cpython实验扩展部分) (libJyNI-Loader.so libJyNI.so)(这是jyni的c部分)
import java.io.ByteArrayOutputStream; import java.io.UnsupportedEncodingException; import java.util.List;
import org.python.core.PySystemState; import org.python.util.PythonInterpreter; public class SecondJavaScript {
public static void main(String args[]) {
PythonInterpreter interpreter = new PythonInterpreter(); Properties props = new Properties(); props.setProperty("python.path", "/home/modules:scripts"); PythonInterpreter.initialize(System.getProperties(), props, new String[] {""});
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ByteArrayOutputStream errorStream = new ByteArrayOutputStream(); interpreter.setOut(outputStream); interpreter.setErr(errorStream); PySystemState sys = interpreter.getSystemState();
// interpreter.exec("import sys;sys.path.append('C:/jython2.7b1/Lib/site-packages')"); // interpreter.exec("import sys;sys.path.append('C:/jython2.7b1/Lib')"); // interpreter. //interpreter.execfile("D:\\Documents\\Downloads\\PySite1.py"); interpreter.execfile("/home/root1/JyNI/JyNIDemo/src/JyNIDemo.py"); try { String out = outputStream.toString("gbk"); String error = errorStream.toString("gbk"); System.out.println(out); System.out.println("==========="); System.out.println(error); } catch (UnsupportedEncodingException e) { // TODO Auto-generated catch block e.printStackTrace(); }
}//main
} // |
Ibmjava7
Python2.7.3
Jython2.7b1
JyNI.alpha2
编译可通过,(但执行有问题 1.java –cp ibm的java不支持classpath 加入*.so)(个人的推测),
导致不能有jython 解析器执行
2. java emeded call JynI 可以执行但JyNIDateTime(有多余的网址信息) 对用JyNIDeo也有一些程序异常,如调用标准的JyNIDemo.py 如下信息
Jython+JyNI
--------Access Docstring---------- This is a pure demo extension.
--------Hello World---------- <built-in function hello_world> Hello World method.
--------Argument passing---------- Concatenates first with last element. Returns empty string, if less than two args are available. begin_end Returns number of arguments as string. (6)
--------Argument passing with keywords---------- (in JyNI-case see bottom for native outputs)
----------------Integer passing----------------- Returns the square of the given int. <built-in function intSquare> <type 'builtin_function_or_method'> intSquare Native square result of 16: 256 Native square result of -19: 361
--------Native list access reading---------- <type 'list'> (in JyNI-case see bottom for native outputs)
--------Native list access writing---------- input: ['Hello', 'lovely', 'world'] output: ['Hello', 'lovely', 'natively modified']
--------Set testing---------- set(['orange', 'banana', 'pear', 'apple']) after popping 2 elements: set(['pear', 'apple'])
================================================== On some consoles, Java displays native output from JNI extensions after the last non-native output. This usually also affects JyNI output. So expect native output after these lines on such consoles. ==================================================
=========== (CPythoom错误流里没有下面的异常信息) Unhandled exception Type=Segmentation error vmState=0x00000000 J9Generic_Signal_Number=00000004 Signal_Number=0000000b Error_Value=00000000 Signal_Code=00000001 Handler1=00000FFFA86CD820 Handler2=00000FFFA8557DD8 R0=FFFFFFFFFFFFFFE8 R1=00000FFFA913DBA0 R2=00000FFF9A900208 R3=FFFFFFFFFFFFFFE8 R4=00000FFF9A8D50C8 R5=000000000000000B R6=FEFEFEFEFEFEFEFF R7=000000000000000A R8=000000000000000B R9=FFFFFFFFFFFFFFE8 R10=0000000000000001 R11=00000FFF9A856DF0 R12=0000000022004444 R13=00000FFFA9146910 R14=00000FFFA91B81D8 R15=00000FFFA91B8680 R16=00000FFFA8740000 R17=0000000000000004 R18=0000000000000007 R19=00000FFFC1912500 R20=00000FFFC19125E0 R21=00000FFFA91CFB68 R22=00000100227300B0 R23=0000000000000000 R24=00000FFFA86C8C28 R25=00000FFFA873A8C0 R26=00000FFFA869D120 R27=00000FFFA86C8C28 R28=0000000000000000 R29=00000000001CCA00 R30=00000FFFA86D4020 R31=00000FFFA913DBA0 NIP=00000FFF9A856E10 MSR=800000000200F032 ORIG_GPR3=00000FFF9B130000 CTR=00000FFF9A856DF0 LINK=00000FFF9A89920C XER=0000000000000000 CCR=0000000022004442 SOFTE=0000000000000001 TRAP=0000000000000300 DAR=FFFFFFFFFFFFFFF8 dsisr=0000000040000000 RESULT=0000000000000000 FPR0 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR1 4028000000000000 (f: 0.000000, d: 1.200000e+01) FPR2 41d0000000000000 (f: 0.000000, d: 1.073742e+09) FPR3 3fee666660000000 (f: 1610612736.000000, d: 9.500000e-01) FPR4 3fa9999a00000000 (f: 0.000000, d: 5.000001e-02) FPR5 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR6 4130000000000000 (f: 0.000000, d: 1.048576e+06) FPR7 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR8 003d003d003d003d (f: 3997757.000000, d: 1.613230e-307) FPR9 003d003d003d003d (f: 3997757.000000, d: 1.613230e-307) FPR10 003d003d003d003d (f: 3997757.000000, d: 1.613230e-307) FPR11 003d003d003d003d (f: 3997757.000000, d: 1.613230e-307) FPR12 3fe8000000000000 (f: 0.000000, d: 7.500000e-01) FPR13 4028000000000000 (f: 0.000000, d: 1.200000e+01) FPR14 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR15 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR16 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR17 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR18 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR19 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR20 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR21 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR22 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR23 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR24 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR25 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR26 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR27 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR28 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR29 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR30 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR31 0000000000000000 (f: 0.000000, d: 0.000000e+00) Module=/root/workspace/JavaCallPython/natvielib/libJyNI.so Module_base_address=00000FFF9A7C0000 Symbol=JyNI_CleanUp_JyObject Symbol_address=00000FFF9A8F5290 Target=2_60_20130422_146026 (Linux 2.6.32-358.el6.ppc64) CPU=ppc64 (12 logical CPUs) (0x3cf00000 RAM) ----------- Stack Backtrace ----------- (0x00000FFFA84FA2B8 [libj9prt26.so+0x2a2b8]) (0x00000FFFA850DDFC [libj9prt26.so+0x3ddfc]) (0x00000FFFA84FA398 [libj9prt26.so+0x2a398]) (0x00000FFFA84FA568 [libj9prt26.so+0x2a568]) (0x00000FFFA84F9F40 [libj9prt26.so+0x29f40]) (0x00000FFFA850DDFC [libj9prt26.so+0x3ddfc]) (0x00000FFFA84FA008 [libj9prt26.so+0x2a008]) (0x00000FFFA860A070 [libj9vm26.so+0x4a070]) (0x00000FFFA8609648 [libj9vm26.so+0x49648]) (0x00000FFFA850DDFC [libj9prt26.so+0x3ddfc]) (0x00000FFFA8609068 [libj9vm26.so+0x49068]) (0x00000FFFA850F680 [libj9prt26.so+0x3f680]) __kernel_sigtramp_rt64+0x0 (0x00000FFFA9200418) (0x0000000000000007 [<unknown>+0x0]) PyString_Fini+0xfffa247c (0x00000FFF9A89920C [libJyNI.so+0xd920c]) JyNI_unload+0xfff6d05c (0x00000FFF9A86238C [libJyNI.so+0xa238c]) JNI_OnUnload+0xfffeecc4 (0x00000FFF9B0E17D4 [libJyNI-Loader.so+0x17d4]) (0x00000FFFA866C88C [libj9vm26.so+0xac88c]) (0x00000FFFA85F8E14 [libj9vm26.so+0x38e14]) (0x00000FFFA8642864 [libj9vm26.so+0x82864]) (0x00000FFFA8626F3C [libj9vm26.so+0x66f3c]) (0x00000FFFA850DDFC [libj9prt26.so+0x3ddfc]) (0x00000FFFA8627820 [libj9vm26.so+0x67820]) (0x00000FFFA86F4570 [libjvm.so+0x14570]) (0x00000FFFA91A8734 [libjli.so+0x8734]) (0x00000080987CC21C [libpthread.so.0+0xc21c]) clone+0xfff52e6c (0x00000080986CA57C [libc.so.6+0x12a57c]) --------------------------------------- JVMDUMP039I Hello World! kewordTest called: first second Hey a: Hello b: lovely c: world pop 2 elements from the set... orange banana JNI_OnUnload JyNI_unload JVMDUMP013I \u5df2\u5904\u7406\u8f6c\u50a8\u4e8b\u4ef6\u201cgpf\u201d\uff0c\u8be6\u7ec6\u4fe1\u606f\uff1a\u201c\u201d\u3002 |
3.调用JyNIDatetimeTest
Jython+jyNI
datetime successfully imported.
-----datetime doc----- Concrete date/time and related types -- prototype implemented in Python.
See http://www.zope.org/Members/fdrake/DateTimeWiki/FrontPage
See also http://dir.yahoo.com/Reference/calendars/
For a primer on DST, including many current DST rules, see http://webexhibits.org/daylightsaving/
For more about DST than you ever wanted to know, see ftp://elsie.nci.nih.gov/pub/
Sources for time zone and DST data: http://www.twinsun.com/tz/tz-link.htm
This was originally copied from the sandbox of the CPython CVS repository. Thanks to Tim Peters for suggesting using it.
----------------------
datetime 2003-08-04 12:30:45 datetime.datetime(2003, 8, 4, 12, 30, 45) <class 'datetime.datetime'> --------------------------------------
=========== |
Cpython
-----datetime doc----- Fast implementation of the datetime type. ----------------------
datetime 2003-08-04 12:30:45 datetime.datetime(2003, 8, 4, 12, 30, 45) <type 'datetime.datetime'> --------------------------------------
|
4, 测试JyNIExceptionTest.py
Jython+JyNI调用
Exception in thread "main" Traceback (most recent call last): File "/root/test/JyNI-2.7-alpha.2/JyNI-Demo/src/JyNIExceptionTest.py", line 39, in <module> DemoExtension.exceptionTest() SystemError: This is a test exception message for JyNI. Unhandled exception Type=Segmentation error vmState=0x00000000 J9Generic_Signal_Number=00000004 Signal_Number=0000000b Error_Value=00000000 Signal_Code=00000001 Handler1=00000FFF8A2AD820 Handler2=00000FFF8A137DD8 R0=FFFFFFFFFFFFFFE8 R1=00000FFF8AD1DBA0 R2=00000FFF7C4D0208 R3=FFFFFFFFFFFFFFE8 R4=00000FFF7C4A50C8 R5=000000000000000B R6=FEFEFEFEFEFEFEFF R7=000000000000000A R8=000000000000000B R9=FFFFFFFFFFFFFFE8 R10=0000000000000001 R11=00000FFF7C426FF4 R12=0000000022004444 R13=00000FFF8AD26910 R14=00000FFF8AD981D8 R15=00000FFF8AD98680 R16=00000FFF8A320000 R17=0000000000000004 R18=0000000000000007 R19=00000FFFE7FBE700 R20=00000FFFE7FBE7E0 R21=00000FFF8ADAFB68 R22=00000100075300B0 R23=0000000000000000 R24=00000FFF8A2A8C28 R25=00000FFF8A31A8C0 R26=00000FFF8A27D120 R27=00000FFF8A2A8C28 R28=0000000000000000 R29=00000000001CCA00 R30=00000FFF8A2B4020 R31=00000FFF8AD1DBA0 NIP=00000FFF7C426E10 MSR=800000000200F032 ORIG_GPR3=0000000000000000 CTR=00000FFF7C426DF0 LINK=00000FFF7C46920C XER=0000000020000000 CCR=0000000022004442 SOFTE=0000000000000001 TRAP=0000000000000300 DAR=FFFFFFFFFFFFFFF8 dsisr=0000000040000000 RESULT=0000000000000000 FPR0 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR1 0000004700000047 (f: 71.000000, d: 1.506617e-312) FPR2 4051d00000000000 (f: 0.000000, d: 7.125000e+01) FPR3 3fe8000000000000 (f: 0.000000, d: 7.500000e-01) FPR4 3fa9999a00000000 (f: 0.000000, d: 5.000001e-02) FPR5 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR6 4130000000000000 (f: 0.000000, d: 1.048576e+06) FPR7 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR8 0065006200610063 (f: 6357091.000000, d: 9.345976e-307) FPR9 006b00200028006d (f: 2621549.000000, d: 1.201562e-306) FPR10 006f007300740020 (f: 7602208.000000, d: 1.379624e-306) FPR11 0072006500630065 (f: 6488165.000000, d: 1.602190e-306) FPR12 3fe8000000000000 (f: 0.000000, d: 7.500000e-01) FPR13 4020800000000000 (f: 0.000000, d: 8.250000e+00) FPR14 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR15 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR16 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR17 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR18 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR19 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR20 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR21 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR22 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR23 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR24 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR25 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR26 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR27 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR28 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR29 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR30 0000000000000000 (f: 0.000000, d: 0.000000e+00) FPR31 0000000000000000 (f: 0.000000, d: 0.000000e+00) Module=/root/workspace/JavaCallPython/natvielib/libJyNI.so Module_base_address=00000FFF7C390000 Symbol=JyNI_CleanUp_JyObject Symbol_address=00000FFF7C4C5290 Target=2_60_20130422_146026 (Linux 2.6.32-358.el6.ppc64) CPU=ppc64 (12 logical CPUs) (0x3cf00000 RAM) ----------- Stack Backtrace ----------- (0x00000FFF8A0DA2B8 [libj9prt26.so+0x2a2b8]) (0x00000FFF8A0EDDFC [libj9prt26.so+0x3ddfc]) (0x00000FFF8A0DA398 [libj9prt26.so+0x2a398]) (0x00000FFF8A0DA568 [libj9prt26.so+0x2a568]) (0x00000FFF8A0D9F40 [libj9prt26.so+0x29f40]) (0x00000FFF8A0EDDFC [libj9prt26.so+0x3ddfc]) (0x00000FFF8A0DA008 [libj9prt26.so+0x2a008]) (0x00000FFF8A1EA070 [libj9vm26.so+0x4a070]) (0x00000FFF8A1E9648 [libj9vm26.so+0x49648]) (0x00000FFF8A0EDDFC [libj9prt26.so+0x3ddfc]) (0x00000FFF8A1E9068 [libj9vm26.so+0x49068]) (0x00000FFF8A0EF680 [libj9prt26.so+0x3f680]) __kernel_sigtramp_rt64+0x0 (0x00000FFF8ADE0418) (0x00000FFF8AD1DC30 [<unknown>+0x0]) PyString_Fini+0xfffa247c (0x00000FFF7C46920C [libJyNI.so+0xd920c]) JyNI_unload+0xfff6d05c (0x00000FFF7C43238C [libJyNI.so+0xa238c]) JNI_OnUnload+0xfffeecc4 (0x00000FFF7CCB17D4 [libJyNI-Loader.so+0x17d4]) (0x00000FFF8A24C88C [libj9vm26.so+0xac88c]) (0x00000FFF8A1D8E14 [libj9vm26.so+0x38e14]) (0x00000FFF8A222864 [libj9vm26.so+0x82864]) (0x00000FFF8A206F3C [libj9vm26.so+0x66f3c]) (0x00000FFF8A0EDDFC [libj9prt26.so+0x3ddfc]) (0x00000FFF8A207820 [libj9vm26.so+0x67820]) (0x00000FFF8A2D4570 [libjvm.so+0x14570]) (0x00000FFF8AD88734 [libjli.so+0x8734]) (0x00000080987CC21C [libpthread.so.0+0xc21c]) clone+0xfff52e6c (0x00000080986CA57C [libc.so.6+0x12a57c]) --------------------------------------- JVMDUMP039I JVMDUMP013I \u5df2\u5904\u7406\u8f6c\u50a8\u4e8b\u4ef6\u201cgpf\u201d\uff0c\u8be6\u7ec6\u4fe1\u606f\uff1a\u201c\u201d\u3002 JNI_OnUnload JyNI_unload |
Cpython调用
python JyNIExceptionTest.py sys.exc_info, initial: (None, None, None) We call a native method that creates an exception. However, this time we handle it... ...and entered except-area! sys.exc_info: (<type 'exceptions.SystemError'>, SystemError('This is a test exception message for JyNI.',), <traceback object at 0xfff98af74d0>) Now lets look, what happens, if the exception is uncaught: Traceback (most recent call last): File "JyNIExceptionTest.py", line 39, in <module> DemoExtension.exceptionTest() SystemError: This is a test exception message for JyNI. |
1. 需要下载python-dev2.7
2. 需要下载jyNIalpha2
3. 需要安装jdk
4. 需要安装gcc
5. 需要根据情况修改makefile
# # makefile for JyNI # # Author: Jonathan Hale, Stefan Richthofer #
CC = gcc JC = javac OUTPUTDIR = ./build
# Adjust the following line to point to Jython 2.7 JYTHON = ./jython.jar #for instance, if you extracted it to your home folder: #JYTHON = /home/your_name/jython.jar(jython和cPython为2.7.x)
# Adjust the two paths below to match your system, if not yet appropriate PY_INCLUDE = /usr/local/include/python2.7(python源码头文件) JAVA_HOME = /opt/ibm/java-ppc64-70 #The symlink "default-java" does not exist on every system. If gnumake tells you that the header #jni.h is missing, please adjust JAVA_HOME appropriately. Example for Java 7, 64 bit: #JAVA_HOME = /usr/lib/jvm/java-7-openjdk-amd64
JYNI = ./JyNI-Java/src JYNIBIN = ./JyNI-Java/bin INCLUDES = -I./JyNI-C/include -I./JyNI-C/include/Python_JyNI -I./JyNI-Java/include -I$(JAVA_HOME)/include -I$(PY_INCLUDE) CFLAGS = -fPIC -Wl,--add-stdcall-alias -c $(INCLUDES) LDFLAGS = -shared JFLAGS= -cp $(JYTHON):$(JYNI) -d $(JYNIBIN)
SOURCES = $(wildcard JyNI-C/src/*.c) OBJECTS = $(SOURCES:.c=.o) JSOURCES = $(wildcard JyNI-Java/src/JyNI/*.java)
all: $(OUTPUTDIR) libJyNI libJyNI-Loader JyNI @echo '' @echo 'Build finnished.'
$(OUTPUTDIR): mkdir $(OUTPUTDIR)
.o: $(CC) $(CFLAGS) $< -o $@
libJyNI: $(OBJECTS) $(CC) $(LDFLAGS) $(OBJECTS) -o $(OUTPUTDIR)/libJyNI.so
libJyNI-Loader: ./JyNI-Loader/JyNILoader.o $(CC) $(LDFLAGS) ./JyNI-Loader/JyNILoader.o -o $(OUTPUTDIR)/libJyNI-Loader.so
$(JYNIBIN)/JyNI: $(JC) $(JFLAGS) $(JSOURCES)
$(JYTHON): @echo '' @echo '----------------------------------------------' @echo 'Fatal error: Could not find jython.jar.' @echo 'Either put jython.jar into the JyNI base folder, or adjust the JYTHON-variable at the top of makefile to point to your installed jython.jar.' @echo 'Be sure to use Jython 2.7 (beta) or newer.' @echo '----------------------------------------------' @echo '' @false
JyNI: $(JYTHON) $(JYNIBIN)/JyNI jar cvf $(OUTPUTDIR)/JyNI.jar -C $(JYNIBIN) .
clean: rm -rf $(JYNIBIN)/JyNI rm -f ./JyNI-C/src/*.o rm -f ./JyNI-Loader/JyNILoader.o
.PHONY: JyNI libJyNI libJyNI-Loader clean all |