diff --git a/src/libcalamares/CMakeLists.txt b/src/libcalamares/CMakeLists.txt index b414887c4..055d45a2f 100644 --- a/src/libcalamares/CMakeLists.txt +++ b/src/libcalamares/CMakeLists.txt @@ -97,6 +97,30 @@ if( Qt5Xml_FOUND ) list( APPEND OPTIONAL_PUBLIC_LIBRARIES Qt5::Network Qt5::Xml ) endif() +### OPTIONAL KPMcore support +# +# +find_package( KPMcore 3.3 ) +set_package_properties( + KPMcore PROPERTIES + PURPOSE "For partitioning service" +) + +if ( KPMcore_FOUND ) + find_package( Qt5 REQUIRED DBus ) # Needed for KPMCore + find_package( KF5 REQUIRED I18n WidgetsAddons ) # Needed for KPMCore + + if( KPMcore_VERSION VERSION_GREATER "3.3.70" AND KPMcore_VERSION VERSION_LESS "4.0" ) + message( FATAL_ERROR "KPMCore beta versions are not supported" ) + endif() + + include_directories( ${KPMCORE_INCLUDE_DIR} ) + list( APPEND libSources + partition/PartitionIterator.cpp + ) + list( APPEND OPTIONAL_PRIVATE_LIBRARIES kpmcore ) +endif() + ### LIBRARY # # @@ -167,13 +191,13 @@ if ( ECM_FOUND AND BUILD_TESTING ) ${YAMLCPP_LIBRARY} ) calamares_automoc( geoiptest ) - + ecm_add_test( partition/Tests.cpp TEST_NAME libcalamarespartitiontest LINK_LIBRARIES - calamares + calamares Qt5::Test ) calamares_automoc( libcalamarespartitiontest ) diff --git a/src/modules/partition/core/PartitionIterator.cpp b/src/libcalamares/partition/PartitionIterator.cpp similarity index 89% rename from src/modules/partition/core/PartitionIterator.cpp rename to src/libcalamares/partition/PartitionIterator.cpp index 34471f6f2..9e1b647c3 100644 --- a/src/modules/partition/core/PartitionIterator.cpp +++ b/src/libcalamares/partition/PartitionIterator.cpp @@ -2,7 +2,7 @@ * * Copyright 2014, Aurélien Gâteau * Copyright 2015, Teo Mrnjavac - * Copyright 2017, Adriaan de Groot + * Copyright 2017, 2019 Adriaan de Groot * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -25,21 +25,27 @@ #include #include +namespace CalamaresUtils +{ +namespace Partition +{ + +using Partition = ::Partition; + PartitionIterator::PartitionIterator( PartitionTable* table ) : m_table( table ) -{} - -Partition* -PartitionIterator::operator*() const { - return m_current; } +Partition* PartitionIterator::operator*() const { return m_current; } + void PartitionIterator::operator++() { if ( !m_current ) + { return; + } if ( m_current->hasChildren() ) { // Go to the first child @@ -78,18 +84,21 @@ PartitionIterator::operator==( const PartitionIterator& other ) const bool PartitionIterator::operator!=( const PartitionIterator& other ) const { - return ! ( *this == other ); + return !( *this == other ); } PartitionIterator PartitionIterator::begin( Device* device ) { if ( !device ) + { return PartitionIterator( nullptr ); - Q_ASSERT(device); + } PartitionTable* table = device->partitionTable(); if ( !table ) + { return PartitionIterator( nullptr ); + } return PartitionIterator::begin( table ); } @@ -101,7 +110,9 @@ PartitionIterator::begin( PartitionTable* table ) // Does not usually happen, but it did happen on a tiny (10MiB) disk with an MBR // partition table. if ( children.isEmpty() ) + { return it; + } it.m_current = children.first(); return it; } @@ -110,10 +121,14 @@ PartitionIterator PartitionIterator::end( Device* device ) { if ( !device ) + { return PartitionIterator( nullptr ); + } PartitionTable* table = device->partitionTable(); if ( !table ) + { return PartitionIterator( nullptr ); + } return PartitionIterator::end( table ); } @@ -123,3 +138,6 @@ PartitionIterator::end( PartitionTable* table ) { return PartitionIterator( table ); } + +} // namespace Partition +} // namespace CalamaresUtils diff --git a/src/modules/partition/core/PartitionIterator.h b/src/libcalamares/partition/PartitionIterator.h similarity index 72% rename from src/modules/partition/core/PartitionIterator.h rename to src/libcalamares/partition/PartitionIterator.h index b72c2de8a..1e2a41bea 100644 --- a/src/modules/partition/core/PartitionIterator.h +++ b/src/libcalamares/partition/PartitionIterator.h @@ -2,6 +2,7 @@ * * Copyright 2014, Aurélien Gâteau * Copyright 2015, Teo Mrnjavac + * Copyright 2019, Adriaan de Groot * * Calamares is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -17,20 +18,34 @@ * along with Calamares. If not, see . */ -#ifndef PARTITIONITERATOR_H -#define PARTITIONITERATOR_H +#ifndef PARTITION_PARTITIONITERATOR_H +#define PARTITION_PARTITIONITERATOR_H class Device; class Partition; class PartitionTable; -/** +namespace CalamaresUtils +{ +namespace Partition +{ + +/** @brief Iterator over KPMCore partitions + * * A forward-only iterator to go through the partitions of a device, * independently of whether they are primary, logical or extended. + * + * An iterator can be created from a device (then it refers to the + * partition table of that device) or a partition table. The + * partition table must remain valid throughout iteration. + * + * A nullptr is valid, for an empty iterator. */ class PartitionIterator { public: + using Partition = ::Partition; + Partition* operator*() const; void operator++(); @@ -50,4 +65,7 @@ private: Partition* m_current = nullptr; }; -#endif /* PARTITIONITERATOR_H */ +} // namespace Partition +} // namespace CalamaresUtils + +#endif // PARTITION_PARTITIONITERATOR_H diff --git a/src/modules/fsresizer/CMakeLists.txt b/src/modules/fsresizer/CMakeLists.txt index c7dc98110..b173998aa 100644 --- a/src/modules/fsresizer/CMakeLists.txt +++ b/src/modules/fsresizer/CMakeLists.txt @@ -21,7 +21,6 @@ if ( KPMcore_FOUND ) EXPORT_MACRO PLUGINDLLEXPORT_PRO SOURCES ResizeFSJob.cpp - ${PROJECT_SOURCE_DIR}/src/modules/partition/core/PartitionIterator.cpp LINK_PRIVATE_LIBRARIES kpmcore calamares diff --git a/src/modules/partition/CMakeLists.txt b/src/modules/partition/CMakeLists.txt index f4a71dc06..28c5c86ef 100644 --- a/src/modules/partition/CMakeLists.txt +++ b/src/modules/partition/CMakeLists.txt @@ -48,7 +48,6 @@ if ( KPMcore_FOUND ) core/PartitionActions.cpp core/PartitionCoreModule.cpp core/PartitionInfo.cpp - core/PartitionIterator.cpp core/PartitionLayout.cpp core/PartitionModel.cpp core/PartUtils.cpp diff --git a/src/modules/partition/tests/CMakeLists.txt b/src/modules/partition/tests/CMakeLists.txt index ac3968df9..8ebc14754 100644 --- a/src/modules/partition/tests/CMakeLists.txt +++ b/src/modules/partition/tests/CMakeLists.txt @@ -5,7 +5,6 @@ set( PartitionModule_SOURCE_DIR .. ) set( partitionjobtests_SRCS ${PartitionModule_SOURCE_DIR}/core/KPMHelpers.cpp ${PartitionModule_SOURCE_DIR}/core/PartitionInfo.cpp - ${PartitionModule_SOURCE_DIR}/core/PartitionIterator.cpp ${PartitionModule_SOURCE_DIR}/jobs/CreatePartitionJob.cpp ${PartitionModule_SOURCE_DIR}/jobs/CreatePartitionTableJob.cpp ${PartitionModule_SOURCE_DIR}/jobs/DeletePartitionJob.cpp