Opened 12 years ago

Closed 12 years ago

#37457 closed defect (fixed)

mediatomb @0.12.1 config and build failure due to updated autoconf and ffmpeg

Reported by: bufflig@… Owned by: yattenator@…
Priority: Normal Milestone:
Component: ports Version: 2.1.2
Keywords: Cc: yattenator@…, dbevans (David B. Evans)
Port: mediatomb

Description

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@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@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

Attachments (2)

mediatomb_build.diff (4.9 KB) - added by bufflig@… 12 years ago.
The whole diff that makes it build
patch-mediatomb.diff (4.5 KB) - added by dbevans (David B. Evans) 12 years ago.
Revised patch for Portfile and files directory

Download all attachments as: .zip

Change History (10)

Changed 12 years ago by bufflig@…

Attachment: mediatomb_build.diff added

The whole diff that makes it build

comment:1 Changed 12 years ago by ryandesign (Ryan Carsten Schmidt)

port list shows you what ports are available; port installed shows you what ports you have installed.

comment:2 Changed 12 years ago by jmroot (Joshua Root)

Owner: changed from macports-tickets@… to yattenator@…

Please remember to Cc the maintainer.

comment:3 in reply to:  1 Changed 12 years ago by bufflig@…

Replying to ryandesign@…:

port list shows you what ports are available; port installed shows you what ports you have installed.

Yes, of course - silly me :)

~> port installed | grep ffmpeg | grep active
  ffmpeg @1.0.1_0+gpl2 (active)
  mediatomb @0.12.1_6+ffmpeg+sqlite3+taglib (active)

So I do not have ffmpeg-devel as I thought, this happens without that then, which only makes it worse.

Thanks!

Last edited 12 years ago by bufflig@… (previous) (diff)

comment:4 in reply to:  2 Changed 12 years ago by bufflig@…

Replying to jmr@…:

Please remember to Cc the maintainer.

Oh - sorry, can I change that in retrospect? Don't seem to find an edit button for the original ticket post...

comment:5 Changed 12 years ago by dbevans (David B. Evans)

Cc: yattenator@… added

Attached is a slightly reworked patch that can be applied in the port directory to update the Portfile and patches in the files directory to accomplish the suggested changes.

Note that the ffmpeg part of this ticket duplicates at least part of #36771 which was filed before the upgrade of automake to 1.13. So applying this combined change should close both tickets.

Ccing the port maintainer.

Changed 12 years ago by dbevans (David B. Evans)

Attachment: patch-mediatomb.diff added

Revised patch for Portfile and files directory

comment:6 Changed 12 years ago by dbevans (David B. Evans)

Cc: devans@… added

Cc Me!

comment:7 in reply to:  5 Changed 12 years ago by ryandesign (Ryan Carsten Schmidt)

Replying to devans@…:

Ccing the port maintainer.

The ticket is already assigned to the maintainer, and he hasn't responded for 11 days, so you can go ahead and commit this.

comment:8 Changed 12 years ago by dbevans (David B. Evans)

Resolution: fixed
Status: newclosed

Fix committed in r101437, maintainer timeout.

Note: See TracTickets for help on using tickets.