mirror of
https://github.com/Gnucash/gnucash.git
synced 2025-02-25 18:55:30 -06:00
Integrate gnc-option into app-utils.
Includes converting swig-app-utils-guile to c++.
This commit is contained in:
parent
81c5ac6689
commit
cbf7d70ecd
@ -11,6 +11,8 @@ set (app_utils_noinst_HEADERS
|
|||||||
calculation/finproto.h
|
calculation/finproto.h
|
||||||
calculation/fin_spl_protos.h
|
calculation/fin_spl_protos.h
|
||||||
calculation/fin_static_proto.h
|
calculation/fin_static_proto.h
|
||||||
|
gnc-option-impl.hpp
|
||||||
|
gnc-optiondb-impl.hpp
|
||||||
)
|
)
|
||||||
|
|
||||||
set (app_utils_HEADERS
|
set (app_utils_HEADERS
|
||||||
@ -27,8 +29,10 @@ set (app_utils_HEADERS
|
|||||||
gnc-gsettings.h
|
gnc-gsettings.h
|
||||||
gnc-help-utils.h
|
gnc-help-utils.h
|
||||||
gnc-helpers.h
|
gnc-helpers.h
|
||||||
|
gnc-option.hpp
|
||||||
|
gnc-optiondb.hpp
|
||||||
gnc-prefs-utils.h
|
gnc-prefs-utils.h
|
||||||
gnc-state.h
|
gnc-state.h
|
||||||
gnc-sx-instance-model.h
|
gnc-sx-instance-model.h
|
||||||
gnc-ui-util.h
|
gnc-ui-util.h
|
||||||
gnc-ui-balances.h
|
gnc-ui-balances.h
|
||||||
@ -36,10 +40,13 @@ set (app_utils_HEADERS
|
|||||||
)
|
)
|
||||||
|
|
||||||
# Command to generate the swig-app-utils-guile.c wrapper file
|
# Command to generate the swig-app-utils-guile.c wrapper file
|
||||||
gnc_add_swig_guile_command (swig-apputils-guile-c
|
set(SWIG_ARGS "-c++" "-procdoc" "sw-gnc-option-doc" "-procdocformat" "plain")
|
||||||
SWIG_APP_UTILS_GUILE_C swig-app-utils-guile.c
|
gnc_add_swig_guile_command (swig-apputils-guile-cpp
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/app-utils.i ""
|
SWIG_APP_UTILS_GUILE_CPP swig-app-utils-guile.cpp
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/app-utils.i
|
||||||
|
${CMAKE_CURRENT_SOURCE_DIR}/gnc-optiondb.i ""
|
||||||
)
|
)
|
||||||
|
unset(SWIG_ARGS)
|
||||||
|
|
||||||
# Command to generate the swig-app-utils-python.c wrapper file
|
# Command to generate the swig-app-utils-python.c wrapper file
|
||||||
gnc_add_swig_python_command (swig-app-utils-python
|
gnc_add_swig_python_command (swig-app-utils-python
|
||||||
@ -62,6 +69,9 @@ set (app_utils_SOURCES
|
|||||||
gnc-exp-parser.c
|
gnc-exp-parser.c
|
||||||
gnc-gsettings.c
|
gnc-gsettings.c
|
||||||
gnc-helpers.c
|
gnc-helpers.c
|
||||||
|
gnc-option.cpp
|
||||||
|
gnc-option-impl.cpp
|
||||||
|
gnc-optiondb.cpp
|
||||||
gnc-prefs-utils.c
|
gnc-prefs-utils.c
|
||||||
gnc-sx-instance-model.c
|
gnc-sx-instance-model.c
|
||||||
gnc-state.c
|
gnc-state.c
|
||||||
@ -103,7 +113,7 @@ if (WIN32)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
|
||||||
add_library (gnc-app-utils ${app_utils_ALL_SOURCES} ${SWIG_APP_UTILS_GUILE_C})
|
add_library (gnc-app-utils ${app_utils_ALL_SOURCES} ${SWIG_APP_UTILS_GUILE_CPP})
|
||||||
target_link_libraries(gnc-app-utils ${app_utils_ALL_LIBRARIES})
|
target_link_libraries(gnc-app-utils ${app_utils_ALL_LIBRARIES})
|
||||||
|
|
||||||
target_include_directories (gnc-app-utils
|
target_include_directories (gnc-app-utils
|
||||||
|
@ -21,6 +21,10 @@
|
|||||||
%module sw_app_utils
|
%module sw_app_utils
|
||||||
%{
|
%{
|
||||||
/* Includes the header in the wrapper code */
|
/* Includes the header in the wrapper code */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
|
#endif
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include <option-util.h>
|
#include <option-util.h>
|
||||||
#include <gnc-euro.h>
|
#include <gnc-euro.h>
|
||||||
@ -33,14 +37,22 @@
|
|||||||
#include <gnc-sx-instance-model.h>
|
#include <gnc-sx-instance-model.h>
|
||||||
|
|
||||||
#include "gnc-engine-guile.h"
|
#include "gnc-engine-guile.h"
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif
|
||||||
%}
|
%}
|
||||||
|
|
||||||
#if defined(SWIGGUILE)
|
#if defined(SWIGGUILE) //Always C++
|
||||||
%{
|
%{
|
||||||
|
extern "C"
|
||||||
|
{
|
||||||
#include "guile-mappings.h"
|
#include "guile-mappings.h"
|
||||||
|
|
||||||
SCM scm_init_sw_app_utils_module (void);
|
SCM scm_init_sw_app_utils_module (void);
|
||||||
|
}
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
%include "gnc-optiondb.i"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(SWIGPYTHON)
|
#if defined(SWIGPYTHON)
|
||||||
@ -76,7 +88,7 @@ void gnc_option_db_set_option_selectable_by_name(SCM guile_option,
|
|||||||
GList *node;
|
GList *node;
|
||||||
|
|
||||||
for (node = $1; node; node = node->next)
|
for (node = $1; node; node = node->next)
|
||||||
list = scm_cons(gnc_quoteinfo2scm(node->data), list);
|
list = scm_cons(gnc_quoteinfo2scm(static_cast<gnc_commodity*>(node->data)), list);
|
||||||
|
|
||||||
$result = scm_reverse(list);
|
$result = scm_reverse(list);
|
||||||
}
|
}
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
*
|
*
|
||||||
* unique_ptr SWIG wrapper from https://stackoverflow.com/questions/27693812/how-to-handle-unique-ptrs-with-swig
|
* unique_ptr SWIG wrapper from https://stackoverflow.com/questions/27693812/how-to-handle-unique-ptrs-with-swig
|
||||||
*/
|
*/
|
||||||
|
#if defined(SWIGGUILE)
|
||||||
|
|
||||||
namespace std {
|
namespace std {
|
||||||
%feature("novaluewrapper") unique_ptr;
|
%feature("novaluewrapper") unique_ptr;
|
||||||
@ -37,17 +38,11 @@ namespace std {
|
|||||||
|
|
||||||
%enddef
|
%enddef
|
||||||
|
|
||||||
%module sw_gnc_optiondb
|
//%module sw_gnc_optiondb
|
||||||
%{
|
%{
|
||||||
extern "C"
|
|
||||||
{
|
|
||||||
#include <config.h>
|
|
||||||
#include <libguile.h>
|
|
||||||
#include <gnc-engine-guile.h>
|
|
||||||
}
|
|
||||||
#include "gnc-optiondb.hpp"
|
#include "gnc-optiondb.hpp"
|
||||||
#include "gnc-optiondb-impl.hpp"
|
#include "gnc-optiondb-impl.hpp"
|
||||||
extern "C" SCM scm_init_sw_gnc_optiondb_module(void);
|
SCM scm_init_sw_gnc_optiondb_module(void);
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%include <std_string.i>
|
%include <std_string.i>
|
||||||
@ -118,27 +113,6 @@ scm_from_value<const QofInstance*>(const QofInstance* value)
|
|||||||
return scm_guid;
|
return scm_guid;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Account is actually a typedef for struct account_s and SWIG insists on using
|
|
||||||
* the struct name (i.e. account_s) in C++ and the alias (i.e. Account) in
|
|
||||||
* C. Oddly the compiler's type resolution also fails to consider them the same
|
|
||||||
* so we have to use the struct name here to get the template to resolve
|
|
||||||
* correctly.
|
|
||||||
*/
|
|
||||||
using GncOptionAccount_sList = std::vector<const account_s*>;
|
|
||||||
|
|
||||||
template <>inline SCM
|
|
||||||
scm_from_value<GncOptionAccount_sList>(GncOptionAccount_sList value)
|
|
||||||
{
|
|
||||||
SCM s_list = SCM_EOL;
|
|
||||||
for (auto acct : value)
|
|
||||||
{
|
|
||||||
SCM elem = scm_list_1(SWIG_NewPointerObj(acct, SWIGTYPE_p_account_s, 0));
|
|
||||||
s_list = scm_append(scm_list_2(s_list, elem));
|
|
||||||
}
|
|
||||||
|
|
||||||
return s_list;
|
|
||||||
}
|
|
||||||
|
|
||||||
template <typename ValueType> inline ValueType
|
template <typename ValueType> inline ValueType
|
||||||
scm_to_value(SCM new_value)
|
scm_to_value(SCM new_value)
|
||||||
{
|
{
|
||||||
@ -166,19 +140,34 @@ scm_to_value<int64_t>(SCM new_value)
|
|||||||
return scm_to_int64(new_value);
|
return scm_to_int64(new_value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template <>inline SCM
|
||||||
|
scm_from_value<GncOptionAccountList>(GncOptionAccountList value)
|
||||||
|
{
|
||||||
|
SCM s_list = SCM_EOL;
|
||||||
|
for (auto acct : value)
|
||||||
|
{
|
||||||
|
SCM elem = scm_list_1(SWIG_NewPointerObj(acct, SWIGTYPE_p_Account, 0));
|
||||||
|
s_list = scm_append(scm_list_2(s_list, elem));
|
||||||
|
}
|
||||||
|
|
||||||
|
return s_list;
|
||||||
|
}
|
||||||
|
|
||||||
|
QofBook* gnc_option_test_book_new();
|
||||||
|
void gnc_option_test_book_destroy(QofBook*);
|
||||||
|
|
||||||
QofBook*
|
QofBook*
|
||||||
qof_book_new()
|
gnc_option_test_book_new()
|
||||||
{
|
{
|
||||||
return static_cast<QofBook*>(g_object_new(QOF_TYPE_BOOK, nullptr));
|
return static_cast<QofBook*>(g_object_new(QOF_TYPE_BOOK, nullptr));
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
qof_book_destroy(QofBook* book)
|
gnc_option_test_book_destroy(QofBook* book)
|
||||||
{
|
{
|
||||||
g_object_unref(book);
|
g_object_unref(book);
|
||||||
}
|
}
|
||||||
|
|
||||||
using Account = struct account_s;
|
|
||||||
%}
|
%}
|
||||||
|
|
||||||
%ignore OptionClassifier;
|
%ignore OptionClassifier;
|
||||||
@ -228,6 +217,19 @@ using Account = struct account_s;
|
|||||||
$1 = &choices;
|
$1 = &choices;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
%typemap(in) GncOptionAccountList
|
||||||
|
{
|
||||||
|
auto len = scm_to_size_t(scm_length($input));
|
||||||
|
for (std::size_t i = 0; i < len; ++i)
|
||||||
|
{
|
||||||
|
SCM s_account = scm_list_ref($input, scm_from_size_t(i));
|
||||||
|
Account* acct = (Account*)SWIG_MustGetPtr(s_account,
|
||||||
|
SWIGTYPE_p_Account, 1, 0);
|
||||||
|
$1.push_back(acct);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
%typemap(in) GncOptionAccountTypeList& (GncOptionAccountTypeList types)
|
%typemap(in) GncOptionAccountTypeList& (GncOptionAccountTypeList types)
|
||||||
{
|
{
|
||||||
auto len = scm_to_size_t(scm_length($input));
|
auto len = scm_to_size_t(scm_length($input));
|
||||||
@ -259,7 +261,7 @@ using Account = struct account_s;
|
|||||||
{
|
{
|
||||||
SCM s_account = scm_list_ref($input, scm_from_size_t(i));
|
SCM s_account = scm_list_ref($input, scm_from_size_t(i));
|
||||||
Account* acct = (Account*)SWIG_MustGetPtr(s_account,
|
Account* acct = (Account*)SWIG_MustGetPtr(s_account,
|
||||||
SWIGTYPE_p_account_s, 1, 0);
|
SWIGTYPE_p_Account, 1, 0);
|
||||||
$1.push_back(acct);
|
$1.push_back(acct);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -271,7 +273,7 @@ using Account = struct account_s;
|
|||||||
{
|
{
|
||||||
SCM s_account = scm_list_ref($input, scm_from_size_t(i));
|
SCM s_account = scm_list_ref($input, scm_from_size_t(i));
|
||||||
Account* acct = (Account*)SWIG_MustGetPtr(s_account,
|
Account* acct = (Account*)SWIG_MustGetPtr(s_account,
|
||||||
SWIGTYPE_p_account_s, 1, 0);
|
SWIGTYPE_p_Account, 1, 0);
|
||||||
acclist.push_back(acct);
|
acclist.push_back(acct);
|
||||||
}
|
}
|
||||||
$1 = &acclist;
|
$1 = &acclist;
|
||||||
@ -282,7 +284,7 @@ using Account = struct account_s;
|
|||||||
$result = SCM_EOL;
|
$result = SCM_EOL;
|
||||||
for (auto acct : $1)
|
for (auto acct : $1)
|
||||||
{
|
{
|
||||||
SCM elem = scm_list_1(SWIG_NewPointerObj(acct, SWIGTYPE_p_account_s, 0));
|
SCM elem = scm_list_1(SWIG_NewPointerObj(acct, SWIGTYPE_p_Account, 0));
|
||||||
$result = scm_append(scm_list_2($result, elem));
|
$result = scm_append(scm_list_2($result, elem));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -292,7 +294,7 @@ using Account = struct account_s;
|
|||||||
$result = SCM_EOL;
|
$result = SCM_EOL;
|
||||||
for (auto acct : *$1)
|
for (auto acct : *$1)
|
||||||
{
|
{
|
||||||
SCM elem = scm_list_1(SWIG_NewPointerObj(acct, SWIGTYPE_p_account_s, 0));
|
SCM elem = scm_list_1(SWIG_NewPointerObj(acct, SWIGTYPE_p_Account, 0));
|
||||||
$result = scm_append(scm_list_2($result, elem));
|
$result = scm_append(scm_list_2($result, elem));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -326,7 +328,6 @@ wrap_unique_ptr(GncOptionDBPtr, GncOptionDB);
|
|||||||
}, *($self->_get_option()));
|
}, *($self->_get_option()));
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
%extend GncOptionDB {
|
%extend GncOptionDB {
|
||||||
%template(set_option_string) set_option<std::string>;
|
%template(set_option_string) set_option<std::string>;
|
||||||
%template(set_option_int) set_option<int>;
|
%template(set_option_int) set_option<int>;
|
||||||
@ -369,3 +370,5 @@ wrap_unique_ptr(GncOptionDBPtr, GncOptionDB);
|
|||||||
GncOption_set_value_from_scm(&(db_opt->get()), new_value);
|
GncOption_set_value_from_scm(&(db_opt->get()), new_value);
|
||||||
}
|
}
|
||||||
%}
|
%}
|
||||||
|
|
||||||
|
#endif //SWIGGUILE
|
||||||
|
@ -30,9 +30,6 @@ gnc_add_test_with_guile(test-scm-query-string test-scm-query-string.cpp
|
|||||||
add_app_utils_test(test-sx test-sx.cpp)
|
add_app_utils_test(test-sx test-sx.cpp)
|
||||||
|
|
||||||
set(gtest_gnc_option_SOURCES
|
set(gtest_gnc_option_SOURCES
|
||||||
${MODULEPATH}/gnc-option.cpp
|
|
||||||
${MODULEPATH}/gnc-option-impl.cpp
|
|
||||||
${MODULEPATH}/gnc-optiondb.cpp
|
|
||||||
gtest-gnc-option.cpp
|
gtest-gnc-option.cpp
|
||||||
gtest-gnc-optiondb.cpp)
|
gtest-gnc-optiondb.cpp)
|
||||||
|
|
||||||
@ -91,49 +88,10 @@ if (HAVE_SRFI64)
|
|||||||
FALSE
|
FALSE
|
||||||
)
|
)
|
||||||
|
|
||||||
set(SWIG_ARGS "-c++" "-procdoc" "sw-gnc-option-doc" "-procdocformat" "plain")
|
|
||||||
gnc_add_swig_guile_command(swig-gnc-optiondb-guile
|
|
||||||
SWIG_GNC_OPTIONDB_GUILE_CPP swig-gnc-optiondb-guile.cpp
|
|
||||||
${MODULEPATH}/gnc-optiondb.i
|
|
||||||
""
|
|
||||||
)
|
|
||||||
add_library(swig-gnc-optiondb MODULE
|
|
||||||
${MODULEPATH}/gnc-option.cpp
|
|
||||||
${MODULEPATH}/gnc-option-impl.cpp
|
|
||||||
${MODULEPATH}/gnc-optiondb.cpp
|
|
||||||
${SWIG_GNC_OPTIONDB_GUILE_CPP}
|
|
||||||
)
|
|
||||||
set(swig_gnc_optiondb_INCLUDES
|
|
||||||
${MODULEPATH}
|
|
||||||
${CMAKE_SOURCE_DIR}/bindings/guile
|
|
||||||
${CMAKE_SOURCE_DIR}/libgnucash/engine
|
|
||||||
${CMAKE_BINARY_DIR}/common # for config.h
|
|
||||||
${GLIB2_INCLUDE_DIRS}
|
|
||||||
${GUILE_INCLUDE_DIRS}
|
|
||||||
)
|
|
||||||
|
|
||||||
set(swig_gnc_optiondb_LIBS
|
|
||||||
gnc-engine
|
|
||||||
gnc-app-utils
|
|
||||||
gnucash-guile
|
|
||||||
${GLIB2_LDFLAGS}
|
|
||||||
${GUILE_LDFLAGS}
|
|
||||||
)
|
|
||||||
|
|
||||||
target_link_libraries(swig-gnc-optiondb ${swig_gnc_optiondb_LIBS})
|
|
||||||
target_include_directories(swig-gnc-optiondb
|
|
||||||
PRIVATE ${swig_gnc_optiondb_INCLUDES})
|
|
||||||
|
|
||||||
install(TARGETS swig-gnc-optiondb
|
|
||||||
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
||||||
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
|
|
||||||
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
|
|
||||||
)
|
|
||||||
|
|
||||||
gnc_add_scheme_test_targets(scm-test-gnc-optiondb
|
gnc_add_scheme_test_targets(scm-test-gnc-optiondb
|
||||||
"test-gnc-optiondb.scm"
|
"test-gnc-optiondb.scm"
|
||||||
"tests"
|
"tests"
|
||||||
"swig-gnc-optiondb;scm-srfi64-extras"
|
"swig-apputils-guile-cpp;scm-srfi64-extras"
|
||||||
FALSE
|
FALSE
|
||||||
)
|
)
|
||||||
gnc_add_scheme_tests("test-gnc-optiondb.scm")
|
gnc_add_scheme_tests("test-gnc-optiondb.scm")
|
||||||
@ -173,4 +131,5 @@ set_dist_list(test_app_utils_DIST
|
|||||||
${test_app_utils_scheme_SOURCES}
|
${test_app_utils_scheme_SOURCES}
|
||||||
${test_app_utils_SOURCES}
|
${test_app_utils_SOURCES}
|
||||||
${test_autoclear_SOURCES}
|
${test_autoclear_SOURCES}
|
||||||
|
${gtest_gnc_option_SOURCES}
|
||||||
)
|
)
|
||||||
|
@ -26,10 +26,10 @@
|
|||||||
(use-modules (gnucash gnc-module))
|
(use-modules (gnucash gnc-module))
|
||||||
(eval-when
|
(eval-when
|
||||||
(compile load eval expand)
|
(compile load eval expand)
|
||||||
(load-extension "libswig-gnc-optiondb" "scm_init_sw_gnc_optiondb_module"))
|
(load-extension "_sw_app_utils" "scm_init_sw_app_utils_module"))
|
||||||
|
|
||||||
(use-modules (gnucash engine))
|
(use-modules (gnucash engine))
|
||||||
(use-modules (sw_gnc_optiondb))
|
(use-modules (sw_app_utils))
|
||||||
|
|
||||||
(define (run-test)
|
(define (run-test)
|
||||||
(test-runner-factory gnc:test-runner)
|
(test-runner-factory gnc:test-runner)
|
||||||
@ -84,7 +84,7 @@
|
|||||||
|
|
||||||
(define (cleanup book root)
|
(define (cleanup book root)
|
||||||
;; Destroying the book destroys the account tree too
|
;; Destroying the book destroys the account tree too
|
||||||
(qof-book-destroy book))
|
(gnc-option-test-book-destroy book))
|
||||||
|
|
||||||
(define (test-make-account-list-option book)
|
(define (test-make-account-list-option book)
|
||||||
(test-group "test-make-account-list-option"
|
(test-group "test-make-account-list-option"
|
||||||
@ -122,7 +122,7 @@
|
|||||||
(let ((acct (gnc-option-value optiondb "salt" "pork")))
|
(let ((acct (gnc-option-value optiondb "salt" "pork")))
|
||||||
(test-equal (list (cadr acctlist)) acct)))))
|
(test-equal (list (cadr acctlist)) acct)))))
|
||||||
|
|
||||||
(let* ((book (qof-book-new))
|
(let* ((book (gnc-option-test-book-new))
|
||||||
(root-account (gnc-account-create-root book)))
|
(root-account (gnc-account-create-root book)))
|
||||||
(test-group-with-cleanup "test-gnc-make-account-list-options"
|
(test-group-with-cleanup "test-gnc-make-account-list-options"
|
||||||
(make-account-tree book root-account)
|
(make-account-tree book root-account)
|
||||||
|
Loading…
Reference in New Issue
Block a user