diff --git a/CMakeLists.txt b/CMakeLists.txt index 5abf45fe..98270683 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,11 +1,13 @@ cmake_minimum_required(VERSION 3.16) -project(screen_capture_lite_build) +project(screen_capture_lite_build VERSION 17.1) set(CMAKE_CXX_STANDARD 17) +#set(CMAKE_DEBUG_POSTFIX "d") set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) option(BUILD_EXAMPLE "Build example" ON) -set(BUILD_SHARED_LIBS OFF CACHE INTERNAL "Build shared libraries") +option(BUILD_CSHARP "Build C#" ON) +option(BUILD_SHARED_LIBS "Build shared libraries" ON) set (CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) set (CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) @@ -21,14 +23,34 @@ else() set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -pedantic") endif() +if(${BUILD_SHARED_LIBS}) + set(TARGET_SUFFIX shared) +else() + set(TARGET_SUFFIX static) +endif() + +set(TARGET_NAME screen_capture_lite_${TARGET_SUFFIX}) + add_subdirectory(src_cpp) -add_subdirectory(src_csharp) +if(${BUILD_CSHARP} AND ${BUILD_SHARED_LIBS}) + add_subdirectory(src_csharp) +endif() -install (TARGETS screen_capture_lite_static screen_capture_lite_shared - RUNTIME DESTINATION bin - ARCHIVE DESTINATION lib - LIBRARY DESTINATION lib +install (TARGETS ${TARGET_NAME} + ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} + LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} + PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR} + RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} ) + +configure_file(modules/${TARGET_NAME}Config.cmake.in ${TARGET_NAME}Config.cmake @ONLY) + +#export(TARGETS ${TARGET_NAME} FILE ${TARGET_NAME}-config.cmake) +#install(EXPORT ${TARGET_NAME}-config FILE ${TARGET_NAME}-config.cmake DESTINATION lib/cmake/screen_capture_lite) + +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_NAME}Config.cmake + DESTINATION lib${LIB_SUFFIX}/cmake/screen_capture_lite) + install (FILES include/ScreenCapture.h @@ -45,11 +67,13 @@ if (NOT TARGET uninstall) COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake) endif() -enable_testing() +enable_testing() if (${BUILD_EXAMPLE}) add_subdirectory(Example_OpenGL) add_subdirectory(Example_CPP) - add_subdirectory(Example_CSharp) - add_subdirectory(Example_Unity) + if(${BUILD_CSHARP} AND ${BUILD_SHARED_LIBS}) + add_subdirectory(Example_CSharp) + add_subdirectory(Example_Unity) + endif() endif() diff --git a/Example_CPP/CMakeLists.txt b/Example_CPP/CMakeLists.txt index 8ff3b06c..5d97b4e9 100644 --- a/Example_CPP/CMakeLists.txt +++ b/Example_CPP/CMakeLists.txt @@ -1,9 +1,13 @@ project(screen_capture_example_cpp) if(WIN32) - set(${PROJECT_NAME}_PLATFORM_LIBS Dwmapi) add_definitions(-DNOMINMAX) -elseif(APPLE) +endif() + +if(NOT ${BUILD_SHARED_LIBS}) + if(WIN32) + set(${PROJECT_NAME}_PLATFORM_LIBS Dwmapi) + elseif(APPLE) find_package(Threads REQUIRED) find_library(corefoundation_lib CoreFoundation REQUIRED) find_library(cocoa_lib Cocoa REQUIRED) @@ -21,7 +25,7 @@ elseif(APPLE) ${coregraphics_lib} ${corevideo_lib} ) -else() + else() find_package(X11 REQUIRED) if(!X11_XTest_FOUND) message(FATAL_ERROR "X11 extensions are required, but not found!") @@ -37,26 +41,20 @@ else() ${X11_Xinerama_LIB} ${CMAKE_THREAD_LIBS_INIT} ) + endif() endif() include_directories( ../include ) -add_executable(${PROJECT_NAME}_static +add_executable(${PROJECT_NAME}_${TARGET_SUFFIX} lodepng.cpp Screen_Capture_Example.cpp ) -target_link_libraries(${PROJECT_NAME}_static screen_capture_lite_static ${${PROJECT_NAME}_PLATFORM_LIBS}) - -add_executable(${PROJECT_NAME}_shared - lodepng.cpp - Screen_Capture_Example.cpp -) - -target_link_libraries(${PROJECT_NAME}_shared screen_capture_lite_shared ${${PROJECT_NAME}_PLATFORM_LIBS}) +target_link_libraries(${PROJECT_NAME}_${TARGET_SUFFIX} screen_capture_lite_${TARGET_SUFFIX} ${${PROJECT_NAME}_PLATFORM_LIBS}) -install (TARGETS ${PROJECT_NAME}_static ${PROJECT_NAME}_shared screen_capture_lite_shared +install (TARGETS ${PROJECT_NAME}_${TARGET_SUFFIX} screen_capture_lite_${TARGET_SUFFIX} RUNTIME DESTINATION Examples ) - \ No newline at end of file + diff --git a/Example_CSharp/CMakeLists.txt b/Example_CSharp/CMakeLists.txt index 92fb3e29..dd7af9c6 100644 --- a/Example_CSharp/CMakeLists.txt +++ b/Example_CSharp/CMakeLists.txt @@ -18,8 +18,8 @@ else() ENDIF() message(STATUS "Found dotnet executable CSHARP bindings will be generated!") add_custom_command(OUTPUT ${OUTPUT} - COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_CURRENT_LIST_DIR} - COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_BINARY_DIR}/Example_CSharp + COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_CURRENT_LIST_DIR} + COMMAND ${CMAKE_COMMAND} -E copy $ ${CMAKE_BINARY_DIR}/Example_CSharp COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_LIST_DIR}/${CSPROJ} ${CMAKE_BINARY_DIR}/Example_CSharp @@ -39,11 +39,11 @@ install (FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.pdb OPTIONAL ) -install (TARGETS screen_capture_lite_shared +install (TARGETS screen_capture_lite_${TARGET_SUFFIX} RUNTIME DESTINATION Examples ) endif() - \ No newline at end of file + diff --git a/Example_OpenGL/CMakeLists.txt b/Example_OpenGL/CMakeLists.txt index 7c19617a..1f7aa48e 100644 --- a/Example_OpenGL/CMakeLists.txt +++ b/Example_OpenGL/CMakeLists.txt @@ -1,9 +1,13 @@ project(screen_capture_example_opengl_cpp) if(WIN32) - set(${PROJECT_NAME}_PLATFORM_LIBS Dwmapi) add_definitions(-DNOMINMAX) -elseif(APPLE) +endif() + +if(NOT ${BUILD_SHARED_LIBS}) + if(WIN32) + set(${PROJECT_NAME}_PLATFORM_LIBS Dwmapi) + elseif(APPLE) find_package(Threads REQUIRED) find_library(corefoundation_lib CoreFoundation REQUIRED) find_library(cocoa_lib Cocoa REQUIRED) @@ -21,7 +25,7 @@ elseif(APPLE) ${coregraphics_lib} ${corevideo_lib} ) -else() + else() find_package(X11 REQUIRED) if(!X11_XTest_FOUND) message(FATAL_ERROR "X11 extensions are required, but not found!") @@ -37,6 +41,7 @@ else() ${X11_Xinerama_LIB} ${CMAKE_THREAD_LIBS_INIT} ) + endif() endif() include_directories( @@ -50,8 +55,7 @@ set(GLAD_GL glfw/deps/glad/gl.h option(GLFW_BUILD_EXAMPLES OFF) option(GLFW_BUILD_TESTS OFF) -option(GLFW_BUILD_DOCS OFF) -option(BUILD_SHARED_LIBS OFF) +option(GLFW_BUILD_DOCS OFF) option(USE_MSVC_RUNTIME_LIBRARY_DLL OFF) if (MSVC OR CMAKE_C_SIMULATE_ID STREQUAL "MSVC") @@ -60,13 +64,13 @@ endif() add_subdirectory(glfw) -add_executable(${PROJECT_NAME}_static +add_executable(${PROJECT_NAME}_${TARGET_SUFFIX} Screen_Capture_Example_OpenGL.cpp ${GLAD_GL} ) -target_link_libraries(${PROJECT_NAME}_static screen_capture_lite_static ${${PROJECT_NAME}_PLATFORM_LIBS} glfw) +target_link_libraries(${PROJECT_NAME}_${TARGET_SUFFIX} screen_capture_lite_${TARGET_SUFFIX} ${${PROJECT_NAME}_PLATFORM_LIBS} glfw) -install (TARGETS ${PROJECT_NAME}_static screen_capture_lite_static +install (TARGETS ${PROJECT_NAME}_${TARGET_SUFFIX} screen_capture_lite_${TARGET_SUFFIX} RUNTIME DESTINATION Examples ) diff --git a/modules/screen_capture_lite_sharedConfig.cmake.in b/modules/screen_capture_lite_sharedConfig.cmake.in new file mode 100644 index 00000000..b929afab --- /dev/null +++ b/modules/screen_capture_lite_sharedConfig.cmake.in @@ -0,0 +1,15 @@ +set(screen_capture_lite_shared_FOUND 1) + +set(screen_capture_lite_shared_VERSION_COUNT 2) +set(screen_capture_lite_shared_VERSION_MAJOR "@CMAKE_PROJECT_VERSION_MAJOR@") +set(screen_capture_lite_shared_VERSION_MINOR "@CMAKE_PROJECT_VERSION_MINOR@") + +set(screen_capture_lite_shared_INCLUDE_DIR "@CMAKE_INSTALL_PREFIX@/include") +set(screen_capture_lite_shared_INCLUDE_DIRS ${screen_capture_lite_shared_INCLUDE_DIR}) + +set(screen_capture_lite_shared_LIBRARY_DIR "@CMAKE_INSTALL_PREFIX@/lib@LIB_SUFFIX@") + +find_library(screen_capture_lite_shared_LIBRARY screen_capture_lite_shared HINTS ${screen_capture_lite_shared_LIBRARY_DIR}) + +set(screen_capture_lite_shared_LIBS ${screen_capture_lite_shared_LIBRARY}) +set(screen_capture_lite_shared_LIBRARIES ${screen_capture_lite_shared_LIBS}) diff --git a/modules/screen_capture_lite_staticConfig.cmake.in b/modules/screen_capture_lite_staticConfig.cmake.in new file mode 100644 index 00000000..5b0393ff --- /dev/null +++ b/modules/screen_capture_lite_staticConfig.cmake.in @@ -0,0 +1,15 @@ +set(screen_capture_lite_static_FOUND 1) + +set(screen_capture_lite_static_VERSION_COUNT 2) +set(screen_capture_lite_static_VERSION_MAJOR "@CMAKE_PROJECT_VERSION_MAJOR@") +set(screen_capture_lite_static_VERSION_MINOR "@CMAKE_PROJECT_VERSION_MINOR@") + +set(screen_capture_lite_static_INCLUDE_DIR "@CMAKE_INSTALL_PREFIX@/include") +set(screen_capture_lite_static_INCLUDE_DIRS ${screen_capture_lite_static_INCLUDE_DIR}) + +set(screen_capture_lite_static_LIBRARY_DIR "@CMAKE_INSTALL_PREFIX@/lib@LIB_SUFFIX@") + +find_library(screen_capture_lite_static_LIBRARY screen_capture_lite_static HINTS ${screen_capture_lite_static_LIBRARY_DIR}) + +set(screen_capture_lite_static_LIBS ${screen_capture_lite_static_LIBRARY}) +set(screen_capture_lite_static_LIBRARIES ${screen_capture_lite_static_LIBS}) diff --git a/src_cpp/CMakeLists.txt b/src_cpp/CMakeLists.txt index 9d1ecc8e..397bcd82 100644 --- a/src_cpp/CMakeLists.txt +++ b/src_cpp/CMakeLists.txt @@ -77,9 +77,10 @@ set(libsrc ${SCREEN_CAPTURE_PLATFORM_SRC} ) -message("Building STATIC Library") -add_library(${PROJECT_NAME}_static STATIC ${libsrc}) - +if(NOT ${BUILD_SHARED_LIBS}) + message("Building STATIC Library") + add_library(${PROJECT_NAME}_static STATIC ${libsrc}) +else() message("Building SHARED Library") add_library(${PROJECT_NAME}_shared SHARED ${libsrc} ../include/ScreenCapture_C_API.h) @@ -127,4 +128,4 @@ add_library(${PROJECT_NAME}_static STATIC ${libsrc}) ${CMAKE_THREAD_LIBS_INIT} ) endif() - +endif() diff --git a/src_csharp/CMakeLists.txt b/src_csharp/CMakeLists.txt index 55849e41..521bb420 100644 --- a/src_csharp/CMakeLists.txt +++ b/src_csharp/CMakeLists.txt @@ -37,7 +37,7 @@ else() ) add_custom_target(${PROJECT_NAME} ALL DEPENDS ${OUTPUT}) - add_dependencies(${PROJECT_NAME} screen_capture_lite_shared) + add_dependencies(${PROJECT_NAME} screen_capture_lite_${TARGET_SUFFIX}) install (FILES ${CMAKE_BINARY_DIR}/${OUTPUT} DESTINATION bin @@ -46,4 +46,5 @@ install (FILES ${CMAKE_BINARY_DIR}/${PROJECT_NAME}.pdb DESTINATION bin OPTIONAL ) + endif()