Author SHA1 Message Date
Mikaël Capelle 4db6ff40f1 Remove fmt tasks switch from fmt to std::format internally. 2024-05-25 14:25:11 +02:00
Jeremy Rimpo b0d26f30a9 Undo branch change 2024-05-20 03:33:08 -05:00
Jeremy Rimpo 13b76ecfa5 clang and undo prebuilt change 2024-05-20 03:31:40 -05:00
Jeremy Rimpo b7d716651b Upgrade to Python 3.12
- Should manage most external dependencies for python
2024-05-20 03:24:24 -05:00
Mikaël Capelle a7ee59c7bd Upgrade dependencies. 2024-05-18 19:07:11 +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
43 changed files with 164 additions and 11362 deletions
+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"
+19 -18
View File
@@ -96,36 +96,37 @@ 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
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" />
+7 -10
View File
@@ -116,13 +116,13 @@ namespace mob {
if (!task)
return 1;
u8cout << "checking out pr " << pr.number << " "
<< "in " << task->name() << "\n";
u8cout << "checking out pr " << pr.number << " " << "in "
<< task->name() << "\n";
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
-51
View File
@@ -1,51 +0,0 @@
#include "pch.h"
#include "tasks.h"
namespace mob::tasks {
// required by python
libffi::libffi() : basic_task("libffi") {}
std::string libffi::version()
{
return {};
}
bool libffi::prebuilt()
{
// actually always prebuilt
return false;
}
fs::path libffi::source_path()
{
return conf().path().build() / "libffi";
}
void libffi::do_clean(clean c)
{
// delete the whole thing
if (is_set(c, clean::reclone))
git_wrap::delete_directory(cx(), source_path());
}
void libffi::do_fetch()
{
run_tool(make_git()
.url(make_git_url("python", "cpython-bin-deps"))
.branch("libffi-3.4.4")
.root(source_path()));
}
fs::path libffi::include_path()
{
return libffi::source_path() / "amd64" / "include";
}
fs::path libffi::lib_path()
{
return libffi::source_path() / "amd64";
}
} // namespace mob::tasks
+1 -1
View File
@@ -60,7 +60,7 @@ namespace mob::tasks {
void libloot::do_build_and_install()
{
// copy dll
op::copy_file_to_dir_if_better(cx(), source_path() / "loot.dll",
op::copy_file_to_dir_if_better(cx(), source_path() / "bin" / "loot.dll",
conf().path().install_loot());
}

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