Commit 569b8102 authored by Benjamin Bertrand's avatar Benjamin Bertrand
Browse files

CMakeLists.txt: Rewrite to not use the pogo preference files

Inspired from starter and TangoDatabase
FindMySQL.cmake taken from https://gitlab.com/tango-controls/TangoDatabase/-/blob/main/configure/FindMySQL.cmake
parent 3623f86d
Loading
Loading
Loading
Loading
+28 −68
Original line number Diff line number Diff line
#=============================================================================
#
# file :        CMakeLists.txt
#
# description : File to generate a TANGO device server using cmake.
#
# project :     TangoAccessControl
#
# $Author:  $
#
# $Revision:  $
# $Date:  $
#
#=============================================================================
#                This file is generated by POGO
#        (Program Obviously used to Generate tango Object)
#=============================================================================
#
#

cmake_minimum_required (VERSION 2.8)
set(CMAKE_SKIP_RPATH true)

# MAKE_ENV is the path to find common environment to buil project
#
set(MAKE_ENV ${TANGO_HOME})
#
# Project definitions
#
cmake_minimum_required(VERSION 3.7 FATAL_ERROR)
project(TangoAccessControl)

#
# optional compiler flags
#
set(CXXFLAGS_USER -g)
if(NOT CMAKE_BUILD_TYPE)
    message("No build type specified - default is DEBUG")
    set(CMAKE_BUILD_TYPE DEBUG)
endif()

include(FindPkgConfig)
include(configure/FindMySQL.cmake)

#
# Get global information
#
include(${MAKE_ENV}/cmake_tango.opt)
if(NOT MYSQL_FOUND)
    message(SEND_ERROR " Can not find MySQL client library.")
endif()

#
# Files for TangoAccessControl TANGO class
#
set(TANGOACCESSCONTROL TangoAccessControl)
set(TANGOACCESSCONTROL_INCLUDE ${CMAKE_SOURCE_DIR})
set(TANGOACCESSCONTROL_SRC ${TANGOACCESSCONTROL}.cpp ${TANGOACCESSCONTROL}Class.cpp ${TANGOACCESSCONTROL}StateMachine.cpp DbUtils.cpp)
#
# Files for AccessControl TANGO class
#
set(ACCESSCONTROL_PATH ../AbstractClasses)
set(ACCESSCONTROL AccessControl)
set(ACCESSCONTROL_INCLUDE ../AbstractClasses)
set(ACCESSCONTROL_SRC ${ACCESSCONTROL_PATH}/${ACCESSCONTROL}.cpp ${ACCESSCONTROL_PATH}/${ACCESSCONTROL}Class.cpp ${ACCESSCONTROL_PATH}/${ACCESSCONTROL}StateMachine.cpp)
pkg_search_module(TANGO_PKG REQUIRED tango)

set(SOURCES ClassFactory.cpp
            DbUtils.cpp
            TangoAccessControlStateMachine.cpp
            TangoAccessControl.cpp
            TangoAccessControlClass.cpp
            main.cpp)

#
# User additional include, link folders/libraries and source files
#
set(USER_INCL_DIR /usr/include/mysql)
set(USER_LIB_DIR /usr/lib/x86_64-linux-gnu)
set(USER_LIBS mysqlclient_r)
set(USER_SRC_FILES )
set(ADDITIONAL_SOURCES ../AbstractClasses/AccessControl.cpp
                       ../AbstractClasses/AccessControlClass.cpp
                       ../AbstractClasses/AccessControlStateMachine.cpp)

#
# Set gloabal info and include directories
#
set(ALL_CLASS_INCLUDE  ${TANGOACCESSCONTROL_INCLUDE} ${ACCESSCONTROL_INCLUDE}  ${USER_INCL_DIR})
set(SERVER_SRC ${TANGOACCESSCONTROL_SRC} ${ACCESSCONTROL_SRC}  ${USER_SRC_FILES} ClassFactory.cpp main.cpp)
include_directories(${ALL_CLASS_INCLUDE}  ${USER_INCL_DIR} ${TANGO_INCLUDES})
include_directories(${CMAKE_SOURCE_DIR} ../AbstractClasses ${TANGO_PKG_INCLUDE_DIRS} ${MYSQL_INCLUDE_DIRS})
link_directories(${TANGO_PKG_LIBRARY_DIRS})

#
# Device Server generation
#
set(SERVER_NAME TangoAccessControl)
include(${MAKE_ENV}/cmake_common_target.opt)
add_executable(TangoAccessControl ${SOURCES} ${ADDITIONAL_SOURCES})
target_link_libraries(TangoAccessControl ${TANGO_PKG_LIBRARIES} ${MYSQL_LIBRARIES} -Wl,-z,now -pie)
target_compile_options(TangoAccessControl PUBLIC ${TANGO_PKG_CFLAGS_OTHER} -Wall -Wextra -D_FORTIFY_SOURCE=2 -O1 -fpie)

install(TARGETS TangoAccessControl
        RUNTIME DESTINATION "${CMAKE_INSTALL_FULL_BINDIR}"
        CONFIGURATIONS ${CMAKE_BUILD_TYPE})
+50 −0
Original line number Diff line number Diff line
# - Try to find MySQL.
# Once done this will define:
# MYSQL_FOUND			- If false, do not try to use MySQL.
# MYSQL_INCLUDE_DIRS	- Where to find mysql.h, etc.
# MYSQL_LIBRARIES		- The libraries to link against.
#

if( WIN32 )
    find_path( MYSQL_INCLUDE_DIR
            NAMES "mysql.h"
            PATHS "$ENV{PROGRAMFILES}/MySQL/*/include"
            "$ENV{PROGRAMFILES(x86)}/MySQL/*/include"
            "$ENV{SYSTEMDRIVE}/MySQL/*/include" )

    find_library( MYSQL_LIBRARY
            NAMES "mysqlclient" "mysqlclient_r"
            PATHS "$ENV{PROGRAMFILES}/MySQL/*/lib"
            "$ENV{PROGRAMFILES(x86)}/MySQL/*/lib"
            "$ENV{SYSTEMDRIVE}/MySQL/*/lib" )
else()
    find_path( MYSQL_INCLUDE_DIR
            NAMES "mysql.h"
            PATHS "/usr/include/mysql"
            "/usr/include/mariadb"
            "/usr/local/include/mysql"
            "/usr/mysql/include/mysql" )

    find_library( MYSQL_LIBRARY
            NAMES "mysqlclient" "mysqlclient_r"
            PATHS "/lib/mysql"
            "/lib64/mysql"
            "/usr/lib/mysql"
            "/usr/lib/mariadb"
            "/usr/lib64/mysql"
            "/usr/local/lib/mysql"
            "/usr/local/lib64/mysql"
            "/usr/mysql/lib/mysql"
            "/usr/mysql/lib64/mysql" )
endif()

# handle the QUIETLY and REQUIRED arguments and set MYSQL_FOUND to TRUE if
# all listed variables are TRUE
include( FindPackageHandleStandardArgs )

find_package_handle_standard_args( MYSQL DEFAULT_MSG MYSQL_LIBRARY MYSQL_INCLUDE_DIR)

set( MYSQL_INCLUDE_DIRS ${MYSQL_INCLUDE_DIR} )
set( MYSQL_LIBRARIES ${MYSQL_LIBRARY} )

mark_as_advanced( MYSQL_INCLUDE_DIR MYSQL_LIBRARY )