CMakeLists.txt

Wed, 20 Apr 2022 22:48:20 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Wed, 20 Apr 2022 22:48:20 +0200
changeset 150
fd568cc1dd0e
parent 144
c4b107bf153a
child 163
6cccd340ea8c
permissions
-rw-r--r--

Implemented the last widgets on the first tab and added the needed functions for them such as scaling the recipe. This is the last part of the recipe editor, now ready for testing.

# CMakeLists.txt is part of bmsapp
#

PROJECT(bmsapp)
CMAKE_MINIMUM_REQUIRED( VERSION 3.6 )
SET(bmsapp_EXECUTABLE "bmsapp")

# ===== Set application version =====

SET( bmsapp_VERSION_MAJOR 0 )
SET( bmsapp_VERSION_MINOR 1 )
SET( bmsapp_VERSION_PATCH 2 )

# Compile flags

option(BUILD_DESIGNER_PLUGINS "If on, you will only build and install the designer plugins." OFF)
option(UPDATE_TRANSLATIONS "Enable rescanning sources to update .ts files" OFF)

IF( ${BUILD_DESIGNER_PLUGINS} )
  message(STATUS "Building designer plugins" )
ELSE()
  message(STATUS "Building bmsapp" )
ENDIF()

# Automatically run moc on source files when necessary
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTORCC ON)

SET(CMAKE_INCLUDE_CURRENT_DIR ON)

SET( CMAKE_CXX_FLAGS_RELEASE "-Wall -ansi -pedantic -Wno-long-long -O2 -pipe" )
SET( CMAKE_CXX_FLAGS_DEBUG "-Wall -g3 -pipe" )

# ===== Directories =====

IF( NOT EXEC_PREFIX )
   SET( EXEC_PREFIX ${CMAKE_INSTALL_PREFIX} )
ENDIF()

SET( DATAROOTDIR "${EXEC_PREFIX}/share" )
SET( BINDIR "${EXEC_PREFIX}/bin" )
IF( NOT DOCDIR )
   SET( DOCDIR "${DATAROOTDIR}/doc/${CMAKE_PROJECT_NAME}" )
ENDIF()

SET( DATAPATH "${DATAROOTDIR}/${CMAKE_PROJECT_NAME}" )
SET( TARGETPATH ${BINDIR} )
SET( DOCPATH ${DOCDIR} )

SET( LIBPATH "$ENV{QT5DIR}" )

SET(ROOTDIR "${CMAKE_CURRENT_SOURCE_DIR}")
SET(SRCDIR "${ROOTDIR}/src")
SET(UIDIR "${ROOTDIR}/ui")
SET(DESIGNERDIR "${ROOTDIR}/designer")
SET(DATADIR "${ROOTDIR}/data")
SET(TRANSLATIONSDIR "${ROOTDIR}/translations")

INCLUDE_DIRECTORIES(${SRCDIR})
INCLUDE_DIRECTORIES("${CMAKE_BINARY_DIR}/src") # In case of out-of-source build.
INCLUDE_DIRECTORIES("${CMAKE_BINARY_DIR}/designer")

# ===== Find Qt5 =====

# Minimum versio 5.13 for debug messages.
find_package(Qt5 5.13 REQUIRED COMPONENTS Core Widgets Network Sql LinguistTools PrintSupport WebSockets)
INCLUDE_DIRECTORIES(${Qt5Core_INCLUDE_DIRS})
INCLUDE_DIRECTORIES(${Qt5Widgets_INCLUDE_DIRS})
INCLUDE_DIRECTORIES(${Qt5Network_INCLUDE_DIRS})
INCLUDE_DIRECTORIES(${Qt5Sql_INCLUDE_DIRS})
INCLUDE_DIRECTORIES(${Qt5LinguistTools_INCLUDE_DIRS})
INCLUDE_DIRECTORIES(${Qt5PrintSupport_INCLUDE_DIRS})
INCLUDE_DIRECTORIES(${Qt5WebSockets_INCLUDE_DIRS})

# Xml

# Some extra files for the "make clean" target.
SET_PROPERTY(
   DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
   PROPERTY ADDITIONAL_MAKE_CLEAN_FILES
   cmake_install.cmake
   compile_commands.json
   CMakeCache.txt
)

# ===== Setup the config.h =====

SET( CONFIGDATADIR "${DATAPATH}/" )
SET( CONFIGDOCDIR "${DOCPATH}/" )

# Tell cmake where the configure file is and where
# to put the output. All variables in config.in written as "${VAR}$
# will be replaced by VAR as determined by cmake in config.h.
# Outputs only in the build directory.
CONFIGURE_FILE( src/config.in src/config.h )

# ===== All sources =====

IF( ${BUILD_DESIGNER_PLUGINS} )

  ADD_DEFINITIONS(${QT_DEFINITIONS})
  ADD_DEFINITIONS(-DQT_PLUGIN)
  ADD_DEFINITIONS(-DQT_NO_DEBUG)
  ADD_DEFINITIONS(-DQT_SHARED)

  INCLUDE_DIRECTORIES(
    ${QT_INCLUDE_DIR}
    ${SRCDIR}
  )

  LINK_DIRECTORIES(
    ${QT_LIBRARY_DIR}
  )

  #set( SRC_FILES
  #  ${SRCDIR}/RangedSlider.cpp
  #  ${SRCDIR}/NullDateEdit.cpp
  #)

  # By default only QtCore and QtGui are enabled
  SET( QT_USE_QTDESIGNER TRUE )

  #  set( MOC_FILES
  #  ${SRCDIR}/RangedSlider.h
  #  ${SRCDIR}/NullDateEdit.h
  #)

  #set( PLUGIN_MOCS
  #  designer/RangedSliderPlugin.h
  #  designer/NullDateEditPlugin.h
  #)

  #set( PLUGIN_SRCS
  #  designer/RangedSliderPlugin.cpp
  #  designer/NullDateEditPlugin.cpp
  #)

  QT_WRAP_CPP( GEN_MOC_FILES1 ${SRCDIR}/RangedSlider.h designer/RangedSliderPlugin.h)
  add_library(bmsapp_rangeslider SHARED
    ${SRCDIR}/RangedSlider.cpp
    designer/RangedSliderPlugin.cpp
    ${GEN_MOC_FILES1}
  )

  QT_WRAP_CPP( GEN_MOC_FILES2 ${SRCDIR}/NullDateEdit.h designer/NullDateEditPlugin.h)
  add_library(bmsapp_nulldate SHARED
    ${SRCDIR}/NullDateEdit.cpp
    designer/NullDateEditPlugin.cpp
    ${GEN_MOC_FILES2}
  )

ELSE()

  set( SRCS
    ${SRCDIR}/main.cpp
    ${SRCDIR}/RecipesTree.cpp
    ${SRCDIR}/AboutDialog.cpp
    ${SRCDIR}/InventorySuppliers.cpp
    ${SRCDIR}/EditSupplier.cpp
    ${SRCDIR}/InventoryFermentables.cpp
    ${SRCDIR}/EditFermentable.cpp
    ${SRCDIR}/InventoryHops.cpp
    ${SRCDIR}/EditHop.cpp
    ${SRCDIR}/InventoryYeasts.cpp
    ${SRCDIR}/EditYeast.cpp
    ${SRCDIR}/InventoryMiscs.cpp
    ${SRCDIR}/EditMisc.cpp
    ${SRCDIR}/InventoryWaters.cpp
    ${SRCDIR}/EditWater.cpp
    ${SRCDIR}/InventoryEquipments.cpp
    ${SRCDIR}/EditEquipment.cpp
    ${SRCDIR}/ProfileWaters.cpp
    ${SRCDIR}/EditProfileWater.cpp
    ${SRCDIR}/ProfileMashs.cpp
    ${SRCDIR}/EditProfileMash.cpp
    ${SRCDIR}/ProfileStyles.cpp
    ${SRCDIR}/EditProfileStyle.cpp
    ${SRCDIR}/ProfileFerments.cpp
    ${SRCDIR}/EditProfileFerment.cpp
    ${SRCDIR}/EditRecipe.cpp
    ${SRCDIR}/Setup.cpp
    ${SRCDIR}/Utils.cpp
    ${SRCDIR}/PrinterDialog.cpp
    ${SRCDIR}/MainWindow.cpp
    ${SRCDIR}/database/database.cpp
    ${SRCDIR}/RangedSlider.cpp
    ${SRCDIR}/NullDateEdit.cpp
    ${SRCDIR}/global.cpp
  )

  set( HDRS
    ${SRCDIR}/RecipesTree.h
    ${SRCDIR}/AboutDialog.h
    ${SRCDIR}/InventorySuppliers.h
    ${SRCDIR}/EditSupplier.h
    ${SRCDIR}/InventoryFermentables.h
    ${SRCDIR}/EditFermentable.h
    ${SRCDIR}/InventoryHops.h
    ${SRCDIR}/EditHop.h
    ${SRCDIR}/InventoryYeasts.h
    ${SRCDIR}/EditYeast.h
    ${SRCDIR}/InventoryMiscs.h
    ${SRCDIR}/EditMisc.h
    ${SRCDIR}/InventoryWaters.h
    ${SRCDIR}/EditWater.h
    ${SRCDIR}/InventoryEquipments.h
    ${SRCDIR}/EditEquipment.h
    ${SRCDIR}/ProfileWaters.h
    ${SRCDIR}/EditProfileWater.h
    ${SRCDIR}/ProfileMashs.h
    ${SRCDIR}/EditProfileMash.h
    ${SRCDIR}/ProfileStyles.h
    ${SRCDIR}/EditProfileStyle.h
    ${SRCDIR}/ProfileFerments.h
    ${SRCDIR}/EditProfileFerment.h
    ${SRCDIR}/EditRecipe.h
    ${SRCDIR}/Setup.h
    ${SRCDIR}/Utils.h
    ${SRCDIR}/PrinterDialog.h
    ${SRCDIR}/MainWindow.h
    ${SRCDIR}/database/database.h
    ${SRCDIR}/RangedSlider.h
    ${SRCDIR}/NullDateEdit.h
    ${SRCDIR}/global.h
  )

  set( UIS
    ${UIDIR}/AboutDialog.ui
    ${UIDIR}/EditSupplier.ui
    ${UIDIR}/EditFermentable.ui
    ${UIDIR}/EditHop.ui
    ${UIDIR}/EditYeast.ui
    ${UIDIR}/EditMisc.ui
    ${UIDIR}/EditWater.ui
    ${UIDIR}/EditEquipment.ui
    ${UIDIR}/EditProfileWater.ui
    ${UIDIR}/EditProfileMash.ui
    ${UIDIR}/EditProfileStyle.ui
    ${UIDIR}/EditProfileFerment.ui
    ${UIDIR}/EditRecipe.ui
    ${UIDIR}/MainWindow.ui
  )

  set( TS_FILES
    ${TRANSLATIONSDIR}/bmsapp_en.ts # English
    ${TRANSLATIONSDIR}/bmsapp_nl.ts # Dutch
  )

  set( SOURCE_FILES
    ${SRCS}
    ${HDRS}
    ${UIS}
    resources/icons.qrc
    resources/qdarkstyle/theme/style.qrc
  )

ENDIF()

# ===== Build the application =====

IF( ${BUILD_DESIGNER_PLUGINS} )

ELSE()

  # Run with cmake -DUPDATE_TRANSLATIONS=ON ..
  #    or    cmake -DUPDATE_TRANSLATIONS=OFF ..

  if(UPDATE_TRANSLATIONS)
    message("** parse sources for new translations")
    qt5_create_translation(QM_FILES ${SOURCE_FILES} ${TS_FILES})
  else()
    message("** update qm files")
    qt5_add_translation(QM_FILES ${TS_FILES})
  endif()

  SET( bmsapp_DESKTOP
     ${ROOTDIR}/bmsapp.desktop
  )

  add_executable(${bmsapp_EXECUTABLE} ${SOURCE_FILES} ${QM_FILES})
  target_link_libraries(${bmsapp_EXECUTABLE} Qt5::Core Qt5::Widgets Qt5::Network Qt5::Sql Qt5::PrintSupport Qt5::WebSockets)

  # `make translations'
  add_custom_target(translations DEPENDS ${QM_FILES})
ENDIF()

# ===== Install the application =====

IF( ${BUILD_DESIGNER_PLUGINS} )

  INSTALL(TARGETS bmsapp_rangeslider bmsapp_nulldate
	DESTINATION "${LIBPATH}/plugins/designer"
  )

ELSE()

  install(TARGETS ${bmsapp_EXECUTABLE}
        RUNTIME DESTINATION bin
  )

  INSTALL( FILES ${bmsapp_DESKTOP}
	 DESTINATION "${DATAROOTDIR}/applications"
  )

ENDIF()

mercurial