# - Find MYSQL_SOURCE_MIRROR # Find the url to the source code of MySQL # # MYSQL_SOURCE_MIRROR_VERSION - version of the source code (optional) # MYSQL_SOURCE_MIRROR_FILESIZE - filesize of the source code archive (optional) # MYSQL_SOURCE_MIRROR_FILENAME - filename of the source code archive (optional) # MYSQL_SOURCE_MIRROR_MD5 - md5 hash of the source code archive # MYSQL_SOURCE_MIRROR_URL - url of the source code archive # MYSQL_SOURCE_MIRROR_FOUND - True if a mirror url is found. # if( NOT MYSQL_SOURCE_MIRROR_URL OR NOT MYSQL_SOURCE_MIRROR_MD5 ) macro( GET_NEXT_ELEMENT elements value result ) list( FIND ${elements} ${value} _idx ) if( _idx EQUAL -1 ) unset( ${result} ) else() math( EXPR _idx "${_idx} + 1" ) list( GET ${elements} ${_idx} ${result} ) endif() endmacro() # source code list set( _file "${CMAKE_CURRENT_BINARY_DIR}/downloads.html" ) set( _url "http://www.mysql.com/downloads/mysql/?current_os=src&version=5.5" ) if( NOT MYSQL_SOURCE_MIRROR_FIND_QUIETLY ) message( STATUS "Getting source code list from ${_url}" ) endif() file( DOWNLOAD "${_url}" "${_file}" STATUS _status ) list( GET _status 0 _error ) if( _error EQUAL 0 ) file( READ "${_file}" _html ) string( REGEX MATCH "Generic Linux.*" _html "${_html}" ) # get Generic Linux string( REGEX MATCHALL "[^<>]+>?" _elements "${_html}" ) # break down html elements GET_NEXT_ELEMENT( _elements "
" MYSQL_SOURCE_MIRROR_MD5 )
# mirror list
set( _file "${CMAKE_CURRENT_BINARY_DIR}/mirrors.html" )
if( _url STREQUAL "" )
set( _status -1 "URL of mirror list not found" )
else()
if( NOT MYSQL_SOURCE_MIRROR_FIND_QUIETLY )
message( STATUS "Getting mirror list from ${_url}" )
endif()
file( DOWNLOAD "${_url}" "${_file}" STATUS _status SHOW_PROGRESS )
endif()
list( GET _error 0 _status )
if( _error EQUAL 0 )
file( READ "${_file}" _html )
string( REGEX MATCH "" MYSQL_SOURCE_MIRROR_URL "${_html}" ) # get download url
set( MYSQL_SOURCE_MIRROR_URL "${CMAKE_MATCH_1}" )
string( REGEX REPLACE ".*/get/(.*)/from/(.*)" "\\2\\1" MYSQL_SOURCE_MIRROR_URL "${MYSQL_SOURCE_MIRROR_URL}" ) # get mirror url
if( MYSQL_SOURCE_MIRROR_URL STREQUAL "" )
set( _status -1 "URL of source code not found" )
endif()
endif()
endif()
list( GET _status 0 _error )
if( _error EQUAL 0 )
if( NOT MYSQL_SOURCE_MIRROR_FIND_QUIETLY )
message( STATUS "Found version: ${MYSQL_SOURCE_MIRROR_VERSION}" )
message( STATUS "Found filesize: ${MYSQL_SOURCE_MIRROR_FILESIZE}" )
message( STATUS "Found filename: ${MYSQL_SOURCE_MIRROR_FILENAME}")
message( STATUS "Found md5: ${MYSQL_SOURCE_MIRROR_MD5}" )
message( STATUS "Found url: ${MYSQL_SOURCE_MIRROR_URL}" )
endif()
set( MYSQL_SOURCE_MIRROR_VERSION "${MYSQL_SOURCE_MIRROR_VERSION}" CACHE STRING "version of the source code (optional)" )
set( MYSQL_SOURCE_MIRROR_FILESIZE "${MYSQL_SOURCE_MIRROR_FILESIZE}" CACHE STRING "filesize of the source code archive (optional)" )
set( MYSQL_SOURCE_MIRROR_FILENAME "${MYSQL_SOURCE_MIRROR_FILENAME}" CACHE STRING "filename of the source code archive (optional)" )
set( MYSQL_SOURCE_MIRROR_MD5 "${MYSQL_SOURCE_MIRROR_MD5}" CACHE STRING "md5 hash of the source code archive" )
set( MYSQL_SOURCE_MIRROR_URL "${MYSQL_SOURCE_MIRROR_URL}" CACHE STRING "url of the source code archive" )
mark_as_advanced( MYSQL_SOURCE_MIRROR_VERSION )
mark_as_advanced( MYSQL_SOURCE_MIRROR_FILESIZE )
mark_as_advanced( MYSQL_SOURCE_MIRROR_FILENAME )
mark_as_advanced( MYSQL_SOURCE_MIRROR_MD5 )
mark_as_advanced( MYSQL_SOURCE_MIRROR_URL )
else()
if( NOT MYSQL_SOURCE_MIRROR_FIND_QUIETLY )
message( STATUS "Failed: ${_status}" )
endif()
set( MYSQL_SOURCE_MIRROR_URL MYSQL_SOURCE_MIRROR_URL-NOTFOUND )
endif()
unset( _file )
unset( _url )
unset( _html )
unset( _elements )
unset( _status )
unset( _error )
endif( NOT MYSQL_SOURCE_MIRROR_URL OR NOT MYSQL_SOURCE_MIRROR_MD5 )
# handle the QUIETLY and REQUIRED arguments and set MYSQL_SOURCE_MIRROR_FOUND to TRUE if
# all listed variables are TRUE
FIND_PACKAGE_HANDLE_STANDARD_ARGS( MYSQL_SOURCE_MIRROR
REQUIRED_VARS MYSQL_SOURCE_MIRROR_URL MYSQL_SOURCE_MIRROR_MD5
VERSION_VAR MYSQL_SOURCE_MIRROR_VERSION
)