diff --git a/netutils/jsoncpp/.gitignore b/netutils/jsoncpp/.gitignore new file mode 100644 index 000000000..2f576d540 --- /dev/null +++ b/netutils/jsoncpp/.gitignore @@ -0,0 +1 @@ +/jsoncpp diff --git a/netutils/jsoncpp/CMakeLists.txt b/netutils/jsoncpp/CMakeLists.txt new file mode 100644 index 000000000..61422e948 --- /dev/null +++ b/netutils/jsoncpp/CMakeLists.txt @@ -0,0 +1,49 @@ +# ############################################################################## +# apps/netutils/jsoncpp/CMakeLists.txt +# +# Licensed to the Apache Software Foundation (ASF) under one or more contributor +# license agreements. See the NOTICE file distributed with this work for +# additional information regarding copyright ownership. The ASF licenses this +# file to you under the Apache License, Version 2.0 (the "License"); you may not +# use this file except in compliance with the License. You may obtain a copy of +# the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations under +# the License. +# +# ############################################################################## + +if(CONFIG_NETUTILS_JSONCPP) + set(JSONCPP_DIR ${CMAKE_CURRENT_LIST_DIR}/jsoncpp) + + if(NOT EXISTS ${JSONCPP_DIR}) + set(JSONCPP_URL + https://github.com/open-source-parsers/jsoncpp/archive/refs/tags) + set(JSONCPP_VERSION ${CONFIG_JSONCPP_VERSION}) + FetchContent_Declare( + jsoncpp_fetch + URL ${JSONCPP_URL}/${JSONCPP_VERSION}.zip SOURCE_DIR ${JSONCPP_DIR} + BINARY_DIR ${CMAKE_BINARY_DIR}/apps/netutils/jsoncpp + DOWNLOAD_NO_PROGRESS true + TIMEOUT 30) + + FetchContent_GetProperties(jsoncpp_fetch) + + if(NOT jsoncpp_fetch_POPULATED) + FetchContent_Populate(jsoncpp_fetch) + endif() + endif() + + target_include_directories(apps PUBLIC jsoncpp/include) + target_compile_options(apps PRIVATE -DJSON_USE_EXCEPTION=0) + target_sources( + apps + PRIVATE jsoncpp/src/lib_json/json_writer.cpp + jsoncpp/src/lib_json/json_value.cpp + jsoncpp/src/lib_json/json_reader.cpp) +endif() diff --git a/netutils/jsoncpp/Kconfig b/netutils/jsoncpp/Kconfig new file mode 100644 index 000000000..7eda5166f --- /dev/null +++ b/netutils/jsoncpp/Kconfig @@ -0,0 +1,22 @@ +# +# For a description of the syntax of this configuration file, +# see the file kconfig-language.txt in the NuttX tools repository. +# + +config NETUTILS_JSONCPP + bool "JSONCPP" + default n + ---help--- + JsonCpp is a C++ library that allows manipulating JSON values, + including serialization and deserialization to and from strings. + It can also preserve existing comment in unserialization/ + serialization steps, making it a convenient format to store user + input files. + +if NETUTILS_JSONCPP + +config JSONCPP_VERSION + string "Jsoncpp Version" + default "1.9.5" + +endif # NETUTILS_JSONCPP diff --git a/netutils/jsoncpp/Make.defs b/netutils/jsoncpp/Make.defs new file mode 100644 index 000000000..3803ab9c0 --- /dev/null +++ b/netutils/jsoncpp/Make.defs @@ -0,0 +1,24 @@ +############################################################################ +# apps/netutils/jsoncpp/Make.defs +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. The +# ASF licenses this file to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance with the +# License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +############################################################################ + +ifneq ($(CONFIG_NETUTILS_JSONCPP),) +CONFIGURED_APPS += $(APPDIR)/netutils/jsoncpp +CXXFLAGS += ${INCDIR_PREFIX}$(APPDIR)$(DELIM)netutils$(DELIM)jsoncpp$(DELIM)jsoncpp$(DELIM)include +endif diff --git a/netutils/jsoncpp/Makefile b/netutils/jsoncpp/Makefile new file mode 100644 index 000000000..58f301ff5 --- /dev/null +++ b/netutils/jsoncpp/Makefile @@ -0,0 +1,58 @@ +############################################################################ +# apps/netutils/jsoncpp/Makefile +# +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. The +# ASF licenses this file to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance with the +# License. You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. +# +############################################################################ + +include $(APPDIR)/Make.defs + +JSONCPP_URL ?= "https://github.com/open-source-parsers/jsoncpp/archive/refs/tags" + +JSONCPP_VERSION = $(patsubst "%",%,$(strip $(CONFIG_JSONCPP_VERSION))) +JSONCPP_ZIP = $(CONFIG_JSONCPP_VERSION).zip + +JSONCPP_UNPACKNAME = jsoncpp +UNPACK ?= unzip -q -o + +$(JSONCPP_ZIP): + @echo "Downloading: $(JSONCPP_URL)/$(JSONCPP_ZIP)" + $(Q) curl -O -L $(JSONCPP_URL)/$(JSONCPP_ZIP) + +$(JSONCPP_UNPACKNAME): $(JSONCPP_ZIP) + @echo "Unpacking: $(JSONCPP_ZIP) -> $(JSONCPP_UNPACKNAME)" + $(Q) $(UNPACK) $(JSONCPP_ZIP) + $(Q) mv jsoncpp-$(JSONCPP_VERSION) $(JSONCPP_UNPACKNAME) + $(Q) touch $(JSONCPP_UNPACKNAME) + +# Download and unpack tarball if no git repo found +ifeq ($(wildcard $(JSONCPP_UNPACKNAME)),) +context:: $(JSONCPP_UNPACKNAME) + +distclean:: + $(call DELDIR, $(JSONCPP_UNPACKNAME)) + $(call DELFILE, $(JSONCPP_ZIP)) +endif + +CXXEXT = .cpp + +CXXFLAGS += -DJSON_USE_EXCEPTION=0 + +CXXSRCS += jsoncpp/src/lib_json/json_writer.cpp +CXXSRCS += jsoncpp/src/lib_json/json_value.cpp +CXXSRCS += jsoncpp/src/lib_json/json_reader.cpp + +include $(APPDIR)/Application.mk