##*************************************************************************##
##  CUBE        http://www.scalasca.org/                                   ##
##*************************************************************************##
##  Copyright (c) 2023-2024                                                ##
##  Forschungszentrum Juelich GmbH, Juelich Supercomputing Centre          ##
##                                                                         ##
##  This software may be modified and distributed under the terms of       ##
##  a BSD-style license.  See the COPYING file in the package base         ##
##  directory for details.                                                 ##
##*************************************************************************##


# almost all tools that are built in the same way
function(add_cubelib_executable NAME)
    cmake_parse_arguments(TOOL "" "" "SOURCES;DEPENDENCIES" ${ARGN})
    add_executable(${NAME} ${TOOL_SOURCES})
    target_link_libraries(${NAME} PRIVATE
        cube-base utils libcube_library_tools "${TOOL_DEPENDENCIES}"
    )
    set_property(GLOBAL APPEND PROPERTY TOOLS ${NAME})
endfunction()

# cube4to3
add_cubelib_executable( cube4to3 SOURCES
     ./0012.Cube4To3/cube4to3.cpp
)
# cube3to4
add_cubelib_executable(cube3to4 SOURCES
     ./0013.Cube3To4/cube3to4.cpp
)
# cube_exclusify
add_cubelib_executable(cube_exclusify SOURCES
     ./0010.Exclusify/cube4_exclusify.cpp
)
# cube_inclusify
add_cubelib_executable(cube_inclusify SOURCES
     ./0011.Inclusify/cube4_inclusify.cpp
)
# cube_clean
add_cubelib_executable(cube_clean SOURCES
     ./0020.Clean/cube4_clean.cpp
)
# cube_cmp
add_cubelib_executable(cube_cmp SOURCES
     ./0021.Cmp/cube4_cmp.cpp
)
# cube_cut
add_cubelib_executable(cube_cut SOURCES
     ./0022.Cut/cube4_cut.cpp
)
# cube_cubelib_diff
add_cubelib_executable(cube_diff SOURCES
     ./0023.Diff/cube4_diff.cpp
)
# cube_mean
add_cubelib_executable(cube_mean SOURCES
     ./0024.Mean/cube4_mean.cpp
)
# cube_merge
add_cubelib_executable(cube_merge SOURCES
     ./0025.Merge/cube4_merge.cpp
)
# cube_stat
add_cubelib_executable(cube_stat SOURCES
    ./0027.Stat/cube4_stat.cpp
    ./0027.Stat/P2Statistic.cpp
    ./0027.Stat/cube4_stat.cpp
)
# cube_calltree
add_cubelib_executable(cube_calltree SOURCES
     ./0028.CallTree/cube4_calltree.cpp
)
# cube_canonize
add_cubelib_executable(cube_canonize SOURCES
     ./0029.Canonize/cube4_canonize.cpp
)
# cube_info
add_cubelib_executable(cube_info SOURCES
    ./002a.Info/cube4_info.cpp
)
# cube_nodeview
add_cubelib_executable(cube_nodeview SOURCES
    ./002b.NodeView/cube4_nodeview.cpp
)
# cube_rank
add_cubelib_executable(cube_rank SOURCES
    ./002c.Rank/cube4_rank.cpp
)
# cube_regioninfo
add_cubelib_executable(cube_regioninfo SOURCES
    ./002d.RegionInfo/cube4_regioninfo.cpp
)
# cube_sanity
add_cubelib_executable(cube_sanity SOURCES
    ./002e.Sanity/cube4_sanity.cpp
)
# cube_topoassist
add_cubelib_executable(cube_topoassist SOURCES
    ./002f.Topoassist/cube4_topoassist.cpp
    ./002f.Topoassist/Question.cpp
)
# cube_part
add_cubelib_executable(cube_part SOURCES
    ./002i.Part/cube4_part.cpp
)
# cube_isempty
add_cubelib_executable(cube_isempty SOURCES
    ./002j.IsEmpty/cube4_is_empty.cpp
)
# cube_dump
add_cubelib_executable(cube_dump SOURCES
    ./002k.Dump/cube4_dump.cpp
    ./002k.Dump/cube4_dump_CSV3Printer.cpp
    ./002k.Dump/cube4_dump_CSV2Printer.cpp
    ./002k.Dump/cube4_dump_CSVPrinter.cpp
    ./002k.Dump/cube4_dump_CommandOption.cpp
    ./002k.Dump/cube4_dump_GnuPlot2Printer.cpp
    ./002k.Dump/cube4_dump_GnuPlotPrinter.cpp
    ./002k.Dump/cube4_dump_Printer.cpp
)
# cube_derive
add_cubelib_executable(cube_derive SOURCES
    ./002m.Derive/cube4_derive.cpp
)
# cube_commoncalltree
add_cubelib_executable(cube_commoncalltree SOURCES
    ./002n.CommonCalltree/cube4_commoncalltree.cpp
    ./002n.CommonCalltree/commoncalltree_calls.cpp
)
# tau2cube
add_cubelib_executable(tau2cube SOURCES
    ./0040.Tau2Cube/tau2cube4.cpp
)
# cube_test
add_cubelib_executable(cube_test SOURCES
    ./0050.Test/cube4_test.cpp
)
# cube_pop_metrics
add_cubelib_executable(cube_pop_metrics SOURCES
     ./008a.POPx/cube4_pop_metrics.cpp
     ./008a.POPx/cube4_pop_metrics_helper.cpp
     ./008a.POPx/cube4_pop_metrics_help.cpp
     DEPENDENCIES cube_popx_library
)
# install all executables
get_property(TOOLS_LIST GLOBAL PROPERTY TOOLS)
install(TARGETS ${TOOLS_LIST} DESTINATION ${CMAKE_INSTALL_PREFIX}/bin)

# cube_server
add_subdirectory(007b.Server)

# cube_remap2
add_subdirectory(0031.ReMap2)
