#!/bin/env php <?php /* I N S T A L L E R */ require("inc_vars.php"); require("inc_functions.php"); $gitAppmonitor="https://github.com/iml-it/appmonitor.git"; $spcUrl="https://dl.static-php.dev/static-php-cli/spc-bin/nightly/spc-$myos-$myarchitecture$myosextension"; $doneBuild="__done_build-micro__.txt"; $incfile="$selfdir/src/include_checks.php"; /* Filename Last Modified Size Download Count spc-linux-aarch64 2025-02-15 17:30:46 3.4M 451 spc-linux-aarch64.tar.gz 2025-02-15 17:30:46 3.3M 54 spc-linux-x86_64 2025-02-15 17:30:46 3.5M 937 spc-linux-x86_64.tar.gz 2025-02-15 17:30:46 3.3M 282 spc-macos-aarch64 2025-02-15 17:31:40 7.8M 669 spc-macos-aarch64.tar.gz 2025-02-15 17:31:38 3.8M 211 spc-macos-x86_64 2025-02-15 17:31:46 7.8M 463 spc-macos-x86_64.tar.gz 2025-02-15 17:31:45 3.9M 89 spc-windows-x64.exe 2025-02-15 17:30:46 3.9M 551 */ // ---------------------------------------------------------------------- // MAIN // ---------------------------------------------------------------------- echo " \e[1mCLI client\e[0m DEVELOPMENT ENVIRONMENT I N S T A L L E R * U P D A T E R ............................................................................... "; // ---------------------------------------------------------------------- if ($argc > 1) { parse_str(implode('&', array_slice($argv, 1)), $ARGS); } if(isset($ARGS['-h']) || isset($ARGS['--help'])){ echo " - Get appmonitor sources or updates it - Get spc binary - Installations with spc doctor - Download PHP and libs with spc - Build Micro sfx with spc ............................................................................... ✨ \e[1mSYNTAX:\e[0m ./installer.php [OPTIONS] 🔷 \e[1mOPTIONS:\e[0m -h, --help Show this help -r, --reset Reset; delete created folders of installer and build "; exit(0); } _h1("Init"); _chdir($selfdir); if(isset($ARGS['-r']) || isset($ARGS['--reset'])){ _h1("Reset data"); _rm($dirBuild); _rm($dirExternal); _rm($dirPackages); _rm($incfile); } // ---------------------------------------------------------------------- _h1("Create directories"); _mkdir($dirExternal); _mkdir("$dirExternal/bin"); _mkdir($dirBuild); // ---------------------------------------------------------------------- _h1("Get / update Appmonitor repo"); _chdir("$selfdir/$dirExternal"); if(!is_dir("appmonitor")){ _exec("git clone $gitAppmonitor"); } else { _chdir("$selfdir/$dirExternal/appmonitor"); _exec("git pull -f $gitAppmonitor"); } // ---------------------------------------------------------------------- _h1("Generate include file with all available checks..."); // _exec("ln -s $selfdir/$dirExternal/appmonitor/public_html/client $selfdir/src"); _chdir("$selfdir"); $aFiles2Merge=array_merge( [ "$dirExternal/appmonitor/public_html/client/classes/appmonitor-checks.class.php", "$dirExternal/appmonitor/public_html/client/classes/appmonitor-client.class.php", "$dirExternal/appmonitor/public_html/client/classes/validateparam.class.php", // "$dirExternal/appmonitor/public_html/client/classes/validateparam.settings.php", ], glob("$dirExternal/appmonitor/public_html/client/plugins/checks/*php") ); $out="<?php /* This file was generated by ".__FILE__." at ".(date("Y-m-d H:i:s"))." merged files: ".implode("\n ", $aFiles2Merge)." */ "; $sValidationRules=file_get_contents("$dirExternal/appmonitor/public_html/client/classes/validateparam.settings.php"); // echo "$sValidationRules"; die(); foreach($aFiles2Merge as $sMyFile){ $sSource=file_get_contents($sMyFile); $sSource=preg_replace( [ "/include 'validateparam.settings.php';/", "/(require[\ \_].*;)/", "/(\<\?php)/" ], [ $sValidationRules, "// REMOVED-BY-MERGER: $1", "", ], $sSource ); $out.="$sSource\n"; } if(file_put_contents($incfile, $out)){ _ok("$incfile was written"); } _exec("php -l \"$incfile\""); // ---------------------------------------------------------------------- _h1("Get / update spc"); _chdir("$selfdir/$dirExternal/bin"); if(!file_exists($SPC)){ _exec("wget -O $SPC \"$spcUrl\"", true, ($myos == "windows")); } else { _skip("download of spc."); } if (PHP_OS == "Linux") { _exec("chmod +x $SPC"); } // ---------------------------------------------------------------------- _h1("Spc - prepare environment"); _chdir("$selfdir/$dirBuild"); $bDoBild=true; $sDoneData="PHP version $php_version\nExtensions: $php_libs"; if(file_exists($doneBuild)){ $sDone=file_get_contents($doneBuild); if (strstr($sDone, $sDoneData)>=0){ $bDoBild=false; } } if ($bDoBild){ _exec("$SPC --no-interaction doctor"); echo "💡 Hint: this can take a minute on a fresh install ...\n"; _exec($cmdSpcDownload); echo "💡 Hint: this can take 4 minutes on a fresh install or less on module changes ...\n"; _exec($cmdSpcBuild); file_put_contents("$doneBuild", date("Y-m-d H:i:s") . "\n$sDoneData\n"); } else { _skip("Micro already built - php $php_version - extensions \"$php_libs\""); } _h1("Done. You can run build.php to compile the binary."); // ----------------------------------------------------------------------