# -*- mode: CMAKE; -*- cmake_minimum_required(VERSION 2.6) project(linenoise) set(CMAKE_BINARY_DIR "${CMAKE_SOURCE_DIR}/build") if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release CACHE string "Choose the type of build, options are: None Debug Release RelWithDebInfo MinSizeRel." FORCE) endif() message(STATUS "Build mode: ${CMAKE_BUILD_TYPE}") # INFO set(LINENOISE_VERSION "1.0.0" CACHE path "Linenoise version") set(LINENOISE_DISPLAY_NAME "Linenoise-NG") set(LINENOISE_URL_INFO_ABOUT "https://github.com/arangodb/linenoise-ng") set(LINENOISE_CONTACT "hackers@arangodb.org") set(LINENOISE_FRIENDLY_STRING "Linenoise NG - Linenoise Next Generation") # compiler options if(CMAKE_COMPILER_IS_GNUCXX) message(STATUS "Compiler type GNU: ${CMAKE_CXX_COMPILER}") set(BASE_COMPILER_OPTIONS "-std=c++11 -Wall -Wextra") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${BASE_COMPILER_OPTIONS}") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${BASE_COMPILER_OPTIONS} -O0 -g") set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} ${BASE_COMPILER_OPTIONS} -Os") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${BASE_COMPILER_OPTIONS} -O3 -fomit-frame-pointer") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${BASE_COMPILER_OPTIONS} -O3 -g") elseif(CMAKE_COMPILER_IS_CLANGCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang") # using regular Clang or AppleClang message(STATUS "Compiler type CLANG: ${CMAKE_CXX_COMPILER}") set(BASE_COMPILER_OPTIONS "-std=c++11 -Wall -Wextra") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${BASE_COMPILER_OPTIONS}") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${BASE_COMPILER_OPTIONS} -O0 -g") set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} ${BASE_COMPILER_OPTIONS} -Os") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${BASE_COMPILER_OPTIONS} -O3 -fomit-frame-pointer") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${BASE_COMPILER_OPTIONS} -O3 -g") elseif(MSVC) message(STATUS "Compiler type MSVC: ${CMAKE_CXX_COMPILER}") add_definitions("-D_CRT_SECURE_NO_WARNINGS=1") foreach (flag_var CMAKE_CXX_FLAGS CMAKE_CXX_FLAGS_DEBUG CMAKE_CXX_FLAGS_RELEASE CMAKE_CXX_FLAGS_MINSIZEREL CMAKE_CXX_FLAGS_RELWITHDEBINFO) if (flag_var MATCHES "DEBUG") set(${flag_var} "${${flag_var}} /MTd") else () set(${flag_var} "${${flag_var}} /MT") endif () endforeach() # https://msdn.microsoft.com/en-us/library/aa267384%28VS.60%29.aspx set(CMAKE_EXE_LINKER_FLAGS_DEBUG "${CMAKE_EXE_LINKER_FLAGS_DEBUG} /INCREMENTAL:NO /SUBSYSTEM:CONSOLE /LTCG /ignore:4099 /NODEFAULTLIB:libc.lib /NODEFAULTLIB:libcmt.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:msvcrtd.lib") set(CMAKE_EXE_LINKER_FLAGS_MINSIZEREL "${CMAKE_EXE_LINKER_FLAGS_MINSIZEREL} /SUBSYSTEM:CONSOLE /ignore:4099 /NODEFAULTLIB:libc.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:msvcrtd.lib") set(CMAKE_EXE_LINKER_FLAGS_RELEASE "${CMAKE_EXE_LINKER_FLAGS_RELEASE} /SUBSYSTEM:CONSOLE /ignore:4099 /NODEFAULTLIB:libc.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:msvcrtd.lib") set(CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO "${CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO} /SUBSYSTEM:CONSOLE /ignore:4099 /NODEFAULTLIB:libc.lib /NODEFAULTLIB:libcmtd.lib /NODEFAULTLIB:msvcrt.lib /NODEFAULTLIB:libcd.lib /NODEFAULTLIB:msvcrtd.lib") else() # unknown compiler message(STATUS "Compiler type UNKNOWN: ${CMAKE_CXX_COMPILER}") set(BASE_COMPILER_OPTIONS "-std=c++11 -Wall -Wextra") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${BASE_COMPILER_OPTIONS}") set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${BASE_COMPILER_OPTIONS} -O0 -g") set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_MINSIZEREL} ${BASE_COMPILER_OPTIONS} -Os") set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${BASE_COMPILER_OPTIONS} -O3 -fomit-frame-pointer") set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "${CMAKE_CXX_FLAGS_RELWITHDEBINFO} ${BASE_COMPILER_OPTIONS} -O3 -g") endif() include_directories(${PROJECT_SOURCE_DIR}/include ${PROJECT_SOURCE_DIR}/src) # build liblinenoise add_library( linenoise STATIC src/ConvertUTF.cpp src/linenoise.cpp src/wcwidth.cpp ) # install install(TARGETS linenoise DESTINATION lib) # headers install(FILES include/linenoise.h DESTINATION include) # build example add_executable( example tst/example.c ) target_link_libraries( example linenoise ) # packaging include(CPack) if (MSVC) else () set(CPACK_SET_DESTDIR ON) endif () set(CPACK_PACKAGE_VENDOR "ArangoDB GmbH") set(CPACK_PACKAGE_CONTACT "info@arangodb.com") set(CPACK_PACKAGE_VERSION "${LINENOISE_VERSION}") set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/LICENSE") set(CPACK_STRIP_FILES "ON") set(CPACK_PACKAGE_NAME "linenoise") set(CPACK_DEBIAN_PACKAGE_SECTION "utilities")