Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 2 Jul 2024 14:25:22 GMT
From:      Vladimir Druzenko <vvd@FreeBSD.org>
To:        ports-committers@FreeBSD.org, dev-commits-ports-all@FreeBSD.org, dev-commits-ports-main@FreeBSD.org
Subject:   git: 1b1983556863 - main - multimedia/libopenshot: update 0.3.2 =?utf-8?Q?=E2=86=92?= 0.3.3
Message-ID:  <202407021425.462EPM8t023534@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by vvd:

URL: https://cgit.FreeBSD.org/ports/commit/?id=1b19835568632e748b08ff006d76e1a90963c1b7

commit 1b19835568632e748b08ff006d76e1a90963c1b7
Author:     Tatsuki Makino <tatsuki_makino@hotmail.com>
AuthorDate: 2024-07-02 14:16:24 +0000
Commit:     Vladimir Druzenko <vvd@FreeBSD.org>
CommitDate: 2024-07-02 14:16:24 +0000

    multimedia/libopenshot: update 0.3.2 → 0.3.3
    
    Changelog:
    https://github.com/OpenShot/libopenshot/releases/tag/v0.3.3
    
    PR:     278857
---
 multimedia/libopenshot/Makefile                    |   7 +-
 multimedia/libopenshot/distinfo                    |   6 +-
 multimedia/libopenshot/files/patch-CMakeLists.txt  |  10 +-
 .../libopenshot/files/patch-src_FFmpegWriter.cpp   |   4 +-
 .../libopenshot/files/patch-src_KeyFrame.cpp       | 309 ---------------------
 multimedia/libopenshot/files/patch-src_KeyFrame.h  |  31 ---
 .../libopenshot/files/patch-src_ZmqLogger.cpp      |  20 ++
 multimedia/libopenshot/pkg-plist                   |   4 +-
 8 files changed, 36 insertions(+), 355 deletions(-)

diff --git a/multimedia/libopenshot/Makefile b/multimedia/libopenshot/Makefile
index cfbecd35b374..88b226c4d2ec 100644
--- a/multimedia/libopenshot/Makefile
+++ b/multimedia/libopenshot/Makefile
@@ -1,7 +1,6 @@
 PORTNAME=	libopenshot
 DISTVERSIONPREFIX=	v
-DISTVERSION=	0.3.2
-PORTREVISION=	6
+DISTVERSION=	0.3.3
 CATEGORIES=	multimedia
 PKGNAMEPREFIX=	${PYTHON_PKGNAMEPREFIX}
 
@@ -34,9 +33,10 @@ CMAKE_ON=	USE_SYSTEM_JSONCPP DISABLE_BUNDLED_JSONCPP\
 		USE_HW_ACCEL ENABLE_PYTHON\
 		CMAKE_DISABLE_FIND_PACKAGE_Catch2
 CMAKE_OFF=	ENABLE_PARALLEL_CTEST VERBOSE_TESTS ENABLE_COVERAGE\
-		APPIMAGE_BUILD BUILD_TESTING ENABLE_TESTS
+		APPIMAGE_BUILD BUILD_TESTING ENABLE_JAVA ENABLE_TESTS
 DEBUG_FLAGS?=	-g
 DEBUG_FLAGS+=	-D_DEBUG -DJUCE_FORCE_DEBUG=1
+PLIST_SUB=	VERSION=${DISTVERSION}
 
 OPTIONS_DEFINE=		DOCS DOXYGEN IMAGEMAGICK OPENCV RESVG RUBY
 OPTIONS_DEFAULT=	IMAGEMAGICK OPENCV
@@ -61,6 +61,7 @@ RESVG_LIB_DEPENDS=	libresvg.so:graphics/resvg-capi
 RESVG_USE_OFF=		QT=svg
 RESVG_CMAKE_BOOL_OFF=	CMAKE_DISABLE_FIND_PACKAGE_Resvg
 RESVG_CMAKE_ON=		-DRESVGDIR:STRING=${LOCALBASE:Q}
+RUBY_LIB_DEPENDS=	libruby${RUBY_SUFFIX}.so:lang/ruby${RUBY_SUFFIX}
 RUBY_USES=		ruby:build
 RUBY_CMAKE_BOOL=	ENABLE_RUBY
 RUBY_CMAKE_BOOL_OFF=	CMAKE_DISABLE_FIND_PACKAGE_Ruby
diff --git a/multimedia/libopenshot/distinfo b/multimedia/libopenshot/distinfo
index ab17d896ff93..1ffb5e2a1418 100644
--- a/multimedia/libopenshot/distinfo
+++ b/multimedia/libopenshot/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1682218800
-SHA256 (OpenShot-libopenshot-v0.3.2_GH0.tar.gz) = 58765cfc8aec199814346e97ce31a5618a261260b380670a6fb2bf6f68733638
-SIZE (OpenShot-libopenshot-v0.3.2_GH0.tar.gz) = 26132237
+TIMESTAMP = 1719370800
+SHA256 (OpenShot-libopenshot-v0.3.3_GH0.tar.gz) = 591b74651ddf59f83d69a592d84bbabbe7290293092a87be9c2993d5ce9a1638
+SIZE (OpenShot-libopenshot-v0.3.3_GH0.tar.gz) = 26129697
diff --git a/multimedia/libopenshot/files/patch-CMakeLists.txt b/multimedia/libopenshot/files/patch-CMakeLists.txt
index 89ecc6dc4437..d153e7c04337 100644
--- a/multimedia/libopenshot/files/patch-CMakeLists.txt
+++ b/multimedia/libopenshot/files/patch-CMakeLists.txt
@@ -1,6 +1,6 @@
---- CMakeLists.txt.orig	2023-04-19 22:01:02 UTC
+--- CMakeLists.txt.orig	2024-03-26 18:49:53 UTC
 +++ CMakeLists.txt
-@@ -102,7 +102,7 @@ if ((${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") AND
+@@ -97,7 +97,7 @@ if ((${CMAKE_CXX_COMPILER_ID} STREQUAL "GNU") AND
  endif()
  
  #### Set C++ standard level
@@ -9,7 +9,7 @@
  set(CMAKE_CXX_STANDARD_REQUIRED ON)
  set(CMAKE_CXX_EXTENSIONS OFF)
  
-@@ -135,7 +135,7 @@ endif()
+@@ -130,7 +130,7 @@ endif()
  ### Process subdirectories
  ###
  add_subdirectory(src)
@@ -18,7 +18,7 @@
  add_subdirectory(bindings)
  
  ###
-@@ -193,6 +193,8 @@ if (ENABLE_LIB_DOCS AND CMAKE_VERSION VERSION_GREATER 
+@@ -188,6 +188,8 @@ if (ENABLE_LIB_DOCS AND CMAKE_VERSION VERSION_GREATER 
      set(DOXYGEN_INTERACTIVE_SVG YES)
      set(DOXYGEN_DOT_TRANSPARENT YES)
  
@@ -27,7 +27,7 @@
      doxygen_add_docs(${PROJECT_NAME}-doc
        ${PROJECT_SOURCE_DIR}/src
        ${PROJECT_SOURCE_DIR}/doc
-@@ -213,7 +215,7 @@ if (TARGET ${PROJECT_NAME}-doc)
+@@ -208,7 +210,7 @@ if (TARGET ${PROJECT_NAME}-doc)
      OPTIONAL )    # No error if the docs aren't found
  
    if(NOT TARGET doc)
diff --git a/multimedia/libopenshot/files/patch-src_FFmpegWriter.cpp b/multimedia/libopenshot/files/patch-src_FFmpegWriter.cpp
index 369816073bd3..825de6eb04b3 100644
--- a/multimedia/libopenshot/files/patch-src_FFmpegWriter.cpp
+++ b/multimedia/libopenshot/files/patch-src_FFmpegWriter.cpp
@@ -1,4 +1,4 @@
---- src/FFmpegWriter.cpp.orig	2023-03-27 18:48:43 UTC
+--- src/FFmpegWriter.cpp.orig	2024-06-20 01:25:10 UTC
 +++ src/FFmpegWriter.cpp
 @@ -166,7 +166,7 @@ void FFmpegWriter::SetVideoOptions(bool has_video, std
  		const AVCodec *new_codec;
@@ -35,7 +35,7 @@
  				}
  #endif  // FFmpeg 4.0+
  		} else {
-@@ -1470,21 +1473,25 @@ void FFmpegWriter::open_video(AVFormatContext *oc, AVS
+@@ -1434,21 +1437,25 @@ void FFmpegWriter::open_video(AVFormatContext *oc, AVS
  		adapter_num = openshot::Settings::Instance()->HW_EN_DEVICE_SET;
  		std::clog << "Encoding Device Nr: " << adapter_num << "\n";
  		if (adapter_num < 3 && adapter_num >=0) {
diff --git a/multimedia/libopenshot/files/patch-src_KeyFrame.cpp b/multimedia/libopenshot/files/patch-src_KeyFrame.cpp
deleted file mode 100644
index 8a8b80337b50..000000000000
--- a/multimedia/libopenshot/files/patch-src_KeyFrame.cpp
+++ /dev/null
@@ -1,309 +0,0 @@
---- src/KeyFrame.cpp.orig	2023-04-19 22:01:02 UTC
-+++ src/KeyFrame.cpp
-@@ -15,12 +15,12 @@
- 
- #include <algorithm>   // For std::lower_bound, std::move_backward
- #include <functional>  // For std::less, std::less_equal, etc…
--#include <utility>	 // For std::swap
--#include <numeric>	 // For std::accumulate
--#include <cassert>	 // For assert()
--#include <cmath>	   // For fabs, round
--#include <iostream>	// For std::cout
--#include <iomanip>	 // For std::setprecision
-+#include <utility>     // For std::swap
-+#include <numeric>     // For std::accumulate
-+#include <cassert>     // For assert()
-+#include <cmath>       // For fabs, round
-+#include <iostream>    // For std::cout
-+#include <iomanip>     // For std::setprecision
- 
- using namespace std;
- using namespace openshot;
-@@ -122,8 +122,8 @@ Keyframe::Keyframe(const std::vector<openshot::Point>&
- 
- // Destructor
- Keyframe::~Keyframe() {
--	Points.clear();
--	Points.shrink_to_fit();
-+    Points.clear();
-+    Points.shrink_to_fit();
- }
- 
- // Add a new point on the key-frame.  Each point has a primary coordinate,
-@@ -291,41 +291,27 @@ int64_t Keyframe::GetLong(int64_t index) const {
- // Get the direction of the curve at a specific index (increasing or decreasing)
- bool Keyframe::IsIncreasing(int index) const
- {
--	if (index <= 1) {
--		// Determine direction of frame 1 (and assume previous frames have same direction)
--		index = 1;
--	} else  if (index >= GetLength()) {
--		// Determine direction of last valid frame # (and assume next frames have same direction)
--		index = GetLength() - 1;
-+	if (index < 1 || (index + 1) >= GetLength()) {
-+		return true;
- 	}
--
--	// Get current index value
--	const double current_value = GetValue(index);
--
--	// Iterate from current index to next significant value change
--	int attempts = 1;
--	while (attempts < 600 && index + attempts <= GetLength()) {
--		// Get next value
--		const double next_value = GetValue(index + attempts);
--
--		// Is value significantly different
--		const double diff = next_value - current_value;
--		if (fabs(diff) > 0.0001) {
--			if (diff < 0.0) {
--				// Decreasing value found next
--				return false;
--			} else {
--				// Increasing value found next
--				return true;
--			}
--		}
--
--		// increment attempt
--		attempts++;
-+	std::vector<Point>::const_iterator candidate =
-+		std::lower_bound(begin(Points), end(Points), static_cast<double>(index), IsPointBeforeX);
-+	if (candidate == end(Points)) {
-+		return false; // After the last point, thus constant.
- 	}
--
--	// If no next value found, assume increasing values
--	return true;
-+	if ((candidate->co.X == index) || (candidate == begin(Points))) {
-+		++candidate;
-+	}
-+	int64_t const value = GetLong(index);
-+	do {
-+		if (value < round(candidate->co.Y)) {
-+			return true;
-+		} else if (value > round(candidate->co.Y)) {
-+			return false;
-+		}
-+		++candidate;
-+	} while (candidate != end(Points));
-+	return false;
- }
- 
- // Generate JSON string of this object
-@@ -388,12 +374,116 @@ void Keyframe::SetJsonValue(const Json::Value root) {
- 		}
- }
- 
-+// Get the fraction that represents how many times this value is repeated in the curve
-+// This is depreciated and will be removed soon.
-+Fraction Keyframe::GetRepeatFraction(int64_t index) const {
-+	// Frame numbers (index) outside of the "defined" range of this
-+	// keyframe result in a 1/1 default value.
-+	if (index < 1 || (index + 1) >= GetLength()) {
-+		return Fraction(1,1);
-+	}
-+	assert(Points.size() > 1); // Due to ! ((index + 1) >= GetLength) there are at least two points!
-+
-+	// First, get the value at the given frame and the closest point
-+	// to the right.
-+	int64_t const current_value = GetLong(index);
-+	std::vector<Point>::const_iterator const candidate =
-+		std::lower_bound(begin(Points), end(Points), static_cast<double>(index), IsPointBeforeX);
-+	assert(candidate != end(Points)); // Due to the (index + 1) >= GetLength check above!
-+
-+	// Calculate how many of the next values are going to be the same:
-+	int64_t next_repeats = 0;
-+	std::vector<Point>::const_iterator i = candidate;
-+	// If the index (frame number) is the X coordinate of the closest
-+	// point, then look at the segment to the right; the "current"
-+	// segement is not interesting because we're already at the last
-+	// value of it.
-+	if (i->co.X == index) {
-+		++i;
-+	}
-+	// Skip over "constant" (when rounded) segments.
-+	bool all_constant = true;
-+	for (; i != end(Points); ++i) {
-+		if (current_value != round(i->co.Y)) {
-+			all_constant = false;
-+			break;
-+		}
-+	}
-+	if (! all_constant) {
-+		// Found a point which defines a segment which will give a
-+		// different value than the current value.  This means we
-+		// moved at least one segment to the right, thus we cannot be
-+		// at the first point.
-+		assert(i != begin(Points));
-+		Point const left = *(i - 1);
-+		Point const right = *i;
-+		int64_t change_at;
-+		if (current_value < round(i->co.Y)) {
-+			change_at = SearchBetweenPoints(left, right, current_value, std::less_equal<double>{});
-+		} else {
-+			assert(current_value > round(i->co.Y));
-+			change_at = SearchBetweenPoints(left, right, current_value, std::greater_equal<double>{});
-+		}
-+		next_repeats = change_at - index;
-+	} else {
-+		// All values to the right are the same!
-+		next_repeats = Points.back().co.X - index;
-+	}
-+
-+	// Now look to the left, to the previous values.
-+	all_constant = true;
-+	i = candidate;
-+	if (i != begin(Points)) {
-+		// The binary search below assumes i to be the left point;
-+		// candidate is the right point of the current segment
-+		// though. So change this if possible. If this branch is NOT
-+		// taken, then we're at/before the first point and all is
-+		// constant!
-+		--i;
-+	}
-+	int64_t previous_repeats = 0;
-+	// Skip over constant (when rounded) segments!
-+	for (; i != begin(Points); --i) {
-+		if (current_value != round(i->co.Y)) {
-+			all_constant = false;
-+			break;
-+		}
-+	}
-+	// Special case when skipped until the first point, but the first
-+	// point is actually different.  Will not happen if index is
-+	// before the first point!
-+	if (current_value != round(i->co.Y)) {
-+		assert(i != candidate);
-+		all_constant = false;
-+	}
-+	if (! all_constant) {
-+		// There are at least two points, and we're not at the end,
-+		// thus the following is safe!
-+		Point const left = *i;
-+		Point const right = *(i + 1);
-+		int64_t change_at;
-+		if (current_value > round(left.co.Y)) {
-+			change_at = SearchBetweenPoints(left, right, current_value, std::less<double>{});
-+		} else {
-+			assert(current_value < round(left.co.Y));
-+			change_at = SearchBetweenPoints(left, right, current_value, std::greater<double>{});
-+		}
-+		previous_repeats = index - change_at;
-+	} else {
-+		// Every previous value is the same (rounded) as the current
-+		// value.
-+		previous_repeats = index;
-+	}
-+	int64_t total_repeats = previous_repeats + next_repeats;
-+	return Fraction(previous_repeats, total_repeats);
-+}
-+
- // Get the change in Y value (from the previous Y value)
- double Keyframe::GetDelta(int64_t index) const {
--	if (index < 1) return 0.0;
--	if (index == 1 && !Points.empty()) return Points[0].co.Y;
--	if (index >= GetLength()) return 0.0;
--	return GetValue(index) - GetValue(index - 1);
-+	if (index < 1) return 0;
-+	if (index == 1 && ! Points.empty()) return Points[0].co.Y;
-+	if (index >= GetLength()) return 0;
-+	return GetLong(index) - GetLong(index - 1);
- }
- 
- // Get a point at a specific index
-@@ -410,7 +500,7 @@ Point const & Keyframe::GetPoint(int64_t index) const 
- int64_t Keyframe::GetLength() const {
- 	if (Points.empty()) return 0;
- 	if (Points.size() == 1) return 1;
--	return round(Points.back().co.X);
-+	return round(Points.back().co.X) + 1;
- }
- 
- // Get the number of points (i.e. # of points)
-@@ -461,46 +551,50 @@ void Keyframe::UpdatePoint(int64_t index, Point p) {
- }
- 
- void Keyframe::PrintPoints(std::ostream* out) const {
--	*out << std::right << std::setprecision(4) << std::setfill(' ');
--	for (const auto& p : Points) {
--		*out << std::defaultfloat
--			 << std::setw(6) << p.co.X
--			 << std::setw(14) << std::fixed << p.co.Y
--			 << '\n';
--	}
--	*out << std::flush;
-+    *out << std::right << std::setprecision(4) << std::setfill(' ');
-+    for (const auto& p : Points) {
-+        *out << std::defaultfloat
-+             << std::setw(6) << p.co.X
-+             << std::setw(14) << std::fixed << p.co.Y
-+             << '\n';
-+    }
-+    *out << std::flush;
- }
- 
- void Keyframe::PrintValues(std::ostream* out) const {
--	// Column widths
--	std::vector<int> w{10, 12, 8, 11, 19};
-+    // Column widths
-+    std::vector<int> w{10, 12, 8, 11, 19};
- 
--	*out << std::right << std::setfill(' ') << std::setprecision(4);
--	// Headings
--	*out << "│"
--		 << std::setw(w[0]) << "Frame# (X)" << " │"
--		 << std::setw(w[1]) << "Y Value" << " │"
--		 << std::setw(w[2]) << "Delta Y" << " │ "
--		 << std::setw(w[3]) << "Increasing?" << std::right
--		 << "│\n";
--	// Divider
--	*out << "├───────────"
--		 << "┼─────────────"
--		 << "┼─────────"
--		 << "┼────────────┤\n";
-+    *out << std::right << std::setfill(' ') << std::setprecision(4);
-+    // Headings
-+    *out << "│"
-+         << std::setw(w[0]) << "Frame# (X)" << " │"
-+         << std::setw(w[1]) << "Y Value" << " │"
-+         << std::setw(w[2]) << "Delta Y" << " │ "
-+         << std::setw(w[3]) << "Increasing?" << " │ "
-+         << std::setw(w[4]) << std::left << "Repeat Fraction" << std::right
-+         << "│\n";
-+    // Divider
-+    *out << "├───────────"
-+         << "┼─────────────"
-+         << "┼─────────"
-+         << "┼─────────────"
-+         << "┼────────────────────┤\n";
- 
--	for (int64_t i = 1; i <= GetLength(); ++i) {
--		*out << "│"
--			 << std::setw(w[0]-2) << std::defaultfloat << i
--			 << (Contains(Point(i, 1)) ? " *" : "  ") << " │"
--			 << std::setw(w[1]) << std::fixed << GetValue(i) << " │"
--			 << std::setw(w[2]) << std::defaultfloat << std::showpos
--								<< GetDelta(i) << " │ " << std::noshowpos
--			 << std::setw(w[3])
--			 << (IsIncreasing(i) ? "true" : "false") << std::right << "│\n";
--	}
--	*out << " * = Keyframe point (non-interpolated)\n";
--	*out << std::flush;
-+    for (int64_t i = 1; i < GetLength(); ++i) {
-+        *out << "│"
-+             << std::setw(w[0]-2) << std::defaultfloat << i
-+             << (Contains(Point(i, 1)) ? " *" : "  ") << " │"
-+             << std::setw(w[1]) << std::fixed << GetValue(i) << " │"
-+             << std::setw(w[2]) << std::defaultfloat << std::showpos
-+                                << GetDelta(i) << " │ " << std::noshowpos
-+             << std::setw(w[3])
-+             << (IsIncreasing(i) ? "true" : "false") << " │ "
-+             << std::setw(w[4]) << std::left << GetRepeatFraction(i)
-+                                << std::right << "│\n";
-+    }
-+    *out << " * = Keyframe point (non-interpolated)\n";
-+    *out << std::flush;
- }
- 
- 
diff --git a/multimedia/libopenshot/files/patch-src_KeyFrame.h b/multimedia/libopenshot/files/patch-src_KeyFrame.h
deleted file mode 100644
index 45aec4e0c498..000000000000
--- a/multimedia/libopenshot/files/patch-src_KeyFrame.h
+++ /dev/null
@@ -1,31 +0,0 @@
---- src/KeyFrame.h.orig	2023-04-19 22:01:02 UTC
-+++ src/KeyFrame.h
-@@ -16,6 +16,7 @@
- #include <iostream>
- #include <vector>
- 
-+#include "Fraction.h"
- #include "Point.h"
- #include "Json.h"
- 
-@@ -66,8 +67,8 @@ namespace openshot {
- 		/// Constructor which adds a supplied vector of Points
- 		Keyframe(const std::vector<openshot::Point>& points);
- 
--		/// Destructor
--		~Keyframe();
-+        /// Destructor
-+        ~Keyframe();
- 
- 		/// Add a new point on the key-frame.  Each point has a primary coordinate, a left handle, and a right handle.
- 		void AddPoint(Point p);
-@@ -92,6 +93,9 @@ namespace openshot {
- 
- 		/// Get the rounded LONG value at a specific index
- 		int64_t GetLong(int64_t index) const;
-+
-+		/// Get the fraction that represents how many times this value is repeated in the curve
-+		Fraction GetRepeatFraction(int64_t index) const;
- 
- 		/// Get the change in Y value (from the previous Y value)
- 		double GetDelta(int64_t index) const;
diff --git a/multimedia/libopenshot/files/patch-src_ZmqLogger.cpp b/multimedia/libopenshot/files/patch-src_ZmqLogger.cpp
new file mode 100644
index 000000000000..0bea39aece3c
--- /dev/null
+++ b/multimedia/libopenshot/files/patch-src_ZmqLogger.cpp
@@ -0,0 +1,20 @@
+--- src/ZmqLogger.cpp.orig	2024-06-20 01:25:10 UTC
++++ src/ZmqLogger.cpp
+@@ -44,7 +44,7 @@ ZmqLogger *ZmqLogger::Instance()
+ 		m_pInstance->connection = "";
+ 
+ 		// Default connection
+-		m_pInstance->Connection("tcp://*:5556");
++		m_pInstance->Connection("tcp://localhost:5556");
+ 
+ 		// Init enabled to False (force user to call Enable())
+ 		m_pInstance->enabled = false;
+@@ -92,7 +92,7 @@ void ZmqLogger::Connection(std::string new_connection)
+ 
+ 	} catch (zmq::error_t &e) {
+ 		std::cout << "ZmqLogger::Connection - Error binding to " << connection << ". Switching to an available port." << std::endl;
+-		connection = "tcp://*:*";
++		connection = "tcp://localhost:*";
+ 		publisher->bind(connection.c_str());
+ 	}
+ 
diff --git a/multimedia/libopenshot/pkg-plist b/multimedia/libopenshot/pkg-plist
index 6b1f5a7cbd52..739b5e9c4872 100644
--- a/multimedia/libopenshot/pkg-plist
+++ b/multimedia/libopenshot/pkg-plist
@@ -97,8 +97,8 @@ include/libopenshot/effects/Wave.h
 include/libopenshot/sort_filter/Hungarian.h
 include/libopenshot/sort_filter/KalmanTracker.h
 lib/libopenshot.so
-lib/libopenshot.so.0.3.2
-lib/libopenshot.so.25
+lib/libopenshot.so.%%VERSION%%
+lib/libopenshot.so.26
 %%PYTHON_SITELIBDIR%%/_openshot.so
 %%PYTHON_SITELIBDIR%%/openshot.py
 %%RUBY%%%%RUBY_VENDORARCHLIBDIR%%/openshot.so



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202407021425.462EPM8t023534>