initial commit
This commit is contained in:
127
.clang-format
Normal file
127
.clang-format
Normal file
@@ -0,0 +1,127 @@
|
|||||||
|
---
|
||||||
|
Language: Cpp
|
||||||
|
# BasedOnStyle: LLVM
|
||||||
|
AccessModifierOffset: -2
|
||||||
|
AlignAfterOpenBracket: Align
|
||||||
|
AlignConsecutiveMacros: false
|
||||||
|
AlignConsecutiveAssignments: false
|
||||||
|
AlignConsecutiveDeclarations: false
|
||||||
|
AlignEscapedNewlines: Right
|
||||||
|
AlignOperands: true
|
||||||
|
AlignTrailingComments: true
|
||||||
|
AllowAllArgumentsOnNextLine: true
|
||||||
|
AllowAllConstructorInitializersOnNextLine: true
|
||||||
|
AllowAllParametersOfDeclarationOnNextLine: true
|
||||||
|
AllowShortBlocksOnASingleLine: false
|
||||||
|
AllowShortCaseLabelsOnASingleLine: false
|
||||||
|
AllowShortFunctionsOnASingleLine: All
|
||||||
|
AllowShortLambdasOnASingleLine: All
|
||||||
|
AllowShortIfStatementsOnASingleLine: Never
|
||||||
|
AllowShortLoopsOnASingleLine: false
|
||||||
|
AlwaysBreakAfterDefinitionReturnType: None
|
||||||
|
AlwaysBreakAfterReturnType: None
|
||||||
|
AlwaysBreakBeforeMultilineStrings: false
|
||||||
|
AlwaysBreakTemplateDeclarations: MultiLine
|
||||||
|
BinPackArguments: true
|
||||||
|
BinPackParameters: true
|
||||||
|
BraceWrapping:
|
||||||
|
AfterCaseLabel: false
|
||||||
|
AfterClass: false
|
||||||
|
AfterControlStatement: false
|
||||||
|
AfterEnum: false
|
||||||
|
AfterFunction: false
|
||||||
|
AfterNamespace: false
|
||||||
|
AfterObjCDeclaration: false
|
||||||
|
AfterStruct: false
|
||||||
|
AfterUnion: false
|
||||||
|
AfterExternBlock: false
|
||||||
|
BeforeCatch: false
|
||||||
|
BeforeElse: false
|
||||||
|
IndentBraces: false
|
||||||
|
SplitEmptyFunction: true
|
||||||
|
SplitEmptyRecord: true
|
||||||
|
SplitEmptyNamespace: true
|
||||||
|
BreakBeforeBinaryOperators: None
|
||||||
|
BreakBeforeBraces: Attach
|
||||||
|
BreakBeforeInheritanceComma: false
|
||||||
|
BreakInheritanceList: BeforeColon
|
||||||
|
BreakBeforeTernaryOperators: true
|
||||||
|
BreakConstructorInitializersBeforeComma: false
|
||||||
|
BreakConstructorInitializers: BeforeColon
|
||||||
|
BreakAfterJavaFieldAnnotations: false
|
||||||
|
BreakStringLiterals: true
|
||||||
|
ColumnLimit: 80
|
||||||
|
CommentPragmas: '^ IWYU pragma:'
|
||||||
|
CompactNamespaces: false
|
||||||
|
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
||||||
|
ConstructorInitializerIndentWidth: 4
|
||||||
|
ContinuationIndentWidth: 4
|
||||||
|
Cpp11BracedListStyle: true
|
||||||
|
DerivePointerAlignment: false
|
||||||
|
DisableFormat: false
|
||||||
|
ExperimentalAutoDetectBinPacking: false
|
||||||
|
FixNamespaceComments: true
|
||||||
|
ForEachMacros:
|
||||||
|
- foreach
|
||||||
|
- Q_FOREACH
|
||||||
|
- BOOST_FOREACH
|
||||||
|
IncludeBlocks: Preserve
|
||||||
|
IncludeCategories:
|
||||||
|
- Regex: '^"(llvm|llvm-c|clang|clang-c)/'
|
||||||
|
Priority: 2
|
||||||
|
- Regex: '^(<|"(gtest|gmock|isl|json)/)'
|
||||||
|
Priority: 3
|
||||||
|
- Regex: '.*'
|
||||||
|
Priority: 1
|
||||||
|
IncludeIsMainRegex: '(Test)?$'
|
||||||
|
IndentCaseLabels: false
|
||||||
|
IndentPPDirectives: None
|
||||||
|
IndentWidth: 2
|
||||||
|
IndentWrappedFunctionNames: false
|
||||||
|
JavaScriptQuotes: Leave
|
||||||
|
JavaScriptWrapImports: true
|
||||||
|
KeepEmptyLinesAtTheStartOfBlocks: true
|
||||||
|
MacroBlockBegin: ''
|
||||||
|
MacroBlockEnd: ''
|
||||||
|
MaxEmptyLinesToKeep: 1
|
||||||
|
NamespaceIndentation: None
|
||||||
|
ObjCBinPackProtocolList: Auto
|
||||||
|
ObjCBlockIndentWidth: 2
|
||||||
|
ObjCSpaceAfterProperty: false
|
||||||
|
ObjCSpaceBeforeProtocolList: true
|
||||||
|
PenaltyBreakAssignment: 2
|
||||||
|
PenaltyBreakBeforeFirstCallParameter: 19
|
||||||
|
PenaltyBreakComment: 300
|
||||||
|
PenaltyBreakFirstLessLess: 120
|
||||||
|
PenaltyBreakString: 1000
|
||||||
|
PenaltyBreakTemplateDeclaration: 10
|
||||||
|
PenaltyExcessCharacter: 1000000
|
||||||
|
PenaltyReturnTypeOnItsOwnLine: 60
|
||||||
|
PointerAlignment: Right
|
||||||
|
ReflowComments: true
|
||||||
|
SortIncludes: true
|
||||||
|
SortUsingDeclarations: true
|
||||||
|
SpaceAfterCStyleCast: false
|
||||||
|
SpaceAfterLogicalNot: false
|
||||||
|
SpaceAfterTemplateKeyword: true
|
||||||
|
SpaceBeforeAssignmentOperators: true
|
||||||
|
SpaceBeforeCpp11BracedList: false
|
||||||
|
SpaceBeforeCtorInitializerColon: true
|
||||||
|
SpaceBeforeInheritanceColon: true
|
||||||
|
SpaceBeforeParens: ControlStatements
|
||||||
|
SpaceBeforeRangeBasedForLoopColon: true
|
||||||
|
SpaceInEmptyParentheses: false
|
||||||
|
SpacesBeforeTrailingComments: 1
|
||||||
|
SpacesInAngles: false
|
||||||
|
SpacesInContainerLiterals: true
|
||||||
|
SpacesInCStyleCastParentheses: false
|
||||||
|
SpacesInParentheses: false
|
||||||
|
SpacesInSquareBrackets: false
|
||||||
|
Standard: Auto
|
||||||
|
StatementMacros:
|
||||||
|
- Q_UNUSED
|
||||||
|
- QT_REQUIRE_VERSION
|
||||||
|
TabWidth: 8
|
||||||
|
UseTab: Never
|
||||||
|
...
|
||||||
|
|
||||||
30
.clang-tidy
Normal file
30
.clang-tidy
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
---
|
||||||
|
Checks: [
|
||||||
|
'-*',
|
||||||
|
'clang-diagnostic-*',
|
||||||
|
'clang-analyzer-*',
|
||||||
|
'bugprone-*',
|
||||||
|
'concurrency-*',
|
||||||
|
'cppcoreguidelines-*',
|
||||||
|
'modernize-*',
|
||||||
|
'readability-*',
|
||||||
|
'-readability-redundant-access-specifiers',
|
||||||
|
'-readability-function-cognitive-complexity'
|
||||||
|
]
|
||||||
|
ExtraArgs: ['-Wno-unknown-warning-option']
|
||||||
|
FormatStyle: none
|
||||||
|
HeaderFileExtensions: ['', 'h','hh','hpp','hxx']
|
||||||
|
HeaderFilterRegex: ''
|
||||||
|
ImplementationFileExtensions: ['c','cc','cpp','cxx']
|
||||||
|
CheckOptions:
|
||||||
|
- key: MinimumExceptionNameLength
|
||||||
|
value: 1
|
||||||
|
- key: MinimumLoopCounterNameLength
|
||||||
|
value: 3
|
||||||
|
- key: MinimumParameterNameLength
|
||||||
|
value: 3
|
||||||
|
- key: MinimumVariableNameLength
|
||||||
|
value: 3
|
||||||
|
User: 'scott.e.graves@protonmail.com'
|
||||||
|
WarningsAsErrors: ''
|
||||||
|
...
|
||||||
5
.clangd
Normal file
5
.clangd
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"CompileFlags": {
|
||||||
|
"Remove": ["-flarge-source-files", "-fext-numeric-literals"]
|
||||||
|
}
|
||||||
|
}
|
||||||
236
.cspell/words.txt
Normal file
236
.cspell/words.txt
Normal file
@@ -0,0 +1,236 @@
|
|||||||
|
aarch64
|
||||||
|
advapi32
|
||||||
|
armv8
|
||||||
|
autogen
|
||||||
|
backwardcpp_project
|
||||||
|
bcrypt
|
||||||
|
binutils_version
|
||||||
|
bitcoinsystem
|
||||||
|
boost_asio_has_std_string_view
|
||||||
|
bugprone
|
||||||
|
cflags
|
||||||
|
chrono
|
||||||
|
clsctx_inproc_server
|
||||||
|
clsid_shelllink
|
||||||
|
cmake_current_source_dir
|
||||||
|
cmake_host_win32
|
||||||
|
comdlg32
|
||||||
|
cpp_httplib_hash
|
||||||
|
cppcoreguidelines
|
||||||
|
cppdbg
|
||||||
|
cppflags
|
||||||
|
cpphttplib
|
||||||
|
cppvsdbg
|
||||||
|
crypto_aead_xchacha20poly1305_ietf_npubbytes
|
||||||
|
cspan
|
||||||
|
cstdint
|
||||||
|
cxxflags
|
||||||
|
cxxopts_project
|
||||||
|
cxxstd
|
||||||
|
d_largefile64_source
|
||||||
|
d_largefile_source
|
||||||
|
d_ndebug
|
||||||
|
dbackward_has_dwarf
|
||||||
|
dbackward_shared
|
||||||
|
dbghelp
|
||||||
|
dbinaries
|
||||||
|
dboost_root
|
||||||
|
dbuild_shared_libs
|
||||||
|
dc_link_args
|
||||||
|
dcli11_warnings_as_errors
|
||||||
|
dcmake_cxx_flags
|
||||||
|
dcpp_args
|
||||||
|
dcpphttplib_openssl_support
|
||||||
|
dcpphttplib_tcp_nodelay
|
||||||
|
dcurl_ca_bundle
|
||||||
|
dcurl_ca_fallback
|
||||||
|
dcurl_disable_ldap
|
||||||
|
dcurl_staticlib
|
||||||
|
dcurl_use_libpsl
|
||||||
|
dcurl_use_libssh2
|
||||||
|
dcurl_zlib
|
||||||
|
dcxxopts_build_examples
|
||||||
|
dcxxopts_build_tests
|
||||||
|
dcxxopts_enable_install
|
||||||
|
dcxxopts_enable_warnings
|
||||||
|
dcxxopts_use_unicode_help
|
||||||
|
ddebug
|
||||||
|
ddefault_library
|
||||||
|
decmult_gen_prec_bits
|
||||||
|
decmult_window_size
|
||||||
|
default_handler_is_spdlog
|
||||||
|
defl_ctx
|
||||||
|
degl
|
||||||
|
denable_threaded_resolver
|
||||||
|
deps
|
||||||
|
devent__disable_openssl
|
||||||
|
devent__disable_tests
|
||||||
|
devent__library_type
|
||||||
|
dfail_on_warnings
|
||||||
|
dfmt_test
|
||||||
|
dfuse_use_version
|
||||||
|
dgles1
|
||||||
|
dgles2
|
||||||
|
dhas_setxattr
|
||||||
|
dhttplib_require_brotli
|
||||||
|
dhttplib_require_openssl
|
||||||
|
dhttplib_require_zlib
|
||||||
|
dinstall_manpages
|
||||||
|
djson_buildtests
|
||||||
|
dnana_cmake_enable_audio
|
||||||
|
dnana_cmake_enable_jpeg
|
||||||
|
dnana_cmake_enable_png
|
||||||
|
dnana_cmake_install
|
||||||
|
dndebug
|
||||||
|
dopengl
|
||||||
|
dopenssl_root_dir
|
||||||
|
dopenssl_use_static_libs
|
||||||
|
dpng_shared
|
||||||
|
dpng_static
|
||||||
|
dpng_tests
|
||||||
|
dpng_tools
|
||||||
|
dportable
|
||||||
|
dproject_enable_backward_cpp
|
||||||
|
dproject_static_link
|
||||||
|
drocksdb_install_on_windows
|
||||||
|
dshared
|
||||||
|
dspdlog_fmt_external
|
||||||
|
dthreads_prefer_pthread_flag
|
||||||
|
duse_libidn2
|
||||||
|
duuid_build_tests
|
||||||
|
dwith_benchmark
|
||||||
|
dwith_gflags
|
||||||
|
dwith_iostats_context
|
||||||
|
dwxuse_opengl
|
||||||
|
dzlib_use_static_libs
|
||||||
|
ecdh
|
||||||
|
endforeach
|
||||||
|
endfunction
|
||||||
|
eventlib
|
||||||
|
expect_streq
|
||||||
|
fext
|
||||||
|
fifthgrid
|
||||||
|
flac_version
|
||||||
|
flarge
|
||||||
|
fontconfig_version
|
||||||
|
freetype2_version
|
||||||
|
glapi
|
||||||
|
gmock
|
||||||
|
googletest
|
||||||
|
gpath
|
||||||
|
gtest_version
|
||||||
|
has_setxattr
|
||||||
|
hresult
|
||||||
|
httpapi
|
||||||
|
httplib
|
||||||
|
icns
|
||||||
|
icudata
|
||||||
|
icui18n
|
||||||
|
icuuc
|
||||||
|
iostreams
|
||||||
|
iphlpapi
|
||||||
|
istream_reader
|
||||||
|
libbitcoin
|
||||||
|
libbitcoinsystem
|
||||||
|
libcurl
|
||||||
|
libevent
|
||||||
|
libexample
|
||||||
|
libfuse3
|
||||||
|
libgmock
|
||||||
|
libgtest
|
||||||
|
libiconv_version
|
||||||
|
libjpeg
|
||||||
|
libpcre2_version
|
||||||
|
libpng_project
|
||||||
|
librocksdb
|
||||||
|
libsecp256k1
|
||||||
|
libsfml
|
||||||
|
libsodium_type
|
||||||
|
libspdlog
|
||||||
|
libuuid
|
||||||
|
libuuid_include_dirs
|
||||||
|
libvlc_include_dirs
|
||||||
|
libvlc_libraries
|
||||||
|
libvlccore
|
||||||
|
libvorbis
|
||||||
|
linkflags
|
||||||
|
mbig
|
||||||
|
msvc
|
||||||
|
msvcr120
|
||||||
|
msvcr90
|
||||||
|
mswsock
|
||||||
|
mtune
|
||||||
|
mwindows
|
||||||
|
nana
|
||||||
|
ncrypt
|
||||||
|
nlohmann_json
|
||||||
|
nmakeprg
|
||||||
|
nominmax
|
||||||
|
nuspell_version
|
||||||
|
oleaut32
|
||||||
|
openal_version
|
||||||
|
openssldir
|
||||||
|
ostream_writer
|
||||||
|
pkgconfig
|
||||||
|
project_enable_cxxopts
|
||||||
|
project_enable_fontconfig
|
||||||
|
project_enable_gtkmm
|
||||||
|
project_enable_libdsm
|
||||||
|
project_enable_libiconv
|
||||||
|
project_enable_libtasn1
|
||||||
|
project_enable_winfsp
|
||||||
|
propgrid
|
||||||
|
pugi
|
||||||
|
pugixml_project
|
||||||
|
pwhash
|
||||||
|
richtext
|
||||||
|
rocksdb_library
|
||||||
|
rpcrt4
|
||||||
|
sdl2_no_mwindows
|
||||||
|
secp256k1
|
||||||
|
secur32
|
||||||
|
sfml_project
|
||||||
|
shlwapi
|
||||||
|
smb_stat_wtime
|
||||||
|
source_subdir
|
||||||
|
spdlog
|
||||||
|
spdlog_project
|
||||||
|
st_ctim
|
||||||
|
static-libgcc
|
||||||
|
static-libstdc++
|
||||||
|
stduuid_project
|
||||||
|
stod
|
||||||
|
streq
|
||||||
|
strequal
|
||||||
|
tolower
|
||||||
|
uring
|
||||||
|
userenv
|
||||||
|
vorbis_version
|
||||||
|
wall
|
||||||
|
wcast-align
|
||||||
|
wconversion
|
||||||
|
wdouble-promotion
|
||||||
|
wduplicated-branches
|
||||||
|
wduplicated-cond
|
||||||
|
wextra
|
||||||
|
wformat=2
|
||||||
|
win32_find_dataa
|
||||||
|
winfsp
|
||||||
|
winhttp
|
||||||
|
wininet
|
||||||
|
winspool
|
||||||
|
wlogical-op
|
||||||
|
wmisleading-indentation
|
||||||
|
wno-useless-cast
|
||||||
|
wnon-virtual-dtor
|
||||||
|
wnull-dereference
|
||||||
|
wold-style-cast
|
||||||
|
woverloaded-virtual
|
||||||
|
wpedantic
|
||||||
|
wserialization
|
||||||
|
wshadow
|
||||||
|
wsign-conversion
|
||||||
|
wunused
|
||||||
|
wxwidgets_version
|
||||||
|
xattr
|
||||||
|
xcursor
|
||||||
13
.gitignore
vendored
Normal file
13
.gitignore
vendored
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
.cache/
|
||||||
|
.vs/
|
||||||
|
build*/
|
||||||
|
compile_commands.json
|
||||||
|
cspell.json
|
||||||
|
deps/
|
||||||
|
dist/
|
||||||
|
override.sh
|
||||||
|
scripts/cleanup.cmd
|
||||||
|
scripts/cleanup.sh
|
||||||
|
support/Dockerfile
|
||||||
|
version.cpp
|
||||||
|
version.rc
|
||||||
181
.jenkins_builds
Normal file
181
.jenkins_builds
Normal file
@@ -0,0 +1,181 @@
|
|||||||
|
#!groovy
|
||||||
|
|
||||||
|
pipeline {
|
||||||
|
agent none
|
||||||
|
|
||||||
|
environment {
|
||||||
|
PROJECT_TEST_CONFIG_DIR = "/.ci/cpp_build_system/test"
|
||||||
|
}
|
||||||
|
|
||||||
|
options {
|
||||||
|
disableConcurrentBuilds()
|
||||||
|
skipDefaultCheckout()
|
||||||
|
timestamps()
|
||||||
|
}
|
||||||
|
|
||||||
|
stages {
|
||||||
|
stage('Windows') {
|
||||||
|
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('win32_shared') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh shared' } } }
|
||||||
|
}
|
||||||
|
stage('win32_shared_crypto') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh shared 1' } } }
|
||||||
|
}
|
||||||
|
stage('win32_shared_crypto_no_boost') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh shared 7' } } }
|
||||||
|
}
|
||||||
|
stage('win32_shared_dsm') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh shared 2' } } }
|
||||||
|
}
|
||||||
|
stage('win32_shared_sqlite') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh shared 3' } } }
|
||||||
|
}
|
||||||
|
stage('win32_shared_errors_v1') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh shared 4' } } }
|
||||||
|
}
|
||||||
|
stage('win32_shared_fmt') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh shared 5' } } }
|
||||||
|
}
|
||||||
|
stage('win32_shared_libevent') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh shared 6' } } }
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('win32_static') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh static' } } }
|
||||||
|
}
|
||||||
|
stage('win32_static_crypto') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh static 1' } } }
|
||||||
|
}
|
||||||
|
stage('win32_static_crypto_no_boost') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh static 7' } } }
|
||||||
|
}
|
||||||
|
stage('win32_static_dsm') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh static 2' } } }
|
||||||
|
}
|
||||||
|
stage('win32_static_sqlite') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh static 3' } } }
|
||||||
|
}
|
||||||
|
stage('win32_static_errors_v1') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh static 4' } } }
|
||||||
|
}
|
||||||
|
stage('win32_static_fmt') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh static 5' } } }
|
||||||
|
}
|
||||||
|
stage('win32_static_libevent') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_win32.sh static 6' } } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('Linux') {
|
||||||
|
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_shared') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared' } } }
|
||||||
|
}
|
||||||
|
stage('linux_shared_crypto') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 1' } } }
|
||||||
|
}
|
||||||
|
stage('linux_shared_crypto_no_boost') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 7' } } }
|
||||||
|
}
|
||||||
|
stage('linux_shared_dsm') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 2' } } }
|
||||||
|
}
|
||||||
|
stage('linux_shared_sqlite') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 3' } } }
|
||||||
|
}
|
||||||
|
stage('linux_shared_errors_v1') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 4' } } }
|
||||||
|
}
|
||||||
|
stage('linux_shared_fmt') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 5' } } }
|
||||||
|
}
|
||||||
|
stage('linux_shared_libevent') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 6' } } }
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('linux_static') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static' } } }
|
||||||
|
}
|
||||||
|
stage('linux_static_crypto') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 1' } } }
|
||||||
|
}
|
||||||
|
stage('linux_static_crypto_no_boost') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 7' } } }
|
||||||
|
}
|
||||||
|
stage('linux_static_dsm') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 2' } } }
|
||||||
|
}
|
||||||
|
stage('linux_static_sqlite') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 3' } } }
|
||||||
|
}
|
||||||
|
stage('linux_static_errors_v1') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 4' } } }
|
||||||
|
}
|
||||||
|
stage('linux_static_fmt') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 5' } } }
|
||||||
|
}
|
||||||
|
stage('linux_static_libevent') {
|
||||||
|
steps { script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 6' } } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
243
.jenkins_macos
Normal file
243
.jenkins_macos
Normal file
@@ -0,0 +1,243 @@
|
|||||||
|
#!groovy
|
||||||
|
pipeline {
|
||||||
|
agent none
|
||||||
|
|
||||||
|
environment {
|
||||||
|
PROJECT_TEST_CONFIG_DIR = "${env.HOME}/.ci/cpp_build_system/test"
|
||||||
|
}
|
||||||
|
|
||||||
|
options {
|
||||||
|
disableConcurrentBuilds()
|
||||||
|
skipDefaultCheckout()
|
||||||
|
timestamps()
|
||||||
|
}
|
||||||
|
|
||||||
|
stages {
|
||||||
|
stage('macOS arm64') {
|
||||||
|
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('macos_aarch64_shared') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_aarch64_shared_crypto') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 1' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_aarch64_shared_crypto_no_boost') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 7' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_aarch64_shared_dsm') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 2' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_aarch64_shared_sqlite') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 3' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_aarch64_shared_errors_v1') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 4' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_aarch64_shared_fmt') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 5' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_aarch64_shared_libevent') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 6' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_aarch64_static') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_aarch64_static_crypto') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 1' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_aarch64_static_crypto_no_boost') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 7' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_aarch64_static_dsm') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 2' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_aarch64_static_sqlite') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 3' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_aarch64_static_errors_v1') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 4' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_aarch64_static_fmt') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 5' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_aarch64_static_libevent') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 6' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
stage('macOS x86_64') {
|
||||||
|
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('macos_x86_64_shared') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared "" x86_64' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_x86_64_shared_crypto') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 1 x86_64' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_x86_64_shared_crypto_no_boost') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 7 x86_64' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_x86_64_shared_dsm') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 2 x86_64' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_x86_64_shared_sqlite') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 3 x86_64' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_x86_64_shared_errors_v1') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 4 x86_64' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_x86_64_shared_fmt') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 5 x86_64' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_x86_64_shared_libevent') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh shared 6 x86_64' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_x86_64_static') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static "" x86_64' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_x86_64_static_crypto') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 1 x86_64' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_x86_64_static_crypto_no_boost') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 7 x86_64' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_x86_64_static_dsm') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 2 x86_64' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_x86_64_static_sqlite') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 3 x86_64' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_x86_64_static_errors_v1') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 4 x86_64' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_x86_64_static_fmt') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 5 x86_64' } }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('macos_x86_64_static_libevent') {
|
||||||
|
steps {
|
||||||
|
script { retryWithBackoff(2, 5) { sh 'scripts/test_unix.sh static 6 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'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
9
LICENSE
Normal file
9
LICENSE
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2024 sgraves
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
33
all_update.sh
Normal file
33
all_update.sh
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
CURRENT_DIR=$(realpath "$0")
|
||||||
|
CURRENT_DIR=$(dirname "${CURRENT_DIR}")
|
||||||
|
|
||||||
|
function do_update() {
|
||||||
|
pushd "../$1"
|
||||||
|
git pull
|
||||||
|
popd
|
||||||
|
|
||||||
|
./update_project.sh $1 ..
|
||||||
|
|
||||||
|
pushd "../$1"
|
||||||
|
scripts/cleanup.sh
|
||||||
|
git add .
|
||||||
|
git commit -a -m 'updated build system'
|
||||||
|
git push
|
||||||
|
popd
|
||||||
|
}
|
||||||
|
|
||||||
|
pushd "${CURRENT_DIR}"
|
||||||
|
git add .
|
||||||
|
git commit -a -m "updates"
|
||||||
|
git push
|
||||||
|
|
||||||
|
do_update dxmedia3
|
||||||
|
do_update fifthgrid
|
||||||
|
do_update gamepadx
|
||||||
|
do_update joule
|
||||||
|
do_update med
|
||||||
|
do_update repertory
|
||||||
|
do_update monitarr
|
||||||
|
popd
|
||||||
16
cmake/arch.cmake
Normal file
16
cmake/arch.cmake
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
if("${CMAKE_SIZEOF_VOID_P}" EQUAL "4")
|
||||||
|
message(FATAL_ERROR "32-bit compilation is not supported")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(CMAKE_SYSTEM_PROCESSOR MATCHES "^(aarch64.*|AARCH64.*|arm64.*|ARM64.*)")
|
||||||
|
set(IS_ARM_SYSTEM 1)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(PROJECT_IS_ARM64 AND NOT IS_ARM_SYSTEM AND NOT PROJECT_REQUIRE_ALPINE)
|
||||||
|
message(FATAL_ERROR "aarch64 cross-compile is not supported")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
string(REPLACE "_" "-" PROJECT_MARCH ${PROJECT_BUILD_ARCH})
|
||||||
|
if("${PROJECT_BUILD_ARCH}" STREQUAL "aarch64")
|
||||||
|
set(PROJECT_MARCH armv8-a)
|
||||||
|
endif()
|
||||||
123
cmake/flags.cmake
Normal file
123
cmake/flags.cmake
Normal file
@@ -0,0 +1,123 @@
|
|||||||
|
list(APPEND PROJECT_COMMON_FLAG_LIST
|
||||||
|
-D_FILE_OFFSET_BITS=64
|
||||||
|
-D_GNU_SOURCE
|
||||||
|
-D_LARGEFILE64_SOURCE
|
||||||
|
-D_LARGEFILE_SOURCE
|
||||||
|
-D_TIME_BITS=64
|
||||||
|
-march=${PROJECT_MARCH}
|
||||||
|
-mtune=generic
|
||||||
|
)
|
||||||
|
|
||||||
|
if(PROJECT_IS_MINGW)
|
||||||
|
list(APPEND PROJECT_COMMON_FLAG_LIST
|
||||||
|
${PROJECT_COMMON_FLAG_LIST}
|
||||||
|
-Wa,-mbig-obj
|
||||||
|
-flarge-source-files
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEBUG_FLAG_LIST
|
||||||
|
-DDEBUG
|
||||||
|
-D_DEBUG
|
||||||
|
-Og
|
||||||
|
-fno-omit-frame-pointer
|
||||||
|
-g
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_RELEASE_FLAG_LIST
|
||||||
|
-DNDEBUG
|
||||||
|
-D_NDEBUG
|
||||||
|
-O3
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_CXXFLAGS_LIST
|
||||||
|
-Wall
|
||||||
|
-Wcast-align
|
||||||
|
-Wconversion
|
||||||
|
-Wdouble-promotion
|
||||||
|
-Wextra
|
||||||
|
-Wformat=2
|
||||||
|
-Wmisleading-indentation
|
||||||
|
-Wnon-virtual-dtor
|
||||||
|
-Wnull-dereference
|
||||||
|
-Wold-style-cast
|
||||||
|
-Woverloaded-virtual
|
||||||
|
-Wpedantic
|
||||||
|
-Wshadow
|
||||||
|
-Wsign-conversion
|
||||||
|
-Wunused
|
||||||
|
)
|
||||||
|
|
||||||
|
if (NOT PROJECT_IS_DARWIN)
|
||||||
|
list(APPEND PROJECT_CXXFLAGS_LIST
|
||||||
|
-Wduplicated-branches
|
||||||
|
-Wduplicated-cond
|
||||||
|
-Wlogical-op
|
||||||
|
-Wno-useless-cast
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
list(APPEND PROJECT_CFLAGS_LIST
|
||||||
|
${PROJECT_COMMON_FLAG_LIST}
|
||||||
|
-std=c${CMAKE_C_STANDARD}
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_CXXFLAGS_LIST
|
||||||
|
${PROJECT_COMMON_FLAG_LIST}
|
||||||
|
-std=gnu++${CMAKE_CXX_STANDARD}
|
||||||
|
)
|
||||||
|
|
||||||
|
if(NOT PROJECT_IS_DARWIN AND PROJECT_STATIC_LINK)
|
||||||
|
list(APPEND PROJECT_CMAKE_EXE_LINKER_FLAGS
|
||||||
|
-static-libgcc
|
||||||
|
-static-libstdc++
|
||||||
|
-static
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
list(JOIN PROJECT_COMMON_FLAG_LIST " " PROJECT_COMMON_FLAG_LIST)
|
||||||
|
list(JOIN PROJECT_DEBUG_FLAG_LIST " " PROJECT_DEBUG_FLAG_LIST)
|
||||||
|
list(JOIN PROJECT_RELEASE_FLAG_LIST " " PROJECT_RELEASE_FLAG_LIST)
|
||||||
|
|
||||||
|
list(JOIN PROJECT_CFLAGS_LIST " " PROJECT_CFLAGS_LIST)
|
||||||
|
list(JOIN PROJECT_CXXFLAGS_LIST " " PROJECT_CXXFLAGS_LIST)
|
||||||
|
|
||||||
|
list(JOIN PROJECT_CMAKE_EXE_LINKER_FLAGS " " PROJECT_CMAKE_EXE_LINKER_FLAGS)
|
||||||
|
|
||||||
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${PROJECT_CFLAGS_LIST}")
|
||||||
|
set(CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} ${PROJECT_DEBUG_FLAG_LIST}")
|
||||||
|
set(CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE} ${PROJECT_RELEASE_FLAG_LIST}")
|
||||||
|
|
||||||
|
set(CMAKE_CXX_FLAGS "-include cstdint -include utility ${CMAKE_CXX_FLAGS} ${PROJECT_CXXFLAGS_LIST}")
|
||||||
|
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} ${PROJECT_DEBUG_FLAG_LIST}")
|
||||||
|
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} ${PROJECT_RELEASE_FLAG_LIST}")
|
||||||
|
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS "${PROJECT_CMAKE_EXE_LINKER_FLAGS}")
|
||||||
|
|
||||||
|
set(EXTERNAL_CMAKE_CXX_FLAGS "-include cstdint -include utility ${PROJECT_COMMON_FLAG_LIST}")
|
||||||
|
if (NOT PROJECT_IS_DARWIN)
|
||||||
|
set(EXTERNAL_CMAKE_CXX_FLAGS "-fext-numeric-literals ${EXTERNAL_CMAKE_CXX_FLAGS}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
list(APPEND PROJECT_EXTERNAL_CMAKE_FLAGS
|
||||||
|
-DCMAKE_BUILD_TYPE=${PROJECT_CMAKE_BUILD_TYPE}
|
||||||
|
-DCMAKE_COLOR_MAKEFILE=${CMAKE_COLOR_MAKEFILE}
|
||||||
|
-DCMAKE_CXX_FLAGS=${EXTERNAL_CMAKE_CXX_FLAGS}
|
||||||
|
-DCMAKE_CXX_STANDARD=${CMAKE_CXX_STANDARD}
|
||||||
|
-DCMAKE_C_FLAGS=${PROJECT_COMMON_FLAG_LIST}
|
||||||
|
-DCMAKE_C_STANDARD=${CMAKE_C_STANDARD}
|
||||||
|
-DCMAKE_GENERATOR=${CMAKE_GENERATOR}
|
||||||
|
-DCMAKE_INSTALL_PREFIX=${PROJECT_EXTERNAL_BUILD_ROOT}
|
||||||
|
-DCMAKE_POSITION_INDEPENDENT_CODE=${CMAKE_POSITION_INDEPENDENT_CODE}
|
||||||
|
)
|
||||||
|
|
||||||
|
if(CMAKE_TOOLCHAIN_FILE)
|
||||||
|
list(APPEND PROJECT_EXTERNAL_CMAKE_FLAGS
|
||||||
|
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
string(REPLACE ";" "|" CMAKE_PREFIX_PATH_ALT_SEP "${CMAKE_PREFIX_PATH}")
|
||||||
|
list(APPEND PROJECT_EXTERNAL_CMAKE_FLAGS
|
||||||
|
-DCMAKE_PREFIX_PATH=${CMAKE_PREFIX_PATH_ALT_SEP}
|
||||||
|
)
|
||||||
188
cmake/functions.cmake
Normal file
188
cmake/functions.cmake
Normal file
@@ -0,0 +1,188 @@
|
|||||||
|
if (PROJECT_MACOS_ICNS_NAME)
|
||||||
|
set(PROJECT_MACOS_ICNS_SOURCE "${CMAKE_CURRENT_SOURCE_DIR}/assets/${PROJECT_MACOS_ICNS_NAME}")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
function(set_common_target_options name)
|
||||||
|
target_compile_definitions(${name} PUBLIC
|
||||||
|
${PROJECT_DEFINITIONS}
|
||||||
|
${${name}_DEFINITIONS}
|
||||||
|
)
|
||||||
|
|
||||||
|
target_include_directories(${name} BEFORE PUBLIC
|
||||||
|
${PROJECT_EXTERNAL_BUILD_ROOT}/include
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_directories(${name} BEFORE PUBLIC
|
||||||
|
${PROJECT_EXTERNAL_BUILD_ROOT}/lib
|
||||||
|
)
|
||||||
|
|
||||||
|
if (PROJECT_STATIC_LINK)
|
||||||
|
target_compile_definitions(${name} PRIVATE U_STATIC_IMPLEMENTATION)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_link_libraries(${name} PRIVATE
|
||||||
|
ICU::io
|
||||||
|
ICU::i18n
|
||||||
|
ICU::uc
|
||||||
|
ICU::data
|
||||||
|
)
|
||||||
|
|
||||||
|
target_include_directories(${name} AFTER PUBLIC
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include
|
||||||
|
${name}_INCLUDES
|
||||||
|
)
|
||||||
|
|
||||||
|
if(PROJECT_DEPENDENCIES)
|
||||||
|
add_dependencies(${name} ${PROJECT_DEPENDENCIES})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(PROJECT_STATIC_LINK)
|
||||||
|
set_property(TARGET ${name} PROPERTY LINK_SEARCH_START_STATIC 1)
|
||||||
|
endif()
|
||||||
|
endfunction(set_common_target_options)
|
||||||
|
|
||||||
|
function(add_project_executable2 name dependencies libraries headers sources is_win32)
|
||||||
|
if (PROJECT_WINDOWS_VERSION_RC)
|
||||||
|
list(APPEND sources ${PROJECT_WINDOWS_VERSION_RC})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (PROJECT_IS_DARWIN AND PROJECT_MACOS_ICNS_SOURCE AND "${name}" STREQUAL "${PROJECT_NAME}")
|
||||||
|
set_source_files_properties(${PROJECT_MACOS_ICNS_SOURCE} PROPERTIES
|
||||||
|
MACOSX_PACKAGE_LOCATION "Resources"
|
||||||
|
)
|
||||||
|
|
||||||
|
add_executable(${name}
|
||||||
|
MACOSX_BUNDLE
|
||||||
|
${headers}
|
||||||
|
${sources}
|
||||||
|
${PROJECT_MACOS_ICNS_SOURCE}
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/main.cpp
|
||||||
|
)
|
||||||
|
|
||||||
|
set_target_properties(${name} PROPERTIES
|
||||||
|
MACOSX_BUNDLE TRUE
|
||||||
|
MACOSX_BUNDLE_ICON_FILE "${PROJECT_MACOS_ICNS_NAME}"
|
||||||
|
RESOURCE "${PROJECT_MACOS_ICNS_SOURCE}"
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
add_executable(${name}
|
||||||
|
${headers}
|
||||||
|
${sources}
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/main.cpp
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
foreach(dependency ${dependencies})
|
||||||
|
set_common_target_options(${dependency})
|
||||||
|
endforeach()
|
||||||
|
|
||||||
|
set_common_target_options(${name})
|
||||||
|
|
||||||
|
if(dependencies)
|
||||||
|
add_dependencies(${name} ${dependencies})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
target_link_libraries(${name} PRIVATE ${libraries})
|
||||||
|
|
||||||
|
if(PROJECT_ENABLE_SDL AND PROJECT_IS_MINGW)
|
||||||
|
target_link_libraries(${name} PRIVATE SDL2::SDL2main)
|
||||||
|
endif ()
|
||||||
|
|
||||||
|
if (is_win32 AND PROJECT_IS_MINGW)
|
||||||
|
target_link_options(${name} PRIVATE -mwindows)
|
||||||
|
endif()
|
||||||
|
endfunction(add_project_executable2)
|
||||||
|
|
||||||
|
function(add_project_executable name dependencies libraries)
|
||||||
|
file(GLOB_RECURSE headers
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.h
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.hh
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.hpp
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.hxx
|
||||||
|
)
|
||||||
|
|
||||||
|
file(GLOB_RECURSE sources
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.c
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cc
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cpp
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cxx
|
||||||
|
)
|
||||||
|
|
||||||
|
if(PROJECT_ENABLE_WXWIDGETS OR PROJECT_ENABLE_SDL OR PROJECT_ENABLE_SFML OR PROJECT_ENABLE_NANA)
|
||||||
|
set(IS_WIN32 ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
add_project_executable2(${name} "${dependencies}" "${libraries}" "${headers}" "${sources}" "${IS_WIN32}")
|
||||||
|
|
||||||
|
if(PROJECT_ENABLE_WXWIDGETS)
|
||||||
|
target_link_libraries(${name} PRIVATE ${wxWidgets_LIBRARIES})
|
||||||
|
endif()
|
||||||
|
endfunction(add_project_executable)
|
||||||
|
|
||||||
|
function(add_project_library name dependencies libraries additional_sources)
|
||||||
|
file(GLOB_RECURSE headers
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.h
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.hh
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/${name}/include/*.hpp
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/${name}/include/${name}/include/*.hxx
|
||||||
|
)
|
||||||
|
|
||||||
|
file(GLOB_RECURSE sources
|
||||||
|
${additional_sources}
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.c
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cc
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cpp
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cxx
|
||||||
|
)
|
||||||
|
|
||||||
|
add_library(${name} STATIC
|
||||||
|
${headers}
|
||||||
|
${sources}
|
||||||
|
)
|
||||||
|
|
||||||
|
set_common_target_options(${name})
|
||||||
|
|
||||||
|
set_target_properties(${name} PROPERTIES PREFIX "")
|
||||||
|
target_link_libraries(${name} PRIVATE ${libraries})
|
||||||
|
endfunction(add_project_library)
|
||||||
|
|
||||||
|
function(add_project_test_executable name dependencies libraries)
|
||||||
|
if(PROJECT_ENABLE_TESTING)
|
||||||
|
find_package(GTest ${GTEST_VERSION} REQUIRED)
|
||||||
|
enable_testing()
|
||||||
|
|
||||||
|
file(GLOB_RECURSE headers
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/${name}/include/${name}/include/*.hxx
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/${name}/include/*.hpp
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.h
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/include/*.hh
|
||||||
|
${PROJECT_SUPPORT_DIR}/test/include/*.hpp
|
||||||
|
)
|
||||||
|
|
||||||
|
file(GLOB_RECURSE sources
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.c
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cc
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cpp
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}/${name}/src/*.cxx
|
||||||
|
${PROJECT_SUPPORT_DIR}/test/src/*.cpp
|
||||||
|
${additional_sources}
|
||||||
|
)
|
||||||
|
|
||||||
|
add_project_executable2(${name} "${dependencies}" "${libraries}" "${headers}" "${sources}" OFF)
|
||||||
|
|
||||||
|
target_compile_definitions(${name} PRIVATE -DPROJECT_TESTING)
|
||||||
|
|
||||||
|
target_include_directories(${name} SYSTEM BEFORE
|
||||||
|
${GTEST_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
|
|
||||||
|
target_include_directories(${name} AFTER PRIVATE
|
||||||
|
${PROJECT_SUPPORT_DIR}/test/include
|
||||||
|
)
|
||||||
|
|
||||||
|
target_link_libraries(${name} PRIVATE
|
||||||
|
GTest::gtest
|
||||||
|
GTest::gmock
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
43
cmake/hashes.cmake
Normal file
43
cmake/hashes.cmake
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
set(BINUTILS_HASH ce2017e059d63e67ddb9240e9d4ec49c2893605035cd60e92ad53177f4377237)
|
||||||
|
set(BOOST2_HASH 7bd7ddceec1a1dfdcbdb3e609b60d01739c38390a5f956385a12f3122049f0ca)
|
||||||
|
set(BOOST_HASH 9de758db755e8330a01d995b0a24d09798048400ac25c03fc5ea9be364b13c93)
|
||||||
|
set(CLI11_HASH 17e02b4cddc2fa348e5dbdbb582c59a3486fa2b2433e70a0c3bacb871334fd55)
|
||||||
|
set(CPP_HTTPLIB_HASH a66f908f50ccb119769adce44fe1eac75f81b6ffab7c4ac0211bb663ffeb2688)
|
||||||
|
set(CURL_HASH d4d9a5001b491f5726efe9b50bc4aad03029506e73c9261272e809c64b05e814)
|
||||||
|
set(CXXOPTS_HASH 3bfc70542c521d4b55a46429d808178916a579b28d048bd8c727ee76c39e2072)
|
||||||
|
set(EXPAT_HASH 85372797ff0673a8fc4a6be16466bb5a0ca28c0dcf3c6f7ac1686b4a3ba2aabb)
|
||||||
|
set(FLAC_HASH aea54ed186ad07a34750399cb27fc216a2b62d0ffcd6dc2e3064a3518c3146f8)
|
||||||
|
set(FMT_HASH aa3e8fbb6a0066c03454434add1f1fc23299e85758ceec0d7d2d974431481e40)
|
||||||
|
set(FONTCONFIG_HASH 6a33dc555cc9ba8b10caf7695878ef134eeb36d0af366041f639b1da9b6ed220)
|
||||||
|
set(FREETYPE2_HASH 174d9e53402e1bf9ec7277e22ec199ba3e55a6be2c0740cb18c0ee9850fc8c34)
|
||||||
|
set(GCC_HASH 7294d65cc1a0558cb815af0ca8c7763d86f7a31199794ede3f630c0d1b0a5723)
|
||||||
|
set(GTEST_HASH 65fab701d9829d38cb77c14acdc431d2108bfdbf8979e40eb8ae567edf10b27c)
|
||||||
|
set(ICU_HASH a2c443404f00098e9e90acf29dc318e049d2dc78d9ae5f46efb261934a730ce2)
|
||||||
|
set(INNOSETUP_HASH fa73bf47a4da250d185d07561c2bfda387e5e20db77e4570004cf6a133cc10b1)
|
||||||
|
set(JSON_HASH 4b92eb0c06d10683f7447ce9406cb97cd4b453be18d7279320f7b2f025c10187)
|
||||||
|
set(LIBDSM_HASH 747c4563d6291303d9b085c9e7dc96ac44f91871dcac3e20480fdcc066eee88a)
|
||||||
|
set(LIBEVENT_HASH 7180a979aaa7000e1264da484f712d403fcf7679b1e9212c4e3d09f5c93efc24)
|
||||||
|
set(LIBICONV_HASH 3b08f5f4f9b4eb82f151a7040bfd6fe6c6fb922efe4b1659c66ea933276965e8)
|
||||||
|
set(LIBJPEG_TURBO_HASH 560f6338b547544c4f9721b18d8b87685d433ec78b3c644c70d77adad22c55e6)
|
||||||
|
set(LIBPNG_HASH 71158e53cfdf2877bc99bcab33641d78df3f48e6e0daad030afe9cb8c031aa46)
|
||||||
|
set(LIBSODIUM_HASH 8e5aeca07a723a27bbecc3beef14b0068d37e7fc0e97f51b3f1c82d2a58005c1)
|
||||||
|
set(LIBTASN_HASH 1613f0ac1cf484d6ec0ce3b8c06d56263cc7242f1c23b30d82d23de345a63f7a)
|
||||||
|
set(MINGW_HASH 5afe822af5c4edbf67daaf45eec61d538f49eef6b19524de64897c6b95828caf)
|
||||||
|
set(NANA_HASH 56f7b1ed006c750fccf8ef15ab1e83f96751f2dfdcb68d93e5f712a6c9b58bcb)
|
||||||
|
set(NUSPELL_HASH 5d4baa1daf833a18dc06ae0af0571d9574cc849d47daff6b9ce11dac0a5ded6a)
|
||||||
|
set(OGG_HASH 83e6704730683d004d20e21b8f7f55dcb3383cdf84c0daedf30bde175f774638)
|
||||||
|
set(OPENAL_HASH 7e1fecdeb45e7f78722b776c5cf30bd33934b961d7fd2a11e0494e064cc631ce)
|
||||||
|
set(OPENSSL_HASH b6a5f44b7eb69e3fa35dbf15524405b44837a481d43d81daddde3ff21fcbb8e9)
|
||||||
|
set(PKG_CONFIG_HASH 6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591)
|
||||||
|
set(PUGIXML_HASH 655ade57fa703fb421c2eb9a0113b5064bddb145d415dd1f88c79353d90d511a)
|
||||||
|
set(ROCKSDB_HASH 7ec942baab802b2845188d02bc5d4e42c29236e61bcbc08f5b3a6bdd92290c22)
|
||||||
|
set(SDL_HASH f50e59da0d383b2c84d43db625c6e23aae58f8f90eabd2944e2138ccc253744b)
|
||||||
|
set(SECP256K1_HASH 61583939f1f25b92e6401e5b819e399da02562de663873df3056993b40148701)
|
||||||
|
set(SFML_HASH 15ff4d608a018f287c6a885db0a2da86ea389e516d2323629e4d4407a7ce047f)
|
||||||
|
set(SPDLOG_HASH 15a04e69c222eb6c01094b5c7ff8a249b36bb22788d72519646fb85feb267e67)
|
||||||
|
set(SQLITE_HASH 1d3049dd0f830a025a53105fc79fd2ab9431aea99e137809d064d8ee8356b032)
|
||||||
|
set(STDUUID_HASH b1176597e789531c38481acbbed2a6894ad419aab0979c10410d59eb0ebf40d3)
|
||||||
|
set(VORBIS_HASH 270c76933d0934e42c5ee0a54a36280e2d87af1de3cc3e584806357e237afd13)
|
||||||
|
set(WINFSP_HASH 073a70e00f77423e34bed98b86e600def93393ba5822204fac57a29324db9f7a)
|
||||||
|
set(WXWIDGETS_HASH f936c8d694f9c49a367a376f99c751467150a4ed7cbf8f4723ef19b2d2d9998d)
|
||||||
|
set(ZLIB_HASH 17e88863f3600672ab49182f217281b6fc4d3c762bde361935e436a95214d05c)
|
||||||
100
cmake/libraries.cmake
Normal file
100
cmake/libraries.cmake
Normal file
@@ -0,0 +1,100 @@
|
|||||||
|
find_package(PkgConfig REQUIRED)
|
||||||
|
|
||||||
|
set(Boost_USE_STATIC_LIBS ${PROJECT_STATIC_LINK})
|
||||||
|
set(CURL_USE_STATIC_LIBS ${PROJECT_STATIC_LINK})
|
||||||
|
set(OPENSSL_USE_STATIC_LIBS ${PROJECT_STATIC_LINK})
|
||||||
|
set(SFML_STATIC_LIBRARIES ${PROJECT_STATIC_LINK})
|
||||||
|
if (PROJECT_IS_DARWIN)
|
||||||
|
set(ZLIB_USE_STATIC_LIBS OFF)
|
||||||
|
else()
|
||||||
|
set(ZLIB_USE_STATIC_LIBS ${PROJECT_STATIC_LINK})
|
||||||
|
endif()
|
||||||
|
set(wxWidgets_USE_STATIC ${PROJECT_STATIC_LINK})
|
||||||
|
set(ICU_USE_STATIC_LIBS ${PROJECT_STATIC_LINK})
|
||||||
|
|
||||||
|
include(cmake/libraries/icu.cmake)
|
||||||
|
include(cmake/libraries/openssl.cmake)
|
||||||
|
include(cmake/libraries/boost.cmake)
|
||||||
|
include(cmake/libraries/backward_cpp.cmake)
|
||||||
|
include(cmake/libraries/cli11.cmake)
|
||||||
|
include(cmake/libraries/cpp_httplib.cmake)
|
||||||
|
include(cmake/libraries/curl.cmake)
|
||||||
|
include(cmake/libraries/cxxopts.cmake)
|
||||||
|
include(cmake/libraries/dtl.cmake)
|
||||||
|
include(cmake/libraries/flac.cmake)
|
||||||
|
include(cmake/libraries/fmt.cmake)
|
||||||
|
include(cmake/libraries/fontconfig.cmake)
|
||||||
|
include(cmake/libraries/freetype2.cmake)
|
||||||
|
include(cmake/libraries/fuse.cmake)
|
||||||
|
include(cmake/libraries/fzf.cmake)
|
||||||
|
include(cmake/libraries/gtkmm.cmake)
|
||||||
|
include(cmake/libraries/json.cmake)
|
||||||
|
include(cmake/libraries/libbitcoin_system.cmake)
|
||||||
|
include(cmake/libraries/libdsm.cmake)
|
||||||
|
include(cmake/libraries/libevent.cmake)
|
||||||
|
include(cmake/libraries/libiconv.cmake)
|
||||||
|
include(cmake/libraries/libjpeg_turbo.cmake)
|
||||||
|
include(cmake/libraries/libpng.cmake)
|
||||||
|
include(cmake/libraries/libsodium.cmake)
|
||||||
|
include(cmake/libraries/libtasn.cmake)
|
||||||
|
include(cmake/libraries/nana.cmake)
|
||||||
|
include(cmake/libraries/nuspell.cmake)
|
||||||
|
include(cmake/libraries/ogg.cmake)
|
||||||
|
include(cmake/libraries/openal.cmake)
|
||||||
|
include(cmake/libraries/pugixml.cmake)
|
||||||
|
include(cmake/libraries/rocksdb.cmake)
|
||||||
|
include(cmake/libraries/sago_platform_folders.cmake)
|
||||||
|
include(cmake/libraries/sdl.cmake)
|
||||||
|
include(cmake/libraries/secp256k1.cmake)
|
||||||
|
include(cmake/libraries/sfml.cmake)
|
||||||
|
include(cmake/libraries/spdlog.cmake)
|
||||||
|
include(cmake/libraries/sqlite.cmake)
|
||||||
|
include(cmake/libraries/stduuid.cmake)
|
||||||
|
include(cmake/libraries/testing.cmake)
|
||||||
|
include(cmake/libraries/tpl.cmake)
|
||||||
|
include(cmake/libraries/vlc.cmake)
|
||||||
|
include(cmake/libraries/vorbis.cmake)
|
||||||
|
include(cmake/libraries/winfsp.cmake)
|
||||||
|
include(cmake/libraries/wxwidgets.cmake)
|
||||||
|
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
find_package(Threads REQUIRED)
|
||||||
|
find_package(ZLIB REQUIRED)
|
||||||
|
|
||||||
|
include_directories(BEFORE SYSTEM ${ZLIB_INCLUDE_DIRS})
|
||||||
|
link_libraries(${ZLIB_LIBRARIES})
|
||||||
|
|
||||||
|
if(PROJECT_IS_MINGW)
|
||||||
|
link_libraries(
|
||||||
|
advapi32
|
||||||
|
bcrypt
|
||||||
|
comdlg32
|
||||||
|
crypt32
|
||||||
|
dbghelp
|
||||||
|
gdi32
|
||||||
|
httpapi
|
||||||
|
iphlpapi
|
||||||
|
kernel32
|
||||||
|
mswsock
|
||||||
|
ncrypt
|
||||||
|
ole32
|
||||||
|
oleaut32
|
||||||
|
rpcrt4
|
||||||
|
secur32
|
||||||
|
shell32
|
||||||
|
shlwapi
|
||||||
|
user32
|
||||||
|
userenv
|
||||||
|
uuid
|
||||||
|
version
|
||||||
|
winhttp
|
||||||
|
wininet
|
||||||
|
winspool
|
||||||
|
ws2_32
|
||||||
|
)
|
||||||
|
elseif(NOT PROJECT_IS_DARWIN)
|
||||||
|
link_libraries(
|
||||||
|
uring
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
11
cmake/libraries/backward_cpp.cmake
Normal file
11
cmake/libraries/backward_cpp.cmake
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
if(PROJECT_ENABLE_BACKWARD_CPP AND PROJECT_BUILD)
|
||||||
|
if(PROJECT_IS_MINGW)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_BACKWARD_CPP)
|
||||||
|
|
||||||
|
link_libraries(msvcr90)
|
||||||
|
else()
|
||||||
|
add_definitions(-DBACKWARD_HAS_BFD)
|
||||||
|
|
||||||
|
link_libraries(bfd)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
152
cmake/libraries/boost.cmake
Normal file
152
cmake/libraries/boost.cmake
Normal file
@@ -0,0 +1,152 @@
|
|||||||
|
if(PROJECT_ENABLE_BOOST)
|
||||||
|
if(PROJECT_ENABLE_LIBBITCOIN_SYSTEM)
|
||||||
|
set(BOOST_MAJOR_VERSION ${BOOST2_MAJOR_VERSION})
|
||||||
|
set(BOOST_MINOR_VERSION ${BOOST2_MINOR_VERSION})
|
||||||
|
set(BOOST_PATCH_VERSION ${BOOST2_PATCH_VERSION})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(BOOST_ROOT ${PROJECT_EXTERNAL_BUILD_ROOT})
|
||||||
|
set(BOOST_INCLUDE_DIR ${BOOST_ROOT}/include/boost-${BOOST_MINOR_VERSION}_${BOOST_MINOR_VERSION})
|
||||||
|
|
||||||
|
set(PROJECT_EXTERNAL_CMAKE_FLAGS
|
||||||
|
${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||||
|
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DBOOST_INCLUDE_DIR=${BOOST_INCLUDE_DIR}
|
||||||
|
-DBOOST_ROOT=${BOOST_ROOT}
|
||||||
|
)
|
||||||
|
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_BOOST)
|
||||||
|
|
||||||
|
if (PROJECT_ENABLE_LIBBITCOIN_SYSTEM)
|
||||||
|
find_package(Boost ${BOOST_MAJOR_VERSION}.${BOOST_MINOR_VERSION}.${BOOST_PATCH_VERSION} EXACT
|
||||||
|
REQUIRED
|
||||||
|
COMPONENTS
|
||||||
|
atomic
|
||||||
|
chrono
|
||||||
|
date_time
|
||||||
|
filesystem
|
||||||
|
iostreams
|
||||||
|
locale
|
||||||
|
log
|
||||||
|
log_setup
|
||||||
|
program_options
|
||||||
|
random
|
||||||
|
regex
|
||||||
|
serialization
|
||||||
|
system
|
||||||
|
thread
|
||||||
|
wserialization
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
if(PROJECT_IS_DARWIN)
|
||||||
|
set(CMAKE_HAVE_THREADS_LIBRARY 1)
|
||||||
|
set(CMAKE_THREAD_LIBS_INIT "-lpthread")
|
||||||
|
set(CMAKE_USE_PTHREADS_INIT 1)
|
||||||
|
set(CMAKE_USE_WIN32_THREADS_INIT 0)
|
||||||
|
set(THREADS_PREFER_PTHREAD_FLAG ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
find_package(Boost ${BOOST_MAJOR_VERSION}.${BOOST_MINOR_VERSION}.${BOOST_PATCH_VERSION}
|
||||||
|
REQUIRED
|
||||||
|
COMPONENTS
|
||||||
|
atomic
|
||||||
|
chrono
|
||||||
|
date_time
|
||||||
|
filesystem
|
||||||
|
iostreams
|
||||||
|
locale
|
||||||
|
log
|
||||||
|
log_setup
|
||||||
|
program_options
|
||||||
|
random
|
||||||
|
regex
|
||||||
|
serialization
|
||||||
|
thread
|
||||||
|
wserialization
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include_directories(BEFORE SYSTEM
|
||||||
|
${Boost_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
|
|
||||||
|
link_libraries(
|
||||||
|
${Boost_LIBRARIES}
|
||||||
|
)
|
||||||
|
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||||
|
if (PROJECT_ENABLE_LIBBITCOIN_SYSTEM OR NOT CMAKE_HOST_WIN32)
|
||||||
|
if(PROJECT_CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||||
|
set(BOOST_BUILD_TYPE_LOWER debug)
|
||||||
|
else()
|
||||||
|
set(BOOST_BUILD_TYPE_LOWER release)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(PROJECT_IS_ARM64)
|
||||||
|
set(BOOST_ARCH arm)
|
||||||
|
else()
|
||||||
|
set(BOOST_ARCH x86)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(PROJECT_STATIC_LINK)
|
||||||
|
set(BOOST_LINK static)
|
||||||
|
else()
|
||||||
|
set(BOOST_LINK "static,shared")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(BOOST_BUILD_ARGS
|
||||||
|
--openssldir=$ENV{OPENSSL_ROOT_DIR}
|
||||||
|
--prefix=${PROJECT_EXTERNAL_BUILD_ROOT}
|
||||||
|
address-model=64
|
||||||
|
architecture=${BOOST_ARCH}
|
||||||
|
cxxstd=20
|
||||||
|
cxxstd-dialect=gnu
|
||||||
|
cxxflags=-std=gnu++${CMAKE_CXX_STANDARD}
|
||||||
|
cxxstd=${CMAKE_CXX_STANDARD}
|
||||||
|
define=BOOST_ASIO_HAS_STD_STRING_VIEW
|
||||||
|
define=BOOST_SYSTEM_NO_DEPRECATED
|
||||||
|
link=${BOOST_LINK}
|
||||||
|
linkflags=-std=gnu++${CMAKE_CXX_STANDARD}
|
||||||
|
threading=multi
|
||||||
|
variant=${BOOST_BUILD_TYPE_LOWER}
|
||||||
|
)
|
||||||
|
|
||||||
|
if(PROJECT_ENABLE_LIBBITCOIN_SYSTEM)
|
||||||
|
set(BOOST_URL_HASH SHA256=${BOOST2_HASH})
|
||||||
|
else()
|
||||||
|
set(BOOST_URL_HASH SHA256=${BOOST_HASH})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
ExternalProject_Add(boost_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/boost_${BOOST_MAJOR_VERSION}_${BOOST_MINOR_VERSION}_${BOOST_PATCH_VERSION}.tar.gz
|
||||||
|
URL_HASH ${BOOST_URL_HASH}
|
||||||
|
BUILD_IN_SOURCE 1
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CONFIGURE_COMMAND ./bootstrap.sh
|
||||||
|
--with-libraries=atomic,chrono,date_time,filesystem,iostreams,locale,log,program_options,random,regex,serialization,system,test,thread
|
||||||
|
BUILD_COMMAND
|
||||||
|
./b2
|
||||||
|
-sNO_BZIP2=1
|
||||||
|
-j$ENV{CMAKE_BUILD_PARALLEL_LEVEL}
|
||||||
|
${BOOST_BUILD_ARGS}
|
||||||
|
INSTALL_COMMAND
|
||||||
|
./b2
|
||||||
|
-sNO_BZIP2=1
|
||||||
|
-j$ENV{CMAKE_BUILD_PARALLEL_LEVEL}
|
||||||
|
${BOOST_BUILD_ARGS}
|
||||||
|
install
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES boost_project)
|
||||||
|
|
||||||
|
if(PROJECT_IS_DARWIN OR PROJECT_REQUIRE_ALPINE)
|
||||||
|
add_dependencies(boost_project icu_project)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (NOT CMAKE_HOST_WIN32)
|
||||||
|
add_dependencies(boost_project openssl_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
26
cmake/libraries/cli11.cmake
Normal file
26
cmake/libraries/cli11.cmake
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
if(PROJECT_ENABLE_CLI11)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_CLI11)
|
||||||
|
|
||||||
|
find_package(CLI11 ${CLI11_VERSION} REQUIRED)
|
||||||
|
elseif(NOT PROJECT_IS_MINGW)
|
||||||
|
ExternalProject_Add(cli11_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/CLI11-${CLI11_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${CLI11_HASH}
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||||
|
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DBUILD_STATIC_LIBS=ON
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||||
|
-DCLI11_WARNINGS_AS_ERRORS=OFF
|
||||||
|
-DCLI11_SINGLE_FILE=ON
|
||||||
|
-DCLI11_BUILD_DOCS=OFF
|
||||||
|
-DCLI11_BUILD_TESTS=OFF
|
||||||
|
-DCLI11_BUILD_EXAMPLES=OFF
|
||||||
|
-DCLI11_INSTALL=ON
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES cli11_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
36
cmake/libraries/cpp_httplib.cmake
Normal file
36
cmake/libraries/cpp_httplib.cmake
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
if(PROJECT_ENABLE_CPP_HTTPLIB)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(
|
||||||
|
-DCPPHTTPLIB_OPENSSL_SUPPORT
|
||||||
|
-DCPPHTTPLIB_TCP_NODELAY=true
|
||||||
|
-DCPPHTTPLIB_ZLIB_SUPPORT
|
||||||
|
-DPROJECT_ENABLE_CPP_HTTPLIB
|
||||||
|
)
|
||||||
|
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||||
|
ExternalProject_Add(cpphttplib_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/cpp-httplib-${CPP_HTTPLIB_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${CPP_HTTPLIB_HASH}
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||||
|
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DBUILD_STATIC_LIBS=ON
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||||
|
-DHTTPLIB_REQUIRE_BROTLI=OFF
|
||||||
|
-DHTTPLIB_REQUIRE_OPENSSL=ON
|
||||||
|
-DHTTPLIB_REQUIRE_ZLIB=ON
|
||||||
|
-DHTTPLIB_TEST=OFF
|
||||||
|
-DHTTPLIB_USE_BROTLI_IF_AVAILABLE=OFF
|
||||||
|
-DHTTPLIB_USE_OPENSSL_IF_AVAILABLE=ON
|
||||||
|
-DHTTPLIB_USE_ZLIB_IF_AVAILABLE=ON
|
||||||
|
-DOPENSSL_USE_STATIC_LIBS=${OPENSSL_USE_STATIC_LIBS}
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES cpphttplib_project)
|
||||||
|
|
||||||
|
add_dependencies(cpphttplib_project curl_project)
|
||||||
|
if (NOT CMAKE_HOST_WIN32)
|
||||||
|
add_dependencies(cpphttplib_project openssl_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
56
cmake/libraries/curl.cmake
Normal file
56
cmake/libraries/curl.cmake
Normal file
@@ -0,0 +1,56 @@
|
|||||||
|
if(PROJECT_ENABLE_CURL)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_CURL)
|
||||||
|
|
||||||
|
find_package(CURL ${CURL_VERSION} REQUIRED)
|
||||||
|
|
||||||
|
include_directories(BEFORE SYSTEM ${CURL_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
link_libraries(CURL::libcurl)
|
||||||
|
|
||||||
|
if (EXISTS ${PROJECT_DIST_DIR}/cacert.pem)
|
||||||
|
file(REMOVE ${PROJECT_DIST_DIR}/cacert.pem)
|
||||||
|
endif()
|
||||||
|
file(DOWNLOAD https://curl.haxx.se/ca/cacert.pem ${PROJECT_DIST_DIR}/cacert.pem)
|
||||||
|
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||||
|
ExternalProject_Add(curl_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/curl-${CURL_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${CURL_HASH}
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
BUILD_COMMAND
|
||||||
|
${CMAKE_COMMAND} --build . -- -j$ENV{CMAKE_BUILD_PARALLEL_LEVEL}
|
||||||
|
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||||
|
-DBUILD_CURL_EXE=OFF
|
||||||
|
-DBUILD_LIBCURL_DOCS=OFF
|
||||||
|
-DBUILD_MISC_DOCS=OFF
|
||||||
|
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DBUILD_STATIC_CURL=ON
|
||||||
|
-DBUILD_STATIC_LIBS=ON
|
||||||
|
-DBUILD_TESTING=OFF
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||||
|
-DCURL_BROTLI=OFF
|
||||||
|
-DCURL_CA_BUNDLE=./cacert.pem
|
||||||
|
-DCURL_CA_FALLBACK=ON
|
||||||
|
-DCURL_DISABLE_LDAP=ON
|
||||||
|
-DCURL_USE_LIBPSL=OFF
|
||||||
|
-DCURL_USE_LIBSSH2=OFF
|
||||||
|
-DCURL_USE_OPENSSL=${PROJECT_ENABLE_OPENSSL}
|
||||||
|
-DCURL_ZLIB=ON
|
||||||
|
-DCURL_ZSTD=OFF
|
||||||
|
-DENABLE_CURL_MANUAL=OFF
|
||||||
|
-DENABLE_THREADED_RESOLVER=ON
|
||||||
|
-DOPENSSL_ROOT_DIR=${OPENSSL_ROOT_DIR}
|
||||||
|
-DOPENSSL_USE_STATIC_LIBS=${OPENSSL_USE_STATIC_LIBS}
|
||||||
|
-DUSE_LIBIDN2=OFF
|
||||||
|
-DUSE_NGHTTP2=OFF
|
||||||
|
-DZLIB_USE_STATIC_LIBS=${ZLIB_USE_STATIC_LIBS}
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES curl_project)
|
||||||
|
|
||||||
|
if (NOT CMAKE_HOST_WIN32)
|
||||||
|
add_dependencies(curl_project openssl_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
23
cmake/libraries/cxxopts.cmake
Normal file
23
cmake/libraries/cxxopts.cmake
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
if(PROJECT_ENABLE_CXXOPTS)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_CXXOPTS)
|
||||||
|
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||||
|
ExternalProject_Add(cxxopts_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/cxxopts-v${CXXOPTS_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${CXXOPTS_HASH}
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||||
|
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DBUILD_STATIC_LIBS=ON
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||||
|
-DCXXOPTS_BUILD_EXAMPLES=OFF
|
||||||
|
-DCXXOPTS_BUILD_TESTS=OFF
|
||||||
|
-DCXXOPTS_ENABLE_INSTALL=ON
|
||||||
|
-DCXXOPTS_ENABLE_WARNINGS=OFF
|
||||||
|
-DCXXOPTS_USE_UNICODE_HELP=ON
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES cxxopts_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
18
cmake/libraries/dtl.cmake
Normal file
18
cmake/libraries/dtl.cmake
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
if(PROJECT_ENABLE_DTL)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_DTL)
|
||||||
|
else()
|
||||||
|
ExternalProject_Add(dtl_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/dtl-v${DTL_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=d6dcc7834b4117b5c14456ea73b907d0e2bafa5058e3a06b2c504d53517438c5
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||||
|
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DBUILD_STATIC_LIBS=ON
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES dtl_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
31
cmake/libraries/flac.cmake
Normal file
31
cmake/libraries/flac.cmake
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
if(PROJECT_ENABLE_FLAC)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_FLAC)
|
||||||
|
|
||||||
|
find_package(FLAC ${FLAC_VERSION} REQUIRED)
|
||||||
|
|
||||||
|
include_directories(BEFORE SYSTEM ${FLAC_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
link_libraries(FLAC::FLAC)
|
||||||
|
elseif(NOT PROJECT_IS_MINGW)
|
||||||
|
ExternalProject_Add(flac_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/flac-${FLAC_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${FLAC_HASH}
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||||
|
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DBUILD_STATIC_LIBS=ON
|
||||||
|
-DBUILD_EXAMPLES=OFF
|
||||||
|
-DBUILD_PROGRAMS=OFF
|
||||||
|
-DBUILD_TESTING=OFF
|
||||||
|
-DBUILD_DOCS=OFF
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||||
|
-DINSTALL_MANPAGES=OFF
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES flac_project)
|
||||||
|
|
||||||
|
add_dependencies(flac_project libiconv_project vorbis_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
26
cmake/libraries/fmt.cmake
Normal file
26
cmake/libraries/fmt.cmake
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
if(PROJECT_ENABLE_FMT)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_FMT)
|
||||||
|
|
||||||
|
find_package(fmt ${FMT_VERSION} REQUIRED)
|
||||||
|
|
||||||
|
include_directories(BEFORE SYSTEM ${FMT_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
link_libraries(fmt::fmt)
|
||||||
|
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||||
|
ExternalProject_Add(fmt_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/fmt-${FMT_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${FMT_HASH}
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||||
|
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DBUILD_STATIC_LIBS=ON
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||||
|
-DFMT_DOC=OFF
|
||||||
|
-DFMT_TEST=OFF
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES fmt_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
38
cmake/libraries/fontconfig.cmake
Normal file
38
cmake/libraries/fontconfig.cmake
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
if(PROJECT_ENABLE_FONTCONFIG)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_FONTCONFIG)
|
||||||
|
|
||||||
|
find_package(Fontconfig ${FONTCONFIG_VERSION} REQUIRED)
|
||||||
|
|
||||||
|
include_directories(BEFORE SYSTEM ${FONTCONFIG_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
link_libraries(Fontconfig::Fontconfig)
|
||||||
|
elseif(NOT PROJECT_IS_MINGW)
|
||||||
|
ExternalProject_Add(fontconfig_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/fontconfig-${FONTCONFIG_VERSION}.tar.xz
|
||||||
|
URL_HASH SHA256=${FONTCONFIG_HASH}
|
||||||
|
BUILD_IN_SOURCE 1
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CONFIGURE_COMMAND meson
|
||||||
|
setup
|
||||||
|
--prefix=${PROJECT_EXTERNAL_BUILD_ROOT}
|
||||||
|
_build
|
||||||
|
BUILD_COMMAND meson
|
||||||
|
compile
|
||||||
|
-C _build
|
||||||
|
INSTALL_COMMAND meson
|
||||||
|
install
|
||||||
|
-C _build
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES fontconfig_project)
|
||||||
|
|
||||||
|
add_dependencies(fontconfig_project
|
||||||
|
freetype2_project
|
||||||
|
libjpeg_turbo_project
|
||||||
|
libpng_project
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
32
cmake/libraries/freetype2.cmake
Normal file
32
cmake/libraries/freetype2.cmake
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
if(PROJECT_ENABLE_FREETYPE2)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_FREETYPE2)
|
||||||
|
|
||||||
|
find_package(Freetype ${FREETYPE2_VERSION} REQUIRED)
|
||||||
|
|
||||||
|
include_directories(BEFORE SYSTEM ${FREETYPE_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
link_libraries(Freetype::Freetype)
|
||||||
|
elseif(NOT PROJECT_IS_MINGW)
|
||||||
|
ExternalProject_Add(freetype2_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/freetype-${FREETYPE2_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${FREETYPE2_HASH}
|
||||||
|
BUILD_IN_SOURCE 1
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CONFIGURE_COMMAND meson
|
||||||
|
setup
|
||||||
|
--prefix=${PROJECT_EXTERNAL_BUILD_ROOT}
|
||||||
|
_build
|
||||||
|
BUILD_COMMAND meson
|
||||||
|
compile
|
||||||
|
-C _build
|
||||||
|
INSTALL_COMMAND meson
|
||||||
|
install
|
||||||
|
-C _build
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES freetype2_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
45
cmake/libraries/fuse.cmake
Normal file
45
cmake/libraries/fuse.cmake
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
if(PROJECT_ENABLE_FUSE AND NOT PROJECT_IS_MINGW)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_FUSE)
|
||||||
|
|
||||||
|
include_directories(BEFORE SYSTEM ${PROJECT_FUSE_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
if(PROJECT_FUSE STREQUAL "fuse3")
|
||||||
|
add_definitions(-DFUSE_USE_VERSION=30)
|
||||||
|
if(PROJECT_STATIC_LINK)
|
||||||
|
link_libraries(libfuse3.a)
|
||||||
|
else()
|
||||||
|
link_libraries(fuse3)
|
||||||
|
endif()
|
||||||
|
elseif(PROJECT_FUSE STREQUAL "fuse2")
|
||||||
|
add_definitions(-DFUSE_USE_VERSION=29)
|
||||||
|
if(PROJECT_STATIC_LINK)
|
||||||
|
link_libraries(libfuse.a)
|
||||||
|
else()
|
||||||
|
link_libraries(fuse)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
if (PROJECT_IS_DARWIN)
|
||||||
|
find_library(OSXFUSE NO_CACHE NAMES OSXFUSE)
|
||||||
|
if (NOT OSXFUSE)
|
||||||
|
message(FATAL_ERROR "FUSE for macOS not found (https://macfuse.github.io)")
|
||||||
|
endif ()
|
||||||
|
set(PROJECT_FUSE fuse2)
|
||||||
|
else()
|
||||||
|
pkg_check_modules(LIBFUSE3 fuse3>=3.0.0)
|
||||||
|
if(LIBFUSE3_FOUND)
|
||||||
|
set(PROJECT_FUSE fuse3)
|
||||||
|
set(PROJECT_FUSE_INCLUDE_DIRS ${LIBFUSE3_INCLUDE_DIRS})
|
||||||
|
else()
|
||||||
|
pkg_check_modules(LIBFUSE2 fuse>=2.9.0)
|
||||||
|
if(LIBFUSE2_FOUND)
|
||||||
|
set(PROJECT_FUSE fuse2)
|
||||||
|
set(PROJECT_FUSE_INCLUDE_DIRS ${LIBFUSE2_INCLUDE_DIRS})
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "fuse library not found")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
3
cmake/libraries/fzf.cmake
Normal file
3
cmake/libraries/fzf.cmake
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
if(PROJECT_ENABLE_FZF AND PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_FZF)
|
||||||
|
endif()
|
||||||
23
cmake/libraries/gtkmm.cmake
Normal file
23
cmake/libraries/gtkmm.cmake
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
if(PROJECT_ENABLE_GTKMM)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_GTKMM)
|
||||||
|
|
||||||
|
find_package(PNG REQUIRED)
|
||||||
|
|
||||||
|
pkg_check_modules(GTKMM REQUIRED gtkmm-${GTKMM_VERSION})
|
||||||
|
|
||||||
|
add_definitions(${GTKMM_DEFINITIONS})
|
||||||
|
|
||||||
|
include_directories(
|
||||||
|
${GTKMM_INCLUDE_DIRS}
|
||||||
|
${PNG_INCLUDE_DIRS}
|
||||||
|
)
|
||||||
|
|
||||||
|
link_directories(${GTKMM_LIBRARY_DIRS})
|
||||||
|
|
||||||
|
link_libraries(
|
||||||
|
${GTKMM_LIBRARIES}
|
||||||
|
${PNG_LIBRARIES}
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
24
cmake/libraries/icu.cmake
Normal file
24
cmake/libraries/icu.cmake
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
if((PROJECT_IS_DARWIN OR PROJECT_REQUIRE_ALPINE) AND NOT PROJECT_IS_MINGW AND NOT PROJECT_BUILD)
|
||||||
|
if(PROJECT_BUILD_SHARED_LIBS)
|
||||||
|
set(ICU_ENABLE_SHARED yes)
|
||||||
|
else()
|
||||||
|
set(ICU_ENABLE_SHARED no)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
ExternalProject_Add(icu_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/mingw64/icu-release-${ICU_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${ICU_HASH}
|
||||||
|
BUILD_IN_SOURCE 1
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
PATCH_COMMAND chmod +x ${PROJECT_3RD_PARTY_DIR}/icu_configure.sh
|
||||||
|
CONFIGURE_COMMAND cd icu4c/source && ${PROJECT_3RD_PARTY_DIR}/icu_configure.sh
|
||||||
|
${PROJECT_MARCH}
|
||||||
|
${PROJECT_EXTERNAL_BUILD_ROOT}
|
||||||
|
${ICU_ENABLE_SHARED}
|
||||||
|
BUILD_COMMAND cd icu4c/source && make -j$ENV{CMAKE_BUILD_PARALLEL_LEVEL}
|
||||||
|
INSTALL_COMMAND cd icu4c/source && make install
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES icu_project)
|
||||||
|
endif()
|
||||||
29
cmake/libraries/json.cmake
Normal file
29
cmake/libraries/json.cmake
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
if(PROJECT_ENABLE_JSON)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_JSON)
|
||||||
|
|
||||||
|
find_package(nlohmann_json ${JSON_VERSION} REQUIRED)
|
||||||
|
|
||||||
|
if(PROJECT_IS_MINGW AND PROJECT_IS_MINGW_UNIX)
|
||||||
|
include_directories(BEFORE SYSTEM /mingw64/include/nlohmann)
|
||||||
|
else()
|
||||||
|
include_directories(BEFORE SYSTEM ${PROJECT_EXTERNAL_BUILD_ROOT}/include/nlohmann)
|
||||||
|
endif()
|
||||||
|
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||||
|
ExternalProject_Add(json_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/json-${JSON_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${JSON_HASH}
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||||
|
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DBUILD_STATIC_LIBS=ON
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||||
|
-DJSON_BuildTests=OFF
|
||||||
|
-DJSON_Install=ON
|
||||||
|
-DJSON_MultipleHeaders=OFF
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES json_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
51
cmake/libraries/libbitcoin_system.cmake
Normal file
51
cmake/libraries/libbitcoin_system.cmake
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
if(PROJECT_ENABLE_LIBBITCOIN_SYSTEM)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(
|
||||||
|
-DPROJECT_ENABLE_LIBBITCOIN_SYSTEM
|
||||||
|
-DBC_STATIC
|
||||||
|
-DECMULT_GEN_PREC_BITS=4
|
||||||
|
-DECMULT_WINDOW_SIZE=15
|
||||||
|
-DWITH_ICU
|
||||||
|
)
|
||||||
|
|
||||||
|
set(LIBBITCOIN_SYSTEM_ROOT ${PROJECT_BUILD_DIR}/external/src/libbitcoin_system_project)
|
||||||
|
|
||||||
|
include_directories(SYSTEM BEFORE ${LIBBITCOIN_SYSTEM_ROOT}/include)
|
||||||
|
|
||||||
|
set(PROJECT_ADDITIONAL_SOURCES
|
||||||
|
${PROJECT_ADDITIONAL_SOURCES}
|
||||||
|
${LIBBITCOIN_SYSTEM_ROOT}/src/config/*.cpp
|
||||||
|
${LIBBITCOIN_SYSTEM_ROOT}/src/error.cpp
|
||||||
|
${LIBBITCOIN_SYSTEM_ROOT}/src/formats/*.cpp
|
||||||
|
${LIBBITCOIN_SYSTEM_ROOT}/src/math/*.cpp
|
||||||
|
${LIBBITCOIN_SYSTEM_ROOT}/src/math/external/*.c
|
||||||
|
${LIBBITCOIN_SYSTEM_ROOT}/src/message/network_address.cpp
|
||||||
|
${LIBBITCOIN_SYSTEM_ROOT}/src/unicode/*.cpp
|
||||||
|
${LIBBITCOIN_SYSTEM_ROOT}/src/utility/istream_reader.cpp
|
||||||
|
${LIBBITCOIN_SYSTEM_ROOT}/src/utility/ostream_writer.cpp
|
||||||
|
${LIBBITCOIN_SYSTEM_ROOT}/src/utility/string.cpp
|
||||||
|
${LIBBITCOIN_SYSTEM_ROOT}/src/wallet/dictionary.cpp
|
||||||
|
${LIBBITCOIN_SYSTEM_ROOT}/src/wallet/electrum.cpp
|
||||||
|
${LIBBITCOIN_SYSTEM_ROOT}/src/wallet/electrum_dictionary.cpp
|
||||||
|
${LIBBITCOIN_SYSTEM_ROOT}/src/wallet/mnemonic.cpp
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
ExternalProject_Add(libbitcoin_system_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/libbitcoin-system-${LIBBITCOIN_SYSTEM_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=0d10d79472e914620223f1ddb9396b0fa92ae5eb0b31acc14b9aa634a01d78b6
|
||||||
|
CONFIGURE_COMMAND echo "No configure"
|
||||||
|
BUILD_COMMAND echo "No build"
|
||||||
|
INSTALL_COMMAND echo "No install"
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES libbitcoin_system_project)
|
||||||
|
|
||||||
|
if(NOT PROJECT_IS_MINGW_UNIX)
|
||||||
|
add_dependencies(libbitcoin_system_project
|
||||||
|
boost_project
|
||||||
|
secp256k1_project
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
87
cmake/libraries/libdsm.cmake
Normal file
87
cmake/libraries/libdsm.cmake
Normal file
@@ -0,0 +1,87 @@
|
|||||||
|
if(PROJECT_ENABLE_LIBDSM)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_LIBDSM)
|
||||||
|
|
||||||
|
find_library(libdsm_LIBRARIES NAMES libdsm.a)
|
||||||
|
|
||||||
|
link_libraries(${libdsm_LIBRARIES})
|
||||||
|
elseif(NOT PROJECT_IS_MINGW)
|
||||||
|
set(_meson_c_args "-I${PROJECT_EXTERNAL_BUILD_ROOT}/deps/include")
|
||||||
|
set(_meson_c_link_args "-L${PROJECT_EXTERNAL_BUILD_ROOT}/deps/lib -L${PROJECT_EXTERNAL_BUILD_ROOT}/deps/lib64")
|
||||||
|
set(_meson_host_arg "")
|
||||||
|
set(_meson_host_file "${PROJECT_EXTERNAL_BUILD_ROOT}/libdsm_host_machine.ini")
|
||||||
|
|
||||||
|
if(PROJECT_IS_DARWIN)
|
||||||
|
set(_mac_arch_raw "${CMAKE_OSX_ARCHITECTURES}")
|
||||||
|
string(TOLOWER "${_mac_arch_raw}" _mac_arch)
|
||||||
|
|
||||||
|
if(_mac_arch MATCHES ";")
|
||||||
|
set(_meson_c_args "${_meson_c_args}|-arch|arm64|-arch|x86_64")
|
||||||
|
set(_meson_c_link_args "${_meson_c_link_args}|-arch|arm64|-arch|x86_64")
|
||||||
|
else()
|
||||||
|
if(_mac_arch STREQUAL "arm64")
|
||||||
|
set(_meson_cpu_family "aarch64")
|
||||||
|
set(_meson_cpu "arm64")
|
||||||
|
set(_meson_c_args "${_meson_c_args}|-arch|arm64")
|
||||||
|
set(_meson_c_link_args "${_meson_c_link_args}|-arch|arm64")
|
||||||
|
elseif(_mac_arch STREQUAL "x86_64")
|
||||||
|
set(_meson_cpu_family "x86_64")
|
||||||
|
set(_meson_cpu "x86_64")
|
||||||
|
set(_meson_c_args "${_meson_c_args}|-arch|x86_64")
|
||||||
|
set(_meson_c_link_args "${_meson_c_link_args}|-arch|x86_64")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(DEFINED _meson_cpu_family AND DEFINED _meson_cpu)
|
||||||
|
file(WRITE "${_meson_host_file}"
|
||||||
|
"[binaries]
|
||||||
|
c = 'clang'
|
||||||
|
cpp = 'clang++'
|
||||||
|
|
||||||
|
[host_machine]
|
||||||
|
system = 'darwin'
|
||||||
|
cpu_family = '${_meson_cpu_family}'
|
||||||
|
cpu = '${_meson_cpu}'
|
||||||
|
endian = 'little'
|
||||||
|
"
|
||||||
|
)
|
||||||
|
|
||||||
|
set(_meson_host_arg "--native-file=${_meson_host_file}")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
ExternalProject_Add(libdsm_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/libdsm-${LIBDSM_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${LIBDSM_HASH}
|
||||||
|
BUILD_IN_SOURCE 1
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
PATCH_COMMAND ${PROJECT_3RD_PARTY_DIR}/libdsm_patch.sh
|
||||||
|
${PROJECT_3RD_PARTY_DIR}
|
||||||
|
${CMAKE_BINARY_DIR}/external/src/libdsm_project
|
||||||
|
CONFIGURE_COMMAND meson
|
||||||
|
setup
|
||||||
|
-Dc_args="${_meson_c_args}"
|
||||||
|
-Dcpp_args="${_meson_c_args}"
|
||||||
|
-Dc_link_args="${_meson_c_link_args}"
|
||||||
|
-Dcpp_link_args="${_meson_c_link_args}"
|
||||||
|
${_meson_host_arg}
|
||||||
|
--prefix=${PROJECT_EXTERNAL_BUILD_ROOT}
|
||||||
|
-Dbinaries=false
|
||||||
|
-Ddefault_library=static
|
||||||
|
_build
|
||||||
|
BUILD_COMMAND meson
|
||||||
|
compile -C _build
|
||||||
|
INSTALL_COMMAND meson
|
||||||
|
install -C _build
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES libdsm_project)
|
||||||
|
|
||||||
|
add_dependencies(libdsm_project
|
||||||
|
libiconv_project
|
||||||
|
libtasn1_project
|
||||||
|
openssl_project
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
49
cmake/libraries/libevent.cmake
Normal file
49
cmake/libraries/libevent.cmake
Normal file
@@ -0,0 +1,49 @@
|
|||||||
|
if(PROJECT_ENABLE_LIBEVENT)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_LIBEVENT)
|
||||||
|
|
||||||
|
if(PROJECT_IS_MINGW AND NOT PROJECT_IS_MINGW_UNIX)
|
||||||
|
pkg_check_modules(LIBEVENT REQUIRED libevent>=${LIBEVENT_VERSION})
|
||||||
|
else()
|
||||||
|
set(LIBEVENT_STATIC_LINK ${PROJECT_STATIC_LINK})
|
||||||
|
find_package(Libevent ${LIBEVENT_VERSION} REQUIRED)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include_directories(BEFORE SYSTEM ${LIBEVENT_INCLUDE_DIRS})
|
||||||
|
if (PROJECT_IS_MINGW_UNIX)
|
||||||
|
unset(LIBEVENT_LIBRARIES)
|
||||||
|
set(LIBEVENT_LIBRARIES
|
||||||
|
/mingw64/lib/libevent.dll.a
|
||||||
|
/mingw64/lib/libevent_core.dll.a
|
||||||
|
/mingw64/lib/libevent_extra.dll.a
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
link_libraries(${LIBEVENT_LIBRARIES})
|
||||||
|
elseif(NOT PROJECT_IS_MINGW)
|
||||||
|
if(PROJECT_BUILD_SHARED_LIBS)
|
||||||
|
set(LIBEVENT_LIBRARY_TYPE BOTH)
|
||||||
|
else()
|
||||||
|
set(LIBEVENT_LIBRARY_TYPE STATIC)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
ExternalProject_Add(libevent_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/libevent-${LIBEVENT_VERSION}-stable.tar.gz
|
||||||
|
URL_HASH SHA256=${LIBEVENT_HASH}
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
PATCH_COMMAND ${PROJECT_3RD_PARTY_DIR}/libevent_patch.sh
|
||||||
|
${PROJECT_3RD_PARTY_DIR}
|
||||||
|
${CMAKE_BINARY_DIR}/external/src/libevent_project
|
||||||
|
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||||
|
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DBUILD_STATIC_LIBS=ON
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||||
|
-DEVENT__DISABLE_OPENSSL=ON
|
||||||
|
-DEVENT__DISABLE_SAMPLES=ON
|
||||||
|
-DEVENT__DISABLE_TESTS=ON
|
||||||
|
-DEVENT__LIBRARY_TYPE=${LIBEVENT_LIBRARY_TYPE}
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES libevent_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
25
cmake/libraries/libiconv.cmake
Normal file
25
cmake/libraries/libiconv.cmake
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
if(PROJECT_ENABLE_LIBICONV)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_LIBICONV)
|
||||||
|
|
||||||
|
find_library(libiconv_LIBRARIES NAMES libiconv.a)
|
||||||
|
|
||||||
|
link_libraries(${libiconv_LIBRARIES})
|
||||||
|
elseif(NOT PROJECT_IS_MINGW)
|
||||||
|
ExternalProject_Add(libiconv_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/libiconv-${LIBICONV_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${LIBICONV_HASH}
|
||||||
|
BUILD_IN_SOURCE 1
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CONFIGURE_COMMAND ./configure
|
||||||
|
--enable-shared=no
|
||||||
|
--enable-static=yes
|
||||||
|
--prefix=${PROJECT_EXTERNAL_BUILD_ROOT}
|
||||||
|
BUILD_COMMAND make -j1
|
||||||
|
INSTALL_COMMAND make install
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES libiconv_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
27
cmake/libraries/libjpeg_turbo.cmake
Normal file
27
cmake/libraries/libjpeg_turbo.cmake
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
if(PROJECT_ENABLE_LIBJPEG_TURBO)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_LIBJPEG_TURBO)
|
||||||
|
|
||||||
|
find_package(JPEG ${LIBJPEG_TURBO_VERSION} REQUIRED)
|
||||||
|
|
||||||
|
include_directories(${JPEG_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
link_libraries(JPEG::JPEG)
|
||||||
|
elseif(NOT PROJECT_IS_MINGW)
|
||||||
|
ExternalProject_Add(libjpeg_turbo_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/libjpeg_turbo-${LIBJPEG_TURBO_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${LIBJPEG_TURBO_HASH}
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||||
|
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DBUILD_STATIC_LIBS=ON
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||||
|
-DENABLE_SHARED=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DENABLE_STATIC=ON
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES libjpeg_turbo_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
30
cmake/libraries/libpng.cmake
Normal file
30
cmake/libraries/libpng.cmake
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
if(PROJECT_ENABLE_LIBPNG)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_PNG)
|
||||||
|
|
||||||
|
find_package(PNG ${LIBPNG_VERSION} REQUIRED )
|
||||||
|
|
||||||
|
include_directories(${PNG_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
link_libraries(PNG::PNG)
|
||||||
|
elseif(NOT PROJECT_IS_MINGW)
|
||||||
|
ExternalProject_Add(libpng_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/libpng-v${LIBPNG_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${LIBPNG_HASH}
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||||
|
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DBUILD_STATIC_LIBS=ON
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||||
|
-DENABLE_SHARED=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DPNG_SHARED=ON
|
||||||
|
-DPNG_STATIC=ON
|
||||||
|
-DPNG_TESTS=OFF
|
||||||
|
-DPNG_TOOLS=OFF
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES libpng_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
48
cmake/libraries/libsodium.cmake
Normal file
48
cmake/libraries/libsodium.cmake
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
if(PROJECT_ENABLE_LIBSODIUM)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
pkg_check_modules(SODIUM libsodium>=${LIBSODIUM_VERSION} REQUIRED)
|
||||||
|
|
||||||
|
add_definitions(-DPROJECT_ENABLE_LIBSODIUM)
|
||||||
|
|
||||||
|
include_directories(BEFORE SYSTEM ${SODIUM_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
if(PROJECT_IS_MINGW_UNIX)
|
||||||
|
if(PROJECT_STATIC_LINK)
|
||||||
|
link_libraries(/mingw64/lib/libsodium.a)
|
||||||
|
else()
|
||||||
|
link_libraries(/mingw64/lib/libsodium.dll.a)
|
||||||
|
endif()
|
||||||
|
else()
|
||||||
|
link_libraries(${SODIUM_LIBRARIES})
|
||||||
|
endif()
|
||||||
|
elseif(NOT PROJECT_IS_MINGW)
|
||||||
|
if(PROJECT_IS_MINGW)
|
||||||
|
set(LIBSODIUM_TYPE mingw64)
|
||||||
|
else()
|
||||||
|
set(LIBSODIUM_TYPE linux)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(PROJECT_BUILD_SHARED_LIBS)
|
||||||
|
set(LIBSODIUM_ENABLE_SHARED yes)
|
||||||
|
else()
|
||||||
|
set(LIBSODIUM_ENABLE_SHARED no)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
ExternalProject_Add(libsodium_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/libsodium-${LIBSODIUM_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${LIBSODIUM_HASH}
|
||||||
|
BUILD_IN_SOURCE 1
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CONFIGURE_COMMAND ${PROJECT_3RD_PARTY_DIR}/libsodium_configure.sh
|
||||||
|
${LIBSODIUM_TYPE}
|
||||||
|
${PROJECT_MARCH}
|
||||||
|
${PROJECT_EXTERNAL_BUILD_ROOT}
|
||||||
|
${LIBSODIUM_ENABLE_SHARED}
|
||||||
|
BUILD_COMMAND make -j1
|
||||||
|
INSTALL_COMMAND make install
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES libsodium_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
30
cmake/libraries/libtasn.cmake
Normal file
30
cmake/libraries/libtasn.cmake
Normal file
@@ -0,0 +1,30 @@
|
|||||||
|
if(PROJECT_ENABLE_LIBTASN)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_LIBTASN)
|
||||||
|
|
||||||
|
find_library(libtasn1_LIBRARIES NAMES libtasn1.a)
|
||||||
|
|
||||||
|
link_libraries(${libtasn1_LIBRARIES})
|
||||||
|
elseif(NOT PROJECT_IS_MINGW)
|
||||||
|
ExternalProject_Add(libtasn1_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/libtasn1-${LIBTASN_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${LIBTASN_HASH}
|
||||||
|
BUILD_IN_SOURCE 1
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CONFIGURE_COMMAND ./configure
|
||||||
|
--disable-doc
|
||||||
|
--enable-shared=no
|
||||||
|
--enable-static=yes
|
||||||
|
--prefix=${PROJECT_EXTERNAL_BUILD_ROOT}
|
||||||
|
BUILD_COMMAND make -j1
|
||||||
|
INSTALL_COMMAND make install
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES libtasn1_project)
|
||||||
|
|
||||||
|
if (PROJECT_ENABLE_OPENSSL)
|
||||||
|
add_dependencies(libtasn1_project openssl_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
48
cmake/libraries/nana.cmake
Normal file
48
cmake/libraries/nana.cmake
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
if(PROJECT_ENABLE_NANA)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_NANA)
|
||||||
|
|
||||||
|
find_library(NANA_LIBRARIES NAMES nana REQUIRED)
|
||||||
|
|
||||||
|
if (NOT PROJECT_IS_MINGW)
|
||||||
|
find_package(X11 REQUIRED)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include_directories(SYSTEM ${X11_INCLUDE_DIR})
|
||||||
|
|
||||||
|
link_libraries(
|
||||||
|
${NANA_LIBRARIES}
|
||||||
|
${X11_LIBRARIES}
|
||||||
|
)
|
||||||
|
|
||||||
|
if (NOT PROJECT_IS_MINGW)
|
||||||
|
link_libraries(
|
||||||
|
X11::Xft
|
||||||
|
X11::Xcursor
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
elseif(NOT PROJECT_IS_MINGW)
|
||||||
|
ExternalProject_Add(nana_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/nana-v${NANA_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${NANA_HASH}
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
PATCH_COMMAND ${PROJECT_3RD_PARTY_DIR}/nana_patch.sh
|
||||||
|
${PROJECT_3RD_PARTY_DIR}
|
||||||
|
${CMAKE_BINARY_DIR}/external/src/nana_project
|
||||||
|
CMAKE_ARGS
|
||||||
|
-DCMAKE_INSTALL_PREFIX=${PROJECT_EXTERNAL_BUILD_ROOT}
|
||||||
|
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DBUILD_STATIC_LIBS=ON
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||||
|
-DNANA_CMAKE_ENABLE_AUDIO=OFF
|
||||||
|
-DNANA_CMAKE_ENABLE_JPEG=ON
|
||||||
|
-DNANA_CMAKE_ENABLE_PNG=ON
|
||||||
|
-DNANA_CMAKE_INSTALL=ON
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES nana_project)
|
||||||
|
|
||||||
|
add_dependencies(nana_project libjpeg_turbo_project libpng_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
27
cmake/libraries/nuspell.cmake
Normal file
27
cmake/libraries/nuspell.cmake
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
if(PROJECT_ENABLE_NUSPELL)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
find_package(Nuspell ${NUSPELL_VERSION} REQUIRED)
|
||||||
|
|
||||||
|
add_definitions(-DPROJECT_ENABLE_NUSPELL)
|
||||||
|
|
||||||
|
include_directories(BEFORE SYSTEM ${NUSPELL_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
link_libraries(Nuspell::nuspell)
|
||||||
|
elseif(NOT PROJECT_IS_MINGW)
|
||||||
|
ExternalProject_Add(nuspell_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/nuspell-v${NUSPELL_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${NUSPELL_HASH}
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||||
|
-DBUILD_DOCS=OFF
|
||||||
|
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DBUILD_STATIC_LIBS=ON
|
||||||
|
-DBUILD_TESTING=OFF
|
||||||
|
-DBUILD_TOOLS=OFF
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES nuspell_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
24
cmake/libraries/ogg.cmake
Normal file
24
cmake/libraries/ogg.cmake
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
if(PROJECT_ENABLE_OGG)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_OGG)
|
||||||
|
|
||||||
|
find_package(Ogg ${OGG_VERSION} REQUIRED)
|
||||||
|
|
||||||
|
include_directories(BEFORE SYSTEM ${OGG_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
link_libraries(Ogg::ogg)
|
||||||
|
elseif(NOT PROJECT_IS_MINGW)
|
||||||
|
ExternalProject_Add(ogg_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/ogg-v${OGG_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${OGG_HASH}
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||||
|
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DBUILD_STATIC_LIBS=ON
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES ogg_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
24
cmake/libraries/openal.cmake
Normal file
24
cmake/libraries/openal.cmake
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
if(PROJECT_ENABLE_OPENAL)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_OPENAL)
|
||||||
|
|
||||||
|
find_package(OpenAL ${OPENAL_VERSION} REQUIRED)
|
||||||
|
|
||||||
|
include_directories(BEFORE SYSTEM ${OPENAL_INCLUDE_DIR})
|
||||||
|
|
||||||
|
link_libraries(${OPENAL_LIBRARY})
|
||||||
|
elseif(NOT PROJECT_IS_MINGW)
|
||||||
|
ExternalProject_Add(openal_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/openal-${OPENAL_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${OPENAL_HASH}
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||||
|
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DBUILD_STATIC_LIBS=ON
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES openal_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
59
cmake/libraries/openssl.cmake
Normal file
59
cmake/libraries/openssl.cmake
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
set(OPENSSL_ROOT_DIR $ENV{OPENSSL_ROOT_DIR})
|
||||||
|
|
||||||
|
if(PROJECT_ENABLE_OPENSSL)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_OPENSSL)
|
||||||
|
|
||||||
|
find_package(OpenSSL ${OPENSSL_VERSION} REQUIRED)
|
||||||
|
|
||||||
|
include_directories(BEFORE SYSTEM ${OPENSSL_INCLUDE_DIR})
|
||||||
|
|
||||||
|
link_libraries(
|
||||||
|
OpenSSL::Crypto
|
||||||
|
OpenSSL::SSL
|
||||||
|
)
|
||||||
|
elseif(NOT PROJECT_IS_MINGW)
|
||||||
|
if(PROJECT_IS_MINGW)
|
||||||
|
set(OPENSSL_COMPILE_TYPE mingw64)
|
||||||
|
elseif(PROJECT_IS_DARWIN)
|
||||||
|
if(PROJECT_IS_ARM64)
|
||||||
|
set(OPENSSL_COMPILE_TYPE darwin64-arm64)
|
||||||
|
else()
|
||||||
|
set(OPENSSL_COMPILE_TYPE darwin64-x86_64)
|
||||||
|
endif()
|
||||||
|
elseif(PROJECT_IS_ARM64)
|
||||||
|
set(OPENSSL_COMPILE_TYPE linux-aarch64)
|
||||||
|
else()
|
||||||
|
set(OPENSSL_COMPILE_TYPE linux-x86_64)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(PROJECT_IS_MINGW_UNIX)
|
||||||
|
set(OPENSSL_CROSS_PREFIX "--cross-compile-prefix=x86_64-w64-mingw32-")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(PROJECT_BUILD_SHARED_LIBS)
|
||||||
|
set(OPENSSL_NO_SHARED shared)
|
||||||
|
else()
|
||||||
|
set(OPENSSL_NO_SHARED no-shared)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
ExternalProject_Add(openssl_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/openssl-${OPENSSL_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${OPENSSL_HASH}
|
||||||
|
BUILD_IN_SOURCE 1
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CONFIGURE_COMMAND ./Configure
|
||||||
|
${OPENSSL_COMPILE_TYPE}
|
||||||
|
${OPENSSL_CROSS_PREFIX}
|
||||||
|
--prefix=${PROJECT_EXTERNAL_BUILD_ROOT}
|
||||||
|
no-apps
|
||||||
|
no-docs
|
||||||
|
${OPENSSL_NO_SHARED}
|
||||||
|
BUILD_COMMAND make -j1
|
||||||
|
INSTALL_COMMAND make install
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES openssl_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
28
cmake/libraries/pugixml.cmake
Normal file
28
cmake/libraries/pugixml.cmake
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
if(PROJECT_ENABLE_PUGIXML)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_PUGIXML)
|
||||||
|
|
||||||
|
find_package(pugixml ${PUGIXML_VERSION} REQUIRED)
|
||||||
|
|
||||||
|
include_directories(BEFORE SYSTEM ${PUGIXML_INCLUDE_DIR})
|
||||||
|
|
||||||
|
if(PROJECT_STATIC_LINK)
|
||||||
|
link_libraries(pugixml::static)
|
||||||
|
else()
|
||||||
|
link_libraries(pugixml::pugixml)
|
||||||
|
endif()
|
||||||
|
elseif(NOT PROJECT_IS_MINGW)
|
||||||
|
ExternalProject_Add(pugixml_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/pugixml-${PUGIXML_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${PUGIXML_HASH}
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||||
|
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DBUILD_STATIC_LIBS=ON
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES pugixml_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
38
cmake/libraries/rocksdb.cmake
Normal file
38
cmake/libraries/rocksdb.cmake
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
if(PROJECT_ENABLE_ROCKSDB)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_ROCKSDB)
|
||||||
|
find_library(ROCKSDB_LIBRARY NAMES librocksdb.a REQUIRED)
|
||||||
|
link_libraries(${ROCKSDB_LIBRARY})
|
||||||
|
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||||
|
ExternalProject_Add(rocksdb_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/rocksdb-${ROCKSDB_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${ROCKSDB_HASH}
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
BUILD_COMMAND
|
||||||
|
${CMAKE_COMMAND} --build . -- -j$ENV{CMAKE_BUILD_PARALLEL_LEVEL}
|
||||||
|
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||||
|
-DBUILD_SHARED_LIBS=OFF
|
||||||
|
-DBUILD_STATIC_LIBS=ON
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||||
|
-DFAIL_ON_WARNINGS=OFF
|
||||||
|
-DPORTABLE=1
|
||||||
|
-DROCKSDB_BUILD_SHARED=OFF
|
||||||
|
-DROCKSDB_INSTALL_ON_WINDOWS=ON
|
||||||
|
-DWITH_BENCHMARK=OFF
|
||||||
|
-DWITH_BENCHMARK_TOOLS=OFF
|
||||||
|
-DWITH_BZ2=OFF
|
||||||
|
-DWITH_CORE_TOOLS=OFF
|
||||||
|
-DWITH_EXAMPLES=OFF
|
||||||
|
-DWITH_GFLAGS=OFF
|
||||||
|
-DWITH_IOSTATS_CONTEXT=OFF
|
||||||
|
-DWITH_PERF_CONTEXT=OFF
|
||||||
|
-DWITH_TESTS=OFF
|
||||||
|
-DWITH_TOOLS=OFF
|
||||||
|
-DWITH_TRACE_TOOLS=OFF
|
||||||
|
-DWITH_ZLIB=ON
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES rocksdb_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
3
cmake/libraries/sago_platform_folders.cmake
Normal file
3
cmake/libraries/sago_platform_folders.cmake
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
if(PROJECT_ENABLE_SAGO_PLATFORM_FOLDERS AND PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_SAGO_PLATFORM_FOLDERS)
|
||||||
|
endif()
|
||||||
33
cmake/libraries/sdl.cmake
Normal file
33
cmake/libraries/sdl.cmake
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
if(PROJECT_ENABLE_SDL)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_SDL)
|
||||||
|
|
||||||
|
set(SDL2_NO_MWINDOWS ON)
|
||||||
|
find_package(SDL2 ${SDL_VERSION} REQUIRED)
|
||||||
|
|
||||||
|
include_directories(SYSTEM ${SDL2_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
link_libraries(SDL2::SDL2)
|
||||||
|
elseif(NOT PROJECT_IS_MINGW)
|
||||||
|
if(PROJECT_BUILD_SHARED_LIBS)
|
||||||
|
set(SDL_CONFIGURE_OPTS --enable-shared=yes --enable-static=yes)
|
||||||
|
else()
|
||||||
|
set(SDL_CONFIGURE_OPTS --enable-shared=no --enable-static=yes)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
ExternalProject_Add(sdl_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/sdl-${SDL_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${SDL_HASH}
|
||||||
|
BUILD_IN_SOURCE 1
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CONFIGURE_COMMAND ./configure
|
||||||
|
--prefix=${PROJECT_EXTERNAL_BUILD_ROOT}
|
||||||
|
${SDL_CONFIGURE_OPTS}
|
||||||
|
BUILD_COMMAND make -j1
|
||||||
|
INSTALL_COMMAND make install
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES sdl_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
35
cmake/libraries/secp256k1.cmake
Normal file
35
cmake/libraries/secp256k1.cmake
Normal file
@@ -0,0 +1,35 @@
|
|||||||
|
if(PROJECT_ENABLE_SECP256K1)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_SECP256K1)
|
||||||
|
|
||||||
|
pkg_check_modules(SECP256K1 libsecp256k1=${SECP256K1_VERSION} REQUIRED)
|
||||||
|
|
||||||
|
include_directories(BEFORE SYSTEM ${SECP256K1_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
link_libraries(${SECP256K1_LINK_LIBRARIES})
|
||||||
|
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||||
|
if(PROJECT_BUILD_SHARED_LIBS)
|
||||||
|
set(SECP256K1_ENABLE_SHARED yes)
|
||||||
|
else()
|
||||||
|
set(SECP256K1_ENABLE_SHARED no)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
ExternalProject_Add(secp256k1_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/secp256k1-${SECP256K1_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${SECP256K1_HASH}
|
||||||
|
BUILD_IN_SOURCE 1
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CONFIGURE_COMMAND ./autogen.sh && ./configure
|
||||||
|
--enable-shared=${SECP256K1_ENABLE_SHARED}
|
||||||
|
--enable-static=yes
|
||||||
|
--enable-module-ecdh
|
||||||
|
--enable-module-recovery
|
||||||
|
--prefix=${PROJECT_EXTERNAL_BUILD_ROOT}
|
||||||
|
BUILD_COMMAND make -j1
|
||||||
|
INSTALL_COMMAND make install
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES secp256k1_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
59
cmake/libraries/sfml.cmake
Normal file
59
cmake/libraries/sfml.cmake
Normal file
@@ -0,0 +1,59 @@
|
|||||||
|
if(PROJECT_ENABLE_SFML)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_SFML)
|
||||||
|
|
||||||
|
find_package(OpenGL REQUIRED)
|
||||||
|
find_package(X11 REQUIRED)
|
||||||
|
|
||||||
|
find_package(SFML ${SFML_VERSION}
|
||||||
|
COMPONENTS
|
||||||
|
audio
|
||||||
|
graphics
|
||||||
|
network
|
||||||
|
system
|
||||||
|
window
|
||||||
|
REQUIRED
|
||||||
|
)
|
||||||
|
|
||||||
|
if(NOT PROJECT_BUILD_SHARED_LIBS)
|
||||||
|
set(SFML_STATIC_LIB_APPEND "-s")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
link_libraries(
|
||||||
|
${X11_LIBRARIES}
|
||||||
|
sfml-audio${SFML_STATIC_LIB_APPEND}
|
||||||
|
sfml-graphics${SFML_STATIC_LIB_APPEND}
|
||||||
|
sfml-network${SFML_STATIC_LIB_APPEND}
|
||||||
|
sfml-system${SFML_STATIC_LIB_APPEND}
|
||||||
|
sfml-window${SFML_STATIC_LIB_APPEND}
|
||||||
|
)
|
||||||
|
|
||||||
|
include_directories(BEFORE SYSTEM
|
||||||
|
${X11_INCLUDE_DIR}
|
||||||
|
${SFML_INCLUDE_DIR}
|
||||||
|
)
|
||||||
|
elseif(NOT PROJECT_IS_MINGW)
|
||||||
|
ExternalProject_Add(sfml_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/SFML-${SFML_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${SFML_HASH}
|
||||||
|
PATCH_COMMAND ${PROJECT_3RD_PARTY_DIR}/SFML_patch.sh
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
BUILD_COMMAND
|
||||||
|
${CMAKE_COMMAND} --build . -- -j$ENV{CMAKE_BUILD_PARALLEL_LEVEL}
|
||||||
|
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||||
|
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DBUILD_STATIC_LIBS=ON
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES sfml_project)
|
||||||
|
|
||||||
|
add_dependencies(sfml_project
|
||||||
|
flac_project
|
||||||
|
fontconfig_project
|
||||||
|
freetype2_project
|
||||||
|
openal_project
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
26
cmake/libraries/spdlog.cmake
Normal file
26
cmake/libraries/spdlog.cmake
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
if(PROJECT_ENABLE_SPDLOG)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_SPDLOG)
|
||||||
|
|
||||||
|
find_package(spdlog ${SPDLOG_VERSION} REQUIRED)
|
||||||
|
|
||||||
|
include_directories(BEFORE SYSTEM ${SPDLOG_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
link_libraries(spdlog::spdlog)
|
||||||
|
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||||
|
ExternalProject_Add(spdlog_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/spdlog-${SPDLOG_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${SPDLOG_HASH}
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||||
|
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||||
|
-DSPDLOG_BUILD_EXAMPLE=OFF
|
||||||
|
-DSPDLOG_FMT_EXTERNAL=OFF
|
||||||
|
-DSPDLOG_FMT_EXTERNAL_HO=OFF
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES spdlog_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
29
cmake/libraries/sqlite.cmake
Normal file
29
cmake/libraries/sqlite.cmake
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
if(PROJECT_ENABLE_SQLITE)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_SQLITE)
|
||||||
|
if (PROJECT_IS_MINGW AND NOT PROJECT_IS_MINGW_UNIX)
|
||||||
|
pkg_check_modules(SQLITE3 REQUIRED sqlite3)
|
||||||
|
include_directories(SYSTEM BEFORE ${SQLITE3_INCLUDE_DIRS})
|
||||||
|
link_libraries(${SQLITE3_LIBRARIES})
|
||||||
|
else()
|
||||||
|
set(SQLITE_SYSTEM_ROOT ${PROJECT_BUILD_DIR}/external/src/sqlite_project)
|
||||||
|
|
||||||
|
include_directories(SYSTEM BEFORE ${SQLITE_SYSTEM_ROOT})
|
||||||
|
|
||||||
|
list(APPEND PROJECT_ADDITIONAL_SOURCES
|
||||||
|
${SQLITE_SYSTEM_ROOT}/sqlite3.c
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
elseif(NOT PROJECT_IS_MINGW OR PROJECT_IS_MINGW_UNIX)
|
||||||
|
ExternalProject_Add(sqlite_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/sqlite-amalgamation-${SQLITE_VERSION}.zip
|
||||||
|
URL_HASH SHA256=${SQLITE_HASH}
|
||||||
|
CONFIGURE_COMMAND echo "No configure"
|
||||||
|
BUILD_COMMAND echo "No build"
|
||||||
|
INSTALL_COMMAND echo "No install"
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES sqlite_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
27
cmake/libraries/stduuid.cmake
Normal file
27
cmake/libraries/stduuid.cmake
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
if(PROJECT_ENABLE_STDUUID)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_STDUUID)
|
||||||
|
|
||||||
|
find_package(stduuid REQUIRED)
|
||||||
|
|
||||||
|
include_directories(BEFORE SYSTEM ${stduuid_INCLUDE_DIRS})
|
||||||
|
|
||||||
|
link_libraries(${stduuid_LIBRARIES})
|
||||||
|
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||||
|
ExternalProject_Add(stduuid_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/stduuid-${STDUUID_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${STDUUID_HASH}
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||||
|
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DBUILD_STATIC_LIBS=ON
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||||
|
-DUUID_BUILD_TESTS=OFF
|
||||||
|
-DUUID_ENABLE_INSTALL=ON
|
||||||
|
-DUUID_USING_CXX20_SPAN=ON
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES stduuid_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
18
cmake/libraries/testing.cmake
Normal file
18
cmake/libraries/testing.cmake
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
if (PROJECT_ENABLE_TESTING)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_TESTING)
|
||||||
|
elseif(NOT PROJECT_IS_MINGW)
|
||||||
|
ExternalProject_Add(gtest_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/googletest-${GTEST_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${GTEST_HASH}
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||||
|
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DBUILD_STATIC_LIBS=ON
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES gtest_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
24
cmake/libraries/tpl.cmake
Normal file
24
cmake/libraries/tpl.cmake
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
if(PROJECT_ENABLE_TPL)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_TPL)
|
||||||
|
|
||||||
|
find_package(tiny-process-library REQUIRED)
|
||||||
|
|
||||||
|
link_libraries(tiny-process-library::tiny-process-library)
|
||||||
|
elseif(NOT PROJECT_IS_MINGW OR CMAKE_HOST_WIN32)
|
||||||
|
ExternalProject_Add(tpl_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/tiny-process-library.tar.gz
|
||||||
|
URL_HASH SHA256=82e46657e697aff5bf980387c86ef3aa05bb184622abbd75663a4df549c68f73
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||||
|
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DBUILD_STATIC_LIBS=ON
|
||||||
|
-DBUILD_TESTING=OFF
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES tpl_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
16
cmake/libraries/vlc.cmake
Normal file
16
cmake/libraries/vlc.cmake
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
if(PROJECT_ENABLE_VLC AND PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_VLC)
|
||||||
|
if (PROJECT_IS_MINGW)
|
||||||
|
set(libvlc_INCLUDE_DIRS ${PROJECT_3RD_PARTY_DIR}/vlc/sdk/include)
|
||||||
|
|
||||||
|
set(libvlc_LIBRARIES
|
||||||
|
${PROJECT_3RD_PARTY_DIR}/vlc/sdk/lib/libvlc.lib
|
||||||
|
${PROJECT_3RD_PARTY_DIR}/vlc/sdk/lib/libvlccore.lib
|
||||||
|
)
|
||||||
|
else()
|
||||||
|
pkg_check_modules(libvlc REQUIRED libvlc>=${VLC_VERSION})
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include_directories(BEFORE SYSTEM ${libvlc_INCLUDE_DIRS})
|
||||||
|
link_libraries(${libvlc_LIBRARIES})
|
||||||
|
endif()
|
||||||
34
cmake/libraries/vorbis.cmake
Normal file
34
cmake/libraries/vorbis.cmake
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
if(PROJECT_ENABLE_VORBIS)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_VORBIS)
|
||||||
|
|
||||||
|
if(PROJECT_IS_MINGW AND NOT PROJECT_IS_MINGW_UNIX)
|
||||||
|
pkg_check_modules(VORBIS REQUIRED vorbis>=${VORBIS_VERSION})
|
||||||
|
link_libraries(${VORBIS_LINK_LIBRARIES})
|
||||||
|
else()
|
||||||
|
find_package(Vorbis ${VORBIS_VERSION} REQUIRED)
|
||||||
|
link_libraries(Vorbis::vorbis)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include_directories(BEFORE SYSTEM ${VORBIS_INCLUDE_DIRS})
|
||||||
|
elseif(NOT PROJECT_IS_MINGW)
|
||||||
|
ExternalProject_Add(vorbis_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/vorbis-v${VORBIS_VERSION}.tar.gz
|
||||||
|
URL_HASH SHA256=${VORBIS_HASH}
|
||||||
|
PATCH_COMMAND ${PROJECT_3RD_PARTY_DIR}/vorbis_patch.sh
|
||||||
|
${PROJECT_3RD_PARTY_DIR}
|
||||||
|
${CMAKE_BINARY_DIR}/external/src/vorbis_project
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||||
|
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DBUILD_STATIC_LIBS=ON
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||||
|
-DCMAKE_POLICY_VERSION_MINIMUM=3.5
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES vorbis_project)
|
||||||
|
|
||||||
|
add_dependencies(vorbis_project ogg_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
15
cmake/libraries/winfsp.cmake
Normal file
15
cmake/libraries/winfsp.cmake
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
if(PROJECT_ENABLE_WINFSP AND PROJECT_IS_MINGW)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_WINFSP)
|
||||||
|
|
||||||
|
include_directories(BEFORE SYSTEM ${PROJECT_3RD_PARTY_DIR}/winfsp-2.1/inc)
|
||||||
|
|
||||||
|
link_directories(BEFORE ${PROJECT_3RD_PARTY_DIR}/winfsp-2.1/lib)
|
||||||
|
|
||||||
|
if(PROJECT_IS_ARM64)
|
||||||
|
link_libraries(winfsp-a64)
|
||||||
|
else()
|
||||||
|
link_libraries(winfsp-x64)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
51
cmake/libraries/wxwidgets.cmake
Normal file
51
cmake/libraries/wxwidgets.cmake
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
if(PROJECT_ENABLE_WXWIDGETS)
|
||||||
|
if(PROJECT_BUILD)
|
||||||
|
add_definitions(-DPROJECT_ENABLE_WXWIDGETS)
|
||||||
|
|
||||||
|
find_package(OpenGL REQUIRED)
|
||||||
|
|
||||||
|
set(wxWidgets_USE_WINDOWS OFF)
|
||||||
|
find_package(wxWidgets ${WXWIDGETS_VERSION} REQUIRED
|
||||||
|
COMPONENTS
|
||||||
|
net
|
||||||
|
core
|
||||||
|
base
|
||||||
|
gl
|
||||||
|
adv
|
||||||
|
xml
|
||||||
|
aui
|
||||||
|
html
|
||||||
|
media
|
||||||
|
propgrid
|
||||||
|
qa
|
||||||
|
ribbon
|
||||||
|
richtext
|
||||||
|
stc
|
||||||
|
webview
|
||||||
|
xrc
|
||||||
|
)
|
||||||
|
|
||||||
|
if(wxWidgets_USE_FILE)
|
||||||
|
include(${wxWidgets_USE_FILE})
|
||||||
|
endif()
|
||||||
|
elseif(NOT PROJECT_IS_MINGW)
|
||||||
|
ExternalProject_Add(wxwidgets_project
|
||||||
|
PREFIX external
|
||||||
|
URL ${PROJECT_3RD_PARTY_DIR}/wxWidgets-${WXWIDGETS_VERSION}.tar.bz2
|
||||||
|
URL_HASH SHA256=${WXWIDGETS_HASH}
|
||||||
|
LIST_SEPARATOR |
|
||||||
|
BUILD_COMMAND
|
||||||
|
${CMAKE_COMMAND} --build . -- -j$ENV{CMAKE_BUILD_PARALLEL_LEVEL}
|
||||||
|
CMAKE_ARGS ${PROJECT_EXTERNAL_CMAKE_FLAGS}
|
||||||
|
-DBUILD_SHARED_LIBS=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
-DBUILD_STATIC_LIBS=ON
|
||||||
|
-DCMAKE_OSX_ARCHITECTURES=${CMAKE_OSX_ARCHITECTURES}
|
||||||
|
-DwxBUILD_MONOLITHIC=OFF
|
||||||
|
-DwxBUILD_SHARED=${PROJECT_BUILD_SHARED_LIBS}
|
||||||
|
)
|
||||||
|
|
||||||
|
list(APPEND PROJECT_DEPENDENCIES wxwidgets_project)
|
||||||
|
|
||||||
|
add_dependencies(wxwidgets_project curl_project)
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
40
cmake/options.cmake
Normal file
40
cmake/options.cmake
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
option(PROJECT_ENABLE_BACKWARD_CPP "Enable backward-cpp" OFF)
|
||||||
|
option(PROJECT_ENABLE_BOOST "Enable boost libraries" OFF)
|
||||||
|
option(PROJECT_ENABLE_CLI11 "Enable CLI11 library" OFF)
|
||||||
|
option(PROJECT_ENABLE_CPP_HTTPLIB "Enable cpp-httplib" OFF)
|
||||||
|
option(PROJECT_ENABLE_CURL "Enable curl library" OFF)
|
||||||
|
option(PROJECT_ENABLE_CXXOPTS "Enable cxxopts library" OFF)
|
||||||
|
option(PROJECT_ENABLE_DTL "Enable DTL" OFF)
|
||||||
|
option(PROJECT_ENABLE_FLAC "Enable FLAC library" OFF)
|
||||||
|
option(PROJECT_ENABLE_FMT "Enable fmt library" OFF)
|
||||||
|
option(PROJECT_ENABLE_FONTCONFIG "Enable fontconfig library" OFF)
|
||||||
|
option(PROJECT_ENABLE_FREETYPE2 "Enable freetype2 library" OFF)
|
||||||
|
option(PROJECT_ENABLE_FUSE "Enable FUSE" OFF)
|
||||||
|
option(PROJECT_ENABLE_FZF "Enable fzf" OFF)
|
||||||
|
option(PROJECT_ENABLE_GTKMM "Enable gtkmm" OFF)
|
||||||
|
option(PROJECT_ENABLE_JSON "Enable JSON for Modern C++ library" OFF)
|
||||||
|
option(PROJECT_ENABLE_LIBBITCOIN_SYSTEM "Enable libbitcoin-system library" OFF)
|
||||||
|
option(PROJECT_ENABLE_LIBDSM "Enable dsm library" OFF)
|
||||||
|
option(PROJECT_ENABLE_LIBEVENT "Enable libevent library" OFF)
|
||||||
|
option(PROJECT_ENABLE_LIBJPEG_TURBO "Enable libjpeg-turbo library" OFF)
|
||||||
|
option(PROJECT_ENABLE_LIBPNG "Enable libpng library" OFF)
|
||||||
|
option(PROJECT_ENABLE_LIBSODIUM "Enable libsodium library" OFF)
|
||||||
|
option(PROJECT_ENABLE_NANA "Enable nana library" OFF)
|
||||||
|
option(PROJECT_ENABLE_NUSPELL "Enable nuspell" OFF)
|
||||||
|
option(PROJECT_ENABLE_OGG "Enable OGG library" OFF)
|
||||||
|
option(PROJECT_ENABLE_OPENAL "Enable OpenAL" OFF)
|
||||||
|
option(PROJECT_ENABLE_OPENSSL "Enable OpenSSL library" OFF)
|
||||||
|
option(PROJECT_ENABLE_PUGIXML "Enable PugiXML library" OFF)
|
||||||
|
option(PROJECT_ENABLE_ROCKSDB "Enable RocksDB library" OFF)
|
||||||
|
option(PROJECT_ENABLE_SAGO_PLATFORM_FOLDERS "Enable Sago platform folders" OFF)
|
||||||
|
option(PROJECT_ENABLE_SECP256K1 "Enable secp256k1 library" OFF)
|
||||||
|
option(PROJECT_ENABLE_SFML "Enable SFML" OFF)
|
||||||
|
option(PROJECT_ENABLE_SPDLOG "Enable spdlog library" OFF)
|
||||||
|
option(PROJECT_ENABLE_SQLITE "Enable SQLite" OFF)
|
||||||
|
option(PROJECT_ENABLE_STDUUID "Enable stduuid library" OFF)
|
||||||
|
option(PROJECT_ENABLE_TESTING "Enable building unit tests" OFF)
|
||||||
|
option(PROJECT_ENABLE_TPL "Enable tiny process library" OFF)
|
||||||
|
option(PROJECT_ENABLE_VLC "Enable VLC" OFF)
|
||||||
|
option(PROJECT_ENABLE_VORBIS "Enable Vorbis library" OFF)
|
||||||
|
option(PROJECT_ENABLE_WINFSP "Enable WinFSP" OFF)
|
||||||
|
option(PROJECT_ENABLE_WXWIDGETS "Enable wxWidgets library" OFF)
|
||||||
23
cmake/os.cmake
Normal file
23
cmake/os.cmake
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
if(MSVC)
|
||||||
|
message(FATAL_ERROR "MSVC will not be supported")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(${CMAKE_SYSTEM_NAME} MATCHES "FreeBSD")
|
||||||
|
message(FATAL_ERROR "FreeBSD is not currently supported")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if(PROJECT_REQUIRE_ALPINE AND NOT PROJECT_IS_ALPINE AND PROJECT_IS_MINGW AND PROJECT_IS_MINGW_UNIX)
|
||||||
|
message(FATAL_ERROR "Project requires Alpine Linux to build")
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (PROJECT_IS_DARWIN)
|
||||||
|
if (PROJECT_IS_ARM64)
|
||||||
|
set(CMAKE_OSX_ARCHITECTURES "arm64")
|
||||||
|
else()
|
||||||
|
set(CMAKE_OSX_ARCHITECTURES "x86_64")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
|
||||||
|
if (PROJECT_IS_DARWIN AND NOT PROJECT_MACOS_BUNDLE_ID)
|
||||||
|
message(FATAL_ERROR "'PROJECT_MACOS_BUNDLE_ID' is not set in 'config.sh'")
|
||||||
|
endif()
|
||||||
51
cmake/settings.cmake
Normal file
51
cmake/settings.cmake
Normal file
@@ -0,0 +1,51 @@
|
|||||||
|
set(CMAKE_COLOR_MAKEFILE OFF)
|
||||||
|
set(CMAKE_FIND_PACKAGE_PREFER_CONFIG ON)
|
||||||
|
|
||||||
|
set(CMAKE_C_STANDARD 11)
|
||||||
|
set(CMAKE_C_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
|
set(CMAKE_CXX_STANDARD 20)
|
||||||
|
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||||
|
|
||||||
|
set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||||
|
|
||||||
|
if(PROJECT_STATIC_LINK)
|
||||||
|
set(CMAKE_POSITION_INDEPENDENT_CODE OFF)
|
||||||
|
else()
|
||||||
|
set(CMAKE_POSITION_INDEPENDENT_CODE ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
set(CMAKE_BUILD_TYPE ${PROJECT_CMAKE_BUILD_TYPE})
|
||||||
|
|
||||||
|
file(MAKE_DIRECTORY ${PROJECT_EXTERNAL_BUILD_ROOT}/lib)
|
||||||
|
file(CREATE_LINK ${PROJECT_EXTERNAL_BUILD_ROOT}/lib ${PROJECT_EXTERNAL_BUILD_ROOT}/lib64 SYMBOLIC)
|
||||||
|
|
||||||
|
list(PREPEND CMAKE_PREFIX_PATH
|
||||||
|
${PROJECT_EXTERNAL_BUILD_ROOT}
|
||||||
|
${PROJECT_EXTERNAL_BUILD_ROOT}/share
|
||||||
|
)
|
||||||
|
|
||||||
|
if(PROJECT_IS_MINGW)
|
||||||
|
list(PREPEND CMAKE_PREFIX_PATH
|
||||||
|
/mingw64
|
||||||
|
)
|
||||||
|
|
||||||
|
include_directories(BEFORE
|
||||||
|
/mingw64/include
|
||||||
|
)
|
||||||
|
|
||||||
|
link_directories(BEFORE
|
||||||
|
/mingw64/lib
|
||||||
|
/mingw64/lib64
|
||||||
|
)
|
||||||
|
endif()
|
||||||
|
|
||||||
|
include_directories(BEFORE SYSTEM
|
||||||
|
${PROJECT_SUPPORT_DIR}/include
|
||||||
|
${PROJECT_EXTERNAL_BUILD_ROOT}/include
|
||||||
|
)
|
||||||
|
|
||||||
|
link_directories(BEFORE
|
||||||
|
${PROJECT_EXTERNAL_BUILD_ROOT}/lib
|
||||||
|
${PROJECT_EXTERNAL_BUILD_ROOT}/lib64
|
||||||
|
)
|
||||||
158
common.sh
Normal file
158
common.sh
Normal file
@@ -0,0 +1,158 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
PROJECT_NAME=$1
|
||||||
|
DEST_DIR=$2
|
||||||
|
IS_UPDATE=$3
|
||||||
|
PROJECT_NAME_UPPER=$(echo ${PROJECT_NAME} | tr "[:lower:]" "[:upper:]")
|
||||||
|
|
||||||
|
if [ "$(uname -s)" == "Darwin" ]; then
|
||||||
|
PROJECT_IS_DARWIN=1
|
||||||
|
export SED=gsed
|
||||||
|
else
|
||||||
|
export SED=sed
|
||||||
|
fi
|
||||||
|
|
||||||
|
function error_exit() {
|
||||||
|
echo $1
|
||||||
|
exit $2
|
||||||
|
}
|
||||||
|
|
||||||
|
function update_file() {
|
||||||
|
local FILE=$1
|
||||||
|
${SED} -i "s/FIFTHGRID_/${PROJECT_NAME_UPPER}_/g" "${FILE}"
|
||||||
|
${SED} -i "s/fifthgrid/${PROJECT_NAME}/g" "${FILE}"
|
||||||
|
}
|
||||||
|
|
||||||
|
function update_util_sources() {
|
||||||
|
for FILE in $(find ${DEST_DIR}/support/include/ -type f -name "*.hpp"); do
|
||||||
|
update_file "${FILE}"
|
||||||
|
done
|
||||||
|
|
||||||
|
for FILE in $(find ${DEST_DIR}/support/src/ -type f -name "*.cpp"); do
|
||||||
|
update_file "${FILE}"
|
||||||
|
done
|
||||||
|
|
||||||
|
for FILE in $(find ${DEST_DIR}/support/test/ -type f -name "*.hpp"); do
|
||||||
|
update_file "${FILE}"
|
||||||
|
done
|
||||||
|
|
||||||
|
for FILE in $(find ${DEST_DIR}/support/test/ -type f -name "*.cpp"); do
|
||||||
|
update_file "${FILE}"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
function process_file() {
|
||||||
|
local FILE_NAME=$1
|
||||||
|
local SRC_FILE_NAME=$1
|
||||||
|
if [ "$2" != "" ]; then
|
||||||
|
local DEST_PART=/$2
|
||||||
|
fi
|
||||||
|
if [ "${FILE_NAME}" == "CMakeLists.txt" ]; then
|
||||||
|
local SRC_FILE_NAME="CMakeLists.txt_"
|
||||||
|
fi
|
||||||
|
if [ "${FILE_NAME}" == "main_test.cpp" ]; then
|
||||||
|
local DEST_FILE=${DEST_DIR}${DEST_PART}/main.cpp
|
||||||
|
else
|
||||||
|
local DEST_FILE=${DEST_DIR}${DEST_PART}/${FILE_NAME}
|
||||||
|
fi
|
||||||
|
|
||||||
|
rsync -av --progress src/${SRC_FILE_NAME} "${DEST_FILE}" ||
|
||||||
|
error_exit "failed to copy ${FILE_NAME}" 1
|
||||||
|
|
||||||
|
${SED} -i s/%PROJECT_NAME%/${PROJECT_NAME}/g "${DEST_FILE}" ||
|
||||||
|
error_exit "failed to set project name in ${DEST_FILE}" 1
|
||||||
|
|
||||||
|
${SED} -i s/fifthgrid/${PROJECT_NAME}/g "${DEST_FILE}" ||
|
||||||
|
error_exit "failed to set project name in ${DEST_FILE}" 1
|
||||||
|
|
||||||
|
${SED} -i s/FIFTHGRID_/${PROJECT_NAME_UPPER}_/g "${DEST_FILE}" ||
|
||||||
|
error_exit "failed to set project name in ${DEST_FILE}" 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function update_cmakelists() {
|
||||||
|
for PROJECT_LIBRARY in "${PROJECT_LIBRARIES[@]}"; do
|
||||||
|
ENABLE_NAME=PROJECT_ENABLE_${PROJECT_LIBRARY}
|
||||||
|
KEEP_NAME=PROJECT_KEEP_${PROJECT_LIBRARY}
|
||||||
|
${SED} -i "/%PROJECT_ENABLE%/i \ \ \ \ \ \ -D${ENABLE_NAME}=\$\{${ENABLE_NAME}\}" "${DEST_DIR}/CMakeLists.txt" ||
|
||||||
|
error_exit "failed to set ${ENABLE_NAME} to ${!ENABLE_NAME} in ${DEST_DIR}/CMakeLists.txt" 1
|
||||||
|
done
|
||||||
|
|
||||||
|
${SED} -i "/%PROJECT_ENABLE%/d" "${DEST_DIR}/CMakeLists.txt" ||
|
||||||
|
error_exit "failed to delete %PROJECT_ENABLE% in ${DEST_DIR}/CMakeLists.txt" 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function update_config() {
|
||||||
|
for PROJECT_LIBRARY in "${PROJECT_LIBRARIES[@]}"; do
|
||||||
|
ENABLE_NAME=PROJECT_ENABLE_${PROJECT_LIBRARY}
|
||||||
|
KEEP_NAME=PROJECT_KEEP_${PROJECT_LIBRARY}
|
||||||
|
if [ "${PROJECT_LIBRARY}" == "TESTING" ]; then
|
||||||
|
${SED} -i "/%PROJECT_ENABLE%/i ${ENABLE_NAME}=ON" "${DEST_DIR}/config.sh" ||
|
||||||
|
error_exit "failed to set ${ENABLE_NAME} to ON in ${DEST_DIR}/config.sh" 1
|
||||||
|
else
|
||||||
|
${SED} -i "/%PROJECT_ENABLE%/i ${ENABLE_NAME}=OFF" "${DEST_DIR}/config.sh" ||
|
||||||
|
error_exit "failed to set ${ENABLE_NAME} to OFF in ${DEST_DIR}/config.sh" 1
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
${SED} -i "/%PROJECT_ENABLE%/d" "${DEST_DIR}/config.sh" ||
|
||||||
|
error_exit "failed to delete %PROJECT_ENABLE% in ${DEST_DIR}/config.sh" 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function sync_common() {
|
||||||
|
rsync -av --progress .clang* "${DEST_DIR}/" ||
|
||||||
|
error_exit "failed to copy .clang*" 1
|
||||||
|
|
||||||
|
rsync -avh --delete --progress cmake/ "${DEST_DIR}/cmake/" ||
|
||||||
|
error_exit "failed to copy cmake/" 1
|
||||||
|
|
||||||
|
rsync -avh --delete --progress docker/ "${DEST_DIR}/docker/" ||
|
||||||
|
error_exit "failed to copy docker/" 1
|
||||||
|
|
||||||
|
rsync -avh --delete --progress src/scripts/ "${DEST_DIR}/scripts/" ||
|
||||||
|
error_exit "failed to copy src/scripts/" 1
|
||||||
|
|
||||||
|
rsync -avh --delete --progress support/ "${DEST_DIR}/support/" ||
|
||||||
|
error_exit "failed to copy support/" 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function sync_create() {
|
||||||
|
rsync -avh --delete --progress .cspell/* "${DEST_DIR}/.cspell/" ||
|
||||||
|
error_exit "failed to copy .cpsell/" 1
|
||||||
|
|
||||||
|
rsync -av --progress .gitignore "${DEST_DIR}/" ||
|
||||||
|
error_exit "failed to copy .gitignore" 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function create_versions_cmake() {
|
||||||
|
VERSION_LIST=()
|
||||||
|
for NAME in "${!PROJECT_VERSIONS[@]}"; do
|
||||||
|
VERSION_LIST+=("set(${NAME}_VERSION ${PROJECT_VERSIONS[${NAME}]})")
|
||||||
|
done
|
||||||
|
(printf "%s\n" "${VERSION_LIST[@]}" | sort) >${DEST_DIR}/cmake/versions.cmake
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "${PROJECT_NAME}" == "" ]; then
|
||||||
|
error_exit "missing project name" 2
|
||||||
|
else
|
||||||
|
if [ "${DEST_DIR}" == "" ]; then
|
||||||
|
DEST_DIR=${CURRENT_DIR}
|
||||||
|
fi
|
||||||
|
DEST_DIR=${DEST_DIR}/${PROJECT_NAME}
|
||||||
|
|
||||||
|
if [ "${IS_UPDATE}" == "0" ] && [ -d "${DEST_DIR}" ]; then
|
||||||
|
error_exit "dest directory already exists: ${DEST_DIR}" 2
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p "${DEST_DIR}"
|
||||||
|
DEST_DIR=$(realpath "${DEST_DIR}")
|
||||||
|
if [ "${IS_UPDATE}" == "1" ] && [ ! -d "${DEST_DIR}" ]; then
|
||||||
|
error_exit "dest directory not found: ${DEST_DIR}" 2
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p "${DEST_DIR}/${PROJECT_NAME}/${PROJECT_NAME}/include/"
|
||||||
|
mkdir -p "${DEST_DIR}/${PROJECT_NAME}/${PROJECT_NAME}/src/"
|
||||||
|
mkdir -p "${DEST_DIR}/${PROJECT_NAME}/${PROJECT_NAME}_test/include/"
|
||||||
|
mkdir -p "${DEST_DIR}/${PROJECT_NAME}/${PROJECT_NAME}_test/src/"
|
||||||
|
mkdir -p "${DEST_DIR}/${PROJECT_NAME}/lib${PROJECT_NAME}/include/"
|
||||||
|
mkdir -p "${DEST_DIR}/${PROJECT_NAME}/lib${PROJECT_NAME}/src/"
|
||||||
8
create_project.cmd
Normal file
8
create_project.cmd
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
@echo off
|
||||||
|
|
||||||
|
setlocal
|
||||||
|
|
||||||
|
pushd "%~dp0%"
|
||||||
|
call src\scripts\setup_msys2.cmd
|
||||||
|
call mingw64 -no-start ./create_project.sh "%1" "%2"
|
||||||
|
popd
|
||||||
50
create_project.sh
Normal file
50
create_project.sh
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
CURRENT_DIR=$(realpath "$0")
|
||||||
|
CURRENT_DIR=$(dirname "${CURRENT_DIR}")
|
||||||
|
. "${CURRENT_DIR}/common.sh" "$1" "$2" 0
|
||||||
|
|
||||||
|
pushd "${DEST_DIR}"
|
||||||
|
git init . || error_exit "failed to execute 'git init .'" 1
|
||||||
|
popd
|
||||||
|
|
||||||
|
sync_common
|
||||||
|
sync_create
|
||||||
|
|
||||||
|
. "${CURRENT_DIR}/src/scripts/versions.sh"
|
||||||
|
. "${CURRENT_DIR}/src/scripts/libraries.sh"
|
||||||
|
|
||||||
|
create_versions_cmake
|
||||||
|
|
||||||
|
process_file .jenkins_builds
|
||||||
|
process_file .jenkins_macos
|
||||||
|
process_file .nvimrc
|
||||||
|
process_file CMakeLists.txt
|
||||||
|
process_file config.sh
|
||||||
|
process_file initialize.hpp ${PROJECT_NAME}/lib${PROJECT_NAME}/include
|
||||||
|
process_file initialize.cpp ${PROJECT_NAME}/lib${PROJECT_NAME}/src
|
||||||
|
process_file main.cpp ${PROJECT_NAME}/${PROJECT_NAME}
|
||||||
|
process_file main_test.cpp ${PROJECT_NAME}/${PROJECT_NAME}_test
|
||||||
|
process_file project.cmake
|
||||||
|
process_file version.hpp ${PROJECT_NAME}/lib${PROJECT_NAME}/include
|
||||||
|
process_file version.cpp.in ${PROJECT_NAME}
|
||||||
|
process_file version.rc.in ${PROJECT_NAME}
|
||||||
|
|
||||||
|
update_config
|
||||||
|
update_cmakelists
|
||||||
|
|
||||||
|
echo "" >>"${DEST_DIR}/.cspell/words.txt"
|
||||||
|
echo lib${PROJECT_NAME} >>"${DEST_DIR}/.cspell/words.txt"
|
||||||
|
|
||||||
|
update_util_sources
|
||||||
|
|
||||||
|
pushd "${DEST_DIR}"
|
||||||
|
git lfs track "*.exe"
|
||||||
|
git lfs track "*.msi"
|
||||||
|
git lfs track "*.tar.gz"
|
||||||
|
git lfs track "*.tar.xz"
|
||||||
|
git lfs track "*.tgz"
|
||||||
|
git lfs track "*.zip"
|
||||||
|
git add .gitattributes
|
||||||
|
git commit -m "Added .gitattributes"
|
||||||
|
popd
|
||||||
84
docker/aarch64/alpine
Normal file
84
docker/aarch64/alpine
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
#comment
|
||||||
|
FROM arm64v8/alpine:3.22.2
|
||||||
|
MAINTAINER Scott E. Graves <scott.e.graves@protonmail.com>
|
||||||
|
CMD bash
|
||||||
|
|
||||||
|
RUN apk update
|
||||||
|
RUN apk upgrade
|
||||||
|
RUN apk add \
|
||||||
|
autoconf \
|
||||||
|
automake \
|
||||||
|
bash \
|
||||||
|
binutils \
|
||||||
|
binutils-dev \
|
||||||
|
bison \
|
||||||
|
boost-dev \
|
||||||
|
bzip2-static \
|
||||||
|
cmake \
|
||||||
|
diffutils \
|
||||||
|
elfutils-dev \
|
||||||
|
file \
|
||||||
|
fontconfig-dev \
|
||||||
|
fontconfig-static \
|
||||||
|
freetype \
|
||||||
|
freetype-dev \
|
||||||
|
freetype-static \
|
||||||
|
fuse3 \
|
||||||
|
fuse3-dev \
|
||||||
|
fuse3-static \
|
||||||
|
g++ \
|
||||||
|
gcc \
|
||||||
|
gflags \
|
||||||
|
gflags-dev \
|
||||||
|
git \
|
||||||
|
git-lfs \
|
||||||
|
libogg-dev \
|
||||||
|
libogg-static \
|
||||||
|
libtool \
|
||||||
|
libudev-zero \
|
||||||
|
libudev-zero-dev \
|
||||||
|
libunwind \
|
||||||
|
libunwind-dev \
|
||||||
|
libunwind-static \
|
||||||
|
liburing \
|
||||||
|
liburing-dev \
|
||||||
|
libvorbis-dev \
|
||||||
|
libvorbis-static \
|
||||||
|
libx11-dev \
|
||||||
|
libx11-static \
|
||||||
|
libxcursor \
|
||||||
|
libxcursor-dev \
|
||||||
|
libxrandr \
|
||||||
|
libxrandr-dev \
|
||||||
|
linux-headers \
|
||||||
|
make \
|
||||||
|
mesa \
|
||||||
|
mesa-dev \
|
||||||
|
meson \
|
||||||
|
musl-dev \
|
||||||
|
ninja \
|
||||||
|
openal-soft-dev \
|
||||||
|
openal-soft-libs \
|
||||||
|
openssl \
|
||||||
|
patch \
|
||||||
|
perl \
|
||||||
|
pkgconfig \
|
||||||
|
rsync \
|
||||||
|
tcl \
|
||||||
|
tcl-dev \
|
||||||
|
texinfo \
|
||||||
|
wget \
|
||||||
|
xz \
|
||||||
|
xz-dev \
|
||||||
|
xz-libs \
|
||||||
|
zlib \
|
||||||
|
zlib-dev \
|
||||||
|
zlib-static \
|
||||||
|
zstd \
|
||||||
|
zstd-dev \
|
||||||
|
zstd-libs \
|
||||||
|
zstd-static \
|
||||||
|
xz-static
|
||||||
|
|
||||||
|
RUN ln -sf /usr/bin/aclocal-1.17 /usr/bin/aclocal-1.16
|
||||||
|
RUN ln -sf /usr/bin/automake-1.17 /usr/bin/automake-1.16
|
||||||
84
docker/x86_64/alpine
Normal file
84
docker/x86_64/alpine
Normal file
@@ -0,0 +1,84 @@
|
|||||||
|
#comment
|
||||||
|
FROM alpine:3.22.2
|
||||||
|
MAINTAINER Scott E. Graves <scott.e.graves@protonmail.com>
|
||||||
|
CMD bash
|
||||||
|
|
||||||
|
RUN apk update
|
||||||
|
RUN apk upgrade
|
||||||
|
RUN apk add \
|
||||||
|
autoconf \
|
||||||
|
automake \
|
||||||
|
bash \
|
||||||
|
binutils \
|
||||||
|
binutils-dev \
|
||||||
|
bison \
|
||||||
|
boost-dev \
|
||||||
|
bzip2-static \
|
||||||
|
cmake \
|
||||||
|
diffutils \
|
||||||
|
elfutils-dev \
|
||||||
|
file \
|
||||||
|
fontconfig-dev \
|
||||||
|
fontconfig-static \
|
||||||
|
freetype \
|
||||||
|
freetype-dev \
|
||||||
|
freetype-static \
|
||||||
|
fuse3 \
|
||||||
|
fuse3-dev \
|
||||||
|
fuse3-static \
|
||||||
|
g++ \
|
||||||
|
gcc \
|
||||||
|
gflags \
|
||||||
|
gflags-dev \
|
||||||
|
git \
|
||||||
|
git-lfs \
|
||||||
|
libogg-dev \
|
||||||
|
libogg-static \
|
||||||
|
libtool \
|
||||||
|
libudev-zero \
|
||||||
|
libudev-zero-dev \
|
||||||
|
libunwind \
|
||||||
|
libunwind-dev \
|
||||||
|
libunwind-static \
|
||||||
|
liburing \
|
||||||
|
liburing-dev \
|
||||||
|
libvorbis-dev \
|
||||||
|
libvorbis-static \
|
||||||
|
libx11-dev \
|
||||||
|
libx11-static \
|
||||||
|
libxcursor \
|
||||||
|
libxcursor-dev \
|
||||||
|
libxrandr \
|
||||||
|
libxrandr-dev \
|
||||||
|
linux-headers \
|
||||||
|
make \
|
||||||
|
mesa \
|
||||||
|
mesa-dev \
|
||||||
|
meson \
|
||||||
|
musl-dev \
|
||||||
|
ninja \
|
||||||
|
openal-soft-dev \
|
||||||
|
openal-soft-libs \
|
||||||
|
openssl \
|
||||||
|
patch \
|
||||||
|
perl \
|
||||||
|
pkgconfig \
|
||||||
|
rsync \
|
||||||
|
tcl \
|
||||||
|
tcl-dev \
|
||||||
|
texinfo \
|
||||||
|
wget \
|
||||||
|
xz \
|
||||||
|
xz-dev \
|
||||||
|
xz-libs \
|
||||||
|
zlib \
|
||||||
|
zlib-dev \
|
||||||
|
zlib-static \
|
||||||
|
zstd \
|
||||||
|
zstd-dev \
|
||||||
|
zstd-libs \
|
||||||
|
zstd-static \
|
||||||
|
xz-static
|
||||||
|
|
||||||
|
RUN ln -sf /usr/bin/aclocal-1.17 /usr/bin/aclocal-1.16
|
||||||
|
RUN ln -sf /usr/bin/automake-1.17 /usr/bin/automake-1.16
|
||||||
47
docker/x86_64/flutter
Normal file
47
docker/x86_64/flutter
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
FROM debian:latest
|
||||||
|
|
||||||
|
ARG UID=0
|
||||||
|
ARG GID=0
|
||||||
|
|
||||||
|
RUN apt-get update
|
||||||
|
RUN apt-get install -y \
|
||||||
|
bash \
|
||||||
|
curl \
|
||||||
|
fonts-droid-fallback \
|
||||||
|
gdb \
|
||||||
|
git \
|
||||||
|
lib32stdc++6 \
|
||||||
|
libglu1-mesa \
|
||||||
|
libstdc++6 \
|
||||||
|
python3 \
|
||||||
|
unzip \
|
||||||
|
wget
|
||||||
|
RUN apt-get clean
|
||||||
|
|
||||||
|
RUN git clone https://github.com/flutter/flutter.git /flutter
|
||||||
|
RUN git config --system --add safe.directory /flutter
|
||||||
|
|
||||||
|
ENV PATH="/flutter/bin:/flutter/bin/cache/dart-sdk/bin:${PATH}"
|
||||||
|
|
||||||
|
RUN flutter doctor -v
|
||||||
|
RUN flutter channel master
|
||||||
|
RUN flutter upgrade
|
||||||
|
RUN flutter --disable-analytics
|
||||||
|
|
||||||
|
RUN flutter config --no-analytics
|
||||||
|
RUN flutter config --enable-web
|
||||||
|
RUN flutter config --no-cli-animations
|
||||||
|
|
||||||
|
RUN mkdir /nonexistent
|
||||||
|
RUN chown -R $UID:$GID /nonexistent
|
||||||
|
|
||||||
|
RUN mkdir /.config
|
||||||
|
RUN chown -R $UID:$GID /.config
|
||||||
|
|
||||||
|
RUN mkdir /.dart-tool
|
||||||
|
RUN chown -R $UID:$GID /.dart-tool
|
||||||
|
|
||||||
|
RUN mkdir /.pub-cache
|
||||||
|
RUN chown -R $UID:$GID /.pub-cache
|
||||||
|
|
||||||
|
RUN chown -R $UID:$GID /flutter
|
||||||
1189
docker/x86_64/mingw64
Normal file
1189
docker/x86_64/mingw64
Normal file
File diff suppressed because it is too large
Load Diff
71
grab_packages.sh
Normal file
71
grab_packages.sh
Normal file
@@ -0,0 +1,71 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
CURRENT_DIR=$(realpath "$0")
|
||||||
|
CURRENT_DIR=$(dirname "${CURRENT_DIR}")
|
||||||
|
|
||||||
|
. "${CURRENT_DIR}/src/scripts/versions.sh"
|
||||||
|
. "${CURRENT_DIR}/src/scripts/libraries.sh"
|
||||||
|
|
||||||
|
function check_should_update() {
|
||||||
|
local NAME=$1
|
||||||
|
local ITEM_LIST=(${PROJECT_DOWNLOADS[${NAME}]//;/ })
|
||||||
|
if [ ! -f "${CURRENT_DIR}/support/${ITEM_LIST[2]}/${ITEM_LIST[1]}" ] ||
|
||||||
|
[ ! -f "${CURRENT_DIR}/support/${ITEM_LIST[2]}/${ITEM_LIST[1]}.sha256" ]; then
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
return 1
|
||||||
|
}
|
||||||
|
|
||||||
|
function download_and_update_hash() {
|
||||||
|
local NAME=$1
|
||||||
|
local ITEM_LIST=(${PROJECT_DOWNLOADS[${NAME}]//;/ })
|
||||||
|
if [ ! -f "${CURRENT_DIR}/support/${ITEM_LIST[2]}/${ITEM_LIST[1]}" ] ||
|
||||||
|
[ ! -f "${CURRENT_DIR}/support/${ITEM_LIST[2]}/${ITEM_LIST[1]}.sha256" ]; then
|
||||||
|
local CLEANUP_LIST=(${PROJECT_CLEANUP[${NAME}]//:/ })
|
||||||
|
if [ "${NAME}" == "GTEST" ]; then
|
||||||
|
CLEANUP_LIST=(${PROJECT_CLEANUP["TESTING"]//:/ })
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${NAME}" != "BOOST" ] && [ "${NAME}" != "BOOST2" ] && [ "${CLEANUP_LIST[0]}" != "" ]; then
|
||||||
|
rm -r ${CURRENT_DIR}/support/${CLEANUP_LIST[0]}
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -f "${CURRENT_DIR}/support/${ITEM_LIST[2]}/${ITEM_LIST[1]}"
|
||||||
|
rm -f "${CURRENT_DIR}/support/${ITEM_LIST[2]}/${ITEM_LIST[1]}.sha256"
|
||||||
|
|
||||||
|
if ! wget ${ITEM_LIST[0]} -O "${CURRENT_DIR}/support/${ITEM_LIST[2]}/${ITEM_LIST[1]}"; then
|
||||||
|
echo "failed $NAME"
|
||||||
|
rm -f "${CURRENT_DIR}/support/${ITEM_LIST[2]}/${ITEM_LIST[1]}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
pushd "${CURRENT_DIR}/support/${ITEM_LIST[2]}"
|
||||||
|
sha256sum ${ITEM_LIST[1]} >${ITEM_LIST[1]}.sha256
|
||||||
|
popd
|
||||||
|
fi
|
||||||
|
|
||||||
|
local HASH=$(cat support/${ITEM_LIST[2]}/${ITEM_LIST[1]}.sha256 | awk '{print $1}')
|
||||||
|
HASH_LIST+=("set(${NAME}_HASH ${HASH})")
|
||||||
|
}
|
||||||
|
|
||||||
|
function create_hashes_cmake() {
|
||||||
|
for NAME in "${!PROJECT_DOWNLOADS[@]}"; do
|
||||||
|
if [ "${NAME}" != "BOOST" ] && [ "${NAME}" != "BOOST2" ]; then
|
||||||
|
download_and_update_hash $NAME
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
pushd "${CURRENT_DIR}"
|
||||||
|
HASH_LIST=()
|
||||||
|
create_hashes_cmake
|
||||||
|
|
||||||
|
if check_should_update BOOST || check_should_update BOOST2; then
|
||||||
|
rm -f support/3rd_party/boost_*
|
||||||
|
fi
|
||||||
|
|
||||||
|
download_and_update_hash BOOST
|
||||||
|
download_and_update_hash BOOST2
|
||||||
|
|
||||||
|
(printf "%s\n" "${HASH_LIST[@]}" | sort) >${CURRENT_DIR}/cmake/hashes.cmake
|
||||||
|
popd
|
||||||
95
scripts/common.sh
Normal file
95
scripts/common.sh
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
SCRIPTS_DIR=$(dirname "$0")
|
||||||
|
SCRIPTS_DIR=$(realpath ${SCRIPTS_DIR})
|
||||||
|
|
||||||
|
SOURCE_DIR=${SCRIPTS_DIR}/..
|
||||||
|
SOURCE_DIR=$(realpath "${SOURCE_DIR}")
|
||||||
|
|
||||||
|
TEST_DIR=${SOURCE_DIR}/build
|
||||||
|
|
||||||
|
PLATFORM=$1
|
||||||
|
BUILD_TYPE=$2
|
||||||
|
WITH_TYPE=$3
|
||||||
|
BUILD_ARCH=$4
|
||||||
|
|
||||||
|
if [ "$(uname -s)" == "Darwin" ]; then
|
||||||
|
export SED=gsed
|
||||||
|
else
|
||||||
|
export SED=sed
|
||||||
|
fi
|
||||||
|
|
||||||
|
function error_exit() {
|
||||||
|
echo $1
|
||||||
|
exit $2
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ "${BUILD_TYPE}" != "shared" ] && [ "${BUILD_TYPE}" != "static" ]; then
|
||||||
|
error_exit "must specify 'shared' or 'static'" 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${TEST_DIR}" == "" ]; then
|
||||||
|
error_exit "TEST_DIR is not set" 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
mkdir -p "${TEST_DIR}"
|
||||||
|
|
||||||
|
NAME=${PLATFORM}_${BUILD_TYPE}
|
||||||
|
if [ "${WITH_TYPE}" == "1" ]; then
|
||||||
|
NAME=${NAME}_crypto
|
||||||
|
elif [ "${WITH_TYPE}" == "2" ]; then
|
||||||
|
NAME=${NAME}_dsm
|
||||||
|
elif [ "${WITH_TYPE}" == "3" ]; then
|
||||||
|
NAME=${NAME}_sqlite
|
||||||
|
elif [ "${WITH_TYPE}" == "4" ]; then
|
||||||
|
NAME=${NAME}_errors_v1
|
||||||
|
elif [ "${WITH_TYPE}" == "5" ]; then
|
||||||
|
NAME=${NAME}_fmt
|
||||||
|
elif [ "${WITH_TYPE}" == "6" ]; then
|
||||||
|
NAME=${NAME}_libevent
|
||||||
|
elif [ "${WITH_TYPE}" == "7" ]; then
|
||||||
|
NAME=${NAME}_crypto_no_boost
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${BUILD_ARCH}" != "" ]; then
|
||||||
|
NAME=${NAME}_libevent_${BUILD_ARCH}
|
||||||
|
fi
|
||||||
|
|
||||||
|
rm -rf "${TEST_DIR}/${NAME}"
|
||||||
|
|
||||||
|
pushd "${SOURCE_DIR}"
|
||||||
|
./create_project.sh ${NAME} ${TEST_DIR} || error_exit "failed to create ${PLATFORM} project" 2
|
||||||
|
popd
|
||||||
|
|
||||||
|
pushd "${TEST_DIR}/${NAME}"
|
||||||
|
if [ "${WITH_TYPE}" == "1" ]; then
|
||||||
|
${SED} -i "s/PROJECT_ENABLE_LIBSODIUM=OFF/PROJECT_ENABLE_LIBSODIUM=ON/g" ./config.sh
|
||||||
|
${SED} -i "s/PROJECT_ENABLE_BOOST=OFF/PROJECT_ENABLE_BOOST=ON/g" ./config.sh
|
||||||
|
${SED} -i "s/PROJECT_ENABLE_JSON=OFF/PROJECT_ENABLE_JSON=ON/g" ./config.sh
|
||||||
|
elif [ "${WITH_TYPE}" == "2" ]; then
|
||||||
|
${SED} -i "s/PROJECT_ENABLE_LIBDSM=OFF/PROJECT_ENABLE_LIBDSM=ON/g" ./config.sh
|
||||||
|
elif [ "${WITH_TYPE}" == "3" ]; then
|
||||||
|
${SED} -i "s/PROJECT_ENABLE_SQLITE=OFF/PROJECT_ENABLE_SQLITE=ON/g" ./config.sh
|
||||||
|
elif [ "${WITH_TYPE}" == "4" ]; then
|
||||||
|
${SED} -i "s/PROJECT_ENABLE_V2_ERRORS=ON/PROJECT_ENABLE_V2_ERRORS=OFF/g" ./config.sh
|
||||||
|
elif [ "${WITH_TYPE}" == "5" ]; then
|
||||||
|
${SED} -i "s/PROJECT_ENABLE_FMT=OFF/PROJECT_ENABLE_FMT=ON/g" ./config.sh
|
||||||
|
elif [ "${WITH_TYPE}" == "6" ]; then
|
||||||
|
${SED} -i "s/PROJECT_ENABLE_LIBEVENT=OFF/PROJECT_ENABLE_LIBEVENT=ON/g" ./config.sh
|
||||||
|
elif [ "${WITH_TYPE}" == "7" ]; then
|
||||||
|
${SED} -i "s/PROJECT_ENABLE_LIBSODIUM=OFF/PROJECT_ENABLE_LIBSODIUM=ON/g" ./config.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "${BUILD_TYPE}" == "shared" ]; then
|
||||||
|
${SED} -i "s/PROJECT_STATIC_LINK=ON/PROJECT_STATIC_LINK=OFF/g" ./config.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
./scripts/make_${PLATFORM}.sh "${BUILD_ARCH}" || error_exit "build ${PLATFORM} ${BUILD_ARCH} failed" 3
|
||||||
|
if [ "${PLATFORM}" == "win32" ]; then
|
||||||
|
./scripts/run_tests.sh "${BUILD_ARCH}" "" "" 1 1 || error_exit "testing ${PLATFORM} failed" 4
|
||||||
|
else
|
||||||
|
./scripts/run_tests.sh "${BUILD_ARCH}" || error_exit "testing ${PLATFORM} ${BUILD_ARCH} failed" 4
|
||||||
|
fi
|
||||||
|
popd
|
||||||
|
|
||||||
|
rm -rf "${TEST_DIR}/${NAME}"
|
||||||
6
scripts/test_unix.sh
Normal file
6
scripts/test_unix.sh
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
SCRIPTS_DIR=$(dirname "$0")
|
||||||
|
SCRIPTS_DIR=$(realpath ${SCRIPTS_DIR})
|
||||||
|
|
||||||
|
"${SCRIPTS_DIR}/common.sh" unix "$1" "$2" "$3"
|
||||||
6
scripts/test_win32.sh
Normal file
6
scripts/test_win32.sh
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
SCRIPTS_DIR=$(dirname "$0")
|
||||||
|
SCRIPTS_DIR=$(realpath ${SCRIPTS_DIR})
|
||||||
|
|
||||||
|
"${SCRIPTS_DIR}/common.sh" win32 "$1" "$2"
|
||||||
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
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user