|
| 1 | +project( |
| 2 | + 'openslide-java', |
| 3 | + 'c', 'java', |
| 4 | + default_options : [ |
| 5 | + 'buildtype=debugoptimized', |
| 6 | + ], |
| 7 | + license : 'LGPL-2.1-only', |
| 8 | + meson_version : '>=0.62', |
| 9 | + version : '0.12.2', |
| 10 | +) |
| 11 | +meson.add_dist_script( |
| 12 | + 'scripts/dist.py' |
| 13 | +) |
| 14 | +java_ver = '1.8' |
| 15 | + |
| 16 | +# options |
| 17 | +# must be absolute path for openslide_jni_path |
| 18 | +install_dir = get_option('prefix') / get_option('libdir') / 'openslide-java' |
| 19 | + |
| 20 | +# Java setup |
| 21 | +jni = dependency( |
| 22 | + 'jni', |
| 23 | + version : '>=' + java_ver, |
| 24 | +) |
| 25 | +if meson.is_cross_build() |
| 26 | + # probably no native JNI headers available; use bundled generic ones |
| 27 | + jni = declare_dependency( |
| 28 | + dependencies : [jni], |
| 29 | + include_directories : ['cross'], |
| 30 | + ) |
| 31 | +elif host_machine.system() == 'darwin' |
| 32 | + if not meson.get_compiler('c').has_header('jni.h', dependencies : [jni]) |
| 33 | + # Meson < 1.0 doesn't know to check /usr/libexec/java_home |
| 34 | + darwin_java_home = run_command( |
| 35 | + '/usr/libexec/java_home', |
| 36 | + check : true, |
| 37 | + ).stdout().strip() |
| 38 | + message('Using JNI headers from ' + darwin_java_home) |
| 39 | + jni = declare_dependency( |
| 40 | + dependencies : [jni], |
| 41 | + include_directories : [ |
| 42 | + darwin_java_home / 'include', |
| 43 | + darwin_java_home / 'include/darwin' |
| 44 | + ], |
| 45 | + ) |
| 46 | + endif |
| 47 | +endif |
| 48 | +native_java_home = meson.get_external_property( |
| 49 | + 'java_home', |
| 50 | + '', |
| 51 | + native : true |
| 52 | +) |
| 53 | +jar = find_program( |
| 54 | + 'jar', |
| 55 | + dirs : native_java_home != '' ? [native_java_home / 'bin'] : [], |
| 56 | + native : true, |
| 57 | +) |
| 58 | + |
| 59 | +# compiler options |
| 60 | +add_project_arguments( |
| 61 | + '-Wno-pointer-to-int-cast', |
| 62 | + '-Wno-int-to-pointer-cast', |
| 63 | + language : 'c', |
| 64 | +) |
| 65 | +add_project_arguments( |
| 66 | + '-source', java_ver, |
| 67 | + '-target', java_ver, |
| 68 | + '-Xlint:-options', |
| 69 | + language : 'java', |
| 70 | +) |
| 71 | + |
| 72 | +# library dependencies |
| 73 | +openslide = dependency( |
| 74 | + 'openslide', |
| 75 | + version : '>=3.4.0', |
| 76 | +) |
| 77 | + |
| 78 | +# JNI |
| 79 | +jni_link_args = [] |
| 80 | +jni_prefix = [] |
| 81 | +jni_suffix = [] |
| 82 | +if host_machine.system() == 'windows' |
| 83 | + # JNI uses stdcall without @ |
| 84 | + jni_link_args += '-Wl,--kill-at' |
| 85 | + # skip "lib" prefix, even when built with MinGW |
| 86 | + jni_prefix = '' |
| 87 | +elif host_machine.system() == 'darwin' |
| 88 | + # special file extension for JNI libraries |
| 89 | + jni_suffix = 'jnilib' |
| 90 | +endif |
| 91 | +openslide_jni = shared_module( |
| 92 | + 'openslide-jni', |
| 93 | + 'openslide-jni.c', |
| 94 | + dependencies : [jni, openslide], |
| 95 | + install : true, |
| 96 | + install_dir : install_dir, |
| 97 | + link_args : jni_link_args, |
| 98 | + name_prefix : jni_prefix, |
| 99 | + name_suffix : jni_suffix, |
| 100 | +) |
| 101 | +fs = import('fs') |
| 102 | +openslide_jni_path = install_dir / fs.name(openslide_jni.full_path()) |
| 103 | + |
| 104 | +# jar |
| 105 | +jar_props = configure_file( |
| 106 | + input : 'meta/openslide.properties.in', |
| 107 | + output : 'openslide.properties', |
| 108 | + configuration : { |
| 109 | + # don't embed JNI library path in jar on Windows |
| 110 | + 'jni_path': host_machine.system() == 'windows' ? '' : openslide_jni_path, |
| 111 | + } |
| 112 | +) |
| 113 | +manifest_extra = configure_file( |
| 114 | + input : 'meta/MANIFEST.MF.in', |
| 115 | + output : 'MANIFEST.MF', |
| 116 | + configuration : { |
| 117 | + 'version': meson.project_version(), |
| 118 | + } |
| 119 | +) |
| 120 | +built_jar = jar( |
| 121 | + 'built', |
| 122 | + [ |
| 123 | + 'org/openslide/gui/Annotation.java', |
| 124 | + 'org/openslide/gui/DefaultAnnotation.java', |
| 125 | + 'org/openslide/gui/DefaultSelectionListModel.java', |
| 126 | + 'org/openslide/gui/Demo.java', |
| 127 | + 'org/openslide/gui/OpenSlideView.java', |
| 128 | + 'org/openslide/gui/SelectionListModel.java', |
| 129 | + 'org/openslide/AssociatedImage.java', |
| 130 | + 'org/openslide/OpenSlideDisposedException.java', |
| 131 | + 'org/openslide/OpenSlide.java', |
| 132 | + 'org/openslide/OpenSlideJNI.java', |
| 133 | + 'org/openslide/TestCLI.java', |
| 134 | + ], |
| 135 | + java_resources : structured_sources( |
| 136 | + [], |
| 137 | + { |
| 138 | + 'resources': jar_props, |
| 139 | + }, |
| 140 | + ), |
| 141 | + main_class : 'org.openslide.gui.Demo', |
| 142 | +) |
| 143 | +# https://github.com/mesonbuild/meson/issues/3070 |
| 144 | +openslide_jar = custom_target( |
| 145 | + capture : true, |
| 146 | + command : [jar, '-um', manifest_extra], |
| 147 | + feed : true, |
| 148 | + input : built_jar, |
| 149 | + install : true, |
| 150 | + install_dir : install_dir, |
| 151 | + install_tag : 'runtime', |
| 152 | + output : 'openslide.jar', |
| 153 | +) |
0 commit comments