From: mistachkin Date: Sat, 20 Oct 2012 08:40:05 +0000 (+0000) Subject: Modify VSIX build tools in support of an additional package flavor. X-Git-Tag: version-3.7.15~49^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=0f801707d169f651960e01758d38670c02ea1caf;p=thirdparty%2Fsqlite.git Modify VSIX build tools in support of an additional package flavor. FossilOrigin-Name: 702ebc646b43468e6a89322e4e2f4b1ef7858589 --- diff --git a/manifest b/manifest index 4e7f38b9c7..5a01ae00ee 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Make\ssure\ssubstructure\selements\shave\sproper\salignment\sin\sthe\sICU\stokenizers\nof\sFTS2\sand\sFTS3. -D 2012-10-19T02:10:53.511 +C Modify\sVSIX\sbuild\stools\sin\ssupport\sof\san\sadditional\spackage\sflavor. +D 2012-10-20T08:40:05.626 F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f F Makefile.in 5f4f26109f9d80829122e0e09f9cda008fa065fb F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23 @@ -977,7 +977,7 @@ F test/wherelimit.test 5e9fd41e79bb2b2d588ed999d641d9c965619b31 F test/win32lock.test b2a539e85ae6b2d78475e016a9636b4451dc7fb9 F test/zeroblob.test caaecfb4f908f7bc086ed238668049f96774d688 F test/zerodamage.test e7f77fded01dfcdf92ac2c5400f1e35d7a21463c -F tool/build-all-msvc.bat c4ff2f18b1a59bb370ce48fdd286b51a82fa0f5c x +F tool/build-all-msvc.bat 74fb6e5cca66ebdb6c9bbafb2f8b802f08146d38 x F tool/build-shell.sh b64a481901fc9ffe5ca8812a2a9255b6cfb77381 F tool/checkSpacing.c 810e51703529a204fc4e1eb060e9ab663e3c06d2 F tool/diffdb.c 7524b1b5df217c20cd0431f6789851a4e0cb191b @@ -995,7 +995,7 @@ F tool/mksqlite3c-noext.tcl 8bce31074e4cbe631bb7676526a048335f4c9f02 F tool/mksqlite3c.tcl 589c7f44e990be1b8443cfe4808dce392b0327fa F tool/mksqlite3h.tcl 78013ad79a5e492e5f764f3c7a8ef834255061f8 F tool/mksqlite3internalh.tcl 3dca7bb5374cee003379b8cbac73714f610ef795 -F tool/mkvsix.tcl c5e0d52592fb07a17626cd54e5f71295fb4d1b55 +F tool/mkvsix.tcl 0c7febb4115fd278ff5764f59bf5111172d78d1b F tool/offsets.c fe4262fdfa378e8f5499a42136d17bf3b98f6091 F tool/omittest.tcl 4665982e95a6e5c1bd806cf7bc3dea95be422d77 F tool/opcodeDoc.awk b3a2a3d5d3075b8bd90b7afe24283efdd586659c @@ -1020,8 +1020,11 @@ F tool/tostr.awk e75472c2f98dd76e06b8c9c1367f4ab07e122d06 F tool/vdbe-compress.tcl f12c884766bd14277f4fcedcae07078011717381 F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4 F tool/warnings.sh fbc018d67fd7395f440c28f33ef0f94420226381 -F tool/win/sqlite.vsix 67d8a99aceb56384a81b3f30d6c71743146d2cc9 -P 0482c73bfdf80b0c0ce9abea706554d7ddf36f69 -R 359b18ae3c286a09e1c7579425de96fe -U drh -Z 09f8af841cfaabcfb0c92e8b07cb012e +F tool/win/sqlite.vsix afaf61050ca4587a7acf3335fc4cde7c9aa254af +P aaa2d9b0db74d8452d9294de17cff786ab4ec7c8 +R 75ba814e4bd96022706eb169d0651507 +T *branch * vsixFlavor +T *sym-vsixFlavor * +T -sym-trunk * +U mistachkin +Z ef10ccc9c6ae9e2d11f5c86ef842bcab diff --git a/manifest.uuid b/manifest.uuid index 9bcbd35ae6..7e2c236535 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -aaa2d9b0db74d8452d9294de17cff786ab4ec7c8 \ No newline at end of file +702ebc646b43468e6a89322e4e2f4b1ef7858589 \ No newline at end of file diff --git a/tool/build-all-msvc.bat b/tool/build-all-msvc.bat index c768e2b6e8..758036fb75 100755 --- a/tool/build-all-msvc.bat +++ b/tool/build-all-msvc.bat @@ -151,13 +151,21 @@ REM NOTE: Setup environment variables to translate between the MSVC platform REM names and the names to be used for the platform-specific binary REM directories. REM +SET amd64_NAME=x64 +SET arm_NAME=ARM +SET x64_NAME=x64 SET x86_NAME=x86 SET x86_amd64_NAME=x64 SET x86_arm_NAME=ARM +SET x86_x64_NAME=x64 +%_VECHO% amd64_Name = '%amd64_NAME%' +%_VECHO% arm_Name = '%arm_NAME%' +%_VECHO% x64_Name = '%x64_NAME%' %_VECHO% x86_Name = '%x86_NAME%' %_VECHO% x86_amd64_Name = '%x86_amd64_NAME%' %_VECHO% x86_arm_Name = '%x86_arm_NAME%' +%_VECHO% x86_x64_Name = '%x86_x64_NAME%' REM REM NOTE: Check for the external tools needed during the build process ^(i.e. @@ -210,6 +218,19 @@ IF "%VisualStudioVersion%" == "11.0" ( CALL :fn_UnsetVariable SET_NSDKLIBPATH ) +REM +REM NOTE: Check if this is the Windows Phone SDK. If so, a different batch +REM file is necessary to setup the build environment. Since the variable +REM values involved here may contain parenthesis, using GOTO instead of +REM an IF block is required. +REM +IF DEFINED WindowsPhoneKitDir GOTO set_vcvarsall_phone +SET VCVARSALL=%VCINSTALLDIR%\vcvarsall.bat +GOTO set_vcvarsall_done +:set_vcvarsall_phone +SET VCVARSALL=%VCINSTALLDIR%\WPSDK\WP80\vcvarsphoneall.bat +:set_vcvarsall_done + REM REM NOTE: This is the outer loop. There should be exactly one iteration per REM platform. @@ -250,6 +271,7 @@ FOR %%P IN (%PLATFORMS%) DO ( CALL :fn_UnsetVariable Platform REM CALL :fn_UnsetVariable VCINSTALLDIR CALL :fn_UnsetVariable VSINSTALLDIR + CALL :fn_UnsetVariable WindowsPhoneKitDir CALL :fn_UnsetVariable WindowsSdkDir CALL :fn_UnsetVariable WindowsSdkDir_35 CALL :fn_UnsetVariable WindowsSdkDir_old @@ -292,10 +314,10 @@ FOR %%P IN (%PLATFORMS%) DO ( REM REM NOTE: Attempt to setup the MSVC environment for this platform. REM - %__ECHO3% CALL "%VCINSTALLDIR%\vcvarsall.bat" %%P + %__ECHO3% CALL "%VCVARSALL%" %%P IF ERRORLEVEL 1 ( - ECHO Failed to call "%VCINSTALLDIR%\vcvarsall.bat" for platform %%P. + ECHO Failed to call "%VCVARSALL%" for platform %%P. GOTO errors ) @@ -305,10 +327,12 @@ FOR %%P IN (%PLATFORMS%) DO ( REM as current versions of their official batch file do not set REM the exit code upon failure. REM - IF NOT DEFINED __ECHO ( - IF NOT DEFINED WindowsSdkDir ( - ECHO Cannot build, Windows SDK not found for platform %%P. - GOTO errors + IF NOT DEFINED __ECHO3 ( + IF NOT DEFINED WindowsPhoneKitDir ( + IF NOT DEFINED WindowsSdkDir ( + ECHO Cannot build, Windows SDK not found for platform %%P. + GOTO errors + ) ) ) @@ -322,8 +346,13 @@ FOR %%P IN (%PLATFORMS%) DO ( REM file used to setup the MSVC environment. REM IF DEFINED SET_NSDKLIBPATH ( - CALL :fn_CopyVariable WindowsSdkDir NSDKLIBPATH - CALL :fn_AppendVariable NSDKLIBPATH \lib\win8\um\x86 + IF DEFINED WindowsPhoneKitDir ( + CALL :fn_CopyVariable WindowsPhoneKitDir NSDKLIBPATH + CALL :fn_AppendVariable NSDKLIBPATH \lib\x86 + ) ELSE IF DEFINED WindowsSdkDir ( + CALL :fn_CopyVariable WindowsSdkDir NSDKLIBPATH + CALL :fn_AppendVariable NSDKLIBPATH \lib\win8\um\x86 + ) ) REM diff --git a/tool/mkvsix.tcl b/tool/mkvsix.tcl index 750453ab94..dcf195ee0e 100644 --- a/tool/mkvsix.tcl +++ b/tool/mkvsix.tcl @@ -59,8 +59,18 @@ # # USAGE # -# Typically, when on Windows, this script is executed using commands similar to -# the following (from a normal Windows command prompt window): +# The first argument to this script is required and must be the name of the +# top-level directory containing the directories and files organized into a +# tree as described in item 6 of the PREREQUISITES section, above. The second +# argument is optional and if present must contain the name of the directory +# containing the root of the source tree for SQLite. The third argument is +# optional and if present must contain the flavor the VSIX package to build. +# Currently, the only supported package flavors are "WinRT" and "WP80". The +# fourth argument is optional and if present must be a string containing a list +# of platforms to include in the VSIX package. The format of the platform list +# string is "platform1,platform2,platform3". Typically, when on Windows, this +# script is executed using commands similar to the following from a normal +# Windows command prompt: # # CD /D C:\dev\sqlite\core # tclsh85 tool\mkvsix.tcl C:\Temp @@ -89,11 +99,16 @@ proc fail { {error ""} {usage false} } { puts stdout "usage:\ [file tail [info nameofexecutable]]\ -[file tail [info script]] \[sourceDirectory\]" +[file tail [info script]] \[sourceDirectory\]\ +\[packageFlavor\] \[platformNames\]" exit 1 } +proc appendArgs { args } { + set result ""; eval append result $args +} + proc getEnvironmentVariable { name } { # # NOTE: Returns the value of the specified environment variable or an empty @@ -162,21 +177,24 @@ proc writeFile { fileName data } { proc substFile { fileName } { # # NOTE: Performs all Tcl command, variable, and backslash substitutions in - # the specified file and then re-writes the contents of that same file + # the specified file and then rewrites the contents of that same file # with the substituted data. # return [writeFile $fileName [uplevel 1 [list subst [readFile $fileName]]]] } -proc replaceBuildAndPlatform { fileName buildName platformName } { +proc replaceFileNameTokens { fileName name buildName platformName } { # # NOTE: Returns the specified file name containing the platform name instead # of platform placeholder tokens. # - return [string map [list $buildName $platformName] \ - $fileName] + return [string map [list $buildName $platformName \ + $name] $fileName] } +# +# NOTE: This is the entry point for this script. +# set script [file normalize [info script]] if {[string length $script] == 0} then { @@ -192,7 +210,7 @@ set rootName [file rootname [file tail $script]] # NOTE: Process and verify all the command line arguments. # set argc [llength $argv] -if {$argc != 1 && $argc != 2} then {fail} +if {$argc < 1 || $argc > 4} then {fail} set binaryDirectory [lindex $argv 0] @@ -205,7 +223,7 @@ if {![file exists $binaryDirectory] || \ fail "binary directory does not exist" } -if {$argc == 2} then { +if {$argc >= 2} then { set sourceDirectory [lindex $argv 1] } else { # @@ -224,6 +242,47 @@ if {![file exists $sourceDirectory] || \ fail "source directory does not exist" } +if {$argc >= 3} then { + set packageFlavor [lindex $argv 2] +} else { + # + # NOTE: Assume the package flavor is WinRT. + # + set packageFlavor WinRT +} + +if {[string length $packageFlavor] == 0} then { + fail "invalid package flavor" +} + +if {[string equal -nocase $packageFlavor WinRT]} then { + set shortName SQLite.WinRT + set displayName "SQLite for Windows Runtime" + set targetPlatformIdentifier Windows + set extraSdkPath "" + set extraFileListAttributes [appendArgs \ + "\r\n " {AppliesTo="WindowsAppContainer"} \ + "\r\n " {DependsOn="Microsoft.VCLibs, version=11.0"}] +} elseif {[string equal -nocase $packageFlavor WP80]} then { + set shortName SQLite.WP80 + set displayName "SQLite for Windows Phone" + set targetPlatformIdentifier "Windows Phone" + set extraSdkPath "\\..\\$targetPlatformIdentifier" + set extraFileListAttributes "" +} else { + fail "unsupported package flavor, must be \"WinRT\" or \"WP80\"" +} + +if {$argc >= 4} then { + set platformNames [list] + + foreach platformName [split [lindex $argv 3] ", "] { + if {[string length $platformName] > 0} then { + lappend platformNames $platformName + } + } +} + ############################################################################### # @@ -247,7 +306,7 @@ if {![file exists $templateFile] || \ } set currentDirectory [pwd] -set outputFile [file join $currentDirectory sqlite-output.vsix] +set outputFile [file join $currentDirectory sqlite-$packageFlavor-output.vsix] if {[file exists $outputFile]} then { fail [appendArgs "output file \"" $outputFile "\" already exists"] @@ -323,17 +382,41 @@ if {![regexp -line -- $pattern $data dummy version]} then { ############################################################################### # -# NOTE: Setup all the master file list data. This includes the source and -# destination file names, build-neutral boolean flags, platform-neutral -# boolean flags, and the dynamic content (subst) boolean flags. There -# is also one set of boolean flags per build configuration, currently -# "Debug" and "Retail", that control which files are skipped for it. +# NOTE: Setup all the master file list data. This includes the source file +# names, the destination file names, and the file processing flags. The +# possible file processing flags are: +# +# "buildNeutral" -- This flag indicates the file location and content do +# not depend on the build configuration. +# +# "platformNeutral" -- This flag indicates the file location and content +# do not depend on the build platform. +# +# "subst" -- This flag indicates that the file contains dynamic textual +# content that needs to be processed using [subst] prior to +# packaging the file into the final VSIX package. The primary +# use of this flag is to insert the name of the VSIX package, +# some package flavor-specific value, or the SQLite version +# into a file. +# +# "noDebug" -- This flag indicates that the file should be skipped when +# processing the debug build. +# +# "noRetail" -- This flag indicates that the file should be skipped when +# processing the retail build. +# +# "move" -- This flag indicates that the file should be moved from the +# source to the destination instead of being copied. +# +# This file metadata may be overridden, either in whole or in part, via +# the user-specific customizations file. # if {![info exists fileNames(source)]} then { - set fileNames(source) [list "" "" "" \ - [file join $sourceDirectory sqlite3.h] \ - [file join $binaryDirectory sqlite3.lib] \ - [file join $binaryDirectory sqlite3.dll]] + set fileNames(source) [list "" "" \ + [file join $stagingDirectory DesignTime sqlite3.props] \ + [file join $sourceDirectory sqlite3.h] \ + [file join $binaryDirectory sqlite3.lib] \ + [file join $binaryDirectory sqlite3.dll]] if {![info exists no(symbols)]} then { lappend fileNames(source) \ @@ -343,13 +426,12 @@ if {![info exists fileNames(source)]} then { if {![info exists fileNames(destination)]} then { set fileNames(destination) [list \ - [file join $stagingDirectory extension.vsixmanifest] \ - [file join $stagingDirectory SDKManifest.xml] \ - [file join $stagingDirectory DesignTime \ - SQLite.WinRT.props] \ - [file join $stagingDirectory DesignTime sqlite3.h] \ - [file join $stagingDirectory DesignTime sqlite3.lib] \ - [file join $stagingDirectory Redist sqlite3.dll]] + [file join $stagingDirectory extension.vsixmanifest] \ + [file join $stagingDirectory SDKManifest.xml] \ + [file join $stagingDirectory DesignTime .props] \ + [file join $stagingDirectory DesignTime sqlite3.h] \ + [file join $stagingDirectory DesignTime sqlite3.lib] \ + [file join $stagingDirectory Redist sqlite3.dll]] if {![info exists no(symbols)]} then { lappend fileNames(destination) \ @@ -357,50 +439,24 @@ if {![info exists fileNames(destination)]} then { } } -if {![info exists fileNames(buildNeutral)]} then { - set fileNames(buildNeutral) [list 1 1 1 1 0 0] +if {![info exists fileNames(flags)]} then { + set fileNames(flags) [list \ + [list buildNeutral platformNeutral subst] \ + [list buildNeutral platformNeutral subst] \ + [list buildNeutral platformNeutral subst move] \ + [list buildNeutral platformNeutral] \ + [list] [list] [list noRetail]] if {![info exists no(symbols)]} then { - lappend fileNames(buildNeutral) 0 - } -} - -if {![info exists fileNames(platformNeutral)]} then { - set fileNames(platformNeutral) [list 1 1 1 1 0 0] - - if {![info exists no(symbols)]} then { - lappend fileNames(platformNeutral) 0 - } -} - -if {![info exists fileNames(subst)]} then { - set fileNames(subst) [list 1 1 1 0 0 0] - - if {![info exists no(symbols)]} then { - lappend fileNames(subst) 0 - } -} - -if {![info exists fileNames(noDebug)]} then { - set fileNames(noDebug) [list 0 0 0 0 0 0] - - if {![info exists no(symbols)]} then { - lappend fileNames(noDebug) 0 - } -} - -if {![info exists fileNames(noRetail)]} then { - set fileNames(noRetail) [list 0 0 0 0 0 0] - - if {![info exists no(symbols)]} then { - lappend fileNames(noRetail) 1 + lappend fileNames(flags) [list noRetail] } } ############################################################################### # -# NOTE: Setup the list of builds supported by this script. +# NOTE: Setup the list of builds supported by this script. These may be +# overridden via the user-specific customizations file. # if {![info exists buildNames]} then { set buildNames [list Debug Retail] @@ -409,7 +465,9 @@ if {![info exists buildNames]} then { ############################################################################### # -# NOTE: Setup the list of platforms supported by this script. +# NOTE: Setup the list of platforms supported by this script. These may be +# overridden via the command line or the user-specific customizations +# file. # if {![info exists platformNames]} then { set platformNames [list x86 x64 ARM] @@ -423,54 +481,64 @@ if {![info exists platformNames]} then { file mkdir $stagingDirectory # -# NOTE: Build the Tcl command used to extract the template package to the -# staging directory. +# NOTE: Build the Tcl command used to extract the template VSIX package to +# the staging directory. # set extractCommand [list exec -- $unzip $templateFile -d $stagingDirectory] # -# NOTE: Extract the template package to the staging directory. +# NOTE: Extract the template VSIX package to the staging directory. # eval $extractCommand ############################################################################### # -# NOTE: Process each file in the master file list. There are actually seven +# NOTE: Process each file in the master file list. There are actually three # parallel lists that contain the source file names, the destination file -# names, the build-neutral flags, the platform-neutral flags, the -# use-subst flags, the no-debug flags, and the no-retail flags. If the -# platform-neutral flag is non-zero, the file is not platform-specific. -# If the build-neutral flag is non-zero, the file is not build-specific. -# If the use-subst flag is non-zero, the file is considered to be a text -# file that may contain Tcl variable and/or command replacements, to be -# dynamically replaced during processing. If the no-debug flag is -# non-zero, the file will be skipped when processing for the debug build. -# If the no-retail flag is non-zero, the file will be skipped when -# processing for the retail build. If the source file name is an empty -# string, then the destination file name will be assumed to already exist -# in the staging directory and will not be copied; however, dynamic -# replacements may still be performed on the destination file prior to -# the package being re-zipped. +# names, and the file processing flags. If the "buildNeutral" flag is +# present, the file location and content do not depend on the build +# configuration and "CommonConfiguration" will be used in place of the +# build configuration name. If the "platformNeutral" flag is present, +# the file location and content do not depend on the build platform and +# "neutral" will be used in place of the build platform name. If the +# "subst" flag is present, the file is assumed to be a text file that may +# contain Tcl variable, command, and backslash replacements, to be +# dynamically replaced during processing using the Tcl [subst] command. +# If the "noDebug" flag is present, the file will be skipped when +# processing for the debug build. If the "noRetail" flag is present, the +# file will be skipped when processing for the retail build. If the +# "move" flag is present, the source file will be deleted after it is +# copied to the destination file. If the source file name is an empty +# string, the destination file name will be assumed to already exist in +# the staging directory and will not be copied; however, Tcl variable, +# command, and backslash replacements may still be performed on the +# destination file prior to the final VSIX package being built if the +# "subst" flag is present. # foreach sourceFileName $fileNames(source) \ destinationFileName $fileNames(destination) \ - buildNeutral $fileNames(buildNeutral) \ - platformNeutral $fileNames(platformNeutral) \ - useSubst $fileNames(subst) \ - noDebug $fileNames(noDebug) \ - noRetail $fileNames(noRetail) { + fileFlags $fileNames(flags) { + # + # NOTE: Process the file flags into separate boolean variables that may be + # used within the loop. + # + set isBuildNeutral [expr {[lsearch $fileFlags buildNeutral] != -1}] + set isPlatformNeutral [expr {[lsearch $fileFlags platformNeutral] != -1}] + set isMove [expr {[lsearch $fileFlags move] != -1}] + set useSubst [expr {[lsearch $fileFlags subst] != -1}] + # # NOTE: If the current file is build-neutral, then only one build will # be processed for it, namely "CommonConfiguration"; otherwise, each # supported build will be processed for it individually. # foreach buildName \ - [expr {$buildNeutral ? [list CommonConfiguration] : $buildNames}] { + [expr {$isBuildNeutral ? [list CommonConfiguration] : $buildNames}] { # # NOTE: Should the current file be skipped for this build? # - if {[info exists no${buildName}] && [set no${buildName}]} then { + if {[lsearch $fileFlags no${buildName}] != -1} then { continue } @@ -480,12 +548,12 @@ foreach sourceFileName $fileNames(source) \ # supported platform will be processed for it individually. # foreach platformName \ - [expr {$platformNeutral ? [list neutral] : $platformNames}] { + [expr {$isPlatformNeutral ? [list neutral] : $platformNames}] { # # NOTE: Use the actual platform name in the destination file name. # - set newDestinationFileName [replaceBuildAndPlatform \ - $destinationFileName $buildName $platformName] + set newDestinationFileName [replaceFileNameTokens $destinationFileName \ + $shortName $buildName $platformName] # # NOTE: Does the source file need to be copied to the destination file? @@ -499,8 +567,18 @@ foreach sourceFileName $fileNames(source) \ # # NOTE: Then, copy the source file to the destination file verbatim. # - file copy [replaceBuildAndPlatform $sourceFileName $buildName \ - $platformName] $newDestinationFileName + set newSourceFileName [replaceFileNameTokens $sourceFileName \ + $shortName $buildName $platformName] + + file copy $newSourceFileName $newDestinationFileName + + # + # NOTE: If this is a move instead of a copy, delete the source file + # now. + # + if {$isMove} then { + file delete $newSourceFileName + } } # @@ -528,13 +606,13 @@ foreach sourceFileName $fileNames(source) \ cd $stagingDirectory # -# NOTE: Build the Tcl command used to archive the final package in the +# NOTE: Build the Tcl command used to archive the final VSIX package in the # output directory. # set archiveCommand [list exec -- $zip -r $outputFile *] # -# NOTE: Build the final package archive in the output directory. +# NOTE: Build the final VSIX package archive in the output directory. # eval $archiveCommand diff --git a/tool/win/sqlite.vsix b/tool/win/sqlite.vsix index 4bdfda5c7d..13f121f2fe 100644 Binary files a/tool/win/sqlite.vsix and b/tool/win/sqlite.vsix differ