Skip to content

Commit 9aeddd3

Browse files
Merge pull request #36 from alvayang/osx_support
add support to osx_support
2 parents 4847ac7 + d88b6e0 commit 9aeddd3

File tree

3 files changed

+43
-105
lines changed

3 files changed

+43
-105
lines changed

CMakeLists.txt

Lines changed: 34 additions & 102 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ else()
2222
message(FATAL_ERROR "C++ standard must C++14 or higher")
2323
endif()
2424

25-
# Find third-party library
26-
find_package(Boost REQUIRED)
25+
26+
find_package(Boost REQUIRED CONFIG COMPONENTS system thread)
2727
find_package(libssh)
2828
if(libssh_FOUND)
2929
set(THIRDPARTY_LIB ${THIRDPARTY_LIB} ssh)
@@ -76,7 +76,6 @@ set(
7676
${PROJECT_BINARY_DIR}/include/
7777
)
7878

79-
# Head file list
8079
set(
8180
ELITE_HEADER_FILES
8281
Elite/DataType.hpp
@@ -101,147 +100,80 @@ set(
101100
Common/StringUtils.hpp
102101
)
103102

104-
# Set output library default name
105103
set(SDK_STATIC_LIB_OUTPUT_NAME "${PROJECT_NAME}")
106104
set(SDK_SHARED_LIB_OUTPUT_NAME "${PROJECT_NAME}")
107105

108-
# Configure accordingly based on the operating system.
109106
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
110107
message(STATUS "SYSTEM: Windows")
111-
add_definitions(
112-
-D_WIN32_WINNT=0x0601
113-
-DELITE_EXPORT_LIBRARY
114-
)
108+
add_definitions(-D_WIN32_WINNT=0x0601)
115109
set(SDK_STATIC_LIB_OUTPUT_NAME "${PROJECT_NAME}_static")
116110
set(SDK_SHARED_LIB_OUTPUT_NAME "${PROJECT_NAME}")
117-
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
118-
message(STATUS "SYSTEM: Linux")
111+
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR APPLE)
112+
if(APPLE)
113+
message(STATUS "SYSTEM: macOS")
114+
else()
115+
message(STATUS "SYSTEM: Linux")
116+
endif()
119117
set(SYSTEM_LIB pthread)
120118
else()
121119
message(FATAL_ERROR "Unsupport operating system")
122120
endif()
123121

122+
add_library(${PROJECT_NAME}_SHARED SHARED ${ELITE_LIB_SOURCE_FILE})
123+
add_library(${PROJECT_NAME}_STATIC STATIC ${ELITE_LIB_SOURCE_FILE})
124+
125+
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
126+
target_compile_definitions(${PROJECT_NAME}_SHARED PRIVATE ELITE_EXPORT_LIBRARY)
127+
target_compile_definitions(${PROJECT_NAME}_STATIC PRIVATE ELITE_EXPORT_LIBRARY)
128+
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux" OR APPLE)
129+
target_compile_definitions(${PROJECT_NAME}_SHARED PRIVATE ELITE_EXPORT_LIBRARY)
130+
target_compile_definitions(${PROJECT_NAME}_STATIC PRIVATE ELITE_EXPORT_LIBRARY)
131+
endif()
124132

125-
# Add library
126-
add_library(
127-
${PROJECT_NAME}_SHARED
128-
SHARED
129-
${ELITE_LIB_SOURCE_FILE}
130-
)
131-
add_library(
132-
${PROJECT_NAME}_STATIC
133-
STATIC
134-
${ELITE_LIB_SOURCE_FILE}
135-
)
136133
define_rel_file_macro(${PROJECT_NAME}_SHARED)
137134
define_rel_file_macro(${PROJECT_NAME}_STATIC)
138135
set_target_properties(${PROJECT_NAME}_SHARED PROPERTIES OUTPUT_NAME ${SDK_SHARED_LIB_OUTPUT_NAME})
139136
set_target_properties(${PROJECT_NAME}_STATIC PROPERTIES OUTPUT_NAME ${SDK_STATIC_LIB_OUTPUT_NAME})
140-
target_include_directories(
141-
${PROJECT_NAME}_SHARED
142-
PRIVATE
143-
${ELITE_LIB_INCLUDE_DIR}
144-
)
145-
target_include_directories(
146-
${PROJECT_NAME}_STATIC
147-
PRIVATE
148-
${ELITE_LIB_INCLUDE_DIR}
149-
)
150-
target_link_libraries(
151-
${PROJECT_NAME}_SHARED
152-
PRIVATE
153-
${THIRDPARTY_LIB}
154-
)
155-
target_link_libraries(
156-
${PROJECT_NAME}_STATIC
157-
PRIVATE
158-
${THIRDPARTY_LIB}
159-
)
137+
target_include_directories(${PROJECT_NAME}_SHARED PRIVATE ${ELITE_LIB_INCLUDE_DIR})
138+
target_include_directories(${PROJECT_NAME}_STATIC PRIVATE ${ELITE_LIB_INCLUDE_DIR})
139+
target_link_libraries(${PROJECT_NAME}_SHARED PRIVATE ${THIRDPARTY_LIB})
140+
target_link_libraries(${PROJECT_NAME}_STATIC PRIVATE ${THIRDPARTY_LIB})
160141

161-
# Copy head file
162142
foreach(header ${ELITE_HEADER_FILES})
163-
file(COPY ${PROJECT_SOURCE_DIR}/include/${header}
164-
DESTINATION ${PROJECT_BINARY_DIR}/include/Elite)
143+
file(COPY ${PROJECT_SOURCE_DIR}/include/${header} DESTINATION ${PROJECT_BINARY_DIR}/include/Elite)
165144
endforeach()
166145

167-
# Prepare exporting targets
168146
add_library(${PROJECT_NAME}::shared ALIAS ${PROJECT_NAME}_SHARED)
169-
target_include_directories(
170-
${PROJECT_NAME}_SHARED
171-
PUBLIC
172-
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>
173-
$<INSTALL_INTERFACE:include>
174-
)
147+
target_include_directories(${PROJECT_NAME}_SHARED PUBLIC $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include> $<INSTALL_INTERFACE:include>)
175148
add_library(${PROJECT_NAME}::static ALIAS ${PROJECT_NAME}_STATIC)
176-
target_include_directories(
177-
${PROJECT_NAME}_STATIC
178-
PUBLIC
179-
$<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include>
180-
$<INSTALL_INTERFACE:include>
181-
)
149+
target_include_directories(${PROJECT_NAME}_STATIC PUBLIC $<BUILD_INTERFACE:${PROJECT_BINARY_DIR}/include> $<INSTALL_INTERFACE:include>)
182150

183-
# Is compile examples
184151
if(ELITE_COMPILE_EXAMPLES)
185152
message(STATUS "Compile the exmaples")
186153
add_subdirectory(example ${CMAKE_BINARY_DIR}/example/)
187154
endif()
188-
189-
# If compile documentation
190155
if(ELITE_COMPILE_DOC)
191156
message(STATUS "Compile the documentation.")
192157
add_subdirectory(doc ${CMAKE_BINARY_DIR}/doc/)
193158
endif()
194-
195-
# If googel test has been foune, compile unit test
196159
if (ELITE_COMPILE_TESTS)
197160
message(STATUS "Compile the tests")
198161
add_subdirectory(test ${CMAKE_BINARY_DIR}/test/)
199162
endif()
200163

201-
# Disable installation if project imported with FetchContent
202164
string(COMPARE EQUAL "${CMAKE_SOURCE_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}" is_top_level)
203165
option(ELITE_INSTALL "Include packaging rules" "${is_top_level}")
204166

205-
# On the Linux platform, install binary library files, header files, and CMake configuration files.
206-
if(CMAKE_SYSTEM_NAME STREQUAL "Linux" AND ELITE_INSTALL)
167+
if((CMAKE_SYSTEM_NAME STREQUAL "Linux" OR APPLE) AND ELITE_INSTALL)
207168
include(GNUInstallDirs)
208-
install(
209-
TARGETS ${PROJECT_NAME}_SHARED ${PROJECT_NAME}_STATIC
210-
EXPORT ${PROJECT_NAME}Targets
211-
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
212-
)
213-
install(
214-
DIRECTORY ${PROJECT_BINARY_DIR}/include/
215-
DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
216-
)
217-
install(
218-
DIRECTORY ${PROJECT_SOURCE_DIR}/source/resources/
219-
DESTINATION share/Elite
220-
)
221-
169+
install(TARGETS ${PROJECT_NAME}_SHARED ${PROJECT_NAME}_STATIC EXPORT ${PROJECT_NAME}Targets LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR})
170+
install(DIRECTORY ${PROJECT_BINARY_DIR}/include/ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
171+
install(DIRECTORY ${PROJECT_SOURCE_DIR}/source/resources/ DESTINATION share/Elite)
222172
include(CMakePackageConfigHelpers)
223-
configure_package_config_file(
224-
"${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}Config.cmake.in"
225-
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
226-
INSTALL_DESTINATION lib/cmake/${PROJECT_NAME}
227-
)
228-
write_basic_package_version_file(
229-
${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
230-
VERSION ${PROJECT_VERSION}
231-
COMPATIBILITY SameMajorVersion
232-
)
233-
234-
install(
235-
EXPORT ${PROJECT_NAME}Targets
236-
FILE ${PROJECT_NAME}Targets.cmake
237-
DESTINATION lib/cmake/${PROJECT_NAME}
238-
)
239-
install(
240-
FILES
241-
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake"
242-
"${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake"
243-
DESTINATION lib/cmake/${PROJECT_NAME}
244-
)
173+
configure_package_config_file("${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}Config.cmake.in" "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" INSTALL_DESTINATION lib/cmake/${PROJECT_NAME})
174+
write_basic_package_version_file(${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake VERSION ${PROJECT_VERSION} COMPATIBILITY SameMajorVersion)
175+
install(EXPORT ${PROJECT_NAME}Targets FILE ${PROJECT_NAME}Targets.cmake DESTINATION lib/cmake/${PROJECT_NAME})
176+
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}Config.cmake" "${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake" DESTINATION lib/cmake/${PROJECT_NAME})
245177
endif()
246178

247179
message(STATUS "CMAKE_BUILD_TYPE: ${CMAKE_BUILD_TYPE}")

include/EliteOptions.hpp.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
#else
1010
#define ELITE_EXPORT __declspec(dllimport)
1111
#endif
12-
#elif defined(__linux) || defined(linux) || defined(__linux__)
12+
#elif defined(__linux) || defined(linux) || defined(__linux__) || defined(__APPLE__)
1313
#define ELITE_EXPORT __attribute__((visibility("default")))
1414
#endif
1515

source/Common/SshUtils.cpp

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,12 @@
2222
#include <libssh/libssh.h>
2323
#endif
2424

25+
#ifndef FILE_PERMISSIONS
26+
#define FILE_PERMISSIONS 0644
27+
#endif
28+
29+
30+
2531
#include "Common/SshUtils.hpp"
2632
#include "Elite/Log.hpp"
2733

@@ -302,7 +308,7 @@ bool uploadFile(const std::string& server, const std::string& user, const std::s
302308

303309
std::ifstream local_file(local_path, std::ios::binary | std::ios::ate);
304310
if (!local_file) {
305-
ELITE_LOG_ERROR("Failed to open local file: %s", local_path);
311+
ELITE_LOG_ERROR("Failed to open local file: %s", local_path.c_str());
306312
ssh_disconnect(session);
307313
ssh_free(session);
308314
return false;
@@ -329,7 +335,7 @@ bool uploadFile(const std::string& server, const std::string& user, const std::s
329335

330336
#if defined(_WIN32) || defined(_WIN64)
331337
#define FILE_PERMISSIONS (S_IREAD | S_IWRITE)
332-
#elif defined(__linux) || defined(linux) || defined(__linux__)
338+
#elif defined(__linux) || defined(linux) || defined(__linux__) || defined(__APPLE__)
333339
#define FILE_PERMISSIONS (S_IRUSR | S_IWUSR)
334340
#endif
335341
// File's infomation

0 commit comments

Comments
 (0)