Patch from Peter Hartley to allow Cross-compiling to mingw32:

- MinGW doesn't have struct timespec, so udf_time.c doesn't compile
   (changes lib/udf/udf_time.c, configure.ac, config.h.in)

 - The configure test for bitfield ordering uses AC_TRY_RUN and thus
   doesn't work when cross-compiling; use sneakiness to try and
   determine it at compile time, falling back to the existing runtime
   check if the sneakiness doesn't work
   (changes configure.ac; tested on x86_64-linux-gnu and i586-mingw32
   which are bf_lsbf=1, plus sparc64-linux-gnu which is bf_lsbf=0)

 - The configure test for "extern long timezone" needlessly uses
   AC_TRY_RUN when in fact AC_LINK_IFELSE is all we need to know, and
   that latter works when cross-compiling
   (changes configure.ac)

 - MinGW sys/stat.h doesn't have the *GRP or *OTH macros, nor S_IFLNK
   or S_IFSOCK, nor S_ISUID etc
   (changes lib/udf/udf.c and lib/iso9660/xa.c)

 - MinGW doesn't have <sys/wait.h>, so even the header-inclusion bit
   of the Linux driver doesn't compile unless it's moved inside the
   "ifdef HAVE_LINUX_CDROM"
   (changes lib/driver/gnu_linux.c)

 - Because the man pages cd-info.1 etc depend on the binaries themselves
   (for help2man reasons), the configure options --without-cd-info etc
   don't actually stop them being compiled. Fixed by only depending on
   man pages for programs that are actually built, which also stops
   the installation of man pages of programs which aren't themselves
   installed
   (changes src/Makefile.am)
This commit is contained in:
rocky
2008-04-24 07:28:00 +00:00
parent 8deec6fcc9
commit 62d7731703
8 changed files with 104 additions and 22 deletions

8
NEWS
View File

@@ -1,4 +1,4 @@
$Id: NEWS,v 1.121 2008/03/27 10:45:24 edsdead Exp $ $Id: NEWS,v 1.122 2008/04/24 07:28:00 rocky Exp $
version 0.81cvs version 0.81cvs
@@ -14,6 +14,8 @@ version 0.81cvs
- Allow reading pregap of a track via get_track_pregap_lsn(). Add - Allow reading pregap of a track via get_track_pregap_lsn(). Add
Section on "CD-DA pregap" in libcdio manual Section on "CD-DA pregap" in libcdio manual
- Allow cross-compiling to mingw32. Patch from Peter Hartley.
version 0.80 version 0.80
2008-03-15 2008-03-15
@@ -42,7 +44,7 @@ version 0.79
by Eric Shattow. Fix erroneous #defines when by Eric Shattow. Fix erroneous #defines when
DO_NO_WANT_PARANOIA_COMPATIBILITY is set - reported by DO_NO_WANT_PARANOIA_COMPATIBILITY is set - reported by
David Stockwell. David Stockwell.
- Support for multisession CD-Extra Discs - via of Patrick Guimond - Support for multisession CD-Extra Discs. Patch from Patrick Guimond
- Add iso9660_fs_find_lsn_with_path and iso9660_ifs_find_lsn_with_path - Add iso9660_fs_find_lsn_with_path and iso9660_ifs_find_lsn_with_path
to report the full filename path of lsn. to report the full filename path of lsn.
@@ -417,4 +419,4 @@ version 0.1
Routines split off from VCDImager. Routines split off from VCDImager.
$Id: NEWS,v 1.121 2008/03/27 10:45:24 edsdead Exp $ $Id: NEWS,v 1.122 2008/04/24 07:28:00 rocky Exp $

3
THANKS
View File

@@ -36,6 +36,9 @@ Nicolas Boullis <nboullis at debian.org>
Patrick Guimond Patrick Guimond
CD-Extra audio data boundaries CD-Extra audio data boundaries
Peter Hartley
Cross-compiling to mingw32
Peter J. Creath Peter J. Creath
removal of libpopt, paranoia documentation, some bug fixes to removal of libpopt, paranoia documentation, some bug fixes to
cd-* programs and the paranoia lib cd-* programs and the paranoia lib

View File

@@ -20,7 +20,7 @@ define(RELEASE_NUM, 81)
define(CDIO_VERSION_STR, 0.$1cvs) define(CDIO_VERSION_STR, 0.$1cvs)
AC_PREREQ(2.52) AC_PREREQ(2.52)
AC_REVISION([$Id: configure.ac,v 1.224 2008/03/27 17:40:50 rocky Exp $])dnl AC_REVISION([$Id: configure.ac,v 1.225 2008/04/24 07:28:00 rocky Exp $])dnl
AC_INIT(libcdio, CDIO_VERSION_STR(RELEASE_NUM)) AC_INIT(libcdio, CDIO_VERSION_STR(RELEASE_NUM))
AC_CONFIG_SRCDIR(src/cd-info.c) AC_CONFIG_SRCDIR(src/cd-info.c)
@@ -247,6 +247,15 @@ int main(int argc, char **argv) {
[AC_MSG_RESULT(no); ac_have_issock=no], [AC_MSG_RESULT(no); ac_have_issock=no],
[AC_MSG_RESULT(no); ac_have_issock=no]) [AC_MSG_RESULT(no); ac_have_issock=no])
AC_MSG_CHECKING([for struct timespec])
AC_COMPILE_IFELSE([AC_LANG_PROGRAM([
#ifdef HAVE_SYS_TIME_H
#include <sys/time.h>
#endif
],[struct timespec ts;])],
[ AC_MSG_RESULT(yes); AC_DEFINE(HAVE_STRUCT_TIMESPEC, [], [Define this if you have struct timespec]) ],
[ AC_MSG_RESULT(no) ])
dnl empty_array_size dnl empty_array_size
AC_MSG_CHECKING([how to create empty arrays]) AC_MSG_CHECKING([how to create empty arrays])
@@ -272,6 +281,49 @@ dnl empty_array_size
dnl bitfield order dnl bitfield order
AC_MSG_CHECKING(bitfield ordering in structs) AC_MSG_CHECKING(bitfield ordering in structs)
dnl First see whether we can work out ordering without running a program --
dnl for instance, when cross-compiling
boring_CFLAGS="$CFLAGS"
CFLAGS="$CFLAGS -O2"
AC_LINK_IFELSE([
int conftest_undefined_reference_();
int main() {
union {
unsigned int x;
struct {
unsigned int x0: 1;
unsigned int x1: 31;
} s;
} u;
u.x = 0;
u.s.x0 = 1;
if (u.x == 1)
return conftest_undefined_reference_();
return 0;
}
], [bf_lsbf=0])
AC_LINK_IFELSE([
int conftest_undefined_reference_();
int main() {
union {
unsigned int x;
struct {
unsigned int x0: 1;
unsigned int x1: 31;
} s;
} u;
u.x = 0;
u.s.x0 = 1;
if (u.x == 0x80000000)
return conftest_undefined_reference_();
return 0;
}
], [bf_lsbf=1])
CFLAGS="$boring_CFLAGS"
dnl If we haven't found out for certain yet, try the runtime test
if test "x$bf_lsbf" = "x"; then
AC_TRY_RUN([ AC_TRY_RUN([
int int
main() { main() {
@@ -293,6 +345,7 @@ main() {
if (sizeof (bf) != 1) return 1; if (sizeof (bf) != 1) return 1;
return *((unsigned char*) &bf) != 0xa5; } return *((unsigned char*) &bf) != 0xa5; }
], bf_lsbf=0, AC_MSG_ERROR([unsupported bitfield ordering]))) ], bf_lsbf=0, AC_MSG_ERROR([unsupported bitfield ordering])))
fi
if test "x$bf_lsbf" = "x1"; then if test "x$bf_lsbf" = "x1"; then
AC_MSG_RESULT(LSBF) AC_MSG_RESULT(LSBF)
AC_DEFINE(BITFIELD_LSBF, [], [compiler does least-significant bit first in struct bitfields]) AC_DEFINE(BITFIELD_LSBF, [], [compiler does least-significant bit first in struct bitfields])
@@ -474,7 +527,7 @@ int has_timeout=sizeof(test.timeout);],
esac esac
AC_MSG_CHECKING(extern long timezone variable) AC_MSG_CHECKING(extern long timezone variable)
AC_TRY_RUN([ AC_LINK_IFELSE([
#ifdef NEED_TIMEZONEVAR #ifdef NEED_TIMEZONEVAR
#define timezonevar 1 #define timezonevar 1
#endif #endif

View File

@@ -1,5 +1,5 @@
/* /*
$Id: gnu_linux.c,v 1.30 2008/04/22 15:29:12 karl Exp $ $Id: gnu_linux.c,v 1.31 2008/04/24 07:28:00 rocky Exp $
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org> Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
Copyright (C) 2002, 2003, 2004, 2005, 2006, 2008 Copyright (C) 2002, 2003, 2004, 2005, 2006, 2008
@@ -27,7 +27,7 @@
# include "config.h" # include "config.h"
#endif #endif
static const char _rcsid[] = "$Id: gnu_linux.c,v 1.30 2008/04/22 15:29:12 karl Exp $"; static const char _rcsid[] = "$Id: gnu_linux.c,v 1.31 2008/04/24 07:28:00 rocky Exp $";
#ifdef HAVE_STRING_H #ifdef HAVE_STRING_H
#include <string.h> #include <string.h>
@@ -45,9 +45,9 @@ static const char _rcsid[] = "$Id: gnu_linux.c,v 1.30 2008/04/22 15:29:12 karl E
#ifdef HAVE_LINUX_CDROM #ifdef HAVE_LINUX_CDROM
#include <limits.h>
#include <sys/types.h> #include <sys/types.h>
#include <sys/wait.h> #include <sys/wait.h>
#include <limits.h>
#if defined(HAVE_LINUX_VERSION_H) #if defined(HAVE_LINUX_VERSION_H)
# include <linux/version.h> # include <linux/version.h>

View File

@@ -1,5 +1,5 @@
/* /*
$Id: xa.c,v 1.7 2008/04/18 16:02:10 karl Exp $ $Id: xa.c,v 1.8 2008/04/24 07:28:00 rocky Exp $
Copyright (C) 2003, 2005, 2008 Rocky Bernstein <rocky@panix.com> Copyright (C) 2003, 2005, 2008 Rocky Bernstein <rocky@panix.com>
Copyright (C) 2000 Herbert Valerio Riedel <hvr@gnu.org> Copyright (C) 2000 Herbert Valerio Riedel <hvr@gnu.org>
@@ -162,11 +162,19 @@ iso9660_get_posix_filemode_from_xa(uint16_t i_perms)
if (i_perms & XA_PERM_RUSR) mode |= S_IRUSR; if (i_perms & XA_PERM_RUSR) mode |= S_IRUSR;
if (i_perms & XA_PERM_XUSR) mode |= S_IXUSR; if (i_perms & XA_PERM_XUSR) mode |= S_IXUSR;
#ifdef S_IRGRP
if (i_perms & XA_PERM_RGRP) mode |= S_IRGRP; if (i_perms & XA_PERM_RGRP) mode |= S_IRGRP;
#endif
#ifdef S_IXGRP
if (i_perms & XA_PERM_XGRP) mode |= S_IXGRP; if (i_perms & XA_PERM_XGRP) mode |= S_IXGRP;
#endif
#ifdef S_IROTH
if (i_perms & XA_PERM_ROTH) mode |= S_IROTH; if (i_perms & XA_PERM_ROTH) mode |= S_IROTH;
#endif
#ifdef S_IXOTH
if (i_perms & XA_PERM_XOTH) mode |= S_IXOTH; if (i_perms & XA_PERM_XOTH) mode |= S_IXOTH;
#endif
if (i_perms & XA_ATTR_DIRECTORY) mode |= S_IFDIR; if (i_perms & XA_ATTR_DIRECTORY) mode |= S_IFDIR;

View File

@@ -1,5 +1,5 @@
/* /*
$Id: udf.c,v 1.12 2008/04/18 16:02:10 karl Exp $ $Id: udf.c,v 1.13 2008/04/24 07:28:00 rocky Exp $
Copyright (C) 2005, 2008 Rocky Bernstein <rocky@gnu.org> Copyright (C) 2005, 2008 Rocky Bernstein <rocky@gnu.org>
@@ -63,13 +63,17 @@ udf_get_posix_filemode(const udf_dirent_t *p_udf_dirent)
if (i_perms & FE_PERM_U_WRITE) mode |= S_IWUSR; if (i_perms & FE_PERM_U_WRITE) mode |= S_IWUSR;
if (i_perms & FE_PERM_U_EXEC) mode |= S_IXUSR; if (i_perms & FE_PERM_U_EXEC) mode |= S_IXUSR;
#ifdef S_IRGRP
if (i_perms & FE_PERM_G_READ) mode |= S_IRGRP; if (i_perms & FE_PERM_G_READ) mode |= S_IRGRP;
if (i_perms & FE_PERM_G_WRITE) mode |= S_IWGRP; if (i_perms & FE_PERM_G_WRITE) mode |= S_IWGRP;
if (i_perms & FE_PERM_G_EXEC) mode |= S_IXGRP; if (i_perms & FE_PERM_G_EXEC) mode |= S_IXGRP;
#endif
#ifdef S_IROTH
if (i_perms & FE_PERM_O_READ) mode |= S_IROTH; if (i_perms & FE_PERM_O_READ) mode |= S_IROTH;
if (i_perms & FE_PERM_O_WRITE) mode |= S_IWOTH; if (i_perms & FE_PERM_O_WRITE) mode |= S_IWOTH;
if (i_perms & FE_PERM_O_EXEC) mode |= S_IXOTH; if (i_perms & FE_PERM_O_EXEC) mode |= S_IXOTH;
#endif
switch (udf_fe.icb_tag.file_type) { switch (udf_fe.icb_tag.file_type) {
case ICBTAG_FILE_TYPE_DIRECTORY: case ICBTAG_FILE_TYPE_DIRECTORY:
@@ -78,24 +82,30 @@ udf_get_posix_filemode(const udf_dirent_t *p_udf_dirent)
case ICBTAG_FILE_TYPE_REGULAR: case ICBTAG_FILE_TYPE_REGULAR:
mode |= S_IFREG; mode |= S_IFREG;
break; break;
#ifdef S_IFLNK
case ICBTAG_FILE_TYPE_SYMLINK: case ICBTAG_FILE_TYPE_SYMLINK:
mode |= S_IFLNK; mode |= S_IFLNK;
break; break;
#endif
case ICBTAG_FILE_TYPE_CHAR: case ICBTAG_FILE_TYPE_CHAR:
mode |= S_IFCHR; mode |= S_IFCHR;
break; break;
#ifdef S_IFSOCK
case ICBTAG_FILE_TYPE_SOCKET: case ICBTAG_FILE_TYPE_SOCKET:
mode |= S_IFSOCK; mode |= S_IFSOCK;
break; break;
#endif
case ICBTAG_FILE_TYPE_BLOCK: case ICBTAG_FILE_TYPE_BLOCK:
mode |= S_IFBLK; mode |= S_IFBLK;
break; break;
default: ; default: ;
}; };
#ifdef S_ISUID
if (i_flags & ICBTAG_FLAG_SETUID) mode |= S_ISUID; if (i_flags & ICBTAG_FLAG_SETUID) mode |= S_ISUID;
if (i_flags & ICBTAG_FLAG_SETGID) mode |= S_ISGID; if (i_flags & ICBTAG_FLAG_SETGID) mode |= S_ISGID;
if (i_flags & ICBTAG_FLAG_STICKY) mode |= S_ISVTX; if (i_flags & ICBTAG_FLAG_STICKY) mode |= S_ISVTX;
#endif
} }
return mode; return mode;

View File

@@ -1,5 +1,5 @@
/* /*
$Id: udf_time.c,v 1.9 2008/04/18 16:02:10 karl Exp $ $Id: udf_time.c,v 1.10 2008/04/24 07:28:00 rocky Exp $
Copyright (C) 2005, 2008 Rocky Bernstein <rocky@gnu.org> Copyright (C) 2005, 2008 Rocky Bernstein <rocky@gnu.org>
Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc. Copyright (C) 1993, 1994, 1995, 1996, 1997 Free Software Foundation, Inc.
@@ -148,7 +148,7 @@ udf_stamp_to_time(time_t *dest, long int *dest_usec,
return dest; return dest;
} }
#ifdef HAVE_STRUCT_TIMESPEC
/*! /*!
Convert a UDF timestamp to a time_t. If microseconds are desired, Convert a UDF timestamp to a time_t. If microseconds are desired,
use dest_usec. The return value is the same as dest. */ use dest_usec. The return value is the same as dest. */
@@ -206,6 +206,7 @@ udf_timespec_to_stamp(const struct timespec ts, udf_timestamp_t *dest)
- (dest->hundreds_of_microseconds * 100) ); - (dest->hundreds_of_microseconds * 100) );
return dest; return dest;
} }
#endif
/*! /*!
Return the modification time of the file. Return the modification time of the file.

View File

@@ -1,4 +1,4 @@
# $Id: Makefile.am,v 1.45 2008/03/20 19:02:38 karl Exp $ # $Id: Makefile.am,v 1.46 2008/04/24 07:28:00 rocky Exp $
# #
# Copyright (C) 2003, 2004, 2006, 2008 Rocky Bernstein <rocky@gnu.org> # Copyright (C) 2003, 2004, 2006, 2008 Rocky Bernstein <rocky@gnu.org>
# #
@@ -17,11 +17,6 @@
GETOPT_C = getopt.c getopt1.c GETOPT_C = getopt.c getopt1.c
man_MANS = cd-drive.1 cd-info.1 cd-read.1 iso-read.1 iso-info.1
EXTRA_DIST = cd-drive.help2man cd-info.help2man cd-read.help2man \
iso-info.help2man iso-read.help2man $(GETOPT_C) getopt.h \
$(man_MANS)
noinst_HEADERS = cddb.h getopt.h util.h noinst_HEADERS = cddb.h getopt.h util.h
#################################################### ####################################################
@@ -35,10 +30,6 @@ endif
CDDB_LIBS=@CDDB_LIBS@ CDDB_LIBS=@CDDB_LIBS@
CDDA_PLAYER_LIBS=@CDDA_PLAYER_LIBS@ CDDA_PLAYER_LIBS=@CDDA_PLAYER_LIBS@
$(man_MANS): %.1: % %.help2man
-$(HELP2MAN) --opt-include=$<.help2man --no-info --output=$@ ./$<
MOSTLYCLEANFILES = $(man_MANS)
if BUILD_CDDA_PLAYER if BUILD_CDDA_PLAYER
cdda_player_SOURCES = cdda-player.c cddb.c cddb.h $(GETOPT_C) cdda_player_SOURCES = cdda-player.c cddb.c cddb.h $(GETOPT_C)
cdda_player_LDADD = $(LIBCDIO_LIBS) $(CDDB_LIBS) $(CDDA_PLAYER_LIBS) cdda_player_LDADD = $(LIBCDIO_LIBS) $(CDDB_LIBS) $(CDDA_PLAYER_LIBS)
@@ -49,12 +40,14 @@ if BUILD_CD_DRIVE
cd_drive_SOURCES = cd-drive.c util.c util.h $(GETOPT_C) cd_drive_SOURCES = cd-drive.c util.c util.h $(GETOPT_C)
cd_drive_LDADD = $(LIBISO9660_LIBS) $(LIBCDIO_LIBS) $(LIBICONV) cd_drive_LDADD = $(LIBISO9660_LIBS) $(LIBCDIO_LIBS) $(LIBICONV)
bin_cd_drive = cd-drive bin_cd_drive = cd-drive
man_cd_drive = cd-drive.1
endif endif
if BUILD_CDINFO if BUILD_CDINFO
cd_info_SOURCES = cd-info.c cddb.c cddb.h util.c util.h $(GETOPT_C) cd_info_SOURCES = cd-info.c cddb.c cddb.h util.c util.h $(GETOPT_C)
cd_info_LDADD = $(LIBISO9660_LIBS) $(LIBCDIO_LIBS) $(CDDB_LIBS) $(VCDINFO_LIBS) $(LIBICONV) cd_info_LDADD = $(LIBISO9660_LIBS) $(LIBCDIO_LIBS) $(CDDB_LIBS) $(VCDINFO_LIBS) $(LIBICONV)
bin_cd_info = cd-info bin_cd_info = cd-info
man_cd_info = cd-info.1
endif endif
if BUILD_CDINFO_LINUX if BUILD_CDINFO_LINUX
@@ -67,18 +60,21 @@ if BUILD_CD_READ
cd_read_SOURCES = cd-read.c util.c util.h $(GETOPT_C) cd_read_SOURCES = cd-read.c util.c util.h $(GETOPT_C)
cd_read_LDADD = $(LIBISO9660_LIBS) $(LIBCDIO_LIBS) $(LIBICONV) cd_read_LDADD = $(LIBISO9660_LIBS) $(LIBCDIO_LIBS) $(LIBICONV)
bin_cd_read = cd-read bin_cd_read = cd-read
man_cd_read = cd-read.1
endif endif
if BUILD_ISO_INFO if BUILD_ISO_INFO
iso_info_SOURCES = iso-info.c util.c util.h $(GETOPT_C) iso_info_SOURCES = iso-info.c util.c util.h $(GETOPT_C)
iso_info_LDADD = $(LIBISO9660_LIBS) $(LIBCDIO_LIBS) $(LIBICONV) iso_info_LDADD = $(LIBISO9660_LIBS) $(LIBCDIO_LIBS) $(LIBICONV)
bin_iso_info = iso-info bin_iso_info = iso-info
man_iso_info = iso-info.1
endif endif
if BUILD_ISO_READ if BUILD_ISO_READ
iso_read_SOURCES = iso-read.c util.c util.h $(GETOPT_C) iso_read_SOURCES = iso-read.c util.c util.h $(GETOPT_C)
iso_read_LDADD = $(LIBISO9660_LIBS) $(LIBCDIO_LIBS) $(LIBICONV) iso_read_LDADD = $(LIBISO9660_LIBS) $(LIBCDIO_LIBS) $(LIBICONV)
bin_iso_read = iso-read bin_iso_read = iso-read
man_iso_read = iso-read.1
endif endif
mmc_tool_SOURCES = mmc-tool.c util.c util.h $(GETOPT_C) mmc_tool_SOURCES = mmc-tool.c util.c util.h $(GETOPT_C)
@@ -88,3 +84,12 @@ bin_mmc_tool = mmc-tool
bin_PROGRAMS = $(bin_cd_drive) $(bin_cd_info) $(bin_cdinfo_linux) $(bin_cd_read) $(bin_iso_info) $(bin_iso_read) $(bin_cdda_player) $(bin_mmc_tool) bin_PROGRAMS = $(bin_cd_drive) $(bin_cd_info) $(bin_cdinfo_linux) $(bin_cd_read) $(bin_iso_info) $(bin_iso_read) $(bin_cdda_player) $(bin_mmc_tool)
INCLUDES = -I$(top_srcdir) $(LIBCDIO_CFLAGS) $(VCDINFO_CFLAGS) $(CDDB_CFLAGS) INCLUDES = -I$(top_srcdir) $(LIBCDIO_CFLAGS) $(VCDINFO_CFLAGS) $(CDDB_CFLAGS)
man_MANS = $(man_cd_drive) $(man_cd_info) $(man_cd_read) $(man_iso_read) $(man_iso_info)
EXTRA_DIST = cd-drive.help2man cd-info.help2man cd-read.help2man \
iso-info.help2man iso-read.help2man $(GETOPT_C) getopt.h \
$(man_MANS)
$(man_MANS): %.1: % %.help2man
-$(HELP2MAN) --opt-include=$<.help2man --no-info --output=$@ ./$<
MOSTLYCLEANFILES = $(man_MANS)