diff --git a/Fix-pool-debugging-output-so-that-creation-events-ar.patch b/Fix-pool-debugging-output-so-that-creation-events-ar.patch new file mode 100644 index 0000000..04554e5 --- /dev/null +++ b/Fix-pool-debugging-output-so-that-creation-events-ar.patch @@ -0,0 +1,103 @@ +From 6df2b8ec805230db90677b54afe2d122cf0bd8c8 Mon Sep 17 00:00:00 2001 +From: Rainer Jung +Date: Wed, 17 Jul 2019 11:43:58 +0000 +Subject: [PATCH 05/10] Fix pool debugging output so that creation events are + always emitted before allocation events and subpool destruction events are + emitted on pool clear/destroy for proper accounting. + +Backport of r1675967 from trunk resp. r1863202 from 1.7.x. + + +git-svn-id: https://svn.apache.org/repos/asf/apr/apr/branches/1.6.x@1863211 13f79535-47bb-0310-9956-ffa450edef68 +--- + CHANGES | 4 ++++ + memory/unix/apr_pools.c | 27 +++++++++++++-------------- + 2 files changed, 17 insertions(+), 14 deletions(-) + +diff --git a/memory/unix/apr_pools.c b/memory/unix/apr_pools.c +index 17fadb42a..9fdd00129 100644 +--- a/memory/unix/apr_pools.c ++++ b/memory/unix/apr_pools.c +@@ -1886,10 +1886,6 @@ APR_DECLARE(void) apr_pool_clear_debug(apr_pool_t *pool, + + apr_pool_check_lifetime(pool); + +-#if (APR_POOL_DEBUG & APR_POOL_DEBUG_VERBOSE) +- apr_pool_log_event(pool, "CLEAR", file_line, 1); +-#endif /* (APR_POOL_DEBUG & APR_POOL_DEBUG_VERBOSE) */ +- + #if APR_HAS_THREADS + if (pool->parent != NULL) + mutex = pool->parent->mutex; +@@ -1905,6 +1901,10 @@ APR_DECLARE(void) apr_pool_clear_debug(apr_pool_t *pool, + + pool_clear_debug(pool, file_line); + ++#if (APR_POOL_DEBUG & APR_POOL_DEBUG_VERBOSE) ++ apr_pool_log_event(pool, "CLEAR", file_line, 1); ++#endif /* (APR_POOL_DEBUG & APR_POOL_DEBUG_VERBOSE) */ ++ + #if APR_HAS_THREADS + /* If we had our own mutex, it will have been destroyed by + * the registered cleanups. Recreate the mutex. Unlock +@@ -1929,12 +1929,12 @@ static void pool_destroy_debug(apr_pool_t *pool, const char *file_line) + { + apr_pool_check_lifetime(pool); + ++ pool_clear_debug(pool, file_line); ++ + #if (APR_POOL_DEBUG & APR_POOL_DEBUG_VERBOSE) + apr_pool_log_event(pool, "DESTROY", file_line, 1); + #endif /* (APR_POOL_DEBUG & APR_POOL_DEBUG_VERBOSE) */ + +- pool_clear_debug(pool, file_line); +- + /* Remove the pool from the parents child list */ + if (pool->parent) { + #if APR_HAS_THREADS +@@ -2043,6 +2043,9 @@ APR_DECLARE(apr_status_t) apr_pool_create_ex_debug(apr_pool_t **newpool, + pool->owner_proc = (apr_os_proc_t)getnlmhandle(); + #endif /* defined(NETWARE) */ + ++#if (APR_POOL_DEBUG & APR_POOL_DEBUG_VERBOSE) ++ apr_pool_log_event(pool, "CREATE", file_line, 1); ++#endif /* (APR_POOL_DEBUG & APR_POOL_DEBUG_VERBOSE) */ + + if (parent == NULL || parent->allocator != allocator) { + #if APR_HAS_THREADS +@@ -2072,10 +2075,6 @@ APR_DECLARE(apr_status_t) apr_pool_create_ex_debug(apr_pool_t **newpool, + + *newpool = pool; + +-#if (APR_POOL_DEBUG & APR_POOL_DEBUG_VERBOSE) +- apr_pool_log_event(pool, "CREATE", file_line, 1); +-#endif /* (APR_POOL_DEBUG & APR_POOL_DEBUG_VERBOSE) */ +- + return APR_SUCCESS; + } + +@@ -2129,6 +2128,10 @@ APR_DECLARE(apr_status_t) apr_pool_create_unmanaged_ex_debug(apr_pool_t **newpoo + } + pool->allocator = pool_allocator; + ++#if (APR_POOL_DEBUG & APR_POOL_DEBUG_VERBOSE) ++ apr_pool_log_event(pool, "CREATEU", file_line, 1); ++#endif /* (APR_POOL_DEBUG & APR_POOL_DEBUG_VERBOSE) */ ++ + if (pool->allocator != allocator) { + #if APR_HAS_THREADS + apr_status_t rv; +@@ -2151,10 +2154,6 @@ APR_DECLARE(apr_status_t) apr_pool_create_unmanaged_ex_debug(apr_pool_t **newpoo + + *newpool = pool; + +-#if (APR_POOL_DEBUG & APR_POOL_DEBUG_VERBOSE) +- apr_pool_log_event(pool, "CREATEU", file_line, 1); +-#endif /* (APR_POOL_DEBUG & APR_POOL_DEBUG_VERBOSE) */ +- + return APR_SUCCESS; + } + +-- +2.19.1 + diff --git a/Merge-r1834494-from-trunk.patch b/Merge-r1834494-from-trunk.patch new file mode 100644 index 0000000..f13e679 --- /dev/null +++ b/Merge-r1834494-from-trunk.patch @@ -0,0 +1,170 @@ +This is an upstream patch from: http://svn.apache.org/viewvc?view=revision&revision=1834495 + +--- 1.7.x/buildconf 2018/06/27 11:41:30 1834494 ++++ 1.7.x/buildconf 2018/06/27 11:49:33 1834495 +@@ -112,8 +112,10 @@ + # Remove autoconf 2.5x's cache directory + rm -rf autom4te*.cache + ++PYTHON=${PYTHON-`build/PrintPath python3 python2 python`} ++ + echo "buildconf: generating 'make' outputs ..." +-build/gen-build.py $verbose make ++${PYTHON} build/gen-build.py $verbose make + + # Create RPM Spec file + if [ -f `which cut` ]; then +--- 1.7.x/build/gen-build.py 2018/06/27 11:41:30 1834494 ++++ 1.7.x/build/gen-build.py 2018/06/27 11:49:33 1834495 +@@ -10,7 +10,10 @@ + + + import os +-import ConfigParser ++try: ++ import configparser ++except ImportError: ++ import ConfigParser as configparser + import getopt + import string + import glob +@@ -36,7 +39,7 @@ + + + def main(): +- parser = ConfigParser.ConfigParser() ++ parser = configparser.ConfigParser() + parser.read('build.conf') + + if parser.has_option('options', 'dsp'): +@@ -62,7 +65,7 @@ + # write out the platform-independent files + files = get_files(parser.get('options', 'paths')) + objects, dirs = write_objects(f, legal_deps, h_deps, files) +- f.write('\nOBJECTS_all = %s\n\n' % string.join(objects)) ++ f.write('\nOBJECTS_all = %s\n\n' % " ".join(objects)) + + # for each platform and each subdirectory holding platform-specific files, + # write out their compilation rules, and an OBJECT__ symbol. +@@ -86,11 +89,11 @@ + inherit_files[-1] = inherit_files[-1][:-2] + '.lo' + # replace the \\'s with /'s + inherit_line = '/'.join(inherit_files) +- if not inherit_parent.has_key(inherit_files[0]): ++ if inherit_files[0] not in inherit_parent: + inherit_parent[inherit_files[0]] = [] + inherit_parent[inherit_files[0]].append(inherit_line) + +- for subdir in string.split(parser.get('options', 'platform_dirs')): ++ for subdir in parser.get('options', 'platform_dirs').split(): + path = '%s/%s' % (subdir, platform) + if not os.path.exists(path): + # this subdir doesn't have a subdir for this platform, so we'll +@@ -106,7 +109,7 @@ + files = get_files(path + '/*.c') + objects, _unused = write_objects(f, legal_deps, h_deps, files) + +- if inherit_parent.has_key(subdir): ++ if subdir in inherit_parent: + objects = objects + inherit_parent[subdir] + + symname = 'OBJECTS_%s_%s' % (subdir, platform) +@@ -114,7 +117,7 @@ + objects.sort() + + # and write the symbol for the whole group +- f.write('\n%s = %s\n\n' % (symname, string.join(objects))) ++ f.write('\n%s = %s\n\n' % (symname, " ".join(objects))) + + # and include that symbol in the group + group.append('$(%s)' % symname) +@@ -122,18 +125,18 @@ + group.sort() + + # write out a symbol which contains the necessary files +- f.write('OBJECTS_%s = %s\n\n' % (platform, string.join(group))) ++ f.write('OBJECTS_%s = %s\n\n' % (platform, " ".join(group))) + +- f.write('HEADERS = $(top_srcdir)/%s\n\n' % string.join(headers, ' $(top_srcdir)/')) +- f.write('SOURCE_DIRS = %s $(EXTRA_SOURCE_DIRS)\n\n' % string.join(dirs.keys())) ++ f.write('HEADERS = $(top_srcdir)/%s\n\n' % ' $(top_srcdir)/'.join(headers)) ++ f.write('SOURCE_DIRS = %s $(EXTRA_SOURCE_DIRS)\n\n' % " ".join(dirs.keys())) + + if parser.has_option('options', 'modules'): + modules = parser.get('options', 'modules') + +- for mod in string.split(modules): ++ for mod in modules.split(): + files = get_files(parser.get(mod, 'paths')) + objects, _unused = write_objects(f, legal_deps, h_deps, files) +- flat_objects = string.join(objects) ++ flat_objects = " ".join(objects) + f.write('OBJECTS_%s = %s\n' % (mod, flat_objects)) + + if parser.has_option(mod, 'target'): +@@ -153,9 +156,9 @@ + d = os.path.dirname(d) + + # Sort so 'foo' is before 'foo/bar' +- keys = alldirs.keys() ++ keys = list(alldirs.keys()) + keys.sort() +- f.write('BUILD_DIRS = %s\n\n' % string.join(keys)) ++ f.write('BUILD_DIRS = %s\n\n' % " ".join(keys)) + + f.write('.make.dirs: $(srcdir)/build-outputs.mk\n' \ + '\t@for d in $(BUILD_DIRS); do test -d $$d || mkdir $$d; done\n' \ +@@ -177,12 +180,12 @@ + + # what headers does this file include, along with the implied headers + deps = extract_deps(file, legal_deps) +- for hdr in deps.keys(): ++ for hdr in list(deps.keys()): + deps.update(h_deps.get(hdr, {})) + +- vals = deps.values() ++ vals = list(deps.values()) + vals.sort() +- f.write('%s: %s .make.dirs %s\n' % (obj, file, string.join(vals))) ++ f.write('%s: %s .make.dirs %s\n' % (obj, file, " ".join(vals))) + + objects.sort() + +@@ -210,7 +213,7 @@ + for hdr, deps in header_deps.items(): + # print hdr, deps + start = len(deps) +- for dep in deps.keys(): ++ for dep in list(deps.keys()): + deps.update(header_deps.get(dep, {})) + if len(deps) != start: + altered = 1 +@@ -220,7 +223,7 @@ + + def get_files(patterns): + files = [ ] +- for pat in string.split(patterns): ++ for pat in patterns.split(): + files.extend(map(clean_path, glob.glob(pat))) + files.sort() + return files +--- 1.7.x/build/buildcheck.sh 2018/06/27 11:41:30 1834494 ++++ 1.7.x/build/buildcheck.sh 2018/06/27 11:49:33 1834495 +@@ -4,14 +4,14 @@ + res=0 + + # any python +-python=`build/PrintPath python` ++python=${PYTHON-`build/PrintPath python3 python2 python`} + if test -z "$python"; then + echo "buildconf: python not found." + echo " You need python installed" + echo " to build APR from SVN." + res=1 + else +- py_version=`python -c 'import sys; print sys.version' 2>&1|sed 's/ .*//;q'` ++ py_version=`$python -c 'import sys; print(sys.version)' 2>&1|sed 's/ .*//;q'` + echo "buildconf: python version $py_version (ok)" + fi + + diff --git a/Pool-debugging-fixes.patch b/Pool-debugging-fixes.patch new file mode 100644 index 0000000..2d77e8e --- /dev/null +++ b/Pool-debugging-fixes.patch @@ -0,0 +1,44 @@ +From 39611db20eea29a751162c43f0df61b05f48b00f Mon Sep 17 00:00:00 2001 +From: Rainer Jung +Date: Wed, 17 Jul 2019 11:42:15 +0000 +Subject: [PATCH 03/10] Pool debugging fixes + +- avoid using a destroyed mutex in apr_pool_clear() +- if we create a sub-pool, we don't need to own the pool. + +Backport of r1481186 from trunk resp. r1863200 from 1.7.x. + + +git-svn-id: https://svn.apache.org/repos/asf/apr/apr/branches/1.6.x@1863209 13f79535-47bb-0310-9956-ffa450edef68 +--- + memory/unix/apr_pools.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/memory/unix/apr_pools.c b/memory/unix/apr_pools.c +index 614919ede..cd6b17811 100644 +--- a/memory/unix/apr_pools.c ++++ b/memory/unix/apr_pools.c +@@ -1909,6 +1909,11 @@ APR_DECLARE(void) apr_pool_clear_debug(apr_pool_t *pool, + * the mutex we obtained above. + */ + if (mutex != pool->mutex) { ++ /* ++ * Prevent apr_palloc() in apr_thread_mutex_create() from trying to ++ * use the destroyed mutex. ++ */ ++ pool->mutex = NULL; + (void)apr_thread_mutex_create(&pool->mutex, + APR_THREAD_MUTEX_NESTED, pool); + +@@ -1985,7 +1990,7 @@ APR_DECLARE(apr_status_t) apr_pool_create_ex_debug(apr_pool_t **newpool, + parent = global_pool; + } + else { +- apr_pool_check_integrity(parent); ++ apr_pool_check_lifetime(parent); + + if (!allocator) + allocator = parent->allocator; +-- +2.19.1 + diff --git a/Split-apr_pool_check_integrity-into-two-parts.patch b/Split-apr_pool_check_integrity-into-two-parts.patch new file mode 100644 index 0000000..f1bdb7e --- /dev/null +++ b/Split-apr_pool_check_integrity-into-two-parts.patch @@ -0,0 +1,87 @@ +From 68710d39de65fa4f16c890110342a249f60a66fa Mon Sep 17 00:00:00 2001 +From: Rainer Jung +Date: Wed, 17 Jul 2019 11:41:21 +0000 +Subject: [PATCH 02/10] Split apr_pool_check_integrity() into two parts + +Run the pool owner check part only after pre-cleanups have been run, in +order to give them a chance to kill of any threads that may still be +accessing the pool. + +Backport of r1460184 from trunk resp. r1863199 from 1.7.x. + + +git-svn-id: https://svn.apache.org/repos/asf/apr/apr/branches/1.6.x@1863208 13f79535-47bb-0310-9956-ffa450edef68 +--- + memory/unix/apr_pools.c | 20 +++++++++++++++++--- + 1 file changed, 17 insertions(+), 3 deletions(-) + +diff --git a/memory/unix/apr_pools.c b/memory/unix/apr_pools.c +index 3361f7a7d..614919ede 100644 +--- a/memory/unix/apr_pools.c ++++ b/memory/unix/apr_pools.c +@@ -1594,7 +1594,7 @@ static int apr_pool_is_child_of(apr_pool_t *pool, apr_pool_t *parent) + } + #endif /* (APR_POOL_DEBUG & APR_POOL_DEBUG_LIFETIME) */ + +-static void apr_pool_check_integrity(apr_pool_t *pool) ++static void apr_pool_check_lifetime(apr_pool_t *pool) + { + /* Rule of thumb: use of the global pool is always + * ok, since the only user is apr_pools.c. Unless +@@ -1618,7 +1618,10 @@ static void apr_pool_check_integrity(apr_pool_t *pool) + abort(); + } + #endif /* (APR_POOL_DEBUG & APR_POOL_DEBUG_LIFETIME) */ ++} + ++static void apr_pool_check_owner(apr_pool_t *pool) ++{ + #if (APR_POOL_DEBUG & APR_POOL_DEBUG_OWNER) + #if APR_HAS_THREADS + if (!apr_os_thread_equal(pool->owner, apr_os_thread_current())) { +@@ -1632,6 +1635,11 @@ static void apr_pool_check_integrity(apr_pool_t *pool) + #endif /* (APR_POOL_DEBUG & APR_POOL_DEBUG_OWNER) */ + } + ++static void apr_pool_check_integrity(apr_pool_t *pool) ++{ ++ apr_pool_check_lifetime(pool); ++ apr_pool_check_owner(pool); ++} + + /* + * Initialization (debug) +@@ -1820,6 +1828,12 @@ static void pool_clear_debug(apr_pool_t *pool, const char *file_line) + run_cleanups(&pool->pre_cleanups); + pool->pre_cleanups = NULL; + ++ /* ++ * Now that we have given the pre cleanups the chance to kill of any ++ * threads using the pool, the owner must be correct. ++ */ ++ apr_pool_check_owner(pool); ++ + /* Destroy the subpools. The subpools will detach themselves from + * this pool thus this loop is safe and easy. + */ +@@ -1868,7 +1882,7 @@ APR_DECLARE(void) apr_pool_clear_debug(apr_pool_t *pool, + apr_thread_mutex_t *mutex = NULL; + #endif + +- apr_pool_check_integrity(pool); ++ apr_pool_check_lifetime(pool); + + #if (APR_POOL_DEBUG & APR_POOL_DEBUG_VERBOSE) + apr_pool_log_event(pool, "CLEAR", file_line, 1); +@@ -1906,7 +1920,7 @@ APR_DECLARE(void) apr_pool_clear_debug(apr_pool_t *pool, + + static void pool_destroy_debug(apr_pool_t *pool, const char *file_line) + { +- apr_pool_check_integrity(pool); ++ apr_pool_check_lifetime(pool); + + #if (APR_POOL_DEBUG & APR_POOL_DEBUG_VERBOSE) + apr_pool_log_event(pool, "DESTROY", file_line, 1); +-- +2.19.1 + diff --git a/apr-1.2.2-libdir.patch b/apr-1.2.2-libdir.patch new file mode 100644 index 0000000..aeb7ee1 --- /dev/null +++ b/apr-1.2.2-libdir.patch @@ -0,0 +1,18 @@ + +- avoid adding %{_libdir} to --link-ld output + +--- apr-1.2.2/apr-config.in.libdir ++++ apr-1.2.2/apr-config.in +@@ -181,8 +181,10 @@ + ;; + --link-ld) + if test "$location" = "installed"; then +- ### avoid using -L if libdir is a "standard" location like /usr/lib +- flags="$flags -L$libdir -l${APR_LIBNAME}" ++ if test "$prefix" != "/usr"; then ++ flags="$flags -L$libdir" ++ fi ++ flags="$flags -l${APR_LIBNAME}" + else + ### this surely can't work since the library is in .libs? + flags="$flags -L$APR_BUILD_DIR -l${APR_LIBNAME}" diff --git a/apr-1.2.7-pkgconf.patch b/apr-1.2.7-pkgconf.patch new file mode 100644 index 0000000..bd6d65c --- /dev/null +++ b/apr-1.2.7-pkgconf.patch @@ -0,0 +1,56 @@ + +This is a fugly hack to make apr-1-config libdir-agnostic, by using +pkg-config to determine the libdir setting. pkg-config will +magically determine the appropriate libdir setting. + +This allows apr-devel.i386 and apr-devel.x86_64 to be +installed in parallel. + +--- apr-1.2.7/Makefile.in.pkgconf ++++ apr-1.2.7/Makefile.in +@@ -60,7 +60,7 @@ + + # Create apr-config script suitable for the install tree + apr-config.out: $(APR_CONFIG) +- sed 's,^\(location=\).*$$,\1installed,' < $(APR_CONFIG) > $@ ++ sed 's,^\(location=\).*$$,\1installed,;s,^\(APR_.*_DIR\)=.*,\1="$${libdir}/build",' < $(APR_CONFIG) > $@ + + # Create apr_rules.mk suitable for the install tree + build/apr_rules.out: build/apr_rules.mk +--- apr-1.2.7/apr.pc.in.pkgconf ++++ apr-1.2.7/apr.pc.in +@@ -3,9 +3,10 @@ + libdir=@libdir@ + APR_MAJOR_VERSION=@APR_MAJOR_VERSION@ + includedir=@includedir@ ++CPPFLAGS=@EXTRA_CPPFLAGS@ + + Name: APR + Description: The Apache Portable Runtime library + Version: @APR_DOTTED_VERSION@ + Libs: -L${libdir} -l@APR_LIBNAME@ @EXTRA_LIBS@ +-Cflags: @EXTRA_CPPFLAGS@ @EXTRA_CFLAGS@ -I${includedir} ++Cflags: ${CPPFLAGS} @EXTRA_CFLAGS@ -I${includedir} +--- apr-1.2.7/apr-config.in.pkgconf ++++ apr-1.2.7/apr-config.in +@@ -24,16 +24,17 @@ + prefix="@prefix@" + exec_prefix="@exec_prefix@" + bindir="@bindir@" +-libdir="@libdir@" + datarootdir="@datadir@" + datadir="@datadir@" +-installbuilddir="@installbuilddir@" + includedir="@includedir@" + ++libdir=`pkg-config --variable=libdir apr-@APR_MAJOR_VERSION@` ++installbuilddir="${libdir}/apr-@APR_MAJOR_VERSION@/build" ++ + CC="@CC@" + CPP="@CPP@" + SHELL="@SHELL@" +-CPPFLAGS="@EXTRA_CPPFLAGS@" ++CPPFLAGS=`pkg-config --variable=CPPFLAGS apr-@APR_MAJOR_VERSION@` + CFLAGS="@EXTRA_CFLAGS@" + LDFLAGS="@EXTRA_LDFLAGS@" + LIBS="@EXTRA_LIBS@" diff --git a/apr-1.6.5.tar.bz2 b/apr-1.6.5.tar.bz2 new file mode 100644 index 0000000..a2601cb Binary files /dev/null and b/apr-1.6.5.tar.bz2 differ diff --git a/apr-wrapper.h b/apr-wrapper.h new file mode 100644 index 0000000..2641f76 --- /dev/null +++ b/apr-wrapper.h @@ -0,0 +1,22 @@ +/* This file is here to prevent a file conflict on multiarch systems. A + * conflict will occur because apr.h has arch-specific definitions. + * + * DO NOT INCLUDE THE NEW FILE DIRECTLY -- ALWAYS INCLUDE THIS ONE INSTEAD. */ + +#if defined(__i386__) +#include "apr-i386.h" +#elif defined(__ia64__) +#include "apr-ia64.h" +#elif defined(__powerpc64__) +#include "apr-ppc64.h" +#elif defined(__powerpc__) +#include "apr-ppc.h" +#elif defined(__s390x__) +#include "apr-s390x.h" +#elif defined(__s390__) +#include "apr-s390.h" +#elif defined(__x86_64__) +#include "apr-x86_64.h" +#else +#error "This apr-devel package does not work your architecture?" +#endif diff --git a/apr.spec b/apr.spec new file mode 100644 index 0000000..025e3ae --- /dev/null +++ b/apr.spec @@ -0,0 +1,113 @@ +%define aprver 1 + +Name: apr +Version: 1.6.5 +Release: 4 +Summary: Apache Portable Runtime. +License: ASL 2.0 and BSD with advertising and ISC and BSD +URL: http://apr.apache.org +Source0: http://www.apache.org/dist/%{name}/%{name}-%{version}.tar.bz2 +Source1: apr-wrapper.h + +Patch0: apr-1.2.2-libdir.patch +Patch1: apr-1.2.7-pkgconf.patch + +Patch6000: Merge-r1834494-from-trunk.patch +Patch6001: test-testlock.c-test_timeoutcond-Increase-fudge-fact.patch +Patch6002: Split-apr_pool_check_integrity-into-two-parts.patch +Patch6003: Pool-debugging-fixes.patch +Patch6004: Fix-pool-debugging-output-so-that-creation-events-ar.patch + +BuildRequires: gcc autoconf libtool libuuid-devel python3 lksctp-tools-devel + +%description +The mission of the Apache Portable Runtime (APR) project is to create and maintain software libraries +that provide a predictable and consistent interface to underlying platform-specific implementations. +The primary goal is to provide an API to which software developers may code and be assured of +predictable if not identical behaviour regardless of the platform on which their software is built, +relieving them of the need to code special-case conditions to work around or take advantage of +platform-specific deficiencies or features. + +%package devel +Summary: Apache Portable Runtime development kit. +Requires: %{name} = %{version}-%{release} pkgconfig + +%description devel +Apache Portable Runtime development kit. + +%package_help + +%prep +%autosetup -n %{name}-%{version} -p1 + +%build +./buildconf +export ac_cv_search_shm_open=no +%configure \ + --includedir=%{_includedir}/%{name}-%{aprver} --with-installbuilddir=%{_libdir}/%{name}-%{aprver}/build \ + --with-devrandom=/dev/urandom +make + +%install +rm -rf %{buildroot} +%make_install +install -D -m 0644 build/find_apr.m4 %{buildroot}/%{_datadir}/aclocal/find_apr.m4 +sed -ri '/^dependency_libs/{s,-l(uuid|crypt) ,,g}' \ + %{buildroot}%{_libdir}/libapr*.la +sed -ri '/^LIBS=/{s,-l(uuid|crypt) ,,g;s/ */ /g}' \ + %{buildroot}%{_bindir}/%{name}-%{aprver}-config +sed -ri '/^Libs/{s,-l(uuid|crypt) ,,g}' \ + %{buildroot}%{_libdir}/pkgconfig/%{name}-%{aprver}.pc +%ifarch %{multilib_arches} +install -D -m 0644 %{buildroot}%{_includedir}/%{name}-%{aprver}/apr.h \ + %{buildroot}%{_includedir}/%{name}-%{aprver}/%{name}-%{_arch}.h +install -D -m 0644 %{SOURCE1} %{buildroot}%{_includedir}/%{name}-%{aprver}/apr.h +%endif +rm -rf %{buildroot}%{_libdir}/apr.exp +rm -rf %{buildroot}%{_libdir}/libapr-*.a + +%check +make check +%ldconfig_scriptlets + +%pre + +%preun + +%post + +%postun + +%files +%doc CHANGES NOTICE +%license LICENSE +%{_libdir}/libapr-%{aprver}.so.* + +%files devel +%{_bindir}/%{name}-%{aprver}-config +%{_libdir}/libapr-%{aprver}.*a +%{_libdir}/libapr-%{aprver}.so +%{_libdir}/pkgconfig/*.pc +%dir %{_libdir}/%{name}-%{aprver} +%dir %{_libdir}/%{name}-%{aprver}/build +%{_libdir}/%{name}-%{aprver}/build/* +%dir %{_includedir}/%{name}-%{aprver} +%{_includedir}/%{name}-%{aprver}/*.h +%{_datadir}/aclocal/*.m4 + +%files help +%doc docs/APRDesign.html docs/canonical_filenames.html +%doc docs/incomplete_types docs/non_apr_programs + +%changelog +* Tue Dec 17 2019 openEuler Buildteam - 1.6.5-4 +- quality enhancement synchronization github patch + +* Tue Oct 22 2019 openEuler Buildteam - 1.6.5-3 +- optimize spec file. + +* Sat Sep 28 2019 openEuler Buildteam - 1.6.5-2 +- Package rebuild. + +* Wed Sep 04 2019 openEuler Buildteam - 1.6.5-1 +- Package init. diff --git a/test-testlock.c-test_timeoutcond-Increase-fudge-fact.patch b/test-testlock.c-test_timeoutcond-Increase-fudge-fact.patch new file mode 100644 index 0000000..bddb2f7 --- /dev/null +++ b/test-testlock.c-test_timeoutcond-Increase-fudge-fact.patch @@ -0,0 +1,28 @@ +From d6d48ddd4c3a5ef04749475ed75d26330a3e0dc6 Mon Sep 17 00:00:00 2001 +From: Joe Orton +Date: Tue, 19 Sep 2017 16:38:40 +0000 +Subject: [PATCH] * test/testlock.c (test_timeoutcond): Increase fudge factor + in checking timeout precision; 100ms failed regularly in Fedora builds, + 500ms has Never Failed(TM). + +git-svn-id: https://svn.apache.org/repos/asf/apr/apr/trunk@1808910 13f79535-47bb-0310-9956-ffa450edef68 +--- + test/testlock.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/test/testlock.c b/test/testlock.c +index 40da791b7..cd48768ca 100644 +--- a/test/testlock.c ++++ b/test/testlock.c +@@ -334,7 +334,7 @@ static void test_timeoutcond(abts_case *tc, void *data) + continue; + } + ABTS_INT_EQUAL(tc, 1, APR_STATUS_IS_TIMEUP(s)); +- ABTS_ASSERT(tc, "Timer returned too late", end - begin - timeout < 100000); ++ ABTS_ASSERT(tc, "Timer returned too late", end - begin - timeout < 500000); + break; + } + ABTS_ASSERT(tc, "Too many retries", i < MAX_RETRY); +-- +2.19.1 +