mirror of
https://github.com/feschber/lan-mouse.git
synced 2026-07-11 09:44:56 +03:00
Compare commits
7 Commits
move-featu
...
14f4d511a0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
14f4d511a0 | ||
|
|
8a6e8add01 | ||
|
|
d87ddf5e0f | ||
|
|
fea8f0a955 | ||
|
|
4e639d7137 | ||
|
|
6928f78111 | ||
|
|
1b53e58ba9 |
@@ -28,7 +28,7 @@ Lan Mouse is an open-source Software KVM sharing mouse/keyboard input across loc
|
||||
|
||||
## Feature & cfg discipline
|
||||
|
||||
- Feature flags live in root `Cargo.toml`. Gate OS-specific modules with tight cfgs (e.g., `cfg(all(unix, feature = "layer_shell", not(target_os = "macos")))`).
|
||||
- Feature flags live in root `Cargo.toml`. Gate OS-specific modules with the configs exported in build.rs (e.g., `cfg(layer_shell)`).
|
||||
- Prefer module-level gating over per-function cfgs to avoid empty stubs.
|
||||
- New backends: add feature in `Cargo.toml`, create gated module, log backend selection.
|
||||
|
||||
|
||||
53
build.rs
53
build.rs
@@ -5,4 +5,57 @@ fn main() {
|
||||
.deny_const(Default::default())
|
||||
.build()
|
||||
.expect("shadow build");
|
||||
|
||||
let unix = cfg!(unix);
|
||||
let macos = cfg!(target_os = "macos");
|
||||
|
||||
let layer_shell_capture = cfg!(feature = "layer_shell_capture");
|
||||
let libei_capture = cfg!(feature = "libei_capture");
|
||||
let x11_capture = cfg!(feature = "x11_capture");
|
||||
|
||||
let libei_emulation = cfg!(feature = "libei_emulation");
|
||||
let x11_emulation = cfg!(feature = "x11_emulation");
|
||||
let wlroots_emulation = cfg!(feature = "wlroots_emulation");
|
||||
let rdp_emulation = cfg!(feature = "rdp_emulation");
|
||||
|
||||
let layer_shell_capture = unix && !macos && layer_shell_capture;
|
||||
let libei_capture = unix && !macos && libei_capture;
|
||||
let x11_capture = unix && !macos && x11_capture;
|
||||
|
||||
let libei_emulation = unix && !macos && libei_emulation;
|
||||
let rdp_emulation = unix && !macos && rdp_emulation;
|
||||
let wlroots_emulation = unix && !macos && wlroots_emulation;
|
||||
let x11_emulation = unix && !macos && x11_emulation;
|
||||
|
||||
println!("cargo::rustc-check-cfg=cfg(layer_shell_capture)");
|
||||
println!("cargo::rustc-check-cfg=cfg(libei_capture)");
|
||||
println!("cargo::rustc-check-cfg=cfg(x11_capture)");
|
||||
|
||||
println!("cargo::rustc-check-cfg=cfg(libei_emulation)");
|
||||
println!("cargo::rustc-check-cfg=cfg(rdp_emulation)");
|
||||
println!("cargo::rustc-check-cfg=cfg(wlroots_emulation)");
|
||||
println!("cargo::rustc-check-cfg=cfg(x11_emulation)");
|
||||
|
||||
if layer_shell_capture {
|
||||
println!("cargo::rustc-cfg=layer_shell_capture");
|
||||
}
|
||||
if libei_capture {
|
||||
println!("cargo::rustc-cfg=libei_capture");
|
||||
}
|
||||
if x11_capture {
|
||||
println!("cargo::rustc-cfg=x11_capture");
|
||||
}
|
||||
|
||||
if libei_emulation {
|
||||
println!("cargo::rustc-cfg=libei_emulation");
|
||||
}
|
||||
if rdp_emulation {
|
||||
println!("cargo::rustc-cfg=rdp_emulation");
|
||||
}
|
||||
if wlroots_emulation {
|
||||
println!("cargo::rustc-cfg=wlroots_emulation");
|
||||
}
|
||||
if x11_emulation {
|
||||
println!("cargo::rustc-cfg=x11_emulation");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -118,13 +118,13 @@ pub enum Command {
|
||||
|
||||
#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize, ValueEnum)]
|
||||
pub enum CaptureBackend {
|
||||
#[cfg(all(unix, feature = "libei_capture", not(target_os = "macos")))]
|
||||
#[cfg(libei_capture)]
|
||||
#[serde(rename = "input-capture-portal")]
|
||||
InputCapturePortal,
|
||||
#[cfg(all(unix, feature = "layer_shell_capture", not(target_os = "macos")))]
|
||||
#[cfg(layer_shell_capture)]
|
||||
#[serde(rename = "layer-shell")]
|
||||
LayerShell,
|
||||
#[cfg(all(unix, feature = "x11_capture", not(target_os = "macos")))]
|
||||
#[cfg(x11_capture)]
|
||||
#[serde(rename = "x11")]
|
||||
X11,
|
||||
#[cfg(windows)]
|
||||
@@ -140,11 +140,11 @@ pub enum CaptureBackend {
|
||||
impl Display for CaptureBackend {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
match self {
|
||||
#[cfg(all(unix, feature = "libei_capture", not(target_os = "macos")))]
|
||||
#[cfg(libei_capture)]
|
||||
CaptureBackend::InputCapturePortal => write!(f, "input-capture-portal"),
|
||||
#[cfg(all(unix, feature = "layer_shell_capture", not(target_os = "macos")))]
|
||||
#[cfg(layer_shell_capture)]
|
||||
CaptureBackend::LayerShell => write!(f, "layer-shell"),
|
||||
#[cfg(all(unix, feature = "x11_capture", not(target_os = "macos")))]
|
||||
#[cfg(x11_capture)]
|
||||
CaptureBackend::X11 => write!(f, "X11"),
|
||||
#[cfg(windows)]
|
||||
CaptureBackend::Windows => write!(f, "windows"),
|
||||
@@ -158,11 +158,11 @@ impl Display for CaptureBackend {
|
||||
impl From<CaptureBackend> for input_capture::Backend {
|
||||
fn from(backend: CaptureBackend) -> Self {
|
||||
match backend {
|
||||
#[cfg(all(unix, feature = "libei_capture", not(target_os = "macos")))]
|
||||
#[cfg(libei_capture)]
|
||||
CaptureBackend::InputCapturePortal => Self::InputCapturePortal,
|
||||
#[cfg(all(unix, feature = "layer_shell_capture", not(target_os = "macos")))]
|
||||
#[cfg(layer_shell_capture)]
|
||||
CaptureBackend::LayerShell => Self::LayerShell,
|
||||
#[cfg(all(unix, feature = "x11_capture", not(target_os = "macos")))]
|
||||
#[cfg(x11_capture)]
|
||||
CaptureBackend::X11 => Self::X11,
|
||||
#[cfg(windows)]
|
||||
CaptureBackend::Windows => Self::Windows,
|
||||
@@ -175,16 +175,16 @@ impl From<CaptureBackend> for input_capture::Backend {
|
||||
|
||||
#[derive(Clone, Copy, Debug, Deserialize, Eq, PartialEq, Serialize, ValueEnum)]
|
||||
pub enum EmulationBackend {
|
||||
#[cfg(all(unix, feature = "wlroots_emulation", not(target_os = "macos")))]
|
||||
#[cfg(wlroots_emulation)]
|
||||
#[serde(rename = "wlroots")]
|
||||
Wlroots,
|
||||
#[cfg(all(unix, feature = "libei_emulation", not(target_os = "macos")))]
|
||||
#[cfg(libei_emulation)]
|
||||
#[serde(rename = "libei")]
|
||||
Libei,
|
||||
#[cfg(all(unix, feature = "rdp_emulation", not(target_os = "macos")))]
|
||||
#[cfg(rdp_emulation)]
|
||||
#[serde(rename = "xdp")]
|
||||
Xdp,
|
||||
#[cfg(all(unix, feature = "x11_emulation", not(target_os = "macos")))]
|
||||
#[cfg(x11_emulation)]
|
||||
#[serde(rename = "x11")]
|
||||
X11,
|
||||
#[cfg(windows)]
|
||||
@@ -200,13 +200,13 @@ pub enum EmulationBackend {
|
||||
impl From<EmulationBackend> for input_emulation::Backend {
|
||||
fn from(backend: EmulationBackend) -> Self {
|
||||
match backend {
|
||||
#[cfg(all(unix, feature = "wlroots_emulation", not(target_os = "macos")))]
|
||||
#[cfg(wlroots_emulation)]
|
||||
EmulationBackend::Wlroots => Self::Wlroots,
|
||||
#[cfg(all(unix, feature = "libei_emulation", not(target_os = "macos")))]
|
||||
#[cfg(libei_emulation)]
|
||||
EmulationBackend::Libei => Self::Libei,
|
||||
#[cfg(all(unix, feature = "rdp_emulation", not(target_os = "macos")))]
|
||||
#[cfg(rdp_emulation)]
|
||||
EmulationBackend::Xdp => Self::Xdp,
|
||||
#[cfg(all(unix, feature = "x11_emulation", not(target_os = "macos")))]
|
||||
#[cfg(x11_emulation)]
|
||||
EmulationBackend::X11 => Self::X11,
|
||||
#[cfg(windows)]
|
||||
EmulationBackend::Windows => Self::Windows,
|
||||
@@ -220,13 +220,13 @@ impl From<EmulationBackend> for input_emulation::Backend {
|
||||
impl Display for EmulationBackend {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
match self {
|
||||
#[cfg(all(unix, feature = "wlroots_emulation", not(target_os = "macos")))]
|
||||
#[cfg(wlroots_emulation)]
|
||||
EmulationBackend::Wlroots => write!(f, "wlroots"),
|
||||
#[cfg(all(unix, feature = "libei_emulation", not(target_os = "macos")))]
|
||||
#[cfg(libei_emulation)]
|
||||
EmulationBackend::Libei => write!(f, "libei"),
|
||||
#[cfg(all(unix, feature = "rdp_emulation", not(target_os = "macos")))]
|
||||
#[cfg(rdp_emulation)]
|
||||
EmulationBackend::Xdp => write!(f, "xdg-desktop-portal"),
|
||||
#[cfg(all(unix, feature = "x11_emulation", not(target_os = "macos")))]
|
||||
#[cfg(x11_emulation)]
|
||||
EmulationBackend::X11 => write!(f, "X11"),
|
||||
#[cfg(windows)]
|
||||
EmulationBackend::Windows => write!(f, "windows"),
|
||||
|
||||
3
wix/bundle/.gitignore
vendored
Normal file
3
wix/bundle/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
/bin
|
||||
/obj
|
||||
icon.ico
|
||||
16
wix/bundle/Bundle.wixproj
Normal file
16
wix/bundle/Bundle.wixproj
Normal file
@@ -0,0 +1,16 @@
|
||||
<Project Sdk="WixToolset.Sdk/5.0.0">
|
||||
<PropertyGroup>
|
||||
<OutputType>Bundle</OutputType>
|
||||
<TargetExt>.exe</TargetExt>
|
||||
<Platforms>x64</Platforms>
|
||||
<InstallerPlatform>x64</InstallerPlatform>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="WixToolset.Heat">
|
||||
<Version>5.0.2</Version>
|
||||
</PackageReference>
|
||||
<PackageReference Include="WixToolset.Bal.wixext">
|
||||
<Version>5.0.2</Version>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
42
wix/bundle/Bundle.wxs
Normal file
42
wix/bundle/Bundle.wxs
Normal file
@@ -0,0 +1,42 @@
|
||||
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs"
|
||||
xmlns:bal="http://wixtoolset.org/schemas/v4/wxs/bal">
|
||||
|
||||
<Bundle
|
||||
Name="Lan Mouse"
|
||||
Version="0.10.0"
|
||||
UpgradeCode="{39A9744D-9D6E-4CD3-A84F-9E034786A7B1}"
|
||||
Compressed="no"
|
||||
SplashScreenSourceFile="icon.ico">
|
||||
|
||||
<BootstrapperApplication>
|
||||
<bal:WixStandardBootstrapperApplication
|
||||
LicenseUrl=""
|
||||
Theme="hyperlinkLicense" />
|
||||
</BootstrapperApplication>
|
||||
|
||||
<Chain>
|
||||
<!-- Visual C++ 2015-2022 Redistributable (x64) - 14.40.33810 -->
|
||||
<ExePackage
|
||||
Id="VC_REDIST_X64"
|
||||
DisplayName="Microsoft Visual C++ 2015-2022 Redistributable (x64) - 14.40.33810"
|
||||
PerMachine="yes"
|
||||
Permanent="yes"
|
||||
Protocol="burn"
|
||||
InstallCondition="VersionNT64 AND (ARCH_NAME = "AMD64")"
|
||||
DetectCondition="(VCRUNTIME_X64_VER >= VCRUNTIME_VER) AND VersionNT64 AND (ARCH_NAME = "AMD64")"
|
||||
InstallArguments="/install /quiet /norestart"
|
||||
RepairArguments="/repair /quiet /norestart"
|
||||
UninstallArguments="/uninstall /quiet /norestart">
|
||||
<ExePackagePayload
|
||||
Name="VC_redist.x64.exe"
|
||||
ProductName="Microsoft Visual C++ 2015-2022 Redistributable (x64) - 14.40.33810"
|
||||
Description="Microsoft Visual C++ 2015-2022 Redistributable (x64) - 14.40.33810"
|
||||
Hash="5935B69F5138AC3FBC33813C74DA853269BA079F910936AEFA95E230C6092B92F6225BFFB594E5DD35FF29BF260E4B35F91ADEDE90FDF5F062030D8666FD0104"
|
||||
Size="25397512"
|
||||
Version="14.40.33810.0"
|
||||
DownloadUrl="https://download.visualstudio.microsoft.com/download/pr/1754ea58-11a6-44ab-a262-696e194ce543/3642E3F95D50CC193E4B5A0B0FFBF7FE2C08801517758B4C8AEB7105A091208A/VC_redist.x64.exe" />
|
||||
</ExePackage>
|
||||
<MsiPackage SourceFile="..\lan-mouse\bin\Debug\en-US\LanMouse.msi" Compressed="yes"/>
|
||||
</Chain>
|
||||
</Bundle>
|
||||
</Wix>
|
||||
3
wix/lan-mouse/.gitignore
vendored
Normal file
3
wix/lan-mouse/.gitignore
vendored
Normal file
@@ -0,0 +1,3 @@
|
||||
/bin
|
||||
/obj
|
||||
icon.ico
|
||||
13
wix/lan-mouse/Folders.wxs
Normal file
13
wix/lan-mouse/Folders.wxs
Normal file
@@ -0,0 +1,13 @@
|
||||
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
|
||||
<Fragment>
|
||||
<StandardDirectory Id="ProgramFiles64Folder">
|
||||
<Directory Id="INSTALLFOLDER" Name="!(bind.Property.Manufacturer) !(bind.Property.ProductName)">
|
||||
<Directory Id="SHARE" Name="share"/>
|
||||
<Directory Id="LIB" Name="lib"/>
|
||||
</Directory>
|
||||
</StandardDirectory>
|
||||
<StandardDirectory Id="ProgramMenuFolder">
|
||||
<Directory Id="ApplicationProgramsFolder" Name="!(bind.Property.ProductName)"/>
|
||||
</StandardDirectory>
|
||||
</Fragment>
|
||||
</Wix>
|
||||
34
wix/lan-mouse/LanMouse.wixproj
Normal file
34
wix/lan-mouse/LanMouse.wixproj
Normal file
@@ -0,0 +1,34 @@
|
||||
<Project Sdk="WixToolset.Sdk/5.0.2">
|
||||
<PropertyGroup>
|
||||
<InstallerPlatform>x64</InstallerPlatform>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<PackageReference Include="WixToolset.Heat">
|
||||
<Version>5.0.2</Version>
|
||||
</PackageReference>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<HarvestDirectory Include="C:\gtk-build\gtk\x64\release\bin">
|
||||
<ComponentGroupName>GTKBIN</ComponentGroupName>
|
||||
<DirectoryRefId>INSTALLFOLDER</DirectoryRefId>
|
||||
<SuppressRegistry>true</SuppressRegistry>
|
||||
</HarvestDirectory>
|
||||
<BindPath Include="C:\gtk-build\gtk\x64\release\bin" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<HarvestDirectory Include="C:\gtk-build\gtk\x64\release\share\icons">
|
||||
<ComponentGroupName>GTKICONS</ComponentGroupName>
|
||||
<DirectoryRefId>SHARE</DirectoryRefId>
|
||||
<SuppressRegistry>true</SuppressRegistry>
|
||||
</HarvestDirectory>
|
||||
<BindPath Include="C:\gtk-build\gtk\x64\release\share\icons" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<HarvestDirectory Include="C:\gtk-build\gtk\x64\release\lib\gdk-pixbuf-2.0">
|
||||
<ComponentGroupName>GTKLIBS</ComponentGroupName>
|
||||
<DirectoryRefId>LIB</DirectoryRefId>
|
||||
<SuppressRegistry>true</SuppressRegistry>
|
||||
</HarvestDirectory>
|
||||
<BindPath Include="C:\gtk-build\gtk\x64\release\lib\gdk-pixbuf-2.0" />
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
32
wix/lan-mouse/LanMouseComponents.wxs
Normal file
32
wix/lan-mouse/LanMouseComponents.wxs
Normal file
@@ -0,0 +1,32 @@
|
||||
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
|
||||
<Fragment>
|
||||
<ComponentGroup Id="LanMouseComponents" Directory="INSTALLFOLDER" Subdirectory="bin">
|
||||
<Component Guid="{ECB52D3E-28AD-4BEC-B9DF-E01CCAB356BE}">
|
||||
<!-- the main binary -->
|
||||
<File Source="..\..\target\release\lan-mouse.exe"/>
|
||||
|
||||
<!-- visual c runtime dll -->
|
||||
<!--<File Source="C:\windows\system32\VCRUNTIME140.dll"/>-->
|
||||
<!--<File Source="C:\windows\system32\VCRUNTIME140_1.dll"/>-->
|
||||
</Component>
|
||||
<!-- start menu entry-->
|
||||
<Component Id="ApplicationShortcut" Directory="ApplicationProgramsFolder">
|
||||
<Shortcut Id="ApplicationStartMenuShortcut"
|
||||
Name="!(bind.Property.ProductName)"
|
||||
Description ="Mouse and Keyboard sharing Software"
|
||||
Target="[INSTALLFOLDER]bin\lan-mouse.exe"
|
||||
WorkingDirectory="INSTALLFOLDER">
|
||||
<Icon Id="LanMouse" SourceFile=".\icon.ico"/>
|
||||
</Shortcut>
|
||||
<RemoveFolder Id="ApplicationProgramsFolder" On="uninstall"/>
|
||||
<RegistryValue
|
||||
Root="HKCU"
|
||||
Key="Software\Feschber\LanMouse"
|
||||
Name="installed"
|
||||
Type="integer"
|
||||
Value="1"
|
||||
KeyPath="yes"/>
|
||||
</Component>
|
||||
</ComponentGroup>
|
||||
</Fragment>
|
||||
</Wix>
|
||||
8
wix/lan-mouse/Package.en-us.wxl
Normal file
8
wix/lan-mouse/Package.en-us.wxl
Normal file
@@ -0,0 +1,8 @@
|
||||
<!--
|
||||
This file contains the declaration of all the localizable strings.
|
||||
-->
|
||||
<WixLocalization xmlns="http://wixtoolset.org/schemas/v4/wxl" Culture="en-US">
|
||||
|
||||
<String Id="DowngradeError" Value="A newer version of [ProductName] is already installed." />
|
||||
|
||||
</WixLocalization>
|
||||
16
wix/lan-mouse/Package.wxs
Normal file
16
wix/lan-mouse/Package.wxs
Normal file
@@ -0,0 +1,16 @@
|
||||
<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
|
||||
<Package Name="Lan Mouse"
|
||||
Manufacturer="Ferdinand Schober"
|
||||
Version="0.10.0.0"
|
||||
UpgradeCode="{a330cd60-4c35-4a54-8bb6-75b3049b46c6}">
|
||||
<MajorUpgrade DowngradeErrorMessage="!(loc.DowngradeError)" />
|
||||
|
||||
<MediaTemplate EmbedCab="yes"/>
|
||||
<Feature Id="Main">
|
||||
<ComponentGroupRef Id="GTKBIN"/>
|
||||
<ComponentGroupRef Id="GTKICONS"/>
|
||||
<ComponentGroupRef Id="GTKLIBS"/>
|
||||
<ComponentGroupRef Id="LanMouseComponents"/>
|
||||
</Feature>
|
||||
</Package>
|
||||
</Wix>
|
||||
2
wix/lan-mouse/build.ps1
Normal file
2
wix/lan-mouse/build.ps1
Normal file
@@ -0,0 +1,2 @@
|
||||
magick -background none -density 384 ..\lan-mouse-gtk\resources\de.feschber.LanMouse.svg -trim -define icon:auto-resize icon.ico
|
||||
dotnet build
|
||||
Reference in New Issue
Block a user