Print

Print


Commit in lcio on MAIN
FindJAVA.cmake+18-531.4 -> 1.5
dereferencing symbolic links improved

lcio
FindJAVA.cmake 1.4 -> 1.5
diff -u -r1.4 -r1.5
--- FindJAVA.cmake	13 Jul 2007 17:36:09 -0000	1.4
+++ FindJAVA.cmake	25 Nov 2008 16:09:44 -0000	1.5
@@ -3,7 +3,7 @@
 #
 # sets following variables:
 #
-# JAVA_FOUND    - TRUE/FALSE (javadoc in ignored for the test)
+# JAVA_FOUND    - TRUE/FALSE (javadoc is ignored for the test)
 #
 # JAVA_HOME     - base dir where subdirs bin, lib, jre and include are located
 # JAVA_BIN_PATH - path to subdirectory "${JAVA_HOME}/bin"
@@ -38,64 +38,29 @@
     FIND_PACKAGE( Java )
     
     IF( JAVA_RUNTIME AND JAVA_COMPILE AND JAVA_ARCHIVE )
+
         IF( UNIX AND NOT APPLE )
-            # look for the file binary
-            FIND_PROGRAM( FILE_BIN
-                file
-                /bin
-                /usr/bin
-                /usr/local/bin
-                /sbin
-            )
-            MARK_AS_ADVANCED( FILE_BIN )
+            # look for the readlink binary
+            FIND_PROGRAM( READLINK_BIN readlink )
+            MARK_AS_ADVANCED( READLINK_BIN )
             
-            IF( FILE_BIN )
-
-                # initialize some variables
-                SET( java_bin "${JAVA_RUNTIME}" )
-                SET( java_link_found TRUE )
-                SET( java_link_error FALSE )
-                MARK_AS_ADVANCED( java_bin java_link_found java_link_error )
+            IF( READLINK_BIN )
 
                 # dereference links
-                WHILE( java_link_found AND NOT java_link_error )
-                    # check if the java binary is a symbolic link
-                    EXEC_PROGRAM( ${FILE_BIN} ARGS "${java_bin}"
-                        OUTPUT_VARIABLE out_tmp
-                        RETURN_VALUE out_ret )
-                    IF( out_ret )
-                        IF( NOT JAVA_FIND_QUIETLY )
-                            MESSAGE( STATUS "Error dereferencing links to Java Home!!" )
-                            MESSAGE( STATUS "${out_tmp}" )
-                        ENDIF()
-                        SET( java_link_error TRUE )
-                    ENDIF()
-                    IF( NOT java_link_error )
-                        # set variable if link is found
-                        STRING( REGEX MATCH " symbolic link to " java_link_found "${out_tmp}" )
-                        IF( java_link_found )
-                            # get the file to where the link points to
-                            STRING( REGEX REPLACE ".* symbolic link to[^/]+([^'`´]+).*" "\\1" out_regex "${out_tmp}" )
-                            IF( NOT JAVA_FIND_QUIETLY )
-                                MESSAGE( STATUS "Java binary ${java_bin} is a symbolic link to ${out_regex}" )
-                            ENDIF()
-                            SET( java_bin "${out_regex}" )
-                        ENDIF()
-                    ENDIF()
-                ENDWHILE()
-
-                # check if something went wrong
-                IF( NOT java_link_error )
-                    # if not set JAVA_RUNTIME to the dereferenced link
-                    SET( JAVA_RUNTIME "${java_bin}" )
+                EXEC_PROGRAM( ${READLINK_BIN} ARGS "-f ${JAVA_COMPILE}"
+                    OUTPUT_VARIABLE javac_dereferenced
+                    RETURN_VALUE return_value )
+
+                IF( NOT return_value )
+                    GET_FILENAME_COMPONENT( JAVA_BIN_PATH ${javac_dereferenced} PATH )
+                ELSE()
+                    GET_FILENAME_COMPONENT( JAVA_BIN_PATH ${JAVA_COMPILE} PATH )
                 ENDIF()
             ENDIF()
+
+            GET_FILENAME_COMPONENT( JAVA_HOME ${JAVA_BIN_PATH} PATH )
+
         ENDIF()
-        
-        # extract java home path out of full path to java runtime
-        STRING( REGEX REPLACE "(.*)\\/[^/]+\\/java$" "\\1" JAVA_HOME ${JAVA_RUNTIME} )
-        # extract java bin path out of full path to java runtime
-        STRING( REGEX REPLACE "(.*)\\/java$" "\\1" JAVA_BIN_PATH ${JAVA_RUNTIME} )
     ELSE()
         IF( NOT JAVA_FIND_QUIETLY )
             MESSAGE( STATUS "Failed to autodetect Java!!" )
@@ -146,7 +111,7 @@
 
     SET( JAVA_BIN_PATH JAVA_BIN_PATH-NOTFOUND )
     FIND_PATH( JAVA_BIN_PATH
-        java
+        javac
         ${JAVA_HOME}/bin
         ${JAVA_HOME}/Commands   # FIXME MacOS
         NO_DEFAULT_PATH )
CVSspam 0.2.8