diff --git a/.gitignore b/.gitignore index d8a6230d838a89409f77b57c0fcceef665e9642a..2d06fe7a0c9da7fcff24447cc9d9ec161d08a2e6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ +*.swp +*~ +ncdu.1 +ncurses +static-*/ zig-cache/ zig-out/ -ncdu.1 -*~ -*.swp -static/* -!static/build.sh diff --git a/Makefile b/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..fcea0f815e9a58aa36b59d35baf01afe63e212e0 --- /dev/null +++ b/Makefile @@ -0,0 +1,82 @@ +# Optional semi-standard Makefile with some handy tools. +# Ncdu itself can be built with just the zig build system. + +PREFIX ?= /usr/local +BINDIR ?= ${PREFIX}/bin +MANDIR ?= ${PREFIX}/share/man/man1 + +NCDU_VERSION=$(shell grep 'program_version = "' src/main.zig | sed -e 's/^.*"\(.\+\)".*$$/\1/') + +debug: + zig build + +release: + zig build -Drelease-fast + +clean: + rm -rf zig-cache zig-out + +distclean: clean + rm -f ncdu.1 + +doc: ncdu.1 + +ncdu.1: ncdu.pod src/main.zig + pod2man --center "ncdu manual" --release "ncdu-${NCDU_VERSION}" ncdu.pod >ncdu.1 + +install: install-bin install-doc + +install-bin: release + mkdir -p ${BINDIR} + install -m0755 zig-out/bin/ncdu ${BINDIR}/ + +install-doc: doc + mkdir -p ${MANDIR} + install -m0644 ncdu.1 ${MANDIR}/ + +uninstall: uninstall-bin uninstall-doc + +# XXX: Ideally, these would also remove the directories created by 'install' if they are empty. +uninstall-bin: + rm -f ${BINDIR}/ncdu + +uninstall-doc: + rm -f ${MANDIR}/ncdu.1 + +dist: doc + rm -f ncdu-${NCDU_VERSION}.tar.gz + mkdir ncdu-${NCDU_VERSION} + for f in ncdu.1 `git ls-files | grep -v ^\.gitignore`; do mkdir -p ncdu-${NCDU_VERSION}/`dirname $$f`; ln -s "`pwd`/$$f" ncdu-${NCDU_VERSION}/$$f; done + tar -cophzf ncdu-${NCDU_VERSION}.tar.gz --sort=name ncdu-${NCDU_VERSION} + rm -rf ncdu-${NCDU_VERSION} + + +# ASSUMPTION: the ncurses source tree has been extracted into ncurses/ +# BUG: Zig writes to zig-* in this directory, not the TARGET-specific build one. +# BUG: Doesn't seem to do any static linking :( +static: + mkdir -p static-${TARGET}/nc static-${TARGET}/inst/pkg + cd static-${TARGET}/nc && ../../ncurses/configure --prefix="`pwd`/../inst"\ + --with-pkg-config-libdir="`pwd`/../inst/pkg"\ + --without-cxx --without-cxx-binding --without-ada --without-manpages --without-progs\ + --without-tests --enable-pc-files --without-pkg-config --without-shared --without-debug\ + --without-gpm --without-sysmouse --enable-widec --with-default-terminfo-dir=/usr/share/terminfo\ + --with-terminfo-dirs=/usr/share/terminfo:/lib/terminfo:/usr/local/share/terminfo\ + --with-fallbacks="screen linux vt100 xterm xterm-256color" --host=${TARGET}\ + CC="zig cc --target=${TARGET}"\ + LD="zig cc --target=${TARGET}"\ + AR="zig ar" RANLIB="zig ranlib"\ + CPPFLAGS=-D_GNU_SOURCE && make && make install.libs + cd static-${TARGET} && PKG_CONFIG_LIBDIR="`pwd`/inst/pkg" zig build -Dtarget=${TARGET}\ + --build-file ../build.zig --search-prefix inst/ --cache-dir zig -Drelease-fast=true + @# Alternative approach, bypassing zig-build, but this still refuses to do static linking ("UnableToStaticLink") + @# cd static-${TARGET} && zig build-exe -target ${TARGET} -lc -Iinst/include -Iinst/include/ncursesw -Linst/lib -lncursesw -static ../src/main.zig ../src/ncurses_refs.c + #rm -rf static-${TARGET} + +static-target-%: + $(MAKE) static TARGET=$* + +static-all:\ + # static-target-x86_64-linux-musl \ # Works, but doesn't link statically + # static-target-aarch64-linux-musl \ # Same + # static-target-i386-linux-musl # Broken, linker errors diff --git a/doc/ncdu.pod b/ncdu.pod similarity index 100% rename from doc/ncdu.pod rename to ncdu.pod diff --git a/src/scan.zig b/src/scan.zig index 60fcacaf62b4fa1d90aee50e5b9528716de63f4f..def9c1a5d3c704281ee5ecf1a22ea85b400ccdd3 100644 --- a/src/scan.zig +++ b/src/scan.zig @@ -653,7 +653,7 @@ const Import = struct { // (May store fewer characters in the case of \u escapes, it's not super precise) fn string(self: *Self, buf: []u8) []u8 { if (self.next() != '"') self.die("expected '\"'"); - var n: u64 = 0; + var n: usize = 0; while (true) { const ch = self.next(); switch (ch) {