From f28cd1ada9e4e28b5bd6a095647074e4ddcf285c Mon Sep 17 00:00:00 2001 From: bnnm Date: Sun, 28 Jul 2024 18:40:05 +0200 Subject: [PATCH] cleanup: remove jansson dependency --- .github/workflows/cmake-lx.yml | 2 +- .github/workflows/cmake-mac.yml | 2 +- .github/workflows/cmake-wasm.yml | 7 - CMakeLists.txt | 6 - cli/CMakeLists.txt | 6 - cmake/dependencies/jansson.cmake | 57 ---- configure.ac | 5 - doc/CMAKE.md | 4 - ext_includes/jansson/jansson.h | 386 -------------------------- ext_includes/jansson/jansson_config.h | 55 ---- ext_libs/ext_libs.vcxproj | 5 - ext_libs/jansson.def | 78 ------ ext_libs/jansson.dll | Bin 41472 -> 0 bytes make-build-cmake.sh | 1 - msvc-build.ps1 | 2 +- vgmstream_msvc.props | 2 +- 16 files changed, 4 insertions(+), 614 deletions(-) delete mode 100644 cmake/dependencies/jansson.cmake delete mode 100644 ext_includes/jansson/jansson.h delete mode 100644 ext_includes/jansson/jansson_config.h delete mode 100644 ext_libs/jansson.def delete mode 100644 ext_libs/jansson.dll diff --git a/.github/workflows/cmake-lx.yml b/.github/workflows/cmake-lx.yml index a1d83127..78592d84 100644 --- a/.github/workflows/cmake-lx.yml +++ b/.github/workflows/cmake-lx.yml @@ -23,7 +23,7 @@ jobs: - name: Install dependencies run: | sudo apt-get update - sudo apt-get install -y libjansson-dev yasm libopus-dev + sudo apt-get install -y yasm libopus-dev - name: Create build environment # Some projects don't allow in-source building, so create a separate build directory diff --git a/.github/workflows/cmake-mac.yml b/.github/workflows/cmake-mac.yml index 54763d1b..89609338 100644 --- a/.github/workflows/cmake-mac.yml +++ b/.github/workflows/cmake-mac.yml @@ -19,7 +19,7 @@ jobs: fetch-depth: 0 - name: Install dependencies - run: brew install autoconf automake cmake pkgconfig ffmpeg jansson libao libvorbis mpg123 + run: brew install autoconf automake cmake pkgconfig ffmpeg libao libvorbis mpg123 - name: Cache celt uses: actions/cache@v4 diff --git a/.github/workflows/cmake-wasm.yml b/.github/workflows/cmake-wasm.yml index 338b3ad0..ece4ca44 100644 --- a/.github/workflows/cmake-wasm.yml +++ b/.github/workflows/cmake-wasm.yml @@ -49,13 +49,6 @@ jobs: ${{runner.workspace}}/embuild/dependencies/ffmpeg/bin/usr/local/lib key: wasm-ffmpeg-${{ hashFiles('cmake/dependencies/ffmpeg.cmake') }} - - name: Cache jansson - uses: actions/cache@v4 - with: - path: | - ${{runner.workspace}}/embuild/dependencies/jansson/src/.libs - key: wasm-jansson-${{ hashFiles('cmake/dependencies/jansson.cmake') }} - - name: Cache atrac9 uses: actions/cache@v4 with: diff --git a/CMakeLists.txt b/CMakeLists.txt index f34fe127..4686d2ab 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -63,9 +63,6 @@ option(USE_G719 "Use libg719_decode for support ITU-T G.719" ON) option(USE_ATRAC9 "Use LibAtrac9 for support of ATRAC9" ON) option(USE_CELT "Use libcelt for support of FSB CELT versions 0.6.1 and 0.11.0" ON) option(USE_SPEEX "Use libspeex for support of SPEEX" ON) -if(NOT WIN32) - option(USE_JANSSON "Use jansson for JSON dumping" ON) -endif() if(NOT WIN32) set(MPEG_PATH CACHE PATH "Path to mpg123") @@ -78,7 +75,6 @@ if(NOT WIN32) set(CELT_0061_PATH CACHE PATH "Path to CELT version 0.6.1") set(CELT_0110_PATH CACHE PATH "Path to CELT version 0.11.0") set(LIBAO_PATH CACHE PATH "Path to libao") - set(JANSSON_PATH CACHE PATH "Path to jansson") endif() # Build choices @@ -158,7 +154,6 @@ include(dependencies/g719) include(dependencies/atrac9) include(dependencies/celt) include(dependencies/speex) -include(dependencies/jansson) include(dependencies/audacious) if(USE_G7221) @@ -273,7 +268,6 @@ message(STATUS " FSB CELT: ${USE_CELT} ${CELT_SOURCE}") message(STATUS " SPEEX: ${USE_SPEEX} ${SPEEX_SOURCE}") if(NOT WIN32) message(STATUS " LIBAO: ${BUILD_V123} ${LIBAO_SOURCE}") - message(STATUS " Jansson: ${USE_JANSSON} ${JANSSON_SOURCE}") endif() message(STATUS "") diff --git a/cli/CMakeLists.txt b/cli/CMakeLists.txt index 9dd34697..3f629bc0 100644 --- a/cli/CMakeLists.txt +++ b/cli/CMakeLists.txt @@ -10,12 +10,6 @@ set_target_properties(vgmstream_cli PROPERTIES # Link to the vgmstream library target_link_libraries(vgmstream_cli libvgmstream) -# Link to Jansson, if we have it -if (USE_JANSSON) - target_compile_definitions(vgmstream_cli PRIVATE HAVE_JSON) - target_include_directories(vgmstream_cli PRIVATE ${JANSSON_INCLUDE_DIRS}) - target_link_libraries(vgmstream_cli jansson) -endif() setup_target(vgmstream_cli TRUE) diff --git a/cmake/dependencies/jansson.cmake b/cmake/dependencies/jansson.cmake deleted file mode 100644 index a3c833d1..00000000 --- a/cmake/dependencies/jansson.cmake +++ /dev/null @@ -1,57 +0,0 @@ -if(NOT WIN32 AND USE_JANSSON) - if(NOT JANSSON_PATH AND NOT EMSCRIPTEN) - find_package(PkgConfig REQUIRED) - pkg_check_modules(JANSSON jansson>=2.3) - - if(JANSSON_FOUND) - set(JANSSON_SOURCE "(system)") - set(JANSSON_PKG libjansson) - link_directories(${JANSSON_LIBRARY_DIRS}) - endif() - endif() - if(JANSSON_PATH OR EMSCRIPTEN OR NOT JANSSON_FOUND) - FetchDependency(JANSSON - DIR jansson - GIT_REPOSITORY https://github.com/akheron/jansson - GIT_TAG v2.14 - ) - - if(JANSSON_PATH) - set(JANSSON_LINK_PATH ${JANSSON_BIN}/src/.libs/libjansson.a) - set(JANSSON_INCLUDE_DIRS ${JANSSON_PATH}/src) - - if(NOT EXISTS ${JANSSON_PATH}/configure) - add_custom_target(JANSSON_AUTORECONF - COMMAND autoreconf -iv - BYPRODUCTS ${JANSSON_PATH}/configure - WORKING_DIRECTORY ${JANSSON_PATH} - ) - endif() - - file(MAKE_DIRECTORY ${JANSSON_BIN}) - add_custom_target(JANSSON_CONFIGURE - COMMAND "${JANSSON_PATH}/configure" --enable-static --disable-shared CC="${CMAKE_C_COMPILER}" AR="${CMAKE_AR}" RANLIB="${CMAKE_RANLIB}" - DEPENDS ${JANSSON_PATH}/configure - BYPRODUCTS ${JANSSON_BIN}/Makefile - WORKING_DIRECTORY ${JANSSON_BIN} - ) - add_custom_target(JANSSON_MAKE - COMMAND make - DEPENDS ${JANSSON_BIN}/Makefile - BYPRODUCTS ${JANSSON_LINK_PATH} ${JANSSON_BIN} - WORKING_DIRECTORY ${JANSSON_BIN} - ) - - add_library(jansson STATIC IMPORTED) - if(NOT EXISTS ${JANSSON_LINK_PATH}) - add_dependencies(jansson JANSSON_MAKE) - endif() - set_target_properties(jansson PROPERTIES - IMPORTED_LOCATION ${JANSSON_LINK_PATH} - ) - endif() - endif() -endif() -if(NOT USE_JANSSON) - unset(JANSSON_SOURCE) -endif() diff --git a/configure.ac b/configure.ac index 94583272..9f20a8bc 100644 --- a/configure.ac +++ b/configure.ac @@ -62,11 +62,6 @@ PKG_CHECK_MODULES(AO, [ao >= 1.1.0], have_libao=yes, [AC_MSG_WARN([Cannot find libao - will not build vgmstream123])]) AM_CONDITIONAL(HAVE_LIBAO, test "$have_libao" = yes) -have_jansson=no -PKG_CHECK_MODULES(JANSSON, [jansson >= 2.3], have_jansson=yes, - [AC_MSG_WARN([Cannot find jansson - will disable JSON dumping in CLI])]) -AM_CONDITIONAL(HAVE_JANSSON, test "$have_jansson" = yes) - if test "_$GCC" = _yes then CFLAGS="$CFLAGS -Wall -Wextra -Wno-sign-compare -Wno-unused-parameter -Wno-unused-but-set-variable" diff --git a/doc/CMAKE.md b/doc/CMAKE.md index 65dfb09b..270f840b 100644 --- a/doc/CMAKE.md +++ b/doc/CMAKE.md @@ -84,8 +84,6 @@ sudo apt-get install -y libmpg123-dev libvorbis-dev libspeex-dev sudo apt-get install -y libavformat-dev libavcodec-dev libavutil-dev libswresample-dev # for vgmstream123 and audacious sudo apt-get install -y libao-dev audacious-dev -# for JSON dumping -sudo apt-get install -y libjansson-dev # for static builds sudo apt-get install -y yasm libopus-dev # actual cmake @@ -138,8 +136,6 @@ The following option is currently only available for **Windows**: The following option is only available for **\*nix-based OSes**: -- **USE_JANSSON**: Chooses if you wish to use libjansson for support of JSON dumping capabilities. The default is `ON`. - #### Build Options All of these options are of type BOOL and can be set to either `ON` or `OFF`. Example usage: `cmake .. -DBUILD_CLI=ON` diff --git a/ext_includes/jansson/jansson.h b/ext_includes/jansson/jansson.h deleted file mode 100644 index fbc7381b..00000000 --- a/ext_includes/jansson/jansson.h +++ /dev/null @@ -1,386 +0,0 @@ -/* - * Copyright (c) 2009-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - */ - -#ifndef JANSSON_H -#define JANSSON_H - -#include -#include -#include /* for size_t */ - -#include "jansson_config.h" - -#ifdef __cplusplus -extern "C" { -#endif - -/* version */ - -#define JANSSON_MAJOR_VERSION 2 -#define JANSSON_MINOR_VERSION 13 -#define JANSSON_MICRO_VERSION 1 - -/* Micro version is omitted if it's 0 */ -#define JANSSON_VERSION "2.13.1" - -/* Version as a 3-byte hex number, e.g. 0x010201 == 1.2.1. Use this - for numeric comparisons, e.g. #if JANSSON_VERSION_HEX >= ... */ -#define JANSSON_VERSION_HEX \ - ((JANSSON_MAJOR_VERSION << 16) | (JANSSON_MINOR_VERSION << 8) | \ - (JANSSON_MICRO_VERSION << 0)) - -/* If __atomic or __sync builtins are available the library is thread - * safe for all read-only functions plus reference counting. */ -#if JSON_HAVE_ATOMIC_BUILTINS || JSON_HAVE_SYNC_BUILTINS -#define JANSSON_THREAD_SAFE_REFCOUNT 1 -#endif - -#if defined(__GNUC__) || defined(__clang__) -#define JANSSON_ATTRS(x) __attribute__(x) -#else -#define JANSSON_ATTRS(x) -#endif - -/* types */ - -typedef enum { - JSON_OBJECT, - JSON_ARRAY, - JSON_STRING, - JSON_INTEGER, - JSON_REAL, - JSON_TRUE, - JSON_FALSE, - JSON_NULL -} json_type; - -typedef struct json_t { - json_type type; - volatile size_t refcount; -} json_t; - -#ifndef JANSSON_USING_CMAKE /* disabled if using cmake */ -#if JSON_INTEGER_IS_LONG_LONG -#ifdef _WIN32 -#define JSON_INTEGER_FORMAT "I64d" -#else -#define JSON_INTEGER_FORMAT "lld" -#endif -typedef long long json_int_t; -#else -#define JSON_INTEGER_FORMAT "ld" -typedef long json_int_t; -#endif /* JSON_INTEGER_IS_LONG_LONG */ -#endif - -#define json_typeof(json) ((json)->type) -#define json_is_object(json) ((json) && json_typeof(json) == JSON_OBJECT) -#define json_is_array(json) ((json) && json_typeof(json) == JSON_ARRAY) -#define json_is_string(json) ((json) && json_typeof(json) == JSON_STRING) -#define json_is_integer(json) ((json) && json_typeof(json) == JSON_INTEGER) -#define json_is_real(json) ((json) && json_typeof(json) == JSON_REAL) -#define json_is_number(json) (json_is_integer(json) || json_is_real(json)) -#define json_is_true(json) ((json) && json_typeof(json) == JSON_TRUE) -#define json_is_false(json) ((json) && json_typeof(json) == JSON_FALSE) -#define json_boolean_value json_is_true -#define json_is_boolean(json) (json_is_true(json) || json_is_false(json)) -#define json_is_null(json) ((json) && json_typeof(json) == JSON_NULL) - -/* construction, destruction, reference counting */ - -json_t *json_object(void); -json_t *json_array(void); -json_t *json_string(const char *value); -json_t *json_stringn(const char *value, size_t len); -json_t *json_string_nocheck(const char *value); -json_t *json_stringn_nocheck(const char *value, size_t len); -json_t *json_integer(json_int_t value); -json_t *json_real(double value); -json_t *json_true(void); -json_t *json_false(void); -#define json_boolean(val) ((val) ? json_true() : json_false()) -json_t *json_null(void); - -/* do not call JSON_INTERNAL_INCREF or JSON_INTERNAL_DECREF directly */ -#if JSON_HAVE_ATOMIC_BUILTINS -#define JSON_INTERNAL_INCREF(json) \ - __atomic_add_fetch(&json->refcount, 1, __ATOMIC_ACQUIRE) -#define JSON_INTERNAL_DECREF(json) \ - __atomic_sub_fetch(&json->refcount, 1, __ATOMIC_RELEASE) -#elif JSON_HAVE_SYNC_BUILTINS -#define JSON_INTERNAL_INCREF(json) __sync_add_and_fetch(&json->refcount, 1) -#define JSON_INTERNAL_DECREF(json) __sync_sub_and_fetch(&json->refcount, 1) -#else -#define JSON_INTERNAL_INCREF(json) (++json->refcount) -#define JSON_INTERNAL_DECREF(json) (--json->refcount) -#endif - -static JSON_INLINE json_t *json_incref(json_t *json) { - if (json && json->refcount != (size_t)-1) - JSON_INTERNAL_INCREF(json); - return json; -} - -/* do not call json_delete directly */ -void json_delete(json_t *json); - -static JSON_INLINE void json_decref(json_t *json) { - if (json && json->refcount != (size_t)-1 && JSON_INTERNAL_DECREF(json) == 0) - json_delete(json); -} - -#if defined(__GNUC__) || defined(__clang__) -static JSON_INLINE void json_decrefp(json_t **json) { - if (json) { - json_decref(*json); - *json = NULL; - } -} - -#define json_auto_t json_t __attribute__((cleanup(json_decrefp))) -#endif - -/* error reporting */ - -#define JSON_ERROR_TEXT_LENGTH 160 -#define JSON_ERROR_SOURCE_LENGTH 80 - -typedef struct json_error_t { - int line; - int column; - int position; - char source[JSON_ERROR_SOURCE_LENGTH]; - char text[JSON_ERROR_TEXT_LENGTH]; -} json_error_t; - -enum json_error_code { - json_error_unknown, - json_error_out_of_memory, - json_error_stack_overflow, - json_error_cannot_open_file, - json_error_invalid_argument, - json_error_invalid_utf8, - json_error_premature_end_of_input, - json_error_end_of_input_expected, - json_error_invalid_syntax, - json_error_invalid_format, - json_error_wrong_type, - json_error_null_character, - json_error_null_value, - json_error_null_byte_in_key, - json_error_duplicate_key, - json_error_numeric_overflow, - json_error_item_not_found, - json_error_index_out_of_range -}; - -static JSON_INLINE enum json_error_code json_error_code(const json_error_t *e) { - return (enum json_error_code)e->text[JSON_ERROR_TEXT_LENGTH - 1]; -} - -/* getters, setters, manipulation */ - -void json_object_seed(size_t seed); -size_t json_object_size(const json_t *object); -json_t *json_object_get(const json_t *object, const char *key) - JANSSON_ATTRS((warn_unused_result)); -int json_object_set_new(json_t *object, const char *key, json_t *value); -int json_object_set_new_nocheck(json_t *object, const char *key, json_t *value); -int json_object_del(json_t *object, const char *key); -int json_object_clear(json_t *object); -int json_object_update(json_t *object, json_t *other); -int json_object_update_existing(json_t *object, json_t *other); -int json_object_update_missing(json_t *object, json_t *other); -int json_object_update_recursive(json_t *object, json_t *other); -void *json_object_iter(json_t *object); -void *json_object_iter_at(json_t *object, const char *key); -void *json_object_key_to_iter(const char *key); -void *json_object_iter_next(json_t *object, void *iter); -const char *json_object_iter_key(void *iter); -json_t *json_object_iter_value(void *iter); -int json_object_iter_set_new(json_t *object, void *iter, json_t *value); - -#define json_object_foreach(object, key, value) \ - for (key = json_object_iter_key(json_object_iter(object)); \ - key && (value = json_object_iter_value(json_object_key_to_iter(key))); \ - key = json_object_iter_key( \ - json_object_iter_next(object, json_object_key_to_iter(key)))) - -#define json_object_foreach_safe(object, n, key, value) \ - for (key = json_object_iter_key(json_object_iter(object)), \ - n = json_object_iter_next(object, json_object_key_to_iter(key)); \ - key && (value = json_object_iter_value(json_object_key_to_iter(key))); \ - key = json_object_iter_key(n), \ - n = json_object_iter_next(object, json_object_key_to_iter(key))) - -#define json_array_foreach(array, index, value) \ - for (index = 0; \ - index < json_array_size(array) && (value = json_array_get(array, index)); \ - index++) - -static JSON_INLINE int json_object_set(json_t *object, const char *key, json_t *value) { - return json_object_set_new(object, key, json_incref(value)); -} - -static JSON_INLINE int json_object_set_nocheck(json_t *object, const char *key, - json_t *value) { - return json_object_set_new_nocheck(object, key, json_incref(value)); -} - -static JSON_INLINE int json_object_iter_set(json_t *object, void *iter, json_t *value) { - return json_object_iter_set_new(object, iter, json_incref(value)); -} - -static JSON_INLINE int json_object_update_new(json_t *object, json_t *other) { - int ret = json_object_update(object, other); - json_decref(other); - return ret; -} - -static JSON_INLINE int json_object_update_existing_new(json_t *object, json_t *other) { - int ret = json_object_update_existing(object, other); - json_decref(other); - return ret; -} - -static JSON_INLINE int json_object_update_missing_new(json_t *object, json_t *other) { - int ret = json_object_update_missing(object, other); - json_decref(other); - return ret; -} - -size_t json_array_size(const json_t *array); -json_t *json_array_get(const json_t *array, size_t index) - JANSSON_ATTRS((warn_unused_result)); -int json_array_set_new(json_t *array, size_t index, json_t *value); -int json_array_append_new(json_t *array, json_t *value); -int json_array_insert_new(json_t *array, size_t index, json_t *value); -int json_array_remove(json_t *array, size_t index); -int json_array_clear(json_t *array); -int json_array_extend(json_t *array, json_t *other); - -static JSON_INLINE int json_array_set(json_t *array, size_t ind, json_t *value) { - return json_array_set_new(array, ind, json_incref(value)); -} - -static JSON_INLINE int json_array_append(json_t *array, json_t *value) { - return json_array_append_new(array, json_incref(value)); -} - -static JSON_INLINE int json_array_insert(json_t *array, size_t ind, json_t *value) { - return json_array_insert_new(array, ind, json_incref(value)); -} - -const char *json_string_value(const json_t *string); -size_t json_string_length(const json_t *string); -json_int_t json_integer_value(const json_t *integer); -double json_real_value(const json_t *real); -double json_number_value(const json_t *json); - -int json_string_set(json_t *string, const char *value); -int json_string_setn(json_t *string, const char *value, size_t len); -int json_string_set_nocheck(json_t *string, const char *value); -int json_string_setn_nocheck(json_t *string, const char *value, size_t len); -int json_integer_set(json_t *integer, json_int_t value); -int json_real_set(json_t *real, double value); - -/* pack, unpack */ - -json_t *json_pack(const char *fmt, ...) JANSSON_ATTRS((warn_unused_result)); -json_t *json_pack_ex(json_error_t *error, size_t flags, const char *fmt, ...) - JANSSON_ATTRS((warn_unused_result)); -json_t *json_vpack_ex(json_error_t *error, size_t flags, const char *fmt, va_list ap) - JANSSON_ATTRS((warn_unused_result)); - -#define JSON_VALIDATE_ONLY 0x1 -#define JSON_STRICT 0x2 - -int json_unpack(json_t *root, const char *fmt, ...); -int json_unpack_ex(json_t *root, json_error_t *error, size_t flags, const char *fmt, ...); -int json_vunpack_ex(json_t *root, json_error_t *error, size_t flags, const char *fmt, - va_list ap); - -/* sprintf */ - -json_t *json_sprintf(const char *fmt, ...) - JANSSON_ATTRS((warn_unused_result, format(printf, 1, 2))); -json_t *json_vsprintf(const char *fmt, va_list ap) - JANSSON_ATTRS((warn_unused_result, format(printf, 1, 0))); - -/* equality */ - -int json_equal(const json_t *value1, const json_t *value2); - -/* copying */ - -json_t *json_copy(json_t *value) JANSSON_ATTRS((warn_unused_result)); -json_t *json_deep_copy(const json_t *value) JANSSON_ATTRS((warn_unused_result)); - -/* decoding */ - -#define JSON_REJECT_DUPLICATES 0x1 -#define JSON_DISABLE_EOF_CHECK 0x2 -#define JSON_DECODE_ANY 0x4 -#define JSON_DECODE_INT_AS_REAL 0x8 -#define JSON_ALLOW_NUL 0x10 - -typedef size_t (*json_load_callback_t)(void *buffer, size_t buflen, void *data); - -json_t *json_loads(const char *input, size_t flags, json_error_t *error) - JANSSON_ATTRS((warn_unused_result)); -json_t *json_loadb(const char *buffer, size_t buflen, size_t flags, json_error_t *error) - JANSSON_ATTRS((warn_unused_result)); -json_t *json_loadf(FILE *input, size_t flags, json_error_t *error) - JANSSON_ATTRS((warn_unused_result)); -json_t *json_loadfd(int input, size_t flags, json_error_t *error) - JANSSON_ATTRS((warn_unused_result)); -json_t *json_load_file(const char *path, size_t flags, json_error_t *error) - JANSSON_ATTRS((warn_unused_result)); -json_t *json_load_callback(json_load_callback_t callback, void *data, size_t flags, - json_error_t *error) JANSSON_ATTRS((warn_unused_result)); - -/* encoding */ - -#define JSON_MAX_INDENT 0x1F -#define JSON_INDENT(n) ((n)&JSON_MAX_INDENT) -#define JSON_COMPACT 0x20 -#define JSON_ENSURE_ASCII 0x40 -#define JSON_SORT_KEYS 0x80 -#define JSON_PRESERVE_ORDER 0x100 -#define JSON_ENCODE_ANY 0x200 -#define JSON_ESCAPE_SLASH 0x400 -#define JSON_REAL_PRECISION(n) (((n)&0x1F) << 11) -#define JSON_EMBED 0x10000 - -typedef int (*json_dump_callback_t)(const char *buffer, size_t size, void *data); - -char *json_dumps(const json_t *json, size_t flags) JANSSON_ATTRS((warn_unused_result)); -size_t json_dumpb(const json_t *json, char *buffer, size_t size, size_t flags); -int json_dumpf(const json_t *json, FILE *output, size_t flags); -int json_dumpfd(const json_t *json, int output, size_t flags); -int json_dump_file(const json_t *json, const char *path, size_t flags); -int json_dump_callback(const json_t *json, json_dump_callback_t callback, void *data, - size_t flags); - -/* custom memory allocation */ - -typedef void *(*json_malloc_t)(size_t); -typedef void (*json_free_t)(void *); - -void json_set_alloc_funcs(json_malloc_t malloc_fn, json_free_t free_fn); -void json_get_alloc_funcs(json_malloc_t *malloc_fn, json_free_t *free_fn); - -/* runtime version checking */ - -const char *jansson_version_str(void); -int jansson_version_cmp(int major, int minor, int micro); - -#ifdef __cplusplus -} -#endif - -#endif diff --git a/ext_includes/jansson/jansson_config.h b/ext_includes/jansson/jansson_config.h deleted file mode 100644 index d3053808..00000000 --- a/ext_includes/jansson/jansson_config.h +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2010-2016 Petri Lehtinen - * - * Jansson is free software; you can redistribute it and/or modify - * it under the terms of the MIT license. See LICENSE for details. - * - * - * This file specifies a part of the site-specific configuration for - * Jansson, namely those things that affect the public API in - * jansson.h. - * - * The CMake system will generate the jansson_config.h file and - * copy it to the build and install directories. - */ - -#ifndef JANSSON_CONFIG_H -#define JANSSON_CONFIG_H - -/* Define this so that we can disable scattered automake configuration in source files */ -#ifndef JANSSON_USING_CMAKE -#define JANSSON_USING_CMAKE -#endif - - -/* If your compiler supports the inline keyword in C, JSON_INLINE is - defined to `inline', otherwise empty. In C++, the inline is always - supported. */ -#if defined(_MSC_VER) && (_MSC_VER < 1800) && !defined(__cplusplus) -#define JSON_INLINE __inline -#else -#define JSON_INLINE inline -#endif - - -#define json_int_t long -#define json_strtoint strtol -#define JSON_INTEGER_FORMAT "ld" - - -/* If locale.h and localeconv() are available, define to 1, otherwise to 0. */ -#define JSON_HAVE_LOCALECONV 1 - -/* If __atomic builtins are available they will be used to manage - reference counts of json_t. */ -#define JSON_HAVE_ATOMIC_BUILTINS 0 - -/* If __atomic builtins are not available we try using __sync builtins - to manage reference counts of json_t. */ -#define JSON_HAVE_SYNC_BUILTINS 0 - -/* Maximum recursion depth for parsing JSON input. - This limits the depth of e.g. array-within-array constructions. */ -#define JSON_PARSER_MAX_DEPTH 2048 - -#endif diff --git a/ext_libs/ext_libs.vcxproj b/ext_libs/ext_libs.vcxproj index 534702b5..f57e7389 100644 --- a/ext_libs/ext_libs.vcxproj +++ b/ext_libs/ext_libs.vcxproj @@ -94,11 +94,6 @@ lib /def:libspeex-1.def /machine:x86 /out:libspeex-1.lib libspeex-1.lib;libspeex-1.exp;%(Outputs) - - Building library stub - lib /def:jansson.def /machine:x86 /out:jansson.lib - jansson.lib;jansson.exp;%(Outputs) - diff --git a/ext_libs/jansson.def b/ext_libs/jansson.def deleted file mode 100644 index 55b39c83..00000000 --- a/ext_libs/jansson.def +++ /dev/null @@ -1,78 +0,0 @@ -EXPORTS - json_delete - json_true - json_false - json_null - json_sprintf - json_vsprintf - json_string - json_stringn - json_string_nocheck - json_stringn_nocheck - json_string_value - json_string_length - json_string_set - json_string_setn - json_string_set_nocheck - json_string_setn_nocheck - json_integer - json_integer_value - json_integer_set - json_real - json_real_value - json_real_set - json_number_value - json_array - json_array_size - json_array_get - json_array_set_new - json_array_append_new - json_array_insert_new - json_array_remove - json_array_clear - json_array_extend - json_object - json_object_size - json_object_get - json_object_set_new - json_object_set_new_nocheck - json_object_del - json_object_clear - json_object_update - json_object_update_existing - json_object_update_missing - json_object_update_recursive - json_object_iter - json_object_iter_at - json_object_iter_next - json_object_iter_key - json_object_iter_value - json_object_iter_set_new - json_object_key_to_iter - json_object_seed - json_dumps - json_dumpb - json_dumpf - json_dumpfd - json_dump_file - json_dump_callback - json_loads - json_loadb - json_loadf - json_loadfd - json_load_file - json_load_callback - json_equal - json_copy - json_deep_copy - json_pack - json_pack_ex - json_vpack_ex - json_unpack - json_unpack_ex - json_vunpack_ex - json_set_alloc_funcs - json_get_alloc_funcs - jansson_version_str - jansson_version_cmp - diff --git a/ext_libs/jansson.dll b/ext_libs/jansson.dll deleted file mode 100644 index dcca02b085a90a5fc356242f892abc63f0b2bf04..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 41472 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 YIbjA&!c_k~YTdOO2tYObKmX3aFFJcPvH$=8 diff --git a/make-build-cmake.sh b/make-build-cmake.sh index f3859d3e..1269a91d 100755 --- a/make-build-cmake.sh +++ b/make-build-cmake.sh @@ -11,7 +11,6 @@ sudo apt-get install libavformat-dev libavcodec-dev libavutil-dev libswresample- sudo apt-get install yasm libopus-dev # optional: for vgmstream 123 and audacious sudo apt-get install -y libao-dev audacious-dev -#sudo apt-get install libjansson-dev mkdir -p build cd build diff --git a/msvc-build.ps1 b/msvc-build.ps1 index 8b60f25a..64a8a3ae 100644 --- a/msvc-build.ps1 +++ b/msvc-build.ps1 @@ -228,7 +228,7 @@ $fb2kFiles64 = @( ) $fb2kFiles_remove = @( - "bin/foobar2000/jansson.dll" + "bin/foobar2000/xxxx.dll" ) $cliPdbFiles32 = @( diff --git a/vgmstream_msvc.props b/vgmstream_msvc.props index 6734d642..08eb060b 100644 --- a/vgmstream_msvc.props +++ b/vgmstream_msvc.props @@ -47,7 +47,7 @@ $(VCmnPreprocessorDefinitions);IN_VGMSTREAM_EXPORTS;VGM_WINAMP_UNICODE ../ext_libs/libvorbis.lib;../ext_libs/libmpg123-0.lib;../ext_libs/libg719_decode.lib;../ext_libs/avcodec.lib;../ext_libs/avformat.lib;../ext_libs/avutil.lib;../ext_libs/swresample.lib;../ext_libs/libatrac9.lib;../ext_libs/libcelt-0061.lib;../ext_libs/libcelt-0110.lib;../ext_libs/libspeex-1.lib - $(VCmnAdditionalDependencies32);../ext_libs/jansson.lib + $(VCmnAdditionalDependencies32); $(VCmnAdditionalDependencies32);$(VCmnDependenciesDir)/foobar/foobar2000/shared/shared-Win32.lib ../ext_libs/dll-x64/libvorbis.lib;../ext_libs/dll-x64/libmpg123-0.lib;../ext_libs/dll-x64/libg719_decode.lib;../ext_libs/dll-x64/avcodec.lib;../ext_libs/dll-x64/avformat.lib;../ext_libs/dll-x64/avutil.lib;../ext_libs/dll-x64/swresample.lib;../ext_libs/dll-x64/libatrac9.lib;../ext_libs/dll-x64/libcelt-0061.lib;../ext_libs/dll-x64/libcelt-0110.lib;../ext_libs/dll-x64/libspeex-1.lib $(VCmnAdditionalDependencies64)