Warning, /system/kpmcore/README.md is written in an unsupported language. File is not indexed.
0001 <!-- SPDX-FileCopyrightText: 2017 Adriaan de Groot <groot@kde.org>
0002 SPDX-FileCopyrightText: 2017-2020 Andrius Štikonas <andrius@stikonas.eu>
0003 SPDX-License-Identifier: CC-BY-4.0
0004 -->
0005
0006 # KPMcore
0007
0008 > KPMcore, the KDE Partition Manager core, is a library for examining
0009 > and modifying partitions, disk devices, and filesystems on a
0010 > Linux system. It provides a unified programming interface over
0011 > top of (external) system-manipulation tools.
0012
0013 KPMcore is a library for examining and manipulating all facets
0014 of storage devices on a system:
0015 * raw disk devices
0016 * partition tables on a device
0017 * filesystems within a partition
0018
0019 There are multiple backends so that KPMcore can support different
0020 operating systems, although the only functional backend is the
0021 one for Linux systems:
0022 * sfdisk backend (Linux)
0023 * null backend
0024
0025 ## Using KPMcore
0026
0027 Most of the usage information on KPMcore is included in the API
0028 documentation; this section contains only high-level usage information.
0029
0030 ### Finding KPMcore with CMake
0031
0032 KPMcore supports CMake as (meta-)build system and installs suitable
0033 CMake support files. Typical use of of KPMcore in a `CMakeLists.txt`
0034 looks like this:
0035
0036 ```cmake
0037 find_package( KPMcore 3.2 REQUIRED )
0038 target_link_libraries( target kpmcore )
0039 ```
0040
0041 There are no imported targets defined for KPMcore.
0042
0043 ### Initialization
0044
0045 An application must initialize the library and load a suitable
0046 backend before using KPMcore functions. By convention, the
0047 environment variable `KPMCORE_BACKEND` names a backend,
0048 and typical initialization code will look like this (or use the
0049 class `KPMCoreInitializer` from `test/helpers.h`):
0050
0051 ```cpp
0052 #include <backend/corebackendmanager.h>
0053 #include <QDebug>
0054
0055 bool initKPMcore()
0056 {
0057 static bool inited = false;
0058 if ( inited ) return true;
0059
0060 QByteArray env = qgetenv( "KPMCORE_BACKEND" );
0061 auto backendName = env.isEmpty() ? CoreBackendManager::defaultBackendName() : env;
0062 if ( !CoreBackendManager::self()->load( backendName ) )
0063 {
0064 qWarning() << "Failed to load backend plugin" << backendName;
0065 return false;
0066 }
0067 inited = true;
0068 return true;
0069 }
0070 ```
0071
0072 This code uses the environment variable if set, and otherwise falls
0073 back to a default backend suitable for the current platform.
0074
0075 Calling KPMcore functions before the library is initialized will
0076 result in undefined behavior.
0077
0078 ### Devices
0079
0080 After the backend is initialized you can scan for available devices.
0081 If you only want devices from the loaded backend you can call
0082
0083 ```cpp
0084 QList<Device*> devices = backend->scanDevices( excludeReadOnly );
0085 ```
0086
0087 where `bool` option `excludeReadOnly` specifies whether to exclude
0088 read only devices.
0089
0090 #### KPMcore device scanner
0091
0092 Alternatively, you can use KPMcore device scanner
0093
0094 ```cpp
0095 #include <core/device.h>
0096 #include <core/devicescanner.h>
0097 #include <core/operationstack.h>
0098
0099 // First create operationStack with another QObject as parent, we will use nullptr here.
0100 OperationStack *operationStack = new OperationStack(nullptr);
0101 DeviceScanner *deviceScanner = new DeviceScanner(nullptr, *operationStack);
0102 deviceScanner->scan(); // use start() for scanning in the background thread
0103 QList<Device*> devices = operationStack->previewDevices();
0104 ```
0105
0106 Then `deviceScanner` scans for the devices in a background thread. After
0107 scanning is complete `DeviceScanner::finished()` signal will be emitted.
0108 Then the devices can accessed using `operationStack->previewDevices()`.