From 5ef6455e7d0e035102db17ba22f08c8c2fc6dbc30b55ae79fcdb0ae021525eef Mon Sep 17 00:00:00 2001 From: Philipp Thomas Date: Wed, 9 Dec 2015 12:41:37 +0000 Subject: [PATCH] Accepting request 348088 from home:psmt:branches:devel:libraries:c_c++ Make needed class members of basic_xml_grammar visible OBS-URL: https://build.opensuse.org/request/show/348088 OBS-URL: https://build.opensuse.org/package/show/devel:libraries:c_c++/boost?expand=0&rev=153 --- boost-visibility.patch | 110 +++++++++++++++++++++++ boost.changes | 6 ++ boost.spec | 199 ++++++++++++++++++++++++----------------- 3 files changed, 231 insertions(+), 84 deletions(-) create mode 100644 boost-visibility.patch diff --git a/boost-visibility.patch b/boost-visibility.patch new file mode 100644 index 0000000..5265698 --- /dev/null +++ b/boost-visibility.patch @@ -0,0 +1,110 @@ +--- + boost/archive/impl/basic_xml_grammar.hpp | 16 ++++++++-------- + libs/serialization/src/basic_xml_grammar.ipp | 14 +++++++------- + 2 files changed, 15 insertions(+), 15 deletions(-) + +Index: boost/archive/impl/basic_xml_grammar.hpp +=================================================================== +--- boost/archive/impl/basic_xml_grammar.hpp.orig 2015-05-23 20:51:06.000000000 +0200 ++++ boost/archive/impl/basic_xml_grammar.hpp 2015-12-08 15:47:11.506885556 +0100 +@@ -135,7 +135,7 @@ private: + Sch, + NameChar; + +- void init_chset(); ++ BOOST_SYMBOL_VISIBLE void init_chset(); + + bool my_parse( + IStream & is, +@@ -143,7 +143,7 @@ private: + const CharType delimiter = L'>' + ) const ; + public: +- struct return_values { ++ BOOST_SYMBOL_VISIBLE struct return_values { + StringType object_name; + StringType contents; + //class_id_type class_id; +@@ -159,12 +159,12 @@ public: + tracking_level(false) + {} + } rv; +- bool parse_start_tag(IStream & is) /*const*/; +- bool parse_end_tag(IStream & is) const; +- bool parse_string(IStream & is, StringType & s) /*const*/; +- void init(IStream & is); +- void windup(IStream & is); +- basic_xml_grammar(); ++ BOOST_SYMBOL_VISIBLE bool parse_start_tag(IStream & is) /*const*/; ++ BOOST_SYMBOL_VISIBLE bool parse_end_tag(IStream & is) const; ++ BOOST_SYMBOL_VISIBLE bool parse_string(IStream & is, StringType & s) /*const*/; ++ BOOST_SYMBOL_VISIBLE void init(IStream & is); ++ BOOST_SYMBOL_VISIBLE void windup(IStream & is); ++ BOOST_SYMBOL_VISIBLE basic_xml_grammar(); + }; + + } // namespace archive +Index: libs/serialization/src/basic_xml_grammar.ipp +=================================================================== +--- libs/serialization/src/basic_xml_grammar.ipp.orig 2015-05-23 20:51:06.000000000 +0200 ++++ libs/serialization/src/basic_xml_grammar.ipp 2015-12-08 15:41:23.620854565 +0100 +@@ -173,7 +173,7 @@ struct append_lit { + } // namespace anonymous + + template +-bool basic_xml_grammar::my_parse( ++BOOST_SYMBOL_VISIBLE bool basic_xml_grammar::my_parse( + typename basic_xml_grammar::IStream & is, + const rule_t & rule_, + CharType delimiter +@@ -211,7 +211,7 @@ bool basic_xml_grammar::my_par + } + + template +-bool basic_xml_grammar::parse_start_tag( ++BOOST_SYMBOL_VISIBLE bool basic_xml_grammar::parse_start_tag( + typename basic_xml_grammar::IStream & is + ){ + rv.class_name.resize(0); +@@ -219,12 +219,12 @@ bool basic_xml_grammar::parse_ + } + + template +-bool basic_xml_grammar::parse_end_tag(IStream & is) const { ++BOOST_SYMBOL_VISIBLE bool basic_xml_grammar::parse_end_tag(IStream & is) const { + return my_parse(is, ETag); + } + + template +-bool basic_xml_grammar::parse_string(IStream & is, StringType & s){ ++BOOST_SYMBOL_VISIBLE bool basic_xml_grammar::parse_string(IStream & is, StringType & s){ + rv.contents.resize(0); + bool result = my_parse(is, content, '<'); + // note: unget caused a problem with dinkumware. replace with +@@ -237,7 +237,7 @@ bool basic_xml_grammar::parse_ + } + + template +-basic_xml_grammar::basic_xml_grammar(){ ++BOOST_SYMBOL_VISIBLE basic_xml_grammar::basic_xml_grammar(){ + init_chset(); + + S = +@@ -434,7 +434,7 @@ basic_xml_grammar::basic_xml_g + } + + template +-void basic_xml_grammar::init(IStream & is){ ++BOOST_SYMBOL_VISIBLE void basic_xml_grammar::init(IStream & is){ + init_chset(); + if(! my_parse(is, XMLDecl)) + boost::serialization::throw_exception( +@@ -455,7 +455,7 @@ void basic_xml_grammar::init(I + } + + template +-void basic_xml_grammar::windup(IStream & is){ ++BOOST_SYMBOL_VISIBLE void basic_xml_grammar::windup(IStream & is){ + if(is.fail() || is.eof()) + return; + // uh-oh - don't throw exception from code called by a destructor ! diff --git a/boost.changes b/boost.changes index b1e24fb..a4a027e 100644 --- a/boost.changes +++ b/boost.changes @@ -1,3 +1,9 @@ +------------------------------------------------------------------- +Tue Dec 8 15:52:49 CET 2015 - pth@suse.de + +- Make members of basic_xml_grammar visible (boo#958150). +- Fix redefinition of _docdir. + ------------------------------------------------------------------- Thu Nov 26 10:57:32 UTC 2015 - schwab@suse.de diff --git a/boost.spec b/boost.spec index a242dfb..839126a 100644 --- a/boost.spec +++ b/boost.spec @@ -21,37 +21,11 @@ %define docs_version 1.56.0 %define short_version 1_56 %define lib_appendix 1_59_0 - #Only define to 1 to generate the man pages %define build_docs 0 - #Define to 0 to not package the pdf documentation %define package_pdf 1 - %define build_quickbook 1 - -# Just hardcode build_mpi to 1 as soon as openmpi builds on all -# named architectures. - -%ifarch ia64 hppa -%define build_mpi 0 -%else -%define build_mpi 1 -%endif - -# context hasn't been ported to most architectures yet -%ifarch %ix86 x86_64 %arm aarch64 mips ppc ppc64 ppc64le -%define build_context 1 -%else -%define build_context 0 -%endif - -%ifarch hppa -%define disable_long_double 1 -%else -%define disable_long_double 0 -%endif - %define boost_l1 libboost_date_time%{lib_appendix} libboost_filesystem%{lib_appendix} libboost_graph%{lib_appendix} %define boost_l2 libboost_iostreams%{lib_appendix} libboost_math%{lib_appendix} libboost_test%{lib_appendix} %define boost_l3 libboost_program_options%{lib_appendix} libboost_python%{lib_appendix} libboost_serialization%{lib_appendix} @@ -59,18 +33,34 @@ %define boost_l5 libboost_wave%{lib_appendix} libboost_regex%{lib_appendix} libboost_regex%{lib_appendix} %define boost_l6 libboost_random%{lib_appendix} libboost_chrono%{lib_appendix} libboost_locale%{lib_appendix} %define boost_l7 libboost_timer%{lib_appendix} libboost_atomic%{lib_appendix} libboost_log%{lib_appendix} libboost_container%{lib_appendix} -%if %build_context +%define most_libs %{boost_l1} %{boost_l2} %{boost_l3} %{boost_l4} %{boost_l5} %{boost_l6} %{boost_l7} %{?boost_libs_context} +%define my_docdir %{_docdir}/boost-%{version} +# Just hardcode build_mpi to 1 as soon as openmpi builds on all +# named architectures. +%ifarch ia64 hppa +%define build_mpi 0 +%else +%define build_mpi 1 +%endif +# context hasn't been ported to most architectures yet +%ifarch %ix86 x86_64 %arm aarch64 mips ppc ppc64 ppc64le +%define build_context 1 +%else +%define build_context 0 +%endif +%ifarch hppa +%define disable_long_double 1 +%else +%define disable_long_double 0 +%endif +%if %{build_context} %define boost_libs_context libboost_context%{lib_appendix} libboost_coroutine%{lib_appendix} %endif - -%define most_libs %boost_l1 %boost_l2 %boost_l3 %boost_l4 %boost_l5 %boost_l6 %boost_l7 %{?boost_libs_context} - -%if %build_mpi -%define all_libs %{most_libs} libboost_graph_parallel%lib_appendix libboost_mpi%{lib_appendix} +%if %{build_mpi} +%define all_libs %{most_libs} libboost_graph_parallel%{lib_appendix} libboost_mpi%{lib_appendix} %else %define all_libs %{most_libs} %endif - Name: boost Version: 1.59.0 Release: 0 @@ -95,6 +85,7 @@ Patch9: boost-aarch64-flags.patch Patch10: boost-disable-pch-on-aarch64.patch Patch11: boost-1.59-python-make_setter.patch Patch12: boost-1.59-test-fenv.patch +Patch13: boost-visibility.patch BuildRequires: chrpath BuildRequires: dos2unix BuildRequires: fdupes @@ -105,20 +96,18 @@ BuildRequires: libicu-devel >= 4.4 BuildRequires: python-devel #!BuildIgnore: python BuildRequires: zlib-devel -%if %build_mpi +Recommends: %{all_libs} +BuildRoot: %{_tmppath}/%{name}-%{version}-build +%if %{build_mpi} BuildRequires: openmpi-devel %endif -%if %build_docs +%if %{build_docs} BuildRequires: docbook BuildRequires: docbook-xsl-stylesheets BuildRequires: doxygen BuildRequires: libxslt-tools BuildRequires: texlive-latex %endif -BuildRoot: %{_tmppath}/%{name}-%{version}-build -Recommends: %{all_libs} - -%define _docdir %{_datadir}/doc/packages/boost-%{version} %description Boost provides free peer-reviewed portable C++ source libraries. The @@ -182,7 +171,7 @@ in HTML format. # This package contains the documentation of the boost dynamic libraries # as man pages. -%if %package_pdf +%if %{package_pdf} %package doc-pdf Summary: PDF documentation for the Boost C++ Libraries Group: Development/Libraries/C and C++ @@ -254,12 +243,12 @@ Requires: boost-license%{lib_appendix} %description -n libboost_graph%{lib_appendix} This package contains the Boost::Graph Runtime libraries. -%package -n libboost_graph_parallel%lib_appendix +%package -n libboost_graph_parallel%{lib_appendix} Summary: Boost graph::distributed runtime libraries Group: System/Libraries -Requires: boost-license%lib_appendix +Requires: boost-license%{lib_appendix} -%description -n libboost_graph_parallel%lib_appendix +%description -n libboost_graph_parallel%{lib_appendix} This package contains the boost::graph::distributed runtime libraries. %package -n libboost_iostreams%{lib_appendix} @@ -288,7 +277,7 @@ Requires: boost-license%{lib_appendix} %description -n libboost_math%{lib_appendix} This package contains the Boost::Math Runtime libraries. -%if %build_mpi +%if %{build_mpi} %package -n libboost_mpi%{lib_appendix} Summary: Boost::MPI Runtime libraries Group: System/Libraries @@ -314,7 +303,6 @@ Requires: boost-license%{lib_appendix} %description -n libboost_program_options%{lib_appendix} This package contains the Boost::ProgramOptions Runtime libraries. - %package -n libboost_python%{lib_appendix} Summary: Boost::Python Runtime Libraries Group: System/Libraries @@ -403,7 +391,7 @@ Requires: boost-license%{lib_appendix} %description -n libboost_timer%{lib_appendix} This package contains the Boost::Timer runtime library. -%if %build_quickbook +%if %{build_quickbook} %package -n quickbook Summary: Documentation tool geared towards C++ Group: Development/Tools/Doc Generators @@ -431,6 +419,7 @@ find -type f ! \( -name \*.sh -o -name \*.py -o -name \*.pl \) -exec chmod -x {} %patch10 -p1 %patch11 -p1 %patch12 -p1 +%patch13 #stupid build machinery copies .orig files find . -name \*.orig -exec rm {} + @@ -439,7 +428,7 @@ find . -name \*.orig -exec rm {} + find . -type f -exec chmod u+w {} + # Create shared build instructions -cat << \EOF >.build +cat << \EOF >.build # Now build it J_P=%{jobs} J_G=$(getconf _NPROCESSORS_ONLN) @@ -469,12 +458,12 @@ export LONG_DOUBLE_FLAGS="--disable-long-double" %endif BJAM_CONFIG="-d2 -j$JOBS -sICU_PATH=%{_prefix}" PYTHON_VERSION=$(python -c 'import sys; print sys.version[:3]') -PYTHON_FLAGS="--with-python-root=/usr --with-python-version=$PYTHON_VERSION" +PYTHON_FLAGS="--with-python-root=%{_prefix} --with-python-version=$PYTHON_VERSION" export REGEX_FLAGS="--with-icu" -export EXPAT_INCLUDE=/usr/include EXPAT_LIBPATH=%{_libdir} +export EXPAT_INCLUDE=%{_includedir} EXPAT_LIBPATH=%{_libdir} export PYTHON_FLAGS LIBRARIES_FLAGS=--with-libraries=all -%if !%build_context +%if !%{build_context} # coroutine/coroutine2 depend on context LIBRARIES_FLAGS+=" --without-libraries=context,coroutine,coroutine2" %endif @@ -484,7 +473,7 @@ EOF . ./.build # Set PATH, MANPATH and LD_LIBRARY_PATH for mpi -. /var/mpi-selector/data/$(rpm --qf "%{NAME}-%{VERSION}" -q openmpi).sh +. %{_localstatedir}/mpi-selector/data/$(rpm --qf "%{NAME}-%{VERSION}" -q openmpi).sh # use supplied bootstrap.sh instead of mucking with old bjam # see also: https://svn.boost.org/trac/boost/ticket/9304 @@ -501,20 +490,20 @@ local RPM_OPT_FLAGS = [ os.environ RPM_OPT_FLAGS ] ; using gcc : : : \$(RPM_OPT_FLAGS) ; EOF -%if %build_docs +%if %{build_docs} cat << EOF >>user-config.jam using xsltproc ; using boostbook - : /usr/share/xml/docbook/stylesheet/nwalsh/current - : /usr/share/xml/docbook/schema/dtd/4.2 + : %{_datadir}/xml/docbook/stylesheet/nwalsh/current + : %{_datadir}/xml/docbook/schema/dtd/4.2 ; using doxygen ; EOF %endif -%if %build_mpi +%if %{build_mpi} cat << EOF >>user-config.jam using mpi ; EOF @@ -523,13 +512,13 @@ EOF # perform the compilation ./b2 -d+2 -q --prefix=%{_prefix} --libdir=%{_libdir} --user-config=./user-config.jam -%if %build_quickbook +%if %{build_quickbook} pushd tools/quickbook ../../b2 --user-config=../../user-config.jam --v2 dist-bin popd %endif -%if %build_docs +%if %{build_docs} cd doc ../b2 --user-config=../user-config.jam --v2 man %endif @@ -540,7 +529,7 @@ cd doc . ./.build # Set PATH, MANPATH and LD_LIBRARY_PATH for mpi -. /var/mpi-selector/data/$(rpm --qf "%{NAME}-%{VERSION}" -q openmpi).sh +. %{_localstatedir}/mpi-selector/data/$(rpm --qf "%{NAME}-%{VERSION}" -q openmpi).sh ./b2 install \ --prefix=%{buildroot}%{_prefix} --exec-prefix=%{buildroot}%{_bindir} \ @@ -551,11 +540,11 @@ cd doc # see https://bugzilla.redhat.com/show_bug.cgi?id=801534 for details rm -f %{buildroot}%{_libdir}/mpi.so -mkdir -p %{buildroot}%{_docdir} +mkdir -p %{buildroot}%{my_docdir} pushd %{buildroot}%{_libdir} blibs=$(find . -name \*.so.%{version}) -echo $blibs | xargs chrpath -d +echo $blibs | xargs chrpath -d for lib in ${blibs}; do BASE=$(basename ${lib} .so.%{version}) @@ -585,85 +574,127 @@ dos2unix libs/ptr_container/doc/tutorial_example.html \ libs/graph/doc/lengauer_tarjan_dominator.htm find . -name \*.htm\* -o -name \*.gif -o -name \*.css -o -name \*.jpg -o -name \*.png -o -name \*.ico | \ - tar --files-from=%{S:4} -cf - --files-from=- | tar -C %{buildroot}%{_docdir} -xf - -rm -rf %{buildroot}%{_docdir}/boost -ln -s /usr/include/boost %{buildroot}%{_docdir} -ln -s ../LICENSE_1_0.txt %{buildroot}%{_docdir}/libs -#Copy the news file. -#cp %%{S:5} %%{buildroot}%%{_docdir} -#only for documentation, doesn't need to be executable -find %{buildroot}%{_docdir} -name \*.py -exec chmod -x {} + + tar --files-from=%{SOURCE4} -cf - --files-from=- | tar -C %{buildroot}%{my_docdir} -xf - +rm -rf %{buildroot}%{my_docdir}/boost +ln -s %{_includedir}/boost %{buildroot}%{my_docdir} +ln -s ../LICENSE_1_0.txt %{buildroot}%{my_docdir}/libs +find %{buildroot}%{my_docdir} -name \*.py -exec chmod -x {} + chmod -x ../%{name}_%{short_version}_pdf/*.pdf rm -f %{buildroot}%{_libdir}/*.a #symlink dupes -%fdupes %buildroot +%fdupes %{buildroot} -%if %build_quickbook +%if %{build_quickbook} mkdir -p %{buildroot}%{_bindir} install -m 0755 dist/bin/quickbook %{buildroot}%{_bindir}/quickbook %endif %post -n libboost_atomic%{lib_appendix} -p /sbin/ldconfig + %post -n libboost_container%{lib_appendix} -p /sbin/ldconfig + %post -n libboost_context%{lib_appendix} -p /sbin/ldconfig + %post -n libboost_coroutine%{lib_appendix} -p /sbin/ldconfig + %post -n libboost_date_time%{lib_appendix} -p /sbin/ldconfig + %post -n libboost_filesystem%{lib_appendix} -p /sbin/ldconfig + %post -n libboost_iostreams%{lib_appendix} -p /sbin/ldconfig + %post -n libboost_log%{lib_appendix} -p /sbin/ldconfig + %post -n libboost_test%{lib_appendix} -p /sbin/ldconfig + %post -n libboost_program_options%{lib_appendix} -p /sbin/ldconfig + %post -n libboost_python%{lib_appendix} -p /sbin/ldconfig + %post -n libboost_regex%{lib_appendix} -p /sbin/ldconfig + %post -n libboost_serialization%{lib_appendix} -p /sbin/ldconfig + %post -n libboost_signals%{lib_appendix} -p /sbin/ldconfig + %post -n libboost_thread%{lib_appendix} -p /sbin/ldconfig -%post -n libboost_math%{lib_appendix} -p /sbin/ldconfig -%if %build_mpi -%post -n libboost_mpi%{lib_appendix} -p /sbin/ldconfig + +%post -n libboost_math%{lib_appendix} -p /sbin/ldconfig +%if %{build_mpi} +%post -n libboost_mpi%{lib_appendix} -p /sbin/ldconfig %endif + %post -n libboost_graph%{lib_appendix} -p /sbin/ldconfig + %post -n libboost_system%{lib_appendix} -p /sbin/ldconfig + %post -n libboost_wave%{lib_appendix} -p /sbin/ldconfig + %post -n libboost_random%{lib_appendix} -p /sbin/ldconfig + %post -n libboost_chrono%{lib_appendix} -p /sbin/ldconfig + %post -n libboost_locale%{lib_appendix} -p /sbin/ldconfig + %post -n libboost_timer%{lib_appendix} -p /sbin/ldconfig + %post -n libboost_graph_parallel%{lib_appendix} -p /sbin/ldconfig %postun -n libboost_atomic%{lib_appendix} -p /sbin/ldconfig + %postun -n libboost_container%{lib_appendix} -p /sbin/ldconfig + %postun -n libboost_context%{lib_appendix} -p /sbin/ldconfig + %postun -n libboost_coroutine%{lib_appendix} -p /sbin/ldconfig + %postun -n libboost_date_time%{lib_appendix} -p /sbin/ldconfig + %postun -n libboost_filesystem%{lib_appendix} -p /sbin/ldconfig + %postun -n libboost_iostreams%{lib_appendix} -p /sbin/ldconfig + %postun -n libboost_log%{lib_appendix} -p /sbin/ldconfig + %postun -n libboost_test%{lib_appendix} -p /sbin/ldconfig + %postun -n libboost_program_options%{lib_appendix} -p /sbin/ldconfig + %postun -n libboost_python%{lib_appendix} -p /sbin/ldconfig + %postun -n libboost_regex%{lib_appendix} -p /sbin/ldconfig + %postun -n libboost_serialization%{lib_appendix} -p /sbin/ldconfig + %postun -n libboost_signals%{lib_appendix} -p /sbin/ldconfig + %postun -n libboost_thread%{lib_appendix} -p /sbin/ldconfig + %postun -n libboost_math%{lib_appendix} -p /sbin/ldconfig -%if %build_mpi +%if %{build_mpi} %postun -n libboost_mpi%{lib_appendix} -p /sbin/ldconfig %endif + %postun -n libboost_graph%{lib_appendix} -p /sbin/ldconfig + %postun -n libboost_system%{lib_appendix} -p /sbin/ldconfig + %postun -n libboost_wave%{lib_appendix} -p /sbin/ldconfig + %postun -n libboost_random%{lib_appendix} -p /sbin/ldconfig + %postun -n libboost_chrono%{lib_appendix} -p /sbin/ldconfig + %postun -n libboost_locale%{lib_appendix} -p /sbin/ldconfig + %postun -n libboost_timer%{lib_appendix} -p /sbin/ldconfig + %postun -n libboost_graph_parallel%{lib_appendix} -p /sbin/ldconfig %files -n boost-license%{lib_appendix} %defattr(-, root, root, -) -%dir %{_docdir} -#%%doc %%{_docdir}/NEWS -%doc %{_docdir}/LICENSE_1_0.txt +%dir %{my_docdir} +%doc %{my_docdir}/LICENSE_1_0.txt %files -n libboost_atomic%{lib_appendix} %defattr(-, root, root, -) @@ -673,7 +704,7 @@ install -m 0755 dist/bin/quickbook %{buildroot}%{_bindir}/quickbook %defattr(-, root, root, -) %{_libdir}/libboost_container*.so.* -%if %build_context +%if %{build_context} %files -n libboost_context%{lib_appendix} %defattr(-, root, root, -) %{_libdir}/libboost_context*.so.* @@ -695,9 +726,9 @@ install -m 0755 dist/bin/quickbook %{buildroot}%{_bindir}/quickbook %defattr(-, root, root, -) %{_libdir}/libboost_graph.so.* -%files -n libboost_graph_parallel%lib_appendix +%files -n libboost_graph_parallel%{lib_appendix} %defattr(-,root,root) -%_libdir/libboost_graph_parallel.so.* +%{_libdir}/libboost_graph_parallel.so.* %files -n libboost_iostreams%{lib_appendix} %defattr(-, root, root, -) @@ -711,7 +742,7 @@ install -m 0755 dist/bin/quickbook %{buildroot}%{_bindir}/quickbook %defattr(-, root, root, -) %{_libdir}/libboost_math_*.so.* -%if %build_mpi +%if %{build_mpi} %files -n libboost_mpi%{lib_appendix} %defattr(-, root, root, -) %{_libdir}/libboost_mpi*.so.* @@ -778,8 +809,8 @@ install -m 0755 dist/bin/quickbook %{buildroot}%{_bindir}/quickbook %files doc-html %defattr(-, root, root, -) -%doc %{_docdir}/* -%exclude %{_docdir}/LICENSE_1_0.txt +%doc %{my_docdir}/* +%exclude %{my_docdir}/LICENSE_1_0.txt # %%files doc-man # %%defattr(644, root, root, -) @@ -787,7 +818,7 @@ install -m 0755 dist/bin/quickbook %{buildroot}%{_bindir}/quickbook # %%doc %%{_mandir}/man7/*.7.gz # %%doc %%{_mandir}/man9/*.9.gz -%if %package_pdf +%if %{package_pdf} %files doc-pdf %defattr(-, root, root, -) %doc ../%{name}_%{short_version}_pdf/*.pdf