home *** CD-ROM | disk | FTP | other *** search
/ PC World 1998 October / PCWorld_1998-10_cd.bin / software / prehled / komix / DATA.Z / mkmktmpl.tcl < prev    next >
Text File  |  1997-10-10  |  5KB  |  166 lines

  1. #---------------------------------------------------------------------------
  2. #
  3. # Copyright (c) 1997 by Cayenne Software Inc.
  4. #
  5. # This software is furnished under a license and may be used only in
  6. # accordance with the terms of such license and with the inclusion of
  7. # the above copyright notice. This software or any other copies thereof
  8. # may not be provided or otherwise made available to any other person.
  9. # No title to and ownership of the software is hereby transferred.
  10. #
  11. # The information in this software is subject to change without notice
  12. # and should not be construed as a commitment by Cayenne Software Inc.
  13. #
  14. #---------------------------------------------------------------------------
  15. #
  16. #       File            : @(#)mkmktmpl.tcl    /main/titanic/11 11 Jun 1997
  17. #       Description     : Make template generator
  18. #
  19. #---------------------------------------------------------------------------
  20. #
  21.  
  22. require caynutil.tcl
  23.  
  24. set classLibProcs {}
  25.  
  26. require_all_module_files mkmkinc.tcl
  27.  
  28. proc makeMakefileTemplate {section} {
  29.     if {[info commands getLinkCommand] == ""} {
  30.         return
  31.     }
  32.     set suffixSect [TextSection new]
  33.     set libSect [TextSection new]
  34.     set inclSect [TextSection new]
  35.     set defineSect [TextSection new]
  36.     set targetSect [TextSection new]
  37.     set ruleSect [TextSection new]
  38.     set dependSect [TextSection new]
  39.  
  40.     $suffixSect append ".SUFFIXES:"
  41.     $libSect append "LIBS ="
  42.     $inclSect append "INCS ="
  43.     if {[info commands getIncludePrefix] != ""} {
  44.         $inclSect append "~\[foreach sys \[\[\$clientContext currentPhase\] systemVersions\] "
  45.         $inclSect append "\{\$current_section append \" [getIncludePrefix]"
  46.         $inclSect append "\[location .. \[\[\$sys system\] name\]\]\" \} \]"
  47.     }
  48.  
  49.     expand_text $targetSect {
  50.         # (default:) make all executables and libraries
  51.         all:        \~[mm_files executable] \~[mm_files library]
  52.         
  53.         # make all targets
  54.         system:        \~[mm_files]
  55.         
  56.         # install all executables and libraries
  57.         install:    \~[mm_files executable install_] \~[mm_files library install_]
  58.         
  59.         # clean all
  60.         clean:    \~[mm_files $TGT_TYPES clean_] clean_depend
  61.         
  62.         # clobber all
  63.         clobber:    \~[mm_files $TGT_TYPES clobber_]
  64.         
  65.         #
  66.         #    filetype "executable"
  67.         #
  68.         \~[mm_foreach_target executable {
  69.         
  70.         \~[mm_obj_name] = \~[mm_dependencies - .$OBJ_EXT "\\\\\\n\\t"]
  71.         
  72.         \~[mm_tgt_path]:    $(\~[mm_obj_name]) \~[mm_dependencies library .$LIB_EXT]
  73.             ~[$current_section append [getLinkCommand]]
  74.         
  75.         install_\~[mm_tgt_path]: \~[mm_tgt_path]
  76.             \~$CP_CMND \~[mm_tgt_path] \~[mm_install_path $target]
  77.         
  78.         clean_\~[mm_tgt_path]:
  79.             \~$RMF_CMND $(\~[mm_obj_name])
  80.         
  81.         clobber_\~[mm_tgt_path]: clean_\~[mm_tgt_path]
  82.             \~$RMF_CMND \~[mm_tgt_path]
  83.         }]
  84.         
  85.         
  86.         #
  87.         #    filetype "library"
  88.         #
  89.         \~[mm_foreach_target library {
  90.         
  91.         \~[mm_obj_name] = \~[mm_dependencies - .$OBJ_EXT "\\\\\\n\\t"]
  92.         
  93.         \~[mm_tgt_path]:    $(\~[mm_obj_name])
  94.             ~[$current_section append [getArCommand]]
  95.             \~[mm_process_lib [mm_tgt_path]]
  96.         
  97.         install_\~[mm_tgt_path]: \~[mm_tgt_path]
  98.             \~$CP_CMND \~[mm_tgt_path] \~[mm_install_path $target]
  99.             \~[mm_process_lib [mm_install_path $target]]
  100.         
  101.         clean_\~[mm_tgt_path]:
  102.             \~$RMF_CMND $(\~[mm_obj_name])
  103.         
  104.         clobber_\~[mm_tgt_path]: clean_\~[mm_tgt_path]
  105.             \~$RMF_CMND \~[mm_tgt_path]
  106.         }]
  107.     }
  108.  
  109.     set lastCmd ""
  110.     foreach cmd [lsort $classLibProcs] {
  111.         if {$cmd != $lastCmd} {
  112.             set lastCmd $cmd
  113.             if {[info commands $cmd] != ""} {
  114.                 eval {$cmd $suffixSect $libSect $inclSect \
  115.                     $defineSect $ruleSect $dependSect}
  116.             }
  117.         }
  118.     }
  119.     if {[info commands persistentMakefileTemplate] != ""} {
  120.         persistentMakefileTemplate $suffixSect $libSect $inclSect \
  121.             $defineSect $ruleSect $dependSect
  122.     }
  123.     if {[info commands compilerMakefileTemplate] != ""} {
  124.         compilerMakefileTemplate $suffixSect $libSect $inclSect \
  125.             $defineSect $ruleSect $dependSect
  126.     }
  127.  
  128.     $section append "\n"
  129.     $section append "SHELL = /bin/sh\n\n"
  130.     $section append ".SUFFIXES:\n"
  131.     $section appendSect $suffixSect
  132.     $section append "\n\n"
  133.     $section appendSect $inclSect
  134.     $section append "\n"
  135.     $section appendSect $defineSect
  136.     $section appendSect $libSect
  137.     $section append "\n\n"
  138.     $section appendSect $targetSect
  139.     $section append "\n"
  140.     $section appendSect $ruleSect
  141.     $section append "\n"
  142.     $section appendSect $dependSect
  143.     $section append "\n"
  144. }
  145.  
  146. proc do_makefile {} {
  147.     set makefileSect [TextSection new]
  148.     makeMakefileTemplate $makefileSect
  149.     set tmpName [BasicFS::tmpFile]
  150.     BasicFS::writeFile $tmpName [$makefileSect contents]
  151.     set cc [ClientContext::global]
  152.     set currentConfig [$cc currentConfig]
  153.     if {![$currentConfig isNil]} {
  154.         set cfv [$currentConfig searchCustomFileVersion maketmpl maketmpl]
  155.         if [$cfv isNil] {
  156.             set cfv [$currentConfig createCustomFileVersion maketmpl maketmpl]
  157.         }
  158.         $cfv lockForWrite "Create new makefile template"
  159.         $cfv upLoad $tmpName
  160.         $cfv quit
  161.     } else {
  162.         puts "Must be at configuration or lower level"
  163.     }
  164.     BasicFS::removeFile $tmpName
  165. }
  166.