diff --git a/CMakeLists.txt b/CMakeLists.txt index dd17367b..57eb48fa 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -136,3 +136,33 @@ if (BUILD_TESTS) jsonnet unicode_test parser_test lexer_test libjsonnet++_test libjsonnet_test_locale ) endif() + + +# Man pages +find_program(HELP2MAN_BINARY NAMES help2man) +if (HELP2MAN_BINARY) + message(STATUS "help2man found, man pages will be generated.") + file(MAKE_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/man/man1) + set(CMAKE_INSTALL_MANDIR "share/man" CACHE STRING "Directory for man pages") + + add_custom_command( + OUTPUT ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/man/man1/jsonnet.1 + COMMAND ${HELP2MAN_BINARY} + ARGS --section=1 --name="Jsonnet data templating language interpreter" --output=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/man/man1/jsonnet.1 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/jsonnet + DEPENDS jsonnet + ) + add_custom_command( + OUTPUT ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/man/man1/jsonnetfmt.1 + COMMAND ${HELP2MAN_BINARY} + ARGS --section=1 --name="Jsonnet data templating language interpreter" --output=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/man/man1/jsonnetfmt.1 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/jsonnetfmt + DEPENDS jsonnetfmt + ) + + add_custom_target(jsonnet-man ALL DEPENDS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/man/man1/jsonnet.1) + add_custom_target(jsonnetfmt-man ALL DEPENDS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/man/man1/jsonnetfmt.1) + + install(FILES ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/man/man1/jsonnet.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) + install(FILES ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/man/man1/jsonnetfmt.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) +else() + message(STATUS "help2man not found, man pages will not be generated.") +endif() diff --git a/Makefile b/Makefile index 5fbaaa05..46b1f297 100644 --- a/Makefile +++ b/Makefile @@ -40,6 +40,11 @@ SHARED_LDFLAGS ?= -shared VERSION := $(shell grep '\#define.*LIB_JSONNET_VERSION' include/libjsonnet.h | head -n 1 | cut -f 2 -d '"' | sed 's/^v//g' ) SOVERSION = 0 +# Define the help2man command with appropriate options +HELP2MAN ?= help2man + +MAN1_DIR ?= man/man1 + ################################################################################ # End of user-servicable parts ################################################################################ @@ -123,15 +128,17 @@ ifeq ($(shell uname -s),Darwin) SONAME = -install_name endif -default: jsonnet jsonnetfmt +default: jsonnet jsonnetfmt man -install: bins libs +install: bins libs man mkdir -p $(DESTDIR)$(PREFIX)/bin cp $(BINS) $(DESTDIR)$(PREFIX)/bin/ mkdir -p $(DESTDIR)$(PREFIX)/lib cp $(LIBS) $(DESTDIR)$(PREFIX)/lib/ mkdir -p $(DESTDIR)$(PREFIX)/include cp $(INCS) $(DESTDIR)$(PREFIX)/include/ + mkdir -p $(DESTDIR)$(PREFIX)/share/$(MAN1_DIR) + install -Dm 644 $(addprefix $(MAN1_DIR)/, $(BINS:=.1)) $(DESTDIR)$(PREFIX)/share/$(MAN1_DIR)/ all: $(ALL) @@ -161,6 +168,16 @@ core/desugarer.cpp: core/std.jsonnet.h %.o: %.cpp $(CXX) -c $(CXXFLAGS) $< -o $@ +# Target to generate the man page + +$(MAN1_DIR)/%.1: % | $(MAN1_DIR) + $(HELP2MAN) --output=$@ ./$< + +man: $(addprefix $(MAN1_DIR)/, $(BINS:=.1)) + +$(MAN1_DIR): + mkdir -p $@ + # Commandline executable. jsonnet: cmd/jsonnet.cpp cmd/utils.cpp $(LIB_OBJ) $(CXX) $(CXXFLAGS) $(LDFLAGS) $< cmd/utils.cpp $(LIB_SRC:.cpp=.o) -o $@ @@ -224,7 +241,7 @@ $(RELEASE_FILE): bins dist: $(RELEASE_FILE) clean: - rm -rvf */*~ *~ .*~ */.*.swp .*.swp $(ALL) *.o core/*.jsonnet.h Makefile.depend *.so.* build jsonnet.egg-info $(RELEASE_FILE) + rm -rvf */*~ *~ .*~ */.*.swp .*.swp $(ALL) *.o core/*.jsonnet.h Makefile.depend *.so.* build jsonnet.egg-info $(RELEASE_FILE) man -include Makefile.depend