从 Scons 下的 Swig 接口 (.i) 生成 Java 类

Generating Java Classes from a Swig Interface (.i) under Scons

当我尝试 运行 scons (2.3.0) 从 SWIG 接口文件构建 class 时,scons 无法获取所有生成的文件,无论是在源路径中,或包含在构建中(即使设置了 classpath)。相反,仅尝试编译两个 java 文件,但都失败了,因为它们是从其他 classes 派生的。

loc_env = env.Clone()
loc_env['JAVACLASSPATH']= ['build/$TARGET_ARCH/$TARGET_OS/.../java']
swig_j = loc_env.Java(target='.', source=['source_java.i']) #1
#swig_j = loc_env.Jar(target='.', source=['source_java.i']) #2

#1 和#2 都没有产生结果。 #2 显示一条错误消息,指出源未被接受,并且是一个空白字符串,我可以接受,即使示例代码表明它应该可以工作。

对于 #1 根本原因似乎在 Scons/Tool/swig.py def _find_modules(src): 中,它有一个正则表达式来匹配所有生成的模块,但没有考虑任何原始枚举或来自结束 C 代码。当我有一个手动生成文件时 classpath

作为参考,#1 的 javac 构建指令是:

javac -classpath build/x86_64/linux/.../java -d build/x86_64/linux/.../java/ -sourcepath build/x86_64/linux/.../java build/x86_64/linux/release/.../source.java build/x86_64/linux/release/.../sourceJNI.java

这是已知错误吗(作为 SCONS 处理 1->N 映射的一部分)?它是 .i 文件的 Scons 解析中的缺陷吗?还是更根本的问题?

这是 SCons 中的错误。 2.5.0 的更改通过改进跨语言扫描解决了这个问题。我期待明年的某个时候破解我的黑客!