Merge remote-tracking branch 'github/master' into tizen
[platform/core/csapi/tizenfx.git] / build / build.proj
index 58e76f8..030d6a0 100644 (file)
@@ -2,20 +2,30 @@
 
   <Import Project="$(MSBuildThisFileDirectory)directories.props" />
 
-  <!-- Common Properties -->
-  <PropertyGroup>
-    <PublicModuleListFile>$(PackageSrcDir)PublicModuleList.txt</PublicModuleListFile>
-  </PropertyGroup>
-
   <!-- Build Properties -->
   <PropertyGroup>
     <Configuration>Release</Configuration>
+    <GenDummyCommand>dotnet $(GenDummyDir)\GenDummy.dll</GenDummyCommand>
+    <PublicDummyProjectDir>$(ProjectRootDir).dummy\</PublicDummyProjectDir>
+    <InternalDummyProjectDir>$(ProjectRootDir)internal\.dummy\</InternalDummyProjectDir>
   </PropertyGroup>
 
   <!-- Projects to build -->
   <ItemGroup>
-    <ProjectToBuild Include="$(ProjectSrcDir)\$(Project)\$(Project).csproj" Condition="'$(Project)' != ''" />
-    <ProjectToBuild Include="$(ProjectSrcDir)**\*.csproj" Condition="'$(Project)' == ''" />
+    <ProjectToBuild Include="$(ProjectSrcDir)\$(Project)\$(Project).csproj" Condition="'$(Project)' != ''">
+      <Visibility>Public</Visibility>
+    </ProjectToBuild>
+    <ProjectToBuild Include="$(ProjectSrcDir)**\*.csproj" Condition="'$(Project)' == ''">
+      <Visibility>Public</Visibility>
+    </ProjectToBuild>
+    <ProjectToBuild Include="$(InternalProjectSrcDir)**\*.csproj" Condition="'$(Project)' == ''">
+      <Visibility>Internal</Visibility>
+    </ProjectToBuild>
+  </ItemGroup>
+
+  <!-- Nuspec files to pack -->
+  <ItemGroup>
+    <NuspecFiles Include="$(ProjectRootDir)pkg\*.nuspec" />
   </ItemGroup>
 
   <!--
 
     <ItemGroup>
       <ProjectIntermediateAllFiles Include="$(ProjectSrcDir)**\obj\*" />
+      <ProjectIntermediateAllFiles Include="$(InternalProjectSrcDir)**\obj\*" />
       <ProjectIntermediateDir Include="@(ProjectIntermediateAllFiles->'%(RootDir)%(Directory)'->Distinct())" />
     </ItemGroup>
 
     <ItemGroup>
       <DirToRemove Include="$(OutputBaseDir)" />
       <DirToRemove Include="@(ProjectIntermediateDir)" />
+      <DirToRemove Include="$(PublicDummyProjectDir)" />
+      <DirToRemove Include="$(InternalDummyProjectDir)" />
     </ItemGroup>
 
     <RemoveDir Directories="@(DirToRemove)" />
 
   </Target>
 
-
   <!--
-    Target : Build
+    Target : Restore
     ==============
-    Build all projects in src/ directory.
-    The output(.dll, .pdb, .xml) of the project specfied in
-    pkg/PublicModuleList.txt is copied to Artifacts/bin/public,
-    and the rest are copied to Artifacts/bin/platform.
+    Restore all projects.
   -->
-  <Target Name="Build" DependsOnTargets="Clean">
+  <Target Name="Restore">
 
     <MSBuild Projects="@(ProjectToBuild)"
              Properties="Configuration=$(Configuration);RestoreSources=$(RestoreSources)"
+             BuildInParallel="false"
              Targets="Restore" />
 
+  </Target>
+
+  <!--
+    Target : Build
+    ==============
+    Build all projects.
+  -->
+  <Target Name="Build">
+
     <MSBuild Projects="@(ProjectToBuild)"
-             Properties="Configuration=$(Configuration);OutDir=$(OutputPlatformDir)"
+             Properties="Configuration=$(Configuration)"
              BuildInParallel="true"
              UseResultsCache="true"
              Targets="Build" />
 
-    <ReadLinesFromFile File="$(PublicModuleListFile)">
-      <Output TaskParameter="Lines" ItemName="PublicProject" />
-    </ReadLinesFromFile>
+    <MSBuild Projects="@(ProjectToBuild)"
+             Properties="Configuration=$(Configuration)"
+             BuildInParallel="false"
+             Targets="CopyToArtifactsDirectory" />
+
+  </Target>
+
+  <!--
+    Target : Pack
+    ==============
+    Generate nuget packages.
+  -->
+  <Target Name="Pack">
+
+    <MSBuild Projects="$(MSBuildThisFileDirectory)pack.csproj"
+             Properties="NoBuild=True"
+             Targets="Restore" />
+
+    <MSBuild Projects="$(MSBuildThisFileDirectory)pack.csproj"
+             Properties="NoBuild=True;Version=$(Version);NuspecFile=%(NuspecFiles.Identity)"
+             Targets="Pack" />
+
+  </Target>
+
+  <!--
+    Target : Dummy
+    ==============
+    Generate dummy assemblies of all projects.
+  -->
+  <Target Name="Dummy" DependsOnTargets="GenerateDummyProject">
 
     <ItemGroup>
-      <PlatformFiles Include="$(OutputPlatformDir)*" />
-      <_PublicFilesToMove Include="$(OutputPlatformDir)%(PublicProject.Identity).dll" />
-      <_PublicFilesToMove Include="$(OutputPlatformDir)%(PublicProject.Identity).pdb" />
-      <_PublicFilesToMove Include="$(OutputPlatformDir)%(PublicProject.Identity).xml" />
-      <PublicFilesToMove Include="@(_PublicFilesToMove)" Condition="'@(PlatformFiles)' == '@(_PublicFilesToMove)' and '%(Identity)' != '' " />
+      <DummyProjectToBuild Include="$(PublicDummyProjectDir)**\*.csproj" />
+      <DummyProjectToBuild Include="$(InternalDummyProjectDir)**\*.csproj" />
     </ItemGroup>
 
-    <MakeDir Directories="$(OutputPublicDir)" />
-    <Move SourceFiles="@(PublicFilesToMove)" DestinationFolder="$(OutputPublicDir)" />
+    <MSBuild Projects="@(DummyProjectToBuild)"
+             Properties="Configuration=$(Configuration);RestoreSources=$(RestoreSources)"
+             BuildInParallel="false"
+             Targets="Restore" />
+
+    <MSBuild Projects="@(DummyProjectToBuild)"
+             Properties="Configuration=$(Configuration);WarningLevel=0;OutDir=$(OutputDummyDir);ProduceReferenceAssembly=False"
+             BuildInParallel="true"
+             UseResultsCache="true"
+             Targets="Build" />
+
+  </Target>
+
 
-    <Message Text="Moved %(PublicFilesToMove.Filename)%(PublicFilesToMove.Extension) -> $(OutputPublicDir)%(PublicFilesToMove.Filename)%(PublicFilesToMove.Extension)"  Importance="High" />
+  <Target Name="GenerateDummyProject" Inputs="@(ProjectToBuild)" Outputs="%(Filename)" >
+
+    <PropertyGroup>
+      <GeneratedDummyAssembly>$(OutputDummyDir)%(ProjectToBuild.Filename).dll</GeneratedDummyAssembly>
+      <ClonedProjectsDir Condition="'%(ProjectToBuild.Visibility)' == 'Public'" >$(PublicDummyProjectDir)</ClonedProjectsDir>
+      <ClonedProjectsDir Condition="'%(ProjectToBuild.Visibility)' == 'Internal'" >$(InternalDummyProjectDir)</ClonedProjectsDir>
+    </PropertyGroup>
+
+    <Message Text="[GenDummy] %(ProjectToBuild.Filename)" Importance="High" />
+    <Message Text="Directory = %(ProjectToBuild.Directory)" Importance="High" />
+
+    <Exec Command='$(GenDummyCommand) -project %(ProjectToBuild.Filename) -source %(ProjectToBuild.RootDir)%(ProjectToBuild.Directory).. -clonePath $(ClonedProjectsDir)' />
+
+  </Target>
 
+  <Target Name="AfterDummy">
+    <Message Text="Clean Directory" Importance="High" />
+    <RemoveDir Directories="$(PublicDummyProjectDir);$(InternalDummyProjectDir)" />
   </Target>
 
 </Project>