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
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 4 additions & 0 deletions jetsocat/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ version.workspace = true
authors = ["Devolutions Inc. <infos@devolutions.net>"]
edition = "2024"
description = "(Web)Socket toolkit for jet protocol related operations"
build = "build.rs"
publish = false

[lints]
Expand Down Expand Up @@ -81,3 +82,6 @@ features = [
"Win32_Globalization",
]

[target.'cfg(windows)'.build-dependencies]
embed-resource = "3.0"

91 changes: 91 additions & 0 deletions jetsocat/build.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
fn main() {
#[cfg(target_os = "windows")]
win::embed_resources();
}

#[cfg(target_os = "windows")]
mod win {
use std::{env, fs};

pub(super) fn embed_resources() {
let out_dir = env::var("OUT_DIR").expect("failed to get OUT_DIR");
let version_rc_file = format!("{out_dir}/version.rc");
let version_rc_data = generate_version_rc();
fs::write(&version_rc_file, version_rc_data).expect("failed to write version.rc");

println!("cargo:rerun-if-changed=resources.rc");
println!("cargo:rerun-if-changed=../package/WindowsManaged/Resources/DevolutionsGateway.ico");

embed_resource::compile(&version_rc_file, embed_resource::NONE)
.manifest_required()
.expect("failed to compile version.rc");
embed_resource::compile("resources.rc", embed_resource::NONE)
.manifest_required()
.expect("failed to embed resources.rc");
}

fn generate_version_rc() -> String {
let output_name = "jetsocat";
let filename = format!("{output_name}.exe");
let company_name = "Devolutions Inc.";
let legal_copyright = format!("Copyright 2020-2026 {company_name}");

let mut version_number = env::var("CARGO_PKG_VERSION").expect("failed to get CARGO_PKG_VERSION");
version_number.push_str(".0");
let version_commas = version_number.replace('.', ",");
let file_description = "jetsocat";
let file_version = version_number.clone();
let internal_name = filename.clone();
let original_filename = filename;
let product_name = "jetsocat";
let product_version = version_number;
let vs_file_version = version_commas.clone();
let vs_product_version = version_commas;

format!(
r#"#include <winresrc.h>
VS_VERSION_INFO VERSIONINFO
FILEVERSION {vs_file_version}
PRODUCTVERSION {vs_product_version}
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x40004L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904b0"
BEGIN
VALUE "CompanyName", "{company_name}"
VALUE "FileDescription", "{file_description}"
VALUE "FileVersion", "{file_version}"
VALUE "InternalName", "{internal_name}"
VALUE "LegalCopyright", "{legal_copyright}"
VALUE "OriginalFilename", "{original_filename}"
VALUE "ProductName", "{product_name}"
VALUE "ProductVersion", "{product_version}"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END"#,
vs_file_version = vs_file_version,
vs_product_version = vs_product_version,
company_name = company_name,
file_description = file_description,
file_version = file_version,
internal_name = internal_name,
legal_copyright = legal_copyright,
original_filename = original_filename,
product_name = product_name,
product_version = product_version
)
}
}
1 change: 1 addition & 0 deletions jetsocat/resources.rc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
101 ICON "../package/WindowsManaged/Resources/DevolutionsGateway.ico"
Loading