Merge pull request #1079 from OpenShot/cmake-cleanup

Clean-up and modernization of our cmake build system
This commit is contained in:
Jonathan Thomas
2026-05-24 22:59:10 -05:00
committed by GitHub
8 changed files with 79 additions and 36 deletions
+11 -13
View File
@@ -12,12 +12,12 @@
find_package(SWIG 4.0 REQUIRED)
include(${SWIG_USE_FILE})
### Enable some legacy SWIG behaviors in newer CMake versions
### Use modern SWIG target behavior when available
if (POLICY CMP0078)
cmake_policy(SET CMP0078 OLD)
cmake_policy(SET CMP0078 NEW)
endif()
if (POLICY CMP0086)
cmake_policy(SET CMP0086 OLD)
cmake_policy(SET CMP0086 NEW)
endif()
find_package(Java REQUIRED)
@@ -25,8 +25,6 @@ include(UseJava)
find_package(JNI REQUIRED)
include_directories(${JNI_INCLUDE_DIRS})
message(STATUS "JNI_INCLUDE_DIRS=${JNI_INCLUDE_DIRS}")
message(STATUS "JNI_LIBRARIES=${JNI_LIBRARIES}")
### Enable C++ in SWIG
set_property(SOURCE openshot.i PROPERTY CPLUSPLUS ON)
@@ -34,7 +32,7 @@ set_property(SOURCE openshot.i PROPERTY SWIG_MODULE_NAME openshot)
### Set the swig package name for the JAR
set_source_files_properties(openshot.i PROPERTIES
SWIG_FLAGS "-package;org.openshot"
SWIG_FLAGS "-package;org.openshot;-w503,516,813,822"
)
### Suppress a ton of warnings in the generated SWIG C++ code
@@ -51,7 +49,6 @@ elseif(CMAKE_VERSION VERSION_GREATER 3.12)
set(_inc $<TARGET_PROPERTY:openshot,INCLUDE_DIRECTORIES>)
endif()
if (DEFINED _inc)
message(STATUS "Include directories: ${_inc}")
set_property(SOURCE openshot.i PROPERTY INCLUDE_DIRECTORIES ${_inc})
endif()
@@ -61,10 +58,12 @@ if (CMAKE_VERSION VERSION_GREATER 3.20)
endif()
### Add the SWIG interface file (which defines all the SWIG methods)
if (CMAKE_VERSION VERSION_LESS 3.8.0)
swig_add_module(openshot-java java openshot.i)
swig_add_library(openshot-java LANGUAGE java SOURCES openshot.i)
if (POLICY CMP0078)
set(_openshot_java_target openshot-java)
else()
swig_add_library(openshot-java LANGUAGE java SOURCES openshot.i)
set(_openshot_java_target ${SWIG_MODULE_openshot-java_REAL_NAME})
endif()
### Set the prefix for the library to 'lib'
@@ -72,10 +71,9 @@ endif()
### Compile the generated wrapper file
get_property(_java_files TARGET openshot-java PROPERTY SWIG_SUPPORT_FILES)
message("_java_files: ${_java_files}")
### Link the new Java wrapper library with libopenshot
target_link_libraries(${SWIG_MODULE_openshot-java_REAL_NAME} PUBLIC
target_link_libraries(${_openshot_java_target} PUBLIC
${JNI_LIBRARIES} openshot)
### Create a custom target for the JAR file
@@ -83,7 +81,7 @@ add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/bindings/java/openshotJNI.jar
COMMAND ${Java_JAVAC_EXECUTABLE} -d ${CMAKE_BINARY_DIR}/bindings/java ${CMAKE_BINARY_DIR}/bindings/java/*.java
COMMAND ${Java_JAR_EXECUTABLE} -cf ${CMAKE_BINARY_DIR}/bindings/java/openshotJNI.jar -C ${CMAKE_BINARY_DIR}/bindings/java .
DEPENDS openshot-java
DEPENDS ${_openshot_java_target}
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/bindings/java
COMMENT "Creating openshotJNI.jar"
)
+6
View File
@@ -14,6 +14,12 @@
/* Suppress warnings about ignored operator= */
%warnfilter(362);
/* JUCE thread internals are implementation details, not binding API */
%ignore juce::Thread;
namespace juce {
class Thread {};
}
/* Don't generate multiple wrappers for functions with default args */
%feature("compactdefaultargs", "1");
+26 -11
View File
@@ -12,16 +12,29 @@
find_package(SWIG 3.0 REQUIRED)
include(${SWIG_USE_FILE})
### Enable some legacy SWIG behaviors, in newer CMAKEs
### Use modern SWIG target behavior when available
if (POLICY CMP0078)
cmake_policy(SET CMP0078 OLD)
cmake_policy(SET CMP0078 NEW)
endif()
if (POLICY CMP0086)
cmake_policy(SET CMP0086 OLD)
cmake_policy(SET CMP0086 NEW)
endif()
find_package(PythonInterp 3)
find_package(PythonLibs 3)
if (CMAKE_VERSION VERSION_LESS 3.12)
find_package(PythonInterp 3)
find_package(PythonLibs 3)
else()
find_package(Python3 3 COMPONENTS Interpreter Development)
if (Python3_FOUND)
set(PYTHON_EXECUTABLE "${Python3_EXECUTABLE}")
set(PYTHON_INCLUDE_PATH "${Python3_INCLUDE_DIRS}")
set(PYTHON_LIBRARIES "${Python3_LIBRARIES}")
set(PYTHON_VERSION_MAJOR "${Python3_VERSION_MAJOR}")
set(PYTHON_VERSION_MINOR "${Python3_VERSION_MINOR}")
set(PYTHONINTERP_FOUND TRUE)
set(PYTHONLIBS_FOUND TRUE)
endif()
endif()
if (NOT PYTHONLIBS_FOUND OR NOT PYTHONINTERP_FOUND)
return()
@@ -85,18 +98,20 @@ if (CMAKE_VERSION VERSION_GREATER 3.20)
endif()
### Add the SWIG interface file (which defines all the SWIG methods)
if (CMAKE_VERSION VERSION_LESS 3.8.0)
swig_add_module(pyopenshot python openshot.i)
swig_add_library(pyopenshot LANGUAGE python SOURCES openshot.i)
if (POLICY CMP0078)
set(_pyopenshot_target pyopenshot)
else()
swig_add_library(pyopenshot LANGUAGE python SOURCES openshot.i)
set(_pyopenshot_target ${SWIG_MODULE_pyopenshot_REAL_NAME})
endif()
### Set output name of target
set_target_properties(${SWIG_MODULE_pyopenshot_REAL_NAME} PROPERTIES
set_target_properties(${_pyopenshot_target} PROPERTIES
PREFIX "_" OUTPUT_NAME "openshot")
### Link the new python wrapper library with libopenshot
target_link_libraries(${SWIG_MODULE_pyopenshot_REAL_NAME} PUBLIC
target_link_libraries(${_pyopenshot_target} PUBLIC
${PYTHON_LIBRARIES} openshot)
######### INSTALL PATH ########
@@ -128,7 +143,7 @@ message(STATUS "PYTHON_MODULE_PATH: ${CMAKE_INSTALL_PREFIX}/${PYTHON_MODULE_PATH
############### INSTALL HEADERS & LIBRARY ################
### Install Python bindings
install(TARGETS ${SWIG_MODULE_pyopenshot_REAL_NAME}
install(TARGETS ${_pyopenshot_target}
DESTINATION ${PYTHON_MODULE_PATH} )
install(FILES ${CMAKE_CURRENT_BINARY_DIR}/openshot.py
DESTINATION ${PYTHON_MODULE_PATH} )
+7 -1
View File
@@ -14,6 +14,12 @@
/* Suppress warnings about ignored operator= */
%warnfilter(362);
/* JUCE thread internals are implementation details, not binding API */
%ignore juce::Thread;
namespace juce {
class Thread {};
}
/* Don't generate multiple wrappers for functions with default args */
%feature("compactdefaultargs", "1");
@@ -248,7 +254,7 @@ static int openshot_swig_is_qwidget(PyObject *obj) {
$1 = reinterpret_cast<QWidget*>(ptr);
}
%typemap(typecheck) QWidget * {
%typemap(typecheck, precedence=SWIG_TYPECHECK_POINTER) QWidget * {
$1 = openshot_swig_is_qwidget($input);
}
+11 -9
View File
@@ -12,12 +12,12 @@
find_package(SWIG 3.0 REQUIRED)
include(${SWIG_USE_FILE})
### Enable some legacy SWIG behaviors, in newer CMAKEs
### Use modern SWIG target behavior when available
if (POLICY CMP0078)
cmake_policy(SET CMP0078 OLD)
cmake_policy(SET CMP0078 NEW)
endif()
if (POLICY CMP0086)
cmake_policy(SET CMP0086 OLD)
cmake_policy(SET CMP0086 NEW)
endif()
find_package(Ruby)
@@ -102,10 +102,12 @@ if (CMAKE_VERSION VERSION_GREATER 3.20)
endif()
### Add the SWIG interface file (which defines all the SWIG methods)
if (CMAKE_VERSION VERSION_LESS 3.8.0)
swig_add_module(rbopenshot ruby openshot.i)
swig_add_library(rbopenshot LANGUAGE ruby SOURCES openshot.i)
if (POLICY CMP0078)
set(_rbopenshot_target rbopenshot)
else()
swig_add_library(rbopenshot LANGUAGE ruby SOURCES openshot.i)
set(_rbopenshot_target ${SWIG_MODULE_rbopenshot_REAL_NAME})
endif()
### Set name of target (with no prefix, since Ruby does not like that)
@@ -113,11 +115,11 @@ endif()
# e.g. rbopenshot.so, but its initializer method will be named
# 'Init_openshot()' (via the module name set in the SWIG .i file).
# Which leads to Ruby barfing when it attempts to load the module.
set_target_properties(${SWIG_MODULE_rbopenshot_REAL_NAME} PROPERTIES
set_target_properties(${_rbopenshot_target} PROPERTIES
PREFIX "" OUTPUT_NAME "openshot")
### Link the new Ruby wrapper library with libopenshot
target_link_libraries(${SWIG_MODULE_rbopenshot_REAL_NAME} PUBLIC
target_link_libraries(${_rbopenshot_target} PUBLIC
${RUBY_LIBRARY} openshot)
######### INSTALL PATH ########
@@ -147,5 +149,5 @@ message(STATUS "RUBY_MODULE_PATH: ${CMAKE_INSTALL_PREFIX}/${RUBY_MODULE_PATH}")
############### INSTALL HEADERS & LIBRARY ################
# Install Ruby bindings
install(TARGETS ${SWIG_MODULE_rbopenshot_REAL_NAME}
install(TARGETS ${_rbopenshot_target}
DESTINATION ${RUBY_MODULE_PATH} )
+15
View File
@@ -14,6 +14,21 @@
/* Suppress warnings about ignored operator= */
%warnfilter(362);
/* JUCE thread internals are implementation details, not binding API */
%ignore juce::Thread;
namespace juce {
class Thread {};
}
/* Ruby bindings intentionally expose the primary OpenShot base class only */
%warnfilter(802) openshot::Clip;
%warnfilter(802) openshot::Timeline;
/* Ruby bindings do not expose Profile comparison operators */
%warnfilter(503) operator<;
%warnfilter(503) operator>;
%warnfilter(503) operator==;
/* Don't generate multiple wrappers for functions with default args */
%feature("compactdefaultargs", "1");
+1 -1
View File
@@ -20,7 +20,7 @@ function(_babl_GET_VERSION _header)
endfunction()
find_package(PkgConfig)
pkg_check_modules(PC_BABL babl)
pkg_check_modules(PC_BABL QUIET babl)
set(babl_VERSION ${PC_BABL_VERSION})
+2 -1
View File
@@ -393,7 +393,7 @@ mark_as_advanced(QT_VERSION_STR)
# Find FFmpeg libraries (used for video encoding / decoding)
find_package(FFmpeg REQUIRED
COMPONENTS avcodec avformat avutil swscale
OPTIONAL_COMPONENTS swresample avresample
OPTIONAL_COMPONENTS swresample
)
set(all_comps avcodec avformat avutil swscale)
@@ -404,6 +404,7 @@ if(TARGET FFmpeg::swresample)
set(resample_lib swresample)
set(USE_SW TRUE)
else()
find_package(FFmpeg REQUIRED COMPONENTS avresample)
set(resample_lib avresample)
set(USE_SW FALSE)
endif()