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

Antoine Cellerier's avatar
Antoine Cellerier committed
3

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

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

##
##  Give help
##
help()
{
  cat << EOF
recognized flags are:
Sam Hocevar's avatar
Sam Hocevar committed
29
  --update-vc             update Microsoft Visual Studio files
30
  --update-vc7            update Microsoft Visual .NET files
Sam Hocevar's avatar
Sam Hocevar committed
31 32
  --update-po             update translation files
  --update-includes       generate various include files
33
  --update-version        generate src/misc/version.c
Sam Hocevar's avatar
Sam Hocevar committed
34 35
  --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 39 40 41
EOF
  exit 1
}

42 43 44 45 46
##
##  Extract stuff from Makefile.am
##
getfiles()
{
47
  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" | \
48
    tr '\\ ' '\n\n' | \
Sam Hocevar's avatar
Sam Hocevar committed
49 50
    sed -ne 's/[^-$()_a-zA-Z0-9][^-$()_a-zA-Z0-9]*\([a-zA-Z]\)/\1/p' | \
    sed -e "s,^,${srcdir}/,"
51 52
}

53 54 55
###
###  argument check
###
56 57

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

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

106 107 108 109 110 111 112 113 114 115 116 117 118
##
##  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

119 120 121
##
##  Update the CVS changelog
##
122
if test "${action}" = "changelog"
123
then
Sam Hocevar's avatar
Sam Hocevar committed
124 125
  YEAR="`date +%Y`"
  echo "toolbox --changelog no longer required. use this instead:"
126
  echo " LANG=C svn log -v -r '{$YEAR-12-31}:{$YEAR-01-01}' > ChangeLog"
127
  exit 0
128 129
fi

130 131 132
##
##  Update the MSVC project files
##
133
if test "${action}" = "vc"
134
then
Sam Hocevar's avatar
Sam Hocevar committed
135
  echo "generating Visual Studio files"
136

Sam Hocevar's avatar
Sam Hocevar committed
137 138 139
  if test -z "${srcdir}"; then
    srcdir="`sed -ne 's/^srcdir *= *//p' < Makefile`"
  fi
Sam Hocevar's avatar
Sam Hocevar committed
140

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

144 145 146
  #  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`
147 148
  LIBVLC_SYMBOL=`echo $LIBVLC_VERSION | sed -e 'y/.-/__/'`

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

152
  LIBVLC_HEADERS=`getfiles HEADERS_include; getfiles HEADERS_include_built`
153

154
  LIBVLC_PKG_HEADERS=`getfiles dist_pkginclude_HEADERS`
155 156

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

159 160 161
  # config files
  for target in evc/config.h msvc/config.h
  do
Sam Hocevar's avatar
Sam Hocevar committed
162
    printf "."
163 164 165 166 167 168
    rm -f ${target}
    sed -e "s/@CODENAME@/${LIBVLC_CODENAME}/" \
        -e "s/@VERSION@/${LIBVLC_VERSION}/" \
        -e "s/@SYMBOL@/${LIBVLC_SYMBOL}/" < ${target}.in > ${target}
  done

169 170 171
  # libvlc files
  for target in evc/libvlc.vcp msvc/libvlc.dsp
  do
Sam Hocevar's avatar
Sam Hocevar committed
172
    printf "."
173
    #  Top of the project file
174
    perl -pe 'if(/ZSOURCESZ/){last;}' < ${target}.in > ${target}
175 176 177 178 179
    #  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}
180
SOURCE="..\\`echo ${file} | sed -e 's%/%\\\\%g'`"${M}
Clément Stenac's avatar
Clément Stenac committed
181
# ADD CPP /D "__LIBVLC__" /D PLUGIN_PATH=\\".\\" /D DATA_PATH=\\"share\\"${M}
182 183 184 185 186 187 188 189 190 191
# 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
192
      subdir="`echo ${file} | sed -e 's%/[^/]*$%/%' | sed -e 's%/%\\\\%g'`"
193 194 195 196
      if test "${target}" = "evc/libvlc.vcp"
      then
        cat >> ${target} << EOF
# Begin Source File${M}
197
SOURCE="..\\`echo ${file} | sed -e 's%/%\\\\%g'`"${M}
Clément Stenac's avatar
Clément Stenac committed
198
# ADD CPP /D "__LIBVLC__" /D PLUGIN_PATH=\\".\\" /D DATA_PATH=\\"share\\"${M}
199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222
!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}
223 224 225 226 227 228
!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}
229 230 231 232 233 234
!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}
235 236 237 238 239 240 241 242 243 244 245 246
!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}
247 248 249 250 251 252
!ENDIF${M}
# End Source File${M}
EOF
        else
          cat >> ${target} << EOF
# Begin Source File${M}
253
SOURCE="..\\`echo ${file} | sed -e 's%/%\\\\%g'`"${M}
Clément Stenac's avatar
Clément Stenac committed
254
# ADD CPP /D "__LIBVLC__" /D PLUGIN_PATH=\\".\\" /D DATA_PATH=\\"share\\"${M}
255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270
!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
271
    perl -e 'while(<>){if(/ZSOURCESZ/){last;}}while(<>){if(/ZHEADERSZ/){last;}print $_}' < ${target}.in >> ${target}
272 273 274 275
    for file in ${LIBVLC_HEADERS}
    do
      cat >> ${target} << EOF
# Begin Source File${M}
276
SOURCE="..\\`echo ${file} | sed -e 's%/%\\\\%g'`"${M}
277 278 279 280 281 282 283 284 285 286
# 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}
287
SOURCE="..\\`echo ${file} | sed -e 's%/%\\\\%g'`"${M}
288 289 290 291 292 293
# End Source File${M}
EOF
    done
    cat >> ${target} << EOF
# End Group${M}
EOF
294
    perl -e 'while(<>){if(/ZHEADERSZ/){last;}}while(<>){print $_}' < ${target}.in >> ${target}
295 296 297
  done

  # plugins files
Sam Hocevar's avatar
Sam Hocevar committed
298
  for dir in `sed -ne 's,modules/\(.*\)/Makefile,\1,p' ${srcdir}/configure.ac`
299
  do
Sam Hocevar's avatar
Sam Hocevar committed
300 301
    mf="${srcdir}/modules/${dir}/Modules.am"
    for mod in `sed -n -e 's/^ *SOURCES_\([^ ]*\).*/\1/p' < ${mf}`
302
    do
Sam Hocevar's avatar
Sam Hocevar committed
303 304 305 306 307 308
      # 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$'`
309
      for msdir in evc msvc
310
      do
311 312 313
        test "${msdir}" = "evc" && suf="vcp" || suf="dsp"
        source="${msdir}/plugins.${suf}.in"
        target="${msdir}/plugin_${mod}.${suf}"
Sam Hocevar's avatar
Sam Hocevar committed
314
        printf "."
315
        perl -pe 'if(/ZSOURCESZ/){last;} s/ZPLUGINZ/'${mod}'/g' < ${source} > ${target}
Sam Hocevar's avatar
Sam Hocevar committed
316 317 318
        for cfile in ${cfiles}
        do
          cat >> ${target} << EOF
319
# Begin Source File${M}
Sam Hocevar's avatar
Sam Hocevar committed
320
SOURCE="..\\modules\\`echo ${dir}/${cfile} | sed 's,/,\\\\,g'`"${M}
Clément Stenac's avatar
Clément Stenac committed
321
# ADD CPP /D "__LIBVLC__" /D "__PLUGIN__"  /D "MODULE_NAME=${mod}" /D "MODULE_NAME_IS_${mod}" ${M}
322 323 324 325 326 327
!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}
328 329
# End Source File${M}
EOF
Sam Hocevar's avatar
Sam Hocevar committed
330 331
        done
        # sed is really nicer for this... unfortunately it's broken under cygwin
332 333
        # 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
334 335 336
        for hfile in ${hfiles}
        do
          cat >> ${target} << EOF
337
# Begin Source File${M}
Sam Hocevar's avatar
Sam Hocevar committed
338
SOURCE="..\\modules\\`echo ${dir}/${hfile} | sed 's,/,\\\\,g'`"${M}
339 340
# End Source File${M}
EOF
Sam Hocevar's avatar
Sam Hocevar committed
341
        done
342 343
        # sed -ne '1,/ZHEADERSZ/d; p' < ${source} >> ${target}
        perl -e 'while(<>){if(/ZHEADERSZ/){last;}}while(<>){print $_}' < ${source} >> ${target}
344 345 346 347 348 349 350
      done
    done
  done

  # vlc files
  for target in evc/vlc.vcp msvc/vlc.dsp
  do
Sam Hocevar's avatar
Sam Hocevar committed
351
    printf "."
352
    #  Top of the project file
353
    perl -pe 'if(/ZSOURCESZ/){last;}' < ${target}.in > ${target}
354 355 356 357 358 359 360
    #  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
361
    perl -e 'while(<>){if(/ZSOURCESZ/){last;}}while(<>){print $_}' < ${target}.in >> ${target}
362 363
  done

Sam Hocevar's avatar
Sam Hocevar committed
364
  echo " done."
365 366 367
  exit 0
fi

368 369 370 371 372 373 374 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
##
##  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'`
411
  perl -pe 'if(/ZSOURCESZ/){last;} s/ZGUIDZ/'${guid}'/g' < ${target}.in > ${target}
412 413 414 415 416
  #  The source files
  cat >> ${target} << EOF
<File RelativePath="..\\src\\vlc.c"></File>${M}
EOF
  #  Bottom of the project file - handles resource files too
417
  perl -e 'while(<>){if(/ZSOURCESZ/){last;}}while(<>){print $_}' < ${target}.in >> ${target}
418 419 420 421 422 423
  
  # 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'`
424
  perl -pe 'if(/ZSOURCESZ/){last;} s/ZGUIDZ/'${guid}'/g' < ${target}.in > ${target}
425 426 427 428 429 430 431 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
  #  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
459
  perl -e 'while(<>){if(/ZSOURCESZ/){last;}}while(<>){if(/ZHEADERSZ/){last;}print $_}' < ${target}.in >> ${target}
460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477
  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
478
  perl -e 'while(<>){if(/ZHEADERSZ/){last;}}while(<>){print $_}' < ${target}.in >> ${target}
479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497

  # 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'`
498
        perl -pe 'if(/ZSOURCESZ/){last;} s/ZPLUGINZ/'${mod}'/g' < ${source} | sed 's,ZGUIDZ,'${guid}',' > ${target}
499 500 501 502 503 504 505
        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
506 507
        # sed -ne '1,/ZSOURCESZ/d; /ZHEADERSZ/,$d; p' < ${source} >> ${target}
        perl -e 'while(<>){if(/ZSOURCESZ/){last;}}while(<>){if(/ZHEADERSZ/){last;}print $_}' < ${source} >> ${target}
508 509 510 511 512 513
        for hfile in ${hfiles}
        do
          cat >> ${target} << EOF
<File RelativePath="..\\modules\\`echo ${dir}/${hfile} | sed 's,/,\\\\,g'`"></File>${M}
EOF
        done
514 515
        # sed -ne '1,/ZHEADERSZ/d; p' < ${source} >> ${target}
        perl -e 'while(<>){if(/ZHEADERSZ/){last;}}while(<>){print $_}' < ${source} >> ${target}
516 517 518 519 520 521 522 523
      done
    done
  done

  echo " done."
  exit 0
fi

524 525 526
##
##  Update the potfiles because no one ever does it
##
527
if test "${action}" = "po"
528
then
529
  # find out the source files
530 531 532
  echo "WARNING: you should run \"make update-po\" instead!" >&2
  make update-po
  exit $?
533 534
fi

535 536 537
##
##  Create include files
##
538
if test "${action}" = "includes"
539
then
Sam Hocevar's avatar
Sam Hocevar committed
540
  #set -x
541

Sam Hocevar's avatar
Sam Hocevar committed
542 543 544
  if test -z "${srcdir}"; then
    srcdir="`sed -ne 's/^srcdir *= *//p' < Makefile`"
  fi
545 546 547
  if test -z "${builddir}"; then
    builddir="`sed -ne 's/^top_builddir *= *//p' < Makefile`"
  fi
548
  BUILTINS=`sed -ne 's/.*builtins *= *" *\([^"]*\)".*/\1/p' ${builddir}/vlc-config`
549

550
  file="${builddir}/src/misc/modules_builtin.h"
551

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

  exit 0
fi

586 587 588 589 590 591 592 593 594 595 596 597 598 599 600
##
##  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

601
  file="${builddir}/src/misc/version.c"
602 603 604
  if which svnversion 2>&1 >/dev/null; then
    VLC_CHANGESET=`svnversion $srcdir`
  else
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
605
    VLC_CHANGESET='exported'
606 607
  fi

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

618
EOF
619 620 621 622 623 624 625 626 627
  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
628 629
fi

630 631 632 633 634
##
##  Fix glade2-generated files
##
if test "${action}" = "glade2"
then
635 636 637
  file="modules/gui/pda/pda.glade"
  echo "generating code from $file"
  glade-2 -w "$file" || exit 1
638

639 640 641 642 643 644
  file="modules/gui/pda/pda_interface.c"
  echo "fixing $file"
  if grep "DO NOT EDIT THIS FILE" "$file" >/dev/null 2>&1
  then
    rm -f -- "$file.$$.bak"
    cat > "$file.$$.bak" << EOF
Sam Hocevar's avatar
Sam Hocevar committed
645 646 647 648
/* This file was created automatically by glade2 and fixed by bootstrap */

#include <vlc/vlc.h>
EOF
649 650 651 652 653 654 655 656 657 658
    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
Sam Hocevar's avatar
Sam Hocevar committed
659

660 661 662
  exit 0
fi

663 664 665 666 667 668 669
##
##  Make distclean
##
if test "${action}" = "distclean"
then
  set -x
  # a naive sanity check to make sure we are in a VLC tree
670
  test -f vlc.mandriva.spec -a -f vlc.win32.nsi.in || exit 1
671
  # let's rock!
Rafaël Carré's avatar
Rafaël Carré committed
672
  find . -false -path './extras/contrib/*' -type f '(' -name '*.[oa]' -o -name '*.l[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 '{}' ';'
Clément Stenac's avatar
Clément Stenac committed
673
  (cd autotools && find . -maxdepth 1 -name '[a-z]*' -exec rm -f '{}' ';')
674 675
  find msvc -type f -name '*.dsp' -exec rm -f '{}' ';'
  find evc -type f -name '*.vcp' -exec rm -f '{}' ';'
676
  find . -type d -name '.deps' -exec rm -Rf '{}' ';'
677
  find . -type d -name '.libs' -exec rm -Rf '{}' ';'
678
  # there's some more cruft all around
679
  rm -f config.h config.log config.status
680 681 682
  rm -f vlc vlc-config Makefile Modules.am
  rm -Rf autom4te.cache
  rm -f mozilla/vlcintf.h mozilla/vlcintf.xpt
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
683 684 685
  echo "\`toolbox --distclean\' is known to be broken."
  echo "Don't complain if it does not work, or better yet, don't use it."
  echo "You were warned."
686 687 688
  # FIXME: a lot of Makefiles are still there
fi

689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719
##
## 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