/
CMakeLists.txt
169 lines (133 loc) · 5.84 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
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
PROJECT(LibXDiffPlugin)
# Name and version of our package
SET(PACKAGE_NAME LibXDiff)
SET(PACKAGE_VERSION 0.23)
# Version of our library
SET(MAJOR_LIBRARY_VERSION 0)
SET(LIBRARY_VERSION ${MAJOR_LIBRARY_VERSION}.23)
# Git tag for our library
SET(GIT_TAG v0.23)
# Specify where our local package will be installed
SET(FULL_LOCAL_EXTERNAL_PACKAGE_DIR ${PROJECT_SOURCE_DIR}/${LOCAL_EXTERNAL_PACKAGE_DIR})
# Name of our package's shared library (and of its import library, if any)
IF(WIN32)
SET(SHARED_LIBRARY xdiff${CMAKE_SHARED_LIBRARY_SUFFIX})
SET(IMPORT_LIBRARY xdiff${CMAKE_IMPORT_LIBRARY_SUFFIX})
ELSE()
SET(SHARED_LIBRARY ${CMAKE_SHARED_LIBRARY_PREFIX}xdiff${CMAKE_SHARED_LIBRARY_SUFFIX_PRE}.${MAJOR_LIBRARY_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX_POST})
SET(IMPORT_LIBRARY ${SHARED_LIBRARY})
ENDIF()
# Retrieve our package's binaries
SET(EXTERNAL_BINARIES_DIR ${FULL_LOCAL_EXTERNAL_PACKAGE_DIR}/lib)
SET(EXTERNAL_BINARIES
${SHARED_LIBRARY}
)
# Specify the files that need to have their SHA-1 value checked
SET(SHA1_FILES
lib/${SHARED_LIBRARY}
)
IF(WIN32)
LIST(APPEND SHA1_FILES
lib/${IMPORT_LIBRARY}
)
ENDIF()
# Use the pre-built version of our package unless instructed otherwise
IF(USE_PREBUILT_LIBXDIFF_PACKAGE)
# Retrieve the plugin's package
STRING(REPLACE "${${CMAKE_PROJECT_NAME}_SOURCE_DIR}/" ""
RELATIVE_PROJECT_SOURCE_DIR "${PROJECT_SOURCE_DIR}/${REMOTE_EXTERNAL_PACKAGE_DIR}")
IF(WIN32)
IF(RELEASE_MODE)
RETRIEVE_PACKAGE_FILE(${PACKAGE_NAME} ${PACKAGE_VERSION}
${RELATIVE_PROJECT_SOURCE_DIR} 17edf6ae6a3c96e631d018a8c321311e1ac50b0b
SHA1_FILES ${SHA1_FILES}
SHA1_VALUES bc05933f0452fe10b681003684bcb991ee4f46d3
dedc7b05e884f1f67fbf45b54ec205d6bf1d660b)
ELSE()
RETRIEVE_PACKAGE_FILE(${PACKAGE_NAME} ${PACKAGE_VERSION}
${RELATIVE_PROJECT_SOURCE_DIR} 304e5eae0818c73465bfd4fddeef8254a175d7a4
SHA1_FILES ${SHA1_FILES}
SHA1_VALUES bacfee23d762a3f0e87ee1166fd992187d835c73
2b2783937c6e01fc246c9776ee511da3ecdd997e)
ENDIF()
ELSEIF(APPLE)
RETRIEVE_PACKAGE_FILE(${PACKAGE_NAME} ${PACKAGE_VERSION}
${RELATIVE_PROJECT_SOURCE_DIR} 0fed25c6f3fc4d329e0d05a90d912008cd4f2593
SHA1_FILES ${SHA1_FILES}
SHA1_VALUES d74f9864f2a173f076740486482f753e5604ab90)
ELSE()
RETRIEVE_PACKAGE_FILE(${PACKAGE_NAME} ${PACKAGE_VERSION}
${RELATIVE_PROJECT_SOURCE_DIR} 4f408e6db26b59de32bf187308eb526f15c0a9a1
SHA1_FILES ${SHA1_FILES}
SHA1_VALUES 0ebbddd08ef1c2eecd3551b6154153a1ecdf2ffd)
ENDIF()
ELSE()
# Ignore some warnings
IF(WIN32)
SET(PACKAGE_C_FLAGS "${CMAKE_C_FLAGS} /wd4101 /wd4244 /wd4267")
ENDIF()
# Build LibXDiff as an external project
SET(PACKAGE_BUILD ${PACKAGE_NAME}Build)
ExternalProject_Add(${PACKAGE_BUILD}
SOURCE_DIR
${CMAKE_SOURCE_DIR}/ext/${PACKAGE_NAME}
INSTALL_DIR
${FULL_LOCAL_EXTERNAL_PACKAGE_DIR}
GIT_REPOSITORY
https://github.com/opencor/libxdiff
GIT_TAG
${GIT_TAG}
CMAKE_CACHE_ARGS
-DCMAKE_C_FLAGS:STRING=${PACKAGE_C_FLAGS}
CMAKE_ARGS
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
-DCMAKE_INSTALL_PREFIX:PATH=<INSTALL_DIR>
${DEFINE_CMAKE_APPLE_OPTIONS}
BUILD_BYPRODUCTS
<INSTALL_DIR>/lib/${IMPORT_LIBRARY}
)
# Do some post-processing that is specific to each platform
IF(WIN32)
# We want both our shared and import libraries to be in the same place
ExternalProject_Add_Step(${PACKAGE_BUILD} CopyDLL
COMMAND ${CMAKE_COMMAND} -E copy bin/${SHARED_LIBRARY} lib
WORKING_DIRECTORY ${FULL_LOCAL_EXTERNAL_PACKAGE_DIR}
DEPENDEES install)
ELSE()
# Dereference the symbolic link to the library since CMake's tar can't
# do this
ExternalProject_Add_Step(${PACKAGE_BUILD} CopyLibrary
COMMAND ${CMAKE_COMMAND} -E remove -f ${SHARED_LIBRARY}
COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_SHARED_LIBRARY_PREFIX}xdiff${CMAKE_SHARED_LIBRARY_SUFFIX_PRE}.${LIBRARY_VERSION}${CMAKE_SHARED_LIBRARY_SUFFIX_POST}
${SHARED_LIBRARY}
WORKING_DIRECTORY ${FULL_LOCAL_EXTERNAL_PACKAGE_DIR}/lib
DEPENDEES install)
ENDIF()
# Package our external project
CREATE_PACKAGE_FILE(${PACKAGE_NAME} ${PACKAGE_VERSION}
${LOCAL_EXTERNAL_PACKAGE_DIR}
PACKAGED_FILES include ${SHA1_FILES}
SHA1_FILES ${SHA1_FILES}
TARGET ${PACKAGE_BUILD})
SET(DEPENDS_ON ${PACKAGE_BUILD})
ENDIF()
# Allow other external projects to find our LibXDiff package
SET(LIBXDIFF_ROOT_DIR ${FULL_LOCAL_EXTERNAL_PACKAGE_DIR} PARENT_SCOPE)
SET(LIBXDIFF_INCLUDE_DIR ${FULL_LOCAL_EXTERNAL_PACKAGE_DIR}/include PARENT_SCOPE)
SET(LIBXDIFF_LIBRARY ${FULL_LOCAL_EXTERNAL_PACKAGE_DIR}/lib/${IMPORT_LIBRARY} PARENT_SCOPE)
# Add the plugin
ADD_PLUGIN(${PACKAGE_NAME}
SOURCES
../../plugininfo.cpp
src/libxdiffplugin.cpp
HEADERS_MOC
src/libxdiffplugin.h
QT_MODULES
Core
EXTERNAL_BINARIES_DIR
${EXTERNAL_BINARIES_DIR}
EXTERNAL_BINARIES
${EXTERNAL_BINARIES}
DEPENDS_ON
${DEPENDS_ON}
)