diff --git a/CMakeLists.txt b/CMakeLists.txt index f9e65505..63f4ee5a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -7,11 +7,11 @@ set(LIBCEC_VERSION_PATCH 0) # cec-client add_subdirectory(src/cec-client) -add_dependencies(cec-client cec) +add_dependencies(cec-client cec-shared) # cecc-client add_subdirectory(src/cecc-client) -add_dependencies(cecc-client cec) +add_dependencies(cecc-client cec-shared) # pyCecClient add_subdirectory(src/pyCecClient) diff --git a/include/cecc.h b/include/cecc.h index c63611c7..4eb05713 100644 --- a/include/cecc.h +++ b/include/cecc.h @@ -55,7 +55,7 @@ extern DECLSPEC void libcec_close(libcec_connection_t connection); extern DECLSPEC void libcec_clear_configuration(CEC_NAMESPACE libcec_configuration* configuration); #if CEC_LIB_VERSION_MAJOR >= 5 extern DECLSPEC int libcec_set_callbacks(libcec_connection_t connection, CEC_NAMESPACE ICECCallbacks* callbacks, void* cbParam); -extern DECLSPEC int libcec_disabled_callbacks(libcec_connection_t connection); +extern DECLSPEC int libcec_disable_callbacks(libcec_connection_t connection); #else extern DECLSPEC int libcec_enable_callbacks(libcec_connection_t connection, void* cbParam, CEC_NAMESPACE ICECCallbacks* callbacks); #endif diff --git a/include/ceccloader.h b/include/ceccloader.h index 6dd631fb..1b9dafef 100644 --- a/include/ceccloader.h +++ b/include/ceccloader.h @@ -63,11 +63,17 @@ static void* libcecc_resolve(void* lib, const char* name); typedef struct { libcec_connection_t connection; libcecc_lib_instance_t lib_instance; + libcec_connection_t (CDECL *initialise)(CEC_NAMESPACE libcec_configuration* configuration); void (CDECL *destroy)(libcec_connection_t connection); int (CDECL *open)(libcec_connection_t connection, const char* strPort, uint32_t iTimeout); void (CDECL *close)(libcec_connection_t connection); void (CDECL *clear_configuration)(CEC_NAMESPACE libcec_configuration* configuration); +#if CEC_LIB_VERSION_MAJOR >= 5 + int (CDECL *set_callbacks)(libcec_connection_t connection, CEC_NAMESPACE ICECCallbacks* callbacks, void* cbParam); + int (CDECL *disable_callbacks)(libcec_connection_t connection); +#else int (CDECL *enable_callbacks)(libcec_connection_t connection, void* cbParam, CEC_NAMESPACE ICECCallbacks* callbacks); +#endif int8_t (CDECL *find_adapters)(libcec_connection_t connection, CEC_NAMESPACE cec_adapter* deviceList, uint8_t iBufSize, const char* strDevicePath); int (CDECL *ping_adapters)(libcec_connection_t connection); int (CDECL *start_bootloader)(libcec_connection_t connection); @@ -97,7 +103,9 @@ typedef struct { int (CDECL *set_hdmi_port)(libcec_connection_t connection, CEC_NAMESPACE cec_logical_address baseDevice, uint8_t iPort); int (CDECL *volume_up)(libcec_connection_t connection, int bSendRelease); int (CDECL *volume_down)(libcec_connection_t connection, int bSendRelease); +#if CEC_LIB_VERSION_MAJOR >= 5 int (CDECL *mute_audio)(libcec_connection_t connection, int bSendRelease); +#endif int (CDECL *send_keypress)(libcec_connection_t connection, CEC_NAMESPACE cec_logical_address iDestination, CEC_NAMESPACE cec_user_control_code key, int bWait); int (CDECL *send_key_release)(libcec_connection_t connection, CEC_NAMESPACE cec_logical_address iDestination, int bWait); int (CDECL *get_device_osd_name)(libcec_connection_t connection, CEC_NAMESPACE cec_logical_address iAddress, CEC_NAMESPACE cec_osd_name name); @@ -105,8 +113,12 @@ typedef struct { int (CDECL *set_stream_path_physical)(libcec_connection_t connection, uint16_t iPhysicalAddress); CEC_NAMESPACE cec_logical_addresses (CDECL *get_logical_addresses)(libcec_connection_t connection); int (CDECL *get_current_configuration)(libcec_connection_t connection, CEC_NAMESPACE libcec_configuration* configuration); +#if CEC_LIB_VERSION_MAJOR >= 5 + int (CDECL *can_save_configuration)(libcec_connection_t connection); +#else int (CDECL *can_persist_configuration)(libcec_connection_t connection); int (CDECL *persist_configuration)(libcec_connection_t connection, CEC_NAMESPACE libcec_configuration* configuration); +#endif int (CDECL *set_configuration)(libcec_connection_t connection, const CEC_NAMESPACE libcec_configuration* configuration); void (CDECL *rescan_devices)(libcec_connection_t connection); int (CDECL *is_libcec_active_source)(libcec_connection_t connection); @@ -140,11 +152,17 @@ static int libcecc_resolve_all(void* lib, libcec_interface_t* iface) if (!lib || !iface) return -1; + _libcecc_resolve(lib, iface->initialise, "libcec_initialise", libcec_connection_t(CDECL *)(CEC_NAMESPACE libcec_configuration*)); _libcecc_resolve(lib, iface->destroy, "libcec_destroy", void(CDECL *)(libcec_connection_t)); _libcecc_resolve(lib, iface->open, "libcec_open", int(CDECL *)(libcec_connection_t, const char*, uint32_t)); _libcecc_resolve(lib, iface->close, "libcec_close", void(CDECL *)(libcec_connection_t)); _libcecc_resolve(lib, iface->clear_configuration, "libcec_clear_configuration", void(CDECL *)(CEC_NAMESPACE libcec_configuration*)); +#if CEC_LIB_VERSION_MAJOR >= 5 + _libcecc_resolve(lib, iface->set_callbacks, "libcec_set_callbacks", int(CDECL *)(libcec_connection_t, CEC_NAMESPACE ICECCallbacks*, void*)); + _libcecc_resolve(lib, iface->disable_callbacks, "libcec_disable_callbacks", int(CDECL *)(libcec_connection_t)); +#else _libcecc_resolve(lib, iface->enable_callbacks, "libcec_enable_callbacks", int(CDECL *)(libcec_connection_t, void*, CEC_NAMESPACE ICECCallbacks*)); +#endif _libcecc_resolve(lib, iface->find_adapters, "libcec_find_adapters", int8_t(CDECL *)(libcec_connection_t, CEC_NAMESPACE cec_adapter*, uint8_t, const char*)); _libcecc_resolve(lib, iface->ping_adapters, "libcec_ping_adapters", int(CDECL *)(libcec_connection_t)); _libcecc_resolve(lib, iface->start_bootloader, "libcec_start_bootloader", int(CDECL *)(libcec_connection_t)); @@ -174,7 +192,9 @@ static int libcecc_resolve_all(void* lib, libcec_interface_t* iface) _libcecc_resolve(lib, iface->set_hdmi_port, "libcec_set_hdmi_port", int(CDECL *)(libcec_connection_t, CEC_NAMESPACE cec_logical_address, uint8_t)); _libcecc_resolve(lib, iface->volume_up, "libcec_volume_up", int(CDECL *)(libcec_connection_t, int)); _libcecc_resolve(lib, iface->volume_down, "libcec_volume_down", int(CDECL *)(libcec_connection_t, int)); +#if CEC_LIB_VERSION_MAJOR >= 5 _libcecc_resolve(lib, iface->mute_audio, "libcec_mute_audio", int(CDECL *)(libcec_connection_t, int)); +#endif _libcecc_resolve(lib, iface->send_keypress, "libcec_send_keypress", int(CDECL *)(libcec_connection_t, CEC_NAMESPACE cec_logical_address, CEC_NAMESPACE cec_user_control_code, int)); _libcecc_resolve(lib, iface->send_key_release, "libcec_send_key_release", int(CDECL *)(libcec_connection_t, CEC_NAMESPACE cec_logical_address, int)); _libcecc_resolve(lib, iface->get_device_osd_name, "libcec_get_device_osd_name", int(CDECL *)(libcec_connection_t, CEC_NAMESPACE cec_logical_address, CEC_NAMESPACE cec_osd_name)); @@ -182,8 +202,12 @@ static int libcecc_resolve_all(void* lib, libcec_interface_t* iface) _libcecc_resolve(lib, iface->set_stream_path_physical, "libcec_set_stream_path_physical", int(CDECL *)(libcec_connection_t, uint16_t)); _libcecc_resolve(lib, iface->get_logical_addresses, "libcec_get_logical_addresses", CEC_NAMESPACE cec_logical_addresses(CDECL *)(libcec_connection_t)); _libcecc_resolve(lib, iface->get_current_configuration, "libcec_get_current_configuration", int(CDECL *)(libcec_connection_t, CEC_NAMESPACE libcec_configuration*)); +#if CEC_LIB_VERSION_MAJOR >= 5 + _libcecc_resolve(lib, iface->can_save_configuration, "libcec_can_save_configuration", int(CDECL *)(libcec_connection_t)); +#else _libcecc_resolve(lib, iface->can_persist_configuration, "libcec_can_persist_configuration", int(CDECL *)(libcec_connection_t)); _libcecc_resolve(lib, iface->persist_configuration, "libcec_persist_configuration", int(CDECL *)(libcec_connection_t, CEC_NAMESPACE libcec_configuration*)); +#endif _libcecc_resolve(lib, iface->set_configuration, "libcec_set_configuration", int(CDECL *)(libcec_connection_t, const CEC_NAMESPACE libcec_configuration*)); _libcecc_resolve(lib, iface->rescan_devices, "libcec_rescan_devices", void(CDECL *)(libcec_connection_t)); _libcecc_resolve(lib, iface->is_libcec_active_source, "libcec_is_libcec_active_source", int(CDECL *)(libcec_connection_t)); diff --git a/src/cec-client/CMakeLists.txt b/src/cec-client/CMakeLists.txt index ad28f961..c24645eb 100644 --- a/src/cec-client/CMakeLists.txt +++ b/src/cec-client/CMakeLists.txt @@ -85,5 +85,5 @@ if (WIN32) DESTINATION .) else() install(TARGETS cec-client - DESTINATION bin) + DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() diff --git a/src/cecc-client/CMakeLists.txt b/src/cecc-client/CMakeLists.txt index 6f36d6df..e998ebb7 100644 --- a/src/cecc-client/CMakeLists.txt +++ b/src/cecc-client/CMakeLists.txt @@ -55,5 +55,5 @@ if (WIN32) DESTINATION .) else() install(TARGETS cecc-client - DESTINATION bin) + DESTINATION ${CMAKE_INSTALL_BINDIR}) endif() diff --git a/src/libcec/CMakeLists.txt b/src/libcec/CMakeLists.txt index e1d8dcb5..a6f876e3 100644 --- a/src/libcec/CMakeLists.txt +++ b/src/libcec/CMakeLists.txt @@ -186,18 +186,26 @@ install(FILES ${PROJECT_SOURCE_DIR}/../../include/cec.h ${PROJECT_SOURCE_DIR}/../../include/ceccloader.h ${PROJECT_SOURCE_DIR}/../../include/cectypes.h ${PROJECT_SOURCE_DIR}/../../include/version.h - DESTINATION include/libcec) + DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/libcec) # external dependencies include(cmake/LinkPlatformSupport.cmake) # libCEC shared target -add_library(cec SHARED ${CEC_SOURCES}) -install(TARGETS cec +set(libsrc ${CEC_SOURCES}) +add_library(libobj OBJECT ${libsrc}) +set_property(TARGET libobj PROPERTY POSITION_INDEPENDENT_CODE 1) +add_library(cec-shared SHARED $) +add_library(cec-static STATIC $) +install(TARGETS cec-shared cec-static DESTINATION ${LIB_DESTINATION}) -set_target_properties(cec PROPERTIES VERSION ${LIBCEC_VERSION_MAJOR}.${LIBCEC_VERSION_MINOR}.${LIBCEC_VERSION_PATCH} - SOVERSION ${LIBCEC_VERSION_MAJOR}) -target_link_libraries(cec ${cec_depends}) +set_target_properties(cec-shared PROPERTIES VERSION ${LIBCEC_VERSION_MAJOR}.${LIBCEC_VERSION_MINOR}.${LIBCEC_VERSION_PATCH} + SOVERSION ${LIBCEC_VERSION_MAJOR} + OUTPUT_NAME cec) +set_target_properties(cec-static PROPERTIES VERSION ${LIBCEC_VERSION_MAJOR}.${LIBCEC_VERSION_MINOR}.${LIBCEC_VERSION_PATCH} + OUTPUT_NAME cec) +target_link_libraries(cec-shared ${cec_depends}) +target_link_libraries(cec-static ${cec_depends}) if(WIN32) if (MSVC) diff --git a/src/libcec/cmake/CheckPlatformSupport.cmake b/src/libcec/cmake/CheckPlatformSupport.cmake index 62412c51..ba858c54 100644 --- a/src/libcec/cmake/CheckPlatformSupport.cmake +++ b/src/libcec/cmake/CheckPlatformSupport.cmake @@ -325,7 +325,7 @@ else() SET_SOURCE_FILES_PROPERTIES(libcec.i PROPERTIES CPLUSPLUS ON) set_property(SOURCE libcec.i PROPERTY SWIG_MODULE_NAME cec) SWIG_ADD_LIBRARY(pycec LANGUAGE python TYPE MODULE SOURCES libcec.i) - SWIG_LINK_LIBRARIES(${SWIG_MODULE_pycec_REAL_NAME} cec ${PYTHON_LIBRARIES}) + SWIG_LINK_LIBRARIES(${SWIG_MODULE_pycec_REAL_NAME} cec-shared ${PYTHON_LIBRARIES}) if (NOT WIN32) target_compile_options(pycec PUBLIC "-Wno-unused-parameter") endif() @@ -363,16 +363,16 @@ else() if (${PYTHON_MAJOR_VERSION} EQUAL 2) install(TARGETS ${SWIG_MODULE_pycec_REAL_NAME} - DESTINATION lib/python${PYTHON_VERSION}/${PYTHON_PKG_DIR}/${PYTHON_LIB_INSTALL_PATH}/cec) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/python${PYTHON_VERSION}/${PYTHON_PKG_DIR}/${PYTHON_LIB_INSTALL_PATH}/cec) install(FILES ${CMAKE_BINARY_DIR}/src/libcec/cec.py - DESTINATION lib/python${PYTHON_VERSION}/${PYTHON_PKG_DIR}) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/python${PYTHON_VERSION}/${PYTHON_PKG_DIR}) install(FILES ${CMAKE_SOURCE_DIR}/src/libcec/cmake/__init__.py - DESTINATION lib/python${PYTHON_VERSION}/${PYTHON_PKG_DIR}/cec) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/python${PYTHON_VERSION}/${PYTHON_PKG_DIR}/cec) else() install(TARGETS ${SWIG_MODULE_pycec_REAL_NAME} - DESTINATION lib/python${PYTHON_VERSION}/${PYTHON_PKG_DIR}/${PYTHON_LIB_INSTALL_PATH}) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/python${PYTHON_VERSION}/${PYTHON_PKG_DIR}/${PYTHON_LIB_INSTALL_PATH}) install(FILES ${CMAKE_BINARY_DIR}/src/libcec/cec.py - DESTINATION lib/python${PYTHON_VERSION}/${PYTHON_PKG_DIR}) + DESTINATION ${CMAKE_INSTALL_LIBDIR}/python${PYTHON_VERSION}/${PYTHON_PKG_DIR}) endif() endif() endif() diff --git a/src/pyCecClient/CMakeLists.txt b/src/pyCecClient/CMakeLists.txt index b50a0d3b..e6ebe4bf 100644 --- a/src/pyCecClient/CMakeLists.txt +++ b/src/pyCecClient/CMakeLists.txt @@ -1,6 +1,8 @@ cmake_minimum_required(VERSION 3.12.0) project(pyCecClient) +include(GNUInstallDirs) + # Python if(WIN32 AND "${MSVC_C_ARCHITECTURE_ID}" STREQUAL "X86") set(PYTHON_USE_VERSION 2) @@ -22,7 +24,7 @@ if(PYTHONLIBS_FOUND) DESTINATION python) else() install(PROGRAMS pyCecClient.py - DESTINATION bin + DESTINATION ${CMAKE_INSTALL_BINDIR} RENAME pyCecClient) endif() endif()