Browse Source

VS: Add source file property to specify Windows App deployment location

Add a VS_DEPLOYMENT_LOCATION source file property to specify where to
put files that are part of the package.  For example:

  set_property(SOURCE ${ASSET_FILES} PROPERTY VS_DEPLOYMENT_LOCATION "assets")

Without this, sources marked with VS_DEPLOYMENT_CONTENT cannot be
located properly.
Gilles Khouzam 11 years ago
parent
commit
352f246f3e

+ 1 - 0
Help/manual/cmake-properties.7.rst

@@ -291,6 +291,7 @@ Properties on Source Files
    /prop_sf/OBJECT_OUTPUTS
    /prop_sf/SYMBOLIC
    /prop_sf/VS_DEPLOYMENT_CONTENT
+   /prop_sf/VS_DEPLOYMENT_LOCATION
    /prop_sf/VS_SHADER_ENTRYPOINT
    /prop_sf/VS_SHADER_MODEL
    /prop_sf/VS_SHADER_TYPE

+ 8 - 0
Help/prop_sf/VS_DEPLOYMENT_LOCATION.rst

@@ -0,0 +1,8 @@
+VS_DEPLOYMENT_LOCATION
+----------------------
+
+Specifies the deployment location for a content source file with a Windows
+Phone or Windows Store application when built with a Visual Studio generator.
+This property is only applicable when using :prop_sf:`VS_DEPLOYMENT_CONTENT`.
+The value represent the path relative to the app package and applies to all
+configurations.

+ 4 - 0
Help/release/3.1.0.rst

@@ -159,6 +159,10 @@ Properties
   to tell the Visual Studio generators to mark content for deployment
   in Windows Phone and Windows Store projects.
 
+* A :prop_sf:`VS_DEPLOYMENT_LOCATION` source file property was added
+  to tell the Visual Studio generators the relative location of content
+  marked for deployment in Windows Phone and Windows Store projects.
+
 * The :prop_tgt:`VS_WINRT_COMPONENT` target property was created to
   tell Visual Studio generators to compile a shared library as a
   Windows Runtime (WinRT) component.

+ 15 - 0
Source/cmVisualStudio10TargetGenerator.cxx

@@ -1261,6 +1261,7 @@ void cmVisualStudio10TargetGenerator::WriteExtraSource(cmSourceFile const* sf)
     }
 
   std::string deployContent;
+  std::string deployLocation;
   if(this->GlobalGenerator->TargetsWindowsPhone() ||
      this->GlobalGenerator->TargetsWindowsStore())
     {
@@ -1269,6 +1270,12 @@ void cmVisualStudio10TargetGenerator::WriteExtraSource(cmSourceFile const* sf)
       {
       toolHasSettings = true;
       deployContent = content;
+
+      const char* location = sf->GetProperty("VS_DEPLOYMENT_LOCATION");
+      if(location && *location)
+        {
+        deployLocation = location;
+        }
       }
     }
 
@@ -1283,6 +1290,14 @@ void cmVisualStudio10TargetGenerator::WriteExtraSource(cmSourceFile const* sf)
       cmGeneratorExpression ge;
       cmsys::auto_ptr<cmCompiledGeneratorExpression> cge =
         ge.Parse(deployContent);
+      // Deployment location cannot be set on a configuration basis
+      if(!deployLocation.empty())
+        {
+        this->WriteString("<Link>", 3);
+        (*this->BuildFileStream) << deployLocation
+                                 << "\\%(FileName)%(Extension)";
+        this->WriteString("</Link>\n", 0);
+        }
       for(size_t i = 0; i != configs->size(); ++i)
         {
         if(0 == strcmp(cge->Evaluate(this->Makefile, (*configs)[i]), "1"))

+ 6 - 1
Tests/VSWinStorePhone/CMakeLists.txt

@@ -86,6 +86,9 @@ if (WINDOWS_PHONE8)
 elseif (NOT "${PLATFORM}" STREQUAL "DESKTOP")
   set(CONTENT_FILES ${CONTENT_FILES}
     ${CMAKE_CURRENT_BINARY_DIR}/${APP_MANIFEST_NAME}
+    )
+
+    set(ASSET_FILES ${ASSET_FILES}
     Direct3DApp1/Assets/Logo.png
     Direct3DApp1/Assets/SmallLogo.png
     Direct3DApp1/Assets/SplashScreen.png
@@ -94,10 +97,12 @@ elseif (NOT "${PLATFORM}" STREQUAL "DESKTOP")
 endif()
 
 set(RESOURCE_FILES
-  ${CONTENT_FILES} ${DEBUG_CONTENT_FILES} ${RELEASE_CONTENT_FILES}
+  ${CONTENT_FILES} ${DEBUG_CONTENT_FILES} ${RELEASE_CONTENT_FILES} ${ASSET_FILES}
   Direct3DApp1/Direct3DApp1_TemporaryKey.pfx)
 
 set_property(SOURCE ${CONTENT_FILES} PROPERTY VS_DEPLOYMENT_CONTENT 1)
+set_property(SOURCE ${ASSET_FILES} PROPERTY VS_DEPLOYMENT_CONTENT 1)
+set_property(SOURCE ${ASSET_FILES} PROPERTY VS_DEPLOYMENT_LOCATION "Assets")
 set_property(SOURCE ${DEBUG_CONTENT_FILES} PROPERTY VS_DEPLOYMENT_CONTENT $<CONFIG:Debug>)
 set_property(SOURCE ${RELEASE_CONTENT_FILES} PROPERTY
   VS_DEPLOYMENT_CONTENT $<OR:$<CONFIG:Release>,$<CONFIG:RelWithDebInfo>,$<CONFIG:MinSizeRel>>)

+ 3 - 3
Tests/VSWinStorePhone/cmake/Package_vc11.store.appxmanifest.in

@@ -4,7 +4,7 @@
   <Properties>
     <DisplayName>@SHORT_NAME@</DisplayName>
     <PublisherDisplayName>mgong</PublisherDisplayName>
-    <Logo>StoreLogo.png</Logo>
+    <Logo>Assets/StoreLogo.png</Logo>
   </Properties>
   <Prerequisites>
     <OSMinVersion>6.2.1</OSMinVersion>
@@ -15,9 +15,9 @@
   </Resources>
   <Applications>
     <Application Id="App" Executable="$targetnametoken$.exe" EntryPoint="@[email protected]">
-      <VisualElements DisplayName="@SHORT_NAME@" Description="@SHORT_NAME@" BackgroundColor="#336699" ForegroundText="light" Logo="Logo.png" SmallLogo="SmallLogo.png">
+      <VisualElements DisplayName="@SHORT_NAME@" Description="@SHORT_NAME@" BackgroundColor="#336699" ForegroundText="light" Logo="Assets/Logo.png" SmallLogo="Assets/SmallLogo.png">
         <DefaultTile ShowName="allLogos" ShortName="@SHORT_NAME@" />
-        <SplashScreen Image="SplashScreen.png" />
+        <SplashScreen Image="Assets/SplashScreen.png" />
       </VisualElements>
     </Application>
   </Applications>

+ 4 - 4
Tests/VSWinStorePhone/cmake/Package_vc12.store.appxmanifest.in

@@ -4,7 +4,7 @@
   <Properties>
     <DisplayName>@SHORT_NAME@</DisplayName>
     <PublisherDisplayName>mgong</PublisherDisplayName>
-    <Logo>StoreLogo.png</Logo>
+    <Logo>Assets/StoreLogo.png</Logo>
   </Properties>
   <Prerequisites>
     <OSMinVersion>6.3</OSMinVersion>
@@ -20,14 +20,14 @@
         Description="@SHORT_NAME@"
         BackgroundColor="#336699"
         ForegroundText="light"
-        Square150x150Logo="Logo.png"
-        Square30x30Logo="SmallLogo.png">
+        Square150x150Logo="Assets/Logo.png"
+        Square30x30Logo="Assets/SmallLogo.png">
         <m2:DefaultTile ShortName="@SHORT_NAME@">
           <m2:ShowNameOnTiles>
             <m2:ShowOn Tile="square150x150Logo" />
           </m2:ShowNameOnTiles>
         </m2:DefaultTile>
-        <m2:SplashScreen Image="SplashScreen.png" />
+        <m2:SplashScreen Image="Assets/SplashScreen.png" />
       </m2:VisualElements>
     </Application>
   </Applications>

+ 4 - 4
Tests/VSWinStorePhone/cmake/Package_vc12.wp.appxmanifest.in

@@ -6,7 +6,7 @@
   <Properties>
     <DisplayName>@SHORT_NAME@</DisplayName>
     <PublisherDisplayName>mgong</PublisherDisplayName>
-    <Logo>StoreLogo.png</Logo>
+    <Logo>Assets/StoreLogo.png</Logo>
   </Properties>
   <Prerequisites>
     <OSMinVersion>6.3.1</OSMinVersion>
@@ -22,14 +22,14 @@
         Description="@SHORT_NAME@"
         BackgroundColor="#336699"
         ForegroundText="light"
-        Square150x150Logo="Logo.png"
-        Square30x30Logo="SmallLogo.png">
+        Square150x150Logo="Assets/Logo.png"
+        Square30x30Logo="Assets/SmallLogo.png">
         <m2:DefaultTile ShortName="@SHORT_NAME@">
           <m2:ShowNameOnTiles>
             <m2:ShowOn Tile="square150x150Logo" />
           </m2:ShowNameOnTiles>
         </m2:DefaultTile>
-        <m2:SplashScreen Image="SplashScreen.png" />
+        <m2:SplashScreen Image="Assets/SplashScreen.png" />
       </m2:VisualElements>
     </Application>
   </Applications>