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,6 +118,14 @@ jobs: | ||
| 118 | - uses: actions/checkout@v3 | 118 | - uses: actions/checkout@v3 |
| 119 | - name: 'pikepdf' | 119 | - name: 'pikepdf' |
| 120 | run: build-scripts/test-pikepdf | 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 | Fuzzers: | 129 | Fuzzers: |
| 122 | runs-on: ubuntu-latest | 130 | runs-on: ubuntu-latest |
| 123 | needs: Prebuild | 131 | needs: Prebuild |
| @@ -139,3 +147,11 @@ jobs: | @@ -139,3 +147,11 @@ jobs: | ||
| 139 | - uses: actions/checkout@v3 | 147 | - uses: actions/checkout@v3 |
| 140 | - name: 'Unsigned Char Tests' | 148 | - name: 'Unsigned Char Tests' |
| 141 | run: build-scripts/test-unsigned-char | 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,7 +3,8 @@ cmake_minimum_required(VERSION 3.16) | ||
| 3 | 3 | ||
| 4 | # make_dist expects the version line to be on a line by itself after | 4 | # make_dist expects the version line to be on a line by itself after |
| 5 | # the project line. When updating the version, check make_dist for all | 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 | project(qpdf | 8 | project(qpdf |
| 8 | VERSION 11.7.0 | 9 | VERSION 11.7.0 |
| 9 | LANGUAGES C CXX) | 10 | LANGUAGES C CXX) |
| @@ -105,6 +106,7 @@ option(INSTALL_CMAKE_PACKAGE "Install cmake package files" ON) | @@ -105,6 +106,7 @@ option(INSTALL_CMAKE_PACKAGE "Install cmake package files" ON) | ||
| 105 | option(INSTALL_EXAMPLES "Install example files" ON) | 106 | option(INSTALL_EXAMPLES "Install example files" ON) |
| 106 | 107 | ||
| 107 | option(FUTURE "Include ABI-breaking changes CONSIDERED for the next major release" OFF) | 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 | # *** END OPTIONS *** | 111 | # *** END OPTIONS *** |
| 110 | 112 | ||
| @@ -147,8 +149,14 @@ endif() | @@ -147,8 +149,14 @@ endif() | ||
| 147 | # increment SOVERSION every time we increment the project major | 149 | # increment SOVERSION every time we increment the project major |
| 148 | # version. This works because qpdf uses semantic versioning. qpdf 10.x | 150 | # version. This works because qpdf uses semantic versioning. qpdf 10.x |
| 149 | # was libqpdf28, so start from there. | 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 | if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) | 161 | if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR}) |
| 154 | message(FATAL_ERROR " | 162 | message(FATAL_ERROR " |
| @@ -159,7 +167,11 @@ Please build with cmake in a subdirectory, e.g. | @@ -159,7 +167,11 @@ Please build with cmake in a subdirectory, e.g. | ||
| 159 | Please remove CMakeCache.txt and the CMakeFiles directories.") | 167 | Please remove CMakeCache.txt and the CMakeFiles directories.") |
| 160 | endif() | 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 | set(CMAKE_CXX_EXTENSIONS OFF) | 175 | set(CMAKE_CXX_EXTENSIONS OFF) |
| 164 | set(CMAKE_CXX_STANDARD_REQUIRED ON) | 176 | set(CMAKE_CXX_STANDARD_REQUIRED ON) |
| 165 | set(CMAKE_C_VISIBILITY_PRESET hidden) | 177 | set(CMAKE_C_VISIBILITY_PRESET hidden) |
build-scripts/build-doc
| @@ -10,7 +10,7 @@ pip3 install sphinx sphinx_rtd_theme | @@ -10,7 +10,7 @@ pip3 install sphinx sphinx_rtd_theme | ||
| 10 | cmake -S . -B build -DBUILD_DOC=1 | 10 | cmake -S . -B build -DBUILD_DOC=1 |
| 11 | cmake --build build --verbose --target doc_dist | 11 | cmake --build build --verbose --target doc_dist |
| 12 | zip -r doc.zip build/manual/doc-dist | 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 | mv build/manual/doc-dist qpdf-${version}-doc | 14 | mv build/manual/doc-dist qpdf-${version}-doc |
| 15 | mkdir distribution | 15 | mkdir distribution |
| 16 | zip -r distribution/qpdf-${version}-doc-ci.zip qpdf-${version}-doc | 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 | #!/bin/bash | 1 | #!/bin/bash |
| 2 | set -ex | 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 | sudo apt-get update | 9 | sudo apt-get update |
| 4 | sudo apt-get -y install \ | 10 | sudo apt-get -y install \ |
| 5 | build-essential cmake zlib1g-dev libjpeg-dev libgnutls28-dev | 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 | cmake --build build --verbose -j$(nproc) --target libqpdf -- -k | 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 | export QPDF_SOURCE_TREE=$PWD | 18 | export QPDF_SOURCE_TREE=$PWD |
| 9 | export QPDF_BUILD_LIBDIR=$QPDF_SOURCE_TREE/build/libqpdf | 19 | export QPDF_BUILD_LIBDIR=$QPDF_SOURCE_TREE/build/libqpdf |
| 10 | export LD_LIBRARY_PATH=$QPDF_BUILD_LIBDIR | 20 | export LD_LIBRARY_PATH=$QPDF_BUILD_LIBDIR |
include/qpdf/DLL.h
| @@ -27,7 +27,12 @@ | @@ -27,7 +27,12 @@ | ||
| 27 | #define QPDF_MAJOR_VERSION 11 | 27 | #define QPDF_MAJOR_VERSION 11 |
| 28 | #define QPDF_MINOR_VERSION 7 | 28 | #define QPDF_MINOR_VERSION 7 |
| 29 | #define QPDF_PATCH_VERSION 0 | 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 | * This file defines symbols that control the which functions, | 38 | * This file defines symbols that control the which functions, |
make_dist
| @@ -59,7 +59,6 @@ cd($tmpdir); | @@ -59,7 +59,6 @@ cd($tmpdir); | ||
| 59 | # Check versions | 59 | # Check versions |
| 60 | my $cmakeversion = get_version_from_cmake(); | 60 | my $cmakeversion = get_version_from_cmake(); |
| 61 | my $code_version = get_version_from_source(); | 61 | my $code_version = get_version_from_source(); |
| 62 | -my $doc_version = get_version_from_manual(); | ||
| 63 | 62 | ||
| 64 | my $version_error = 0; | 63 | my $version_error = 0; |
| 65 | if ($version ne $cmakeversion) | 64 | if ($version ne $cmakeversion) |
| @@ -72,11 +71,6 @@ if ($version ne $code_version) | @@ -72,11 +71,6 @@ if ($version ne $code_version) | ||
| 72 | print "$whoami: QPDF.cc version = $code_version\n"; | 71 | print "$whoami: QPDF.cc version = $code_version\n"; |
| 73 | $version_error = 1; | 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 | if ($version_error) | 74 | if ($version_error) |
| 81 | { | 75 | { |
| 82 | die "$whoami: version numbers are not consistent\n"; | 76 | die "$whoami: version numbers are not consistent\n"; |
| @@ -157,22 +151,6 @@ sub get_version_from_source | @@ -157,22 +151,6 @@ sub get_version_from_source | ||
| 157 | $code_version; | 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 | sub safe_open | 154 | sub safe_open |
| 177 | { | 155 | { |
| 178 | my $file = shift; | 156 | my $file = shift; |
manual/conf.py
| @@ -15,8 +15,12 @@ sys.path.append(os.path.abspath("./_ext")) | @@ -15,8 +15,12 @@ sys.path.append(os.path.abspath("./_ext")) | ||
| 15 | project = 'QPDF' | 15 | project = 'QPDF' |
| 16 | copyright = '2005-2023, Jay Berkenbilt' | 16 | copyright = '2005-2023, Jay Berkenbilt' |
| 17 | author = 'Jay Berkenbilt' | 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 | version = release | 24 | version = release |
| 21 | extensions = [ | 25 | extensions = [ |
| 22 | 'sphinx_rtd_theme', | 26 | 'sphinx_rtd_theme', |