From 592a6017bc08d453a9a58c97a8f568105b31bdbb Mon Sep 17 00:00:00 2001 From: Mike Taves Date: Sun, 9 May 2021 00:09:56 +1200 Subject: CMake: "make dist" workalike via CPack (#2690) --- CMakeLists.txt | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++ cmake/Makefile.am | 1 + cmake/ProjReadme.cmake | 28 +++++++++++++++++++++++++ travis/install.sh | 14 ++++++++++++- 4 files changed, 99 insertions(+), 1 deletion(-) create mode 100644 cmake/ProjReadme.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index 67a8d2e1..bb1fdf93 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -333,3 +333,60 @@ if(UNIX OR MINGW) ${CMAKE_CURRENT_BINARY_DIR}/proj.pc DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig) endif() + +################################################################################ +# "make dist" workalike +################################################################################ + +set(CPACK_SOURCE_GENERATOR "TGZ;ZIP") +set(CPACK_SOURCE_PACKAGE_FILE_NAME "proj-${PROJ_VERSION}") +set(CPACK_PACKAGE_VENDOR "OSGeo") +set(CPACK_PACKAGE_VERSION_MAJOR ${PROJ_VERSION_MAJOR}) +set(CPACK_PACKAGE_VERSION_MINOR ${PROJ_VERSION_MINOR}) +set(CPACK_PACKAGE_VERSION_PATCH ${PROJ_VERSION_PATCH}) +set(CPACK_VERBATIM_VARIABLES TRUE) +set(CPACK_SOURCE_IGNORE_FILES + /\\..* # any file/directory starting with . + /.*\\.yml + /.*\\.gz + /.*\\.zip + /.*build.*/ + \\.deps + /autogen\\.sh + /autom4te\\.cache + /CODE_OF_CONDUCT.md + /CONTRIBUTING.md + /Dockerfile + /docs/ + /Doxyfile + /examples/ + /HOWTO-RELEASE + /m4/lt* + /m4/libtool* + /media/ + /schemas/ + /scripts/ + /test/fuzzers/ + /test/gigs/.*gie\\.failing + /test/postinstall/ + /travis/ + ${PROJECT_BINARY_DIR} +) + +include(CPack) + +# Simplify README.md to README +add_custom_target(README + COMMAND ${CMAKE_COMMAND} + -D PROJ_SOURCE_DIR=${PROJ_SOURCE_DIR} + -P ${PROJ_SOURCE_DIR}/cmake/ProjReadme.cmake +) + +get_property(_is_multi_config_generator GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) +if(NOT _is_multi_config_generator) + add_custom_target(dist + COMMAND ${CMAKE_MAKE_PROGRAM} package_source + DEPENDS README + ) + message(STATUS "PROJ: Configured 'dist' target") +endif() diff --git a/cmake/Makefile.am b/cmake/Makefile.am index 1ecd784e..cdad1ff8 100644 --- a/cmake/Makefile.am +++ b/cmake/Makefile.am @@ -4,6 +4,7 @@ EXTRA_DIST = CMakeLists.txt \ proj_config.cmake.in \ ProjConfig.cmake \ ProjMac.cmake \ + ProjReadme.cmake \ ProjTest.cmake \ ProjVersion.cmake \ policies.cmake \ diff --git a/cmake/ProjReadme.cmake b/cmake/ProjReadme.cmake new file mode 100644 index 00000000..7071a381 --- /dev/null +++ b/cmake/ProjReadme.cmake @@ -0,0 +1,28 @@ +# +# CMake script to modify README.md to create simpler README file +# +# This is equivalent to: fgrep -v "[![" +# + +set(SourceFile "${PROJ_SOURCE_DIR}/README.md") +set(DestFile "${PROJ_SOURCE_DIR}/README") + +# Below is based on https://stackoverflow.com/a/30227627 + +file(READ ${SourceFile} Contents) + +# Set the variable "Esc" to the ASCII value 27 as a special escape value +string(ASCII 27 Esc) + +# Turn the contents into a list of strings, each ending with Esc +string(REGEX REPLACE "\n" "${Esc};" ContentsAsList "${Contents}") + +unset(ModifiedContents) +foreach(Line ${ContentsAsList}) + if(NOT "${Line}" MATCHES "\\[!\\[") + # Swap the appended Esc character back out in favour of a line feed + string(REGEX REPLACE "${Esc}" "\n" Line ${Line}) + set(ModifiedContents "${ModifiedContents}${Line}") + endif() +endforeach() +file(WRITE ${DestFile} ${ModifiedContents}) diff --git a/travis/install.sh b/travis/install.sh index ea271d92..a07e7784 100755 --- a/travis/install.sh +++ b/travis/install.sh @@ -28,7 +28,19 @@ make dist-all >/dev/null TAR_FILENAME=`ls *.tar.gz` TAR_DIRECTORY=`basename $TAR_FILENAME .tar.gz` tar xvzf $TAR_FILENAME -cd $TAR_DIRECTORY +cd .. + +# compare with CMake's dist +mkdir build_cmake +cd build_cmake +cmake -DBUILD_TESTING=OFF .. +make dist +tar xzf $TAR_FILENAME +cd .. +diff -qr build_autoconf/$TAR_DIRECTORY build_cmake/$TAR_DIRECTORY || true + +# continue build from autoconf +cd build_autoconf/$TAR_DIRECTORY # There's a nasty #define CS in a Solaris system header. Avoid being caught about that again CXXFLAGS="-DCS=do_not_use_CS_for_solaris_compat $CXXFLAGS" -- cgit v1.2.3