summaryrefslogtreecommitdiff
path: root/CMakeLists.txt
diff options
context:
space:
mode:
authorJippe Holwerda <jippeholwerda@voormedia.com>2016-02-25 19:30:03 +0100
committerJippe Holwerda <jippeholwerda@voormedia.com>2016-02-25 19:30:03 +0100
commit806c75652aa953f1eacb233330b0450a5d1a7e02 (patch)
treeba30eeb9e1b1a0643c5b6cb2cff684ec3295cea1 /CMakeLists.txt
parent8b60bbdce428af065f5501fbedd3de3c426073e4 (diff)
Put CMakeLists.txt in the project root.
Having CMakeLists.txt in the project root makes it so much easier to use pugixml as an external dependency in another CMake project.
Diffstat (limited to 'CMakeLists.txt')
-rw-r--r--CMakeLists.txt67
1 files changed, 67 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644
index 0000000..bb16870
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,67 @@
+project(pugixml)
+
+cmake_minimum_required(VERSION 2.6)
+
+option(BUILD_SHARED_LIBS "Build shared instead of static library" OFF)
+option(BUILD_TESTS "Build tests" OFF)
+set(BUILD_DEFINES "" CACHE STRING "Build defines")
+
+if(MSVC)
+ option(STATIC_CRT "Use static CRT libraries" OFF)
+
+ # Rewrite command line flags to use /MT if necessary
+ if(STATIC_CRT)
+ 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 "/MD")
+ string(REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var}}")
+ endif(${flag_var} MATCHES "/MD")
+ endforeach(flag_var)
+ endif()
+endif()
+
+# Pre-defines standard install locations on *nix systems.
+include(GNUInstallDirs)
+mark_as_advanced(CLEAR CMAKE_INSTALL_LIBDIR CMAKE_INSTALL_INCLUDEDIR)
+
+set(HEADERS ../src/pugixml.hpp ../src/pugiconfig.hpp)
+set(SOURCES ${HEADERS} ../src/pugixml.cpp)
+
+if(DEFINED BUILD_DEFINES)
+ foreach(DEFINE ${BUILD_DEFINES})
+ add_definitions("-D" ${DEFINE})
+ endforeach()
+endif()
+
+if(BUILD_SHARED_LIBS)
+ add_library(pugixml SHARED ${SOURCES})
+else()
+ add_library(pugixml STATIC ${SOURCES})
+endif()
+
+# Enable C++11 long long for compilers that are capable of it
+if(NOT ${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION} STRLESS 3.1)
+ target_compile_features(pugixml PUBLIC cxx_long_long_type)
+endif()
+
+set_target_properties(pugixml PROPERTIES VERSION 1.7 SOVERSION 1)
+
+install(TARGETS pugixml EXPORT pugixml-config
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
+)
+
+install(FILES ${HEADERS} DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+install(EXPORT pugixml-config DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/pugixml)
+
+if(BUILD_TESTS)
+ file(GLOB TEST_SOURCES ../tests/*.cpp)
+ file(GLOB FUZZ_SOURCES ../tests/fuzz_*.cpp)
+ list(REMOVE_ITEM TEST_SOURCES ${FUZZ_SOURCES})
+
+ add_executable(check ${TEST_SOURCES})
+ target_link_libraries(check pugixml)
+ add_custom_command(TARGET check POST_BUILD COMMAND check WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/..)
+endif() \ No newline at end of file