summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.gitignore4
-rw-r--r--.travis.yml11
-rw-r--r--BUILD.md13
-rw-r--r--Makefile134
-rw-r--r--main.go (renamed from src/fzf/main.go)0
-rw-r--r--src/Makefile119
-rw-r--r--src/README.md106
7 files changed, 144 insertions, 243 deletions
diff --git a/.gitignore b/.gitignore
index 4e88fdf8..61ef4336 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,5 @@
-bin
-src/fzf/fzf-*
+bin/fzf
+target
pkg
Gemfile.lock
.DS_Store
diff --git a/.travis.yml b/.travis.yml
index 3f2a67f7..915e871b 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -16,13 +16,6 @@ install:
- sudo apt-get install -y zsh fish
script: |
- export GOPATH=~/go
- export FZF_BASE=$GOPATH/src/github.com/junegunn/fzf
-
- mkdir -p $GOPATH/src/github.com/junegunn
- ln -s $(pwd) $FZF_BASE
-
- cd $FZF_BASE/src && make test fzf/fzf-linux_amd64 install &&
- cd $FZF_BASE/bin && ln -sf fzf-linux_amd64 fzf-$(./fzf --version)-linux_amd64 &&
- cd $FZF_BASE && yes | ./install && rm -f fzf &&
+ make test install &&
+ ./install --all &&
tmux new "ruby test/test_go.rb > out && touch ok" && cat out && [ -e ok ]
diff --git a/BUILD.md b/BUILD.md
index f52f3950..390d8c2e 100644
--- a/BUILD.md
+++ b/BUILD.md
@@ -10,20 +10,19 @@ Build instructions
### Using Makefile
-```sh
-# Source files are located in src directory
-cd src
+Makefile will set up and use its own `$GOPATH` under the project root.
-# Build fzf binary for your platform in src/fzf
+```sh
+# Build fzf binary for your platform in target
make
# Build fzf binary and copy it to bin directory
make install
-# Build 32-bit and 64-bit executables and tarballs
+# Build 32-bit and 64-bit executables and tarballs in target
make release
-# Make release archives for all supported platforms
+# Make release archives for all supported platforms in target
make release-all
```
@@ -33,7 +32,7 @@ Alternatively, you can build fzf directly with `go get` command without
manually cloning the repository.
```sh
-go get -u github.com/junegunn/fzf/src/fzf
+go get -u github.com/junegunn/fzf
```
Third-party libraries used
diff --git a/Makefile b/Makefile
new file mode 100644
index 00000000..660af461
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,134 @@
+ifndef GOOS
+UNAME_S := $(shell uname -s)
+ifeq ($(UNAME_S),Darwin)
+ GOOS := darwin
+else ifeq ($(UNAME_S),Linux)
+ GOOS := linux
+else
+$(error "$$GOOS is not defined.")
+endif
+endif
+
+ROOT_DIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
+GOPATH := $(ROOT_DIR)/gopath
+SRC_LINK := $(GOPATH)/src/github.com/junegunn/fzf/src
+VENDOR_LINK := $(GOPATH)/src/github.com/junegunn/fzf/vendor
+
+GLIDE_YAML := glide.yaml
+GLIDE_LOCK := glide.lock
+SOURCES := $(wildcard *.go src/*.go src/*/*.go) $(SRC_LINK) $(VENDOR_LINK) $(GLIDE_LOCK)
+
+BINARY32 := fzf-$(GOOS)_386
+BINARY64 := fzf-$(GOOS)_amd64
+BINARYARM5 := fzf-$(GOOS)_arm5
+BINARYARM6 := fzf-$(GOOS)_arm6
+BINARYARM7 := fzf-$(GOOS)_arm7
+BINARYARM8 := fzf-$(GOOS)_arm8
+VERSION := $(shell awk -F= '/version =/ {print $$2}' src/constants.go | tr -d "\" ")
+RELEASE32 := fzf-$(VERSION)-$(GOOS)_386
+RELEASE64 := fzf-$(VERSION)-$(GOOS)_amd64
+RELEASEARM5 := fzf-$(VERSION)-$(GOOS)_arm5
+RELEASEARM6 := fzf-$(VERSION)-$(GOOS)_arm6
+RELEASEARM7 := fzf-$(VERSION)-$(GOOS)_arm7
+RELEASEARM8 := fzf-$(VERSION)-$(GOOS)_arm8
+export GOPATH
+
+# https://en.wikipedia.org/wiki/Uname
+UNAME_M := $(shell uname -m)
+ifeq ($(UNAME_M),x86_64)
+ BINARY := $(BINARY64)
+else ifeq ($(UNAME_M),amd64)
+ BINARY := $(BINARY64)
+else ifeq ($(UNAME_M),i686)
+ BINARY := $(BINARY32)
+else ifeq ($(UNAME_M),i386)
+ BINARY := $(BINARY32)
+else ifeq ($(UNAME_M),armv5l)
+ BINARY := $(BINARYARM5)
+else ifeq ($(UNAME_M),armv6l)
+ BINARY := $(BINARYARM6)
+else ifeq ($(UNAME_M),armv7l)
+ BINARY := $(BINARYARM7)
+else
+$(error "Build on $(UNAME_M) is not supported, yet.")
+endif
+
+all: target/$(BINARY)
+
+target:
+ mkdir -p $@
+
+ifeq ($(GOOS),windows)
+release: target/$(BINARY32) target/$(BINARY64)
+ cd target && cp -f $(BINARY32) fzf.exe && zip $(RELEASE32).zip bin/fzf.exe
+ cd target && cp -f $(BINARY64) fzf.exe && zip $(RELEASE64).zip bin/fzf.exe
+ cd target && rm -f fzf.exe
+else ifeq ($(GOOS),linux)
+release: target/$(BINARY32) target/$(BINARY64) target/$(BINARYARM5) target/$(BINARYARM6) target/$(BINARYARM7) target/$(BINARYARM8)
+ cd target && cp -f $(BINARY32) fzf && tar -czf $(RELEASE32).tgz fzf
+ cd target && cp -f $(BINARY64) fzf && tar -czf $(RELEASE64).tgz fzf
+ cd target && cp -f $(BINARYARM5) fzf && tar -czf $(RELEASEARM5).tgz fzf
+ cd target && cp -f $(BINARYARM6) fzf && tar -czf $(RELEASEARM6).tgz fzf
+ cd target && cp -f $(BINARYARM7) fzf && tar -czf $(RELEASEARM7).tgz fzf
+ cd target && cp -f $(BINARYARM8) fzf && tar -czf $(RELEASEARM8).tgz fzf
+ cd target && rm -f fzf
+else
+release: target/$(BINARY32) target/$(BINARY64)
+ cd target && cp -f $(BINARY32) fzf && tar -czf $(RELEASE32).tgz fzf
+ cd target && cp -f $(BINARY64) fzf && tar -czf $(RELEASE64).tgz fzf
+ cd target && rm -f fzf
+endif
+
+release-all: clean test
+ GOOS=darwin make release
+ GOOS=linux make release
+ GOOS=freebsd make release
+ GOOS=openbsd make release
+ GOOS=windows make release
+
+$(SRC_LINK):
+ mkdir -p $(shell dirname $(SRC_LINK))
+ ln -s $(ROOT_DIR)/src $(SRC_LINK)
+
+$(VENDOR_LINK):
+ mkdir -p $(shell dirname $(VENDOR_LINK))
+ ln -s $(ROOT_DIR)/vendor $(VENDOR_LINK)
+
+$(GLIDE_LOCK): $(GLIDE_YAML)
+ go get -u github.com/Masterminds/glide && $(GOPATH)/bin/glide install && touch $@
+
+test: $(SOURCES)
+ SHELL=/bin/sh GOOS= go test -v -tags "$(TAGS)" \
+ github.com/junegunn/fzf/src \
+ github.com/junegunn/fzf/src/algo \
+ github.com/junegunn/fzf/src/tui \
+ github.com/junegunn/fzf/src/util
+
+install: bin/fzf
+
+clean:
+ rm -rf target
+
+target/$(BINARY32): $(SOURCES)
+ GOARCH=386 go build -a -ldflags "-w -extldflags=$(LDFLAGS)" -tags "$(TAGS)" -o $@
+
+target/$(BINARY64): $(SOURCES)
+ GOARCH=amd64 go build -a -ldflags "-w -extldflags=$(LDFLAGS)" -tags "$(TAGS)" -o $@
+
+# https://github.com/golang/go/wiki/GoArm
+target/$(BINARYARM5): $(SOURCES)
+ GOARCH=arm GOARM=5 go build -a -ldflags "-w -extldflags=$(LDFLAGS)" -tags "$(TAGS)" -o $@
+
+target/$(BINARYARM6): $(SOURCES)
+ GOARCH=arm GOARM=6 go build -a -ldflags "-w -extldflags=$(LDFLAGS)" -tags "$(TAGS)" -o $@
+
+target/$(BINARYARM7): $(SOURCES)
+ GOARCH=arm GOARM=7 go build -a -ldflags "-w -extldflags=$(LDFLAGS)" -tags "$(TAGS)" -o $@
+
+target/$(BINARYARM8): $(SOURCES)
+ GOARCH=arm64 go build -a -ldflags "-w -extldflags=$(LDFLAGS)" -tags "$(TAGS)" -o $@
+
+bin/fzf: target/$(BINARY) | bin
+ cp -f target/$(BINARY) bin/fzf
+
+.PHONY: all release release-all test install clean
diff --git a/src/fzf/main.go b/main.go
index 29d4767c..29d4767c 100644
--- a/src/fzf/main.go
+++ b/main.go
diff --git a/src/Makefile b/src/Makefile
deleted file mode 100644
index 5205b1c1..00000000
--- a/src/Makefile
+++ /dev/null
@@ -1,119 +0,0 @@
-ifndef GOOS
-UNAME_S := $(shell uname -s)
-ifeq ($(UNAME_S),Darwin)
- GOOS := darwin
-else ifeq ($(UNAME_S),Linux)
- GOOS := linux
-else
-$(error "$$GOOS is not defined.")
-endif
-endif
-
-SOURCES := $(wildcard *.go */*.go)
-ROOTDIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))
-BINDIR := $(shell dirname $(ROOTDIR))/bin
-BINARY32 := fzf-$(GOOS)_386
-BINARY64 := fzf-$(GOOS)_amd64
-BINARYARM5 := fzf-$(GOOS)_arm5
-BINARYARM6 := fzf-$(GOOS)_arm6
-BINARYARM7 := fzf-$(GOOS)_arm7
-BINARYARM8 := fzf-$(GOOS)_arm8
-VERSION := $(shell awk -F= '/version =/ {print $$2}' constants.go | tr -d "\" ")
-RELEASE32 := fzf-$(VERSION)-$(GOOS)_386
-RELEASE64 := fzf-$(VERSION)-$(GOOS)_amd64
-RELEASEARM5 := fzf-$(VERSION)-$(GOOS)_arm5
-RELEASEARM6 := fzf-$(VERSION)-$(GOOS)_arm6
-RELEASEARM7 := fzf-$(VERSION)-$(GOOS)_arm7
-RELEASEARM8 := fzf-$(VERSION)-$(GOOS)_arm8
-
-# https://en.wikipedia.org/wiki/Uname
-UNAME_M := $(shell uname -m)
-ifeq ($(UNAME_M),x86_64)
- BINARY := $(BINARY64)
-else ifeq ($(UNAME_M),amd64)
- BINARY := $(BINARY64)
-else ifeq ($(UNAME_M),i686)
- BINARY := $(BINARY32)
-else ifeq ($(UNAME_M),i386)
- BINARY := $(BINARY32)
-else ifeq ($(UNAME_M),armv5l)
- BINARY := $(BINARYARM5)
-else ifeq ($(UNAME_M),armv6l)
- BINARY := $(BINARYARM6)
-else ifeq ($(UNAME_M),armv7l)
- BINARY := $(BINARYARM7)
-else
-$(error "Build on $(UNAME_M) is not supported, yet.")
-endif
-
-all: fzf/$(BINARY)
-
-ifeq ($(GOOS),windows)
-release: fzf/$(BINARY32) fzf/$(BINARY64)
- cd fzf && cp -f $(BINARY32) fzf.exe && zip $(RELEASE32).zip fzf.exe
- cd fzf && cp -f $(BINARY64) fzf.exe && zip $(RELEASE64).zip fzf.exe
- cd fzf && rm -f fzf.exe
-else ifeq ($(GOOS),linux)
-release: fzf/$(BINARY32) fzf/$(BINARY64) fzf/$(BINARYARM5) fzf/$(BINARYARM6) fzf/$(BINARYARM7) fzf/$(BINARYARM8)
- cd fzf && cp -f $(BINARY32) fzf && tar -czf $(RELEASE32).tgz fzf
- cd fzf && cp -f $(BINARY64) fzf && tar -czf $(RELEASE64).tgz fzf
- cd fzf && cp -f $(BINARYARM5) fzf && tar -czf $(RELEASEARM5).tgz fzf
- cd fzf && cp -f $(BINARYARM6) fzf && tar -czf $(RELEASEARM6).tgz fzf
- cd fzf && cp -f $(BINARYARM7) fzf && tar -czf $(RELEASEARM7).tgz fzf
- cd fzf && cp -f $(BINARYARM8) fzf && tar -czf $(RELEASEARM8).tgz fzf
- cd fzf && rm -f fzf
-else
-release: fzf/$(BINARY32) fzf/$(BINARY64)
- cd fzf && cp -f $(BINARY32) fzf && tar -czf $(RELEASE32).tgz fzf
- cd fzf && cp -f $(BINARY64) fzf && tar -czf $(RELEASE64).tgz fzf
- cd fzf && rm -f fzf
-endif
-
-release-all: clean test
- GOOS=darwin make release
- GOOS=linux make release
- GOOS=freebsd make release
- GOOS=openbsd make release
- GOOS=windows make release
-
-deps: $(SOURCES)
- cd .. && go get -u github.com/Masterminds/glide && $(GOPATH)/bin/glide install
-
-test: deps
- SHELL=/bin/sh GOOS= go test -v -tags "$(TAGS)" ./...
-
-install: $(BINDIR)/fzf
-
-uninstall:
- rm -f $(BINDIR)/fzf $(BINDIR)/$(BINARY)
-
-clean:
- cd fzf && rm -f fzf-*
-
-fzf/$(BINARY32): deps
- cd fzf && GOARCH=386 go build -a -ldflags "-w -extldflags=$(LDFLAGS)" -tags "$(TAGS)" -o $(BINARY32)
-
-fzf/$(BINARY64): deps
- cd fzf && GOARCH=amd64 go build -a -ldflags "-w -extldflags=$(LDFLAGS)" -tags "$(TAGS)" -o $(BINARY64)
-
-# https://github.com/golang/go/wiki/GoArm
-fzf/$(BINARYARM5): deps
- cd fzf && GOARCH=arm GOARM=5 go build -a -ldflags "-w -extldflags=$(LDFLAGS)" -tags "$(TAGS)" -o $(BINARYARM5)
-
-fzf/$(BINARYARM6): deps
- cd fzf && GOARCH=arm GOARM=6 go build -a -ldflags "-w -extldflags=$(LDFLAGS)" -tags "$(TAGS)" -o $(BINARYARM6)
-
-fzf/$(BINARYARM7): deps
- cd fzf && GOARCH=arm GOARM=7 go build -a -ldflags "-w -extldflags=$(LDFLAGS)" -tags "$(TAGS)" -o $(BINARYARM7)
-
-fzf/$(BINARYARM8): deps
- cd fzf && GOARCH=arm64 go build -a -ldflags "-w -extldflags=$(LDFLAGS)" -tags "$(TAGS)" -o $(BINARYARM8)
-
-$(BINDIR)/fzf: fzf/$(BINARY) | $(BINDIR)
- cp -f fzf/$(BINARY) $(BINDIR)
- cd $(BINDIR) && ln -sf $(BINARY) fzf
-
-$(BINDIR):
- mkdir -p $@
-
-.PHONY: all deps release release-all test install uninstall clean
diff --git a/src/README.md b/src/README.md
deleted file mode 100644
index ec88ca23..00000000
--- a/src/README.md
+++ /dev/null
@@ -1,106 +0,0 @@
-fzf in Go
-=========
-
-<img src="https://cloud.githubusercontent.com/assets/700826/5725028/028ea834-9b93-11e4-9198-43088c3f295d.gif" height="463" alt="fzf in go">
-
-This directory contains the source code for the new fzf implementation in
-[Go][go].
-
-Upgrade from Ruby version
--------------------------
-
-The install script has been updated to download the right binary for your
-system. If you already have installed fzf, simply git-pull the repository and
-rerun the install script.
-
-```sh
-cd ~/.fzf
-git pull
-./install
-```
-
-Otherwise, follow [the instruction][install] as before. You can also install
-fzf using Homebrew if you prefer that way.
-
-Motivations
------------
-
-### No Ruby dependency
-
-There have always been complaints about fzf being a Ruby script. To make
-matters worse, Ruby 2.1 removed ncurses binding from its standard libary.
-Because of the change, users running Ruby 2.1 or above are forced to build C
-extensions of curses gem to meet the requirement of fzf. The new Go version
-will be distributed as an executable binary so it will be much more accessible
-and should be easier to setup.
-
-### Performance
-
-Many people have been surprised to see how fast fzf is even when it was
-written in Ruby. It stays quite responsive even for 100k+ lines, which is
-well above the size of the usual input.
-
-The new Go version, of course, is significantly faster than that. It has all
-the performance optimization techniques used in Ruby implementation and more.
-It also doesn't suffer from [GIL][gil], so the search performance scales
-proportional to the number of CPU cores. On my MacBook Pro (Mid 2012), the new
-version was shown to be an order of magnitude faster on certain cases. It also
-starts much faster though the difference may not be noticeable.
-
-Build
------
-
-See [BUILD.md](../BUILD.md)
-
-Test
-----
-
-Unit tests can be run with `make test`. Integration tests are written in Ruby
-script that should be run on tmux.
-
-```sh
-cd src
-
-# Unit tests
-make test
-
-# Integration tests
-ruby ../test/test_go.rb
-
-# Build binary for the platform
-make
-
-# Install the executable to ../bin directory
-make install
-
-# Make release archives
-make release
-
-# Make release archives for all supported platforms
-make release-all
-```
-
-Third-party libraries used
---------------------------
-
-- ~[ncurses][ncurses]~
-- [mattn/go-runewidth](https://github.com/mattn/go-runewidth)
- - Licensed under [MIT](http://mattn.mit-license.org)
-- [mattn/go-shellwords](https://github.com/mattn/go-shellwords)
- - Licensed under [MIT](http://mattn.mit-license.org)
-- [mattn/go-isatty](https://github.com/mattn/go-isatty)
- - Licensed under [MIT](http://mattn.mit-license.org)
-- [tcell](https://github.com/gdamore/tcell)
- - Licensed under [Apache License 2.0](https://github.com/gdamore/tcell/blob/master/LICENSE)
-
-License
--------
-
-[MIT](LICENSE)
-
-[install]: https://github.com/junegunn/fzf#installation
-[go]: https://golang.org/
-[gil]: http://en.wikipedia.org/wiki/Global_Interpreter_Lock
-[ncurses]: https://www.gnu.org/software/ncurses/
-[req]: http://golang.org/doc/install
-[tcell]: https://github.com/gdamore/tcell