1# This file is part of the Spring engine (GPL v2 or later), see LICENSE.html 2 3# 4# Spring Java related CMake utilities 5# ----------------------------------- 6# 7# Variables set in this file: 8# * JAVA_GLOBAL_LIBS_DIRS 9# 10# Functions and macros defined in this file: 11# * FindJavaLib 12# * GetFirstSubDirName 13# * CreateClasspath 14# * ConcatClasspaths 15# * IsMavenProject 16# * FindManifestFile 17# 18 19 20if (CMAKE_HOST_WIN32) 21 set(JAVA_GLOBAL_LIBS_DIRS "${MINGWLIBS}") 22else (CMAKE_HOST_WIN32) 23 set(JAVA_GLOBAL_LIBS_DIRS "/usr/share/java" "/usr/local/share/java") 24endif (CMAKE_HOST_WIN32) 25MakeGlobal(JAVA_GLOBAL_LIBS_DIRS) 26 27 28# Looks for a Java library (Jar file) in system wide search paths and in 29# additional dirs supplied as argument. 30macro (FindJavaLib path_var libName additionalSearchDirs) 31 find_file(${path_var} "${libName}.jar" 32 PATHS ${additionalSearchDirs} ${JAVA_GLOBAL_LIBS_DIRS} 33 DOC "Path to the Java library ${libName}.jar" 34 NO_DEFAULT_PATH 35 NO_CMAKE_FIND_ROOT_PATH 36 ) 37 if (NOT ${path_var}) 38 message(SEND_ERROR "${libName}.jar not found!") 39 else (NOT ${path_var}) 40 AIMessage(STATUS "Found ${libName}.jar: ${${path_var}}") 41 endif (NOT ${path_var}) 42endmacro (FindJavaLib path_var libName additionalSearchDirs) 43 44 45# Returns the name of the first sub-dir (in alphabetical descending order) 46# under dir. 47macro (GetFirstSubDirName name_var dir) 48 file(GLOB dirContent RELATIVE "${dir}" "${dir}/*") 49 foreach (dirPart ${dirContent}) 50 if (IS_DIRECTORY "${dir}/${dirPart}") 51 set(${name_var} ${dirPart}) 52 break() 53 endif (IS_DIRECTORY "${dir}/${dirPart}") 54 endforeach (dirPart) 55endmacro (GetFirstSubDirName name_var dir) 56 57 58# Recursively lists all JAR files in a given directory 59# and concatenates them in a Java Classpath compatible way into a single string. 60macro (CreateClasspath classPath_var dir) 61 file(GLOB_RECURSE ${classPath_var} FOLLOW_SYMLINKS "${dir}/*.jar") 62 # Make sure we use the correct path delimitter for the compiling system 63 string(REPLACE ";" "${PATH_DELIM_H}" ${classPath_var} "${${classPath_var}}") 64endmacro (CreateClasspath classPath_var dir) 65 66 67# Concatenates an arbritrary number of Java ClassPaths (may be empty). 68function (ConcatClasspaths resultingCP_var) 69 set(${resultingCP_var} "") 70 foreach (cpPart ${ARGN}) 71 set(${resultingCP_var} "${${resultingCP_var}}${cpPart}${PATH_DELIM_H}") 72 endforeach (cpPart) 73 string(REGEX REPLACE "${PATH_DELIM_H}\$" "" ${resultingCP_var} "${${resultingCP_var}}") 74 set(${resultingCP_var} "${${resultingCP_var}}" PARENT_SCOPE) 75endfunction (ConcatClasspaths) 76 77 78# Checks if a given directory is the root of a Maven project. 79# The result variable will be set to TRUE or FALSE 80function (IsMavenProject dirToCheck result_var) 81 set(${result_var} FALSE) 82 if (EXISTS "${dirToCheck}/pom.xml") 83 set(${result_var} TRUE) 84 endif (EXISTS "${dirToCheck}/pom.xml") 85 set(${result_var} "${${result_var}}" PARENT_SCOPE) 86endfunction (IsMavenProject) 87 88 89# Look for a manifest.mf file in a few specific sub-dirs. 90# This could be done with a simple find_file call, 91# but that strangely does not find the file under win32, 92# so we use this workaround 93function (FindManifestFile srcDir result_var) 94 set(manifestSubdirs 95 "/src/main/resources/META-INF/" 96 "/src/" 97 "/") 98 set(${result_var} "${result_var}-NOTFOUND") 99 if (CMAKE_HOST_WIN32) 100 foreach(subDir_var ${manifestSubdirs}) 101 if (EXISTS "${srcDir}${subDir_var}manifest.mf") 102 set(${result_var} "${srcDir}${subDir_var}manifest.mf") 103 break() 104 endif (EXISTS "${srcDir}${subDir_var}manifest.mf") 105 endforeach(subDir_var) 106 else (CMAKE_HOST_WIN32) 107 find_file(${result_var} 108 NAMES "manifest.mf" "MANIFEST.MF" 109 PATHS "${srcDir}" 110 PATH_SUFFIXES ${manifestSubdirs} 111 NO_DEFAULT_PATH) 112 endif (CMAKE_HOST_WIN32) 113 set(${result_var} ${${result_var}} PARENT_SCOPE) 114endfunction (FindManifestFile) 115 116