toolbox 26.7 KB
Newer Older
1 2
#! /bin/sh

3
##  toolbox for the VLC media player
Sam Hocevar's avatar
Sam Hocevar committed
4
##  $Id$
5
##
6 7
##  Copyright (C) 2005  the VideoLAN team
##
8
##  Authors: Samuel Hocevar <sam@zoy.org>
9
##           Rémi Denis-Courmont <rem # videolan.org>
10 11 12 13

###
###  Get a sane environment, just in case
###
14 15
LC_ALL=C
export LC_ALL
16 17 18 19 20 21 22 23 24 25 26 27
LANG=C
export LANG
CYGWIN=binmode
export CYGWIN

##
##  Give help
##
help()
{
  cat << EOF
recognized flags are:
Sam Hocevar's avatar
Sam Hocevar committed
28
  --update-vc             update Microsoft Visual Studio files
29
  --update-vc7            update Microsoft Visual .NET files
Sam Hocevar's avatar
Sam Hocevar committed
30 31
  --update-po             update translation files
  --update-includes       generate various include files
32
  --update-version        generate src/misc/version.c
Sam Hocevar's avatar
Sam Hocevar committed
33 34 35
  --update-glade          generate and fix Glade code
  --update-glade2         generate and fix Glade 2 code
  --update-flexml         generate and fix flexml and flex code
Sam Hocevar's avatar
Sam Hocevar committed
36
  --distclean             "make distclean" on steroids
37
  --dist-contrib          add the contrib dir to MAKE_DIST
38
  --make-woody <dir>      change distdir <dir> to a woody distdir
39 40 41 42
EOF
  exit 1
}

43 44 45 46 47
##
##  Extract stuff from Makefile.am
##
getfiles()
{
48
  awk 'BEGIN{a=0}{if(!a&&$0~/^'"$1"'[^-_a-zA-Z0-9]*=/){a=1;print$0;next;}if(a){if($0~/^[a-zA-Z]/){exit;}print $0}}' < "${srcdir}/Makefile.am" | \
49
    tr '\\ ' '\n\n' | \
Sam Hocevar's avatar
Sam Hocevar committed
50 51
    sed -ne 's/[^-$()_a-zA-Z0-9][^-$()_a-zA-Z0-9]*\([a-zA-Z]\)/\1/p' | \
    sed -e "s,^,${srcdir}/,"
52 53
}

54 55 56
###
###  argument check
###
57 58

if test "$1" = ""
59 60 61 62
then
  help
fi

63
case "$1" in
Sam Hocevar's avatar
Sam Hocevar committed
64
  --changelog|--update-changelog)
65
    action=changelog
66 67
    ;;
  --update-vc)
68
    action=vc
69
    ;;
70 71 72
  --update-vc7)
    action=vc7
    ;;
73
  --update-po)
74
    action=po
75 76
    ;;
  --update-includes)
77
    action=includes
78
    ;;
79 80 81
  --update-version)
    action=version
    ;;
82 83 84
  --update-flexml)
    action=flexml
    ;;
85
  --update-glade|--fix-glade)
86
    action=glade
87
    ;;
88 89 90
  --update-glade2|--update-glade-2|--fix-glade2)
    action=glade2
    ;;
91 92 93
  --distclean)
    action=distclean
    ;;
94 95 96
  --make-woody)
    action=woody
    ;;
97 98 99
  --add-include)
    action=include
    ;;
100 101 102
  --dist-contrib)
    action=contrib
    ;;
103 104 105 106 107 108 109 110 111 112
  --help)
    help
    ;;
  *)
    echo "$0: unknown option $1"
    help
    ;;
esac
shift

113 114 115 116 117 118 119 120 121 122 123 124 125
##
##  Add includes to help doxygen
##
if test "${action}" = "include"
then
  case "$1" in
    */vlc_common.h|*/include/vlc/*);;
    */include/*.h) echo "#include <vlc_common.h>" ;;
  esac
  cat $1
  exit 0
fi

126 127 128
##
##  Update the CVS changelog
##
129
if test "${action}" = "changelog"
130
then
Sam Hocevar's avatar
Sam Hocevar committed
131 132
  YEAR="`date +%Y`"
  echo "toolbox --changelog no longer required. use this instead:"
133
  echo " svn log -v -r '{$YEAR-12-31}:{$YEAR-01-01}' > ChangeLog"
134
  exit 0
135 136
fi

137 138 139
##
##  Update the MSVC project files
##
140
if test "${action}" = "vc"
141
then
Sam Hocevar's avatar
Sam Hocevar committed
142
  echo "generating Visual Studio files"
143

Sam Hocevar's avatar
Sam Hocevar committed
144 145 146
  if test -z "${srcdir}"; then
    srcdir="`sed -ne 's/^srcdir *= *//p' < Makefile`"
  fi
Sam Hocevar's avatar
Sam Hocevar committed
147

148
  #  The evil ^M. printf '\r' does not work in Cygwin.
149
  M='
'
150

151 152 153
  #  Variables we get from configure.ac
  LIBVLC_VERSION=`sed -ne '/AC_INIT/s/.*,\(.*\))/\1/p' < configure.ac`
  LIBVLC_CODENAME=`sed -ne '/CODENAME=/s/.*"\(.*\)"/\1/p' < configure.ac`
154 155
  LIBVLC_SYMBOL=`echo $LIBVLC_VERSION | sed -e 'y/.-/__/'`

156
  #  Sources that get built under Win32 - FIXME: anyone wanna deuglify this? :)
157
  LIBVLC_SOURCES=`getfiles SOURCES_libvlc_common; getfiles SOURCES_libvlc_win32; getfiles SOURCES_libvlc_dirent; getfiles SOURCES_libvlc_getopt; getfiles SOURCES_libvlc_libc`
158

159
  LIBVLC_HEADERS=`getfiles HEADERS_include; getfiles HEADERS_include_built`
160

161
  LIBVLC_PKG_HEADERS=`getfiles dist_pkginclude_HEADERS`
162 163

  # Clean up
164
  rm -f evc/*.vcp msvc/*.dsp msvc/*.vcproj msvc/*.sln msvc/*.ncb
165

166 167 168
  # config files
  for target in evc/config.h msvc/config.h
  do
Sam Hocevar's avatar
Sam Hocevar committed
169
    printf "."
170 171 172 173 174 175
    rm -f ${target}
    sed -e "s/@CODENAME@/${LIBVLC_CODENAME}/" \
        -e "s/@VERSION@/${LIBVLC_VERSION}/" \
        -e "s/@SYMBOL@/${LIBVLC_SYMBOL}/" < ${target}.in > ${target}
  done

176 177 178
  # libvlc files
  for target in evc/libvlc.vcp msvc/libvlc.dsp
  do
Sam Hocevar's avatar
Sam Hocevar committed
179
    printf "."
180
    #  Top of the project file
181
    perl -pe 'if(/ZSOURCESZ/){last;}' < ${target}.in > ${target}
182 183 184 185 186
    #  The source files
    for file in `for i in ${LIBVLC_SOURCES} ; do echo $i ; done | grep -v "/.*/"`
    do
      cat >> ${target} << EOF
# Begin Source File${M}
187
SOURCE="..\\`echo ${file} | sed -e 's%/%\\\\%g'`"${M}
Gildas Bazin's avatar
 
Gildas Bazin committed
188
# ADD CPP /D "__VLC__" /D PLUGIN_PATH=\\".\\" /D DATA_PATH=\\"share\\"${M}
189 190 191 192 193 194 195 196 197 198
# End Source File${M}
EOF
    done
    for subdir in `for i in ${LIBVLC_SOURCES} ; do echo $i ; done | grep "/.*/" | cut -f2 -d/ | sort | uniq`
    do
      cat >> ${target} << EOF
# Begin Group "${subdir}"${M}
EOF
      for file in `for i in ${LIBVLC_SOURCES} ; do echo $i ; done | grep "/${subdir}/"`
      do
199
      subdir="`echo ${file} | sed -e 's%/[^/]*$%/%' | sed -e 's%/%\\\\%g'`"
200 201 202 203
      if test "${target}" = "evc/libvlc.vcp"
      then
        cat >> ${target} << EOF
# Begin Source File${M}
204
SOURCE="..\\`echo ${file} | sed -e 's%/%\\\\%g'`"${M}
Gildas Bazin's avatar
 
Gildas Bazin committed
205
# ADD CPP /D "__VLC__" /D PLUGIN_PATH=\\".\\" /D DATA_PATH=\\"share\\"${M}
206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229
!IF "\$(CFG)" == "libvlc - Win32 (WCE MIPS) Release"${M}
# PROP Output_Dir "MIPSRel\\${subdir}"${M}
# PROP Intermediate_Dir "MIPSRel\\${subdir}"${M}
!ELSEIF "\$(CFG)" == "libvlc - Win32 (WCE MIPS) Debug"${M}
# PROP Output_Dir "MIPSDbg\\${subdir}"${M}
# PROP Intermediate_Dir "MIPSDbg\\${subdir}"${M}
!ELSEIF "\$(CFG)" == "libvlc - Win32 (WCE SH4) Release"${M}
# PROP Output_Dir "SH4Rel\\${subdir}"${M}
# PROP Intermediate_Dir "SH4Rel\\${subdir}"${M}
!ELSEIF "\$(CFG)" == "libvlc - Win32 (WCE SH4) Debug"${M}
# PROP Output_Dir "SH4Dbg\\${subdir}"${M}
# PROP Intermediate_Dir "SH4Dbg\\${subdir}"${M}
!ELSEIF "\$(CFG)" == "libvlc - Win32 (WCE SH3) Release"${M}
# PROP Output_Dir "SH3Rel\\${subdir}"${M}
# PROP Intermediate_Dir "SH3Rel\\${subdir}"${M}
!ELSEIF "\$(CFG)" == "libvlc - Win32 (WCE SH3) Debug"${M}
# PROP Output_Dir "SH3Dbg\\${subdir}"${M}
# PROP Intermediate_Dir "SH3Dbg\\${subdir}"${M}
!ELSEIF "\$(CFG)" == "libvlc - Win32 (WCE ARM) Release"${M}
# PROP Output_Dir "ARMRel\\${subdir}"${M}
# PROP Intermediate_Dir "ARMRel\\${subdir}"${M}
!ELSEIF "\$(CFG)" == "libvlc - Win32 (WCE ARM) Debug"${M}
# PROP Output_Dir "ARMDbg\\${subdir}"${M}
# PROP Intermediate_Dir "ARMDbg\\${subdir}"${M}
230 231 232 233 234 235
!ELSEIF "\$(CFG)" == "libvlc - Win32 (WCE ARMV4) Release"${M}
# PROP Output_Dir "ARMV4Rel\\${subdir}"${M}
# PROP Intermediate_Dir "ARMV4Rel\\${subdir}"${M}
!ELSEIF "\$(CFG)" == "libvlc - Win32 (WCE ARMV4) Debug"${M}
# PROP Output_Dir "ARMV4Dbg\\${subdir}"${M}
# PROP Intermediate_Dir "ARMV4Dbg\\${subdir}"${M}
236 237 238 239 240 241
!ELSEIF "\$(CFG)" == "libvlc - Win32 (WCE x86em) Release"${M}
# PROP Output_Dir "X86EMRel\\${subdir}"${M}
# PROP Intermediate_Dir "X86EMRel\\${subdir}"${M}
!ELSEIF "\$(CFG)" == "libvlc - Win32 (WCE x86em) Debug"${M}
# PROP Output_Dir "X86EMDbg\\${subdir}"${M}
# PROP Intermediate_Dir "X86EMDbg\\${subdir}"${M}
242 243 244 245 246 247 248 249 250 251 252 253
!ELSEIF  "\$(CFG)" == "libvlc - Win32 (WCE emulator) Debug"${M}
# PROP Output_Dir "emulatorDbg\\${subdir}"${M}
# PROP Intermediate_Dir "emulatorDbg\\${subdir}"${M}
!ELSEIF  "\$(CFG)" == "libvlc - Win32 (WCE emulator) Release"${M}
# PROP Output_Dir "emulatorRel\\${subdir}"${M}
# PROP Intermediate_Dir "emulatorRel\\${subdir}"${M}
!ELSEIF  "\$(CFG)" == "libvlc - Win32 (WCE x86) Debug"${M}
# PROP Output_Dir "X86Dbg\\${subdir}"${M}
# PROP Intermediate_Dir "X86Dbg\\${subdir}"${M}
!ELSEIF  "\$(CFG)" == "libvlc - Win32 (WCE x86) Release"${M}
# PROP Output_Dir "X86Rel\\${subdir}"${M}
# PROP Intermediate_Dir "X86Rel\\${subdir}"${M}
254 255 256 257 258 259
!ENDIF${M}
# End Source File${M}
EOF
        else
          cat >> ${target} << EOF
# Begin Source File${M}
260
SOURCE="..\\`echo ${file} | sed -e 's%/%\\\\%g'`"${M}
Gildas Bazin's avatar
 
Gildas Bazin committed
261
# ADD CPP /D "__VLC__" /D PLUGIN_PATH=\\".\\" /D DATA_PATH=\\"share\\"${M}
262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277
!IF "\$(CFG)" == "libvlc - Win32 Release"${M}
# PROP Output_Dir "Release\\${subdir}"${M}
# PROP Intermediate_Dir "Release\\${subdir}"${M}
!ELSEIF "\$(CFG)" == "libvlc - Win32 Debug"${M}
# PROP Output_Dir "Debug\\${subdir}"${M}
# PROP Intermediate_Dir "Debug\\${subdir}"${M}
!ENDIF${M}
# End Source File${M}
EOF
        fi
      done
      cat >> ${target} << EOF
# End Group${M}
EOF
    done
    #  The headers
278
    perl -e 'while(<>){if(/ZSOURCESZ/){last;}}while(<>){if(/ZHEADERSZ/){last;}print $_}' < ${target}.in >> ${target}
279 280 281 282
    for file in ${LIBVLC_HEADERS}
    do
      cat >> ${target} << EOF
# Begin Source File${M}
283
SOURCE="..\\`echo ${file} | sed -e 's%/%\\\\%g'`"${M}
284 285 286 287 288 289 290 291 292 293
# End Source File${M}
EOF
    done
    cat >> ${target} << EOF
# Begin Group "vlc"${M}
EOF
    for file in ${LIBVLC_PKG_HEADERS}
    do
      cat >> ${target} << EOF
# Begin Source File${M}
294
SOURCE="..\\`echo ${file} | sed -e 's%/%\\\\%g'`"${M}
295 296 297 298 299 300
# End Source File${M}
EOF
    done
    cat >> ${target} << EOF
# End Group${M}
EOF
301
    perl -e 'while(<>){if(/ZHEADERSZ/){last;}}while(<>){print $_}' < ${target}.in >> ${target}
302 303 304
  done

  # plugins files
Sam Hocevar's avatar
Sam Hocevar committed
305
  for dir in `sed -ne 's,modules/\(.*\)/Makefile,\1,p' ${srcdir}/configure.ac`
306
  do
Sam Hocevar's avatar
Sam Hocevar committed
307 308
    mf="${srcdir}/modules/${dir}/Modules.am"
    for mod in `sed -n -e 's/^ *SOURCES_\([^ ]*\).*/\1/p' < ${mf}`
309
    do
Sam Hocevar's avatar
Sam Hocevar committed
310 311 312 313 314 315
      # this is an attempt at getting a list of plugin sources... we take the
      # production and remove everything that does not contain "module", which
      # means you miss $(NULL), but other variables too.
      allfiles=`grep -v '[^-_a-zA-Z0-9]*#' ${mf} | awk 'BEGIN{a=0}{if(!a&&$0~/^SOURCES_'${mod}'[^-_a-zA-Z0-9]*=/){a=1;print$0;next;}if(a){if($0~/^[a-zA-Z]/){exit;}print $0}}' | tr '\\ ' '\n\n' | grep '\.'`
      hfiles=`for i in ${allfiles} ; do echo "$i" ; done | grep '\.h$'`
      cfiles=`for i in ${allfiles} ; do echo "$i" ; done | grep -v '\.h$'`
316
      for msdir in evc msvc
317
      do
318 319 320
        test "${msdir}" = "evc" && suf="vcp" || suf="dsp"
        source="${msdir}/plugins.${suf}.in"
        target="${msdir}/plugin_${mod}.${suf}"
Sam Hocevar's avatar
Sam Hocevar committed
321
        printf "."
322
        perl -pe 'if(/ZSOURCESZ/){last;} s/ZPLUGINZ/'${mod}'/g' < ${source} > ${target}
Sam Hocevar's avatar
Sam Hocevar committed
323 324 325
        for cfile in ${cfiles}
        do
          cat >> ${target} << EOF
326
# Begin Source File${M}
Sam Hocevar's avatar
Sam Hocevar committed
327 328
SOURCE="..\\modules\\`echo ${dir}/${cfile} | sed 's,/,\\\\,g'`"${M}
# ADD CPP /D "__VLC__" /D "__PLUGIN__"  /D "MODULE_NAME=${mod}" /D "MODULE_NAME_IS_${mod}" ${M}
329 330 331 332 333 334
!IF "\$(CFG)" == "plugin_${mod} - Win32 Release"${M}
# PROP Output_Dir "Release\\modules\\`echo ${dir} | sed 's,/,\\\\,g'`"${M}
# PROP Intermediate_Dir "Release\\modules\\`echo ${dir} | sed 's,/,\\\\,g'`"${M}
!ELSEIF "\$(CFG)" == "plugin_${mod} - Win32 Debug"${M}
# PROP Output_Dir "Debug\\modules\\`echo ${dir} | sed 's,/,\\\\,g'`"${M}
# PROP Intermediate_Dir "Debug\\modules\\`echo ${dir} | sed 's,/,\\\\,g'`"${M}
335 336
# End Source File${M}
EOF
Sam Hocevar's avatar
Sam Hocevar committed
337 338
        done
        # sed is really nicer for this... unfortunately it's broken under cygwin
339 340
        # sed -ne '1,/ZSOURCESZ/d; /ZHEADERSZ/,$d; p' < ${source} >> ${target}
        perl -e 'while(<>){if(/ZSOURCESZ/){last;}}while(<>){if(/ZHEADERSZ/){last;}print $_}' < ${source} >> ${target}
Sam Hocevar's avatar
Sam Hocevar committed
341 342 343
        for hfile in ${hfiles}
        do
          cat >> ${target} << EOF
344
# Begin Source File${M}
Sam Hocevar's avatar
Sam Hocevar committed
345
SOURCE="..\\modules\\`echo ${dir}/${hfile} | sed 's,/,\\\\,g'`"${M}
346 347
# End Source File${M}
EOF
Sam Hocevar's avatar
Sam Hocevar committed
348
        done
349 350
        # sed -ne '1,/ZHEADERSZ/d; p' < ${source} >> ${target}
        perl -e 'while(<>){if(/ZHEADERSZ/){last;}}while(<>){print $_}' < ${source} >> ${target}
351 352 353 354 355 356 357
      done
    done
  done

  # vlc files
  for target in evc/vlc.vcp msvc/vlc.dsp
  do
Sam Hocevar's avatar
Sam Hocevar committed
358
    printf "."
359
    #  Top of the project file
360
    perl -pe 'if(/ZSOURCESZ/){last;}' < ${target}.in > ${target}
361 362 363 364 365 366 367
    #  The source files
      cat >> ${target} << EOF
# Begin Source File${M}
SOURCE="..\\src\\vlc.c"${M}
# End Source File${M}
EOF
    #  Bottom of the project file - handles resource files too
368
    perl -e 'while(<>){if(/ZSOURCESZ/){last;}}while(<>){print $_}' < ${target}.in >> ${target}
369 370
  done

Sam Hocevar's avatar
Sam Hocevar committed
371
  echo " done."
372 373 374
  exit 0
fi

375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417
##
##  Update the MSVC (.NET) project files
##
if test "${action}" = "vc7"
then
  echo "generating Visual .NET files"

  srcdir=.

  #  The evil ^M. printf '\r' does not work in Cygwin.
  M='
'

  #  Variables we get from configure.ac
  LIBVLC_VERSION=`sed -ne '/AC_INIT/s/.*,\(.*\))/\1/p' < configure.ac`
  LIBVLC_CODENAME=`sed -ne '/CODENAME=/s/.*"\(.*\)"/\1/p' < configure.ac`
  LIBVLC_SYMBOL=`echo $LIBVLC_VERSION | sed -e 'y/.-/__/'`

  #  Sources that get built under Win32 - FIXME: anyone wanna deuglify this? :)
  LIBVLC_SOURCES=`getfiles SOURCES_libvlc_common; getfiles SOURCES_libvlc_win32; getfiles SOURCES_libvlc_dirent; getfiles SOURCES_libvlc_getopt; getfiles SOURCES_libvlc_libc`

  LIBVLC_HEADERS=`getfiles HEADERS_include; getfiles HEADERS_include_built`

  LIBVLC_PKG_HEADERS=`getfiles dist_pkginclude_HEADERS`

  # Clean up
  rm -f msvc/*.vcproj

  # config files
  for target in msvc/config.h
  do
    printf "."
    rm -f ${target}
    sed -e "s/@CODENAME@/${LIBVLC_CODENAME}/" \
        -e "s/@VERSION@/${LIBVLC_VERSION}/" \
        -e "s/@SYMBOL@/${LIBVLC_SYMBOL}/" < ${target}.in > ${target}
  done

 # vlc files
  target="msvc/vlc.vcproj"
  printf "."
  #  Top of the project file
  guid=`perl -e 'sub r {return sprintf("%X", int rand(65536))} print r.r."-".r."-".r."-".r."-".r.r.r'`
418
  perl -pe 'if(/ZSOURCESZ/){last;} s/ZGUIDZ/'${guid}'/g' < ${target}.in > ${target}
419 420 421 422 423
  #  The source files
  cat >> ${target} << EOF
<File RelativePath="..\\src\\vlc.c"></File>${M}
EOF
  #  Bottom of the project file - handles resource files too
424
  perl -e 'while(<>){if(/ZSOURCESZ/){last;}}while(<>){print $_}' < ${target}.in >> ${target}
425 426 427 428 429 430
  
  # libvlc files
  target=msvc/libvlc.vcproj
  printf "."
  #  Top of the project file
  guid=`perl -e 'sub r {return sprintf("%X", int rand(65536))} print r.r."-".r."-".r."-".r."-".r.r.r'`
431
  perl -pe 'if(/ZSOURCESZ/){last;} s/ZGUIDZ/'${guid}'/g' < ${target}.in > ${target}
432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465
  #  The source files
  for file in `for i in ${LIBVLC_SOURCES} ; do echo $i ; done | grep -v "/.*/"`
  do
    cat >> ${target} << EOF
<File RelativePath="..\\`echo ${dir}/${file} | sed 's,/,\\\\,g'`"></File>${M}
EOF
  done
  for subdir in `for i in ${LIBVLC_SOURCES} ; do echo $i ; done | grep "/.*/" | cut -f2 -d/ | sort | uniq`
  do
    cat >> ${target} << EOF
<Filter	Name="`echo ${subdir} | sed s,/,_,g`" Filter="c;cpp">${M}
EOF
    for file in `for i in ${LIBVLC_SOURCES} ; do echo $i ; done | grep "/${subdir}/"`
    do
      cat >> ${target} << EOF
<File RelativePath="..\\`echo ${file} | sed 's,/,\\\\,g'`">${M}
EOF
      if echo ${file} | grep -q '.c$'
      then
        cat >> ${target} << EOF
	<FileConfiguration Name="Debug|Win32">${M}
		<Tool Name="VCCLCompilerTool" ObjectFile="\$(IntDir)/\$(ProjectName)/`echo ${file} | sed -e s/\.c$/.obj/`"/>${M}
	</FileConfiguration>${M}
EOF
      fi
      cat >> ${target} << EOF
</File>${M}
EOF
    done
    cat >> ${target} << EOF
</Filter>${M}
EOF
  done
  #  The headers
466
  perl -e 'while(<>){if(/ZSOURCESZ/){last;}}while(<>){if(/ZHEADERSZ/){last;}print $_}' < ${target}.in >> ${target}
467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484
  for file in ${LIBVLC_HEADERS}
  do
    cat >> ${target} << EOF
<File RelativePath="..\\`echo ${file} | sed 's,/,\\\\,g'`"></File>${M}
EOF
  done
  cat >> ${target} << EOF
<Filter	Name="vlc" Filter="h;hpp">${M}
EOF
  for file in ${LIBVLC_PKG_HEADERS}
  do
    cat >> ${target} << EOF
<File RelativePath="..\\`echo ${file} | sed 's,/,\\\\,g'`"></File>${M}
EOF
  done
  cat >> ${target} << EOF
</Filter>${M}
EOF
485
  perl -e 'while(<>){if(/ZHEADERSZ/){last;}}while(<>){print $_}' < ${target}.in >> ${target}
486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504

  # plugins files
  for dir in `sed -ne 's,modules/\(.*\)/Makefile,\1,p' ${srcdir}/configure.ac`
  do
    mf="${srcdir}/modules/${dir}/Modules.am"
    for mod in `sed -n -e 's/^ *SOURCES_\([^ ]*\).*/\1/p' < ${mf}`
    do
      # this is an attempt at getting a list of plugin sources... we take the
      # production and remove everything that does not contain "module", which
      # means you miss $(NULL), but other variables too.
      allfiles=`grep -v '[^-_a-zA-Z0-9]*#' ${mf} | awk 'BEGIN{a=0}{if(!a&&$0~/^SOURCES_'${mod}'[^-_a-zA-Z0-9]*=/){a=1;print$0;next;}if(a){if($0~/^[a-zA-Z]/){exit;}print $0}}' | tr '\\ ' '\n\n' | grep '\.'`
      hfiles=`for i in ${allfiles} ; do echo "$i" ; done | grep '\.h$'`
      cfiles=`for i in ${allfiles} ; do echo "$i" ; done | grep -v '\.h$'`
      for msdir in msvc
      do
        source="${msdir}/plugins.vcproj.in"
        target="${msdir}/plugin_${mod}.vcproj"
        printf "."
	guid=`perl -e 'sub r {return sprintf("%X", int rand(65536))} print r.r."-".r."-".r."-".r."-".r.r.r'`
505
        perl -pe 'if(/ZSOURCESZ/){last;} s/ZPLUGINZ/'${mod}'/g' < ${source} | sed 's,ZGUIDZ,'${guid}',' > ${target}
506 507 508 509 510 511 512
        for cfile in ${cfiles}
        do
          cat >> ${target} << EOF
<File RelativePath="..\\modules\\`echo ${dir}/${cfile} | sed 's,/,\\\\,g'`"></File>${M}
EOF
        done
        # sed is really nicer for this... unfortunately it's broken under cygwin
513 514
        # sed -ne '1,/ZSOURCESZ/d; /ZHEADERSZ/,$d; p' < ${source} >> ${target}
        perl -e 'while(<>){if(/ZSOURCESZ/){last;}}while(<>){if(/ZHEADERSZ/){last;}print $_}' < ${source} >> ${target}
515 516 517 518 519 520
        for hfile in ${hfiles}
        do
          cat >> ${target} << EOF
<File RelativePath="..\\modules\\`echo ${dir}/${hfile} | sed 's,/,\\\\,g'`"></File>${M}
EOF
        done
521 522
        # sed -ne '1,/ZHEADERSZ/d; p' < ${source} >> ${target}
        perl -e 'while(<>){if(/ZHEADERSZ/){last;}}while(<>){print $_}' < ${source} >> ${target}
523 524 525 526 527 528 529 530
      done
    done
  done

  echo " done."
  exit 0
fi

531 532 533
##
##  Update the potfiles because no one ever does it
##
534
if test "${action}" = "po"
535
then
536
  # find out the source files
537 538 539
  echo "WARNING: you should run \"make update-po\" instead!" >&2
  make update-po
  exit $?
540 541
fi

542 543 544
##
##  Create include files
##
545
if test "${action}" = "includes"
546
then
Sam Hocevar's avatar
Sam Hocevar committed
547
  #set -x
548

Sam Hocevar's avatar
Sam Hocevar committed
549 550 551
  if test -z "${srcdir}"; then
    srcdir="`sed -ne 's/^srcdir *= *//p' < Makefile`"
  fi
552 553 554
  if test -z "${builddir}"; then
    builddir="`sed -ne 's/^top_builddir *= *//p' < Makefile`"
  fi
555
  BUILTINS=`sed -ne 's/.*builtins *= *" *\([^"]*\)".*/\1/p' ${builddir}/vlc-config`
556

557
  file="${builddir}/src/misc/modules_builtin.h"
558

559
  rm -f "${file}.tmp"
560
  mkdir -p -- "${builddir}/src/misc"
561
  cat "${srcdir}/src/misc/modules_builtin.h.in" > "${file}.tmp" || exit 1
Sam Hocevar's avatar
Sam Hocevar committed
562
  if test -n "${BUILTINS}"
563 564 565
  then
    for i in `echo ${BUILTINS}`
    do
566
      echo "int vlc_entry__`echo $i | sed -e 'y@/@_@' -e 's@\..*@@'`( module_t* );" >> "${file}.tmp"
567
    done
568
    echo "" >> "${file}.tmp"
569 570
  fi
  echo "#define ALLOCATE_ALL_BUILTINS() \\" >> ${file}.tmp
571 572
  echo "    do \\" >> "${file}.tmp"
  echo "    { \\" >> "${file}.tmp"
Sam Hocevar's avatar
Sam Hocevar committed
573
  if test -n "${BUILTINS}"
574 575 576
  then
    for i in `echo ${BUILTINS}`
    do
577
      echo "        ALLOCATE_BUILTIN(`echo $i | sed -e 'y@/@_@' -e 's@\..*@@'`); \\" >> "${file}.tmp"
578 579
    done
  fi
580 581 582
  echo "    } while( 0 );" >> "${file}.tmp"
  echo "" >> "${file}.tmp" || exit 1
  if diff >/dev/null 2>&1 "${file}" "${file}.tmp"
583
  then
584
    rm -f "${file}.tmp"
Sam Hocevar's avatar
Sam Hocevar committed
585
  else
Sam Hocevar's avatar
Sam Hocevar committed
586
    echo "creating new ${file}"
587
    mv -f "${file}.tmp" "${file}"
588 589 590 591 592
  fi

  exit 0
fi

593 594 595 596 597 598 599 600 601 602 603 604 605 606 607
##
##  Create version file
##
if test "${action}" = "version"
then
  if test -z "${srcdir}"; then
    srcdir="`sed -ne 's/^srcdir *= *//p' < Makefile`"
  fi
  if test -z "${builddir}"; then
    builddir="`sed -ne 's/^top_builddir *= *//p' < Makefile`"
  fi
  if test -z "${CC}"; then
    CC="`sed -ne 's/^CC *= *//p' < Makefile`"
  fi

608
  file="${builddir}/src/misc/version.c"
609 610 611
  if which svnversion 2>&1 >/dev/null; then
    VLC_CHANGESET=`svnversion $srcdir`
  else
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
612
    VLC_CHANGESET='exported'
613 614
  fi

615
  rm -f ${file}.tmp
616
  mkdir -p -- "${builddir}/src/misc"
617
  cat > ${file}.tmp << EOF
618
/* DO NOT EDIT THIS FILE - IT IS REGENERATED AT EVERY COMPILE -
619 620
 * IT GIVES BETTER TRACKING OF VLC STABLE AND DEVELOPMENT VERSIONS
 * WHETHER THEY ARE BUILT BY OTHERS OR DURING DEVELOPMENT OR FOR THE
621 622
 * OFFICIAL VLC STABLE RELEASES.
 */
623
const char psz_vlc_changeset[] = "${VLC_CHANGESET}";
624

625
EOF
626 627 628 629 630 631 632 633 634
  if diff >/dev/null 2>&1 ${file} ${file}.tmp
  then
    rm -f ${file}.tmp
  else
    echo "creating new ${file}"
    mv -f ${file}.tmp ${file}
  fi

  exit 0
635 636
fi

637 638 639
##
##  Fix glade-generated files
##
640
if test "${action}" = "glade"
641 642 643 644 645 646 647 648 649 650
then
  for file in modules/gui/gtk/gnome.glade modules/gui/gtk/gtk.glade modules/gui/familiar/familiar.glade
  do
    echo "generating code from $file"
    glade -w $file || exit 1
  done

  for file in modules/gui/gtk/gnome_interface.c modules/gui/gtk/gtk_interface.c modules/gui/familiar/interface.c
  do
    echo "fixing $file"
Sam Hocevar's avatar
Sam Hocevar committed
651
    if grep "DO NOT EDIT THIS FILE" $file >/dev/null 2>&1
652 653 654 655 656 657 658 659 660
    then
      rm -f $file.$$.bak
      cat > $file.$$.bak << EOF
/* This file was created automatically by glade and fixed by bootstrap */

#include <vlc/vlc.h>
EOF
      sed -e 1,7d \
          -e 's#_(\(".:..:.."\))#\1#' \
661
          -e 's#_(\("[a-z0-9]*://[^"]*"\))#\1#' \
662 663
          -e 's#_("---")#"---"#' \
          -e 's#_("--")#"--"#' \
Sam Hocevar's avatar
Sam Hocevar committed
664
          -e 's#_(\("/dev/[^"]*"\))#"\1"#' \
665 666 667 668 669 670 671 672 673
          -e 's#_(\("./."\))#\1#' \
          < $file >> $file.$$.bak
      mv -f $file.$$.bak $file
    fi
  done

  for file in modules/gui/gtk/gtk_support.h modules/gui/familiar/support.h
  do
    echo "fixing $file"
Sam Hocevar's avatar
Sam Hocevar committed
674
    if grep "DO NOT EDIT THIS FILE" $file >/dev/null 2>&1
675 676 677 678 679 680 681 682 683 684 685 686 687 688
    then
      rm -f $file.$$.bak
      sed -e 's/DO NOT EDIT.*/Created by glade, fixed by bootstrap/' \
          -e 's,<config.h>,<vlc/vlc.h>,' \
          -e 's,#if.*ENABLE_NLS.*,#if 0 /* Disabled by bootstrap */,' \
          -e 's,#else,/* & */,' \
          < $file > $file.$$.bak
      mv -f $file.$$.bak $file
    fi
  done

  exit 0
fi

689 690 691 692 693
##
##  Fix glade2-generated files
##
if test "${action}" = "glade2"
then
Sam Hocevar's avatar
Sam Hocevar committed
694
  for file in modules/gui/gtk2/gnome2.glade modules/gui/gtk2/gtk2.glade modules/gui/pda/pda.glade
695 696 697 698 699
  do
    echo "generating code from $file"
    glade-2 -w $file || exit 1
  done

Sam Hocevar's avatar
Sam Hocevar committed
700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722
  for file in modules/gui/pda/pda_interface.c
  do
    echo "fixing $file"
    if grep "DO NOT EDIT THIS FILE" $file >/dev/null 2>&1
    then
      rm -f $file.$$.bak
      cat > $file.$$.bak << EOF
/* This file was created automatically by glade2 and fixed by bootstrap */

#include <vlc/vlc.h>
EOF
      sed -e 1,7d \
          -e 's#_(\(".:..:.."\))#\1#' \
          -e 's#_(\("[a-z0-9]*://[^"]*"\))#\1#' \
          -e 's#_("---")#"---"#' \
          -e 's#_("--")#"--"#' \
          -e 's#_(\("/dev/[^"]*"\))#\1#' \
          -e 's#_(\("./."\))#\1#' \
          < $file >> $file.$$.bak
      mv -f $file.$$.bak $file
    fi
  done

723 724 725
  exit 0
fi

726 727 728 729 730 731 732
##
##  Make distclean
##
if test "${action}" = "distclean"
then
  set -x
  # a naive sanity check to make sure we are in a VLC tree
Gildas Bazin's avatar
 
Gildas Bazin committed
733
  test -f vlc.spec.mdk -a -f debian/rules || exit 1
734
  # let's rock!
735
  find . -type f '(' -name '*.[oa]' -o -name '*.so' -o -name '*.sl' -o -name '*.dylib' -o -name '*.dll' -o -name .dirstamp -o '(' '(' ! -path '\./doc/developer/Makefile\.in' ')' -a -name Makefile.in ')' -o -name 'stamp-h*' -o -name '*~' -o -name '*.bak' -o -name '*.moc.cpp' ')' -exec rm -f '{}' ';'
Sam Hocevar's avatar
Sam Hocevar committed
736
  (cd autotools && find . -name '[a-z]*' -maxdepth 1 -exec rm -f '{}' ';')
737
  (cd debian && find . -type d '(' -name '[a-z]*' ! -name 'patches' ')' -maxdepth 1 -exec rm -Rf '{}' ';')
738 739
  find msvc -type f -name '*.dsp' -exec rm -f '{}' ';'
  find evc -type f -name '*.vcp' -exec rm -f '{}' ';'
740
  find . -type d -name '.deps' -exec rm -Rf '{}' ';'
741
  # there's some more cruft all around
742
  rm -f config.h config.log config.status
743 744 745 746 747 748
  rm -f vlc vlc-config Makefile Modules.am
  rm -Rf autom4te.cache
  rm -f mozilla/vlcintf.h mozilla/vlcintf.xpt
  # FIXME: a lot of Makefiles are still there
fi

749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779
##
## Add the extras/contrib dir to the distribution
##
if test "${action}" = "contrib"
then
  set -x
  if test ! -d "${distdir}/extras"
  then
    mkdir "${distdir}/extras"
  fi
  if test ! -d "${distdir}/extras/contrib"
  then
    mkdir "${distdir}/extras/contrib"
  fi
  cp "${srcdir}/extras/contrib/Makefile" "${distdir}/extras/contrib/Makefile"
  cp "${srcdir}/extras/contrib/README" "${distdir}/extras/contrib/README"
  cp "${srcdir}/extras/contrib/bootstrap" "${distdir}/extras/contrib/bootstrap"
  cp "${srcdir}/extras/contrib/change_prefix.sh" "${distdir}/extras/contrib/change_prefix.sh"
  if test ! -d "${distdir}/extras/contrib/src"
  then
    mkdir "${distdir}/extras/contrib/src"
  fi
  cp "${srcdir}/extras/contrib/src/Makefile" "${distdir}/extras/contrib/src/Makefile"
  cp "${srcdir}/extras/contrib/src/packages.mak" "${distdir}/extras/contrib/src/packages.mak"
  if test ! -d "${distdir}/extras/contrib/src/Patches"
  then
    mkdir "${distdir}/extras/contrib/src/Patches"
  fi
  cp ${srcdir}/extras/contrib/src/Patches/* "${distdir}/extras/contrib/src/Patches/"
fi

Sam Hocevar's avatar
Sam Hocevar committed
780 781 782
##
##  Build a woody-friendly package
##
783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800
if test "${action}" = "woody"
then
  set -ex
  test -d "$1"

  # changelog: replace (1.2.3-4) with (1.2.3-0woody.4)
  sed -e 's/^vlc (\([^)]*\)-\([^-)]*\))/vlc-woody (\1-0woody.\2)/' \
      -e 's/ unstable; / stable; /' \
      < "$1/debian/changelog" > "$1/debian/changelog.woody"
  mv "$1/debian/changelog.woody" "$1/debian/changelog"

  # control: replace liba52-*-dev with a52dec-dev (>=0.7.3)
  #                  libdv*-dev with libdv-dev
  #                  kdelibs4-dev with kdelibs-dev
  #                  libqt3-mt-dev libqt3-compat-headers with libqt-dev
  #                  libarts1-dev with libarts-dev
  #                  libdvdread3-dev with libdvdread2-dev
  #                  libdvdplay0-dev (>=1.0.1-2) with libdvdplay0-dev
801
  #                  libxosd-dev (>=2.2.4-1.3) with libxosd-dev
Sam Hocevar's avatar
Sam Hocevar committed
802
  #                  ttf-freefont with ttf-thryomanes
Sam Hocevar's avatar
Sam Hocevar committed
803
  #                  dvb-dev (>= 1.0.1-6) with dvb-dev
804 805 806
  #          remove libwxgtk2.4-dev
  #                 libidl0 (workaround for mozilla-dev's bad deps)
  #                 libglib2.0-0 (workaround for mozilla-dev's bad deps)
807
  #                 gcc-3.2 (workaround for an ICE in gcc-3.3)
Sam Hocevar's avatar
Sam Hocevar committed
808
  #          change Section: gnome with Section: graphics
809 810 811 812 813 814 815 816 817 818
  #                 Section: kde with Section: kde
  #                 Section: libdevel with Section: devel
  sed -e 's/liba52-[^-]*-dev/a52dec-dev (>=0.7.3)/' \
      -e 's/libdv[0-9]*-dev/libdv-dev/' \
      -e 's/kdelibs[0-9]*-dev/kdelibs-dev/' \
      -e 's/libqt[0-9]*-mt-dev/libqt-dev/' \
      -e 's/, libqt[0-9]*-compat-headers[^,]*//' \
      -e 's/libarts[0-9]*-dev/libarts-dev/' \
      -e 's/libdvdread[0-9]*-dev/libdvdread2-dev/' \
      -e 's/, libdvdplay0-dev[^,]*/, libdvdplay0-dev/' \
819
      -e 's/, libxosd-dev[^,]*/, libxosd-dev/' \
Sam Hocevar's avatar
Sam Hocevar committed
820
      -e 's/, ttf-freefont[^,]*/, ttf-thryomanes/' \
Sam Hocevar's avatar
Sam Hocevar committed
821
      -e 's/, dvb-dev[^,]*/, dvb-dev/' \
822 823 824 825
      -e 's/, libwx[^,]*//' \
      -e '/Package: wxvlc/,/^ *$/d' \
      -e 's/, libidl0[^,]*//' \
      -e 's/, libglib2.0-0[^,]*//' \
826
      -e 's/, gcc-3.2[^,]*//' \
827 828 829 830 831 832 833 834 835 836 837 838 839
      -e 's/Section: gnome/Section: graphics/' \
      -e 's/Section: kde/Section: graphics/' \
      -e 's/Section: libdevel/Section: devel/' \
      < "$1/debian/control" > "$1/debian/control.woody"
  mv "$1/debian/control.woody" "$1/debian/control"

  # rules: remove wxwindows and skins stuff
  sed -e '/# Package: wxvlc/,/^ *$/d' \
      -e 's,--enable-wxwindows,--disable-wxwindows,' \
      -e 's,--enable-skins,--disable-skins,' \
      < "$1/debian/rules" > "$1/debian/rules.woody"
  mv "$1/debian/rules.woody" "$1/debian/rules"
  chmod 0755 "$1/debian/rules"
840 841

  # modules/misc/freetype.c: replace the default font
Sam Hocevar's avatar
Sam Hocevar committed
842
  sed -e 's,freefont/FreeSerifBold.ttf,thryomanes/thryb___.ttf,' \
843 844
      < "$1/modules/misc/freetype.c" > "$1/modules/misc/freetype.c.woody"
  mv "$1/modules/misc/freetype.c.woody" "$1/modules/misc/freetype.c"
845 846
fi