aboutsummaryrefslogtreecommitdiff
path: root/libs/cmake_common/README.md
blob: c66a5a36785e74be6831581dd41fb9225509e2a2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
# MO2 CMake Common

This repository contains useful CMake macro and functions that are used to ease creating
CMake configuration for most of MO2 repositories (e.g.,
[uibase](https://github.com/ModOrganizer2/modorganizer-uibase),
[plugin_python](https://github.com/ModOrganizer2/modorganizer-plugin_python) or
[ModOrganizer2](https://github.com/ModOrganizer2/modorganizer) itself).

## Getting Started

### 1. With VCPKG

Add [MO2 VCPKG registry](https://github.com/ModOrganizer2/vcpkg-registry) to your
`vcpkg-configuration.json`:

```json
{
  "default-registry": {
    "kind": "git",
    "repository": "https://github.com/Microsoft/vcpkg",
    "baseline": "f61a294e765b257926ae9e9d85f96468a0af74e7"
  },
  "registries": [
    {
      "kind": "git",
      "repository": "https://github.com/ModOrganizer2/vcpkg-registry",
      "baseline": "27d8adbfe9e4ce88a875be3a45fadab69869eb60",
      "packages": ["mo2-cmake"]
    }
  ]
}
```

Add `mo2-cmake` to your VCPKG dependencies (`vcpkg.json`) and then import the utilities
with `find_package` in your CMake configuration:

```cmake
find_package(mo2-cmake CONFIG REQUIRED)
```

### 2. Manually

Clone this repository somewhere and then `include(mo2.cmake)` in your CMake
configuration files.

## Usage

Be aware that using these utilities will automatically set some (not too intrusive)
global variable on your project.

In order to properly use this package, you should set `CMAKE_INSTALL_PREFIX` to a valid
location.
There are two possible way of using this package controlled by the `MO2_INSTALL_IS_BIN`
option:

- if `MO2_INSTALL_IS_BIN` is `OFF` (default), this assumes a layout with a `bin`,
  `lib`, `include` and `pdb` folder under `CMAKE_INSTALL_PREFIX`,
- if `MO2_INSTALL_IS_BIN` is `ON` (default when building standalone), this assumes
  that `CMAKE_INSTALL_PREFIX` point directly to the equivalent `bin` folder.

Importing the utilities will make the following variables available:

- `MO2_QT_VERSION` - The Qt version used by MO2, as `major.minor.patch`.
- `MO2_QT_MAJOR_VERSION`, `MO2_QT_MINOR_VERSION` and `MO2_QT_PATCH_VERSION` -
  Respectively the major, minor and patch version of Qt used by MO2.
- `MO2_PYTHON_VERSION` - The Python version used by MO2 as `major.minor` (patch version
  should not be relevant).

All functions are prefixed by `mo2_` and should not conflict with other existing
functions.

### Generic Utilities

- `mo2_set_if_not_defined` - Set a variable to a given value if the variable is not
  defined.
- `mo2_add_subdirectories` -
- `mo2_find_python_executable` - Find Python executable.
- `mo2_find_git_hash` - Find the hash of the current git HEAD.
- `mo2_find_qt_executable` - Find a given Qt executable.
- `mo2_set_project_to_run_from_install` - Configure the debug executable for a VS project.
- `mo2_add_filter` - Add a source group filter.
- `mo2_deploy_qt_for_tests` - Deploy Qt DLLs, etc., for tests.
- `mo2_deploy_qt` - Deploy Qt DLLs for ModOrganizer2.
- `mo2_add_lupdate` - Create a target to run Qt `lupdate`.
- `mo2_add_lrelease` - Create a target to Qt `lrelease`.
- `mo2_add_translations` - Add targets to generate translations for the given target.

### C++ Utilities

TODO:

- `mo2_configure_warnings` - Utility function configure warnings for a target.
- `mo2_configure_sources` - Glob and configure sources, including Qt-related files
  (.ui, etc.) for a target.
- `mo2_configure_msvc` - Set some MSVC-specific flag for a target.
- (Deprecated) `mo2_configure_target` - Combine the above function + Extra stuff.
- (Deprecated) `mo2_configure_plugin`
- `mo2_configure_tests` - TO BE CHANGED
- `mo2_install_plugin` - Install a plugin.

### Python Utilities

- `mo2_python_uifiles` - Add a target to generate `.py` files from `.ui` files.
- `mo2_python_pip_install` - Install Python packages.
- `mo2_python_requirements` - Install plugin requirements from a `plugin-requirements.txt`
  file, ready to ship.
- `mo2_configure_python_module` - Configure a Python module plugin.
- (Deprecated) `mo2_configure_python_simple` - Configure a Python single file plugin.
- `mo2_configure_python` - Wrapper for the two above functions.