Skip to content

Commit a25e43a

Browse files
authored
Merge pull request #334 from ferdnyc/cmake-with-loops
CMake with loops! (And FeatureSummary)
2 parents c685571 + 986f567 commit a25e43a

File tree

2 files changed

+59
-153
lines changed

2 files changed

+59
-153
lines changed

src/CMakeLists.txt

Lines changed: 39 additions & 93 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,12 @@
2727
# Pick up our include directories from the parent context
2828
include_directories(${OPENSHOT_INCLUDE_DIRS})
2929

30+
####### Display summary of options/dependencies ######
31+
include(FeatureSummary)
32+
#set_property(GLOBAL APPEND PROPERTY FeatureSummary_PKG_TYPES BUILD)
33+
#find_package(FOO)
34+
#set_package_properties(FOO PROPERTIES TYPE BUILD)
35+
3036
################ OPTIONS ##################
3137
# Optional build settings for libopenshot
3238
OPTION(USE_SYSTEM_JSONCPP "Use system installed JsonCpp" OFF)
@@ -82,33 +88,15 @@ ENDIF (ImageMagick_FOUND)
8288
# Find FFmpeg libraries (used for video encoding / decoding)
8389
FIND_PACKAGE(FFmpeg REQUIRED)
8490

85-
IF (AVCODEC_FOUND)
86-
include_directories(${AVCODEC_INCLUDE_DIRS})
87-
ENDIF (AVCODEC_FOUND)
88-
IF (AVDEVICE_FOUND)
89-
include_directories(${AVDEVICE_INCLUDE_DIRS})
90-
ENDIF (AVDEVICE_FOUND)
91-
IF (AVFORMAT_FOUND)
92-
include_directories(${AVFORMAT_INCLUDE_DIRS})
93-
ENDIF (AVFORMAT_FOUND)
94-
IF (AVFILTER_FOUND)
95-
include_directories(${AVFILTER_INCLUDE_DIRS})
96-
ENDIF (AVFILTER_FOUND)
97-
IF (AVUTIL_FOUND)
98-
include_directories(${AVUTIL_INCLUDE_DIRS})
99-
ENDIF (AVUTIL_FOUND)
100-
IF (POSTPROC_FOUND)
101-
include_directories(${POSTPROC_INCLUDE_DIRS})
102-
ENDIF (POSTPROC_FOUND)
103-
IF (SWSCALE_FOUND)
104-
include_directories(${SWSCALE_INCLUDE_DIRS})
105-
ENDIF (SWSCALE_FOUND)
106-
IF (SWRESAMPLE_FOUND)
107-
include_directories(${SWRESAMPLE_INCLUDE_DIRS})
108-
ENDIF (SWRESAMPLE_FOUND)
109-
IF (AVRESAMPLE_FOUND)
110-
include_directories(${AVRESAMPLE_INCLUDE_DIRS})
111-
ENDIF (AVRESAMPLE_FOUND)
91+
foreach(ffmpeg_comp AVCODEC AVDEVICE AVFORMAT AVFILTER AVUTIL POSTPROC SWSCALE SWRESAMPLE AVRESAMPLE)
92+
if(${ffmpeg_comp}_FOUND)
93+
list(APPEND FF_INCLUDES ${${ffmpeg_comp}_INCLUDE_DIRS})
94+
add_definitions(${${ffmpeg_comp}_DEFINITIONS})
95+
list(APPEND FF_LIBRARIES ${${ffmpeg_comp}_LIBRARIES})
96+
endif()
97+
endforeach()
98+
list(REMOVE_DUPLICATES FF_INCLUDES)
99+
include_directories(${FF_INCLUDES})
112100

113101
################# LIBOPENSHOT-AUDIO ###################
114102
# Find JUCE-based openshot Audio libraries
@@ -119,38 +107,17 @@ include_directories(${LIBOPENSHOT_AUDIO_INCLUDE_DIRS})
119107

120108
################# QT5 ###################
121109
# Find QT5 libraries
122-
find_package(Qt5Widgets REQUIRED)
123-
find_package(Qt5Core REQUIRED)
124-
find_package(Qt5Gui REQUIRED)
125-
find_package(Qt5Multimedia REQUIRED)
126-
find_package(Qt5MultimediaWidgets REQUIRED)
127-
128-
# Include Qt headers (needed for compile)
129-
include_directories(${Qt5Widgets_INCLUDE_DIRS})
130-
include_directories(${Qt5Core_INCLUDE_DIRS})
131-
include_directories(${Qt5Gui_INCLUDE_DIRS})
132-
include_directories(${Qt5Multimedia_INCLUDE_DIRS})
133-
include_directories(${Qt5MultimediaWidgets_INCLUDE_DIRS})
134-
135-
add_definitions(${Qt5Widgets_DEFINITIONS})
136-
add_definitions(${Qt5Core_DEFINITIONS})
137-
add_definitions(${Qt5Gui_DEFINITIONS})
138-
add_definitions(${Qt5Multimedia_DEFINITIONS})
139-
add_definitions(${Qt5MultimediaWidgets_DEFINITIONS})
140-
141-
SET(QT_LIBRARIES ${Qt5Widgets_LIBRARIES}
142-
${Qt5Core_LIBRARIES}
143-
${Qt5Gui_LIBRARIES}
144-
${Qt5Multimedia_LIBRARIES}
145-
${Qt5MultimediaWidgets_LIBRARIES})
146-
147-
# Set compiler flags for Qt
148-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS} ")
149-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Core_EXECUTABLE_COMPILE_FLAGS} ")
150-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Gui_EXECUTABLE_COMPILE_FLAGS} ")
151-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Multimedia_EXECUTABLE_COMPILE_FLAGS} ")
152-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5MultimediaWidgets_EXECUTABLE_COMPILE_FLAGS} ")
153-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -ggdb ")
110+
foreach(qt_lib Qt5Widgets Qt5Core Qt5Gui Qt5Multimedia Qt5MultimediaWidgets)
111+
find_package(${qt_lib} REQUIRED)
112+
# Header files
113+
include_directories(${${qt_lib}_INCLUDE_DIRS})
114+
# Compiler definitions
115+
add_definitions(${${qt_lib}_DEFINITIONS})
116+
# Other CFLAGS
117+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${${qt_lib}_EXECUTABLE_COMPILE_FLAGS}")
118+
# For use when linking
119+
list(APPEND QT_LIBRARIES ${${qt_lib}_LIBRARIES})
120+
endforeach()
154121

155122
# Manually moc Qt files
156123
qt5_wrap_cpp(MOC_FILES ${QT_HEADER_FILES})
@@ -309,59 +276,32 @@ set_target_properties(openshot
309276
############### LINK LIBRARY #################
310277
SET ( REQUIRED_LIBRARIES
311278
${LIBOPENSHOT_AUDIO_LIBRARIES}
279+
${FF_LIBRARIES}
312280
${QT_LIBRARIES}
313281
${PROFILER}
314282
${JSONCPP_LIBRARY}
315283
${ZMQ_LIBRARIES}
316284
)
317285

318-
IF (AVCODEC_FOUND)
319-
SET ( REQUIRED_LIBRARIES ${REQUIRED_LIBRARIES} ${AVCODEC_LIBRARIES} )
320-
ENDIF (AVCODEC_FOUND)
321-
IF (AVDEVICE_FOUND)
322-
SET ( REQUIRED_LIBRARIES ${REQUIRED_LIBRARIES} ${AVDEVICE_LIBRARIES} )
323-
ENDIF (AVDEVICE_FOUND)
324-
IF (AVFORMAT_FOUND)
325-
SET ( REQUIRED_LIBRARIES ${REQUIRED_LIBRARIES} ${AVFORMAT_LIBRARIES} )
326-
ENDIF (AVFORMAT_FOUND)
327-
IF (AVFILTER_FOUND)
328-
SET ( REQUIRED_LIBRARIES ${REQUIRED_LIBRARIES} ${AVFILTER_LIBRARIES} )
329-
ENDIF (AVFILTER_FOUND)
330-
IF (AVUTIL_FOUND)
331-
SET ( REQUIRED_LIBRARIES ${REQUIRED_LIBRARIES} ${AVUTIL_LIBRARIES} )
332-
ENDIF (AVUTIL_FOUND)
333-
IF (POSTPROC_FOUND)
334-
SET ( REQUIRED_LIBRARIES ${REQUIRED_LIBRARIES} ${POSTPROC_LIBRARIES} )
335-
ENDIF (POSTPROC_FOUND)
336-
IF (SWSCALE_FOUND)
337-
SET ( REQUIRED_LIBRARIES ${REQUIRED_LIBRARIES} ${SWSCALE_LIBRARIES} )
338-
ENDIF (SWSCALE_FOUND)
339-
IF (SWRESAMPLE_FOUND)
340-
SET ( REQUIRED_LIBRARIES ${REQUIRED_LIBRARIES} ${SWRESAMPLE_LIBRARIES} )
341-
ENDIF (SWRESAMPLE_FOUND)
342-
IF (AVRESAMPLE_FOUND)
343-
SET ( REQUIRED_LIBRARIES ${REQUIRED_LIBRARIES} ${AVRESAMPLE_LIBRARIES} )
344-
ENDIF (AVRESAMPLE_FOUND)
345-
346286
IF (RESVG_FOUND)
347-
SET ( REQUIRED_LIBRARIES ${REQUIRED_LIBRARIES} ${RESVG_LIBRARIES} )
287+
list(APPEND REQUIRED_LIBRARIES ${RESVG_LIBRARIES})
348288
ENDIF(RESVG_FOUND)
349289

350290
IF (OPENMP_FOUND)
351-
SET ( REQUIRED_LIBRARIES ${REQUIRED_LIBRARIES} ${OpenMP_CXX_FLAGS} )
291+
list(APPEND REQUIRED_LIBRARIES ${OpenMP_CXX_FLAGS})
352292
ENDIF (OPENMP_FOUND)
353293

354294
IF (ImageMagick_FOUND)
355-
SET ( REQUIRED_LIBRARIES ${REQUIRED_LIBRARIES} ${ImageMagick_LIBRARIES} )
295+
list(APPEND REQUIRED_LIBRARIES ${ImageMagick_LIBRARIES})
356296
ENDIF (ImageMagick_FOUND)
357297

358298
IF (BLACKMAGIC_FOUND)
359-
SET ( REQUIRED_LIBRARIES ${REQUIRED_LIBRARIES} ${BLACKMAGIC_LIBRARY_DIR} )
299+
list(APPEND REQUIRED_LIBRARIES ${BLACKMAGIC_LIBRARY_DIR})
360300
ENDIF (BLACKMAGIC_FOUND)
361301

362302
IF (WIN32)
363303
# Required for exception handling on Windows
364-
SET ( REQUIRED_LIBRARIES ${REQUIRED_LIBRARIES} "imagehlp" "dbghelp" )
304+
list(APPEND REQUIRED_LIBRARIES "imagehlp" "dbghelp" )
365305
ENDIF(WIN32)
366306

367307
# Link all referenced libraries
@@ -395,12 +335,18 @@ ENDIF (BLACKMAGIC_FOUND)
395335
############### INCLUDE SWIG BINDINGS ################
396336
add_subdirectory(bindings)
397337

338+
########### PRINT FEATURE SUMMARY ##############
339+
feature_summary(WHAT ALL
340+
INCLUDE_QUIET_PACKAGES
341+
DESCRIPTION "Build configuration:"
342+
VAR featuresText)
343+
message("\n${featuresText}")
398344

399345
############### INSTALL HEADERS & LIBRARY ################
400346
set(LIB_INSTALL_DIR lib${LIB_SUFFIX}) # determine correct lib folder
401347

402348
# Install primary library
403-
INSTALL( TARGETS openshot
349+
INSTALL(TARGETS openshot
404350
ARCHIVE DESTINATION ${LIB_INSTALL_DIR}
405351
LIBRARY DESTINATION ${LIB_INSTALL_DIR}
406352
RUNTIME DESTINATION ${LIB_INSTALL_DIR}

tests/CMakeLists.txt

Lines changed: 20 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -81,34 +81,15 @@ ENDIF (ImageMagick_FOUND)
8181
# Find FFmpeg libraries (used for video encoding / decoding)
8282
FIND_PACKAGE(FFmpeg REQUIRED)
8383

84-
# Include FFmpeg headers (needed for compile)
85-
IF (AVCODEC_FOUND)
86-
include_directories(${AVCODEC_INCLUDE_DIRS})
87-
ENDIF (AVCODEC_FOUND)
88-
IF (AVDEVICE_FOUND)
89-
include_directories(${AVDEVICE_INCLUDE_DIRS})
90-
ENDIF (AVDEVICE_FOUND)
91-
IF (AVFORMAT_FOUND)
92-
include_directories(${AVFORMAT_INCLUDE_DIRS})
93-
ENDIF (AVFORMAT_FOUND)
94-
IF (AVFILTER_FOUND)
95-
include_directories(${AVFILTER_INCLUDE_DIRS})
96-
ENDIF (AVFILTER_FOUND)
97-
IF (AVUTIL_FOUND)
98-
include_directories(${AVUTIL_INCLUDE_DIRS})
99-
ENDIF (AVUTIL_FOUND)
100-
IF (POSTPROC_FOUND)
101-
include_directories(${POSTPROC_INCLUDE_DIRS})
102-
ENDIF (POSTPROC_FOUND)
103-
IF (SWSCALE_FOUND)
104-
include_directories(${SWSCALE_INCLUDE_DIRS})
105-
ENDIF (SWSCALE_FOUND)
106-
IF (SWRESAMPLE_FOUND)
107-
include_directories(${SWRESAMPLE_INCLUDE_DIRS})
108-
ENDIF (SWRESAMPLE_FOUND)
109-
IF (AVRESAMPLE_FOUND)
110-
include_directories(${AVRESAMPLE_INCLUDE_DIRS})
111-
ENDIF (AVRESAMPLE_FOUND)
84+
foreach(ffmpeg_comp AVCODEC AVDEVICE AVFORMAT AVFILTER AVUTIL POSTPROC SWSCALE SWRESAMPLE AVRESAMPLE)
85+
if(${ffmpeg_comp}_FOUND)
86+
# Include FFmpeg headers (needed for compile)
87+
list(APPEND FF_INCLUDES ${${ffmpeg_comp}_INCLUDE_DIRS})
88+
add_definitions(${${ffmpeg_comp}_DEFINITIONS})
89+
endif()
90+
endforeach()
91+
list(REMOVE_DUPLICATES FF_INCLUDES)
92+
include_directories(${FF_INCLUDES})
11293

11394
################# LIBOPENSHOT-AUDIO ###################
11495
# Find JUCE-based openshot Audio libraries
@@ -119,38 +100,17 @@ include_directories(${LIBOPENSHOT_AUDIO_INCLUDE_DIRS})
119100

120101
################# QT5 ###################
121102
# Find QT5 libraries
122-
find_package(Qt5Widgets REQUIRED)
123-
find_package(Qt5Core REQUIRED)
124-
find_package(Qt5Gui REQUIRED)
125-
find_package(Qt5Multimedia REQUIRED)
126-
find_package(Qt5MultimediaWidgets REQUIRED)
127-
128-
# Include Qt headers (needed for compile)
129-
include_directories(${Qt5Widgets_INCLUDE_DIRS})
130-
include_directories(${Qt5Core_INCLUDE_DIRS})
131-
include_directories(${Qt5Gui_INCLUDE_DIRS})
132-
include_directories(${Qt5Multimedia_INCLUDE_DIRS})
133-
include_directories(${Qt5MultimediaWidgets_INCLUDE_DIRS})
134-
135-
add_definitions(${Qt5Widgets_DEFINITIONS})
136-
add_definitions(${Qt5Core_DEFINITIONS})
137-
add_definitions(${Qt5Gui_DEFINITIONS})
138-
add_definitions(${Qt5Multimedia_DEFINITIONS})
139-
add_definitions(${Qt5MultimediaWidgets_DEFINITIONS})
140-
141-
SET(QT_LIBRARIES ${Qt5Widgets_LIBRARIES}
142-
${Qt5Core_LIBRARIES}
143-
${Qt5Gui_LIBRARIES}
144-
${Qt5Multimedia_LIBRARIES}
145-
${Qt5MultimediaWidgets_LIBRARIES})
146-
147-
# Set compiler flags for Qt
148-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Widgets_EXECUTABLE_COMPILE_FLAGS} ")
149-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Core_EXECUTABLE_COMPILE_FLAGS} ")
150-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Gui_EXECUTABLE_COMPILE_FLAGS} ")
151-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5Multimedia_EXECUTABLE_COMPILE_FLAGS} ")
152-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${Qt5MultimediaWidgets_EXECUTABLE_COMPILE_FLAGS} ")
153-
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -ggdb ")
103+
foreach(qt_lib Qt5Widgets Qt5Core Qt5Gui Qt5Multimedia Qt5MultimediaWidgets)
104+
find_package(${qt_lib} REQUIRED)
105+
# Header files
106+
list(APPEND QT_INCLUDES ${${qt_lib}_INCLUDE_DIRS})
107+
# Compiler definitions
108+
add_definitions(${${qt_lib}_DEFINITIONS})
109+
# Other CFLAGS
110+
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${${qt_lib}_EXECUTABLE_COMPILE_FLAGS}")
111+
endforeach()
112+
list(REMOVE_DUPLICATES QT_INCLUDES)
113+
include_directories(${QT_INCLUDES})
154114

155115
# Manually moc Qt files
156116
qt5_wrap_cpp(MOC_FILES ${QT_HEADER_FILES})

0 commit comments

Comments
 (0)