Merge pull request #457 from dpaulat/feature/setup-cleanup

CMake Setup, CMakePresets and Python Virtual Environments
This commit is contained in:
Dan Paulat 2025-06-07 08:47:33 -05:00 committed by GitHub
commit 4425c53c8e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
38 changed files with 841 additions and 153 deletions

View file

@ -20,7 +20,7 @@ jobs:
fail-fast: false
matrix:
include:
- name: win64_msvc2022
- name: windows_msvc2022_x64
os: windows-2022
build_type: Release
env_cc: ''
@ -34,7 +34,7 @@ jobs:
qt_modules: qtimageformats qtmultimedia qtpositioning qtserialport
qt_tools: ''
conan_package_manager: ''
conan_profile: scwx-win64_msvc2022
conan_profile: scwx-windows_msvc2022_x64
appimage_arch: ''
artifact_suffix: windows-x64
- name: linux_gcc_x64

10
.gitignore vendored
View file

@ -12,3 +12,13 @@ install_manifest.txt
compile_commands.json
CTestTestfile.cmake
_deps
# Editor directories
.idea/
.vs/
# Python Virtual Environment
.venv/
# Specific excludes for Supercell Wx
tools/lib/user-setup.sh

View file

@ -1,5 +1,10 @@
cmake_minimum_required(VERSION 3.24)
set(PROJECT_NAME supercell-wx)
include(tools/scwx_config.cmake)
scwx_python_setup()
project(${PROJECT_NAME}
VERSION 0.4.9
DESCRIPTION "Supercell Wx is a free, open source advanced weather radar viewer."
@ -11,8 +16,6 @@ set(CMAKE_POLICY_DEFAULT_CMP0077 NEW)
set(CMAKE_POLICY_DEFAULT_CMP0079 NEW)
set(CMAKE_POLICY_DEFAULT_CMP0148 OLD) # aws-sdk-cpp uses FindPythonInterp
include(tools/scwx_config.cmake)
scwx_output_dirs_setup()
enable_testing()

267
CMakePresets.json Normal file
View file

@ -0,0 +1,267 @@
{
"version": 5,
"cmakeMinimumRequired": {
"major": 3,
"minor": 24,
"patch": 0
},
"configurePresets": [
{
"name": "base",
"hidden": true,
"generator": "Ninja",
"binaryDir": "${sourceDir}/build/${presetName}",
"cacheVariables": {
"CMAKE_PROJECT_TOP_LEVEL_INCLUDES": "${sourceDir}/external/cmake-conan/conan_provider.cmake",
"SCWX_VIRTUAL_ENV": "${sourceDir}/.venv"
}
},
{
"name": "windows-base",
"inherits": "base",
"hidden": true,
"generator": "Visual Studio 17 2022",
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Windows"
},
"vendor": {
"microsoft.com/VisualStudioSettings/CMake/1.0": {
"hostOS": [
"Windows"
]
}
}
},
{
"name": "windows-x64-base",
"inherits": "windows-base",
"hidden": true
},
{
"name": "linux-base",
"inherits": "base",
"hidden": true,
"condition": {
"type": "equals",
"lhs": "${hostSystemName}",
"rhs": "Linux"
}
},
{
"name": "windows-msvc2022-x64-base",
"inherits": "windows-x64-base",
"hidden": true,
"cacheVariables": {
"CMAKE_PREFIX_PATH": "C:/Qt/6.8.3/msvc2022_64",
"CONAN_HOST_PROFILE": "scwx-windows_msvc2022_x64",
"CONAN_BUILD_PROFILE": "scwx-windows_msvc2022_x64"
}
},
{
"name": "windows-msvc2022-x64-ninja-base",
"inherits": "windows-msvc2022-x64-base",
"hidden": true,
"generator": "Ninja",
"cacheVariables": {
"CMAKE_PREFIX_PATH": "C:/Qt/6.8.3/msvc2022_64",
"CONAN_HOST_PROFILE": "scwx-windows_msvc2022_x64",
"CONAN_BUILD_PROFILE": "scwx-windows_msvc2022_x64"
}
},
{
"name": "linux-gcc-base",
"inherits": "linux-base",
"hidden": true,
"cacheVariables": {
"CMAKE_PREFIX_PATH": "/opt/Qt/6.8.3/gcc_64",
"CONAN_HOST_PROFILE": "scwx-linux_gcc-11",
"CONAN_BUILD_PROFILE": "scwx-linux_gcc-11"
},
"environment": {
"CC": "gcc-11",
"CXX": "g++-11"
}
},
{
"name": "windows-msvc2022-x64-debug",
"inherits": "windows-msvc2022-x64-base",
"displayName": "Windows MSVC 2022 x64 Debug",
"architecture": {
"value": "x64",
"strategy": "external"
},
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "windows-msvc2022-x64-release",
"inherits": "windows-msvc2022-x64-base",
"displayName": "Windows MSVC 2022 x64 Release",
"architecture": {
"value": "x64",
"strategy": "external"
},
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
},
{
"name": "windows-msvc2022-x64-ninja-debug",
"inherits": "windows-msvc2022-x64-ninja-base",
"displayName": "Windows MSVC 2022 x64 Ninja Debug",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "windows-msvc2022-x64-ninja-release",
"inherits": "windows-msvc2022-x64-ninja-base",
"displayName": "Windows MSVC 2022 x64 Ninja Release",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
},
{
"name": "linux-gcc-debug",
"inherits": "linux-gcc-base",
"displayName": "Linux GCC Debug",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/build/${presetName}/Debug/supercell-wx"
}
},
{
"name": "linux-gcc-release",
"inherits": "linux-gcc-base",
"displayName": "Linux GCC Release",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/build/${presetName}/Release/supercell-wx"
}
},
{
"name": "linux-gcc-debug-asan",
"inherits": "linux-gcc-base",
"displayName": "Linux GCC Debug Address Sanitizer",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/build/${presetName}/Debug/supercell-wx",
"SCWX_ADDRESS_SANITIZER": {
"type": "BOOL",
"value": "ON"
}
}
},
{
"name": "linux-gcc-release-asan",
"inherits": "linux-gcc-base",
"displayName": "Linux GCC Release Address Sanitizer",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CMAKE_INSTALL_PREFIX": "${sourceDir}/build/${presetName}/Release/supercell-wx",
"SCWX_ADDRESS_SANITIZER": {
"type": "BOOL",
"value": "ON"
}
}
},
{
"name": "ci-linux-gcc14",
"inherits": "linux-gcc-base",
"displayName": "CI Linux GCC 14",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CONAN_HOST_PROFILE": "scwx-linux_gcc-14",
"CONAN_BUILD_PROFILE": "scwx-linux_gcc-14"
},
"environment": {
"CC": "gcc-14",
"CXX": "g++-14"
}
},
{
"name": "ci-linux-clang17",
"inherits": "linux-gcc-base",
"displayName": "CI Linux Clang 17",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CONAN_HOST_PROFILE": "scwx-linux_clang-17",
"CONAN_BUILD_PROFILE": "scwx-linux_clang-17"
},
"environment": {
"CC": "clang-17",
"CXX": "clang++-17"
}
},
{
"name": "ci-linux-gcc-arm64",
"inherits": "linux-gcc-base",
"displayName": "CI Linux GCC ARM64",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release",
"CONAN_HOST_PROFILE": "scwx-linux_gcc-11_armv8",
"CONAN_BUILD_PROFILE": "scwx-linux_gcc-11_armv8",
"CMAKE_PREFIX_PATH": "/opt/Qt/6.8.3/gcc_arm64"
},
"environment": {
"CC": "gcc-11",
"CXX": "g++-11"
}
}
],
"buildPresets": [
{
"name": "windows-msvc2022-x64-debug",
"configurePreset": "windows-msvc2022-x64-debug",
"displayName": "Windows MSVC 2022 x64 Debug",
"configuration": "Debug"
},
{
"name": "windows-msvc2022-x64-release",
"configurePreset": "windows-msvc2022-x64-release",
"displayName": "Windows MSVC 2022 x64 Release",
"configuration": "Release"
},
{
"name": "linux-gcc-debug",
"configurePreset": "linux-gcc-debug",
"displayName": "Linux GCC Debug",
"configuration": "Debug"
},
{
"name": "linux-gcc-release",
"configurePreset": "linux-gcc-release",
"displayName": "Linux GCC Release",
"configuration": "Release"
}
],
"testPresets": [
{
"name": "windows-msvc2022-x64-debug",
"configurePreset": "windows-msvc2022-x64-debug",
"displayName": "Windows MSVC 2022 x64 Debug",
"configuration": "Debug"
},
{
"name": "windows-msvc2022-x64-release",
"configurePreset": "windows-msvc2022-x64-release",
"displayName": "Windows MSVC 2022 x64 Release",
"configuration": "Release"
},
{
"name": "linux-gcc-debug",
"configurePreset": "linux-gcc-debug",
"displayName": "Linux GCC Debug",
"configuration": "Debug"
},
{
"name": "linux-gcc-release",
"configurePreset": "linux-gcc-release",
"displayName": "Linux GCC Release",
"configuration": "Release"
}
]
}

View file

@ -1,6 +1,6 @@
The MIT License (MIT)
Copyright (c) 2021-2024 Dan Paulat
Copyright (c) 2021-2025 Dan Paulat
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal

View file

@ -37,8 +37,6 @@ class SupercellWxConan(ConanFile):
self.options["libcurl"].ca_path = "none"
def requirements(self):
self.requires("abseil/20250127.0", override=True)
if self.settings.os == "Linux":
self.requires("onetbb/2022.0.0")

View file

@ -46,7 +46,7 @@ target_compile_definitions(qt6ct-common PRIVATE QT6CT_LIBRARY)
add_library(qt6ct-widgets STATIC ${qt6ct-widgets-source})
set_target_properties(qt6ct-widgets PROPERTIES VERSION ${QT6CT_VERSION})
target_link_libraries(qt6ct-widgets PRIVATE Qt6::Widgets Qt6::WidgetsPrivate qt6ct-common)
target_link_libraries(qt6ct-widgets PRIVATE Qt6::Widgets qt6ct-common)
target_compile_definitions(qt6ct-widgets PRIVATE QT6CT_LIBRARY)
if (MSVC)

3
requirements.txt Normal file
View file

@ -0,0 +1,3 @@
conan
geopandas
GitPython

View file

@ -6,7 +6,7 @@ set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTORCC OFF)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
@ -483,11 +483,12 @@ set(PROJECT_SOURCES ${HDR_MAIN}
${SRC_VIEW}
${SHADER_FILES}
${JSON_FILES}
${RESOURCE_FILES}
${TS_FILES}
${CMAKE_FILES})
set(EXECUTABLE_SOURCES ${SRC_EXE_MAIN})
qt_add_resources(PROJECT_SOURCES ${RESOURCE_FILES})
source_group("Header Files\\main" FILES ${HDR_MAIN})
source_group("Source Files\\main" FILES ${SRC_MAIN})
source_group("Header Files\\config" FILES ${HDR_CONFIG})

View file

@ -1,25 +0,0 @@
call tools\setup-common.bat
set build_dir=build-debug
set build_type=Debug
set conan_profile=scwx-win64_msvc2022
set qt_version=6.8.3
set qt_arch=msvc2022_64
conan config install tools/conan/profiles/%conan_profile% -tf profiles
conan install . ^
--remote conancenter ^
--build missing ^
--profile:all %conan_profile% ^
--settings:all build_type=%build_type% ^
--output-folder %build_dir%/conan
mkdir %build_dir%
cmake -B %build_dir% -S . ^
-DCMAKE_BUILD_TYPE=%build_type% ^
-DCMAKE_CONFIGURATION_TYPES=%build_type% ^
-DCMAKE_PREFIX_PATH=C:/Qt/%qt_version%/%qt_arch% ^
-DCMAKE_PROJECT_TOP_LEVEL_INCLUDES=external/cmake-conan/conan_provider.cmake ^
-DCONAN_HOST_PROFILE=%conan_profile% ^
-DCONAN_BUILD_PROFILE=%conan_profile%
pause

View file

@ -1,28 +0,0 @@
#!/bin/bash
./tools/setup-common.sh
build_dir=${1:-build-debug}
build_type=Debug
conan_profile=${2:-scwx-linux_gcc-11}
qt_version=6.8.3
qt_arch=gcc_64
script_dir="$(dirname "$(readlink -f "$0")")"
conan config install tools/conan/profiles/${conan_profile} -tf profiles
conan install . \
--remote conancenter \
--build missing \
--profile:all ${conan_profile} \
--settings:all build_type=${build_type} \
--output-folder ${build_dir}/conan
mkdir -p ${build_dir}
cmake -B ${build_dir} -S . \
-DCMAKE_BUILD_TYPE=${build_type} \
-DCMAKE_CONFIGURATION_TYPES=${build_type} \
-DCMAKE_INSTALL_PREFIX=${build_dir}/${build_type}/supercell-wx \
-DCMAKE_PREFIX_PATH=/opt/Qt/${qt_version}/${qt_arch} \
-DCMAKE_PROJECT_TOP_LEVEL_INCLUDES=${script_dir}/external/cmake-conan/conan_provider.cmake \
-DCONAN_HOST_PROFILE=${conan_profile} \
-DCONAN_BUILD_PROFILE=${conan_profile} \
-G Ninja

View file

@ -1,28 +0,0 @@
call tools\setup-common.bat
set build_dir=build
set conan_profile=scwx-win64_msvc2022
set qt_version=6.8.3
set qt_arch=msvc2022_64
conan config install tools/conan/profiles/%conan_profile% -tf profiles
conan install . ^
--remote conancenter ^
--build missing ^
--profile:all %conan_profile% ^
--settings:all build_type=Debug ^
--output-folder %build_dir%/conan
conan install . ^
--remote conancenter ^
--build missing ^
--profile:all %conan_profile% ^
--settings:all build_type=Release ^
--output-folder %build_dir%/conan
mkdir %build_dir%
cmake -B %build_dir% -S . ^
-DCMAKE_PREFIX_PATH=C:/Qt/%qt_version%/%qt_arch% ^
-DCMAKE_PROJECT_TOP_LEVEL_INCLUDES=external/cmake-conan/conan_provider.cmake ^
-DCONAN_HOST_PROFILE=%conan_profile% ^
-DCONAN_BUILD_PROFILE=%conan_profile%
pause

View file

@ -1,25 +0,0 @@
call tools\setup-common.bat
set build_dir=build-release
set build_type=Release
set conan_profile=scwx-win64_msvc2022
set qt_version=6.8.3
set qt_arch=msvc2022_64
conan config install tools/conan/profiles/%conan_profile% -tf profiles
conan install . ^
--remote conancenter ^
--build missing ^
--profile:all %conan_profile% ^
--settings:all build_type=%build_type% ^
--output-folder %build_dir%/conan
mkdir %build_dir%
cmake -B %build_dir% -S . ^
-DCMAKE_BUILD_TYPE=%build_type% ^
-DCMAKE_CONFIGURATION_TYPES=%build_type% ^
-DCMAKE_PREFIX_PATH=C:/Qt/%qt_version%/%qt_arch% ^
-DCMAKE_PROJECT_TOP_LEVEL_INCLUDES=external/cmake-conan/conan_provider.cmake ^
-DCONAN_HOST_PROFILE=%conan_profile% ^
-DCONAN_BUILD_PROFILE=%conan_profile%
pause

View file

@ -1,28 +0,0 @@
#!/bin/bash
./tools/setup-common.sh
build_dir=${1:-build-release}
build_type=Release
conan_profile=${2:-scwx-linux_gcc-11}
qt_version=6.8.3
qt_arch=gcc_64
script_dir="$(dirname "$(readlink -f "$0")")"
conan config install tools/conan/profiles/${conan_profile} -tf profiles
conan install . \
--remote conancenter \
--build missing \
--profile:all ${conan_profile} \
--settings:all build_type=${build_type} \
--output-folder ${build_dir}/conan
mkdir -p ${build_dir}
cmake -B ${build_dir} -S . \
-DCMAKE_BUILD_TYPE=${build_type} \
-DCMAKE_CONFIGURATION_TYPES=${build_type} \
-DCMAKE_INSTALL_PREFIX=${build_dir}/${build_type}/supercell-wx \
-DCMAKE_PREFIX_PATH=/opt/Qt/${qt_version}/${qt_arch} \
-DCMAKE_PROJECT_TOP_LEVEL_INCLUDES=${script_dir}/external/cmake-conan/conan_provider.cmake \
-DCONAN_HOST_PROFILE=${conan_profile} \
-DCONAN_BUILD_PROFILE=${conan_profile} \
-G Ninja

View file

@ -0,0 +1,45 @@
@setlocal enabledelayedexpansion
@set script_dir=%~dp0
@set venv_path=%script_dir%\..\.venv
:: Assign user-specified Python Virtual Environment
@if not "%~1"=="" (
if /i "%~1"=="none" (
set venv_path=
) else (
set venv_path=%~f1
)
)
:: Activate Python Virtual Environment
@if defined venv_path (
echo Activating Python Virtual Environment: %venv_path%
python -m venv %venv_path%
call %venv_path%\Scripts\activate.bat
)
:: Install Python packages
python -m pip install --upgrade pip
pip install --upgrade -r "%script_dir%\..\requirements.txt"
:: Configure default Conan profile
@conan profile detect -e
:: Conan profiles
@set profile_count=1
@set /a last_profile=profile_count - 1
@set conan_profile[0]=scwx-windows_msvc2022_x64
:: Install Conan profiles
@for /L %%i in (0,1,!last_profile!) do @(
set "profile_name=!conan_profile[%%i]!"
conan config install "%script_dir%\conan\profiles\!profile_name!" -tf profiles
)
:: Deactivate Python Virtual Environment
@if defined venv_path (
call %venv_path%\Scripts\deactivate.bat
)
@pause

60
tools/configure-environment.sh Executable file
View file

@ -0,0 +1,60 @@
#!/bin/bash
script_dir="$(dirname "$(readlink -f "$0")")"
# Assign user-specified Python Virtual Environment
[ "${1:-}" = "none" ] && unset venv_path || export venv_path="$(readlink -f "${1:-${script_dir}/../.venv}")"
# Load custom build settings
if [ -f "${script_dir}/lib/user-setup.sh" ]; then
source "${script_dir}/lib/user-setup.sh"
fi
# Activate Python Virtual Environment
if [ -n "${venv_path:-}" ]; then
python -m venv "${venv_path}"
source "${venv_path}/bin/activate"
fi
# Detect if a Python Virtual Environment was specified above, or elsewhere
IN_VENV=$(python -c 'import sys; print(sys.prefix != getattr(sys, "base_prefix", sys.prefix))')
if [ "${IN_VENV}" = "True" ]; then
# In a virtual environment, don't use --user
PIP_FLAGS="--upgrade"
else
# Not in a virtual environment, use --user
PIP_FLAGS="--upgrade --user"
fi
# Install Python packages
python -m pip install ${PIP_FLAGS} --upgrade pip
pip install ${PIP_FLAGS} -r "${script_dir}/../requirements.txt"
# Configure default Conan profile
conan profile detect -e
# Conan profiles
conan_profiles=(
"scwx-linux_clang-17"
"scwx-linux_clang-17_armv8"
"scwx-linux_clang-18"
"scwx-linux_clang-18_armv8"
"scwx-linux_gcc-11"
"scwx-linux_gcc-11_armv8"
"scwx-linux_gcc-12"
"scwx-linux_gcc-12_armv8"
"scwx-linux_gcc-13"
"scwx-linux_gcc-13_armv8"
"scwx-linux_gcc-14"
"scwx-linux_gcc-14_armv8"
)
# Install Conan profiles
for profile_name in "${conan_profiles[@]}"; do
conan config install "${script_dir}/conan/profiles/${profile_name}" -tf profiles
done
# Deactivate Python Virtual Environment
if [ -n "${venv_path:-}" ]; then
deactivate
fi

View file

@ -0,0 +1 @@
@set qt_version=6.8.3

2
tools/lib/common-paths.sh Executable file
View file

@ -0,0 +1,2 @@
#!/bin/bash
export qt_version=6.8.3

View file

@ -0,0 +1,24 @@
@set script_dir=%~dp0
@set cmake_args=-B "%build_dir%" -S "%script_dir%\..\.." ^
-G "%generator%" ^
-DCMAKE_PREFIX_PATH="%qt_base%/%qt_version%/%qt_arch%" ^
-DCMAKE_PROJECT_TOP_LEVEL_INCLUDES="%script_dir%\..\..\external\cmake-conan\conan_provider.cmake" ^
-DCONAN_HOST_PROFILE=%conan_profile% ^
-DCONAN_BUILD_PROFILE=%conan_profile% ^
-DSCWX_VIRTUAL_ENV=%venv_path% ^
-DCMAKE_EXPORT_COMPILE_COMMANDS=on
@if defined build_type (
set cmake_args=%cmake_args% ^
-DCMAKE_BUILD_TYPE=%build_type% ^
-DCMAKE_CONFIGURATION_TYPES=%build_type%
) else (
:: CMAKE_BUILD_TYPE isn't used to build, but is required by the Conan CMakeDeps generator
set cmake_args=%cmake_args% ^
-DCMAKE_BUILD_TYPE=Release ^
-DCMAKE_CONFIGURATION_TYPES=Debug;Release
)
@mkdir "%build_dir%"
cmake %cmake_args%

View file

@ -0,0 +1,42 @@
#!/bin/bash
script_dir="$(dirname "$(readlink -f "$0")")"
cmake_args=(
-B "${build_dir}"
-S "${script_dir}/../.."
-G "${generator}"
-DCMAKE_PREFIX_PATH="${qt_base}/${qt_version}/${qt_arch}"
-DCMAKE_PROJECT_TOP_LEVEL_INCLUDES="${script_dir}/../../external/cmake-conan/conan_provider.cmake"
-DCONAN_HOST_PROFILE="${conan_profile}"
-DCONAN_BUILD_PROFILE="${conan_profile}"
-DSCWX_VIRTUAL_ENV="${venv_path}"
-DCMAKE_EXPORT_COMPILE_COMMANDS=ON
)
if [[ -n "${build_type}" ]]; then
cmake_args+=(
-DCMAKE_BUILD_TYPE="${build_type}"
-DCMAKE_CONFIGURATION_TYPES="${build_type}"
-DCMAKE_INSTALL_PREFIX="${build_dir}/${build_type}/supercell-wx"
)
else
# CMAKE_BUILD_TYPE isn't used to build, but is required by the Conan CMakeDeps generator
cmake_args+=(
-DCMAKE_BUILD_TYPE="Release"
-DCMAKE_CONFIGURATION_TYPES="Debug;Release"
)
fi
# Toggle address sanitizer based on argument
if [ "${address_sanitizer}" != "disabled" ]; then
cmake_args+=(
-DSCWX_ADDRESS_SANITIZER=ON
)
else
cmake_args+=(
-DSCWX_ADDRESS_SANITIZER=OFF
)
fi
mkdir -p "${build_dir}"
cmake "${cmake_args[@]}"

View file

@ -0,0 +1,39 @@
@set script_dir=%~dp0
:: Import common paths
@call %script_dir%\common-paths.bat
:: Activate Python Virtual Environment
@if defined venv_path (
echo Activating Python Virtual Environment: %venv_path%
python -m venv %venv_path%
call %venv_path%\Scripts\activate.bat
)
:: Install Python packages
python -m pip install --upgrade pip
pip install --upgrade -r "%script_dir%\..\..\requirements.txt"
@if defined build_type (
:: Install Conan profile and packages
call %script_dir%\setup-conan.bat
) else (
:: Install Conan profile and debug packages
set build_type=Debug
call %script_dir%\setup-conan.bat
:: Install Conan profile and release packages
set build_type=Release
call %script_dir%\setup-conan.bat
:: Unset build_type
set build_type=
)
:: Run CMake Configure
@call %script_dir%\run-cmake-configure.bat
:: Deactivate Python Virtual Environment
@if defined venv_path (
call %venv_path%\Scripts\deactivate.bat
)

55
tools/lib/setup-common.sh Executable file
View file

@ -0,0 +1,55 @@
#!/bin/bash
script_dir="$(dirname "$(readlink -f "$0")")"
# Import common paths
source "${script_dir}/common-paths.sh"
# Load custom build settings
if [ -f "${script_dir}/user-setup.sh" ]; then
source "${script_dir}/user-setup.sh"
fi
# Activate Python Virtual Environment
if [ -n "${venv_path:-}" ]; then
python -m venv "${venv_path}"
source "${venv_path}/bin/activate"
fi
# Detect if a Python Virtual Environment was specified above, or elsewhere
IN_VENV=$(python -c 'import sys; print(sys.prefix != getattr(sys, "base_prefix", sys.prefix))')
if [ "${IN_VENV}" = "True" ]; then
# In a virtual environment, don't use --user
PIP_FLAGS="--upgrade"
else
# Not in a virtual environment, use --user
PIP_FLAGS="--upgrade --user"
fi
# Install Python packages
python -m pip install ${PIP_FLAGS} pip
pip install ${PIP_FLAGS} -r "${script_dir}/../../requirements.txt"
if [[ -n "${build_type}" ]]; then
# Install Conan profile and packages
"${script_dir}/setup-conan.sh"
else
# Install Conan profile and debug packages
export build_type=Debug
"${script_dir}/setup-conan.sh"
# Install Conan profile and release packages
export build_type=Release
"${script_dir}/setup-conan.sh"
# Unset build_type
unset build_type
fi
# Run CMake Configure
"${script_dir}/run-cmake-configure.sh"
# Deactivate Python Virtual Environment
if [ -n "${venv_path:-}" ]; then
deactivate
fi

15
tools/lib/setup-conan.bat Normal file
View file

@ -0,0 +1,15 @@
@set script_dir=%~dp0
:: Configure default Conan profile
conan profile detect -e
:: Install selected Conan profile
conan config install "%script_dir%\..\conan\profiles\%conan_profile%" -tf profiles
:: Install Conan packages
conan install "%script_dir%\..\.." ^
--remote conancenter ^
--build missing ^
--profile:all %conan_profile% ^
--settings:all build_type=%build_type% ^
--output-folder "%build_dir%\conan"

16
tools/lib/setup-conan.sh Executable file
View file

@ -0,0 +1,16 @@
#!/bin/bash
script_dir="$(dirname "$(readlink -f "$0")")"
# Configure default Conan profile
conan profile detect -e
# Install selected Conan profile
conan config install "${script_dir}/../conan/profiles/${conan_profile}" -tf profiles
# Install Conan packages
conan install "${script_dir}/../.." \
--remote conancenter \
--build missing \
--profile:all ${conan_profile} \
--settings:all build_type=${build_type} \
--output-folder "${build_dir}/conan"

View file

@ -0,0 +1,10 @@
#!/bin/bash
# Example user setup script. Copy as user-setup.sh and modify as required.
# gcc-13 is not the default gcc version
export CC=/usr/bin/gcc-13
export CXX=/usr/bin/c++-13
# Override conan profile to be gcc-13
export conan_profile=scwx-linux_gcc-13

View file

@ -17,3 +17,39 @@ macro(scwx_output_dirs_setup)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_CURRENT_BINARY_DIR}/MinSizeRel/lib)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CMAKE_CURRENT_BINARY_DIR}/Debug/lib)
endmacro()
macro(scwx_python_setup)
set(SCWX_VIRTUAL_ENV "" CACHE STRING "Python Virtual Environment")
# Use a Python Virtual Environment
if (SCWX_VIRTUAL_ENV)
set(ENV{VIRTUAL_ENV} "${SCWX_VIRTUAL_ENV}")
if (WIN32)
set(Python3_EXECUTABLE "$ENV{VIRTUAL_ENV}/Scripts/python.exe")
else()
set(Python3_EXECUTABLE "$ENV{VIRTUAL_ENV}/bin/python")
endif()
message(STATUS "Using virtual environment: $ENV{VIRTUAL_ENV}")
else()
message(STATUS "Python virtual environment undefined")
endif()
# Find Python
find_package(Python3 REQUIRED COMPONENTS Interpreter)
# Verify we're using the right Python
message(STATUS "Python executable: ${Python3_EXECUTABLE}")
message(STATUS "Python version: ${Python3_VERSION}")
# Only if we are in an application defined virtual environment
if (SCWX_VIRTUAL_ENV)
# Setup pip
set(PIP_ARGS install --upgrade -r "${CMAKE_SOURCE_DIR}/requirements.txt")
# Install requirements
execute_process(COMMAND ${Python3_EXECUTABLE} -m pip ${PIP_ARGS}
RESULT_VARIABLE PIP_RESULT)
endif()
endmacro()

View file

@ -1,4 +0,0 @@
pip install --upgrade conan
pip install --upgrade geopandas
pip install --upgrade GitPython
conan profile detect -e

View file

@ -1,5 +0,0 @@
#!/bin/bash
pip install --upgrade --user conan
pip install --upgrade --user geopandas
pip install --upgrade --user GitPython
conan profile detect -e

View file

@ -0,0 +1,26 @@
@set script_dir=%~dp0
@set build_dir=%script_dir%\..\build-debug-msvc2022
@set build_type=Debug
@set conan_profile=scwx-windows_msvc2022_x64
@set generator=Visual Studio 17 2022
@set qt_base=C:/Qt
@set qt_arch=msvc2022_64
@set venv_path=%script_dir%\..\.venv
:: Assign user-specified build directory
@if not "%~1"=="" set build_dir=%~f1
:: Assign user-specified Python Virtual Environment
@if not "%~2"=="" (
if /i "%~2"=="none" (
set venv_path=
) else (
set venv_path=%~f2
)
)
:: Perform common setup
@call %script_dir%\lib\setup-common.bat
@pause

View file

@ -0,0 +1,26 @@
@set script_dir=%~dp0
@set build_dir=%script_dir%\..\build-debug-ninja
@set build_type=Debug
@set conan_profile=scwx-windows_msvc2022_x64
@set generator=Ninja
@set qt_base=C:/Qt
@set qt_arch=msvc2022_64
@set venv_path=%script_dir%\..\.venv
:: Assign user-specified build directory
@if not "%~1"=="" set build_dir=%~f1
:: Assign user-specified Python Virtual Environment
@if not "%~2"=="" (
if /i "%~2"=="none" (
set venv_path=
) else (
set venv_path=%~f2
)
)
:: Perform common setup
@call %script_dir%\lib\setup-common.bat
@pause

16
tools/setup-debug.sh Executable file
View file

@ -0,0 +1,16 @@
#!/bin/bash
script_dir="$(dirname "$(readlink -f "$0")")"
export build_dir="$(readlink -f "${1:-${script_dir}/../build-debug}")"
export build_type=Debug
export conan_profile=${2:-scwx-linux_gcc-11}
export generator=Ninja
export qt_base=/opt/Qt
export qt_arch=gcc_64
export address_sanitizer=${4:-disabled}
# Assign user-specified Python Virtual Environment
[ "${3:-}" = "none" ] && unset venv_path || export venv_path="$(readlink -f "${3:-${script_dir}/../.venv}")"
# Perform common setup
"${script_dir}/lib/setup-common.sh"

View file

@ -0,0 +1,25 @@
@set script_dir=%~dp0
@set build_dir=%script_dir%\..\build-msvc2022
@set conan_profile=scwx-windows_msvc2022_x64
@set generator=Visual Studio 17 2022
@set qt_base=C:/Qt
@set qt_arch=msvc2022_64
@set venv_path=%script_dir%\..\.venv
:: Assign user-specified build directory
@if not "%~1"=="" set build_dir=%~f1
:: Assign user-specified Python Virtual Environment
@if not "%~2"=="" (
if /i "%~2"=="none" (
set venv_path=
) else (
set venv_path=%~f2
)
)
:: Perform common setup
@call %script_dir%\lib\setup-common.bat
@pause

View file

@ -0,0 +1,25 @@
@set script_dir=%~dp0
@set build_dir=%script_dir%\..\build-ninja
@set conan_profile=scwx-windows_msvc2022_x64
@set generator=Ninja Multi-Config
@set qt_base=C:/Qt
@set qt_arch=msvc2022_64
@set venv_path=%script_dir%\..\.venv
:: Assign user-specified build directory
@if not "%~1"=="" set build_dir=%~f1
:: Assign user-specified Python Virtual Environment
@if not "%~2"=="" (
if /i "%~2"=="none" (
set venv_path=
) else (
set venv_path=%~f2
)
)
:: Perform common setup
@call %script_dir%\lib\setup-common.bat
@pause

18
tools/setup-multi.sh Executable file
View file

@ -0,0 +1,18 @@
#!/bin/bash
script_dir="$(dirname "$(readlink -f "$0")")"
export build_dir="$(readlink -f "${1:-${script_dir}/../build-debug}")"
export conan_profile=${2:-scwx-linux_gcc-11}
export generator="Ninja Multi-Config"
export qt_base=/opt/Qt
export qt_arch=gcc_64
# Assign user-specified Python Virtual Environment
[ "${3:-}" = "none" ] && unset venv_path || export venv_path="$(readlink -f "${3:-${script_dir}/../.venv}")"
# FIXME: aws-sdk-cpp fails to configure using Ninja Multi-Config
echo "Ninja Multi-Config is not supported in Linux"
read -p "Press Enter to continue..."
# Perform common setup
# "${script_dir}/lib/setup-common.sh"

View file

@ -0,0 +1,26 @@
@set script_dir=%~dp0
@set build_dir=%script_dir%\..\build-release-msvc2022
@set build_type=Release
@set conan_profile=scwx-windows_msvc2022_x64
@set generator=Visual Studio 17 2022
@set qt_base=C:/Qt
@set qt_arch=msvc2022_64
@set venv_path=%script_dir%\..\.venv
:: Assign user-specified build directory
@if not "%~1"=="" set build_dir=%~f1
:: Assign user-specified Python Virtual Environment
@if not "%~2"=="" (
if /i "%~2"=="none" (
set venv_path=
) else (
set venv_path=%~f2
)
)
:: Perform common setup
@call %script_dir%\lib\setup-common.bat
@pause

View file

@ -0,0 +1,26 @@
@set script_dir=%~dp0
@set build_dir=%script_dir%\..\build-release-ninja
@set build_type=Release
@set conan_profile=scwx-windows_msvc2022_x64
@set generator=Ninja
@set qt_base=C:/Qt
@set qt_arch=msvc2022_64
@set venv_path=%script_dir%\..\.venv
:: Assign user-specified build directory
@if not "%~1"=="" set build_dir=%~f1
:: Assign user-specified Python Virtual Environment
@if not "%~2"=="" (
if /i "%~2"=="none" (
set venv_path=
) else (
set venv_path=%~f2
)
)
:: Perform common setup
@call %script_dir%\lib\setup-common.bat
@pause

16
tools/setup-release.sh Executable file
View file

@ -0,0 +1,16 @@
#!/bin/bash
script_dir="$(dirname "$(readlink -f "$0")")"
export build_dir="$(readlink -f "${1:-${script_dir}/../build-release}")"
export build_type=Release
export conan_profile=${2:-scwx-linux_gcc-11}
export generator=Ninja
export qt_base=/opt/Qt
export qt_arch=gcc_64
export address_sanitizer=${4:-disabled}
# Assign user-specified Python Virtual Environment
[ "${3:-}" = "none" ] && unset venv_path || export venv_path="$(readlink -f "${3:-${script_dir}/../.venv}")"
# Perform common setup
"${script_dir}/lib/setup-common.sh"