cmake: require c99 standard
[platform/upstream/libaec.git] / CMakeLists.txt
index 8c6c3c7..22f24e0 100644 (file)
@@ -1,81 +1,79 @@
-CMAKE_MINIMUM_REQUIRED(VERSION 2.8.6)
-INCLUDE(CheckIncludeFiles)
-INCLUDE(TestBigEndian)
-INCLUDE(CheckCSourceCompiles)
-PROJECT(libaec)
-SET(libaec_VERSION_MAJOR 0)
-SET(libaec_VERSION_MINOR 2)
-SET(CMAKE_BUILD_TYPE Release)
-ENABLE_TESTING()
+cmake_minimum_required(VERSION 3.1)
+set(CMAKE_C_STANDARD 99)
+include(CheckIncludeFiles)
+include(TestBigEndian)
+include(CheckCSourceCompiles)
+include(cmake/macros.cmake)
+project(libaec)
+set(libaec_VERSION_MAJOR 1)
+set(libaec_VERSION_MINOR 0)
+set(libaec_VERSION_PATCH 1)
+set(CMAKE_BUILD_TYPE Release)
+enable_testing()
 
-CHECK_INCLUDE_FILES(malloc.h HAVE_MALLOC_H)
-CHECK_INCLUDE_FILES(stdint.h HAVE_STDINT_H)
-TEST_BIG_ENDIAN(WORDS_BIGENDIAN)
-CHECK_C_SOURCE_COMPILES(
-  "int main(int argc, char *argv[])
-{return __builtin_clzll(1LL);}"
-  HAVE_DECL___BUILTIN_CLZLL
-  )
+check_include_files(malloc.h HAVE_MALLOC_H)
+check_include_files(stdint.h HAVE_STDINT_H)
+test_big_endian(WORDS_BIGENDIAN)
+check_clzll(HAVE_DECL___BUILTIN_CLZLL)
+if(NOT HAVE_DECL___BUILTIN_CLZLL)
+  check_bsr64(HAVE_BSR64)
+endif(NOT HAVE_DECL___BUILTIN_CLZLL)
+find_inline_keyword()
+find_restrict_keyword()
 
-#Inspired from http://www.cmake.org/Wiki/CMakeTestInline
-SET(INLINE_TEST_SRC "/* Inspired by autoconf's c.m4 */
-static inline int static_foo(){return 0\;}
-int main(int argc, char *argv[]){return 0\;}
-")
-FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/CMakeTestCInline.c
-  ${INLINE_TEST_SRC})
+configure_file(
+  ${CMAKE_CURRENT_SOURCE_DIR}/cmake/config.h.in
+  ${CMAKE_CURRENT_BINARY_DIR}/config.h)
+add_definitions("-DHAVE_CONFIG_H")
 
-FOREACH(KEYWORD "inline" "__inline__" "__inline")
-   IF(NOT DEFINED C_INLINE)
-     TRY_COMPILE(C_HAS_${KEYWORD}
-       ${CMAKE_CURRENT_BINARY_DIR}
-       ${CMAKE_CURRENT_BINARY_DIR}/CMakeTestCInline.c
-       COMPILE_DEFINITIONS "-Dinline=${KEYWORD}"
-       )
-     IF(C_HAS_${KEYWORD})
-       SET(C_INLINE TRUE)
-       ADD_DEFINITIONS("-Dinline=${KEYWORD}")
-     ENDIF(C_HAS_${KEYWORD})
-   ENDIF(NOT DEFINED C_INLINE)
-ENDFOREACH(KEYWORD)
+option(BUILD_SHARED_LIBS "Build Shared Libraries" ON)
+if(BUILD_SHARED_LIBS)
+  set (LIB_TYPE SHARED)
+else(BUILD_SHARED_LIBS)
+  if(WIN32)
+    message(WARNING "You will have to modify libaec.h for static libs.")
+  endif(WIN32)
+  set(LIB_TYPE STATIC)
+endif(BUILD_SHARED_LIBS)
 
-IF(NOT DEFINED C_INLINE)
-   ADD_DEFINITIONS("-Dinline=")
-ENDIF(NOT DEFINED C_INLINE)
+set(libaec_SRCS
+  ${PROJECT_SOURCE_DIR}/src/encode.c
+  ${PROJECT_SOURCE_DIR}/src/encode_accessors.c
+  ${PROJECT_SOURCE_DIR}/src/decode.c)
 
-SET(RESTRICT_TEST_SRC "/* Inspired by autoconf's c.m4 */
-int foo (int * restrict ip){return ip[0]\;}
-int main(int argc, char *argv[]){int s[1]\;
-int * restrict t = s\; t[0] = 0\; return foo(t)\;}
-")
+include_directories("${PROJECT_BINARY_DIR}")
+include_directories("${PROJECT_SOURCE_DIR}/src")
 
-FILE(WRITE ${CMAKE_CURRENT_BINARY_DIR}/CMakeTestCRestrict.c
-  ${RESTRICT_TEST_SRC})
+add_subdirectory(src)
+add_subdirectory(tests)
 
-FOREACH(KEYWORD "restrict" "__restrict" "__restrict__" "_Restrict")
-   IF(NOT DEFINED C_RESTRICT)
-     TRY_COMPILE(C_HAS_${KEYWORD}
-       ${CMAKE_CURRENT_BINARY_DIR}
-       ${CMAKE_CURRENT_BINARY_DIR}/CMakeTestCRestrict.c
-       COMPILE_DEFINITIONS "-Drestrict=${KEYWORD}"
-       )
-     IF(C_HAS_${KEYWORD})
-       SET(C_RESTRICT TRUE)
-       ADD_DEFINITIONS("-Drestrict=${KEYWORD}")
-     ENDIF(C_HAS_${KEYWORD})
-   ENDIF(NOT DEFINED C_RESTRICT)
-ENDFOREACH(KEYWORD)
+option(AEC_FUZZING "Enable build of fuzzing targets" OFF)
+if(AEC_FUZZING)
+  add_subdirectory(fuzzing)
+endif()
 
-IF(NOT DEFINED C_RESTRICT)
-   ADD_DEFINITIONS("-Drestrict=")
-ENDIF(NOT DEFINED C_RESTRICT)
+set(CPACK_PACKAGE_NAME "libaec")
+set(CPACK_PACKAGE_VENDOR "Deutsches Klimarechenzentrum GmbH")
+set(CPACK_PACKAGE_DESCRIPTION_SUMMARY
+  "libaec - Adaptive Entropy Coding library")
+set(CPACK_PACKAGE_VERSION_MAJOR "${libaec_VERSION_MAJOR}")
+set(CPACK_PACKAGE_VERSION_MINOR "${libaec_VERSION_MINOR}")
+set(CPACK_PACKAGE_VERSION_PATCH "${libaec_VERSION_PATCH}")
+set(CPACK_PACKAGE_INSTALL_DIRECTORY "libaec")
+set(CPACK_RESOURCE_FILE_LICENSE "${PROJECT_SOURCE_DIR}/Copyright.txt")
 
-CONFIGURE_FILE(
-  ${CMAKE_CURRENT_SOURCE_DIR}/config.h.in
-  ${CMAKE_CURRENT_BINARY_DIR}/config.h
-  )
+if(WIN32)
+  set(CPACK_GENERATOR "WIX")
+  set(CPACK_WIX_UPGRADE_GUID "E58A21F6-BB99-46B5-8AD8-6114E4CCA0A6")
+  if(CMAKE_CL_64)
+    set(CPACK_INSTALL_DIRECTORY "$PROGRAMFILES64")
+    set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY
+      "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION} (Win64)")
+  else(CMAKE_CL_64)
+    set(CPACK_INSTALL_DIRECTORY "$PROGRAMFILES")
+    set(CPACK_PACKAGE_INSTALL_REGISTRY_KEY
+      "${CPACK_PACKAGE_NAME}-${CPACK_PACKAGE_VERSION}")
+  endif(CMAKE_CL_64)
+endif(WIN32)
 
-SET(BUILD_SHARED_LIBS TRUE)
-INCLUDE_DIRECTORIES("${PROJECT_BINARY_DIR}")
-ADD_SUBDIRECTORY(src)
-ADD_SUBDIRECTORY(tests EXCLUDE_FROM_ALL)
+include(CPack)