doc_DATA =
lib_LTLIBRARIES = liblzma.la
-liblzma_la_SOURCES =
+liblzma_la_SOURCES = $(top_srcdir)/src/common/tuklib_physmem.c
liblzma_la_CPPFLAGS = \
-I$(top_srcdir)/src/liblzma/api \
-I$(top_srcdir)/src/liblzma/common \
-I$(top_srcdir)/src/liblzma/subblock \
-I$(top_srcdir)/src/liblzma/delta \
-I$(top_srcdir)/src/liblzma/simple \
- -I$(top_srcdir)/src/common
+ -I$(top_srcdir)/src/common \
+ -DTUKLIB_SYMBOL_PREFIX=lzma_
liblzma_la_LDFLAGS = -no-undefined -version-info 0:0:0
include $(srcdir)/common/Makefile.inc
lzma/container.h \
lzma/delta.h \
lzma/filter.h \
+ lzma/hardware.h \
lzma/index.h \
lzma/index_hash.h \
lzma/lzma.h \
#include "lzma/index.h"
#include "lzma/index_hash.h"
+/* Hardware information */
+#include "lzma/hardware.h"
+
/*
* All subheaders included. Undefine LZMA_H_INTERNAL to prevent applications
* re-including the subheaders.
--- /dev/null
+/**
+ * \file lzma/hardware.h
+ * \brief Hardware information
+ *
+ * Since liblzma can consume a lot of system resources, it also provides
+ * ways to limit the resource usage. Applications linking against liblzma
+ * need to do the actual decisions how much resources to let liblzma to use.
+ * To ease making these decisions, liblzma provides functions to find out
+ * the relevant capabilities of the underlaying hardware. Currently there
+ * is only a function to find out the amount of RAM, but in the future there
+ * will be also a function to detect how many concurrent threads the system
+ * can run.
+ *
+ * \note On some operating systems, these function may temporarily
+ * load a shared library or open file descriptor(s) to find out
+ * the requested hardware information. Unless the application
+ * assumes that specific file descriptors are not touched by
+ * other threads, this should have no effect on thread safety.
+ * Possible operations involving file descriptors will restart
+ * the syscalls if they return EINTR.
+ */
+
+/*
+ * Author: Lasse Collin
+ *
+ * This file has been put into the public domain.
+ * You can do whatever you want with this file.
+ *
+ * See ../lzma.h for information about liblzma as a whole.
+ */
+
+#ifndef LZMA_H_INTERNAL
+# error Never include this file directly. Use <lzma.h> instead.
+#endif
+
+
+/**
+ * \brief Get the total amount of physical memory (RAM) in bytes
+ *
+ * This function may be useful when determining a reasonable memory
+ * usage limit for decompressing or how much memory it is OK to use
+ * for compressing. For example, the default limit used by the xz
+ * command line tool is 40 % of RAM.
+ *
+ * \return On success, the total amount of physical memory in bytes
+ * is returned. If the amount of RAM cannot be determined,
+ * zero is returned. This can happen if an error occurs
+ * or if there is no code in liblzma to detect the amount
+ * of RAM on the specific operating system.
+ */
+extern LZMA_API(uint64_t) lzma_physmem(void) lzma_nothrow;
common/easy_preset.h \
common/filter_common.c \
common/filter_common.h \
+ common/hardware_physmem.c \
common/index.c \
common/index.h \
common/stream_flags_common.c \
--- /dev/null
+///////////////////////////////////////////////////////////////////////////////
+//
+/// \file hardware_physmem.c
+/// \brief Get the total amount of physical memory (RAM)
+//
+// Author: Jonathan Nieder
+//
+// This file has been put into the public domain.
+// You can do whatever you want with this file.
+//
+///////////////////////////////////////////////////////////////////////////////
+
+#include "common.h"
+
+#include "tuklib_physmem.h"
+
+
+extern LZMA_API(uint64_t)
+lzma_physmem(void)
+{
+ // It is simpler to make lzma_physmem() a wrapper for
+ // tuklib_physmem() than to hack appropriate symbol visiblity
+ // support for the tuklib modules.
+ return tuklib_physmem();
+}
$(top_srcdir)/src/common/tuklib_open_stdxxx.c \
$(top_srcdir)/src/common/tuklib_progname.c \
$(top_srcdir)/src/common/tuklib_exit.c \
- $(top_srcdir)/src/common/tuklib_physmem.c \
$(top_srcdir)/src/common/tuklib_cpucores.c
if COND_W32
///////////////////////////////////////////////////////////////////////////////
#include "private.h"
-#include "tuklib_physmem.h"
#include "tuklib_cpucores.h"
assert(percentage > 0);
assert(percentage <= 100);
- uint64_t mem = tuklib_physmem();
+ uint64_t mem = lzma_physmem();
// If we cannot determine the amount of RAM, use the assumption
// defined by the configure script.
xzdec_SOURCES = \
xzdec.c \
$(top_srcdir)/src/common/tuklib_progname.c \
- $(top_srcdir)/src/common/tuklib_exit.c \
- $(top_srcdir)/src/common/tuklib_physmem.c
+ $(top_srcdir)/src/common/tuklib_exit.c
if COND_W32
xzdec_SOURCES += xzdec_w32res.rc
lzmadec_SOURCES = \
xzdec.c \
$(top_srcdir)/src/common/tuklib_progname.c \
- $(top_srcdir)/src/common/tuklib_exit.c \
- $(top_srcdir)/src/common/tuklib_physmem.c
+ $(top_srcdir)/src/common/tuklib_exit.c
if COND_W32
lzmadec_SOURCES += lzmadec_w32res.rc
#include "getopt.h"
#include "tuklib_progname.h"
#include "tuklib_exit.h"
-#include "tuklib_physmem.h"
#ifdef TUKLIB_DOSLIKE
# include <fcntl.h>
static void
memlimit_set_percentage(uint32_t percentage)
{
- uint64_t mem = tuklib_physmem();
+ uint64_t mem = lzma_physmem();
// If we cannot determine the amount of RAM, use the assumption
// set by the configure script.