Jako że piszę obsługę sieci Tlen.pl w komunikatorze Empathy i chcę by było to zrobione jak należy, musiałem napisać coś na wzór Protocol Hooka z Tlena 6. Protocol Hook to wtyczka używana do podglądu wysyłanych i odbieranych stanz XML. Dzięki temu łatwiej jest podejrzeć jak działa owy protokół. Potrzebowałem podobnej wtyczki dla Tlena 7 i postanowiłem ją napisać. Używam jednak jedynie Linuksa a pod ten system nie dostaliśmy jeszcze oficjalnego SDK. Musiałem sobie z tym poradzić i udało się. Opisze mniej więcej jak skompilowałem przykładową wtyczkę dołączoną do windowsowego SDK.
Po pierwsze wchodzimy na forum Ekipy i pobieramy SDK dla Windowsa 7 stąd http://ekipa.tlen.pl/forum/index.php?showtopic=11752 .
Następnie rozpakowujemy je i wchodzimy do katalogu tlen7_sdk/plugins/sample_plugin. Usuwamy stamtąd plik CmakeCache.txt.
Teraz musimy wyedytować plik CmakeLists.txt.
Linia 10:
set (QT_RCC_EXECUTABLE ../../qt/bin/rcc.exe)
Zamieniamy na:
set (QT_RCC_EXECUTABLE rcc)
Następnie:
include_directories(
../../include
../../qt/include
../../qt/include/Qt
../../qt/include/QtCore
../../qt/include/QtXml
../../qt/include/QtGui
../../qt/include/QtNetwork
)
Ja zamieniłem to na:
include_directories(
/usr/include
/usr/include/qt4
/usr/include/qt4/Qt
/usr/include/qt4/QtCore
/usr/include/qt4/QtXml
/usr/include/qt4/QtGui
/usr/include/qt4/QtNetwork
/home/kkszysiu/Pulpit/tlen7_sdk/include
/home/kkszysiu/Pulpit/tlen7_sdk/include/plugin
)
Pierwszych kilku linijek nie muszę chyba tłumaczyć. Tam właśnie trzymam pliki nagłówkowe QT. Ostatnie dwie linijki to pliki nagłówkowe Tlena 7 których również potrzebujemy.
Linijkę:
link_directories(../../lib ../../qt/lib)
Zamieniamy na:
link_directories(/home/kkszysiu/Pulpit/tlen7_sdk/lib /home/kkszysiu/Pulpit/tlen7_sdk/qt/lib)
Musiałem jeszcze wywalić linię:
target_link_libraries(
sample_plugin
tlen_plugin
tlen_gui_context_menu
tlen_gui_chat_window
tlen_gui_chat_manager
tlen_data
${QT_QTCORE_LIB}
)
Prawdę mówiąc nie wiem dlaczego.
W terminalu przechodzimy do katalogu tlen7_sdk/plugins/sample_plugin i wklepujemy:
mkdir build
cd build
cmake ..
make
Jeśli nie dostaniemy żadnych błędów w katalogu build powinniśmy mieć plik sample_plugin.o2x, który jest naszą przykładową wtyczką. Kopiujemy ją do katalogu plugins w naszym tlenie i wygrywamy w życie :)
I na koniec mój przykładowy plik CmakeLists.txt:
project(tlen_sample_plugin)
cmake_minimum_required(VERSION 2.4.0)
if(COMMAND cmake_policy)
cmake_policy(SET CMP0003 OLD)
endif(COMMAND cmake_policy)
set (QT_RCC_EXECUTABLE rcc)
MACRO (QT4_ADD_RESOURCES outfiles )
FOREACH (it ${ARGN})
GET_FILENAME_COMPONENT(outfilename ${it} NAME_WE)
GET_FILENAME_COMPONENT(infile ${it} ABSOLUTE)
GET_FILENAME_COMPONENT(rc_path ${infile} PATH)
SET(outfile ${CMAKE_CURRENT_BINARY_DIR}/qrc_${outfilename}.cxx)
# parse file for dependencies
FILE(READ "${infile}" _RC_FILE_CONTENTS)
STRING(REGEX MATCHALL "[^<]*" _RC_FILES "${_RC_FILE_CONTENTS}")
SET(_RC_DEPENDS)
FOREACH(_RC_FILE ${_RC_FILES})
STRING(REGEX REPLACE "^" "" _RC_FILE "${_RC_FILE}")
SET(_RC_DEPENDS ${_RC_DEPENDS} "${rc_path}/${_RC_FILE}")
ENDFOREACH(_RC_FILE)
ADD_CUSTOM_COMMAND(OUTPUT ${outfile}
COMMAND ${QT_RCC_EXECUTABLE}
ARGS -name ${outfilename} -o ${outfile} ${infile}
MAIN_DEPENDENCY ${infile}
DEPENDS ${_RC_DEPENDS})
SET(${outfiles} ${${outfiles}} ${outfile})
ENDFOREACH (it)
ENDMACRO (QT4_ADD_RESOURCES)
IF(CMAKE_BUILD_TYPE)
ELSE(CMAKE_BUILD_TYPE)
set(CMAKE_BUILD_TYPE Debug)
ENDIF(CMAKE_BUILD_TYPE)
set(QT_QTCORE_LIB QtCore4.lib )
set(QT_QTGUI_LIB QtGui4.lib )
set(QT_QTNETWORK_LIB QtNetwork4.lib )
set(QT_QTXML_LIB QtXml4.lib )
IF(CMAKE_BUILD_TYPE STREQUAL Debug)
IF( CMAKE_COMPILER_IS_GNUCXX )
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -g -Wall -O0 -fPIC")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -g -Wall -O0 -fPIC")
ENDIF( CMAKE_COMPILER_IS_GNUCXX )
ELSE(CMAKE_BUILD_TYPE STREQUAL Debug)
add_definitions(
-DQT_NO_DEBUG -DTLEN_NO_DEBUG -DQT_NO_DEBUG_OUTPUT -DQT_NO_WARNING_OUTPUT -DNDEBUG
)
IF( CMAKE_COMPILER_IS_GNUCXX )
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -O2 -fPIC")
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -O2 -fPIC")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS} -Wall -O2 -fPIC")
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS} -Wall -O2 -fPIC")
ENDIF( CMAKE_COMPILER_IS_GNUCXX )
ENDIF(CMAKE_BUILD_TYPE STREQUAL Debug)
SET(CMAKE_COLOR_MAKEFILE TRUE)
set(CMAKE_VERBOSE_MAKEFILE ON)
IF( CMAKE_COMPILER_IS_GNUCXX )
ELSE( CMAKE_COMPILER_IS_GNUCXX )
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /Oi")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /Oi")
ENDIF(CMAKE_COMPILER_IS_GNUCXX)
include_directories(
/usr/include
/usr/include/qt4
/usr/include/qt4/Qt
/usr/include/qt4/QtCore
/usr/include/qt4/QtXml
/usr/include/qt4/QtGui
/usr/include/qt4/QtNetwork
/home/kkszysiu/Pulpit/tlen7_sdk/include
/home/kkszysiu/Pulpit/tlen7_sdk/include/plugin
)
#link_directories(../../lib ../../qt/lib)
link_directories(/home/kkszysiu/Pulpit/tlen7_sdk/lib /home/kkszysiu/Pulpit/tlen7_sdk/qt/lib)
qt4_add_resources(RCC_SRCS sample_plugin.qrc)
add_library(sample_plugin SHARED TlenSamplePlugin.h TlenSamplePlugin.cpp ${RCC_SRCS})
set_target_properties(sample_plugin PROPERTIES PREFIX "" SUFFIX ".o2x")
#target_link_libraries(
# sample_plugin
# tlen_plugin
# tlen_gui_context_menu
# tlen_gui_chat_window
# tlen_gui_chat_manager
# tlen_data
# ${QT_QTCORE_LIB}
#)