diff --git a/Microsoft.WindowsAzure.Storage/CMakeLists.txt b/Microsoft.WindowsAzure.Storage/CMakeLists.txt index a23b93f..e471b86 100644 --- a/Microsoft.WindowsAzure.Storage/CMakeLists.txt +++ b/Microsoft.WindowsAzure.Storage/CMakeLists.txt @@ -1,5 +1,5 @@ set(CMAKE_LEGACY_CYGWIN_WIN32 0) -cmake_minimum_required(VERSION 2.6) +cmake_minimum_required(VERSION 3.8) project(azurestorage) enable_testing() @@ -21,8 +21,6 @@ if(UNIX) # Prefer the latest (make the latest one first) list(REVERSE OPENSSL_ROOT_DIR) - - if(NOT GETTEXT_LIB_DIR) message(WARNING "No GETTEXT_LIB_DIR specified, assuming: /usr/local/opt/gettext/lib") set(GETTEXT_LIB_DIR "/usr/local/opt/gettext/lib") @@ -40,6 +38,7 @@ if(UNIX) find_package(OpenSSL 1.0.0 REQUIRED) + find_package(UUID REQUIRED) find_package(Casablanca REQUIRED) find_package(LibXML2 REQUIRED) @@ -48,20 +47,25 @@ if(UNIX) find_package(UnitTest++ REQUIRED) endif() - option(BUILD_SHARED_LIBS "Build shared Libraries." ON) - file(GLOB WAS_HEADERS includes/was/*.h) - install(FILES ${WAS_HEADERS} DESTINATION include/was) - file(GLOB WASCORE_HEADERS includes/wascore/*.h) - install(FILES ${WASCORE_HEADERS} DESTINATION include/wascore) - file(GLOB WASCORE_DATA includes/wascore/*.dat) - install(FILES ${WASCORE_DATA} DESTINATION include/wascore) +elseif(WIN32) + message("-- Setting WIN32 options") + find_package(Casablanca REQUIRED) + add_definitions(-DUNICODE -D_UNICODE -D_WIN32) else() message("-- Unsupported Build Platform.") endif() +option(BUILD_SHARED_LIBS "Build shared Libraries." ON) +option(WASTORE_INSTALL_HEADERS "Install header files." ON) +if(WASTORE_INSTALL_HEADERS) + file(GLOB WAS_HEADERS includes/was/*.h) + file(GLOB WASCORE_HEADERS includes/wascore/basic_types.h includes/wascore/constants.h) + file(GLOB WASCORE_DATA includes/wascore/*.dat) +endif() + # Compiler (not platform) specific settings -if("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") +if(CMAKE_CXX_COMPILER_ID MATCHES "GNU") message("-- Setting gcc options") set(WARNINGS "-Wall -Wextra -Wunused-parameter -Wcast-align -Wcast-qual -Wconversion -Wformat=2 -Winit-self -Winvalid-pch -Wmissing-format-attribute -Wmissing-include-dirs -Wpacked -Wredundant-decls -Wunreachable-code") @@ -78,22 +82,31 @@ if("${CMAKE_CXX_COMPILER_ID}" MATCHES "GNU") add_definitions(-DBOOST_LOG_DYN_LINK) endif() add_definitions(-D_TURN_OFF_PLATFORM_STRING) -elseif((CMAKE_CXX_COMPILER_ID MATCHES "Clang")) - message("-- Setting clang options") +elseif(CMAKE_CXX_COMPILER_ID MATCHES "Clang") + message("-- Setting clang options") - set(WARNINGS "-Wall -Wextra -Wcast-qual -Wconversion -Wformat=2 -Winit-self -Winvalid-pch -Wmissing-format-attribute -Wmissing-include-dirs -Wpacked -Wredundant-decls") - set(OSX_SUPPRESSIONS "-Wno-overloaded-virtual -Wno-sign-conversion -Wno-deprecated -Wno-unknown-pragmas -Wno-reorder -Wno-char-subscripts -Wno-switch -Wno-unused-parameter -Wno-unused-variable -Wno-deprecated -Wno-unused-value -Wno-unknown-warning-option -Wno-return-type-c-linkage -Wno-unused-function -Wno-sign-compare -Wno-shorten-64-to-32 -Wno-reorder -Wno-unused-local-typedefs") - set(WARNINGS "${WARNINGS} ${OSX_SUPPRESSIONS}") + set(WARNINGS "-Wall -Wextra -Wcast-qual -Wconversion -Wformat=2 -Winit-self -Winvalid-pch -Wmissing-format-attribute -Wmissing-include-dirs -Wpacked -Wredundant-decls") + set(OSX_SUPPRESSIONS "-Wno-overloaded-virtual -Wno-sign-conversion -Wno-deprecated -Wno-unknown-pragmas -Wno-reorder -Wno-char-subscripts -Wno-switch -Wno-unused-parameter -Wno-unused-variable -Wno-deprecated -Wno-unused-value -Wno-unknown-warning-option -Wno-return-type-c-linkage -Wno-unused-function -Wno-sign-compare -Wno-shorten-64-to-32 -Wno-reorder -Wno-unused-local-typedefs") + set(WARNINGS "${WARNINGS} ${OSX_SUPPRESSIONS}") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -Wno-return-type-c-linkage -Wno-unneeded-internal-declaration") - set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") - set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -stdlib=libc++ -Wno-return-type-c-linkage -Wno-unneeded-internal-declaration") + set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LIBRARY "libc++") + set(CMAKE_XCODE_ATTRIBUTE_CLANG_CXX_LANGUAGE_STANDARD "c++11") - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fno-strict-aliasing") - if (BUILD_SHARED_LIBS) - add_definitions(-DBOOST_LOG_DYN_LINK) - endif() - add_definitions(-D_TURN_OFF_PLATFORM_STRING) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -fno-strict-aliasing") + if (BUILD_SHARED_LIBS) + add_definitions(-DBOOST_LOG_DYN_LINK) + endif() + add_definitions(-D_TURN_OFF_PLATFORM_STRING) +elseif(CMAKE_CXX_COMPILER_ID MATCHES "MSVC") + message("-- Setting MSVC options") + add_compile_options(/bigobj) + add_compile_options(/MP) + if(BUILD_SHARED_LIBS) + add_definitions(-DWASTORAGE_DLL -D_USRDLL) + else() + add_definitions(-D_NO_WASTORAGE_API) + endif() else() message("-- Unknown compiler, success is doubtful.") endif() @@ -106,7 +119,6 @@ set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/Binaries) set(AZURESTORAGE_INCLUDE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/includes) set(AZURESTORAGE_INCLUDE_DIRS ${CMAKE_CURRENT_SOURCE_DIR}/includes ${CASABLANCA_INCLUDE_DIR} ${Boost_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIRS} ${UUID_INCLUDE_DIRS} ${LibXML2_INCLUDE_DIR}) - set(AZURESTORAGE_LIBRARY azurestorage) set(AZURESTORAGE_LIBRARIES ${AZURESTORAGE_LIBRARY} ${CASABLANCA_LIBRARY} ${Boost_LIBRARIES} ${Boost_FRAMEWORK} ${OPENSSL_LIBRARIES} ${UUID_LIBRARIES} ${LibXML2_LIBRARIES}) diff --git a/Microsoft.WindowsAzure.Storage/cmake/Modules/FindCasablanca.cmake b/Microsoft.WindowsAzure.Storage/cmake/Modules/FindCasablanca.cmake index 5c1df3c..40e1767 100644 --- a/Microsoft.WindowsAzure.Storage/cmake/Modules/FindCasablanca.cmake +++ b/Microsoft.WindowsAzure.Storage/cmake/Modules/FindCasablanca.cmake @@ -23,10 +23,21 @@ find_path(CASABLANCA_INCLUDE_DIR include ) +find_package(cpprestsdk) + +if(cpprestsdk_FOUND) + set(CASABLANCA_LIBRARY cpprestsdk::cpprest) + set(CASABLANCA_PROCESS_LIBS CASABLANCA_LIBRARY) + set(CASABLANCA_PROCESS_INCLUDES CASABLANCA_INCLUDE_DIR) + libfind_process(CASABLANCA) + return() +endif() + # Library find_library(CASABLANCA_LIBRARY NAMES cpprest + cpprest_2_9.lib PATHS ${CASABLANCA_PKGCONF_LIBRARY_DIRS} ${CASABLANCA_DIR} diff --git a/Microsoft.WindowsAzure.Storage/src/CMakeLists.txt b/Microsoft.WindowsAzure.Storage/src/CMakeLists.txt index 59fedac..3737eeb 100644 --- a/Microsoft.WindowsAzure.Storage/src/CMakeLists.txt +++ b/Microsoft.WindowsAzure.Storage/src/CMakeLists.txt @@ -2,7 +2,7 @@ include_directories(${Boost_INCLUDE_DIR} ${OPENSSL_INCLUDE_DIR}) include_directories(${AZURESTORAGE_INCLUDE_DIRS}) # THE ORDER OF FILES IS VERY /VERY/ IMPORTANT -if(UNIX) +if(UNIX OR WIN32) set(SOURCES xml_wrapper.cpp xmlhelpers.cpp @@ -65,24 +65,46 @@ if ("${CMAKE_BUILD_TYPE}" MATCHES "Debug") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage") endif() if (APPLE) - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WARNINGS}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${WARNINGS}") else() - set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") +endif() + +if(MSVC) + add_compile_options(/Yustdafx.h) + set_source_files_properties(stdafx.cpp PROPERTIES COMPILE_FLAGS "/Ycstdafx.h") + + if (NOT CMAKE_GENERATOR MATCHES "Visual Studio .*") + set_property(SOURCE stdafx.cpp APPEND PROPERTY OBJECT_OUTPUTS "${CMAKE_CURRENT_BINARY_DIR}/stdafx.pch") + set_property(SOURCE ${SOURCES} APPEND PROPERTY OBJECT_DEPENDS "${CMAKE_CURRENT_BINARY_DIR}/stdafx.pch") + endif() + + list(APPEND SOURCES stdafx.cpp) endif() add_library(${AZURESTORAGE_LIBRARY} ${SOURCES}) target_link_libraries(${AZURESTORAGE_LIBRARIES}) +if(WIN32) + target_link_libraries(${AZURESTORAGE_LIBRARY} Ws2_32.lib rpcrt4.lib xmllite.lib bcrypt.lib) +endif() # Portions specific to azure storage binary versioning and installation. if(UNIX) set_target_properties(${AZURESTORAGE_LIBRARY} PROPERTIES SOVERSION ${AZURESTORAGE_VERSION_MAJOR} VERSION ${AZURESTORAGE_VERSION_MAJOR}.${AZURESTORAGE_VERSION_MINOR}) - - install( - TARGETS ${AZURESTORAGE_LIBRARY} - LIBRARY DESTINATION lib - ARCHIVE DESTINATION lib - ) +elseif(WIN32) + set_target_properties(${AZURESTORAGE_LIBRARY} PROPERTIES OUTPUT_NAME "wastorage") endif() + +install(FILES ${WAS_HEADERS} DESTINATION include/was) +install(FILES ${WASCORE_HEADERS} DESTINATION include/wascore) +install(FILES ${WASCORE_DATA} DESTINATION include/wascore) + +install( + TARGETS ${AZURESTORAGE_LIBRARY} + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib +)