diff --git a/cmake/ApiValidation.cmake b/cmake/ApiValidation.cmake new file mode 100644 index 0000000000..a0b1c447db --- /dev/null +++ b/cmake/ApiValidation.cmake @@ -0,0 +1,61 @@ +set(wx_sdl_c_code " +#include + +#if (wxUSE_LIBSDL != 0) +#error cmake_WX_SDL +#endif +") + +set(wx_gtk3_c_code " +#include + +#ifdef __WXGTK3__ +#error cmake_WX_GTK3 +#endif +") + +function(WX_vs_SDL) + file(WRITE "${CMAKE_BINARY_DIR}/wx_sdl.c" "${wx_sdl_c_code}") + enable_language(C) + + try_run( + run_result_unused + compile_result_unused + "${CMAKE_BINARY_DIR}" + "${CMAKE_BINARY_DIR}/wx_sdl.c" + COMPILE_OUTPUT_VARIABLE OUT + CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${wxWidgets_INCLUDE_DIRS}" + ) + + if (${OUT} MATCHES "cmake_WX_SDL" AND SDL2_API) + message(FATAL_ERROR "WxWidget is linked to SDL (wxUSE_LIBSDL) and it is likely SDL1.2. + Unfortunately you try to build PCSX2 with SDL2 support which is not compatible + Please use -DSDL2_API=FALSE") + endif() + +endfunction() + +function(WX_vs_GTK3) + file(WRITE "${CMAKE_BINARY_DIR}/wx_gtk3.c" "${wx_gtk3_c_code}") + enable_language(C) + + try_run( + run_result_unused + compile_result_unused + "${CMAKE_BINARY_DIR}" + "${CMAKE_BINARY_DIR}/wx_gtk3.c" + COMPILE_OUTPUT_VARIABLE OUT + CMAKE_FLAGS "-DINCLUDE_DIRECTORIES:STRING=${wxWidgets_INCLUDE_DIRS}" + ) + + if (${OUT} MATCHES "cmake_WX_GTK3") + if (NOT GTK3_API) + message(FATAL_ERROR "Your current WxWidget version requires GTK3. Please use -DGTK3_API=TRUE option") + endif() + else() + if (GTK3_API) + message(FATAL_ERROR "Your current WxWidget version doesn't support GTK3. Please use -DGTK3_API=FALSE option") + endif() + endif() + +endfunction() diff --git a/cmake/SearchForStuff.cmake b/cmake/SearchForStuff.cmake index 5e3d0278ab..07feef4efd 100644 --- a/cmake/SearchForStuff.cmake +++ b/cmake/SearchForStuff.cmake @@ -140,3 +140,11 @@ include_directories(${CMAKE_SOURCE_DIR}/common/include # File generated by Cmake ${CMAKE_BINARY_DIR}/common/include ) + +#---------------------------------------- +# Check correctness of the parameter +# Note: wxWidgets_INCLUDE_DIRS must be defined +#---------------------------------------- +include(ApiValidation) +WX_vs_SDL() +WX_vs_GTK3()