diff --git a/cmake/Modules/FindDOOCS.cmake b/cmake/Modules/FindDOOCS.cmake index d957b9a6ea1296c762f80246bb6016a30dc125c8..99e35a73f8a012dd3b1ce44842a4e104ed8692f7 100644 --- a/cmake/Modules/FindDOOCS.cmake +++ b/cmake/Modules/FindDOOCS.cmake @@ -32,84 +32,63 @@ SET(DOOCS_FOUND 0) +list(APPEND DOOCS_FIND_COMPONENTS doocsapi) -FIND_PATH(DOOCS_DIR libDOOCSapi.so - ${CMAKE_CURRENT_LIST_DIR} - /export/doocs/lib -) if (";${DOOCS_FIND_COMPONENTS};" MATCHES ";zmq;") - FIND_PATH(DOOCS_DIR_zmq libDOOCSdzmq.so - ${DOOCS_DIR} - ) - set(DOOCS_LIBRARIES ${DOOCS_LIBRARIES} DOOCSdzmq) - set(COMPONENT_DIRS ${COMPONENT_DIRS} DOOCS_DIR_zmq) + list(APPEND DOOCS_FIND_COMPONENTS doocsdzmq) + list(REMOVE_ITEM DOOCS_FIND_COMPONENTS zmq) endif() if (";${DOOCS_FIND_COMPONENTS};" MATCHES ";dapi;") - FIND_PATH(DOOCS_DIR_dapi libDOOCSdapi.so - ${DOOCS_DIR} - ) - set(DOOCS_LIBRARIES ${DOOCS_LIBRARIES} DOOCSdapi) - set(COMPONENT_DIRS ${COMPONENT_DIRS} DOOCS_DIR_dapi) + list(APPEND DOOCS_FIND_COMPONENTS doocsdapi) + list(REMOVE_ITEM DOOCS_FIND_COMPONENTS dapi) endif() if (";${DOOCS_FIND_COMPONENTS};" MATCHES ";server;") - FIND_PATH(DOOCS_DIR_server libEqServer.so - ${DOOCS_DIR} - ) - set(DOOCS_LIBRARIES ${DOOCS_LIBRARIES} EqServer) - set(COMPONENT_DIRS ${COMPONENT_DIRS} DOOCS_DIR_server) + list(APPEND DOOCS_FIND_COMPONENTS serverlib) + list(REMOVE_ITEM DOOCS_FIND_COMPONENTS server) endif() +set(DOOCS_FIND_COMPONENTS_DDAQ false) if (";${DOOCS_FIND_COMPONENTS};" MATCHES ";ddaq;") - FIND_PATH(DOOCS_DIR_ddaq libDOOCSddaq.so - ${DOOCS_DIR} - ) - set(DOOCS_LIBRARIES ${DOOCS_LIBRARIES} DOOCSddaq timinginfo daqevstat DAQFSM TTF2XML xerces-c BM TTF2evutl) - set(COMPONENT_DIRS ${COMPONENT_DIRS} DOOCS_DIR_ddaq) + # This library seems not yet to come with a pkg-config module + list(REMOVE_ITEM DOOCS_FIND_COMPONENTS ddaq) + set(DOOCS_FIND_COMPONENTS_DDAQ true) endif() if (";${DOOCS_FIND_COMPONENTS};" MATCHES ";daqreader;") - FIND_PATH(DOOCS_DIR_daqreader libDAQReader.so - ${DOOCS_DIR} - ) - set(DOOCS_LIBRARIES ${DOOCS_LIBRARIES} DAQReader) - set(COMPONENT_DIRS ${COMPONENT_DIRS} DOOCS_DIR_daqreader) -endif() - -if (";${DOOCS_FIND_COMPONENTS};" MATCHES ";eqdaqdatalib;") - FIND_PATH(DOOCS_DIR_eqdaqdatalib libDAQsvrutil.so - ${DOOCS_DIR} - ) - set(DOOCS_LIBRARIES ${DOOCS_LIBRARIES} DAQsvrutil) - set(COMPONENT_DIRS ${COMPONENT_DIRS} DOOCS_DIR_eqdaqdatalib) + list(APPEND DOOCS_FIND_COMPONENTS daqreaderlib) + list(REMOVE_ITEM DOOCS_FIND_COMPONENTS daqreader) endif() -#This is for the transition only. The logic is not bullet proof, but in almost all cases -#if there is libgul14.so, it means DOOCS brought it and needs it. -FIND_LIBRARY(LIB_GULOLD libgul.so ${DOOCS_DIR}) -FIND_LIBRARY(LIB_GUL14 libgul14.so ${DOOCS_DIR}) -if ("${LIB_GUL14}" MATCHES "LIB_GUL14-NOTFOUND") - set(LIB_GUL "gul") -else() - set(LIB_GUL "gul14") -endif() +# For newer cmake versions, the following foreach() can be replaced by this: +# list(TRANSFORM DOOCS_FIND_COMPONENTS PREPEND "doocs-") +foreach(component ${DOOCS_FIND_COMPONENTS}) + list(APPEND DOOCS_FIND_COMPONENTS_TRANSFORMED "doocs-${component}") +endforeach() +set(DOOCS_FIND_COMPONENTS ${DOOCS_FIND_COMPONENTS_TRANSFORMED}) -set(DOOCS_LIBRARIES ${DOOCS_LIBRARIES} DOOCSapi nsl dl pthread m rt ldap ${LIB_GUL}) -message("DOOCS_LIBRARIES ${DOOCS_LIBRARIES}") +include(FindPkgConfig) +pkg_check_modules(DOOCS REQUIRED ${DOOCS_FIND_COMPONENTS}) -# now set the required variables based on the determined DOOCS_DIR -set(DOOCS_INCLUDE_DIRS ${DOOCS_DIR}/include) -set(DOOCS_LIBRARY_DIRS ${DOOCS_DIR}/) +string(REPLACE ";" " " DOOCS_CFLAGS "${DOOCS_CFLAGS}") +string(REPLACE ";" " " DOOCS_LDFLAGS "${DOOCS_LDFLAGS}") -set(DOOCS_CXX_FLAGS "-Wall -fPIC -D_REENTRANT -DLINUX -D__LINUX__ -DDMSG -DTINE_EXPORT=' '") -set(DOOCS_LINKER_FLAGS "-Wl,--no-as-needed") -set(DOOCS_LINK_FLAGS "${DOOCS_LINKER_FLAGS}") +set(DOOCS_DIR "${DOOCS_doocs-doocsapi_LIBDIR}") +set(DOOCS_VERSION "${DOOCS_doocs-doocsapi_VERSION}") +set(DOOCS_CXX_FLAGS ${DOOCS_CFLAGS}) +set(DOOCS_LINKER_FLAGS ${DOOCS_LDFLAGS}) +set(DOOCS_LINK_FLAGS ${DOOCS_LINKER_FLAGS}) -# extract DOOCS version from librar so symlink. Note: This is platform dependent and only works -# if DOOCS was installed from the Debian pagackes. Find a better version detection scheme! -execute_process(COMMAND bash -c "env LANG=C readelf -d ${DOOCS_DIR}/libDOOCSapi.so | grep SONAME | sed -e 's/^.*Library soname: \\[libDOOCSapi\\.so\\.//' -e 's/\\]$//'" - OUTPUT_STRIP_TRAILING_WHITESPACE OUTPUT_VARIABLE DOOCS_VERSION) +set(COMPONENT_DIRS "") +if(DOOCS_FIND_COMPONENTS_DDAQ) + message("Searching for libDOOCSddaq.so") + FIND_PATH(DOOCS_DIR_ddaq libDOOCSddaq.so + ${DOOCS_DIR} + ) + set(DOOCS_LIBRARIES ${DOOCS_LIBRARIES} DOOCSddaq timinginfo daqevstat DAQFSM TTF2XML xerces-c BM TTF2evutl) + set(COMPONENT_DIRS ${COMPONENT_DIRS} DOOCS_DIR_ddaq) +endif() # use a macro provided by CMake to check if all the listed arguments are valid and set DOOCS_FOUND accordingly include(FindPackageHandleStandardArgs)