Skip to content
Snippets Groups Projects
Select Git revision
  • 8e5eb02d7d2022d589c60f22cc3cd496f929919f
  • development default protected
  • 3.2.x-stable
  • prepare
  • 6b369dc5
  • 3.1.x-stable
  • 3.0.x-stable
  • 2.4.x-stable
  • v3.2.61
  • v3.2.60
  • v3.2.59
  • v3.2.54
  • v3.2.53
  • v3.2.52
  • v3.2.51
  • v3.2.48
  • v3.2.45
  • v3.2.44.3
  • v3.2.44
  • v3.2.40
  • v3.2.13
  • v3.2.9
  • v3.2.8
  • v3.2.7
  • v3.2.6
  • v3.2.5
  • v3.2.4
  • v3.2.3
28 results

CalamaresAddLibrary.cmake

Blame
  • user avatar
    Teo Mrnjavac authored
    This also adds ImageRegistry, a SVG cache, a bunch of utility functions
    for shared pixmaps in CalamaresUtilsGui and renames several qrc files
    in viewmodules.
    d97bb47f
    History
    Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    CalamaresAddLibrary.cmake 4.48 KiB
    include( CMakeParseArguments )
    
    function(calamares_add_library)
        # parse arguments (name needs to be saved before passing ARGN into the macro)
        set(NAME ${ARGV0})
        set(options NO_INSTALL NO_VERSION)
        set(oneValueArgs NAME TYPE EXPORT_MACRO TARGET TARGET_TYPE EXPORT VERSION SOVERSION INSTALL_BINDIR RESOURCES)
        set(multiValueArgs SOURCES UI LINK_LIBRARIES LINK_PRIVATE_LIBRARIES COMPILE_DEFINITIONS QT5_MODULES)
        cmake_parse_arguments(LIBRARY "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
        set(LIBRARY_NAME ${NAME})
    
    
    #    message("*** Arguments for ${LIBRARY_NAME}")
    #    message("Sources: ${LIBRARY_SOURCES}")
    #    message("Link libraries: ${LIBRARY_LINK_LIBRARIES}")
    #    message("UI: ${LIBRARY_UI}")
    #    message("TARGET_TYPE: ${LIBRARY_TARGET_TYPE}")
    #    message("EXPORT_MACRO: ${LIBRARY_EXPORT_MACRO}")
    #    message("NO_INSTALL: ${LIBRARY_NO_INSTALL}")
    
        set(target ${LIBRARY_NAME})
    
        # qt stuff
        include_directories(${CMAKE_CURRENT_LIST_DIR})
        include_directories(${CMAKE_CURRENT_BINARY_DIR})
    
        if(LIBRARY_UI)
            qt5_wrap_ui(LIBRARY_UI_SOURCES ${LIBRARY_UI})
            list(APPEND LIBRARY_SOURCES ${LIBRARY_UI_SOURCES})
        endif()
    
        # add resources from current dir
        if(EXISTS "${CMAKE_CURRENT_LIST_DIR}/${LIBRARY_RESOURCES}")
            qt5_add_resources(LIBRARY_RC_SOURCES "${LIBRARY_RESOURCES}")
            list(APPEND LIBRARY_SOURCES ${LIBRARY_RC_SOURCES})
            unset(LIBRARY_RC_SOURCES)
        endif()
    
        # add target
        if(LIBRARY_TARGET_TYPE STREQUAL "STATIC")
            add_library(${target} STATIC ${LIBRARY_SOURCES})
        elseif(LIBRARY_TARGET_TYPE STREQUAL "MODULE")
            add_library(${target} MODULE ${LIBRARY_SOURCES})
        else() # default
            add_library(${target} SHARED ${LIBRARY_SOURCES})
        endif()
    
        # HACK: add qt modules - every lib should define its own set of modules
        qt5_use_modules(${target} Core Gui Widgets ${LIBRARY_QT5_MODULES})
    
        # definitions - can this be moved into set_target_properties below?
        add_definitions(${QT_DEFINITIONS})
        set_target_properties(${target} PROPERTIES AUTOMOC TRUE)
    
        if(LIBRARY_EXPORT_MACRO)
            set_target_properties(${target} PROPERTIES COMPILE_DEFINITIONS ${LIBRARY_EXPORT_MACRO})
        endif()
    
        if(LIBRARY_COMPILE_DEFINITIONS)
            # Dear CMake, i hate you! Sincerely, domme
            # At least in CMake 2.8.8, you CANNOT set more than one COMPILE_DEFINITIONS value
            # only takes the first one if called multiple times or bails out with wrong number of arguments
            # when passing in a list, thus i redefine the export macro here in hope it won't mess up other targets
            add_definitions( "-D${LIBRARY_EXPORT_MACRO}" )
    
            set_target_properties(${target} PROPERTIES COMPILE_DEFINITIONS ${LIBRARY_COMPILE_DEFINITIONS})
        endif()
    
        # add link targets
        target_link_libraries(${target} ${CALAMARES_LIBRARIES})
        if(LIBRARY_LINK_LIBRARIES)
            target_link_libraries(${target} ${LIBRARY_LINK_LIBRARIES})
        endif()
        if(LIBRARY_LINK_PRIVATE_LIBRARIES)
            target_link_libraries(${target} LINK_PRIVATE ${LIBRARY_LINK_PRIVATE_LIBRARIES})
        endif()
    
        # add soversion
        if(NOT LIBRARY_NO_VERSION)
            set_target_properties(${target} PROPERTIES VERSION ${LIBRARY_VERSION})
    
            if(NOT LIBRARY_SOVERSION)
                set(LIBRARY_SOVERSION ${LIBRARY_VERSION})
            endif()
    
            set_target_properties(${target} PROPERTIES SOVERSION ${LIBRARY_SOVERSION})
        endif()
    
    
        if(NOT LIBRARY_INSTALL_BINDIR)
            set(LIBRARY_INSTALL_BINDIR "${CMAKE_INSTALL_BINDIR}")
            set(LIBRARY_INSTALL_LIBDIR "${CMAKE_INSTALL_LIBDIR}")
        else()
            set(LIBRARY_INSTALL_LIBDIR "${LIBRARY_INSTALL_BINDIR}")
        endif()
    
        #message("INSTALL_BINDIR: ${LIBRARY_INSTALL_BINDIR}")
        #message("INSTALL_LIBDIR: ${LIBRARY_INSTALL_LIBDIR}")
    
        # make installation optional, maybe useful for dummy plugins one day
        if(NOT LIBRARY_NO_INSTALL)
            include(GNUInstallDirs)
            if(NOT LIBRARY_EXPORT)
                install( TARGETS ${target}
                    RUNTIME DESTINATION ${LIBRARY_INSTALL_BINDIR}
                    LIBRARY DESTINATION ${LIBRARY_INSTALL_LIBDIR}
                    ARCHIVE DESTINATION ${LIBRARY_INSTALL_LIBDIR}
                )
            else()
                install( TARGETS ${target}
                    EXPORT ${LIBRARY_EXPORT}
                    RUNTIME DESTINATION ${LIBRARY_INSTALL_BINDIR}
                    LIBRARY DESTINATION ${LIBRARY_INSTALL_LIBDIR}
                    ARCHIVE DESTINATION ${LIBRARY_INSTALL_LIBDIR}
                )
            endif()
        endif()
    endfunction()