Samuel Thibault, le Sat 07 Jan 2012 15:37:19 +0100, a écrit : > mplayer currently FTBFS on hurd-i386 due to missing cdparanoia > dependency, and unconditional PATH_MAX usage. The attached patch fixes > both.
I forgot an important bit: optimization selection should be at runtime too. Samuel
--- debian/control.orig 2012-01-07 13:55:04.000000000 +0100 +++ debian/control 2012-01-07 13:55:16.000000000 +0100 @@ -24,7 +24,7 @@ libavutil-dev (>= 4:0.7~), libbluray-dev, libcaca-dev, - libcdparanoia-dev | libcdparanoia0-dev, + libcdparanoia-dev [!hurd-i386]| libcdparanoia0-dev [!hurd-i386], libdirectfb-dev, libdts-dev, libdvdnav-dev, --- debian/rules.orig 2012-01-07 15:40:47.000000000 +0100 +++ debian/rules 2012-01-07 15:40:49.000000000 +0100 @@ -66,6 +66,9 @@ ifeq ($(DEB_HOST_ARCH),kfreebsd-amd64) CONFIGURE_FLAGS += --enable-runtime-cpudetection endif +ifeq ($(DEB_HOST_ARCH),hurd-i386) + CONFIGURE_FLAGS += --enable-runtime-cpudetection +endif ifeq ($(DEB_HOST_ARCH),powerpc) CONFIGURE_FLAGS += --enable-runtime-cpudetection endif --- libmenu/menu_filesel.c.orig 2012-01-07 13:10:05.000000000 +0000 +++ libmenu/menu_filesel.c 2012-01-07 13:13:56.000000000 +0000 @@ -16,6 +16,9 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#ifdef __GNU__ +#define _GNU_SOURCE +#endif #include <stdlib.h> #include <stdio.h> #include <dirent.h> @@ -418,7 +418,11 @@ static int open_fs(menu_t* menu, char* args) { char *path = mpriv->path; int r = 0; +#ifdef __GNU__ + char *wd, *b = NULL; +#else char wd[PATH_MAX+1], b[PATH_MAX+1]; +#endif args = NULL; // Warning kill menu->draw = menu_list_draw; @@ -447,7 +451,11 @@ } } +#ifdef __GNU__ + wd = get_current_dir_name(); +#else getcwd(wd,PATH_MAX); +#endif if (!path || path[0] == '\0') { #if 0 char *slash = NULL; @@ -466,13 +474,24 @@ path = wd; } if (path[0] != '/') { +#ifdef __GNU__ + if(path[strlen(path)-1] != '/') + asprintf(&b,"%s/%s/",wd,path); + else + asprintf(&b,"%s/%s",wd,path); +#else if(path[strlen(path)-1] != '/') snprintf(b,sizeof(b),"%s/%s/",wd,path); else snprintf(b,sizeof(b),"%s/%s",wd,path); +#endif path = b; } else if (path[strlen(path)-1]!='/') { +#ifdef __GNU__ + asprintf(&b,"%s/",path); +#else sprintf(b,"%s/",path); +#endif path = b; } if (menu_chroot && menu_chroot[0] == '/') { @@ -483,13 +502,22 @@ if (menu_chroot[l] == '/') path = menu_chroot; else { +#ifdef __GNU__ + asprintf(&b,"%s/",menu_chroot); +#else sprintf(b,"%s/",menu_chroot); +#endif path = b; } } } r = open_dir(menu,path); +#ifdef __GNU__ + free(wd); + free(b); +#endif + return r; } --- libmpdemux/mf.c.orig 2012-01-07 13:22:08.000000000 +0000 +++ libmpdemux/mf.c 2012-01-07 14:02:13.000000000 +0000 @@ -16,6 +16,9 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#ifdef __GNU__ +#define _GNU_SOURCE +#endif #include <ctype.h> #include <stdio.h> #include <stdlib.h> @@ -64,8 +67,13 @@ FILE *lst_f=fopen(filename + 1,"r"); if ( lst_f ) { +#ifdef __GNU__ + fname=NULL; + while ( getline( &fname, 0, lst_f ) >= 0 ) +#else fname=malloc(PATH_MAX); while ( fgets( fname,PATH_MAX,lst_f ) ) +#endif { /* remove spaces from end of fname */ char *t=fname + strlen( fname ) - 1; @@ -80,6 +88,10 @@ mf->names[mf->nr_of_files]=strdup( fname ); mf->nr_of_files++; } +#ifdef __GNU__ + free( fname ); + fname=NULL; +#endif } fclose( lst_f ); --- stream/stream_bd.c.orig 2012-01-07 13:43:33.000000000 +0000 +++ stream/stream_bd.c 2012-01-07 14:03:11.000000000 +0000 @@ -19,6 +19,10 @@ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ +#ifdef __GNU__ +#define _GNU_SOURCE +#endif + #include <stdio.h> #include <limits.h> #include <ctype.h> @@ -144,7 +148,11 @@ static int find_vuk(struct bd_priv *bd, const uint8_t discid[20]) { char line[1024]; +#ifdef __GNU__ + char *filename; +#else char filename[PATH_MAX]; +#endif const char *home; int vukfound = 0; stream_t *file; @@ -152,13 +160,23 @@ // look up discid in KEYDB.cfg to get VUK home = getenv("HOME"); +#ifdef __GNU__ + asprintf(&filename, "%s/.dvdcss/KEYDB.cfg", home); +#else snprintf(filename, sizeof(filename), "%s/.dvdcss/KEYDB.cfg", home); +#endif file = open_stream(filename, NULL, NULL); if (!file) { mp_msg(MSGT_OPEN,MSGL_ERR, "Cannot open VUK database file %s\n", filename); +#ifdef __GNU__ + free(filename); +#endif return 0; } +#ifdef __GNU__ + free(filename); +#endif id2str(discid, 20, idstr); while (stream_read_line(file, line, sizeof(line), 0)) { char *vst; @@ -203,23 +221,40 @@ struct AVAES *a; struct AVSHA *asha; stream_t *file; +#ifdef __GNU__ + char *filename; +#else char filename[PATH_MAX]; +#endif uint8_t discid[20]; char idstr[ID_STR_LEN]; +#ifdef __GNU__ + asprintf(&filename, BD_UKF_PATH, bd->device); +#else snprintf(filename, sizeof(filename), BD_UKF_PATH, bd->device); +#endif file = open_stream(filename, NULL, NULL); if (!file) { mp_msg(MSGT_OPEN, MSGL_ERR, "Cannot open file %s to get UK and DiscID\n", filename); +#ifdef __GNU__ + free(filename); +#endif return 0; } file_size = file->end_pos; if (file_size <= 0 || file_size > 10 * 1024* 1024) { mp_msg(MSGT_OPEN, MSGL_ERR, "File %s too large\n", filename); free_stream(file); +#ifdef __GNU__ + free(filename); +#endif return 0; } +#ifdef __GNU__ + free(filename); +#endif buf = av_malloc(file_size); stream_read(file, buf, file_size); free_stream(file); @@ -410,15 +445,29 @@ { int i; int langmap_offset, index_offset, end_offset; +#ifdef __GNU__ + char *filename; +#else char filename[PATH_MAX]; +#endif stream_t *file; +#ifdef __GNU__ + asprintf(&filename, BD_CLIPINF_PATH, bd->device, bd->title); +#else snprintf(filename, sizeof(filename), BD_CLIPINF_PATH, bd->device, bd->title); +#endif file = open_stream(filename, NULL, NULL); if (!file) { mp_msg(MSGT_OPEN, MSGL_ERR, "Cannot open clipinf %s\n", filename); +#ifdef __GNU__ + free(filename); +#endif return; } +#ifdef __GNU__ + free(filename); +#endif if (stream_read_qword(file) != AV_RB64("HDMV0200")) { mp_msg(MSGT_OPEN, MSGL_ERR, "Unknown clipinf format\n"); return; @@ -452,7 +501,11 @@ static int bd_stream_open(stream_t *s, int mode, void* opts, int* file_format) { +#ifdef __GNU__ + char *filename; +#else char filename[PATH_MAX]; +#endif struct stream_priv_s* p = opts; struct bd_priv *bd = calloc(1, sizeof(*bd)); @@ -488,9 +541,16 @@ // set up AES key from uk av_aes_init(bd->aeseed, bd->uks.keys[0].u8, 128, 0); +#ifdef __GNU__ + asprintf(&filename, BD_M2TS_PATH, bd->device, bd->title); +#else snprintf(filename, sizeof(filename), BD_M2TS_PATH, bd->device, bd->title); +#endif mp_msg(MSGT_OPEN, MSGL_STATUS, "Opening %s\n", filename); bd->title_file = open_stream(filename, NULL, NULL); +#ifdef __GNU__ + free(filename); +#endif if (!bd->title_file) return STREAM_ERROR; s->end_pos = bd->title_file->end_pos;