diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..28a12f7 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "thirdparty/Jinja2Cpp"] + path = thirdparty/Jinja2Cpp + url = git@github.com:jinja2cpp/Jinja2Cpp.git diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..64453c0 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,54 @@ +cmake_minimum_required(VERSION 3.1) +project(jinja2cpp-cli CXX) + +set(CMAKE_CXX_STANDARD 14) +set(CMAKE_CXX_STANDARD_REQUIRED ON) +set(CMAKE_CXX_EXTENSIONS OFF) + + +set (CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${CMAKE_CURRENT_BINARY_DIR}) + +set (JINJA2CPP_DEPS_MODE conan-build CACHE STRING "" FORCE) +add_subdirectory (thirdparty/Jinja2Cpp ${CMAKE_CURRENT_BINARY_DIR}/thirdparty/jinja2cpp) + +find_package(boost 1.71 COMPONENTS program_options filesystem REQUIRED) +find_package(jsonformoderncpp 3.7.0 REQUIRED) +find_package(yaml-cpp 0.6.0 REQUIRED) +#find_package(jinja2cpp REQUIRED) + +# Generate Version file +execute_process(COMMAND ${GIT_EXECUTABLE} describe --tags --always OUTPUT_VARIABLE GIT_REPO_VERSION + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/thirdparty/Jinja2Cpp) +configure_file("version.h.in" "version.h") + +add_library(jinja2cpp-libcli + src/command_line.cpp + src/command_line_j2.cpp + src/command_line.h + src/param_resolver.cpp + src/param_resolver.h + src/yaml_reflector.h + ) +add_library(jinja2cpp::cli ALIAS jinja2cpp-libcli) +target_include_directories(jinja2cpp-libcli PUBLIC ${CMAKE_CURRENT_BINARY_DIR}) +target_link_libraries(jinja2cpp-libcli PUBLIC jinja2cpp + jsonformoderncpp::jsonformoderncpp + yaml-cpp::yaml-cpp + boost::boost + ) + +add_executable(${PROJECT_NAME} src/main.cpp) +target_link_libraries(${PROJECT_NAME} jinja2cpp::cli) +set_target_properties (${PROJECT_NAME} PROPERTIES + CXX_STANDARD 14 + CXX_STANDARD_REQUIRED ON) + +add_executable(j2cpp-cli src/main_j2.cpp) +target_link_libraries(j2cpp-cli jinja2cpp::cli) +set_target_properties (j2cpp-cli PROPERTIES + CXX_STANDARD 14 + CXX_STANDARD_REQUIRED ON) + +# Setup testing +enable_testing() +add_subdirectory(test) diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..99fa4ea --- /dev/null +++ b/Dockerfile @@ -0,0 +1,28 @@ +FROM ubuntu:disco as builder + +LABEL maintainer="Andrey Bronin " + +RUN apt-get update && \ + apt-get install -y nano git build-essential cmake python3-pip && \ + pip3 install conan + +RUN conan user +RUN conan remote add bincrafters https://api.bintray.com/conan/bincrafters/public-conan +RUN conan remote add flexferrum https://api.bintray.com/conan/flexferrum/conan-packages +RUN conan remote add martin https://api.bintray.com/conan/martinmoene/nonstd-lite + +COPY . /project +WORKDIR /project + +RUN conan install . --build=missing +RUN cmake -DCMAKE_BUILD_TYPE=Release . && make + +FROM ubuntu:disco +COPY --from=builder /project/bin/jinja2cpp-cli /jinja2cpp + +# RUN apk update && \ +# apk upgrade && \ +# apk --update add libstdc++ \ +# rm -rf /var/cache/apk/* + +ENTRYPOINT [ "/jinja2cpp" ] diff --git a/Dockerfile.alpine b/Dockerfile.alpine new file mode 100644 index 0000000..c2e87cc --- /dev/null +++ b/Dockerfile.alpine @@ -0,0 +1,37 @@ +FROM alpine:latest as builder + +LABEL maintainer="Andrey Bronin " + +RUN apk update && \ + apk upgrade && \ + apk --update add \ +# alpine-sdk \ + g++ \ + build-base \ + cmake \ + libstdc++ \ + git \ + linux-headers \ + py-pip && \ + pip install conan && \ + rm -rf /var/cache/apk/* + +COPY . /project +WORKDIR /project +RUN conan user +RUN conan remote add bincrafters https://api.bintray.com/conan/bincrafters/public-conan +RUN conan remote add andreybronin https://api.bintray.com/conan/andreybronin/conan +RUN conan remote add martinmoene https://api.bintray.com/conan/martinmoene/nonstd-lite +RUN conan remote add flexferrum https://api.bintray.com/conan/flexferrum/conan-packages +RUN conan install . --build=missing +RUN cmake -DCMAKE_BUILD_TYPE=Release . && make + +FROM alpine:latest +COPY --from=builder /project/bin/jinja2cpp-cli /jinja2cpp + +RUN apk update && \ + apk upgrade && \ + apk --update add libstdc++ \ + rm -rf /var/cache/apk/* + +ENTRYPOINT [ "/jinja2cpp" ] diff --git a/README.md b/README.md index f70d651..f61f825 100644 --- a/README.md +++ b/README.md @@ -1 +1,17 @@ -# tools-cli \ No newline at end of file +# Jinja2cpp CLI tool + +``` +Usage: jinja2cpp [options] +Options: + -h [ --help ] Display this help message + -v [ --version ] Display the version number + --format Format of input variables: auto, ini, json, yaml, toml + --input-template arg Input template file path + --input-data arg Define template variable in the form of key=value +``` + +### Docker + +``` +docker run --rm bronin/jinja2cpp -h +``` diff --git a/conanfile.txt b/conanfile.txt new file mode 100644 index 0000000..00f825f --- /dev/null +++ b/conanfile.txt @@ -0,0 +1,20 @@ +[requires] +boost/1.71.0 +gtest/1.8.1 +variant-lite/1.2.2 +expected-lite/0.3.0 +optional-lite/3.2.0 +string-view-lite/1.3.0 +fmt/5.3.0 + +yaml-cpp/0.6.3 +jsonformoderncpp/3.7.0@vthiery/stable +tinytoml/0.4@bincrafters/stable + +[options] +jinja2cpp:shared=False +gtest:shared=False +boost:shared=False + +[generators] +cmake_find_package diff --git a/src/command_line.cpp b/src/command_line.cpp new file mode 100644 index 0000000..2fb6ec1 --- /dev/null +++ b/src/command_line.cpp @@ -0,0 +1,100 @@ +#include "command_line.h" +#include "param_resolver.h" +#include + +#include + +#include +#include + +namespace jinja2 +{ + +CommandLine::CommandLine(std::unique_ptr