diff --git a/CMakeLists.txt b/CMakeLists.txt index 2c340398b..347ae1e8e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,7 +28,7 @@ set( CMAKE_BUILD_RPATH # the RPATH to be used when installing, but only if it's not a system directory list(FIND CMAKE_PLATFORM_IMPLICIT_LINK_DIRECTORIES "${CMAKE_INSTALL_PREFIX}/lib" isSystemDir) if("${isSystemDir}" STREQUAL "-1") - set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") + set(CMAKE_INSTALL_RPATH "${CMAKE_INSTALL_PREFIX}/lib") endif("${isSystemDir}" STREQUAL "-1") @@ -49,10 +49,11 @@ list(APPEND CMAKE_PREFIX_PATH ${CMAKE_INSTALL_PREFIX}) # external dependencies find_package(PkgConfig REQUIRED) set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${CMAKE_INSTALL_PREFIX}/lib/pkgconfig") -if(DEFINED FLUX_CORE_PREFIX) - set(ENV{PKG_CONFIG_PATH} "${FLUX_CORE_PREFIX}/lib/pkgconfig:$ENV{PKG_CONFIG_PATH}") -endif() find_package(FluxCore REQUIRED) +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT) + message(STATUS "flux core found and no specific prefix specified, using ${FLUX_CORE_PREFIX}") + set(CMAKE_INSTALL_PREFIX ${FLUX_CORE_PREFIX} CACHE PATH "..." FORCE) +endif() find_package(yaml-cpp REQUIRED) if(DEFINED ENV{PYTHON}) set(Python_EXECUTABLE $ENV{PYTHON} CACHE FILEPATH "") diff --git a/cmake/FindFluxCore.cmake b/cmake/FindFluxCore.cmake index 5311c765c..3fa175926 100644 --- a/cmake/FindFluxCore.cmake +++ b/cmake/FindFluxCore.cmake @@ -1,5 +1,16 @@ -set(saved_PKG_CONFIG_PATH $ENV{PKG_CONFIG_PATH}) -set(ENV{PKG_CONFIG_PATH} ${CMAKE_INSTALL_PREFIX}:$ENV{PKG_CONFIG_PATH}) +if(DEFINED FLUX_CORE_PREFIX) + set(ENV{PKG_CONFIG_PATH} "${FLUX_CORE_PREFIX}/lib/pkgconfig:$ENV{PKG_CONFIG_PATH}") +else() + find_program(FLUX flux + HINTS ${FLUX_CORE_PREFIX}/bin ENV PATH) + if(FLUX AND NOT FLUX_CORE_PREFIX) + get_filename_component(EXTRA_FLUX_CORE_PREFIX_BIN ${FLUX} DIRECTORY) + get_filename_component(EXTRA_FLUX_CORE_PREFIX ${EXTRA_FLUX_CORE_PREFIX_BIN} DIRECTORY) + set(ENV{PKG_CONFIG_PATH} "${EXTRA_FLUX_CORE_PREFIX}/lib/pkgconfig:$ENV{PKG_CONFIG_PATH}") + message(STATUS "flux found in PATH and no specific FLUX_CORE_PREFIX specified, using ${EXTRA_FLUX_CORE_PREFIX}") + endif() +endif() + pkg_check_modules(FLUX_CORE REQUIRED IMPORTED_TARGET flux-core) set(FLUX_PREFIX ${FLUX_CORE_PREFIX}) set(LIBFLUX_VERSION ${FLUX_CORE_VERSION}) @@ -8,7 +19,7 @@ find_program(FLUX flux PATHS ${FLUX_PREFIX}/bin ENV PATH) execute_process(COMMAND $FLUX python -c "import sys; print(\".\".join(map(str, sys.version_info[[:2]])))" - OUTPUT_VARIABLE FLUX_PYTHON_VERSION) + OUTPUT_VARIABLE FLUX_PYTHON_VERSION) pkg_check_modules(FLUX_HOSTLIST REQUIRED IMPORTED_TARGET flux-hostlist ) pkg_check_modules(FLUX_IDSET REQUIRED IMPORTED_TARGET flux-idset ) @@ -30,4 +41,3 @@ add_library(flux-all INTERFACE) target_link_libraries(flux-all INTERFACE flux::core flux::hostlist flux::idset flux::optparse flux::schedutil flux::taskmap) add_library(flux::all ALIAS flux-all) -set(ENV{PKG_CONFIG_PATH} ${saved_PKG_CONFIG_PATH}) diff --git a/configure-cmake b/configure-cmake index a8a75d566..355c203c0 100755 --- a/configure-cmake +++ b/configure-cmake @@ -1,5 +1,4 @@ #!/bin/sh - # Autotools-style (./configure) wrapper for CMake # # @@ -28,7 +27,7 @@ if [ "${CMAKE_CMD}" = "" ]; then fi BUILD_TYPE="Debug" -PREFIX=/usr/local +# PREFIX=/usr/local LIBDIR= CMAKE_ARGS= @@ -302,8 +301,11 @@ while [ $# != 0 ]; do shift done -if [ "x${LIBDIR}" = "x" ]; then - LIBDIR="${PREFIX}/lib" +if [ -n "${LIBDIR}" ]; then + CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_LIBDIR=\"${LIBDIR}\"" +fi +if [ -n "${PREFIX}" ]; then + CMAKE_ARGS="$CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=\"${PREFIX}\"" fi # Unlike CFLAGS/CXXFLAGS/CC/CXX, LDFLAGS isn't handled by CMake, so we @@ -314,4 +316,4 @@ if [ "x${LDFLAGS}" != "x" ]; then done fi -eval "${CMAKE_CMD}" "${TOP_SRCDIR}" -DCMAKE_BUILD_TYPE="${BUILD_TYPE}" -DCMAKE_INSTALL_PREFIX="${PREFIX}" -DCMAKE_INSTALL_LIBDIR="${LIBDIR}" ${CMAKE_ARGS} +eval "${CMAKE_CMD}" "${TOP_SRCDIR}" -DCMAKE_BUILD_TYPE="${BUILD_TYPE}" ${CMAKE_ARGS}