toolbox 21.1 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 33 34
  --update-po             update translation files
  --update-includes       generate various include files
  --update-glade2         generate and fix Glade 2 code
  --update-flexml         generate and fix flexml and flex code
Sam Hocevar's avatar
Sam Hocevar committed
35
  --distclean             "make distclean" on steroids
36
  --dist-contrib          add the contrib dir to MAKE_DIST
37 38 39 40
EOF
  exit 1
}

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

52 53 54
###
###  argument check
###
55 56

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

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

102 103 104 105 106 107 108 109 110 111 112 113 114
##
##  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

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

126 127 128
##
##  Update the MSVC project files
##
129
if test "${action}" = "vc"
130
then
Sam Hocevar's avatar
Sam Hocevar committed
131
  echo "generating Visual Studio files"
132

Sam Hocevar's avatar
Sam Hocevar committed
133 134 135
  if test -z "${srcdir}"; then
    srcdir="`sed -ne 's/^srcdir *= *//p' < Makefile`"
  fi
Sam Hocevar's avatar
Sam Hocevar committed
136

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

140 141 142
  #  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`
143 144
  LIBVLC_SYMBOL=`echo $LIBVLC_VERSION | sed -e 'y/.-/__/'`

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

148
  LIBVLC_HEADERS=`getfiles HEADERS_include; getfiles HEADERS_include_built`
149

150
  LIBVLC_PKG_HEADERS=`getfiles dist_pkginclude_HEADERS`
151 152

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

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

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

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

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

Sam Hocevar's avatar
Sam Hocevar committed
360
  echo " done."
361 362 363
  exit 0
fi

364 365 366 367 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
##
##  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'`
407
  perl -pe 'if(/ZSOURCESZ/){last;} s/ZGUIDZ/'${guid}'/g' < ${target}.in > ${target}
408 409 410 411 412
  #  The source files
  cat >> ${target} << EOF
<File RelativePath="..\\src\\vlc.c"></File>${M}
EOF
  #  Bottom of the project file - handles resource files too
413
  perl -e 'while(<>){if(/ZSOURCESZ/){last;}}while(<>){print $_}' < ${target}.in >> ${target}
414 415 416 417 418 419
  
  # 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'`
420
  perl -pe 'if(/ZSOURCESZ/){last;} s/ZGUIDZ/'${guid}'/g' < ${target}.in > ${target}
421 422 423 424 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
  #  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
455
  perl -e 'while(<>){if(/ZSOURCESZ/){last;}}while(<>){if(/ZHEADERSZ/){last;}print $_}' < ${target}.in >> ${target}
456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473
  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
474
  perl -e 'while(<>){if(/ZHEADERSZ/){last;}}while(<>){print $_}' < ${target}.in >> ${target}
475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493

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

  echo " done."
  exit 0
fi

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

531 532 533
##
##  Create include files
##
534
if test "${action}" = "includes"
535
then
Sam Hocevar's avatar
Sam Hocevar committed
536
  #set -x
537

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

546
  file="${builddir}/src/modules/builtin.h"
547

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

  exit 0
fi

582 583 584 585 586
##
##  Fix glade2-generated files
##
if test "${action}" = "glade2"
then
587 588 589
  file="modules/gui/pda/pda.glade"
  echo "generating code from $file"
  glade-2 -w "$file" || exit 1
590

591 592 593 594 595 596
  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
597 598 599 600
/* This file was created automatically by glade2 and fixed by bootstrap */

#include <vlc/vlc.h>
EOF
601 602 603 604 605 606 607 608 609 610
    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
611

612 613 614
  exit 0
fi

615 616 617 618 619 620 621
##
##  Make distclean
##
if test "${action}" = "distclean"
then
  set -x
  # a naive sanity check to make sure we are in a VLC tree
622
  test -f vlc.mandriva.spec -a -f vlc.win32.nsi.in || exit 1
623
  # let's rock!
Rafaël Carré's avatar
Rafaël Carré committed
624
  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
625
  (cd autotools && find . -maxdepth 1 -name '[a-z]*' -exec rm -f '{}' ';')
626 627
  find msvc -type f -name '*.dsp' -exec rm -f '{}' ';'
  find evc -type f -name '*.vcp' -exec rm -f '{}' ';'
628
  find . -type d -name '.deps' -exec rm -Rf '{}' ';'
629
  find . -type d -name '.libs' -exec rm -Rf '{}' ';'
630
  # there's some more cruft all around
631
  rm -f config.h config.log config.status
632 633
  rm -f vlc vlc-config Makefile Modules.am
  rm -Rf autom4te.cache
Rémi Denis-Courmont's avatar
Rémi Denis-Courmont committed
634 635 636
  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."
637 638 639
  # FIXME: a lot of Makefiles are still there
fi

640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670
##
## 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