From 65011ad2f7b53a88ed51047c26d860546e8c8871 Mon Sep 17 00:00:00 2001 From: Sebastian Pipping Date: Mon, 10 Feb 2020 18:33:48 +0100 Subject: [PATCH] CMake: Expose ${EXPAT_TARGET} to parent scope --- expat/CMakeLists.txt | 50 +++++++++++++++++++++++++++----------------- expat/Changes | 2 ++ expat/configure.ac | 4 ++-- expat/expat.pc.in | 4 ++-- 4 files changed, 37 insertions(+), 23 deletions(-) diff --git a/expat/CMakeLists.txt b/expat/CMakeLists.txt index cd32a299..752135d3 100644 --- a/expat/CMakeLists.txt +++ b/expat/CMakeLists.txt @@ -19,6 +19,18 @@ set(PACKAGE_TARNAME "${PACKAGE_NAME}") include(CMakePackageConfigHelpers) include(GNUInstallDirs) +# +# Detect use by means of add_subdirectory +# +get_directory_property(_EXPAT_PARENT_DIRECTORY PARENT_DIRECTORY) +if(_EXPAT_PARENT_DIRECTORY) + # NOTE: We cannot set(_EXPAT_PARENT_SCOPE "PARENT_SCOPE") because + # that would end up as set(_EXPAT_PARENT_SCOPE "" PARENT_SCOPE) + string(CONCAT _EXPAT_PARENT_SCOPE "PARENT" "_" "SCOPE") +else() + set(_EXPAT_PARENT_SCOPE "") +endif() + # # Configuration defaults # @@ -277,18 +289,18 @@ endif(EXPAT_SHARED_LIBS) # Avoid colliding with Expat.dll of Perl's XML::Parser::Expat if(WIN32 AND NOT MINGW) - set(_EXPAT_TARGET libexpat) # CMAKE_*_POSTFIX applies, see above + set(EXPAT_TARGET libexpat ${_EXPAT_PARENT_SCOPE}) # CMAKE_*_POSTFIX applies, see above else() if(_EXPAT_UNICODE) - set(_EXPAT_TARGET expatw) + set(EXPAT_TARGET expatw ${_EXPAT_PARENT_SCOPE}) else() - set(_EXPAT_TARGET expat) + set(EXPAT_TARGET expat ${_EXPAT_PARENT_SCOPE}) endif() endif() -add_library(${_EXPAT_TARGET} ${_SHARED} ${expat_SRCS}) +add_library(${EXPAT_TARGET} ${_SHARED} ${expat_SRCS}) if(EXPAT_WITH_LIBBSD) - target_link_libraries(${_EXPAT_TARGET} ${LIB_BSD}) + target_link_libraries(${EXPAT_TARGET} ${LIB_BSD}) endif() set(LIBCURRENT 7) # sync @@ -297,19 +309,19 @@ set(LIBAGE 6) # configure.ac! math(EXPR LIBCURRENT_MINUS_AGE "${LIBCURRENT} - ${LIBAGE}") if(NOT WIN32) - set_property(TARGET ${_EXPAT_TARGET} PROPERTY VERSION ${LIBCURRENT_MINUS_AGE}.${LIBAGE}.${LIBREVISION}) - set_property(TARGET ${_EXPAT_TARGET} PROPERTY SOVERSION ${LIBCURRENT_MINUS_AGE}) - set_property(TARGET ${_EXPAT_TARGET} PROPERTY NO_SONAME ${NO_SONAME}) + set_property(TARGET ${EXPAT_TARGET} PROPERTY VERSION ${LIBCURRENT_MINUS_AGE}.${LIBAGE}.${LIBREVISION}) + set_property(TARGET ${EXPAT_TARGET} PROPERTY SOVERSION ${LIBCURRENT_MINUS_AGE}) + set_property(TARGET ${EXPAT_TARGET} PROPERTY NO_SONAME ${NO_SONAME}) endif(NOT WIN32) -target_include_directories(${_EXPAT_TARGET} +target_include_directories(${EXPAT_TARGET} INTERFACE $ $ $ ) -expat_install(TARGETS ${_EXPAT_TARGET} EXPORT expat +expat_install(TARGETS ${EXPAT_TARGET} EXPORT expat RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}) @@ -324,8 +336,8 @@ if(NOT MSVC) set(exec_prefix "\${prefix}") set(libdir "\${exec_prefix}/${CMAKE_INSTALL_LIBDIR}") set(includedir "\${prefix}/${CMAKE_INSTALL_INCLUDEDIR}") - configure_file(expat.pc.in ${CMAKE_CURRENT_BINARY_DIR}/${_EXPAT_TARGET}.pc @ONLY) - expat_install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${_EXPAT_TARGET}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) + configure_file(expat.pc.in ${CMAKE_CURRENT_BINARY_DIR}/${EXPAT_TARGET}.pc @ONLY) + expat_install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${EXPAT_TARGET}.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) endif() # @@ -341,7 +353,7 @@ if(EXPAT_BUILD_TOOLS) add_executable(xmlwf ${xmlwf_SRCS}) set_property(TARGET xmlwf PROPERTY RUNTIME_OUTPUT_DIRECTORY xmlwf) - target_link_libraries(xmlwf ${_EXPAT_TARGET}) + target_link_libraries(xmlwf ${EXPAT_TARGET}) expat_install(TARGETS xmlwf DESTINATION ${CMAKE_INSTALL_BINDIR}) if(MINGW AND _EXPAT_UNICODE_WCHAR_T) @@ -351,7 +363,7 @@ if(EXPAT_BUILD_TOOLS) if(EXPAT_BUILD_DOCS) file(MAKE_DIRECTORY ${PROJECT_BINARY_DIR}/doc) - add_custom_command(TARGET ${_EXPAT_TARGET} PRE_BUILD COMMAND "${DOCBOOK_TO_MAN}" "${PROJECT_SOURCE_DIR}/doc/xmlwf.xml" && mv "XMLWF.1" "${PROJECT_BINARY_DIR}/doc/xmlwf.1") + add_custom_command(TARGET ${EXPAT_TARGET} PRE_BUILD COMMAND "${DOCBOOK_TO_MAN}" "${PROJECT_SOURCE_DIR}/doc/xmlwf.xml" && mv "XMLWF.1" "${PROJECT_BINARY_DIR}/doc/xmlwf.1") expat_install(FILES "${PROJECT_BINARY_DIR}/doc/xmlwf.1" DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) elseif(EXISTS ${PROJECT_SOURCE_DIR}/doc/xmlwf.1) expat_install(FILES "${PROJECT_SOURCE_DIR}/doc/xmlwf.1" DESTINATION ${CMAKE_INSTALL_MANDIR}/man1) @@ -364,11 +376,11 @@ endif() if(EXPAT_BUILD_EXAMPLES) add_executable(elements examples/elements.c) set_property(TARGET elements PROPERTY RUNTIME_OUTPUT_DIRECTORY examples) - target_link_libraries(elements ${_EXPAT_TARGET}) + target_link_libraries(elements ${EXPAT_TARGET}) add_executable(outline examples/outline.c) set_property(TARGET outline PROPERTY RUNTIME_OUTPUT_DIRECTORY examples) - target_link_libraries(outline ${_EXPAT_TARGET}) + target_link_libraries(outline ${EXPAT_TARGET}) endif(EXPAT_BUILD_EXAMPLES) # @@ -403,12 +415,12 @@ if(EXPAT_BUILD_TESTS) add_executable(runtests tests/runtests.c ${test_SRCS}) set_property(TARGET runtests PROPERTY RUNTIME_OUTPUT_DIRECTORY tests) - target_link_libraries(runtests ${_EXPAT_TARGET}) + target_link_libraries(runtests ${EXPAT_TARGET}) expat_add_test(runtests $) add_executable(runtestspp tests/runtestspp.cpp ${test_SRCS}) set_property(TARGET runtestspp PROPERTY RUNTIME_OUTPUT_DIRECTORY tests) - target_link_libraries(runtestspp ${_EXPAT_TARGET}) + target_link_libraries(runtestspp ${EXPAT_TARGET}) expat_add_test(runtestspp $) endif(EXPAT_BUILD_TESTS) @@ -553,7 +565,7 @@ write_basic_package_version_file( ) export( TARGETS - ${_EXPAT_TARGET} + ${EXPAT_TARGET} FILE cmake/expat-targets.cmake # not going to be installed ) diff --git a/expat/Changes b/expat/Changes index 45595e8e..b74a1f1c 100644 --- a/expat/Changes +++ b/expat/Changes @@ -11,6 +11,8 @@ Release x.x.x xxx xxxxxxxxx xx xxxx #360 CMake: Install pre-compiled shipped xmlwf.1 manpage in case of -DEXPAT_BUILD_DOCS=OFF #375 #380 CMake: Fix use of Expat by means of add_subdirectory + CMake: Expose ${EXPAT_TARGET}(="libexpat"/"expatw"/"expat") + to parent scope for use by means of add_subdirectory #354 Fix testsuite for -DEXPAT_DTD=OFF and -DEXPAT_NS=OFF, each #354 #355 #356 Address compiler warnings diff --git a/expat/configure.ac b/expat/configure.ac index 49e55def..96fbe00c 100644 --- a/expat/configure.ac +++ b/expat/configure.ac @@ -307,8 +307,8 @@ AS_IF([test "x${DOCBOOK_TO_MAN}" != x -a "x$with_docbook" != xno], AM_CONDITIONAL(WITH_DOCBOOK, [test "x${DOCBOOK_TO_MAN}" != x]) -dnl updating _EXPAT_TARGET variable to effect the package name in expat.pc file (issue #361) -AC_SUBST(_EXPAT_TARGET, ["$PACKAGE_NAME"]) +dnl updating EXPAT_TARGET variable to effect the package name in expat.pc file (issue #361) +AC_SUBST(EXPAT_TARGET, ["$PACKAGE_NAME"]) AC_CONFIG_FILES([Makefile] [expat.pc] diff --git a/expat/expat.pc.in b/expat/expat.pc.in index d4b62433..a89cdd82 100644 --- a/expat/expat.pc.in +++ b/expat/expat.pc.in @@ -3,9 +3,9 @@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ -Name: @_EXPAT_TARGET@ +Name: @EXPAT_TARGET@ Version: @PACKAGE_VERSION@ Description: expat XML parser URL: http://www.libexpat.org -Libs: -L${libdir} -l@_EXPAT_TARGET@ +Libs: -L${libdir} -l@EXPAT_TARGET@ Cflags: -I${includedir}