73 lines
3.4 KiB
CMake
73 lines
3.4 KiB
CMake
cmake_minimum_required(VERSION 4.1)
|
|
project(seagull)
|
|
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_SOURCE_DIR}/cmake)
|
|
|
|
find_package(Python3 REQUIRED COMPONENTS Interpreter)
|
|
set(sys_python ${Python3_EXECUTABLE})
|
|
find_package(Cargo)
|
|
|
|
find_program(RSYNC NAMES rsync)
|
|
find_program(ZIP NAMES zip)
|
|
|
|
file(GLOB_RECURSE pydepends RELATIVE "${CMAKE_SOURCE_DIR}"
|
|
"${CMAKE_SOURCE_DIR}/app/*.py")
|
|
file(GLOB_RECURSE basepakdepends RELATIVE "${CMAKE_SOURCE_DIR}"
|
|
"${CMAKE_SOURCE_DIR}/app/basepak/*")
|
|
file(GLOB_RECURSE pakargs RELATIVE "${CMAKE_SOURCE_DIR}/pak"
|
|
"${CMAKE_SOURCE_DIR}/pak/*")
|
|
file(GLOB_RECURSE pakdepends RELATIVE "${CMAKE_SOURCE_DIR}"
|
|
"${CMAKE_SOURCE_DIR}/pak/*")
|
|
|
|
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/dist")
|
|
add_custom_target(pak ALL
|
|
DEPENDS ${pakdepends}
|
|
WORKING_DIRECTORY "${CMAKE_SOURCE_DIR}/pak"
|
|
COMMENT "Creating seagull.pak"
|
|
COMMAND ${ZIP} -7r "${CMAKE_CURRENT_BINARY_DIR}/dist/seagull.pak" .)
|
|
|
|
# wordlists
|
|
set(WORDLIST_SOURCE_PATH "${CMAKE_SOURCE_DIR}/ext/imsky/wordlists" CACHE PATH "Source location of wordlists to use.")
|
|
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}/basepak/rant")
|
|
add_custom_command(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/basepak/rant/wordlist.rant"
|
|
COMMENT "Rendering wordlists"
|
|
COMMAND "${sys_python}" "${CMAKE_SOURCE_DIR}/render-wordlists.py" -i "${WORDLIST_SOURCE_PATH}" -o rant "${CMAKE_CURRENT_BINARY_DIR}/basepak/rant/wordlist.rant")
|
|
|
|
# build rant
|
|
set(rant_path "${CMAKE_CURRENT_BINARY_DIR}/opt/rant")
|
|
add_custom_command(OUTPUT "${rant_path}"
|
|
COMMENT "Compiling rant"
|
|
COMMAND "${CARGO_EXECUTABLE}" install rant --version 4.0.0-alpha.33 --root "${rant_path}" --features cli)
|
|
|
|
# venv
|
|
set(venv_path "${CMAKE_CURRENT_BINARY_DIR}/pyvenv")
|
|
execute_process(COMMAND "${Python3_EXECUTABLE}" -m venv "${venv_path}" --upgrade-deps
|
|
COMMAND_ERROR_IS_FATAL ANY)
|
|
set(ENV{VIRTUAL_ENV} "${venv_path}")
|
|
set(Python3_FIND_VIRTUALENV ONLY)
|
|
unset(Python3_EXECUTABLE)
|
|
# re-find python to use venv
|
|
find_package(Python3 REQUIRED COMPONENTS Interpreter)
|
|
if (sys_python STREQUAL Python3_EXECUTABLE)
|
|
message(FATAL_ERROR "Still using Python3 after venv activation")
|
|
endif()
|
|
|
|
execute_process(COMMAND "${Python3_EXECUTABLE}" -m pip install -r "${CMAKE_SOURCE_DIR}/app/requirements.txt")
|
|
execute_process(COMMAND "${Python3_EXECUTABLE}" -m pip install -r "${CMAKE_SOURCE_DIR}/app/requirements-desktop.txt")
|
|
execute_process(COMMAND "${Python3_EXECUTABLE}" -m pip install -r "${CMAKE_SOURCE_DIR}/app/requirements-build-desktop.txt")
|
|
execute_process(COMMAND "${Python3_EXECUTABLE}" -m pip install -r "${CMAKE_SOURCE_DIR}/app/requirements-desktop-linux.txt")
|
|
|
|
find_program(PYINSTALLER NAMES pyinstaller HINTS "${venv_path}/bin" REQUIRED)
|
|
|
|
if (WIN32)
|
|
set(binname "seagull.exe")
|
|
else()
|
|
set(binname "seagull")
|
|
endif()
|
|
|
|
configure_file("seagull.spec.in" "seagull.spec")
|
|
add_custom_command(OUTPUT "dist/${binname}"
|
|
DEPENDS "${rant_path}" "${CMAKE_CURRENT_BINARY_DIR}/basepak/rant/wordlist.rant" ${pydepends} ${basepakdepends}
|
|
COMMENT "Building ${binname}"
|
|
BYPRODUCTS "pyinstaller"
|
|
COMMAND ${PYINSTALLER} --distpath "${CMAKE_CURRENT_BINARY_DIR}/dist" --workpath "${CMAKE_CURRENT_BINARY_DIR}/pyinstaller" seagull.spec)
|
|
add_custom_target(desktop ALL DEPENDS "dist/${binname}" pak) |