1# Copyright 2016 Google Inc. All Rights Reserved. 2# Use of this source code is governed by a BSD-style 3# license that can be found in the LICENSE file. 4 5# Old enough to support Ubuntu Precise. 6cmake_minimum_required(VERSION 2.8.7) 7 8if (WIN32) 9 if (NOT EXISTS "compact_enc_det/compact_enc_det.h") 10 message(FATAL_ERROR "\nCould not find source code. Make sure you are running this script from the root of the distribution tree.") 11 endif() 12 13 if (NOT EXISTS "gtest") 14 message(STATUS "Google Test not present. Fetching from the web...") 15 file(DOWNLOAD "https://github.com/google/googletest/archive/master.zip" ${CMAKE_SOURCE_DIR}/master.zip) 16 execute_process(COMMAND ${CMAKE_COMMAND} -E tar x master.zip) 17 file(REMOVE master.zip) 18 file(RENAME googletest-master gtest) 19 endif() 20 21 # Configure gtest. 22 execute_process(COMMAND ${CMAKE_COMMAND} . 23 WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/gtest) 24endif() 25 26project(CED CXX) 27set(CMAKE_SUPPRESS_DEVELOPER_WARNINGS 1 CACHE INTERNAL "No dev warnings") 28 29option(BUILD_SHARED_LIBS "Build shared libraries" OFF) 30 31if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU") 32 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-narrowing") 33elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") 34 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-c++11-narrowing") 35elseif("${CMAKE_CXX_COMPILER_ID}" STREQUAL "MSVC") 36 if (NOT BUILD_SHARED_LIBS) 37 foreach(flag_var 38 CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE 39 CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) 40 if(${flag_var} MATCHES "/MD") 41 string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}") 42 endif(${flag_var} MATCHES "/MD") 43 endforeach(flag_var) 44 endif() 45endif() 46 47set(EXTRA_TARGET_LINK_LIBRARIES) 48 49if(WIN32) 50 add_definitions(-DUNICODE -D_UNICODE -DSTRICT -DNOMINMAX) 51 set(THREADING threadwin) 52else() 53 set(THREADING thread) 54 list(APPEND EXTRA_TARGET_LINK_LIBRARIES -pthread) 55endif() 56 57set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) 58set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/lib) 59set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin) 60 61include_directories(${CMAKE_SOURCE_DIR}) 62 63set(CED_LIBRARY_SOURCES 64 compact_enc_det/compact_enc_det.cc 65 compact_enc_det/compact_enc_det_hint_code.cc 66 util/encodings/encodings.cc 67 util/languages/languages.cc 68 ) 69 70add_library(ced ${CED_LIBRARY_SOURCES}) 71 72# Uncomment to put CED into WHATWG-compliant mode. 73#add_definitions(-DHTML5_MODE) 74 75set(GTEST_INCLUDE_DIR "gtest/googletest/include") 76set(GTEST_LIB_DIR "${CMAKE_SOURCE_DIR}/gtest/lib") 77 78set(CED_UNITTEST_SOURCES 79 compact_enc_det/compact_enc_det_unittest.cc 80 compact_enc_det/compact_enc_det_fuzz_test.cc 81 compact_enc_det/detail_head_string.inc 82 util/encodings/encodings_unittest.cc 83 ) 84 85add_executable(ced_unittest ${CED_UNITTEST_SOURCES}) 86include_directories(${CMAKE_SOURCE_DIR}/${GTEST_INCLUDE_DIR}) 87if (WIN32) 88 set(GTEST_LIB_DIR_DBG "${GTEST_LIB_DIR}/Debug") 89 set(GTEST_LIB_DIR_REL "${GTEST_LIB_DIR}/Release") 90 target_link_libraries(ced_unittest 91 ced 92 debug ${GTEST_LIB_DIR_DBG}/gtest.lib optimized ${GTEST_LIB_DIR_REL}/gtest.lib 93 debug ${GTEST_LIB_DIR_DBG}/gtest_main.lib optimized ${GTEST_LIB_DIR_REL}/gtest_main.lib 94 ${EXTRA_TARGET_LINK_LIBRARIES}) 95 message("\nConfiguration completed. Open the created projects with Visual Studio to build the packages.\n") 96else() 97 target_link_libraries(ced_unittest 98 ced 99 ${GTEST_LIB_DIR}/libgtest.a 100 ${GTEST_LIB_DIR}/libgtest_main.a 101 ${EXTRA_TARGET_LINK_LIBRARIES} 102 ) 103endif() 104