From 8252fdf7fd25e6eea9583cd0ca30063e0213d3d7 Mon Sep 17 00:00:00 2001 From: Shun Wang Date: Mon, 10 Nov 2025 09:05:42 +0800 Subject: [PATCH 1/3] chore: use readstat library from conan --- Desktop/CMakeLists.txt | 3 +-- Engine/CMakeLists.txt | 1 - Tools/CMake/Install.cmake | 1 - Tools/CMake/Libraries.cmake | 5 ++--- conanfile.py | 3 ++- 5 files changed, 5 insertions(+), 8 deletions(-) diff --git a/Desktop/CMakeLists.txt b/Desktop/CMakeLists.txt index f657fcee63..e8014c3072 100644 --- a/Desktop/CMakeLists.txt +++ b/Desktop/CMakeLists.txt @@ -178,8 +178,7 @@ target_link_libraries( $<$>:freexl::freexl> # ReadStat ----------------------------------- ${LIBREADSTAT_LIBRARIES} - # Rtools's ReadStat - $<$:${RTOOLS_LIBREADSTAT_DLL_A}> + $<$>:readstat::readstat> # librdata ----------------------------------- ${LIBRDATA_LIBRARIES} $<$:${RTOOLS_LIBRDATA_DLL_A}> diff --git a/Engine/CMakeLists.txt b/Engine/CMakeLists.txt index 3f336a2ef5..de63929776 100644 --- a/Engine/CMakeLists.txt +++ b/Engine/CMakeLists.txt @@ -70,7 +70,6 @@ if(WINDOWS) POST_BUILD DEPENDS ${CMAKE_BINARY_DIR}/R-Interface/libR-Interface.dll COMMAND ${CMAKE_COMMAND} -E copy_if_different ${RTOOLS_LIBWINPTHREAD_DLL} ${CMAKE_BINARY_DIR} COMMAND ${CMAKE_COMMAND} -E copy_if_different ${RTOOLS_LIBGCC_S_SEH_DLL} ${CMAKE_BINARY_DIR} - COMMAND ${CMAKE_COMMAND} -E copy_if_different ${RTOOLS_LIBREADSTAT_DLL} ${CMAKE_BINARY_DIR} COMMAND ${CMAKE_COMMAND} -E copy_if_different ${RTOOLS_LIBSTDCPP_DLL} ${CMAKE_BINARY_DIR} COMMAND ${CMAKE_COMMAND} -E copy_if_different ${RTOOLS_LIBRDATA_DLL} ${CMAKE_BINARY_DIR} COMMAND ${CMAKE_COMMAND} -E copy_if_different ${RTOOLS_MSYS_DLL} ${CMAKE_BINARY_DIR} diff --git a/Tools/CMake/Install.cmake b/Tools/CMake/Install.cmake index 169d1e3298..0fb6cd0b76 100644 --- a/Tools/CMake/Install.cmake +++ b/Tools/CMake/Install.cmake @@ -421,7 +421,6 @@ if(WIN32) ${RTOOLS_MSYS_DLL} ${RTOOLS_LIBWINPTHREAD_DLL} #${RTOOLS_LIBJSONCPP_DLL} - ${RTOOLS_LIBREADSTAT_DLL} ${RTOOLS_LIBRDATA_DLL} ${RTOOLS_ZLIB_DLL} ${RTOOLS_LIBBZ2_DLL} diff --git a/Tools/CMake/Libraries.cmake b/Tools/CMake/Libraries.cmake index 0ffbbdf2df..84d6e3ed7e 100644 --- a/Tools/CMake/Libraries.cmake +++ b/Tools/CMake/Libraries.cmake @@ -41,6 +41,7 @@ endif() find_package(ZLIB 1.2 REQUIRED) find_package(Iconv 1.16 REQUIRED) find_package(SQLite3 3.37.0 REQUIRED) +find_package(readstat REQUIRED) #if(USE_CONAN) # find_package(jsoncpp 1.9 REQUIRED) @@ -236,6 +237,7 @@ if(APPLE) find_package(Brotli 1.0.9 REQUIRED) find_package(freexl 2.0.99 REQUIRED) find_package(librdata REQUIRED) + find_package(readstat REQUIRED) endif() @@ -245,7 +247,6 @@ if(WIN32) find_package(freexl 2.0.99 REQUIRED) - copy_rtools_header(RTOOLS_LIBREADSTAT_H readstat.h ${CMAKE_SOURCE_DIR}/Desktop/data/importers/readstat/readstat.h) copy_rtools_header(RTOOLS_LIBRDATA_H rdata.h ${CMAKE_SOURCE_DIR}/Desktop/data/importers/rdata/rdata.h) find_rtools_dll_path(RTOOLS_ZLIB_DLL "zlib1.dll") @@ -256,9 +257,7 @@ if(WIN32) find_rtools_dll_path(RTOOLS_LIBRDATA_DLL "librdata-0.dll") find_rtools_dll_path(RTOOLS_LIBSTDCPP_DLL "libstdc++-6.dll") find_rtools_dll_path(RTOOLS_LIBRDATA_DLL_A "librdata.dll.a") - find_rtools_dll_path(RTOOLS_LIBREADSTAT_DLL "libreadstat-1.dll") find_rtools_dll_path(RTOOLS_LIBGCC_S_SEH_DLL "libgcc_s_seh-1.dll") - find_rtools_dll_path(RTOOLS_LIBREADSTAT_DLL_A "libreadstat.dll.a") find_rtools_dll_path(RTOOLS_LIBWINPTHREAD_DLL "libwinpthread-1.dll") endif() diff --git a/conanfile.py b/conanfile.py index 34986ca18b..401a0e5b18 100644 --- a/conanfile.py +++ b/conanfile.py @@ -22,9 +22,10 @@ def requirements(self): self.requires("openssl/3.4.1") self.requires("bison/3.7.6") self.requires("brotli/1.1.0") - self.requires("sqlite3/3.49.1") + self.requires("sqlite3/[>=3.49 <4.0]") self.requires("gmp/6.3.0") self.requires("mpfr/4.2.1") + self.requires("readstat/1.1.9") self.requires("freexl/2.0.99.cci.20250526") # librdata is not available for Windows platforms on conan-center yet if self.settings_build.os == "Macos": From ab37822547e20de8400e038ab21e0899aa76f0ad Mon Sep 17 00:00:00 2001 From: Shun Wang Date: Mon, 10 Nov 2025 16:54:29 +0800 Subject: [PATCH 2/3] fix find library on Linux --- Tools/CMake/Libraries.cmake | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/Tools/CMake/Libraries.cmake b/Tools/CMake/Libraries.cmake index 84d6e3ed7e..280319e62c 100644 --- a/Tools/CMake/Libraries.cmake +++ b/Tools/CMake/Libraries.cmake @@ -41,11 +41,10 @@ endif() find_package(ZLIB 1.2 REQUIRED) find_package(Iconv 1.16 REQUIRED) find_package(SQLite3 3.37.0 REQUIRED) -find_package(readstat REQUIRED) -#if(USE_CONAN) -# find_package(jsoncpp 1.9 REQUIRED) -#endif() +if(USE_CONAN) + find_package(readstat REQUIRED) +endif() find_package(OpenSSL 1.1.1 COMPONENTS SSL Crypto) if(NOT OpenSSL_FOUND) From 7847ed86defadeaef0c01d6927867485ad362458 Mon Sep 17 00:00:00 2001 From: Joris Goosen Date: Tue, 11 Nov 2025 13:22:42 +0100 Subject: [PATCH 3/3] remove some apple stuff --- CMakeLists.txt | 3 - Desktop/CMakeLists.txt | 5 -- Tools/CMake/Dependencies.cmake | 101 --------------------------------- 3 files changed, 109 deletions(-) delete mode 100644 Tools/CMake/Dependencies.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 7e542a50f9..7520ef3f1e 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -115,9 +115,6 @@ include(Programs) # Looking for libraries, e.g., Boost, Qt include(Libraries) -# Preparing irregular dependencies, e.g., ReadStat -include(Dependencies) - # Setting JASP's parameters, e.g., JASP_VERSION include(JASP) diff --git a/Desktop/CMakeLists.txt b/Desktop/CMakeLists.txt index e8014c3072..609f9726f6 100644 --- a/Desktop/CMakeLists.txt +++ b/Desktop/CMakeLists.txt @@ -101,10 +101,6 @@ if(LOCAL_MODULES_BUILD) add_dependencies(JASP ModulesBuild) endif() -if(APPLE) - add_dependencies(JASPDesktopLib readstat) -endif() - if(WINDOWS) # This is added to the build folder that JASP doesn't try to recreate the # junctions in the build folder, they are there anyway! @@ -177,7 +173,6 @@ target_link_libraries( ${LIBFREEXL_LIBRARIES} $<$>:freexl::freexl> # ReadStat ----------------------------------- - ${LIBREADSTAT_LIBRARIES} $<$>:readstat::readstat> # librdata ----------------------------------- ${LIBRDATA_LIBRARIES} diff --git a/Tools/CMake/Dependencies.cmake b/Tools/CMake/Dependencies.cmake deleted file mode 100644 index 33bd33b812..0000000000 --- a/Tools/CMake/Dependencies.cmake +++ /dev/null @@ -1,101 +0,0 @@ -# Dependencies.cmake tries to provide any dependencies that cannot be -# installed, or configured using Conan. At the moment, this only includes -# ReadStat which doesn't have a proper CMake or PkgConfig. -# -# Notes: -# -# - FetchContent variables will be lower cased, that's why we have -# weird variable names readstat_POPULATED. -# - "CMake 3.22 updated the FindPkgConfig module to allow passing -# arbitrary arguments to the pkgconfig executable." This could come handy -# later on when dealing with some of the more annoying dependencies -# -# On macOS, -# We can cross compiler, so, here I take care that right ARCH and target are set. -# I'm not fully trusting this and rather have a native build, but this seems to be -# working! -# -# On Linux, -# We can build for Flatpak, as well as a local build, ... - -list(APPEND CMAKE_MESSAGE_CONTEXT Dependencies) - -add_custom_target(Dependencies) - -if(APPLE) - - add_dependencies(Dependencies readstat) - - # ----- readstat ----- - # - # This might look a bit unusual but it is fine. I had to do it this - # way because CMake was not being very smart about it, and was - # reconfiguring the entire readstat everytime during build even if - # it was already built! - - fetchcontent_declare( - readstat - URL "https://github.com/WizardMac/ReadStat/releases/download/v1.1.9/readstat-1.1.9.tar.gz" - URL_HASH - SHA256=3a232b9e852d10173e2f25da9155afe2e129a30d1fc6c9aac142cdc5cbfe527e) - - message(CHECK_START "Downloading 'readstat'") - - fetchcontent_makeavailable(readstat) - - if(USE_CONAN) - #If we are using conan we want to avoid readstat using the system libiconv and zlib - #using the configure options seems to be ignored for some reason, so instead here we just get the information from conan - #We then make sure that readstat finds zlib and iconv headers and libs instead of macosx sdk ones - if(CMAKE_BUILD_TYPE STREQUAL "Debug") - set(Iconv_DIR ${libiconv_PACKAGE_FOLDER_DEBUG}) - set(Zlib_DIR ${zlib_PACKAGE_FOLDER_DEBUG}) - set(zlib_LIB_DIRS ${zlib_LIB_DIRS_DEBUG}) - else() - set(Iconv_DIR ${libiconv_PACKAGE_FOLDER_RELEASE}) - set(Zlib_DIR ${zlib_PACKAGE_FOLDER_RELEASE}) - endif() - set(EXTRA_INCLUDE "-I${Iconv_DIR}/include -I${Zlib_DIR}/include") - set(EXTRA_LIBS_LINK "-L${Iconv_DIR}/lib -liconv -L${Zlib_DIR}/lib -lz") - - #message(STATUS "Using EXTRA_LIBS_LINK: '${EXTRA_LIBS_LINK}'") - else() - set(EXTRA_INCLUDE "") - set(EXTRA_LIBS_LINK "") - endif() - - if(readstat_POPULATED) - - message(CHECK_PASS "successful.") - - set(READSTAT_CFLAGS "${EXTRA_INCLUDE} -g -O2 -Wno-strict-prototypes -arch ${CMAKE_OSX_ARCHITECTURES} -mmacosx-version-min=${CMAKE_OSX_DEPLOYMENT_TARGET}") - set(READSTAT_CXXFLAGS "${READSTAT_CFLAGS}") - - add_custom_command( - WORKING_DIRECTORY ${readstat_SOURCE_DIR} - OUTPUT ${readstat_BINARY_DIR}/include/readstat.h - ${readstat_BINARY_DIR}/lib/libreadstat.a - COMMAND - export CFLAGS=${READSTAT_CFLAGS} && export CXXFLAGS=${READSTAT_CXXFLAGS} - && export LIBS=${EXTRA_LIBS_LINK} - && ./configure --enable-shared=no --enable-static --prefix=${readstat_BINARY_DIR} - COMMAND ${MAKE} - COMMAND ${MAKE} install - COMMENT "----- Preparing 'readstat'" - USES_TERMINAL) - - add_custom_target(readstat DEPENDS ${readstat_BINARY_DIR}/include/readstat.h) - - set(LIBREADSTAT_INCLUDE_DIRS ${readstat_BINARY_DIR}/include) - set(LIBREADSTAT_LIBRARY_DIRS ${readstat_BINARY_DIR}/lib) - set(LIBREADSTAT_LIBRARIES ${LIBREADSTAT_LIBRARY_DIRS}/libreadstat.a) - - else() - - message(CHECK_FAIL "failed.") - - endif() - -endif() - -list(POP_BACK CMAKE_MESSAGE_CONTEXT)