| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- #include <iostream>
- #include <string>
- #include <map>
- #include <algorithm>
- #include <filesystem>
- #include <fstream>
- #include <ctime>
- std::string to_hex_string(const std::string& input) {
- std::string result;
- result.reserve(input.length() * 4);
- for (const auto& c : input) {
- char buf[5] = {0};
- sprintf(buf, "%02x", static_cast<unsigned char>(c));
- result += "\\x";
- result += buf;
- }
- return result;
- }
- std::map<std::string, std::string> generate_python_sources() {
- std::map<std::string, std::string> sources;
- for (const auto& file : std::filesystem::directory_iterator("python")) {
- if (file.path().extension() == ".py") {
- std::string key = file.path().stem().string();
- std::ifstream f(file.path());
- std::string content((std::istreambuf_iterator<char>(f)), std::istreambuf_iterator<char>());
- sources[key] = to_hex_string(content);
- }
- }
- return sources;
- }
- std::string generate_header(const std::map<std::string, std::string>& sources) {
- std::time_t timestamp = std::time(nullptr);
- std::tm* now = std::localtime(×tamp);
- char timestamp_str[20];
- std::strftime(timestamp_str, sizeof(timestamp_str), "%Y-%m-%d %H:%M:%S", now);
- std::string header;
- header += "#pragma once\n";
- header += "// generated on ";
- header += timestamp_str;
- header += "\n#include <map>\n#include <string>\n\nnamespace pkpy{\n";
- header += " inline static std::map<std::string, std::string> kPythonLibs = {\n";
- for (const auto& [key, value] : sources) {
- header += " {\"" + key + "\", \"" + value + "\"},\n";
- }
- header += " };\n";
- header += "} // namespace pkpy\n";
- return header;
- }
- int main() {
- auto sources = generate_python_sources();
- std::string header = generate_header(sources);
- std::ofstream header_file("src/_generated.h");
- header_file << header;
- return 0;
- }
|