-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
138 lines (114 loc) · 3.48 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
CMAKE_MINIMUM_REQUIRED(VERSION 3.18)
project(lib.cpp.base.pbni-framework LANGUAGES CXX)
##################################################
# Options #
##################################################
include(GNUInstallDirs)
set(PBNI_SDK_DIRECTORY "C:/Program Files (x86)/Appeon/PowerBuilder 22.0/SDK/PBNI" CACHE PATH "Location of the required PBNI Sources")
##################################################
# PBNI Framework #
##################################################
# Check for 32 bit
# if(NOT CMAKE_SIZEOF_VOID_P EQUAL 4)
# message(FATAL_ERROR "Powerbuilder runs on 32 bits, choose a 32 bit plattform using '-A Win32'")
# endif()
set(src
src/Framework.cpp
src/Framework.h
src/Errors.h
src/AcquiredValue.h
src/PBEntry.cpp
src/Helper.h
src/PBValue.h
)
set(descriptions
src/MethodDescription.h
src/ClassDescription.h
)
set(types
src/PBTypes.h
src/PBArray.h
src/PBBlob.cpp
src/PBBlob.h
src/PBDateTimes.cpp
src/PBDateTimes.h
src/PBNumbers.h
src/PBNumbers.cpp
src/PBObjects.h
src/PBString.cpp
src/PBString.h
src/PBAny.cpp
src/PBAny.h
)
set(pbni-helpers
${PBNI_SDK_DIRECTORY}/src/pbarray.cpp
${PBNI_SDK_DIRECTORY}/src/pbfuninv.cpp
${PBNI_SDK_DIRECTORY}/src/pbobject.cpp
)
set(headers ${src})
list(APPEND headers ${descriptions})
list(APPEND headers ${types})
list(FILTER headers INCLUDE REGEX "\.h$")
add_library(lib.cpp.base.pbni-framework OBJECT
${src}
${descriptions}
${types}
${pbni-helpers}
)
add_library(inf::lib.cpp.base.pbni-framework ALIAS lib.cpp.base.pbni-framework)
source_group("Source Files" FILES ${src})
source_group("Source Files/Descriptions" FILES ${descriptions})
source_group("Source Files/Types" FILES ${types})
if(MINGW)
target_sources(lib.cpp.base.pbni-framework
PRIVATE
mingw-exports.def
)
endif()
target_compile_features(lib.cpp.base.pbni-framework PUBLIC cxx_std_20)
if(MSVC)
# To be able to use __VA_OPT__
target_compile_options(lib.cpp.base.pbni-framework PUBLIC /Zc:preprocessor)
endif()
target_compile_definitions(lib.cpp.base.pbni-framework
PUBLIC
-DUNICODE
-D_UNICODE
-DWIN32_LEAN_AND_MEAN
-DNOMINMAX
)
if(MINGW)
set(STACKTRACE_LIBRARY "stacktrace_backtrace")
else()
set(STACKTRACE_LIBRARY "stacktrace_windbg")
endif()
find_package(Boost
REQUIRED
${STACKTRACE_LIBRARY}
)
target_link_libraries(lib.cpp.base.pbni-framework
PUBLIC
Boost::${STACKTRACE_LIBRARY}
)
target_include_directories(lib.cpp.base.pbni-framework
PUBLIC
$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/src>
$<BUILD_INTERFACE:${PBNI_SDK_DIRECTORY}/include>
$<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
)
target_sources(${PROJECT_NAME} PUBLIC
FILE_SET headers
TYPE HEADERS
BASE_DIRS src
FILES ${headers}
)
install(TARGETS lib.cpp.base.pbni-framework
OBJECTS DESTINATION "${CMAKE_INSTALL_LIBDIR}"
FILE_SET headers DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/PBNIFramework"
)
set(pch_headers ${headers})
list(TRANSFORM pch_headers REPLACE "^src/(.+)$" "#include <PBNIFramework/\\1>")
list(JOIN pch_headers "\n" pch)
file(WRITE "${CMAKE_CURRENT_BINARY_DIR}/informaticon/pch.h" "#pragma once\n\n// Auto generated by lib.cpp.base.pbni-framework/CMakeLists.txt\n\n")
file(APPEND "${CMAKE_CURRENT_BINARY_DIR}/informaticon/pch.h" "${pch}")
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/informaticon/pch.h" DESTINATION "${CMAKE_INSTALL_INCLUDEDIR}/PBNIFramework")