]> git.proxmox.com Git - ceph.git/blame - 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
CommitLineData
1e59de90
TL
1cmake_minimum_required(VERSION 3.8)
2project(gsl C)
3
4option(INSTALL_HEADERS "Install public header files" ON)
5
6# Function to extract parameter from makefile. Space separated values are returned as lists
7function(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)
19endfunction(extract_from_makefile)
20
21# Function to extract C sources from makefile
22function(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)
28endfunction(extract_sources)
29
30set(SOURCES)
31set(CBLAS_SOURCES)
32extract_from_makefile("SUBDIRS = (((\\\\\n)?[^\n])*)" FOLDERS "./Makefile.am")
33extract_sources("." SOURCES)
34foreach(DIR IN LISTS FOLDERS)
35 if("${DIR}" STREQUAL "cblas")
36 extract_sources("${DIR}" CBLAS_SOURCES)
37 else()
38 extract_sources("${DIR}" SOURCES)
39 endif()
40endforeach()
41
42file(READ gsl_types.h GSLTYPES_H)
43string(REPLACE "#ifdef WIN32" "#if 1 /*WIN32*/" GSLTYPES_H "${GSLTYPES_H}")
44if(BUILD_SHARED_LIBS)
45 string(REPLACE "# ifdef GSL_DLL" "# if 1 /*GSL_DLL*/" GSLTYPES_H "${GSLTYPES_H}")
46endif()
47file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/gsl_types.h "${GSLTYPES_H}")
48
49file(GLOB_RECURSE PUBLIC_HEADERS gsl*.h)
50list(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
54set(CMAKE_DEBUG_POSTFIX "d")
55
56add_library(gslcblas ${CBLAS_SOURCES})
57set_target_properties(gslcblas PROPERTIES WINDOWS_EXPORT_ALL_SYMBOLS ON)
58
59add_library(gsl ${SOURCES})
60set_target_properties(gsl PROPERTIES DEFINE_SYMBOL DLL_EXPORT WINDOWS_EXPORT_ALL_SYMBOLS ON)
61target_link_libraries(gsl PUBLIC gslcblas)
62
63
64if(INSTALL_HEADERS)
65 set_target_properties(gsl PROPERTIES PUBLIC_HEADER "${PUBLIC_HEADERS}")
66endif()
67target_include_directories(gslcblas PRIVATE ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR})
68target_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
70file(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/gsl)
71file(COPY ${PUBLIC_HEADERS} DESTINATION "${CMAKE_CURRENT_BINARY_DIR}/gsl")
72
73set(TARGET_INSTALL_OPTIONS)
74if(INSTALL_HEADERS)
75 set(TARGET_INSTALL_OPTIONS PUBLIC_HEADER DESTINATION include/gsl)
76endif()
77
78install(TARGETS gsl gslcblas
79 RUNTIME DESTINATION bin
80 LIBRARY DESTINATION lib
81 ARCHIVE DESTINATION lib
82 ${TARGET_INSTALL_OPTIONS}
83)