Skip to content

Commit b270ac1

Browse files
committed
Add manpages for commands automatically
1 parent 52ce23a commit b270ac1

File tree

2 files changed

+50
-3
lines changed

2 files changed

+50
-3
lines changed

CMakeLists.txt

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -136,3 +136,33 @@ if (BUILD_TESTS)
136136
jsonnet unicode_test parser_test lexer_test libjsonnet++_test libjsonnet_test_locale
137137
)
138138
endif()
139+
140+
141+
# Man pages
142+
find_program(HELP2MAN_BINARY NAMES help2man)
143+
if (HELP2MAN_BINARY)
144+
message(STATUS "help2man found, man pages will be generated.")
145+
file(MAKE_DIRECTORY ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/man/man1)
146+
set(CMAKE_INSTALL_MANDIR "share/man" CACHE STRING "Directory for man pages")
147+
148+
add_custom_command(
149+
OUTPUT ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/man/man1/jsonnet.1
150+
COMMAND ${HELP2MAN_BINARY}
151+
ARGS --section=1 --name="Jsonnet data templating language interpreter" --output=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/man/man1/jsonnet.1 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/jsonnet
152+
DEPENDS jsonnet
153+
)
154+
add_custom_command(
155+
OUTPUT ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/man/man1/jsonnetfmt.1
156+
COMMAND ${HELP2MAN_BINARY}
157+
ARGS --section=1 --name="Jsonnet data templating language interpreter" --output=${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/man/man1/jsonnetfmt.1 ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/jsonnetfmt
158+
DEPENDS jsonnetfmt
159+
)
160+
161+
add_custom_target(jsonnet-man ALL DEPENDS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/man/man1/jsonnet.1)
162+
add_custom_target(jsonnetfmt-man ALL DEPENDS ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/man/man1/jsonnetfmt.1)
163+
164+
install(FILES ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/man/man1/jsonnet.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
165+
install(FILES ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/man/man1/jsonnetfmt.1 DESTINATION ${CMAKE_INSTALL_MANDIR}/man1)
166+
else()
167+
message(STATUS "help2man not found, man pages will not be generated.")
168+
endif()

Makefile

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,11 @@ SHARED_LDFLAGS ?= -shared
4040
VERSION := $(shell grep '\#define.*LIB_JSONNET_VERSION' include/libjsonnet.h | head -n 1 | cut -f 2 -d '"' | sed 's/^v//g' )
4141
SOVERSION = 0
4242

43+
# Define the help2man command with appropriate options
44+
HELP2MAN ?= help2man
45+
46+
MAN1_DIR ?= man/man1
47+
4348
################################################################################
4449
# End of user-servicable parts
4550
################################################################################
@@ -123,15 +128,17 @@ ifeq ($(shell uname -s),Darwin)
123128
SONAME = -install_name
124129
endif
125130

126-
default: jsonnet jsonnetfmt
131+
default: jsonnet jsonnetfmt man
127132

128-
install: bins libs
133+
install: bins libs man
129134
mkdir -p $(DESTDIR)$(PREFIX)/bin
130135
cp $(BINS) $(DESTDIR)$(PREFIX)/bin/
131136
mkdir -p $(DESTDIR)$(PREFIX)/lib
132137
cp $(LIBS) $(DESTDIR)$(PREFIX)/lib/
133138
mkdir -p $(DESTDIR)$(PREFIX)/include
134139
cp $(INCS) $(DESTDIR)$(PREFIX)/include/
140+
mkdir -p $(DESTDIR)$(PREFIX)/share/$(MAN1_DIR)
141+
install -Dm 644 $(addprefix $(MAN1_DIR)/, $(BINS:=.1)) $(DESTDIR)$(PREFIX)/share/$(MAN1_DIR)/
135142

136143
all: $(ALL)
137144

@@ -161,6 +168,16 @@ core/desugarer.cpp: core/std.jsonnet.h
161168
%.o: %.cpp
162169
$(CXX) -c $(CXXFLAGS) $< -o $@
163170

171+
# Target to generate the man page
172+
173+
$(MAN1_DIR)/%.1: % | $(MAN1_DIR)
174+
$(HELP2MAN) --output=$@ ./$<
175+
176+
man: $(addprefix $(MAN1_DIR)/, $(BINS:=.1))
177+
178+
$(MAN1_DIR):
179+
mkdir -p $@
180+
164181
# Commandline executable.
165182
jsonnet: cmd/jsonnet.cpp cmd/utils.cpp $(LIB_OBJ)
166183
$(CXX) $(CXXFLAGS) $(LDFLAGS) $< cmd/utils.cpp $(LIB_SRC:.cpp=.o) -o $@
@@ -224,7 +241,7 @@ $(RELEASE_FILE): bins
224241
dist: $(RELEASE_FILE)
225242

226243
clean:
227-
rm -rvf */*~ *~ .*~ */.*.swp .*.swp $(ALL) *.o core/*.jsonnet.h Makefile.depend *.so.* build jsonnet.egg-info $(RELEASE_FILE)
244+
rm -rvf */*~ *~ .*~ */.*.swp .*.swp $(ALL) *.o core/*.jsonnet.h Makefile.depend *.so.* build jsonnet.egg-info $(RELEASE_FILE) man
228245

229246
-include Makefile.depend
230247

0 commit comments

Comments
 (0)