From c9854a5a0c1ccd855f309402ac98b232fa458fbf Mon Sep 17 00:00:00 2001
From: Lars Krombeen <lars.krombeen@cgi.com>
Date: Tue, 8 Dec 2020 08:44:38 +0100
Subject: [PATCH] Packaging

---
 .gitlab-ci.yml              | 21 ++++++++++++++++++++-
 CMakeLists.txt              |  9 +++++++++
 docker/Dockerfile-everybeam |  2 +-
 package/CMakeLists.txt      | 17 +++++++++++++++++
 python/CMakeLists.txt       |  8 +++++++-
 5 files changed, 54 insertions(+), 3 deletions(-)
 create mode 100644 package/CMakeLists.txt

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 81d0b861..bc25f8ca 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -4,6 +4,7 @@
 stages:
   - prepare
   - build
+  - package
   - oskar-comparison
   - deploy
 
@@ -50,7 +51,7 @@ test-and-coverage:
     - gcovr -r .. -e '.*/external/.*' -e '.*/CompilerIdCXX/.*' -e '.*/test/.*' -e '.*/demo/.*' --xml > coverage.xml
     # Check whether pyeverybeam modules can be found from home directory after setting the PYTHONPATH
     - PYVERSION=`python3 --version | grep -P -o ".*\s\K\d\.\d(?=\.\d)"`
-    - export PYTHONPATH=${WORKDIR}/lib/python${PYVERSION}/site-packages
+    - export PYTHONPATH=${WORKDIR}/lib/python${PYVERSION}/dist-packages
     - cd && python3 -c "import everybeam"
   artifacts:
     reports:
@@ -79,6 +80,24 @@ build-doc:
     paths:
     - build/doc/html
 
+# Deploy package should be ran when
+#   when: manual
+#   only:
+#     - master
+build-package:
+  stage: package
+  needs: ["build-everybeam"]
+  image: everybeam:${CI_COMMIT_SHORT_SHA}
+  script:
+    - mkdir everybeam_package
+    - export SRC=$(pwd)
+    - cd /opt/everybeam/build
+    - make package
+    - mv $(ls -p | grep *\.deb) $SRC/everybeam_package
+  artifacts:
+    paths:
+    - everybeam_package/
+
 build-compare-oskar:
   stage: oskar-comparison
   image: everybeam:${CI_COMMIT_SHORT_SHA}
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 227349d5..3cc8ba32 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -20,6 +20,7 @@ endif()
 project(EveryBeam VERSION ${EVERYBEAM_VERSION})
 
 option (BUILD_WITH_PYTHON "Build python bindings" OFF)
+option (BUILD_APT_PACKAGES "Build apt package" OFF)
 
 string(TOLOWER ${CMAKE_PROJECT_NAME} projectname )
 
@@ -167,3 +168,11 @@ add_custom_target(doc
 elseif(DOXYGEN_FOUND)
 
 endif(DOXYGEN_FOUND)
+#------------------------------------------------------------------------------
+
+#------------------------------------------------------------------------------
+# Allow packaging with "make package"
+if(BUILD_APT_PACKAGES)
+  add_subdirectory(package)
+endif()
+#------------------------------------------------------------------------------
\ No newline at end of file
diff --git a/docker/Dockerfile-everybeam b/docker/Dockerfile-everybeam
index d763a60b..70c62e64 100644
--- a/docker/Dockerfile-everybeam
+++ b/docker/Dockerfile-everybeam
@@ -8,5 +8,5 @@ ENV EVERYBEAMDIR /opt/everybeam
 ADD . ${EVERYBEAMDIR}/EveryBeam
 
 RUN mkdir -p ${EVERYBEAMDIR}/build && cd ${EVERYBEAMDIR}/build \
-    && cmake -DBUILD_WITH_PYTHON=ON -DCMAKE_INSTALL_PREFIX=.. ../EveryBeam \
+    && cmake -DBUILD_WITH_PYTHON=ON -DBUILD_APT_PACKAGES=ON -DCMAKE_INSTALL_PREFIX=.. ../EveryBeam \
     && make -j8 && make install -j8
diff --git a/package/CMakeLists.txt b/package/CMakeLists.txt
new file mode 100644
index 00000000..8d956fdc
--- /dev/null
+++ b/package/CMakeLists.txt
@@ -0,0 +1,17 @@
+# Copyright (C) 2020 ASTRON (Netherlands Institute for Radio Astronomy)
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+set(CPACK_PACKAGE_NAME "EveryBeam")
+set(CPACK_DEBIAN_PACKAGE_ARCHITECTURE "amd64")
+set(CPACK_DEBIAN_FILE_NAME DEB-DEFAULT)
+set(CPACK_GENERATOR "DEB")
+set(CPACK_DEBIAN_PACKAGE_MAINTAINER "Astron")
+set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_SOURCE_DIR}/README.md")
+set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_SOURCE_DIR}/LICENSE")
+set(CPACK_PACKAGE_VERSION_MAJOR "${EVERYBEAM_VERSION_MAJOR}")
+set(CPACK_PACKAGE_VERSION_MINOR "${EVERYBEAM_VERSION_MINOR}")
+set(CPACK_PACKAGE_VERSION_PATCH "${EVERYBEAM_VERSION_PATCH}")
+set(CPACK_PACKAGE_VERSION "${CPACK_PACKAGE_VERSION_MAJOR}.${CPACK_PACKAGE_VERSION_MINOR}.${CPACK_PACKAGE_VERSION_PATCH}")
+set(CPACK_DEBIAN_PACKAGE_DEPENDS "casacore-dev, libcfitsio-dev, wcslib-dev, libhdf5-serial-dev, libfftw3-dev, libpython3-dev")
+
+include(CPack)
\ No newline at end of file
diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt
index b1cd9d43..38c9a4bc 100644
--- a/python/CMakeLists.txt
+++ b/python/CMakeLists.txt
@@ -30,7 +30,13 @@ add_subdirectory(lobes)
 
 # If the PYTHON_LIBRARY_DIR is not specified, install in lib dir
 if(NOT DEFINED ${PYTHON_LIBRARY_DIR}) 
-   set(PYTHON_LIBRARY_DIR ${CMAKE_INSTALL_PREFIX}/lib/python${PYTHON_VERSION_MAJOR}.${PYTHON_VERSION_MINOR}/site-packages)
+    execute_process (COMMAND ${PYTHON_EXECUTABLE} -c "import site; print(site.getsitepackages()[0])" OUTPUT_VARIABLE PYTHON_DIST_PATH OUTPUT_STRIP_TRAILING_WHITESPACE)
+
+    if(PYTHON_DIST_PATH MATCHES "\\/(python${PYTHON_VERSION_MAJOR}\\.${PYTHON_VERSION_MINOR}\\/.*)")
+        set(PYTHON_LIBRARY_DIR ${CMAKE_INSTALL_PREFIX}/lib/${CMAKE_MATCH_1})
+    else()
+        message(FATAL_ERROR "Failed to parse PYTHON_DIST_PATH='${PYTHON_DIST_PATH}'")
+    endif()
 endif()
 
 # Install pyeverybeam in site-packages directory
-- 
GitLab