Makefile 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109
  1. # imgproxy Makefile
  2. BINARY := ./imgproxy
  3. GOCMD := go
  4. GOBUILD := $(GOCMD) build
  5. GOCLEAN := $(GOCMD) clean
  6. GOTEST := $(GOCMD) test
  7. GOFMT := gofmt
  8. GOLINT := golangci-lint
  9. GOTESTSUM := gotestsum
  10. SRCDIR := .
  11. RCFILE := ./.imgproxyrc
  12. BREW_PREFIX :=
  13. # Common environment setup for CGO builds
  14. ifneq ($(shell which brew),)
  15. BREW_PREFIX := $(shell brew --prefix)
  16. endif
  17. # Export CGO environment variables
  18. export CGO_LDFLAGS_ALLOW := -s|-w
  19. # Library paths for Homebrew-installed libraries on macOS
  20. ifdef BREW_PREFIX
  21. export PKG_CONFIG_PATH := $(PKG_CONFIG_PATH):$(shell brew --prefix libffi)/lib/pkgconfig
  22. export PKG_CONFIG_PATH := $(PKG_CONFIG_PATH):$(shell brew --prefix libarchive)/lib/pkgconfig
  23. export PKG_CONFIG_PATH := $(PKG_CONFIG_PATH):$(shell brew --prefix cfitsio)/lib/pkgconfig
  24. export CGO_LDFLAGS := $(CGO_LDFLAGS) -Wl,-no_warn_duplicate_libraries
  25. endif
  26. # Get build arguments
  27. ifeq (build,$(firstword $(MAKECMDGOALS)))
  28. BUILD_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
  29. endif
  30. # Get run arguments
  31. ifeq (run,$(firstword $(MAKECMDGOALS)))
  32. RUN_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
  33. endif
  34. ifeq (build-and-run,$(firstword $(MAKECMDGOALS)))
  35. RUN_ARGS := $(wordlist 2,$(words $(MAKECMDGOALS)),$(MAKECMDGOALS))
  36. endif
  37. # Default target
  38. .PHONY: all
  39. all: build
  40. # Build the binary. If -o is not provided, it defaults to $(BINARY).
  41. #
  42. # Usage:
  43. # make build -- -o output_name
  44. .PHONY: build
  45. build:
  46. @$(GOBUILD) -o $(BINARY) $(BUILD_ARGS) $(SRCDIR)
  47. # Clean
  48. .PHONY: clean
  49. clean:
  50. echo $$PKG_CONFIG_PATH
  51. @$(GOCLEAN)
  52. rm -f $(BINARY)
  53. # Run imgproxy binary
  54. #
  55. # Usage:
  56. # make run -- arg1 arg2
  57. #
  58. # If .imgproxyrc exists, it will be sourced before running the binary.
  59. .PHONY: run
  60. run: SHELL := bash
  61. run:
  62. ifneq (,$(wildcard $(RCFILE)))
  63. @source $(RCFILE) && $(BINARY) $(RUN_ARGS)
  64. else
  65. @$(BINARY) $(RUN_ARGS)
  66. endif
  67. .PHONY: build-and-run
  68. build-and-run: build run
  69. # Run tests
  70. #
  71. # Usage:
  72. # make test -- -run FooTest
  73. .PHONY: test
  74. test:
  75. ifneq ($(shell which $(GOTESTSUM)),)
  76. @$(GOTESTSUM) ./...
  77. else
  78. @$(GOTEST) -v ./...
  79. endif
  80. # Format code
  81. .PHONY: fmt
  82. fmt:
  83. @$(GOFMT) -s -w .
  84. # Lint code (requires golangci-lint installed)
  85. .PHONY: lint
  86. lint:
  87. @$(GOLINT) run
  88. # Make any unknown target do nothing to avoid "up to date" messages
  89. .PHONY: FORCE
  90. %: FORCE
  91. @: