From b14b6ebd83c973c441b3bea94071efd923afe3ee Mon Sep 17 00:00:00 2001 From: yggverse Date: Sat, 13 Jul 2024 17:28:36 +0300 Subject: [PATCH] implement application builder --- .gitignore | 1 + INSTALL.sh | 229 +++++++++++++++++++++++++++++++++++++++++++++++++++++ README.md | 6 ++ 3 files changed, 236 insertions(+) create mode 100755 INSTALL.sh diff --git a/.gitignore b/.gitignore index db8ae653..61bc8798 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /.yoda/ +/build/ /vendor/ /composer.lock \ No newline at end of file diff --git a/INSTALL.sh b/INSTALL.sh new file mode 100755 index 00000000..b7d902ed --- /dev/null +++ b/INSTALL.sh @@ -0,0 +1,229 @@ +#!/bin/bash + +# Init environment +PHP_VERSION="8.3.9" + +DIR_APP=$(dirname $(realpath -s "$0")) + +DIR_BUILD="$DIR_APP/build/$(uname)" + +DIR_PHP_SRC_SOURCE="$DIR_BUILD/tmp/php-src" +DIR_PHP_CPP_SOURCE="$DIR_BUILD/tmp/php-cpp" +DIR_PHP_GTK_SOURCE="$DIR_BUILD/tmp/php-gtk" + +DIR_PHP_SRC_TARGET="$DIR_BUILD/opt/php" +DIR_PHP_CPP_TARGET="$DIR_BUILD/usr/local" +DIR_DESKTOP_TARGET="$DIR_BUILD/usr/local/share/applications" + +# Check platform builder compatibility +if [ $(uname) != "Linux" ]; then + echo "$(uname) auto-build not implemented" && exit +fi + +# Ask for system dependencies installation +until [[ $INSTALL_SYSTEM_DEPENDENCIES =~ (y|n) ]]; do + read -rp "Install system dependencies? [y/n]: " -e INSTALL_SYSTEM_DEPENDENCIES +done + +## @TODO check for package manager support +if [[ $INSTALL_SYSTEM_DEPENDENCIES == "y" ]]; then + sudo apt install libpq-dev\ + bison\ + libreadline-dev\ + git\ + build-essential\ + autoconf\ + automake\ + libtool\ + re2c\ + libxml2-dev\ + libcurl4-openssl-dev\ + libssl-dev\ + libbz2-dev\ + libjpeg-dev\ + libpng-dev\ + libxpm-dev\ + libfreetype6-dev\ + libzip-dev\ + libsqlite3-dev\ + libonig-dev\ + libxslt1-dev\ + libgtk-3-dev\ + libgladeui-dev\ + libgtksourceview-3.0-dev\ + libwnck-dev +fi + +# Build PHP-SRC + +## Get latest sources +if [ ! -d $DIR_PHP_SRC_SOURCE ]; then + git clone -b PHP-$PHP_VERSION https://github.com/php/php-src.git $DIR_PHP_SRC_SOURCE +fi + +## Check sources directory received to continue +if [ ! -d "$DIR_PHP_SRC_SOURCE" ]; then + echo "Could not get PHP-$PHP_VERSION" && exit +fi + +## Navigate to PHP-SRC location +cd $DIR_PHP_SRC_SOURCE + +## Switch to version branch +git checkout "PHP-$PHP_VERSION" + +## Get repository updates +git pull + +## Build configuration for new installation +if [ ! -f "$DIR_PHP_SRC_SOURCE/configure" ]; then + ./buildconf --force +fi + +## Force build for new installation +if [ ! -d $DIR_PHP_SRC_TARGET ]; then BUILD_PHP_SRC="y" +else # or ask for re-build + until [[ $BUILD_PHP_SRC =~ (y|n) ]]; do + read -rp "Rebuild latest PHP-SRC? [y/n]: " -e BUILD_PHP_SRC + done +fi + +## Install PHP-SRC +if [[ $BUILD_PHP_SRC == "y" ]]; then + ./configure --prefix=$DIR_PHP_SRC_TARGET\ + --with-openssl\ + --with-gettext\ + --with-pdo-mysql\ + --disable-cgi\ + --disable-shared\ + --enable-static\ + --enable-sockets\ + --enable-mbstring\ + --enable-pcntl + + make clean + + make -j $(nproc) + + make install +fi + +# Build PHP-CPP + +## Get latest sources +if [ ! -d $DIR_PHP_CPP_SOURCE ]; then + git clone https://github.com/fast-debug/php-cpp.git $DIR_PHP_CPP_SOURCE +fi + +## Check sources directory received to continue +if [ ! -d "$DIR_PHP_CPP_SOURCE" ]; then + echo "Could not get PHP-CPP" && exit +fi + +## Navigate to PHP-CPP location +cd $DIR_PHP_CPP_SOURCE + +## Get repository updates +git pull + +## Replace installation paths in PHP-CPP Makefile +sed -i "/PHP_CONFIG = /c\ + PHP_CONFIG = $DIR_PHP_SRC_TARGET/bin/php-config" $DIR_PHP_CPP_SOURCE/Makefile + +sed -i "/INSTALL_PREFIX = /c\ + INSTALL_PREFIX = $DIR_PHP_CPP_TARGET" $DIR_PHP_CPP_SOURCE/Makefile + +## Force build for new installation +if [ ! -d $DIR_PHP_CPP_TARGET ]; then BUILD_PHP_CPP="y" +else # or ask for re-build + until [[ $BUILD_PHP_CPP =~ (y|n) ]]; do + read -rp "Rebuild latest PHP-CPP? [y/n]: " -e BUILD_PHP_CPP + done +fi + +## Install PHP-CPP +if [[ $BUILD_PHP_CPP == "y" ]]; then + make clean + + make -j $(nproc) + + make install +fi + +# Build PHP-GTK + +## Get latest sources +if [ ! -d $DIR_PHP_GTK_SOURCE ]; then + git clone https://github.com/scorninpc/php-gtk3.git $DIR_PHP_GTK_SOURCE +fi + +## Check sources directory received to continue +if [ ! -d "$DIR_PHP_GTK_SOURCE" ]; then + echo "Could not get PHP-GTK" && exit +fi + +## Navigate to PHP-GTK location +cd $DIR_PHP_GTK_SOURCE + +## Get repository updates +git pull + +## Replace installation paths in PHP-CPP Makefile +sed -i "/EXTENSION_DIR = /c\ + EXTENSION_DIR = $($DIR_PHP_SRC_TARGET/bin/php-config --extension-dir)" $DIR_PHP_GTK_SOURCE/Makefile + +sed -i "/INI_DIR = /c\ + INI_DIR = /dev/null" $DIR_PHP_GTK_SOURCE/Makefile + +## Force build for new installation +if [ ! -d $DIR_PHP_CPP_TARGET ]; then BUILD_PHP_GTK="y" +else # or ask for re-build + until [[ $BUILD_PHP_GTK =~ (y|n) ]]; do + read -rp "Rebuild latest PHP-GTK? [y/n]: " -e BUILD_PHP_GTK + done +fi + +## Install PHP-GTK +if [[ $BUILD_PHP_GTK == "y" ]]; then + make clean + + make -j $(nproc) + + make install +fi + +# Create launcher +cat > "$DIR_DESKTOP_TARGET/yoda.sh" < "$DIR_DESKTOP_TARGET/yoda.desktop" <