| 1 |
include(icecc.cmake) |
| 2 |
project(apiextractor) |
| 3 |
|
| 4 |
cmake_minimum_required(VERSION 2.6) |
| 5 |
|
| 6 |
find_package(Qt4 4.5.0 REQUIRED) |
| 7 |
|
| 8 |
find_package(LibXml2 2.6.32) |
| 9 |
find_package(LibXslt 1.1.19) |
| 10 |
|
| 11 |
option(DISABLE_DOCSTRINGS "Disable documentation extraction." FALSE) |
| 12 |
option(BUILD_TESTS "Build tests." TRUE) |
| 13 |
option(INSTALL_TESTS "Install tests" FALSE) |
| 14 |
option(ENABLE_VERSION_SUFFIX "Used to use current version in suffix to generated files. This is used to allow multiples versions installed simultaneous." FALSE) |
| 15 |
|
| 16 |
if (NOT DISABLE_DOCSTRINGS) |
| 17 |
if (NOT LIBXSLT_FOUND OR NOT LIBXML2_FOUND) |
| 18 |
set(DISABLE_DOCSTRINGS TRUE) |
| 19 |
message(WARNING "libxslt and/or libxml not found, disabling support to doc strings!") |
| 20 |
endif() |
| 21 |
endif() |
| 22 |
|
| 23 |
if(MSVC) |
| 24 |
set(CMAKE_CXX_FLAGS "/Zc:wchar_t- /GR /EHsc /DWIN32 /D_WINDOWS /D_SCL_SECURE_NO_WARNINGS") |
| 25 |
elseif(CMAKE_HOST_UNIX) |
| 26 |
option(ENABLE_GCC_OPTIMIZATION "Enable specific GCC flags to optimize library size and performance. Only available on Release Mode" 0) |
| 27 |
if(NOT CYGWIN) |
| 28 |
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -fvisibility=hidden") |
| 29 |
endif() |
| 30 |
set(CMAKE_CXX_FLAGS_DEBUG "-g") |
| 31 |
if(ENABLE_GCC_OPTIMIZATION) |
| 32 |
set(CMAKE_BUILD_TYPE Release) |
| 33 |
set(CMAKE_CXX_FLAGS_RELEASE "-DNDEBUG -Os -Wno-strict-aliasing -Wl,-O1") |
| 34 |
if (NOT CMAKE_HOST_APPLE) |
| 35 |
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wl,--hash-style=gnu") |
| 36 |
endif() |
| 37 |
endif() |
| 38 |
if(NOT CMAKE_HOST_APPLE) |
| 39 |
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--version-script,${CMAKE_CURRENT_SOURCE_DIR}/symbols.filter") |
| 40 |
endif() |
| 41 |
endif() |
| 42 |
|
| 43 |
if(NOT CMAKE_BUILD_TYPE) |
| 44 |
set(CMAKE_BUILD_TYPE Release) |
| 45 |
endif() |
| 46 |
|
| 47 |
if(BUILD_TESTS) |
| 48 |
set(LIBRARY_OUTPUT_PATH ${CMAKE_BINARY_DIR}/tests) |
| 49 |
endif () |
| 50 |
|
| 51 |
set(apiextractor_MAJOR_VERSION 0) |
| 52 |
set(apiextractor_MINOR_VERSION 10) |
| 53 |
set(apiextractor_MICRO_VERSION 11) |
| 54 |
set(apiextractor_VERSION "${apiextractor_MAJOR_VERSION}.${apiextractor_MINOR_VERSION}.${apiextractor_MICRO_VERSION}") |
| 55 |
configure_file(apiextractorversion.h.in ${CMAKE_CURRENT_BINARY_DIR}/apiextractorversion.h @ONLY) |
| 56 |
set(apiextractor_SOVERSION ${apiextractor_MAJOR_VERSION}.${apiextractor_MINOR_VERSION}) |
| 57 |
set(QT_USE_QTCORE 1) |
| 58 |
set(QT_USE_QTXML 1) |
| 59 |
include(${QT_USE_FILE}) |
| 60 |
add_definitions(${QT_DEFINITIONS}) |
| 61 |
add_definitions(-DQT_PLUGIN) |
| 62 |
add_definitions(-DQT_SHARED) |
| 63 |
add_definitions(-DRXX_ALLOCATOR_INIT_0) |
| 64 |
|
| 65 |
if(ENABLE_VERSION_SUFFIX) |
| 66 |
set(apiextractor_SUFFIX "-${apiextractor_MAJOR_VERSION}.${apiextractor_MINOR_VERSION}") |
| 67 |
else() |
| 68 |
set(apiextractor_SUFFIX "") |
| 69 |
endif() |
| 70 |
|
| 71 |
set(apiextractor_SRC |
| 72 |
apiextractor.cpp |
| 73 |
abstractmetabuilder.cpp |
| 74 |
abstractmetalang.cpp |
| 75 |
asttoxml.cpp |
| 76 |
fileout.cpp |
| 77 |
graph.cpp |
| 78 |
reporthandler.cpp |
| 79 |
typeparser.cpp |
| 80 |
typesystem.cpp |
| 81 |
include.cpp |
| 82 |
typedatabase.cpp |
| 83 |
parser/ast.cpp |
| 84 |
parser/binder.cpp |
| 85 |
parser/class_compiler.cpp |
| 86 |
parser/codemodel.cpp |
| 87 |
parser/codemodel_finder.cpp |
| 88 |
parser/compiler_utils.cpp |
| 89 |
parser/control.cpp |
| 90 |
parser/declarator_compiler.cpp |
| 91 |
parser/default_visitor.cpp |
| 92 |
parser/dumptree.cpp |
| 93 |
parser/lexer.cpp |
| 94 |
parser/list.cpp |
| 95 |
parser/name_compiler.cpp |
| 96 |
parser/parser.cpp |
| 97 |
parser/smallobject.cpp |
| 98 |
parser/tokens.cpp |
| 99 |
parser/type_compiler.cpp |
| 100 |
parser/visitor.cpp |
| 101 |
parser/rpp/builtin-macros.cpp |
| 102 |
parser/rpp/preprocessor.cpp |
| 103 |
) |
| 104 |
|
| 105 |
if (NOT DISABLE_DOCSTRINGS) |
| 106 |
set(apiextractor_SRC |
| 107 |
${apiextractor_SRC} |
| 108 |
docparser.cpp |
| 109 |
doxygenparser.cpp |
| 110 |
qtdocparser.cpp |
| 111 |
) |
| 112 |
set(APIEXTRACTOR_EXTRA_INCLUDES ${LIBXSLT_INCLUDE_DIR} ${LIBXML2_INCLUDE_DIR}) |
| 113 |
set(APIEXTRACTOR_EXTRA_LIBRARIES ${LIBXSLT_LIBRARIES} ${LIBXML2_LIBRARIES}) |
| 114 |
else() |
| 115 |
set(APIEXTRACTOR_EXTRA_INCLUDES "") |
| 116 |
set(APIEXTRACTOR_EXTRA_LIBRARIES "") |
| 117 |
endif() |
| 118 |
|
| 119 |
set(LIB_INSTALL_DIR "${CMAKE_INSTALL_PREFIX}/lib${LIB_SUFFIX}" CACHE PATH "The subdirectory relative to the install prefix where libraries will be installed (default is /lib${LIB_SUFFIX})" FORCE) |
| 120 |
|
| 121 |
qt4_add_resources(apiextractor_RCCS_SRC generator.qrc) |
| 122 |
qt4_automoc(apiextractor_SRC) |
| 123 |
|
| 124 |
include_directories(${CMAKE_CURRENT_SOURCE_DIR} |
| 125 |
${CMAKE_CURRENT_BINARY_DIR} |
| 126 |
${CMAKE_CURRENT_SOURCE_DIR}/parser |
| 127 |
${CMAKE_CURRENT_SOURCE_DIR}/parser/rpp |
| 128 |
${QT_INCLUDE_DIR} |
| 129 |
${APIEXTRACTOR_EXTRA_INCLUDES} |
| 130 |
) |
| 131 |
|
| 132 |
add_library(apiextractor SHARED ${apiextractor_SRC} ${apiextractor_RCCS_SRC}) |
| 133 |
target_link_libraries(apiextractor ${APIEXTRACTOR_EXTRA_LIBRARIES} ${QT_QTCORE_LIBRARY} ${QT_QTXMLPATTERNS_LIBRARY} ${QT_QTXML_LIBRARY}) |
| 134 |
set_target_properties(apiextractor PROPERTIES VERSION ${apiextractor_VERSION} |
| 135 |
SOVERSION ${apiextractor_SOVERSION} |
| 136 |
OUTPUT_NAME "apiextractor${apiextractor_SUFFIX}" |
| 137 |
DEFINE_SYMBOL APIEXTRACTOR_EXPORTS) |
| 138 |
|
| 139 |
# uninstall target |
| 140 |
configure_file("${CMAKE_CURRENT_SOURCE_DIR}/cmake_uninstall.cmake" "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake" IMMEDIATE @ONLY) |
| 141 |
add_custom_target(uninstall "${CMAKE_COMMAND}" -P "${CMAKE_CURRENT_BINARY_DIR}/cmake_uninstall.cmake") |
| 142 |
|
| 143 |
set(ARCHIVE_NAME ${CMAKE_PROJECT_NAME}-${apiextractor_VERSION}) |
| 144 |
add_custom_target(dist |
| 145 |
COMMAND mkdir -p "${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}" && |
| 146 |
git log > "${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}/ChangeLog" && |
| 147 |
git archive --prefix=${ARCHIVE_NAME}/ HEAD --format=tar --output="${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar" && |
| 148 |
tar -C "${CMAKE_BINARY_DIR}" --owner=root --group=root -r "${ARCHIVE_NAME}/ChangeLog" -f "${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar" && |
| 149 |
bzip2 -f9 "${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar" && |
| 150 |
echo "Source package created at ${CMAKE_BINARY_DIR}/${ARCHIVE_NAME}.tar.bz2.\n" |
| 151 |
WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}) |
| 152 |
|
| 153 |
set(root_HEADERS |
| 154 |
apiextractormacros.h |
| 155 |
abstractmetalang.h |
| 156 |
apiextractor.h |
| 157 |
graph.h |
| 158 |
reporthandler.h |
| 159 |
typesystem.h |
| 160 |
fileout.h |
| 161 |
docparser.h |
| 162 |
qtdocparser.h |
| 163 |
include.h |
| 164 |
typedatabase.h |
| 165 |
doxygenparser.h |
| 166 |
) |
| 167 |
|
| 168 |
if (BUILD_TESTS) |
| 169 |
enable_testing() |
| 170 |
add_subdirectory(tests) |
| 171 |
endif() |
| 172 |
add_subdirectory(data) |
| 173 |
add_subdirectory(doc) |
| 174 |
|
| 175 |
install(FILES ${root_HEADERS} DESTINATION include/apiextractor${apiextractor_SUFFIX}) |
| 176 |
install(TARGETS apiextractor EXPORT apiextractor |
| 177 |
LIBRARY DESTINATION "${LIB_INSTALL_DIR}" |
| 178 |
ARCHIVE DESTINATION "${LIB_INSTALL_DIR}" |
| 179 |
RUNTIME DESTINATION bin) |