package/pkg-utils: generate proper JSON strings where they are emitted

Currently, our clean-json macro does two things:
  - remove excessive commas before a closing list or dictionary;
  - escape the backslash.

We are going to need the comma-drop feature of clean-json, but on a
JSON blurb where all the characters, backslash included, are already
all properly escaped, so that we do not need further escape.

So, we drop the backslash escaping from clean-json, and use the newly
introduced mk-json-str helper in every locations where we turn a
Makefile variable into a JSON string.

Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
This commit is contained in:
Yann E. MORIN 2021-11-13 14:28:23 +01:00 committed by Thomas Petazzoni
parent 467917e2da
commit 78afad17bf

View File

@ -96,7 +96,7 @@ endef
# $(1): upper-case package or filesystem name
define json-info
"$($(1)_NAME)": {
"type": "$($(1)_TYPE)",
"type": $(call mk-json-str,$($(1)_TYPE)),
$(if $(filter rootfs,$($(1)_TYPE)), \
$(call _json-info-fs,$(1)), \
$(call _json-info-pkg,$(1)), \
@ -107,47 +107,59 @@ endef
# _json-info-pkg, _json-info-pkg-details, _json-info-fs: private helpers
# for json-info, above
define _json-info-pkg
"name": "$($(1)_RAWNAME)",
"name": $(call mk-json-str,$($(1)_RAWNAME)),
$(if $($(1)_IS_VIRTUAL), \
"virtual": true$(comma),
"virtual": false$(comma)
$(call _json-info-pkg-details,$(1)) \
)
"build_dir": "$(patsubst $(CONFIG_DIR)/%,%,$($(1)_BUILDDIR))",
"build_dir": $(call mk-json-str,$(patsubst $(CONFIG_DIR)/%,%,$($(1)_BUILDDIR))),
$(if $(filter target,$($(1)_TYPE)), \
"install_target": $(call yesno-to-bool,$($(1)_INSTALL_TARGET))$(comma) \
"install_staging": $(call yesno-to-bool,$($(1)_INSTALL_STAGING))$(comma) \
"install_images": $(call yesno-to-bool,$($(1)_INSTALL_IMAGES))$(comma) \
)
"dependencies": [
$(call make-dq-comma-list,$(sort $($(1)_FINAL_ALL_DEPENDENCIES)))
$(call make-comma-list, \
$(foreach dep,$(sort $($(1)_FINAL_ALL_DEPENDENCIES)), \
$(call mk-json-str,$(dep)) \
) \
)
],
"reverse_dependencies": [
$(call make-dq-comma-list,$(sort $($(1)_RDEPENDENCIES)))
$(call make-comma-list, \
$(foreach dep,$(sort $($(1)_RDEPENDENCIES)), \
$(call mk-json-str,$(dep)) \
) \
)
]
$(if $($(1)_CPE_ID_VALID), \
$(comma) "cpe-id": "$($(1)_CPE_ID)" \
$(comma) "cpe-id": $(call mk-json-str,$($(1)_CPE_ID)) \
)
$(if $($(1)_IGNORE_CVES),
$(comma) "ignore_cves": [
$(call make-dq-comma-list,$(sort $($(1)_IGNORE_CVES)))
$(call make-comma-list, \
$(foreach cve,$(sort $($(1)_IGNORE_CVES)), \
$(call mk-json-str,$(cve)) \
) \
)
]
)
endef
define _json-info-pkg-details
"version": "$($(1)_DL_VERSION)",
"licenses": "$($(1)_LICENSE)",
"dl_dir": "$($(1)_DL_SUBDIR)",
"version": $(call mk-json-str,$($(1)_DL_VERSION)),
"licenses": $(call mk-json-str,$($(1)_LICENSE)),
"dl_dir": $(call mk-json-str,$($(1)_DL_SUBDIR)),
"downloads": [
$(foreach dl,$(sort $($(1)_ALL_DOWNLOADS)),
{
"source": "$(notdir $(dl))",
"source": $(call mk-json-str,$(notdir $(dl))),
"uris": [
$(call make-dq-comma-list,
$(subst \|,|,
$(call DOWNLOAD_URIS,$(dl),$(1))
)
$(call make-comma-list, \
$(foreach uri,$(call DOWNLOAD_URIS,$(dl),$(1)), \
$(call mk-json-str,$(subst \|,|,$(uri))) \
) \
)
]
},
@ -157,11 +169,15 @@ endef
define _json-info-fs
"image_name": $(if $($(1)_FINAL_IMAGE_NAME), \
"$($(1)_FINAL_IMAGE_NAME)", \
$(call mk-json-str,$($(1)_FINAL_IMAGE_NAME)), \
null \
),
"dependencies": [
$(call make-dq-comma-list,$(sort $($(1)_DEPENDENCIES)))
$(call make-comma-list, \
$(foreach dep,$(sort $($(1)_DEPENDENCIES)), \
$(call mk-json-str,$(dep)) \
) \
)
]
endef
@ -171,9 +187,8 @@ endef
clean-json = $(strip \
$(subst $(comma)},}, $(subst $(comma)$(space)},$(space)}, \
$(subst $(comma)],], $(subst $(comma)$(space)],$(space)], \
$(subst \,\\, \
$(strip $(1)) \
))))) \
)))) \
)
# mk-json-str -- escape and double-quote a string to make it a valid json string