aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorromkatv <roman.perepelitsa@gmail.com>2020-05-26 12:14:53 +0300
committerromkatv <roman.perepelitsa@gmail.com>2020-05-26 12:14:53 +0300
commit90df734bf864a2d2253221b32d3e520d144ec83a (patch)
tree5f4980aba2f98bac61205066ee7a73e0bb3e4c6e
parentba6c79e277299e2e033795ade9409331bc32498c (diff)
parent6696212ddecbb5ffae8d71467518cc5651c90b3f (diff)
Merge commit '6696212ddecbb5ffae8d71467518cc5651c90b3f'
-rw-r--r--gitstatus/README.md84
-rwxr-xr-xgitstatus/build34
-rwxr-xr-xgitstatus/install2
-rwxr-xr-xgitstatus/mbuild15
4 files changed, 46 insertions, 89 deletions
diff --git a/gitstatus/README.md b/gitstatus/README.md
index 24ebf75d..291f89bf 100644
--- a/gitstatus/README.md
+++ b/gitstatus/README.md
@@ -511,83 +511,17 @@ by shell bindings automatically.
When you update shell bindings, they may refuse to work with the binary you've built earlier. In
this case you'll need to rebuild.
-### Compiling for distribution
-
-If you want to package gitstatus, it's best to do it based off [releases](
- https://github.com/romkatv/gitstatus/releases).
-
-The following code should work without patching anything in gitstatus sources. If it doesn't, please
-open an issue.
-
-**IMPORTANT:** *Change version to what you want to package. This example doesn't get updated when
-new versions are released.*
-
-```zsh
-# Download and extract gitstatus tarball.
-gitstatus_version=1.1.0 # IMPORTANT: CHANGE VERSION TO WHAT YOU WANT
-wget https://github.com/romkatv/gitstatus/archive/v"$gitstatus_version".tar.gz
-tar -xzf v"$gitstatus_version".tar.gz
-cd gitstatus-"$gitstatus_version"
-
-# Download libgit2 tarball and compile gitstatusd.
-./build -w
-
-# Post-process.
-rm ./deps/libgit2-*.tar.gz
-for file in *.zsh install; do
- zsh -fc "emulate zsh -o no_aliases && zcompile -R -- $file.zwc $file"
-done
-```
+If you are using gitstatus through [Powerlevel10k](https://github.com/romkatv/powerlevel10k), the
+instructions are the same except that you don't need to clone gitstatus. Instead, change your
+current directory to `/path/to/powerlevel10k/gitstatus` (`/path/to/powerlevel10k` is the directory
+where you've installed Powerlevel10k) and run `./build -w -s -d docker` from there as described
+above.
-This needs binutils, cmake, gcc, g++, git, GNU make, wget, zsh and either shasum or sha256sum.
-
-Once build completes, *do not delete or move any files*. Package the whole directory as is. Don't
-add the directory or any of its subdirectories to `PATH`.
-
-You probably don't want to build in docker, so don't pass `-d` to `./build`.
-
-gitstatus depends on a [custom fork of libgit2](https://github.com/romkatv/libgit2/). When you run
-`./build -w`, it'll automatically download the appropriate libgit2 tarball and verify its sha256.
-If you want to separate the downloading of source tarballs from compilation, you can download the
-libgit2 tarball manually and invoke `./build` without `-w`.
-
-```zsh
-# Download and extract gitstatus tarball.
-gitstatus_version=1.1.0 # IMPORTANT: CHANGE VERSION TO WHAT YOU WANT
-wget https://github.com/romkatv/gitstatus/archive/v"$gitstatus_version".tar.gz
-tar -xzf v"$gitstatus_version".tar.gz
-cd gitstatus-"$gitstatus_version"
-
-# Download libgit2 tarball and place it where ./build expects it.
-. ./build.info
-libgit2_path=./deps/libgit2-"$libgit2_version".tar.gz
-libgit2_url=https://github.com/romkatv/libgit2/archive/"$libgit2_version".tar.gz
-wget -O "$libgit2_path" "$libgit2_url"
-
-# Compile gitstatusd.
-./build
-
-# Post-process.
-rm ./deps/libgit2-*.tar.gz
-for file in *.zsh install; do
- zsh -fc "emulate zsh -o no_aliases && zcompile -R -- $file.zwc $file"
-done
-```
+### Compiling for distribution
-Note that the URL and the content of the libgit2 tarball are fully defined by the main gitstatus
-tarball. Thus, you can set URLs and sha256 checksums of the two tarball in the same place (package
-definition) and update them at the same time when bumping package version. In other words, you don't
-have to extract `libgit2_version` programmatically. You can manually copy it from [build.info](
- https://github.com/romkatv/gitstatus/blob/master/build.info) to your package definition, if you
-prefer.
-
-[Powerlevel10k](https://github.com/romkatv/powerlevel10k) has an embedded version of gitstatus. It
-must stay that way. If you decide to package both of them, follow the respective instructions from
-each project. The embedded gitstatus in Powerlevel10k won't conflict with the standalone gitstatus.
-They can have different versions and can coexist within the same Zsh process. Do not attempt to
-surgically remove gitstatus from Powerlevel10k, package the result and then force Powerlevel10k to
-use a separately packaged gitstatus. Instead, treat Powerlevel10k and gitstatus as independent
-projects that don't depend on each other.
+It's currently neither easy nor recommended to package and distribute gitstatus. There are no
+instructions you can follow that would allow you to easily update your package when new versions of
+gitstatus are released. This may change in the future but not soon.
## License
diff --git a/gitstatus/build b/gitstatus/build
index 2cb63f74..78d57ec5 100755
--- a/gitstatus/build
+++ b/gitstatus/build
@@ -110,34 +110,44 @@ cpus="$(command getconf _NPROCESSORS_ONLN 2>/dev/null)" ||
cpus=8
case "$gitstatus_cpu" in
- ppc64le)
- archflag="-mcpu"
- ;;
- *)
- archflag="-march"
- ;;
+ ppc64le) archflag="-mcpu";;
+ *) archflag="-march";;
esac
+cflags="$archflag=$gitstatus_cpu -fno-plt"
+
+if [ "$gitstatus_cpu" = x86-64 ]; then
+ cflags="$cflags -mtune=generic"
+fi
+
libgit2_cmake_flags=
-libgit2_cflags="$archflag=$gitstatus_cpu"
+libgit2_cflags="$cflags"
gitstatus_cxx=g++
-gitstatus_cxxflags="-I${workdir}/libgit2/include -DGITSTATUS_ZERO_NSEC -D_GNU_SOURCE $archflag=$gitstatus_cpu"
+gitstatus_cxxflags="$cflags -I${workdir}/libgit2/include -DGITSTATUS_ZERO_NSEC -D_GNU_SOURCE"
gitstatus_ldflags="-L${workdir}/libgit2/build"
gitstatus_ldlibs=
gitstatus_make=make
case "$gitstatus_kernel" in
linux)
- gitstatus_ldflags="$gitstatus_ldflags -static"
+ if [ -n "$docker_cmd" ]; then
+ gitstatus_ldflags="$gitstatus_ldflags -static"
+ fi
+ gitstatus_ldflags="$gitstatus_ldflags -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now"
+ libgit2_cmake_flags="$libgit2_cmake_flags -DENABLE_REPRODUCIBLE_BUILDS=ON"
;;
freebsd)
gitstatus_make=gmake
gitstatus_ldflags="$gitstatus_ldflags -static"
+ gitstatus_ldflags="$gitstatus_ldflags -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now"
+ libgit2_cmake_flags="$libgit2_cmake_flags -DENABLE_REPRODUCIBLE_BUILDS=ON"
;;
netbsd)
gitstatus_make=gmake
gitstatus_ldflags="$gitstatus_ldflags -static"
+ gitstatus_ldflags="$gitstatus_ldflags -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now"
+ libgit2_cmake_flags="$libgit2_cmake_flags -DENABLE_REPRODUCIBLE_BUILDS=ON"
;;
darwin)
command mkdir -- "$workdir"/lib
@@ -147,12 +157,15 @@ case "$gitstatus_kernel" in
gitstatus_cxxflags="$gitstatus_cxxflags -I/usr/local/opt/libiconv/include"
gitstatus_ldlibs="$gitstatus_ldlibs -liconv"
gitstatus_ldflags="$gitstatus_ldflags -L${workdir}/lib"
+ libgit2_cmake_flags="$libgit2_cmake_flags -DENABLE_REPRODUCIBLE_BUILDS=OFF"
;;
msys*|mingw*)
gitstatus_ldflags="$gitstatus_ldflags -static"
+ libgit2_cmake_flags="$libgit2_cmake_flags -DENABLE_REPRODUCIBLE_BUILDS=ON"
;;
cygwin*)
gitstatus_ldflags="$gitstatus_ldflags -static"
+ libgit2_cmake_flags="$libgit2_cmake_flags -DENABLE_REPRODUCIBLE_BUILDS=ON"
;;
*)
>&2 echo "[internal error] unhandled kernel: $gitstatus_kernel"
@@ -252,7 +265,6 @@ CFLAGS="$libgit2_cflags" command cmake \
-DUSE_GSSAPI=OFF \
-DUSE_NTLMCLIENT=OFF \
-DBUILD_SHARED_LIBS=OFF \
- -DENABLE_REPRODUCIBLE_BUILDS=OFF \
$libgit2_cmake_flags \
..
command make -j "$cpus" VERBOSE=1
@@ -490,6 +502,8 @@ fi
if [ -n "$docker_cmd" ]; then
"$docker_cmd" run \
+ -e docker_cmd="$docker_cmd" \
+ -e docker_image="$docker_image" \
-e gitstatus_kernel="$gitstatus_kernel" \
-e gitstatus_arch="$gitstatus_arch" \
-e gitstatus_cpu="$gitstatus_cpu" \
diff --git a/gitstatus/install b/gitstatus/install
index 126b8339..d243ef9c 100755
--- a/gitstatus/install
+++ b/gitstatus/install
@@ -367,6 +367,8 @@ END
done <"$gitstatus_dir"/install.info
>&2 echo "[gitstatus] error: no gitstatusd found for $uname_s $uname_m"
+ >&2 echo ""
+ >&2 echo "See: https://github.com/romkatv/gitstatus/blob/master/README.md#compiling"
return 1
}
diff --git a/gitstatus/mbuild b/gitstatus/mbuild
index 44800917..cf4bc008 100755
--- a/gitstatus/mbuild
+++ b/gitstatus/mbuild
@@ -283,17 +283,24 @@ function mbuild() {
print -r -- "starting build for $platform on $assets[$platform] (pid $!)"
pids+=($platform $!)
done
+ local failed=()
for platform pid in $pids; do
print -rn -- "$platform => "
if wait $pid; then
print -r -- "ok"
else
- print -r -- "error $?"
- print -r -- "---------------------"
- >&2 cat $logs/$platform
- return 1
+ print -r -- "error"
+ failed+=$platform
fi
done
+ (( $#failed )) || return 0
+ print
+ print -r -- "Error logs:"
+ print
+ for platform in $failed; do
+ print -r -- " $platform => $logs/$platform"
+ done
+ return 1
}
# Copied from https://github.com/romkatv/run-process-tree.