Author SHA1 Message Date
Mikaël Capelle c9f527b1c8 Remove option to use USVFS prebuilt. 2024-06-02 16:34:25 +02:00
Twinki 27483d6ddc Updated README for 6.7.0 (#134)
* Updated README for 6.7.0
2024-05-27 20:51:48 +02:00
Mikaël Capelle 73d7d3dd2b Use MO2 formatting action. (#133)
* Use MO2 formatting action.
* Fix format for clang-format 17.
2024-05-26 10:26:44 +02:00
Twinki 11dafd063b Update installation README (#131)
* Update installation README
2024-05-25 14:26:18 +02:00
Mikaël CapelleandJeremy Rimpo b0688f81b9 WIP: Upgrade dependencies. (#132)
* Upgrade dependencies.
* Upgrade to Python 3.12
* Remove fmt tasks switch from fmt to std::format internally.

---------

Co-authored-by: Jeremy Rimpo <jrim@rimpo.org>
2024-05-25 14:25:40 +02:00
Mikaël Capelle eaae1e44c9 Merge pull request #129 from ModOrganizer2/version_updates
libloot 0.22.3, openssl 3.2.0
2024-05-17 18:42:19 +02:00
Jeremy Rimpo 0cb5771762 libloot 0.22.3, openssl 3.2.0 2023-12-16 17:52:13 -06:00
Jeremy Rimpo 5ca1a76ff8 Merge pull request #128 from ModOrganizer2/style_updates
Update 6788-00 styles
2023-11-20 12:07:56 -06:00
Jeremy Rimpo a03d95fef4 Update 6788-00 styles 2023-11-19 19:24:37 -06:00
Jeremy Rimpo a835d167b2 Merge pull request #125 from ModOrganizer2/trosski_starfield
Add Trosski's Starfield theme
2023-11-14 14:18:40 -06:00
Jeremy Rimpo bd4f529078 Correct version and filename 2023-11-12 13:00:25 -06:00
Jeremy Rimpo 6b1b8ef6ea Merge pull request #126 from ModOrganizer2/version_updates
Version updates
2023-11-08 09:21:02 -06:00
Jeremy Rimpo 6cee3f2411 Add Trosski's Starfield theme 2023-11-07 23:52:08 -06:00
Jeremy Rimpo 80618cd3e1 Version updates 2023-11-07 23:48:04 -06:00
Jeremy Rimpo 5ff7221b80 Add Trosski's Starfield theme 2023-11-07 23:46:22 -06:00
Jeremy Rimpo 144548aef5 Merge pull request #124 from ModOrganizer2/loot_0_22
Bump to libloot 0.22.1
2023-10-18 12:45:33 -05:00
Jeremy Rimpo cdc666a1d5 Bump to libloot 0.22.1 2023-10-18 00:25:23 -05:00
Mikaël Capelle 2816871e93 Merge pull request #123 from ModOrganizer2/loot_0_22
Bump to libloot 0.22
2023-10-03 15:29:29 +02:00
Jeremy Rimpo 1b05181858 Bump to libloot 0.22 2023-10-02 15:14:55 -05:00
Mikaël Capelle b2eae1bd23 Merge pull request #122 from ModOrganizer2/dev/clean-and-fix
Cleaning and improvements
2023-09-24 20:15:28 +02:00
Mikaël Capelle 13ed5bcd26 Add option to bootstrap.ps1 for build config. 2023-09-24 10:08:57 +02:00
Mikaël Capelle 29eb8a7598 Simple precedence of task-specific config over pattern config. 2023-09-24 10:08:41 +02:00
Mikaël Capelle 7e08ce29c0 Use riverbank repository for building dev builds of PyQt6. 2023-09-24 09:37:42 +02:00
Mikaël Capelle 9fdf00417b Exclude version string from NMake stderr. 2023-09-24 09:36:06 +02:00
Mikaël Capelle ac15674069 Remove NCC patch. 2023-09-24 09:35:55 +02:00
Jeremy Rimpo b31d41b539 Fix openssl patch for python 3.11 2023-09-23 11:40:58 -05:00
Mikaël Capelle 09886da058 Merge pull request #121 from ModOrganizer2/dev/prebuilt-mob-repositories
Move prebuilt dependencies to mob repository.
2023-09-23 18:40:32 +02:00
Mikaël Capelle e03ea3854d Move prebuilt dependencies to mob repository. 2023-09-23 15:50:06 +02:00
46 changed files with 219 additions and 11541 deletions
+2 -3
View File
@@ -10,9 +10,8 @@ jobs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Run clang-format
uses: jidicula/clang-format-action@v4.11.0
- name: Check format
uses: ModOrganizer2/check-formatting-action@master
with:
clang-format-version: "16"
check-path: "."
exclude-regex: "third-party"
+9 -3
View File
@@ -1,4 +1,10 @@
param([switch]$Verbose)
param(
[switch]
$Verbose,
[ValidateSet("Debug", "RelWithDebInfo", "Release")]
[string]
$Config = "Release"
)
$root = $PSScriptRoot
if (!$root) {
@@ -23,7 +29,7 @@ if (! $installationPath) {
$opts = ""
$opts += " $root\build\mob.sln"
$opts += " -m"
$opts += " -p:Configuration=Release"
$opts += " -p:Configuration=${Config}"
$opts += " -noLogo"
$opts += " -p:UseMultiToolTask=true"
$opts += " -p:EnforceProcessCountAcrossBuilds=true"
@@ -45,5 +51,5 @@ if (! $?) {
exit $LastExitCode
}
Copy-Item "$root\build\src\Release\mob.exe" "$root\mob.exe"
Copy-Item "$root\build\src\${Config}\mob.exe" "$root\mob.exe"
Write-Output "run ``.\mob -d prefix/path build`` to start building"
+20 -20
View File
@@ -89,43 +89,43 @@ lz4 = true
openssl = true
pyqt = true
python = true
usvfs = false
[versions]
vs = 17
vs_year = 2022
vs_toolset = 14.3
sdk = 10.0.22621.0
sevenz = 23.01
boost = 1.83.0
sevenz = 24.05
boost = 1.85.0
boost_vs = 14.3
fmt = 8.1.1
fmt = 10.2.1
gtest = main
libloot = 0.21.0
libloot = 0.22.4
lz4 = v1.9.4
nmm = 0.71.2
openssl = 3.1.2
pyqt = 6.5.3.dev2309101249
pyqt_builder = 1.15.2
pyqt_sip = 13.5.2
python = v3.11.5
pybind11 = v2.10.4
openssl = 3.3.0
pyqt = 6.7.0
pyqt_builder = 1.16.2
pyqt_sip = 13.7.0
python = v3.12.3
pybind11 = v2.12.0
bzip2 = 1.0.8
sip = 6.7.11
spdlog = v1.10.0
qt = 6.5.0
sip = 6.8.3
spdlog = v1.14.1
qt = 6.7.0
qt_vs = 2019
zlib = v1.3
zlib = v1.3.1
libbsarch = 0.0.9
usvfs = qt6
explorerpp = 1.3.5
usvfs = master
explorerpp = 1.4.0
ss_paper_lad_6788 = 7.0
ss_paper_automata_6788 = 3.0
ss_paper_mono_6788 = 2.2
ss_paper_lad_6788 = 7.2
ss_paper_automata_6788 = 3.2
ss_paper_mono_6788 = 3.2
ss_dark_mode_1809_6788 = 3.0
ss_morrowind_trosski = 1.1
ss_skyrim_trosski = v1.1
ss_starfield_trosski = V1.11
ss_fallout3_trosski = v1.11
ss_fallout4_trosski = v1.11
-10
View File
@@ -1,10 +0,0 @@
--- publish.bat Thu Apr 30 00:08:44 2020
+++ publish.bat Thu Apr 30 00:08:14 2020
@@ -1,6 +1,6 @@
set _NMMPATH=%~dp0..\Nexus-Mod-Manager
set _NMMCLIPATH=%~dp0
-set outputPath=..\..\install\bin
+set outputPath=%~1
mkdir "%outputPath%\NCC"
copy "%_NMMPATH%\Stage\Release\AntlrUtil.dll" "%outputPath%\NCC"
+2 -2
View File
@@ -1,10 +1,10 @@
--- PCbuild/openssl.props (revision 5c02a39a0b31a330e06b4d6f44835afb205dc7cc)
+++ PCbuild/openssl.props (date 1575994670797)
@@ -13,6 +13,7 @@
<_DLLSuffix>-1_1</_DLLSuffix>
<_DLLSuffix>-3</_DLLSuffix>
<_DLLSuffix Condition="$(Platform) == 'ARM'">$(_DLLSuffix)-arm</_DLLSuffix>
<_DLLSuffix Condition="$(Platform) == 'ARM64'">$(_DLLSuffix)-arm64</_DLLSuffix>
+ <_DLLSuffix Condition="$(Platform) == 'x64'">$(_DLLSuffix)-x64</_DLLSuffix>
<OpenSSLDLLSuffix Condition="$(OpenSSLDLLSuffix) == ''">$(_DLLSuffix)</OpenSSLDLLSuffix>
</PropertyGroup>
<ItemGroup>
<_SSLDLL Include="$(opensslOutDir)\libcrypto$(_DLLSuffix).dll" />
+42 -19
View File
@@ -25,26 +25,51 @@
## Quick start
```
```powershell
> git clone https://github.com/ModOrganizer2/mob
> cd mob
> bootstrap
> mob -d c:\somewhere build
```
## Slow start
- Install Qt 6.5.1 ([Installer](https://download.qt.io/official_releases/online_installers/qt-unified-windows-x64-online.exe)) and select these components:
## Extended start
### Qt - CLI based install using [aqt](https://github.com/miurahr/aqtinstall)
[aqt](https://github.com/miurahr/aqtinstall) is a CLI installer for Qt, it makes installing Qt extremely quick and painless, and doesn't require a login
#### Installing aqt via package manager
- Start an administrative terminal
- Install aqt using one of the two popular packaage managers
- `winget install --id=miurahr.aqtinstall -e`
- `choco install aqt`
#### Installing aqt via python/pip
- Install [Python 3.9](https://www.python.org/downloads/release/python-390/)
- Install [aqt](https://github.com/miurahr/aqtinstall) using `pip`
#### Using aqt
- Open a terminal with administrative rights, and run
```powershell
aqt install-qt --outputdir "C:\Qt" windows desktop 6.7.0 win64_msvc2019_64 -m qtwebengine qtimageformats qtpositioning qtserialport qtwebchannel qtwebsockets
```
### Qt - Manual installation
- Install Qt 6.7.0 ([Installer](https://download.qt.io/official_releases/online_installers/qt-unified-windows-x64-online.exe)) and select these components:
- MSVC 2019 64-bit
- Additional Libraries:
- Qt WebEngine (display nexus pages)
- Qt Image Formats (display images in image tab and preview)
- Qt Positioning (required by QtWebEngine)
- Qt Serial Port (required by Qt Core)
- Qt Web Channel (required by QtWebEngine)
- Qt WebChannel (required by QtWebEngine)
- Qt WebSockets (Nexus api/download)
- Optional:
- Qt Source Files
- Qt Debug Files
### Visual Studio
- Install Visual Studio 2022 ([Installer](https://visualstudio.microsoft.com/thank-you-downloading-visual-studio/?sku=Community&channel=Release&version=VS2022&source=VSLandingPage&cid=2030&passive=false))
- Desktop development with C++
- Desktop .NET desktop development (needed by OMOD and FOMOD installers)
@@ -56,22 +81,20 @@
- C++ /CLI support for v143 build Tools (Latest) (for OMOD and FOMOD installers)
- Windows 11 SDK (get latest)
- C++ Build Tools core features
- Optional:
- Git for Windows (if you don't have git already installed)
- Start a shell
- If you have git in your path, a regular cmd shell works.
- If not, start the _x64 Native Tools Command Prompt for VS 2019_, it'll use Git for Windows installed above.
- Do:
```
mkdir C:\dev
cd C:\dev
git clone https://github.com/ModOrganizer2/mob
cd mob
bootstrap
mob -d C:\dev\modorganizer build
```
- Once `mob` is finished, everything will be in `C:\dev\modorganizer`. Mod Organizer can be run from `install\bin\ModOrganizer.exe`. The Visual Studio solution for Mod Organizer itself is `build\modorganizer_super\modorganizer\vsbuild\organizer.sln`.
- Git for Windows (Skip if you have this already installed outside of the VS installer)
- CMake tools for Windows (Skip if you have this already installed outside of the VS installer)
## Setting up MOB
- Open a shell. If you've installed Git or CMake through the VS installer, they won't be on your PATH, so you must use x64 Native Tools Command Prompt for VS 2022.- Pick a folder to develop MO2 in, for these steps it'll be `C:\dev`
- Execute these commands
```powershell
mkdir C:\dev
cd C:\dev
git clone https://github.com/ModOrganizer2/mob
./bootstrap.ps1
mob -d C:\dev\modorganizer build
```
- Once `mob` is finished, everything will be in `C:\dev\modorganizer`. Mod Organizer can be run from `install\bin\ModOrganizer.exe`. The Visual Studio solution for Mod Organizer itself is `build\modorganizer_super\modorganizer\vsbuild\organizer.sln`.
### Prebuilts
Some third-parties are not normally built from source, but this can be changed in the options by setting the various tasks in `[prebuilt]` to `false`. If OpenSSL is built from source, perl is required ([Strawberry Perl 5.30.2.1 installer](http://strawberryperl.com/download/5.30.2.1/strawberry-perl-5.30.2.1-64bit.msi)).
+5 -8
View File
@@ -122,7 +122,7 @@ namespace mob {
git_wrap g(task->source_path());
g.fetch(task->git_url().string(),
fmt::format("pull/{}/head", pr.number));
std::format("pull/{}/head", pr.number));
g.checkout("FETCH_HEAD");
}
@@ -208,13 +208,10 @@ namespace mob {
{
nlohmann::json json;
constexpr auto* pattern =
"https://api.github.com/search/issues?per_page=100&q="
"is:pr+org:{org:}+author:{author:}+is:open+head:{branch:}";
constexpr auto* pattern = "https://api.github.com/search/issues?per_page=100&q="
"is:pr+org:{0:}+author:{1:}+is:open+head:{2:}";
const auto search_url =
fmt::format(pattern, fmt::arg("org", org), fmt::arg("author", author),
fmt::arg("branch", branch));
const auto search_url = std::format(pattern, org, author, branch);
u8cout << "search url is " << search_url << "\n";
@@ -275,7 +272,7 @@ namespace mob {
return {};
}
const url u(fmt::format("https://api.github.com/repos/{}/{}/pulls/{}",
const url u(std::format("https://api.github.com/repos/{}/{}/pulls/{}",
task->org(), task->repo(), pr));
curl_downloader dl;
+2 -2
View File
@@ -367,7 +367,7 @@ namespace mob {
}
const auto q =
fmt::format("prefix {} already exists, delete?", path_to_utf8(prefix));
std::format("prefix {} already exists, delete?", path_to_utf8(prefix));
if (ask_yes_no(q, yn::no) != yn::yes)
return false;
@@ -489,7 +489,7 @@ namespace mob {
const auto* lcp = static_cast<LANGANDCODEPAGE*>(value_pointer);
const auto sub_block =
fmt::format(L"\\StringFileInfo\\{:04x}{:04x}\\FileVersion", lcp->wLanguage,
std::format(L"\\StringFileInfo\\{:04x}{:04x}\\FileVersion", lcp->wLanguage,
lcp->wCodePage);
ret = VerQueryValueW(buffer.get(), sub_block.c_str(), &value_pointer,
+6 -1
View File
@@ -378,8 +378,13 @@ namespace mob {
MOB_ASSERT(!tasks.empty());
for (auto& t : tasks)
for (auto& t : tasks) {
if (t->name() != task &&
details::find_string_for_task(t->name(), key)) {
continue;
}
details::set_string_for_task(t->name(), key, value);
}
}
else {
// global task option
-19
View File
@@ -5,25 +5,6 @@
#include "../utility.h"
#include "conf.h"
namespace mob::details {
std::string converter<std::wstring>::convert(const std::wstring& s)
{
return utf16_to_utf8(s);
}
std::string converter<fs::path>::convert(const fs::path& s)
{
return utf16_to_utf8(s.native());
}
std::string converter<url>::convert(const url& u)
{
return u.string();
}
} // namespace mob::details
namespace mob {
// timestamps are relative to this
+14 -52
View File
@@ -1,45 +1,7 @@
#pragma once
#include "../utility.h"
// T to std::string converters
//
// those are kept in this namespace so they don't leak all over the place;
// they're used directly by context::do_log() below
namespace mob::details {
class mob::url;
template <class T, class = void>
struct converter {
static const T& convert(const T& t) { return t; }
};
template <>
struct converter<std::wstring> {
static std::string convert(const std::wstring& s);
};
template <>
struct converter<fs::path> {
static std::string convert(const fs::path& s);
};
template <>
struct converter<url> {
static std::string convert(const url& u);
};
template <class T>
struct converter<T, std::enable_if_t<std::is_enum_v<T>>> {
static std::string convert(T e)
{
return std::to_string(static_cast<std::underlying_type_t<T>>(e));
}
};
} // namespace mob::details
#include "./formatters.h"
namespace mob {
@@ -57,7 +19,7 @@ namespace mob {
// in places where there is no context available, there's a global one can that
// be retrieved with gcx() for logging
//
// all log functions will use fmt::format() internally, so they can be used
// all log functions will use std::format() internally, so they can be used
// like:
//
// cx.log(context::generic, "eat more {}", "potatoes");
@@ -161,7 +123,7 @@ namespace mob {
// logs a formatted string with the dump level
//
template <class... Args>
void dump(reason r, const char* f, Args&&... args) const
void dump(reason r, std::format_string<Args...> f, Args&&... args) const
{
do_log(false, r, level::dump, f, std::forward<Args>(args)...);
}
@@ -169,7 +131,7 @@ namespace mob {
// logs a formatted string with the trace level
//
template <class... Args>
void trace(reason r, const char* f, Args&&... args) const
void trace(reason r, std::format_string<Args...> f, Args&&... args) const
{
do_log(false, r, level::trace, f, std::forward<Args>(args)...);
}
@@ -177,7 +139,7 @@ namespace mob {
// logs a formatted string with the debug level
//
template <class... Args>
void debug(reason r, const char* f, Args&&... args) const
void debug(reason r, std::format_string<Args...> f, Args&&... args) const
{
do_log(false, r, level::debug, f, std::forward<Args>(args)...);
}
@@ -185,7 +147,7 @@ namespace mob {
// logs a formatted string with the info level
//
template <class... Args>
void info(reason r, const char* f, Args&&... args) const
void info(reason r, std::format_string<Args...> f, Args&&... args) const
{
do_log(false, r, level::info, f, std::forward<Args>(args)...);
}
@@ -193,7 +155,7 @@ namespace mob {
// logs a formatted string with the warning level
//
template <class... Args>
void warning(reason r, const char* f, Args&&... args) const
void warning(reason r, std::format_string<Args...> f, Args&&... args) const
{
do_log(false, r, level::warning, f, std::forward<Args>(args)...);
}
@@ -201,7 +163,7 @@ namespace mob {
// logs a formatted string with the error level
//
template <class... Args>
void error(reason r, const char* f, Args&&... args) const
void error(reason r, std::format_string<Args...> f, Args&&... args) const
{
do_log(false, r, level::error, f, std::forward<Args>(args)...);
}
@@ -211,7 +173,8 @@ namespace mob {
// tasks
//
template <class... Args>
[[noreturn]] void bail_out(reason r, const char* f, Args&&... args) const
[[noreturn]] void bail_out(reason r, std::format_string<Args...> f,
Args&&... args) const
{
do_log(true, r, level::error, f, std::forward<Args>(args)...);
}
@@ -227,7 +190,8 @@ namespace mob {
// bailed exception after logging
//
template <class... Args>
void do_log(bool bail, reason r, level lv, const char* f, Args&&... args) const
void do_log(bool bail, reason r, level lv, std::format_string<Args...> f,
Args&&... args) const
{
// discard log if it's not enabled and it's not bailing out
if (!bail && !enabled(lv))
@@ -235,9 +199,7 @@ namespace mob {
try {
// formatting string
const std::string s =
fmt::format(f, details::converter<std::decay_t<Args>>::convert(
std::forward<Args>(args))...);
const std::string s = std::format(f, std::forward<Args>(args)...);
do_log_impl(bail, r, lv, s);
}
@@ -253,7 +215,7 @@ namespace mob {
// a ghetto conversion and hope it gives enough info
std::wstring s;
const char* p = f;
const char* p = f.get().data();
while (*p) {
s += (wchar_t)*p;
++p;
+35
View File
@@ -0,0 +1,35 @@
#pragma once
#include "../utility/string.h"
template <>
struct std::formatter<std::wstring, char> : std::formatter<std::string, char> {
template <class FmtContext>
FmtContext::iterator format(std::wstring const& s, FmtContext& ctx) const
{
return std::formatter<std::string, char>::format(mob::utf16_to_utf8(s), ctx);
}
};
template <>
struct std::formatter<std::filesystem::path, char>
: std::formatter<std::basic_string<std::filesystem::path::value_type>, char> {
template <class FmtContext>
FmtContext::iterator format(std::filesystem::path const& s, FmtContext& ctx) const
{
return std::formatter<std::basic_string<std::filesystem::path::value_type>,
char>::format(s.native(), ctx);
}
};
template <class Enum, class CharT>
requires std::is_enum_v<Enum>
struct std::formatter<Enum, CharT>
: std::formatter<std::underlying_type_t<Enum>, CharT> {
template <class FmtContext>
FmtContext::iterator format(Enum v, FmtContext& ctx) const
{
return std::formatter<std::underlying_type_t<Enum>, CharT>::format(
static_cast<std::underlying_type_t<Enum>>(v), ctx);
}
};
+2 -2
View File
@@ -10,11 +10,11 @@
namespace mob {
template <class... Args>
void ini_error(const ini_data& ini, std::size_t line, std::string_view f,
void ini_error(const ini_data& ini, std::size_t line, std::format_string<Args...> f,
Args&&... args)
{
gcx().bail_out(context::conf, "{}:{}: {}", path_to_utf8(ini.path), (line + 1),
fmt::format(f, std::forward<Args>(args)...));
std::format(f, std::forward<Args>(args)...));
}
ini_data::kv_map& ini_data::get_section(std::string_view name)
+1 -1
View File
@@ -326,7 +326,7 @@ namespace mob {
// check known installation paths for a bunch of versions
for (int v : {5, 6, 7, 8}) {
const fs::path inno_dir = fmt::format("Inno Setup {}", v);
const fs::path inno_dir = std::format("Inno Setup {}", v);
// check for both architectures
for (fs::path pf : {conf().path().pf_x86(), conf().path().pf_x64()}) {
-2
View File
@@ -29,12 +29,10 @@ namespace mob {
add_task<parallel_tasks>()
.add_task<sevenz>()
.add_task<zlib>()
.add_task<fmt>()
.add_task<gtest>()
.add_task<libbsarch>()
.add_task<libloot>()
.add_task<openssl>()
.add_task<libffi>()
.add_task<bzip2>();
add_task<parallel_tasks>()
+9
View File
@@ -115,3 +115,12 @@ namespace mob {
};
} // namespace mob
template <>
struct std::formatter<mob::url, char> : std::formatter<std::string, char> {
template <class FmtContext>
FmtContext::iterator format(mob::url const& u, FmtContext& ctx) const
{
return std::formatter<std::string, char>::format(u.string(), ctx);
}
};
-1
View File
@@ -1,2 +1 @@
#include "pch.h"
#include <fmt/format.cc>
+1 -1
View File
@@ -48,6 +48,7 @@
#include <atomic>
#include <charconv>
#include <filesystem>
#include <format>
#include <fstream>
#include <functional>
#include <iostream>
@@ -69,7 +70,6 @@
#include <clipp.h>
#include <curl/curl.h>
#include <fmt/format.h>
#include <nlohmann/json.hpp>
#pragma warning(pop)
+2 -3
View File
@@ -7,9 +7,8 @@ namespace mob::tasks {
url source_url()
{
return "https://explorerplusplus.com/software/"
"explorer++_" +
explorerpp::version() + "_x64.zip";
return "https://download.explorerplusplus.com/stable/" +
explorerpp::version() + "/explorerpp_x64.zip";
}
} // namespace
-94
View File
@@ -1,94 +0,0 @@
#include "pch.h"
#include "tasks.h"
namespace mob::tasks {
namespace {
url source_url()
{
return "https://github.com/fmtlib/fmt/releases/download/" + fmt::version() +
"/fmt-" + fmt::version() + ".zip";
}
cmake create_cmake_tool(const fs::path& src_path,
cmake::ops o = cmake::ops::generate)
{
return std::move(cmake(o)
.generator(cmake::vs)
.root(src_path)
.prefix(src_path / "build")
.def("FMT_TEST", "OFF")
.def("FMT_DOC", "OFF"));
}
fs::path solution_path()
{
const auto build_path = create_cmake_tool(fmt::source_path()).build_path();
return build_path / "INSTALL.vcxproj";
}
msbuild create_msbuild_tool(msbuild::ops o = msbuild::ops::build)
{
return std::move(msbuild(o).solution(solution_path()));
}
} // namespace
fmt::fmt() : basic_task("fmt") {}
std::string fmt::version()
{
return conf().version().get("fmt");
}
bool fmt::prebuilt()
{
// no prebuilts available
return false;
}
fs::path fmt::source_path()
{
return conf().path().build() / ("fmt-" + version());
}
void fmt::do_clean(clean c)
{
// delete download
if (is_set(c, clean::redownload))
run_tool(downloader(source_url(), downloader::clean));
// delete the whole directory
if (is_set(c, clean::reextract)) {
cx().trace(context::reextract, "deleting {}", source_path());
op::delete_directory(cx(), source_path(), op::optional);
// no need to do anything else
return;
}
// cmake clean
if (is_set(c, clean::reconfigure))
run_tool(create_cmake_tool(source_path(), cmake::clean));
// msbuild clean
if (is_set(c, clean::rebuild))
run_tool(create_msbuild_tool(msbuild::clean));
}
void fmt::do_fetch()
{
const auto file = run_tool(downloader(source_url()));
run_tool(extractor().file(file).output(source_path()));
}
void fmt::do_build_and_install()
{
run_tool(create_cmake_tool(source_path()));
run_tool(create_msbuild_tool());
}
} // namespace mob::tasks

Some files were not shown because too many files have changed in this diff Show More