endforeach()
set(NS3_VERSION "${NS3_ns3-core_VERSION}")
- string(REGEX REPLACE "3.([.0-9\-a-z]+)" "\\1" NS3_MINOR_VERSION "${NS3_VERSION}")
- if(NS3_MINOR_VERSION MATCHES ".")
- string(REGEX REPLACE "^[0-9]*\.([0-9]+$)" "\\1" NS3_PATCH_VERSION "${NS3_MINOR_VERSION}")
- string(REGEX REPLACE "^([0-9]+)\.[0-9]*$" "\\1" NS3_MINOR_VERSION "${NS3_MINOR_VERSION}")
+ string(REGEX REPLACE "3\\.([-.0-9a-z]+)" "\\1" NS3_MINOR_VERSION "${NS3_VERSION}")
+ if(NS3_MINOR_VERSION MATCHES "\\.")
+ string(REGEX REPLACE "^[0-9]*\\.([0-9]+$)" "\\1" NS3_PATCH_VERSION "${NS3_MINOR_VERSION}")
+ string(REGEX REPLACE "^([0-9]+)\\.[0-9]*$" "\\1" NS3_MINOR_VERSION "${NS3_MINOR_VERSION}")
else()
set(NS3_PATCH_VERSION "0")
endif()
else()
set(NS3_HINT ${ns3_path} CACHE PATH "Path to search for NS3 lib and include")
- set(NS3_KNOWN_VERSIONS "3.28" "3.29" "3.30" "3.31" "3.32" "3.33" "3.34" "3.35")
+ set(NS3_KNOWN_VERSIONS "3-dev" "3.28" "3.29" "3.30" "3.31" "3.32" "3.33" "3.34" "3.35") # subsequent versions use pkg-config
foreach (_ns3_ver ${NS3_KNOWN_VERSIONS})
list(APPEND _ns3_LIB_SEARCH_DIRS "ns${_ns3_ver}-core" "ns${_ns3_ver}-core-optimized" "ns${_ns3_ver}-core-debug" "ns${_ns3_ver}-core-default")
endif()
message(STATUS "ns-3 found ${NS3_LIBRARIES}")
string(REGEX REPLACE ".*libns(.*)-core.*" "\\1" NS3_VERSION "${NS3_LIBRARIES}")
- string(REGEX REPLACE "3.([.0-9\-a-z]+)" "\\1" NS3_MINOR_VERSION "${NS3_VERSION}")
+ string(REGEX REPLACE "3\\.([-.0-9a-z]+)" "\\1" NS3_MINOR_VERSION "${NS3_VERSION}")
if(NS3_MINOR_VERSION MATCHES "dev")
set(NS3_MINOR_VERSION "99")
endif()
- if(NS3_MINOR_VERSION MATCHES ".")
- string(REGEX REPLACE "^[0-9]*\.([0-9]+$)" "\\1" NS3_PATCH_VERSION "${NS3_MINOR_VERSION}")
- string(REGEX REPLACE "^([0-9]+)\.[0-9]*$" "\\1" NS3_MINOR_VERSION "${NS3_MINOR_VERSION}")
+ if(NS3_MINOR_VERSION MATCHES "\\.")
+ string(REGEX REPLACE "^[0-9]*\\.([0-9]+$)" "\\1" NS3_PATCH_VERSION "${NS3_MINOR_VERSION}")
+ string(REGEX REPLACE "^([0-9]+)\\.[0-9]*$" "\\1" NS3_MINOR_VERSION "${NS3_MINOR_VERSION}")
else()
set(NS3_PATCH_VERSION "0")
endif()
endif()
endif()
mark_as_advanced(NS3_LIBRARY_PATH)
+
+ set(NS3_LIBRARIES "")
+ foreach(lib core csma point-to-point internet network applications wifi)
+ set(NS3_LIBRARIES "${NS3_LIBRARIES} -lns${NS3_VERSION}-${lib}${NS3_SUFFIX}")
+ endforeach()
endif()
+set(SIMGRID_HAVE_NS3_GetNextEventTime FALSE)
if(SIMGRID_HAVE_NS3)
- message(STATUS "ns-3 found (v${NS3_VERSION}; minor:${NS3_MINOR_VERSION}; patch:${NS3_PATCH_VERSION}; libpath: ${NS3_LIBRARY_PATH}).")
+ try_compile(compile_ns3 ${CMAKE_BINARY_DIR} ${CMAKE_HOME_DIRECTORY}/tools/cmake/test_prog/prog_ns3.cpp
+ CMAKE_FLAGS "-DINCLUDE_DIRECTORIES=${NS3_INCLUDE_DIR}" "-DLINK_DIRECTORIES=${NS3_LIBRARY_PATH}"
+ LINK_LIBRARIES "${NS3_LIBRARIES}"
+ OUTPUT_VARIABLE compile_ns3_output)
+ if(NOT compile_ns3)
+ message(STATUS "ns-3 does not have the ns3::Simulator::GetNextEventTime patch. The ns-3 model will not be idempotent. Compilation output:\n ${compile_ns3_output}")
+ else()
+ set(SIMGRID_HAVE_NS3_GetNextEventTime TRUE)
+ endif()
+ file(REMOVE ${CMAKE_BINARY_DIR}/prog_ns3)
+ message(STATUS "ns-3 found (v${NS3_VERSION}; minor ver:${NS3_MINOR_VERSION}; patch ver:${NS3_PATCH_VERSION}; GetNextEventTime patch: ${SIMGRID_HAVE_NS3_GetNextEventTime}; libpath: ${NS3_LIBRARY_PATH}).")
link_directories(${NS3_LIBRARY_PATH})
include_directories(${NS3_INCLUDE_DIR})
else()