Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: utilities and restructuring to create .deb packages for releases #685

Merged
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -136,6 +136,9 @@ venv.bak/
*.a
*.lib

# Packages
packages/

# Executables
*.exe
*.out
Expand Down
58 changes: 31 additions & 27 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -102,32 +102,36 @@ file(APPEND "${DiscoPoP_SOURCE_DIR}/discopop_library/ConfigProvider/assets/build
file(APPEND "${DiscoPoP_SOURCE_DIR}/discopop_library/ConfigProvider/assets/build_config.py" "DP_BRANCH_TRACKING=\"${DP_BRANCH_TRACKING}\"\n")


# print DiscoPoP configuration
file(READ ${DiscoPoP_SOURCE_DIR}/discopop_library/ConfigProvider/assets/build_config.py DiscoPoP_CONFIGURATION)
string(REGEX REPLACE "\n$" "" DiscoPoP_CONFIGURATION "${DiscoPoP_CONFIGURATION}")
string(REGEX REPLACE "\n" "\n " DiscoPoP_CONFIGURATION "${DiscoPoP_CONFIGURATION}")
message(STATUS "DiscoPoP configuration:\n ${DiscoPoP_CONFIGURATION}")

# install DiscoPoP python modules
find_package(Python3 REQUIRED COMPONENTS Interpreter)

# check if python tkinter module is available
execute_process(
COMMAND ${Python3_EXECUTABLE} -c "import tkinter"
RESULT_VARIABLE TKINTER_AVAILABLE_EXIT_CODE
)
if(${TKINTER_AVAILABLE_EXIT_CODE})
message(FATAL_ERROR "Python module 'tkinter' not found. Please install the 'python3-tk' package via a package manager.")
endif()
if(NOT ${IS_DEB_INSTALL} STREQUAL "")
message(STATUS "performing installation from .deb package")
else()
# print DiscoPoP configuration
file(READ ${DiscoPoP_SOURCE_DIR}/discopop_library/ConfigProvider/assets/build_config.py DiscoPoP_CONFIGURATION)
string(REGEX REPLACE "\n$" "" DiscoPoP_CONFIGURATION "${DiscoPoP_CONFIGURATION}")
string(REGEX REPLACE "\n" "\n " DiscoPoP_CONFIGURATION "${DiscoPoP_CONFIGURATION}")
message(STATUS "DiscoPoP configuration:\n ${DiscoPoP_CONFIGURATION}")

# install DiscoPoP python modules
find_package(Python3 REQUIRED COMPONENTS Interpreter)

# check if python tkinter module is available
execute_process(
COMMAND ${Python3_EXECUTABLE} -c "import tkinter"
RESULT_VARIABLE TKINTER_AVAILABLE_EXIT_CODE
)
if(${TKINTER_AVAILABLE_EXIT_CODE})
message(FATAL_ERROR "Python module 'tkinter' not found. Please install the 'python3-tk' package via a package manager.")
endif()

# install DiscoPoP python modules
message(STATUS "Installing DiscoPoP python modules")
execute_process(
COMMAND ${Python3_EXECUTABLE} -m pip install ${DiscoPoP_SOURCE_DIR}
RESULT_VARIABLE DP_INSTALLATION_EXIT_CODE
OUTPUT_VARIABLE DP_INSTALLATION_OUTPUT
)
# check if installation of DiscoPoP Modules was successful
if(${DP_INSTALLATION_EXIT_CODE})
message(FATAL_ERROR "${DP_INSTALLATION_OUTPUT}")
# install DiscoPoP python modules
message(STATUS "Installing DiscoPoP python modules")
execute_process(
COMMAND ${Python3_EXECUTABLE} -m pip install ${DiscoPoP_SOURCE_DIR}
RESULT_VARIABLE DP_INSTALLATION_EXIT_CODE
OUTPUT_VARIABLE DP_INSTALLATION_OUTPUT
)
# check if installation of DiscoPoP Modules was successful
if(${DP_INSTALLATION_EXIT_CODE})
message(FATAL_ERROR "${DP_INSTALLATION_OUTPUT}")
endif()
endif()
6 changes: 6 additions & 0 deletions DEBIAN/control.raw
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
Package: discopop
Maintainer: Lukas Rothenberger <[email protected]>
Depends: libc6,python3-tk,python3,pipx
Architecture: amd64
Homepage: http://example.com
Description: A program that prints hello
35 changes: 35 additions & 0 deletions DEBIAN/postinst
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
DP_DIR=/opt/DiscoPoP
chmod 777 ${DP_DIR}
DP_BUILD_DIR=/opt/DiscoPoP/build
mkdir -p ${DP_BUILD_DIR}
chmod 777 ${DP_BUILD_DIR}
cd ${DP_BUILD_DIR}
echo "Created DiscoPoP build dir: ${DP_BUILD_DIR}"

echo "Downloading llvm 11.1.0"
mkdir third_party
cd third_party
wget https://github.com/llvm/llvm-project/releases/download/llvmorg-11.1.0/clang+llvm-11.1.0-x86_64-linux-gnu-ubuntu-20.10.tar.xz
tar -xvf clang+llvm-11.1.0-x86_64-linux-gnu-ubuntu-20.10.tar.xz
mv clang+llvm-11.1.0-x86_64-linux-gnu-ubuntu-20.10 llvm-11.1.0
rm clang+llvm-11.1.0-x86_64-linux-gnu-ubuntu-20.10.tar.xz
LLVM_DIR=${DP_BUILD_DIR}/third_party/llvm-11.1.0

echo "Building DiscoPoP"
cd ${DP_BUILD_DIR}
cmake -DLLVM_DIST_PATH=${LLVM_DIR} -DIS_DEB_INSTALL="TRUE" ..
make -j

chmod -R 777 ${DP_DIR}

echo "Installing DiscoPoP python modules"
cd ${DP_DIR}
su ${SUDO_USER} -c "python3 -m pipx install ."

echo "Creating symlinks"
su ${SUDO_USER} -c "rm -f ~/.local/bin/disocpop_cc"
su ${SUDO_USER} -c "rm -f ~/.local/bin/disocpop_cxx"
su ${SUDO_USER} -c "rm -f ~/.local/bin/disocpop_cmake"
su ${SUDO_USER} -c "ln -sf ${DP_BUILD_DIR}/scripts/CC_wrapper.sh ~/.local/bin/discopop_cc"
su ${SUDO_USER} -c "ln -sf ${DP_BUILD_DIR}/scripts/CXX_wrapper.sh ~/.local/bin/discopop_cxx"
su ${SUDO_USER} -c "ln -sf ${DP_BUILD_DIR}/scripts/CMAKE_wrapper.sh ~/.local/bin/discopop_cmake"
2 changes: 2 additions & 0 deletions DEBIAN/postrm
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
rm -rf /opt/DiscoPoP
su ${SUDO_USER} -c "python3 -m pipx uninstall discopop"
Empty file added DEBIAN/preinst
Empty file.
Empty file added DEBIAN/prerm
Empty file.
2 changes: 2 additions & 0 deletions docs/How_to_contribute.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ Commit messages should follow the conventional commits format: [conventional com
Execute the following steps in order to create a new DiscoPoP release:
- Switch to the release branch (e.g. `release/1.2.3`) which shall be released
- Update the version file in the repository (`discopop_library/global_data/version/VERSION`)
- Create a `.deb` package by executing `scripts/dev/create_package.sh`. The package will be created in `packages`.
- Create a pull request to the `master` branch and validate the changes
- Merge the pull request by rebasing and create a tag on the `master` branch with the name `v1.2.3`
- Creating the tag triggers the automatic publication of the project to PyPi
Expand All @@ -51,6 +52,7 @@ Execute the following steps in order to create a new DiscoPoP release:
- Release tag: `v1.2.3`
- Release title: `DiscoPoP Version 1.2.3`
- Description should contain a summary of the most relevant changes
- Add the created `.deb` package to the list of files
- If everything is fine, publish the new release

### Determining the Version Number
Expand Down
37 changes: 21 additions & 16 deletions scripts/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -18,22 +18,27 @@ configure_file(MPI_CC_wrapper.sh MPI_CC_wrapper.sh COPYONLY)
configure_file(MPI_CXX_wrapper.sh MPI_CXX_wrapper.sh COPYONLY)
configure_file(MPI_LINKER_wrapper.sh MPI_LINKER_wrapper.sh COPYONLY)

# create symlinks to files
set(DP_LOCAL_BIN_DIR "$ENV{HOME}/.local/bin")
if(EXISTS ${DP_LOCAL_BIN_DIR})
execute_process(COMMAND rm -f ${DP_LOCAL_BIN_DIR}/discopop_cc)
message(STATUS "Creating symlink ${DP_LOCAL_BIN_DIR}/discopop_cc to ${CMAKE_CURRENT_BINARY_DIR}/CC_wrapper.sh")
execute_process(COMMAND ln -sf ${CMAKE_CURRENT_BINARY_DIR}/CC_wrapper.sh ${DP_LOCAL_BIN_DIR}/discopop_cc)
if(NOT ${IS_DEB_INSTALL} STREQUAL "")
# create symlinks to files
message(STATUS "performing installation from .deb package")
else()
# create symlinks to files
set(DP_LOCAL_BIN_DIR "$ENV{HOME}/.local/bin")
if(EXISTS ${DP_LOCAL_BIN_DIR})
execute_process(COMMAND rm -f ${DP_LOCAL_BIN_DIR}/discopop_cc)
message(STATUS "Creating symlink ${DP_LOCAL_BIN_DIR}/discopop_cc to ${CMAKE_CURRENT_BINARY_DIR}/CC_wrapper.sh")
execute_process(COMMAND ln -sf ${CMAKE_CURRENT_BINARY_DIR}/CC_wrapper.sh ${DP_LOCAL_BIN_DIR}/discopop_cc)

execute_process(COMMAND rm -f ${DP_LOCAL_BIN_DIR}/discopop_cxx)
message(STATUS "Creating symlink ${DP_LOCAL_BIN_DIR}/discopop_cxx to ${CMAKE_CURRENT_BINARY_DIR}/CXX_wrapper.sh")
execute_process(COMMAND ln -sf ${CMAKE_CURRENT_BINARY_DIR}/CXX_wrapper.sh ${DP_LOCAL_BIN_DIR}/discopop_cxx)
execute_process(COMMAND rm -f ${DP_LOCAL_BIN_DIR}/discopop_cxx)
message(STATUS "Creating symlink ${DP_LOCAL_BIN_DIR}/discopop_cxx to ${CMAKE_CURRENT_BINARY_DIR}/CXX_wrapper.sh")
execute_process(COMMAND ln -sf ${CMAKE_CURRENT_BINARY_DIR}/CXX_wrapper.sh ${DP_LOCAL_BIN_DIR}/discopop_cxx)

execute_process(COMMAND rm -f ${DP_LOCAL_BIN_DIR}/discopop_cmake)
message(STATUS "Creating symlink ${DP_LOCAL_BIN_DIR}/discopop_cmake to ${CMAKE_CURRENT_BINARY_DIR}/CMAKE_wrapper.sh")
execute_process(COMMAND ln -sf ${CMAKE_CURRENT_BINARY_DIR}/CMAKE_wrapper.sh ${DP_LOCAL_BIN_DIR}/discopop_cmake)
else()
message(WARNING "Creation of symlinks discopop_cc to ${CMAKE_CURRENT_BINARY_DIR}/CC_wrapper.sh not possible. Please create it manually.")
message(WARNING "Creation of symlinks discopop_cxx to ${CMAKE_CURRENT_BINARY_DIR}/CXX_wrapper.sh not possible. Please create it manually.")
message(WARNING "Creation of symlinks discopop_cmake to ${CMAKE_CURRENT_BINARY_DIR}/CMAKE_wrapper.sh not possible. Please create it manually.")
execute_process(COMMAND rm -f ${DP_LOCAL_BIN_DIR}/discopop_cmake)
message(STATUS "Creating symlink ${DP_LOCAL_BIN_DIR}/discopop_cmake to ${CMAKE_CURRENT_BINARY_DIR}/CMAKE_wrapper.sh")
execute_process(COMMAND ln -sf ${CMAKE_CURRENT_BINARY_DIR}/CMAKE_wrapper.sh ${DP_LOCAL_BIN_DIR}/discopop_cmake)
else()
message(WARNING "Creation of symlinks discopop_cc to ${CMAKE_CURRENT_BINARY_DIR}/CC_wrapper.sh not possible. Please create it manually.")
message(WARNING "Creation of symlinks discopop_cxx to ${CMAKE_CURRENT_BINARY_DIR}/CXX_wrapper.sh not possible. Please create it manually.")
message(WARNING "Creation of symlinks discopop_cmake to ${CMAKE_CURRENT_BINARY_DIR}/CMAKE_wrapper.sh not possible. Please create it manually.")
endif()
endif()
34 changes: 34 additions & 0 deletions scripts/dev/create_package.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# create a temporary copy of the code to build the package
rm -rf tmp_package_build_dir
mkdir -p tmp_package_build_dir
cp -r * tmp_package_build_dir

# modify folder structure to install DiscoPoP to /opt when installing the package
cd tmp_package_build_dir
mkdir opt
mkdir opt/DiscoPoP

mv * opt/DiscoPoP
mv opt/DiscoPoP/DEBIAN .

# add the Version tag to DEBIAN/control.raw to create DEBIAN/control
echo "$(cat DEBIAN/control.raw)" > DEBIAN/control
echo "Version: $(cat opt/DiscoPoP/discopop_library/global_data/version/VERSION)" >> DEBIAN/control
echo "" >> DEBIAN/control

# delete build folder if exists
rm -rf opt/DiscoPoP/build
# delete packages folder if exists
rm -rf opt/DiscoPoP/packages
# cleanup
rm -rf opt/DiscoPoP/tmp_packages_build_dir

# create packages folder
cd ..
mkdir -p packages
# build package
dpkg-deb --build tmp_package_build_dir packages/DiscoPoP.deb
chmod 775 packages/DiscoPoP.deb

# cleanup
rm -rf tmp_package_build_dir
Loading