cmake_minimum_required(VERSION 2.8) project(tigervnc-java Java) if(NOT VERSION) set(VERSION 1.3.80) endif() find_package(Java) set(DEFAULT_JAVACFLAGS "-source 1.5 -target 1.5 -Xlint:all,-serial,-cast,-unchecked,-fallthrough,-dep-ann,-deprecation,-rawtypes") set(JAVACFLAGS ${DEFAULT_JAVACFLAGS} CACHE STRING "Java compiler flags (Default: ${DEFAULT_JAVACFLAGS})") message(STATUS "Java compiler flags = ${JAVACFLAGS}") set(CLASSPATH com/tigervnc/vncviewer) set(SRCDIR ${CMAKE_CURRENT_SOURCE_DIR}) set(BINDIR ${CMAKE_CURRENT_BINARY_DIR}) set(JAVA_KEYSTORE NOTFOUND CACHE STRING "URL of keystore location") set(JAVA_KEYSTORE_TYPE "jks" CACHE STRING "Type of keystore (Default: \"jks\")") set(JAVA_KEY_ALIAS NOTFOUND CACHE STRING "Alias for the keystore entry used to generate the signature") set(JAVA_STOREPASS NOTFOUND CACHE STRING "Password required to access the keystore") set(JAVA_KEYPASS NOTFOUND CACHE STRING "Password used to protect the private key of the specified keystore entry") set(JAVA_TSA_URL NOTFOUND CACHE STRING "URL of Time Stamping Authority (TSA)") if(NOT BUILD) execute_process(COMMAND "date" "+%Y%m%d" OUTPUT_VARIABLE BUILD) endif() execute_process(COMMAND "date" "+%b %d %Y" OUTPUT_VARIABLE JAVA_DATE) execute_process(COMMAND "date" "+%H:%M:%S" OUTPUT_VARIABLE JAVA_TIME) string(REGEX REPLACE "\n" "" JAVA_DATE ${JAVA_DATE}) string(REGEX REPLACE "\n" "" JAVA_TIME ${JAVA_TIME}) string(REGEX REPLACE "\n" "" BUILD ${BUILD}) set(JAVA_SOURCES "") set(JAVA_CLASSES "") set(JSCH_CLASSNAMES DH DHG1 DHG14 DHGEX JSch Session UserAuth UserAuthKeyboardInteractive UserAuthPassword UserAuthPublicKey UserAuthNone jce/AES128CBC jce/AES192CTR jce/ARCFOUR128 jce/BlowfishCBC jce/HMACMD5 jce/KeyPairGenDSA jce/Random jce/SignatureRSA jce/AES128CTR jce/AES256CBC jce/ARCFOUR256 jce/DH jce/HMACSHA196 jce/KeyPairGenRSA jce/SHA1 jce/TripleDESCBC jce/AES192CBC jce/AES256CTR jce/ARCFOUR jce/HMACMD596 jce/HMACSHA1 jce/MD5 jce/SignatureDSA jce/TripleDESCTR jcraft/Compression jcraft/HMAC jcraft/HMACMD596 jcraft/HMACMD5 jcraft/HMACSHA196 jcraft/HMACSHA1) foreach(class ${JSCH_CLASSNAMES}) set(JAVA_SOURCES ${JAVA_SOURCES} com/jcraft/jsch/${class}.java) set(JAVA_CLASSES ${JAVA_CLASSES} ${BINDIR}/com/jcraft/jsch/${class}.class) endforeach() file(GLOB DEPEND_SOURCES ${SRCDIR}/${CLASSPATH}/*.java ${SRCDIR}/com/tigervnc/rfb/*.java ${SRCDIR}/com/tigervnc/rdr/*.java ${SRCDIR}/com/tigervnc/network/*.java ${SRCDIR}/com/jcraft/jsch/*.java ${SRCDIR}/com/jcraft/jsch/jcraft/*.java ${SRCDIR}/com/jcraft/jsch/jgss/*.java ${SRCDIR}/com/jcraft/jzlib/*.java) string(REGEX REPLACE " " ";" JAVACFLAGS "${JAVACFLAGS}") add_custom_command(OUTPUT ${JAVA_CLASSES} DEPENDS ${JAVA_SOURCES} ${DEPEND_SOURCES} COMMAND ${JAVA_COMPILE} ARGS ${JAVACFLAGS} -sourcepath ${SRCDIR} -d ${BINDIR} ${CLASSPATH}/VncViewer.java ${JAVA_SOURCES} WORKING_DIRECTORY ${SRCDIR}) configure_file(${CLASSPATH}/timestamp.in ${CLASSPATH}/timestamp) if(NOT "${SRCDIR}" STREQUAL "${BINDIR}") add_custom_command(OUTPUT ${BINDIR}/${CLASSPATH}/tigervnc.png COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SRCDIR}/${CLASSPATH}/tigervnc.png ${BINDIR}/${CLASSPATH}/tigervnc.png DEPENDS ${SRCDIR}/${CLASSPATH}/tigervnc.png) add_custom_command(OUTPUT ${BINDIR}/${CLASSPATH}/tigervnc.ico COMMAND ${CMAKE_COMMAND} -E copy_if_different ${SRCDIR}/${CLASSPATH}/tigervnc.ico ${BINDIR}/${CLASSPATH}/tigervnc.ico DEPENDS ${SRCDIR}/${CLASSPATH}/tigervnc.ico) endif() string(REGEX REPLACE "jar" "" Java_PATH ${Java_JAR_EXECUTABLE}) string(REGEX REPLACE ".exe" "" Java_PATH ${Java_PATH}) add_custom_command(OUTPUT VncViewer.jar DEPENDS ${JAVA_CLASSES} ${SRCDIR}/${CLASSPATH}/MANIFEST.MF ${BINDIR}/${CLASSPATH}/timestamp ${BINDIR}/${CLASSPATH}/tigervnc.png ${BINDIR}/${CLASSPATH}/tigervnc.ico COMMAND ${JAVA_ARCHIVE} ARGS cfm VncViewer.jar ${SRCDIR}/${CLASSPATH}/MANIFEST.MF ${CLASSPATH}/timestamp ${CLASSPATH}/*.class com/tigervnc/rfb/*.class com/tigervnc/rdr/*.class com/tigervnc/network/*.class com/jcraft/jzlib/*.class com/jcraft/jsch/jcraft/*.class com/jcraft/jsch/jce/*.class com/jcraft/jsch/*.class com/tigervnc/vncviewer/tigervnc.png com/tigervnc/vncviewer/tigervnc.ico COMMAND ${CMAKE_COMMAND} ARGS -DJava_PATH=${Java_PATH} -DJAR_FILE=${BINDIR}/VncViewer.jar -DJAVA_KEYSTORE=${JAVA_KEYSTORE} -DJAVA_KEYSTORE_TYPE=${JAVA_KEYSTORE_TYPE} -DJAVA_STOREPASS=${JAVA_STOREPASS} -DJAVA_KEYPASS=${JAVA_KEYPASS} -DJAVA_KEY_ALIAS=${JAVA_KEY_ALIAS} -DJAVA_TSA_URL=${JAVA_TSA_URL} -P ${SRCDIR}/cmake/SignJar.cmake) add_custom_target(java ALL DEPENDS VncViewer.jar) if(NOT WIN32) install(FILES ${BINDIR}/VncViewer.jar ${SRCDIR}/${CLASSPATH}/README ${SRCDIR}/${CLASSPATH}/index.vnc ${SRCDIR}/${CLASSPATH}/favicon.ico DESTINATION ${DATA_DIR}/vnc/classes) endif()