diff --git a/README.libcdio b/README.libcdio index eb0ab97f..b69cc461 100644 --- a/README.libcdio +++ b/README.libcdio @@ -2,7 +2,7 @@ See README.develop if you plan use the git or development version. 0. To compile the source, you'll need a POSIX shell and utilities (sh, sed, grep, cat), an ANSI C compiler like gcc, and a POSIX "make" -program like GNU make. You may also want to have "libtool" installed +program like GNU make or remake. You may also want to have "libtool" installed for building portable shared libraries. 1. Uncompress and unpack the source code using for example "tar". Recent @@ -12,7 +12,7 @@ versions of GNU tar can do this in one step like this: 2. Go into the directory, run "configure" followed by "make": cd libcdio-* - sh ./configure MAKE=make # or gmake or remake + sh ./configure MAKE=make # or remake or gmake 3. If step 2 works, compile everything: @@ -79,11 +79,12 @@ XBOX Consult the xboxmediacenter team (www.xboxmediacenter.de) -BSD +BSD, FreeBSD, NetBSD --- Unless you use --without-versioned-libs (not recommended), you need to -use GNU make which usually can be found under the name "gmake". +use GNU make or remake (http://bashdb.sf.net/remake). GNU make can be +found under the name "gmake". If you use another make you are likely to get problems linking libcdio and libiso9660. diff --git a/doc/libcdio.texi b/doc/libcdio.texi index dd0346d1..d29bb85a 100644 --- a/doc/libcdio.texi +++ b/doc/libcdio.texi @@ -1116,6 +1116,7 @@ Other sources for examples would be the larger utility programs @xref{Utility Programs}. @menu +* Include problem:: A note about including * Example 1:: list out tracks and LSNs * Example 2:: list drivers available and default CD device * Example 3:: figure out what kind of CD (image) we've got @@ -1126,6 +1127,77 @@ Other sources for examples would be the larger utility programs * All sample programs:: list of all programs in the example directory @end menu +@node Include problem +@section A note about including @code{} + +libcdio installs @code{}. This file contains all of +the C Preprocessor values from @code{config.h} (created by configure). + +This header can be used to consult exactly how libcdio was built. Initially +I had selected ``interesting'' values, but this became too hard to maintain. + +One set of values that libdio needs internally is the whether the CPU +that was used to compile libcdio is BigEndian or not; it can get this +from libcdio's @code{config.h} which is not installed and preferred or +@code{cdio/cdio_config.h}. + +Some of the libcdio programs like the demo programs include +@code{config.h} for the generic reasons that the configuration-created +@code{config.h} file is used: to figure out what headers are available. +For example, do we have @code{}? + +The file @code{config.h} is generated by an autotools-generated +@code{configure} script. It doesn't check to see if it has been included +previously. + +Later, the demo programs include @code{} to get libcdio headers. +But because libcdio needs some of the same information like the BigEndian +value, this creates a duplicate include. + +The way I get around this in the demo programs is by defining @code{__CDIO_CONFIG_H__} after +including @code{config.h} as follows: + +@smallexample +#ifdef HAVE_CONFIG_H +# include "config.h" +# define __CDIO_CONFIG_H__ 1 +#endif +@end smallexample + +Applications using libcdio may find it handy to do something like this as well. + +Defining @code{__CDIO_CONFIG_H__} will make sure @code{config_cdio.h} +which is internally used, doesn't try to redefine preprocessor symbols. + +Ok. But now what about the problem that there are common preprocessor +symbols in @code{config_cdio.h} that an application may want to define in a +different manner, like @code{PACKAGE_NAME}? + +For this, there is yet another header, @code{}. +This file undefines any symbol that @code{config.h} defines. And now we +bounce to the problem that there may be symbols that are normally +defined (@code{HAVE_UNISTD_H}) and you want to keep that way, but others that +you don't. So here is what I suggest: + +@smallexample + // for cdio: + #include + #include # remove *all* symbols libcdio defines + + // Add back in the ones you want your program + #include +@end smallexample + +The solution isn't the most simple or natural, but programming sometimes can +be difficult. If someone has a better solution, let me know. + +Between header files @code{cdio_config.h} and @code{cdio_unconfig.h} and +all the fact that almost all headers@footnote{@code{} is +one of the few headers that doesn't set a preprocessor symbol: it does +its thing every time it is @code{#included}} define a symbol to indicate they +have been included, I think there is enough mechanism to cover most +situations that may arise. + @node Example 1 @section Example 1: list out tracks and LSNs Here we will give an annotated example which can be found in the @@ -1445,7 +1517,7 @@ main(int argc, const char *argv[]) Next a program to show using @command{libiso9660} to extract a file from an ISO-9660 image. This can be found in the distribution as -@file{example/iso3.c}. A more complete and expanded version of this +@file{example/isofile.c}. A more complete and expanded version of this is @command{iso-read}, part of this distribution. @smallexample @@ -1641,6 +1713,7 @@ This can be found in the distribution as @file{example/mmc1.c}. @smallexample #ifdef HAVE_CONFIG_H # include "config.h" +# define __CDIO_CONFIG_H__ 1 /* assumes config.h is libcdio's config.h / #endif #include #include @@ -1701,6 +1774,13 @@ main(int argc, const char *argv[]) @} @end smallexample +Note the include of @code{#define} of @code{__CDIO_CONFIG_H__} towards +the beginning. This is useful if the prior @code{#include} of +@code{config.h} refers to libcdio's configuration header. It indicates +that libcdio's configuration settings have been used. Without it, you +may get messages about C Preprocessor symbols getting redefined in the +@code{#include} of @code{}. + @node Example 7 @section Example 7: Using the CD Paranoia library for CD-DA reading @@ -1708,9 +1788,12 @@ The below program reads CD-DA data. For a more complete program to add a WAV header so that the CD can be played from a copy on a hard disk, see the corresponding distribution program. +This can be found in the distribution as @file{example/paranoia.c}. + @smallexample #ifdef HAVE_CONFIG_H # include "config.h" +# define __CDIO_CONFIG_H__ 1 /* assumes config.h is libcdio's config.h / #endif #include @@ -1841,10 +1924,18 @@ Descriptions of the sample are as follows... @table @code +@item @code{audio.c} + +A program to show audio controls. + @item @code{cdchange.c} A program to test if a CD has been changed since the last change test. +@item @code{cd-eject.c} + +A a stripped-down "eject" command to open or close a CD-ROM tray. + @item @code{cdtext.c} A program to show CD-Text and CD disc mode info. @@ -1858,6 +1949,22 @@ is and what CD drives are available. A program eject a CD from a CD-ROM drive and then close the door again. +@item @code{isofile.c} + +A program to show using libiso9660 to extract a file from an ISO-9660 image. + +@item @code{isofile2.c} + +A program to show using libiso9660 to extract a file from a CDRWIN cue/bin CD image. + +@item @code{C++/isofile2.cpp} + +The same program as @code{isofile2.c} written in C++. + +@item @code{isofuzzy.c} + +A program showing fuzzy ISO-9660 detection/reading. + @item @code{isolist.c} A program to show using @code{libiso9660} to list files in a @@ -1867,23 +1974,9 @@ A program to show using @code{libiso9660} to list files in a The same program as @code{isolist.c} written in C++. -@item @code{iso2.c} +@item @code{C++/isolist.cpp} -A program to show using @code{libiso9660} to extract a file from a -CDRWIN cue/bin CD image. - -@item @code{C++/iso2.cpp} - -The same program as @code{iso2.c} written in C++. - -@item @code{iso3.c} - -A program to show using libiso9660 to extract a file from an ISO-9660 -image. - -@item @code{C++/iso3.cpp} - -The same program as @code{iso3.c} written in C++. +The same program as @code{isolist.c} written in C++. @item @code{isofuzzy.c} diff --git a/example/isofile.c b/example/isofile.c index 4878fb32..281408d6 100644 --- a/example/isofile.c +++ b/example/isofile.c @@ -1,6 +1,4 @@ /* - $Id: isofile.c,v 1.2 2008/03/24 15:30:55 karl Exp $ - Copyright (C) 2004, 2005, 2006, 2008, 2009 Rocky Bernstein This program is free software: you can redistribute it and/or modify