Jython和JyNI的研究

来源:互联网 发布:ubuntu安装jdk 编辑:程序博客网 时间:2024/06/03 17:39

Linux Mint Debian Edition13(64)

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 不起作用

Ubuntu13.10(64bit)

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)(这是jynic部分)

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

  

} //

PowerLinux(RedHat)

 

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.

关于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(jythoncPython2.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

 

 

0 0
原创粉丝点击