From c093f04c58cf721b459c087b58a69d0447f50087 Mon Sep 17 00:00:00 2001 From: Palana <palana@stunned.de> Date: Mon, 30 Dec 2013 03:01:57 +0100 Subject: [PATCH] add static linking options for ffmpeg and wxwidgets to cmake --- cmake/FindLibavutil.cmake | 90 ++++++++++++++++++++++++++++++--- cmake/FindLibswresample.cmake | 93 ++++++++++++++++++++++++++++++++--- libobs/CMakeLists.txt | 11 ++++- obs/CMakeLists.txt | 42 +++++++++++++++- 4 files changed, 217 insertions(+), 19 deletions(-) diff --git a/cmake/FindLibavutil.cmake b/cmake/FindLibavutil.cmake index b33a9d262..ceaa0ec0c 100644 --- a/cmake/FindLibavutil.cmake +++ b/cmake/FindLibavutil.cmake @@ -1,20 +1,94 @@ find_package(PkgConfig) pkg_check_modules(PC_LIBAVUTIL QUIET libavutil) -set(LIBAVUTIL_DEFINITIONS ${PC_LIBAVUTIL_CFLAGS_OTHER}) +set(LIBAVUTIL_STANDARD_DEFINITIONS ${PC_LIBAVUTIL_CFLAGS_OTHER} + CACHE STRING + "Libavutil required CFLAGS") +set(LIBAVUTIL_STATIC_DEFINITIONS ${PC_LIBAVUTIL_STATIC_CFLAGS_OTHER} + CACHE STRING + "Libavutil static required CFLAGS") -find_path(LIBAVUTIL_INCLUDE_DIR libavutil/avutil.h - HINTS ${PC_LIBAVUTIL_INCLUDEDIR} ${PC_LIBAVUTIL_INCLUDE_DIRS} +find_path(LIBAVUTIL_STANDARD_INCLUDE_DIR libavutil/avutil.h + HINTS ${PC_LIBAVUTIL_INCLUDEDIR} + ${PC_LIBAVUTIL_INCLUDE_DIRS} PATH_SUFFIXES libavutil) -find_library(LIBAVUTIL_LIBRARY NAMES libavutil avutil - HINTS ${PC_LIBAVUTIL_LIBDIR} ${PC_LIBAVUTIL_LIBRARY_DIRS}) +find_path(LIBAVUTIL_STATIC_INCLUDE_DIR libavutil/avutil.h + HINTS ${PC_LIBAVUTIL_STATIC_INCLUDEDIR} + ${PC_LIBAVUTIL_STATIC_INCLUDE_DIRS} + PATH_SUFFIXES libavutil) + +if(NOT LIBAVUTIL_STANDARD_LIBRARIES) + set(LIBAVUTIL_STANDARD_LIBRARIES_ "") + foreach(lib ${PC_LIBAVUTIL_LIBRARIES}) + find_library(_lib_file NAMES ${lib} + HINTS ${PC_LIBAVUTIL_LIBDIR} + ${PC_LIBAVUTIL_LIBRARY_DIRS}) + if(_lib_file) + list(APPEND LIBAVUTIL_STANDARD_LIBRARIES_ ${_lib_file}) + endif() + unset(_lib_file CACHE) + endforeach() + set(LIBAVUTIL_STANDARD_LIBRARIES ${LIBAVUTIL_STANDARD_LIBRARIES_} + CACHE STRING + "Libavutil (dynamic) libraries") + unset(LIBAVUTIL_STANDARD_LIBRARIES_) +endif() + +if(NOT LIBAVUTIL_STATIC_LIBRARIES) + set(LIBAVUTIL_STATIC_LIBRARIES_ "") + set(lib_suffixes ${CMAKE_FIND_LIBRARY_SUFFIXES}) + set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX} + ${CMAKE_SHARED_LIBRARY_SUFFIX} ${CMAKE_SHARED_MODULE_SUFFIX}) + foreach(lib ${PC_LIBAVUTIL_STATIC_LIBRARIES}) + find_library(_lib_file NAMES ${lib} + HINTS ${PC_LIBAVUTIL_LIBDIR} + ${PC_LIBAVUTIL_LIBRARY_DIRS}) + if(_lib_file) + list(APPEND LIBAVUTIL_STATIC_LIBRARIES_ ${_lib_file}) + else() + list(APPEND LIBAVUTIL_STATIC_LIBRARIES_ ${lib}) + endif() + unset(_lib_file CACHE) + endforeach() + set(CMAKE_FIND_LIBRARY_SUFFIXES ${lib_suffixes}) + unset(lib_suffixes) + set(LIBAVUTIL_STATIC_LIBRARIES ${LIBAVUTIL_STATIC_LIBRARIES_} + CACHE STRING + "Libavutil static libraries") + unset(LIBAVUTIL_STATIC_LIBRARIES_) +endif() + -set(LIBAVUTIL_INCLUDE_DIRS ${LIBAVUTIL_INCLUDE_DIR}) -set(LIBAVUTIL_LIBRARIES ${LIBAVUTIL_LIBRARY}) + +if(Libavutil_FIND_COMPONENTS AND + Libavutil_FIND_COMPONENTS STREQUAL "static") + set(LIBAVUTIL_DEFINITION ${LIBAVUTIL_STATIC_DEFINITIONS}) + set(LIBAVUTIL_INCLUDE_DIR ${LIBAVUTIL_STATIC_INCLUDE_DIR}) + set(LIBAVUTIL_LIBRARY ${LIBAVUTIL_STATIC_LIBRARIES}) +else() + set(LIBAVUTIL_DEFINITION ${LIBAVUTIL_STANDARD_DEFINITIONS}) + set(LIBAVUTIL_INCLUDE_DIR ${LIBAVUTIL_STANDARD_INCLUDE_DIR}) + set(LIBAVUTIL_LIBRARY ${LIBAVUTIL_STANDARD_LIBRARIES}) +endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Libavutil DEFAULT_MSG LIBAVUTIL_INCLUDE_DIR LIBAVUTIL_LIBRARY) -mark_as_advanced(LIBAVUTIL_INCLUDE_DIR LIBAVUTIL_LIBRARY) + +if(LIBAVUTIL_FOUND) + set(LIBAVUTIL_DEFINITIONS ${LIBAVUTIL_DEFINITION}) + set(LIBAVUTIL_INCLUDE_DIRS ${LIBAVUTIL_INCLUDE_DIR}) + set(LIBAVUTIL_LIBRARIES ${LIBAVUTIL_LIBRARY}) +endif() + +mark_as_advanced( + LIBAVUTIL_STANDARD_DEFINITIONS + LIBAVUTIL_STANDARD_INCLUDE_DIRS + LIBAVUTIL_STANDARD_LIBRARIES + + LIBAVUTIL_STATIC_DEFINITIONS + LIBAVUTIL_STATIC_INCLUDE_DIRS + LIBAVUTIL_STATIC_LIBRARIES + ) diff --git a/cmake/FindLibswresample.cmake b/cmake/FindLibswresample.cmake index 5134cc71c..25605432d 100644 --- a/cmake/FindLibswresample.cmake +++ b/cmake/FindLibswresample.cmake @@ -1,20 +1,97 @@ find_package(PkgConfig) pkg_check_modules(PC_LIBSWRESAMPLE QUIET libswresample) -set(LIBSWRESAMPLE_DEFINITIONS ${PC_LIBSWRESAMPLE_CFLAGS_OTHER}) +set(LIBSWRESAMPLE_STANDARD_DEFINITIONS ${PC_LIBSWRESAMPLE_CFLAGS_OTHER} + CACHE STRING + "Libswresample required CFLAGS") +set(LIBSWRESAMPLE_STATIC_DEFINITIONS ${PC_LIBSWRESAMPLE_STATIC_CFLAGS_OTHER} + CACHE STRING + "Libswresample static required CFLAGS") -find_path(LIBSWRESAMPLE_INCLUDE_DIR libswresample/swresample.h - HINTS ${PC_LIBSWRESAMPLE_INCLUDEDIR} ${PC_LIBSWRESAMPLE_INCLUDE_DIRS} +find_path(LIBSWRESAMPLE_STANDARD_INCLUDE_DIR libswresample/swresample.h + HINTS ${PC_LIBSWRESAMPLE_INCLUDEDIR} + ${PC_LIBSWRESAMPLE_INCLUDE_DIRS} PATH_SUFFIXES libswresample) -find_library(LIBSWRESAMPLE_LIBRARY NAMES libswresample swresample - HINTS ${PC_LIBSWRESAMPLE_LIBDIR} ${PC_LIBSWRESAMPLE_LIBRARY_DIRS}) +find_path(LIBSWRESAMPLE_STATIC_INCLUDE_DIR libswresample/swresample.h + HINTS ${PC_LIBSWRESAMPLE_STATIC_INCLUDEDIR} + ${PC_LIBSWRESAMPLE_STATIC_INCLUDE_DIRS} + PATH_SUFFIXES libswresample) + +if(NOT LIBSWRESAMPLE_STANDARD_LIBRARIES) + set(LIBSWRESAMPLE_STANDARD_LIBRARIES_ "") + foreach(lib ${PC_LIBSWRESAMPLE_LIBRARIES}) + find_library(_lib_file NAMES ${lib} + HINTS ${PC_LIBSWRESAMPLE_LIBDIR} + ${PC_LIBSWRESAMPLE_LIBRARY_DIRS}) + if(_lib_file) + LIST(APPEND LIBSWRESAMPLE_STANDARD_LIBRARIES_ + ${_lib_file}) + endif() + unset(_lib_file CACHE) + endforeach() + set(LIBSWRESAMPLE_STANDARD_LIBRARIES + ${LIBSWRESAMPLE_STANDARD_LIBRARIES_} + CACHE STRING + "Libswresample (dynamic) libraries") + unset(LIBSWRESAMPLE_STANDARD_LIBRARIES_) +endif() + +if(NOT LIBSWRESAMPLE_STATIC_LIBRARIES) + set(LIBSWRESAMPLE_STATIC_LIBRARIES_ "") + set(lib_suffixes ${CMAKE_FIND_LIBRARY_SUFFIXES}) + set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX} + ${CMAKE_SHARED_LIBRARY_SUFFIX} ${CMAKE_SHARED_MODULE_SUFFIX}) + foreach(lib ${PC_LIBSWRESAMPLE_STATIC_LIBRARIES}) + find_library(_lib_file NAMES ${lib} + HINTS ${PC_LIBSWRESAMPLE_LIBDIR} + ${PC_LIBSWRESAMPLE_LIBRARY_DIRS}) + if(_lib_file) + list(APPEND LIBSWRESAMPLE_STATIC_LIBRARIES_ + ${_lib_file}) + else() + list(APPEND LIBSWRESAMPLE_STATIC_LIBRARIES_ ${lib}) + endif() + unset(_lib_file CACHE) + endforeach() + set(CMAKE_FIND_LIBRARY_SUFFIXES ${lib_suffixes}) + set(LIBSWRESAMPLE_STATIC_LIBRARIES ${LIBSWRESAMPLE_STATIC_LIBRARIES_} + CACHE STRING + "Libswresample static libraries") + unset(LIBSWRESAMPLE_STATIC_LIBRARIES_) +endif() + -set(LIBSWRESAMPLE_INCLUDE_DIRS ${LIBSWRESAMPLE_INCLUDE_DIR}) -set(LIBSWRESAMPLE_LIBRARIES ${LIBSWRESAMPLE_LIBRARY}) + +if(Libswresample_FIND_COMPONENTS AND + Libswresample_FIND_COMPONENTS STREQUAL "static") + set(LIBSWRESAMPLE_DEFINITION ${LIBSWRESAMPLE_STATIC_DEFINITIONS}) + set(LIBSWRESAMPLE_INCLUDE_DIR ${LIBSWRESAMPLE_STATIC_INCLUDE_DIR}) + set(LIBSWRESAMPLE_LIBRARY ${LIBSWRESAMPLE_STATIC_LIBRARIES}) +else() + set(LIBSWRESAMPLE_DEFINITION ${LIBSWRESAMPLE_STANDARD_DEFINITIONS}) + set(LIBSWRESAMPLE_INCLUDE_DIR ${LIBSWRESAMPLE_STANDARD_INCLUDE_DIR}) + set(LIBSWRESAMPLE_LIBRARY ${LIBSWRESAMPLE_STANDARD_LIBRARIES}) +endif() include(FindPackageHandleStandardArgs) find_package_handle_standard_args(Libswresample DEFAULT_MSG LIBSWRESAMPLE_INCLUDE_DIR LIBSWRESAMPLE_LIBRARY) -mark_as_advanced(LIBSWRESAMPLE_INCLUDE_DIR LIBSWRESAMPLE_LIBRARY) + +if(LIBSWRESAMPLE_FOUND) + set(LIBSWRESAMPLE_DEFINITIONS ${LIBSWRESAMPLE_DEFINITION}) + set(LIBSWRESAMPLE_INCLUDE_DIRS ${LIBSWRESAMPLE_INCLUDE_DIR}) + set(LIBSWRESAMPLE_LIBRARIES ${LIBSWRESAMPLE_LIBRARY}) +endif() + +mark_as_advanced( + LIBSWRESAMPLE_STANDARD_DEFINITIONS + LIBSWRESAMPLE_STANDARD_INCLUDE_DIRS + LIBSWRESAMPLE_STANDARD_LIBRARIES + + LIBSWRESAMPLE_STATIC_DEFINITIONS + LIBSWRESAMPLE_STATIC_INCLUDE_DIRS + LIBSWRESAMPLE_STATIC_LIBRARIES + ) + diff --git a/libobs/CMakeLists.txt b/libobs/CMakeLists.txt index c8ba29403..4741109d9 100644 --- a/libobs/CMakeLists.txt +++ b/libobs/CMakeLists.txt @@ -22,11 +22,18 @@ elseif(UNIX) else() endif() -find_package(Libavutil REQUIRED) +option(USE_STATIC_FFMPEG "Link ffmpeg statically (if possible)" false) +if(USE_STATIC_FFMPEG) + set(FFMPEG_STATIC "static") +endif() + +find_package(Libavutil REQUIRED ${FFMPEG_STATIC}) include_directories(${LIBAVUTIL_INCLUDE_DIRS}) +add_definitions(${LIBAVUTIL_DEFINITIONS}) -find_package(Libswresample REQUIRED) +find_package(Libswresample REQUIRED ${FFMPEG_STATIC}) include_directories(${LIBSWRESAMPLE_INCLUDE_DIRS}) +add_definitions(${LIBSWRESAMPLE_DEFINITIONS}) add_library(libobs SHARED obs.c diff --git a/obs/CMakeLists.txt b/obs/CMakeLists.txt index 28c49858f..f55268b23 100644 --- a/obs/CMakeLists.txt +++ b/obs/CMakeLists.txt @@ -1,3 +1,7 @@ +option(USE_STATIC_WX "Link wxWidgets statically" false) +if(USE_STATIC_WX) + set(wxWidgets_USE_STATIC true) +endif() find_package(wxWidgets COMPONENTS core base REQUIRED) include("${wxWidgets_USE_FILE}") @@ -25,9 +29,45 @@ function(wx_required_version) endfunction() wx_required_version() +if(USE_STATIC_WX) + #unpack -llib to static library names + set(WX_LIBRARIES "") + set(lib_suffixes ${CMAKE_FIND_LIBRARY_SUFFIXES}) + set(CMAKE_FIND_LIBRARY_SUFFIXES ${CMAKE_STATIC_LIBRARY_SUFFIX} + ${CMAKE_DYNAMIC_LIBRARY_SUFFIX} ${CMAKE_SHARED_OBJECT_SUFFIX}) + foreach(lib ${wxWidgets_LIBRARIES}) + string(SUBSTRING ${lib} 0 2 _l) + if(_l STREQUAL "-l") + string(SUBSTRING ${lib} 2 -1 libname) + find_library(lib_file NAMES ${libname} + HINTS ${wxWidgets_LIBRARY_DIRS}) + if(lib_file) + list(APPEND WX_LIBRARIES ${lib_file}) + else() + list(APPEND WX_LIBRARIES ${lib}) + endif() + unset(lib_file CACHE) + else() + list(APPEND WX_LIBRARIES ${lib}) + endif() + endforeach() + if(APPLE) + find_library(lzma NAMES lzma) + if(lzma) + link_libraries(${lzma}) + endif() + endif() + set(CMAKE_FIND_LIBRARY_SUFFIXES ${lib_suffixes}) + unset(lib_suffixes) + link_libraries(${WX_LIBRARIES}) + unset(WX_LIBRARIES) +else() + link_libraries(${wxWidgets_LIBRARIES}) +endif() + include_directories(SYSTEM ${obs_SOURCE_DIR}/libobs) -link_libraries(${wxWidgets_LIBRARIES} libobs) +link_libraries(libobs) if(WIN32) set(obs_platform_src -- GitLab