Commit 1d053905852b407eef472b0ef7886d10bb650383
Committed by
GitHub
Merge pull request #1081 from jberkenbilt/future-build
Future build
Showing
8 changed files
with
70 additions
and
31 deletions
.github/workflows/main.yml
| ... | ... | @@ -118,6 +118,14 @@ jobs: |
| 118 | 118 | - uses: actions/checkout@v3 |
| 119 | 119 | - name: 'pikepdf' |
| 120 | 120 | run: build-scripts/test-pikepdf |
| 121 | + pikepdf-future: | |
| 122 | + runs-on: ubuntu-latest | |
| 123 | + # Run after pikepdf to save concurrent runners | |
| 124 | + needs: pikepdf | |
| 125 | + steps: | |
| 126 | + - uses: actions/checkout@v3 | |
| 127 | + - name: 'qpdf + pikepdf with FUTURE' | |
| 128 | + run: build-scripts/test-pikepdf future | |
| 121 | 129 | Fuzzers: |
| 122 | 130 | runs-on: ubuntu-latest |
| 123 | 131 | needs: Prebuild |
| ... | ... | @@ -139,3 +147,11 @@ jobs: |
| 139 | 147 | - uses: actions/checkout@v3 |
| 140 | 148 | - name: 'Unsigned Char Tests' |
| 141 | 149 | run: build-scripts/test-unsigned-char |
| 150 | + CxxNext: | |
| 151 | + runs-on: ubuntu-latest | |
| 152 | + # Build after Fuzzers to save concurrent runners | |
| 153 | + needs: Fuzzers | |
| 154 | + steps: | |
| 155 | + - uses: actions/checkout@v3 | |
| 156 | + - name: 'Build with Next C++ standard' | |
| 157 | + run: build-scripts/test-c++-next | ... | ... |
CMakeLists.txt
| ... | ... | @@ -3,7 +3,8 @@ cmake_minimum_required(VERSION 3.16) |
| 3 | 3 | |
| 4 | 4 | # make_dist expects the version line to be on a line by itself after |
| 5 | 5 | # the project line. When updating the version, check make_dist for all |
| 6 | -# the places it has to be updated. | |
| 6 | +# the places it has to be updated. The doc configuration and CI build | |
| 7 | +# also find the version number here. | |
| 7 | 8 | project(qpdf |
| 8 | 9 | VERSION 11.7.0 |
| 9 | 10 | LANGUAGES C CXX) |
| ... | ... | @@ -105,6 +106,7 @@ option(INSTALL_CMAKE_PACKAGE "Install cmake package files" ON) |
| 105 | 106 | option(INSTALL_EXAMPLES "Install example files" ON) |
| 106 | 107 | |
| 107 | 108 | option(FUTURE "Include ABI-breaking changes CONSIDERED for the next major release" OFF) |
| 109 | +option(CXX_NEXT "Build with next C++ standard version" OFF) | |
| 108 | 110 | |
| 109 | 111 | # *** END OPTIONS *** |
| 110 | 112 | |
| ... | ... | @@ -147,8 +149,14 @@ endif() |
| 147 | 149 | # increment SOVERSION every time we increment the project major |
| 148 | 150 | # version. This works because qpdf uses semantic versioning. qpdf 10.x |
| 149 | 151 | # was libqpdf28, so start from there. |
| 150 | -math(EXPR qpdf_SOVERSION "${PROJECT_VERSION_MAJOR} + 18") | |
| 151 | -set(qpdf_LIBVERSION ${qpdf_SOVERSION}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}) | |
| 152 | + | |
| 153 | +if(FUTURE) | |
| 154 | + math(EXPR qpdf_SOVERSION 0) | |
| 155 | + set(qpdf_LIBVERSION 0) | |
| 156 | +else() | |
| 157 | + math(EXPR qpdf_SOVERSION "${PROJECT_VERSION_MAJOR} + 18") | |
| 158 | + set(qpdf_LIBVERSION ${qpdf_SOVERSION}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH}) | |
| 159 | +endif() | |
| 152 | 160 | |
| 153 | 161 | if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) |
| 154 | 162 | message(FATAL_ERROR " |
| ... | ... | @@ -159,7 +167,11 @@ Please build with cmake in a subdirectory, e.g. |
| 159 | 167 | Please remove CMakeCache.txt and the CMakeFiles directories.") |
| 160 | 168 | endif() |
| 161 | 169 | |
| 162 | -set(CMAKE_CXX_STANDARD 17) | |
| 170 | +if(CXX_NEXT) | |
| 171 | + set(CMAKE_CXX_STANDARD 20) | |
| 172 | +else() | |
| 173 | + set(CMAKE_CXX_STANDARD 17) | |
| 174 | +endif() | |
| 163 | 175 | set(CMAKE_CXX_EXTENSIONS OFF) |
| 164 | 176 | set(CMAKE_CXX_STANDARD_REQUIRED ON) |
| 165 | 177 | set(CMAKE_C_VISIBILITY_PRESET hidden) | ... | ... |
build-scripts/build-doc
| ... | ... | @@ -10,7 +10,7 @@ pip3 install sphinx sphinx_rtd_theme |
| 10 | 10 | cmake -S . -B build -DBUILD_DOC=1 |
| 11 | 11 | cmake --build build --verbose --target doc_dist |
| 12 | 12 | zip -r doc.zip build/manual/doc-dist |
| 13 | -version=$(grep -E '^release' manual/conf.py | cut -d"'" -f 2) | |
| 13 | +version=$(grep -E '^ +VERSION [1-9]' CMakeLists.txt | awk '{print $2}') | |
| 14 | 14 | mv build/manual/doc-dist qpdf-${version}-doc |
| 15 | 15 | mkdir distribution |
| 16 | 16 | zip -r distribution/qpdf-${version}-doc-ci.zip qpdf-${version}-doc | ... | ... |
build-scripts/test-c++-next
0 → 100755
| 1 | +#!/bin/bash | |
| 2 | +set -e | |
| 3 | +sudo apt-get update | |
| 4 | +sudo apt-get -y install \ | |
| 5 | + build-essential cmake \ | |
| 6 | + zlib1g-dev libjpeg-dev libgnutls28-dev libssl-dev | |
| 7 | +cmake -S . -B build \ | |
| 8 | + -DCXX_NEXT=ON \ | |
| 9 | + -DCI_MODE=1 -DBUILD_STATIC_LIBS=0 -DCMAKE_BUILD_TYPE=Release \ | |
| 10 | + -DREQUIRE_CRYPTO_OPENSSL=1 -DREQUIRE_CRYPTO_GNUTLS=1 \ | |
| 11 | + -DENABLE_QTC=1 | |
| 12 | +cmake --build build --verbose -j$(nproc) -- -k | |
| 13 | +cd build | |
| 14 | +ctest --verbose | ... | ... |
build-scripts/test-pikepdf
| 1 | 1 | #!/bin/bash |
| 2 | 2 | set -ex |
| 3 | +cmake_extra= | |
| 4 | +future=0 | |
| 5 | +if [ "$1" = "future" ]; then | |
| 6 | + future=1 | |
| 7 | + cmake_extra=-DFUTURE=ON | |
| 8 | +fi | |
| 3 | 9 | sudo apt-get update |
| 4 | 10 | sudo apt-get -y install \ |
| 5 | 11 | build-essential cmake zlib1g-dev libjpeg-dev libgnutls28-dev |
| 6 | -cmake -S . -B build -DBUILD_STATIC_LIBS=0 -DCMAKE_BUILD_TYPE=RelWithDebInfo | |
| 12 | +cmake -S . -B build -DBUILD_STATIC_LIBS=0 -DCMAKE_BUILD_TYPE=RelWithDebInfo $cmake_extra | |
| 7 | 13 | cmake --build build --verbose -j$(nproc) --target libqpdf -- -k |
| 14 | +if [ "$future" = "1" ]; then | |
| 15 | + # Run qpdf's test suite in FUTURE mode as well | |
| 16 | + ctest --verbose | |
| 17 | +fi | |
| 8 | 18 | export QPDF_SOURCE_TREE=$PWD |
| 9 | 19 | export QPDF_BUILD_LIBDIR=$QPDF_SOURCE_TREE/build/libqpdf |
| 10 | 20 | export LD_LIBRARY_PATH=$QPDF_BUILD_LIBDIR | ... | ... |
include/qpdf/DLL.h
| ... | ... | @@ -27,7 +27,12 @@ |
| 27 | 27 | #define QPDF_MAJOR_VERSION 11 |
| 28 | 28 | #define QPDF_MINOR_VERSION 7 |
| 29 | 29 | #define QPDF_PATCH_VERSION 0 |
| 30 | -#define QPDF_VERSION "11.7.0" | |
| 30 | + | |
| 31 | +#ifdef QPDF_FUTURE | |
| 32 | +# define QPDF_VERSION "11.7.0+future" | |
| 33 | +#else | |
| 34 | +# define QPDF_VERSION "11.7.0" | |
| 35 | +#endif | |
| 31 | 36 | |
| 32 | 37 | /* |
| 33 | 38 | * This file defines symbols that control the which functions, | ... | ... |
make_dist
| ... | ... | @@ -59,7 +59,6 @@ cd($tmpdir); |
| 59 | 59 | # Check versions |
| 60 | 60 | my $cmakeversion = get_version_from_cmake(); |
| 61 | 61 | my $code_version = get_version_from_source(); |
| 62 | -my $doc_version = get_version_from_manual(); | |
| 63 | 62 | |
| 64 | 63 | my $version_error = 0; |
| 65 | 64 | if ($version ne $cmakeversion) |
| ... | ... | @@ -72,11 +71,6 @@ if ($version ne $code_version) |
| 72 | 71 | print "$whoami: QPDF.cc version = $code_version\n"; |
| 73 | 72 | $version_error = 1; |
| 74 | 73 | } |
| 75 | -if ($version ne $doc_version) | |
| 76 | -{ | |
| 77 | - print "$whoami: doc version = $doc_version\n"; | |
| 78 | - $version_error = 1; | |
| 79 | -} | |
| 80 | 74 | if ($version_error) |
| 81 | 75 | { |
| 82 | 76 | die "$whoami: version numbers are not consistent\n"; |
| ... | ... | @@ -157,22 +151,6 @@ sub get_version_from_source |
| 157 | 151 | $code_version; |
| 158 | 152 | } |
| 159 | 153 | |
| 160 | -sub get_version_from_manual | |
| 161 | -{ | |
| 162 | - my $fh = safe_open("manual/conf.py"); | |
| 163 | - my $doc_version = 'unknown'; | |
| 164 | - while (<$fh>) | |
| 165 | - { | |
| 166 | - if (m/release = '([^\']+)\'/) | |
| 167 | - { | |
| 168 | - $doc_version = $1; | |
| 169 | - last; | |
| 170 | - } | |
| 171 | - } | |
| 172 | - $fh->close(); | |
| 173 | - $doc_version; | |
| 174 | -} | |
| 175 | - | |
| 176 | 154 | sub safe_open |
| 177 | 155 | { |
| 178 | 156 | my $file = shift; | ... | ... |
manual/conf.py
| ... | ... | @@ -15,8 +15,12 @@ sys.path.append(os.path.abspath("./_ext")) |
| 15 | 15 | project = 'QPDF' |
| 16 | 16 | copyright = '2005-2023, Jay Berkenbilt' |
| 17 | 17 | author = 'Jay Berkenbilt' |
| 18 | -# make_dist and the CI build lexically find the release version from this file. | |
| 19 | -release = '11.7.0' | |
| 18 | +here = os.path.dirname(os.path.realpath(__file__)) | |
| 19 | +with open(f'{here}/../CMakeLists.txt') as f: | |
| 20 | + for line in f.readlines(): | |
| 21 | + if line.strip().startswith('VERSION '): | |
| 22 | + release = line.replace('VERSION', '').strip() | |
| 23 | + break | |
| 20 | 24 | version = release |
| 21 | 25 | extensions = [ |
| 22 | 26 | 'sphinx_rtd_theme', | ... | ... |