From a79115599b7941cddb3f3b336cc1ad0e5bfc3efa Mon Sep 17 00:00:00 2001 From: Gyusun Yeom Date: Tue, 29 Dec 2020 22:56:02 +0900 Subject: [PATCH] Modernize cmake --- CMakeLists.txt | 72 +++++++++++++++++++++++++++++++++----------------- 1 file changed, 48 insertions(+), 24 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e5cd426..5bfdcb2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,7 +14,7 @@ include("GeneratePkgConfig.cmake") option(glew-cmake_BUILD_SHARED "Build the shared glew library" ON) option(glew-cmake_BUILD_STATIC "Build the static glew library" ON) option(USE_GLU "Use GLU" OFF) -option(PKG_CONFIG_REPRESENTATIVE_TARGET "Generate pc file for specified target as glew. libglew_static|libglewmx_static|libglew_shared|libglewmx_shared" OFF) +option(PKG_CONFIG_REPRESENTATIVE_TARGET "Generate pc file for specified target as glew. libglew_static|libglew_shared" OFF) option(ONLY_LIBS "Do not build executables" OFF) file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/config/version _VERSION_MAJOR_STRING REGEX "GLEW_MAJOR[ ]*=[ ]*[0-9]+.*") @@ -36,31 +36,56 @@ if(MSVC) list(APPEND LIBGLEW_SRCS ${RC_DIR}/glew.rc) endif() +# Use namespaced libraries when supported +if(${CMAKE_VERSION} VERSION_GREATER 3.14) + set(USE_NAMESPACED_LIB YES) +else() + set(USE_NAMESPACED_LIB NO) +endif() + if(POLICY CMP0072) - set(OpenGL_GL_PREFERENCE LEGACY) + set(OpenGL_GL_PREFERENCE GLVND) endif() find_package(OpenGL REQUIRED) +set(pc_requires) + if(NOT USE_GLU) list(APPEND DEFINITIONS -DGLEW_NO_GLU) - set(pc_requires) else() - set(pc_requires REQUIRES glu) - list(APPEND LIBRARIES OpenGL::GLU) if(NOT OPENGL_GLU_FOUND) message(FATAL_ERROR "GLU is not found. but GLU option is enabled") endif() -endif( ) -if(WIN32) - list(APPEND LIBRARIES opengl32) -elseif(APPLE) - find_library(GL_LIBRARY OpenGL) - find_library(AGL_LIBRARY AGL) - list(APPEND LIBRARIES ${GL_LIBRARY} ${AGL_LIBRARY}) + list(APPEND pc_requires glu) + + if(USE_NAMESPACED_LIB) + list(APPEND LIBRARIES OpenGL::GLU) + else() + list(APPEND LIBRARIES OPENGL_glu_LIBRARY) + endif() +endif() + +list(APPEND pc_requires gl) +if(USE_NAMESPACED_LIB) + list(APPEND LIBRARIES OpenGL::GL) else() - list(APPEND LIBRARIES GL X11 dl Xext) + list(APPEND LIBRARIES OPENGL_opengl_LIBRARY) +endif() + +if(APPLE) + find_library(AGL_LIBRARY AGL) + list(APPEND LIBRARIES ${AGL_LIBRARY}) +elseif(NOT WIN32) + find_package(X11 REQUIRED) + + list(APPEND pc_requires x11 xext) + if(USE_NAMESPACED_LIB) + list(APPEND LIBRARIES X11::X11 X11::Xext) + else() + list(APPEND LIBRARIES X11_X11_LIB X11_Xext_LIB) + endif() endif() set(GLEW_TARGETS) @@ -72,10 +97,7 @@ if(glew-cmake_BUILD_STATIC) OUTPUT_NAME "glew" DEBUG_POSTFIX d) - target_include_directories(libglew_static PUBLIC ${INCLUDE_DIR}) - target_compile_definitions(libglew_static PUBLIC GLEW_STATIC ${DEFINITIONS}) - target_link_libraries(libglew_static ${LIBRARIES} ) - set_target_properties(libglew_static PROPERTIES VERSION ${GLEW_VERSION}) + target_compile_definitions(libglew_static PUBLIC GLEW_STATIC) list(APPEND GLEW_TARGETS libglew_static) endif() @@ -92,20 +114,22 @@ if(glew-cmake_BUILD_SHARED) DEBUG_POSTFIX d) endif() - target_compile_definitions(libglew_shared PRIVATE GLEW_BUILD ${DEFINITIONS}) - target_include_directories(libglew_shared PUBLIC ${INCLUDE_DIR}) - target_link_libraries(libglew_shared ${LIBRARIES}) - set_target_properties(libglew_shared PROPERTIES VERSION ${GLEW_VERSION}) + target_compile_definitions(libglew_shared PRIVATE GLEW_BUILD) list(APPEND GLEW_TARGETS libglew_shared) endif() +foreach(GLEW_TARGET ${GLEW_TARGETS}) + target_compile_definitions(${GLEW_TARGET} PUBLIC ${DEFINITIONS}) + target_include_directories(${GLEW_TARGET} PUBLIC ${INCLUDE_DIR}) + target_link_libraries(${GLEW_TARGET} ${LIBRARIES}) + set_target_properties(${GLEW_TARGET} PROPERTIES VERSION ${GLEW_VERSION}) +endforeach() + if(PKG_CONFIG_REPRESENTATIVE_TARGET) GeneratePkgConfigFile(${PKG_CONFIG_REPRESENTATIVE_TARGET} "The OpenGL Extension Wrangler library" NAME "glew" LIBRARY_DIR lib - ${pc_requires}) - add_library(glew ALIAS ${PKG_CONFIG_REPRESENTATIVE_TARGET}) - list(APPEND GLEW_TARGETS glew) + REQUIRES ${pc_requires}) endif() install(TARGETS ${GLEW_TARGETS}