From: Helge Norberg Date: Fri, 10 Apr 2015 10:50:36 +0000 (+0200) Subject: * Extracted module startup from server.cpp to a generated included_modules.h. X-Git-Tag: 2.1.0_Beta1~373 X-Git-Url: https://git.sesse.net/?a=commitdiff_plain;h=8873ecaf6816636f925224bcc3d581f24e902676;p=casparcg * Extracted module startup from server.cpp to a generated included_modules.h. * Each module CMakeLists.txt adds itself to included_modules.h, so if a project is not built under for example linux included_modules.h will not try to include the flash module. --- diff --git a/.gitignore b/.gitignore index f3cc6864a..1eeef3fa2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /version.h +/shell/included_modules.h /unit-test/bin /unit-test/tmp diff --git a/CMakeLists.txt b/CMakeLists.txt index 5a1d576b6..bb6d853cc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -76,10 +76,46 @@ endif () cmake_policy(SET CMP0045 OLD) include(CMake/PrecompiledHeader.cmake) +set(CASPARCG_MODULE_INCLUDE_STATEMENTS "" CACHE INTERNAL "") +set(CASPARCG_MODULE_INIT_STATEMENTS "" CACHE INTERNAL "") +set(CASPARCG_MODULE_UNINIT_STATEMENTS "" CACHE INTERNAL "") +set(CASPARCG_MODULE_PROJECTS "" CACHE INTERNAL "") + +function(casparcg_add_include_statement HEADER_FILE_TO_INCLUDE) + set(CASPARCG_MODULE_INCLUDE_STATEMENTS "${CASPARCG_MODULE_INCLUDE_STATEMENTS}" + "#include <${HEADER_FILE_TO_INCLUDE}>" + CACHE INTERNAL "") +endfunction() + +function(casparcg_add_init_statement INIT_FUNCTION_NAME NAME_TO_LOG) + set(CASPARCG_MODULE_INIT_STATEMENTS "${CASPARCG_MODULE_INIT_STATEMENTS}" + " ${INIT_FUNCTION_NAME}(dependencies)\;" + " CASPAR_LOG(info) << L\"Initialized ${NAME_TO_LOG} module.\"\;" + "" + CACHE INTERNAL "") +endfunction() + +function(casparcg_add_uninit_statement UNINIT_FUNCTION_NAME) + set(CASPARCG_MODULE_UNINIT_STATEMENTS "${CASPARCG_MODULE_UNINIT_STATEMENTS}" + " ${UNINIT_FUNCTION_NAME}()\;" + CACHE INTERNAL "") +endfunction() + +function(casparcg_add_module_project PROJECT) + set(CASPARCG_MODULE_PROJECTS "${CASPARCG_MODULE_PROJECTS}" "${PROJECT}" CACHE INTERNAL "") +endfunction() + +# http://stackoverflow.com/questions/7172670/best-shortest-way-to-join-a-list-in-cmake +function(join_list VALUES GLUE OUTPUT) + string (REGEX REPLACE "([^\\]|^);" "\\1${GLUE}" _TMP_STR "${VALUES}") + string (REGEX REPLACE "[\\](.)" "\\1" _TMP_STR "${_TMP_STR}") #fixes escaping + set (${OUTPUT} "${_TMP_STR}" PARENT_SCOPE) +endfunction() + add_subdirectory(accelerator) add_subdirectory(common) add_subdirectory(core) add_subdirectory(modules) + add_subdirectory(protocol) add_subdirectory(shell) - diff --git a/core/CMakeLists.txt b/core/CMakeLists.txt index 8978b45ce..90940807f 100644 --- a/core/CMakeLists.txt +++ b/core/CMakeLists.txt @@ -109,6 +109,7 @@ set(HEADERS producer/stage.h producer/variable.h + module_dependencies.h system_info_provider.h StdAfx.h thumbnail_generator.h diff --git a/core/module_dependencies.h b/core/module_dependencies.h new file mode 100644 index 000000000..d37ececef --- /dev/null +++ b/core/module_dependencies.h @@ -0,0 +1,49 @@ +/* +* Copyright (c) 2011 Sveriges Television AB +* +* This file is part of CasparCG (www.casparcg.com). +* +* CasparCG is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 3 of the License, or +* (at your option) any later version. +* +* CasparCG is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with CasparCG. If not, see . +* +* Author: Helge Norberg, helge.norberg@svt.se +*/ + +#pragma once + +#include + +#include "system_info_provider.h" +#include "producer/cg_proxy.h" +#include "producer/media_info/media_info_repository.h" + +namespace caspar { namespace core { + +struct module_dependencies +{ + const spl::shared_ptr system_info_provider_repo; + const spl::shared_ptr cg_registry; + const spl::shared_ptr media_info_repo; + + module_dependencies( + spl::shared_ptr system_info_provider_repo, + spl::shared_ptr cg_registry, + spl::shared_ptr media_info_repo) + : system_info_provider_repo(std::move(system_info_provider_repo)) + , cg_registry(std::move(cg_registry)) + , media_info_repo(std::move(media_info_repo)) + { + } +}; + +}} diff --git a/modules/CMakeLists.txt b/modules/CMakeLists.txt index 17216bbcf..f87dd447d 100644 --- a/modules/CMakeLists.txt +++ b/modules/CMakeLists.txt @@ -1,19 +1,21 @@ cmake_minimum_required (VERSION 2.6) project ("modules") +add_subdirectory(ffmpeg) + if (MSVC) add_subdirectory(bluefish) add_subdirectory(decklink) + add_subdirectory(oal) + add_subdirectory(screen) endif () -add_subdirectory(ffmpeg) +add_subdirectory(image) if (MSVC) add_subdirectory(flash) - add_subdirectory(image) - add_subdirectory(oal) add_subdirectory(psd) - add_subdirectory(reroute) - add_subdirectory(screen) endif () +add_subdirectory(reroute) + diff --git a/modules/bluefish/CMakeLists.txt b/modules/bluefish/CMakeLists.txt index 790d7c281..0551dd056 100644 --- a/modules/bluefish/CMakeLists.txt +++ b/modules/bluefish/CMakeLists.txt @@ -35,3 +35,7 @@ source_group(sources ./*) source_group(sources\\consumer consumer/*) target_link_libraries(bluefish common core) + +casparcg_add_include_statement("modules/bluefish/bluefish.h") +casparcg_add_init_statement("bluefish::init" "bluefish") +casparcg_add_module_project("bluefish") diff --git a/modules/bluefish/bluefish.cpp b/modules/bluefish/bluefish.cpp index 0f897b829..34a83a33f 100644 --- a/modules/bluefish/bluefish.cpp +++ b/modules/bluefish/bluefish.cpp @@ -76,7 +76,7 @@ std::vector device_list() return devices; } -void init(const spl::shared_ptr& repo) +void init(core::module_dependencies dependencies) { try { @@ -86,7 +86,7 @@ void init(const spl::shared_ptr& repo) core::register_consumer_factory(create_consumer); core::register_preconfigured_consumer_factory(L"bluefish", create_preconfigured_consumer); - repo->register_system_info_provider([](boost::property_tree::wptree& info) + dependencies.system_info_provider_repo->register_system_info_provider([](boost::property_tree::wptree& info) { info.add(L"system.bluefish.version", version()); diff --git a/modules/bluefish/bluefish.h b/modules/bluefish/bluefish.h index 390f5dec4..b23d1ec70 100644 --- a/modules/bluefish/bluefish.h +++ b/modules/bluefish/bluefish.h @@ -21,20 +21,10 @@ #pragma once -#include -#include +#include -#include +namespace caspar { namespace bluefish { -namespace caspar { -namespace core { +void init(core::module_dependencies dependencies); -class system_info_provider_repository; - -} - -namespace bluefish { - -void init(const spl::shared_ptr& repo); - -}} \ No newline at end of file +}} diff --git a/modules/decklink/CMakeLists.txt b/modules/decklink/CMakeLists.txt index 632ccd9ef..1b9cf2ac4 100644 --- a/modules/decklink/CMakeLists.txt +++ b/modules/decklink/CMakeLists.txt @@ -43,3 +43,7 @@ source_group(sources\\interop interop/*) source_group(sources\\producer producer/*) target_link_libraries(decklink common core ffmpeg) + +casparcg_add_include_statement("modules/decklink/decklink.h") +casparcg_add_init_statement("decklink::init" "decklink") +casparcg_add_module_project("decklink") diff --git a/modules/decklink/decklink.cpp b/modules/decklink/decklink.cpp index ca2e41fe6..95d7a70c1 100644 --- a/modules/decklink/decklink.cpp +++ b/modules/decklink/decklink.cpp @@ -98,7 +98,7 @@ std::vector device_list() return devices; } -void init(const spl::shared_ptr& repo) +void init(core::module_dependencies dependencies) { struct co_init { @@ -113,7 +113,7 @@ void init(const spl::shared_ptr& repo) core::register_consumer_factory(create_consumer); core::register_preconfigured_consumer_factory(L"decklink", create_preconfigured_consumer); core::register_producer_factory(create_producer); - repo->register_system_info_provider([](boost::property_tree::wptree& info) + dependencies.system_info_provider_repo->register_system_info_provider([](boost::property_tree::wptree& info) { info.add(L"system.decklink.version", version()); @@ -122,4 +122,4 @@ void init(const spl::shared_ptr& repo) }); } -}} \ No newline at end of file +}} diff --git a/modules/decklink/decklink.h b/modules/decklink/decklink.h index 060a9ca6f..4231e5c16 100644 --- a/modules/decklink/decklink.h +++ b/modules/decklink/decklink.h @@ -21,20 +21,10 @@ #pragma once -#include -#include +#include -#include +namespace caspar { namespace decklink { -namespace caspar { -namespace core { +void init(core::module_dependencies dependencies); -class system_info_provider_repository; - -} - -namespace decklink { - -void init(const spl::shared_ptr& repo); - -}} \ No newline at end of file +}} diff --git a/modules/ffmpeg/CMakeLists.txt b/modules/ffmpeg/CMakeLists.txt index 65ecbdf9a..392a13273 100644 --- a/modules/ffmpeg/CMakeLists.txt +++ b/modules/ffmpeg/CMakeLists.txt @@ -72,3 +72,8 @@ source_group(sources\\producer\\video producer/video/*) source_group(sources\\producer producer/*) target_link_libraries(ffmpeg common core) + +casparcg_add_include_statement("modules/ffmpeg/ffmpeg.h") +casparcg_add_init_statement("ffmpeg::init" "ffmpeg") +casparcg_add_uninit_statement("ffmpeg::uninit") +casparcg_add_module_project("ffmpeg") diff --git a/modules/ffmpeg/ffmpeg.cpp b/modules/ffmpeg/ffmpeg.cpp index 871d984b2..a29d9395d 100644 --- a/modules/ffmpeg/ffmpeg.cpp +++ b/modules/ffmpeg/ffmpeg.cpp @@ -235,9 +235,7 @@ std::wstring swscale_version() return make_version(::swscale_version()); } -void init( - const spl::shared_ptr& media_info_repo, - const spl::shared_ptr& system_info_repo) +void init(core::module_dependencies dependencies) { av_lockmgr_register(ffmpeg_lock_callback); av_log_set_callback(log_callback); @@ -252,7 +250,7 @@ void init( core::register_preconfigured_consumer_factory(L"file", create_preconfigured_consumer); core::register_producer_factory(create_producer); - media_info_repo->register_extractor( + dependencies.media_info_repo->register_extractor( [](const std::wstring& file, const std::wstring& extension, core::media_info& info) -> bool { // TODO: merge thumbnail generation from 2.0 @@ -270,7 +268,7 @@ void init( return try_get_duration(file, info.duration, info.time_base); }); - system_info_repo->register_system_info_provider([](boost::property_tree::wptree& info) + dependencies.system_info_provider_repo->register_system_info_provider([](boost::property_tree::wptree& info) { info.add(L"system.ffmpeg.avcodec", avcodec_version()); info.add(L"system.ffmpeg.avformat", avformat_version()); diff --git a/modules/ffmpeg/ffmpeg.h b/modules/ffmpeg/ffmpeg.h index e96e8b067..e47e74cf4 100644 --- a/modules/ffmpeg/ffmpeg.h +++ b/modules/ffmpeg/ffmpeg.h @@ -22,22 +22,11 @@ #pragma once #include +#include -#include +namespace caspar { namespace ffmpeg { -namespace caspar { -namespace core { - -struct media_info_repository; -class system_info_provider_repository; - -} - -namespace ffmpeg { - -void init( - const spl::shared_ptr& media_info_repo, - const spl::shared_ptr& system_info_repo); +void init(core::module_dependencies dependencies); void uninit(); -}} \ No newline at end of file +}} diff --git a/modules/flash/CMakeLists.txt b/modules/flash/CMakeLists.txt index 75a641e10..40b951231 100644 --- a/modules/flash/CMakeLists.txt +++ b/modules/flash/CMakeLists.txt @@ -44,3 +44,7 @@ source_group(sources\\util util/*) source_group(sources ./*) target_link_libraries(flash common core) + +casparcg_add_include_statement("modules/flash/flash.h") +casparcg_add_init_statement("flash::init" "flash") +casparcg_add_module_project("flash") diff --git a/modules/flash/flash.cpp b/modules/flash/flash.cpp index 0a415cc54..e648e7045 100644 --- a/modules/flash/flash.cpp +++ b/modules/flash/flash.cpp @@ -48,9 +48,9 @@ namespace caspar { namespace flash { std::wstring version(); std::wstring cg_version(); -std::wstring get_absolute(const std::wstring& filename) +std::wstring get_absolute(const std::wstring& base_folder, const std::wstring& filename) { - return (boost::filesystem::path(env::template_folder()) / filename).wstring(); + return (boost::filesystem::path(base_folder) / filename).wstring(); } class flash_cg_proxy : public core::cg_proxy, boost::noncopyable @@ -164,6 +164,9 @@ spl::shared_ptr create_ct_producer( const core::video_format_desc& format_desc, const std::vector& params) { + if (params.empty() || !boost::filesystem::exists(get_absolute(env::media_folder(), params.at(0)) + L".ct")) + return core::frame_producer::empty(); + auto flash_producer = flash::create_producer(frame_factory, format_desc, {}); auto producer = flash_producer; flash_cg_proxy(producer, env::media_folder()).add(0, params[0], true, L"", L""); @@ -171,14 +174,11 @@ spl::shared_ptr create_ct_producer( return producer; } -void init( - const spl::shared_ptr& media_info_repo, - const spl::shared_ptr& info_provider_repo, - const spl::shared_ptr& cg_registry) +void init(core::module_dependencies dependencies) { core::register_producer_factory(create_ct_producer); core::register_producer_factory(create_swf_producer); - media_info_repo->register_extractor([](const std::wstring& file, const std::wstring& extension, core::media_info& info) + dependencies.media_info_repo->register_extractor([](const std::wstring& file, const std::wstring& extension, core::media_info& info) { if (extension != L".CT" && extension != L".SWF") return false; @@ -187,18 +187,18 @@ void init( return true; }); - info_provider_repo->register_system_info_provider([](boost::property_tree::wptree& info) + dependencies.system_info_provider_repo->register_system_info_provider([](boost::property_tree::wptree& info) { info.add(L"system.flash", version()); }); - info_provider_repo->register_version_provider(L"FLASH", &version); - info_provider_repo->register_version_provider(L"TEMPLATEHOST", &cg_version); - cg_registry->register_cg_producer( + dependencies.system_info_provider_repo->register_version_provider(L"FLASH", &version); + dependencies.system_info_provider_repo->register_version_provider(L"TEMPLATEHOST", &cg_version); + dependencies.cg_registry->register_cg_producer( L"flash", { L".ft", L".ct" }, [](const std::wstring& filename) { - return read_template_meta_info(get_absolute(filename) + L".ft"); + return read_template_meta_info(get_absolute(env::template_folder(), filename) + L".ft"); }, [](const spl::shared_ptr& producer) { diff --git a/modules/flash/flash.h b/modules/flash/flash.h index b57278bf4..0dbc582d1 100644 --- a/modules/flash/flash.h +++ b/modules/flash/flash.h @@ -21,23 +21,10 @@ #pragma once -#include +#include -namespace caspar { +namespace caspar { namespace flash { -namespace core { +void init(core::module_dependencies dependencies); -struct media_info_repository; -class system_info_provider_repository; -class cg_producer_registry; - -} - -namespace flash { - -void init( - const spl::shared_ptr& media_info_repo, - const spl::shared_ptr& info_provider_repo, - const spl::shared_ptr& cg_registry); - -}} \ No newline at end of file +}} diff --git a/modules/image/CMakeLists.txt b/modules/image/CMakeLists.txt index c68a05db5..504d9f777 100644 --- a/modules/image/CMakeLists.txt +++ b/modules/image/CMakeLists.txt @@ -42,3 +42,8 @@ source_group(sources\\util util/*) source_group(sources ./*) target_link_libraries(image common core) + +casparcg_add_include_statement("modules/image/image.h") +casparcg_add_init_statement("image::init" "image") +casparcg_add_uninit_statement("image::uninit") +casparcg_add_module_project("image") diff --git a/modules/image/image.cpp b/modules/image/image.cpp index 7146feaca..66c208205 100644 --- a/modules/image/image.cpp +++ b/modules/image/image.cpp @@ -44,16 +44,14 @@ std::wstring version() return u16(FreeImage_GetVersion()); } -void init( - const spl::shared_ptr& repo, - const spl::shared_ptr& system_info_repo) +void init(core::module_dependencies dependencies) { FreeImage_Initialise(); core::register_producer_factory(create_scroll_producer); core::register_producer_factory(create_producer); core::register_thumbnail_producer_factory(create_thumbnail_producer); core::register_consumer_factory(create_consumer); - repo->register_extractor([](const std::wstring& file, const std::wstring& extension, core::media_info& info) + dependencies.media_info_repo->register_extractor([](const std::wstring& file, const std::wstring& extension, core::media_info& info) { if (extension == L".TGA" || extension == L".COL" @@ -70,7 +68,7 @@ void init( return false; }); - system_info_repo->register_system_info_provider([](boost::property_tree::wptree& info) + dependencies.system_info_provider_repo->register_system_info_provider([](boost::property_tree::wptree& info) { info.add(L"system.freeimage", version()); }); diff --git a/modules/image/image.h b/modules/image/image.h index 888865052..55643158d 100644 --- a/modules/image/image.h +++ b/modules/image/image.h @@ -21,24 +21,11 @@ #pragma once -#include +#include -#include +namespace caspar { namespace image { -namespace caspar { - -namespace core { - -struct media_info_repository; -class system_info_provider_repository; - -} - -namespace image { - -void init( - const spl::shared_ptr& repo, - const spl::shared_ptr& system_info_repo); +void init(core::module_dependencies dependencies); void uninit(); }} diff --git a/modules/oal/CMakeLists.txt b/modules/oal/CMakeLists.txt index 236ce16f9..f534a25d8 100644 --- a/modules/oal/CMakeLists.txt +++ b/modules/oal/CMakeLists.txt @@ -26,3 +26,7 @@ source_group(sources\\consumer consumer/*) source_group(sources ./*) target_link_libraries(oal common core) + +casparcg_add_include_statement("modules/oal/oal.h") +casparcg_add_init_statement("oal::init" "oal") +casparcg_add_module_project("oal") diff --git a/modules/oal/oal.cpp b/modules/oal/oal.cpp index f72764624..77321f9d2 100644 --- a/modules/oal/oal.cpp +++ b/modules/oal/oal.cpp @@ -27,10 +27,10 @@ namespace caspar { namespace oal { -void init() +void init(core::module_dependencies dependencies) { core::register_consumer_factory(create_consumer); core::register_preconfigured_consumer_factory(L"system-audio", create_preconfigured_consumer); } -}} \ No newline at end of file +}} diff --git a/modules/oal/oal.h b/modules/oal/oal.h index 59cd93dab..3f0392b79 100644 --- a/modules/oal/oal.h +++ b/modules/oal/oal.h @@ -21,8 +21,10 @@ #pragma once +#include + namespace caspar { namespace oal { -void init(); +void init(core::module_dependencies dependencies); -}} \ No newline at end of file +}} diff --git a/modules/psd/CMakeLists.txt b/modules/psd/CMakeLists.txt index dc98daaec..93a36f37a 100644 --- a/modules/psd/CMakeLists.txt +++ b/modules/psd/CMakeLists.txt @@ -39,3 +39,7 @@ source_group(sources\\util util/*) source_group(sources ./*) target_link_libraries(psd common core) + +casparcg_add_include_statement("modules/psd/psd_scene_producer.h") +casparcg_add_init_statement("psd::init" "psd") +casparcg_add_module_project("psd") diff --git a/modules/psd/psd_scene_producer.cpp b/modules/psd/psd_scene_producer.cpp index 6e4e9d5f3..b0070aef5 100644 --- a/modules/psd/psd_scene_producer.cpp +++ b/modules/psd/psd_scene_producer.cpp @@ -46,11 +46,6 @@ namespace caspar { namespace psd { -void init() -{ - core::register_producer_factory(create_psd_scene_producer); -} - core::text::text_info get_text_info(const boost::property_tree::wptree& ptree) { core::text::text_info result; @@ -396,4 +391,9 @@ spl::shared_ptr create_psd_scene_producer(const spl::share return root; } +void init(core::module_dependencies dependencies) +{ + core::register_producer_factory(create_psd_scene_producer); +} + }} \ No newline at end of file diff --git a/modules/psd/psd_scene_producer.h b/modules/psd/psd_scene_producer.h index 882cc5a8f..f0c27f00b 100644 --- a/modules/psd/psd_scene_producer.h +++ b/modules/psd/psd_scene_producer.h @@ -21,16 +21,10 @@ #pragma once -#include - -#include -#include -#include +#include namespace caspar { namespace psd { -void init(); - -spl::shared_ptr create_psd_scene_producer(const spl::shared_ptr& frame_factory, const core::video_format_desc& format_desc, const std::vector& params); +void init(core::module_dependencies dependencies); -}} \ No newline at end of file +}} diff --git a/modules/screen/CMakeLists.txt b/modules/screen/CMakeLists.txt index 417f78e2d..dece08dae 100644 --- a/modules/screen/CMakeLists.txt +++ b/modules/screen/CMakeLists.txt @@ -29,3 +29,7 @@ source_group(sources\\consumer consumer/*) source_group(sources ./*) target_link_libraries(screen common core ffmpeg) + +casparcg_add_include_statement("modules/screen/screen.h") +casparcg_add_init_statement("screen::init" "screen") +casparcg_add_module_project("screen") diff --git a/modules/screen/screen.cpp b/modules/screen/screen.cpp index 0e6e90d74..15a7ca12a 100644 --- a/modules/screen/screen.cpp +++ b/modules/screen/screen.cpp @@ -27,10 +27,10 @@ namespace caspar { namespace screen { -void init() +void init(core::module_dependencies dependencies) { core::register_consumer_factory(create_consumer); core::register_preconfigured_consumer_factory(L"screen", create_preconfigured_consumer); } -}} \ No newline at end of file +}} diff --git a/modules/screen/screen.h b/modules/screen/screen.h index a112b657e..85f760029 100644 --- a/modules/screen/screen.h +++ b/modules/screen/screen.h @@ -21,8 +21,10 @@ #pragma once +#include + namespace caspar { namespace screen { -void init(); +void init(core::module_dependencies dependencies); -}} \ No newline at end of file +}} diff --git a/shell/CMakeLists.txt b/shell/CMakeLists.txt index f39048b68..4919abd2e 100644 --- a/shell/CMakeLists.txt +++ b/shell/CMakeLists.txt @@ -1,6 +1,11 @@ cmake_minimum_required (VERSION 2.6) project (shell) +join_list("${CASPARCG_MODULE_INCLUDE_STATEMENTS}" "\n" CASPARCG_MODULE_INCLUDE_STATEMENTS) +join_list("${CASPARCG_MODULE_INIT_STATEMENTS}" "\n" CASPARCG_MODULE_INIT_STATEMENTS) +join_list("${CASPARCG_MODULE_UNINIT_STATEMENTS}" "\n" CASPARCG_MODULE_UNINIT_STATEMENTS) +configure_file("${PROJECT_SOURCE_DIR}/included_modules.tmpl" "${PROJECT_SOURCE_DIR}/included_modules.h") + if (MSVC) set(OS_SPECIFIC_SOURCES resource.h @@ -16,6 +21,7 @@ set(SOURCES stdafx.cpp ) set(HEADERS + included_modules.h server.h stdafx.h ) @@ -36,15 +42,8 @@ target_link_libraries(casparcg core protocol - bluefish - decklink - ffmpeg - flash - image - oal - psd + "${CASPARCG_MODULE_PROJECTS}" reroute - screen alibcof64.lib jpeg.lib diff --git a/shell/included_modules.tmpl b/shell/included_modules.tmpl new file mode 100644 index 000000000..e7863608d --- /dev/null +++ b/shell/included_modules.tmpl @@ -0,0 +1,21 @@ +/* + * Generated file. + */ + +#pragma once + +#include + +#include +${CASPARCG_MODULE_INCLUDE_STATEMENTS} + +namespace caspar { + +void initialize_modules(const core::module_dependencies& dependencies) +{${CASPARCG_MODULE_INIT_STATEMENTS}} + +void uninitialize_modules() +{${CASPARCG_MODULE_UNINIT_STATEMENTS} +} + +} diff --git a/shell/server.cpp b/shell/server.cpp index 072cd82e1..aadb90dc4 100644 --- a/shell/server.cpp +++ b/shell/server.cpp @@ -21,6 +21,7 @@ #include "stdafx.h" #include "server.h" +#include "included_modules.h" #include @@ -48,15 +49,7 @@ #include #include -#include -#include -#include -#include -#include -#include -#include #include -#include #include #include @@ -110,29 +103,10 @@ struct server::impl : boost::noncopyable core::diagnostics::osd::register_sink(); diag_subject_->attach_parent(monitor_subject_); - ffmpeg::init(media_info_repo_, system_info_provider_repo_); - CASPAR_LOG(info) << L"Initialized ffmpeg module."; - - bluefish::init(system_info_provider_repo_); - CASPAR_LOG(info) << L"Initialized bluefish module."; - - decklink::init(system_info_provider_repo_); - CASPAR_LOG(info) << L"Initialized decklink module."; - - oal::init(); - CASPAR_LOG(info) << L"Initialized oal module."; - - screen::init(); - CASPAR_LOG(info) << L"Initialized ogl module."; - - image::init(media_info_repo_, system_info_provider_repo_); - CASPAR_LOG(info) << L"Initialized image module."; - - flash::init(media_info_repo_, system_info_provider_repo_, cg_registry_); - CASPAR_LOG(info) << L"Initialized flash module."; - - psd::init(); - CASPAR_LOG(info) << L"Initialized psd module."; + initialize_modules(module_dependencies( + system_info_provider_repo_, + cg_registry_, + media_info_repo_)); core::text::init(); @@ -176,8 +150,7 @@ struct server::impl : boost::noncopyable boost::this_thread::sleep(boost::posix_time::milliseconds(500)); //Sleep(500); // HACK: Wait for asynchronous destruction of producers and consumers. - image::uninit(); - ffmpeg::uninit(); + uninitialize_modules(); core::diagnostics::osd::shutdown(); }