diff --git a/audio/maolan/Makefile b/audio/maolan/Makefile index 13e8f054398f..613413090767 100644 --- a/audio/maolan/Makefile +++ b/audio/maolan/Makefile @@ -1,40 +1,40 @@ PORTNAME= maolan DISTVERSION= 0.1.0 CATEGORIES= audio MAINTAINER= meka@tilda.center COMMENT= Rust digital audio workstation WWW= https://maolan.github.io LICENSE= BSD2CLAUSE LICENSE_FILE= ${WRKSRC}/LICENSE -ONLY_FOR_ARCHS= amd64 +ONLY_FOR_ARCHS= amd64 powerpc64 powerpc64le LIB_DEPENDS= libavutil.so:multimedia/ffmpeg \ libjack.so:audio/jack \ liblilv-0.so:audio/lilv \ libonig.so:devel/oniguruma \ librubberband.so:audio/rubberband \ libsentencepiece.so:textproc/sentencepiece \ libsuil-0.so:audio/suil USES= cargo gnome llvm:build pkgconfig xorg USE_GITHUB= yes GH_ACCOUNT= maolan GH_TAGNAME= ${DISTVERSION} USE_GNOME= glib20 gtk20 USE_XORG= x11 MAKE_ENV= LIBCLANG_PATH="${LOCALBASE}/llvm${LLVM_VERSION}/lib" post-install: ${MKDIR} ${STAGEDIR}${PREFIX}/share/applications ${INSTALL_DATA} ${WRKSRC}/desktop/maolan-bsd.desktop \ ${STAGEDIR}${PREFIX}/share/applications/maolan.desktop ${MKDIR} ${STAGEDIR}${PREFIX}/share/icons/hicolor/scalable/apps ${INSTALL_DATA} ${WRKSRC}/images/maolan.svg \ ${STAGEDIR}${PREFIX}/share/icons/hicolor/scalable/apps .include diff --git a/audio/maolan/files/patch-cargo-crates_lilv-0.2.4_src_ui.rs b/audio/maolan/files/patch-cargo-crates_lilv-0.2.4_src_ui.rs new file mode 100644 index 000000000000..e9d7b85a795f --- /dev/null +++ b/audio/maolan/files/patch-cargo-crates_lilv-0.2.4_src_ui.rs @@ -0,0 +1,13 @@ +--- cargo-crates/lilv-0.2.4/src/ui.rs.orig 2026-05-28 08:42:48 UTC ++++ cargo-crates/lilv-0.2.4/src/ui.rs +@@ -140,8 +140,8 @@ unsafe extern "C" fn supported_func( + } + + unsafe extern "C" fn supported_func( +- container_type_uri: *const i8, +- ui_type_uri: *const i8, ++ container_type_uri: *const std::os::raw::c_char, ++ ui_type_uri: *const std::os::raw::c_char, + ) -> u32 { + S::supported( + CStr::from_ptr(container_type_uri).to_str().unwrap(), diff --git a/audio/maolan/files/patch-cargo-crates_maolan-engine-0.0.20_src_plugins_vst3_host.rs b/audio/maolan/files/patch-cargo-crates_maolan-engine-0.0.20_src_plugins_vst3_host.rs new file mode 100644 index 000000000000..55915c57b78d --- /dev/null +++ b/audio/maolan/files/patch-cargo-crates_maolan-engine-0.0.20_src_plugins_vst3_host.rs @@ -0,0 +1,20 @@ +--- cargo-crates/maolan-engine-0.0.20/src/plugins/vst3/host.rs.orig 2026-05-28 09:11:22 UTC ++++ cargo-crates/maolan-engine-0.0.20/src/plugins/vst3/host.rs +@@ -179,7 +179,7 @@ fn class_info_to_plugin_info( + } + } + +-fn tuid_to_string(tuid: &[i8; 16]) -> String { ++fn tuid_to_string(tuid: &[std::os::raw::c_char; 16]) -> String { + // Convert TUID to hexadecimal string + tuid.iter() + .map(|&b| format!("{:02X}", b as u8)) +@@ -204,7 +204,7 @@ mod tests { + let class_info = ClassInfo { + name: "Synth".to_string(), + category: "Instrument".to_string(), +- cid: [0x12_i8; 16], ++ cid: [0x12_i8 as std::os::raw::c_char; 16], + }; + + let info = class_info_to_plugin_info( diff --git a/audio/maolan/files/patch-cargo-crates_maolan-engine-0.0.20_src_plugins_vst3_interfaces.rs b/audio/maolan/files/patch-cargo-crates_maolan-engine-0.0.20_src_plugins_vst3_interfaces.rs new file mode 100644 index 000000000000..0c34db17e4ca --- /dev/null +++ b/audio/maolan/files/patch-cargo-crates_maolan-engine-0.0.20_src_plugins_vst3_interfaces.rs @@ -0,0 +1,91 @@ +--- cargo-crates/maolan-engine-0.0.20/src/plugins/vst3/interfaces.rs.orig 2026-05-28 09:11:22 UTC ++++ cargo-crates/maolan-engine-0.0.20/src/plugins/vst3/interfaces.rs +@@ -193,7 +193,7 @@ impl PluginFactory { + } + + /// Create an instance of a plugin using the trait +- pub fn create_instance(&self, class_id: &[i8; 16]) -> Result { ++ pub fn create_instance(&self, class_id: &[std::os::raw::c_char; 16]) -> Result { + use vst3::Steinberg::IPluginFactoryTrait; + + let mut instance_ptr: *mut c_void = std::ptr::null_mut(); +@@ -201,7 +201,7 @@ impl PluginFactory { + let result = unsafe { + self.factory.createInstance( + class_id.as_ptr(), +- IComponent::IID.as_ptr() as *const i8, ++ IComponent::IID.as_ptr() as *const std::os::raw::c_char, + &mut instance_ptr, + ) + }; +@@ -246,7 +246,7 @@ impl PluginFactory { + + pub fn create_edit_controller( + &self, +- class_id: &[i8; 16], ++ class_id: &[std::os::raw::c_char; 16], + ) -> Result, String> { + use vst3::Steinberg::IPluginFactoryTrait; + +@@ -255,7 +255,7 @@ impl PluginFactory { + let result = unsafe { + self.factory.createInstance( + class_id.as_ptr(), +- IEditController::IID.as_ptr() as *const i8, ++ IEditController::IID.as_ptr() as *const std::os::raw::c_char, + &mut instance_ptr, + ) + }; +@@ -293,7 +293,7 @@ pub struct ClassInfo { + pub struct ClassInfo { + pub name: String, + pub category: String, +- pub cid: [i8; 16], ++ pub cid: [std::os::raw::c_char; 16], + } + + /// Information about the plugin factory +@@ -522,7 +522,7 @@ impl PluginInstance { + let vtbl = (*component_raw).vtbl; + let query_interface = (*vtbl).base.base.queryInterface; + // Cast IID from [u8; 16] to [i8; 16] +- let iid = std::mem::transmute::<&[u8; 16], &[i8; 16]>(&IAudioProcessor::IID); ++ let iid = std::mem::transmute::<&[u8; 16], &[std::os::raw::c_char; 16]>(&IAudioProcessor::IID); + query_interface(component_raw as *mut _, iid, &mut processor_ptr) + }; + +@@ -537,7 +537,7 @@ impl PluginInstance { + let component_raw = self.component.as_ptr(); + let vtbl = (*component_raw).vtbl; + let query_interface = (*vtbl).base.base.queryInterface; +- let iid = std::mem::transmute::<&[u8; 16], &[i8; 16]>(&IEditController::IID); ++ let iid = std::mem::transmute::<&[u8; 16], &[std::os::raw::c_char; 16]>(&IEditController::IID); + query_interface(component_raw as *mut _, iid, &mut controller_ptr) + }; + if query_result == kResultOk && !controller_ptr.is_null() { +@@ -1621,7 +1621,7 @@ fn get_module_path(bundle_path: &Path) -> Result String { ++fn extract_cstring(bytes: &[std::os::raw::c_char]) -> String { + let len = bytes.iter().position(|&c| c == 0).unwrap_or(bytes.len()); + let u8_bytes: Vec = bytes[..len].iter().map(|&b| b as u8).collect(); + String::from_utf8_lossy(&u8_bytes).to_string() +@@ -1663,14 +1663,14 @@ mod tests { + + #[test] + fn extract_cstring_stops_at_nul_and_uses_lossy_utf8() { +- let bytes = [b'A' as i8, b'B' as i8, -1, 0, b'Z' as i8]; ++ let bytes = [b'A' as std::os::raw::c_char, b'B' as std::os::raw::c_char, -1i8 as std::os::raw::c_char, 0, b'Z' as std::os::raw::c_char]; + + assert_eq!(extract_cstring(&bytes), "AB\u{FFFD}"); + } + + #[test] + fn extract_cstring_uses_full_slice_when_not_nul_terminated() { +- let bytes = [b'X' as i8, b'Y' as i8, b'Z' as i8]; ++ let bytes = [b'X' as std::os::raw::c_char, b'Y' as std::os::raw::c_char, b'Z' as std::os::raw::c_char]; + + assert_eq!(extract_cstring(&bytes), "XYZ"); + }