aboutsummaryrefslogtreecommitdiff
path: root/_make/java.mk
blob: 5e0773202ecd199449d2d7d0bb71766e164632ec (plain)
  1. # GNUMake snippet for java compilation and execution
  2. #
  3. # SPDX-License-Identifier: GPL-3.0-or-later
  4. # SPDX-FileCopyrightText: 2024-2025 Jonas Smedegaard <dr@jones.dk>
  5. #
  6. # Setup:
  7. # In main Makefile...
  8. # * set variable PROJECT
  9. # * set variables PROJECT_FLAVORS CLASSPATHS MODULEPATHS JAVAMODULES
  10. # if needed
  11. # * include this make snippet
  12. STEMS = $(PROJECT) $(PROJECT_FLAVORS:%=$(PROJECT)%) $(EXTRASTEMS)
  13. CLASSES = $(STEMS:=.class)
  14. # account for one annoyingly popular class of non-POSIX system
  15. _java_path_separator := $(if $(filter Windows%,$($(shell uname))),;,:)
  16. _java_module_separator = ,
  17. _java_flag = $(if $2,--$1 $(subst $() ,$3,$(strip $2)))
  18. _java_common_flags = $(strip \
  19. $(call _java_flag,class-path,$(CLASSPATHS),$(_java_path_separator)) \
  20. $(call _java_flag,module-path,$(MODULEPATHS),$(_java_path_separator)) \
  21. $(call _java_flag,add-modules,$(JAVAMODULES),$(_java_module_separator)))
  22. # defaults overridable at make invocation
  23. JAVAC ?= javac
  24. JAVA ?= java
  25. JAVACFLAGS ?= $(strip $(_java_common_flags) -Xlint -Xdoclint -implicit:none)
  26. JAVAFLAGS ?= $(strip $(_java_common_flags))
  27. all:: run-$(PROJECT)
  28. clean::
  29. rm -f $(CLASSES)
  30. $(STEMS:%=check-%): check-%:
  31. checkstyle -c ./_checkstyle/checks.xml $*.java
  32. $(STEMS:%=run-%): run-%: %.class
  33. $(or $(RUNTIME_ENV_$*),$(RUNTIME_ENV)) $(JAVA) $(JAVAFLAGS) $*.java $(or $(RUNTIME_ARGS_$*),$(RUNTIME_ARGS))
  34. %.class: %.java
  35. $(JAVAC) $(JAVACFLAGS) $<
  36. .PHONY: all clean $(STEMS:%=run-%)