]> git.proxmox.com Git - ceph.git/blob - ceph/src/jaegertracing/opentelemetry-cpp/tools/vcpkg/ports/gsl/CMakeLists.txt
update ceph source to reef 18.1.2
[ceph.git] / ceph / src / jaegertracing / opentelemetry-cpp / tools / vcpkg / ports / gsl / CMakeLists.txt
1 cmake_minimum_required(VERSION 3.8)
2 project(gsl C)
3
4 option(INSTALL_HEADERS "Install public header files" ON)
5
6 # Function to extract parameter from makefile. Space separated values are returned as lists
7 function(extract_from_makefile PATTERN RETURN FILEPATH)
8 file(READ ${FILEPATH} MAKEFILE_CONTENT)
9 string(REGEX MATCH "${PATTERN}" CONTENTS "${MAKEFILE_CONTENT}")
10 set(CONTENTS ${CMAKE_MATCH_1})
11 # Split string into list
12 string(REGEX REPLACE "([\t ]+(\\\\\n)?)+" ";" CONTENTS "${CONTENTS}")
13 string(REGEX REPLACE "[\t ]*\\\\\n[\t ]*;" "" CONTENTS "${CONTENTS}")
14 if("${CONTENTS}" STREQUAL "")
15 message(AUTHOR_WARNING "No match for \"${PATTERN}\" found in file ${FILEPATH}")
16 endif()
17 # Return
18 set(${RETURN} ${CONTENTS} PARENT_SCOPE)
19 endfunction(extract_from_makefile)
20
21 # Function to extract C sources from makefile
22 function(extract_sources SUBFOLDER ALLSOURCES)
23 extract_from_makefile("lib[a-zA-Z1-9_]*_la_SOURCES[ \t]*=[ \t]*(((\\\\\n)?[^\n])*)" SOURCEFILES "${SUBFOLDER}/Makefile.am")
24 # Add the folder in front of the file names
25 string(REGEX REPLACE "([^;]+)" "${SUBFOLDER}/\\1" SOURCEFILES "${SOURCEFILES}")
26 # Return
27 set(${ALLSOURCES} ${${ALLSOURCES}} ${SOURCEFILES} PARENT_SCOPE)
28 endfunction(extract_sources)
29
30 set(SOURCES)
31 set(CBLAS_SOURCES)
32 extract_from_makefile("SUBDIRS = (((\\\\\n)?[^\n])*)" FOLDERS "./Makefile.am")
33 extract_sources("." SOURCES)
34 foreach(DIR IN LISTS FOLDERS)
35 if("${DIR}" STREQUAL "cblas")
36 extract_sources("${DIR}" CBLAS_SOURCES)
37 else()
38 extract_sources("${DIR}" SOURCES)
39 endif()
40 endforeach()
41
42 file(READ gsl_types.h GSLTYPES_H)
43 string(REPLACE "#ifdef WIN32" "#if 1 /*WIN32*/" GSLTYPES_H "${GSLTYPES_H}")
44 if(BUILD_SHARED_LIBS)
45 string(REPLACE "# ifdef GSL_DLL" "# if 1 /*GSL_DLL*/" GSLTYPES_H "${GSLTYPES_H}")
46 endif()
47 file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/gsl_types.h "${GSLTYPES_H}")
48
49 file(GLOB_RECURSE PUBLIC_HEADERS gsl*.h)
50 list(APPEND PUBLIC_HEADERS ${CMAKE_CURRENT_BINARY_DIR}/gsl_types.h)
51
52 # The debug libraries have a "d" postfix so that CMake's FindGSL.cmake
53 # module can distinguish between Release and Debug libraries
54 set(CMAKE_DEBUG_POSTFIX "d")
55
56 add_library(gslcblas ${CBLAS_SOURCES})
57 set_target_properties(gslcblas PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON)
58
59 add_library(gsl ${SOURCES})
60 set_target_properties(gsl PROPERTIES DEFINE_SYMBOL DLL_EXPORT WINDOWS_EXPORT_ALL_SYMBOLS ON)
61 target_link_libraries(gsl PUBLIC gslcblas)
62
63
64 if(INSTALL_HEADERS)
65 set_target_properties(gsl PROPERTIES PUBLIC_HEADER "${PUBLIC_HEADERS}")
66 endif()
67 target_include_directories(gslcblas PRIVATE ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
68 target_include_directories(gsl PRIVATE ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
69 # For the build, we need to copy all headers to the gsl directory
70 file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/gsl)
71 file(COPY ${PUBLIC_HEADERS} DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/gsl")
72
73 set(TARGET_INSTALL_OPTIONS)
74 if(INSTALL_HEADERS)
75 set(TARGET_INSTALL_OPTIONS PUBLIC_HEADER DESTINATION include/gsl)
76 endif()
77
78 install(TARGETS gsl gslcblas
79 RUNTIME DESTINATION bin
80 LIBRARY DESTINATION lib
81 ARCHIVE DESTINATION lib
82 ${TARGET_INSTALL_OPTIONS}
83 )