diff --git a/cmake/CMakeLists.txt b/cmake/CMakeLists.txt index 3ef3e8d7f48d31f1e0e02d748d4482801ef801e7..53ac20f5d9158437315402d256fc45722b63685b 100644 --- a/cmake/CMakeLists.txt +++ b/cmake/CMakeLists.txt @@ -43,6 +43,29 @@ function(validate_option name values) endif() endfunction(validate_option) +function(get_lammps_version version_header variable) + file(READ ${version_header} line) + set(MONTHS x Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) + string(REGEX REPLACE "#define LAMMPS_VERSION \"([0-9]+) ([A-Za-z]+) ([0-9]+)\"" "\\1" day "${line}") + string(REGEX REPLACE "#define LAMMPS_VERSION \"([0-9]+) ([A-Za-z]+) ([0-9]+)\"" "\\2" month "${line}") + string(REGEX REPLACE "#define LAMMPS_VERSION \"([0-9]+) ([A-Za-z]+) ([0-9]+)\"" "\\3" year "${line}") + string(STRIP ${day} day) + string(STRIP ${month} month) + string(STRIP ${year} year) + list(FIND MONTHS "${month}" month) + string(LENGTH ${day} day_length) + string(LENGTH ${month} month_length) + if(day_length EQUAL 1) + set(day "0${day}") + endif() + if(month_length EQUAL 1) + set(month "0${month}") + endif() + set(${variable} "${year}${month}${day}" PARENT_SCOPE) +endfunction() + +get_lammps_version(${LAMMPS_SOURCE_DIR}/version.h LAMMPS_VERSION) + # Cmake modules/macros are in a subdirectory to keep this file cleaner set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/Modules) @@ -121,10 +144,10 @@ if(BUILD_LIB) if(BUILD_SHARED_LIBS) # for all pkg libs, mpi_stubs and linalg set(CMAKE_POSITION_INDEPENDENT_CODE ON) endif() - set(LIB_SUFFIX "" CACHE STRING "Suffix to append to liblammps and pkg-config file") - mark_as_advanced(LIB_SUFFIX) - if(LIB_SUFFIX) - set(LIB_SUFFIX "_${LIB_SUFFIX}") + set(LAMMPS_LIB_SUFFIX "" CACHE STRING "Suffix to append to liblammps and pkg-config file") + mark_as_advanced(LAMMPS_LIB_SUFFIX) + if(LAMMPS_LIB_SUFFIX) + set(LAMMPS_LIB_SUFFIX "_${LAMMPS_LIB_SUFFIX}") endif() endif() @@ -1040,14 +1063,14 @@ if(BUILD_LIB) if(LAMMPS_DEPS) add_dependencies(lammps ${LAMMPS_DEPS}) endif() - set_target_properties(lammps PROPERTIES OUTPUT_NAME lammps${LIB_SUFFIX}) - if(BUILD_SHARED_LIBS) - set_target_properties(lammps PROPERTIES SOVERSION ${SOVERSION}) - install(TARGETS lammps LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) - install(FILES ${LAMMPS_SOURCE_DIR}/library.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/lammps) - configure_file(pkgconfig/liblammps.pc.in ${CMAKE_CURRENT_BINARY_DIR}/liblammps${LIB_SUFFIX}.pc @ONLY) - install(FILES ${CMAKE_CURRENT_BINARY_DIR}/liblammps${LIB_SUFFIX}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) - endif() + set_target_properties(lammps PROPERTIES OUTPUT_NAME lammps${LAMMPS_LIB_SUFFIX}) + set_target_properties(lammps PROPERTIES SOVERSION ${SOVERSION}) + install(TARGETS lammps LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) + install(FILES ${LAMMPS_SOURCE_DIR}/library.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/lammps) + configure_file(pkgconfig/liblammps.pc.in ${CMAKE_CURRENT_BINARY_DIR}/liblammps${LAMMPS_LIB_SUFFIX}.pc @ONLY) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/liblammps${LAMMPS_LIB_SUFFIX}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) + configure_file(FindLAMMPS.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/FindLAMMPS${LAMMPS_LIB_SUFFIX}.cmake @ONLY) + install(FILES ${CMAKE_CURRENT_BINARY_DIR}/FindLAMMPS${LAMMPS_LIB_SUFFIX}.cmake DESTINATION ${CMAKE_INSTALL_DATADIR}/cmake/Module) else() list(APPEND LMP_SOURCES ${LIB_SOURCES}) endif() diff --git a/cmake/FindLAMMPS.cmake.in b/cmake/FindLAMMPS.cmake.in new file mode 100644 index 0000000000000000000000000000000000000000..586df83c2d080197ea0256794febd395ab81cc63 --- /dev/null +++ b/cmake/FindLAMMPS.cmake.in @@ -0,0 +1,48 @@ +# - Find liblammps +# Find the native liblammps headers and libraries. +# +# The following variables will set: +# LAMMPS_INCLUDE_DIRS - where to find lammps/library.h, etc. +# LAMMPS_LIBRARIES - List of libraries when using lammps. +# LAMMPS_API_DEFINES - lammps library api defines +# LAMMPS_VERSION - lammps library version +# LAMMPS_FOUND - True if liblammps found. +# +# In addition a LAMMPS::LAMMPS imported target is getting created. +# +# LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator +# http://lammps.sandia.gov, Sandia National Laboratories +# Steve Plimpton, sjplimp@sandia.gov +# +# Copyright (2003) Sandia Corporation. Under the terms of Contract +# DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains +# certain rights in this software. This software is distributed under +# the GNU General Public License. +# +# See the README file in the top-level LAMMPS directory. +# + +find_package(PkgConfig) + +pkg_check_modules(PC_LAMMPS liblammps@LAMMPS_LIB_SUFFIX@) +find_path(LAMMPS_INCLUDE_DIR lammps/library.h HINTS ${PC_LAMMPS_INCLUDE_DIRS} @CMAKE_INSTALL_FULL_INCLUDEDIR@) + +set(LAMMPS_VERSION @LAMMPS_VERSION@) +set(LAMMPS_API_DEFINES @LAMMPS_API_DEFINES@) + +find_library(LAMMPS_LIBRARY NAMES lammps@LAMMPS_LIB_SUFFIX@ HINTS ${PC_LAMMPS_LIBRARY_DIRS} @CMAKE_INSTALL_FULL_LIBDIR@) + +set(LAMMPS_INCLUDE_DIRS "${LAMMPS_INCLUDE_DIR}") +set(LAMMPS_LIBRARIES "${LAMMPS_LIBRARY}") + +include(FindPackageHandleStandardArgs) +# handle the QUIETLY and REQUIRED arguments and set LAMMPS_FOUND to TRUE +# if all listed variables are TRUE +find_package_handle_standard_args(LAMMPS REQUIRED_VARS LAMMPS_LIBRARY LAMMPS_INCLUDE_DIR VERSION_VAR LAMMPS_VERSION) + +mark_as_advanced(LAMMPS_INCLUDE_DIR LAMMPS_LIBRARY) + +if(LAMMPS_FOUND AND NOT TARGET LAMMPS::LAMMPS) + add_library(LAMMPS::LAMMPS UNKNOWN IMPORTED) + set_target_properties(LAMMPS::LAMMPS PROPERTIES IMPORTED_LOCATION "${LAMMPS_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${LAMMPS_INCLUDE_DIR}" INTERFACE_COMPILE_DEFINITIONS "${LAMMPS_API_DEFINES}") +endif() diff --git a/cmake/pkgconfig/liblammps.pc.in b/cmake/pkgconfig/liblammps.pc.in index 400b7593cff4034539df766111dd53d6fbbeaac9..445b2ab29e719020ab10b5e579cee1655a11f7be 100644 --- a/cmake/pkgconfig/liblammps.pc.in +++ b/cmake/pkgconfig/liblammps.pc.in @@ -4,7 +4,7 @@ # after you added @CMAKE_INSTALL_FULL_LIBDIR@/pkg-config to PKG_CONFIG_PATH, # e.g. export PKG_CONFIG_PATH=@CMAKE_INSTALL_FULL_LIBDIR@/pkgconfig -prefix=@CMAKE_INSTALL_FULL_PREFIX@ +prefix=@CMAKE_INSTALL_PREFIX@ libdir=@CMAKE_INSTALL_FULL_LIBDIR@ includedir=@CMAKE_INSTALL_FULL_INCLUDEDIR@ @@ -13,6 +13,6 @@ Description: Large-scale Atomic/Molecular Massively Parallel Simulator Library URL: http://lammps.sandia.gov Version: Requires: -Libs: -L${libdir} -llammps@LIB_SUFFIX@@ +Libs: -L${libdir} -llammps@LAMMPS_LIB_SUFFIX@ Libs.private: -lm Cflags: -I${includedir} @LAMMPS_API_DEFINES@