Build e integrare il proprio modulo

Scrivere il codice di un modulo non dice nulla su come viene buildato — e due approcci, molto diversi, sono altrettanto legittimi secondo ciò che si intende farne.

Lavorare per proprio conto

Nulla obbliga a passare per il repository ost/ostmodules: un modulo può vivere nel proprio repository, con il proprio CMakeLists.txt, ispirandosi a quello di ost/ostmodules piuttosto che copiandolo servilmente. Due informazioni bastano a ritrovare un’installazione OST reale:

find_path(OST_INCLUDE_DIR ost/indimodule.h)
find_library(OST_LIBRARY_BASE NAMES libostbasemodule.so PATHS /usr/lib /usr/lib/x86_64-linux-gnu)
find_library(OST_LIBRARY_INDI NAMES libostindimodule.so PATHS /usr/lib /usr/lib/x86_64-linux-gnu)

ost/ostmodules fa esattamente questo in cmake_modules/FindOSTSERVER.cmake — ripartendo da questo file piuttosto che indovinarlo, il più semplice è ancora leggerlo direttamente.

Per un modulo puramente Basemodule, è necessario solo OST_LIBRARY_BASE; OST_LIBRARY_INDI serve solo per un IndiModule.

Contribuire al repository condiviso

Perché il modulo sia visibile e mantenuto insieme agli altri, si unisce a ost/ostmodules:

  1. Clonare il repository, creare un branch.
  2. Aggiungere il proprio blocco in CMakeLists.txt, sul modello di un modulo esistente semplice (osthello per esempio):
add_library(ostmonmodule SHARED
    ${CMAKE_CURRENT_SOURCE_DIR}/src/modules/monmodule/monmodule.h
    ${CMAKE_CURRENT_SOURCE_DIR}/src/modules/monmodule/monmodule.cpp
    ${CMAKE_CURRENT_SOURCE_DIR}/src/modules/monmodule/monmodule.qrc
)
target_link_libraries(ostmonmodule PRIVATE
    ${OST_LIBRARY_BASE}        # ou ${OST_LIBRARIES} (base + indi) pour un IndiModule
    Qt${QT_VERSION_MAJOR}::Core
    Qt${QT_VERSION_MAJOR}::Concurrent
    Qt${QT_VERSION_MAJOR}::Widgets
    Threads::Threads
    z
)
target_compile_definitions(ostmonmodule PRIVATE MONMODULE_MODULE)
  1. Aggiungere ostmonmodule alla lista install(TARGETS ...), un po’ più in basso nello stesso file.
  2. Aprire una merge request.
Nessuna funzione/macro condivisa tra i blocchi

Ogni modulo ripete questo blocco a mano — oggi non esiste alcuna funzione CMake che lo fattorizzi. Copiare il blocco di un modulo già simile (un IndiModule per un IndiModule, per esempio osthelloindi) evita le omissioni più sicuramente che riscriverlo da zero.