Welcome to mirror list, hosted at ThFree Co, Russian Federation.

premake.lua - github.com/windirstat/premake-4.x-stable.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: afc12bc37090bfa1cf75e6ca070a820841ba2c20 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
project.name = "Premake4"

-- Project options

	addoption("no-tests", "Build without automated tests")


-- Output directories

	project.config["Debug"].bindir = "bin/debug"
	project.config["Release"].bindir = "bin/release"

  
-- Packages

	dopackage("src")


-- Cleanup code

	function doclean(cmd, arg)
		docommand(cmd, arg)
		os.rmdir("bin")
		os.rmdir("doc")
	end


-- Release code

	REPOS    = "https://premake.svn.sourceforge.net/svnroot/premake"
	TRUNK    = "/trunk"
	BRANCHES = "/branches/4.0-alpha/"

	function dorelease(cmd, arg)
		
		if (not arg) then
			error "You must specify a version"
		end

		-------------------------------------------------------------------
		-- Make sure everything is good before I start
		-------------------------------------------------------------------
		print("")
		print("PRE-FLIGHT CHECKLIST")
		print(" * is README up-to-date?")
		print(" * is CHANGELOG up-to-date?")
		print(" * did you test build with GCC?")
		print(" * did you test build with Doxygen?")
		print(" * are 'svn' (all) and '7z' (Windows) available?")
		print("")
		print("Press [Enter] to continue or [^C] to quit.")
		io.stdin:read("*l")

		-------------------------------------------------------------------
		-- Set up environment
		-------------------------------------------------------------------
		local version = arg
		
		os.mkdir("releases")

		local folder  = "premake-"..version
		local trunk   = REPOS..TRUNK
		local branch  = REPOS..BRANCHES..version
		
		-------------------------------------------------------------------
		-- Build and run all automated tests on working copy
		-------------------------------------------------------------------
		print("Building tests on working copy...")
		os.execute("premake --target gnu >releases/release.log")
		result = os.execute("make CONFIG=Release >releases/release.log")
		if (result ~= 0) then
			error("Test build failed; see release.log for details")
		end

		-------------------------------------------------------------------
		-- Look for a release branch in SVN, and create one from trunk if necessary		
		-------------------------------------------------------------------
		print("Checking for release branch...")
		os.chdir("releases")
		result = os.execute(string.format("svn ls %s >release.log 2>&1", branch))
		if (result ~= 0) then
			print("Creating release branch...")
			result = os.execute(string.format('svn copy %s %s -m "Creating release branch for %s" >release.log', trunk, branch, version))
			if (result ~= 0) then
				error("Failed to create release branch at "..branch)
			end
		end

		-------------------------------------------------------------------
		-- Checkout a local copy of the release branch
		-------------------------------------------------------------------
		print("Getting source code from release branch...")
		os.execute(string.format("svn co %s %s >release.log", branch, folder))
		if (not os.fileexists(folder.."/README.txt")) then
			error("Unable to checkout from repository at "..branch)
		end

		-------------------------------------------------------------------
		-- Embed version numbers into the files
		-------------------------------------------------------------------
		-- (embed version #s)
		-- (check into branch)

		-------------------------------------------------------------------
		-- Build the release binary for this platform
		-------------------------------------------------------------------
		print("Building release version...")
		os.chdir(folder)
		os.execute("premake --clean --no-tests --target gnu >../release.log")
		
		if (windows) then
			os.execute("make CONFIG=Release >../release.log")
			os.chdir("bin/release")
			result = os.execute(string.format("7z a -tzip ..\\..\\..\\premake-win32-%s.zip premake4.exe >../release.log", version))
		elseif (macosx) then
			os.execute('TARGET_ARCH="-arch i386 -arch ppc" make CONFIG=Release >../release.log')
			os.chdir("bin/release")
			result = os.execute(string.format("tar czvf ../../../premake-macosx-%s.tar.gz premake4 >../release.log", version))
		else
			os.execute("make CONFIG=Release >../release.log")
			os.chdir("bin/release")
			result = os.execute(string.format("tar czvf ../../../premake-linux-%s.tar.gz bin/release/premake4 >../release.log", version))
		end
		
		if (result ~= 0) then
			error("Failed to build binary package; see release.log for details")
		end

		os.chdir("../../..")
		
		-------------------------------------------------------------------
		-- Build the source code package (MacOSX only)
		-------------------------------------------------------------------
		if (macosx) then
			result = os.execute(string.format("zip -r9 premake-src-%s.zip %s/* >release.log", version, folder))
			if (result ~= 0) then
				error("Failed to build source code package; see release.log for details")
			end
		end
		
		-------------------------------------------------------------------
		-- Clean up
		-------------------------------------------------------------------
		print("Cleaning up...")
		os.rmdir(folder)
		os.remove("release.log")


		-------------------------------------------------------------------
		-- Next steps
		-------------------------------------------------------------------
		if (windows) then
			print("DONE - now run release script under Linux")
		elseif (linux) then
			print("DONE - now run release script under Mac OS X")
		else
			print("DONE - really this time")
		end
		
	end