1# Helper functions for generating a nicely formatted igraph.pc file from 2# igraph.pc.in 3 4include(JoinPaths) 5include(CheckCXXSymbolExists) 6 7# Converts the name of a library file (or framework on macOS) into an 8# appropriate linker flag (-lsomething or -framework something.framework). 9# Returns the input intact if its extension does not look like a shared or 10# static library extension. 11function(convert_library_file_to_flags output_variable input) 12 get_filename_component(input_filename ${input} NAME_WE) 13 get_filename_component(input_extension ${input} LAST_EXT) 14 if(input_extension STREQUAL ${CMAKE_SHARED_LIBRARY_SUFFIX} OR input_extension STREQUAL ${CMAKE_STATIC_LIBRARY_SUFFIX}) 15 string(REGEX REPLACE "^${CMAKE_SHARED_LIBRARY_PREFIX}" "" input_stripped ${input_filename}) 16 set("${output_variable}" "-l${input_stripped}" PARENT_SCOPE) 17 elseif(APPLE AND input_extension STREQUAL ".framework") 18 set("${output_variable}" "-framework ${input_filename}" PARENT_SCOPE) 19 else() 20 set("${output_variable}" "${input}" PARENT_SCOPE) 21 endif() 22endfunction() 23 24if(MATH_LIBRARY) 25 set(PKGCONFIG_LIBS_PRIVATE "-lm") 26else() 27 set(PKGCONFIG_LIBS_PRIVATE "") 28endif() 29 30if(NOT MSVC) 31 check_cxx_symbol_exists(_LIBCPP_VERSION "vector" USING_LIBCXX) 32 check_cxx_symbol_exists(__GLIBCXX__ "vector" USING_LIBSTDCXX) 33 if(USING_LIBCXX) 34 set(PKGCONFIG_LIBS_PRIVATE "${PKGCONFIG_LIBS_PRIVATE} -lc++") 35 elseif(USING_LIBSTDCXX) 36 set(PKGCONFIG_LIBS_PRIVATE "${PKGCONFIG_LIBS_PRIVATE} -lstdc++") 37 endif() 38endif() 39 40if(IGRAPH_GRAPHML_SUPPORT) 41 set(PKGCONFIG_LIBS_PRIVATE "${PKGCONFIG_LIBS_PRIVATE} -lxml2 -lz") 42endif() 43if(NOT IGRAPH_USE_INTERNAL_GMP) 44 set(PKGCONFIG_LIBS_PRIVATE "${PKGCONFIG_LIBS_PRIVATE} -lgmp") 45endif() 46if(NOT IGRAPH_USE_INTERNAL_BLAS) 47 set(PKGCONFIG_LIBS_PRIVATE "${PKGCONFIG_LIBS_PRIVATE} -lblas") 48endif() 49if(NOT IGRAPH_USE_INTERNAL_CXSPARSE) 50 set(PKGCONFIG_LIBS_PRIVATE "${PKGCONFIG_LIBS_PRIVATE} -lcxsparse") 51endif() 52if(IGRAPH_GLPK_SUPPORT AND NOT IGRAPH_USE_INTERNAL_GLPK) 53 set(PKGCONFIG_LIBS_PRIVATE "${PKGCONFIG_LIBS_PRIVATE} -lglpk") 54endif() 55if(NOT IGRAPH_USE_INTERNAL_LAPACK) 56 set(PKGCONFIG_LIBS_PRIVATE "${PKGCONFIG_LIBS_PRIVATE} -llapack") 57endif() 58if(NOT IGRAPH_USE_INTERNAL_ARPACK) 59 set(PKGCONFIG_LIBS_PRIVATE "${PKGCONFIG_LIBS_PRIVATE} -larpack") 60endif() 61if(IGRAPH_OPENMP_SUPPORT AND OpenMP_FOUND) 62 foreach(CURRENT_LIB ${OpenMP_C_LIB_NAMES}) 63 convert_library_file_to_flags(CURRENT_LIB "${OpenMP_${CURRENT_LIB}_LIBRARY}") 64 set(PKGCONFIG_LIBS_PRIVATE "${PKGCONFIG_LIBS_PRIVATE} ${CURRENT_LIB}") 65 endforeach() 66endif() 67 68join_paths(PKGCONFIG_LIBDIR "\${exec_prefix}" "${CMAKE_INSTALL_LIBDIR}") 69join_paths(PKGCONFIG_INCLUDEDIR "\${prefix}" "${CMAKE_INSTALL_INCLUDEDIR}") 70configure_file( 71 ${PROJECT_SOURCE_DIR}/igraph.pc.in 72 ${PROJECT_BINARY_DIR}/igraph.pc 73 @ONLY 74) 75