Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 8 additions & 3 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,20 @@ name: Build Mob

on:
push:
branches: master
branches: [master]
pull_request:
types: [opened, synchronize, reopened]

env:
VCPKG_BINARY_SOURCES: ${{ vars.AZ_BLOB_VCPKG_URL != '' && format('clear;x-azblob,{0},{1},readwrite', vars.AZ_BLOB_VCPKG_URL, secrets.AZ_BLOB_SAS) || '' }}

jobs:
build:
runs-on: windows-2022
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
- name: Build Mob
shell: pwsh
run: ./bootstrap.ps1 -Verbose
run: |
$env:VCPKG_ROOT = $env:VCPKG_INSTALLATION_ROOT
./bootstrap.ps1 -Verbose
2 changes: 1 addition & 1 deletion .github/workflows/linting.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/checkout@v6
- name: Check format
uses: ModOrganizer2/check-formatting-action@master
with:
Expand Down
7 changes: 6 additions & 1 deletion CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
cmake_minimum_required(VERSION 3.16)

project(mob)
project(mob LANGUAGES CXX)

find_package(clipp CONFIG REQUIRED)
find_package(nlohmann_json CONFIG REQUIRED)
find_package(CURL REQUIRED)

add_subdirectory(src)

set_property(DIRECTORY ${PROJECT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT mob)
46 changes: 46 additions & 0 deletions CMakePresets.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
{
"version": 6,
"configurePresets": [
{
"name": "vcpkg",
"generator": "Visual Studio 17 2022",
"architecture": "x64",
"binaryDir": "${sourceDir}/build/",
"toolchainFile": "$env{VCPKG_ROOT}/scripts/buildsystems/vcpkg.cmake",
"cacheVariables": {
"VCPKG_TARGET_TRIPLET": "x64-windows-static-md",
"CMAKE_CONFIGURATION_TYPES": "Debug;Release;RelWithDebInfo"
}
}
],
"buildPresets": [
{
"name": "Base",
"hidden": true,
"nativeToolOptions": [
"-m",
"-noLogo",
"-p:UseMultiToolTask=true",
"-p:EnforceProcessCountAcrossBuilds=true"
]
},
{
"name": "Debug",
"configurePreset": "vcpkg",
"inherits": "Base",
"configuration": "Debug"
},
{
"name": "Release",
"configurePreset": "vcpkg",
"inherits": "Base",
"configuration": "Release"
},
{
"name": "RelWithDebInfo",
"configurePreset": "vcpkg",
"inherits": "Base",
"configuration": "RelWithDebInfo"
}
]
}
37 changes: 6 additions & 31 deletions bootstrap.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -11,41 +11,16 @@ if (!$root) {
$root = "."
}

$output = if ($Verbose) { "Out-Default" } else { "Out-Null" }
$logLevel = if ($Verbose) { "STATUS" } else { "ERROR" }

cmake -B $root/build -G "Visual Studio 17 2022" $root | & $output
cmake --preset vcpkg --log-level=$logLevel

$installationPath = & $root\third-party\bin\vswhere.exe -products * -nologo -prerelease -latest -property installationPath
if (! $?) {
Write-Error "vswhere returned $LastExitCode"
exit $LastExitCode
}

if (! $installationPath) {
Write-Error "Empty installation path"
exit 1
}

$opts = ""
$opts += " $root\build\mob.sln"
$opts += " -m"
$opts += " -p:Configuration=${Config}"
$opts += " -noLogo"
$opts += " -p:UseMultiToolTask=true"
$opts += " -p:EnforceProcessCountAcrossBuilds=true"

if (!$Verbose) {
$opts += " -clp:ErrorsOnly;Verbosity=minimal"
if ($Verbose) {
cmake --build --preset $Config --verbose
} else {
cmake --build --preset $Config
}

$vsDevCmd = "$installationPath\Common7\Tools\VsDevCmd.bat"
if (!(Test-Path "$vsDevCmd")) {
Write-Error "VdDevCmd.bat not found at $vsDevCmd"
exit 1
}

& "${env:COMSPEC}" /c "`"$vsDevCmd`" -no_logo -arch=amd64 -host_arch=amd64 && msbuild $opts"

if (! $?) {
Write-Error "Build failed"
exit $LastExitCode
Expand Down
1 change: 1 addition & 0 deletions custom-ports/zlib/portfile.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
set(VCPKG_POLICY_EMPTY_PACKAGE enabled)
8 changes: 8 additions & 0 deletions custom-ports/zlib/vcpkg.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"$schema": "https://raw.githubusercontent.com/microsoft/vcpkg-tool/main/docs/vcpkg.schema.json",
"name": "zlib",
"version-string": "zlib-ng overlay",
"dependencies": [
"zlib-ng"
]
}
6 changes: 6 additions & 0 deletions custom-triplets/x64-windows-static-md.cmake
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
set(VCPKG_TARGET_ARCHITECTURE x64)
set(VCPKG_CRT_LINKAGE dynamic)
set(VCPKG_LIBRARY_LINKAGE static)

set(ZLIB_COMPAT ON)
set(nlohmann-json_IMPLICIT_CONVERSIONS OFF)
18 changes: 18 additions & 0 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ check the [ModOrganizer2 Wiki](https://github.com/ModOrganizer2/modorganizer/wik
```powershell
git clone https://github.com/ModOrganizer2/mob
cd mob
$env:VCPKG_ROOT = "C:\path\to\vcpkg"
./bootstrap
mob -d c:\somewhere build
```
Expand Down Expand Up @@ -108,6 +109,20 @@ aqt install-qt --outputdir "C:\Qt" windows desktop ${QT_VERSION} win64_msvc2022_
- 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)

### vcpkg

`mob` now uses **vcpkg** to manage its third-party dependencies (like libcurl).

1. **Install vcpkg**: If you don't have it, follow the [official instructions](https://learn.microsoft.com/en-us/vcpkg/get_started/get-started).
2. **Set Environment Variable**: `mob` requires the `VCPKG_ROOT` environment variable to locate the toolchain.

```powershell
$env:VCPKG_ROOT = "C:\path\to\vcpkg"
$env:PATH = "$env:VCPKG_ROOT;$env:PATH"
```

3. **Static Triplet**: `mob` builds with the `x64-windows-static-md` triplet by default to ensure a standalone executable. The `bootstrap.ps1` script handles this automatically if `VCPKG_ROOT` is set.

## Setting up MOB

```powershell
Expand All @@ -117,6 +132,9 @@ cd C:\dev
# clone this repository
git clone https://github.com/ModOrganizer2/mob
# set vcpkg path, or use `vcpkg integrate install` instead
$env:VCPKG_ROOT = "C:\path\to\your\vcpkg"
# build mob itself - this will create mob.exe in the current directory
./bootstrap.ps1
Expand Down
32 changes: 14 additions & 18 deletions src/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,22 +1,18 @@
cmake_minimum_required(VERSION 3.16)

file(GLOB_RECURSE source_files *.cpp)
file(GLOB_RECURSE header_files *.h)
file(GLOB_RECURSE source_files CONFIGURE_DEPENDS "*.cpp")
file(GLOB_RECURSE header_files CONFIGURE_DEPENDS "*.h")

add_executable(mob ${source_files} ${header_files})
set_target_properties(mob PROPERTIES CXX_STANDARD 20)

target_compile_definitions(mob PUBLIC NOMINMAX)
target_compile_options(mob PUBLIC "/MT")
target_include_directories(mob PUBLIC ${CMAKE_SOURCE_DIR}/third-party/include)
target_link_libraries(mob PUBLIC
wsock32 ws2_32 crypt32 wldap32 dbghelp shlwapi version
optimized ${CMAKE_SOURCE_DIR}/third-party/lib/libcurl.lib
debug ${CMAKE_SOURCE_DIR}/third-party/lib/libcurl-d.lib
optimized ${CMAKE_SOURCE_DIR}/third-party/lib/zlib.lib
debug ${CMAKE_SOURCE_DIR}/third-party/lib/zlibd.lib)
target_compile_features(mob PRIVATE cxx_std_20)

target_compile_definitions(
mob PRIVATE _WIN32_WINNT=0x0A00 NTDDI_VERSION=0x0A000007 WIN32_LEAN_AND_MEAN
NOMINMAX NOCOMM)

target_link_libraries(mob PRIVATE clipp::clipp nlohmann_json::nlohmann_json
CURL::libcurl dbghelp shlwapi version)

source_group(TREE ${CMAKE_CURRENT_SOURCE_DIR}
PREFIX src
FILES ${source_files} ${header_files})
set_property(DIRECTORY ${PROJECT_SOURCE_DIR} PROPERTY VS_STARTUP_PROJECT mob)
source_group(
TREE ${CMAKE_CURRENT_SOURCE_DIR}
PREFIX src
FILES ${source_files} ${header_files})
11 changes: 6 additions & 5 deletions src/cmd/pr.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -236,7 +236,7 @@ namespace mob {

for (auto&& item : json["items"]) {
// ex: https://api.github.com/repos/ModOrganizer2/modorganizer-Installer
const std::string url = item["repository_url"];
const std::string url = item["repository_url"].get<std::string>();

const auto last_slash = url.find_last_of("/");
if (last_slash == std::string::npos) {
Expand All @@ -246,7 +246,7 @@ namespace mob {

const auto repo = url.substr(last_slash + 1);

pr_info info = {repo, author, branch, item["title"],
pr_info info = {repo, author, branch, item["title"].get<std::string>(),
std::to_string(item["number"].get<int>())};

if (!repos.emplace(repo, info).second) {
Expand Down Expand Up @@ -287,9 +287,10 @@ namespace mob {
const auto output = dl.steal_output();
json = nlohmann::json::parse(output);

const std::string repo = json["head"]["repo"]["name"];
const std::string author = json["head"]["repo"]["user"]["login"];
const std::string branch = json["head"]["ref"];
const std::string repo = json["head"]["repo"]["name"].get<std::string>();
const std::string author =
json["head"]["repo"]["user"]["login"].get<std::string>();
const std::string branch = json["head"]["ref"].get<std::string>();

return {repo, author, branch};
}
Expand Down
8 changes: 6 additions & 2 deletions src/pch.h
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
#pragma once

// global warnings
#pragma warning(disable : 4464) // relative include path
#pragma warning(disable : 4820) // padding added
Expand Down Expand Up @@ -62,10 +64,12 @@
#include <thread>
#include <vector>

#include <Shlobj.h>
#include <windows.h>

#include <dbghelp.h>
#include <fcntl.h>
#include <imagehlp.h>
#include <io.h>
#include <shlobj.h>
#include <shlwapi.h>

#include <clipp.h>
Expand Down
Loading