Skip to content

Commit

Permalink
Flat directory installation option (#80)
Browse files Browse the repository at this point in the history
Add an option for a flat installation structure with the -DFLAT CMake option.

With FLAT=ON all libraries will be installed in a single directory

With FLAT=OFF libraries will be installed in per-library directories
  • Loading branch information
kgerheiser committed Jun 24, 2020
1 parent ec8a519 commit a1d73cf
Show file tree
Hide file tree
Showing 17 changed files with 66 additions and 171 deletions.
191 changes: 41 additions & 150 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ option(ENABLE_TESTS "Enable testing" OFF)
option(BUILD_CRTM "Build CRTM library" ON)
option(BUILD_POST "Build NCEPpost library" ON)
option(DEPLOY "Deploy modulefiles" OFF)
option(FLAT "Flat install structure" ON)
option(LIBCOMPS "File to read components from" ${DEFAULT_LIBCOMPS})

# Read list of components to install from:
Expand All @@ -41,6 +42,7 @@ else()
set(LIBCOMPS_FILE ${LIBCOMPS})
endif()
message(STATUS "Installing NCEPLIBS from ${LIBCOMPS_FILE}")
message(STATUS "Installing NCEPLIBS at ${CMAKE_INSTALL_PREFIX}")

# Enable CRTM if NCEPpost library is desired.
if(BUILD_POST)
Expand All @@ -59,6 +61,15 @@ if(DEPLOY)
endif()
endif()

function(getInstallDir FLAT lib ver installDir)
if(FLAT)
set(var ${lib}-${ver})
else()
set(var ${lib}/${lib}-${ver})
endif()
set(${installDir} ${var} PARENT_SCOPE)
endfunction()

# Function to get the Branch/Tag and Version
function(getTagVer fileName libName tag ver)
set(${tag} "develop" PARENT_SCOPE)
Expand Down Expand Up @@ -87,192 +98,71 @@ endfunction()
# Collect list of components to append to CMAKE_PREFIX_PATH
list(APPEND _comps
bacio sigio sfcio gfsio ip sp w3nco g2 g2tmpl nemsio nemsiogfs landsfcutil w3emc)
set(nceplibs ${_comps})

if(BUILD_CRTM)
list(APPEND _comps crtm)
endif()
if(BUILD_POST)
list(APPEND _comps nceppost)
endif()

list(APPEND _cpath "${CMAKE_PREFIX_PATH}")
list(APPEND _cpath "${CMAKE_INSTALL_PREFIX}")
foreach(_comp ${_comps})
list(APPEND _cpath "${CMAKE_INSTALL_PREFIX}/${_comp}")
endforeach()

# Create CMAKE_PREFIX_PATH list with an alternate separator
string(REPLACE ";" "|" CMAKE_PREFIX_PATH_ALT_SEP "${_cpath}")

getTagVer("${LIBCOMPS_FILE}" "bacio" tag ver)
ExternalProject_Add(bacio
GIT_REPOSITORY "https://github.com/noaa-emc/nceplibs-bacio"
GIT_TAG "${tag}"
PREFIX "${CMAKE_BINARY_DIR}/bacio"
LIST_SEPARATOR |
CMAKE_ARGS "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP}"
"-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}/bacio/bacio-${ver}"
"-DENABLE_TESTS=${ENABLE_TESTS}"
)

getTagVer("${LIBCOMPS_FILE}" "sigio" tag ver)
ExternalProject_Add(sigio
GIT_REPOSITORY "https://github.com/noaa-emc/nceplibs-sigio"
GIT_TAG "${tag}"
PREFIX "${CMAKE_BINARY_DIR}/sigio"
LIST_SEPARATOR |
CMAKE_ARGS "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP}"
"-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}/sigio/sigio-${ver}"
"-DENABLE_TESTS=${ENABLE_TESTS}"
)

getTagVer("${LIBCOMPS_FILE}" "sfcio" tag ver)
ExternalProject_Add(sfcio
GIT_REPOSITORY "https://github.com/noaa-emc/nceplibs-sfcio"
GIT_TAG "${tag}"
PREFIX "${CMAKE_BINARY_DIR}/sfcio"
LIST_SEPARATOR |
CMAKE_ARGS "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP}"
"-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}/sfcio/sfcio-${ver}"
"-DENABLE_TESTS=${ENABLE_TESTS}"
)

getTagVer("${LIBCOMPS_FILE}" "gfsio" tag ver)
ExternalProject_Add(gfsio
GIT_REPOSITORY "https://github.com/noaa-emc/nceplibs-gfsio"
GIT_TAG "${tag}"
PREFIX "${CMAKE_BINARY_DIR}/gfsio"
LIST_SEPARATOR |
CMAKE_ARGS "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP}"
"-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}/gfsio/gfsio-${ver}"
"-DENABLE_TESTS=${ENABLE_TESTS}"
)

getTagVer("${LIBCOMPS_FILE}" "ip" tag ver)
ExternalProject_Add(ip
GIT_REPOSITORY "https://github.com/noaa-emc/nceplibs-ip"
GIT_TAG "${tag}"
PREFIX "${CMAKE_BINARY_DIR}/ip"
LIST_SEPARATOR |
CMAKE_ARGS "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP}"
"-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}/ip/ip-${ver}"
"-DENABLE_TESTS=${ENABLE_TESTS}"
"-DOPENMP=${OPENMP}"
)

getTagVer("${LIBCOMPS_FILE}" "sp" tag ver)
ExternalProject_Add(sp
GIT_REPOSITORY "https://github.com/noaa-emc/nceplibs-sp"
GIT_TAG "${tag}"
PREFIX "${CMAKE_BINARY_DIR}/sp"
LIST_SEPARATOR |
CMAKE_ARGS "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP}"
"-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}/sp/sp-${ver}"
"-DENABLE_TESTS=${ENABLE_TESTS}"
"-DOPENMP=${OPENMP}"
)

getTagVer("${LIBCOMPS_FILE}" "w3nco" tag ver)
ExternalProject_Add(w3nco
GIT_REPOSITORY "https://github.com/noaa-emc/nceplibs-w3nco"
GIT_TAG "${tag}"
PREFIX "${CMAKE_BINARY_DIR}/w3nco"
LIST_SEPARATOR |
CMAKE_ARGS "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP}"
"-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}/w3nco/w3nco-${ver}"
"-DENABLE_TESTS=${ENABLE_TESTS}"
)
set(nemsio_depends bacio w3nco)
set(nemsiogfs_depends nemsio)
set(w3emc_depends nemsio sigio)

getTagVer("${LIBCOMPS_FILE}" "nemsio" tag ver)
ExternalProject_Add(nemsio
GIT_REPOSITORY "https://github.com/noaa-emc/nceplibs-nemsio"
GIT_TAG "${tag}"
PREFIX "${CMAKE_BINARY_DIR}/nemsio"
LIST_SEPARATOR |
CMAKE_ARGS "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP}"
"-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}/nemsio/nemsio-${ver}"
"-DENABLE_TESTS=${ENABLE_TESTS}"
DEPENDS bacio w3nco
)
foreach(lib ${nceplibs})
getTagVer("${LIBCOMPS_FILE}" "${lib}" tag ver)
getInstallDir(${FLAT} ${lib} ${ver} installDir)

getTagVer("${LIBCOMPS_FILE}" "nemsiogfs" tag ver)
ExternalProject_Add(nemsiogfs
GIT_REPOSITORY "https://github.com/noaa-emc/nceplibs-nemsiogfs"
GIT_TAG "${tag}"
PREFIX "${CMAKE_BINARY_DIR}/nemsiogfs"
LIST_SEPARATOR |
CMAKE_ARGS "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP}"
"-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}/nemsiogfs/nemsiogfs-${ver}"
"-DENABLE_TESTS=${ENABLE_TESTS}"
"-DOPENMP=${OPENMP}"
DEPENDS nemsio
)

getTagVer("${LIBCOMPS_FILE}" "landsfcutil" tag ver)
ExternalProject_Add(landsfcutil
GIT_REPOSITORY "https://github.com/noaa-emc/nceplibs-landsfcutil"
GIT_TAG "${tag}"
PREFIX "${CMAKE_BINARY_DIR}/landsfcutil"
LIST_SEPARATOR |
CMAKE_ARGS "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP}"
"-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}/landsfcutil/landsfcutil-${ver}"
"-DENABLE_TESTS=${ENABLE_TESTS}"
DEPENDS nemsio
)

getTagVer("${LIBCOMPS_FILE}" "g2" tag ver)
ExternalProject_Add(g2
GIT_REPOSITORY "https://github.com/noaa-emc/nceplibs-g2"
GIT_TAG "${tag}"
PREFIX "${CMAKE_BINARY_DIR}/g2"
LIST_SEPARATOR |
CMAKE_ARGS "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP}"
"-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}/g2/g2-${ver}"
"-DENABLE_TESTS=${ENABLE_TESTS}"
)

getTagVer("${LIBCOMPS_FILE}" "g2tmpl" tag ver)
ExternalProject_Add(g2tmpl
GIT_REPOSITORY "https://github.com/noaa-emc/nceplibs-g2tmpl"
GIT_TAG "${tag}"
PREFIX "${CMAKE_BINARY_DIR}/g2tmpl"
LIST_SEPARATOR |
CMAKE_ARGS "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP}"
"-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}/g2tmpl/g2tmpl-${ver}"
"-DENABLE_TESTS=${ENABLE_TESTS}"
)
ExternalProject_Add(${lib}
GIT_REPOSITORY "https://github.com/noaa-emc/nceplibs-${lib}"
GIT_TAG "${tag}"
PREFIX "${CMAKE_BINARY_DIR}/${lib}"
LIST_SEPARATOR |
CMAKE_ARGS "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP}"
"-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}/${installDir}"
"-DENABLE_TESTS=${ENABLE_TESTS}"
DEPENDS ${${lib}_depends}
)
endforeach()

getTagVer("${LIBCOMPS_FILE}" "w3emc" tag ver)
ExternalProject_Add(w3emc
GIT_REPOSITORY "https://github.com/noaa-emc/nceplibs-w3emc"
GIT_TAG "${tag}"
PREFIX "${CMAKE_BINARY_DIR}/w3emc"
LIST_SEPARATOR |
CMAKE_ARGS "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP}"
"-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}/w3emc/w3emc-${ver}"
"-DENABLE_TESTS=${ENABLE_TESTS}"
DEPENDS nemsio sigio
)

if(BUILD_CRTM)
getTagVer("${LIBCOMPS_FILE}" "crtm" tag ver)
getInstallDir(${FLAT} "crtm" ${ver} installDir)

ExternalProject_Add(crtm
GIT_REPOSITORY "https://github.com/noaa-emc/emc_crtm"
GIT_TAG "${tag}"
PREFIX "${CMAKE_BINARY_DIR}/crtm"
LIST_SEPARATOR |
CMAKE_ARGS "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP}"
"-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}/crtm/crtm-${ver}"
"-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}/${installDir}"
)
endif()

if(BUILD_POST)
getTagVer("${LIBCOMPS_FILE}" "nceppost" tag ver)
getInstallDir(${FLAT} "nceppost" ${ver} installDir)

ExternalProject_Add(nceppost
GIT_REPOSITORY "https://github.com/aerorahul/emc_post"
GIT_TAG "${tag}"
GIT_SUBMODULES "CMakeModules"
PREFIX "${CMAKE_BINARY_DIR}/nceppost"
LIST_SEPARATOR |
CMAKE_ARGS "-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP}"
"-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}/nceppost/nceppost-${ver}"
"-DCMAKE_INSTALL_PREFIX=${CMAKE_INSTALL_PREFIX}/${installDir}"
"-DOPENMP=${OPENMP}"
"-DBUILD_POSTEXEC=OFF"
DEPENDS bacio w3nco w3emc g2 g2tmpl ip sp crtm
Expand All @@ -281,8 +171,9 @@ endif()

# Prepare to deploy modulefiles
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/deploy_modulefiles.sh.in
${CMAKE_CURRENT_BINARY_DIR}/deploy_modulefiles.sh
@ONLY)
${CMAKE_CURRENT_BINARY_DIR}/deploy_modulefiles.sh
@ONLY)

add_custom_target(prep2deploy ALL
COMMAND chmod +x ${CMAKE_CURRENT_BINARY_DIR}/deploy_modulefiles.sh
DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/deploy_modulefiles.sh)
Expand Down
16 changes: 10 additions & 6 deletions deploy_modulefiles.sh.in
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,19 @@ set -e

# Defaults to user options will be provided by CMake
modulesDestDir=${1:-"@CMAKE_INSTALL_PREFIX@/modules"}
OVERWRITEMODULES=${2:-"@OVERWRITEMODULES@"}
DOVERWRITEMODULES=${2:-"@OVERWRITEMODULES@"}

# These will be filled by CMake
nceplibsInstallDir=@CMAKE_INSTALL_PREFIX@
tmplModulefilesDir=@CMAKE_CURRENT_SOURCE_DIR@/tmplModulefiles
LIBCOMPS=@LIBCOMPS_FILE@
DFLAT="@FLAT@"

[[ $OVERWRITEMODULES == "ON" ]] && OVERWRITE="Y" || OVERWRITE="N"
[[ $DOVERWRITEMODULES == "ON" ]] && OVERWRITE="Y" || OVERWRITE="N"
[[ $DFLAT == "ON" ]] && FLAT="Y" || FLAT="N"

echo "Begin deploying modules ..."

# sed does not like delimiter (/) to be a part of replacement string
# so do magic
repl=$(echo ${nceplibsInstallDir} | sed -e "s#/#\\\/#g")

for libName in $(ls -1 $tmplModulefilesDir); do

# Ensure $libName is indeed a library being installed
Expand All @@ -45,6 +43,12 @@ for libName in $(ls -1 $tmplModulefilesDir); do
fi
\cp $srcModulefile $dstModulefile

[[ $FLAT =~ [YyTt] ]] && prefix=${nceplibsInstallDir} || prefix=${nceplibsInstallDir}/$libName

# sed does not like delimiter (/) to be a part of replacement string
# so do magic
repl=$(echo ${prefix} | sed -e "s#/#\\\/#g")

# Replace #NCEPLIBS_ROOT# from template with $nceplibsInstallDir
sed -i -e "s/#NCEPLIBS_ROOT#/${repl}/g" $dstModulefile

Expand Down
2 changes: 1 addition & 1 deletion tmplModulefiles/bacio/bacio.lua
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ local pkgVersion = myModuleVersion()
conflict(pkgName)

local prefix = "#NCEPLIBS_ROOT#"
local base = pathJoin(prefix,pkgName,pkgName .. '-' .. pkgVersion)
local base = pathJoin(prefix,pkgName .. '-' .. pkgVersion)

setenv("bacio_ROOT", base)
setenv("bacio_VERSION", pkgVersion)
Expand Down
2 changes: 1 addition & 1 deletion tmplModulefiles/crtm/crtm.lua
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ local pkgVersion = myModuleVersion()
conflict(pkgName)

local prefix = "#NCEPLIBS_ROOT#"
local base = pathJoin(prefix,pkgName,pkgName .. '-' .. pkgVersion)
local base = pathJoin(prefix,pkgName .. '-' .. pkgVersion)

setenv("crtm_ROOT", base)
setenv("crtm_VERSION", pkgVersion)
Expand Down
2 changes: 1 addition & 1 deletion tmplModulefiles/g2/g2.lua
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ local pkgVersion = myModuleVersion()
conflict(pkgName)

local prefix = "#NCEPLIBS_ROOT#"
local base = pathJoin(prefix,pkgName,pkgName .. '-' .. pkgVersion)
local base = pathJoin(prefix,pkgName .. '-' .. pkgVersion)

setenv("g2_ROOT", base)
setenv("g2_VERSION", pkgVersion)
Expand Down
2 changes: 1 addition & 1 deletion tmplModulefiles/g2tmpl/g2tmpl.lua
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ local pkgVersion = myModuleVersion()
conflict(pkgName)

local prefix = "#NCEPLIBS_ROOT#"
local base = pathJoin(prefix,pkgName,pkgName .. '-' .. pkgVersion)
local base = pathJoin(prefix,pkgName .. '-' .. pkgVersion)

setenv("g2tmpl_ROOT", base)
setenv("g2tmpl_VERSION", pkgVersion)
Expand Down
2 changes: 1 addition & 1 deletion tmplModulefiles/gfsio/gfsio.lua
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ local pkgVersion = myModuleVersion()
conflict(pkgName)

local prefix = "#NCEPLIBS_ROOT#"
local base = pathJoin(prefix,pkgName,pkgName .. '-' .. pkgVersion)
local base = pathJoin(prefix,pkgName .. '-' .. pkgVersion)

setenv("gfsio_ROOT", base)
setenv("gfsio_VERSION", pkgVersion)
Expand Down
2 changes: 1 addition & 1 deletion tmplModulefiles/ip/ip.lua
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ local pkgVersion = myModuleVersion()
conflict(pkgName)

local prefix = "#NCEPLIBS_ROOT#"
local base = pathJoin(prefix,pkgName,pkgName .. '-' .. pkgVersion)
local base = pathJoin(prefix,pkgName .. '-' .. pkgVersion)

setenv("ip_ROOT", base)
setenv("ip_VERSION", pkgVersion)
Expand Down
2 changes: 1 addition & 1 deletion tmplModulefiles/landsfcutil/landsfcutil.lua
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ local pkgVersion = myModuleVersion()
conflict(pkgName)

local prefix = "#NCEPLIBS_ROOT#"
local base = pathJoin(prefix,pkgName,pkgName .. '-' .. pkgVersion)
local base = pathJoin(prefix,pkgName .. '-' .. pkgVersion)

setenv("landsfcutil_ROOT", base)
setenv("landsfcutil_VERSION", pkgVersion)
Expand Down
2 changes: 1 addition & 1 deletion tmplModulefiles/nceppost/nceppost.lua
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ local pkgVersion = myModuleVersion()
conflict(pkgName)

local prefix = "#NCEPLIBS_ROOT#"
local base = pathJoin(prefix,pkgName,pkgName .. '-' .. pkgVersion)
local base = pathJoin(prefix,pkgName .. '-' .. pkgVersion)

setenv("nceppost_ROOT", base)
setenv("nceppost_VERSION", pkgVersion)
Expand Down
2 changes: 1 addition & 1 deletion tmplModulefiles/nemsio/nemsio.lua
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ local pkgVersion = myModuleVersion()
conflict(pkgName)

local prefix = "#NCEPLIBS_ROOT#"
local base = pathJoin(prefix,pkgName,pkgName .. '-' .. pkgVersion)
local base = pathJoin(prefix,pkgName .. '-' .. pkgVersion)

setenv("nemsio_ROOT", base)
setenv("nemsio_VERSION", pkgVersion)
Expand Down
2 changes: 1 addition & 1 deletion tmplModulefiles/nemsiogfs/nemsiogfs.lua
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ local pkgVersion = myModuleVersion()
conflict(pkgName)

local prefix = "#NCEPLIBS_ROOT#"
local base = pathJoin(prefix,pkgName,pkgName .. '-' .. pkgVersion)
local base = pathJoin(prefix,pkgName .. '-' .. pkgVersion)

setenv("nemsiogfs_ROOT", base)
setenv("nemsiogfs_VERSION", pkgVersion)
Expand Down
Loading

0 comments on commit a1d73cf

Please sign in to comment.