Skip to content

Commit 7198fed

Browse files
metsmakristelmerilain
authored andcommitted
Fix macOS build and other build fixes
Fixes #715, #716, #717 Signed-off-by: Raul Metsma <raul@metsma.ee>
1 parent 4b6d0be commit 7198fed

8 files changed

Lines changed: 183 additions & 48 deletions

File tree

CMakeLists.txt

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ project(libdigidocpp VERSION 4.4.0
99
DESCRIPTION "C++ library for digital signatures and validation of digitally signed documents"
1010
HOMEPAGE_URL https://github.com/open-eid/libdigidocpp
1111
)
12-
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules)
12+
set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake/modules)
1313
list(APPEND CMAKE_PREFIX_PATH ${CMAKE_INSTALL_PREFIX})
1414

1515
macro(SET_ENV NAME DEF)
@@ -24,12 +24,12 @@ include(GNUInstallDirs)
2424

2525
set_env( TSL_URL "https://ec.europa.eu/tools/lotl/eu-lotl.xml" CACHE STRING "TSL trust list primary URL" )
2626
set_env( TSL_CERTS
27-
${CMAKE_SOURCE_DIR}/etc/tl-mp1.crt
28-
${CMAKE_SOURCE_DIR}/etc/tl-mp2.crt
29-
${CMAKE_SOURCE_DIR}/etc/tl-mp3.crt
30-
${CMAKE_SOURCE_DIR}/etc/tl-mp4.crt
31-
${CMAKE_SOURCE_DIR}/etc/tl-mp5.crt
32-
${CMAKE_SOURCE_DIR}/etc/tl-mp6.crt
27+
${PROJECT_SOURCE_DIR}/etc/tl-mp1.crt
28+
${PROJECT_SOURCE_DIR}/etc/tl-mp2.crt
29+
${PROJECT_SOURCE_DIR}/etc/tl-mp3.crt
30+
${PROJECT_SOURCE_DIR}/etc/tl-mp4.crt
31+
${PROJECT_SOURCE_DIR}/etc/tl-mp5.crt
32+
${PROJECT_SOURCE_DIR}/etc/tl-mp6.crt
3333
CACHE FILEPATH "TSL trust list signing certificates" )
3434
set_env(TSA_URL "https://eid-dd.ria.ee/ts" CACHE STRING "Default TSA URL")
3535
set_env( SIVA_URL "https://siva.eesti.ee/V3/validate" CACHE STRING "Default SiVa validation service URL" )
@@ -92,13 +92,13 @@ endif()
9292

9393
find_package(Doxygen)
9494
if(TARGET Doxygen::doxygen)
95-
configure_file( ${CMAKE_SOURCE_DIR}/etc/Doxyfile.in Doxyfile @ONLY )
95+
configure_file(${PROJECT_SOURCE_DIR}/etc/Doxyfile.in Doxyfile @ONLY)
9696
add_custom_target( docs ALL
9797
Doxygen::doxygen Doxyfile
9898
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
9999
COMMENT "Generating API documentation with Doxygen" VERBATIM
100100
)
101-
install( DIRECTORY ${CMAKE_BINARY_DIR}/doc/ DESTINATION ${CMAKE_INSTALL_DOCDIR} )
101+
install(DIRECTORY ${PROJECT_BINARY_DIR}/doc/ DESTINATION ${CMAKE_INSTALL_DOCDIR})
102102
install( DIRECTORY doc/ DESTINATION ${CMAKE_INSTALL_DOCDIR} )
103103
endif()
104104

etc/Doxyfile.in

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ PROJECT_BRIEF =
6161
# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
6262
# the logo to the output directory.
6363

64-
PROJECT_LOGO = @CMAKE_SOURCE_DIR@/ID.ico
64+
PROJECT_LOGO = @PROJECT_SOURCE_DIR@/ID.ico
6565

6666
# With the PROJECT_ICON tag one can specify an icon that is included in the tabs
6767
# when the HTML document is shown. Doxygen will copy the logo to the output
@@ -74,7 +74,7 @@ PROJECT_ICON =
7474
# entered, it will be relative to the location where Doxygen was started. If
7575
# left blank the current directory will be used.
7676

77-
OUTPUT_DIRECTORY = @CMAKE_BINARY_DIR@/doc/
77+
OUTPUT_DIRECTORY = @PROJECT_BINARY_DIR@/doc/
7878

7979
# If the CREATE_SUBDIRS tag is set to YES then Doxygen will create up to 4096
8080
# sub-directories (in 2 levels) under the output directory of each output format
@@ -965,8 +965,8 @@ WARN_LOGFILE =
965965
# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
966966
# Note: If this tag is empty the current directory is searched.
967967

968-
INPUT = @CMAKE_SOURCE_DIR@/src \
969-
@CMAKE_SOURCE_DIR@/libdigidocpp.dox
968+
INPUT = @PROJECT_SOURCE_DIR@/src \
969+
@PROJECT_SOURCE_DIR@/libdigidocpp.dox
970970

971971
# This tag can be used to specify the character encoding of the source files
972972
# that Doxygen parses. Internally Doxygen uses the UTF-8 encoding. Doxygen uses
@@ -1076,8 +1076,8 @@ EXCLUDE_SYMBOLS = digidoc::*Private \
10761076
# that contain example code fragments that are included (see the \include
10771077
# command).
10781078

1079-
EXAMPLE_PATH = @CMAKE_SOURCE_DIR@/ \
1080-
@CMAKE_BINARY_DIR@/
1079+
EXAMPLE_PATH = @PROJECT_SOURCE_DIR@/ \
1080+
@PROJECT_BINARY_DIR@/
10811081

10821082
# If the value of the EXAMPLE_PATH tag contains directories, you can use the
10831083
# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
@@ -1097,7 +1097,7 @@ EXAMPLE_RECURSIVE = NO
10971097
# that contain images that are to be included in the documentation (see the
10981098
# \image command).
10991099

1100-
IMAGE_PATH = @CMAKE_SOURCE_DIR@/doc/images/
1100+
IMAGE_PATH = @PROJECT_SOURCE_DIR@/doc/images/
11011101

11021102
# The INPUT_FILTER tag can be used to specify a program that Doxygen should
11031103
# invoke to filter for each input file. Doxygen will invoke the filter program
@@ -1358,7 +1358,7 @@ HTML_STYLESHEET =
13581358
# documentation.
13591359
# This tag requires that the tag GENERATE_HTML is set to YES.
13601360

1361-
HTML_EXTRA_STYLESHEET = @CMAKE_SOURCE_DIR@/etc/Doxyfile.css
1361+
HTML_EXTRA_STYLESHEET = @PROJECT_SOURCE_DIR@/etc/Doxyfile.css
13621362

13631363
# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
13641364
# other source files which should be copied to the HTML output directory. Note

examples/CMakeLists.txt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
include_directories( ${CMAKE_SOURCE_DIR}/src )
21
add_executable( pkcs11sign pkcs11sign.cpp )
32
set_target_properties( pkcs11sign PROPERTIES
43
LINK_LIBRARIES digidocpp

prepare_osx_build_environment.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ function xmlsec {
5757
rm -rf ${XMLSEC_DIR}
5858
tar xf ${XMLSEC_DIR}.tar.gz
5959
cd ${XMLSEC_DIR}
60-
patch -Np1 -i ../vcpkg-ports/xmlsec/xmlsec1-1.3.5.legacy.patch
60+
patch -Np1 -i ../xmlsec1-1.3.5.legacy.patch
6161
case "${ARGS}" in
6262
*iphone*) CONFIGURE="--host=aarch64-apple-darwin --enable-static --disable-shared --without-libxslt" ;;
6363
*) CONFIGURE="--disable-static --enable-shared" ;;

src/CMakeLists.txt

Lines changed: 34 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ set_env(BUILD_NUMBER 0)
1313
set(VERSION ${PROJECT_VERSION}.${BUILD_NUMBER})
1414

1515
configure_file( libdigidocpp.pc.cmake libdigidocpp.pc @ONLY )
16-
configure_file( ${CMAKE_SOURCE_DIR}/etc/digidocpp.conf.cmake digidocpp.conf )
16+
configure_file(${PROJECT_SOURCE_DIR}/etc/digidocpp.conf.cmake digidocpp.conf)
1717

1818
file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/tslcerts.h "namespace digidoc {\nstatic const std::vector<X509Cert> tslcerts {\n")
1919
foreach(TSL_CERT ${TSL_CERTS})
@@ -23,7 +23,7 @@ foreach(TSL_CERT ${TSL_CERTS})
2323
endforeach()
2424
file(APPEND ${CMAKE_CURRENT_BINARY_DIR}/tslcerts.h "};\n}")
2525

26-
set(SCHEMA_DIR ${CMAKE_SOURCE_DIR}/etc/schema)
26+
set(SCHEMA_DIR ${PROJECT_SOURCE_DIR}/etc/schema)
2727
set( SCHEMA_FILES
2828
${SCHEMA_DIR}/conf.xsd
2929
${SCHEMA_DIR}/OpenDocument_manifest_v1_2.xsd
@@ -66,7 +66,10 @@ add_library(digidocpp_util STATIC
6666
util/log.cpp
6767
)
6868

69-
target_link_libraries(digidocpp_util PUBLIC digidocpp_ver PRIVATE $<$<OR:$<PLATFORM_ID:Darwin>,$<PLATFORM_ID:iOS>>:-framework\ CoreFoundation>)
69+
target_link_libraries(digidocpp_util
70+
PUBLIC $<BUILD_INTERFACE:digidocpp_ver>
71+
PRIVATE $<$<OR:$<PLATFORM_ID:Darwin>,$<PLATFORM_ID:iOS>>:-framework\ CoreFoundation>
72+
)
7073

7174
add_library(digidocpp_tsl STATIC
7275
crypto/Connect.cpp
@@ -82,7 +85,7 @@ set_target_properties(digidocpp_util digidocpp_tsl PROPERTIES
8285
POSITION_INDEPENDENT_CODE YES
8386
)
8487

85-
target_include_directories(digidocpp_tsl PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
88+
target_include_directories(digidocpp_tsl PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
8689

8790
target_link_libraries(digidocpp_tsl
8891
digidocpp_util
@@ -252,7 +255,11 @@ if(SWIG_FOUND)
252255
endif()
253256
endif()
254257

255-
install( TARGETS digidocpp
258+
if(NOT ${BUILD_SHARED_LIBS})
259+
set(STATIC_TARGETS minizip digidocpp_tsl digidocpp_util)
260+
endif()
261+
262+
install(TARGETS digidocpp ${STATIC_TARGETS}
256263
EXPORT libdigidocppExport
257264
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
258265
ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
@@ -261,29 +268,31 @@ install( TARGETS digidocpp
261268
PUBLIC_HEADER DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}/digidocpp
262269
FRAMEWORK DESTINATION ${FRAMEWORK_DESTINATION}
263270
)
264-
if(NOT ANDROID)
265-
install(EXPORT libdigidocppExport
266-
FILE libdigidocpp-config.cmake
267-
NAMESPACE digidocpp::
268-
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/libdigidocpp
269-
)
270-
include(CMakePackageConfigHelpers)
271-
write_basic_package_version_file(
272-
"${CMAKE_CURRENT_BINARY_DIR}/libdigidocpp-config-version.cmake"
273-
VERSION ${PROJECT_VERSION}
274-
COMPATIBILITY AnyNewerVersion
275-
)
276-
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libdigidocpp-config-version.cmake"
277-
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/libdigidocpp
278-
)
279-
endif()
271+
272+
install(EXPORT libdigidocppExport
273+
FILE libdigidocpp-config.cmake
274+
NAMESPACE digidocpp::
275+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/libdigidocpp
276+
)
277+
include(CMakePackageConfigHelpers)
278+
write_basic_package_version_file(
279+
"${CMAKE_CURRENT_BINARY_DIR}/libdigidocpp-config-version.cmake"
280+
VERSION ${PROJECT_VERSION}
281+
COMPATIBILITY AnyNewerVersion
282+
)
283+
install(FILES "${CMAKE_CURRENT_BINARY_DIR}/libdigidocpp-config-version.cmake"
284+
DESTINATION ${CMAKE_INSTALL_LIBDIR}/cmake/libdigidocpp
285+
)
280286

281287
if(WIN32)
282288
list(APPEND CRYPTO_HEADER crypto/WinSigner.h)
283289
target_compile_options(digidocpp_util PUBLIC "/guard:cf")
284290
target_link_options(digidocpp PUBLIC "/guard:cf")
285291
target_link_libraries(digidocpp PRIVATE Crypt32 cryptui ncrypt)
286-
install(FILES $<TARGET_PDB_FILE:digidocpp> $<TARGET_PDB_FILE:digidoc-tool> DESTINATION ${CMAKE_INSTALL_BINDIR} OPTIONAL)
292+
install(FILES $<TARGET_PDB_FILE:digidocpp> DESTINATION ${CMAKE_INSTALL_BINDIR} OPTIONAL)
293+
if(TARGET digidoc-tool)
294+
install(FILES $<TARGET_PDB_FILE:digidoc-tool> DESTINATION ${CMAKE_INSTALL_BINDIR} OPTIONAL)
295+
endif()
287296
if(SIGNCERT)
288297
foreach(TARGET digidocpp digidoc-tool digidoc_java digidoc_csharp digidoc_python)
289298
if (TARGET ${TARGET})
@@ -310,7 +319,7 @@ if( FRAMEWORK )
310319
set_source_files_properties( ${CRYPTO_HEADER} PROPERTIES MACOSX_PACKAGE_LOCATION Headers/crypto )
311320
list(GET OPENSSL_LIBRARIES 0 LIBPATH)
312321
get_filename_component( LIBPATH ${LIBPATH} PATH )
313-
set(COPY_LIBRARIES_SCRIPT ${CMAKE_BINARY_DIR}/copy_libraries.cmake)
322+
set(COPY_LIBRARIES_SCRIPT ${PROJECT_BINARY_DIR}/copy_libraries.cmake)
314323
file(WRITE ${COPY_LIBRARIES_SCRIPT} "
315324
message(\"Copy dependencies: \$ENV{LIBRARY} \$ENV{BUNDLE_DIR}\")
316325
file(GET_RUNTIME_DEPENDENCIES LIBRARIES \$ENV{LIBRARY} RESOLVED_DEPENDENCIES_VAR OUT)
@@ -372,13 +381,13 @@ if( FRAMEWORK )
372381
add_custom_target(pkgbuild DEPENDS digidocpp $<TARGET_NAME_IF_EXISTS:digidoc-tool>
373382
COMMAND DESTDIR=install ${CMAKE_COMMAND} --install .
374383
COMMAND pkgbuild --root install "$<$<BOOL:${SIGNCERT}>:--sign;${SIGNCERT}>"
375-
${CMAKE_BINARY_DIR}/libdigidocpp_${VERSION}$ENV{VER_SUFFIX}.pkg
384+
${PROJECT_BINARY_DIR}/libdigidocpp_${VERSION}$ENV{VER_SUFFIX}.pkg
376385
COMMAND_EXPAND_LISTS
377386
)
378387
add_custom_target(zipdebug DEPENDS digidocpp $<TARGET_NAME_IF_EXISTS:digidoc-tool>
379388
COMMAND dsymutil -o libdigidocpp.dSYM $<TARGET_FILE:digidocpp>
380389
$<$<TARGET_EXISTS:digidoc-tool>:$<TARGET_FILE:digidoc-tool>>
381-
COMMAND zip -r ${CMAKE_BINARY_DIR}/libdigidocpp-dbg_${VERSION}$ENV{VER_SUFFIX}.zip libdigidocpp.dSYM
390+
COMMAND zip -r ${PROJECT_BINARY_DIR}/libdigidocpp-dbg_${VERSION}$ENV{VER_SUFFIX}.zip libdigidocpp.dSYM
382391
)
383392
else()
384393
if(NOT ${BUILD_SHARED_LIBS})

src/XMLDocument.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -342,6 +342,7 @@ struct XMLDocument: public unique_free_d<xmlFreeDoc>, public XMLNode
342342
auto result = xmlParseDocument(ctxt.get());
343343
if(result != 0 || !ctxt->wellFormed)
344344
{
345+
xmlFreeDoc(ctxt->myDoc);
345346
if(const xmlError *lastError = xmlCtxtGetLastError(ctxt.get()))
346347
THROW("%s", lastError->message);
347348
THROW("Failed to parse XML document from stream");

test/CMakeLists.txt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
set_env(TEST_FORMAT XML CACHE STRING "Test result format (XML/JUNIT)")
22
set( CMAKE_SKIP_RPATH OFF )
33
add_definitions(
4-
-DDIGIDOCPPCONF="${CMAKE_SOURCE_DIR}/etc/schema"
4+
-DDIGIDOCPPCONF="${PROJECT_SOURCE_DIR}/etc/schema"
55
-DPKCS11_MODULE="${PKCS11_MODULE}"
66
-DSIVA_URL="${SIVA_URL}"
77
)
@@ -15,7 +15,7 @@ if(WIN32)
1515
endif()
1616
add_test(NAME runtest
1717
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/unittests --build_info=YES --report_level=no --logger=${TEST_FORMAT},all,${CMAKE_CURRENT_BINARY_DIR}/libdigidocpp.xml -- ${CMAKE_CURRENT_SOURCE_DIR}/data
18-
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src
18+
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/src
1919
)
2020

2121
# Bad status tests
@@ -26,7 +26,7 @@ foreach(TEST CA-non-qa no_QCStatement no_QCSD
2626
)
2727
add_test(NAME TSLTest_${TEST}
2828
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/TSLTests -- EE_T-${TEST}.xml bad ${CMAKE_CURRENT_SOURCE_DIR}/data
29-
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src
29+
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/src
3030
)
3131
endforeach()
3232

@@ -37,7 +37,7 @@ foreach(TEST CA-withdrawn-granted-before CA-noqscd-granted-before
3737
)
3838
add_test(NAME TSLTest_${TEST}
3939
COMMAND ${CMAKE_CURRENT_BINARY_DIR}/TSLTests -- EE_T-${TEST}.xml good ${CMAKE_CURRENT_SOURCE_DIR}/data
40-
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/src
40+
WORKING_DIRECTORY ${PROJECT_BINARY_DIR}/src
4141
)
4242
endforeach()
4343

0 commit comments

Comments
 (0)