chore: make yuzu REUSE compliant
[REUSE] is a specification that aims at making file copyright
information consistent, so that it can be both human and machine
readable. It basically requires that all files have a header containing
copyright and licensing information. When this isn't possible, like
when dealing with binary assets, generated files or embedded third-party
dependencies, it is permitted to insert copyright information in the
`.reuse/dep5` file.
Oh, and it also requires that all the licenses used in the project are
present in the `LICENSES` folder, that's why the diff is so huge.
This can be done automatically with `reuse download --all`.
The `reuse` tool also contains a handy subcommand that analyzes the
project and tells whether or not the project is (still) compliant,
`reuse lint`.
Following REUSE has a few advantages over the current approach:
- Copyright information is easy to access for users / downstream
- Files like `dist/license.md` do not need to exist anymore, as
`.reuse/dep5` is used instead
- `reuse lint` makes it easy to ensure that copyright information of
files like binary assets / images is always accurate and up to date
To add copyright information of files that didn't have it I looked up
who committed what and when, for each file. As yuzu contributors do not
have to sign a CLA or similar I couldn't assume that copyright ownership
was of the "yuzu Emulator Project", so I used the name and/or email of
the commit author instead.
[REUSE]: https://reuse.software
Follow-up to b2eb10382941bef0914f4a0a4685b9033440aa9f
2022-05-15 02:06:02 +02:00
|
|
|
// SPDX-FileCopyrightText: 2014 Citra Emulator Project
|
|
|
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
2014-04-23 18:43:57 -07:00
|
|
|
|
|
|
|
#include "common/scm_rev.h"
|
|
|
|
|
2024-04-05 01:58:30 +02:00
|
|
|
#include <fstream>
|
|
|
|
#include <string>
|
2025-04-09 19:11:22 -04:00
|
|
|
#include <fmt/ranges.h>
|
2024-04-05 01:58:30 +02:00
|
|
|
|
|
|
|
#define GIT_REV "@GIT_REV@"
|
|
|
|
#define GIT_BRANCH "@GIT_BRANCH@"
|
|
|
|
#define GIT_DESC "@GIT_DESC@"
|
|
|
|
#define BUILD_NAME "@REPO_NAME@"
|
|
|
|
#define BUILD_DATE "@BUILD_DATE@"
|
2018-08-29 17:03:55 +05:30
|
|
|
#define BUILD_FULLNAME "@BUILD_FULLNAME@"
|
|
|
|
#define BUILD_VERSION "@BUILD_VERSION@"
|
2019-10-05 00:09:49 -04:00
|
|
|
#define BUILD_ID "@BUILD_ID@"
|
|
|
|
#define TITLE_BAR_FORMAT_IDLE "@TITLE_BAR_FORMAT_IDLE@"
|
|
|
|
#define TITLE_BAR_FORMAT_RUNNING "@TITLE_BAR_FORMAT_RUNNING@"
|
2014-04-23 18:43:57 -07:00
|
|
|
|
|
|
|
namespace Common {
|
|
|
|
|
2024-04-05 01:58:30 +02:00
|
|
|
const char* g_scm_rev;
|
|
|
|
const char* g_scm_branch;
|
|
|
|
const char* g_scm_desc;
|
|
|
|
const char g_build_name[] = BUILD_NAME;
|
|
|
|
const char g_build_date[] = BUILD_DATE;
|
2018-08-29 17:03:55 +05:30
|
|
|
const char g_build_fullname[] = BUILD_FULLNAME;
|
2024-04-05 01:58:30 +02:00
|
|
|
const char g_build_version[] = BUILD_VERSION;
|
2019-10-05 00:09:49 -04:00
|
|
|
const char g_build_id[] = BUILD_ID;
|
|
|
|
const char g_title_bar_format_idle[] = TITLE_BAR_FORMAT_IDLE;
|
|
|
|
const char g_title_bar_format_running[] = TITLE_BAR_FORMAT_RUNNING;
|
2014-04-23 18:43:57 -07:00
|
|
|
|
2024-04-05 01:58:30 +02:00
|
|
|
/// Anonymizes SCM data
|
|
|
|
/// This is quite weak. But better than nothing.
|
|
|
|
class scm_encrypt {
|
|
|
|
std::string m_scm_rev, m_scm_branch, m_scm_desc;
|
2014-04-23 18:43:57 -07:00
|
|
|
|
2024-04-05 01:58:30 +02:00
|
|
|
public:
|
|
|
|
scm_encrypt() {
|
|
|
|
// Get a key that is easy to obtain when asking the person directly but (usually) hard to
|
|
|
|
// guess
|
|
|
|
std::string key;
|
|
|
|
#ifdef __linux__
|
|
|
|
if (!std::getline(std::ifstream("/proc/sys/kernel/hostname"), key))
|
|
|
|
key = "linux_error_key";
|
|
|
|
#else
|
|
|
|
// Not a good fallback, but better than nothing I guess?
|
|
|
|
key = g_build_date;
|
|
|
|
#endif
|
|
|
|
// Copy strings in place
|
|
|
|
m_scm_rev = GIT_REV;
|
|
|
|
m_scm_branch = GIT_BRANCH;
|
|
|
|
m_scm_desc = GIT_DESC;
|
|
|
|
// XOR each string with key
|
|
|
|
auto key_it = key.begin();
|
|
|
|
for (auto& string : {&m_scm_rev, &m_scm_branch, &m_scm_desc}) {
|
|
|
|
for (auto& c : *string) {
|
|
|
|
c ^= *key_it;
|
|
|
|
if (++key_it == key.end())
|
|
|
|
key_it = key.begin();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
// Make each string human-readable
|
|
|
|
for (auto& string : {&m_scm_rev, &m_scm_branch, &m_scm_desc}) {
|
|
|
|
const std::string original = *string;
|
|
|
|
string->clear();
|
|
|
|
for (const auto c : original) {
|
2024-04-05 01:58:30 +02:00
|
|
|
string->append(fmt::format("{:x}", unsigned(c)));
|
2024-04-05 01:58:30 +02:00
|
|
|
}
|
|
|
|
string->pop_back();
|
|
|
|
}
|
|
|
|
// Set pointers
|
|
|
|
g_scm_rev = m_scm_rev.c_str();
|
|
|
|
g_scm_branch = m_scm_branch.c_str();
|
|
|
|
g_scm_desc = m_scm_desc.c_str();
|
|
|
|
}
|
|
|
|
} scm_encrypt_instance;
|
|
|
|
} // namespace Common
|