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:
akva 2012-08-16 15:27:06 +00:00 committed by Knut Morten Okstad
parent d5249ef63c
commit a248f5146a
5 changed files with 181 additions and 16 deletions

View File

@ -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)

View File

@ -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")

View File

@ -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)

View 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
View 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