initial commit
This commit is contained in:
88
src/.jenkins_builds
Normal file
88
src/.jenkins_builds
Normal file
@@ -0,0 +1,88 @@
|
||||
#!groovy
|
||||
|
||||
pipeline {
|
||||
agent none
|
||||
|
||||
environment {
|
||||
PROJECT_TEST_CONFIG_DIR = "/.ci/%PROJECT_NAME%/test"
|
||||
}
|
||||
|
||||
options {
|
||||
disableConcurrentBuilds()
|
||||
skipDefaultCheckout()
|
||||
timestamps()
|
||||
}
|
||||
|
||||
stages {
|
||||
stage('Build • Test • Deliver') {
|
||||
agent any
|
||||
stages {
|
||||
stage('Checkout') {
|
||||
steps {
|
||||
script {
|
||||
int maxAttempts = 6
|
||||
int baseDelay = 10
|
||||
for (int attempt = 1; attempt <= maxAttempts; attempt++) {
|
||||
try {
|
||||
checkout scm
|
||||
break
|
||||
} catch (err) {
|
||||
if (attempt == maxAttempts) { throw err }
|
||||
int waitSec = baseDelay * (1 << (attempt - 1))
|
||||
echo "Checkout failed (attempt ${attempt}/${maxAttempts}). Waiting ${waitSec}s before retry..."
|
||||
sleep time: waitSec, unit: 'SECONDS'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('linux_x86_64') {
|
||||
steps { script { retryWithBackoff(2, 5) { sh 'scripts/make_unix.sh' } } }
|
||||
}
|
||||
|
||||
stage('mingw64') {
|
||||
steps { script { retryWithBackoff(2, 5) { sh 'scripts/make_win32.sh' } } }
|
||||
}
|
||||
|
||||
stage('linux_aarch64') {
|
||||
steps { script { retryWithBackoff(2, 5) { sh 'scripts/make_unix.sh aarch64' } } }
|
||||
}
|
||||
|
||||
stage('test') {
|
||||
steps {
|
||||
script {
|
||||
retryWithBackoff(2, 5) { sh 'scripts/test.sh' }
|
||||
retryWithBackoff(2, 5) { sh 'scripts/test.sh "" "" "" "" 1 1' }
|
||||
retryWithBackoff(2, 5) { sh 'scripts/test.sh aarch64' }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('deliver') {
|
||||
steps {
|
||||
script {
|
||||
retryWithBackoff(3, 10) { sh 'scripts/deliver.sh /mnt/%PROJECT_NAME% "" "" "" "" 1 1' }
|
||||
retryWithBackoff(3, 10) { sh 'scripts/deliver.sh /mnt/%PROJECT_NAME% "" aarch64' }
|
||||
retryWithBackoff(3, 10) { sh 'scripts/deliver.sh /mnt/%PROJECT_NAME%' }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def retryWithBackoff(int maxAttempts, int baseDelaySeconds, Closure body) {
|
||||
for (int attempt = 1; attempt <= maxAttempts; attempt++) {
|
||||
try {
|
||||
body()
|
||||
return
|
||||
} catch (err) {
|
||||
if (attempt == maxAttempts) { throw err }
|
||||
int waitSec = baseDelaySeconds * (1 << (attempt - 1))
|
||||
echo "Step failed (attempt ${attempt}/${maxAttempts}). Waiting ${waitSec}s before retry..."
|
||||
sleep time: waitSec, unit: 'SECONDS'
|
||||
}
|
||||
}
|
||||
}
|
||||
82
src/.jenkins_macos
Normal file
82
src/.jenkins_macos
Normal file
@@ -0,0 +1,82 @@
|
||||
#!groovy
|
||||
|
||||
pipeline {
|
||||
agent none
|
||||
|
||||
environment {
|
||||
PROJECT_TEST_CONFIG_DIR = "${env.HOME}/.ci/%PROJECT_NAME%/test"
|
||||
}
|
||||
|
||||
options {
|
||||
disableConcurrentBuilds()
|
||||
skipDefaultCheckout()
|
||||
timestamps()
|
||||
}
|
||||
|
||||
stages {
|
||||
stage('Build • Test • Deliver') {
|
||||
agent any
|
||||
stages {
|
||||
stage('Checkout') {
|
||||
steps {
|
||||
script {
|
||||
int maxAttempts = 6
|
||||
int baseDelay = 10
|
||||
for (int attempt = 1; attempt <= maxAttempts; attempt++) {
|
||||
try {
|
||||
checkout scm
|
||||
break
|
||||
} catch (err) {
|
||||
if (attempt == maxAttempts) { throw err }
|
||||
int waitSec = baseDelay * (1 << (attempt - 1))
|
||||
echo "Checkout failed (attempt ${attempt}/${maxAttempts}). Waiting ${waitSec}s before retry..."
|
||||
sleep time: waitSec, unit: 'SECONDS'
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('darwin_aarch64') {
|
||||
steps { script { retryWithBackoff(2, 5) { sh 'scripts/make_unix.sh aarch64' } } }
|
||||
}
|
||||
|
||||
stage('darwin_x86_64') {
|
||||
steps { script { retryWithBackoff(2, 5) { sh 'scripts/make_unix.sh x86_64' } } }
|
||||
}
|
||||
|
||||
stage('test') {
|
||||
steps {
|
||||
script {
|
||||
retryWithBackoff(2, 5) { sh 'scripts/test.sh aarch64' }
|
||||
retryWithBackoff(2, 5) { sh 'scripts/test.sh x86_64' }
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
stage('deliver') {
|
||||
steps {
|
||||
script {
|
||||
retryWithBackoff(3, 10) { sh 'scripts/deliver.sh /mnt/%PROJECT_NAME% "" aarch64' }
|
||||
retryWithBackoff(3, 10) { sh 'scripts/deliver.sh /mnt/%PROJECT_NAME% "" x86_64' }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
def retryWithBackoff(int maxAttempts, int baseDelaySeconds, Closure body) {
|
||||
for (int attempt = 1; attempt <= maxAttempts; attempt++) {
|
||||
try {
|
||||
body()
|
||||
return
|
||||
} catch (err) {
|
||||
if (attempt == maxAttempts) { throw err }
|
||||
int waitSec = baseDelaySeconds * (1 << (attempt - 1))
|
||||
echo "Step failed (attempt ${attempt}/${maxAttempts}). Waiting ${waitSec}s before retry..."
|
||||
sleep time: waitSec, unit: 'SECONDS'
|
||||
}
|
||||
}
|
||||
}
|
||||
47
src/.nvimrc
Normal file
47
src/.nvimrc
Normal file
@@ -0,0 +1,47 @@
|
||||
if has('win32') || has('win64')
|
||||
let &makeprg=".\\scripts\\make_win32.cmd"
|
||||
let g:nmakeprg=".\\scripts\\make_win32.cmd"
|
||||
" let g:gtest#gtest_command = "cd build2 && .\\unittests"
|
||||
else
|
||||
let &makeprg="./scripts/make_unix.sh"
|
||||
let g:nmakeprg="./scripts/make_unix.sh"
|
||||
" let g:gtest#gtest_command = "cd build && ./unittests"
|
||||
endif
|
||||
set path+=.,%PROJECT_NAME%/**
|
||||
|
||||
lua << EOF
|
||||
if vim.env.NV_DARCULA_ENABLE_DAP then
|
||||
local dap = require("dap")
|
||||
local g = require("nvim-goodies")
|
||||
local gos = require("nvim-goodies.os")
|
||||
local gpath = require("nvim-goodies.path")
|
||||
|
||||
local externalConsole = gos.is_windows
|
||||
local type = "cppdbg"
|
||||
local cwd = gpath.create_path("./build")
|
||||
dap.configurations.cpp = {
|
||||
{
|
||||
name = "Main",
|
||||
type = type,
|
||||
request = "launch",
|
||||
program = function()
|
||||
return gpath.create_path(cwd, "%PROJECT_NAME%")
|
||||
end,
|
||||
cwd = cwd,
|
||||
stopAtEntry = true,
|
||||
externalConsole=externalConsole,
|
||||
},
|
||||
{
|
||||
name = "Test",
|
||||
type = type,
|
||||
request = "launch",
|
||||
program = function()
|
||||
return gpath.create_path(cwd, "%PROJECT_NAME%_tests")
|
||||
end,
|
||||
cwd = cwd,
|
||||
stopAtEntry = true,
|
||||
externalConsole=externalConsole,
|
||||
}
|
||||
}
|
||||
end
|
||||
EOF
|
||||
192
src/CMakeLists.txt_
Normal file
192
src/CMakeLists.txt_
Normal file
@@ -0,0 +1,192 @@
|
||||
cmake_minimum_required(VERSION 3.27)
|
||||
|
||||
cmake_policy(SET CMP0135 NEW)
|
||||
cmake_policy(SET CMP0144 NEW)
|
||||
|
||||
if (NOT PROJECT_INTERFACE)
|
||||
message(FATAL_ERROR "Project must be compiled via 'make_win32.cmd'/'make_win32.sh' or 'make_unix.sh' build scripts. Invoking 'cmake' directly is not supported.")
|
||||
endif()
|
||||
|
||||
project(${PROJECT_NAME}
|
||||
DESCRIPTION ${PROJECT_DESC}
|
||||
HOMEPAGE_URL ${PROJECT_URL}
|
||||
VERSION ${PROJECT_MAJOR_VERSION}.${PROJECT_MINOR_VERSION}.${PROJECT_REVISION_VERSION}
|
||||
)
|
||||
|
||||
include(CheckIncludeFileCXX)
|
||||
include(CheckIncludeFiles)
|
||||
include(ExternalProject)
|
||||
|
||||
check_include_files(sys/xattr.h HAS_SETXATTR)
|
||||
if(HAS_SETXATTR)
|
||||
add_definitions(-DHAS_SETXATTR)
|
||||
endif()
|
||||
|
||||
include(cmake/hashes.cmake)
|
||||
|
||||
include(cmake/versions.cmake)
|
||||
include(cmake/arch.cmake)
|
||||
include(cmake/os.cmake)
|
||||
include(cmake/options.cmake)
|
||||
|
||||
option(PROJECT_REQUIRE_ALPINE "Require Alpine Linux as build system" OFF)
|
||||
option(PROJECT_STATIC_LINK "Static link executables" OFF)
|
||||
|
||||
if(PROJECT_STATIC_LINK)
|
||||
add_definitions(-DPROJECT_STATIC_LINK)
|
||||
endif()
|
||||
|
||||
if(PROJECT_IS_MINGW)
|
||||
add_definitions(-DPROJECT_IS_MINGW)
|
||||
if(PROJECT_IS_MINGW_UNIX)
|
||||
add_definitions(-DPROJECT_IS_MINGW_UNIX)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(PROJECT_REQUIRE_ALPINE)
|
||||
add_definitions(-DPROJECT_REQUIRE_ALPINE)
|
||||
endif()
|
||||
|
||||
if(PROJECT_IS_ARM64)
|
||||
add_definitions(-DPROJECT_IS_ARM64)
|
||||
endif()
|
||||
|
||||
if(PROJECT_IS_DARWIN)
|
||||
add_definitions(-DPROJECT_IS_DARWIN)
|
||||
endif()
|
||||
|
||||
if(PROJECT_IS_MINGW)
|
||||
option(PROJECT_ENABLE_WIN32_LONG_PATH_NAMES "Enable path sizes of 32767 characters on Windows" OFF)
|
||||
if(PROJECT_ENABLE_WIN32_LONG_PATH_NAMES)
|
||||
add_definitions(-DPROJECT_ENABLE_WIN32_LONG_PATH_NAMES)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if (PROJECT_ENABLE_V2_ERRORS)
|
||||
add_definitions(-DPROJECT_ENABLE_V2_ERRORS)
|
||||
endif()
|
||||
|
||||
include(cmake/settings.cmake)
|
||||
|
||||
include(cmake/flags.cmake)
|
||||
include(cmake/functions.cmake)
|
||||
|
||||
include(cmake/libraries.cmake)
|
||||
|
||||
if(PROJECT_BUILD)
|
||||
file(WRITE ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/version.cpp "")
|
||||
|
||||
if (PROJECT_IS_MINGW)
|
||||
set(PROJECT_WINDOWS_VERSION_RC ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/version.rc)
|
||||
file(WRITE ${PROJECT_WINDOWS_VERSION_RC} "")
|
||||
endif()
|
||||
|
||||
file(GLOB_RECURSE ADDITIONAL_SOURCES
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/version.cpp
|
||||
${PROJECT_SUPPORT_DIR}/src/*.c
|
||||
${PROJECT_SUPPORT_DIR}/src/*.cpp
|
||||
)
|
||||
|
||||
list(APPEND PROJECT_ADDITIONAL_SOURCES
|
||||
${ADDITIONAL_SOURCES}
|
||||
)
|
||||
|
||||
include(project.cmake)
|
||||
|
||||
string(REPLACE "\\<" "<" PROJECT_COMPANY_NAME "${PROJECT_COMPANY_NAME}")
|
||||
string(REPLACE "\\<" "<" PROJECT_COPYRIGHT "${PROJECT_COPYRIGHT}")
|
||||
string(REPLACE "\\<" "<" PROJECT_DESC "${PROJECT_DESC}")
|
||||
string(REPLACE "\\>" ">" PROJECT_COMPANY_NAME "${PROJECT_COMPANY_NAME}")
|
||||
string(REPLACE "\\>" ">" PROJECT_COPYRIGHT "${PROJECT_COPYRIGHT}")
|
||||
string(REPLACE "\\>" ">" PROJECT_DESC "${PROJECT_DESC}")
|
||||
|
||||
if (PROJECT_IS_MINGW)
|
||||
if ("${PROJECT_RELEASE_ITER}" STREQUAL "release")
|
||||
set(PROJECT_PRERELEASE 0)
|
||||
else()
|
||||
set(PROJECT_PRERELEASE VS_FF_PRERELEASE)
|
||||
endif()
|
||||
|
||||
configure_file(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/version.rc.in
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/version.rc
|
||||
@ONLY
|
||||
)
|
||||
endif()
|
||||
|
||||
configure_file(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/version.cpp.in
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/version.cpp
|
||||
@ONLY
|
||||
)
|
||||
|
||||
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${PROJECT_NAME}.iss.in")
|
||||
configure_file(
|
||||
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${PROJECT_NAME}.iss.in
|
||||
${PROJECT_DIST_DIR}/../${PROJECT_NAME}.iss
|
||||
@ONLY
|
||||
)
|
||||
endif()
|
||||
|
||||
find_package(ICU REQUIRED COMPONENTS data i18n io uc)
|
||||
else()
|
||||
message(STATUS "-=[CMake Settings]=-")
|
||||
message(STATUS " C standard: ${CMAKE_C_STANDARD}")
|
||||
message(STATUS " C++ standard: ${CMAKE_CXX_STANDARD}")
|
||||
message(STATUS " CPU architecture: ${PROJECT_MARCH}")
|
||||
if(PROJECT_ENABLE_FUSE)
|
||||
message(STATUS " FUSE version: ${PROJECT_FUSE}")
|
||||
endif()
|
||||
|
||||
string(REPLACE "<" "\\<" PROJECT_COMPANY_NAME "${PROJECT_COMPANY_NAME}")
|
||||
string(REPLACE "<" "\\<" PROJECT_COPYRIGHT "${PROJECT_COPYRIGHT}")
|
||||
string(REPLACE "<" "\\<" PROJECT_DESC "${PROJECT_DESC}")
|
||||
string(REPLACE ">" "\\>" PROJECT_COMPANY_NAME "${PROJECT_COMPANY_NAME}")
|
||||
string(REPLACE ">" "\\>" PROJECT_COPYRIGHT "${PROJECT_COPYRIGHT}")
|
||||
string(REPLACE ">" "\\>" PROJECT_DESC "${PROJECT_DESC}")
|
||||
|
||||
add_custom_target(project ALL
|
||||
DEPENDS ${PROJECT_DEPENDENCIES}
|
||||
COMMAND cd build && cmake
|
||||
${CMAKE_CURRENT_SOURCE_DIR}
|
||||
-DCMAKE_GENERATOR=${CMAKE_GENERATOR}
|
||||
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
|
||||
-DPROJECT_3RD_PARTY_DIR=${PROJECT_3RD_PARTY_DIR}
|
||||
-DPROJECT_BUILD=ON
|
||||
-DPROJECT_BUILD_ARCH=${PROJECT_BUILD_ARCH}
|
||||
-DPROJECT_BUILD_DIR=${PROJECT_BUILD_DIR}
|
||||
-DPROJECT_BUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||
-DPROJECT_CMAKE_BUILD_TYPE=${PROJECT_CMAKE_BUILD_TYPE}
|
||||
-DPROJECT_COMPANY_NAME=${PROJECT_COMPANY_NAME}
|
||||
-DPROJECT_COPYRIGHT=${PROJECT_COPYRIGHT}
|
||||
-DPROJECT_DESC=${PROJECT_DESC}
|
||||
-DPROJECT_DIST_DIR=${PROJECT_DIST_DIR}
|
||||
-DPROJECT_ENABLE_V2_ERRORS=${PROJECT_ENABLE_V2_ERRORS}
|
||||
-DPROJECT_ENABLE_WIN32_LONG_PATH_NAMES=${PROJECT_ENABLE_WIN32_LONG_PATH_NAMES}
|
||||
%PROJECT_ENABLE%
|
||||
-DPROJECT_EXTERNAL_BUILD_ROOT=${PROJECT_EXTERNAL_BUILD_ROOT}
|
||||
-DPROJECT_FUSE=${PROJECT_FUSE}
|
||||
-DPROJECT_FUSE_INCLUDE_DIRS=${PROJECT_FUSE_INCLUDE_DIRS}
|
||||
-DPROJECT_GIT_REV=${PROJECT_GIT_REV}
|
||||
-DPROJECT_INTERFACE=1
|
||||
-DPROJECT_IS_ALPINE=${PROJECT_IS_ALPINE}
|
||||
-DPROJECT_IS_ARM64=${PROJECT_IS_ARM64}
|
||||
-DPROJECT_IS_DARWIN=${PROJECT_IS_DARWIN}
|
||||
-DPROJECT_IS_MINGW=${PROJECT_IS_MINGW}
|
||||
-DPROJECT_IS_MINGW_UNIX=${PROJECT_IS_MINGW_UNIX}
|
||||
-DPROJECT_MAJOR_VERSION=${PROJECT_MAJOR_VERSION}
|
||||
-DPROJECT_MACOS_BUNDLE_ID=${PROJECT_MACOS_BUNDLE_ID}
|
||||
-DPROJECT_MACOS_ICNS_NAME=${PROJECT_MACOS_ICNS_NAME}
|
||||
-DPROJECT_MINOR_VERSION=${PROJECT_MINOR_VERSION}
|
||||
-DPROJECT_NAME=${PROJECT_NAME}
|
||||
-DPROJECT_RELEASE_ITER=${PROJECT_RELEASE_ITER}
|
||||
-DPROJECT_RELEASE_NUM=${PROJECT_RELEASE_NUM}
|
||||
-DPROJECT_REQUIRE_ALPINE=${PROJECT_REQUIRE_ALPINE}
|
||||
-DPROJECT_REVISION_VERSION=${PROJECT_REVISION_VERSION}
|
||||
-DPROJECT_STATIC_LINK=${PROJECT_STATIC_LINK}
|
||||
-DPROJECT_SUPPORT_DIR=${PROJECT_SUPPORT_DIR}
|
||||
-DPROJECT_TOOLCHAIN_FILE_CMAKE=${PROJECT_TOOLCHAIN_FILE_CMAKE}
|
||||
-DPROJECT_TOOLCHAIN_FILE_MESON=${PROJECT_TOOLCHAIN_FILE_MESON}
|
||||
-DPROJECT_URL=${PROJECT_URL}
|
||||
)
|
||||
endif()
|
||||
42
src/config.sh
Normal file
42
src/config.sh
Normal file
@@ -0,0 +1,42 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
PROJECT_NAME="%PROJECT_NAME%"
|
||||
|
||||
PROJECT_COMPANY_NAME=""
|
||||
PROJECT_COPYRIGHT=""
|
||||
PROJECT_DESC=""
|
||||
PROJECT_URL=""
|
||||
|
||||
PROJECT_MACOS_BUNDLE_ID="com.fifthgrid.${PROJECT_NAME}"
|
||||
PROJECT_MACOS_ICNS_NAME=""
|
||||
|
||||
PROJECT_MAJOR_VERSION=0
|
||||
PROJECT_MINOR_VERSION=0
|
||||
PROJECT_REVISION_VERSION=1
|
||||
PROJECT_RELEASE_NUM=0
|
||||
PROJECT_RELEASE_ITER=alpha
|
||||
|
||||
PROJECT_APP_LIST=(${PROJECT_NAME})
|
||||
|
||||
PROJECT_PRIVATE_KEY=${DEVELOPER_PRIVATE_KEY}
|
||||
PROJECT_PUBLIC_KEY=${DEVELOPER_PUBLIC_KEY}
|
||||
|
||||
PROJECT_STATIC_LINK=ON
|
||||
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=()
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=()
|
||||
|
||||
PROJECT_ENABLE_V2_ERRORS=ON
|
||||
PROJECT_ENABLE_WIN32_LONG_PATH_NAMES=OFF
|
||||
|
||||
%PROJECT_ENABLE%
|
||||
|
||||
PROJECT_KEEP_BACKWARD_CPP=1
|
||||
|
||||
if [ "${PROJECT_ENABLE_TESTING}" == "ON" ]; then
|
||||
PROJECT_APP_LIST+=(${PROJECT_NAME}_test)
|
||||
fi
|
||||
|
||||
if [ -f "./override.sh" ]; then
|
||||
. ./override.sh
|
||||
fi
|
||||
149
src/initialize.cpp
Normal file
149
src/initialize.cpp
Normal file
@@ -0,0 +1,149 @@
|
||||
#if defined(PROJECT_ENABLE_CURL)
|
||||
#include "curl/curl.h"
|
||||
#endif // defined(PROJECT_ENABLE_CURL)
|
||||
|
||||
#if defined(PROJECT_ENABLE_OPENSSL)
|
||||
#include "openssl/ssl.h"
|
||||
#endif // defined(PROJECT_ENABLE_OPENSSL)
|
||||
|
||||
#if defined(PROJECT_REQUIRE_ALPINE) && !defined(PROJECT_IS_MINGW)
|
||||
#include <filesystem>
|
||||
#include <pthread.h>
|
||||
#include <stdlib.h>
|
||||
#endif // defined(PROJECT_REQUIRE_ALPINE) && !defined(PROJECT_IS_MINGW)
|
||||
|
||||
#if defined(PROJECT_ENABLE_LIBSODIUM)
|
||||
#include "sodium.h"
|
||||
#endif // defined(PROJECT_ENABLE_LIBSODIUM)
|
||||
|
||||
#if defined(PROJECT_ENABLE_SQLITE)
|
||||
#include "sqlite3.h"
|
||||
#endif // defined(PROJECT_ENABLE_SQLITE)
|
||||
|
||||
#if defined(PROJECT_ENABLE_SPDLOG)
|
||||
#include <chrono>
|
||||
|
||||
#include "spdlog/async.h"
|
||||
#include "spdlog/sinks/stdout_color_sinks.h"
|
||||
#include "spdlog/spdlog.h"
|
||||
#endif // defined(PROJECT_ENABLE_SPDLOG)
|
||||
|
||||
#include "initialize.hpp"
|
||||
#include "utils/error.hpp"
|
||||
|
||||
#if defined(PROJECT_REQUIRE_ALPINE) && !defined(PROJECT_IS_MINGW)
|
||||
#include "utils/path.hpp"
|
||||
#endif // defined(PROJECT_REQUIRE_ALPINE) && !defined (PROJECT_IS_MINGW)
|
||||
|
||||
#if defined(__APPLE__)
|
||||
#include <csignal>
|
||||
#endif // defined(__APPLE__)
|
||||
|
||||
namespace {
|
||||
#if defined(PROJECT_ENABLE_CURL)
|
||||
bool curl_initialized{false};
|
||||
#endif // defined(PROJECT_ENABLE_CURL)
|
||||
|
||||
#if defined(PROJECT_ENABLE_SPDLOG)
|
||||
bool spdlog_initialized{false};
|
||||
#endif // defined(PROJECT_ENABLE_SPDLOG)
|
||||
|
||||
#if defined(PROJECT_ENABLE_SQLITE)
|
||||
bool sqlite3_initialized{false};
|
||||
#endif // defined(PROJECT_ENABLE_SQLITE)
|
||||
} // namespace
|
||||
|
||||
namespace fifthgrid {
|
||||
auto project_initialize() -> bool {
|
||||
FIFTHGRID_USES_FUNCTION_NAME();
|
||||
|
||||
#if defined(__APPLE__)
|
||||
std::signal(SIGPIPE, SIG_IGN);
|
||||
#endif // defined(__APPLE__)
|
||||
|
||||
#if defined(PROJECT_REQUIRE_ALPINE) && !defined(PROJECT_IS_MINGW)
|
||||
{
|
||||
static constexpr auto guard_size{4096U};
|
||||
static constexpr auto stack_size{8U * 1024U * 1024U};
|
||||
|
||||
pthread_attr_t attr{};
|
||||
pthread_attr_setstacksize(&attr, stack_size);
|
||||
pthread_attr_setguardsize(&attr, guard_size);
|
||||
pthread_setattr_default_np(&attr);
|
||||
}
|
||||
#endif // defined(PROJECT_REQUIRE_ALPINE) && !defined(PROJECT_IS_MINGW)
|
||||
|
||||
#if defined(PROJECT_ENABLE_SPDLOG)
|
||||
spdlog::drop_all();
|
||||
spdlog::flush_every(std::chrono::seconds(5));
|
||||
spdlog::set_pattern("%Y-%m-%d|%T.%e|%^%l%$|%v");
|
||||
|
||||
spdlog::create_async<spdlog::sinks::stdout_color_sink_mt>("console");
|
||||
spdlog_initialized = true;
|
||||
#endif // defined(PROJECT_ENABLE_SPDLOG)
|
||||
|
||||
#if defined(PROJECT_ENABLE_LIBSODIUM)
|
||||
if (sodium_init() == -1) {
|
||||
utils::error::handle_error(function_name, "failed to initialize sodium");
|
||||
return false;
|
||||
}
|
||||
#endif // defined(PROJECT_ENABLE_LIBSODIUM)
|
||||
|
||||
#if defined(PROJECT_ENABLE_OPENSSL)
|
||||
SSL_library_init();
|
||||
#endif // defined(PROJECT_ENABLE_OPENSSL)
|
||||
|
||||
#if defined(PROJECT_ENABLE_CURL)
|
||||
{
|
||||
auto res = curl_global_init(CURL_GLOBAL_ALL);
|
||||
if (res != 0) {
|
||||
utils::error::handle_error(function_name,
|
||||
"failed to initialize curl|result|" +
|
||||
std::to_string(res));
|
||||
return false;
|
||||
}
|
||||
|
||||
curl_initialized = true;
|
||||
}
|
||||
#endif // defined(PROJECT_ENABLE_CURL)
|
||||
|
||||
#if defined(PROJECT_ENABLE_SQLITE)
|
||||
{
|
||||
auto res = sqlite3_initialize();
|
||||
if (res != SQLITE_OK) {
|
||||
utils::error::handle_error(function_name,
|
||||
"failed to initialize sqlite3|result|" +
|
||||
std::to_string(res));
|
||||
return false;
|
||||
}
|
||||
|
||||
sqlite3_initialized = true;
|
||||
}
|
||||
#endif // defined(PROJECT_ENABLE_SQLITE)
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void project_cleanup() {
|
||||
#if defined(PROJECT_ENABLE_CURL)
|
||||
if (curl_initialized) {
|
||||
curl_global_cleanup();
|
||||
curl_initialized = false;
|
||||
}
|
||||
#endif // defined(PROJECT_ENABLE_CURL)
|
||||
|
||||
#if defined(PROJECT_ENABLE_SQLITE)
|
||||
if (sqlite3_initialized) {
|
||||
sqlite3_shutdown();
|
||||
sqlite3_initialized = false;
|
||||
}
|
||||
#endif // defined(PROJECT_ENABLE_SQLITE)
|
||||
|
||||
#if defined(PROJECT_ENABLE_SPDLOG)
|
||||
if (spdlog_initialized) {
|
||||
spdlog::shutdown();
|
||||
spdlog_initialized = false;
|
||||
}
|
||||
#endif // defined(PROJECT_ENABLE_SPDLOG)
|
||||
}
|
||||
} // namespace fifthgrid
|
||||
10
src/initialize.hpp
Normal file
10
src/initialize.hpp
Normal file
@@ -0,0 +1,10 @@
|
||||
#ifndef LIBFIFTHGRID_INCLUDE_INITIALIZE_HPP_
|
||||
#define LIBFIFTHGRID_INCLUDE_INITIALIZE_HPP_
|
||||
|
||||
namespace fifthgrid {
|
||||
void project_cleanup();
|
||||
|
||||
[[nodiscard]] auto project_initialize() -> bool;
|
||||
} // namespace fifthgrid
|
||||
|
||||
#endif // LIBFIFTHGRID_INCLUDE_INITIALIZE_HPP_
|
||||
36
src/main.cpp
Normal file
36
src/main.cpp
Normal file
@@ -0,0 +1,36 @@
|
||||
#if defined(PROJECT_ENABLE_BACKWARD_CPP)
|
||||
#include "backward.hpp"
|
||||
#endif // defined(PROJECT_ENABLE_BACKWARD_CPP)
|
||||
|
||||
#include "initialize.hpp"
|
||||
#include "utils/config.hpp"
|
||||
#include "utils/error.hpp"
|
||||
|
||||
using namespace fifthgrid;
|
||||
|
||||
auto main(int argc, char **argv) -> int {
|
||||
FIFTHGRID_USES_FUNCTION_NAME();
|
||||
|
||||
#if defined(PROJECT_ENABLE_BACKWARD_CPP)
|
||||
static backward::SignalHandling sh;
|
||||
#endif // defined(PROJECT_ENABLE_BACKWARD_CPP)
|
||||
|
||||
if (not fifthgrid::project_initialize()) {
|
||||
fifthgrid::project_cleanup();
|
||||
return -1;
|
||||
}
|
||||
|
||||
int exit_code{0};
|
||||
|
||||
try {
|
||||
// TODO Main code here
|
||||
} catch (const std::exception &e) {
|
||||
utils::error::handle_exception(function_name, e);
|
||||
} catch (...) {
|
||||
utils::error::handle_exception(function_name);
|
||||
}
|
||||
|
||||
fifthgrid::project_cleanup();
|
||||
|
||||
return exit_code;
|
||||
}
|
||||
39
src/main_test.cpp
Normal file
39
src/main_test.cpp
Normal file
@@ -0,0 +1,39 @@
|
||||
#if defined(PROJECT_ENABLE_BACKWARD_CPP)
|
||||
#include "backward.hpp"
|
||||
#endif // defined(PROJECT_ENABLE_BACKWARD_CPP)
|
||||
|
||||
#include "gtest/gtest.h"
|
||||
|
||||
#include "initialize.hpp"
|
||||
#include "utils/config.hpp"
|
||||
#include "utils/error.hpp"
|
||||
|
||||
using namespace fifthgrid;
|
||||
|
||||
int PROJECT_TEST_RESULT{0};
|
||||
|
||||
auto main(int argc, char **argv) -> int {
|
||||
FIFTHGRID_USES_FUNCTION_NAME();
|
||||
|
||||
#if defined(PROJECT_ENABLE_BACKWARD_CPP)
|
||||
static backward::SignalHandling sh;
|
||||
#endif
|
||||
|
||||
if (not fifthgrid::project_initialize()) {
|
||||
fifthgrid::project_cleanup();
|
||||
return -1;
|
||||
}
|
||||
|
||||
try {
|
||||
::testing::InitGoogleTest(&argc, argv);
|
||||
PROJECT_TEST_RESULT = RUN_ALL_TESTS();
|
||||
} catch (const std::exception &e) {
|
||||
utils::error::handle_exception(function_name, e);
|
||||
} catch (...) {
|
||||
utils::error::handle_exception(function_name);
|
||||
}
|
||||
|
||||
fifthgrid::project_cleanup();
|
||||
|
||||
return PROJECT_TEST_RESULT;
|
||||
}
|
||||
5
src/project.cmake
Normal file
5
src/project.cmake
Normal file
@@ -0,0 +1,5 @@
|
||||
add_project_library(lib${PROJECT_NAME} "" "" "${PROJECT_ADDITIONAL_SOURCES}")
|
||||
|
||||
add_project_executable(${PROJECT_NAME} lib${PROJECT_NAME} lib${PROJECT_NAME})
|
||||
|
||||
add_project_test_executable(${PROJECT_NAME}_test lib${PROJECT_NAME} lib${PROJECT_NAME})
|
||||
11
src/scripts/cleanup.cmd
Normal file
11
src/scripts/cleanup.cmd
Normal file
@@ -0,0 +1,11 @@
|
||||
@echo off
|
||||
|
||||
setlocal
|
||||
|
||||
set ARG1=%~1
|
||||
set ARG2=%~2
|
||||
set ARG3=%~3
|
||||
|
||||
pushd "%~dp0%"
|
||||
call mingw64 -no-start ./cleanup.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0
|
||||
popd
|
||||
43
src/scripts/cleanup.sh
Normal file
43
src/scripts/cleanup.sh
Normal file
@@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
PROJECT_SCRIPTS_DIR=$(dirname "$0")
|
||||
PROJECT_SCRIPTS_DIR=$(realpath ${PROJECT_SCRIPTS_DIR})
|
||||
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" 1 1>/dev/null 2>&1
|
||||
|
||||
for PROJECT_LIBRARY in "${PROJECT_LIBRARIES[@]}"; do
|
||||
PROJECT_LIBRARY_LOWER=$(echo ${PROJECT_LIBRARY} | tr "[:upper:]" "[:lower:]")
|
||||
ENABLE_NAME=PROJECT_ENABLE_${PROJECT_LIBRARY}
|
||||
KEEP_NAME=PROJECT_KEEP_${PROJECT_LIBRARY}
|
||||
if [ ${!ENABLE_NAME} == "OFF" ] && [ ${!KEEP_NAME} != "1" ]; then
|
||||
CLEANUP_LIST=(${PROJECT_CLEANUP[${PROJECT_LIBRARY}]//:/ })
|
||||
for CLEANUP_ITEM in "${CLEANUP_LIST[@]}"; do
|
||||
rm -r ${PROJECT_SUPPORT_DIR}/${CLEANUP_ITEM}
|
||||
done
|
||||
|
||||
${SED} -i "/.*\/${PROJECT_LIBRARY_LOWER}\.cmake/d" "${PROJECT_SOURCE_DIR}/cmake/libraries.cmake"
|
||||
${SED} -i "/D${ENABLE_NAME}/d" "${PROJECT_SOURCE_DIR}/CMakeLists.txt"
|
||||
|
||||
${SED} -i "/${ENABLE_NAME}/d" "${PROJECT_SOURCE_DIR}/cmake/options.cmake"
|
||||
${SED} -i "/\[${PROJECT_LIBRARY}\]/d" "${PROJECT_SOURCE_DIR}/scripts/libraries.sh"
|
||||
${SED} -i "/\ \ ${PROJECT_LIBRARY}/d" "${PROJECT_SOURCE_DIR}/scripts/libraries.sh"
|
||||
|
||||
${SED} -i "/${PROJECT_LIBRARY}_HASH/d" "${PROJECT_SOURCE_DIR}/cmake/hashes.cmake"
|
||||
${SED} -i "/${PROJECT_LIBRARY}2_HASH/d" "${PROJECT_SOURCE_DIR}/cmake/hashes.cmake"
|
||||
|
||||
${SED} -i "/${PROJECT_LIBRARY}_VERSION/d" "${PROJECT_SOURCE_DIR}/cmake/versions.cmake"
|
||||
${SED} -i "/${PROJECT_LIBRARY}2_VERSION/d" "${PROJECT_SOURCE_DIR}/cmake/versions.cmake"
|
||||
${SED} -i "/\[${PROJECT_LIBRARY}\]/d" "${PROJECT_SOURCE_DIR}/scripts/versions.sh"
|
||||
${SED} -i "/\[${PROJECT_LIBRARY}2\]/d" "${PROJECT_SOURCE_DIR}/scripts/versions.sh"
|
||||
|
||||
rm -f "${PROJECT_SOURCE_DIR}/cmake/libraries/${PROJECT_LIBRARY_LOWER}.cmake"
|
||||
fi
|
||||
|
||||
if [ ${!ENABLE_NAME} == "ON" ] && [ "${PROJECT_CLEANUP[${PROJECT_LIBRARY}_ON]}" != "" ]; then
|
||||
CLEANUP_LIST=(${PROJECT_CLEANUP[${PROJECT_LIBRARY}_ON]//:/ })
|
||||
for CLEANUP_ITEM in "${CLEANUP_LIST[@]}"; do
|
||||
rm -r ${PROJECT_SUPPORT_DIR}/${CLEANUP_ITEM}
|
||||
done
|
||||
fi
|
||||
done
|
||||
|
||||
${SED} -i "s/\ OFF)/\ ON)/" "${PROJECT_SOURCE_DIR}/cmake/options.cmake"
|
||||
207
src/scripts/copy_mingw64_deps.sh
Normal file
207
src/scripts/copy_mingw64_deps.sh
Normal file
@@ -0,0 +1,207 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES=()
|
||||
|
||||
PROJECT_SCRIPTS_DIR=$(realpath "$0")
|
||||
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
|
||||
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" 1>/dev/null 2>&1
|
||||
|
||||
if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_STATIC_LINK}" == "OFF" ]; then
|
||||
mkdir -p "${PROJECT_DIST_DIR}"
|
||||
rm -f ${PROJECT_DIST_DIR}/*.dll
|
||||
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(
|
||||
/mingw64/bin/libgcc_s_seh-1.dll
|
||||
/mingw64/bin/libstdc++-6.dll
|
||||
/mingw64/bin/libwinpthread-1.dll
|
||||
/mingw64/bin/libzlib1.dll
|
||||
/mingw64/bin/libzstd.dll
|
||||
/mingw64/bin/zlib1.dll
|
||||
)
|
||||
|
||||
if [ "${PROJECT_ENABLE_BACKWARD_CPP}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/msvcr90.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_BOOST}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libboost*.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_CLI11}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libcli11*.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_CURL}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(
|
||||
/mingw64/bin/libcurl*.dll
|
||||
/mingw64/bin/libnghttp2-*.dll
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_FLAC}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libFLAC*.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_FMT}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libfmt*.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_FONTCONFIG}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(
|
||||
/mingw64/bin/libexpat*.dll
|
||||
/mingw64/bin/libfontconfig*.dll
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_FREETYPE2}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libfreetype*.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_LIBDSM}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libdsm.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_LIBEVENT}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libevent*.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_LIBICONV}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libiconv.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_LIBJPEG_TURBO}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libjpeg*.dll)
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libturbo*.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_LIBPNG}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libpng*.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_LIBSODIUM}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libsodium*.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_NANA}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libnana*.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_NUSPELL}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libnuspell-*.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_OGG}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libogg*.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_OPENAL}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libopenal*.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_OPENSSL}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(
|
||||
/mingw64/bin/libssl*.dll
|
||||
/mingw64/bin/libcrypt*.dll
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_PUGIXML}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libpugi*.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_SDL}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/SDL2*.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_SECP256K1}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libsecp256k1*.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_SFML}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libsfml*.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_SPDLOG}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libspdlog*.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_SQLITE}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libsqlite3-*.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_TASN}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libtasn1.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_TESTING}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(
|
||||
/mingw64/bin/libgtest*.dll
|
||||
/mingw64/bin/libgmock*.dll
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_TPL}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libtiny-process*.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_VORBIS}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libvorbis*.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libLerc.dll)
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libsharpyuv-*.dll)
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libdeflate.dll)
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libglib-2*.dll)
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libgraphite2.dll)
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libharfbuzz-*.dll)
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libjbig-*.dll)
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libpcre2-*.dll)
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libtiff-*.dll)
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libwebp-*.dll)
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libwxbase*.dll)
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/libwxm*.dll)
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/wxbase*.dll)
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/bin/wxm*.dll)
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/lib/gcc_x64_dll/libwxbase*.dll)
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/lib/gcc_x64_dll/libwxm*.dll)
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/lib/gcc_x64_dll/wxbase*.dll)
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(/mingw64/lib/gcc_x64_dll/wxm*.dll)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_SDL}" == "ON" ] || [ "${PROJECT_ENABLE_SFML}" == "ON" ] ||
|
||||
[ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ] || [ "${PROJECT_ENABLE_NANA}" == "ON" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(
|
||||
/mingw64/bin/libOpenCL*.dll
|
||||
/mingw64/bin/libopencl*.dll
|
||||
/mingw64/bin/libgallium_wgl.dll
|
||||
/mingw64/bin/libva*.dll
|
||||
/mingw64/bin/opengl*.dll
|
||||
/mingw64/bin/vulkan*.dll
|
||||
)
|
||||
fi
|
||||
|
||||
rsync -av --progress ${PROJECT_EXTERNAL_BUILD_ROOT}/bin/*.dll "${PROJECT_DIST_DIR}/"
|
||||
rsync -av --progress ${PROJECT_EXTERNAL_BUILD_ROOT}/lib/*.dll "${PROJECT_DIST_DIR}/"
|
||||
if [ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ]; then
|
||||
rsync -av --progress ${PROJECT_EXTERNAL_BUILD_ROOT}/lib/gcc_x64_dll/*.dll "${PROJECT_DIST_DIR}/"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_WINFSP}" == "ON" ]; then
|
||||
if [ "${PROJECT_BUILD_ARCH}" == "x86_64" ]; then
|
||||
WINFSP_DLL_PART=x64
|
||||
fi
|
||||
|
||||
if [ "${WINFSP_DLL_PART}" != "" ]; then
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES+=(${PROJECT_3RD_PARTY_DIR}/winfsp-2.1/bin/winfsp-${WINFSP_DLL_PART}.dll)
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_VLC}" == "ON" ]; then
|
||||
rsync -av --progress ${PROJECT_3RD_PARTY_DIR}/vlc/ "${PROJECT_DIST_DIR}/vlc/"
|
||||
fi
|
||||
|
||||
for PROJECT_DEPENDENCY in "${PROJECT_MINGW64_COPY_DEPENDENCIES[@]}"; do
|
||||
rsync -av --progress ${PROJECT_DEPENDENCY} "${PROJECT_DIST_DIR}/"
|
||||
done
|
||||
25
src/scripts/create_containers.sh
Normal file
25
src/scripts/create_containers.sh
Normal file
@@ -0,0 +1,25 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
PROJECT_SCRIPTS_DIR=$(realpath "$0")
|
||||
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
|
||||
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" 1 1>/dev/null 2>&1
|
||||
|
||||
if [ -f "${PROJECT_SCRIPTS_DIR}/cleanup.sh" ]; then
|
||||
. "${PROJECT_SCRIPTS_DIR}/cleanup.sh" "$1" "$2" "$3" "$4" "$5"
|
||||
rm ${PROJECT_SCRIPTS_DIR}/cleanup.*
|
||||
fi
|
||||
|
||||
function create_containers() {
|
||||
BUILD_TYPE=$1
|
||||
|
||||
for FILE in "${PROJECT_SOURCE_DIR}/docker/${BUILD_TYPE}/*"; do
|
||||
DOCKER_CREATE_ONLY=1
|
||||
DOCKER_NAME=$(basename ${FILE})
|
||||
DOCKER_TAG=${PROJECT_NAME}:${DOCKER_NAME}
|
||||
|
||||
. "${PROJECT_SCRIPTS_DIR}/docker_common.sh"
|
||||
done
|
||||
}
|
||||
|
||||
create_containers aarch64
|
||||
create_containers x86_64
|
||||
13
src/scripts/deliver.cmd
Normal file
13
src/scripts/deliver.cmd
Normal file
@@ -0,0 +1,13 @@
|
||||
@echo off
|
||||
|
||||
setlocal
|
||||
|
||||
set DEST=%~1
|
||||
set DIST=%~2
|
||||
set ARG1=%~3
|
||||
set ARG2=%~4
|
||||
set ARG3=%~5
|
||||
|
||||
pushd "%~dp0%"
|
||||
call mingw64 -no-start ./deliver.sh "%DEST%" "%DIST%" "%ARG1%" "%ARG2%" "%ARG3%" 1 0 || exit 1
|
||||
popd
|
||||
103
src/scripts/deliver.sh
Normal file
103
src/scripts/deliver.sh
Normal file
@@ -0,0 +1,103 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
DEST_DIR=$1
|
||||
DIST_DIR=$2
|
||||
|
||||
PROJECT_SCRIPTS_DIR=$(realpath "$0")
|
||||
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
|
||||
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$3" "$4" "$5" "$6" "$7"
|
||||
|
||||
function error_exit() {
|
||||
echo $1
|
||||
exit $2
|
||||
}
|
||||
|
||||
if [ ! -d "${PROJECT_DIST_DIR}" ]; then
|
||||
error_exit "dist directory not found: ${PROJECT_DIST_DIR}" 2
|
||||
fi
|
||||
|
||||
if [ "${DIST_DIR}" == "" ]; then
|
||||
DIST_DIR="${PROJECT_DIST_DIR}"
|
||||
fi
|
||||
DIST_DIR=$(realpath "${DIST_DIR}")
|
||||
|
||||
if [ ! -d "${DIST_DIR}" ]; then
|
||||
error_exit "dist directory not found: ${DIST_DIR}" 2
|
||||
fi
|
||||
|
||||
if [ "${DEST_DIR}" == "" ]; then
|
||||
error_exit "dest directory not set" 2
|
||||
fi
|
||||
|
||||
if [ ! -d "${DEST_DIR}" ]; then
|
||||
error_exit "dest directory not found: ${DEST_DIR}" 2
|
||||
fi
|
||||
|
||||
pushd "${PROJECT_SOURCE_DIR}"
|
||||
BRANCH=$(git branch --show-current)
|
||||
RELEASE=$(grep PROJECT_RELEASE_ITER= ./config.sh | ${SED} s/PROJECT_RELEASE_ITER=//g)
|
||||
popd
|
||||
|
||||
if [ "${BRANCH}" == "master" ] || [ "${BRANCH}" == "alpha" ] ||
|
||||
[ "${BRANCH}" == "main" ] || [ "${BRANCH}" == "release" ] ||
|
||||
[ "${BRANCH}" == "beta" ] || [ "${BRANCH}" == "rc" ]; then
|
||||
DEST_DIR=${DEST_DIR}/${RELEASE}
|
||||
elif [[ ${BRANCH} = *'-alpha-'* ]] || [[ ${BRANCH} = *'-beta-'* ]] ||
|
||||
[[ ${BRANCH} = *'-rc-'* ]] || [[ ${BRANCH} = *'-release-'* ]]; then
|
||||
DEST_DIR=${DEST_DIR}/nightly
|
||||
else
|
||||
error_exit "skipping ${PROJECT_FILE_PART}" 0
|
||||
fi
|
||||
|
||||
pushd "${DIST_DIR}"
|
||||
if [ ! -f "./${PROJECT_OUT_FILE}" ]; then
|
||||
error_exit "failed to find file: ${PROJECT_OUT_FILE}" 1
|
||||
fi
|
||||
|
||||
if [ ! -f "./${PROJECT_OUT_FILE}.sha256" ]; then
|
||||
error_exit "failed to find file: ${PROJECT_OUT_FILE}.sha256" 1
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_PRIVATE_KEY}" != "" ] && [ ! -f "./${PROJECT_OUT_FILE}.sig" ]; then
|
||||
error_exit "failed to find file: ${PROJECT_OUT_FILE}.sig" 1
|
||||
fi
|
||||
|
||||
cp -f ./${PROJECT_OUT_FILE} ${DEST_DIR} ||
|
||||
error_exit "failed to deliver file: ${PROJECT_OUT_FILE}" 1
|
||||
|
||||
cp -f ./${PROJECT_OUT_FILE}.sha256 ${DEST_DIR} ||
|
||||
error_exit "failed to deliver file: ${PROJECT_OUT_FILE}.sha256" 1
|
||||
|
||||
if [ "${PROJECT_PRIVATE_KEY}" != "" ]; then
|
||||
cp -f ./${PROJECT_OUT_FILE}.sig ${DEST_DIR} ||
|
||||
error_exit "failed to deliver file: ${PROJECT_OUT_FILE}.sig" 1
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_IS_MINGW}" == "1" ] && [ -f "${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}_setup.exe" ]; then
|
||||
cp -f "${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}_setup.exe" ${DEST_DIR} ||
|
||||
error_exit "failed to deliver file: ${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}" 1
|
||||
|
||||
cp -f "${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}_setup.exe.sha256" ${DEST_DIR} ||
|
||||
error_exit "failed to deliver file: ${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}_setup.exe.sha256" 1
|
||||
|
||||
if [ "${PROJECT_PRIVATE_KEY}" != "" ]; then
|
||||
cp -f "${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}_setup.exe.sig" ${DEST_DIR} ||
|
||||
error_exit "failed to deliver file: ${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}_setup.exe.sig" 1
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_IS_DARWIN}" == "1" ] && [ -f "${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}.dmg" ]; then
|
||||
cp -f -X "${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}.dmg" ${DEST_DIR} ||
|
||||
error_exit "failed to deliver file: ${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}.dmg" 1
|
||||
|
||||
cp -f -X "${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}.dmg.sha256" ${DEST_DIR} ||
|
||||
error_exit "failed to deliver file: ${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}.dmg.sha256" 1
|
||||
|
||||
if [ "${PROJECT_PRIVATE_KEY}" != "" ]; then
|
||||
cp -f -X "${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}.dmg.sig" ${DEST_DIR} ||
|
||||
error_exit "failed to deliver file: ${PROJECT_DIST_DIR}/${PROJECT_FILE_PART}.dmg.sig" 1
|
||||
fi
|
||||
fi
|
||||
popd
|
||||
|
||||
error_exit "delivered ${PROJECT_FILE_PART}" 0
|
||||
67
src/scripts/docker_common.sh
Normal file
67
src/scripts/docker_common.sh
Normal file
@@ -0,0 +1,67 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
if [ "${PROJECT_BUILD_ARCH}" == "aarch64" ] &&
|
||||
[ "${PROJECT_ENABLE_MULTIARCH_DOCKER}" == "1" ]; then
|
||||
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes
|
||||
fi
|
||||
|
||||
if [ "${DOCKER_NAME}" == "mingw64" ]; then
|
||||
APP_VERSION_BUILD_ARGS=${PROJECT_MINGW64_DOCKER_BUILD_ARGS}
|
||||
IS_MINGW=1
|
||||
IS_UNIX=1
|
||||
else
|
||||
IS_MINGW=0
|
||||
IS_UNIX=0
|
||||
fi
|
||||
|
||||
if [ "${DOCKER_CREATE_ONLY}" != "1" ]; then
|
||||
docker stop ${DOCKER_CONTAINER}
|
||||
docker rm ${DOCKER_CONTAINER}
|
||||
fi
|
||||
|
||||
pushd "${PROJECT_SOURCE_DIR}/support"
|
||||
cp -f ${PROJECT_SOURCE_DIR}/docker/${PROJECT_BUILD_ARCH}/${DOCKER_NAME} Dockerfile
|
||||
|
||||
if [ "${PROJECT_BUILD_ARCH}" == "aarch64" ]; then
|
||||
docker build ${APP_VERSION_BUILD_ARGS} \
|
||||
--platform linux/arm64 \
|
||||
--build-arg NUM_JOBS=${NUM_JOBS} \
|
||||
--build-arg UID=$(id -u) \
|
||||
--build-arg GID=$(id -g) \
|
||||
--build-arg USERNAME=$(id -un) \
|
||||
-t ${DOCKER_TAG} . || exit 1
|
||||
else
|
||||
docker build ${APP_VERSION_BUILD_ARGS} \
|
||||
--build-arg NUM_JOBS=${NUM_JOBS} \
|
||||
--build-arg UID=$(id -u) \
|
||||
--build-arg GID=$(id -g) \
|
||||
--build-arg USERNAME=$(id -un) \
|
||||
-t ${DOCKER_TAG} . || exit 1
|
||||
fi
|
||||
rm Dockerfile
|
||||
popd
|
||||
|
||||
if [ "${DOCKER_CREATE_ONLY}" != "1" ]; then
|
||||
docker run -td \
|
||||
--env DEVELOPER_PRIVATE_KEY=${DEVELOPER_PRIVATE_KEY} \
|
||||
--env DEVELOPER_PUBLIC_KEY=${DEVELOPER_PUBLIC_KEY} \
|
||||
--env MY_NUM_JOBS=${NUM_JOBS} \
|
||||
--name ${DOCKER_CONTAINER} \
|
||||
-u $(id -u):$(id -g) \
|
||||
-v /.ci/${PROJECT_NAME}:/.ci/${PROJECT_NAME}:ro \
|
||||
-v ${PROJECT_SOURCE_DIR}:${PROJECT_SOURCE_DIR}:rw,z \
|
||||
-w ${PROJECT_SOURCE_DIR} \
|
||||
${DOCKER_TAG} || exit 1
|
||||
|
||||
if [ "${DOCKER_SHELL}" == "1" ]; then
|
||||
docker exec -it ${DOCKER_CONTAINER} /bin/bash
|
||||
else
|
||||
docker exec \
|
||||
${DOCKER_CONTAINER} \
|
||||
/bin/bash -c \
|
||||
"${PROJECT_SOURCE_DIR}/scripts/make_common.sh \"${PROJECT_BUILD_ARCH}\" \"${PROJECT_CMAKE_BUILD_TYPE}\" \"${PROJECT_BUILD_CLEAN}\" ${IS_MINGW} ${IS_UNIX}" || exit 1
|
||||
fi
|
||||
|
||||
docker stop ${DOCKER_CONTAINER}
|
||||
docker rm ${DOCKER_CONTAINER}
|
||||
fi
|
||||
441
src/scripts/env.sh
Normal file
441
src/scripts/env.sh
Normal file
@@ -0,0 +1,441 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
PROJECT_BUILD_ARCH=$1
|
||||
PROJECT_CMAKE_BUILD_TYPE=$2
|
||||
PROJECT_BUILD_CLEAN=$3
|
||||
PROJECT_IS_MINGW=$4
|
||||
PROJECT_IS_MINGW_UNIX=$5
|
||||
DISABLE_CREATE_DIRS=$6
|
||||
|
||||
PROJECT_FLUTTER_BASE_HREF="/"
|
||||
|
||||
if [ "${PROJECT_IS_MINGW}" != "1" ]; then
|
||||
PROJECT_IS_MINGW_UNIX=0
|
||||
fi
|
||||
|
||||
PROJECT_SOURCE_DIR=${PROJECT_SCRIPTS_DIR}/..
|
||||
PROJECT_SOURCE_DIR=$(realpath "${PROJECT_SOURCE_DIR}")
|
||||
|
||||
NUM_JOBS=${MY_NUM_JOBS}
|
||||
if [[ -z "${NUM_JOBS}" ]]; then
|
||||
NUM_JOBS=$(getconf _NPROCESSORS_ONLN 2>/dev/null ||
|
||||
getconf NPROCESSORS_ONLN 2>/dev/null || echo 1)
|
||||
if [ "${NUM_JOBS}" -gt "4" ]; then
|
||||
NUM_JOBS=$(expr ${NUM_JOBS} - 2)
|
||||
elif [ "${NUM_JOBS}" -gt "1" ]; then
|
||||
NUM_JOBS=$(expr ${NUM_JOBS} - 1)
|
||||
fi
|
||||
fi
|
||||
|
||||
pushd "${PROJECT_SOURCE_DIR}"
|
||||
|
||||
PROJECT_GIT_REV=$(git rev-parse --short HEAD)
|
||||
|
||||
. "${PROJECT_SCRIPTS_DIR}/versions.sh"
|
||||
. "${PROJECT_SCRIPTS_DIR}/libraries.sh"
|
||||
|
||||
for PROJECT_LIBRARY in "${PROJECT_LIBRARIES[@]}"; do
|
||||
ENABLE_NAME=PROJECT_ENABLE_${PROJECT_LIBRARY}
|
||||
KEEP_NAME=PROJECT_KEEP_${PROJECT_LIBRARY}
|
||||
if [ "${PROJECT_LIBRARY}" == "TESTING" ]; then
|
||||
export ${ENABLE_NAME}=ON
|
||||
else
|
||||
export ${ENABLE_NAME}=OFF
|
||||
fi
|
||||
export ${KEEP_NAME}=0
|
||||
done
|
||||
|
||||
PROJECT_APP_LIST=()
|
||||
PROJECT_CMAKE_OPTS=""
|
||||
PROJECT_ENABLE_V2_ERRORS=OFF
|
||||
PROJECT_ENABLE_WIN32_LONG_PATH_NAMES=OFF
|
||||
PROJECT_IS_ALPINE=0
|
||||
PROJECT_IS_ARM64=0
|
||||
PROJECT_IS_DARWIN=0
|
||||
PROJECT_MINGW64_COPY_DEPENDENCIES=()
|
||||
PROJECT_MSYS2_PACKAGE_LIST=()
|
||||
PROJECT_REQUIRE_ALPINE=OFF
|
||||
PROJECT_STATIC_LINK=OFF
|
||||
PROJECT_MACOS_BUNDLE_ID=""
|
||||
PROJECT_MACOS_ICNS_NAME=""
|
||||
|
||||
if [ "$(uname -s)" == "Darwin" ]; then
|
||||
PROJECT_IS_DARWIN=1
|
||||
export SED=gsed
|
||||
else
|
||||
export SED=sed
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_BUILD_ARCH}" == "" ]; then
|
||||
if [ "$(uname -m)" == "arm64" ]; then
|
||||
PROJECT_BUILD_ARCH=aarch64
|
||||
else
|
||||
PROJECT_BUILD_ARCH=x86_64
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_BUILD_ARCH}" == "aarch64" ]; then
|
||||
PROJECT_IS_ARM64=1
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_BUILD_ARCH}" == "x86_64" ]; then
|
||||
PROJECT_BUILD_ARCH2="x86-64"
|
||||
else
|
||||
PROJECT_BUILD_ARCH2="${PROJECT_BUILD_ARCH}"
|
||||
fi
|
||||
|
||||
if [ -f /etc/alpine-release ]; then
|
||||
PROJECT_IS_ALPINE=1
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_IS_MINGW}" == "" ]; then
|
||||
PROJECT_IS_MINGW=0
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_IS_MINGW_UNIX}" == "" ]; then
|
||||
PROJECT_IS_MINGW_UNIX=0
|
||||
fi
|
||||
|
||||
. "${PROJECT_SOURCE_DIR}/config.sh"
|
||||
|
||||
if [ "${PROJECT_IS_MINGW}" == "0" ]; then
|
||||
PROJECT_ENABLE_WIN32_LONG_PATH_NAMES=OFF
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_SFML}" == "ON" ]; then
|
||||
PROJECT_ENABLE_FLAC=ON
|
||||
PROJECT_ENABLE_FONTCONFIG=ON
|
||||
PROJECT_ENABLE_FREETYPE2=ON
|
||||
PROJECT_ENABLE_OGG=ON
|
||||
PROJECT_ENABLE_OPENAL=ON
|
||||
PROJECT_ENABLE_VORBIS=ON
|
||||
PROJECT_STATIC_LINK=OFF
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_CPP_HTTPLIB}" == "ON" ]; then
|
||||
PROJECT_ENABLE_CURL=ON
|
||||
PROJECT_ENABLE_OPENSSL=ON
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_CURL}" == "ON" ]; then
|
||||
PROJECT_ENABLE_OPENSSL=ON
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_LIBBITCOIN_SYSTEM}" == "ON" ]; then
|
||||
PROJECT_ENABLE_BOOST=ON
|
||||
PROJECT_ENABLE_SECP256K1=ON
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_FONTCONFIG}" == "ON" ]; then
|
||||
PROJECT_ENABLE_FREETYPE2=ON
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ]; then
|
||||
PROJECT_ENABLE_CURL=ON
|
||||
PROJECT_STATIC_LINK=OFF
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_SPDLOG}" == "ON" ]; then
|
||||
PROJECT_ENABLE_FMT=OFF
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_VORBIS}" == "ON" ]; then
|
||||
PROJECT_ENABLE_OGG=ON
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_FLAC}" == "ON" ]; then
|
||||
PROJECT_ENABLE_LIBICONV=ON
|
||||
PROJECT_ENABLE_OGG=ON
|
||||
PROJECT_ENABLE_VORBIS=ON
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_BOOST}" == "ON" ]; then
|
||||
PROJECT_ENABLE_OPENSSL=ON
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_FONTCONFIG}" == "ON" ] || [ "${PROJECT_ENABLE_NANA}" == "ON" ] ||
|
||||
[ "${PROJECT_ENABLE_SFML}" == "ON" ] || [ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ] ||
|
||||
[ "${PROJECT_ENABLE_SDL}" == "ON" ]; then
|
||||
PROJECT_ENABLE_LIBJPEG_TURBO=ON
|
||||
PROJECT_ENABLE_LIBPNG=ON
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_IS_MINGW}" == "1" ]; then
|
||||
PROJECT_ENABLE_BACKWARD_CPP=OFF
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_LIBDSM}" == "ON" ]; then
|
||||
PROJECT_ENABLE_LIBICONV=ON
|
||||
PROJECT_ENABLE_LIBTASN=ON
|
||||
PROJECT_ENABLE_OPENSSL=ON
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_CMAKE_BUILD_TYPE}" == "" ]; then
|
||||
PROJECT_CMAKE_BUILD_TYPE=RelWithDebInfo
|
||||
fi
|
||||
|
||||
PROJECT_CMAKE_BUILD_TYPE_LOWER=$(echo "${PROJECT_CMAKE_BUILD_TYPE}" | tr '[:upper:]' '[:lower:]')
|
||||
if [ "${PROJECT_CMAKE_BUILD_TYPE_LOWER}" == "release" ]; then
|
||||
PROJECT_CMAKE_BUILD_TYPE=RelWithDebInfo
|
||||
elif [ "${PROJECT_CMAKE_BUILD_TYPE_LOWER}" == "debug" ]; then
|
||||
PROJECT_CMAKE_BUILD_TYPE=Debug
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_IS_MINGW_UNIX}" != "1" ]; then
|
||||
PROJECT_STATIC_LINK=OFF
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_STATIC_LINK}" == "ON" ]; then
|
||||
PROJECT_BUILD_SHARED_LIBS=OFF
|
||||
PROJECT_ENABLE_BACKWARD_CPP=OFF
|
||||
PROJECT_LINK_TYPE=static
|
||||
if [ "${PROJECT_IS_DARWIN}" == "0" ]; then
|
||||
PROJECT_REQUIRE_ALPINE=ON
|
||||
else
|
||||
PROJECT_REQUIRE_ALPINE=OFF
|
||||
fi
|
||||
else
|
||||
PROJECT_BUILD_SHARED_LIBS=ON
|
||||
PROJECT_LINK_TYPE=shared
|
||||
PROJECT_REQUIRE_ALPINE=OFF
|
||||
fi
|
||||
|
||||
PROJECT_BUILD_DIR=${PROJECT_SOURCE_DIR}/build/${PROJECT_CMAKE_BUILD_TYPE_LOWER}/${PROJECT_LINK_TYPE}
|
||||
PROJECT_DIST_DIR=${PROJECT_SOURCE_DIR}/dist/${PROJECT_CMAKE_BUILD_TYPE_LOWER}/${PROJECT_LINK_TYPE}
|
||||
|
||||
if [ "${PROJECT_IS_MINGW}" == "1" ]; then
|
||||
PROJECT_DIST_DIR=${PROJECT_DIST_DIR}/win32
|
||||
PROJECT_BUILD_DIR=${PROJECT_BUILD_DIR}/win32
|
||||
elif [ "${PROJECT_IS_DARWIN}" == "1" ]; then
|
||||
PROJECT_DIST_DIR=${PROJECT_DIST_DIR}/darwin
|
||||
PROJECT_BUILD_DIR=${PROJECT_BUILD_DIR}/darwin
|
||||
else
|
||||
PROJECT_DIST_DIR=${PROJECT_DIST_DIR}/linux
|
||||
PROJECT_BUILD_DIR=${PROJECT_BUILD_DIR}/linux
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_IS_ARM64}" == "1" ]; then
|
||||
PROJECT_DIST_DIR=${PROJECT_DIST_DIR}/aarch64
|
||||
PROJECT_BUILD_DIR=${PROJECT_BUILD_DIR}/aarch64
|
||||
else
|
||||
PROJECT_DIST_DIR=${PROJECT_DIST_DIR}/x86_64
|
||||
PROJECT_BUILD_DIR=${PROJECT_BUILD_DIR}/x86_64
|
||||
fi
|
||||
|
||||
PROJECT_DIST_DIR=${PROJECT_DIST_DIR}/${PROJECT_NAME}
|
||||
PROJECT_EXTERNAL_BUILD_ROOT=${PROJECT_BUILD_DIR}/deps
|
||||
|
||||
PROJECT_SUPPORT_DIR=${PROJECT_SOURCE_DIR}/support
|
||||
PROJECT_3RD_PARTY_DIR=${PROJECT_SUPPORT_DIR}/3rd_party
|
||||
|
||||
if [ "${PROJECT_ENABLE_OPENSSL}" == "ON" ]; then
|
||||
if [ "${PROJECT_IS_MINGW}" == "1" ]; then
|
||||
OPENSSL_ROOT_DIR=/mingw64
|
||||
else
|
||||
OPENSSL_ROOT_DIR=${PROJECT_EXTERNAL_BUILD_ROOT}
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_IS_MINGW_UNIX}" == "1" ]; then
|
||||
PROJECT_TOOLCHAIN_FILE_CMAKE=/cmake_toolchain.cmake
|
||||
PROJECT_TOOLCHAIN_FILE_MESON=/meson_cross_file.txt
|
||||
PROJECT_CMAKE_OPTS="-DCMAKE_TOOLCHAIN_FILE=${PROJECT_TOOLCHAIN_FILE_CMAKE} ${PROJECT_CMAKE_OPTS}"
|
||||
fi
|
||||
|
||||
if [ -f "${PROJECT_SOURCE_DIR}/cmake/versions.cmake" ]; then
|
||||
VERSIONS=($(${SED} -e s/\ /=/g -e s/set\(//g -e s/\)//g "${PROJECT_SOURCE_DIR}/cmake/versions.cmake"))
|
||||
|
||||
PROJECT_MINGW64_DOCKER_BUILD_ARGS=()
|
||||
|
||||
for VERSION in "${VERSIONS[@]}"; do
|
||||
LOOKUP_NAME=$(echo ${VERSION} | ${SED} s/_VERSION.*// | sed s/GTEST/TESTING/g)
|
||||
ENABLE_NAME=PROJECT_ENABLE_${LOOKUP_NAME}
|
||||
if [ "${!ENABLE_NAME}" != "OFF" ]; then
|
||||
PROJECT_MINGW64_DOCKER_BUILD_ARGS+=("--build-arg ${VERSION}")
|
||||
fi
|
||||
done
|
||||
|
||||
PROJECT_MINGW64_DOCKER_BUILD_ARGS=${PROJECT_MINGW64_DOCKER_BUILD_ARGS[*]}
|
||||
fi
|
||||
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_3RD_PARTY_DIR=${PROJECT_3RD_PARTY_DIR} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_BUILD_ARCH=${PROJECT_BUILD_ARCH} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_BUILD_DIR=${PROJECT_BUILD_DIR} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_BUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_CMAKE_BUILD_TYPE=${PROJECT_CMAKE_BUILD_TYPE} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_DIST_DIR=${PROJECT_DIST_DIR} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_V2_ERRORS=${PROJECT_ENABLE_V2_ERRORS} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_ENABLE_WIN32_LONG_PATH_NAMES=${PROJECT_ENABLE_WIN32_LONG_PATH_NAMES} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_EXTERNAL_BUILD_ROOT=${PROJECT_EXTERNAL_BUILD_ROOT} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_GIT_REV=${PROJECT_GIT_REV} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_IS_ALPINE=${PROJECT_IS_ALPINE} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_IS_ARM64=${PROJECT_IS_ARM64} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_IS_DARWIN=${PROJECT_IS_DARWIN} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_IS_MINGW=${PROJECT_IS_MINGW} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_IS_MINGW_UNIX=${PROJECT_IS_MINGW_UNIX} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_MACOS_BUNDLE_ID=${PROJECT_MACOS_BUNDLE_ID} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_MACOS_ICNS_NAME=${PROJECT_MACOS_ICNS_NAME} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_MAJOR_VERSION=${PROJECT_MAJOR_VERSION} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_MINOR_VERSION=${PROJECT_MINOR_VERSION} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_NAME=${PROJECT_NAME} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_RELEASE_ITER=${PROJECT_RELEASE_ITER} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_RELEASE_NUM=${PROJECT_RELEASE_NUM} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_REQUIRE_ALPINE=${PROJECT_REQUIRE_ALPINE} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_REVISION_VERSION=${PROJECT_REVISION_VERSION} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_STATIC_LINK=${PROJECT_STATIC_LINK} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_SUPPORT_DIR=${PROJECT_SUPPORT_DIR} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_TOOLCHAIN_FILE_CMAKE=${PROJECT_TOOLCHAIN_FILE_CMAKE} ${PROJECT_CMAKE_OPTS}"
|
||||
PROJECT_CMAKE_OPTS="-DPROJECT_TOOLCHAIN_FILE_MESON=${PROJECT_TOOLCHAIN_FILE_MESON} ${PROJECT_CMAKE_OPTS}"
|
||||
|
||||
for PROJECT_LIBRARY in "${PROJECT_LIBRARIES[@]}"; do
|
||||
ENABLE_NAME=PROJECT_ENABLE_${PROJECT_LIBRARY}
|
||||
PROJECT_CMAKE_OPTS="${PROJECT_CMAKE_OPTS} -D${ENABLE_NAME}=${!ENABLE_NAME}"
|
||||
done
|
||||
|
||||
PKG_CONFIG_PATH="${PROJECT_EXTERNAL_BUILD_ROOT}/lib/pkgconfig:${PROJECT_EXTERNAL_BUILD_ROOT}/lib64/pkgconfig:${PROJECT_EXTERNAL_BUILD_ROOT}/shared/pkgconfig:${PKG_CONFIG_PATH}"
|
||||
|
||||
if [ "${DISABLE_CREATE_DIRS}" != "1" ]; then
|
||||
mkdir -p "${PROJECT_BUILD_DIR}"
|
||||
mkdir -p "${PROJECT_DIST_DIR}"
|
||||
fi
|
||||
|
||||
PATH="${PROJECT_EXTERNAL_BUILD_ROOT}/bin:${PATH}"
|
||||
|
||||
if [ "${PROJECT_IS_MINGW}" == "1" ]; then
|
||||
PROJECT_OS=windows
|
||||
elif [ "${PROJECT_IS_DARWIN}" == "1" ]; then
|
||||
PROJECT_OS=darwin
|
||||
else
|
||||
PROJECT_OS=linux
|
||||
fi
|
||||
|
||||
PROJECT_FILE_PART=${PROJECT_NAME}_${PROJECT_MAJOR_VERSION}.${PROJECT_MINOR_VERSION}.${PROJECT_REVISION_VERSION}-${PROJECT_RELEASE_ITER}_${PROJECT_GIT_REV}_${PROJECT_OS}_${PROJECT_BUILD_ARCH2}
|
||||
PROJECT_OUT_FILE=${PROJECT_FILE_PART}.tar.gz
|
||||
|
||||
if [ "${PROJECT_IS_MINGW}" == "1" ]; then
|
||||
PROJECT_APP_BINARY_EXT=.exe
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_IS_MINGW_UNIX}" != "1" ]; then
|
||||
MSYS=winsymlinks:nativestrict
|
||||
fi
|
||||
|
||||
PROJECT_ENABLE_INNOSETUP=1
|
||||
|
||||
export MSYS
|
||||
export NUM_JOBS
|
||||
export OPENSSL_ROOT_DIR
|
||||
export PATH
|
||||
export PKG_CONFIG_PATH
|
||||
export PROJECT_3RD_PARTY_DIR
|
||||
export PROJECT_APP_BINARY_EXT
|
||||
export PROJECT_APP_LIST
|
||||
export PROJECT_BUILD_ARCH
|
||||
export PROJECT_BUILD_ARCH2
|
||||
export PROJECT_BUILD_CLEAN
|
||||
export PROJECT_BUILD_DIR
|
||||
export PROJECT_BUILD_SHARED_LIBS
|
||||
export PROJECT_CMAKE_BUILD_TYPE
|
||||
export PROJECT_CMAKE_BUILD_TYPE_LOWER
|
||||
export PROJECT_CMAKE_OPTS
|
||||
export PROJECT_COMPANY_NAME
|
||||
export PROJECT_COPYRIGHT
|
||||
export PROJECT_DESC
|
||||
export PROJECT_DIST_DIR
|
||||
export PROJECT_ENABLE_V2_ERRORS
|
||||
export PROJECT_ENABLE_WIN32_LONG_PATH_NAMES
|
||||
export PROJECT_FILE_PART
|
||||
export PROJECT_FLUTTER_BASE_HREF
|
||||
export PROJECT_GIT_REV
|
||||
export PROJECT_IS_ALPINE
|
||||
export PROJECT_IS_ARM64
|
||||
export PROJECT_IS_DARWIN
|
||||
export PROJECT_IS_MINGW
|
||||
export PROJECT_IS_MINGW_UNIX
|
||||
export PROJECT_LINK_TYPE
|
||||
export PROJECT_MACOS_BUNDLE_ID
|
||||
export PROJECT_MACOS_ICNS_NAME
|
||||
export PROJECT_MAJOR_VERSION
|
||||
export PROJECT_MINGW64_COPY_DEPENDENCIES
|
||||
export PROJECT_MINGW64_DOCKER_BUILD_ARGS
|
||||
export PROJECT_MINOR_VERSION
|
||||
export PROJECT_MSYS2_PACKAGE_LIST
|
||||
export PROJECT_NAME
|
||||
export PROJECT_OS
|
||||
export PROJECT_OUT_FILE
|
||||
export PROJECT_PRIVATE_KEY
|
||||
export PROJECT_PUBLIC_KEY
|
||||
export PROJECT_RELEASE_ITER
|
||||
export PROJECT_RELEASE_NUM
|
||||
export PROJECT_REQUIRE_ALPINE
|
||||
export PROJECT_REVISION_VERSION
|
||||
export PROJECT_SOURCE_DIR
|
||||
export PROJECT_STATIC_LINK
|
||||
export PROJECT_SUPPORT_DIR
|
||||
export PROJECT_TOOLCHAIN_FILE_CMAKE
|
||||
export PROJECT_TOOLCHAIN_FILE_MESON
|
||||
export PROJECT_URL
|
||||
|
||||
for PROJECT_LIBRARY in "${PROJECT_LIBRARIES[@]}"; do
|
||||
ENABLE_NAME=PROJECT_ENABLE_${PROJECT_LIBRARY}
|
||||
KEEP_NAME=PROJECT_KEEP_${PROJECT_LIBRARY}
|
||||
export ${ENABLE_NAME}
|
||||
export ${KEEP_NAME}
|
||||
done
|
||||
|
||||
echo "-=[Settings]=-"
|
||||
echo " App binary extension: ${PROJECT_APP_BINARY_EXT}"
|
||||
echo " App list: ${PROJECT_APP_LIST[*]}"
|
||||
echo " Build arch: ${PROJECT_BUILD_ARCH}"
|
||||
echo " Build arch2: ${PROJECT_BUILD_ARCH2}"
|
||||
echo " Build clean: ${PROJECT_BUILD_CLEAN}"
|
||||
echo " Build dir: ${PROJECT_BUILD_DIR}"
|
||||
echo " Build shared libraries: ${PROJECT_BUILD_SHARED_LIBS}"
|
||||
echo " CMake options: -G\"Unix Makefiles\" -DPROJECT_COMPANY_NAME=\"${PROJECT_COMPANY_NAME}\" -DPROJECT_COPYRIGHT=\"${PROJECT_COPYRIGHT}\" -DPROJECT_DESC=\"${PROJECT_DESC}\" -DPROJECT_URL=\"${PROJECT_URL}\" ${PROJECT_CMAKE_OPTS} "
|
||||
echo " CMake toolchain file: ${PROJECT_TOOLCHAIN_FILE_CMAKE}"
|
||||
echo " Cmake Build type: ${PROJECT_CMAKE_BUILD_TYPE}"
|
||||
echo " Company name: ${PROJECT_COMPANY_NAME}"
|
||||
echo " Copyright: ${PROJECT_COPYRIGHT}"
|
||||
echo " Description: ${PROJECT_DESC}"
|
||||
echo " Dist dir: ${PROJECT_DIST_DIR}"
|
||||
echo " Enable v2 errors: ${PROJECT_ENABLE_V2_ERRORS}"
|
||||
echo " External build root: ${PROJECT_EXTERNAL_BUILD_ROOT}"
|
||||
echo " File part: ${PROJECT_FILE_PART}"
|
||||
echo " Flutter base href: ${PROJECT_FLUTTER_BASE_HREF}"
|
||||
echo " Is ARM64: ${PROJECT_IS_ARM64}"
|
||||
echo " Is Alpine: ${PROJECT_IS_ALPINE}"
|
||||
echo " Is Darwin: ${PROJECT_IS_DARWIN}"
|
||||
echo " Is MINGW on Unix: ${PROJECT_IS_MINGW_UNIX}"
|
||||
echo " Is MINGW: ${PROJECT_IS_MINGW}"
|
||||
echo " Job count: ${NUM_JOBS}"
|
||||
echo " Link type: ${PROJECT_LINK_TYPE}"
|
||||
if [ "${PROJECT_IS_MINGW}" == "1" ]; then
|
||||
echo " Long path names: ${PROJECT_ENABLE_WIN32_LONG_PATH_NAMES}"
|
||||
fi
|
||||
if [ "${PROJECT_IS_DARWIN}" == "1" ]; then
|
||||
echo " macOS bundle ID: ${PROJECT_MACOS_BUNDLE_ID}"
|
||||
echo " macOS icns name: ${PROJECT_MACOS_ICNS_NAME}"
|
||||
fi
|
||||
echo " Meson toolchain file: ${PROJECT_TOOLCHAIN_FILE_MESON}"
|
||||
if [ "${PROJECT_IS_MINGW}" == "1" ] && [ "${PROJECT_IS_MINGW_UNIX}" == "1" ]; then
|
||||
echo " MinGW docker build args: ${PROJECT_MINGW64_DOCKER_BUILD_ARGS}"
|
||||
fi
|
||||
echo " OPENSSL_ROOT_DIR: ${OPENSSL_ROOT_DIR}"
|
||||
echo " Out file: ${PROJECT_OUT_FILE}"
|
||||
echo " PATH: ${PATH}"
|
||||
echo " PKG_CONFIG_PATH: ${PKG_CONFIG_PATH}"
|
||||
echo " Require Alpine: ${PROJECT_REQUIRE_ALPINE}"
|
||||
echo " Static link: ${PROJECT_STATIC_LINK}"
|
||||
echo " Support dir: ${PROJECT_SUPPORT_DIR}"
|
||||
echo " Third-party dir: ${PROJECT_3RD_PARTY_DIR}"
|
||||
echo " Unit testing enabled: ${PROJECT_ENABLE_TESTING}"
|
||||
echo " URL: ${PROJECT_URL}"
|
||||
echo "-=[Libraries]=-"
|
||||
for PROJECT_LIBRARY in "${PROJECT_LIBRARIES[@]}"; do
|
||||
ENABLE_NAME=PROJECT_ENABLE_${PROJECT_LIBRARY}
|
||||
KEEP_NAME=PROJECT_KEEP_${PROJECT_LIBRARY}
|
||||
if [ "${!ENABLE_NAME}" == "ON" ] || [ "${!KEEP_NAME}" == "1" ]; then
|
||||
echo " ${ENABLE_NAME}: Enable[${!ENABLE_NAME}] Keep[${!KEEP_NAME}]"
|
||||
fi
|
||||
done
|
||||
popd
|
||||
12
src/scripts/info.cmd
Normal file
12
src/scripts/info.cmd
Normal file
@@ -0,0 +1,12 @@
|
||||
@echo off
|
||||
|
||||
setlocal
|
||||
|
||||
set ARG1=%~1
|
||||
set ARG2=%~2
|
||||
set ARG3=%~3
|
||||
|
||||
pushd "%~dp0%"
|
||||
call mingw64 -no-start ./info.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0
|
||||
popd
|
||||
|
||||
5
src/scripts/info.sh
Normal file
5
src/scripts/info.sh
Normal file
@@ -0,0 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
PROJECT_SCRIPTS_DIR=$(realpath "$0")
|
||||
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
|
||||
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" 1
|
||||
146
src/scripts/libraries.sh
Normal file
146
src/scripts/libraries.sh
Normal file
@@ -0,0 +1,146 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
PROJECT_LIBRARIES=(
|
||||
BACKWARD_CPP
|
||||
BOOST
|
||||
CLI11
|
||||
CPP_HTTPLIB
|
||||
CURL
|
||||
CXXOPTS
|
||||
DTL
|
||||
FLAC
|
||||
FMT
|
||||
FONTCONFIG
|
||||
FREETYPE2
|
||||
FUSE
|
||||
FZF
|
||||
GTKMM
|
||||
JSON
|
||||
LIBBITCOIN_SYSTEM
|
||||
LIBDSM
|
||||
LIBEVENT
|
||||
LIBICONV
|
||||
LIBJPEG_TURBO
|
||||
LIBPNG
|
||||
LIBSODIUM
|
||||
LIBTASN
|
||||
NANA
|
||||
NUSPELL
|
||||
OGG
|
||||
OPENAL
|
||||
OPENSSL
|
||||
PUGIXML
|
||||
ROCKSDB
|
||||
SAGO_PLATFORM_FOLDERS
|
||||
SDL
|
||||
SECP256K1
|
||||
SFML
|
||||
SPDLOG
|
||||
SQLITE
|
||||
STDUUID
|
||||
TESTING
|
||||
TPL
|
||||
VLC
|
||||
VORBIS
|
||||
WINFSP
|
||||
WXWIDGETS
|
||||
)
|
||||
|
||||
declare -A PROJECT_CLEANUP
|
||||
PROJECT_CLEANUP[BACKWARD_CPP]="include/backward.hpp:src/backward.cpp"
|
||||
PROJECT_CLEANUP[BINUTILS]="3rd_party/mingw64/binutils-*"
|
||||
PROJECT_CLEANUP[BOOST]="3rd_party/boost_*"
|
||||
PROJECT_CLEANUP[CLI11]="3rd_party/CLI11-*"
|
||||
PROJECT_CLEANUP[CPP_HTTPLIB]="3rd_party/cpp-httplib-*"
|
||||
PROJECT_CLEANUP[CURL]="3rd_party/curl-*"
|
||||
PROJECT_CLEANUP[CXXOPTS]="3rd_party/cxxopts-*"
|
||||
PROJECT_CLEANUP[DTL]="3rd_party/dtl-*"
|
||||
PROJECT_CLEANUP[EXPAT]="3rd_party/mingw64/expat-*"
|
||||
PROJECT_CLEANUP[FLAC]="3rd_party/flac-*"
|
||||
PROJECT_CLEANUP[FMT]="3rd_party/fmt-*"
|
||||
PROJECT_CLEANUP[FONTCONFIG]="3rd_party/fontconfig-*"
|
||||
PROJECT_CLEANUP[FREETYPE2]="3rd_party/freetype-*"
|
||||
PROJECT_CLEANUP[FZF]="include/fzf.h:src/fzf.c"
|
||||
PROJECT_CLEANUP[GCC]="3rd_party/mingw64/gcc-*"
|
||||
PROJECT_CLEANUP[ICU]="3rd_party/mingw64/icu-release-*"
|
||||
PROJECT_CLEANUP[JSON]="3rd_party/json-*"
|
||||
PROJECT_CLEANUP[INNOSETUP]="3rd_party/mingw64/innosetup-*"
|
||||
PROJECT_CLEANUP[LIBBITCOIN_SYSTEM]="3rd_party/boost_${PROJECT_VERSIONS[BOOST2_MAJOR]}_${PROJECT_VERSIONS[BOOST2_MINOR]}_*:3rd_party/libbitcoin-system-*"
|
||||
PROJECT_CLEANUP[LIBBITCOIN_SYSTEM_ON]="3rd_party/boost_${PROJECT_VERSIONS[BOOST_MAJOR]}_${PROJECT_VERSIONS[BOOST_MINOR]}_*"
|
||||
PROJECT_CLEANUP[LIBDSM]="3rd_party/libdsm-*:3rd_party/libdsm*"
|
||||
PROJECT_CLEANUP[LIBEVENT]="3rd_party/libevent*"
|
||||
PROJECT_CLEANUP[LIBICONV]="3rd_party/libiconv-*"
|
||||
PROJECT_CLEANUP[LIBJPEG_TURBO]="3rd_party/libjpeg_turbo-*"
|
||||
PROJECT_CLEANUP[LIBPNG]="3rd_party/libpng-*"
|
||||
PROJECT_CLEANUP[LIBSODIUM]="3rd_party/libsodium-*:3rd_party/libsodium*"
|
||||
PROJECT_CLEANUP[LIBTASN]="3rd_party/libtasn1-*"
|
||||
PROJECT_CLEANUP[MINGW]="3rd_party/mingw64/mingw-w64-*"
|
||||
PROJECT_CLEANUP[NANA]="3rd_party/nana-*:3rd_party/nana*"
|
||||
PROJECT_CLEANUP[NUSPELL]="3rd_party/nuspell-*"
|
||||
PROJECT_CLEANUP[OGG]="3rd_party/ogg-*"
|
||||
PROJECT_CLEANUP[OPENAL]="3rd_party/openal-*"
|
||||
PROJECT_CLEANUP[OPENSSL]="3rd_party/openssl-*"
|
||||
PROJECT_CLEANUP[PKG_CONFIG]="3rd_party/mingw64/pkg-config-*"
|
||||
PROJECT_CLEANUP[PUGIXML]="3rd_party/pugixml-*"
|
||||
PROJECT_CLEANUP[ROCKSDB]="3rd_party/rocksdb-*"
|
||||
PROJECT_CLEANUP[SAGO_PLATFORM_FOLDERS]="include/platform_folders.hpp:src/platform_folders.cpp"
|
||||
PROJECT_CLEANUP[SDL]="3rd_party/sdl-*"
|
||||
PROJECT_CLEANUP[SECP256K1]="3rd_party/secp256k1-*"
|
||||
PROJECT_CLEANUP[SFML]="3rd_party/SFML-*:3rd_party/SFML*:include/RoundedRectangleShape.hpp:include/Text2.hpp:src/RoundedRectangleShape.cpp:src/Text2.cpp"
|
||||
PROJECT_CLEANUP[SPDLOG]="3rd_party/spdlog-*"
|
||||
PROJECT_CLEANUP[SQLITE]="3rd_party/sqlite*"
|
||||
PROJECT_CLEANUP[STDUUID]="3rd_party/stduuid-*"
|
||||
PROJECT_CLEANUP[TESTING]="3rd_party/googletest-*"
|
||||
PROJECT_CLEANUP[TPL]="3rd_party/tiny-process-library*"
|
||||
PROJECT_CLEANUP[VLC]="3rd_party/vlc*"
|
||||
PROJECT_CLEANUP[VORBIS]="3rd_party/vorbis-*:3rd_party/vorbis*"
|
||||
PROJECT_CLEANUP[WINFSP]="3rd_party/winfsp-*"
|
||||
PROJECT_CLEANUP[WXWIDGETS]="3rd_party/wxWidgets-*"
|
||||
PROJECT_CLEANUP[ZLIB]="3rd_party/mingw64/zlib-*"
|
||||
export PROJECT_CLEANUP
|
||||
|
||||
declare -A PROJECT_DOWNLOADS
|
||||
PROJECT_DOWNLOADS[BINUTILS]="https://ftp.gnu.org/gnu/binutils/binutils-${PROJECT_VERSIONS[BINUTILS]}.tar.xz;binutils-${PROJECT_VERSIONS[BINUTILS]}.tar.xz;3rd_party/mingw64"
|
||||
PROJECT_DOWNLOADS[BOOST2]="https://archives.boost.io/release/${PROJECT_VERSIONS[BOOST2_MAJOR]}.${PROJECT_VERSIONS[BOOST2_MINOR]}.${PROJECT_VERSIONS[BOOST2_PATCH]}/source/boost_${PROJECT_VERSIONS[BOOST2_MAJOR]}_${PROJECT_VERSIONS[BOOST2_MINOR]}_${PROJECT_VERSIONS[BOOST2_PATCH]}.tar.gz;boost_${PROJECT_VERSIONS[BOOST2_MAJOR]}_${PROJECT_VERSIONS[BOOST2_MINOR]}_${PROJECT_VERSIONS[BOOST2_PATCH]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[BOOST]="https://archives.boost.io/release/${PROJECT_VERSIONS[BOOST_MAJOR]}.${PROJECT_VERSIONS[BOOST_MINOR]}.${PROJECT_VERSIONS[BOOST_PATCH]}/source/boost_${PROJECT_VERSIONS[BOOST_MAJOR]}_${PROJECT_VERSIONS[BOOST_MINOR]}_${PROJECT_VERSIONS[BOOST_PATCH]}.tar.gz;boost_${PROJECT_VERSIONS[BOOST_MAJOR]}_${PROJECT_VERSIONS[BOOST_MINOR]}_${PROJECT_VERSIONS[BOOST_PATCH]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[CLI11]="https://github.com/CLIUtils/CLI11/archive/refs/tags/v${PROJECT_VERSIONS[CLI11]}.tar.gz;CLI11-${PROJECT_VERSIONS[CLI11]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[CPP_HTTPLIB]="https://github.com/yhirose/cpp-httplib/archive/refs/tags/v${PROJECT_VERSIONS[CPP_HTTPLIB]}.tar.gz;cpp-httplib-${PROJECT_VERSIONS[CPP_HTTPLIB]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[CURL]="https://github.com/curl/curl/archive/refs/tags/curl-${PROJECT_VERSIONS[CURL2]}.tar.gz;curl-${PROJECT_VERSIONS[CURL]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[CXXOPTS]="https://github.com/jarro2783/cxxopts/archive/refs/tags/v${PROJECT_VERSIONS[CXXOPTS]}.tar.gz;cxxopts-v${PROJECT_VERSIONS[CXXOPTS]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[EXPAT]="https://github.com/libexpat/libexpat/archive/refs/tags/R_${PROJECT_VERSIONS[EXPAT2]}.tar.gz;expat-${PROJECT_VERSIONS[EXPAT]}.tar.gz;3rd_party/mingw64"
|
||||
PROJECT_DOWNLOADS[FLAC]="https://github.com/xiph/flac/archive/refs/tags/${PROJECT_VERSIONS[FLAC]}.tar.gz;flac-${PROJECT_VERSIONS[FLAC]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[FMT]="https://github.com/fmtlib/fmt/archive/refs/tags/${PROJECT_VERSIONS[FMT]}.tar.gz;fmt-${PROJECT_VERSIONS[FMT]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[FONTCONFIG]="https://www.freedesktop.org/software/fontconfig/release/fontconfig-${PROJECT_VERSIONS[FONTCONFIG]}.tar.xz;fontconfig-${PROJECT_VERSIONS[FONTCONFIG]}.tar.xz;3rd_party"
|
||||
PROJECT_DOWNLOADS[FREETYPE2]="https://download.savannah.gnu.org/releases/freetype/freetype-${PROJECT_VERSIONS[FREETYPE2]}.tar.gz;freetype-${PROJECT_VERSIONS[FREETYPE2]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[GCC]="https://mirrorservice.org/sites/sourceware.org/pub/gcc/releases/gcc-${PROJECT_VERSIONS[GCC]}/gcc-${PROJECT_VERSIONS[GCC]}.tar.gz;gcc-${PROJECT_VERSIONS[GCC]}.tar.gz;3rd_party/mingw64"
|
||||
PROJECT_DOWNLOADS[GTEST]="https://github.com/google/googletest/archive/refs/tags/v${PROJECT_VERSIONS[GTEST]}.tar.gz;googletest-${PROJECT_VERSIONS[GTEST]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[ICU]="https://github.com/unicode-org/icu/archive/refs/tags/release-${PROJECT_VERSIONS[ICU]}.tar.gz;icu-release-${PROJECT_VERSIONS[ICU]}.tar.gz;3rd_party/mingw64"
|
||||
PROJECT_DOWNLOADS[JSON]="https://github.com/nlohmann/json/archive/refs/tags/v${PROJECT_VERSIONS[JSON]}.tar.gz;json-${PROJECT_VERSIONS[JSON]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[INNOSETUP]="https://files.jrsoftware.org/is/6/innosetup-${PROJECT_VERSIONS[INNOSETUP]}.exe;innosetup-${PROJECT_VERSIONS[INNOSETUP]}.exe;3rd_party/mingw64"
|
||||
PROJECT_DOWNLOADS[WINFSP]="https://github.com/winfsp/winfsp/releases/download/v${PROJECT_VERSIONS[WINFSP2]}/winfsp-${PROJECT_VERSIONS[WINFSP]}.msi;winfsp-${PROJECT_VERSIONS[WINFSP]}.msi;3rd_party"
|
||||
PROJECT_DOWNLOADS[LIBDSM]="https://github.com/videolabs/libdsm/archive/refs/tags/v${PROJECT_VERSIONS[LIBDSM]}.tar.gz;libdsm-${PROJECT_VERSIONS[LIBDSM]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[LIBEVENT]="https://github.com/libevent/libevent/archive/refs/tags/release-${PROJECT_VERSIONS[LIBEVENT]}-stable.tar.gz;libevent-${PROJECT_VERSIONS[LIBEVENT]}-stable.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[LIBICONV]="https://ftp.gnu.org/pub/gnu/libiconv/libiconv-${PROJECT_VERSIONS[LIBICONV]}.tar.gz;libiconv-${PROJECT_VERSIONS[LIBICONV]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[LIBJPEG_TURBO]="https://github.com/libjpeg-turbo/libjpeg-turbo/archive/refs/tags/${PROJECT_VERSIONS[LIBJPEG_TURBO]}.tar.gz;libjpeg_turbo-${PROJECT_VERSIONS[LIBJPEG_TURBO]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[LIBPNG]="https://github.com/pnggroup/libpng/archive/refs/tags/v${PROJECT_VERSIONS[LIBPNG]}.tar.gz;libpng-v${PROJECT_VERSIONS[LIBPNG]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[LIBSODIUM]="https://github.com/jedisct1/libsodium/archive/refs/tags/${PROJECT_VERSIONS[LIBSODIUM]}-RELEASE.tar.gz;libsodium-${PROJECT_VERSIONS[LIBSODIUM]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[LIBTASN]="https://ftp.gnu.org/gnu/libtasn1/libtasn1-${PROJECT_VERSIONS[LIBTASN]}.tar.gz;libtasn1-${PROJECT_VERSIONS[LIBTASN]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[MINGW]="https://sourceforge.net/projects/mingw-w64/files/mingw-w64/mingw-w64-release/mingw-w64-v${PROJECT_VERSIONS[MINGW]}.tar.bz2;;mingw-w64-v${PROJECT_VERSIONS[MINGW]}.tar.bz2;3rd_party/mingw64"
|
||||
PROJECT_DOWNLOADS[NANA]="https://github.com/cnjinhao/nana/archive/refs/tags/v${PROJECT_VERSIONS[NANA]}.tar.gz;nana-v${PROJECT_VERSIONS[NANA]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[NUSPELL]="https://github.com/nuspell/nuspell/archive/refs/tags/v${PROJECT_VERSIONS[NUSPELL]}.tar.gz;nuspell-v${PROJECT_VERSIONS[NUSPELL]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[OGG]="https://github.com/xiph/ogg/releases/download/v${PROJECT_VERSIONS[OGG]}/libogg-${PROJECT_VERSIONS[OGG]}.tar.gz;ogg-v${PROJECT_VERSIONS[OGG]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[OPENAL]="https://github.com/kcat/openal-soft/archive/refs/tags/${PROJECT_VERSIONS[OPENAL]}.tar.gz;openal-${PROJECT_VERSIONS[OPENAL]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[OPENSSL]="https://github.com/openssl/openssl/releases/download/openssl-${PROJECT_VERSIONS[OPENSSL]}/openssl-${PROJECT_VERSIONS[OPENSSL]}.tar.gz;openssl-${PROJECT_VERSIONS[OPENSSL]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[PKG_CONFIG]="https://pkgconfig.freedesktop.org/releases/pkg-config-${PROJECT_VERSIONS[PKG_CONFIG]}.tar.gz;pkg-config-${PROJECT_VERSIONS[PKG_CONFIG]}.tar.gz;3rd_party/mingw64"
|
||||
PROJECT_DOWNLOADS[PUGIXML]="https://github.com/zeux/pugixml/releases/download/v${PROJECT_VERSIONS[PUGIXML]}/pugixml-${PROJECT_VERSIONS[PUGIXML]}.tar.gz;pugixml-${PROJECT_VERSIONS[PUGIXML]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[ROCKSDB]="https://github.com/facebook/rocksdb/archive/refs/tags/v${PROJECT_VERSIONS[ROCKSDB]}.tar.gz;rocksdb-${PROJECT_VERSIONS[ROCKSDB]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[SDL]="https://github.com/libsdl-org/SDL/archive/refs/tags/release-${PROJECT_VERSIONS[SDL]}.tar.gz;sdl-${PROJECT_VERSIONS[SDL]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[SECP256K1]="https://github.com/libbitcoin/secp256k1/archive/refs/tags/v${PROJECT_VERSIONS[SECP256K1]}.tar.gz;secp256k1-${PROJECT_VERSIONS[SECP256K1]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[SFML]="https://github.com/SFML/SFML/archive/refs/tags/${PROJECT_VERSIONS[SFML]}.tar.gz;SFML-${PROJECT_VERSIONS[SFML]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[SPDLOG]="https://github.com/gabime/spdlog/archive/refs/tags/v${PROJECT_VERSIONS[SPDLOG]}.tar.gz;spdlog-${PROJECT_VERSIONS[SPDLOG]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[SQLITE]="https://www.sqlite.org/2025/sqlite-amalgamation-${PROJECT_VERSIONS[SQLITE]}.zip;sqlite-amalgamation-${PROJECT_VERSIONS[SQLITE]}.zip;3rd_party"
|
||||
PROJECT_DOWNLOADS[STDUUID]="https://github.com/mariusbancila/stduuid/archive/refs/tags/v${PROJECT_VERSIONS[STDUUID]}.tar.gz;stduuid-${PROJECT_VERSIONS[STDUUID]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[VORBIS]="https://github.com/xiph/vorbis/archive/refs/tags/v${PROJECT_VERSIONS[VORBIS]}.tar.gz;vorbis-v${PROJECT_VERSIONS[VORBIS]}.tar.gz;3rd_party"
|
||||
PROJECT_DOWNLOADS[WXWIDGETS]="https://github.com/wxWidgets/wxWidgets/releases/download/v${PROJECT_VERSIONS[WXWIDGETS]}/wxWidgets-${PROJECT_VERSIONS[WXWIDGETS]}.tar.bz2;wxWidgets-${PROJECT_VERSIONS[WXWIDGETS]}.tar.bz2;3rd_party"
|
||||
PROJECT_DOWNLOADS[ZLIB]="https://github.com/madler/zlib/archive/refs/tags/v${PROJECT_VERSIONS[ZLIB]}.tar.gz;zlib-${PROJECT_VERSIONS[ZLIB]}.tar.gz;3rd_party/mingw64"
|
||||
export PROJECT_DOWNLOADS
|
||||
121
src/scripts/make_common.sh
Normal file
121
src/scripts/make_common.sh
Normal file
@@ -0,0 +1,121 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
PROJECT_SCRIPTS_DIR=$(realpath "$0")
|
||||
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
|
||||
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5"
|
||||
|
||||
mkdir -p "${PROJECT_BUILD_DIR}/build"
|
||||
|
||||
if [ -d "${PROJECT_DIST_DIR}" ]; then
|
||||
rm -rf "${PROJECT_DIST_DIR}"
|
||||
mkdir -p "${PROJECT_DIST_DIR}"
|
||||
fi
|
||||
|
||||
if [ -f "${PROJECT_SOURCE_DIR}/pre_build.sh" ]; then
|
||||
"${PROJECT_SOURCE_DIR}/pre_build.sh"
|
||||
fi
|
||||
|
||||
ln -sf "${PROJECT_BUILD_DIR}/build/compile_commands.json" "${PROJECT_SOURCE_DIR}/compile_commands.json"
|
||||
|
||||
pushd "${PROJECT_BUILD_DIR}"
|
||||
export CMAKE_BUILD_PARALLEL_LEVEL=${NUM_JOBS}
|
||||
|
||||
cmake "${PROJECT_SOURCE_DIR}" \
|
||||
-G"Unix Makefiles" \
|
||||
-DPROJECT_COMPANY_NAME="${PROJECT_COMPANY_NAME}" \
|
||||
-DPROJECT_COPYRIGHT="${PROJECT_COPYRIGHT}" \
|
||||
-DPROJECT_DESC="${PROJECT_DESC}" \
|
||||
-DPROJECT_INTERFACE=1 \
|
||||
-DPROJECT_URL="${PROJECT_URL}" \
|
||||
${PROJECT_CMAKE_OPTS} || exit 1
|
||||
|
||||
if [ "${PROJECT_BUILD_CLEAN}" == "clean" ]; then
|
||||
make clean
|
||||
pushd build
|
||||
make clean
|
||||
popd
|
||||
fi
|
||||
|
||||
make || exit 1
|
||||
|
||||
pushd build
|
||||
make -j${CMAKE_BUILD_PARALLEL_LEVEL} || exit 1
|
||||
popd
|
||||
popd
|
||||
|
||||
if [ -f "${PROJECT_SOURCE_DIR}/LICENSE.md" ]; then
|
||||
rsync -av --progress "${PROJECT_SOURCE_DIR}/LICENSE.md" "${PROJECT_DIST_DIR}/"
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_BUILD_SHARED_LIBS}" == "ON" ] && [ "${PROJECT_IS_MINGW}" != "1" ]; then
|
||||
rsync -av --progress ${PROJECT_EXTERNAL_BUILD_ROOT}/ "${PROJECT_DIST_DIR}/"
|
||||
pushd "${PROJECT_DIST_DIR}"
|
||||
rm lib64
|
||||
ln -sf lib lib64
|
||||
popd
|
||||
fi
|
||||
|
||||
for APP in ${PROJECT_APP_LIST[@]}; do
|
||||
if [ "${PROJECT_BUILD_SHARED_LIBS}" == "ON" ]; then
|
||||
if [ "${PROJECT_IS_MINGW}" == "1" ]; then
|
||||
rsync -av --progress "${PROJECT_BUILD_DIR}/build/${APP}${PROJECT_APP_BINARY_EXT}" "${PROJECT_DIST_DIR}/"
|
||||
else
|
||||
rm "${PROJECT_DIST_DIR}/${APP}${PROJECT_APP_BINARY_EXT}"
|
||||
if [ "${PROJECT_ENABLE_CURL}" == "ON" ]; then
|
||||
mv "${PROJECT_DIST_DIR}/cacert.pem" "${PROJECT_DIST_DIR}/bin/cacert.pem"
|
||||
fi
|
||||
rsync -av --progress "${PROJECT_BUILD_DIR}/build/${APP}${PROJECT_APP_BINARY_EXT}" "${PROJECT_DIST_DIR}/bin/"
|
||||
if [ "${PROJECT_IS_DARWIN}" == "1" ]; then
|
||||
cat <<EOF >>"${PROJECT_DIST_DIR}/${APP}${PROJECT_APP_BINARY_EXT}"
|
||||
#!/bin/sh
|
||||
PROJECT_SCRIPTS_DIR=\$(realpath "\$0")
|
||||
PROJECT_SCRIPTS_DIR=\$(dirname "\${PROJECT_SCRIPTS_DIR}")
|
||||
|
||||
DYLD_LIBRARY_PATH="\${PROJECT_SCRIPTS_DIR}/lib:\${PROJECT_SCRIPTS_DIR}/lib64:\${DYLD_LIBRARY_PATH}"
|
||||
export DYLD_LIBRARY_PATH
|
||||
|
||||
\${PROJECT_SCRIPTS_DIR}/bin/${APP}${PROJECT_APP_BINARY_EXT} \$*
|
||||
EOF
|
||||
else
|
||||
cat <<EOF >>"${PROJECT_DIST_DIR}/${APP}${PROJECT_APP_BINARY_EXT}"
|
||||
#!/bin/sh
|
||||
PROJECT_SCRIPTS_DIR=\$(realpath "\$0")
|
||||
PROJECT_SCRIPTS_DIR=\$(dirname "\${PROJECT_SCRIPTS_DIR}")
|
||||
|
||||
export LD_LIBRARY_PATH="\${PROJECT_SCRIPTS_DIR}/lib:\${PROJECT_SCRIPTS_DIR}/lib64:\${LD_LIBRARY_PATH}"
|
||||
|
||||
\${PROJECT_SCRIPTS_DIR}/bin/${APP}${PROJECT_APP_BINARY_EXT} \$*
|
||||
EOF
|
||||
fi
|
||||
chmod +x "${PROJECT_DIST_DIR}/${APP}${PROJECT_APP_BINARY_EXT}"
|
||||
fi
|
||||
elif [ ! -d "${PROJECT_BUILD_DIR}/build/${APP}.app" ]; then
|
||||
rsync -av --progress "${PROJECT_BUILD_DIR}/build/${APP}${PROJECT_APP_BINARY_EXT}" "${PROJECT_DIST_DIR}/"
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -d "${PROJECT_BUILD_DIR}/build/${PROJECT_NAME}.app" ]; then
|
||||
rsync -av --progress "${PROJECT_BUILD_DIR}/build/${PROJECT_NAME}.app/" \
|
||||
"${PROJECT_DIST_DIR}/${PROJECT_NAME}.app/"
|
||||
fi
|
||||
|
||||
if [ -f "${PROJECT_SOURCE_DIR}/web/${PROJECT_NAME}/pubspec.yaml" ]; then
|
||||
if [ -d "${PROJECT_DIST_DIR}/${PROJECT_NAME}.app" ]; then
|
||||
rsync -av --progress "${PROJECT_SOURCE_DIR}/web/${PROJECT_NAME}/build/web/" \
|
||||
"${PROJECT_DIST_DIR}/${PROJECT_NAME}.app/Contents/Resources/web/"
|
||||
cp "${PROJECT_DIST_DIR}/cacert.pem" "${PROJECT_DIST_DIR}/${PROJECT_NAME}.app/Contents/MacOS/cacert.pem"
|
||||
else
|
||||
rsync -av --progress "${PROJECT_SOURCE_DIR}/web/${PROJECT_NAME}/build/web/" \
|
||||
"${PROJECT_DIST_DIR}/web/"
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_IS_MINGW}" == "1" ]; then
|
||||
. "${PROJECT_SCRIPTS_DIR}/copy_mingw64_deps.sh" "$1" "$2" "$3" "$4" "$5"
|
||||
fi
|
||||
|
||||
if [ -f "${PROJECT_SOURCE_DIR}/post_build.sh" ]; then
|
||||
"${PROJECT_SOURCE_DIR}/post_build.sh"
|
||||
fi
|
||||
|
||||
. "${PROJECT_SCRIPTS_DIR}/make_package.sh" "$1" "$2" "$3" "$4" "$5"
|
||||
43
src/scripts/make_flutter.sh
Normal file
43
src/scripts/make_flutter.sh
Normal file
@@ -0,0 +1,43 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
PROJECT_SCRIPTS_DIR=$(realpath "$0")
|
||||
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
|
||||
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5"
|
||||
|
||||
if [ -f "${PROJECT_SOURCE_DIR}/web/${PROJECT_NAME}/pubspec.yaml" ]; then
|
||||
if [[ "${PROJECT_IS_DARWIN}" == "0" && ("${PROJECT_IS_MINGW}" == "0" || "${PROJECT_IS_MINGW_UNIX}" == "1") ]]; then
|
||||
FLUTTER_CONTAINER_NAME="${PROJECT_NAME}_flutter"
|
||||
FLUTTER_TAG_NAME="${PROJECT_NAME}:flutter"
|
||||
|
||||
docker stop ${FLUTTER_CONTAINER_NAME}
|
||||
docker rm ${FLUTTER_CONTAINER_NAME}
|
||||
|
||||
docker build "${PROJECT_SOURCE_DIR}/docker/x86_64/" \
|
||||
--build-arg UID=$(id -u) \
|
||||
--build-arg GID=$(id -g) \
|
||||
-t ${FLUTTER_TAG_NAME} \
|
||||
-f "${PROJECT_SOURCE_DIR}/docker/x86_64/flutter" || exit 1
|
||||
|
||||
docker run -td \
|
||||
--name ${FLUTTER_CONTAINER_NAME} \
|
||||
-u $(id -u):$(id -g) \
|
||||
-v ${PROJECT_SOURCE_DIR}:${PROJECT_SOURCE_DIR}:rw,z \
|
||||
-w ${PROJECT_SOURCE_DIR}/web/${PROJECT_NAME} \
|
||||
${FLUTTER_TAG_NAME} || exit 1
|
||||
|
||||
docker exec \
|
||||
${FLUTTER_CONTAINER_NAME} \
|
||||
/bin/bash -c \
|
||||
"flutter clean;flutter build web --base-href=${PROJECT_FLUTTER_BASE_HREF}" || exit 1
|
||||
|
||||
docker stop ${FLUTTER_CONTAINER_NAME}
|
||||
docker rm ${FLUTTER_CONTAINER_NAME}
|
||||
else
|
||||
pushd "${PROJECT_SOURCE_DIR}/web/${PROJECT_NAME}"
|
||||
export MSYS_NO_PATHCONV=1
|
||||
flutter clean
|
||||
flutter build web --base-href=${PROJECT_FLUTTER_BASE_HREF} || exit 1
|
||||
export MSYS_NO_PATHCONV=0
|
||||
popd
|
||||
fi
|
||||
fi
|
||||
11
src/scripts/make_package.cmd
Normal file
11
src/scripts/make_package.cmd
Normal file
@@ -0,0 +1,11 @@
|
||||
@echo off
|
||||
|
||||
setlocal
|
||||
|
||||
set ARG1=%~1
|
||||
set ARG2=%~2
|
||||
set ARG3=%~3
|
||||
|
||||
pushd "%~dp0%"
|
||||
call mingw64 -no-start ./make_package.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0 || exit 1
|
||||
popd
|
||||
153
src/scripts/make_package.sh
Normal file
153
src/scripts/make_package.sh
Normal file
@@ -0,0 +1,153 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
TEMP_DIR=$(mktemp -d)
|
||||
|
||||
PROJECT_SCRIPTS_DIR=$(realpath "$0")
|
||||
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
|
||||
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5"
|
||||
|
||||
function error_exit() {
|
||||
echo $1
|
||||
rm -rf ${TEMP_DIR}
|
||||
exit $2
|
||||
}
|
||||
|
||||
function cleanup_packages() {
|
||||
local SOURCE_FILE=$1
|
||||
|
||||
pushd "${PROJECT_DIST_DIR}"
|
||||
if [ -f "${SOURCE_FILE}" ]; then
|
||||
rm -f "${SOURCE_FILE}" || error_exit "failed to delete file: ${SOURCE_FILE}" 1
|
||||
fi
|
||||
|
||||
if [ -f "${SOURCE_FILE}.sha256" ]; then
|
||||
rm -f "${SOURCE_FILE}.sha256" || error_exit "failed to delete file: ${SOURCE_FILE}.sha256" 1
|
||||
fi
|
||||
|
||||
if [ -f "${SOURCE_FILE}.sig" ]; then
|
||||
rm -f "${SOURCE_FILE}.sig" || error_exit "failed to delete file: ${SOURCE_FILE}.sig" 1
|
||||
fi
|
||||
popd
|
||||
}
|
||||
|
||||
function create_file_validations() {
|
||||
local SOURCE_FILE=$1
|
||||
sha256sum ${SOURCE_FILE} >${SOURCE_FILE}.sha256 || error_exit "failed to create sha256 for file: ${SOURCE_FILE}" 1
|
||||
if [ "${PROJECT_PRIVATE_KEY}" != "" ]; then
|
||||
openssl dgst -sha256 -sign "${PROJECT_PRIVATE_KEY}" -out "${SOURCE_FILE}.sig" "${SOURCE_FILE}" || error_exit "failed to create signature for file: ${SOURCE_FILE}" 1
|
||||
openssl dgst -sha256 -verify "${PROJECT_PUBLIC_KEY}" -signature "${SOURCE_FILE}.sig" "${SOURCE_FILE}" || error_exit "failed to validate signature for file: ${SOURCE_FILE}" 1
|
||||
fi
|
||||
}
|
||||
|
||||
if [ ! -d "${PROJECT_DIST_DIR}" ]; then
|
||||
error_exit "dist directory not found: ${PROJECT_DIST_DIR}" 2
|
||||
fi
|
||||
|
||||
cleanup_packages "${PROJECT_OUT_FILE}"
|
||||
cleanup_packages "${PROJECT_FILE_PART}_setup.exe"
|
||||
cleanup_packages "${PROJECT_FILE_PART}.dmg"
|
||||
|
||||
rsync -av --progress ${PROJECT_DIST_DIR}/ ${TEMP_DIR}/${PROJECT_NAME}/ || error_exit "failed to rsync" 1
|
||||
|
||||
for APP in ${PROJECT_APP_LIST[@]}; do
|
||||
if [ -d "${TEMP_DIR}/${PROJECT_NAME}/${APP}.app" ]; then
|
||||
strip "${TEMP_DIR}/${PROJECT_NAME}/${APP}.app/Contents/MacOS/${APP}${PROJECT_APP_BINARY_EXT}"
|
||||
elif [ "${PROJECT_BUILD_SHARED_LIBS}" == "ON" ] && [ "${PROJECT_IS_MINGW}" != "1" ]; then
|
||||
strip "${TEMP_DIR}/${PROJECT_NAME}/bin/${APP}${PROJECT_APP_BINARY_EXT}"
|
||||
else
|
||||
strip "${TEMP_DIR}/${PROJECT_NAME}/${APP}${PROJECT_APP_BINARY_EXT}"
|
||||
fi
|
||||
done
|
||||
|
||||
pushd "${TEMP_DIR}/${PROJECT_NAME}/"
|
||||
IFS=$'\n'
|
||||
set -f
|
||||
FILE_LIST=$(find . -type f -not -path "*/.app/*")
|
||||
for FILE in ${FILE_LIST}; do
|
||||
create_file_validations "${FILE}"
|
||||
done
|
||||
unset IFS
|
||||
set +f
|
||||
popd
|
||||
|
||||
pushd "${PROJECT_DIST_DIR}"
|
||||
tar cvzf "${PROJECT_OUT_FILE}" -C ${TEMP_DIR} . || error_exit "failed to create archive: ${PROJECT_OUT_FILE}" 1
|
||||
create_file_validations "${PROJECT_OUT_FILE}"
|
||||
popd
|
||||
|
||||
if [ -d "${TEMP_DIR}/${PROJECT_NAME}/${PROJECT_NAME}.app" ]; then
|
||||
APP_SRC="${TEMP_DIR}/${PROJECT_NAME}/${PROJECT_NAME}.app"
|
||||
|
||||
DMG_ROOT="${TEMP_DIR}/dmgroot"
|
||||
mkdir -p "${DMG_ROOT}" || error_exit "failed to create dmgroot" 1
|
||||
|
||||
INSTALLER="${DMG_ROOT}/Install ${PROJECT_NAME}.command"
|
||||
INSTALLER_SRC="${PROJECT_SOURCE_DIR}/${PROJECT_NAME}/Install ${PROJECT_NAME}.command"
|
||||
|
||||
if [ -f "${INSTALLER_SRC}" ]; then
|
||||
HIDDEN_DIR="${DMG_ROOT}/.payload"
|
||||
mkdir -p "${HIDDEN_DIR}" || error_exit "failed to create payload dir" 1
|
||||
APP_DEST_DIR="${HIDDEN_DIR}"
|
||||
else
|
||||
APP_DEST_DIR="${DMG_ROOT}"
|
||||
fi
|
||||
|
||||
rsync -a "${APP_SRC}" "${APP_DEST_DIR}/" || error_exit "failed to stage app bundle" 1
|
||||
|
||||
if [ -f "${INSTALLER_SRC}" ]; then
|
||||
chflags hidden "${HIDDEN_DIR}" "${HIDDEN_DIR}/${PROJECT_NAME}.app" 2>/dev/null || true
|
||||
fi
|
||||
|
||||
ln -s /Applications "${DMG_ROOT}/Applications" 2>/dev/null || true
|
||||
|
||||
if [ -f "${INSTALLER_SRC}" ]; then
|
||||
cp -f "${INSTALLER_SRC}" "${INSTALLER}" || error_exit "failed to copy install command" 1
|
||||
chmod +x "${INSTALLER}" || error_exit "failed to chmod install command" 1
|
||||
|
||||
SAFE_PREFIX="$(printf '%s' "${PROJECT_MACOS_BUNDLE_ID}" | sed -e 's/[\/&]/\\&/g')"
|
||||
/usr/bin/sed -i '' -e "s|^LABEL_PREFIX=.*$|LABEL_PREFIX=\"${SAFE_PREFIX}\"|g" "${INSTALLER}"
|
||||
|
||||
LABEL_ASSIGNED="$(/usr/bin/awk -F= '/^LABEL_PREFIX=/{sub(/^[^=]*=/,""); gsub(/^"|"$/,""); print; exit}' "${INSTALLER}")"
|
||||
if ! /usr/bin/awk -v v="${LABEL_ASSIGNED}" '
|
||||
BEGIN {
|
||||
if (length(v) == 0) exit 1;
|
||||
if (v == "__LABEL_PREFIX__") exit 1;
|
||||
if (v !~ /^[A-Za-z0-9._-]+$/) exit 1;
|
||||
if (v !~ /\./) exit 1;
|
||||
exit 0;
|
||||
}'; then
|
||||
error_exit "DMG build abort: invalid LABEL_PREFIX written to installer (value: \"${LABEL_ASSIGNED}\"). Check PROJECT_MACOS_BUNDLE_ID and sed substitution." 1
|
||||
fi
|
||||
fi
|
||||
|
||||
DMG_OUT="${PROJECT_FILE_PART}.dmg"
|
||||
hdiutil create \
|
||||
-volname "${PROJECT_NAME}" \
|
||||
-fs HFS+ \
|
||||
-srcfolder "${DMG_ROOT}" \
|
||||
-ov -format UDZO \
|
||||
"${PROJECT_DIST_DIR}/${DMG_OUT}" || error_exit "hdiutil failed" 1
|
||||
|
||||
pushd "${PROJECT_DIST_DIR}"
|
||||
create_file_validations "${DMG_OUT}"
|
||||
popd
|
||||
elif [ "${PROJECT_IS_MINGW}" == "1" ] && [ -f "${PROJECT_DIST_DIR}/../${PROJECT_NAME}.iss" ]; then
|
||||
cp -f "${PROJECT_DIST_DIR}/../${PROJECT_NAME}.iss" "${TEMP_DIR}/${PROJECT_NAME}.iss"
|
||||
rsync -av --progress --delete ${PROJECT_SOURCE_DIR}/support/3rd_party/*.msi ${TEMP_DIR}/3rd_party/
|
||||
|
||||
pushd "${TEMP_DIR}"
|
||||
if [ "${PROJECT_IS_MINGW_UNIX}" == "1" ]; then
|
||||
wine64 "c:/Program Files (x86)/Inno Setup 6/iscc.exe" "${PROJECT_NAME}.iss" || exit 1
|
||||
else
|
||||
iscc "${PROJECT_NAME}.iss" || exit 1
|
||||
fi
|
||||
|
||||
pushd "Output"
|
||||
create_file_validations "${PROJECT_FILE_PART}_setup.exe"
|
||||
cp -f * "${PROJECT_DIST_DIR}/"
|
||||
popd
|
||||
|
||||
popd
|
||||
fi
|
||||
|
||||
error_exit "created package ${PROJECT_FILE_PART}" 0
|
||||
22
src/scripts/make_unix.sh
Normal file
22
src/scripts/make_unix.sh
Normal file
@@ -0,0 +1,22 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
PROJECT_SCRIPTS_DIR=$(realpath "$0")
|
||||
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
|
||||
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" 0 0
|
||||
|
||||
if [ -f "${PROJECT_SCRIPTS_DIR}/cleanup.sh" ]; then
|
||||
. "${PROJECT_SCRIPTS_DIR}/cleanup.sh" "$1" "$2" "$3" 0 0
|
||||
rm ${PROJECT_SCRIPTS_DIR}/cleanup.*
|
||||
fi
|
||||
|
||||
"${PROJECT_SOURCE_DIR}/scripts/make_flutter.sh" "${PROJECT_BUILD_ARCH}" "${PROJECT_CMAKE_BUILD_TYPE}" "${PROJECT_BUILD_CLEAN}" 0 0 || exit 1
|
||||
|
||||
if [[ "${PROJECT_IS_DARWIN}" == "0" && ("${PROJECT_REQUIRE_ALPINE}" == "ON" || "${PROJECT_IS_ARM64}" == "1") ]]; then
|
||||
DOCKER_NAME=alpine
|
||||
DOCKER_CONTAINER=${PROJECT_NAME}_${DOCKER_NAME}_${PROJECT_BUILD_ARCH}
|
||||
DOCKER_TAG=${PROJECT_NAME}:${DOCKER_NAME}
|
||||
|
||||
. "${PROJECT_SCRIPTS_DIR}/docker_common.sh" || exit 1
|
||||
else
|
||||
"${PROJECT_SOURCE_DIR}/scripts/make_common.sh" "${PROJECT_BUILD_ARCH}" "${PROJECT_CMAKE_BUILD_TYPE}" "${PROJECT_BUILD_CLEAN}" 0 0 || exit 1
|
||||
fi
|
||||
18
src/scripts/make_win32.cmd
Normal file
18
src/scripts/make_win32.cmd
Normal file
@@ -0,0 +1,18 @@
|
||||
@echo off
|
||||
|
||||
setlocal
|
||||
|
||||
set ARG1=%~1
|
||||
set ARG2=%~2
|
||||
set ARG3=%~3
|
||||
|
||||
pushd "%~dp0%"
|
||||
call setup_msys2.cmd "%ARG1%" "%ARG2%" "%ARG3%"
|
||||
if exist "cleanup.cmd" (
|
||||
call cleanup.cmd "%ARG1%" "%ARG2%" "%ARG3%" 1 0
|
||||
del cleanup.*
|
||||
)
|
||||
|
||||
call mingw64 -no-start ./make_flutter.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0 || exit 1
|
||||
call mingw64 -no-start ./make_common.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0 || exit 1
|
||||
popd
|
||||
16
src/scripts/make_win32.sh
Normal file
16
src/scripts/make_win32.sh
Normal file
@@ -0,0 +1,16 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
PROJECT_SCRIPTS_DIR=$(realpath "$0")
|
||||
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
|
||||
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" 1 1
|
||||
|
||||
if [ -f "${PROJECT_SCRIPTS_DIR}/cleanup.sh" ]; then
|
||||
. "${PROJECT_SCRIPTS_DIR}/cleanup.sh" "$1" "$2" "$3" 1 1
|
||||
rm ${PROJECT_SCRIPTS_DIR}/cleanup.*
|
||||
fi
|
||||
|
||||
DOCKER_NAME=mingw64
|
||||
DOCKER_CONTAINER=${PROJECT_NAME}_${DOCKER_NAME}
|
||||
DOCKER_TAG=${PROJECT_NAME}:${DOCKER_NAME}
|
||||
|
||||
. "${PROJECT_SCRIPTS_DIR}/docker_common.sh" || exit 1
|
||||
18
src/scripts/run_docker_shell.sh
Normal file
18
src/scripts/run_docker_shell.sh
Normal file
@@ -0,0 +1,18 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
DOCKER_NAME=$1
|
||||
|
||||
PROJECT_SCRIPTS_DIR=$(realpath "$0")
|
||||
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
|
||||
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$2" "$3" "$4" "$5" "$6" 1 1>/dev/null 2>&1
|
||||
|
||||
if [ -f "${PROJECT_SCRIPTS_DIR}/cleanup.sh" ]; then
|
||||
. "${PROJECT_SCRIPTS_DIR}/cleanup.sh" "$2" "$3" "$4" "$5" "$6"
|
||||
rm ${PROJECT_SCRIPTS_DIR}/cleanup.*
|
||||
fi
|
||||
|
||||
DOCKER_CONTAINER=${PROJECT_NAME}_${DOCKER_NAME}_${PROJECT_BUILD_ARCH}_shell
|
||||
DOCKER_TAG=${PROJECT_NAME}:${DOCKER_NAME}
|
||||
DOCKER_SHELL=1
|
||||
|
||||
. "${PROJECT_SCRIPTS_DIR}/docker_common.sh" || exit 1
|
||||
12
src/scripts/run_tests.cmd
Normal file
12
src/scripts/run_tests.cmd
Normal file
@@ -0,0 +1,12 @@
|
||||
@echo off
|
||||
|
||||
setlocal
|
||||
|
||||
set ARG1=%~1
|
||||
set ARG2=%~2
|
||||
set ARG3=%~3
|
||||
|
||||
pushd "%~dp0%"
|
||||
call mingw64 -no-start ./run_tests.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0
|
||||
popd
|
||||
|
||||
19
src/scripts/run_tests.sh
Normal file
19
src/scripts/run_tests.sh
Normal file
@@ -0,0 +1,19 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
PROJECT_SCRIPTS_DIR=$(realpath "$0")
|
||||
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
|
||||
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" 0
|
||||
|
||||
pushd "${PROJECT_DIST_DIR}"
|
||||
if [ -e "./${PROJECT_NAME}_test${PROJECT_APP_BINARY_EXT}" ]; then
|
||||
for APP in ${PROJECT_APP_LIST[@]}; do
|
||||
if [[ "$APP" == *_test ]]; then
|
||||
if [ "${PROJECT_IS_MINGW_UNIX}" == "1" ]; then
|
||||
wine64 "${PROJECT_DIST_DIR}/${PROJECT_NAME}_test${PROJECT_APP_BINARY_EXT}" || exit 1
|
||||
else
|
||||
"./${PROJECT_NAME}_test${PROJECT_APP_BINARY_EXT}" || exit 1
|
||||
fi
|
||||
fi
|
||||
done
|
||||
fi
|
||||
popd
|
||||
12
src/scripts/setup_msys2.cmd
Normal file
12
src/scripts/setup_msys2.cmd
Normal file
@@ -0,0 +1,12 @@
|
||||
@echo off
|
||||
|
||||
setlocal
|
||||
|
||||
set ARG1=%~1
|
||||
set ARG2=%~2
|
||||
set ARG3=%~3
|
||||
|
||||
pushd "%~dp0%"
|
||||
call mingw64 -no-start ./setup_msys2.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0
|
||||
call mingw64 -no-start ./setup_msys2.sh "%ARG1%" "%ARG2%" "%ARG3%" 1 0
|
||||
popd
|
||||
187
src/scripts/setup_msys2.sh
Normal file
187
src/scripts/setup_msys2.sh
Normal file
@@ -0,0 +1,187 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
PROJECT_MSYS2_PACKAGE_LIST=()
|
||||
|
||||
PROJECT_SCRIPTS_DIR=$(realpath "$0")
|
||||
PROJECT_SCRIPTS_DIR=$(dirname "${PROJECT_SCRIPTS_DIR}")
|
||||
. "${PROJECT_SCRIPTS_DIR}/env.sh" "$1" "$2" "$3" "$4" "$5" 1 1>/dev/null 2>&1
|
||||
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=(
|
||||
mingw64/mingw-w64-x86_64-autotools
|
||||
mingw64/mingw-w64-x86_64-clang-tools-extra
|
||||
mingw64/mingw-w64-x86_64-cmake
|
||||
mingw64/mingw-w64-x86_64-curl
|
||||
mingw64/mingw-w64-x86_64-diffutils
|
||||
mingw64/mingw-w64-x86_64-gcc
|
||||
mingw64/mingw-w64-x86_64-gdb
|
||||
mingw64/mingw-w64-x86_64-icu
|
||||
mingw64/mingw-w64-x86_64-make
|
||||
mingw64/mingw-w64-x86_64-mesa
|
||||
mingw64/mingw-w64-x86_64-meson
|
||||
mingw64/mingw-w64-x86_64-meson-python
|
||||
mingw64/mingw-w64-x86_64-ninja
|
||||
mingw64/mingw-w64-x86_64-python
|
||||
mingw64/mingw-w64-x86_64-python-mako
|
||||
mingw64/mingw-w64-x86_64-toolchain
|
||||
mingw64/mingw-w64-x86_64-wget
|
||||
mingw64/mingw-w64-x86_64-zlib
|
||||
msys/bison
|
||||
msys/flex
|
||||
msys/git
|
||||
msys/patch
|
||||
msys/rsync
|
||||
make
|
||||
)
|
||||
|
||||
if [ "${PROJECT_ENABLE_BOOST}" == "ON" ]; then
|
||||
if [ "${PROJECT_ENABLE_LIBBITCOIN_SYSTEM}" == "ON" ]; then
|
||||
yes | pacman -Ry mingw64/mingw-w64-x86_64-boost
|
||||
else
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=(
|
||||
mingw64/mingw-w64-x86_64-boost
|
||||
)
|
||||
fi
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_CLI11}" == "ON" ]; then
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=(
|
||||
mingw64/mingw-w64-x86_64-cli11
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_FLAC}" == "ON" ]; then
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=(
|
||||
mingw64/mingw-w64-x86_64-flac
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_FONTCONFIG}" == "ON" ]; then
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=(
|
||||
mingw64/mingw-w64-x86_64-fontconfig
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_FREETYPE2}" == "ON" ]; then
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=(
|
||||
mingw64/mingw-w64-x86_64-freetype
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_LIBDSM}" == "ON" ]; then
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=(
|
||||
mingw64/mingw-w64-x86_64-libdsm
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_LIBEVENT}" == "ON" ]; then
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=(
|
||||
mingw64/mingw-w64-x86_64-libevent
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_LIBICONV}" == "ON" ]; then
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=(
|
||||
mingw64/mingw-w64-x86_64-libiconv
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_LIBJPEG_TURBO}" == "ON" ]; then
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=(
|
||||
mingw64/mingw-w64-x86_64-libjpeg-turbo
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_LIBPNG}" == "ON" ]; then
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=(
|
||||
mingw64/mingw-w64-x86_64-libpng
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_LIBSODIUM}" == "ON" ]; then
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=(
|
||||
mingw64/mingw-w64-x86_64-libsodium
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_LIBTASN}" == "ON" ]; then
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=(
|
||||
mingw64/mingw-w64-x86_64-libtasn1
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_NANA}" == "ON" ]; then
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=(
|
||||
mingw64/mingw-w64-x86_64-nana
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_NUSPELL}" == "ON" ]; then
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=(
|
||||
mingw64/mingw-w64-x86_64-nuspell
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_OGG}" == "ON" ]; then
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=(
|
||||
mingw64/mingw-w64-x86_64-libogg
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_OPENAL}" == "ON" ]; then
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=(
|
||||
mingw64/mingw-w64-x86_64-openal
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_OPENSSL}" == "ON" ]; then
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=(
|
||||
mingw64/mingw-w64-x86_64-openssl
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_PUGIXML}" == "ON" ]; then
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=(
|
||||
mingw64/mingw-w64-x86_64-pugixml
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_SDL}" == "ON" ]; then
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=(
|
||||
mingw64/mingw-w64-x86_64-SDL2
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_SFML}" == "ON" ]; then
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=(
|
||||
mingw64/mingw-w64-x86_64-sfml
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_SQLITE}" == "ON" ]; then
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=(
|
||||
mingw64/mingw-w64-x86_64-sqlite3
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_TESTING}" == "ON" ]; then
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=(
|
||||
mingw64/mingw-w64-x86_64-gtest
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_VORBIS}" == "ON" ]; then
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=(
|
||||
mingw64/mingw-w64-x86_64-libvorbis
|
||||
)
|
||||
fi
|
||||
|
||||
if [ "${PROJECT_ENABLE_WXWIDGETS}" == "ON" ]; then
|
||||
PROJECT_MSYS2_PACKAGE_LIST+=(
|
||||
mingw64/mingw-w64-x86_64-wxwidgets3.2-msw
|
||||
)
|
||||
fi
|
||||
|
||||
pacman -Sqyuu --noconfirm &&
|
||||
pacman -S --noconfirm --needed --disable-download-timeout msys2-keyring &&
|
||||
pacman -S --noconfirm --needed --disable-download-timeout \
|
||||
${PROJECT_MSYS2_PACKAGE_LIST[@]}
|
||||
59
src/scripts/versions.sh
Normal file
59
src/scripts/versions.sh
Normal file
@@ -0,0 +1,59 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
declare -A PROJECT_VERSIONS
|
||||
PROJECT_VERSIONS[BINUTILS]="2.44"
|
||||
PROJECT_VERSIONS[BOOST2_MAJOR]="1"
|
||||
PROJECT_VERSIONS[BOOST2_MINOR]="76"
|
||||
PROJECT_VERSIONS[BOOST2_PATCH]="0"
|
||||
PROJECT_VERSIONS[BOOST_MAJOR]="1"
|
||||
PROJECT_VERSIONS[BOOST_MINOR]="89"
|
||||
PROJECT_VERSIONS[BOOST_PATCH]="0"
|
||||
PROJECT_VERSIONS[CLI11]="2.5.0"
|
||||
PROJECT_VERSIONS[CPP_HTTPLIB]="0.26.0"
|
||||
PROJECT_VERSIONS[CURL]="8.16.0"
|
||||
PROJECT_VERSIONS[CURL2]="8_16_0"
|
||||
PROJECT_VERSIONS[CXXOPTS]="3.3.1"
|
||||
PROJECT_VERSIONS[DTL]="2.01"
|
||||
PROJECT_VERSIONS[EXPAT]="2.7.1"
|
||||
PROJECT_VERSIONS[EXPAT2]="2_7_1"
|
||||
PROJECT_VERSIONS[FLAC]="1.5.0"
|
||||
PROJECT_VERSIONS[FMT]="12.0.0"
|
||||
PROJECT_VERSIONS[FONTCONFIG]="2.16.0"
|
||||
PROJECT_VERSIONS[FREETYPE2]="2.14.1"
|
||||
PROJECT_VERSIONS[GCC]="15.2.0"
|
||||
PROJECT_VERSIONS[GTEST]="1.17.0"
|
||||
PROJECT_VERSIONS[GTKMM]="3.0"
|
||||
PROJECT_VERSIONS[ICU]="76-1"
|
||||
PROJECT_VERSIONS[INNOSETUP]="6.5.4"
|
||||
PROJECT_VERSIONS[JSON]="3.12.0"
|
||||
PROJECT_VERSIONS[LIBBITCOIN_SYSTEM]="3.8.0"
|
||||
PROJECT_VERSIONS[LIBDSM]="0.4.3"
|
||||
PROJECT_VERSIONS[LIBEVENT]="2.1.12"
|
||||
PROJECT_VERSIONS[LIBICONV]="1.18"
|
||||
PROJECT_VERSIONS[LIBJPEG_TURBO]="3.1.2"
|
||||
PROJECT_VERSIONS[LIBPNG]="1.6.50"
|
||||
PROJECT_VERSIONS[LIBSODIUM]="1.0.20"
|
||||
PROJECT_VERSIONS[LIBTASN]="4.19.0"
|
||||
PROJECT_VERSIONS[MINGW]="13.0.0"
|
||||
PROJECT_VERSIONS[NANA]="1.7.4"
|
||||
PROJECT_VERSIONS[NUSPELL]="5.1.6"
|
||||
PROJECT_VERSIONS[OGG]="1.3.6"
|
||||
PROJECT_VERSIONS[OPENAL]="1.24.3"
|
||||
PROJECT_VERSIONS[OPENSSL]="3.6.0"
|
||||
PROJECT_VERSIONS[PKG_CONFIG]="0.29.2"
|
||||
PROJECT_VERSIONS[PUGIXML]="1.15"
|
||||
PROJECT_VERSIONS[ROCKSDB]="10.5.1"
|
||||
PROJECT_VERSIONS[SDL]="2.32.6"
|
||||
PROJECT_VERSIONS[SECP256K1]="0.1.0.20"
|
||||
PROJECT_VERSIONS[SFML]="2.6.2"
|
||||
PROJECT_VERSIONS[SPDLOG]="1.15.3"
|
||||
PROJECT_VERSIONS[SQLITE]="3500400"
|
||||
PROJECT_VERSIONS[SQLITE2]="3.50.4"
|
||||
PROJECT_VERSIONS[STDUUID]="1.2.3"
|
||||
PROJECT_VERSIONS[VLC]="3.0"
|
||||
PROJECT_VERSIONS[VORBIS]="1.3.7"
|
||||
PROJECT_VERSIONS[WINFSP]="2.1.25156"
|
||||
PROJECT_VERSIONS[WINFSP2]="2.1"
|
||||
PROJECT_VERSIONS[WXWIDGETS]="3.3.1"
|
||||
PROJECT_VERSIONS[ZLIB]="1.3.1"
|
||||
export PROJECT_VERSIONS
|
||||
14
src/version.cpp.in
Normal file
14
src/version.cpp.in
Normal file
@@ -0,0 +1,14 @@
|
||||
#include "version.hpp"
|
||||
|
||||
namespace {
|
||||
constexpr std::string_view git_rev = "@PROJECT_GIT_REV@";
|
||||
constexpr std::string_view version =
|
||||
"@PROJECT_MAJOR_VERSION@.@PROJECT_MINOR_VERSION@.@PROJECT_REVISION_VERSION@"
|
||||
"-@PROJECT_RELEASE_ITER@";
|
||||
} // namespace
|
||||
|
||||
namespace %PROJECT_NAME% {
|
||||
auto project_get_git_rev() -> std::string_view { return git_rev; }
|
||||
|
||||
auto project_get_version() -> std::string_view { return version; }
|
||||
} // namespace %PROJECT_NAME%
|
||||
12
src/version.hpp
Normal file
12
src/version.hpp
Normal file
@@ -0,0 +1,12 @@
|
||||
#ifndef LIBFIFTHGRID_INCLUDE_VERSION_HPP_
|
||||
#define LIBFIFTHGRID_INCLUDE_VERSION_HPP_
|
||||
|
||||
#include <string_view>
|
||||
|
||||
namespace fifthgrid {
|
||||
[[nodiscard]] auto project_get_git_rev() -> std::string_view;
|
||||
|
||||
[[nodiscard]] auto project_get_version() -> std::string_view;
|
||||
} // namespace fifthgrid
|
||||
|
||||
#endif // LIBFIFTHGRID_INCLUDE_VERSION_HPP_
|
||||
64
src/version.rc.in
Normal file
64
src/version.rc.in
Normal file
@@ -0,0 +1,64 @@
|
||||
#include <windows.h>
|
||||
#define VER_FILEVERSION @PROJECT_MAJOR_VERSION@,@PROJECT_MINOR_VERSION@,@PROJECT_REVISION_VERSION@,@PROJECT_RELEASE_NUM@
|
||||
#define VER_FILEVERSION_STR "@PROJECT_MAJOR_VERSION@.@PROJECT_MINOR_VERSION@.@PROJECT_REVISION_VERSION@-@PROJECT_RELEASE_ITER@_@PROJECT_GIT_REV@\0"
|
||||
|
||||
#define VER_PRODUCTVERSION @PROJECT_MAJOR_VERSION@,@PROJECT_MINOR_VERSION@,@PROJECT_REVISION_VERSION@,@PROJECT_RELEASE_NUM@
|
||||
#define VER_PRODUCTVERSION_STR "@PROJECT_MAJOR_VERSION@.@PROJECT_MINOR_VERSION@.@PROJECT_REVISION_VERSION@-@PROJECT_RELEASE_ITER@_@PROJECT_GIT_REV@\0"
|
||||
|
||||
#define VER_COMPANYNAME_STR "@PROJECT_COMPANY_NAME@\0"
|
||||
#define VER_INTERNALNAME_STR "@PROJECT_NAME@ @PROJECT_MAJOR_VERSION@.@PROJECT_MINOR_VERSION@.@PROJECT_REVISION_VERSION@-@PROJECT_RELEASE_ITER@_@PROJECT_GIT_REV@\0"
|
||||
#define VER_LEGALCOPYRIGHT_STR "@PROJECT_COPYRIGHT@\0"
|
||||
#define VER_ORIGINALFILENAME_STR "@PROJECT_NAME@.exe\0"
|
||||
#define VER_LEGALTRADEMARKS1_STR "\0"
|
||||
#define VER_LEGALTRADEMARKS2_STR "\0"
|
||||
#define VER_FILEDESCRIPTION_STR "@PROJECT_DESC@\0"
|
||||
#define VER_PRODUCTNAME_STR "@PROJECT_NAME@ @PROJECT_MAJOR_VERSION@.@PROJECT_MINOR_VERSION@.@PROJECT_REVISION_VERSION@-@PROJECT_RELEASE_ITER@_@PROJECT_GIT_REV@\0"
|
||||
|
||||
#ifdef DEBUG
|
||||
#define VER_DEBUG VS_FF_DEBUG
|
||||
#else
|
||||
#define VER_DEBUG 0
|
||||
#endif
|
||||
|
||||
#define VER_PRERELEASE @PROJECT_PRERELEASE@
|
||||
|
||||
|
||||
VS_VERSION_INFO VERSIONINFO
|
||||
FILEVERSION VER_FILEVERSION
|
||||
PRODUCTVERSION VER_PRODUCTVERSION
|
||||
FILEFLAGSMASK (VS_FF_DEBUG|VS_FF_PRERELEASE)
|
||||
FILEFLAGS (VER_DEBUG|VER_PRERELEASE)
|
||||
FILEOS VOS__WINDOWS32
|
||||
FILETYPE VFT_DLL
|
||||
FILESUBTYPE VFT2_UNKNOWN
|
||||
BEGIN
|
||||
BLOCK "StringFileInfo"
|
||||
BEGIN
|
||||
BLOCK "040904E4"
|
||||
BEGIN
|
||||
VALUE "CompanyName", VER_COMPANYNAME_STR
|
||||
VALUE "FileDescription", VER_FILEDESCRIPTION_STR
|
||||
VALUE "FileVersion", VER_FILEVERSION_STR
|
||||
VALUE "InternalName", VER_INTERNALNAME_STR
|
||||
VALUE "LegalCopyright", VER_LEGALCOPYRIGHT_STR
|
||||
VALUE "LegalTrademarks1", VER_LEGALTRADEMARKS1_STR
|
||||
VALUE "LegalTrademarks2", VER_LEGALTRADEMARKS2_STR
|
||||
VALUE "OriginalFilename", VER_ORIGINALFILENAME_STR
|
||||
VALUE "ProductName", VER_PRODUCTNAME_STR
|
||||
VALUE "ProductVersion", VER_PRODUCTVERSION_STR
|
||||
END
|
||||
END
|
||||
|
||||
BLOCK "VarFileInfo"
|
||||
BEGIN
|
||||
/* The following line should only be modified for localized versions. */
|
||||
/* It consists of any number of WORD,WORD pairs, with each pair */
|
||||
/* describing a language,codepage combination supported by the file. */
|
||||
/* */
|
||||
/* For example, a file might have values "0x409,1252" indicating that it */
|
||||
/* supports English language (0x409) in the Windows ANSI codepage (1252). */
|
||||
|
||||
VALUE "Translation", 0x409, 1252
|
||||
|
||||
END
|
||||
END
|
||||
Reference in New Issue
Block a user