diff --git a/configure b/configure index adb9a955..ec418321 100755 --- a/configure +++ b/configure @@ -4,12 +4,6 @@ VERSION=0.19 # Ensure that we do not inherit these from env -STRLCPY= -STRLCAT= -VASPRINTF= -HUMANIZE_NUMBER= -LIBFETCH= -PROPLIB= OS= BUILD= HOST= @@ -330,21 +324,38 @@ int main(void) { } EOF if $XCC _$func.c -o _$func 2>/dev/null; then - VASPRINTF=yes + echo yes. echo "CPPFLAGS += -DHAVE_VASPRINTF" >> $CONFIG_MK else - VASPRINTF=no + echo no. echo "COMPAT_SRCS+= compat/vasprintf.o" >>$CONFIG_MK echo "#include \"compat.h\"" >>$CONFIG_H fi -echo "$VASPRINTF." rm -f _$func.c _$func +# Check for posix_fadvise(2) +func=posix_fadvise +printf "Checking for $func() ... " +cat <_$func.c +#include +int main(void) { + posix_fadvise(0, 0, 0, POSIX_FADV_NORMAL); + return 0; +} +EOF +if $XCC _$func.c -o _$func 2>/dev/null; then + echo "yes." + echo "CPPFLAGS += -DHAVE_POSIX_FADVISE" >>$CONFIG_MK +else + echo "no." +fi +rm -f _$func _$func.c + # # Check for strcasestr(). # func=strcasestr -printf "Checking for $func() ..." +printf "Checking for $func() ... " cat <_$func.c #define _GNU_SOURCE #include @@ -356,14 +367,13 @@ int main(void) { } EOF if $XCC _$func.c -o _$func 2>/dev/null; then - STRCASESTR=yes + echo yes. echo "CPPFLAGS += -DHAVE_STRCASESTR" >>$CONFIG_MK else - STRCASESTR=no + echo no. echo "COMPAT_SRCS += compat/strcasestr.o" >>$CONFIG_MK echo "#include \"compat.h\"" >>$CONFIG_H fi -echo "$STRCASESTR." rm -f _$func _$func.c # @@ -381,14 +391,13 @@ int main(void) { } EOF if $XCC _$func.c -o _$func 2>/dev/null; then - STRLCPY=yes + echo yes. echo "CPPFLAGS += -DHAVE_STRLCPY" >> $CONFIG_MK else - STRLCPY=no + echo no. echo "COMPAT_SRCS += compat/strlcpy.o" >>$CONFIG_MK echo "#include \"compat.h\"" >>$CONFIG_H fi -echo "$STRLCPY." rm -f _$func.c _$func # @@ -405,14 +414,13 @@ int main(void) { } EOF if $XCC _$func.c -o _$func 2>/dev/null; then - STRLCAT=yes + echo yes. echo "CPPFLAGS += -DHAVE_STRLCAT" >>$CONFIG_MK else - STRLCAT=no + echo no. echo "COMPAT_SRCS += compat/strlcat.o" >>$CONFIG_MK echo "#include \"compat.h\"" >>$CONFIG_H fi -echo "$STRLCAT." rm -f _$func.c _$func # @@ -429,14 +437,13 @@ int main(void) { } EOF if $XCC -lutil _$func.c -o _$func 2>/dev/null; then - HUMANIZE_NUMBER=yes + echo yes. echo "CPPFLAGS+= -DHAVE_HUMANIZE_NUMBER" >>$CONFIG_MK else - HUMANIZE_NUMBER=no + echo no. echo "COMPAT_SRCS+= compat/humanize_number.o" >>$CONFIG_MK echo "#include \"compat.h\"" >>$CONFIG_H fi -echo "$HUMANIZE_NUMBER." rm -f _$func.c _$func # @@ -452,13 +459,12 @@ int main(void) { } EOF if $XCC _$func.c -o _$func 2>/dev/null; then - RBTREE=yes + echo yes. echo "CPPFLAGS += -DHAVE_RBTREE" >>$CONFIG_MK else - RBTREE=no + echo no. echo "LIBPROP_OBJS += portableproplib/rb.o" >>$CONFIG_MK fi -echo "$RBTREE." rm -f _$func.c _$func # @@ -474,16 +480,15 @@ int main(void) { } EOF if $XCC -lfetch _$func.c -o _$func 2>/dev/null; then - LIBFETCH=yes + echo yes. echo "USE_EXTERNAL_LIBFETCH = 1" >>$CONFIG_MK echo "LDFLAGS += -lfetch" >>$CONFIG_MK echo "STATIC_LIBS = \$(TOPDIR)/lib/libxbps.a -lfetch" >>$CONFIG_MK else - LIBFETCH=no + echo no. echo "CPPFLAGS += -I\$(TOPDIR)/lib/fetch" >>$CONFIG_MK echo "STATIC_LIBS = \$(TOPDIR)/lib/libxbps.a" >>$CONFIG_MK fi -echo "$LIBFETCH." rm -f _$func.c _$func # @@ -500,17 +505,16 @@ int main(void) { } EOF if $XCC -lprop _$func.c -o _$func 2>/dev/null; then - PROPLIB=yes + echo yes. echo "USE_EXTERNAL_PROPLIB = 1" >>$CONFIG_MK echo "LDFLAGS += -lz -lpthread -lprop" >>$CONFIG_MK echo "STATIC_LIBS += -lprop -lz -lpthread" >>$CONFIG_MK else - PROPLIB=no + echo no. echo "CPPFLAGS += -I\$(TOPDIR)/lib/portableproplib" >>$CONFIG_MK echo "LDFLAGS += -lpthread" >>$CONFIG_MK echo "STATIC_LIBS += -lpthread" >>$CONFIG_MK fi -echo "$PROPLIB." rm -f _$func.c _$func # @@ -555,13 +559,12 @@ int main(void) { } EOF if $XCC -lz _$func.c -o _$func 2>/dev/null; then - ZLIB=yes + echo yes. echo "LDFLAGS += -lz" >>$CONFIG_MK echo "STATIC_LIBS += -lz" >>$CONFIG_MK else ZLIB=no fi -echo "$ZLIB." rm -f _$func.c _$func if [ "$ZLIB" = "no" ]; then echo "Failed to link with your system's zlib, can't continue..." @@ -665,12 +668,11 @@ int main(void) { } EOF if $XCC -lcrypto _$func.c -o _$func 2>/dev/null; then - CRYPTO_SHA256=yes + echo yes. echo "LDFLAGS += -lcrypto" >>$CONFIG_MK else CRYPTO_SHA256=no fi - echo "$ZLIB." rm -f _$func.c _$func if [ "$CRYPTO_SHA256" = "no" ]; then echo "Failed to link with your system's OpenSSL library, can't continue..." diff --git a/lib/package_unpack.c b/lib/package_unpack.c index 0c4517c9..f8fd0625 100644 --- a/lib/package_unpack.c +++ b/lib/package_unpack.c @@ -23,6 +23,10 @@ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + #include #include #include @@ -581,6 +585,7 @@ int HIDDEN xbps_unpack_binary_pkg(struct xbps_handle *xhp, prop_dictionary_t pkg_repod) { struct archive *ar = NULL; + struct stat pkg_stat; const char *pkgname, *version, *pkgver; char *bpkg; int pkg_fd, rv = 0; @@ -627,8 +632,11 @@ xbps_unpack_binary_pkg(struct xbps_handle *xhp, prop_dictionary_t pkg_repod) } archive_read_open_fd(ar, pkg_fd, ARCHIVE_READ_BLOCKSIZE); free(bpkg); - posix_fadvise(pkg_fd, 0, 0, POSIX_FADV_SEQUENTIAL); +#ifdef HAVE_POSIX_FADVISE + fstat(pkg_fd, &pkg_stat); + posix_fadvise(pkg_fd, 0, pkg_stat.st_size, POSIX_FADV_SEQUENTIAL); +#endif /* * Extract archive files. */ @@ -639,8 +647,9 @@ xbps_unpack_binary_pkg(struct xbps_handle *xhp, prop_dictionary_t pkg_repod) pkgver, strerror(rv)); goto out; } - posix_fadvise(pkg_fd, 0, 0, POSIX_FADV_DONTNEED); - +#ifdef HAVE_POSIX_FADVISE + posix_fadvise(pkg_fd, 0, pkg_stat.st_size, POSIX_FADV_DONTNEED); +#endif /* * Set package state to unpacked. */