one2all.sh
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:18k
源码类别:

生物技术

开发平台:

C/C++

  1. #! /bin/sh
  2. #
  3. # $Id: one2all.sh,v 1000.0 2003/10/29 14:25:04 gouriano Exp $
  4. # ===========================================================================
  5. #                            PUBLIC DOMAIN NOTICE
  6. #               National Center for Biotechnology Information
  7. #  This software/database is a "United States Government Work" under the
  8. #  terms of the United States Copyright Act.  It was written as part of
  9. #  the author's official duties as a United States Government employee and
  10. #  thus cannot be copyrighted.  This software/database is freely available
  11. #  to the public for use. The National Library of Medicine and the U.S.
  12. #  Government have not placed any restriction on its use or reproduction.
  13. #  Although all reasonable efforts have been taken to ensure the accuracy
  14. #  and reliability of the software and data, the NLM and the U.S.
  15. #  Government do not and cannot warrant the performance or results that
  16. #  may be obtained by using this software or data. The NLM and the U.S.
  17. #  Government disclaim all warranties, express or implied, including
  18. #  warranties of performance, merchantability or fitness for any particular
  19. #  purpose.
  20. #  Please cite the author in any work or product based on this material.
  21. # ===========================================================================
  22. # Author:  Anton Lavrentiev
  23. # MSVC project file converter. Expand a signle configuration project file
  24. # to multi-configuration project file.
  25. #
  26. # ===========================================================================
  27. readfirstln() {
  28.   cat $1 | while read p; do
  29.     test -z "$p"  &&  continue
  30.     echo "$p"
  31.     break
  32.   done
  33. }
  34. config() {
  35.   # Argument checking first.
  36.   #
  37.   if [ _$1 = _--without-dizzy ]; then
  38.     dizzy='no'
  39.     shift
  40.   else
  41.     dizzy='yes'
  42.   fi
  43.   if [ _$1 = _ -o ! -f $1 ]; then
  44.     echo "ERROR: File "$1" inexistent. Stop."
  45.     return 3
  46.   fi
  47.   if [ _$2 != _Debug -a _$2 != _Release ]; then
  48.     echo "ERROR: Unknown release parameter "$2". Stop."
  49.     return 3
  50.   fi
  51.   DEBUG=$2
  52.   if [ _$3 = _ ]; then
  53.     CFG="/ML"
  54.   elif [ $3 = MT ]; then
  55.     CFG="/MT"
  56.   elif [ $3 = DLL ]; then
  57.     CFG="/MD"
  58.   else
  59.     echo "ERROR: Unknown configuration "$3". Stop."
  60.     return 3
  61.   fi
  62.   SFX="$3"
  63.   # Our config is ${DEBUG}${SFX}. Compiler switch is ${CFG}.
  64.   #
  65.   if [ $DEBUG = Debug ]; then
  66.     CFG="${CFG}d"
  67.   fi
  68.   # Init the sed script, which will make conversion.
  69.   #
  70.   cat /dev/null >/tmp/$$_cmd.sed
  71.   # First replace config name wherever appropriate.
  72.   #
  73.   for p in Release Debug ; do
  74.     for q in DLL MT ; do
  75.       cat <<-EOF >>/tmp/$$_cmd.sed
  76. /^# PROP / !s|$p$q|$p|g
  77. /^# PROP .*"[^ ]*$p$q[^ ]*"/ s|$p$q|$p|g
  78. EOF
  79.     done
  80.     if [ $p != $DEBUG$SFX ]; then
  81.       cat <<-EOF >>/tmp/$$_cmd.sed
  82. /^# PROP / !s|$p|$DEBUG$SFX|g
  83. /^# PROP .*"[^ ]*$p[^ ]*"/ s|$p|$DEBUG$SFX|g
  84. EOF
  85.     fi
  86.   done
  87.   # Replace debugging macro.
  88.   #
  89.   if [ $DEBUG = Debug ]; then
  90.     echo 's|NDEBUG|_DEBUG|g' >>/tmp/$$_cmd.sed
  91.   else
  92.     echo 's|_DEBUG|NDEBUG|g' >>/tmp/$$_cmd.sed
  93.   fi
  94.   # Does the project use wxWindows (or is a part of wxWindows)?
  95.   #
  96.   if [ `grep -c '^# ADD .*CPP .*__WXDEBUG__' $1` != 0 -o 
  97.        `grep -c '^# ADD .*CPP .*__WXMSW__' $1`   != 0 -o 
  98.        `grep -c '^# ADD .*CPP .*WX.\{2,3\}INGDLL' $1` != 0 ]; then
  99.     GUI="wxwin"
  100.     # Flag proper macros for DLL mode.
  101.     #
  102.     if [ _$SFX = _DLL ]; then
  103.       if [ `grep -c '^# ADD .*CPP .*/D *["]\{0,1\}WXMAKINGDLL=*[0-9]*["]\{0,1\}' $1` != 0 ]; then
  104.         WXDLL='/D "WXMAKINGDLL=1"'
  105.       else
  106.         WXDLL='/D "WXUSINGDLL=1"'
  107.       fi
  108.     else
  109.       WXDLL=""
  110.     fi
  111.   # Is this an FLTK-dependent project?
  112.   #
  113.   elif [ `grep -c '^# ADD .*LINK32 .*fltk[a-z]*[.]lib' $1` != 0 ]; then
  114.      GUI="fltk"
  115.   else
  116.      GUI=""
  117.   fi
  118.  
  119.   # Either replace with hooks, or just remove the compiler switches,
  120.   # which may be configuration-dependent or inconsistent.
  121.   #
  122.   cat <<-EOF >>/tmp/$$_cmd.sed
  123. /^# ADD .*CPP / {
  124.   s|  */O[0-9A-Za-z]*| @O|
  125.   s|  */O[0-9A-Za-z]*||g
  126.   s|  */Gm||g
  127.   s|  */GZ||g
  128.   s|  */FR||g
  129.   s|  */Fr||g
  130.   s|  */c| @c|
  131.   s|  */c||g
  132.   s|  */ZI| @Z|
  133.   s|  */ZI||g
  134.   s|  */Zi| @Z|
  135.           s|  */Zi||g
  136.   s|  */Z7| @Z|
  137.   s|  */Z7||g
  138.   s|  */D  *"{0,1}DEBUG=*[0-9]*"{0,1}| @D|g
  139. EOF
  140.   # Remove some wxWindows macros, which are surely configuration-dependent.
  141.   #
  142.   if [ "$GUI" = "wxwin" ]; then
  143.     cat <<-EOF >>/tmp/$$_cmd.sed
  144.   s|  */D  *["]\{0,1\}__WXDEBUG__=*[0-9]*["]\{0,1\}||g
  145.   s|  */D  *["]\{0,1\}WXUSINGDLL=*[0-9]*["]\{0,1\}||g
  146.   s|  */D  *["]\{0,1\}WXMAKINGDLL=*[0-9]*["]\{0,1\}||g
  147. EOF
  148.   fi
  149.   # Clear the linker debug option.
  150.   #
  151.   cat <<-EOF >>/tmp/$$_cmd.sed
  152. }
  153. /^# ADD .*LINK32 / s|  */debug||g
  154. EOF
  155.   # When requested, remove include/library paths, which refer to DIZZY.
  156.   #
  157.   if [ "$dizzy" = "no" ]; then
  158.     cat <<-EOF >>/tmp/$$_cmd.sed
  159. /^# ADD .*CPP / s|  */I  *["]\{0,1\}\\\\[Dd][Ii][Zz][Zz][Yy]\\[^ ]*||g
  160. /^# ADD .*RSC / s|  */i  *["]\{0,1\}\\\\[Dd][Ii][Zz][Zz][Yy]\\[^ ]*||g
  161. /^# ADD .*LINK32 / s|  */libpath:["]\{0,1\}\\\\[Dd][Ii][Zz][Zz][Yy]\\[^ ]*||g
  162. EOF
  163.   fi
  164.   # Configuration-dependent changes: replace hooks and
  165.   # add more compiler options where appropriate.
  166.   #
  167.   if [ $DEBUG = Debug ]; then
  168.     cat <<-EOF >>/tmp/$$_cmd.sed
  169. /^# PROP / s|  *Use_Debug_Libraries  *0| Use_Debug_Libraries 1|
  170. /^# ADD .*LINK32 / {
  171.   s|  */pdb:[^ ]*||g
  172.   s|/mach|/pdb:none /debug &|
  173. }
  174. /^# ADD .*CPP / {
  175.   s|@O|/Od|
  176.   s|@Z|/Z7|
  177.   s| @Z||g
  178.   s|/W[^ ]*|& /Gm|
  179.   s|@c|/GZ /c|
  180.   s|@D|/D "DEBUG=1"|
  181.   s| @D||g
  182. EOF
  183.   else
  184.     cat <<-EOF >>/tmp/$$_cmd.sed
  185. /^# PROP / s|  *Use_Debug_Libraries  *1| Use_Debug_Libraries 0|
  186. /^# ADD .*LINK32 / s|  */pdbtype[^ ]*||g
  187. /^# ADD .*CPP / {
  188.   s|@O|/O2|
  189.   s| @Z||g
  190.   s|@c|/c|
  191.   s| @D||g
  192. EOF
  193.   fi
  194.   # Now replace the code generation switch.
  195.   #
  196.   for p in "/MD" "/ML" "/MT" ; do
  197.     cat <<-EOF >>/tmp/$$_cmd.sed
  198.   s|  *${p}d| $p|g
  199.   s| $p| @C|g
  200. EOF
  201.   done
  202.   # Finish with code generation switch, and then make sure
  203.   # that incremental linking is on except for wxWindows DLLs (slow).
  204.   #
  205.   cat <<-EOF >>/tmp/$$_cmd.sed
  206.   t cfgrst
  207.   :cfgrst
  208.   s|@C|$CFG|
  209.   t cfgokay
  210.   s|/nologo|& $CFG|
  211.   t cfgokay
  212.   s| CPP|& $CFG|
  213.   :cfgokay
  214.   s| @C||g
  215. }
  216. /^# ADD .*LINK32 / s|  */incremental[:yesno]*||g
  217. EOF
  218.   if [ `grep -c '^# ADD .*LINK32 .*/dll' $1` = 0 ]; then
  219.     INCRLNK='yes'
  220.   elif [ -n "$GUI" -a `echo "$WXDLL" | grep -c '^# ADD .*CPP .*WXMAKINGDLL'` != 0 ]; then
  221.     INCRLNK='no'
  222.   else
  223.     INCRLNK=""
  224.   fi
  225.   test "$INCRLNK" = "yes" -a $DEBUG != Debug  &&  INCRLNK='no'
  226.   if [ -n "$INCRLNK" ]; then
  227.     echo "/^# ADD .*LINK32 / s|/nologo|& /incremental:$INCRLNK|" >>/tmp/$$_cmd.sed
  228.   fi
  229.   # wxWindows-specific changes from now on.
  230.   #
  231.   if [ "$GUI" = "wxwin" ]; then
  232.     # Define __WXDEBUG__ for debug configs.
  233.     #
  234.     if [ $DEBUG = Debug ]; then
  235.       WXDEBUG='/D "__WXDEBUG__=1"'
  236.     else
  237.       WXDEBUG=""
  238.     fi
  239.     # ${WX} is to be added to compiler options.
  240.     #
  241.     WX=`echo $WXDEBUG $WXDLL`
  242.     if [ -n "$WX" ]; then
  243.       cat <<-EOF >>/tmp/$$_cmd.sed
  244. /^# ADD .*CPP / {
  245.   t reset
  246.   :reset
  247.   s|/Y|$WX &|
  248.   t success
  249.   s|/D|$WX &|
  250.   t success
  251.   s|/c|$WX &|
  252.   t success
  253.   s| *$| $WX|
  254.   :success
  255. }
  256. EOF
  257.     fi
  258.     # Enforce /subsystem:windows.
  259.     #
  260.     cat <<-EOF >>/tmp/$$_cmd.sed
  261. /^# ADD .*LINK32 / s|/subsystem:[A-Za-z]*|@s|g
  262. /^# ADD LINK32 / {
  263.   t wxlrst
  264.   :wxlrst
  265.   s|@s|/subsystem:windows|
  266.   t wxlcnt
  267.   s|/nologo|& /subsystem:windows|
  268.   t wxlcnt
  269.   s|$| /subsystem:windows|
  270.   :wxlcnt
  271. }
  272. /^# ADD .*LINK32 / s| *@s||g
  273. EOF
  274.     # Take care of libraries: remove all wxWindows ones
  275.     #
  276.     cat <<-EOF >>/tmp/$$_cmd.sed
  277. /^# ADD .*LINK32 .*wx[dl]\{0,1\}[.]lib/ {
  278.   s/  *jpegd\{0,1\}[.]lib//g
  279.   s/  *pngd\{0,1\}[.]lib//g
  280.   s/  *tiffd\{0,1\}[.]lib//g
  281.   s/  *xpmd\{0,1\}[.]lib//g
  282.   s/  *zlibd\{0,1\}[.]lib//g
  283.   s/  *wx[dl]\{0,1\}[.]lib/ @wx/g
  284. EOF
  285.     # Insert them back but with correct names (which we use).
  286.     # Note that in DLL mode only one (import) library has to be included.
  287.     # The note above was true formely; now images libs are all static.
  288.     #
  289.     #if [ _$SFX != _DLL ]; then
  290.       cat <<-EOF >>/tmp/$$_cmd.sed
  291.   s/@wx/jpeg.lib png.lib tiff.lib zlib.lib wx.lib/
  292. EOF
  293.     #else
  294.     #  cat <<-EOF >>/tmp/$$_cmd.sed
  295.     #   s/@wx/wx.lib/
  296.     # EOF
  297.     #fi
  298.     cat <<-EOF >>/tmp/$$_cmd.sed
  299.   s/ @wx//g
  300. }
  301. EOF
  302.   fi
  303.   # FLTK specific changes from now on
  304.   #
  305.   if [ "$GUI" = "fltk" ]; then
  306.     # Enforce /subsystem:windows.
  307.     #
  308.     cat <<-EOF >>/tmp/$$_cmd.sed
  309. /^# ADD .*LINK32 / s|/subsystem:[A-Za-z]*|@s|g
  310. /^# ADD LINK32 / {
  311.   t fllrst
  312.   :fllrst
  313.   s|@s|/subsystem:windows|
  314.   t fllcnt
  315.   s|/nologo|& /subsystem:windows|
  316.   t fllcnt
  317.   s|$| /subsystem:windows|
  318.   :fllcnt
  319. }
  320. /^# ADD .*LINK32 / s| *@s||g
  321. EOF
  322.     # Take care of libraries: remove all FLTK ones
  323.     #
  324.     cat <<-EOF >>/tmp/$$_cmd.sed
  325. /^# ADD .*LINK32 * fltk[a-z]*[.]lib/ {
  326.   s/  *fltk[a-z]*[.]lib/ @fltk/g
  327. EOF
  328.     # Insert them back but with correct names (which we use).
  329.     # Note that in DLL mode only one (import) library has to be included.
  330.     #
  331.     #if [ _$SFX != _DLL ]; then
  332.     #  cat <<-EOF >>/tmp/$$_cmd.sed
  333.     #   s/@fltk/fltkforms.lib fltkimages.lib fltkgl.lib fltk.lib/
  334.     # EOF
  335.     #else
  336.       cat <<-EOF >>/tmp/$$_cmd.sed
  337.   s/@fltk/fltkdll.lib/
  338. EOF
  339.     #fi
  340.     cat <<-EOF >>/tmp/$$_cmd.sed
  341.   s/ @fltk//g
  342. }
  343. EOF
  344.   fi
  345.   # Print name of configuration, which was created, and run the script.
  346.   #
  347.   echo "${DEBUG}${SFX}" ${GUI:+"("$GUI")"}
  348.   sed -f /tmp/$$_cmd.sed $1 >/tmp/$$_new
  349.   cp -f /tmp/$$_new $1
  350.   rm -f /tmp/$$_cmd.sed /tmp/$$_new
  351.   return 0
  352. }
  353. configcb()
  354. {
  355.   cat /dev/null >/tmp/$$_cmd.sed
  356.   # First replace config name wherever appropriate.
  357.   #
  358.   for p in Release Debug ; do
  359.     for q in DLL MT ; do
  360.       cat <<-EOF >>/tmp/$$_cmd.sed
  361. s|$p *$q|$p|g
  362. EOF
  363.     done
  364.     if [ $p != $2$3 ]; then
  365.       cat <<-EOF >>/tmp/$$_cmd.sed
  366. s|$p|$2$3|g
  367. EOF
  368.     fi
  369.   done
  370.   sed -f /tmp/$$_cmd.sed $1
  371.   rm -f /tmp/$$_cmd.sed
  372. }
  373. usage() {
  374.   echo 'Automatic multi config for Microsoft Visual C++ Project File V 6.0'
  375.   echo 'Usage:'
  376.   echo `basename $0` '[--without-dizzy] filename'
  377.   exit 1
  378. }
  379. if [ _$1 = _--without-dizzy ]; then
  380.   without_dizzy="$1"
  381.   shift
  382. else
  383.   without_dizzy=""
  384. fi
  385. if [ _$1 = _ ]; then
  386.   usage
  387. elif [ ! -f $1 ]; then
  388.   echo "ERROR: File "$1" must exist. Stop."
  389.   exit 3
  390. fi
  391. if [ _$2 != _ ]; then
  392.   if [ $2 != 4 -a $2 != 3 -a $2 != 2 ]; then
  393.     echo "ERROR: Unknown special parameter "$2". Stop."
  394.     exit 3
  395.   fi
  396.   if [ $2 = 2 ]; then
  397.     CFGSET='DLL'
  398.   elif [ $2 = 3 ]; then
  399.     CFGSET='MT'
  400.   else
  401.     CFGSET='DLL ""'
  402.   fi
  403. else
  404.   CFGSET='DLL MT ""'
  405. fi
  406. file=/tmp/$$_file
  407. # DOS-2-UNIX conversion (shouldn't be here, but just in case for sanity).
  408. #
  409. sed -e 's/ *$//' $1 >$file
  410. # Check signature.
  411. #
  412. cat <<-"EOF" >/tmp/$$_genusign
  413. # Microsoft Developer Studio Project File
  414. # Microsoft Developer Studio Generated Build File, Format Version 6.00
  415. # ** DO NOT EDIT **
  416. # TARGTYPE
  417. EOF
  418. cat /dev/null >/tmp/$$_filesign
  419. head -1 $file | sed -e 's/ -.*//' >>/tmp/$$_filesign
  420. head -3 $file | tail +2 >>/tmp/$$_filesign
  421. head -5 $file | tail +4 | sed -e 's/ *".*$//' >>/tmp/$$_filesign
  422. diff /tmp/$$_filesign /tmp/$$_genusign >/dev/null 2>&1
  423. exit=$?
  424. rm -f /tmp/$$_filesign /tmp/$$_genusign
  425. if [ $exit != 0 ]; then
  426.   echo "ERROR: $1 doesn't look like MSVC++ Project File. Stop."
  427.   rm -f $file
  428.   exit 2
  429. fi
  430. # Extract configuration part of the project file and count configurations.
  431. #
  432. cat <<-EOF >/tmp/$$_.sed
  433. /^!IF /,/^!ENDIF/ {
  434.   /^!ENDIF/ q
  435.   p
  436. }
  437. d
  438. EOF
  439. NCFG=`sed -n -f /tmp/$$_.sed $file | egrep -c '^[!ELS]+IF '`
  440. rm -f /tmp/$$_.sed
  441. if [ $NCFG -gt 1 ]; then
  442.   echo "ERROR: $1 contains more than one configuration ($NCFG). Stop."
  443.   rm -f $file
  444.   exit 2
  445. fi
  446. # Check for per-config dependencies, and warn if any.
  447. #
  448. DEP=`grep -c '^# PROP  *AllowPerConfigDependencies  *1' $file`
  449. cat <<-EOF >/tmp/$$_prop.sed
  450. /^# Begin Target/,$ p
  451. d
  452. EOF
  453. sed -n -f /tmp/$$_prop.sed $file | grep '^!IF ' >/dev/null 2>&1
  454. if [ $DEP != 0 -a $? = 0 ]; then
  455.   echo "WARNING: $1 contains per-configuration dependencies,"
  456.   echo 'which may or may not be handled correctly by this script.'
  457. fi
  458. rm -f /tmp/$$_prop.sed
  459. # Extract beginning of the file.
  460. #
  461. cat <<-EOF >/tmp/$$_head.sed
  462. /^!MESSAGE "/ {
  463.   w /tmp/$$_cmp
  464.   q
  465. }
  466. p
  467. d
  468. EOF
  469. sed -n -f /tmp/$$_head.sed $file >/tmp/$$_head
  470. rm -f /tmp/$$_head.sed
  471. config /tmp/$$_head Release `echo $CFGSET | sed -e 's| .*||'` >/dev/null 2>&1
  472. sed -e 's/ "/ %/' -e 's/" /% /' /tmp/$$_cmp >/tmp/$$_comp
  473. mv /tmp/$$_comp /tmp/$$_cmp
  474. # Extract the middle part.
  475. #
  476. cat <<-EOF >/tmp/$$_mid.sed
  477. /^# Begin Project/,/^!IF / {
  478.   /^# PROP  *AllowPerConfigDependencies / s/  *1/ 0/
  479.   /^!IF / q
  480.   /^# PROP BASE / {
  481.     i\
  482.     q
  483.   }
  484.   p
  485. }
  486. d
  487. EOF
  488. sed -n -f /tmp/$$_mid.sed $file >/tmp/$$_mid
  489. rm -f /tmp/$$_mid.sed
  490. # Now extract configuration-dependent part, and make required configs.
  491. #
  492. cat <<-EOF >/tmp/$$_cut.sed
  493. /^!IF /,/^!E/ {
  494.   s/^!ELSEIF .*$/!ENDIF /
  495.   H
  496. }
  497. /^!ENDIF/ {
  498.   x
  499.   q
  500. }
  501. d
  502. EOF
  503. sed -n -f /tmp/$$_cut.sed $file >/tmp/$$_cfgtmpl
  504. if [ ! -s /tmp/$$_cfgtmpl ]; then
  505.   cat <<-EOF >/tmp/$$_cut.sed
  506. /^# PROP BASE /,/^# Begin Target/ {
  507.   /# Begin Target/ q
  508.   p
  509. }
  510. d
  511. EOF
  512.   echo "!IF  "$(CFG)" == "`sed -e 's/^.* %//' -e 's/% .*$//' /tmp/$$_cmp`"" >/tmp/$$_cfgtmpl
  513.   echo >>/tmp/$$_cfgtmpl
  514.   sed -n -f /tmp/$$_cut.sed $file >>/tmp/$$_cfgtmpl
  515.   echo >>/tmp/$$_cfgtmpl
  516.   echo '!ENDIF ' >>/tmp/$$_cfgtmpl
  517. fi
  518. rm -f /tmp/$$_cut.sed
  519. cat /dev/null >/tmp/$$_title
  520. cat /dev/null >/tmp/$$_cfg
  521. cat /dev/null >/tmp/$$_message
  522. for i in Release Debug ; do
  523.   for j in $CFGSET ; do
  524.     if [ $j = '""' ]; then
  525.       j=""
  526.     fi
  527.     cp /tmp/$$_cfgtmpl /tmp/$$_cfg_$i$j
  528.     config $without_dizzy /tmp/$$_cfg_$i$j $i $j >>/tmp/$$_message
  529.     if [ $? != 0 ]; then
  530.       tail -1 /tmp/$$_message
  531.       rm -f /tmp/$$_*
  532.       exit 3
  533.     fi
  534.     grep '^!IF ' /tmp/$$_cfg_$i$j >>/tmp/$$_title
  535.     cat /tmp/$$_cfg_$i$j >>/tmp/$$_cfg
  536.     rm -f /tmp/$$_cfg_$i$j
  537.   done
  538. done
  539. echo "${1}:" `cat /tmp/$$_message`
  540. rm -f /tmp/$$_cfgtmpl /tmp/$$_message
  541. # Summarize configurations in the header and tail parts of the project.
  542. #
  543. sed -e 's/^!IF.*CFG)" == //' -e 'y/ "/~%/' /tmp/$$_title >/tmp/$$_tlt
  544. mv /tmp/$$_tlt /tmp/$$_title
  545. cat /dev/null >/tmp/$$_msg
  546. cat /dev/null >/tmp/$$_name
  547. for i in `cat /tmp/$$_title` ; do
  548.   sed -e "s/ %.*% / $i /" -e 'y/~%/ "/' /tmp/$$_cmp >>/tmp/$$_msg
  549.   echo "# Name $i" | tr '~%' ' "' >>/tmp/$$_name
  550. done
  551. sed -e 's/ .*$/ /' /tmp/$$_cmp >>/tmp/$$_msg
  552. echo >>/tmp/$$_msg
  553. rm -f /tmp/$$_title
  554. # Extract the tail part and modify name list on-the-fly.
  555. #
  556. cat <<-EOF >/tmp/$$_tail.sed
  557. /^# Begin Target/,/^# End Project/ {
  558.   /^# Name /  {
  559.     r /tmp/$$_name
  560.     d
  561.   }
  562.   /^!IF /,/^!ENDIF/ d
  563.   p
  564. }
  565. d
  566. EOF
  567. sed -n -f /tmp/$$_tail.sed $file >/tmp/$$_tail
  568. rm -f /tmp/$$_tail.sed /tmp/$$_name $file
  569. # Glue all parts but the tail.
  570. #
  571. cat /tmp/$$_head /tmp/$$_msg /tmp/$$_mid /tmp/$$_cfg >/tmp/$$_newhead
  572. mv /tmp/$$_newhead /tmp/$$_head
  573. rm -f /tmp/$$_msg /tmp/$$_mid /tmp/$$_cfg
  574. # Replace ENDIF..IF with ELSEIF.
  575. #
  576. cat <<-EOF >/tmp/$$_elseif.sed
  577. /^!ENDIF/,/^!IF / {
  578.   s/^!IF /!ELSEIF /
  579.   /^!ELSEIF / !d
  580. }
  581. EOF
  582. sed -f /tmp/$$_elseif.sed /tmp/$$_head >/tmp/$$_newhead
  583. rm -f /tmp/$$_elseif.sed
  584. mv /tmp/$$_newhead /tmp/$$_head
  585. cat <<-EOF >>/tmp/$$_head
  586. !ENDIF 
  587. EOF
  588. grep '^SOURCE=' $1 | sed 's/^SOURCE=//;s/[\]/\\/g;s/[.]/[.]/g' >/tmp/$$_flist
  589. for i in `cat /tmp/$$_flist | sed 's/[[]//g;s/]//g'`; do
  590.   file="/tmp/$$_`echo $i | sed 's/[./\]/_/g'`"
  591.   cat <<-EOF >/tmp/$$_cbext.sed
  592. /^SOURCE=$i$/,/^SOURCE=/ {
  593.   /^SOURCE=$i$/ d
  594.   /^[#] End Source File/ !H
  595.   /^!ENDIF/ {
  596.     x
  597.     q
  598.   }
  599.   /^[#] End Custom Build/ {
  600.     x
  601.     q
  602.   }
  603.   d
  604. }
  605. d
  606. EOF
  607.   sed -f /tmp/$$_cbext.sed $1 >$file
  608. done
  609. rm -f /tmp/$$_cbext.sed
  610. cat /dev/null >/tmp/$$_cb.sed
  611. for k in `cat /tmp/$$_flist | sed 's/[[]//g;s/]//g'`; do
  612.   file="/tmp/$$_`echo $k | sed 's/[./\]/_/g'`"
  613.   test -s $file  ||  continue
  614.   if [ `readfirstln $file | grep -c '^[!]'` = 0 ]; then
  615.     echo "!IF  "$(CFG)" == "`sed -e 's/^.* %//' -e 's/% .*$//' /tmp/$$_cmp`"" >$file.1
  616.     echo           >>$file.1
  617.     cat $file      >>$file.1
  618.     echo           >>$file.1
  619.     echo '!ENDIF ' >>$file.1
  620.     mv $file.1 $file
  621.   fi
  622.   cat /dev/null >$file.new
  623.   for i in Release Debug ; do
  624.     for j in $CFGSET ; do
  625.       if [ $j = '""' ]; then
  626.         j=""
  627.       fi
  628.       configcb $file $i $j >>$file.new
  629.     done
  630.   done
  631.   echo >$file
  632.   # Replace ENDIF..IF with ELSEIF.
  633.   #
  634.   cat <<-EOF >/tmp/$$_elseif.sed
  635. /^!ENDIF/,/^!IF / {
  636.   s/^!IF /!ELSEIF /
  637.   /^!ELSEIF / !d
  638. }
  639. EOF
  640.   sed -f /tmp/$$_elseif.sed $file.new >>$file
  641.   rm -f /tmp/$$_elseif.sed $file.new
  642.   cat <<-EOF >>$file
  643. !ENDIF
  644. EOF
  645.   cat <<-EOF >>/tmp/$$_cb.sed
  646. /^SOURCE=$k$/,/^[#] End Source File/ {
  647.   /^SOURCE=$k$/ {
  648.     p
  649.     r $file
  650.     d
  651.   }
  652.   /^[#] End Source File/ p
  653.   d
  654. }
  655. EOF
  656. done
  657. sed -f /tmp/$$_cb.sed /tmp/$$_tail >/tmp/$$_tail.1
  658. # Final catenation of results to a single project file.
  659. #
  660. cat /tmp/$$_head /tmp/$$_tail.1 >/tmp/$$_proj
  661. rm -f /tmp/$$_cmp /tmp/$$_head /tmp/$$_tail /tmp/$$_tail.1 /tmp/$$_cb.sed
  662. for i in `cat /tmp/$$_flist | sed 's/[[]//g;s/]//g'`; do
  663.   file="/tmp/$$_`echo $i | sed 's/[./\]/_/g'`"
  664.   rm -f $file
  665. done
  666. rm -f /tmp/$$_flist
  667. # Remove consequent empty lines (could occur earlier in substitutions)
  668. # and replace original project file (backup kept in .bak).
  669. # Make the output file to be a DOS (CR/LF) text file.
  670. #
  671. cat <<-EOF >/tmp/$$_pretty.sed
  672. /./ {
  673.   p
  674.   d
  675. }
  676. /^$/ p
  677. :Empty
  678. /^$/ {
  679.   N
  680.   s/.//
  681.   b Empty
  682. }
  683. p
  684. EOF
  685. mv $1 $1.bak
  686. PATH=$PATH:/usr/sbin:/sbin
  687. doser='sed -e s/$/ /'
  688. if [ `echo $OSTYPE   2>&1 | grep -c -i cygwin` -ge 1 -o  
  689.      `echo $MACHTYPE 2>&1 | grep -c -i cygwin` -ge 1 -o  
  690.      `mount          2>&1 | grep -c -i cygwin` -ge 1 ]; then
  691.   echo >$1
  692.   test "`ls -l $1 | tr 't' ' ' | sed 's/  */ /g' | cut -f5 -d' '`" != "1"  && 
  693.     doser='sed -n p'
  694. fi
  695. sed -n -f /tmp/$$_pretty.sed /tmp/$$_proj | $doser >$1
  696. rm -f /tmp/$$_pretty.sed /tmp/$$_proj
  697. touch -r $1.bak $1
  698. exit 0
  699. #  ===========================================================================
  700. #  PRODUCTION $Log: one2all.sh,v $
  701. #  PRODUCTION Revision 1000.0  2003/10/29 14:25:04  gouriano
  702. #  PRODUCTION PRODUCTION: IMPORTED [ORIGINAL] Dev-tree R1.40
  703. #  PRODUCTION
  704. #  ===========================================================================