mirror of
https://review.coreboot.org/flashrom.git
synced 2025-04-27 07:02:34 +02:00
Makefile,meson.build: Add support for Sphinx versions prior to 4.x
As of version 3.x, `sphinx-build` outputs man pages to "8" directory instead of "man8" expected by Makefile and doc/meson.build. See: https://github.com/sphinx-doc/sphinx/issues/7996 https://github.com/sphinx-doc/sphinx/issues/9217 Current solution is to rename "8" to "man8" after documentation build. That enables successful build and installation, as well as dependency tracking at build-system level, but not on `sphinx-build` own level upon which `meson` build blindly relies. Change-Id: I9cd280551a1ba4d17edb2e857d56f80431b61e1b Signed-off-by: Anton Samsonov <devel@zxlab.ru> Reviewed-on: https://review.coreboot.org/c/flashrom/+/77778 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Anastasia Klimchuk <aklm@chromium.org> Reviewed-by: Peter Marheine <pmarheine@chromium.org>
This commit is contained in:
parent
56bb56d8e3
commit
8b074c8b7c
21
Makefile
21
Makefile
@ -228,6 +228,10 @@ CONFIG_LIBPCI_VERSION := $(call dependency_version, libpci)
|
|||||||
CONFIG_LIBPCI_CFLAGS := $(call dependency_cflags, libpci)
|
CONFIG_LIBPCI_CFLAGS := $(call dependency_cflags, libpci)
|
||||||
CONFIG_LIBPCI_LDFLAGS := $(call dependency_ldflags, libpci)
|
CONFIG_LIBPCI_LDFLAGS := $(call dependency_ldflags, libpci)
|
||||||
|
|
||||||
|
CONFIG_SPHINXBUILD_VERSION :=
|
||||||
|
CONFIG_SPHINXBUILD_MAJOR := 0
|
||||||
|
|
||||||
|
|
||||||
# Determine the destination OS, architecture and endian
|
# Determine the destination OS, architecture and endian
|
||||||
# IMPORTANT: The following lines must be placed before TARGET_OS, ARCH or ENDIAN
|
# IMPORTANT: The following lines must be placed before TARGET_OS, ARCH or ENDIAN
|
||||||
# is ever used (of course), but should come after any lines setting CC because
|
# is ever used (of course), but should come after any lines setting CC because
|
||||||
@ -958,6 +962,11 @@ endif
|
|||||||
|
|
||||||
OBJS = $(CHIP_OBJS) $(PROGRAMMER_OBJS) $(LIB_OBJS)
|
OBJS = $(CHIP_OBJS) $(PROGRAMMER_OBJS) $(LIB_OBJS)
|
||||||
|
|
||||||
|
ifeq ($(HAS_SPHINXBUILD), yes)
|
||||||
|
override CONFIG_SPHINXBUILD_VERSION := $(shell $(SPHINXBUILD) --version | cut -d' ' -f2 )
|
||||||
|
override CONFIG_SPHINXBUILD_MAJOR := $(shell echo "$(CONFIG_SPHINXBUILD_VERSION)" | cut -d'.' -f1 )
|
||||||
|
endif
|
||||||
|
|
||||||
|
|
||||||
all: $(PROGRAM)$(EXEC_SUFFIX) $(call has_dependency, $(HAS_SPHINXBUILD), man8/$(PROGRAM).8)
|
all: $(PROGRAM)$(EXEC_SUFFIX) $(call has_dependency, $(HAS_SPHINXBUILD), man8/$(PROGRAM).8)
|
||||||
ifeq ($(ARCH), x86)
|
ifeq ($(ARCH), x86)
|
||||||
@ -1022,7 +1031,7 @@ config:
|
|||||||
echo "The following features are unavailable on your machine: $(UNSUPPORTED_FEATURES)" \
|
echo "The following features are unavailable on your machine: $(UNSUPPORTED_FEATURES)" \
|
||||||
exit 1; \
|
exit 1; \
|
||||||
fi
|
fi
|
||||||
@echo "Checking for program \"sphinx-build\": $(HAS_SPHINXBUILD)"
|
@echo "Checking for program \"sphinx-build\": $(HAS_SPHINXBUILD) $(CONFIG_SPHINXBUILD_VERSION)"
|
||||||
|
|
||||||
%.o: %.c | config
|
%.o: %.c | config
|
||||||
$(CC) -MMD $(CFLAGS) $(CPPFLAGS) $(FLASHROM_CFLAGS) $(FEATURE_FLAGS) -D'FLASHROM_VERSION=$(VERSION)' -o $@ -c $<
|
$(CC) -MMD $(CFLAGS) $(CPPFLAGS) $(FLASHROM_CFLAGS) $(FEATURE_FLAGS) -D'FLASHROM_VERSION=$(VERSION)' -o $@ -c $<
|
||||||
@ -1035,8 +1044,18 @@ libflashrom.a: $(OBJS)
|
|||||||
$(RANLIB) $@
|
$(RANLIB) $@
|
||||||
|
|
||||||
man8/$(PROGRAM).8: doc/*
|
man8/$(PROGRAM).8: doc/*
|
||||||
|
# When using sphinx-build prior to version 4.x, man pages are output
|
||||||
|
# to a directory named "8" instead of expected "man8". We fix that
|
||||||
|
# by renaming "8" to "man8" and creating symlink "8" pointing to "man8".
|
||||||
@if [ "$(HAS_SPHINXBUILD)" = "yes" ]; then \
|
@if [ "$(HAS_SPHINXBUILD)" = "yes" ]; then \
|
||||||
$(SPHINXBUILD) -Drelease=$(VERSION) -b man doc .; \
|
$(SPHINXBUILD) -Drelease=$(VERSION) -b man doc .; \
|
||||||
|
if [ "$(CONFIG_SPHINXBUILD_MAJOR)" -lt 4 ]; then \
|
||||||
|
if [ -d 8 -a ! -L 8 ]; then \
|
||||||
|
rm -rf man8; \
|
||||||
|
mv 8 man8; \
|
||||||
|
ln -s man8 8; \
|
||||||
|
fi \
|
||||||
|
fi \
|
||||||
else \
|
else \
|
||||||
echo "$(SPHINXBUILD) not found. Can't build man-page"; \
|
echo "$(SPHINXBUILD) not found. Can't build man-page"; \
|
||||||
exit 1; \
|
exit 1; \
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
|
|
||||||
sphinx = find_program('sphinx-build', native : true, required : get_option('man-pages').enabled() or get_option('documentation').enabled())
|
sphinx = find_program('sphinx-build', native : true, required : get_option('man-pages').enabled() or get_option('documentation').enabled())
|
||||||
|
sphinx_wrapper = meson.current_source_dir() / 'sphinx-wrapper.sh'
|
||||||
|
|
||||||
man_pages = [
|
man_pages = [
|
||||||
'flashrom.8'
|
'flashrom.8'
|
||||||
@ -14,7 +15,7 @@ if sphinx.found()
|
|||||||
|
|
||||||
custom_target(
|
custom_target(
|
||||||
'man-pages',
|
'man-pages',
|
||||||
command : [sphinx, '-b', 'man', '-q', '-d', '@PRIVATE_DIR@', '-Drelease=' + flashrom_version,'@CURRENT_SOURCE_DIR@', '@OUTDIR@'],
|
command : [sphinx_wrapper, '@OUTDIR@', ' '.join(man_outputs), sphinx, '-b', 'man', '-q', '-d', '@PRIVATE_DIR@', '-Drelease=' + flashrom_version, '@CURRENT_SOURCE_DIR@', '@OUTDIR@'],
|
||||||
build_always_stale : true, # sphinx handles rebuilds
|
build_always_stale : true, # sphinx handles rebuilds
|
||||||
output : man_outputs,
|
output : man_outputs,
|
||||||
install : true,
|
install : true,
|
||||||
|
29
doc/sphinx-wrapper.sh
Executable file
29
doc/sphinx-wrapper.sh
Executable file
@ -0,0 +1,29 @@
|
|||||||
|
#!/bin/sh
|
||||||
|
|
||||||
|
OUTPUT_HOME="$1"
|
||||||
|
MAN_OUTPUTS="$2"
|
||||||
|
SPHINXBUILD="$3"
|
||||||
|
shift 3
|
||||||
|
|
||||||
|
"${SPHINXBUILD}" "$@" || exit $?
|
||||||
|
|
||||||
|
SPHINXBUILD_MAJOR="$("${SPHINXBUILD}" --version | cut -d' ' -f2 | cut -d'.' -f1)"
|
||||||
|
if [ "${SPHINXBUILD_MAJOR}" -ge 4 ]; then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
# sphinx-build 3.x outputs man pages to "8" directory instead of expected "man8".
|
||||||
|
# The following block checks for "man8" (and other output paths in ${MAN_OUTPUTS})
|
||||||
|
# and, if that is missing, but "8" dir exists instead, it renames "8" to "man8"
|
||||||
|
# and creates a symlink named "8" that points to "man8", so that anyone is happy
|
||||||
|
# during the rest of current build and subsequent builds as well.
|
||||||
|
|
||||||
|
for MAN_OUTPUT in ${MAN_OUTPUTS}; do
|
||||||
|
PATH_TARGET="${OUTPUT_HOME}/${MAN_OUTPUT}"
|
||||||
|
PATH_ACTUAL="${OUTPUT_HOME}/${MAN_OUTPUT#man}"
|
||||||
|
if [ -d "${PATH_ACTUAL}" -a ! -L "${PATH_ACTUAL}" ]; then
|
||||||
|
rm -rf "${PATH_TARGET}"
|
||||||
|
mv "${PATH_ACTUAL}" "${PATH_TARGET}"
|
||||||
|
ln -s "${MAN_OUTPUT}" "${PATH_ACTUAL}"
|
||||||
|
fi
|
||||||
|
done
|
Loading…
x
Reference in New Issue
Block a user