1+ fn main ( ) {
2+ #[ cfg( target_os = "windows" ) ]
3+ win:: embed_resources ( ) ;
4+ }
5+
6+ #[ cfg( target_os = "windows" ) ]
7+ mod win {
8+ use std:: { env, fs} ;
9+
10+ pub ( super ) fn embed_resources ( ) {
11+ let out_dir = env:: var ( "OUT_DIR" ) . expect ( "failed to get OUT_DIR" ) ;
12+ let version_rc_file = format ! ( "{out_dir}/version.rc" ) ;
13+ let version_rc_data = generate_version_rc ( ) ;
14+ fs:: write ( & version_rc_file, version_rc_data) . expect ( "failed to write version.rc" ) ;
15+
16+ println ! ( "cargo:rerun-if-changed=resources.rc" ) ;
17+ println ! ( "cargo:rerun-if-changed=../package/WindowsManaged/Resources/DevolutionsGateway.ico" ) ;
18+
19+ embed_resource:: compile ( & version_rc_file, embed_resource:: NONE )
20+ . manifest_required ( )
21+ . expect ( "failed to compile version.rc" ) ;
22+ embed_resource:: compile ( "resources.rc" , embed_resource:: NONE )
23+ . manifest_required ( )
24+ . expect ( "failed to embed resources.rc" ) ;
25+ }
26+
27+ fn generate_version_rc ( ) -> String {
28+ let output_name = "jetsocat" ;
29+ let filename = format ! ( "{output_name}.exe" ) ;
30+ let company_name = "Devolutions Inc." ;
31+ let legal_copyright = format ! ( "Copyright 2020-2026 {company_name}" ) ;
32+
33+ let mut version_number = env:: var ( "CARGO_PKG_VERSION" ) . expect ( "failed to get CARGO_PKG_VERSION" ) ;
34+ version_number. push_str ( ".0" ) ;
35+ let version_commas = version_number. replace ( '.' , "," ) ;
36+ let file_description = "jetsocat" ;
37+ let file_version = version_number. clone ( ) ;
38+ let internal_name = filename. clone ( ) ;
39+ let original_filename = filename;
40+ let product_name = "jetsocat" ;
41+ let product_version = version_number;
42+ let vs_file_version = version_commas. clone ( ) ;
43+ let vs_product_version = version_commas;
44+
45+ format ! (
46+ r#"#include <winresrc.h>
47+ VS_VERSION_INFO VERSIONINFO
48+ FILEVERSION {vs_file_version}
49+ PRODUCTVERSION {vs_product_version}
50+ FILEFLAGSMASK 0x3fL
51+ #ifdef _DEBUG
52+ FILEFLAGS 0x1L
53+ #else
54+ FILEFLAGS 0x0L
55+ #endif
56+ FILEOS 0x40004L
57+ FILETYPE 0x1L
58+ FILESUBTYPE 0x0L
59+ BEGIN
60+ BLOCK "StringFileInfo"
61+ BEGIN
62+ BLOCK "040904b0"
63+ BEGIN
64+ VALUE "CompanyName", "{company_name}"
65+ VALUE "FileDescription", "{file_description}"
66+ VALUE "FileVersion", "{file_version}"
67+ VALUE "InternalName", "{internal_name}"
68+ VALUE "LegalCopyright", "{legal_copyright}"
69+ VALUE "OriginalFilename", "{original_filename}"
70+ VALUE "ProductName", "{product_name}"
71+ VALUE "ProductVersion", "{product_version}"
72+ END
73+ END
74+ BLOCK "VarFileInfo"
75+ BEGIN
76+ VALUE "Translation", 0x409, 1200
77+ END
78+ END"# ,
79+ vs_file_version = vs_file_version,
80+ vs_product_version = vs_product_version,
81+ company_name = company_name,
82+ file_description = file_description,
83+ file_version = file_version,
84+ internal_name = internal_name,
85+ legal_copyright = legal_copyright,
86+ original_filename = original_filename,
87+ product_name = product_name,
88+ product_version = product_version
89+ )
90+ }
91+ }
0 commit comments