added: cpack for system package building
currently supports debian/ubuntu and enterprise linux 6 derivates such as Scientific Linux 6 git-svn-id: http://svn.sintef.no/trondheim/IFEM/trunk@1876 e10b68d5-8a6e-419e-a041-bce267b0401d
This commit is contained in:
parent
d5249ef63c
commit
a248f5146a
@ -4,11 +4,13 @@ CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
|
||||
SET(IFEM_VERSION_MAJOR 0)
|
||||
SET(IFEM_VERSION_MINOR 9)
|
||||
SET(IFEM_VERSION_PATCH 0)
|
||||
SET(CPACK_PACKAGE_VERSION "${IFEM_VERSION_MAJOR}.${IFEM_VERSION_MINOR}.${IFEM_VERSION_PATCH}")
|
||||
SET(IFEM_VERSION "${IFEM_VERSION_MAJOR}.${IFEM_VERSION_MINOR}.${IFEM_VERSION_PATCH}")
|
||||
|
||||
# Generate header with version info
|
||||
CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/src/IFEM.h.in
|
||||
${PROJECT_SOURCE_DIR}/src/IFEM.h)
|
||||
${PROJECT_SOURCE_DIR}/src/IFEM.h @ONLY)
|
||||
CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/scripts/fixupdebs.sh.in
|
||||
${PROJECT_SOURCE_DIR}/scripts/fixupdebs.sh @ONLY)
|
||||
|
||||
# Required defines (well, PROFILE_LEVEL is not actually required, but...)
|
||||
SET(CMAKE_CXX_FLAGS "-Dreal=double -DepsZ=1.0e-12 -DPROFILE_LEVEL=3")
|
||||
@ -73,6 +75,9 @@ IF(NOT(LRSpline_LIBRARIES AND LRSpline_INCLUDE_DIRS))
|
||||
string(REGEX REPLACE "${PROJECT_SOURCE_DIR}/src/ASM/LR/[^;]*" "" IFEM_SRCS "${IFEM_SRCS}")
|
||||
ENDIF(NOT(LRSpline_LIBRARIES AND LRSpline_INCLUDE_DIRS))
|
||||
ADD_LIBRARY(IFEM ${IFEM_SRCS} ${TINYXML_SRCS})
|
||||
TARGET_LINK_LIBRARIES(IFEM ${IFEM_DEPLIBS})
|
||||
SET_TARGET_PROPERTIES(IFEM PROPERTIES VERSION ${IFEM_VERSION}
|
||||
SOVERSION 1)
|
||||
|
||||
IF(HDF5_LIBRARIES AND VTFWRITER_LIBRARIES)
|
||||
FILE(GLOB_RECURSE HDF2VTF_SRCS ${PROJECT_SOURCE_DIR}/Apps/HDF5toVTx/*.C)
|
||||
@ -80,6 +85,7 @@ IF(HDF5_LIBRARIES AND VTFWRITER_LIBRARIES)
|
||||
TARGET_LINK_LIBRARIES(HDF5toVTx IFEM ${IFEM_DEPLIBS})
|
||||
ENDIF(HDF5_LIBRARIES AND VTFWRITER_LIBRARIES)
|
||||
|
||||
# For generating the doxy
|
||||
ADD_CUSTOM_TARGET(doc doxygen
|
||||
WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
|
||||
COMMENT "Generating API documentation" VERBATIM)
|
||||
@ -107,19 +113,21 @@ ADD_SUBDIRECTORY(Apps/Poisson)
|
||||
ADD_SUBDIRECTORY(Apps/Elasticity/Linear)
|
||||
|
||||
# 'install' target
|
||||
# Have install force doc build
|
||||
INSTALL(CODE "EXECUTE_PROCESS(COMMAND ${CMAKE_BUILD_TOOL} doc WORKING_DIRECTORY \"${CMAKE_CURRENT_BINARY_DIR}\")" COMPONENT doc)
|
||||
|
||||
IF(WIN32)
|
||||
# TODO
|
||||
ELSE(WIN32)
|
||||
# applications
|
||||
IF(VTFWRITER_LIBRARIES AND VTFWRITER_INCLUDES AND
|
||||
HDF5_LIBRARIES AND VTFWRITER_LIBRARIES)
|
||||
SET(INSTALL_TARGETS ${INSTALL_TARGETS} HDF5toVTx)
|
||||
INSTALL(TARGETS HDF5toVTx DESTINATION bin)
|
||||
INSTALL(TARGETS HDF5toVTx DESTINATION bin COMPONENT bin)
|
||||
ENDIF(VTFWRITER_LIBRARIES AND VTFWRITER_INCLUDES AND
|
||||
HDF5_LIBRARIES AND VTFWRITER_LIBRARIES)
|
||||
|
||||
# lib
|
||||
INSTALL(TARGETS IFEM DESTINATION lib)
|
||||
INSTALL(TARGETS IFEM DESTINATION lib COMPONENT bin)
|
||||
|
||||
# headers
|
||||
FILE(GLOB IFEM_HEADERS src/ASM/AlgEqSystem.h src/ASM/ASMbase.h
|
||||
@ -132,17 +140,24 @@ ELSE(WIN32)
|
||||
src/ASM/LocalIntegral.h src/ASM/SAMpatch.h
|
||||
src/ASM/TimeDomain.h
|
||||
src/Integrands/*.h src/LinAlg/*.h src/SIM/*.h
|
||||
src/Utility/*.h)
|
||||
src/Utility/*.h
|
||||
src/IFEM.h)
|
||||
INSTALL(FILES ${IFEM_HEADERS}
|
||||
DESTINATION include/IFEM)
|
||||
DESTINATION include/IFEM COMPONENT ${IFEM_DEV_COMPONENT})
|
||||
|
||||
# cmake modules
|
||||
FILE(GLOB_RECURSE LOCAL_CMAKE_MODULES cmake/Modules/*.cmake)
|
||||
FILE(GLOB LOCAL_CMAKE_MODULES cmake/Modules/Find*.cmake)
|
||||
INSTALL(FILES ${LOCAL_CMAKE_MODULES}
|
||||
DESTINATION share/cmake/Modules)
|
||||
DESTINATION ${CMAKE_ROOT}/Modules COMPONENT bin)
|
||||
|
||||
# documentation and license
|
||||
INSTALL(DIRECTORY ${PROJECT_SOURCE_DIR}/doc/html DESTINATION share/doc/IFEM PATTERN *.md5 EXCLUDE)
|
||||
INSTALL(FILES ${PROJECT_SOURCE_DIR}/COPYING DESTINATION share/doc/IFEM)
|
||||
INSTALL(FILES ${PROJECT_SOURCE_DIR}/doc/Tutorials/GettingStarted.pdf DESTINATION share/doc/IFEM)
|
||||
INSTALL(DIRECTORY ${PROJECT_SOURCE_DIR}/doc/html DESTINATION share/doc/IFEM
|
||||
COMPONENT doc
|
||||
PATTERN *.md5 EXCLUDE
|
||||
PATTERN *.map EXCLUDE)
|
||||
INSTALL(FILES ${PROJECT_SOURCE_DIR}/COPYING DESTINATION share/doc/IFEM COMPONENT doc)
|
||||
INSTALL(FILES ${PROJECT_SOURCE_DIR}/doc/Tutorials/GettingStarted.pdf DESTINATION share/doc/IFEM COMPONENT doc)
|
||||
ENDIF(WIN32)
|
||||
|
||||
#Packaging
|
||||
INCLUDE(IFEMPackaging)
|
||||
|
@ -1,11 +1,9 @@
|
||||
IF(NOT DEFINED FORCE_SYSTEM_IFEM OR NOT "${FORCE_SYSTEM_IFEM}")
|
||||
IF(NOT IFEM_FORCE_SYSTEM_LIB)
|
||||
FIND_PATH(IFEM_PATH
|
||||
NAMES IFEM.h
|
||||
PATHS ${PROJECT_SOURCE_DIR}/../../src/
|
||||
${PROJECT_SOURCE_DIR}/../../../src/)
|
||||
ENDIF(NOT DEFINED FORCE_SYSTEM_IFEM OR NOT "${FORCE_SYSTEM_IFEM}")
|
||||
|
||||
FIND_PACKAGE(IFEMDeps)
|
||||
ENDIF(NOT IFEM_FORCE_SYSTEM_LIB)
|
||||
|
||||
IF(IFEM_PATH)
|
||||
# Build is in-tree
|
||||
@ -27,6 +25,10 @@ IF(IFEM_PATH)
|
||||
MESSAGE(WARNING "Could not find the in-tree libIFEM library, "
|
||||
"we assume it will be built into a build-type dir")
|
||||
ENDIF(NOT IFEM_LIBRARIES)
|
||||
IF (NOT BUILD_SHARED_LIBS)
|
||||
FIND_PACKAGE(IFEMDeps REQUIRED)
|
||||
SET(IFEM_LIBRARIES ${IFEM_LIBRARIES} ${IFEM_DEPLIBS})
|
||||
ENDIF(NOT BUILD_SHARED_LIBS)
|
||||
|
||||
IF(NOT IFEM_USE_SYSTEM_TINYXML)
|
||||
SET(IFEM_INCLUDES ${IFEM_INCLUDES}
|
||||
@ -45,6 +47,10 @@ ELSE(IFEM_PATH)
|
||||
FIND_LIBRARY(IFEM_LIBRARIES
|
||||
NAMES IFEM
|
||||
PATHS $ENV{HOME}/lib)
|
||||
|
||||
# system lib always uses system tixml
|
||||
FIND_PACKAGE(TinyXML REQUIRED)
|
||||
SET(IFEM_DEPLIBS ${IFEM_DEPLIBS} ${TINYXML_LIBRARIES})
|
||||
ENDIF(IFEM_PATH)
|
||||
|
||||
INCLUDE(FindPackageHandleStandardArgs)
|
||||
@ -54,3 +60,16 @@ find_package_handle_standard_args(IFEM DEFAULT_MSG
|
||||
SET(IFEM_LIBRARIES ${IFEM_LIBRARIES} ${IFEM_DEPLIBS})
|
||||
SET(IFEM_INCLUDES ${IFEM_INCLUDES} ${IFEM_DEPINCLUDES})
|
||||
|
||||
# Needed as we have templates using these flags
|
||||
ENABLE_LANGUAGE(CXX)
|
||||
IF(CMAKE_CXX_COMPILER MATCHES icpc)
|
||||
SET(IFEM_CXX_FLAGS "${IFEM_CXX_FLAGS} -DUSE_MKL -mkl=sequential")
|
||||
SET(IFEM_BUILD_CXX_FLAGS "${IFEM_BUILD_CXX_FLAGS} -DUSE_MKL -mkl=sequential")
|
||||
ELSE(CMAKE_CXX_COMPILER MATCHES icpc)
|
||||
SET(IFEM_CXX_FLAGS "${IFEM_CXX_FLAGS} -DUSE_CBLAS")
|
||||
SET(IFEM_BUILD_CXX_FLAGS "${IFEM_BUILD_CXX_FLAGS} -DUSE_CBLAS")
|
||||
FIND_PACKAGE(LAPACK REQUIRED)
|
||||
SET(IFEM_LIBRARIES ${IFEM_LIBRARIES} ${LAPACK_LIBRARIES})
|
||||
ENDIF(CMAKE_CXX_COMPILER MATCHES icpc)
|
||||
|
||||
SET(IFEM_CXX_FLAGS "${IFEM_CXX_FLAGS} -Dreal=double")
|
||||
|
@ -68,10 +68,12 @@ IF(IFEM_USE_SUPERLU OR IFEM_USE_SUPERLU_MT)
|
||||
SET(IFEM_DEPLIBS ${IFEM_DEPLIBS} ${SuperLU_MT_LIBRARIES} ${CMAKE_THREAD_LIBS_INIT})
|
||||
SET(IFEM_DEPINCLUDES ${IFEM_DEPINCLUDES} ${SuperLU_MT_INCLUDES})
|
||||
SET(IFEM_BUILD_CXX_FLAGS "${IFEM_BUILD_CXX_FLAGS} -DHAS_SUPERLU_MT")
|
||||
MESSAGE(STATUS "Using SuperLU-MT")
|
||||
ELSEIF(SuperLU_LIBRARIES AND SuperLU_INCLUDES)
|
||||
SET(IFEM_DEPLIBS ${IFEM_DEPLIBS} ${SuperLU_LIBRARIES})
|
||||
SET(IFEM_DEPINCLUDES ${IFEM_DEPINCLUDES} ${SuperLU_INCLUDES})
|
||||
SET(IFEM_BUILD_CXX_FLAGS "${IFEM_BUILD_CXX_FLAGS} -DHAS_SUPERLU")
|
||||
MESSAGE(STATUS "Using SuperLU")
|
||||
ENDIF(SuperLU_MT_LIBRARIES AND SuperLU_MT_INCLUDES AND IFEM_USE_SUPERLU_MT)
|
||||
ENDIF(IFEM_USE_SUPERLU OR IFEM_USE_SUPERLU_MT)
|
||||
|
||||
@ -153,4 +155,13 @@ IF(IFEM_USE_OPENMP)
|
||||
ENDIF(OPENMP_FOUND)
|
||||
ENDIF(IFEM_USE_OPENMP)
|
||||
|
||||
# Dev or devel component?
|
||||
EXECUTE_PROCESS(COMMAND lsb_release "-si" OUTPUT_VARIABLE VENDOR)
|
||||
STRING(REGEX REPLACE "\n" "" SYSTEM_VENDOR ${VENDOR})
|
||||
|
||||
SET(IFEM_DEV_COMPONENT "dev")
|
||||
IF (SYSTEM_VENDOR STREQUAL "Scientific")
|
||||
SET(IFEM_DEV_COMPONENT "devel")
|
||||
ENDIF (SYSTEM_VENDOR STREQUAL "Scientific")
|
||||
|
||||
SET(IFEM_CONFIGURED 1)
|
||||
|
57
cmake/Modules/IFEMPackaging.cmake
Normal file
57
cmake/Modules/IFEMPackaging.cmake
Normal file
@ -0,0 +1,57 @@
|
||||
EXECUTE_PROCESS(COMMAND lsb_release "-sc" OUTPUT_VARIABLE CODENAME)
|
||||
STRING(REGEX REPLACE "\n" "" SYSTEM_CODENAME ${CODENAME})
|
||||
EXECUTE_PROCESS(COMMAND lsb_release "-si" OUTPUT_VARIABLE VENDOR)
|
||||
STRING(REGEX REPLACE "\n" "" SYSTEM_VENDOR ${VENDOR})
|
||||
|
||||
IF (SYSTEM_VENDOR STREQUAL "Ubuntu" OR SYSTEM_VENDOR STREQUAL "Debian")
|
||||
EXECUTE_PROCESS(COMMAND dpkg --print-architecture OUTPUT_VARIABLE ARCHITECTURE)
|
||||
STRING(REGEX REPLACE "\n" "" CPACK_DEBIAN_PACKAGE_ARCHITECTURE ${ARCHITECTURE})
|
||||
SET(SYSTEM_ARCHITECTURE ${CPACK_DEBIAN_PACKAGE_ARCHITECTURE})
|
||||
SET(CPACK_GENERATOR "DEB")
|
||||
SET(CPACK_DEBIAN_PACKAGE_MAINTAINER "Arne Morten Kvarving <arne.morten.kvarving@sintef.no>")
|
||||
SET(CPACK_DEBIAN_PACKAGE_DEPENDS "libarpack2, liblapack3gf, libsuperlu3, libhdf5-serial-1.8.4, libtinyxml2.6.2")
|
||||
SET(CPACK_DEB_COMPONENT_INSTALL ON)
|
||||
ENDIF (SYSTEM_VENDOR STREQUAL "Ubuntu" OR SYSTEM_VENDOR STREQUAL "Debian")
|
||||
|
||||
IF (SYSTEM_VENDOR STREQUAL "Scientific")
|
||||
SET(CPACK_GENERATOR "RPM")
|
||||
EXECUTE_PROCESS(COMMAND uname "-p" OUTPUT_VARIABLE ARCHITECTURE)
|
||||
STRING(REGEX REPLACE "\n" "" CPACK_RPM_PACKAGE_ARCHITECTURE ${ARCHITECTURE})
|
||||
SET(SYSTEM_ARCHITECTURE ${CPACK_RPM_PACKAGE_ARCHITECTURE})
|
||||
SET(CPACK_RPM_COMPONENT_INSTALL ON)
|
||||
SET(CPACK_RPM_bin_PACKAGE_REQUIRES "arpack, lapack, atlas, blas, hdf5 >= 1.8")
|
||||
SET(CPACK_RPM_devel_PACKAGE_REQUIRES "libifem-bin, arpack-devel, lapack-devel, atlas-devel, blas-devel, hdf5-devel >= 1.8")
|
||||
SET(CPACK_RPM_examples_PACKAGE_REQUIRES "libifem-devel")
|
||||
ENDIF(SYSTEM_VENDOR STREQUAL "Scientific")
|
||||
|
||||
# Common packaging
|
||||
SET(CPACK_PACKAGE_NAME "libifem")
|
||||
SET(CPACK_PACKAGE_DESCRIPTION_SUMMARY "IFEM - the isogemetric finite element library")
|
||||
SET(CPACK_PACKAGE_VERSION "${IFEM_VERSION}")
|
||||
SET(CPACK_PACKAGE_VERSION_MAJOR ${IFEM_VERSION_MAJOR})
|
||||
SET(CPACK_PACKAGE_VERSION_MINOR ${IFEM_VERSION_MINOR})
|
||||
SET(CPACK_PACKAGE_VERSION_PATCH ${IFEM_VERSION_PATCH})
|
||||
SET(CPACK_PACKAGE_FILE_NAME "libifem_${CPACK_PACKAGE_VERSION}_${SYSTEM_ARCHITECTURE}-${SYSTEM_CODENAME}")
|
||||
SET(CPACK_RESOURCE_FILE_LICENSE ${PROJECT_SOURCE_DIR}/COPYING)
|
||||
SET(CPACK_COMPONENTS_ALL bin doc examples ${IFEM_DEV_COMPONENT})
|
||||
SET(CPACK_STRIP_FILES "bin/Poisson;bin/LinEl;bin/HDF5toVTx;lib/libIFEM.so.${IFEM_VERSION}")
|
||||
|
||||
INCLUDE(CPack)
|
||||
|
||||
# For generating ubuntu packages
|
||||
ADD_CUSTOM_TARGET(ubuntu
|
||||
COMMAND make package
|
||||
COMMAND ${PROJECT_SOURCE_DIR}/scripts/fixupdebs.sh
|
||||
COMMAND echo "All done. Packages are in UbuntuDebs/"
|
||||
COMMENT "Generating and fixing up Ubuntu packages" VERBATIM)
|
||||
|
||||
# For generating RPM packages
|
||||
ADD_CUSTOM_TARGET(rpm
|
||||
COMMAND make package
|
||||
COMMAND mkdir -p RPMs
|
||||
COMMAND mv libifem_${CPACK_PACKAGE_VERSION}_${SYSTEM_ARCHITECTURE}-${SYSTEM_CODENAME}-bin.rpm RPMs/libifem-bin_${CPACK_PACKAGE_VERSION}_${SYSTEM_ARCHITECTURE}-${SYSTEM_CODENAME}.rpm
|
||||
COMMAND mv libifem_${CPACK_PACKAGE_VERSION}_${SYSTEM_ARCHITECTURE}-${SYSTEM_CODENAME}-doc.rpm RPMs/libifem-doc_${CPACK_PACKAGE_VERSION}_noarch-${SYSTEM_CODENAME}.rpm
|
||||
COMMAND mv libifem_${CPACK_PACKAGE_VERSION}_${SYSTEM_ARCHITECTURE}-${SYSTEM_CODENAME}-devel.rpm RPMs/libifem-devel_${CPACK_PACKAGE_VERSION}_noarch-${SYSTEM_CODENAME}.rpm
|
||||
COMMAND mv libifem_${CPACK_PACKAGE_VERSION}_${SYSTEM_ARCHITECTURE}-${SYSTEM_CODENAME}-examples.rpm RPMs/libifem-examples_${CPACK_PACKAGE_VERSION}_noarch-${SYSTEM_CODENAME}.rpm
|
||||
COMMAND echo "All done. Packages are in RPMs/"
|
||||
COMMENT "Generating and fixing up RPM packages" VERBATIM)
|
63
scripts/fixupdebs.sh.in
Executable file
63
scripts/fixupdebs.sh.in
Executable file
@ -0,0 +1,63 @@
|
||||
#!/bin/bash
|
||||
|
||||
# This script helps workaround current CPack (2.8.8) limitations
|
||||
# 1) Fix the main deb to drop the '-bin' postfix
|
||||
# 2) Fix -dev and -examples dependencies and descriptions
|
||||
# 3) Remove dependencies from -doc and fix the description
|
||||
#
|
||||
# It expects to be run with debs in the cwd
|
||||
|
||||
function Unpack() {
|
||||
mkdir tmp
|
||||
dpkg-deb -R $1 tmp
|
||||
cd tmp/DEBIAN
|
||||
}
|
||||
|
||||
function Pack() {
|
||||
cd ../..
|
||||
dpkg-deb -b tmp $1
|
||||
rm tmp -rf
|
||||
}
|
||||
|
||||
path=`pwd`
|
||||
mkdir -p UbuntuDebs
|
||||
rm -f UbuntuDebs/*
|
||||
arch=`dpkg --print-architecture`
|
||||
code=`lsb_release -sc`
|
||||
version=@IFEM_VERSION_MAJOR@.@IFEM_VERSION_MINOR@.@IFEM_VERSION_PATCH@
|
||||
mkdir -p /tmp/debfixer
|
||||
cd /tmp/debfixer
|
||||
|
||||
# Step 1
|
||||
Unpack $path/libifem_${version}_$arch-$code-bin.deb
|
||||
echo "Suggests: libifem-examples, libifem-doc" >> control
|
||||
sed -i control -e 's/-bin//g'
|
||||
sed '/^$/d' -i control
|
||||
Pack $path/UbuntuDebs/libifem_${version}_$arch-$code.deb
|
||||
rm -f $path/libifem_${version}_$arch-$code-bin.deb
|
||||
|
||||
# Step 2
|
||||
Unpack $path/libifem_${version}_$arch-$code-dev.deb
|
||||
echo "Suggests: libifem-examples, libifem-doc" >> control
|
||||
sed -i control -e 's/Depends:.*$/Depends: libifem, libtinyxml-dev, libblas-dev, liblapack-dev, libarpack2-dev, libsuperlu3-dev/g' -e 's/\(Description: .*$\)/\1 - development headers/g'
|
||||
sed '/^$/d' -i control
|
||||
Pack $path/UbuntuDebs/libifem-dev_${version}_all-$code.deb
|
||||
rm -f $path/libifem_${version}_$arch-$code-dev.deb
|
||||
|
||||
Unpack $path/libifem_${version}_$arch-$code-examples.deb
|
||||
echo "Suggests: libifem-doc" >> control
|
||||
sed -i control -e 's/Depends:.*$/Depends: libifem, libifem-dev/g' -e 's/\(Description: .*$\)/\1 - examples/g'
|
||||
sed '/^$/d' -i control
|
||||
Pack $path/UbuntuDebs/libifem-examples_${version}_all-$code.deb
|
||||
rm -f $path/libifem_${version}_$arch-$code-examples.deb
|
||||
|
||||
# Step 3
|
||||
Unpack $path/libifem_${version}_$arch-$code-doc.deb
|
||||
echo -e "Suggests: libifem-examples" >> control
|
||||
sed '/^Depends:.*$/d' -i control
|
||||
sed -i control -e 's/\(Description: .*$\)/\1 - documentation/g'
|
||||
sed '/^$/d' -i control
|
||||
Pack $path/UbuntuDebs/libifem-doc_${version}_all-$code.deb
|
||||
rm -f $path/libifem_${version}_$arch-$code-doc.deb
|
||||
|
||||
rmdir /tmp/debfixer
|
Loading…
Reference in New Issue
Block a user