diff --git a/.gitignore b/.gitignore index 5f2915c..eaef6a0 100644 --- a/.gitignore +++ b/.gitignore @@ -22,4 +22,19 @@ HyperSpec/* HyperSpec-Legalese.text HyperSpec-README.text .vs/* +# installer staff +*.msi +*.wixobj +*.wixpdb +*.tar +installer/Standard/ +# automatically generated installer components +installer/Libraries.wxs +installer/Modules.wxs +installer/Sys.wxs +installer/Documentation.wxs +installer/Examples.wxs +installer/Headers.wxs +installer/HyperSpec.wxs +installer/LICENSE.rtf diff --git a/Corman Lisp 3.0.ise b/Corman Lisp 3.0.ise deleted file mode 100644 index 85fa4f6..0000000 Binary files a/Corman Lisp 3.0.ise and /dev/null differ diff --git a/Corman Lisp 3.02.ism b/Corman Lisp 3.02.ism deleted file mode 100644 index 4c0f95a..0000000 Binary files a/Corman Lisp 3.02.ism and /dev/null differ diff --git a/Utilities/install-hyperspec.lisp b/Utilities/install-hyperspec.lisp index 3d39998..9b9a2cc 100644 --- a/Utilities/install-hyperspec.lisp +++ b/Utilities/install-hyperspec.lisp @@ -72,29 +72,20 @@ typedef struct _header (ccl:unmap-file address))) (defun install-hyperspec () - (if (eq (win:message-box-yes-no "Do you want to install the Common Lisp HyperSpec (from Xanalys)?" - "Install Common Lisp HyperSpec") 'win:idyes) - (let ((gzpath (namestring (truename (merge-pathnames "HyperSpec-6-0.tar.gz")))) - (tarpath (namestring (truename (merge-pathnames "HyperSpec-6-0.tar")))) - (hyperspec-path (namestring (truename (merge-pathnames "hyperspec/"))))) - - ;; unless the Hyperspec is already installed at this location, extract - ;; it to that location - (unless (probe-file (merge-pathnames "Front\\Contents.htm" hyperspec-path)) - (format t "Unzipping ~A...~%" gzpath) - (force-output) - (ccl:uncompress-file gzpath tarpath) - (format t "Extracting files from ~A...~%" tarpath) - (tar-extract tarpath)) - - (with-open-file (init-file (merge-pathnames "init.lisp") :direction :output :if-exists :append) - (format init-file "~%;;; Set the Hyperspec path~%(setf *hyperspec-local-path* ~S)~%" - hyperspec-path)) - (setf *hyperspec-local-path* hyperspec-path)) - (let () - (with-open-file (init-file (merge-pathnames "init.lisp") :direction :output :if-exists :append) - (format init-file "~%;;; Set the Hyperspec path~%(setf *hyperspec-local-path* nil)~%")) - (setf *hyperspec-local-path* nil)))) + (let ((gzpath (namestring (truename (merge-pathnames "HyperSpec-6-0.tar.gz")))) + (tarpath (namestring (truename (merge-pathnames "HyperSpec-6-0.tar")))) + (hyperspec-path (namestring (truename (merge-pathnames "hyperspec/"))))) + + ;; unless the Hyperspec is already installed at this location, extract + ;; it to that location + (unless (probe-file (merge-pathnames "Front\\Contents.htm" hyperspec-path)) + (format t "Unzipping ~A...~%" gzpath) + (force-output) + (ccl:uncompress-file gzpath tarpath) + (format t "Extracting files from ~A...~%" tarpath) + (tar-extract tarpath) + (delete-file tarpath)) + (setf *hyperspec-local-path* hyperspec-path))) (install-hyperspec) @@ -103,4 +94,4 @@ typedef struct _header - \ No newline at end of file + diff --git a/Utilities/license-to-rtf.lisp b/Utilities/license-to-rtf.lisp new file mode 100644 index 0000000..26f126a --- /dev/null +++ b/Utilities/license-to-rtf.lisp @@ -0,0 +1,59 @@ +;;;;; Stolen from https://github.com/sbcl/sbcl/blob/master/tools-for-build/rtf.lisp + +;;;; Generate RTF out of a regular text file, splitting +;;;; paragraphs on empty lines. +;;;; +;;;; Used to generate License.rtf out of COPYING for the +;;;; Windows installer. + +;;;; This software is part of the SBCL system. See the README file for +;;;; more information. +;;;; +;;;; This software is derived from the CMU CL system, which was +;;;; written at Carnegie Mellon University and released into the +;;;; public domain. The software is in the public domain and is +;;;; provided with absolutely no warranty. See the COPYING and CREDITS +;;;; files for more information. + +(defun read-text (pathname) + (let ((pars (list nil))) + (with-open-file (f pathname :external-format :ascii) + (loop for line = (read-line f nil) + for text = (string-trim '(#\Space #\Tab) line) + while line + when (plusp (length text)) + do (setf (car pars) + (if (car pars) + (concatenate 'string (car pars) " " text) + text)) + else + do (push nil pars))) + (nreverse pars))) + +(defun write-rtf (pars pathname) + (with-open-file (f pathname :direction :output :external-format :ascii + :if-exists :supersede) + ;; \rtf0 = RTF 1.0 + ;; \ansi = character set + ;; \deffn = default font + ;; \fonttbl = font table + ;; \fs = font size in half-points + (format f "{\\rtf1\\ansi~ + \\deffn0~ + {\\fonttbl\\f0\\fswiss Helvetica;}~ + \\fs20~ + ~{~A\\par\\par ~}}" ; each par used to end with + ; ~%, but resulting Rtf looks + ; strange (WinXP, WiX 3.0.x, + ; ?) + pars))) + +;; generate RTF file from TXT file +(defun generate-license-rtf (from to) + (write-rtf (read-text from) to)) + +(generate-license-rtf + (concatenate 'string *cormanlisp-directory* "LICENSE.txt") + (concatenate 'string *cormanlisp-directory* ".\\installer\\LICENSE.rtf")) + + diff --git a/init.lisp b/init.lisp index 0beac60..5bef7b5 100644 --- a/init.lisp +++ b/init.lisp @@ -65,8 +65,15 @@ ;;; set your own local path for the Hyperspec ;; eg. (setq *hyperspec-local-path* "c:/roger/lisp/HyperSpec/") -(setq *hyperspec-local-path* (concatenate 'string *cormanlisp-directory* "HyperSpec/")) - +;; unless the Hyperspec is already installed at this location +;; it to that location + +;; Automatically set HyperSpec path to the one installed with Corman Lisp. +(let ((hyperspec-install-path (merge-pathnames "HyperSpec\\" + (namestring *cormanlisp-directory*)))) + (when (probe-file (merge-pathnames "Front\\Contents.htm" hyperspec-install-path)) + (setq *hyperspec-local-path* (namestring hyperspec-install-path)))) + ;;; set your own declaration symbols list ;; eg. (setf ide:*declaration-symbols* '("defun" "define-symbol-macro")) or ;; (setf ide:*declaration-symbols* (append ide:*declaration-symbols* '("defwinconstant" "defwinapi"))) @@ -91,3 +98,4 @@ "CormanLisp.img"))) ;; export from CL package (export (find-symbol "LOAD-DEFAULT-IMAGE" 'cl) 'cl) + diff --git a/installer/AddToPath.wxs b/installer/AddToPath.wxs new file mode 100644 index 0000000..4462565 --- /dev/null +++ b/installer/AddToPath.wxs @@ -0,0 +1,19 @@ + + + + + + + + + + + diff --git a/installer/Config.wxi b/installer/Config.wxi new file mode 100644 index 0000000..47aaee5 --- /dev/null +++ b/installer/Config.wxi @@ -0,0 +1,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/installer/Core.wxs b/installer/Core.wxs new file mode 100644 index 0000000..e0f454b --- /dev/null +++ b/installer/Core.wxs @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/installer/DebugData.wxs b/installer/DebugData.wxs new file mode 100644 index 0000000..4b02b6e --- /dev/null +++ b/installer/DebugData.wxs @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + diff --git a/installer/Features.wxs b/installer/Features.wxs new file mode 100644 index 0000000..ad48a6a --- /dev/null +++ b/installer/Features.wxs @@ -0,0 +1,66 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/installer/HyperspecLegalese.wxs b/installer/HyperspecLegalese.wxs new file mode 100644 index 0000000..13341e8 --- /dev/null +++ b/installer/HyperspecLegalese.wxs @@ -0,0 +1,20 @@ + + + + + + + + + + + + + diff --git a/installer/Main.wxs b/installer/Main.wxs new file mode 100644 index 0000000..2739005 --- /dev/null +++ b/installer/Main.wxs @@ -0,0 +1,137 @@ + + + + + + + + + + + + + + + + + + + + + + + 501) OR ((VersionNT = 501) AND (ServicePackLevel >= 2))) AND MsiNTProductType = 1)]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/installer/Shortcuts.wxs b/installer/Shortcuts.wxs new file mode 100644 index 0000000..2b732d6 --- /dev/null +++ b/installer/Shortcuts.wxs @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + diff --git a/installer/include.xsl b/installer/include.xsl new file mode 100644 index 0000000..84bb2a7 --- /dev/null +++ b/installer/include.xsl @@ -0,0 +1,25 @@ + + + + + + + + Config.wxi + + + + + + + + + + + + diff --git a/installer/installer.vcxproj b/installer/installer.vcxproj new file mode 100644 index 0000000..98a8da0 --- /dev/null +++ b/installer/installer.vcxproj @@ -0,0 +1,58 @@ + + + + + Standard + Win32 + + + + 15.0 + {70E7D2D9-32CA-40E5-AC89-6CD71B4D1EF3} + Win32Proj + Installer + + + + Makefile + true + v141 + + + + + + + + + + + + $(SolutionDir)CormanLispInstaller.msi + WIN32;_DEBUG;$(NMakePreprocessorDefinitions) + $(SolutionDir)makemsi.bat + $(SolutionDir)makemsi.bat + cmd.exe /c "del ^"$(SolutionDir)CormanLispInstaller.msi^"" + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/installer/installer.vcxproj.filters b/installer/installer.vcxproj.filters new file mode 100644 index 0000000..1f8b80a --- /dev/null +++ b/installer/installer.vcxproj.filters @@ -0,0 +1,50 @@ + + + + + {93995380-89BD-4b04-88EB-625FBE52EBFB} + h;hh;hpp;hxx;hm;inl;inc;ipp;xsd + + + {70776da3-d7a2-465c-9e66-957d8ed662cb} + + + + + installer + + + installer + + + installer + + + installer + + + installer + + + installer + + + installer + + + installer + + + + Utilities + + + Utilities + + + + + installer + + + \ No newline at end of file diff --git a/makemsi.bat b/makemsi.bat new file mode 100644 index 0000000..966d6b9 --- /dev/null +++ b/makemsi.bat @@ -0,0 +1,54 @@ +@echo off +rem configuration Variables +set InstallerName=CormanLispInstaller.msi + +set GeneratedWXSFiles=.\installer\Sys.wxs .\installer\Libraries.wxs .\installer\Modules.wxs .\installer\Documentation.wxs .\installer\Headers.wxs .\installer\Examples.wxs .\installer\HyperSpec.wxs +set InstallerFiles= %GeneratedWXSFiles% .\installer\HyperSpecLegalese.wxs .\installer\Features.wxs .\installer\DebugData.wxs .\installer\AddToPath.wxs .\installer\Shortcuts.wxs .\installer\Core.wxs .\installer\Main.wxs +set InstallerObjectFiles= .\installer\Sys.wixobj .\installer\Libraries.wixobj .\installer\Modules.wixobj .\installer\Documentation.wixobj .\installer\Headers.wixobj .\installer\Examples.wixobj .\installer\HyperSpec.wixobj .\installer\HyperSpecLegalese.wixobj .\installer\Features.wixobj .\installer\DebugData.wixobj .\installer\AddToPath.wixobj .\installer\Shortcuts.wixobj .\installer\Core.wixobj .\installer\Main.wixobj + +set HeatOptions=-gg -scom -sreg -sfrag -ke -dr INSTALLDIR -t .\installer\include.xsl +set WixExtensions=-ext WixUIExtension -ext WixUtilExtension + +rem set old current directory +set OldDir=%cd% +cd "%~dp0\" + +rem Cleanup +del %InstallerName% +del %GeneratedWXSFiles% +del %InstallerObjectFiles% + +rem convert TXT license to RTF +clconsole.exe -execute Utilities\license-to-rtf.lisp + +rem Unpack HyperSpec +rd /s /q HyperSpec +del HyperSpec-Legalese.text +del HyperSpec-README.text +clconsole.exe -execute Utilities\install-hyperspec.lisp + +rem Generate include fragments. +rem These should be synchronised with values in 'Config.wxi' + +rem Corman Lisp core +"%WIX%\bin\heat" dir .\Sys -cg SysDir -var var.SysDirectoryPath -out .\installer\Sys.wxs %HeatOptions% + +"%WIX%\bin\heat" dir .\Libraries -cg LibrariesDir -var var.LibrariesDirectoryPath -out .\installer\Libraries.wxs %HeatOptions% + +"%WIX%\bin\heat" dir .\Modules -cg ModulesDir -var var.ModulesDirectoryPath -out .\installer\Modules.wxs %HeatOptions% + +"%WIX%\bin\heat" dir .\documentation -cg DocDir -var var.DocumentationDirectoryPath -out .\installer\Documentation.wxs %HeatOptions% + +rem Corman Lisp extra +"%WIX%\bin\heat" dir .\include -cg HeadersDir -var var.HeadersDirectoryPath -out .\installer\Headers.wxs %HeatOptions% + +"%WIX%\bin\heat" dir .\examples -cg ExamplesDir -var var.ExamplesDirectoryPath -out .\installer\Examples.wxs %HeatOptions% + +"%WIX%\bin\heat" dir .\HyperSpec -cg HyperSpecDir -var var.HyperSpecDirectoryPath -out .\installer\HyperSpec.wxs %HeatOptions% + +rem build the installer +"%WIX%\bin\candle" %WiXExtensions% -out .\installer\ %InstallerFiles% +"%WIX%\bin\light" %WiXExtensions% -sw1076 -cultures:en-US %InstallerObjectFiles% -out %InstallerName% + +rem change current directory +cd "%OldDir%" diff --git a/src_vc15.sln b/src_vc15.sln index 2e93813..61aae6f 100644 --- a/src_vc15.sln +++ b/src_vc15.sln @@ -23,75 +23,62 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CormanLispStatic", "CormanL EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "CormanLispImage", "CormanLispImage\CormanLispImage.vcxproj", "{9C2663C3-E055-42A7-A678-7A3F6472EC8D}" EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "Installer", "installer\installer.vcxproj", "{70E7D2D9-32CA-40E5-AC89-6CD71B4D1EF3}" + ProjectSection(ProjectDependencies) = postProject + {DE479E27-E406-43A8-BCBD-8506EBC31038} = {DE479E27-E406-43A8-BCBD-8506EBC31038} + {F914CF4D-5904-477F-A388-00C05E749D18} = {F914CF4D-5904-477F-A388-00C05E749D18} + {95914474-F1BA-4190-8FF3-4F03386FC8D6} = {95914474-F1BA-4190-8FF3-4F03386FC8D6} + {C31B2675-B04B-45F1-BBB2-35F099375CF8} = {C31B2675-B04B-45F1-BBB2-35F099375CF8} + {AE675399-2236-4F77-BBAD-B665F9C1022C} = {AE675399-2236-4F77-BBAD-B665F9C1022C} + {EE43A1A5-ED5E-4247-B0CF-FB5F3EC80A03} = {EE43A1A5-ED5E-4247-B0CF-FB5F3EC80A03} + {9C2663C3-E055-42A7-A678-7A3F6472EC8D} = {9C2663C3-E055-42A7-A678-7A3F6472EC8D} + {FF6CFCF2-F424-4B17-93FF-469DEAD1D723} = {FF6CFCF2-F424-4B17-93FF-469DEAD1D723} + EndProjectSection +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Win32 = Debug|Win32 - Release|Win32 = Release|Win32 Standard|Win32 = Standard|Win32 + Standard|x64 = Standard|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution - {99BD3558-DEEE-4F99-913E-DAC97A12926E}.Debug|Win32.ActiveCfg = Standard|Win32 - {99BD3558-DEEE-4F99-913E-DAC97A12926E}.Debug|Win32.Build.0 = Standard|Win32 - {99BD3558-DEEE-4F99-913E-DAC97A12926E}.Release|Win32.ActiveCfg = Standard|Win32 - {99BD3558-DEEE-4F99-913E-DAC97A12926E}.Release|Win32.Build.0 = Standard|Win32 {99BD3558-DEEE-4F99-913E-DAC97A12926E}.Standard|Win32.ActiveCfg = Standard|Win32 {99BD3558-DEEE-4F99-913E-DAC97A12926E}.Standard|Win32.Build.0 = Standard|Win32 - {F914CF4D-5904-477F-A388-00C05E749D18}.Debug|Win32.ActiveCfg = Standard|Win32 - {F914CF4D-5904-477F-A388-00C05E749D18}.Debug|Win32.Build.0 = Standard|Win32 - {F914CF4D-5904-477F-A388-00C05E749D18}.Release|Win32.ActiveCfg = Standard|Win32 - {F914CF4D-5904-477F-A388-00C05E749D18}.Release|Win32.Build.0 = Standard|Win32 + {99BD3558-DEEE-4F99-913E-DAC97A12926E}.Standard|x64.ActiveCfg = Standard|Win32 {F914CF4D-5904-477F-A388-00C05E749D18}.Standard|Win32.ActiveCfg = Standard|Win32 {F914CF4D-5904-477F-A388-00C05E749D18}.Standard|Win32.Build.0 = Standard|Win32 - {DE479E27-E406-43A8-BCBD-8506EBC31038}.Debug|Win32.ActiveCfg = Standard|Win32 - {DE479E27-E406-43A8-BCBD-8506EBC31038}.Debug|Win32.Build.0 = Standard|Win32 - {DE479E27-E406-43A8-BCBD-8506EBC31038}.Release|Win32.ActiveCfg = Standard|Win32 - {DE479E27-E406-43A8-BCBD-8506EBC31038}.Release|Win32.Build.0 = Standard|Win32 + {F914CF4D-5904-477F-A388-00C05E749D18}.Standard|x64.ActiveCfg = Standard|Win32 {DE479E27-E406-43A8-BCBD-8506EBC31038}.Standard|Win32.ActiveCfg = Standard|Win32 {DE479E27-E406-43A8-BCBD-8506EBC31038}.Standard|Win32.Build.0 = Standard|Win32 - {95914474-F1BA-4190-8FF3-4F03386FC8D6}.Debug|Win32.ActiveCfg = Standard|Win32 - {95914474-F1BA-4190-8FF3-4F03386FC8D6}.Debug|Win32.Build.0 = Standard|Win32 - {95914474-F1BA-4190-8FF3-4F03386FC8D6}.Release|Win32.ActiveCfg = Standard|Win32 - {95914474-F1BA-4190-8FF3-4F03386FC8D6}.Release|Win32.Build.0 = Standard|Win32 + {DE479E27-E406-43A8-BCBD-8506EBC31038}.Standard|x64.ActiveCfg = Standard|Win32 {95914474-F1BA-4190-8FF3-4F03386FC8D6}.Standard|Win32.ActiveCfg = Standard|Win32 {95914474-F1BA-4190-8FF3-4F03386FC8D6}.Standard|Win32.Build.0 = Standard|Win32 - {AE675399-2236-4F77-BBAD-B665F9C1022C}.Debug|Win32.ActiveCfg = Standard|Win32 - {AE675399-2236-4F77-BBAD-B665F9C1022C}.Debug|Win32.Build.0 = Standard|Win32 - {AE675399-2236-4F77-BBAD-B665F9C1022C}.Release|Win32.ActiveCfg = Standard|Win32 - {AE675399-2236-4F77-BBAD-B665F9C1022C}.Release|Win32.Build.0 = Standard|Win32 + {95914474-F1BA-4190-8FF3-4F03386FC8D6}.Standard|x64.ActiveCfg = Standard|Win32 {AE675399-2236-4F77-BBAD-B665F9C1022C}.Standard|Win32.ActiveCfg = Standard|Win32 {AE675399-2236-4F77-BBAD-B665F9C1022C}.Standard|Win32.Build.0 = Standard|Win32 - {EE43A1A5-ED5E-4247-B0CF-FB5F3EC80A03}.Debug|Win32.ActiveCfg = Standard|Win32 - {EE43A1A5-ED5E-4247-B0CF-FB5F3EC80A03}.Debug|Win32.Build.0 = Standard|Win32 - {EE43A1A5-ED5E-4247-B0CF-FB5F3EC80A03}.Release|Win32.ActiveCfg = Standard|Win32 - {EE43A1A5-ED5E-4247-B0CF-FB5F3EC80A03}.Release|Win32.Build.0 = Standard|Win32 + {AE675399-2236-4F77-BBAD-B665F9C1022C}.Standard|x64.ActiveCfg = Standard|Win32 {EE43A1A5-ED5E-4247-B0CF-FB5F3EC80A03}.Standard|Win32.ActiveCfg = Standard|Win32 {EE43A1A5-ED5E-4247-B0CF-FB5F3EC80A03}.Standard|Win32.Build.0 = Standard|Win32 - {C31B2675-B04B-45F1-BBB2-35F099375CF8}.Debug|Win32.ActiveCfg = Standard|Win32 - {C31B2675-B04B-45F1-BBB2-35F099375CF8}.Debug|Win32.Build.0 = Standard|Win32 - {C31B2675-B04B-45F1-BBB2-35F099375CF8}.Release|Win32.ActiveCfg = Standard|Win32 - {C31B2675-B04B-45F1-BBB2-35F099375CF8}.Release|Win32.Build.0 = Standard|Win32 + {EE43A1A5-ED5E-4247-B0CF-FB5F3EC80A03}.Standard|x64.ActiveCfg = Standard|Win32 {C31B2675-B04B-45F1-BBB2-35F099375CF8}.Standard|Win32.ActiveCfg = Standard|Win32 {C31B2675-B04B-45F1-BBB2-35F099375CF8}.Standard|Win32.Build.0 = Standard|Win32 - {FF6CFCF2-F424-4B17-93FF-469DEAD1D723}.Debug|Win32.ActiveCfg = Standard|Win32 - {FF6CFCF2-F424-4B17-93FF-469DEAD1D723}.Debug|Win32.Build.0 = Standard|Win32 - {FF6CFCF2-F424-4B17-93FF-469DEAD1D723}.Release|Win32.ActiveCfg = Standard|Win32 - {FF6CFCF2-F424-4B17-93FF-469DEAD1D723}.Release|Win32.Build.0 = Standard|Win32 + {C31B2675-B04B-45F1-BBB2-35F099375CF8}.Standard|x64.ActiveCfg = Standard|Win32 {FF6CFCF2-F424-4B17-93FF-469DEAD1D723}.Standard|Win32.ActiveCfg = Standard|Win32 {FF6CFCF2-F424-4B17-93FF-469DEAD1D723}.Standard|Win32.Build.0 = Standard|Win32 - {AC999700-A6C5-4BBD-8A01-D29ED089E951}.Debug|Win32.ActiveCfg = Standard|Win32 - {AC999700-A6C5-4BBD-8A01-D29ED089E951}.Debug|Win32.Build.0 = Standard|Win32 - {AC999700-A6C5-4BBD-8A01-D29ED089E951}.Release|Win32.ActiveCfg = Standard|Win32 - {AC999700-A6C5-4BBD-8A01-D29ED089E951}.Release|Win32.Build.0 = Standard|Win32 + {FF6CFCF2-F424-4B17-93FF-469DEAD1D723}.Standard|x64.ActiveCfg = Standard|Win32 {AC999700-A6C5-4BBD-8A01-D29ED089E951}.Standard|Win32.ActiveCfg = Standard|Win32 {AC999700-A6C5-4BBD-8A01-D29ED089E951}.Standard|Win32.Build.0 = Standard|Win32 - {9C2663C3-E055-42A7-A678-7A3F6472EC8D}.Debug|Win32.ActiveCfg = Standard|Win32 - {9C2663C3-E055-42A7-A678-7A3F6472EC8D}.Debug|Win32.Build.0 = Standard|Win32 - {9C2663C3-E055-42A7-A678-7A3F6472EC8D}.Release|Win32.ActiveCfg = Standard|Win32 - {9C2663C3-E055-42A7-A678-7A3F6472EC8D}.Release|Win32.Build.0 = Standard|Win32 + {AC999700-A6C5-4BBD-8A01-D29ED089E951}.Standard|x64.ActiveCfg = Standard|Win32 {9C2663C3-E055-42A7-A678-7A3F6472EC8D}.Standard|Win32.ActiveCfg = Standard|Win32 {9C2663C3-E055-42A7-A678-7A3F6472EC8D}.Standard|Win32.Build.0 = Standard|Win32 + {9C2663C3-E055-42A7-A678-7A3F6472EC8D}.Standard|x64.ActiveCfg = Standard|Win32 + {70E7D2D9-32CA-40E5-AC89-6CD71B4D1EF3}.Standard|Win32.ActiveCfg = Standard|Win32 + {70E7D2D9-32CA-40E5-AC89-6CD71B4D1EF3}.Standard|Win32.Build.0 = Standard|Win32 + {70E7D2D9-32CA-40E5-AC89-6CD71B4D1EF3}.Standard|x64.ActiveCfg = Standard|Win32 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {AFE150CC-2316-4B33-987A-12B6E954F10F} + EndGlobalSection EndGlobal