diff --git a/README.install b/README.install deleted file mode 100644 index a37857e..0000000 --- a/README.install +++ /dev/null @@ -1,14 +0,0 @@ -Installation of ZX - -For more complete installation information see the docs here: -Download/Install page: https://zxq9.com/projects/zomp/download.en.html - -Linux/BSD/OSX/*nix: -To install this program from the current bundle make the install_unix script -executable and run it. ZX will expect you to have $HOME/bin in your $PATH, -though it can install without this (though it may not successfully update -itself after installation). To uninstall make the uninstall_unix script -executable and run it. - -Windows: -Download the Windows installer from the download page (linked above). diff --git a/README.md b/README.md index 7cb8108..9a35d9e 100644 --- a/README.md +++ b/README.md @@ -1,13 +1,34 @@ # ZX: The Zomp client -TLDR: If you have ZX on your system, "zx run [program name]" will launch any Erlang-based program that exists in the Zomp system. -"zx create project" will start a project for you. +ZX is four things: + +1. An end-user client for the Zomp package distribution system +2. A suite of code development and packaging tools in Erlang for Erlang +3. The back-end of Vapor, the Erlang GUI launcher and app browser +4. A runtime service for Erlang programs that need resources or notifications from Zomp + +ZX and Zomp are developed with ZX and hosted with Zomp, so after initial installation keeping up to date is simple. + +If you have ZX on your system, `zx run [program name]` will launch a program. + +`zx create project` will start a project for you. + Read the [docs](http://zxq9.com/projects/zomp/) for more. -Zomp is a from-source code repository and distributed distribution system. -ZX is a front-end for that system that incorporates developer tools with end-user launching functionality. - ## Docs -http://zxq9.com/projects/zomp/ +[http://zxq9.com/projects/zomp/](http://zxq9.com/projects/zomp/) ## Code -https://gitlab.com/zxq9/zx/ +[https://gitlab.com/zxq9/zx/](https://gitlab.com/zxq9/zx/) + +# Installation +For complete installation information see the [installation page](https://zxq9.com/projects/zomp/qs.install.en.html). + +## Linux/BSD/OSX/*nix: +To install this program from the current bundle make the `install_unix` script +executable and run it. ZX will expect you to have `$HOME/bin` in your $PATH, +though it can install without this (though it may not successfully update +itself after installation). To uninstall make the `uninstall_unix` script +executable and run it. + +## Windows: +Download the Windows installer from the [download page](https://zxq9.com/projects/zomp/download.en.html). diff --git a/install b/install new file mode 100755 index 0000000..f188940 --- /dev/null +++ b/install @@ -0,0 +1,57 @@ +#! /bin/bash + +zomp_dir="$HOME"/zomp +bin="$HOME"/bin + +cd "$(dirname $(realpath $0))" +chmod +x uninstall + +if [ -d "$zomp_dir" ] + then + echo "Installation directory $zomp_dir already exists. Aborting." + exit 17 +fi + +if [ ! -d "$bin" ] + then + echo "$bin does not exist. Creating it." + mkdir "$bin" +fi + +if [[ ":$PATH:" == *":$bin:"* ]] + then + echo "$bin was found in \$PATH. Good to go." + else + echo "$bin was not found in \$PATH. Adding it." + export PATH="$bin:$PATH" +fi + +for rc in "$HOME/.profile" "$HOME/.bashrc" "$HOME/.bash_profile" + do + if grep -q "PATH=\"\$HOME/bin:\$PATH\"" "$rc" + then + echo "Path adjustment found in $rc." + else + echo "Path adjustment not found in $rc. Adding it." + echo "export PATH=\"\$HOME/bin:\$PATH\"" >> "$rc" + fi + done + +cp -r zomp "$zomp_dir" +cp unix/zx "$zomp_dir" +cp unix/zxh "$zomp_dir" +cp README.md "$zomp_dir" +cp LICENSE "$zomp_dir" +cp uninstall "$zomp_dir" +ln -s "$zomp_dir"/zx "$bin"/zx +ln -s "$zomp_dir"/zxh "$bin"/zxh + +if zx_link=$(command -v zx) + then + echo "zx found at $zx_link. Checking for upgrade." + echo "Running \`zx upgrade\`..." + zx upgrade + else + echo "zx is not yet in \$PATH." + echo "Add zx's location ($HOME/bin) to \$PATH run \`zx upgrade\`." +fi diff --git a/install.escript b/install.escript deleted file mode 100755 index 5f608f6..0000000 --- a/install.escript +++ /dev/null @@ -1,138 +0,0 @@ -#! /usr/bin/env escript - -%% ZX install script - --mode(compile). - --spec main(Argv :: [string()]) -> no_return(). - -main(_) -> - ok = io:setopts([{encoding, unicode}]), - OS = os:type(), - ZompDir = zomp_dir(OS), - case filelib:is_dir(ZompDir) of - true -> - Message = "Installation directory (~ts) already exists. Aborting.~n", - ok = io:format(Message, [ZompDir]), - halt(0); - false -> - unpack(OS, ZompDir) - end. - - --spec unpack(OS, ZompDir) -> no_return() - when OS :: {Family :: unix | win32, - Name :: atom()}, - ZompDir :: file:filename(). - -unpack(OS, ZompDir) -> - BaseDir = filename:dirname(ZompDir), - {ok, Files} = zip:extract("zomp.zip", [{cwd, BaseDir}]), - ok = io:format("Extracted: ~tp~n", [Files]), - add_launcher(OS, ZompDir). - - --spec add_launcher(OS, ZompDir) -> no_return() - when OS :: {Family :: unix | win32, - Name :: atom()}, - ZompDir :: file:filename(). - -add_launcher({unix, linux}, ZompDir) -> - ok = add_unix_link(ZompDir), - halt(0); -add_launcher({unix, _}, ZompDir) -> - ok = add_unix_link(ZompDir), - halt(0); -add_launcher({win32, nt}, ZompDir) -> - ok = add_windows_link(ZompDir), - halt(0). - - --spec add_unix_link(ZompDir) -> ok - when ZompDir :: file:filename(). - -add_unix_link(ZompDir) -> - Home = filename:dirname(ZompDir), - Link = filename:join(Home, "bin/zx"), - LinkH = filename:join(Home, "bin/zxh"), - HomeBin = filename:dirname(Link), - Target = filename:join(ZompDir, "zx"), - TargetH = filename:join(ZompDir, "zxh"), - ok = filelib:ensure_dir(Link), - LinkCommand = "env LANG=en ln -s " ++ Target ++ " " ++ Link, - LinkCommandH = "env LANG=en ln -s " ++ TargetH ++ " " ++ LinkH, - ModeCommand = "env LANG=en chmod +x " ++ Target, - ModeCommandH = "env LANG=en chmod +x " ++ TargetH, - ok = os_cmd(LinkCommand), - ok = os_cmd(LinkCommandH), - ok = os_cmd(ModeCommand), - ok = os_cmd(ModeCommandH), - Path = os:getenv("PATH"), - Parts = string:lexemes(Path, ":"), - Message = - case lists:member(HomeBin, Parts) of - true -> - "A link to ~ts has been created at ~ts.~n" - "~ts seems to be in $PATH already.~n" - "You should be able to run any Zomp/ZX program as a normal shell~n" - "command by typing `zx`, or with an Erlang shell attached by~n" - "typing `zxh` from anywhere in your system.~n"; - false -> - "A link to ~ts has been created at ~ts. " - "~ts seems to be NOT in your $PATH. " - "You will need to add that to $PATH if you want to be able to run~n" - "zx by simply typing `zx` (or zxh to attach an Erlang shell) from~n" - "anywhere in your system.~n" - end, - io:format(Message, [Target, Link, HomeBin]). - - --spec add_windows_link(ZompDir) -> ok - when ZompDir :: file:filename(). - -add_windows_link(ZompDir) -> - Home = filename:join(os:getenv("HOMEDRIVE"), os:getenv("HOMEPATH")), - Launcher = filename:join(ZompDir, "zx.cmd"), - LauncherH = filename:join(ZompDir, "zxh.cmd"), - Vapor = filename:join(ZompDir, "vapor.cmd"), - Target = filename:join(Home, "zx.cmd"), - TargetH = filename:join(Home, "zxh.cmd"), - VaporL = filename:join([Home, "Desktop", "Vapor.cmd"]), - {ok, _} = file:copy(Launcher, Target), - {ok, _} = file:copy(LauncherH, TargetH), - {ok, _} = file:copy(Vapor, VaporL), - Message = - "`zx` and `zxh` launch scripts have been added to ~p~n" - "(available from cmd.exe in your home directory)~n" - "A GUI program launcher script has been added to the desktop.~n", - io:format(Message, [Home]). - - --spec os_cmd(Command :: string()) -> ok. - -os_cmd(Command) -> - case os:cmd(Command) of - "" -> - ok; - Output -> - ok = io:format("Output of: ~tp~n", [Command]), - io:format("~ts~n", [Output]) - end. - - --spec zomp_dir(OS) -> file:filename() - when OS :: {Family :: unix | win32, - Name :: atom()}. -%% @private -%% Check the host OS and return the absolute path to the zomp filesystem root. - -zomp_dir({unix, _}) -> - Home = os:getenv("HOME"), - filename:join(Home, "zomp"); -zomp_dir({win32, _}) -> - Path = os:getenv("LOCALAPPDATA"), - filename:join(Path, "zomp"); -zomp_dir(Unknown) -> - Message = "zx_install: ERROR Unknown host system type: ~tp", - ok = io:format(Message, [Unknown]), - halt(1). diff --git a/install_unix b/install_unix deleted file mode 100755 index e1378c5..0000000 --- a/install_unix +++ /dev/null @@ -1,17 +0,0 @@ -#! /bin/sh - -if escript_path=$(command -v escript) - then - echo "Using escript found at $escript_path" - escript install.escript - if zx_link=$(command -v zx) - then - echo "zx found in \$PATH at $zx_link. Checking for upgrade." - echo "Running \`zx upgrade\`..." - zx upgrade - else - echo "zx is not yet in \$PATH. Once you have added zx's location to \$PATH run \`zx upgrade\`." - fi - else - echo "Could not locate an Erlang installation." -fi diff --git a/packup b/packup index 87345d0..02752cd 100755 --- a/packup +++ b/packup @@ -1,22 +1,16 @@ -#! /usr/bin/env escript +#! /bin/bash --mode(compile). - -main(_) -> - {ok, BV} = file:read_file("zomp/etc/version.txt"), - Version = string:strip(binary_to_list(BV), both, $\n), - Inner = "zomp.zip", - Outer = "zx-" ++ Version ++ ".zip", - {ok, Inner} = zip:create(Inner, ["zomp"]), - Files = - ["install.escript", - "install_unix", - "uninstall_unix", - "README.md", - "README.install", - "LICENSE", - Inner], - {ok, Outer} = zip:create(Outer, Files), - ok = file:delete(Inner), - ok = io:format("~ts~n", [Outer]), - halt(0). +version=$(head -n1 zomp/etc/version.txt) +name=zx-"$version" +archive_gz="$name".tar.gz +archive_xz="$name".tar.xz +tmpdir=$(mktemp -d) +zxtmp="$tmpdir"/"$name" +mkdir "$zxtmp" +cp -r zomp "$zxtmp" +cp -r unix "$zxtmp" +cp install uninstall README.md LICENSE "$zxtmp" +tar -C "$tmpdir" -zcf "$PWD/$archive_gz" "$name" +tar -C "$tmpdir" -Jcf "$PWD/$archive_xz" "$name" +rm -rf "$tmpdir" +echo "$archive_xz" diff --git a/uninstall_unix b/uninstall similarity index 100% rename from uninstall_unix rename to uninstall diff --git a/zomp/zx b/unix/zx similarity index 100% rename from zomp/zx rename to unix/zx diff --git a/zomp/zxh b/unix/zxh similarity index 100% rename from zomp/zxh rename to unix/zxh diff --git a/vapor.cmd b/windows/vapor.cmd similarity index 100% rename from vapor.cmd rename to windows/vapor.cmd diff --git a/zomp/zx.cmd b/windows/zx.cmd similarity index 100% rename from zomp/zx.cmd rename to windows/zx.cmd diff --git a/zomp/zxh.cmd b/windows/zxh.cmd similarity index 100% rename from zomp/zxh.cmd rename to windows/zxh.cmd