Update scripts to work with the new engine toolchain.

This commit is contained in:
Paul Chote 2019-08-19 18:33:00 +00:00
parent a216dee898
commit 5e1de7189d
17 changed files with 316 additions and 337 deletions

View File

@ -1,16 +1,15 @@
# Travis-CI Build for OpenRAModSDK # Travis-CI Build for OpenRAModSDK
# see travis-ci.org for details # see travis-ci.org for details
dist: xenial
language: csharp language: csharp
mono: 4.6.1 mono: 5.20.1
sudo: false
addons: addons:
apt: apt:
packages: packages:
- dpkg
- liblua5.1-0 - liblua5.1-0
- nsis
- nsis-common
script: script:
- make - make
@ -20,18 +19,23 @@ script:
if [ "${TRAVIS_TEST_PACKAGING}" == "True" ]; then make check-packaging-scripts && ./packaging/package-all.sh test-0 || travis_terminate 1; fi if [ "${TRAVIS_TEST_PACKAGING}" == "True" ]; then make check-packaging-scripts && ./packaging/package-all.sh test-0 || travis_terminate 1; fi
before_deploy: before_deploy:
- wget http://mirrors.kernel.org/ubuntu/pool/universe/n/nsis/nsis-common_3.03-2_all.deb
- wget http://mirrors.kernel.org/ubuntu/pool/universe/n/nsis/nsis_3.03-2_amd64.deb
- sudo dpkg -i nsis-common_3.03-2_all.deb
- sudo dpkg -i nsis_3.03-2_amd64.deb
- mkdir build - mkdir build
- make check-packaging-scripts && cd build && ../packaging/package-all.sh ${TRAVIS_TAG} ${PWD} && cd .. - make check-packaging-scripts && cd build && ../packaging/package-all.sh ${TRAVIS_TAG} ${PWD} && cd ..
- . mod.config
deploy: deploy:
provider: releases provider: releases
api_key: ${GH_DEPLOY_API_KEY} api_key: ${GH_DEPLOY_API_KEY}
file: file:
- build/${PACKAGING_INSTALLER_NAME}-${TRAVIS_TAG}.exe - build/${PACKAGING_INSTALLER_NAME}-${TRAVIS_TAG}-x86.exe
- build/${PACKAGING_INSTALLER_NAME}-${TRAVIS_TAG}-x64.exe
- build/${PACKAGING_INSTALLER_NAME}-${TRAVIS_TAG}-x86-winportable.zip
- build/${PACKAGING_INSTALLER_NAME}-${TRAVIS_TAG}-x64-winportable.zip
- build/${PACKAGING_INSTALLER_NAME}-${TRAVIS_TAG}-macOS.zip - build/${PACKAGING_INSTALLER_NAME}-${TRAVIS_TAG}-macOS.zip
- build/${PACKAGING_INSTALLER_NAME}-${TRAVIS_TAG}-winportable.zip - build/${PACKAGING_INSTALLER_NAME}-${TRAVIS_TAG}-x86_64.AppImage
- build/${PACKAGING_INSTALLER_NAME}-${TRAVIS_TAG}.AppImage
skip_cleanup: true skip_cleanup: true
on: on:
tags: true tags: true

View File

@ -9,21 +9,28 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "OpenRA.Mods.Common", "engin
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86 Debug|Any CPU = Debug|Any CPU
Release|x86 = Release|x86 Release|Any CPU = Release|Any CPU
Release-x86|Any CPU = Release-x86|Any CPU
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4E5B38F7-4E99-4C92-BB39-9100CC7F3829}.Debug|x86.ActiveCfg = Debug|x86 {4E5B38F7-4E99-4C92-BB39-9100CC7F3829}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{4E5B38F7-4E99-4C92-BB39-9100CC7F3829}.Debug|x86.Build.0 = Debug|x86 {4E5B38F7-4E99-4C92-BB39-9100CC7F3829}.Debug|Any CPU.Build.0 = Debug|Any CPU
{4E5B38F7-4E99-4C92-BB39-9100CC7F3829}.Release|x86.ActiveCfg = Release|x86 {4E5B38F7-4E99-4C92-BB39-9100CC7F3829}.Release|Any CPU.ActiveCfg = Release|Any CPU
{4E5B38F7-4E99-4C92-BB39-9100CC7F3829}.Release|x86.Build.0 = Release|x86 {4E5B38F7-4E99-4C92-BB39-9100CC7F3829}.Release|Any CPU.Build.0 = Release|Any CPU
{0DFB103F-2962-400F-8C6D-E2C28CCBA633}.Debug|x86.ActiveCfg = Debug|x86 {4E5B38F7-4E99-4C92-BB39-9100CC7F3829}.Release-x86|Any CPU.ActiveCfg = Release|Any CPU
{0DFB103F-2962-400F-8C6D-E2C28CCBA633}.Debug|x86.Build.0 = Debug|x86 {4E5B38F7-4E99-4C92-BB39-9100CC7F3829}.Release-x86|Any CPU.Build.0 = Release|Any CPU
{0DFB103F-2962-400F-8C6D-E2C28CCBA633}.Release|x86.ActiveCfg = Release|x86 {0DFB103F-2962-400F-8C6D-E2C28CCBA633}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{0DFB103F-2962-400F-8C6D-E2C28CCBA633}.Release|x86.Build.0 = Release|x86 {0DFB103F-2962-400F-8C6D-E2C28CCBA633}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FE6C8CC0-2F07-442A-B29F-17617B3B7FC6}.Debug|x86.ActiveCfg = Debug|x86 {0DFB103F-2962-400F-8C6D-E2C28CCBA633}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FE6C8CC0-2F07-442A-B29F-17617B3B7FC6}.Debug|x86.Build.0 = Debug|x86 {0DFB103F-2962-400F-8C6D-E2C28CCBA633}.Release|Any CPU.Build.0 = Release|Any CPU
{FE6C8CC0-2F07-442A-B29F-17617B3B7FC6}.Release|x86.ActiveCfg = Release|x86 {0DFB103F-2962-400F-8C6D-E2C28CCBA633}.Release-x86|Any CPU.ActiveCfg = Release-x86|Any CPU
{FE6C8CC0-2F07-442A-B29F-17617B3B7FC6}.Release|x86.Build.0 = Release|x86 {0DFB103F-2962-400F-8C6D-E2C28CCBA633}.Release-x86|Any CPU.Build.0 = Release-x86|Any CPU
{FE6C8CC0-2F07-442A-B29F-17617B3B7FC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
{FE6C8CC0-2F07-442A-B29F-17617B3B7FC6}.Debug|Any CPU.Build.0 = Debug|Any CPU
{FE6C8CC0-2F07-442A-B29F-17617B3B7FC6}.Release|Any CPU.ActiveCfg = Release|Any CPU
{FE6C8CC0-2F07-442A-B29F-17617B3B7FC6}.Release|Any CPU.Build.0 = Release|Any CPU
{FE6C8CC0-2F07-442A-B29F-17617B3B7FC6}.Release-x86|Any CPU.ActiveCfg = Release|Any CPU
{FE6C8CC0-2F07-442A-B29F-17617B3B7FC6}.Release-x86|Any CPU.Build.0 = Release|Any CPU
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal

View File

@ -21,19 +21,26 @@
# make check-packaging-scripts # make check-packaging-scripts
.PHONY: utility stylecheck build clean engine version check check-scripts check-sdk-scripts check-packaging-scripts check-variables .PHONY: utility stylecheck build clean engine version check check-scripts check-sdk-scripts check-packaging-scripts check-variables
.DEFAULT_GOAL := build .DEFAULT_GOAL := all
VERSION = $(shell git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null || echo git-`git rev-parse --short HEAD`) VERSION = $(shell git name-rev --name-only --tags --no-undefined HEAD 2>/dev/null || echo git-`git rev-parse --short HEAD`)
MOD_ID = $(shell cat user.config mod.config 2> /dev/null | awk -F= '/MOD_ID/ { print $$2; exit }') MOD_ID = $(shell cat user.config mod.config 2> /dev/null | awk -F= '/MOD_ID/ { print $$2; exit }')
ENGINE_DIRECTORY = $(shell cat user.config mod.config 2> /dev/null | awk -F= '/ENGINE_DIRECTORY/ { print $$2; exit }') ENGINE_DIRECTORY = $(shell cat user.config mod.config 2> /dev/null | awk -F= '/ENGINE_DIRECTORY/ { print $$2; exit }')
MOD_SEARCH_PATHS = "$(shell python -c "import os; print(os.path.realpath('.'))")/mods,./mods" MOD_SEARCH_PATHS = "$(shell python -c "import os; print(os.path.realpath('.'))")/mods,./mods"
MANIFEST_PATH = "mods/$(MOD_ID)/mod.yaml" WHITELISTED_OPENRA_ASSEMBLIES = "$(shell cat user.config mod.config 2> /dev/null | awk -F= '/WHITELISTED_OPENRA_ASSEMBLIES/ { print $$2; exit }')"
WHITELISTED_THIRDPARTY_ASSEMBLIES = "$(shell cat user.config mod.config 2> /dev/null | awk -F= '/WHITELISTED_THIRDPARTY_ASSEMBLIES/ { print $$2; exit }')"
WHITELISTED_CORE_ASSEMBLIES = "$(shell cat user.config mod.config 2> /dev/null | awk -F= '/WHITELISTED_CORE_ASSEMBLIES/ { print $$2; exit }')"
WHITELISTED_MOD_ASSEMBLIES = "$(shell cat user.config mod.config 2> /dev/null | awk -F= '/WHITELISTED_MOD_ASSEMBLIES/ { print $$2; exit }')"
HAS_MSBUILD = $(shell command -v msbuild 2> /dev/null) MANIFEST_PATH = "mods/$(MOD_ID)/mod.yaml"
HAS_LUAC = $(shell command -v luac 2> /dev/null) HAS_LUAC = $(shell command -v luac 2> /dev/null)
LUA_FILES = $(shell find mods/*/maps/* -iname '*.lua') LUA_FILES = $(shell find mods/*/maps/* -iname '*.lua' 2> /dev/null)
PROJECT_DIRS = $(shell dirname $$(find . -iname "*.csproj" -not -path "$(ENGINE_DIRECTORY)/*"))
MSBUILD = msbuild -verbosity:m -nologo
# Enable 32 bit builds while generating the windows installer
WIN32 = false
check-sdk-scripts: check-sdk-scripts:
@awk '/\r$$/ { exit(1); }' mod.config || (printf "Invalid mod.config format: file must be saved using unix-style (CR, not CRLF) line endings.\n"; exit 1) @awk '/\r$$/ { exit(1); }' mod.config || (printf "Invalid mod.config format: file must be saved using unix-style (CR, not CRLF) line endings.\n"; exit 1)
@ -94,29 +101,32 @@ check-variables:
exit 1; \ exit 1; \
fi fi
engine-dependencies: check-variables check-sdk-scripts
@./fetch-engine.sh || (printf "Unable to continue without engine files\n"; exit 1)
@cd $(ENGINE_DIRECTORY) && make dependencies WIN32=$(WIN32)
engine: check-variables check-sdk-scripts engine: check-variables check-sdk-scripts
@./fetch-engine.sh || (printf "Unable to continue without engine files\n"; exit 1) @./fetch-engine.sh || (printf "Unable to continue without engine files\n"; exit 1)
@cd $(ENGINE_DIRECTORY) && make core @cd $(ENGINE_DIRECTORY) && make core WIN32=$(WIN32)
utility: engine utility: engine-dependencies engine
@test -f "$(ENGINE_DIRECTORY)/OpenRA.Utility.exe" || (printf "OpenRA.Utility.exe not found!\n"; exit 1) @test -f "$(ENGINE_DIRECTORY)/OpenRA.Utility.exe" || (printf "OpenRA.Utility.exe not found!\n"; exit 1)
stylecheck: engine core:
@test -f "$(ENGINE_DIRECTORY)/OpenRA.StyleCheck.exe" || (cd $(ENGINE_DIRECTORY) && make stylecheck) @command -v $(MSBUILD) >/dev/null || (echo "OpenRA requires the '$(MSBUILD)' tool provided by Mono >= 5.4."; exit 1)
@find . -maxdepth 1 -name '*.sln' -exec $(MSBUILD) -t:restore \;
build: engine ifeq ($(WIN32), $(filter $(WIN32),true yes y on 1))
ifeq ("$(HAS_MSBUILD)","") @find . -maxdepth 1 -name '*.sln' -exec $(MSBUILD) -t:build -p:Configuration="Release-x86" \;
@find . -maxdepth 1 -name '*.sln' -exec xbuild /nologo /verbosity:quiet /p:TreatWarningsAsErrors=true \;
else else
@find . -maxdepth 1 -name '*.sln' -exec msbuild /t:Rebuild /nr:false \; @$(MSBUILD) -t:build -p:Configuration=Release
@find . -maxdepth 1 -name '*.sln' -exec $(MSBUILD) -t:build -p:Configuration=Release \;
endif endif
all: engine-dependencies engine core
clean: engine clean: engine
ifeq ("$(HAS_MSBUILD)","") @command -v $(MSBUILD) >/dev/null || (echo "OpenRA requires the '$(MSBUILD)' tool provided by Mono >= 5.4."; exit 1)
@find . -maxdepth 1 -name '*.sln' -exec xbuild /nologo /verbosity:quiet /p:TreatWarningsAsErrors=true /t:Clean \; @find . -maxdepth 1 -name '*.sln' -exec $(MSBUILD) -t:clean \;
else
@find . -maxdepth 1 -name '*.sln' -exec msbuild /t:Clean /nr:false \;
endif
@cd $(ENGINE_DIRECTORY) && make clean @cd $(ENGINE_DIRECTORY) && make clean
@printf "The engine has been cleaned.\n" @printf "The engine has been cleaned.\n"
@ -136,13 +146,15 @@ ifneq ("$(LUA_FILES)","")
@luac -p $(LUA_FILES) @luac -p $(LUA_FILES)
endif endif
check: utility stylecheck check: utility
@echo "Compiling in debug mode..."
@$(MSBUILD) -t:build -p:Configuration=Debug
@echo "Checking runtime assemblies..."
@MOD_SEARCH_PATHS="$(MOD_SEARCH_PATHS)" mono --debug "$(ENGINE_DIRECTORY)/OpenRA.Utility.exe" $(MOD_ID) --check-runtime-assemblies $(WHITELISTED_OPENRA_ASSEMBLIES) $(WHITELISTED_THIRDPARTY_ASSEMBLIES) $(WHITELISTED_CORE_ASSEMBLIES) $(WHITELISTED_MOD_ASSEMBLIES)
@echo "Checking for explicit interface violations..." @echo "Checking for explicit interface violations..."
@MOD_SEARCH_PATHS="$(MOD_SEARCH_PATHS)" mono --debug "$(ENGINE_DIRECTORY)/OpenRA.Utility.exe" $(MOD_ID) --check-explicit-interfaces @MOD_SEARCH_PATHS="$(MOD_SEARCH_PATHS)" mono --debug "$(ENGINE_DIRECTORY)/OpenRA.Utility.exe" $(MOD_ID) --check-explicit-interfaces
@for i in $(PROJECT_DIRS) ; do \ @echo "Checking for incorrect conditional trait interface overrides..."
echo "Checking for code style violations in $${i}...";\ @MOD_SEARCH_PATHS="$(MOD_SEARCH_PATHS)" mono --debug "$(ENGINE_DIRECTORY)/OpenRA.Utility.exe" $(MOD_ID) --check-conditional-trait-interface-overrides
mono --debug "$(ENGINE_DIRECTORY)/OpenRA.StyleCheck.exe" $${i};\
done
test: utility test: utility
@echo "Testing $(MOD_ID) mod MiniYAML..." @echo "Testing $(MOD_ID) mod MiniYAML..."

View File

@ -1,77 +1,43 @@
<?xml version="1.0" encoding="utf-8"?> <Project Sdk="Microsoft.NET.Sdk">
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup> <PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> <TargetFramework>net461</TargetFramework>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProjectGuid>{4E5B38F7-4E99-4C92-BB39-9100CC7F3829}</ProjectGuid>
<OutputType>Library</OutputType>
<RootNamespace>OpenRA.Mods.Example</RootNamespace>
<AssemblyName>OpenRA.Mods.Example</AssemblyName>
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<OutputPath>bin\Debug\</OutputPath>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<Optimize>true</Optimize> <Optimize>true</Optimize>
<LangVersion>5</LangVersion>
<DebugSymbols>true</DebugSymbols>
<TreatWarningsAsErrors>true</TreatWarningsAsErrors>
<OutputPath>../mods/example</OutputPath>
<AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
<PlatformTarget>AnyCPU</PlatformTarget>
<EnableDefaultCompileItems>false</EnableDefaultCompileItems>
<CodeAnalysisRuleSet>../engine/OpenRA.ruleset</CodeAnalysisRuleSet>
</PropertyGroup> </PropertyGroup>
<ItemGroup> <ItemGroup>
<Reference Include="System" /> <!-- Work around an issue where Rider does not detect files in the project root using the default glob -->
<Reference Include="System.Core" /> <Compile Include="**/*.cs" Exclude="$(DefaultItemExcludes)" />
<Reference Include="System.Drawing" />
<Reference Include="Eluant">
<HintPath>..\engine\thirdparty\download\Eluant.dll</HintPath>
<Private>False</Private>
</Reference>
</ItemGroup> </ItemGroup>
<PropertyGroup Condition="'$(Configuration)'=='Debug'">
<DefineConstants>DEBUG;TRACE</DefineConstants>
<Optimize>false</Optimize>
</PropertyGroup>
<ItemGroup> <ItemGroup>
<Compile Include="Widgets\Logic\TemplateMenuLogic.cs" /> <Reference Include="Eluant">
</ItemGroup> <HintPath>../engine/thirdparty/download/Eluant.dll</HintPath>
<ItemGroup> <Private>False</Private>
<Folder Include="Widgets\" /> </Reference>
<Folder Include="Widgets\Logic\" /> <ProjectReference Include="../engine/OpenRA.Game/OpenRA.Game.csproj">
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\engine\OpenRA.Mods.Common\OpenRA.Mods.Common.csproj">
<Project>{FE6C8CC0-2F07-442A-B29F-17617B3B7FC6}</Project>
<Name>OpenRA.Mods.Common</Name>
<Private>False</Private> <Private>False</Private>
</ProjectReference> </ProjectReference>
<ProjectReference Include="..\engine\OpenRA.Game\OpenRA.Game.csproj"> <ProjectReference Include="../engine/OpenRA.Mods.Common/OpenRA.Mods.Common.csproj">
<Project>{0DFB103F-2962-400F-8C6D-E2C28CCBA633}</Project>
<Name>OpenRA.Game</Name>
<Private>False</Private> <Private>False</Private>
</ProjectReference> </ProjectReference>
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118" />
<AdditionalFiles Include="../engine/stylecop.json" />
</ItemGroup> </ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Target Name="DisableAnalyzers" BeforeTargets="CoreCompile" Condition="'$(Configuration)'=='Release'">
<Target Name="AfterBuild"> <!-- Disable code style analysis on Release builds to improve compile-time performance -->
<MakeDir Directories="$(SolutionDir)mods/example/" /> <ItemGroup Condition="'$(Configuration)'=='Release'">
<Copy SourceFiles="$(TargetPath)" DestinationFolder="$(SolutionDir)mods/example/" /> <Analyzer Remove="@(Analyzer)" />
<!-- </ItemGroup>
We need to copy OpenRA.Mods.Cnc.pdb (not `.dll.pdb`). This is only necessary on Windows.
Mono outputs a `.dll.mdb` so we can just append `.mdb` directly.
-->
<Copy SourceFiles="$(TargetDir)$(TargetName).pdb" DestinationFolder="$(SolutionDir)mods/example/" Condition="Exists('$(TargetDir)$(TargetName).pdb')" />
<Copy SourceFiles="$(TargetPath).mdb" DestinationFolder="$(SolutionDir)mods/example/" Condition="Exists('$(TargetPath).mdb')" />
<!-- Uncomment these lines when debugging or adding to this target
<Message Text="DEBUG OS: $(OS)"/>
<Message Text="DEBUG SolutionDir: $(SolutionDir)"/>
<Message Text="DEBUG TargetPath: $(TargetPath)"/>
<Message Text="DEBUG TargetDir: $(TargetDir)"/>
<Message Text="DEBUG TargetName: $(TargetName)"/>
-->
</Target> </Target>
</Project> </Project>

150
make.ps1
View File

@ -5,28 +5,19 @@
############################################################### ###############################################################
function All-Command function All-Command
{ {
If (!(Test-Path "*.sln")) if ((CheckForDotnet) -eq 1)
{ {
return return
} }
$msBuild = FindMSBuild dotnet build /p:Configuration=Release /nologo
$msBuildArguments = "/t:Rebuild /nr:false" if ($lastexitcode -ne 0)
if ($msBuild -eq $null)
{ {
echo "Unable to locate an appropriate version of MSBuild." Write-Host "Build failed. If just the development tools failed to build, try installing Visual Studio. You may also still be able to run the game." -ForegroundColor Red
} }
else else
{ {
$proc = Start-Process $msBuild $msBuildArguments -NoNewWindow -PassThru -Wait Write-Host "Build succeeded." -ForegroundColor Green
if ($proc.ExitCode -ne 0)
{
echo "Build failed. If just the development tools failed to build, try installing Visual Studio. You may also still be able to run the game."
}
else
{
echo "Build succeeded."
}
} }
} }
@ -37,25 +28,35 @@ function Clean-Command
return return
} }
$msBuild = FindMSBuild if ((CheckForDotnet) -eq 1)
$msBuildArguments = "/t:Clean /nr:false"
if ($msBuild -eq $null)
{ {
echo "Unable to locate an appropriate version of MSBuild." return
} }
else
dotnet clean /nologo
rm *.dll
rm mods/*/*.dll
rm *.dll.config
rm *.pdb
rm mods/*/*.pdb
rm *.exe
rm ./*/bin -r
rm ./*/obj -r
rm $env:ENGINE_DIRECTORY/*.dll
rm $env:ENGINE_DIRECTORY/mods/*/*.dll
rm env:ENGINE_DIRECTORY/*.config
rm env:ENGINE_DIRECTORY/*.pdb
rm mods/*/*.pdb
rm env:ENGINE_DIRECTORY/*.exe
rm env:ENGINE_DIRECTORY/*/bin -r
rm env:ENGINE_DIRECTORY/*/obj -r
if (Test-Path env:ENGINE_DIRECTORY/thirdparty/download/)
{ {
$proc = Start-Process $msBuild $msBuildArguments -NoNewWindow -PassThru -Wait rmdir env:ENGINE_DIRECTORY/thirdparty/download -Recurse -Force
rm *.dll
rm *.dll.config
rm mods/*/*.dll
rm *.pdb
rm mods/*/*.pdb
rm *.exe
rm ./*/bin -r
rm ./*/obj -r
echo "Clean complete."
} }
Write-Host "Clean complete." -ForegroundColor Green
} }
function Version-Command function Version-Command
@ -77,12 +78,12 @@ function Version-Command
} }
else else
{ {
echo "Not a git repository. The version will remain unchanged." Write-Host "Not a git repository. The version will remain unchanged." -ForegroundColor Red
} }
} }
else else
{ {
echo "Unable to locate Git. The version will remain unchanged." Write-Host "Unable to locate Git. The version will remain unchanged." -ForegroundColor Red
} }
if ($version -ne $null) if ($version -ne $null)
@ -99,43 +100,37 @@ function Version-Command
$replacement = (gc $mod) -Replace ".*: User", ("{0}/{1}: User" -f $prefix, $version) $replacement = (gc $mod) -Replace ".*: User", ("{0}/{1}: User" -f $prefix, $version)
sc $mod $replacement sc $mod $replacement
echo ("Version strings set to '{0}'." -f $version) Write-Host ("Version strings set to '{0}'." -f $version)
} }
} }
function Test-Command function Test-Command
{ {
if (Test-Path $utilityPath) if ((CheckForUtility) -eq 1)
{ {
echo "Testing $modID mod MiniYAML" return
Invoke-Expression "$utilityPath $modID --check-yaml"
}
else
{
UtilityNotFound
} }
Write-Host "Testing $modID mod MiniYAML..." -ForegroundColor Cyan
Invoke-Expression "$utilityPath $modID --check-yaml"
} }
function Check-Command function Check-Command
{ {
if (Test-Path $utilityPath) Write-Host "Compiling in debug configuration..." -ForegroundColor Cyan
dotnet build /p:Configuration=Debug /nologo
if ($lastexitcode -ne 0)
{ {
echo "Checking for explicit interface violations..." Write-Host "Build failed." -ForegroundColor Red
Invoke-Expression "$utilityPath $modID --check-explicit-interfaces"
}
else
{
UtilityNotFound
} }
if (Test-Path $styleCheckPath) if ((CheckForUtility) -eq 0)
{ {
echo "Checking for code style violations in OpenRA.Mods.$modID..." Write-Host "Checking for explicit interface violations..." -ForegroundColor Cyan
Invoke-Expression "$styleCheckPath OpenRA.Mods.$modID" Invoke-Expression "$utilityPath $modID --check-explicit-interfaces"
}
else Write-Host "Checking for incorrect conditional trait interface overrides..." -ForegroundColor Cyan
{ Invoke-Expression "$utilityPath $modID --check-conditional-trait-interface-overrides"
echo "$styleCheckPath could not be found. Build the project first using the `"all`" command."
} }
} }
@ -143,54 +138,53 @@ function Check-Scripts-Command
{ {
if ((Get-Command "luac.exe" -ErrorAction SilentlyContinue) -ne $null) if ((Get-Command "luac.exe" -ErrorAction SilentlyContinue) -ne $null)
{ {
echo "Testing Lua scripts..." Write-Host "Testing Lua scripts..." -ForegroundColor Cyan
foreach ($script in ls "mods/*/maps/*/*.lua") foreach ($script in ls "mods/*/maps/*/*.lua")
{ {
luac -p $script luac -p $script
} }
echo "Check completed!" Write-Host "Check completed!" -ForegroundColor Green
} }
else else
{ {
echo "luac.exe could not be found. Please install Lua." Write-Host "luac.exe could not be found. Please install Lua." -ForegroundColor Red
} }
} }
function Docs-Command function Docs-Command
{ {
if (Test-Path $utilityPath) if ((CheckForUtility) -eq 1)
{ {
Invoke-Expression "$utilityPath $modID --docs | Out-File -Encoding 'UTF8' DOCUMENTATION.md" return
Invoke-Expression "$utilityPath $modID --lua-docs | Out-File -Encoding 'UTF8' Lua-API.md"
echo "Docs generated."
}
else
{
UtilityNotFound
} }
./make.ps1 version
Invoke-Expression "$utilityPath $modID --docs | Out-File -Encoding 'UTF8' DOCUMENTATION.md"
Invoke-Expression "$utilityPath $modID --weapon-docs | Out-File -Encoding "UTF8" WEAPONS.md"
Invoke-Expression "$utilityPath $modID --lua-docs | Out-File -Encoding 'UTF8' Lua-API.md"
echo "Docs generated." -ForegroundColor Green
} }
function FindMSBuild function CheckForUtility
{ {
$key = "HKLM:\SOFTWARE\Microsoft\MSBuild\ToolsVersions\4.0" if (Test-Path OpenRA.Utility.exe)
$property = Get-ItemProperty $key -ErrorAction SilentlyContinue
if ($property -eq $null -or $property.MSBuildToolsPath -eq $null)
{ {
return $null return 0
} }
$path = Join-Path $property.MSBuildToolsPath -ChildPath "MSBuild.exe" Write-Host "OpenRA.Utility.exe could not be found. Build the project first using the `"all`" command." -ForegroundColor Red
if (Test-Path $path) return 1
{
return $path
}
return $null
} }
function UtilityNotFound function CheckForDotnet
{ {
echo "$utilityPath could not be found. Build the project first using the `"all`" command." if ((Get-Command "dotnet" -ErrorAction SilentlyContinue) -eq $null)
{
Write-Host "The 'dotnet' tool is required to compile OpenRA. Please install the .NET Core SDK or Visual Studio and try again. https://dotnet.microsoft.com/download" -ForegroundColor Red
return 1
}
return 0
} }
function WaitForInput function WaitForInput

View File

@ -9,7 +9,10 @@
MOD_ID="example" MOD_ID="example"
# The OpenRA engine version to use for this project. # The OpenRA engine version to use for this project.
ENGINE_VERSION="release-20190314" ENGINE_VERSION="playtest-20190825"
# .dll filenames compiled by the mod solution for use by the runtime assembly check
WHITELISTED_MOD_ASSEMBLIES="OpenRA.Mods.Example.dll"
############################################################################## ##############################################################################
# Continuous Integration # Continuous Integration
@ -65,7 +68,7 @@ PACKAGING_FAQ_URL="http://wiki.openra.net/FAQ"
PACKAGING_AUTHORS="Example Mod authors" PACKAGING_AUTHORS="Example Mod authors"
# The git tag to use for the macOS Launcher files. # The git tag to use for the macOS Launcher files.
PACKAGING_OSX_LAUNCHER_TAG="osx-launcher-20171118" PACKAGING_OSX_LAUNCHER_TAG="osx-launcher-20190506"
# Filename to use for the launcher executable on Windows. # Filename to use for the launcher executable on Windows.
PACKAGING_WINDOWS_LAUNCHER_NAME="ExampleMod" PACKAGING_WINDOWS_LAUNCHER_NAME="ExampleMod"
@ -81,7 +84,7 @@ PACKAGING_WINDOWS_REGISTRY_KEY="OpenRAExampleMod"
PACKAGING_WINDOWS_LICENSE_FILE="./COPYING" PACKAGING_WINDOWS_LICENSE_FILE="./COPYING"
# The git tag to use for the AppImage dependencies. # The git tag to use for the AppImage dependencies.
PACKAGING_APPIMAGE_DEPENDENCIES_TAG="20180723" PACKAGING_APPIMAGE_DEPENDENCIES_TAG="20190506"
# Space delimited list of additional files/directories to copy from the engine directory # Space delimited list of additional files/directories to copy from the engine directory
# when packaging your mod. e.g. "./mods/modcontent" or "./mods/d2k/OpenRA.Mods.D2k.dll" # when packaging your mod. e.g. "./mods/modcontent" or "./mods/d2k/OpenRA.Mods.D2k.dll"
@ -121,3 +124,14 @@ PACKAGING_APPIMAGE_DEPENDENCIES_SOURCE="https://github.com/OpenRA/AppImageSuppor
# Temporary file name used when downloading the OpenRA AppImage dependencies. # Temporary file name used when downloading the OpenRA AppImage dependencies.
PACKAGING_APPIMAGE_DEPENDENCIES_TEMP_ARCHIVE_NAME="libs.tar.bz2" PACKAGING_APPIMAGE_DEPENDENCIES_TEMP_ARCHIVE_NAME="libs.tar.bz2"
# List of .NET assemblies that we can guarantee exist
# OpenRA.Game.dll is a harmless false positive that we can ignore
WHITELISTED_OPENRA_ASSEMBLIES="OpenRA.Game.exe OpenRA.Utility.exe OpenRA.Platforms.Default.dll OpenRA.Mods.Common.dll OpenRA.Game.dll"
# These are explicitly shipped alongside our core files by the packaging script
WHITELISTED_THIRDPARTY_ASSEMBLIES="ICSharpCode.SharpZipLib.dll FuzzyLogicLibrary.dll MaxMind.Db.dll Eluant.dll rix0rrr.BeaconLib.dll Open.Nat.dll SDL2-CS.dll OpenAL-CS.dll"
# These are shipped in our custom minimal mono runtime and also available in the full system-installed .NET/mono stack
# This list *must* be kept in sync with the files packaged by the AppImageSupport and OpenRALauncherOSX repositories
WHITELISTED_CORE_ASSEMBLIES="mscorlib.dll System.dll System.Configuration.dll System.Core.dll System.Numerics.dll System.Security.dll System.Xml.dll Mono.Security.dll"

View File

@ -53,7 +53,8 @@ ChromeMetrics:
Fonts: Fonts:
Bold: Bold:
Font: common|FreeSansBold.ttf Font: common|FreeSansBold.ttf
Size:14 Size: 14
Ascender: 11
MapGrid: MapGrid:
TileSize: 32, 32 TileSize: 32, 32

View File

@ -15,13 +15,13 @@ World:
Filename: template.pal Filename: template.pal
CursorPalette: true CursorPalette: true
ShadowIndex: ShadowIndex:
Selection:
DummyActor: DummyActor:
BodyOrientation: BodyOrientation:
HitShape: HitShape:
AlwaysVisible: AlwaysVisible:
Player: Player:
AlwaysVisible: AlwaysVisible:
TechTree: TechTree:

View File

@ -75,8 +75,14 @@ else
fi fi
pushd "${ENGINE_DIRECTORY}" > /dev/null pushd "${ENGINE_DIRECTORY}" > /dev/null
make linux-dependencies make clean
make core SDK="-sdk:4.5"
# linux-dependencies target will trigger the lua detection script, which we don't want during packaging
make cli-dependencies geoip-dependencies
sed "s/@LIBLUA51@/liblua5.1.so.0/" thirdparty/Eluant.dll.config.in > Eluant.dll.config
make core
make version VERSION="${ENGINE_VERSION}"
make install-engine prefix="usr" DESTDIR="${BUILTDIR}/" make install-engine prefix="usr" DESTDIR="${BUILTDIR}/"
make install-common-mod-files prefix="usr" DESTDIR="${BUILTDIR}/" make install-common-mod-files prefix="usr" DESTDIR="${BUILTDIR}/"
@ -86,6 +92,11 @@ for f in ${PACKAGING_COPY_ENGINE_FILES}; do
done done
popd > /dev/null popd > /dev/null
echo "Building mod files"
make core
cp -Lr mods/* "${BUILTDIR}/usr/lib/openra/mods"
popd > /dev/null popd > /dev/null
# Add native libraries # Add native libraries
@ -97,20 +108,25 @@ else
wget -cq "${PACKAGING_APPIMAGE_DEPENDENCIES_SOURCE}" -O "${PACKAGING_APPIMAGE_DEPENDENCIES_TEMP_ARCHIVE_NAME}" || exit 3 wget -cq "${PACKAGING_APPIMAGE_DEPENDENCIES_SOURCE}" -O "${PACKAGING_APPIMAGE_DEPENDENCIES_TEMP_ARCHIVE_NAME}" || exit 3
wget -cq https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage || exit 3 wget -cq https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage || exit 3
fi fi
tar xf "${PACKAGING_APPIMAGE_DEPENDENCIES_TEMP_ARCHIVE_NAME}" tar xf "${PACKAGING_APPIMAGE_DEPENDENCIES_TEMP_ARCHIVE_NAME}"
chmod a+x appimagetool-x86_64.AppImage chmod a+x appimagetool-x86_64.AppImage
echo "Building AppImage" echo "Building AppImage"
# Add mod files install -d "${BUILTDIR}/usr/bin"
cp -Lr "${TEMPLATE_ROOT}/mods/"* "${BUILTDIR}/usr/lib/openra/mods" install -d "${BUILTDIR}/etc/mono/4.5"
install -d "${BUILTDIR}/usr/lib/mono/4.5"
install -Dm 0755 libSDL2.so "${BUILTDIR}/usr/lib/openra/" install -Dm 0755 usr/bin/mono "${BUILTDIR}/usr/bin/"
install -Dm 0644 include/SDL2-CS.dll.config "${BUILTDIR}/usr/lib/openra/"
install -Dm 0755 libopenal.so "${BUILTDIR}/usr/lib/openra/" install -Dm 0644 /etc/mono/config "${BUILTDIR}/etc/mono/"
install -Dm 0644 include/OpenAL-CS.dll.config "${BUILTDIR}/usr/lib/openra/" install -Dm 0644 /etc/mono/4.5/machine.config "${BUILTDIR}/etc/mono/4.5"
install -Dm 0755 liblua.so "${BUILTDIR}/usr/lib/openra/"
install -Dm 0644 include/Eluant.dll.config "${BUILTDIR}/usr/lib/openra/" for f in $(ls usr/lib/mono/4.5/*.dll usr/lib/mono/4.5/*.exe); do install -Dm 0644 "$f" "${BUILTDIR}/usr/lib/mono/4.5/"; done
for f in $(ls usr/lib/*.so usr/lib/*.so.*); do install -Dm 0755 "$f" "${BUILTDIR}/usr/lib/"; done
rm -rf libs libs.tar.bz2
# Add launcher and icons # Add launcher and icons
sed "s/{MODID}/${MOD_ID}/g" include/AppRun.in | sed "s/{MODNAME}/${PACKAGING_DISPLAY_NAME}/g" > AppRun.temp sed "s/{MODID}/${MOD_ID}/g" include/AppRun.in | sed "s/{MODNAME}/${PACKAGING_DISPLAY_NAME}/g" > AppRun.temp
@ -149,7 +165,7 @@ install -m 0755 include/gtk-dialog.py "${BUILTDIR}/usr/bin/gtk-dialog.py"
# travis-ci doesn't support mounting FUSE filesystems so extract and run the contents manually # travis-ci doesn't support mounting FUSE filesystems so extract and run the contents manually
./appimagetool-x86_64.AppImage --appimage-extract ./appimagetool-x86_64.AppImage --appimage-extract
ARCH=x86_64 ./squashfs-root/AppRun "${BUILTDIR}" "${OUTPUTDIR}/${PACKAGING_INSTALLER_NAME}-${TAG}.AppImage" ARCH=x86_64 ./squashfs-root/AppRun "${BUILTDIR}" "${OUTPUTDIR}/${PACKAGING_INSTALLER_NAME}-${TAG}-x86_64.AppImage"
# Clean up # Clean up
rm -rf openra-mod.temp openra-mod-server.temp openra-mod-utility.temp temp.desktop temp.xml AppRun.temp libSDL2.so libopenal.so liblua.so appimagetool-x86_64.AppImage squashfs-root "${PACKAGING_APPIMAGE_DEPENDENCIES_TEMP_ARCHIVE_NAME}" "${BUILTDIR}" rm -rf openra-mod.temp openra-mod-server.temp openra-mod-utility.temp temp.desktop temp.xml AppRun.temp appimagetool-x86_64.AppImage squashfs-root "${PACKAGING_APPIMAGE_DEPENDENCIES_TEMP_ARCHIVE_NAME}" "${BUILTDIR}"

View File

@ -1,71 +1,23 @@
#!/bin/sh #!/bin/sh
# Make sure the user has a sufficiently recent version of mono on the PATH
MINIMUM_MONO_VERSION="4.2"
prompt_apt_install_mono_complete() {
command -v mono >/dev/null 2>&1 && command -v cert-sync >/dev/null 2>&1 && return 1
command -v apt-cache > /dev/null || return 1
command -v xdg-mime > /dev/null || return 1
command -v xdg-open > /dev/null || return 1
[ ! "$(xdg-mime query default x-scheme-handler/apt)" ] && return 1
apt-cache search --names-only mono-complete | cut -d' ' -f1 | grep "^mono-complete$" > /dev/null || return 1
return 0
}
make_version() {
echo "$1" | tr '.' '\n' | head -n 4 | xargs printf "%03d%03d%03d%03d";
}
mono_missing_or_old() {
command -v mono >/dev/null 2>&1 || return 0
command -v cert-sync >/dev/null 2>&1 || return 0
MONO_VERSION=$(mono --version | head -n1 | cut -d' ' -f5)
[ "$(make_version "${MONO_VERSION}")" -lt "$(make_version "${MINIMUM_MONO_VERSION}")" ] && return 0
return 1
}
HERE="$(dirname "$(readlink -f "${0}")")" HERE="$(dirname "$(readlink -f "${0}")")"
export PATH="${HERE}"/usr/bin/:"${PATH}"
export XDG_DATA_DIRS="${HERE}"/usr/share/:"${XDG_DATA_DIRS}"
# If mono is not installed, and the user has apt-cache, apt-url, # Override runtime paths
# xdg-open, and either zenity or kdialog, then we can prompt to export PATH="${HERE}/usr/bin:${PATH}"
# automatically install the mono-complete package export XDG_DATA_DIRS="${HERE}/usr/share:${XDG_DATA_DIRS}"
if prompt_apt_install_mono_complete; then export DYLD_LIBRARY_PATH="${HERE}/usr/lib:$DYLD_LIBRARY_PATH"
PROMPT_MESSAGE="{MODNAME} requires the Mono runtime.\nWould you like to install it now?" export LD_LIBRARY_PATH="${HERE}/usr/lib:$LD_LIBRARY_PATH"
if command -v zenity > /dev/null; then export MONO_PATH="${HERE}/usr/lib/mono/4.5"
zenity --no-wrap --question --title "{MODNAME}" --text "${PROMPT_MESSAGE}" 2> /dev/null && xdg-open apt://mono-complete && exit 0 export MONO_CFG_DIR="${HERE}/etc"
elif command -v kdialog > /dev/null; then export MONO_CONFIG="${HERE}/etc/mono/config"
kdialog --title "{MODNAME}" --yesno "${PROMPT_MESSAGE}" && xdg-open apt://mono-complete && exit 0
elif "${HERE}/usr/bin/gtk-dialog.py" test > /dev/null; then
"${HERE}/usr/bin/gtk-dialog.py" question --title "{MODNAME}" --text "${PROMPT_MESSAGE}" 2> /dev/null && xdg-open apt://mono-complete && exit 0
fi
fi
if mono_missing_or_old; then # Update/create the mono certificate store to enable https web queries
ERROR_MESSAGE="{MODNAME} requires Mono ${MINIMUM_MONO_VERSION} or greater and the cert-sync utility.\nPlease install Mono using your system package manager." if [ -f "/etc/pki/tls/certs/ca-bundle.crt" ]; then
if command -v zenity > /dev/null; then mono "${HERE}/usr/lib/mono/4.5/cert-sync.exe" --quiet --user /etc/pki/tls/certs/ca-bundle.crt
zenity --no-wrap --error --title "{MODNAME}" --text "${ERROR_MESSAGE}" 2> /dev/null elif [ -f "/etc/ssl/certs/ca-certificates.crt" ]; then
elif command -v kdialog > /dev/null; then mono "${HERE}/usr/lib/mono/4.5/cert-sync.exe" --quiet --user /etc/ssl/certs/ca-certificates.crt
kdialog --title "{MODNAME}" --error "${ERROR_MESSAGE}" else
elif "${HERE}/usr/bin/gtk-dialog.py" test > /dev/null; then echo "WARNING: Unable to sync system certificate store - https requests will fail"
"${HERE}/usr/bin/gtk-dialog.py" error --title "{MODNAME}" --text "${ERROR_MESSAGE}" 2> /dev/null
else
printf "${ERROR_MESSAGE}"
fi
exit 1
fi
# Some distros and self-compiled mono installations don't set up
# the SSL required for http web queries. If we detect that these
# are missing we can try and create a local sync as a fallback.
if [ ! -d "/usr/share/.mono/certs" ] && [ ! -d "${HOME}/.config/.mono/certs" ]; then
if [ -f "/etc/pki/tls/certs/ca-bundle.crt" ]; then
cert-sync --quiet --user /etc/pki/tls/certs/ca-bundle.crt
elif [ -f "/etc/ssl/certs/ca-certificates.crt" ]; then
cert-sync --quiet --user /etc/ssl/certs/ca-certificates.crt
fi
fi fi
# Run the game or server # Run the game or server

View File

@ -1,3 +0,0 @@
<configuration>
<dllmap os="linux" dll="lua51.dll" target="./liblua.so" />
</configuration>

View File

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<dllmap dll="soft_oal.dll" os="linux" target="./libopenal.so"/>
</configuration>

View File

@ -1,4 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<dllmap os="linux" dll="SDL2.dll" target="./libSDL2.so" />
</configuration>

View File

@ -2,4 +2,4 @@
# OpenRA.Utility relies on keeping the original working directory, so don't change directory # OpenRA.Utility relies on keeping the original working directory, so don't change directory
HERE="$(dirname "$(readlink -f "${0}")")" HERE="$(dirname "$(readlink -f "${0}")")"
mono --debug ${HERE}/../lib/openra/OpenRA.Utility.exe {MODID} "$@" mono --debug "${HERE}/../lib/openra/OpenRA.Utility.exe" {MODID} "$@"

View File

@ -68,7 +68,6 @@ rm "${PACKAGING_OSX_LAUNCHER_TEMP_ARCHIVE_NAME}"
modify_plist "{DEV_VERSION}" "${TAG}" "${BUILTDIR}/OpenRA.app/Contents/Info.plist" modify_plist "{DEV_VERSION}" "${TAG}" "${BUILTDIR}/OpenRA.app/Contents/Info.plist"
modify_plist "{FAQ_URL}" "${PACKAGING_FAQ_URL}" "${BUILTDIR}/OpenRA.app/Contents/Info.plist" modify_plist "{FAQ_URL}" "${PACKAGING_FAQ_URL}" "${BUILTDIR}/OpenRA.app/Contents/Info.plist"
echo "Building core files"
pushd ${TEMPLATE_ROOT} > /dev/null pushd ${TEMPLATE_ROOT} > /dev/null
@ -92,8 +91,12 @@ else
fi fi
pushd ${ENGINE_DIRECTORY} > /dev/null pushd ${ENGINE_DIRECTORY} > /dev/null
echo "Building core files"
make clean
make osx-dependencies make osx-dependencies
make core SDK="-sdk:4.5" make core
make version VERSION="${ENGINE_VERSION}"
make install-engine gameinstalldir="/Contents/Resources/" DESTDIR="${BUILTDIR}/OpenRA.app" make install-engine gameinstalldir="/Contents/Resources/" DESTDIR="${BUILTDIR}/OpenRA.app"
make install-common-mod-files gameinstalldir="/Contents/Resources/" DESTDIR="${BUILTDIR}/OpenRA.app" make install-common-mod-files gameinstalldir="/Contents/Resources/" DESTDIR="${BUILTDIR}/OpenRA.app"
@ -103,10 +106,13 @@ for f in ${PACKAGING_COPY_ENGINE_FILES}; do
done done
popd > /dev/null popd > /dev/null
echo "Building mod files"
make core
cp -Lr mods/* "${BUILTDIR}/OpenRA.app/Contents/Resources/mods"
popd > /dev/null popd > /dev/null
# Add mod files
cp -Lr "${TEMPLATE_ROOT}/mods/"* "${BUILTDIR}/OpenRA.app/Contents/Resources/mods"
cp "mod.icns" "${BUILTDIR}/OpenRA.app/Contents/Resources/${MOD_ID}.icns" cp "mod.icns" "${BUILTDIR}/OpenRA.app/Contents/Resources/${MOD_ID}.icns"
pushd "${BUILTDIR}" > /dev/null pushd "${BUILTDIR}" > /dev/null

View File

@ -1,4 +1,4 @@
; Copyright 2007-2015 OpenRA developers (see AUTHORS) ; Copyright 2007-2019 OpenRA developers (see AUTHORS)
; This file is part of OpenRA. ; This file is part of OpenRA.
; ;
; OpenRA is free software: you can redistribute it and/or modify ; OpenRA is free software: you can redistribute it and/or modify
@ -83,7 +83,6 @@ Section "Game" GAME
File "${SRCDIR}\AUTHORS" File "${SRCDIR}\AUTHORS"
File "${SRCDIR}\COPYING" File "${SRCDIR}\COPYING"
File "${SRCDIR}\${MOD_ID}.ico" File "${SRCDIR}\${MOD_ID}.ico"
File "${SRCDIR}\SharpFont.dll"
File "${SRCDIR}\SDL2-CS.dll" File "${SRCDIR}\SDL2-CS.dll"
File "${SRCDIR}\OpenAL-CS.dll" File "${SRCDIR}\OpenAL-CS.dll"
File "${SRCDIR}\global mix database.dat" File "${SRCDIR}\global mix database.dat"
@ -133,15 +132,12 @@ SectionEnd
;*************************** ;***************************
Section "-DotNet" DotNet Section "-DotNet" DotNet
ClearErrors ClearErrors
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Client" "Install" ; https://docs.microsoft.com/en-us/dotnet/framework/migration-guide/how-to-determine-which-versions-are-installed
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" "Release"
IfErrors error 0 IfErrors error 0
IntCmp $0 1 0 error 0 IntCmp $0 394254 done error done
ClearErrors
ReadRegDWORD $0 HKLM "SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full" "Install"
IfErrors error 0
IntCmp $0 1 done error done
error: error:
MessageBox MB_OK ".NET Framework v4.5 or later is required to run OpenRA." MessageBox MB_OK ".NET Framework v4.6.1 or later is required to run OpenRA."
Abort Abort
done: done:
SectionEnd SectionEnd
@ -180,7 +176,6 @@ Function ${UN}Clean
Delete $INSTDIR\ICSharpCode.SharpZipLib.dll Delete $INSTDIR\ICSharpCode.SharpZipLib.dll
Delete $INSTDIR\FuzzyLogicLibrary.dll Delete $INSTDIR\FuzzyLogicLibrary.dll
Delete $INSTDIR\Open.Nat.dll Delete $INSTDIR\Open.Nat.dll
Delete $INSTDIR\SharpFont.dll
Delete $INSTDIR\VERSION Delete $INSTDIR\VERSION
Delete $INSTDIR\AUTHORS Delete $INSTDIR\AUTHORS
Delete $INSTDIR\COPYING Delete $INSTDIR\COPYING

View File

@ -48,8 +48,6 @@ cd "${PACKAGING_DIR}"
LAUNCHER_LIBS="-r:System.dll -r:System.Drawing.dll -r:System.Windows.Forms.dll -r:${BUILTDIR}/OpenRA.Game.exe" LAUNCHER_LIBS="-r:System.dll -r:System.Drawing.dll -r:System.Windows.Forms.dll -r:${BUILTDIR}/OpenRA.Game.exe"
echo "Building core files"
pushd ${TEMPLATE_ROOT} > /dev/null pushd ${TEMPLATE_ROOT} > /dev/null
if [ ! -f "${ENGINE_DIRECTORY}/Makefile" ]; then if [ ! -f "${ENGINE_DIRECTORY}/Makefile" ]; then
@ -71,50 +69,75 @@ else
echo "Mod version ${MOD_VERSION} will remain unchanged."; echo "Mod version ${MOD_VERSION} will remain unchanged.";
fi fi
pushd ${ENGINE_DIRECTORY} > /dev/null
SRC_DIR="$(pwd)"
make windows-dependencies
make core SDK="-sdk:4.5"
make install-engine gameinstalldir="" DESTDIR="${BUILTDIR}"
make install-common-mod-files gameinstalldir="" DESTDIR="${BUILTDIR}"
for f in ${PACKAGING_COPY_ENGINE_FILES}; do
mkdir -p "${BUILTDIR}/$(dirname "${f}")"
cp -r "${f}" "${BUILTDIR}/${f}"
done
popd > /dev/null
popd > /dev/null popd > /dev/null
# Add mod files function build_platform()
cp -Lr "${TEMPLATE_ROOT}/mods/"* "${BUILTDIR}/mods" {
cp "mod.ico" "${BUILTDIR}/${MOD_ID}.ico" if [ "$1" = "x86" ]; then
cp "${SRC_DIR}/OpenRA.Game.exe.config" "${BUILTDIR}" IS_WIN32="WIN32=true"
else
IS_WIN32="WIN32=false"
fi
# We need to set the loadFromRemoteSources flag for the launcher, but only for the "portable" zip package. pushd ${TEMPLATE_ROOT} > /dev/null
# Windows automatically un-trusts executables that are extracted from a downloaded zip file
cp "${SRC_DIR}/OpenRA.Game.exe.config" "${BUILTDIR}/${PACKAGING_WINDOWS_LAUNCHER_NAME}.exe.config"
echo "Compiling Windows launcher" echo "Building core files ($1)"
sed "s|DISPLAY_NAME|${PACKAGING_DISPLAY_NAME}|" "${SRC_DIR}/packaging/windows/WindowsLauncher.cs.in" | sed "s|MOD_ID|${MOD_ID}|" | sed "s|FAQ_URL|${PACKAGING_FAQ_URL}|" > "${BUILTDIR}/WindowsLauncher.cs" pushd ${ENGINE_DIRECTORY} > /dev/null
mcs -sdk:4.5 "${BUILTDIR}/WindowsLauncher.cs" -warn:4 -codepage:utf8 -warnaserror -out:"${BUILTDIR}/${PACKAGING_WINDOWS_LAUNCHER_NAME}.exe" -t:winexe ${LAUNCHER_LIBS} -win32icon:"${BUILTDIR}/${MOD_ID}.ico"
rm "${BUILTDIR}/WindowsLauncher.cs"
mono "${SRC_DIR}/fixheader.exe" "${BUILTDIR}/${PACKAGING_WINDOWS_LAUNCHER_NAME}.exe" > /dev/null
echo "Building Windows setup.exe" SRC_DIR="$(pwd)"
pushd "${PACKAGING_DIR}" > /dev/null
makensis -V2 -DSRCDIR="${BUILTDIR}" -DDEPSDIR="${SRC_DIR}/thirdparty/download/windows" -DTAG="${TAG}" -DMOD_ID="${MOD_ID}" -DPACKAGING_WINDOWS_INSTALL_DIR_NAME="${PACKAGING_WINDOWS_INSTALL_DIR_NAME}" -DPACKAGING_WINDOWS_LAUNCHER_NAME="${PACKAGING_WINDOWS_LAUNCHER_NAME}" -DPACKAGING_DISPLAY_NAME="${PACKAGING_DISPLAY_NAME}" -DPACKAGING_WEBSITE_URL="${PACKAGING_WEBSITE_URL}" -DPACKAGING_AUTHORS="${PACKAGING_AUTHORS}" -DPACKAGING_WINDOWS_REGISTRY_KEY="${PACKAGING_WINDOWS_REGISTRY_KEY}" -DPACKAGING_WINDOWS_LICENSE_FILE="${TEMPLATE_ROOT}/${PACKAGING_WINDOWS_LICENSE_FILE}" buildpackage.nsi
if [ $? -eq 0 ]; then
mv OpenRA.Setup.exe "${OUTPUTDIR}/${PACKAGING_INSTALLER_NAME}-$TAG.exe"
fi
popd > /dev/null
echo "Packaging zip archive" make clean
pushd "${BUILTDIR}" > /dev/null make windows-dependencies "${IS_WIN32}"
find "${SRC_DIR}/thirdparty/download/windows/" -name '*.dll' -exec cp '{}' '.' ';' make core "${IS_WIN32}"
zip "${PACKAGING_INSTALLER_NAME}-${TAG}-winportable.zip" -r -9 * --quiet make version VERSION="${ENGINE_VERSION}"
mv "${PACKAGING_INSTALLER_NAME}-${TAG}-winportable.zip" "${OUTPUTDIR}" make install-engine gameinstalldir="" DESTDIR="${BUILTDIR}"
popd > /dev/null make install-common-mod-files gameinstalldir="" DESTDIR="${BUILTDIR}"
# Cleanup for f in ${PACKAGING_COPY_ENGINE_FILES}; do
rm -rf "${BUILTDIR}" mkdir -p "${BUILTDIR}/$(dirname "${f}")"
cp -r "${f}" "${BUILTDIR}/${f}"
done
popd > /dev/null
echo "Building mod files ($1)"
make core
cp -Lr mods/* "${BUILTDIR}/mods"
popd > /dev/null
cp "mod.ico" "${BUILTDIR}/${MOD_ID}.ico"
cp "${SRC_DIR}/OpenRA.Game.exe.config" "${BUILTDIR}"
# We need to set the loadFromRemoteSources flag for the launcher, but only for the "portable" zip package.
# Windows automatically un-trusts executables that are extracted from a downloaded zip file
cp "${SRC_DIR}/OpenRA.Game.exe.config" "${BUILTDIR}/${PACKAGING_WINDOWS_LAUNCHER_NAME}.exe.config"
echo "Compiling Windows launcher ($1)"
sed "s|DISPLAY_NAME|${PACKAGING_DISPLAY_NAME}|" "${SRC_DIR}/packaging/windows/WindowsLauncher.cs.in" | sed "s|MOD_ID|${MOD_ID}|" | sed "s|FAQ_URL|${PACKAGING_FAQ_URL}|" > "${BUILTDIR}/WindowsLauncher.cs"
csc "${BUILTDIR}/WindowsLauncher.cs" -nologo -warn:4 -warnaserror -platform:"$1" -out:"${BUILTDIR}/${PACKAGING_WINDOWS_LAUNCHER_NAME}.exe" -t:winexe ${LAUNCHER_LIBS} -win32icon:"${BUILTDIR}/${MOD_ID}.ico"
rm "${BUILTDIR}/WindowsLauncher.cs"
mono "${SRC_DIR}/OpenRA.PostProcess.exe" "${BUILTDIR}/${PACKAGING_WINDOWS_LAUNCHER_NAME}.exe" -LAA > /dev/null
echo "Building Windows setup.exe ($1)"
pushd "${PACKAGING_DIR}" > /dev/null
makensis -V2 -DSRCDIR="${BUILTDIR}" -DDEPSDIR="${SRC_DIR}/thirdparty/download/windows" -DTAG="${TAG}" -DMOD_ID="${MOD_ID}" -DPACKAGING_WINDOWS_INSTALL_DIR_NAME="${PACKAGING_WINDOWS_INSTALL_DIR_NAME}" -DPACKAGING_WINDOWS_LAUNCHER_NAME="${PACKAGING_WINDOWS_LAUNCHER_NAME}" -DPACKAGING_DISPLAY_NAME="${PACKAGING_DISPLAY_NAME}" -DPACKAGING_WEBSITE_URL="${PACKAGING_WEBSITE_URL}" -DPACKAGING_AUTHORS="${PACKAGING_AUTHORS}" -DPACKAGING_WINDOWS_REGISTRY_KEY="${PACKAGING_WINDOWS_REGISTRY_KEY}" -DPACKAGING_WINDOWS_LICENSE_FILE="${TEMPLATE_ROOT}/${PACKAGING_WINDOWS_LICENSE_FILE}" buildpackage.nsi
if [ $? -eq 0 ]; then
mv OpenRA.Setup.exe "${OUTPUTDIR}/${PACKAGING_INSTALLER_NAME}-${TAG}-${1}.exe"
fi
popd > /dev/null
echo "Packaging zip archive ($1)"
pushd "${BUILTDIR}" > /dev/null
find "${SRC_DIR}/thirdparty/download/windows/" -name '*.dll' -exec cp '{}' '.' ';'
zip "${PACKAGING_INSTALLER_NAME}-${TAG}-${1}-winportable.zip" -r -9 * --quiet
mv "${PACKAGING_INSTALLER_NAME}-${TAG}-${1}-winportable.zip" "${OUTPUTDIR}"
popd > /dev/null
# Cleanup
rm -rf "${BUILTDIR}"
}
build_platform "x86"
build_platform "x64"