aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile57
-rw-r--r--README.md41
-rw-r--r--cmd/fscrypt/fscrypt.go34
-rw-r--r--cmd/fscrypt/fscrypt_test.go26
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)
diff --git a/README.md b/README.md
index c6bfa6a..37497a4 100644
--- a/README.md
+++ b/README.md
@@ -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) {}