Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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