diff --git a/NEWS b/NEWS index 554ee41..4cde934 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,16 @@ +1.32.2 +------ + +- libmpg123: Re-introduce _64 symbols on native 64 bit offset platforms. This + was a regression since 1.31 series. Sorry, too much cleanup, not enough + testing. +- build: +-- Better O_LARGEFILE logic, avoiding redefintion. +- ports/cmake: +-- Require C99 (bug 360, among other points, thanks to Ozkan Sezer). +-- Fix broken O_LARGEFILE logic (bug 360). +-- Typo fix and cleanup, also manual SSE switch for Android on old x86 (bug 359). + 1.32.1 ------ - Include man pages again in tarball and install. We cannot avoid the empty diff --git a/configure b/configure index f28539f..15e6f7e 100755 --- a/configure +++ b/configure @@ -1,6 +1,6 @@ #! /bin/sh # Guess values for system-dependent variables and create Makefiles. -# Generated by GNU Autoconf 2.71 for mpg123 1.32.1. +# Generated by GNU Autoconf 2.71 for mpg123 1.32.2. # # Report bugs to . # @@ -621,8 +621,8 @@ MAKEFLAGS= # Identity of this package. PACKAGE_NAME='mpg123' PACKAGE_TARNAME='mpg123' -PACKAGE_VERSION='1.32.1' -PACKAGE_STRING='mpg123 1.32.1' +PACKAGE_VERSION='1.32.2' +PACKAGE_STRING='mpg123 1.32.2' PACKAGE_BUGREPORT='maintainer@mpg123.org' PACKAGE_URL='' @@ -1726,7 +1726,7 @@ if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF -\`configure' configures mpg123 1.32.1 to adapt to many kinds of systems. +\`configure' configures mpg123 1.32.2 to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... @@ -1797,7 +1797,7 @@ fi if test -n "$ac_init_help"; then case $ac_init_help in - short | recursive ) echo "Configuration of mpg123 1.32.1:";; + short | recursive ) echo "Configuration of mpg123 1.32.2:";; esac cat <<\_ACEOF @@ -2074,7 +2074,7 @@ fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF -mpg123 configure 1.32.1 +mpg123 configure 1.32.2 generated by GNU Autoconf 2.71 Copyright (C) 2021 Free Software Foundation, Inc. @@ -2619,7 +2619,7 @@ cat >config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. -It was created by mpg123 $as_me 1.32.1, which was +It was created by mpg123 $as_me 1.32.2, which was generated by GNU Autoconf 2.71. Invocation command line was $ $0$ac_configure_args_raw @@ -3989,7 +3989,7 @@ fi # Define the identity of the package. PACKAGE='mpg123' - VERSION='1.32.1' + VERSION='1.32.2' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h @@ -17616,9 +17616,9 @@ fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $have_o_largefile" >&5 printf "%s\n" "$have_o_largefile" >&6; } - if test x"$have_o_largefile" = xno; then + if test x"$have_o_largefile" = xyes; then -printf "%s\n" "#define O_LARGEFILE 0" >>confdefs.h +printf "%s\n" "#define HAVE_O_LARGEFILE 1" >>confdefs.h fi else @@ -22648,7 +22648,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" -This file was extended by mpg123 $as_me 1.32.1, which was +This file was extended by mpg123 $as_me 1.32.2, which was generated by GNU Autoconf 2.71. Invocation command line was CONFIG_FILES = $CONFIG_FILES @@ -22716,7 +22716,7 @@ ac_cs_config_escaped=`printf "%s\n" "$ac_cs_config" | sed "s/^ //; s/'/'\\\\\\\\ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config='$ac_cs_config_escaped' ac_cs_version="\\ -mpg123 config.status 1.32.1 +mpg123 config.status 1.32.2 configured by $0, generated by GNU Autoconf 2.71, with options \\"\$ac_cs_config\\" diff --git a/configure.ac b/configure.ac index 64c76df..08ba614 100644 --- a/configure.ac +++ b/configure.ac @@ -1311,8 +1311,8 @@ if test "x$have_off64_t" = xyes && test "x$ac_cv_func_lseek64" = xyes; then } ])],[have_o_largefile=yes],[have_o_largefile=no]) AC_MSG_RESULT([$have_o_largefile]) - if test x"$have_o_largefile" = xno; then - AC_DEFINE(O_LARGEFILE, 0, [ Define to 0 if system does not have/need it. ]) + if test x"$have_o_largefile" = xyes; then + AC_DEFINE(HAVE_O_LARGEFILE, 1, [ Define if O_LARGEFILE flag for open(2) exists. ]) fi else use_largefile=no diff --git a/mpg123.spec b/mpg123.spec index 25698d4..ea24a01 100644 --- a/mpg123.spec +++ b/mpg123.spec @@ -3,7 +3,7 @@ # - devel packages for alsa, sdl, etc... to build the respective output modules. Summary: The fast console mpeg audio decoder/player. Name: mpg123 -Version: 1.32.1 +Version: 1.32.2 Release: 1 URL: http://www.mpg123.org/ License: GPL diff --git a/ports/README b/ports/README index 94e7b15..4d38741 100644 --- a/ports/README +++ b/ports/README @@ -1,19 +1,7 @@ -DISCLAIMER: The contents of the ports directory are included for convenience, -but they usually contain files contributed by various people, not the core -mpg123 team. The stuff is not tested by us. In some cases, it's even -impossible to tell what is really inside. Use at your own risk (well, like -all Free Software, actually;-). +This directory used to contain some (contributed) works covering usage and/or +building of mpg123/libmpg123 from different programming environments. Since +they became too outdated, all but the CMake port were removed. -This directory contains some (contributed) works covering usage and/or building -of mpg123/libmpg123 from different programming environments. Note that those -may be a bit outdated (especially when a file is added/removed in libmpg123 -sources); as the team lacks resource to test everything. But in any case, -the ports can provide a good starting point on the respective platform, to get -it to work with minimal fuzz. - -- cmake: CMake build to get started on non-Unix-like platforms, especially - for just libmpg123 on Windows - -There used to be other ports, last of those for the Sony PSP. There was not -much porting involved on that one, though, just a custom Makefile for building -a generic libmpg123. +The CMake build is primarily intended for platforms not well-supported by the +primary autotools-based build. It is tested occasionally, had some tuning +over time, but may get out of sync regarding possible build configurations. diff --git a/ports/cmake/CMakeLists.txt b/ports/cmake/CMakeLists.txt index c9af553..5e400a0 100644 --- a/ports/cmake/CMakeLists.txt +++ b/ports/cmake/CMakeLists.txt @@ -4,6 +4,7 @@ include(cmake/read_api_version.cmake) read_api_version(MPG123_VERSION) project(mpg123 VERSION ${MPG123_VERSION} LANGUAGES C ASM) +set(CMAKE_C_STANDARD 99) option(BUILD_LIBOUT123 "build libout123 (prerequisite for included programs)" ON) if(CMAKE_SYSTEM_NAME STREQUAL "WindowsStore") diff --git a/ports/cmake/src/CMakeLists.txt b/ports/cmake/src/CMakeLists.txt index b300408..930fe07 100644 --- a/ports/cmake/src/CMakeLists.txt +++ b/ports/cmake/src/CMakeLists.txt @@ -84,7 +84,7 @@ check_c_source_compiles( #include #include - int fd = open(\"/foo\", O_RDONLY|O_LARGEFILE); + int main(){ return open(\"/foo\", O_RDONLY|O_LARGEFILE); } " HAVE_O_LARGEFILE) endif() endif() diff --git a/ports/cmake/src/compat/CMakeLists.txt b/ports/cmake/src/compat/CMakeLists.txt index f887f43..a98eccc 100644 --- a/ports/cmake/src/compat/CMakeLists.txt +++ b/ports/cmake/src/compat/CMakeLists.txt @@ -10,4 +10,4 @@ set_target_properties(${TARGET}_dl PROPERTIES POSITION_INDEPENDENT_CODE ON) add_library(${TARGET}_str OBJECT "${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/compat/compat_str.c") -set_target_properties(${TARGET}_dl PROPERTIES POSITION_INDEPENDENT_CODE ON) +set_target_properties(${TARGET}_str PROPERTIES POSITION_INDEPENDENT_CODE ON) diff --git a/ports/cmake/src/config.cmake.h.in b/ports/cmake/src/config.cmake.h.in index ba44421..7176ae4 100644 --- a/ports/cmake/src/config.cmake.h.in +++ b/ports/cmake/src/config.cmake.h.in @@ -181,6 +181,3 @@ #cmakedefine LFS_LARGEFILE_64 1 #cmakedefine LFS_SENSITIVE 1 #cmakedefine HAVE_O_LARGEFILE 1 -#ifndef HAVE_O_LARGEFILE -#define O_LARGEFILE 0 -#endif diff --git a/ports/cmake/src/libmpg123/CMakeLists.txt b/ports/cmake/src/libmpg123/CMakeLists.txt index e891f64..64b3754 100644 --- a/ports/cmake/src/libmpg123/CMakeLists.txt +++ b/ports/cmake/src/libmpg123/CMakeLists.txt @@ -1,6 +1,9 @@ cmake_minimum_required(VERSION 3.12) option(NO_FEATURE_REPORT "Disable feature report function" OFF) +if(CMAKE_SYSTEM_NAME STREQUAL "Android") + option(WITH_SSE "x86: build with SSE support if detected. Turn OFF for older devices where autodetection is misleading." ON) +endif() include_directories("${CMAKE_CURRENT_BINARY_DIR}" "${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/libmpg123/") @@ -121,6 +124,9 @@ elseif(MACHINE STREQUAL "x86") endif() cmake_host_system_information(RESULT HAVE_SSE QUERY HAS_SSE) + if(CMAKE_SYSTEM_NAME STREQUAL "Android") + set(HAVE_SSE ${WITH_SSE}) + endif() if(HAVE_SSE) set(PLATFORM_DEFINITIONS OPT_SSE) set(PLATFORM_SOURCES @@ -140,8 +146,6 @@ elseif(MACHINE STREQUAL "x86") "${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/libmpg123/dct64_sse.S" "${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/libmpg123/synth_sse.S") endif() - target_sources(${TARGET} PRIVATE - "${CMAKE_CURRENT_SOURCE_DIR}/../../../../src/libmpg123/dct64_i386.c") endif() elseif(MACHINE STREQUAL "arm64") set(PLATFORM_DEFINITIONS OPT_MULTI OPT_GENERIC OPT_GENERIC_DITHER OPT_NEON64) diff --git a/src/config.h.in b/src/config.h.in index 711df05..0e95291 100644 --- a/src/config.h.in +++ b/src/config.h.in @@ -181,6 +181,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_OS2_H +/* Define if O_LARGEFILE flag for open(2) exists. */ +#undef HAVE_O_LARGEFILE + /* Define to 1 if you have the `random' function. */ #undef HAVE_RANDOM @@ -425,9 +428,6 @@ /* Define to disable warning messages. */ #undef NO_WARNING -/* Define to 0 if system does not have/need it. */ -#undef O_LARGEFILE - /* Name of package */ #undef PACKAGE diff --git a/src/libmpg123/lfs_wrap.c b/src/libmpg123/lfs_wrap.c index 3b9c6e1..1474de7 100644 --- a/src/libmpg123/lfs_wrap.c +++ b/src/libmpg123/lfs_wrap.c @@ -496,8 +496,16 @@ int attribute_align_arg mpg123_position_32( mpg123_handle *mh, off_t INT123_fram #endif -// _64 aliases if we got some off64_t to work with. +// _64 aliases if we either got some off64_t to work with or +// if there is no explicit 64 bit API but off_t is just always +// 64 bits. +#if defined(LFS_LARGEFILE_64) || (SIZEOF_OFF_T == 8) + #ifdef LFS_LARGEFILE_64 +#define OFF64 off64_t +#else +#define OFF64 off_t +#endif int attribute_align_arg mpg123_open_64(mpg123_handle *mh, const char *path) { @@ -520,89 +528,90 @@ int attribute_align_arg mpg123_open_handle_64(mpg123_handle *mh, void *iohandle) return mpg123_open_handle(mh, iohandle); } -int attribute_align_arg mpg123_framebyframe_decode_64(mpg123_handle *mh, off64_t *num, unsigned char **audio, size_t *bytes) +int attribute_align_arg mpg123_framebyframe_decode_64(mpg123_handle *mh, OFF64 *num, unsigned char **audio, size_t *bytes) { return mpg123_framebyframe_decode64(mh, (int64_t*)num, audio, bytes); } -int attribute_align_arg mpg123_decode_frame_64(mpg123_handle *mh, off64_t *num, unsigned char **audio, size_t *bytes) +int attribute_align_arg mpg123_decode_frame_64(mpg123_handle *mh, OFF64 *num, unsigned char **audio, size_t *bytes) { return mpg123_decode_frame64(mh, (int64_t*)num, audio, bytes); } -off64_t attribute_align_arg mpg123_timeframe_64(mpg123_handle *mh, double seconds) +OFF64 attribute_align_arg mpg123_timeframe_64(mpg123_handle *mh, double seconds) { return mpg123_timeframe64(mh, seconds); } -off64_t attribute_align_arg mpg123_tell_64(mpg123_handle *mh) +OFF64 attribute_align_arg mpg123_tell_64(mpg123_handle *mh) { return mpg123_tell64(mh); } -off64_t attribute_align_arg mpg123_tellframe_64(mpg123_handle *mh) +OFF64 attribute_align_arg mpg123_tellframe_64(mpg123_handle *mh) { return mpg123_tellframe64(mh); } -off64_t attribute_align_arg mpg123_tell_stream_64(mpg123_handle *mh) +OFF64 attribute_align_arg mpg123_tell_stream_64(mpg123_handle *mh) { return mpg123_tell_stream64(mh); } -off64_t attribute_align_arg mpg123_seek_64(mpg123_handle *mh, off64_t sampleoff, int whence) +OFF64 attribute_align_arg mpg123_seek_64(mpg123_handle *mh, OFF64 sampleoff, int whence) { return mpg123_seek64(mh, (int64_t)sampleoff, whence); } -off64_t attribute_align_arg mpg123_feedseek_64(mpg123_handle *mh, off64_t sampleoff, int whence, off64_t *input_offset) +OFF64 attribute_align_arg mpg123_feedseek_64(mpg123_handle *mh, OFF64 sampleoff, int whence, OFF64 *input_offset) { return mpg123_feedseek64(mh, (int64_t)sampleoff, whence, (int64_t*)input_offset); } -off64_t attribute_align_arg mpg123_seek_frame_64(mpg123_handle *mh, off64_t offset, int whence) +OFF64 attribute_align_arg mpg123_seek_frame_64(mpg123_handle *mh, OFF64 offset, int whence) { return mpg123_seek_frame64(mh, (int64_t)offset, whence); } -int attribute_align_arg mpg123_set_filesize_64(mpg123_handle *mh, off64_t size) +int attribute_align_arg mpg123_set_filesize_64(mpg123_handle *mh, OFF64 size) { return mpg123_set_filesize64(mh, (int64_t)size); } -off64_t attribute_align_arg mpg123_framelength_64(mpg123_handle *mh) +OFF64 attribute_align_arg mpg123_framelength_64(mpg123_handle *mh) { return mpg123_framelength64(mh); } -off64_t attribute_align_arg mpg123_length_64(mpg123_handle *mh) +OFF64 attribute_align_arg mpg123_length_64(mpg123_handle *mh) { return mpg123_length64(mh); } -int attribute_align_arg mpg123_index_64(mpg123_handle *mh, off64_t **offsets, off64_t *step, size_t *fill) +int attribute_align_arg mpg123_index_64(mpg123_handle *mh, OFF64 **offsets, OFF64 *step, size_t *fill) { return mpg123_index64(mh, (int64_t**)offsets, (int64_t*)step, fill); } -int attribute_align_arg mpg123_set_index_64(mpg123_handle *mh, off64_t *offsets, off64_t step, size_t fill) +int attribute_align_arg mpg123_set_index_64(mpg123_handle *mh, OFF64 *offsets, OFF64 step, size_t fill) { return mpg123_set_index64(mh, (int64_t*)offsets, (int64_t)step, fill); } -off64_t attribute_align_arg mpg123_framepos_64(mpg123_handle *mh) +OFF64 attribute_align_arg mpg123_framepos_64(mpg123_handle *mh) { return mpg123_framepos64(mh); } -int attribute_align_arg mpg123_position_64( mpg123_handle *mh, off64_t INT123_frame_offset -, off64_t buffered_bytes, off64_t *current_frame, off64_t *frames_left +int attribute_align_arg mpg123_position_64( mpg123_handle *mh, OFF64 INT123_frame_offset +, OFF64 buffered_bytes, OFF64 *current_frame, OFF64 *frames_left , double *current_seconds, double *seconds_left ) { return mpg123_position64( mh, (int64_t)INT123_frame_offset, (int64_t)buffered_bytes , (int64_t*)current_frame, (int64_t*)frames_left, current_seconds, seconds_left ); } +#undef OFF64 #endif /* ========================================= @@ -769,7 +778,7 @@ int INT123_wrap_open(mpg123_handle *mh, void *handle, const char *path, int fd, #ifdef O_BINARY flags |= O_BINARY; #endif -#ifdef LFS_LARGEFILE_64 +#if defined(LFS_LARGEFILE_64) && defined(HAVE_O_LARGEFILE) flags |= O_LARGEFILE; #endif errno = 0; @@ -951,4 +960,16 @@ int attribute_align_arg mpg123_replace_reader_handle_64(mpg123_handle *mh, mpg12 return MPG123_OK; } +#elif SIZEOF_OFF_T == 8 + +int attribute_align_arg mpg123_replace_reader_64(mpg123_handle *mh, mpg123_ssize_t (*r_read) (int, void *, size_t), off_t (*r_lseek)(int, off_t, int) ) +{ + return mpg123_replace_reader(mh, r_read, r_lseek); +} + +int attribute_align_arg mpg123_replace_reader_handle_64(mpg123_handle *mh, mpg123_ssize_t (*r_read) (void*, void *, size_t), off_t (*r_lseek)(void*, off_t, int), void (*cleanup)(void*)) +{ + return mpg123_replace_reader_handle(mh, r_read, r_lseek, cleanup); +} + #endif diff --git a/src/version.h b/src/version.h index 4bfd3d1..312db98 100644 --- a/src/version.h +++ b/src/version.h @@ -16,7 +16,7 @@ // only single spaces as separator to ease parsing by build scripts #define MPG123_MAJOR 1 #define MPG123_MINOR 32 -#define MPG123_PATCH 1 +#define MPG123_PATCH 2 // Don't get too wild with that to avoid confusing m4. No brackets. // Also, it should fit well into a sane file name for the tarball. #define MPG123_SUFFIX ""