Skip to content

Commit 69e4e68

Browse files
committed
ci(linux): use system jsoncpp/libsecret to unblock flutter build linux
The Linux CI step ran flutter build linux --release without first building the local jsoncpp/libsecret artifacts that linux/CMakeLists.txt hardcoded, so ninja failed looking for scripts/linux/build/jsoncpp/.../libjsoncpp.so. Add a USE_SYSTEM_SECURE_STORAGE_DEPS switch to the Linux CMakeLists template: when set (or the same-named env var is "1"), link against the pkg-config-resolved system jsoncpp and libsecret-1 and bundle the .so files from their reported libdir; otherwise keep the existing local-build path used by scripts/linux/build_all.sh. Set USE_SYSTEM_SECURE_STORAGE_DEPS=1 on the build-linux job, where the stackwallet-ci image already provides libjsoncpp-dev and libsecret-1-dev.
1 parent 86139a1 commit 69e4e68

2 files changed

Lines changed: 56 additions & 28 deletions

File tree

.github/workflows/build.yaml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ jobs:
7474
run: echo "$CHANGE_NOW" | base64 --decode > lib/external_api_keys.dart
7575

7676
- name: Build
77+
env:
78+
USE_SYSTEM_SECURE_STORAGE_DEPS: "1"
7779
run: flutter build linux --release
7880

7981
- name: Package

scripts/app_config/templates/linux/CMakeLists.txt

Lines changed: 54 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -53,24 +53,37 @@ endfunction()
5353
set(FLUTTER_MANAGED_DIR "${CMAKE_CURRENT_SOURCE_DIR}/flutter")
5454
add_subdirectory(${FLUTTER_MANAGED_DIR})
5555

56-
# build libjsoncpp and libsecret for flutter_secure_storage
57-
set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/jsoncpp/build/pkg-config")
58-
set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/pc")
59-
60-
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/jsoncpp/include)
61-
62-
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/libsecret)
63-
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/libsecret/_build)
64-
65-
add_library(jsoncpp SHARED IMPORTED)
66-
set_target_properties(jsoncpp PROPERTIES IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/jsoncpp/build/src/lib_json/libjsoncpp.so")
67-
add_library(secret-1 SHARED IMPORTED)
68-
set_target_properties(secret-1 PROPERTIES IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/libsecret/_build/libsecret/libsecret-1.so")
69-
7056
# System-level dependencies.
7157
find_package(PkgConfig REQUIRED)
7258
pkg_check_modules(GTK REQUIRED IMPORTED_TARGET gtk+-3.0)
7359

60+
# jsoncpp and libsecret for flutter_secure_storage. When
61+
# USE_SYSTEM_SECURE_STORAGE_DEPS is set, link and bundle the system-installed
62+
# copies; otherwise use the artifacts built by scripts/linux/build_secure_storage_deps.sh.
63+
option(USE_SYSTEM_SECURE_STORAGE_DEPS "Link against system-installed jsoncpp and libsecret" OFF)
64+
if(DEFINED ENV{USE_SYSTEM_SECURE_STORAGE_DEPS} AND "$ENV{USE_SYSTEM_SECURE_STORAGE_DEPS}" STREQUAL "1")
65+
set(USE_SYSTEM_SECURE_STORAGE_DEPS ON)
66+
endif()
67+
68+
if(USE_SYSTEM_SECURE_STORAGE_DEPS)
69+
pkg_check_modules(JSONCPP REQUIRED IMPORTED_TARGET jsoncpp)
70+
pkg_check_modules(LIBSECRET REQUIRED IMPORTED_TARGET libsecret-1)
71+
pkg_get_variable(JSONCPP_LIBDIR jsoncpp libdir)
72+
pkg_get_variable(LIBSECRET_LIBDIR libsecret-1 libdir)
73+
else()
74+
set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/jsoncpp/build/pkg-config")
75+
set(ENV{PKG_CONFIG_PATH} "$ENV{PKG_CONFIG_PATH}:${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/pc")
76+
77+
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/jsoncpp/include)
78+
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/libsecret)
79+
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/libsecret/_build)
80+
81+
add_library(jsoncpp SHARED IMPORTED)
82+
set_target_properties(jsoncpp PROPERTIES IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/jsoncpp/build/src/lib_json/libjsoncpp.so")
83+
add_library(secret-1 SHARED IMPORTED)
84+
set_target_properties(secret-1 PROPERTIES IMPORTED_LOCATION "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/libsecret/_build/libsecret/libsecret-1.so")
85+
endif()
86+
7487
add_definitions(-DAPPLICATION_ID="${APPLICATION_ID}")
7588

7689
# Define the application target. To change its name, change BINARY_NAME above,
@@ -91,8 +104,12 @@ apply_standard_settings(${BINARY_NAME})
91104
target_link_libraries(${BINARY_NAME} PRIVATE -static-libgcc -static-libstdc++)
92105
target_link_libraries(${BINARY_NAME} PRIVATE flutter)
93106
target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::GTK)
94-
target_link_libraries(${BINARY_NAME} PRIVATE jsoncpp)
95-
target_link_libraries(${BINARY_NAME} PRIVATE secret-1)
107+
if(USE_SYSTEM_SECURE_STORAGE_DEPS)
108+
target_link_libraries(${BINARY_NAME} PRIVATE PkgConfig::JSONCPP PkgConfig::LIBSECRET)
109+
else()
110+
target_link_libraries(${BINARY_NAME} PRIVATE jsoncpp)
111+
target_link_libraries(${BINARY_NAME} PRIVATE secret-1)
112+
endif()
96113

97114

98115
# Run the Flutter tool portions of the build. This must not be removed.
@@ -147,19 +164,28 @@ if(INCLUDE_MWC_SO)
147164
COMPONENT Runtime)
148165
endif()
149166

150-
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/jsoncpp/build/src/lib_json/libjsoncpp.so.1.7.4" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
151-
COMPONENT Runtime)
152-
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/jsoncpp/build/src/lib_json/libjsoncpp.so.1" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
153-
COMPONENT Runtime)
154-
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/jsoncpp/build/src/lib_json/libjsoncpp.so" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
155-
COMPONENT Runtime)
167+
if(USE_SYSTEM_SECURE_STORAGE_DEPS)
168+
file(GLOB JSONCPP_SO_FILES "${JSONCPP_LIBDIR}/libjsoncpp.so*")
169+
install(FILES ${JSONCPP_SO_FILES} DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
170+
COMPONENT Runtime)
171+
file(GLOB LIBSECRET_SO_FILES "${LIBSECRET_LIBDIR}/libsecret-1.so*")
172+
install(FILES ${LIBSECRET_SO_FILES} DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
173+
COMPONENT Runtime)
174+
else()
175+
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/jsoncpp/build/src/lib_json/libjsoncpp.so.1.7.4" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
176+
COMPONENT Runtime)
177+
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/jsoncpp/build/src/lib_json/libjsoncpp.so.1" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
178+
COMPONENT Runtime)
179+
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/jsoncpp/build/src/lib_json/libjsoncpp.so" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
180+
COMPONENT Runtime)
156181

157-
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/libsecret/_build/libsecret/libsecret-1.so.0.0.0" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
158-
COMPONENT Runtime)
159-
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/libsecret/_build/libsecret/libsecret-1.so.0" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
160-
COMPONENT Runtime)
161-
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/libsecret/_build/libsecret/libsecret-1.so" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
162-
COMPONENT Runtime)
182+
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/libsecret/_build/libsecret/libsecret-1.so.0.0.0" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
183+
COMPONENT Runtime)
184+
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/libsecret/_build/libsecret/libsecret-1.so.0" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
185+
COMPONENT Runtime)
186+
install(FILES "${CMAKE_CURRENT_SOURCE_DIR}/../scripts/linux/build/libsecret/_build/libsecret/libsecret-1.so" DESTINATION "${INSTALL_BUNDLE_LIB_DIR}"
187+
COMPONENT Runtime)
188+
endif()
163189

164190
foreach(bundled_library ${PLUGIN_BUNDLED_LIBRARIES})
165191
install(FILES "${bundled_library}"

0 commit comments

Comments
 (0)