diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 98d8f0ec0a19c0a96b9a2fd9c5960d7f4bad77be..5f41fc683fd94f0a4da7795e29b0f2d840aeb85b 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -1,8 +1,7 @@ default: image: gcc # official gcc image, based on debian, see https://hub.docker.com/_/gcc/ before_script: - - apt-get update && apt-get -y install cmake numdiff - - export LD_LIBRARY_PATH="$PWD/lib:$LD_LIBRARY_PATH" + - apt-get update && apt-get -y install cmake stages: - build @@ -27,77 +26,60 @@ build: paths: - build.tar.gz -meteo_reading_interpol: +.test_base: stage: test script: - tar -xzvf build.tar.gz - cp -r tests build - cd build - - ctest -R meteo_reading_interpol.smoke + - ctest -R ${TEST_NAME} + +meteo_reading_interpol: + extends: .test_base + variables: + TEST_NAME: meteo_reading_interpol.smoke meteo_reading_no_interpol: - stage: test - script: - - tar -xzvf build.tar.gz - - cp -r tests build - - cd build - - ctest -R meteo_reading_no_interpol.smoke + extends: .test_base + variables: + TEST_NAME: meteo_reading_no_interpol.smoke dataEditing: - stage: test - script: - - tar -xzvf build.tar.gz - - cp -r tests build - - cd build - - ctest -R data_editing.smoke + extends: .test_base + variables: + TEST_NAME: data_editing.smoke sun: - stage: test - script: - - tar -xzvf build.tar.gz - - cp -r tests build - - cd build - - ctest -R sun.smoke + extends: .test_base + variables: + TEST_NAME: sun.smoke + before_script: + - apt-get update && apt-get -y install cmake numdiff dem_reading: - stage: test - script: - - tar -xzvf build.tar.gz - - cp -r tests build - - cd build - - ctest -R dem_reading.smoke + extends: .test_base + variables: + TEST_NAME: dem_reading.smoke 2D_interpolations: - stage: test - script: - - tar -xzvf build.tar.gz - - cp -r tests build - - cd build - - ctest -R 2D_interpolations.smoke + extends: .test_base + variables: + TEST_NAME: 2D_interpolations.smoke arrays: - stage: test - script: - - tar -xzvf build.tar.gz - - cp -r tests build - - cd build - - ctest -R arrays.smoke + extends: .test_base + variables: + TEST_NAME: arrays.smoke coords: - stage: test - script: - - tar -xzvf build.tar.gz - - cp -r tests build - - cd build - - ctest -R coordinates.smoke + extends: .test_base + variables: + TEST_NAME: coordinates.smoke stats: - stage: test - script: - - tar -xzvf build.tar.gz - - cp -r tests build - - cd build - - ctest -R stats.smoke + extends: .test_base + variables: + TEST_NAME: stats.smoke running times and coverage: stage: test_coverage @@ -107,20 +89,20 @@ running times and coverage: - cd build - ctest && ctest -D NightlyCoverage -release build: +Debian release build: stage: release_build rules: - if: $CI_COMMIT_TAG # Run this job when a tag is created manually dependencies: [] script: - - apt-get -y install doxygen graphviz rpm # both doxygen and graphviz are required for cmake "FindDoxygen" + - apt-get -y install doxygen graphviz # both doxygen and graphviz are required for cmake "FindDoxygen" - export METEOIO_VERSION=${CI_COMMIT_TAG#*-} - export VERSION_MAJOR=`echo $METEOIO_VERSION | cut -d. -f1` - export VERSION_MINOR=`echo $METEOIO_VERSION | cut -d. -f2` - export VERSION_PATCH=`echo $METEOIO_VERSION | cut -d. -f3` - echo VERSION_MAJOR=$VERSION_MAJOR - VERSION_MINOR=$VERSION_MINOR - VERSION_PATCH=$VERSION_PATCH - cmake -S . -B . -D DEST:STRING=safe -D VERSION_FROM_GIT:BOOL=OFF -D BUILD_TESTING:BOOL=OFF - -D USE_LTO_OPTIMIZATIONS:BOOL=ON -D INSTALL_DOC:BOOL=ON -D CPACK_BUNDLE_ALL:BOOL=ON + -D USE_LTO_OPTIMIZATIONS:BOOL=ON -D INSTALL_DOC:BOOL=ON -D CPACK_BUNDLE_ALL:BOOL=ON -D CPACK_GENERATOR:STRING="DEB;TGZ" - make -j 2 - make doc - cpack @@ -131,10 +113,34 @@ release build: expire_in: 1h paths: - MeteoIO-${CI_COMMIT_TAG#*-}-x86_64.tar.gz - - MeteoIO-${CI_COMMIT_TAG#*-}-x86_64.rpm - MeteoIO-${CI_COMMIT_TAG#*-}-x86_64.deb - MeteoIO-${CI_COMMIT_TAG#*-}-doc.tar.gz +Fedora release build: + stage: release_build + image: fedora + rules: + - if: $CI_COMMIT_TAG # Run this job when a tag is created manually + dependencies: [] + before_script: + - yum -y install make gcc g++ cmake doxygen graphviz rpm-build + script: + - echo "%__os_install_post %{nil}" > ~/.rpmmacros # Turn off binary stripping for rpm + - export METEOIO_VERSION=${CI_COMMIT_TAG#*-} + - export VERSION_MAJOR=`echo $METEOIO_VERSION | cut -d. -f1` + - export VERSION_MINOR=`echo $METEOIO_VERSION | cut -d. -f2` + - export VERSION_PATCH=`echo $METEOIO_VERSION | cut -d. -f3` + - echo VERSION_MAJOR=$VERSION_MAJOR - VERSION_MINOR=$VERSION_MINOR - VERSION_PATCH=$VERSION_PATCH + - cmake -S . -B . -D DEST:STRING=safe -D VERSION_FROM_GIT:BOOL=OFF -D BUILD_TESTING:BOOL=OFF -D USE_LTO_OPTIMIZATIONS:BOOL=ON + -D INSTALL_DOC:BOOL=ON -D CPACK_BUNDLE_ALL:BOOL=ON -D CPACK_GENERATOR:STRING="RPM" -D USE_RPATH:BOOL=OFF + - make -j 2 + - make doc + - cpack + artifacts: + expire_in: 1h + paths: + - MeteoIO-${CI_COMMIT_TAG#*-}-x86_64.rpm + release: stage: release image: registry.gitlab.com/gitlab-org/release-cli:latest @@ -143,7 +149,8 @@ release: rules: - if: $CI_COMMIT_TAG # Run this job when a tag is created manually dependencies: - - release build + - Debian release build + - Fedora release build script: - export METEOIO_VERSION=${CI_COMMIT_TAG#*-} - echo "Uploading MeteoIO-${METEOIO_VERSION} packages to @@ -163,13 +170,13 @@ release: ref: '$CI_COMMIT_TAG' assets: links: - - name: 'Linux binary tarball' + - name: 'Linux Debian binary tarball' url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/meteoio/${CI_COMMIT_TAG#*-}/MeteoIO-${CI_COMMIT_TAG#*-}-x86_64.tar.gz' link_type: 'other' - - name: 'Linux RPM binary package' + - name: 'Linux Fedora RPM binary package' url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/meteoio/${CI_COMMIT_TAG#*-}/MeteoIO-${CI_COMMIT_TAG#*-}-x86_64.rpm' link_type: 'other' - - name: 'Linux DEB binary package' + - name: 'Linux Debian DEB binary package' url: '${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/generic/meteoio/${CI_COMMIT_TAG#*-}/MeteoIO-${CI_COMMIT_TAG#*-}-x86_64.deb' link_type: 'other' - name: 'Documentation only package' diff --git a/CMakeLists.txt b/CMakeLists.txt index fa98d99474331830197f67ce93c615bd4fbdd803..0bd260775a031b86d0644737b5f989d64bb31af7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -43,26 +43,32 @@ IF(UNIX) SET(EXTRA "-DHAVE_STRUCT_STAT_ST_FLAGS ${EXTRA}") ENDIF() - #set a full rpath for both build & install tree - SET(CMAKE_SKIP_BUILD_RPATH FALSE) - SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) - # add the directory of the binary to the rpath - #set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath,'$ORIGIN'") - IF(APPLE) - SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath,'@executable_path',-rpath,'@executable_path/../lib'") - SET(CMAKE_OSX_DEPLOYMENT_TARGET "10.13" CACHE STRING "Minimum OS X deployment version") - ELSE(APPLE) - set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath,'$ORIGIN',-rpath,'$ORIGIN'/../lib") - ENDIF(APPLE) - - # add the automatically determined parts of the RPATH - SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) - #SET(CMAKE_INSTALL_RPATH $ORIGIN) - # 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") - ENDIF("${isSystemDir}" STREQUAL "-1") + OPTION(USE_RPATH "Use rpath (not recommended for Fedora)" ON) + MARK_AS_ADVANCED(FORCE USE_RPATH) + if(USE_RPATH) + #set a full rpath for both build & install tree + SET(CMAKE_SKIP_BUILD_RPATH FALSE) + SET(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE) + # add the directory of the binary to the rpath + #set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath,'$ORIGIN'") + IF(APPLE) + SET(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath,'@executable_path',-rpath,'@executable_path/../lib'") + SET(CMAKE_OSX_DEPLOYMENT_TARGET "10.13" CACHE STRING "Minimum OS X deployment version") + ELSE(APPLE) + set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,-rpath,'$ORIGIN',-rpath,'$ORIGIN'/../lib") + ENDIF(APPLE) + + # add the automatically determined parts of the RPATH + SET(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE) + #SET(CMAKE_INSTALL_RPATH $ORIGIN) + # 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") + ENDIF("${isSystemDir}" STREQUAL "-1") + ELSE(USE_RPATH) + SET(CMAKE_SKIP_BUILD_RPATH TRUE) + ENDIF(USE_RPATH) IF(APPLE) SET(DLL_EXT "dylib*") @@ -265,7 +271,7 @@ IF(CPACK_BUNDLE_ALL) FILE(GLOB stdlibs "${CMAKE_SOURCE_DIR}/bin/libstdc++*.dll") FILE(GLOB libgcc "${CMAKE_SOURCE_DIR}/bin/libgcc_s_seh*.dll") IF("${stdlibs}" STREQUAL "") - MESSAGE("STDLIBS not found! Please make sure they are in ${CMAKE_SOURCE_DIR}/bin") + MESSAGE("STDLIBS not found! Please make sure they are in ${CMAKE_SOURCE_DIR}/bin") ENDIF("${stdlibs}" STREQUAL "") INSTALL(FILES ${winpthreads} ${stdlibs} ${libgcc} DESTINATION bin PERMISSIONS ${ALL_RX_PERM} COMPONENT exe) ENDIF(CPACK_BUNDLE_STDLIBS) @@ -346,7 +352,8 @@ IF(UNIX) SET(CPACK_PACKAGE_ICON "${CMAKE_SOURCE_DIR}/meteoio/icons/icon.icns") SET_SOURCE_FILES_PROPERTIES(${CPACK_BUNDLE_ICON} PROPERTIES MACOSX_PACKAGE_LOCATION Resources) ELSE(APPLE) #Linux packages: rmp, deb and tgz - SET(CPACK_GENERATOR "DEB;RPM;TGZ") + SET(CPACK_GENERATOR "DEB;RPM;TGZ" CACHE STRING "Which packages to build") + MARK_AS_ADVANCED(FORCE CPACK_GENERATOR) SET(CPACK_PACKAGING_INSTALL_PREFIX "/usr") SET(CPACK_DEBIAN_PACKAGE_NAME "meteoio") SET(CPACK_DEBIAN_PACKAGE_SECTION "devel")