4 :: build-all-msvc.bat --
\r
6 :: Multi-Platform Build Tool for MSVC
\r
10 REM This batch script is used to build the SQLite DLL for multiple platforms
\r
11 REM and configurations using MSVC. The built SQLite DLLs, their associated
\r
12 REM import libraries, and optionally their symbols files, are placed within
\r
13 REM the directory specified on the command line, in sub-directories named for
\r
14 REM their respective platforms and configurations. This batch script must be
\r
15 REM run from inside a Visual Studio Command Prompt for the desired version of
\r
16 REM Visual Studio ^(the initial platform configured for the command prompt does
\r
17 REM not really matter^). Exactly one command line argument is required, the
\r
18 REM name of an existing directory to be used as the final destination directory
\r
19 REM for the generated output files, which will be placed in sub-directories
\r
20 REM created therein. Ideally, the directory specified should be empty.
\r
24 REM CD /D C:\dev\sqlite\core
\r
25 REM CALL tool\build-all-msvc.bat C:\Temp
\r
27 REM In the example above, "C:\dev\sqlite\core" represents the root of the
\r
28 REM source tree for SQLite and "C:\Temp" represents the final destination
\r
29 REM directory for the generated output files.
\r
31 REM Please note that the SQLite build process performed by the Makefile
\r
32 REM associated with this batch script requires a Tcl shell to be present
\r
33 REM in a directory contained in the PATH environment variable unless a
\r
34 REM pre-existing amalgamation file is used.
\r
36 REM There are several environment variables that may be set to modify the
\r
37 REM behavior of this batch script and its associated Makefile. The list of
\r
38 REM platforms to build may be overriden by using the PLATFORMS environment
\r
39 REM variable, which should contain a list of platforms ^(e.g. x86 x86_amd64
\r
40 REM x86_arm^). All platforms must be supported by the version of Visual Studio
\r
41 REM being used. The list of configurations to build may be overridden by
\r
42 REM setting the CONFIGURATIONS environment variable, which should contain a
\r
43 REM list of configurations to build ^(e.g. Debug Retail^). Neither of these
\r
44 REM variable values may contain any double quotes, surrounding or embedded.
\r
46 REM Finally, the NCRTLIBPATH, NUCRTLIBPATH, and NSDKLIBPATH environment
\r
47 REM variables may be set to specify the location of the CRT, Universal CRT, and
\r
48 REM Windows SDK, respectively, that may be needed to compile executables native
\r
49 REM to the architecture of the build machine during any cross-compilation that
\r
50 REM may be necessary, depending on the platforms to be built. These values in
\r
51 REM these three variables should be surrounded by double quotes if they contain
\r
54 REM There are a few other environment variables that impact the build process
\r
55 REM when set ^(to anything^), they are:
\r
57 REM USE_AUTOCONF_MAKEFILE
\r
59 REM When set, the "autoconf" Makefile for MSVC will be used instead of the main
\r
60 REM Makefile for MSVC. It must exist at "%ROOT%\autoconf\Makefile.msc".
\r
64 REM When set, the "clean" target will not be used during each build iteration.
\r
65 REM However, the target binaries, if any, will still be deleted manually prior
\r
66 REM to being rebuilt. Setting this environment variable is only rarely needed
\r
67 REM and could cause issues in some circumstances; therefore, setting it is not
\r
72 REM When set, copying of symbol files ^(*.pdb^) created during the build will
\r
73 REM be skipped and they will not appear in the final destination directory.
\r
74 REM Setting this environment variable is never strictly needed and could cause
\r
75 REM issues in some circumstances; therefore, setting it is not recommended.
\r
79 REM When set, disables use of MEMDEBUG when building binaries for the "Debug"
\r
84 REM When set, the command line shell will be built for each selected platform
\r
85 REM and configuration as well. In addition, the command line shell binaries
\r
86 REM will be copied, with their symbols, to the final destination directory.
\r
88 REM USE_WINV63_NSDKLIBPATH
\r
90 REM When set, modifies how the NSDKLIBPATH environment variable is built, based
\r
91 REM on the WindowsSdkDir environment variable. It forces this batch script to
\r
92 REM assume the Windows 8.1 SDK location should be used.
\r
94 REM USE_WINV100_NSDKLIBPATH
\r
96 REM When set, modifies how the NSDKLIBPATH environment variable is built, based
\r
97 REM on the WindowsSdkDir environment variable. It causes this batch script to
\r
98 REM assume the Windows 10.0 SDK location should be used.
\r
101 REM NMAKE_ARGS_DEBUG
\r
102 REM NMAKE_ARGS_RETAIL
\r
104 REM When set, these values are expanded and passed to the NMAKE command line,
\r
105 REM after its other arguments. These may be used to specify additional NMAKE
\r
106 REM options, for example:
\r
108 REM SET NMAKE_ARGS=FOR_WINRT=1
\r
109 REM SET NMAKE_ARGS_DEBUG=MEMDEBUG=1
\r
110 REM SET NMAKE_ARGS_RETAIL=WIN32HEAP=1
\r
112 REM Using the above command before running this tool will cause the compiled
\r
113 REM binaries to target the WinRT environment, which provides a subset of the
\r
117 REM DLL_PDB_FILE_NAME
\r
120 REM EXE_PDB_FILE_NAME
\r
122 REM When set, these values will override the associated target file name used
\r
127 REM SET __ECHO=ECHO
\r
128 REM SET __ECHO2=ECHO
\r
129 REM SET __ECHO3=ECHO
\r
130 IF NOT DEFINED _AECHO (SET _AECHO=REM)
\r
131 IF NOT DEFINED _CECHO (SET _CECHO=REM)
\r
132 IF NOT DEFINED _VECHO (SET _VECHO=REM)
\r
135 IF DEFINED __ECHO SET REDIRECT=^^^>
\r
137 %_AECHO% Running %0 %*
\r
141 %_VECHO% DFlags = '%DFLAGS%'
\r
143 SET FFLAGS=/V /F /G /H /I /R /Y /Z
\r
145 %_VECHO% FFlags = '%FFLAGS%'
\r
148 SET ROOT=%ROOT:\\=\%
\r
150 %_VECHO% Root = '%ROOT%'
\r
153 REM NOTE: The first and only argument to this batch file should be the output
\r
154 REM directory where the platform-specific binary directories should be
\r
157 SET BINARYDIRECTORY=%1
\r
159 IF NOT DEFINED BINARYDIRECTORY (
\r
163 %_VECHO% BinaryDirectory = '%BINARYDIRECTORY%'
\r
172 REM NOTE: From this point, we need a clean error level. Reset it now.
\r
174 CALL :fn_ResetErrorLevel
\r
177 REM NOTE: Change the current directory to the root of the source tree, saving
\r
178 REM the current directory on the directory stack.
\r
180 %__ECHO2% PUSHD "%ROOT%"
\r
183 ECHO Could not change directory to "%ROOT%".
\r
188 REM NOTE: This batch file requires the ComSpec environment variable to be set,
\r
189 REM typically to something like "C:\Windows\System32\cmd.exe".
\r
191 IF NOT DEFINED ComSpec (
\r
192 ECHO The ComSpec environment variable must be defined.
\r
197 REM NOTE: This batch file requires the VcInstallDir environment variable to be
\r
198 REM set. Tyipcally, this means this batch file needs to be run from an
\r
199 REM MSVC command prompt.
\r
201 IF NOT DEFINED VCINSTALLDIR (
\r
202 ECHO The VCINSTALLDIR environment variable must be defined.
\r
207 REM NOTE: If the list of platforms is not already set, use the default list.
\r
209 IF NOT DEFINED PLATFORMS (
\r
210 SET PLATFORMS=x86 x86_amd64 x86_arm
\r
213 %_VECHO% Platforms = '%PLATFORMS%'
\r
216 REM NOTE: If the list of configurations is not already set, use the default
\r
219 IF NOT DEFINED CONFIGURATIONS (
\r
220 SET CONFIGURATIONS=Debug Retail
\r
223 %_VECHO% Configurations = '%CONFIGURATIONS%'
\r
226 REM NOTE: If the command used to invoke NMAKE is not already set, use the
\r
229 IF NOT DEFINED NMAKE_CMD (
\r
230 IF DEFINED USE_AUTOCONF_MAKEFILE (
\r
231 SET NMAKE_CMD=nmake -B -f autoconf\Makefile.msc
\r
233 SET NMAKE_CMD=nmake -B -f Makefile.msc
\r
237 %_VECHO% NmakeCmd = '%NMAKE_CMD%'
\r
238 %_VECHO% NmakeArgs = '%NMAKE_ARGS%'
\r
239 %_VECHO% NmakeArgsDebug = '%NMAKE_ARGS_DEBUG%'
\r
240 %_VECHO% NmakeArgsRetail = '%NMAKE_ARGS_RETAIL%'
\r
243 REM NOTE: Setup environment variables to translate between the MSVC platform
\r
244 REM names and the names to be used for the platform-specific binary
\r
251 SET x86_amd64_NAME=x64
\r
252 SET x86_arm_NAME=ARM
\r
253 SET x86_x64_NAME=x64
\r
255 %_VECHO% amd64_Name = '%amd64_NAME%'
\r
256 %_VECHO% arm_Name = '%arm_NAME%'
\r
257 %_VECHO% x64_Name = '%x64_NAME%'
\r
258 %_VECHO% x86_Name = '%x86_NAME%'
\r
259 %_VECHO% x86_amd64_Name = '%x86_amd64_NAME%'
\r
260 %_VECHO% x86_arm_Name = '%x86_arm_NAME%'
\r
261 %_VECHO% x86_x64_Name = '%x86_x64_NAME%'
\r
264 REM NOTE: Check for the external tools needed during the build process ^(i.e.
\r
265 REM those that do not get compiled as part of the build process itself^)
\r
266 REM along the PATH.
\r
268 IF DEFINED TCLSH_CMD (
\r
269 SET TCLSH_FILE=%TCLSH_CMD%
\r
271 SET TCLSH_FILE=tclsh.exe
\r
274 FOR %%T IN (%TCLSH_FILE%) DO (
\r
275 SET %%T_PATH=%%~dp$PATH:T
\r
279 REM NOTE: A Tcl shell executable is required during the SQLite build process
\r
280 REM unless a pre-existing amalgamation file is used.
\r
282 IF NOT DEFINED %TCLSH_FILE%_PATH (
\r
283 ECHO The Tcl shell executable "%TCLSH_FILE%" is required to be in the PATH.
\r
288 REM NOTE: Setup the default names for the build targets we are creating. Any
\r
289 REM ^(or all^) of these may end up being overridden.
\r
291 IF NOT DEFINED DLL_FILE_NAME (
\r
292 SET DLL_FILE_NAME=sqlite3.dll
\r
295 IF NOT DEFINED DLL_PDB_FILE_NAME (
\r
296 SET DLL_PDB_FILE_NAME=sqlite3.pdb
\r
299 IF NOT DEFINED LIB_FILE_NAME (
\r
300 SET LIB_FILE_NAME=sqlite3.lib
\r
303 IF NOT DEFINED EXE_FILE_NAME (
\r
304 SET EXE_FILE_NAME=sqlite3.exe
\r
307 IF NOT DEFINED EXE_PDB_FILE_NAME (
\r
308 SET EXE_PDB_FILE_NAME=sqlite3sh.pdb
\r
312 REM NOTE: Set the TOOLPATH variable to contain all the directories where the
\r
313 REM external tools were found in the search above.
\r
315 CALL :fn_CopyVariable %TCLSH_FILE%_PATH TOOLPATH
\r
317 %_VECHO% ToolPath = '%TOOLPATH%'
\r
320 REM NOTE: Setting the Windows SDK library path is only required for MSVC
\r
321 REM 2012, 2013, and 2015.
\r
323 CALL :fn_UnsetVariable SET_NSDKLIBPATH
\r
326 REM NOTE: Setting the Universal CRT library path is only required for MSVC
\r
329 CALL :fn_UnsetVariable SET_NUCRTLIBPATH
\r
332 REM NOTE: Check for MSVC 2012, 2013, and 2015 specially because the Windows
\r
333 REM SDK directory handling is slightly different for those versions.
\r
335 IF "%VisualStudioVersion%" == "11.0" (
\r
337 REM NOTE: If the Windows SDK library path has already been set, do not set
\r
338 REM it to something else later on.
\r
340 IF NOT DEFINED NSDKLIBPATH (
\r
341 SET SET_NSDKLIBPATH=1
\r
343 ) ELSE IF "%VisualStudioVersion%" == "12.0" (
\r
345 REM NOTE: If the Windows SDK library path has already been set, do not set
\r
346 REM it to something else later on.
\r
348 IF NOT DEFINED NSDKLIBPATH (
\r
349 SET SET_NSDKLIBPATH=1
\r
351 ) ELSE IF "%VisualStudioVersion%" == "14.0" (
\r
353 REM NOTE: If the Windows SDK library path has already been set, do not set
\r
354 REM it to something else later on.
\r
356 IF NOT DEFINED NSDKLIBPATH (
\r
357 SET SET_NSDKLIBPATH=1
\r
361 REM NOTE: If the Universal CRT library path has already been set, do not set
\r
362 REM it to something else later on.
\r
364 IF NOT DEFINED NUCRTLIBPATH (
\r
365 SET SET_NUCRTLIBPATH=1
\r
370 REM NOTE: This is the name of the sub-directory where the UCRT libraries may
\r
371 REM be found. It is only used when compiling against the UCRT.
\r
373 IF DEFINED UCRTVersion (
\r
374 SET NUCRTVER=%UCRTVersion%
\r
376 SET NUCRTVER=10.0.10586.0
\r
380 REM NOTE: This is the name of the sub-directory where the Windows 10.0 SDK
\r
381 REM libraries may be found. It is only used when compiling with the
\r
382 REM Windows 10.0 SDK.
\r
384 IF DEFINED WindowsSDKLibVersion (
\r
385 SET WIN10SDKVER=%WindowsSDKLibVersion:\=%
\r
387 SET WIN10SDKVER=%NUCRTVER%
\r
391 REM NOTE: Check if this is the Windows Phone SDK. If so, a different batch
\r
392 REM file is necessary to setup the build environment. Since the variable
\r
393 REM values involved here may contain parenthesis, using GOTO instead of
\r
394 REM an IF block is required.
\r
396 IF DEFINED WindowsPhoneKitDir GOTO set_vcvarsall_phone
\r
397 SET VCVARSALL=%VCINSTALLDIR%\vcvarsall.bat
\r
398 GOTO set_vcvarsall_done
\r
399 :set_vcvarsall_phone
\r
400 SET VCVARSALL=%VCINSTALLDIR%\WPSDK\WP80\vcvarsphoneall.bat
\r
401 :set_vcvarsall_done
\r
402 SET VCVARSALL=%VCVARSALL:\\=\%
\r
405 REM NOTE: This is the outer loop. There should be exactly one iteration per
\r
408 FOR %%P IN (%PLATFORMS%) DO (
\r
410 REM NOTE: Using the MSVC platform name, lookup the simpler platform name to
\r
411 REM be used for the name of the platform-specific binary directory via
\r
412 REM the environment variables setup earlier.
\r
414 CALL :fn_CopyVariable %%P_NAME PLATFORMNAME
\r
417 REM NOTE: This is the second loop. There should be exactly one iteration.
\r
418 REM This loop is necessary because the PlatformName environment
\r
419 REM variable was set above and that value is needed by some of the
\r
420 REM commands contained in the inner loop. If these commands were
\r
421 REM directly contained in the outer loop, the PlatformName environment
\r
422 REM variable would be stuck with its initial empty value instead.
\r
424 FOR /F "tokens=2* delims==" %%D IN ('SET PLATFORMNAME') DO (
\r
426 REM NOTE: Attempt to clean the environment of all variables used by MSVC
\r
427 REM and/or Visual Studio. This block may need to be updated in the
\r
428 REM future to account for additional environment variables.
\r
430 CALL :fn_UnsetVariable CommandPromptType
\r
431 CALL :fn_UnsetVariable DevEnvDir
\r
432 CALL :fn_UnsetVariable DNX_HOME
\r
433 CALL :fn_UnsetVariable ExtensionSdkDir
\r
434 CALL :fn_UnsetVariable Framework35Version
\r
435 CALL :fn_UnsetVariable Framework40Version
\r
436 CALL :fn_UnsetVariable FrameworkDir
\r
437 CALL :fn_UnsetVariable FrameworkDir32
\r
438 CALL :fn_UnsetVariable FrameworkVersion
\r
439 CALL :fn_UnsetVariable FrameworkVersion32
\r
440 CALL :fn_UnsetVariable FSHARPINSTALLDIR
\r
441 CALL :fn_UnsetVariable INCLUDE
\r
442 CALL :fn_UnsetVariable LIB
\r
443 CALL :fn_UnsetVariable LIBPATH
\r
444 CALL :fn_UnsetVariable NETFXSDKDir
\r
445 CALL :fn_UnsetVariable Platform
\r
446 CALL :fn_UnsetVariable UCRTVersion
\r
447 CALL :fn_UnsetVariable UniversalCRTSdkDir
\r
448 REM CALL :fn_UnsetVariable VCINSTALLDIR
\r
449 CALL :fn_UnsetVariable VSINSTALLDIR
\r
450 CALL :fn_UnsetVariable WindowsLibPath
\r
451 CALL :fn_UnsetVariable WindowsPhoneKitDir
\r
452 CALL :fn_UnsetVariable WindowsSdkDir
\r
453 CALL :fn_UnsetVariable WindowsSdkDir_35
\r
454 CALL :fn_UnsetVariable WindowsSdkDir_old
\r
455 CALL :fn_UnsetVariable WindowsSDKLibVersion
\r
456 CALL :fn_UnsetVariable WindowsSDKVersion
\r
457 CALL :fn_UnsetVariable WindowsSDK_ExecutablePath_x86
\r
458 CALL :fn_UnsetVariable WindowsSDK_ExecutablePath_x64
\r
461 REM NOTE: Reset the PATH here to the absolute bare minimum required.
\r
466 REM NOTE: This is the inner loop. There are normally two iterations, one
\r
467 REM for each supported build configuration, e.g. Debug or Retail.
\r
469 FOR %%B IN (%CONFIGURATIONS%) DO (
\r
471 REM NOTE: When preparing the debug build, set the DEBUG and MEMDEBUG
\r
472 REM environment variables to be picked up by the MSVC makefile
\r
475 %_AECHO% Building the %%B configuration for platform %%P with name %%D...
\r
477 IF /I "%%B" == "Debug" (
\r
479 REM NOTE: Using this level for the DEBUG environment variable should
\r
480 REM disable all compiler optimizations and prevent use of the
\r
481 REM NDEBUG define. Additionally, both SQLITE_ENABLE_API_ARMOR
\r
482 REM and SQLITE_DEBUG defines should be enabled.
\r
487 REM NOTE: Setting this to non-zero should enable the SQLITE_MEMDEBUG
\r
490 IF NOT DEFINED NOMEMDEBUG (
\r
494 CALL :fn_UnsetVariable DEBUG
\r
495 CALL :fn_UnsetVariable MEMDEBUG
\r
499 REM NOTE: Copy the extra NMAKE arguments for this configuration into the
\r
500 REM common variable used by the actual commands.
\r
502 CALL :fn_CopyVariable NMAKE_ARGS_%%B NMAKE_ARGS_CFG
\r
505 REM NOTE: Launch a nested command shell to perform the following steps:
\r
507 REM 1. Setup the MSVC environment for this platform using the
\r
508 REM official batch file.
\r
510 REM 2. Make sure that no stale build output files are present.
\r
512 REM 3. Build the "sqlite3.dll" and "sqlite3.lib" binaries for this
\r
515 REM 4. Copy the "sqlite3.dll" and "sqlite3.lib" binaries for this
\r
516 REM platform to the platform-specific directory beneath the
\r
517 REM binary directory.
\r
519 REM 5. Unless prevented from doing so, copy the "sqlite3.pdb"
\r
520 REM symbols file for this platform to the platform-specific
\r
521 REM directory beneath the binary directory.
\r
525 REM NOTE: Attempt to setup the MSVC environment for this platform.
\r
527 %__ECHO3% CALL "%VCVARSALL%" %%P
\r
530 ECHO Failed to call "%VCVARSALL%" for platform %%P.
\r
535 REM NOTE: If this batch file is not running in "what-if" mode, check to
\r
536 REM be sure we were actually able to setup the MSVC environment
\r
537 REM as current versions of their official batch file do not set
\r
538 REM the exit code upon failure.
\r
540 IF NOT DEFINED __ECHO3 (
\r
541 IF NOT DEFINED WindowsPhoneKitDir (
\r
542 IF NOT DEFINED WindowsSdkDir (
\r
543 ECHO Cannot build, Windows SDK not found for platform %%P.
\r
550 REM NOTE: When using MSVC 2012, 2013, or 2015, the native SDK path
\r
551 REM cannot simply be the "lib" sub-directory beneath the location
\r
552 REM specified in the WindowsSdkDir environment variable because
\r
553 REM that location does not actually contain the necessary library
\r
554 REM files for x86. This must be done for each iteration because
\r
555 REM it relies upon the WindowsSdkDir environment variable being
\r
556 REM set by the batch file used to setup the MSVC environment.
\r
558 IF DEFINED SET_NSDKLIBPATH (
\r
560 REM NOTE: The Windows Phone SDK has a slightly different directory
\r
561 REM structure and must be handled specially here.
\r
563 IF DEFINED WindowsPhoneKitDir (
\r
564 CALL :fn_CopyVariable WindowsPhoneKitDir NSDKLIBPATH
\r
565 CALL :fn_AppendVariable NSDKLIBPATH \lib\x86
\r
566 ) ELSE IF DEFINED WindowsSdkDir (
\r
567 CALL :fn_CopyVariable WindowsSdkDir NSDKLIBPATH
\r
570 REM NOTE: The Windows 8.x and Windows 10.0 SDKs have a slightly
\r
571 REM different directory naming conventions.
\r
573 IF DEFINED USE_WINV100_NSDKLIBPATH (
\r
574 CALL :fn_AppendVariable NSDKLIBPATH \..\10\lib\%WIN10SDKVER%\um\x86
\r
575 CALL :fn_CopyVariable WindowsSdkDir PSDKLIBPATH
\r
576 CALL :fn_AppendVariable PSDKLIBPATH lib\%WIN10SDKVER%\um\%%D
\r
577 ) ELSE IF DEFINED USE_WINV63_NSDKLIBPATH (
\r
578 CALL :fn_AppendVariable NSDKLIBPATH \lib\winv6.3\um\x86
\r
579 ) ELSE IF "%VisualStudioVersion%" == "12.0" (
\r
580 CALL :fn_AppendVariable NSDKLIBPATH \..\8.0\lib\win8\um\x86
\r
581 ) ELSE IF "%VisualStudioVersion%" == "14.0" (
\r
582 CALL :fn_AppendVariable NSDKLIBPATH \..\8.0\lib\win8\um\x86
\r
584 CALL :fn_AppendVariable NSDKLIBPATH \lib\win8\um\x86
\r
590 REM NOTE: When using MSVC 2015, setting the Universal CRT library path
\r
591 REM for x86 may be required as well. This must also be done for
\r
592 REM each iteration because it relies upon the UniversalCRTSdkDir
\r
593 REM environment variable being set by the batch file used to
\r
594 REM setup the MSVC environment.
\r
596 IF DEFINED SET_NUCRTLIBPATH (
\r
597 IF DEFINED UniversalCRTSdkDir (
\r
598 CALL :fn_CopyVariable UniversalCRTSdkDir NUCRTLIBPATH
\r
599 CALL :fn_AppendVariable NUCRTLIBPATH \lib\%NUCRTVER%\ucrt\x86
\r
604 REM NOTE: Unless prevented from doing so, invoke NMAKE with the MSVC
\r
605 REM makefile to clean any stale build output from previous
\r
606 REM iterations of this loop and/or previous runs of this batch
\r
609 IF NOT DEFINED NOCLEAN (
\r
610 CALL :fn_MakeClean %%D
\r
613 ECHO Failed to clean for platform %%P.
\r
618 REM NOTE: Even when the cleaning step has been disabled, we still
\r
619 REM need to remove the build output for all the files we are
\r
620 REM specifically wanting to build for each platform.
\r
622 %_AECHO% Cleaning final core library output files only...
\r
623 %__ECHO% DEL /Q *.lo "%DLL_FILE_NAME%" "%LIB_FILE_NAME%" "%DLL_PDB_FILE_NAME%" 2%REDIRECT% NUL
\r
627 REM NOTE: Call NMAKE with the MSVC makefile to build the "sqlite3.dll"
\r
628 REM binary. The x86 compiler will be used to compile the native
\r
629 REM command line tools needed during the build process itself.
\r
630 REM Also, disable looking for and/or linking to the native Tcl
\r
631 REM runtime library.
\r
633 CALL :fn_MakeDll %%D
\r
636 ECHO Failed to build %%B "%DLL_FILE_NAME%" for platform %%P.
\r
641 REM NOTE: Copy the "sqlite3.dll" file to the appropriate directory for
\r
642 REM the build and platform beneath the binary directory.
\r
644 %__ECHO% XCOPY "%DLL_FILE_NAME%" "%BINARYDIRECTORY%\%%B\%%D\" %FFLAGS% %DFLAGS%
\r
647 ECHO Failed to copy "%DLL_FILE_NAME%" to "%BINARYDIRECTORY%\%%B\%%D\".
\r
652 REM NOTE: Copy the "sqlite3.lib" file to the appropriate directory for
\r
653 REM the build and platform beneath the binary directory.
\r
655 %__ECHO% XCOPY "%LIB_FILE_NAME%" "%BINARYDIRECTORY%\%%B\%%D\" %FFLAGS% %DFLAGS%
\r
658 ECHO Failed to copy "%LIB_FILE_NAME%" to "%BINARYDIRECTORY%\%%B\%%D\".
\r
663 REM NOTE: Copy the "sqlite3.pdb" file to the appropriate directory for
\r
664 REM the build and platform beneath the binary directory unless we
\r
665 REM are prevented from doing so.
\r
667 IF NOT DEFINED NOSYMBOLS (
\r
668 IF EXIST "%DLL_PDB_FILE_NAME%" (
\r
669 %__ECHO% XCOPY "%DLL_PDB_FILE_NAME%" "%BINARYDIRECTORY%\%%B\%%D\" %FFLAGS% %DFLAGS%
\r
672 ECHO Failed to copy "%DLL_PDB_FILE_NAME%" to "%BINARYDIRECTORY%\%%B\%%D\".
\r
679 REM NOTE: If requested, also build the shell executable.
\r
681 IF DEFINED BUILD_ALL_SHELL (
\r
683 REM NOTE: If necessary, make sure any previous build output for the
\r
684 REM shell executable is deleted.
\r
686 IF DEFINED NOCLEAN (
\r
688 REM NOTE: Even when the cleaning step has been disabled, we still
\r
689 REM need to remove the build output for all the files we are
\r
690 REM specifically wanting to build for each platform.
\r
692 %_AECHO% Cleaning final shell executable output files only...
\r
693 %__ECHO% DEL /Q "%EXE_FILE_NAME%" "%EXE_PDB_FILE_NAME%" 2%REDIRECT% NUL
\r
697 REM NOTE: Call NMAKE with the MSVC makefile to build the "sqlite3.exe"
\r
698 REM binary. The x86 compiler will be used to compile the native
\r
699 REM command line tools needed during the build process itself.
\r
700 REM Also, disable looking for and/or linking to the native Tcl
\r
701 REM runtime library.
\r
703 CALL :fn_MakeExe %%D
\r
706 ECHO Failed to build %%B "%EXE_FILE_NAME%" for platform %%P.
\r
711 REM NOTE: Copy the "sqlite3.exe" file to the appropriate directory
\r
712 REM for the build and platform beneath the binary directory.
\r
714 %__ECHO% XCOPY "%EXE_FILE_NAME%" "%BINARYDIRECTORY%\%%B\%%D\" %FFLAGS% %DFLAGS%
\r
717 ECHO Failed to copy "%EXE_FILE_NAME%" to "%BINARYDIRECTORY%\%%B\%%D\".
\r
722 REM NOTE: Copy the "sqlite3sh.pdb" file to the appropriate directory
\r
723 REM for the build and platform beneath the binary directory
\r
724 REM unless we are prevented from doing so.
\r
726 IF NOT DEFINED NOSYMBOLS (
\r
727 IF EXIST "%EXE_PDB_FILE_NAME%" (
\r
728 %__ECHO% XCOPY "%EXE_PDB_FILE_NAME%" "%BINARYDIRECTORY%\%%B\%%D\" %FFLAGS% %DFLAGS%
\r
731 ECHO Failed to copy "%EXE_PDB_FILE_NAME%" to "%BINARYDIRECTORY%\%%B\%%D\".
\r
742 REM NOTE: Handle any errors generated during the nested command shell.
\r
750 REM NOTE: Restore the saved current directory from the directory stack.
\r
755 ECHO Could not restore directory.
\r
760 REM NOTE: If we get to this point, we have succeeded.
\r
765 %__ECHO% %NMAKE_CMD% clean "PLATFORM=%1" XCOMPILE=1 USE_NATIVE_LIBPATHS=1 NO_TCL=1 %NMAKE_ARGS% %NMAKE_ARGS_CFG%
\r
769 %__ECHO% %NMAKE_CMD% "%DLL_FILE_NAME%" "PLATFORM=%1" XCOMPILE=1 USE_NATIVE_LIBPATHS=1 NO_TCL=1 %NMAKE_ARGS% %NMAKE_ARGS_CFG%
\r
773 %__ECHO% %NMAKE_CMD% "%EXE_FILE_NAME%" "PLATFORM=%1" XCOMPILE=1 USE_NATIVE_LIBPATHS=1 NO_TCL=1 %NMAKE_ARGS% %NMAKE_ARGS_CFG%
\r
778 SET __ECHO_CMD=ECHO %%%2%%
\r
779 FOR /F "delims=" %%V IN ('%__ECHO_CMD%') DO (
\r
780 IF NOT "%%V" == "" (
\r
781 IF NOT "%%V" == "%%%2%%" (
\r
782 %_VECHO% %1 = '%%V'
\r
789 :fn_ResetErrorLevel
\r
794 VERIFY MAYBE 2> NUL
\r
798 IF NOT DEFINED %1 GOTO :EOF
\r
799 IF "%2" == "" GOTO :EOF
\r
801 SET __ECHO_CMD=ECHO %%%1%%
\r
802 FOR /F "delims=" %%V IN ('%__ECHO_CMD%') DO (
\r
805 ENDLOCAL && SET %2=%VALUE%
\r
818 CALL :fn_ResetErrorLevel
\r
822 SET PATH=%TOOLPATH%;%SystemRoot%\System32;%SystemRoot%
\r
826 SET __ECHO_CMD=ECHO %%%1%%
\r
828 FOR /F "delims=" %%V IN ('%__ECHO_CMD%') DO (
\r
835 CALL :fn_ResetErrorLevel
\r
840 ECHO Usage: %~nx0 ^<binaryDirectory^>
\r
845 CALL :fn_SetErrorLevel
\r
848 ECHO Failure, errors were encountered.
\r
852 CALL :fn_ResetErrorLevel
\r
855 ECHO Success, no errors were encountered.
\r
859 %__ECHO% EXIT /B %ERRORLEVEL%
\r