diff --git a/configure.ac b/configure.ac index 74e7eebb58..3df34c4f4f 100644 --- a/configure.ac +++ b/configure.ac @@ -402,6 +402,7 @@ update to latest darwin]) if test "x$_gtk_mac" = xyes; then GTK_MAC_LIBS="${GTK_MAC_LIBS} -lobjc -framework Cocoa" GTK_MAC_CFLAGS="${GTK_MAC_CFLAGS} -xobjective-c" + GTK_MAC_CXXFLAGS="${GTK_MAC_CFLAGS} -xobjective-c++" if test "`echo ${GCC_VERSION} | cut -d. -f1`" -eq 4; then if test "`echo ${GCC_VERSION} | cut -d. -f2`" -ge 8; then # This is gcc >= 4.8.x @@ -412,6 +413,7 @@ update to latest darwin]) AC_MSG_RESULT(${_gtk_mac}) AC_SUBST(GTK_MAC_LIBS) AC_SUBST(GTK_MAC_CFLAGS) + AC_SUBST(GTK_MAC_CXXFLAGS) else AC_MSG_RESULT(no) fi diff --git a/libgnucash/core-utils/Makefile.am b/libgnucash/core-utils/Makefile.am index b54f2dd083..b7da796ed3 100644 --- a/libgnucash/core-utils/Makefile.am +++ b/libgnucash/core-utils/Makefile.am @@ -57,11 +57,13 @@ endif AM_CPPFLAGS = \ ${GUILE_CFLAGS} \ ${GLIB_CFLAGS} \ - ${GTK_MAC_CFLAGS} \ -I${top_builddir}/common \ -I${top_srcdir}/common \ $(BOOST_CPPFLAGS) +AM_CFLAGS = ${GTK_MAC_CFLAGS} +AM_CXXFLAGS = ${GTK_MAC_CXXFLAGS} + gncscmmoddir = ${GNC_SCM_INSTALL_DIR}/gnucash gncscmmod_DATA = core-utils.scm diff --git a/libgnucash/core-utils/test/CMakeLists.txt b/libgnucash/core-utils/test/CMakeLists.txt index a21fea0bd8..f1aa44404a 100644 --- a/libgnucash/core-utils/test/CMakeLists.txt +++ b/libgnucash/core-utils/test/CMakeLists.txt @@ -5,8 +5,12 @@ SET(CORE_UTILS_TEST_INCLUDE_DIRS ${CMAKE_SOURCE_DIR}/libgnucash/core-utils ${CMAKE_SOURCE_DIR}/common/test-core ${GLIB2_INCLUDE_DIRS} + ${GTK_MAC_INCLUDE_DIRS} ) SET(CORE_UTILS_TEST_LIBS gnc-core-utils test-core) +IF (MAC_INTEGRATION) + LIST(APPEND CORE_UTILS_TEST_LIBS ${OSX_EXTRA_LIBRARIES}) +ENDIF() MACRO(ADD_CORE_UTILS_TEST _TARGET _SOURCE_FILES) GNC_ADD_TEST(${_TARGET} "${_SOURCE_FILES}" CORE_UTILS_TEST_INCLUDE_DIRS CORE_UTILS_TEST_LIBS) @@ -15,7 +19,13 @@ ENDMACRO() ADD_CORE_UTILS_TEST(test-gnc-glib-utils test-gnc-glib-utils.c) ADD_CORE_UTILS_TEST(test-resolve-file-path test-resolve-file-path.c) ADD_CORE_UTILS_TEST(test-userdata-dir test-userdata-dir.c) -ADD_CORE_UTILS_TEST(test-userdata-dir-invalid-home test-userdata-dir-invalid-home.c) +IF (NOT MAC_INTEGRATION AND NOT WIN32) + ADD_CORE_UTILS_TEST(test-userdata-dir-invalid-home test-userdata-dir-invalid-home.c) +ENDIF() +IF (MAC_INTEGRATION) + TARGET_COMPILE_OPTIONS(test-userdata-dir PRIVATE ${OSX_EXTRA_COMPILE_FLAGS}) + TARGET_COMPILE_DEFINITIONS(test-userdata-dir PRIVATE ${GTK_MAC_CFLAGS_OTHER}) +ENDIF(MAC_INTEGRATION) SET_DIST_LIST(test_core_utils_DIST CMakeLists.txt Makefile.am test-gnc-glib-utils.c test-resolve-file-path.c test-userdata-dir.c test-userdata-dir-invalid-home.c) diff --git a/libgnucash/core-utils/test/Makefile.am b/libgnucash/core-utils/test/Makefile.am index cb1b26946e..7d8ba3d1f5 100644 --- a/libgnucash/core-utils/test/Makefile.am +++ b/libgnucash/core-utils/test/Makefile.am @@ -11,12 +11,14 @@ AM_CPPFLAGS = \ -I${top_srcdir}/libgnucash/engine \ ${GUILE_CFLAGS} \ ${GLIB_CFLAGS} \ + ${GTK_MAC_CFLAGS} \ $(BOOST_CPPFLAGS) LDADD = \ ../libgnc-core-utils.la \ ${top_builddir}/common/test-core/libtest-core.la \ ${GLIB_LIBS} \ + ${GTK_MAC_LIBS} \ ${BOOST_LDFLAGS} # these tests are ordered kind more or less in the order @@ -26,8 +28,13 @@ LDADD = \ TESTS = \ test-gnc-glib-utils \ test-resolve-file-path \ - test-userdata-dir \ - test-userdata-dir-invalid-home + test-userdata-dir + +if !PLATFORM_OSX_QUARTZ +if !PLATFORM_WIN32 +TESTS += test-userdata-dir-invalid-home +endif +endif GNC_TEST_DEPS = \ --library-dir ${top_builddir}/libgnucash/core-utils diff --git a/libgnucash/core-utils/test/test-userdata-dir.c b/libgnucash/core-utils/test/test-userdata-dir.c index 7046336f45..79704896ce 100644 --- a/libgnucash/core-utils/test/test-userdata-dir.c +++ b/libgnucash/core-utils/test/test-userdata-dir.c @@ -28,6 +28,9 @@ #include #include "test-stuff.h" #include "gnc-filepath-utils.h" +#ifdef MAC_INTEGRATION +#include +#endif struct usr_confpath_strings_struct { @@ -55,13 +58,32 @@ usr_confpath_strings strs2[] = { 0, NULL, NULL }, }; +static char* +test_get_userdatadir () +{ +#ifdef MAC_INTEGRATION + char *retval = NULL; + NSFileManager*fm = [NSFileManager defaultManager]; + NSArray* appSupportDir = [fm URLsForDirectory:NSApplicationSupportDirectory + inDomains:NSUserDomainMask]; + if ([appSupportDir count] > 0) + { + NSURL* dirUrl = [appSupportDir objectAtIndex:0]; + NSString* dirPath = [dirUrl path]; + retval = g_strdup([dirPath UTF8String]); + } + return retval; +#else + return g_strdup(g_get_user_data_dir()); +#endif +} + int main(int argc, char **argv) { int i; char *home_dir = NULL; - const char *userdata_dir = NULL; - const char *tmp_dir = g_get_tmp_dir(); + char *userdata_dir = NULL; char *gnc_data_home_dir = NULL; if (argc > 1) @@ -70,11 +92,14 @@ main(int argc, char **argv) * used to pass invalid home directories manually. The * test error messages should then show the system's temporary * directory to be used instead */ - home_dir = argv[1]; + home_dir = g_strdup(argv[1]); else /* Set up a fake home directory to play with */ +#ifdef MAC_INTEGRATION + home_dir = test_get_userdatadir(); +#else home_dir = g_dir_make_tmp("gnucashXXXXXX", NULL); - +#endif /* Run usr conf dir tests with a valid and writable homedir */ g_setenv("HOME", home_dir, TRUE); @@ -86,25 +111,25 @@ main(int argc, char **argv) if (strs2[i].func_num == 0) { - wantout = g_build_filename(tmp_dir, PACKAGE_NAME, "foo", + wantout = g_build_filename(home_dir, PACKAGE_NAME, "foo", (gchar *)NULL); daout = gnc_build_userdata_path("foo"); } else if (strs2[i].func_num == 1) { - wantout = g_build_filename(tmp_dir, PACKAGE_NAME, strs2[i].output, "foo", + wantout = g_build_filename(home_dir, PACKAGE_NAME, strs2[i].output, "foo", (gchar *)NULL); daout = gnc_build_book_path("foo"); } else if (strs2[i].func_num == 2) { - wantout = g_build_filename(tmp_dir, PACKAGE_NAME, strs2[i].output, "foo", + wantout = g_build_filename(home_dir, PACKAGE_NAME, strs2[i].output, "foo", (gchar *)NULL); daout = gnc_build_translog_path("foo"); } else // if (strs2[i].prefix_home == 3) { - wantout = g_build_filename(tmp_dir, PACKAGE_NAME, strs2[i].output, "foo", + wantout = g_build_filename(home_dir, PACKAGE_NAME, strs2[i].output, "foo", (gchar *)NULL); daout = gnc_build_data_path("foo"); } @@ -116,10 +141,10 @@ main(int argc, char **argv) g_free(wantout); g_free(daout); } - + g_free(home_dir); /* Second run, after properly having called gnc_filepath_init */ gnc_filepath_init(TRUE); - userdata_dir = g_get_user_data_dir(); + userdata_dir = test_get_userdatadir(); for (i = 0; strs2[i].funcname != NULL; i++) { char *daout; @@ -157,6 +182,7 @@ main(int argc, char **argv) g_free(wantout); g_free(daout); } + g_free(userdata_dir); /* Third run, after setting GNC_DATA_HOME gnc_filepath_init */ gnc_data_home_dir = g_build_filename(home_dir, "Test", NULL);