Skip to content
Snippets Groups Projects
CMakeLists.txt 6.6 KiB
Newer Older
  • Learn to ignore specific revisions
  • jkito's avatar
    jkito committed
    cmake_minimum_required(VERSION 3.16)
    project(bitmask VERSION 1.0 LANGUAGES CXX)
    
    set(CMAKE_INCLUDE_CURRENT_DIR ON)
    
    find_package(QT NAMES Qt5 Qt6 REQUIRED)
    find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Gui Qml Quick QuickControls2 Svg Widgets LinguistTools)
    
    find_library(LIB_TO_INCLUDE goshim lib)
    #qt_standard_project_setup()
    set(CMAKE_AUTOMOC ON)
    set(CMAKE_AUTOUIC ON)
    
    qt_add_executable(bitmask WIN32 MACOSX_BUNDLE
        gui/handlers.cpp gui/handlers.h
        gui/main.cpp
        gui/qjsonmodel.cpp gui/qjsonmodel.h
        lib/libgoshim.h
    )
    qt_add_qml_module(bitmask
        URI bitmask
        VERSION ${PROJECT_VERSION}
        QML_FILES
            gui/main.qml
            gui/themes/themes.js
            gui/themes/theme-riseup.js
            gui/themes/Riseup.qml
            gui/themes/theme-calyx.js
            gui/themes/Calyx.qml
            gui/themes/ThemeObject.qml
            gui/components/MainView.qml
            gui/components/ThemedPage.qml
            gui/components/Splash.qml
            gui/components/FadeBehavior.qml
            gui/components/Home.qml
            gui/components/Header.qml
            gui/components/Footer.qml
            gui/components/About.qml
            gui/components/MaterialRadioButton.qml
            gui/components/MaterialRadioIndicator.qml
            gui/components/WrappedRadioButton.qml
            gui/components/MaterialCheckBox.qml
            gui/components/StatusBox.qml
            gui/components/Systray.qml
            gui/components/Help.qml
            gui/components/Locations.qml
            gui/components/SignalIcon.qml
            gui/components/Preferences.qml
            gui/components/BoldLabel.qml
            gui/components/LightLabel.qml
            gui/components/VPNButtonBase.qml
            gui/components/VPNMouseArea.qml
            gui/components/VerticalSpacer.qml
            gui/components/Icon.qml
            gui/components/MaterialButton.qml
            gui/components/VPNState.qml
            gui/components/InitErrors.qml
            gui/components/ErrorBox.qml
            gui/components/MotdBox.qml
            gui/components/NavigationDrawer.qml
        RESOURCES
            gui/qtquickcontrols2.conf
            gui/resources/icon-noshield.svg
            gui/resources/location.svg
            gui/resources/settings.svg
            gui/resources/power.svg
            gui/resources/language.svg
            gui/resources/lightning.svg
            gui/resources/close.svg
            gui/resources/donate.svg
            gui/resources/tools.svg
            gui/resources/help.svg
            gui/resources/about.svg
            gui/resources/bridge.svg
            gui/resources/gear-fill.svg
            gui/resources/reception-0.svg
            gui/resources/reception-2.svg
            gui/resources/reception-4.svg
            gui/resources/reception-0@24.svg
            gui/resources/reception-4@24.svg
            gui/resources/arrow-left.svg
            gui/resources/globe.svg
            gui/resources/spy.gif
            gui/resources/quit.svg
            gui/resources/alert.svg
            gui/resources/angle-right.svg
            gui/resources/snowflake.svg
            gui/resources/ravens.svg
            gui/resources/ravens.gif
            gui/resources/riseup-icon.svg
            gui/resources/calyx/calyx-shield-green.png
            gui/resources/calyx/calyx-hand.png
            gui/resources/calyx/calyx-red-shield.png
            gui/resources/calyx/calyx-yellow-shield.png
            gui/resources/fonts/Poppins-Regular.ttf
            gui/resources/fonts/Poppins-Bold.ttf
            gui/resources/fonts/Montserrat-SemiBold.ttf
            gui/resources/fonts/Roboto-Regular.ttf
            gui/resources/fonts/Roboto-Bold.ttf
            gui/assets/icon/png/black/vpn_off.png
            gui/assets/icon/png/black/vpn_on.png
            gui/assets/icon/png/black/vpn_wait_0.png
            gui/assets/icon/png/black/vpn_wait_1.png
            gui/assets/icon/png/black/vpn_wait_2.png
            gui/assets/icon/png/black/vpn_wait_3.png
            gui/assets/icon/png/white/vpn_off.png
            gui/assets/icon/png/white/vpn_on.png
            gui/assets/icon/png/white/vpn_wait_0.png
            gui/assets/icon/png/white/vpn_wait_1.png
            gui/assets/icon/png/white/vpn_wait_2.png
            gui/assets/icon/png/white/vpn_wait_3.png
            gui/assets/img/bird.jpg
            gui/providers/providers.json
        NO_RESOURCE_TARGET_PATH
        OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/release
    )
    set_source_files_properties("gui/providers/providers.json"
        PROPERTIES QT_RESOURCE_ALIAS "providers.json"
    )
    set_source_files_properties("gui/resources/fonts/Montserrat-SemiBold.ttf"
        PROPERTIES QT_RESOURCE_ALIAS "monserrat-bold.ttf"
    )
    set_source_files_properties("gui/resources/fonts/Poppins-Bold.ttf"
        PROPERTIES QT_RESOURCE_ALIAS "poppins-bold.ttf"
    )
    set_source_files_properties("gui/resources/fonts/Poppins-Regular.ttf"
        PROPERTIES QT_RESOURCE_ALIAS "poppins-regular.ttf"
    )
    set_source_files_properties("gui/resources/fonts/Roboto-Bold.ttf"
        PROPERTIES QT_RESOURCE_ALIAS "roboto-bold.ttf"
    )
    set_source_files_properties("gui/resources/fonts/Roboto-Regular.ttf"
        PROPERTIES QT_RESOURCE_ALIAS "roboto.ttf"
    )
    
    # Avoid collision between executable name and QML module directory (QTBUG-98568).
    if(NOT WIN32 AND NOT APPLE)
        set_property(TARGET bitmask PROPERTY OUTPUT_NAME bitmask_app)
    endif()
    
    target_compile_definitions(bitmask PRIVATE
        QT_DEPRECATED_WARNINGS
    )
    
    target_link_libraries(bitmask PRIVATE
        # Remove: L../../lib
        Qt::Core
        Qt::Gui
        Qt::Qml
        Qt::Quick
        Qt::QuickControls2
        Qt::Svg
        Qt::Widgets
        ${LIB_TO_INCLUDE}
        pthread
    )
    
    
    # Resources:
    set_source_files_properties("providers/riseup/assets/icon.svg"
        PROPERTIES QT_RESOURCE_ALIAS "icon.svg"
    )
    set(vendor_resource_files
        "providers/riseup/assets/icon.svg"
    )
    
    qt_add_resources(bitmask "vendor"
        PREFIX
            "/vendor/"
        BASE
            "providers/riseup"
        FILES
            ${vendor_resource_files}
    )
    
    qt_add_translations(bitmask TS_FILES
        gui/i18n/base.ts
        gui/i18n/main_de.ts
        gui/i18n/main_el.ts
        gui/i18n/main_es_ES.ts
        gui/i18n/main_es-rAR.ts
        gui/i18n/main_es.ts
        gui/i18n/main_et.ts
        gui/i18n/main_fa_IR.ts
        gui/i18n/main_fi.ts
        gui/i18n/main_fr.ts
        gui/i18n/main_hu.ts
        gui/i18n/main_it.ts
        gui/i18n/main_lt.ts
        gui/i18n/main_nl.ts
        gui/i18n/main_pl.ts
        gui/i18n/main_pt-rBR.ts
        gui/i18n/main_ru.ts
        gui/i18n/main_th.ts
        gui/i18n/main_tr.ts
        gui/i18n/main_ug.ts
        gui/i18n/main_zh-rTW.ts
        gui/i18n/main_zh.ts
    )
    
    if(MACOS)
        target_link_libraries(bitmask PRIVATE
            "-framework CoreFoundation"
            "-framework Security"
        )
    endif()
    
    install(TARGETS bitmask
        BUNDLE DESTINATION .
        RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
    )
    
    qt_generate_deploy_qml_app_script(
        TARGET bitmask
        FILENAME_VARIABLE deploy_script
        NO_UNSUPPORTED_PLATFORM_ERROR
        DEPLOY_USER_QML_MODULES_ON_UNSUPPORTED_PLATFORM
        MACOS_BUNDLE_POST_BUILD
    )
    install(SCRIPT ${deploy_script})