diff --git a/CMakeLists.txt b/CMakeLists.txt index 1f28053..cd0ff8b 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,11 +9,14 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) +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(glew-cmake_BUILD_SINGLE_CONTEXT "Build the single context glew library" ON) option(glew-cmake_BUILD_MULTI_CONTEXT "Build the multi context 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(ONLY_LIBS "Do not build executables" OFF) file(STRINGS ${CMAKE_CURRENT_SOURCE_DIR}/config/version _VERSION_MAJOR_STRING REGEX "GLEW_MAJOR[ ]*=[ ]*[0-9]+.*") @@ -124,6 +127,13 @@ if(glew-cmake_BUILD_SHARED) endif() endif() +if(PKG_CONFIG_REPRESENTATIVE_TARGET) + GeneratePkgConfigFile(${PKG_CONFIG_REPRESENTATIVE_TARGET} "The OpenGL Extension Wrangler library" + NAME "glew" + LIBRARY_DIR lib + ${pc_requires}) +endif() + file(GLOB PUBLIC_HEADERS "include/GL/*.h") install(FILES ${PUBLIC_HEADERS} DESTINATION include/GL/) diff --git a/GeneratePkgConfig.cmake b/GeneratePkgConfig.cmake new file mode 100644 index 0000000..0a59aa2 --- /dev/null +++ b/GeneratePkgConfig.cmake @@ -0,0 +1,58 @@ +function(GeneratePkgConfigFile target description) + cmake_parse_arguments(pc "" "NAME;REQUIRES;LIBRARY_DIR" "" ${ARGV}) + if(NOT pc_LIBRARY_DIR) + set(pc_LIBRARY_DIR ${CMAKE_INSTALL_LIBDIR}) + endif() + if(WIN32) + set(PKGCONFIG_INSTALL_DIR) + else() + set(PKGCONFIG_INSTALL_DIR ${pc_LIBRARY_DIR}/pkgconfig) + endif() + if(NOT pc_NAME) + set(pc_NAME ${target}) + endif() + + get_property(raw_definitions TARGET ${target} PROPERTY INTERFACE_COMPILE_DEFINITIONS) + set(definitions "") + foreach(def IN LISTS raw_definitions) + if(def MATCHES "-D") + list(APPEND definitions ${def}) + else() + list(APPEND definitions "-D${def}") + endif() + endforeach() + list(JOIN definitions " " definitions) + + get_property(target_output TARGET ${target} PROPERTY OUTPUT_NAME) + get_filename_component(target_output ${target_output} NAME) + set(links "-l${target_output}") + get_property(raw_links TARGET ${target} PROPERTY INTERFACE_LINK_LIBRARIES) + foreach(link IN LISTS raw_links) + if(link MATCHES "-l") + list(APPEND links ${link}) + elseif(TARGET ${link}) + get_property(link_target TARGET ${link} PROPERTY OUTPUT_NAME) + list(APPEND links ${link_target}) + else() + list(APPEND links "-l${link}") + endif() + endforeach() + list(JOIN links " " links) + get_property(version TARGET ${target} PROPERTY VERSION) + + set(out_file "${CMAKE_CURRENT_BINARY_DIR}/${pc_NAME}.pc") + file(WRITE ${out_file} "prefix=${CMAKE_INSTALL_PREFIX}\n") + file(APPEND ${out_file} "exec_prefix=\${prefix}\n") + file(APPEND ${out_file} "libdir=\${prefix}/${pc_LIBRARY_DIR}\n") + file(APPEND ${out_file} "includedir=\${prefix}/include\n") + file(APPEND ${out_file} "\n") + file(APPEND ${out_file} "Name: ${pc_NAME}\n") + file(APPEND ${out_file} "Description: ${description}\n") + file(APPEND ${out_file} "Version: ${version}\n") + file(APPEND ${out_file} "Cflags: -I\${includedir} ${definitions}\n") + file(APPEND ${out_file} "Libs: -L\${libdir} ${links}\n") + if(pc_REQUIRES) + file(APPEND ${out_file} "Requires: ${pc_REQUIRES}") + endif() + install(FILES ${out_file} DESTINATION "${PKGCONFIG_INSTALL_DIR}") +endfunction()