home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / VSCPPv7.zip / VACPP / IBMCPP / smarts / SCRIPTS / CPDLLSCR.CMD < prev    next >
OS/2 REXX Batch file  |  1995-06-02  |  10KB  |  285 lines

  1. /*REXX*/
  2.  
  3. /*   CPDLLSCR.CMD   Project Smarts install script for C++ DLL project
  4.  *
  5.  *   Licensed Materials - Property of IBM
  6.  *
  7.  *   "Restricted Materials of IBM"
  8.  *
  9.  *   IBM WorkFrame
  10.  *
  11.  *   (C) Copyright IBM Corp. 1995. All Rights Reserved.
  12.  *
  13.  *   US Government Users Restricted Rights - Use, duplication or
  14.  *   disclosure restricted by GSA ADP Schedule Contract with
  15.  *   IBM Corp.
  16.  *
  17.  */
  18.  
  19.  
  20. /* Initialize - use a global stem variable. */
  21. stem = "stem"
  22. RC_OK     = 0
  23. RC_NOTOK  = 94
  24. RC_CANCEL = 95
  25.  
  26.  
  27. /* Open the installation console. */
  28. rc = IwfOpenConsole(stem);
  29.  
  30.  
  31. /* Load the REXX utility functions. */
  32. rc = RxFuncAdd('SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs');
  33. rc = SysLoadFuncs();
  34.  
  35. /* Extract the passed parameters. */
  36. if (Arg() <> 3) Then
  37.    call Abort("Error in parameter list.");
  38. Parse Arg Proj,Src,Cat;
  39.  
  40. SAY Cat
  41.  
  42. /* Initialize the progress, status, and log. */
  43. stem.usPercent     = 0
  44. stem.pszStatusText = "Initializing..."
  45. rc = IwfUpdateConsoleProgress(stem);
  46. rc = IwfUpdateConsoleStatus(stem);
  47. SAY "Initializing the Project Smarts install..."
  48. SAY " "
  49.  
  50. /* Present disclaimers. */
  51. stem.usPercent     = 10
  52. stem.pszStatusText = "Presenting disclaimers..."
  53. rc = IwfUpdateConsoleProgress(stem);
  54. rc = IwfUpdateConsoleStatus(stem);
  55. line1 = 'DISCLAIMER OF WARRANTIES.  The code that will be installed is '
  56. line2 = 'template code created by IBM Corporation. This code is not '
  57. line3 = 'part of any standard or IBM product and is provided to you solely '
  58. line4 = 'for  the purpose of assisting you in the development of your '
  59. line5 = 'applications.  The code is provided "AS IS", without '
  60. line6 = 'warranty of any kind.  IBM shall not be liable for any damages '
  61. line7 = 'arising out of your use of the sample code, even if they have been '
  62. line8 = 'advised of the possibility of such damages.'
  63. SAY line1||line2||line3||line4||line5||line6||line7||line8
  64. SAY " "
  65.  
  66. /* Query the target location for the install. */
  67. stem.usPercent     = 30
  68. stem.pszStatusText = "Querying the install location..."
  69. rc = IwfUpdateConsoleProgress(stem);
  70. rc = IwfUpdateConsoleStatus(stem);
  71. SAY "Enter the project name, target directory, and folder for the installation."
  72. /* Set defaults for Location dialog */
  73. env='OS2ENVIRONMENT';                  /* Default target directory */
  74. tmploc = VALUE('tmp',,env)             /* is on TMP variable dir   */  
  75. tmploc = STRIP(tmploc,Trailing,'\');   /* Strip any backslashes at end of path */
  76. Locn = tmploc||'\cpdllprj';
  77. stem.pszTargetProject   = Proj
  78. stem.pszTargetDirectory = Locn
  79. stem.pszTargetFolder    = "Desktop"
  80. do until (rc = RC_OK)
  81.    rc = IwfQueryLocation(stem);
  82.    if (rc  = RC_CANCEL) then call Cancel
  83.    else
  84.    if (rc <> RC_OK) then call Abort("Error querying target information.");
  85. end
  86.  
  87.  
  88. /* Set up default variable settings for the installation. */
  89. stem.usPercent     = 40
  90. stem.pszStatusText = "Confirming variable settings..."
  91. stem.usVariableCount = 7
  92. stem.pszVariableName.1        = "Your_Name"
  93. stem.pszVariableDescription.1 = "Your name for the source file prolog."
  94. stem.pszVariableValue.1       = "Your name"
  95. stem.pszVariableName.2        = "Date"
  96. stem.pszVariableDescription.2 = "The date for the source file prolog."
  97. stem.pszVariableValue.2       = Date()
  98. stem.pszVariableName.3        = "File_name"
  99. stem.pszVariableDescription.3 = "The file name for the generated files, for example, CPPDLL."
  100. stem.pszVariableValue.3       = "cppdll"
  101. stem.pszVariableName.4        = "Export_Method"
  102. stem.pszVariableDescription.4 = "Specify the export method you want use:\n1 to export by ordinal \n2 to export by assigned name and ordinal \n3 to export by mangled name"
  103. stem.pszVariableValue.4       = "2";
  104. stem.pszVariableName.5        = "Runtime_library"
  105. stem.pszVariableDescription.5 = "Specify the runtime libraries you want to use:\n1 for single-threaded \n2 for multi-threaded"
  106. stem.pszVariableValue.5       = "1";
  107. stem.pszVariableName.6        = "Custom_Init_Term"
  108. stem.pszVariableDescription.6 = "Specify whether you want to provide your own custom initialization and termination entry point for the DLL:\n1 to use the default \n2 for custom (a template source file is created for you)"
  109. stem.pszVariableValue.6       = "1";
  110. stem.pszVariableName.7        = "Prolog"
  111. stem.pszVariableDescription.7 = "The prolog that appears at the head of all the generated source files."
  112. stem.pszVariableValue.7       = "/* \n * This file was created for %YOUR_NAME% \n * by Project Smarts on %DATE%. \n */";
  113. rc = IwfUpdateConsoleProgress(stem);
  114. rc = IwfUpdateConsoleStatus(stem);
  115. SAY "Confirm the settings of variables used to customize the installation."
  116. /* Restore any saved variable settings */
  117. stem.pszCatalog = Cat;
  118. stem.pszApplication = 'VAPSCPDLL';
  119. rc = IwfRestoreVariables(stem);
  120. if (rc <> RC_OK) then SAY ("Could not restore variable settings. Will use defaults.");
  121. /* Restore date to current date */
  122. stem.pszVariableValue.2 = Date()
  123. /* Display variable settings window */
  124. do until (rc = RC_OK)
  125.    rc = IwfQueryVariables(stem);
  126.    if (rc  = RC_CANCEL) then call Cancel
  127.    else
  128.    if (rc <> RC_OK) then call Abort("Error querying variable settings.");
  129.    call CheckVars;
  130. end
  131. /* Save variable settings */
  132. rc = IwfSaveVariables(stem);
  133. if (rc <> RC_OK) then SAY ("Error saving variable settings.");
  134.  
  135.  
  136. /* Strip any backslashes from the end of the specified target path */
  137. stem.pszTargetDirectory = STRIP(stem.pszTargetDirectory,Trailing,'\');
  138.  
  139. /* Copy the files over, substituting the variable settings. */
  140. stem.usPercent     = 50
  141. stem.pszStatusText = "Copying files, with substitution."
  142. rc = IwfUpdateConsoleProgress(stem);
  143. rc = IwfUpdateConsoleStatus(stem);
  144. SAY "The project source files in" Src "are being copied to" stem.pszTargetDirectory"."
  145. /* Copy the general files */
  146. stem.pszSourceFileMask = Src;
  147. rc = IwfCopyWithSubstitution(stem);
  148. if (rc <> RC_OK) then call Abort("Error performing copy with substitution.");
  149. /* Copy method-specific files */
  150. if (Method = '1') then stem.pszSourceFileMask = Src'\EXPORT'
  151. if (Method = '2') then stem.pszSourceFileMask = Src'\PRAGMA'
  152. if (Method = '3') then stem.pszSourceFileMask = Src'\CPPFILT'
  153. rc = IwfCopyWithSubstitution(stem);
  154. if (rc <> RC_OK) then call Abort("Error performing copy with substitution.");
  155.  
  156.  
  157. /* Renaming files */
  158. stem.usPercent     = 60
  159. stem.pszStatusText = "Renaming files."
  160. rc = IwfUpdateConsoleProgress(stem);
  161. rc = IwfUpdateConsoleStatus(stem);
  162. curdir = DIRECTORY();
  163. newdir = DIRECTORY(stem.pszTargetDirectory);
  164. rename 'cppdll.* 'stem.pszVariableValue.3'.*'
  165. if (rc <> RC_OK) then call Abort("Error renaming files. The specified file name may be invalid or the disk is full. Please delete any created files and start over.");
  166. /* Delete INITTERM.C if not required */
  167. if (InitTerm <> "2") then 
  168. del 'initterm.c'
  169. /* Restore current directory */
  170. call DIRECTORY curdir;
  171.  
  172.  
  173. /* Create the WorkFrame project */
  174. stem.usPercent     = 90;
  175. stem.pszStatusText = "Creating the Workframe/2 project.";
  176. rc = IwfUpdateConsoleProgress(stem);
  177. rc = IwfUpdateConsoleStatus(stem);
  178. SAY "The project will be created in "stem.pszTargetFolder;
  179. /* Get the path of the shell projects */
  180. ShellPath = VALUE('CPPMAIN',,env);   /* on CPPMAIN variable path */
  181. if ShellPath='' then call Abort("Error obtaining Project Smarts path.");
  182. ShellPath = ShellPath'\smarts\projects';
  183. if (Library="1") then
  184. DO
  185.   if (Method="3") then stem.pszSourceProject = ShellPath'\CDLL_SDF'
  186.                   else stem.pszSourceProject = ShellPath'\CDLL_SD'
  187. END
  188. if (Library="2") then
  189. DO
  190.   if (Method="3") then stem.pszSourceProject = ShellPath'\CDLL_MDF'
  191.                   else stem.pszSourceProject = ShellPath'\CDLL_MD'
  192. END
  193. SAY "Shell project: "stem.pszSourceProject;
  194. /* If CPPFILT method, must rename def file to BASICDEF */
  195. if (Method='3') then
  196. DO
  197.   curdir = DIRECTORY();
  198.   newdir = DIRECTORY(stem.pszTargetDirectory);
  199.   rename '*.def basicdef'
  200.   /* Restore current directory */
  201.   call DIRECTORY curdir;
  202. END
  203. /* Set up target directory */
  204. pszTarDir = stem.pszTargetDirectory;
  205. stem.pszTargetProjectSetup = 'TARGETNAME='stem.pszVariableValue.3'.dll;MAKEFILENAME='stem.pszVariableValue.3'.mak;PAMLOCATION:IWFBPAM='pszTarDir';PAMDEFAULT:IWFBPAM='pszTarDir';INHERITLIST=<CPPDFTPRJ>;TITLE='stem.pszTargetProject';'
  206. SAY stem.pszTargetProjectSetup;
  207. rc = IwfCreateProjectFromProject(stem)
  208. if (rc <> RC_OK) then call Abort("Error creating project.");
  209.  
  210.  
  211. /* Done! */
  212. stem.usPercent     = 100
  213. stem.pszStatusText = "Installation successful."
  214. rc = IwfUpdateConsoleProgress(stem);
  215. rc = IwfUpdateConsoleStatus(stem);
  216. SAY "Done!"
  217. SAY "The installation is complete and was successful."
  218. rc = RxMessageBox("The WorkFrame project has been created.", "Done!", "OK", "Information");
  219.  
  220.  
  221. /* We are done. */
  222. call Done(0);
  223.  
  224.  
  225.  
  226. CheckVars:
  227. /**** Process variable settings ****/
  228. /* Take only an 8-character file name */
  229. /* stem.pszVariableValue.3 = SUBSTR(stem.pszVariableValue.3,1,8); */
  230. /* stem.pszVariableValue.3 = STRIP(stem.pszVariableValue.3);      */
  231. SAY "New file name is: "stem.pszVariableValue.3;
  232. /* Strip any leading or trailing spaces from numeric variable values */
  233. stem.pszVariableValue.4 = STRIP(stem.pszVariableValue.4);
  234. stem.pszVariableValue.5 = STRIP(stem.pszVariableValue.5);
  235. stem.pszVariableValue.6 = STRIP(stem.pszVariableValue.6);
  236. Method = stem.pszVariableValue.4;
  237. Library = stem.pszVariableValue.5;
  238. InitTerm = stem.pszVariableValue.6;
  239. /* Check for invalid values */
  240. if \( (Method = "1") | (Method = "2") | (Method = "3") ) then
  241. DO
  242.  call ErrorMsg("Invalid export method specified.");
  243.  stem.pszVariableValue.4 = "2"
  244.  rc = RC_NOTOK
  245. END
  246. if \((library = "1") | (library = "2")) then
  247. DO
  248.  call ErrorMsg("Invalid runtime library choice specified.");
  249.  stem.pszVariableValue.5 = "1"
  250.  rc = RC_NOTOK
  251. END
  252. if \((InitTerm = "1") | (InitTerm = "2")) then
  253. DO
  254.  call ErrorMsg("Invalid Init/Term DLL choice specified.");
  255.  stem.pszVariableValue.6 = "1"
  256.  rc = RC_NOTOK
  257. END  
  258. return;
  259.  
  260.  
  261. Cancel:
  262. rcCancel = RxMessageBox("Do you really want to cancel?", , "YesNo", "Query")
  263. if (rcCancel = 6) Then
  264.    call Done(8)
  265. return
  266.  
  267. Abort:
  268. parse arg abortMessage
  269. rcAbort = RxMessageBox(abortMessage, , "OK", "Error")
  270. call Done(16)
  271.  
  272. ErrorMsg:
  273. parse arg errorMsg
  274. rcMsg = RxMessageBox(errorMsg, , "OK", "Error")
  275. return
  276.  
  277. Done:
  278. arg exitRc
  279. /* Close the installation console. */
  280. rcDone = IwfCloseConsole(stem);
  281. exit(exitRc)
  282.  
  283.  
  284.  
  285.