Commit 1d053905852b407eef472b0ef7886d10bb650383

Authored by Jay Berkenbilt
Committed by GitHub
2 parents 290742b0 762f2321

Merge pull request #1081 from jberkenbilt/future-build

Future build
.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(&quot;./_ext&quot;)) @@ -15,8 +15,12 @@ sys.path.append(os.path.abspath(&quot;./_ext&quot;))
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',