Add build & package phase

master
Melroy van den Berg 2020-11-19 04:04:52 +01:00
parent 7cbafcdac4
commit c7cd52e01c
8 changed files with 163 additions and 7 deletions

2
.gitignore vendored
View File

@ -73,4 +73,4 @@ Thumbs.db
# Build folders
build/
build-*/
build*/

View File

@ -2,3 +2,20 @@ image: "danger89/cmake:latest"
static_code_analysis:
script: ./check.sh
build:
script: ./scripts/build_prod.sh
artifacts:
name: "Packages + Documentation"
expire_in: 1 week
paths:
- doc/doxygen/
- build_prod/WineGUI-*.deb
- build_prod/WineGUI-*.rpm
- build_prod/WineGUI-*.tar.gz
cache:
key: "$CI_PIPELINE_ID"
paths:
- build_prod/bin
policy: push

View File

@ -1,7 +1,34 @@
cmake_minimum_required (VERSION 3.5)
project (browser LANGUAGES C CXX)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
# Get VERSION from most recent git tag
include(git_version)
project (browser
VERSION ${GIT_TAG_VERSION}
DESCRIPTION "Browser - Decentralized WWW"
LANGUAGES C CXX)
message("CMAKE_BUILD_TYPE = ${CMAKE_BUILD_TYPE}")
message("PROJECT_VERSION = ${PROJECT_VERSION}")
# Production build
if("${CMAKE_BUILD_TYPE}" STREQUAL "Release")
add_definitions(-DPRODUCTION=1)
# Include CPack packaging settings
include(packaging)
endif()
add_subdirectory (lib/commonmarker/src)
add_subdirectory (lib/commonmarker/extensions)
add_subdirectory (src)
add_subdirectory (src)
# Add desktop/images files
install(FILES misc/browser.desktop DESTINATION share/applications)
#install(FILES misc/browser.png DESTINATION share/icons/hicolor/48x48/apps)
#install(FILES misc/browser.svg DESTINATION share/icons/hicolor/scalable/apps)
#install(DIRECTORY images DESTINATION share/browser)

33
cmake/git_version.cmake Normal file
View File

@ -0,0 +1,33 @@
find_package(Git QUIET REQUIRED)
if(GIT_FOUND)
set_property(GLOBAL APPEND
PROPERTY CMAKE_CONFIGURE_DEPENDS
"${CMAKE_SOURCE_DIR}/.git/index")
execute_process(
COMMAND "${GIT_EXECUTABLE}" describe --always HEAD
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}"
RESULT_VARIABLE res
OUTPUT_VARIABLE GIT_HEAD_TAG
ERROR_QUIET
OUTPUT_STRIP_TRAILING_WHITESPACE)
# For debug reasons use:
# message("GIT_HEAD_TAG = ${GIT_HEAD_TAG}")
if("${GIT_HEAD_TAG}" MATCHES "^v([0-9]+)\\.([0-9]+)\\.([0-9]+).*$")
string(REGEX REPLACE "^v([0-9]+)\\.([0-9]+)\\.([0-9]+).*$"
"\\1;\\2;\\3" _ver_parts "${GIT_HEAD_TAG}")
list(GET _ver_parts 0 GIT_TAG_VERSION_MAJOR)
list(GET _ver_parts 1 GIT_TAG_VERSION_MINOR)
list(GET _ver_parts 2 GIT_TAG_VERSION_PATCH)
else()
set(GIT_TAG_VERSION_MAJOR "0")
set(GIT_TAG_VERSION_MINOR "0")
set(GIT_TAG_VERSION_PATCH "0")
endif()
set(GIT_TAG_VERSION "${GIT_TAG_VERSION_MAJOR}.${GIT_TAG_VERSION_MINOR}.${GIT_TAG_VERSION_PATCH}")
else(GIT_FOUND)
message("GIT needs to be installed to generate GIT versioning.")
endif(GIT_FOUND)

44
cmake/packaging.cmake Normal file
View File

@ -0,0 +1,44 @@
# Example: https://github.com/MariaDB/server/tree/10.5/cmake
set(CPACK_PACKAGE_DESCRIPTION_SUMMARY "Browser - Decentralized WWW")
set(CPACK_PACKAGE_VENDOR "Melroy van den Berg")
set(CPACK_PACKAGE_CONTACT "Melroy van den Berg <melroy@melroy.org>")
set(CPACK_PACKAGE_HOMEPAGE_URL "https://melroy.org")
set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
set(CPACK_PACKAGE_VERSION "${PROJECT_VERSION}")
set(CPACK_SOURCE_PACKAGE_FILE_NAME "${PROJECT_TARGET}-${CPACK_PACKAGE_VERSION}")
set(CPACK_DEBIAN_PACKAGE_SECTION "utils") # Change
set(CPACK_RPM_PACKAGE_GROUP "Applications/Productivity") # Change
set(CPACK_PACKAGE_FILE_NAME "${PROJECT_NAME}-v${CPACK_PACKAGE_VERSION}") # Without '-Linux' suffix
if (${CMAKE_SYSTEM_NAME} MATCHES "Linux" AND EXISTS "/etc/os-release")
execute_process (
COMMAND grep "^NAME=" /etc/os-release
COMMAND sed -e "s/NAME=//g"
COMMAND sed -e "s/\"//g"
RESULT_VARIABLE DIFINE_LINUX_DISTRO_RESULT
OUTPUT_VARIABLE LINUX_DISTRO
)
if (NOT ${DIFINE_LINUX_DISTRO_RESULT} EQUAL 0)
message (FATAL_ERROR "Linux distro identification error")
endif ()
endif ()
if(${LINUX_DISTRO} MATCHES "openSUSE")
# OpenSuse/Leap
set(CPACK_RPM_PACKAGE_REQUIRES "") # Change
else()
# Redhat/CentOS/Fedora/etc.
set(CPACK_RPM_PACKAGE_REQUIRES "") # Change
endif()
# Optional RPM packages
set(CPACK_RPM_PACKAGE_SUGGESTS "") # Change
# Debian/Ubuntu/Mint Mint
set(CPACK_DEBIAN_PACKAGE_DEPENDS "libqt5widgets5")
# Optional deb packages
set(CPACK_DEBIAN_PACKAGE_SUGGESTS "") # Change
# include CPack model once all variables are set
include(CPack)

10
misc/browser.desktop Normal file
View File

@ -0,0 +1,10 @@
[Desktop Entry]
Name=Browser
Comment=Decentralized WWWW
Exec=/usr/bin/browser
Terminal=false
Type=Application
StartupNotify=true
Icon=browser
Categories=Settings;Utility;
Keywords=Browser;Internet;WWW

11
scripts/build_prod.sh Executable file
View File

@ -0,0 +1,11 @@
#!/usr/bin/env bash
# By: Melroy van den Berg
# Description: Release production build + create Debian package file (.deb),
# RPM [Red Hat] Package Manager (.rpm) and compressed file (.tgz/.tar.gz)
rm -rf build_prod
mkdir build_prod
cd build_prod
cmake -GNinja -DCMAKE_BUILD_TYPE=Release ..
ninja &&
echo "INFO: Building packages...";
cpack -G "TGZ;DEB;RPM"

View File

@ -1,12 +1,20 @@
# TODO: Maybe move this CMake file to cmake folder and include it in the top-level Cmake file?
set (CMAKE_INCLUDE_CURRENT_DIR ON)
set (CMAKE_AUTOUIC ON)
set (CMAKE_AUTOMOC ON)
set (CMAKE_AUTORCC ON)
set(CMAKE_CXX_FLAGS "-Wall -Wextra")
set(CMAKE_CXX_FLAGS_DEBUG "-g")
set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG")
set (CMAKE_CXX_STANDARD 20)
set (CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/bin)
set(PROJECT_TARGET browser)
# QtCreator supports the following variables for Android, which are identical to qmake Android variables.
# Check http://doc.qt.io/qt-5/deployment-android.html for more information.
# They need to be set before the find_package(Qt5 ...) call.
@ -36,21 +44,27 @@ set(SOURCES
scene.cc
)
# TODO: Why is the executable 'browser' detetected as shared lib? I Just want to have an executable
# Maybe because I build shared libs in other CMakeLists, .. uhm
if(ANDROID)
add_library (browser SHARED
add_library (${PROJECT_TARGET} SHARED
${SOURCES}
)
else()
add_executable (browser
add_executable (${PROJECT_TARGET}
${SOURCES}
)
endif()
# Get the cmark binary dir for config.h
get_property(cmark_binary_dir GLOBAL PROPERTY COMMONMARKER_BINARY_DIR)
include_directories(${cmark_binary_dir})
include_directories(lib/commonmarker/src)
target_link_libraries (browser LINK_PUBLIC LibCommonMarker LibCommonMarkerExtensions)
target_link_libraries (browser PRIVATE Qt5::Widgets)
# TODO: 1x target_link_libraries?
target_link_libraries (${PROJECT_TARGET} LINK_PUBLIC LibCommonMarker LibCommonMarkerExtensions)
target_link_libraries (${PROJECT_TARGET} PRIVATE Qt5::Widgets)
install(TARGETS ${PROJECT_TARGET} RUNTIME DESTINATION "bin" COMPONENT applications)