diff options
| -rw-r--r-- | Makefile | 57 | ||||
| -rw-r--r-- | README.md | 41 | ||||
| -rw-r--r-- | cmd/fscrypt/fscrypt.go | 34 | ||||
| -rw-r--r-- | cmd/fscrypt/fscrypt_test.go | 26 |
4 files changed, 151 insertions, 7 deletions
diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..a174471 --- /dev/null +++ b/Makefile @@ -0,0 +1,57 @@ +# Makefile for fscrypt +# +# Copyright 2017 Google Inc. +# Author: Joe Richey (joerichey@google.com) +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. + +NAME = fscrypt +BUILD_DIR = build +CFLAGS += -O2 -Wall + +CMD_DIR = $(NAME)/cmd/$(NAME) + +# So we don't have to put our flags in each go file. This also lets the caller +# of the makefile change the build flags in the normal manner: +# make fscrypt "LDFLAGS += -static" +export CGO_CFLAGS = $(CFLAGS) +ifdef LDFLAGS + GOFLAGS += --ldflags '-extldflags "$(LDFLAGS)"' +endif + +.PHONY: default all $(NAME) go lint format install clean + +default: $(NAME) +all: format lint go $(NAME) + +$(NAME): + @mkdir -p $(BUILD_DIR) + go build $(GOFLAGS) -o $(BUILD_DIR)/$(NAME) $(CMD_DIR) + +# Makes sure go files build and tests pass +go: + go build $(GOFLAGS) -o /dev/null ./... + go test $(GOFLAGS) ./... + +lint: + @golint ./... || true + @go vet ./... + +format: + go fmt ./... + +install: + go install $(GOFLAGS) ./... + +clean: + rm -rf $(BUILD_DIR) @@ -55,18 +55,31 @@ background. `fscrypt` has a [design document](https://goo.gl/55cCrI) that discusses many of the higher level design choices that were made. Specifically, `fscrypt` contains the following functionality: -* TODO +* Telling the time (but this is a stub program) ## Building -<!-- TODO: Change git clone URL before public release --> -Get the source by running `git clone [REDACTED] fscrypt`. -You need to [setup your `GOPATH`](https://golang.org/doc/code.html#GOPATH) and -clone the repository into `$GOPATH/src/fscrypt`. +`fscrypt` is written in Go, so to build the program you will need to +[setup Go](https://golang.org/doc/install), +[setup your `GOPATH`](https://golang.org/doc/code.html#GOPATH), and clone the +repository into the correct location by running +```shell <!-- TODO: Change git clone URL before public release --> +git clone [REDACTED] $GOPATH/src/fscrypt +``` +You will also want to add `$GOPATH/bin` to your `$PATH`. + +Once this is setup, you can run `make fscrypt` to build the executable in +`build/fscrypt`. The only other build dependencies are `make` and a C compiler. +Pass `"LDFLAGS += -static"` to `make` to get a static executable. If a Go +project contains C code, the go compiler produces a dynamically linked binary by +default. ## Running and Installing -TODO +`fscrypt` is a standalone binary, and it currently has no runtime dependencies. +Installing it just requires placing it in your path or running `make install`. +Change `$GOBIN` to change the install location of `fscrypt`; by default it is +installed to `$GOPATH/bin`. ## Example Usage @@ -74,7 +87,21 @@ TODO ## Contributing -TODO +If you are making changes to the `fscrypt` component, you will need the +following additional commands: +* `make go` - Checks that all the go files build and tests pass. +* `make format` - Formats all of the go code. +* `make lint` - Checks the code for style errors, requires + [`golint`](https://github.com/golang/lint) to be installed. +* `make all` - Does the above three commands and builds `fscrypt`. + +Make sure that `$GOPATH/bin` is in you `$PATH`. All the above dependencies can +be installed with: +```bash +> go get -u github.com/golang/lint/golint +``` + +These commands should be run before submitting any changes. ## Known Issues diff --git a/cmd/fscrypt/fscrypt.go b/cmd/fscrypt/fscrypt.go new file mode 100644 index 0000000..191d4fb --- /dev/null +++ b/cmd/fscrypt/fscrypt.go @@ -0,0 +1,34 @@ +/* + * fscrypt.go - Stub file which currently just prints out the time + * + * Copyright 2017 Google Inc. + * Author: Joe Richey (joerichey@google.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +/* +fscrypt is a comprehensive command line tool for managing filesystem encryption. + +It currently just tells the time. +*/ +package main + +import ( + "fmt" + "time" +) + +func main() { + fmt.Printf("The time is now: %v\n", time.Now()) +} diff --git a/cmd/fscrypt/fscrypt_test.go b/cmd/fscrypt/fscrypt_test.go new file mode 100644 index 0000000..cbeacdf --- /dev/null +++ b/cmd/fscrypt/fscrypt_test.go @@ -0,0 +1,26 @@ +/* + * fscrypt_test.go - Stub test file that has one test that always passes. + * + * Copyright 2017 Google Inc. + * Author: Joe Richey (joerichey@google.com) + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ + +package main + +import ( + "testing" +) + +func TestTrivial(t *testing.T) {} |