diff --git a/CMakeLists.txt b/CMakeLists.txt index 4a1185e3..3e2bb4e0 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,6 +1,8 @@ project(sqlitebrowser) cmake_minimum_required(VERSION 2.8.7) +set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" "${CMAKE_MODULE_PATH}") + OPTION(USE_QT5 FALSE "Build with qt5") OPTION(ENABLE_TESTING FALSE "Enable the unit tests") @@ -22,12 +24,17 @@ if(WIN32 AND MSVC) set(CMAKE_PREFIX_PATH "${QT5_PATH};${SQLITE3_PATH}") endif() -set(ANTLR_DIR libs/antlr-2.7.7) +find_package(Antlr2) + set(QHEXEDIT_DIR libs/qhexedit) set(QCUSTOMPLOT_DIR libs/qcustomplot-source) set(QSCINTILLA_DIR libs/qscintilla/Qt4Qt5) -add_subdirectory(${ANTLR_DIR}) +if(ANTLR2_FOUND) +else() + set(ANTLR_DIR libs/antlr-2.7.7) + add_subdirectory(${ANTLR_DIR}) +endif() add_subdirectory(${QHEXEDIT_DIR}) add_subdirectory(${QCUSTOMPLOT_DIR}) add_subdirectory(${QSCINTILLA_DIR}) @@ -214,12 +221,16 @@ endif() include_directories( "${CMAKE_CURRENT_BINARY_DIR}" - ${ANTLR_DIR} ${QHEXEDIT_DIR} ${QCUSTOMPLOT_DIR} ${QSCINTILLA_DIR} ${ADDITIONAL_INCLUDE_PATHS} src) +if(ANTLR2_FOUND) + include_directories(${ANTLR2_INCLUDE_DIRS}) +else() + include_directories(${ANTLR_DIR}) +endif() add_executable(${PROJECT_NAME} ${SQLB_HDR} @@ -234,16 +245,23 @@ if(USE_QT5) qt5_use_modules(${PROJECT_NAME} Gui Widgets Network Test PrintSupport) set(QT_LIBRARIES "") endif() -add_dependencies(${PROJECT_NAME} antlr qhexedit qcustomplot qscintilla2) +add_dependencies(${PROJECT_NAME} qhexedit qcustomplot qscintilla2) +if(ANTLR2_FOUND) +else() + add_dependencies(${PROJECT_NAME} antlr) +endif() link_directories( "${CMAKE_CURRENT_BINARY_DIR}/${ANTLR_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/${QHEXEDIT_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/${QCUSTOMPLOT_DIR}" "${CMAKE_CURRENT_BINARY_DIR}/${QSCINTILLA_DIR}") +if(ANTLR2_FOUND) +else() + link_directories("${CMAKE_CURRENT_BINARY_DIR}/${ANTLR_DIR}") +endif() target_link_libraries(${PROJECT_NAME} - antlr qhexedit qcustomplot qscintilla2 @@ -251,6 +269,11 @@ target_link_libraries(${PROJECT_NAME} ${WIN32_STATIC_LINK} ${LIBSQLITE} ${ADDITIONAL_LIBS}) +if(ANTLR2_FOUND) + target_link_libraries(${PROJECT_NAME} ${ANTLR2_LIBRARIES}) +else() + target_link_libraries(${PROJECT_NAME} antlr) +endif() if(WIN32 AND MSVC) set_target_properties(${PROJECT_NAME} PROPERTIES LINK_FLAGS_DEBUG "/SUBSYSTEM:CONSOLE") diff --git a/cmake/FindAntlr2.cmake b/cmake/FindAntlr2.cmake new file mode 100644 index 00000000..871b3221 --- /dev/null +++ b/cmake/FindAntlr2.cmake @@ -0,0 +1,50 @@ +# - try to find Antlr v2 +# Once done this will define: +# +# ANTLR2_FOUND - system has antlr2 +# ANTLR2_INCLUDE_DIRS - the include directories for antlr2 +# ANTLR2_LIBRARIES - Link these to use antl2 +# ANTLR2_EXECUTABLE - The 'antlr' or 'runantlr' executable + +# Copyright (C) 2015, Pino Toscano, +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the copyright +# notice, this list of conditions and the following disclaimer. +# 2. Redistributions in binary form must reproduce the copyright +# notice, this list of conditions and the following disclaimer in the +# documentation and/or other materials provided with the distribution. +# 3. The name of the author may not be used to endorse or promote products +# derived from this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR +# IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +# OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. +# IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, +# INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT +# NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF +# THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + +find_library(ANTLR2_LIBRARY antlr) +set(ANTLR2_LIBRARIES "${ANTLR2_LIBRARY}") + +find_path(ANTLR2_INCLUDE_DIR antlr/AST.hpp) +set(ANTLR2_INCLUDE_DIRS "${ANTLR2_INCLUDE_DIR}") + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Antlr2 DEFAULT_MSG ANTLR2_LIBRARIES ANTLR2_INCLUDE_DIRS) + +find_program(ANTLR2_EXECUTABLE NAMES runantlr runantlr2 antlr) + +mark_as_advanced( + ANTLR2_INCLUDE_DIRS + ANTLR2_LIBRARIES + ANTLR2_EXECUTABLE +) diff --git a/src/tests/CMakeLists.txt b/src/tests/CMakeLists.txt index ebe2203e..e8f7584f 100644 --- a/src/tests/CMakeLists.txt +++ b/src/tests/CMakeLists.txt @@ -5,7 +5,7 @@ else() add_definitions(${QT_DEFINITIONS}) endif() -include_directories("${CMAKE_CURRENT_BINARY_DIR}" "${ANTLR_DIR}" ..) +include_directories("${CMAKE_CURRENT_BINARY_DIR}" ..) # test-sqlobjects @@ -58,8 +58,16 @@ if(USE_QT5) set(QT_LIBRARIES "") endif() -add_dependencies(test-sqlobjects antlr) -target_link_libraries(test-sqlobjects antlr ${QT_LIBRARIES} ${LIBSQLITE}) +if(ANTLR2_FOUND) +else() + add_dependencies(test-sqlobjects antlr) +endif() +target_link_libraries(test-sqlobjects ${QT_LIBRARIES} ${LIBSQLITE}) +if(ANTLR2_FOUND) + target_link_libraries(test-sqlobjects ${ANTLR2_LIBRARIES}) +else() + target_link_libraries(test-sqlobjects antlr) +endif() add_test(test-sqlobjects test-sqlobjects) # test-import