summaryrefslogtreecommitdiffstatshomepage
path: root/3rdparty/portmidi/pm_java/CMakeLists.txt
diff options
context:
space:
mode:
Diffstat (limited to '3rdparty/portmidi/pm_java/CMakeLists.txt')
-rw-r--r--3rdparty/portmidi/pm_java/CMakeLists.txt129
1 files changed, 84 insertions, 45 deletions
diff --git a/3rdparty/portmidi/pm_java/CMakeLists.txt b/3rdparty/portmidi/pm_java/CMakeLists.txt
index a3506202792..0bec03f04ae 100644
--- a/3rdparty/portmidi/pm_java/CMakeLists.txt
+++ b/3rdparty/portmidi/pm_java/CMakeLists.txt
@@ -1,47 +1,86 @@
-# pm_java
+# pm_java/CMakeLists.txt -- builds pmjni and pmdefaults program
+find_package(Java)
+message(STATUS "Java_JAVA_EXECUTABLE is " ${Java_JAVA_EXECUTABLE})
+
+if(BUILD_PMDEFAULTS)
+ # Since pmdefaults and pmdefaults.bat are in the source tree and look
+ # for libpmjni in the same tree, out-of-source build will not create
+ # a working pmdefaults (without more work):
+ if(NOT (${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}))
+ message(WARNING "PmDefaults only works when run in the pm_java/pmdefaults directory after an in-source build. This is an out-of-source build, so [probably] libpmjni will be built out-of-source, pmdefaults.jar will be built in-source, and the pmdefaults[.bat] script remains in-source. Rebuild in-source to use PmDefaults or adjust the file locations and scripts to suit yourself.")
+ endif()
+
+ set(JPORTMIDICLASS JPortMidi.class JPortMidiException.class
+ JPortMidiApi.class)
+ set(PMDEFAULTSCLASS PmDefaultsFrame.class PmDefaults.class)
+ prepend_path(JPORTMIDIPATH jportmidi/ ${JPORTMIDICLASS})
+ prepend_path(PMDEFAULTSPATH pmdefaults/ ${PMDEFAULTSCLASS})
+ set(PMDEFAULTS_ALL ${JPORTMIDIPATH} ${PMDEFAULTSPATH})
+
+ project(pmdefaults NONE)
+ include(UseJava)
+ add_jar(pmdefaults
+ SOURCES pmdefaults/PmDefaults.java pmdefaults/PmDefaultsFrame.java
+ jportmidi/JPortMidi.java jportmidi/JPortMidiApi.java
+ jportmidi/JPortMidiException.java
+ RESOURCES NAMESPACE "." pmdefaults/portmusic_logo.png
+ MANIFEST pmdefaults/manifest.txt
+ OUTPUT_DIR pmdefaults)
+ if(WIN32)
+ set(JAVAVM_LIB ${JAVA_INCLUDE_PATH}/../jre/lib/i386/client/libjvm.so)
+ endif()
+ add_dependencies(pmdefaults pmjni)
+endif(BUILD_PMDEFAULTS)
+
+# Build pmjni
+# this CMakeLists.txt is only loaded if BUILD_JAVA_NATIVE_INTERFACE
+# This jni library includes portmidi sources to give just
+# one library for JPortMidi users to manage rather than two.
if(UNIX)
- if(APPLE)
- # java not dealt with in CMake -- see pm_mac/pm_mac.xcodeproj
- else(APPLE)
- # linux
- set(JPORTMIDICLASS JPortMidi.class JPortMidiException.class
- JPortMidiApi.class)
- set(PMDEFAULTSCLASS PmDefaultsFrame.class PmDefaults.class)
- prepend_path(JPORTMIDICLASS2 jportmidi/ ${JPORTMIDICLASS})
- prepend_path(PMDEFAULTSCLASS2 pmdefaults/ ${PMDEFAULTSCLASS})
- set(PMDEFAULTS_ALL_CLASSES ${JPORTMIDICLASS2} ${PMDEFAULTSCLASS2})
- # message(STATUS "PMDEFAULTS_ALL_CLASSES is " ${PMDEFAULTS_ALL_CLASSES})
- add_custom_command(OUTPUT pmdefaults/PmDefaultsFrame.class
- COMMAND javac -classpath . pmdefaults/PmDefaultsFrame.java
- MAIN_DEPENDENCY pmdefaults/PmDefaultsFrame.java
- DEPENDS pmdefaults/PmDefaults.java
- WORKING_DIRECTORY pm_java)
- add_custom_command(OUTPUT pmdefaults/PmDefaults.class
- COMMAND javac -classpath . pmdefaults/PmDefaults.java
- MAIN_DEPENDENCY pmdefaults/PmDefaults.java
- DEPENDS pmdefaults/PmDefaultsFrame.java
- WORKING_DIRECTORY pm_java)
- add_custom_command(OUTPUT ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/pmdefaults.jar
- COMMAND cp pmdefaults/portmusic_logo.png .
- COMMAND jar cmf pmdefaults/manifest.txt pmdefaults.jar
- pmdefaults/*.class portmusic_logo.png jportmidi/*.class
- COMMAND chmod +x pmdefaults/pmdefaults
- COMMAND cp pmdefaults/pmdefaults ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
- COMMAND mv pmdefaults.jar ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}
- COMMAND rm portmusic_logo.png
- MAIN_DEPENDENCY pmdefaults/PmDefaults.class
- DEPENDS ${PMDEFAULTS_ALL_CLASSES}
- WORKING_DIRECTORY pm_java)
- add_custom_target(pmdefaults_target ALL
- DEPENDS ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/pmdefaults.jar)
- # message(STATUS "add_custom_target: pmdefaults.jar")
-
- # install the libraries (Linux only)
- INSTALL(FILES ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/pmdefaults.jar
- DESTINATION /usr/share/java)
- INSTALL(PROGRAMS ${CMAKE_LIBRARY_OUTPUT_DIRECTORY}/pmdefaults
- DESTINATION /usr/local/bin)
- endif(APPLE)
-endif(UNIX)
-# In windows, use pm_java/make.bat
+ include(FindJNI)
+ # message(STATUS "JAVA_JVM_LIB_PATH is " ${JAVA_JVM_LIB_PATH})
+ # message(STATUS "JAVA_INCLUDE_PATH is " ${JAVA_INCLUDE_PATH})
+ # note: should use JAVA_JVM_LIB_PATH, but it is not set properly
+ # note: user might need to set JAVA_INCLUDE_PATH manually
+ #
+ # this will probably break on BSD and other Unix systems; the fix
+ # depends on whether FindJNI can find Java or not. If yes, then
+ # we should try to rely on automatically set JAVA_INCLUDE_PATH and
+ # JAVA_INCLUDE_PATH2; if no, then we need to make both JAVA_INCLUDE_PATH
+ # and JAVA_INCLUDE_PATH2 set by user (will need clear documentation
+ # because JAVA_INCLUDE_PATH2 is pretty obscure)
+ set(JAVA_INCLUDE_PATH ${JAVA_INCLUDE_PATH-UNKNOWN}
+ CACHE STRING "where to find Java SDK include directory")
+ # libjvm.so is found relative to JAVA_INCLUDE_PATH:
+ if (HAIKU)
+ set(JAVA_INCLUDE_PATHS ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH}/haiku)
+ else()
+ set(JAVA_INCLUDE_PATHS ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH}/linux)
+ endif()
+elseif(WIN32)
+ include(FindJNI)
+ # note: should use JAVA_JVM_LIB_PATH, but it is not set properly
+ set(JAVAVM_LIB ${JAVA_INCLUDE_PATH}/../lib/jvm.lib)
+
+ set(JAVA_INCLUDE_PATHS ${JAVA_INCLUDE_PATH} ${JAVA_INCLUDE_PATH2})
+ # message(STATUS "JAVA_INCLUDE_PATHS: " ${JAVA_INCLUDE_PATHS})
+ # message(STATUS "JAVAVM_LIB: " ${JAVAVM_LIB})
+endif()
+
+add_library(pmjni SHARED pmjni/pmjni.c)
+target_sources(pmjni PRIVATE ${PM_LIB_PUBLIC_SRC} ${PM_LIB_PRIVATE_SRC})
+message(STATUS "Java paths ${JAVA_INCLUDE_PATHS}")
+# message(STATUS "Java pmjni src: pmjni/pmjni.c ${PM_LIB_SHARED_SRC} "
+# "${PM_LIB_PRIVATE_SRC}")
+target_include_directories(pmjni PUBLIC ${JAVA_INCLUDE_PATHS})
+target_link_libraries(pmjni ${PM_NEEDED_LIBS})
+set_target_properties(pmjni PROPERTIES
+ VERSION ${LIBRARY_VERSION}
+ SOVERSION ${LIBRARY_SOVERSION}
+ LIBRARY_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
+ RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
+ ARCHIVE_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}"
+ EXECUTABLE_EXTENSION "jnilib"
+ MACOSX_RPATH ON)
+