[MacPorts] #37457: mediatomb @0.12.1 config and build failure due to updated autoconf and ffmpeg

MacPorts noreply at macports.org
Sun Dec 30 12:57:23 PST 2012


#37457: mediatomb @0.12.1 config and build failure due to updated autoconf and
ffmpeg
-----------------------+--------------------------------
 Reporter:  bufflig@…  |      Owner:  macports-tickets@…
     Type:  defect     |     Status:  new
 Priority:  Normal     |  Milestone:
Component:  ports      |    Version:  2.1.2
 Keywords:             |       Port:  mediatomb
-----------------------+--------------------------------
 I've had problems compiling mediatomb, that probably boil down to new
 versions of autoconf and ffmpeg library. Maybe also because I have ffmpeg-
 devel, I'm not sure.

 First, the port fails with:
 -----------
 {{{
 :debug:configure Executing command line:  cd
 "/opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_net_mediatomb/mediatomb/work/mediatomb-0.12.1"
 && autoreconf --install
 :info:configure configure.ac:33: warning: macro 'AM_CONFIG_HEADER' not
 found in library
 [...]
 :info:configure configure.ac:1781: the top level
 :info:configure configure.ac:33: error: possibly undefined macro:
 AM_CONFIG_HEADER
 :info:configure       If this token and others are legitimate, please use
 m4_pattern_allow.
 :info:configure       See the Autoconf documentation.
 }}}
 ----------------

 - which is a pretty common problem. If one fixes the configure.ac:

 ----------------
 {{{
 *** ./configure.ac.orig 2012-12-30 21:20:47.000000000 +0100
 --- configure.ac        2012-12-30 21:21:17.000000000 +0100
 ***************
 *** 30,36 ****

   AC_PREREQ(2.61)
   AC_INIT([MediaTomb], [0.12.1], [jin at mediatomb.cc])
 ! AM_CONFIG_HEADER([autoconfig.h tombupnp/upnp/inc/upnpconfig.h])
   AC_CONFIG_AUX_DIR(configure_aux)
   AC_CONFIG_SRCDIR([src/common.h])
   AM_INIT_AUTOMAKE([1.9 -Wall])
 --- 30,36 ----

   AC_PREREQ(2.61)
   AC_INIT([MediaTomb], [0.12.1], [jin at mediatomb.cc])
 ! AC_CONFIG_HEADERS([autoconfig.h tombupnp/upnp/inc/upnpconfig.h])
   AC_CONFIG_AUX_DIR(configure_aux)
   AC_CONFIG_SRCDIR([src/common.h])
   AM_INIT_AUTOMAKE([1.9 -Wall])
 }}}
 ----------------

 - one will get into new trouble:
 ----------------
 {{{
 :info:build mv -f .deps/libmediatomb_a-main.Tpo .deps/libmediatomb_a-
 main.Po
 :info:build ../src/metadata/ffmpeg_handler.cc: In function ?<80><98>void
 addFfmp
 egMetadataFields(zmm::Ref<CdsItem>, AVFormatContext*)?<80><99>:
 :info:build ../src/metadata/ffmpeg_handler.cc:92: error: ?<80><98>struct
 AVForma
 tContext?<80><99> has no member named ?<80><98>title?<80><99>
 :info:build ../src/metadata/ffmpeg_handler.cc:94: error: ?<80><98>struct
 AVForma
 tContext?<80><99> has no member named ?<80><98>title?<80><99>
 :info:build ../src/metadata/ffmpeg_handler.cc:96: error: ?<80><98>struct
 AVForma
 tContext?<80><99> has no member named ?<80><98>title?<80><99>
 :info:build ../src/metadata/ffmpeg_handler.cc:98: error: ?<80><98>struct
 AVForma
 tContext?<80><99> has no member named ?<80><98>author?<80><99>
 :info:build ../src/metadata/ffmpeg_handler.cc:100: error: ?<80><98>struct
 AVForm
 atContext?<80><99> has no member named ?<80><98>author?<80><99>
 :info:build ../src/metadata/ffmpeg_handler.cc:102: error: ?<80><98>struct
 AVForm
 atContext?<80><99> has no member named ?<80><98>author?<80><99>
 :info:build ../src/metadata/ffmpeg_handler.cc:104: error: ?<80><98>struct
 AVForm
 atContext?<80><99> has no member named ?<80><98>album?<80><99>
 :info:build ../src/metadata/ffmpeg_handler.cc:106: error: ?<80><98>struct
 AVForm
 atContext?<80><99> has no member named ?<80><98>album?<80><99>
 :info:build ../src/metadata/ffmpeg_handler.cc:108: error: ?<80><98>struct
 AVForm
 atContext?<80><99> has no member named ?<80><98>album?<80><99>
 :info:build ../src/metadata/ffmpeg_handler.cc:110: error: ?<80><98>struct
 AVForm
 atContext?<80><99> has no member named ?<80><98>year?<80><99>
 :info:build ../src/metadata/ffmpeg_handler.cc:112: error: ?<80><98>struct
 AVForm
 atContext?<80><99> has no member named ?<80><98>year?<80><99>
 :info:build ../src/metadata/ffmpeg_handler.cc:114: error: ?<80><98>struct
 AVForm
 atContext?<80><99> has no member named ?<80><98>year?<80><99>
 :info:build /usr/bin/llvm-g++-4.2 -DHAVE_CONFIG_H -I. -I..
 -I../tombupnp/upnp/in
 c   -I/opt/local/include -I../src -I../tombupnp/ixml/inc
 -I../tombupnp/threaduti
 l/inc -I../tombupnp/upnp/inc -I..   -I/opt/local/include/js
 -I/opt/local/include
 /taglib       -D_THREAD_SAFE     -I/opt/local/include    -pipe -O2 -arch
 x86_64
 -MT libmediatomb_a-id3_handler.o -MD -MP -MF .deps/libmediatomb_a-
 id3_handler.Tp
 o -c -o libmediatomb_a-id3_handler.o `test -f
 '../src/metadata/id3_handler.cc' |
 | echo './'`../src/metadata/id3_handler.cc
 :info:build ../src/metadata/ffmpeg_handler.cc:116: error: ?<80><98>struct
 AVForm
 atContext?<80><99> has no member named ?<80><98>genre?<80><99>
 :info:build ../src/metadata/ffmpeg_handler.cc:118: error: ?<80><98>struct
 AVFormatContext?<80><99> has no member named ?<80><98>genre?<80><99>
 :info:build ../src/metadata/ffmpeg_handler.cc:120: error: ?<80><98>struct
 AVFormatContext?<80><99> has no member named ?<80><98>genre?<80><99>
 :info:build ../src/metadata/ffmpeg_handler.cc:122: error: ?<80><98>struct
 AVFormatContext?<80><99> has no member named ?<80><98>comment?<80><99>
 :info:build ../src/metadata/ffmpeg_handler.cc:124: error: ?<80><98>struct
 AVFormatContext?<80><99> has no member named ?<80><98>comment?<80><99>
 :info:build ../src/metadata/ffmpeg_handler.cc:126: error: ?<80><98>struct
 AVFormatContext?<80><99> has no member named ?<80><98>comment?<80><99>
 :info:build ../src/metadata/ffmpeg_handler.cc:128: error: ?<80><98>struct
 AVFormatContext?<80><99> has no member named ?<80><98>track?<80><99>
 :info:build ../src/metadata/ffmpeg_handler.cc:130: error: ?<80><98>struct
 AVFormatContext?<80><99> has no member named ?<80><98>track?<80><99>
 :info:build ../src/metadata/ffmpeg_handler.cc:132: error: ?<80><98>struct
 AVFormatContext?<80><99> has no member named ?<80><98>track?<80><99>
 :info:build ../src/metadata/ffmpeg_handler.cc: In function ?<80><98>void
 addFfmpegResourceFields(zmm::Ref<CdsItem>, AVFormatContext*, int*,
 int*)?<80><99>:
 :info:build ../src/metadata/ffmpeg_handler.cc:181: error:
 ?<80><98>CODEC_TYPE_VIDEO?<80><99> was not declared in this scope
 :info:build ../src/metadata/ffmpeg_handler.cc:212: error:
 ?<80><98>CODEC_TYPE_AUDIO?<80><99> was not declared in this scope
 :info:build ../src/metadata/ffmpeg_handler.cc: In member function
 ?<80><98>virtual void
 FfmpegHandler::fillMetadata(zmm::Ref<CdsItem>)?<80><99>:
 :info:build ../src/metadata/ffmpeg_handler.cc:264: error:
 ?<80><98>av_open_input_file?<80><99> was not declared in this scope
 :info:build ../src/metadata/ffmpeg_handler.cc:268: warning:
 ?<80><98>av_find_stream_info?<80><99> is deprecated (declared at
 /opt/local/include/libavformat/avformat.h:1446)
 :info:build ../src/metadata/ffmpeg_handler.cc:268: warning:
 ?<80><98>av_find_stream_info?<80><99> is deprecated (declared at
 /opt/local/include/libavformat/avformat.h:1446)
 :info:build ../src/metadata/ffmpeg_handler.cc:270: warning:
 ?<80><98>av_close_in
 av_close_input_file?<80><99> is deprecated (declared at
 /opt/local/include/libavformat/avformat.h:1622)
 :info:build ../src/metadata/ffmpeg_handler.cc:270: warning:
 ?<80><98>av_close_input_file?<80><99> is deprecated (declared at
 /opt/local/include/libavformat/avformat.h:1622)
 :info:build ../src/metadata/ffmpeg_handler.cc:279: warning:
 ?<80><98>av_close_input_file?<80><99> is deprecated (declared at
 /opt/local/include/libavformat/avformat.h:1622)
 :info:build ../src/metadata/ffmpeg_handler.cc:279: warning:
 ?<80><98>av_close_input_file?<80><99> is deprecated (declared at
 /opt/local/include/libavformat/avformat.h:1622)
 :info:build make[2]: *** [libmediatomb_a-ffmpeg_handler.o] Error 1
 }}}
 ------------------

 - which should be due to the change in ffmpeg's API, why one can search
 the net for two patches that will fix this and apply them, resulting in...

 --------------------------
 {{{
 *** src/metadata/ffmpeg_handler.cc.orig 2012-12-30 21:30:34.000000000
 +0100
 --- src/metadata/ffmpeg_handler.cc      2012-12-30 21:29:41.000000000
 +0100
 ***************
 *** 89,94 ****
 --- 89,121 ----

         Ref<StringConverter> sc = StringConverter::m2i();

 +       /* Tabs are 4 characters here */
 +       typedef struct {const char *avname; metadata_fields_t field;}
 mapping_t;
 +       static const mapping_t mapping[] =
 +       {
 +               {"title",   M_TITLE},
 +               {"artist",  M_ARTIST},
 +               {"album",   M_ALBUM},
 +               {"date",    M_DATE},
 +               {"genre",   M_GENRE},
 +               {"comment", M_DESCRIPTION},
 +               {"track",   M_TRACKNUMBER},
 +               {NULL,      M_MAX},
 +       };
 +
 +       if (!pFormatCtx->metadata)
 +               return;
 +       for (const mapping_t *m = mapping; m->avname != NULL; m++)
 +       {
 +               AVDictionaryEntry *tag = NULL;
 +               tag = av_dict_get(pFormatCtx->metadata, m->avname, NULL,
 0);
 +               if (tag && tag->value && tag->value[0])
 +               {
 +                       log_debug("Added metadata %s: %s\n", m->avname,
 tag->value);
 +                       item->setMetadata(MT_KEYS[m->field].upnp,
 sc->convert(tag->value));
 +               }
 +       }
 +       /* Old algorithm (doesn't work with libav >= 0.7)
         if (strlen(pFormatCtx->title) > 0)
       {
             log_debug("Added metadata title: %s\n", pFormatCtx->title);
 ***************
 *** 131,136 ****
 --- 158,164 ----
           item->setMetadata(MT_KEYS[M_TRACKNUMBER].upnp,
                             sc->convert(String::from(pFormatCtx->track)));
         }
 +       */
   }

   // ffmpeg library calls
 ***************
 *** 178,184 ****
         for(i=0; i<pFormatCtx->nb_streams; i++)
       {
                 AVStream *st = pFormatCtx->streams[i];
 !               if((st != NULL) && (videoset == false) &&
 (st->codec->codec_type == CODEC_TYPE_VIDEO))
           {
               if (st->codec->codec_tag > 0)
               {
 --- 206,212 ----
         for(i=0; i<pFormatCtx->nb_streams; i++)
       {
                 AVStream *st = pFormatCtx->streams[i];
 !               if((st != NULL) && (videoset == false) &&
 (st->codec->codec_type == AVMEDIA_TYPE_VIDEO))
           {
               if (st->codec->codec_tag > 0)
               {
 ***************
 *** 209,215 ****
                   *y = st->codec->height;
                         }
                 }
 !               if(st->codec->codec_type == CODEC_TYPE_AUDIO)
           {
                         // Increase number of audiochannels
                         audioch++;
 --- 237,243 ----
                   *y = st->codec->height;
                         }
                 }
 !               if(st->codec->codec_type == AVMEDIA_TYPE_AUDIO)
           {
                         // Increase number of audiochannels
                         audioch++;
 ***************
 *** 251,257 ****
       int x = 0;
       int y = 0;

 !       AVFormatContext *pFormatCtx;

         // Suppress all log messages
         av_log_set_callback(FfmpegNoOutputStub);
 --- 279,285 ----
       int x = 0;
       int y = 0;

 !       AVFormatContext *pFormatCtx = avformat_alloc_context();

         // Suppress all log messages
         av_log_set_callback(FfmpegNoOutputStub);
 ***************
 *** 259,273 ****
         // Register all formats and codecs
       av_register_all();

 !     // Open video file
 !     if (av_open_input_file(&pFormatCtx,
 !                           item->getLocation().c_str(), NULL, 0, NULL) !=
 0)
           return; // Couldn't open file

       // Retrieve stream information
 !     if (av_find_stream_info(pFormatCtx) < 0)
       {
 !         av_close_input_file(pFormatCtx);
           return; // Couldn't find stream information
       }
         // Add metadata using ffmpeg library calls
 --- 287,301 ----
         // Register all formats and codecs
       av_register_all();

 !       // Open video file
 !     if (avformat_open_input(&pFormatCtx,
 !                           item->getLocation().c_str(), NULL, NULL) != 0)
           return; // Couldn't open file

       // Retrieve stream information
 !     if (avformat_find_stream_info(pFormatCtx,NULL) < 0)
       {
 !         avformat_close_input(&pFormatCtx);
           return; // Couldn't find stream information
       }
         // Add metadata using ffmpeg library calls
 ***************
 *** 276,282 ****
         addFfmpegResourceFields(item, pFormatCtx, &x, &y);

       // Close the video file
 !     av_close_input_file(pFormatCtx);
   }

   Ref<IOHandler> FfmpegHandler::serveContent(Ref<CdsItem> item, int
 resNum, off_t *data_size)
 --- 304,310 ----
         addFfmpegResourceFields(item, pFormatCtx, &x, &y);

       // Close the video file
 !     avformat_close_input(&pFormatCtx);
   }

   Ref<IOHandler> FfmpegHandler::serveContent(Ref<CdsItem> item, int
 resNum, off_t *data_size)
 }}}
 --------------------------------
 - and so it builds.

 And my versions...

 {{{
 > port list | grep mediatomb
 mediatomb                      @0.12.1         net/mediatomb
 > port list | grep ffmpeg
 gst-ffmpeg                     @0.10.13        gnome/gst-ffmpeg
 ffmpegthumbs                   @4.9.3          kde/ffmpegthumbs
 ffmpeg                         @1.0.1          multimedia/ffmpeg
 ffmpeg-devel                   @20121205       multimedia/ffmpeg-devel
 > port version
 Version: 2.1.2
 }}}
 Just thought maybe anyone else might get into the same trouble and will
 find this fix useful, or maybe it should in some way be included into
 mediatomb.

 Cheers,
 /Patrik

-- 
Ticket URL: <https://trac.macports.org/ticket/37457>
MacPorts <http://www.macports.org/>
Ports system for Mac OS


More information about the macports-tickets mailing list