diff --git a/CMakeLists.txt b/CMakeLists.txt index 2ce45baaf229be6fe18efcb6b1cf7a730664a409..594053da5d28906b829787f3f10f0376242c8333 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -16,6 +16,7 @@ include(CheckCSourceCompiles) include(CheckCXXSourceCompiles) include(TestBigEndian) include(CheckFunctionExists) +include(FindOptionalPackage) find_program(ECHO echo) find_program(XSLTPROC xsltproc) @@ -402,6 +403,7 @@ message (STATUS "ENABLE_BUNDLED_LIBEV: ${ENABLE_BUNDLED_LIBEV}") message (STATUS "ENABLE_BUNDLED_LIBEIO: ${ENABLE_BUNDLED_LIBEIO}") message (STATUS "ENABLE_BUNDLED_LIBCORO: ${ENABLE_BUNDLED_LIBCORO}") message (STATUS "ENABLE_DOC: ${ENABLE_DOC}") +list_optional_packages() message (STATUS "") message (STATUS "To view or modify configuration results, check out CMakeCache.txt.") message (STATUS "") diff --git a/cmake/FindOptionalPackage.cmake b/cmake/FindOptionalPackage.cmake new file mode 100644 index 0000000000000000000000000000000000000000..b19bad5fc45ad5be3ba259b21dc0c5d1243f9acf --- /dev/null +++ b/cmake/FindOptionalPackage.cmake @@ -0,0 +1,29 @@ +if (NOT _OptionalPackagesFile) + set(_OptionalPackagesFile + ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/OptionalPackages.txt) + if (EXISTS ${_OptionalPackagesFile}) + file(REMOVE ${_OptionalPackagesFile}) + endif() +endif() + +macro (find_optional_package _package) + string(TOUPPER ${_package} _packageUpper) + if (WITH_${_packageUpper}) + # WITH_${_packageUpper} option requested by the user + set(${_packageUpper}_FIND_REQUIRED ON) + endif() + option(WITH_${_packageUpper} "Search for ${_package} package" ON) + if (WITH_${_packageUpper}) + find_package(${_package} ${ARGN}) + else (WITH_${_packageUpper}) + set(${_package}_FOUND OFF) + set(${_packageUpper}_FOUND OFF) + endif () + file(APPEND "${_OptionalPackagesFile}" + "-- WITH_${_packageUpper}=${WITH_${_packageUpper}}\n") +endmacro (find_optional_package) + +macro(list_optional_packages) + file(READ ${_OptionalPackagesFile} _message) + message(STATUS "\n${_message}") +endmacro() diff --git a/src/plugin/mysql/CMakeLists.txt b/src/plugin/mysql/CMakeLists.txt index 31965eeefc56fd24581dfb013a609a68ec34096e..e01188e92df5af667c479a1b1f892558484c1029 100644 --- a/src/plugin/mysql/CMakeLists.txt +++ b/src/plugin/mysql/CMakeLists.txt @@ -1,4 +1,5 @@ -include(FindMySQL) +find_optional_package(MySQL) + if (MYSQL_FOUND) message(STATUS "box.net.sql(mysql) INC=${MYSQL_INCLUDE_DIRS}") message(STATUS "box.net.sql(mysql) LIBS=${MYSQL_LIBRARIES}") @@ -7,6 +8,4 @@ if (MYSQL_FOUND) add_library(mysql SHARED mysql.cc) target_link_libraries(mysql ${MYSQL_LIBRARIES}) install(TARGETS mysql LIBRARY DESTINATION ${PLUGIN_DIR}) -else() - message(STATUS "MySQL client not found") endif() diff --git a/src/plugin/pg/CMakeLists.txt b/src/plugin/pg/CMakeLists.txt index 8a6662b0d4e0c02036542a97966b23b18f506482..7a6fa44afd5d22ffc0d171aedcc47c43be568feb 100644 --- a/src/plugin/pg/CMakeLists.txt +++ b/src/plugin/pg/CMakeLists.txt @@ -1,6 +1,6 @@ # A special hack for buggy FindPostgreSQL.cmake in Debian/Ubuntu set(PostgreSQL_ROOT /usr/include/postgresql;/usr/include/postgres) -find_package(PostgreSQL) +find_optional_package(PostgreSQL) if (PostgreSQL_FOUND) message(STATUS "box.net.sql(pg): INC=${PostgreSQL_INCLUDE_DIRS}") message(STATUS "box.net.sql(pg): LIBS=${PostgreSQL_LIBRARIES}")