psemek/package/bin/psemek-create-project
lisyarus 3713f620bb
All checks were successful
Run tests / Run tests (push) Successful in 6m42s
Update create-project script
2026-07-17 17:08:39 +03:00

106 lines
1.9 KiB
Bash
Executable file

#!/usr/bin/env bash
set -e
if [[ "$#" -ne 1 || "$1" == "-h" || "$1" == "--help" ]]; then
echo "Usage: psemek-create-project <project-name>"
echo "Creates a new psemek project in the current directory"
exit 0
fi
git init .
git submodule add git@git.lisyarus.dev:lisyarus/psemek.git
git submodule update --init --recursive
mkdir -p source include/${1}
cat > .gitignore << EOF
.gitignore
.qtcreator
build
package
EOF
cat > CMakeLists.txt << EOF
cmake_minimum_required(VERSION 3.16)
project(${1})
set(TARGET_NAME ${1})
set(CMAKE_CXX_STANDARD 20)
set(PSEMEK_EXAMPLES OFF)
set(PSEMEK_PACKAGE_OUTPUT_PATH package)
set(PSEMEK_GRAPHICS_API OPENGL)
add_subdirectory(psemek)
file(GLOB_RECURSE ${1^^}_SOURCES LIST_DIRECTORIES FALSE "\${CMAKE_CURRENT_SOURCE_DIR}/source/*")
file(GLOB_RECURSE ${1^^}_HEADERS LIST_DIRECTORIES FALSE "\${CMAKE_CURRENT_SOURCE_DIR}/include/*")
psemek_add_application(\${TARGET_NAME} \${${1^^}_SOURCES} \${${1^^}_HEADERS})
if(TARGET \${TARGET_NAME})
target_include_directories(\${TARGET_NAME} PUBLIC "\${CMAKE_CURRENT_SOURCE_DIR}/include")
if(PSEMEK_PLATFORM_WEB)
# Required by itch.io
set_target_properties(\${TARGET_NAME} PROPERTIES
OUTPUT_NAME "index"
)
endif()
endif()
EOF
cat > source/application.cpp << EOF
#include <psemek/app/default_application_factory.hpp>
namespace ${1}
{
using namespace psemek;
struct application
: app::application
{
application(options const &, context const &)
{
}
bool running() const override
{
return running_;
}
void stop() override
{
running_ = false;
}
void update() override
{}
void present() override
{}
private:
bool running_ = true;
};
}
namespace psemek::app
{
std::unique_ptr<application::factory> make_application_factory()
{
application::options options
{
.name = "${1^}",
};
return default_application_factory<${1}::application>(options);
}
}
EOF