# - Find the LEF/DEF includes and libraries.
# The following variables are set if LEF/DEF is found.  If LEF/DEF is not
# found, LEFDEF_FOUND is set to false.
#  LEFDEF_FOUND       - True when LEF/DEF is found.
#  LEFDEF_INCLUDE_DIR - the path to where the LEF/DEF include files are.
#  LEFDEF_LIBRARIES   - The path to where the LEF/DEF library files are.
#
#  The DEF C API library:           LEFDEF_CDEF_LIBRARY
#                                   LEFDEF_CDEF_LIBRARY_RELEASE
#
#  The DEF C API library (zlib) :   LEFDEF_ZCDEF_LIBRARY
#                                   LEFDEF_ZCDEF_LIBRARY_RELEASE
#
#  The DEF C++ API library:         LEFDEF_DEF_LIBRARY
#                                   LEFDEF_DEF_LIBRARY_RELEASE
#
#  The DEF C++ API library (zlib) : LEFDEF_ZDEF_LIBRARY
#                                   LEFDEF_ZDEF_LIBRARY_RELEASE
#
#  The LEF C API library:           LEFDEF_CLEF_LIBRARY
#                                   LEFDEF_CLEF_LIBRARY_RELEASE
#
#  The LEF C API library (zlib) :   LEFDEF_ZCLEF_LIBRARY
#                                   LEFDEF_ZCLEF_LIBRARY_RELEASE
#
#  The LEF C++ API library:         LEFDEF_LEF_LIBRARY
#                                   LEFDEF_LEF_LIBRARY_RELEASE
#
#  The LEF C++ API library (zlib) : LEFDEF_ZLEF_LIBRARY
#                                   LEFDEF_ZLEF_LIBRARY_RELEASE

# Try to find a reasonable CORIOLIS_TOP value.
 if( NOT("$ENV{CORIOLIS_USER_TOP}" STREQUAL "") )
   set ( CORIOLIS_USER_TOP "$ENV{CORIOLIS_USER_TOP}" )
 else( NOT("$ENV{CORIOLIS_USER_TOP}" STREQUAL "") )
   if( NOT("$ENV{CORIOLIS_TOP}" STREQUAL "") )
     set ( CORIOLIS_TOP "$ENV{CORIOLIS_TOP}" )
   endif( NOT("$ENV{CORIOLIS_TOP}" STREQUAL "") )
 endif( NOT("$ENV{CORIOLIS_USER_TOP}" STREQUAL "") )


 macro( _find_lefdef_lib varname libname )
   find_library( LEFDEF_${varname}_LIBRARY_RELEASE NAMES ${libname}       PATHS ${LEFDEF_LIBRARY_DIR} )
 
   if( LEFDEF_${varname}_LIBRARY_RELEASE )
     set( LEFDEF_${varname}_LIBRARY_DEBUG ${LEFDEF_${varname}_LIBRARY_RELEASE} CACHE STRING "Path to a library" FORCE )
   endif()
 
   if( LEFDEF_${varname}_LIBRARY_RELEASE )
     list( APPEND LEFDEF_LIBRARIES "optimized" ${LEFDEF_${varname}_LIBRARY_RELEASE}
                                   "debug"     ${LEFDEF_${varname}_LIBRARY_DEBUG} )
     set( LEFDEF_${varname}_LIBRARY_FOUND 1 )
     mark_as_advanced( LEFDEF_${varname}_LIBRARY_RELEASE
                       LEFDEF_${varname}_LIBRARY_DEBUG )
   else()
     set ( LEFDEF_FOUND "NO" )
   endif()
 endmacro()


 set( LEFDEF_INCLUDE_DIR_DESCRIPTION "directory containing the LEF/DEF include files. E.g /opt/lefdef-5.6/include" )
 set( LEFDEF_LIBRARY_DIR_DESCRIPTION "directory containing the LEF/DEF library files. E.g /opt/lefdef-5.6/lib" )
 set( LEFDEF_DIR_MESSAGE             "Set the LEFDEF_INCLUDE_DIR cmake cache entry to the ${LEFDEF_INCLUDE_DIR_DESCRIPTION}" )


# Don't even bother under Win32
 if( UNIX )
   set( LEFDEF_FOUND "YES" )
   set( LEFDEF_SEARCH_PATH "$ENV{CORIOLIS_TOP}"
                           "$ENV{LEFDEF_TOP}"
                           "/usr"
                           "/opt/lefdef-5.8"
                           "/opt/lefdef-5.7"
                           "/opt/lefdef-5.6"
                           "/opt/lefdef"
                           "$ENV{HOME}/oa/lefdef/5.7-s038"
                           "/soc/oa"
                           )
   message( "-- Components of LEFDEF_DIR_SEARCH:" )
   foreach( PATH ${LEFDEF_SEARCH_PATH} )
     message( "--   ${PATH}" )
   endforeach()
 
   set( LEFDEF_LIBRARIES           "" )
   set( LEFDEF_LIBRARY_SEARCH_PATH "" )
 
   find_path( LEFDEF_INCLUDE_DIR NAMES "defiDefs.hpp"
                                 PATHS ${LEFDEF_SEARCH_PATH}
                                 PATH_SUFFIXES "include/lefdef" "include"
                                 DOC "The ${LEFDEF_INCLUDE_DIR_DESCRIPTION}" )
   message( STATUS "LEFDEF_INCLUDE_DIR: ${LEFDEF_INCLUDE_DIR}" )
 
   find_path( LEFDEF_LIBRARY_DIR NAMES "libdef.so"
                                 PATHS ${LEFDEF_SEARCH_PATH}
                                 PATH_SUFFIXES "lib64" "lib"
                                 DOC "The ${LEFDEF_LIBRARY_DIR_DESCRIPTION}" )
   message( STATUS "LEFDEF_LIBRARY_DIR: ${LEFDEF_LIBRARY_DIR}" )
 
   if( LEFDEF_INCLUDE_DIR AND LEFDEF_LIBRARY_DIR )
    #_find_lefdef_lib(  "CDEF" "cdef"     )
    #_find_lefdef_lib( "ZCDEF" "cdefzlib" )
     _find_lefdef_lib(   "DEF"  "def"     )
     _find_lefdef_lib(  "ZDEF"  "defzlib" )
    #_find_lefdef_lib(  "CLEF" "clef"     )
    #_find_lefdef_lib( "ZCLEF" "clefzlib" )
     _find_lefdef_lib(   "LEF"  "lef"     )
     _find_lefdef_lib(  "ZLEF"  "lefzlib" )
   else()
     set( LEFDEF_FOUND "NO" )
   endif()
 
   if( LEFDEF_FOUND )
     add_definitions( -DHAVE_LEFDEF )
     if( NOT LEFDEF_FIND_QUIETLY )
       message( STATUS "Found LEF/DEF" )
     endif()
   else( LEFDEF_FOUND )
     set( LEFDEF_LIBRARIES   "" )
     set( LEFDEF_INCLUDE_DIR "" )
     set( LEFDEF_LIBRARY_DIR "" )
     if( LEFDEF_FIND_REQUIRED )
       message( STATUS "LEF/DEF libraries and/or includes NOT found!" )
     endif()
   endif( LEFDEF_FOUND )
 
   mark_as_advanced( LEFDEF_INCLUDE_DIR LEFDEF_LIBRARY_DIR LEFDEF_LIBRARIES )
 endif( UNIX )
