CMakeLists.txt 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184
  1. # This file is copyrighted under the BSD-license for buildsystem files of KDE
  2. # copyright 2010, Patrick Spendrin <[email protected]>
  3. project(expat)
  4. cmake_minimum_required(VERSION 2.6)
  5. set(PACKAGE_BUGREPORT "[email protected]")
  6. set(PACKAGE_NAME "expat")
  7. set(PACKAGE_VERSION "2.2.5")
  8. set(PACKAGE_STRING "${PACKAGE_NAME} ${PACKAGE_VERSION}")
  9. set(PACKAGE_TARNAME "${PACKAGE_NAME}")
  10. if(WINCE)
  11. set(BUILD_tools_default OFF)
  12. else()
  13. set(BUILD_tools_default ON)
  14. endif()
  15. if(MSVC OR NOT BUILD_tools_default)
  16. set(BUILD_doc_default OFF)
  17. else()
  18. find_program(DOCBOOK_TO_MAN NAMES docbook2x-man docbook2man docbook-to-man)
  19. if(DOCBOOK_TO_MAN)
  20. set(BUILD_doc_default ON)
  21. else()
  22. set(BUILD_doc_default OFF)
  23. endif()
  24. endif()
  25. option(BUILD_tools "build the xmlwf tool for expat library" ${BUILD_tools_default})
  26. option(BUILD_examples "build the examples for expat library" ON)
  27. option(BUILD_tests "build the tests for expat library" ON)
  28. option(BUILD_shared "build a shared expat library" ON)
  29. option(BUILD_doc "build man page for xmlwf" ${BUILD_doc_default})
  30. option(USE_libbsd "utilize libbsd (for arc4random_buf)" OFF)
  31. option(INSTALL "install expat files in cmake install target" ON)
  32. if(USE_libbsd)
  33. find_library(LIB_BSD NAMES bsd)
  34. if(NOT LIB_BSD)
  35. message(FATAL_ERROR "USE_libbsd option is enabled, but libbsd was not found")
  36. else()
  37. set(HAVE_LIBBSD TRUE)
  38. endif()
  39. endif()
  40. # configuration options
  41. set(XML_CONTEXT_BYTES 1024 CACHE STRING "Define to specify how much context to retain around the current parse point")
  42. option(XML_DTD "Define to make parameter entity parsing functionality available" ON)
  43. option(XML_NS "Define to make XML Namespaces functionality available" ON)
  44. if(NOT WIN32)
  45. option(XML_DEV_URANDOM "Define to include code reading entropy from `/dev/urandom'." ON)
  46. if(XML_DEV_URANDOM)
  47. add_definitions(-DXML_DEV_URANDOM)
  48. endif()
  49. endif()
  50. if(XML_DTD)
  51. set(XML_DTD 1)
  52. else(XML_DTD)
  53. set(XML_DTD 0)
  54. endif(XML_DTD)
  55. if(XML_NS)
  56. set(XML_NS 1)
  57. else(XML_NS)
  58. set(XML_NS 0)
  59. endif(XML_NS)
  60. if(BUILD_tests)
  61. enable_testing()
  62. endif(BUILD_tests)
  63. include(${CMAKE_CURRENT_LIST_DIR}/ConfigureChecks.cmake)
  64. set(EXTRA_COMPILE_FLAGS)
  65. if(FLAG_NO_STRICT_ALIASING)
  66. set(EXTRA_COMPILE_FLAGS "${EXTRA_COMPILE_FLAGS} -fno-strict-aliasing")
  67. endif()
  68. set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_COMPILE_FLAGS}")
  69. set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_COMPILE_FLAGS}")
  70. include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/lib)
  71. if(MSVC)
  72. add_definitions(-D_CRT_SECURE_NO_WARNINGS -wd4996)
  73. endif(MSVC)
  74. if(WIN32)
  75. set(CMAKE_DEBUG_POSTFIX "d" CACHE STRING "Add a suffix, usually d on Windows")
  76. endif(WIN32)
  77. set(expat_SRCS
  78. lib/loadlibrary.c
  79. lib/xmlparse.c
  80. lib/xmlrole.c
  81. lib/xmltok.c
  82. lib/xmltok_impl.c
  83. lib/xmltok_ns.c
  84. )
  85. if(BUILD_shared)
  86. set(_SHARED SHARED)
  87. if(WIN32)
  88. set(expat_SRCS ${expat_SRCS} lib/libexpat.def)
  89. endif(WIN32)
  90. else(BUILD_shared)
  91. set(_SHARED STATIC)
  92. if(WIN32)
  93. add_definitions(-DXML_STATIC)
  94. endif(WIN32)
  95. endif(BUILD_shared)
  96. add_library(expat ${_SHARED} ${expat_SRCS})
  97. if(USE_libbsd)
  98. target_link_libraries(expat ${LIB_BSD})
  99. endif()
  100. set(LIBCURRENT 7) # sync
  101. set(LIBREVISION 7) # with
  102. set(LIBAGE 6) # configure.ac!
  103. math(EXPR LIBCURRENT_MINUS_AGE "${LIBCURRENT} - ${LIBAGE}")
  104. if(NOT WIN32)
  105. set_property(TARGET expat PROPERTY VERSION ${LIBCURRENT_MINUS_AGE}.${LIBAGE}.${LIBREVISION})
  106. set_property(TARGET expat PROPERTY SOVERSION ${LIBCURRENT_MINUS_AGE})
  107. set_property(TARGET expat PROPERTY NO_SONAME ${NO_SONAME})
  108. endif(NOT WIN32)
  109. macro(expat_install)
  110. if(INSTALL)
  111. install(${ARGN})
  112. endif()
  113. endmacro()
  114. expat_install(TARGETS expat RUNTIME DESTINATION bin
  115. LIBRARY DESTINATION lib
  116. ARCHIVE DESTINATION lib)
  117. set(prefix ${CMAKE_INSTALL_PREFIX})
  118. set(exec_prefix "\${prefix}/bin")
  119. set(libdir "\${prefix}/lib")
  120. set(includedir "\${prefix}/include")
  121. configure_file(expat.pc.in ${CMAKE_CURRENT_BINARY_DIR}/expat.pc)
  122. expat_install(FILES lib/expat.h lib/expat_external.h DESTINATION include)
  123. expat_install(FILES ${CMAKE_CURRENT_BINARY_DIR}/expat.pc DESTINATION lib/pkgconfig)
  124. if(BUILD_tools)
  125. set(xmlwf_SRCS
  126. xmlwf/xmlwf.c
  127. xmlwf/xmlfile.c
  128. xmlwf/codepage.c
  129. xmlwf/readfilemap.c
  130. )
  131. add_executable(xmlwf ${xmlwf_SRCS})
  132. set_property(TARGET xmlwf PROPERTY RUNTIME_OUTPUT_DIRECTORY xmlwf)
  133. target_link_libraries(xmlwf expat)
  134. expat_install(TARGETS xmlwf DESTINATION bin)
  135. if(BUILD_doc)
  136. add_custom_command(TARGET expat PRE_BUILD COMMAND "${DOCBOOK_TO_MAN}" "${PROJECT_SOURCE_DIR}/doc/xmlwf.xml" && mv "XMLWF.1" "${PROJECT_SOURCE_DIR}/doc/xmlwf.1")
  137. expat_install(FILES "${PROJECT_SOURCE_DIR}/doc/xmlwf.1" DESTINATION share/man/man1)
  138. endif()
  139. endif()
  140. if(BUILD_examples)
  141. add_executable(elements examples/elements.c)
  142. set_property(TARGET elements PROPERTY RUNTIME_OUTPUT_DIRECTORY examples)
  143. target_link_libraries(elements expat)
  144. add_executable(outline examples/outline.c)
  145. set_property(TARGET outline PROPERTY RUNTIME_OUTPUT_DIRECTORY examples)
  146. target_link_libraries(outline expat)
  147. endif(BUILD_examples)
  148. if(BUILD_tests)
  149. ## these are unittests that can be run on any platform
  150. add_executable(runtests tests/runtests.c tests/chardata.c tests/structdata.c tests/minicheck.c tests/memcheck.c)
  151. set_property(TARGET runtests PROPERTY RUNTIME_OUTPUT_DIRECTORY tests)
  152. target_link_libraries(runtests expat)
  153. add_test(runtests tests/runtests)
  154. add_executable(runtestspp tests/runtestspp.cpp tests/chardata.c tests/structdata.c tests/minicheck.c tests/memcheck.c)
  155. set_property(TARGET runtestspp PROPERTY RUNTIME_OUTPUT_DIRECTORY tests)
  156. target_link_libraries(runtestspp expat)
  157. add_test(runtestspp tests/runtestspp)
  158. endif(BUILD_tests)