# === This file is part of Calamares - <https://calamares.io> ===
#
#   SPDX-FileCopyrightText: 2020 Adriaan de Groot <groot@kde.org>
#   SPDX-License-Identifier: BSD-2-Clause
#

# When debugging the partitioning widget, or experimenting, you may
# want to allow unsafe partitioning choices (e.g. doing things to the
# current disk). Set DEBUG_PARTITION_UNSAFE to allow that (it turns off
# some filtering of devices). If you **do** allow unsafe partitioning,
# it will error out at runtime unless you **also** switch **off**
# DEBUG_PARTITION_BAIL_OUT, at which point you are welcome to shoot
# yourself in the foot.
#
# Independently, DEBUG_PARTITION_SKIP will not do the actual partitioning
# through KPMCore, but it **will** save the global storage setup as if
# it has done the partitioning. This is going to confuse subsequent
# modules since the partitions on disk won't match GS, but it can be
# useful for debugging simulated installations that don't need to
# mount the target filesystems.
option(DEBUG_PARTITION_UNSAFE "Allow unsafe partitioning choices." OFF)
option(DEBUG_PARTITION_BAIL_OUT "Unsafe partitioning will error out on exec." ON)
option(DEBUG_PARTITION_SKIP "Don't actually do any partitioning." OFF)

# This is very chatty, useful mostly if you don't know what KPMCore offers.
option(DEBUG_FILESYSTEMS "Log all available Filesystems from KPMCore." OFF)

include_directories(${CMAKE_SOURCE_DIR}) # For 3rdparty

set(_partition_defs)
if(DEBUG_PARTITION_UNSAFE)
    if(DEBUG_PARTITION_BAIL_OUT)
        list(APPEND _partition_defs DEBUG_PARTITION_BAIL_OUT)
    endif()
    list(APPEND _partition_defs DEBUG_PARTITION_UNSAFE)
endif()
if(DEBUG_FILESYSTEMS)
    list(APPEND _partition_defs DEBUG_FILESYSTEMS)
endif()
if(DEBUG_PARTITION_SKIP)
    list(APPEND _partition_defs DEBUG_PARTITION_SKIP)
endif()

include(KPMcoreHelper)

if(KPMcore_FOUND)
    include_directories(${PROJECT_BINARY_DIR}/src/libcalamaresui)

    add_subdirectory(tests)

    calamares_add_plugin(partition
        TYPE viewmodule
        EXPORT_MACRO PLUGINDLLEXPORT_PRO
        SOURCES
            Config.cpp
            PartitionViewStep.cpp

            core/BootLoaderModel.cpp
            core/ColorUtils.cpp
            core/DeviceList.cpp
            core/DeviceModel.cpp
            core/KPMHelpers.cpp
            core/DirFSRestrictLayout.cpp
            core/OsproberEntry.cpp
            core/PartitionActions.cpp
            core/PartitionCoreModule.cpp
            core/PartitionInfo.cpp
            core/PartitionLayout.cpp
            core/PartitionModel.cpp
            core/PartUtils.cpp
            gui/BootInfoWidget.cpp
            gui/ChoicePage.cpp
            gui/CreatePartitionDialog.cpp
            gui/CreateVolumeGroupDialog.cpp
            gui/DeviceInfoWidget.cpp
            gui/EditExistingPartitionDialog.cpp
            gui/EncryptWidget.cpp
            gui/ListPhysicalVolumeWidgetItem.cpp
            gui/PartitionPage.cpp
            gui/PartitionBarsView.cpp
            gui/PartitionDialogHelpers.cpp
            gui/PartitionLabelsView.cpp
            gui/PartitionSizeController.cpp
            gui/PartitionSplitterWidget.cpp
            gui/ResizeVolumeGroupDialog.cpp
            gui/ScanningDialog.cpp
            gui/VolumeGroupBaseDialog.cpp
            jobs/AutoMountManagementJob.cpp
            jobs/ChangeFilesystemLabelJob.cpp
            jobs/ClearMountsJob.cpp
            jobs/ClearTempMountsJob.cpp
            jobs/CreatePartitionJob.cpp
            jobs/CreatePartitionTableJob.cpp
            jobs/CreateVolumeGroupJob.cpp
            jobs/DeactivateVolumeGroupJob.cpp
            jobs/DeletePartitionJob.cpp
            jobs/FillGlobalStorageJob.cpp
            jobs/FormatPartitionJob.cpp
            jobs/PartitionJob.cpp
            jobs/RemoveVolumeGroupJob.cpp
            jobs/ResizePartitionJob.cpp
            jobs/ResizeVolumeGroupJob.cpp
            jobs/SetPartitionFlagsJob.cpp
        UI
            gui/ChoicePage.ui
            gui/CreatePartitionDialog.ui
            gui/CreatePartitionTableDialog.ui
            gui/EditExistingPartitionDialog.ui
            gui/EncryptWidget.ui
            gui/PartitionPage.ui
            gui/VolumeGroupBaseDialog.ui
        LINK_PRIVATE_LIBRARIES
            calamares::kpmcore
            ${kfname}::CoreAddons
        COMPILE_DEFINITIONS ${_partition_defs}
        SHARED_LIB
    )
else()
    if(NOT KPMcore_FOUND)
        calamares_skip_module( "partition (missing suitable KPMcore)" )
    else()
        calamares_skip_module( "partition (missing dependencies for KPMcore)" )
    endif()
endif()
