From 5321da92cbde406821817fc323b0045799c66004 Mon Sep 17 00:00:00 2001 From: Andrey Pavlenko Date: Mon, 18 Feb 2013 11:23:44 +0400 Subject: [PATCH 1/4] adding/fixing version suffix for desktop java library on all OSes --- modules/java/CMakeLists.txt | 12 +++++++++--- modules/java/generator/gen_java.py | 27 ++++++++++++++++++++------- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/modules/java/CMakeLists.txt b/modules/java/CMakeLists.txt index 2fc52a703..2639fe5a5 100644 --- a/modules/java/CMakeLists.txt +++ b/modules/java/CMakeLists.txt @@ -217,6 +217,12 @@ endif(ANDROID AND ANDROID_EXECUTABLE) set(step3_depends ${step2_depends} ${step3_input_files} ${copied_files}) +if(ANDROID) + set(LIB_NAME_SUFIX "") +else() + set(LIB_NAME_SUFIX "${OPENCV_VERSION_MAJOR}${OPENCV_VERSION_MINOR}${OPENCV_VERSION_PATCH}") +endif() + # step 4: build jar if(ANDROID) set(JAR_FILE "${OpenCV_BINARY_DIR}/bin/classes.jar") @@ -241,7 +247,7 @@ if(ANDROID) ) endif() else(ANDROID) - set(JAR_NAME opencv-${OPENCV_VERSION}.jar) + set(JAR_NAME opencv-${LIB_NAME_SUFIX}.jar) set(JAR_FILE "${OpenCV_BINARY_DIR}/bin/${JAR_NAME}") configure_file("${CMAKE_CURRENT_SOURCE_DIR}/build.xml.in" "${OpenCV_BINARY_DIR}/build.xml" IMMEDIATE @ONLY) list(APPEND step3_depends "${OpenCV_BINARY_DIR}/build.xml") @@ -294,8 +300,8 @@ endif() # Additional target properties set_target_properties(${the_module} PROPERTIES - OUTPUT_NAME "${the_module}${OPENCV_DLLVERSION}" - DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}" + OUTPUT_NAME "${the_module}${LIB_NAME_SUFIX}" + #DEBUG_POSTFIX "${OPENCV_DEBUG_POSTFIX}" ARCHIVE_OUTPUT_DIRECTORY ${LIBRARY_OUTPUT_PATH} RUNTIME_OUTPUT_DIRECTORY ${EXECUTABLE_OUTPUT_PATH} INSTALL_NAME_DIR ${OPENCV_LIB_INSTALL_PATH} diff --git a/modules/java/generator/gen_java.py b/modules/java/generator/gen_java.py index 0f3ba1d33..2b4aad222 100755 --- a/modules/java/generator/gen_java.py +++ b/modules/java/generator/gen_java.py @@ -559,6 +559,15 @@ func_arg_fix = { }, # '', i.e. no class } # func_arg_fix + +def getLibVersion(version_hpp_path): + version_file = open(version_hpp_path, "rt").read() + epoch = re.search("^W*#\W*define\W+CV_VERSION_EPOCH\W+(\d+)\W*$", version_file, re.MULTILINE).group(1) + major = re.search("^W*#\W*define\W+CV_VERSION_MAJOR\W+(\d+)\W*$", version_file, re.MULTILINE).group(1) + minor = re.search("^W*#\W*define\W+CV_VERSION_MINOR\W+(\d+)\W*$", version_file, re.MULTILINE).group(1) + patch = re.search("^W*#\W*define\W+CV_VERSION_REVISION\W+(\d+)\W*$", version_file, re.MULTILINE).group(1) + return (epoch, major, minor, patch) + class ConstInfo(object): def __init__(self, cname, name, val, addedManually=False): self.cname = cname @@ -721,13 +730,17 @@ $imports public class %(jc)s { """ % { 'm' : self.module, 'jc' : jname } ) -# self.java_code[class_name]["jn_code"].write(""" -# // -# // native stuff -# // -# static { System.loadLibrary("opencv_java"); } -#""" ) - + if class_name == 'Core': + (epoch, major, minor, patch) = getLibVersion( + (os.path.dirname(__file__) or '.') + '/../../core/include/opencv2/core/version.hpp') + version_str = '.'.join( (epoch, major, minor, patch) ) + version_suffix = ''.join( (epoch, major, minor) ) + #if version_suffix.endswith('0'): + # version_suffix = version_suffix[0 : -1] + self.classes[class_name].imports.add("java.lang.String") + self.java_code[class_name]["j_code"].write(""" + public static final String VERSION = "%(v)s", VERSION_SUFFIX = "%(vs)s"; +""" % { 'v' : version_str, 'vs' : version_suffix } ) def add_class(self, decl): From 29b763dc60c25f08ea188cac1f809cedaf9c8d28 Mon Sep 17 00:00:00 2001 From: Andrey Pavlenko Date: Thu, 28 Feb 2013 16:24:52 +0400 Subject: [PATCH 2/4] updating samples to load JNI lib with correct suffix --- samples/java/ant/src/SimpleSample.java | 4 +++- samples/java/eclipse/HelloCV/src/Main.java | 4 +++- samples/java/sbt/src/main/scala/Main.scala | 5 ++++- 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/samples/java/ant/src/SimpleSample.java b/samples/java/ant/src/SimpleSample.java index 990536f2b..fb8be464d 100644 --- a/samples/java/ant/src/SimpleSample.java +++ b/samples/java/ant/src/SimpleSample.java @@ -1,12 +1,14 @@ +import org.opencv.core.Core; import org.opencv.core.Mat; import org.opencv.core.CvType; import org.opencv.core.Scalar; class SimpleSample { - static{ System.loadLibrary("opencv_java244"); } + static{ System.loadLibrary("opencv_java" + Core.VERSION_SUFFIX); } public static void main(String[] args) { + System.out.println("Welcome to OpenCV " + Core.VERSION); Mat m = new Mat(5, 10, CvType.CV_8UC1, new Scalar(0)); System.out.println("OpenCV Mat: " + m); Mat mr1 = m.row(1); diff --git a/samples/java/eclipse/HelloCV/src/Main.java b/samples/java/eclipse/HelloCV/src/Main.java index 0e9bb5898..18d4b3db5 100644 --- a/samples/java/eclipse/HelloCV/src/Main.java +++ b/samples/java/eclipse/HelloCV/src/Main.java @@ -1,10 +1,12 @@ +import org.opencv.core.Core; import org.opencv.core.CvType; import org.opencv.core.Mat; public class Main { public static void main(String[] args) { - System.loadLibrary("opencv_java244"); + System.out.println("Welcome to OpenCV " + Core.VERSION); + System.loadLibrary("opencv_java" + Core.VERSION_SUFFIX); Mat m = Mat.eye(3, 3, CvType.CV_8UC1); System.out.println("m = " + m.dump()); } diff --git a/samples/java/sbt/src/main/scala/Main.scala b/samples/java/sbt/src/main/scala/Main.scala index 4a68d144a..f2de5c350 100644 --- a/samples/java/sbt/src/main/scala/Main.scala +++ b/samples/java/sbt/src/main/scala/Main.scala @@ -8,11 +8,14 @@ * You're invited to submit your own examples, in any JVM language of * your choosing so long as you can get them to build. */ + +import org.opencv.core.Core + object Main extends App { // We must load the native library before using any OpenCV functions. // You must load this library _exactly once_ per Java invocation. // If you load it more than once, you will get a java.lang.UnsatisfiedLinkError. - System.loadLibrary("opencv_java") + System.loadLibrary("opencv_java" + Core.VERSION_SUFFIX) ScalaCorrespondenceMatchingDemo.run() ScalaDetectFaceDemo.run() From c24d7cc066f28770a5b93054caf78ca95c15852b Mon Sep 17 00:00:00 2001 From: Andrey Pavlenko Date: Thu, 28 Feb 2013 16:56:53 +0400 Subject: [PATCH 3/4] adding more version-related variables --- modules/java/generator/gen_java.py | 5 +++-- samples/java/ant/src/SimpleSample.java | 2 +- samples/java/eclipse/HelloCV/src/Main.java | 2 +- samples/java/sbt/src/main/scala/Main.scala | 2 +- 4 files changed, 6 insertions(+), 5 deletions(-) diff --git a/modules/java/generator/gen_java.py b/modules/java/generator/gen_java.py index 2b4aad222..89b59bdf2 100755 --- a/modules/java/generator/gen_java.py +++ b/modules/java/generator/gen_java.py @@ -739,8 +739,9 @@ public class %(jc)s { # version_suffix = version_suffix[0 : -1] self.classes[class_name].imports.add("java.lang.String") self.java_code[class_name]["j_code"].write(""" - public static final String VERSION = "%(v)s", VERSION_SUFFIX = "%(vs)s"; -""" % { 'v' : version_str, 'vs' : version_suffix } ) + public static final String VERSION = "%(v)s", NATIVE_LIBRARY_NAME = "opencv_java%(vs)s"; + public static final int VERSION_EPOCH = %(ep)s, VERSION_MAJOR = %(ma)s, VERSION_MINOR = %(mi)s, VERSION_PATCH = %(pa)s; +""" % { 'v' : version_str, 'vs' : version_suffix, 'ep' : epoch, 'ma' : major, 'mi' : minor, 'pa' : patch } ) def add_class(self, decl): diff --git a/samples/java/ant/src/SimpleSample.java b/samples/java/ant/src/SimpleSample.java index fb8be464d..a0375c562 100644 --- a/samples/java/ant/src/SimpleSample.java +++ b/samples/java/ant/src/SimpleSample.java @@ -5,7 +5,7 @@ import org.opencv.core.Scalar; class SimpleSample { - static{ System.loadLibrary("opencv_java" + Core.VERSION_SUFFIX); } + static{ System.loadLibrary(Core.NATIVE_LIBRARY_NAME); } public static void main(String[] args) { System.out.println("Welcome to OpenCV " + Core.VERSION); diff --git a/samples/java/eclipse/HelloCV/src/Main.java b/samples/java/eclipse/HelloCV/src/Main.java index 18d4b3db5..44f2bb02b 100644 --- a/samples/java/eclipse/HelloCV/src/Main.java +++ b/samples/java/eclipse/HelloCV/src/Main.java @@ -6,7 +6,7 @@ public class Main { public static void main(String[] args) { System.out.println("Welcome to OpenCV " + Core.VERSION); - System.loadLibrary("opencv_java" + Core.VERSION_SUFFIX); + System.loadLibrary(Core.NATIVE_LIBRARY_NAME); Mat m = Mat.eye(3, 3, CvType.CV_8UC1); System.out.println("m = " + m.dump()); } diff --git a/samples/java/sbt/src/main/scala/Main.scala b/samples/java/sbt/src/main/scala/Main.scala index f2de5c350..6f07aa19c 100644 --- a/samples/java/sbt/src/main/scala/Main.scala +++ b/samples/java/sbt/src/main/scala/Main.scala @@ -15,7 +15,7 @@ object Main extends App { // We must load the native library before using any OpenCV functions. // You must load this library _exactly once_ per Java invocation. // If you load it more than once, you will get a java.lang.UnsatisfiedLinkError. - System.loadLibrary("opencv_java" + Core.VERSION_SUFFIX) + System.loadLibrary(Core.NATIVE_LIBRARY_NAME) ScalaCorrespondenceMatchingDemo.run() ScalaDetectFaceDemo.run() From d18b2c2502cdb182225bce80350b4a149d60768a Mon Sep 17 00:00:00 2001 From: Andrey Pavlenko Date: Thu, 28 Feb 2013 17:19:52 +0400 Subject: [PATCH 4/4] patch -> revision --- modules/java/generator/gen_java.py | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/modules/java/generator/gen_java.py b/modules/java/generator/gen_java.py index 89b59bdf2..c0da34fe0 100755 --- a/modules/java/generator/gen_java.py +++ b/modules/java/generator/gen_java.py @@ -565,8 +565,8 @@ def getLibVersion(version_hpp_path): epoch = re.search("^W*#\W*define\W+CV_VERSION_EPOCH\W+(\d+)\W*$", version_file, re.MULTILINE).group(1) major = re.search("^W*#\W*define\W+CV_VERSION_MAJOR\W+(\d+)\W*$", version_file, re.MULTILINE).group(1) minor = re.search("^W*#\W*define\W+CV_VERSION_MINOR\W+(\d+)\W*$", version_file, re.MULTILINE).group(1) - patch = re.search("^W*#\W*define\W+CV_VERSION_REVISION\W+(\d+)\W*$", version_file, re.MULTILINE).group(1) - return (epoch, major, minor, patch) + revision = re.search("^W*#\W*define\W+CV_VERSION_REVISION\W+(\d+)\W*$", version_file, re.MULTILINE).group(1) + return (epoch, major, minor, revision) class ConstInfo(object): def __init__(self, cname, name, val, addedManually=False): @@ -731,17 +731,15 @@ public class %(jc)s { """ % { 'm' : self.module, 'jc' : jname } ) if class_name == 'Core': - (epoch, major, minor, patch) = getLibVersion( + (epoch, major, minor, revision) = getLibVersion( (os.path.dirname(__file__) or '.') + '/../../core/include/opencv2/core/version.hpp') - version_str = '.'.join( (epoch, major, minor, patch) ) + version_str = '.'.join( (epoch, major, minor, revision) ) version_suffix = ''.join( (epoch, major, minor) ) - #if version_suffix.endswith('0'): - # version_suffix = version_suffix[0 : -1] self.classes[class_name].imports.add("java.lang.String") self.java_code[class_name]["j_code"].write(""" public static final String VERSION = "%(v)s", NATIVE_LIBRARY_NAME = "opencv_java%(vs)s"; - public static final int VERSION_EPOCH = %(ep)s, VERSION_MAJOR = %(ma)s, VERSION_MINOR = %(mi)s, VERSION_PATCH = %(pa)s; -""" % { 'v' : version_str, 'vs' : version_suffix, 'ep' : epoch, 'ma' : major, 'mi' : minor, 'pa' : patch } ) + public static final int VERSION_EPOCH = %(ep)s, VERSION_MAJOR = %(ma)s, VERSION_MINOR = %(mi)s, VERSION_REVISION = %(re)s; +""" % { 'v' : version_str, 'vs' : version_suffix, 'ep' : epoch, 'ma' : major, 'mi' : minor, 're' : revision } ) def add_class(self, decl):