diff options
author | Lasse Collin <lasse.collin@tukaani.org> | 2009-09-19 09:47:30 +0300 |
---|---|---|
committer | Lasse Collin <lasse.collin@tukaani.org> | 2009-09-19 09:47:30 +0300 |
commit | e599bba4216c0edb8cc8f40adad3a6dba88685f4 (patch) | |
tree | d52c699f599e276ff65302e5854a26998da1a928 /m4 | |
parent | Fix incorrect use of "restrict". (diff) | |
download | xz-e599bba4216c0edb8cc8f40adad3a6dba88685f4.tar.xz |
Various changes.
Separate a few reusable components from XZ Utils specific
code. The reusable code is now in "tuklib" modules. A few
more could be separated still, e.g. bswap.h.
Fix some bugs in lzmainfo.
Fix physmem and cpucores code on OS/2. Thanks to Elbert Pol
for help.
Add OpenVMS support into physmem. Add a few #ifdefs to ease
building XZ Utils on OpenVMS. Thanks to Jouk Jansen for the
original patch.
Diffstat (limited to 'm4')
-rw-r--r-- | m4/lc_physmem.m4 | 84 | ||||
-rw-r--r-- | m4/tuklib_common.m4 | 22 | ||||
-rw-r--r-- | m4/tuklib_cpucores.m4 (renamed from m4/lc_cpucores.m4) | 83 | ||||
-rw-r--r-- | m4/tuklib_physmem.m4 | 119 | ||||
-rw-r--r-- | m4/tuklib_progname.m4 | 25 |
5 files changed, 215 insertions, 118 deletions
diff --git a/m4/lc_physmem.m4 b/m4/lc_physmem.m4 deleted file mode 100644 index 5d9581e1..00000000 --- a/m4/lc_physmem.m4 +++ /dev/null @@ -1,84 +0,0 @@ -dnl ########################################################################### -dnl -dnl lc_PHYSMEM - Check how to find out the amount of physical memory -dnl -dnl - sysconf() gives all the needed info on GNU+Linux and Solaris. -dnl - BSDs use sysctl(). -dnl - sysinfo() works on Linux/dietlibc and probably on other Linux systems -dnl whose libc may lack sysconf(). -dnl -dnl ########################################################################### -dnl -dnl Author: Lasse Collin -dnl -dnl This file has been put into the public domain. -dnl You can do whatever you want with this file. -dnl -dnl ########################################################################### -AC_DEFUN([lc_PHYSMEM], [ -AC_MSG_CHECKING([how to detect the amount of physical memory]) -AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ -#include <unistd.h> -int -main(void) -{ - long i; - i = sysconf(_SC_PAGESIZE); - i = sysconf(_SC_PHYS_PAGES); - return 0; -} -]])], [ - AC_DEFINE([HAVE_PHYSMEM_SYSCONF], [1], - [Define to 1 if the amount of physical memory can be detected - with sysconf(_SC_PAGESIZE) and sysconf(_SC_PHYS_PAGES).]) - AC_MSG_RESULT([sysconf]) -], [ -AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ -#include <sys/types.h> -#ifdef HAVE_SYS_PARAM_H -# include <sys/param.h> -#endif -#include <sys/sysctl.h> -int -main(void) -{ - int name[2] = { CTL_HW, HW_PHYSMEM }; - unsigned long mem; - size_t mem_ptr_size = sizeof(mem); - sysctl(name, 2, &mem, &mem_ptr_size, NULL, 0); - return 0; -} -]])], [ - AC_DEFINE([HAVE_PHYSMEM_SYSCTL], [1], - [Define to 1 if the amount of physical memory can be detected - with sysctl().]) - AC_MSG_RESULT([sysctl]) -], [ -dnl sysinfo() is Linux-specific. Some non-Linux systems have -dnl incompatible sysinfo() so we must check $host_os. -case $host_os in - linux*) - AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ -#include <sys/sysinfo.h> -int -main(void) -{ - struct sysinfo si; - sysinfo(&si); - return 0; -} - ]])], [ - AC_DEFINE([HAVE_PHYSMEM_SYSINFO], [1], - [Define to 1 if the amount of physical memory - can be detected with Linux sysinfo().]) - AC_MSG_RESULT([sysinfo]) - ], [ - AC_MSG_RESULT([unknown]) - ]) - ;; - *) - AC_MSG_RESULT([unknown]) - ;; -esac -])]) -])dnl lc_PHYSMEM diff --git a/m4/tuklib_common.m4 b/m4/tuklib_common.m4 new file mode 100644 index 00000000..d942a25f --- /dev/null +++ b/m4/tuklib_common.m4 @@ -0,0 +1,22 @@ +# +# SYNOPSIS +# +# TUKLIB_COMMON +# +# DESCRIPTION +# +# Common checks for tuklib. +# +# COPYING +# +# Author: Lasse Collin +# +# This file has been put into the public domain. +# You can do whatever you want with this file. +# + +AC_DEFUN_ONCE([TUKLIB_COMMON], [ +AC_REQUIRE([AC_CANONICAL_HOST]) +AC_REQUIRE([AC_PROG_CC_C99]) +AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) +])dnl diff --git a/m4/lc_cpucores.m4 b/m4/tuklib_cpucores.m4 index 52f7c985..9058d445 100644 --- a/m4/lc_cpucores.m4 +++ b/m4/tuklib_cpucores.m4 @@ -1,36 +1,35 @@ -dnl ########################################################################### -dnl -dnl lc_CPUCORES - Check how to find out the number of online CPU cores -dnl -dnl Check how to find out the number of available CPU cores in the system. -dnl sysconf(_SC_NPROCESSORS_ONLN) works on most systems, except that BSDs -dnl use sysctl(). -dnl -dnl ########################################################################### -dnl -dnl Author: Lasse Collin -dnl -dnl This file has been put into the public domain. -dnl You can do whatever you want with this file. -dnl -dnl ########################################################################### -AC_DEFUN([lc_CPUCORES], [ +# +# SYNOPSIS +# +# TUKLIB_CPUCORES +# +# DESCRIPTION +# +# Check how to find out the number of available CPU cores in the system. +# This information is used by tuklib_cpucores.c. +# +# Currently this supports sysctl() (BSDs, OS/2) and sysconf() (GNU/Linux, +# Solaris, Cygwin). +# +# COPYING +# +# Author: Lasse Collin +# +# This file has been put into the public domain. +# You can do whatever you want with this file. +# + +AC_DEFUN_ONCE([TUKLIB_CPUCORES], [ +AC_REQUIRE([TUKLIB_COMMON]) + +# sys/param.h might be needed by sys/sysctl.h. +AC_CHECK_HEADERS([sys/param.h]) + AC_MSG_CHECKING([how to detect the number of available CPU cores]) -AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ -#include <unistd.h> -int -main(void) -{ - long i; - i = sysconf(_SC_NPROCESSORS_ONLN); - return 0; -} -]])], [ - AC_DEFINE([HAVE_CPUCORES_SYSCONF], [1], - [Define to 1 if the number of available CPU cores can be - detected with sysconf(_SC_NPROCESSORS_ONLN).]) - AC_MSG_RESULT([sysconf]) -], [ + +# Look for sysctl() solution first, because on OS/2, both sysconf() +# and sysctl() pass the tests in this file, but only sysctl() +# actually works. AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ #include <sys/types.h> #ifdef HAVE_SYS_PARAM_H @@ -47,11 +46,27 @@ main(void) return 0; } ]])], [ - AC_DEFINE([HAVE_CPUCORES_SYSCTL], [1], + AC_DEFINE([TUKLIB_CPUCORES_SYSCTL], [1], [Define to 1 if the number of available CPU cores can be detected with sysctl().]) AC_MSG_RESULT([sysctl]) ], [ + +AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ +#include <unistd.h> +int +main(void) +{ + long i; + i = sysconf(_SC_NPROCESSORS_ONLN); + return 0; +} +]])], [ + AC_DEFINE([TUKLIB_CPUCORES_SYSCONF], [1], + [Define to 1 if the number of available CPU cores can be + detected with sysconf(_SC_NPROCESSORS_ONLN).]) + AC_MSG_RESULT([sysconf]) +], [ AC_MSG_RESULT([unknown]) ])]) -])dnl lc_CPUCORES +])dnl diff --git a/m4/tuklib_physmem.m4 b/m4/tuklib_physmem.m4 new file mode 100644 index 00000000..91e3dc56 --- /dev/null +++ b/m4/tuklib_physmem.m4 @@ -0,0 +1,119 @@ +# +# SYNOPSIS +# +# TUKLIB_PHYSMEM +# +# DESCRIPTION +# +# Check how to get the amount of physical memory. +# This information is used in tuklib_physmem.c. +# +# Supported methods: +# +# - Windows (including Cygwin), OS/2, DJGPP (DOS), and OpenVMS have +# operating-system specific functions. +# +# - sysconf() works on GNU/Linux and Solaris, and possibly on +# some BSDs. +# +# - BSDs use sysctl(). +# +# - sysinfo() works on Linux/dietlibc and probably on other Linux +# systems whose libc may lack sysconf(). +# +# COPYING +# +# Author: Lasse Collin +# +# This file has been put into the public domain. +# You can do whatever you want with this file. +# + +AC_DEFUN_ONCE([TUKLIB_PHYSMEM], [ +AC_REQUIRE([TUKLIB_COMMON]) + +# sys/param.h might be needed by sys/sysctl.h. +AC_CHECK_HEADERS([sys/param.h]) + +AC_MSG_CHECKING([how to detect the amount of physical memory]) + +# Maybe checking $host_os would be enough but this matches what +# tuklib_physmem.c does. +AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ +#if defined(_WIN32) || defined(__CYGWIN__) || defined(__OS2__) \ + || defined(__DJGPP__) || defined(__VMS) +int main(void) { return 0; } +#else +#error +#endif +]])], [ + AC_MSG_RESULT([special]) +], [ + +AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ +#include <unistd.h> +int +main(void) +{ + long i; + i = sysconf(_SC_PAGESIZE); + i = sysconf(_SC_PHYS_PAGES); + return 0; +} +]])], [ + AC_DEFINE([TUKLIB_PHYSMEM_SYSCONF], [1], + [Define to 1 if the amount of physical memory can be detected + with sysconf(_SC_PAGESIZE) and sysconf(_SC_PHYS_PAGES).]) + AC_MSG_RESULT([sysconf]) +], [ + +AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ +#include <sys/types.h> +#ifdef HAVE_SYS_PARAM_H +# include <sys/param.h> +#endif +#include <sys/sysctl.h> +int +main(void) +{ + int name[2] = { CTL_HW, HW_PHYSMEM }; + unsigned long mem; + size_t mem_ptr_size = sizeof(mem); + sysctl(name, 2, &mem, &mem_ptr_size, NULL, 0); + return 0; +} +]])], [ + AC_DEFINE([TUKLIB_PHYSMEM_SYSCTL], [1], + [Define to 1 if the amount of physical memory can be detected + with sysctl().]) + AC_MSG_RESULT([sysctl]) +], [ + +# This version of sysinfo() is Linux-specific. Some non-Linux systems have +# different sysinfo() so we must check $host_os. +case $host_os in + linux*) + AC_COMPILE_IFELSE([AC_LANG_SOURCE([[ +#include <sys/sysinfo.h> +int +main(void) +{ + struct sysinfo si; + sysinfo(&si); + return 0; +} + ]])], [ + AC_DEFINE([TUKLIB_PHYSMEM_SYSINFO], [1], + [Define to 1 if the amount of physical memory + can be detected with Linux sysinfo().]) + AC_MSG_RESULT([sysinfo]) + ], [ + AC_MSG_RESULT([unknown]) + ]) + ;; + *) + AC_MSG_RESULT([unknown]) + ;; +esac +])])]) +])dnl diff --git a/m4/tuklib_progname.m4 b/m4/tuklib_progname.m4 new file mode 100644 index 00000000..f3e158bd --- /dev/null +++ b/m4/tuklib_progname.m4 @@ -0,0 +1,25 @@ +# +# SYNOPSIS +# +# TUKLIB_PROGNAME +# +# DESCRIPTION +# +# Put argv[0] into a global variable progname. On DOS-like systems, +# modify it so that it looks nice (no full path or .exe suffix). +# +# This .m4 file is needed allow this module to use glibc's +# program_invocation_name. +# +# COPYING +# +# Author: Lasse Collin +# +# This file has been put into the public domain. +# You can do whatever you want with this file. +# + +AC_DEFUN_ONCE([TUKLIB_PROGNAME], [ +AC_REQUIRE([TUKLIB_COMMON]) +AC_CHECK_DECLS([program_invocation_name], [], [], [#include <errno.h>]) +])dnl |