Merge release packaging updates and fixes

This commit is contained in:
Jason Perkins 2015-02-23 17:55:19 -05:00
commit 355b1b850a
10 changed files with 277 additions and 871 deletions

View File

@ -1,658 +1,6 @@
--------
--------------------
5.0 (in progress)
--------
--------------------
* Completely overhauled the platform support; too many changes to list
* Enabled per-project configurations and platforms
* Enabled per-configuration file lists
* Enabled per-configuration toolset selection
* Added custom build rules
* Added support for Visual Studio 2012 (James Whitworth)
* Added token expansion
* Added external() to reference non-Premake generated projects
* Added remove...() API to remove values from list fields
* Folders containing single sub-folder now trimmed from top of source tree
* Added debugformat with C7 support for Visual Studio
* The error message for invalid flags now includes the offending value
* The include() function will now include each file only once
* The include() function can now include specific files
* path.translate() now defaults to Windows-style backslashes
* Added NoWarnings flag for Visual Studio (xpol)
* Added debugcommand for Visual Studio (xpol)
* Bug 1674173: Allow source files to have the same name
* Added forceinclude() to specify forced include files
* Visual Studio C# projects now support architectures
* Visual Studio C# projects now support pre- and post-build commands
* Visual Studio C# projects can now link to external files
* Added NoImplicitLink flag to force explicit linking from Visual Studio
* Decoupled VS2010 smaller type checks (/RTCc) from extra warnings (/W4)
* Added NoRuntimeChecks flag to disable Visual Studio default checks
* Generated Visual Studio GUIDs are now deterministic
* Added support for Visual Studio solution groups
* Added dependson() to specify non-linking dependencies (Alexey Orlov)
* Added startproject() to specify solution startup project
* Added ExcludeFromBuild flag to mark source files as non-buildable
* Added MultiProcessorCompile flag to run multiple compiler processes
* Fixed assembly references for Visual Studio Managed C++ projects
* Improved Xbox 360 support
* Added support for Clang C/C++ compiler
* Added external files and virtual paths for C# projects (James Whitworth)
* Added ReleaseRuntime build flag (Tarmo Pikaro)
* Added Component, Form, and UserControl build actions
* Added usingdirs() to specify C++/CLI additional using directories (João Matos / triton)
* Added support for VS utility projects (Michael Skibbe / tbasnoopy)
* Added ATL support for VS (Michael Skibbe / tbasnoopy)
-------
4.4 (in progress)
-------
* Feature 1590022: Source file filtering and grouping
* Feature 3100379: C# support for Visual Studio 2010
* Feature 1657833: Set working directory for debugging
* Added support for Haiku OS (Yuriy O'Donnell)
* Patch 2963313: Enable setting .NET framework version (Justen Hyde)
* Switched PS3 builds from GCC to SNC
* Ignore NoRTTI flag for Managed C++ projects (Nick Darnell)
* Added host.is64bit
* Added os.getversion
* Patch 3140456: Explicitly specify architecture for VS StaticLib (Brian Mazza)
* Bug 3119793: Fixed ClCompile blocks with vs10 and PCH (Dan Dunham)
* Bug 2920784: Symbol visibility in Xcode3 libraries (burnson2)
* Bug 3133743: Sets ONLY_ACTIVE_ARCH = YES in Xcode debug builds (James Wynn)
* Properly pass return codes back to shell in release builds
* Bug 3135734: Remove WholeProgramOptimization setting in vs10 (doug)
* Bug 3138377: Link dependencies ignored within "SharedLib" configuration
* Bug 3163703: pdb file being set in the wrong section. (hodsondd)
* Bug 3157645: Full path for xcode frameworks
* Bug 3232160: Environment variables are cut off
* Patch 3043933 Allow gmake to use static lib when shared lib of same name exists (Jonathan Derque)
* Bug 3294459: vs10 x86_64 using incorrect debug format for minimal rebuild (learner)
* Bug 3297634: Special characters in directory name Xcode3 (jdale)
* Feature 3100194: English aliases for Optimize flags
* Bug 3308203: Incorrect relative paths for gmake sibling static libraries (Adam)
* Bug 3277343: SM_SERVERR2 is not always defined by default (Martin Ridgers)
* Added os.stat
* Bug 3381149: Path of PCH source file in VS10 not being translated (intyuh)
* Patch 3021550: Add Wii homebrew platform (Pathogen David)
* Patch 3035550: Make/Distcc outputs dependencies to wrong location
* Patch 3138574: NoImportLib ignored in Windows makefiles dependencies (rjmyst3)
* Patch 3367641: Remove warnings in Xcode 4
* Patch 3372345: Gmake action's PCHs don't work with Mingw (Martin Ridgers)
* Patch 3317329: Support vstudio CompileAs for mixed-language projects (xpol)
* Patch 3337372: Improved precompiled header support (Anders Ericsson)
* Patch 3401184: Fix Gmake LDFLAGS generation order (Adam Petrone)
* Patch 3381066: Fix VS2010 project references
* Added debug environment variable support for Visual Studio
* Added debug environment variable support for Codeblocks using gdb
* Bug: Visual Studio 2010 forces x86 when platform is Native
* Patch 3351583: _PREMAKE_COMMAND variable (Konstantin Tokarev)
* Added new global _WORKING_DIR
* Patch 3451928: VS2008 trying to build *.h files in C projects
* Patch 3429777: Support for DragonFly BSD (Joachim de Groot)
* Patch 3445049: Build fix for FreeBSD (Konstantin Tokarev)
* Bug 3121217: Test suite fails on Linux x86_64: os.findlib broken
* Patch 3428348: Add .gitignore file (Konstantin Tokarev)
* Patch 3430158: Reorder LINKCMD for Gmake (rjmyst3)
* Patch 3451212: Fix Visual Studio MFC with StaticRuntime
* Patch 3463020: Add windres environment variable for makefiles (icebreaker)
* Bug 3413866: Incorrect VS200x .csproj relative source paths
* Patch 3111264: Allow path.join() to accept any number of args
* Patch 3353975: Support usage of premake as a library (Konstantin Tokarev)
* Patch 3505903: Fix VC2010 project reference paths (Pavel Czerný)
* Patch 3305599: Add -Wextra to ExtraWarnings (ergosys)
* Patch 3476176: Fix dependencies of precompiled header in makefile (Konstantin Tokarev)
* Patch 3476176: Remove conditionals from makefile compiler assignments (Konstantin Tokarev)
* Pull 1: Fixed path to Info.plist in Xcode projects (Adrien Anselme)
* Patch 3367642: Add support for targetextension property to Xcode
* Patch 3435716: Fix for PS3 config generation in VS2010 (Jake)
* Patch 3441850: Use debug.traceback() as error handler (Konstantin Tokarev)
* Patch 3462994: Make flag values case-insensitive (Konstantin Tokarev)
* Patch 3466877: Removed -flat_namespace from Mac OS X flags (Konstantin Tokarev)
* Pull 25: Add Unix support to os.getversion() (wfgleper)
* Bug 268: Target extension not set properly for Visual Studio 2010
* Allow command line override of makefile flags (Cameron Hart)
* Fix linking to external libraries outside of project folder
* Improve processing of ld.so.conf (Cameron Hart)
* Patch 154: Fix .def file support for VS2010 (Riccardo Ghetta)
* Patch 159: Validate all values passed to options (Moi_ioM)
* Pull 11: Add support for Visual Studio 2012 (Oliver Schneider)
* Bug 171: ImpLib used incorrectly in dependency paths
* Bug 176: Target prefix breaks GCC linking
* Initial support for Visual Studio 2013 (Igor Karatayev)
-------
4.3
-------
* CHANGED LICENSE FROM GPLv2 TO BSD
* Added Visual Studio 2010 C/C++ support (Liam Devine)
* Added Solaris support (Dean Ross-Smith)
* Added deployment and image options for Xbox360 (dvoid)
* Patch 2963313: Enable setting .NET framework version (Justen Hyde)
* Patch 2965229: Fix handling of '+' symbol in file patterns (Rachel Blum)
* Patch 2997449: Print configuration with target (ergosys)
* Patch 2997452: Suppress gmake's "nothing to be done" message (ergosys)
* Patch 3011940: Add support for MFC (JTAnderson)
* Patch 3053959: kind() crashes when called with no arguments (rjmyst3)
* Bug 2997728: Project dependencies should be case-sensitive
* Bug 3056381: Xcode project breaks on special chars
* Bug 3007101: Generating PDB in Release builds is not supported
* Bug 2971841: Gmake escaping of shell variable $(...) is broken
* Fixed handling of icons in Xcode (bitshifter)
* Added imagepath to set Xbox360 image file name (Jarod)
* Patch 3063804: Set CompileAs flag for VS200x C projects (rjmyst3)
* Implemented StaticRuntime flag for Xcode (William Burnson)
* Improved portability of Mac OS X binaries (William Burnson)
* Bug 3035545: The pattern { "./folder/*.c" } matches no files
* Bug 3034222: StaticLib projects ignore linkoptions
* Bug 3020382: GCC PCH not working
* Bug 3016050: {"../Dir/file1.c","../../Dir/file2.c"} breaks Xcode (Stephane)
* Bug 3015312: Makefiles are not quoted correctly
* Bug 3097868: Removes relative paths from vs2010 filters (Robert Konrad)
* Bug 3095274: Pre-compiled header support missing for VS2010 target
* Bug 3100062: vs2010 Runtime library selection
-------
4.2.1
-------
* Feature 2944697: Add flag to disable Minimal Rebuild in Visual Studio
* Patch 2928029: Add EnableSSE, EnableSSE2 flags
* Patch 2936443: Expose configuration terms to scripts (Laurent Humbertclaude)
* Bug 2928775: Error loading external Lua module with require()
* Bug 2942438: Wrong runtime library linked
* Bug 2931722: pchheader handling not consistent between tools
* Bug 2958829: Files pattern matching including too many files
* Bug 2953594: includedirs / libdirs converting absolute paths to relative
* Bug 2936188: Improve handling for invalid values in lists
-----
4.2
-----
- Feature 1526976: Add support for Apple Xcode 3
- Feature 2900623: Add targetsuffix and implibsuffix properties
- Added project kind to list of configuration filters
- Feature 2839002: Add gcc switch to improve header dependency generation (Johannes Spohr)
- Feature 2832906: Global variable (_SCRIPT) for current script path
- Feature 2905303: Enable better folder matching in file lists
- Feature 2919629: Add help target for makefiles
- Feature 2820644: Add Xbox360 deployment and image options
- Bug 2909463: Fix Xcode handling of Obj-C++ .mm files
- Bug 2903430: Using relative instead of absolute paths with $() macro
- Bug 2910691: Duplicate build options
- Bug 2910639: Nil reference on dylib project dependency
- Bug 2872066: Two test failures in 4.1.2
- Bug 2912756: dylibs missing lib prefix
- Bug 2910202: Code::Blocks building C files as C++
- Bug 2926917: Use target name for Visual Studio PDB file
- Bug 2927604: Unable to build Premake with Visual Studio
- Clean action now removes MonoDevelop .pidb files correctly
- Added os.executef()
-------
4.1.2
-------
- Fixed ManagedExtension setting for Visual Studio
- Fixed os.match() bug for large result sets (David Raulo)
- Patch 2840052: Order problem of static link
- Patch 2802722: Floating Point Model Flags (Suigintou)
- Patch 2865333: Support for ObjC and ObjC++ sources (Johannes Spohr)
- Patch 2832852: Fix descriptions in cmd help (Sebastian Schuberth)
- Patch 2832848: Show default script name in help (Sebastian Schuberth)
-------
4.1.1
-------
- Use libtool instead of ar for Mac OS X Universal static libraries
- Fixed Xbox 360 linker settings in Visual Studio
- Remove platform-specific intermediate objects on clean
- Bug 2819232: Buildoptions not used when creating Makefile for C#
- Bug 2813297: OS X universal config should be "univ" (William Burnson)
- Bug 2814179: Xbox 360 precompiled headers not working
-----
4.1
-----
- Added support for cross-compiling target platforms
- Added Xbox 360 support to Visual Studio 2005/2008
- Added Mac OS X universal binary support
- Added Playstation 3 support
- Added precompiled header support for GCC
- Support links and libdirs for Visual Studio static libraries
- Fail gracefully when list is assigned to string field
- Changed GCC flags to -fno-exceptions and -fno-rtti
- Improved performance of configuration building step
- Fixed crash when configuration is missing a kind
- Patch 2031626: Support for additional manifest files (Colin Graf)
- Patch 2558089: workaround for --as-needed/correct link order (idl0r)
- Patch 2609028: verbose linking in makefile (kaidokert)
- Bug 2564404: FatalWarnings has no effect with gmake target
- Bug 2550759: pchheader option has wrong type
- Bug 1900333: Parentheses in build path
- Bug 2790865: SharedLib on OSX fixes (Ash Berlin)
- Bug 2790882: Trailing slash in path.getabsolute (Ash Berlin)
RC2 -> RC3
- Bug 2805763: GCC PCH breaks on path
- Bug 2709641: Location field does not propagate to projects
- Bug 2675518: Dependencies wrong on config links
- Bug 2152526: Code::Blocks doesn't build PCH correctly on GCC
RC1 -> RC2
- Removed additional MonoDevelop files in clean action
- Fixed naming of system libraries in Visual Studio link step
- Set OS to Windows when generating for Visual Studio
- Bug 2801257: Linker error LNK1112 when cross-compiling for x64
-----
4.0
-----
This version is a complete rewrite of Premake.
- A new, more readable and extensible syntax for projects
- More robust syntax validation
- A new command-line format, with better argument validation
- Improved path handling across all project settings
- Upgraded to Lua 5.1.4
- Many, many bug fixes
RC4 -> Final
- Set Mac OS X linker flags for Code::Blocks
- Bug 2533504: Files above project root not added to project
RC3 -> RC4
- Embed scripts instead of bytecodes to avoid portability issues
- solution() and project() now only set the active object when
called with a name; remains unchanged otherwise
RC2 -> RC3
- Bug: GCC Windows release builds of Premake4 crash on script errors
- Patched Lua to load precompiled bytecodes on PPC architectures.
- Display paths of generated files
RC1 -> RC2
- Enabled use of absolute Windows paths to different drive letter
- Bug: Post-build commands run before build on Code::Blocks
- Removed FatalWarnings build flag
- Fixed GCC 4.2 warnings (Ryan Pusztai)
- Enable Windows linking to shared libraries even with NoImportLib
flag set (just in case)
- Fixed handling of paths in links
- Added "ToolsVersion" attribute to VS2005 and VS2008 C# projects
- Fixed separator between library dependencies in C++ makefiles
- Added missing os.copyfile() function
- Bug: Sometimes takes a long time to complete on Linux
- Enabled Lua popen support on Linux and Mac OS X
-----
3.7
-----
- Updated Lua to 5.1.3
- Added new CodeLite support target (Ryan Pusztai)
- Added new cb-ow (Code::Blocks Open Watcom) target (Tim Channon)
- Place OSX winexe's into Content/MacOS folder (William Burnson)
- Sibling executables may now be listed in package.links
- Bug 1520012: Improper Makefiles when filenames have spaces
(Diaa Sami)
- Bug 2045506: "no-exceptions" flag ignored for VS200x (Benoit Miller)
- Bug 2034470: Error in cmd line error handler
- Bug 2114152: package or config table isn't generated automatically
-----
3.6
-----
- Patch 1946122: Add support for VS2008 (Ryan Pusztai)
- Patch 1913448: Win32 crash when using '--clean --usetargetpath'
(David Walters)
- Patch 1771168: luaL_getn speed optimization (Richard O'Grady)
- Bug 1939089: Premake segfault on Linux/PPC (Fabio Till)
- Fixed "bad argument #2 to 'chdir'" error
- Disable -MMD on multiple -arch flags (poor man's Universal binary
support)
-----
3.5
-----
- Prevent creation of import libraries on OS X
- Improved handling of dylibs on OS X
- Patch 1771977: Ability to compile C source as C++ in Code::Blocks
(Ryan Pusztai)
- Bug 1804810: out-implib not present in linux gnu compler toolchain
- Bug 1806949: .Net reference paths are broken when bindir is specified
- Bug 1806960: Make clean does not remove .mdb files
- Bug 1831389: Makefiles stored in subdirs contain no targets on
first run
-----
3.4
-----
- Added `no-pch` flag to suppress precompiled headers
- Added App.config support to GNU makefiles
- Add os.mkdir() to script environment
- Makefile now creates target directory before copying .NET references
- Feature 1520182: Enhanced file-handling functions
- Bug 531878: Problems with relative paths
- Bug 1723867: Config-specific post-build on GNU target (Benoit Miller)
- Bug 1596826: XML targets doesn't escape xml entities
- Bug 1600155: Core dump due to newpackage() and matchfiles()
- Bug 1608895: resgen command shown
- Bug 1639730: Output filename is not set
- Bug 1729227: non-portable executable with relative library path
- Bug 1559951: default clean rule removes package dir
- Patch 1733674: PCH support for Code::Block targets (Ryan Pusztai)
- Patch 1746563: Ability to specify GUID for VS targets (Ryan Pusztai)
- Patch 1754867: Creating import lib of different name (Ryan Pusztai)
-----
3.3
-----
- Added support for prebuild, prelink, and postbuild commands
- Added `target` global variable to script environment
- Added build flag `no-edit-and-continue`
- Added build flags `native-wchar` and `no-native-wchar`
- Added build flag `no-manifest`
- Added build flag `seh-exceptions` (VS2005 only)
- Added `resdefines`, `respaths`, and `resoptions`
- Added `prebuildcommands`, `prelinkcommands`, and `postbuildcommands`
- Added `pchheader` and `pchsource` (Visual Studio only)
- Feature 1337547: Package-level bindir and libdir
- Bug 1565755: Generated makefiles do not work with MSYS
- Bug 1587955: Target path ignored for libs
- Bug 1574725: Static library extension for "gnu" target
- Bug 1522861: Fixed by using "ar -rcs" instead of "ar -cr && ranlib"
- Bug 1656816: Mkdir set wrong directory rights
- Bug 1655595: Compile/build problem on FreeBSD
- Bug: "gnu" clean rule doesn't work in cmd.exe
- Improved behavior of Linux findlib()
- Updated Code::Blocks support to latest project version
(major="1" minor="6")
- Patch 1681666: GNU targets always show the console if kind = 'winexe'
-----
3.2
-----
- Added support for Code::Blocks
- Updated MonoDevelop support
- Upgraded Lua to 5.0.3
- Added new matchdirs() to Lua script environment
- Expose list of packages as _PACKAGES global in Lua
- Turn off edit-and-continue in release builds with symbols
- Bug 1559873: libpaths inserts extra space after -L
-----
3.1
-----
- Added support for Visual Studio 2005
- Added support for Windows resources to GNU make target
- Added path handling functions to Lua environment
- Added matchrecursive() for recursive file searches
- Added os.fileexists() function to Lua environment
- Added os.appendfile() function to Lua environment
- Changed `monoresgen` to `resgen` to keep up with Mono project
- Added `mono2` .NET compiler set for Mono .NET 2.0 support
- Feature 1096677: exclude files from matchfiles (package.excludes)
- Bug 1439463: VS2003 RTTI problem
- Bug 1439446: GNU Makefile problem under Mingw32
- Bug 1422068: package.path="." causes bad makefiles
- Bug 1431530: makefile target fails when project path specified
-----
3.0
-----
- Upgraded Lua interpreter to version 5.0.1
- The options table now stores simple values, rather than tables
- Completed MonoDevelop support
- Improved .NET resource handling for GNU generator
- Added unit test suite
- Merged Scott Graham unicode build flag patch
- Removed package.warninglevel in favor of extra-warnings flag
- Added package.targetprefix
- Overhauled structure of generated GNU makefiles
- Added --os command line option
- Fixed bug 1268588: Use gcc to link C packages
- Fixed bug 1363306: GNU C# should copy referenced DLLs
-----
2.4
-----
- Added chdir() to Lua script environment
- Merged Thomas Harning's patch for .NET resources on GNU
- Fixed bug 1194702: Can't put multiple packages in same directory
- Fixed bug in GNU shared library builds (doh!)
- Added target 'vs2002' to replace 'vs7'
-----
2.3
-----
- Added 'project.config[]' with 'bindir' and 'libdir'
- Merged Scott Graham's "warninglevel" patch.
- Fixed bug 1153484: Import lib in wrong directory.
- Fixed bug 1013352: Stack overflow with large projects.
- Fixed bug 945406: package.files, bad value = crash
-----
2.2
-----
- Worked around VS.NET bug for .NET assemblies > 64K.
- Added --very-verbose flag to GNU generator.
- GNU generator now supports assembly sources.
-----
2.1
-----
- File extension of generated binaries can now be set
with config.targetextension.
- Windows targets now handle .def files for DLLs.
-----
2.0
-----
- Can now specify build actions per file
- Include paths are now passed to VC7 resource compiler
- Removed _WIN32 define from Cygwin makefiles
- Added package.objdir to set intermediates directory
- Added rmdir() to Lua script environment
- A big bag of bug fixes
-----
1.9
-----
- Made verbose mode even more verbose.
- posix.c now builds properly as C.
- Fixed package dependency generation for GNU and VS2003.
- Display Lua version number in usage text.
- Fixed VS link between *.aspx and *.aspx.cs files.
- Fixed VS link between *.resx and *.cs files.
- Fixed *.d file generation for gcc 2.9x.
- Unified various help options under '--help'.
- Bin and Lib paths can now be arbitrarily long.
- linkoptions are now applied in VC6 and VC7 projects.
-----
1.8
-----
- Added support for ASP.NET projects.
- Fixed a bug in VC6 support for static libraries.
- matchfiles() now uses package path instead of script path.
- Added --verbose option.
- No longer apply no-rtti and no-exceptions to *.c files.
-----
1.7
-----
- Location of generated project files can now be specified with
the project.path variable.
- Inter-package dependencies are fixed for GNU makefiles.
- No longer need to execute in same directory as project script.
- Added "c" language specifier.
- Added support for .resx and .config files to C# projects.
- Added support for full assembly names in .NET references.
- Fixed handling of paths in package.target variable.
- Improved support for SharpDevelop.
- Started support for OS X.
- Added support for Digital Mars compiler.
-------
1.6.1
-------
- VS7 generator crashed if a package was built before one of its
dependencies. Now immediately assigns UUID before processing.
-----
1.6
-----
- Added support for Visual Studio 2003 and SharpDevelop.
- Added binaries directory as a reference path for VS7.
-----
1.5
-----
- Added initial support for building static libraries.
- Added "no-main" flag, prevents overriding WinMain() on
Windows builds.
- Added "--no-rtti" and "no-exceptions" build flags to
disable those C++ features.
- Display error message when project has no packages.
- Moved VC7 *.pdb files into intermediates directory.
-----
1.4
-----
- Bug fixes to the path manipulation routines.
- GNU makefiles are regenerated when premake scripts change.
-----
1.3
-----
- Added support for the Cygwin environment.
- Added "static-runtime" build flag to statically link against C/C++
standard runtime libraries.
- Bug fixes to Visual Studio 6 and 7 generators and path reversing
algorithm.
-----
1.2
-----
- Standardized format of command-line options.
- Can now handle custom command-line options in script.
- Added new function findlib().
- Added new C++ build flag "managed" for writing C++ .NET code.
- Can now use open-source C# compilers in VS6 generator.
- Several bug fixes to the VS7 generator.
-----
1.1
-----
- Added support for custom build configurations. Added "optimize",
"optimize-size", "optimize-speed", and "no-symbols" flags to control
build settings.
- Added matchfiles() to select files using wildcards.
- Added "unsafe" flag for C# projects.
- Added newpackage() function for creating new package objects inline,
instead of creating separate scripts.
- Changed include() to dopackage() and option() to addoption(). The old
versions have been kept for compatibility, but will be deprecated
eventually.
- Major cleanup of the source code.
-----
1.0
-----
- Fixed a bug related to the reference paths in VS7 C# projects.
- Display a warning message if a reference path can't be found.
- Automatically create bin and lib directories if they do not exist.
- GNU C# projects will now properly use the configured library paths.
-------
0.9.2
-------
- Added --with-mono and --with-pnet options.
- VS7 C# projects will now properly use the configured library paths.
-------
0.9.1
-------
- Switched to Lua (http://www.lua.org/) for project script parsing.
- Add support for custom project options.
- Changed 'type' to 'kind' to avoid conflict with Lua function of the
same name.
- Changed 'conexe' to 'exe' because I liked it better.
- Changed 'library' to 'dll' for C# projects to keep things consistent.
-------
0.9.0
-------
- Initial public release.
See https://bitbucket.org/premake/premake-dev/wiki/What's_New_in_5.0
for the complete list of changes from the Premake 4.x series.

View File

@ -1,4 +1,4 @@
Copyright (c) 2003-2014 Jason Perkins and individual contributors.
Copyright (c) 2003-2015 Jason Perkins and individual contributors.
All rights reserved.
Redistribution and use in source and binary forms, with or without modification,
@ -11,7 +11,7 @@ are permitted provided that the following conditions are met:
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the Premake nor the names of its contributors may be
3. Neither the name of Premake nor the names of its contributors may be
used to endorse or promote products derived from this software without
specific prior written permission.

View File

@ -2,7 +2,7 @@ PREMAKE
A build configuration tool
Core module
Copyright (C) 2002-2014 by Jason Perkins
Copyright (C) 2002-2015 by Jason Perkins
Distributed under the terms of the BSD License, see LICENSE.txt
The Lua language and runtime library is (C) TeCGraf, PUC-Rio.

View File

@ -103,34 +103,3 @@
value = "path",
description = "Set the output location for the generated files"
}
--
-- Use the embed action to convert all of the Lua scripts into C strings, which
-- can then be built into the executable. Always embed the scripts before creating
-- a release build.
--
dofile("scripts/embed.lua")
newaction {
trigger = "embed",
description = "Embed scripts in scripts.c; required before release builds",
execute = doembed
}
--
-- Use the release action to prepare source and binary packages for a new release.
-- This action isn't complete yet; a release still requires some manual work.
--
dofile("scripts/release.lua")
newaction {
trigger = "release",
description = "Prepare a new release (incomplete)",
execute = dorelease
}

View File

@ -32,9 +32,18 @@
}
newaction {
trigger = "package",
description = "Creates source and binary packages",
execute = function ()
include (path.join(corePath, "scripts/package.lua"))
end
}
newaction {
trigger = "release",
description = "Prepare a new release (incomplete)",
description = "Merges current branch to release; updates version and tags",
execute = function ()
include (path.join(corePath, "scripts/release.lua"))
end

View File

@ -1,43 +1,39 @@
PREMAKE RELEASE CHECKLIST
-------------------------
VERSION NUMBERS
4.0
4.0-beta1
4.0-rc1
4.0.1
PREP
* Make sure all tests pass on Windows and POSIX
* Create working branch for release prep
* Make sure branch passes all tests on all platforms
* Update CHANGELOG.txt as needed
* Prep release announcement for forums
* Run `premake5 embed`
* Commit all changes to premake-stable
* Tag premake-stable with the version number and push
* Pull changes to premake-dev
BUILD
* On each platform, run `premake5 release {version} binary`
* On one platform, run `premake5 release {version} source`
* If desired, copy binary to local path
* Upload packages (in release/) to SourceForge
RELEASE
* Merge working branch with release branch
* Update the version number in src/host/premake.c and commit
* Merge working branch to development branches
* Close working branch
PACKAGE
* Run `premake5 package release source` (from Posix ideally)
* On each platform, run `premake5 package release binary`
PUBLISH
* Upload packages to SourceForge
* On SourceForge, set package properties (platform, etc.)
* Update the download page

184
scripts/package.lua Normal file
View File

@ -0,0 +1,184 @@
---
-- Create a source or binary release package.
---
---
-- Helper function: run a command while hiding its output.
---
local function execQuiet(cmd, ...)
cmd = string.format(cmd, unpack(arg)) .. " > _output_.log 2> _error_.log"
local z = os.execute(cmd)
os.remove("_output_.log")
os.remove("_error_.log")
return z
end
---
-- Check the command line arguments, and show some help if needed.
---
local usage = 'usage is: package <branch> <type>\n' ..
' <branch> is the name of the release branch to target\n' ..
' <type> is one of "source" or "binary"\n'
if #_ARGS ~= 2 then
error(usage, 0)
end
local branch = _ARGS[1]
local kind = _ARGS[2]
if kind ~= "source" and kind ~= "binary" then
error(usage, 0)
end
--
-- Make sure I've got what I've need to be happy.
--
local required = { "hg", "make", "gcc", "premake5", "zip" }
for _, value in ipairs(required) do
local z = execQuiet("%s --version", value)
if z ~= 0 then
error("required tool '" .. value .. "' not found", 0)
end
end
--
-- Figure out what I'm making.
--
os.chdir("..")
local text = os.outputof(string.format('hg cat -r %s src/host/premake.c', branch))
local _, _, version = text:find('VERSION%s*"([%w%p]+)"')
local pkgName = "premake-" .. version
local pkgExt = ".zip"
if not os.is("windows") and kind == "binary" then
pkgExt = ".tar.gz"
end
--
-- Make sure I'm sure.
--
printf("")
printf("I am about to create a %s package", kind:upper())
printf(" ...named release/%s%s", pkgName, pkgExt)
printf(" ...from the %s branch", branch)
printf("")
printf("Does this look right to you? If so, press [Enter] to begin.")
io.read()
--
-- Pull down the release branch.
--
print("Preparing release folder")
os.mkdir("release")
os.chdir("release")
os.rmdir(pkgName)
print("Cloning source code")
z = os.executef("hg clone .. -r %s %s", branch, pkgName)
if z ~= 0 then
error("clone failed", 0)
end
--
-- Make absolutely sure the embedded scripts have been updated
--
print("Updating embedded scripts...")
os.chdir(pkgName)
z = execQuiet("premake5 embed")
if z ~= 0 then
error("failed to update the embedded scripts", 0)
end
--
-- Clear out files I don't want included in any packages.
--
print("Cleaning up the source tree...")
os.rmdir("packages")
local modules = table.join(".", os.matchdirs("modules/*"))
for _, module in ipairs(modules) do
for _, name in ipairs { ".hg", ".hgcheck" } do
os.rmdir(path.join(module, name))
end
for _, name in ipairs { ".DS_Store", ".gitignore", ".hgignore", ".hgsub*", ".hgtags" } do
os.remove(path.join(module, name))
end
end
--
-- Generate a source package.
--
if kind == "source" then
print("Generating project files...")
execQuiet("premake5 /to=build/vs2005 vs2005")
execQuiet("premake5 /to=build/vs2008 vs2008")
execQuiet("premake5 /to=build/vs2010 vs2010")
execQuiet("premake5 /to=build/vs2012 vs2012")
execQuiet("premake5 /to=build/vs2013 vs2013")
execQuiet("premake5 /to=build/gmake.windows /os=windows gmake")
execQuiet("premake5 /to=build/gmake.unix /os=linux gmake")
execQuiet("premake5 /to=build/gmake.macosx /os=macosx gmake")
print("Creating source code package...")
os.chdir("..")
execQuiet("zip -r9 %s-src.zip %s/*", pkgName, pkgName)
end
--
-- Create a binary package for this platform. This step requires a working
-- GNU/Make/GCC environment. I use MinGW on Windows as it produces the
-- smallest binaries.
--
if kind == "binary" then
print("Building binary...")
execQuiet("premake5 gmake")
z = execQuiet("make config=release")
if z ~= 0 then
error("build failed")
end
os.chdir("bin/release")
local name = string.format("%s-%s%s", pkgName, os.get(), pkgExt)
if os.is("windows") then
execQuiet("zip -9 %s premake5.exe", name)
else
execQuiet("tar czvf %s premake5", name)
end
os.copyfile(name, path.join("../../../", name))
os.chdir("../../..")
end
--
-- Clean up
--
os.rmdir(pkgName)

View File

@ -1,96 +1,94 @@
--
-- Prepare a new Premake release. This is still incomplete and some manual
-- work is needed to get everything packaged up. See RELEASE.txt in this
-- folder for the full checklist.
--
-- Info on using Mercurial to manage releases:
-- http://hgbook.red-bean.com/read/managing-releases-and-branchy-development.html
-- http://stevelosh.com/blog/2009/08/a-guide-to-branching-in-mercurial/
-- Merge the current working branch to Premake's release branch,
-- update the embedded version number and tag the result.
--
function dorelease()
local z
--
-- Helper function: runs a command (formatted, with optional arguments) and
-- suppresses any output. Works on both Windows and POSIX. Might be a good
-- candidate for a core function.
-- Helper function: run a command while hiding its output.
--
local function exec(cmd, ...)
cmd = string.format(cmd, unpack(arg))
local z = os.execute(cmd .. " > output.log 2> error.log")
os.remove("output.log")
os.remove("error.log")
local function execQuiet(cmd, ...)
cmd = string.format(cmd, unpack(arg)) .. " > _output_.log 2> _error_.log"
local z = os.execute(cmd)
os.remove("_output_.log")
os.remove("_error_.log")
return z
end
--
-- Make sure a version was specified
-- Check the command line arguments, and show some help if needed.
--
if #_ARGS ~= 2 then
error("** Usage: release [version] [source | binary]", 0)
local usage = 'usage is: release <version>\n' ..
' <version> is of the form "5.0", "5.0.1", or "5.0-rc1"\n'
local usage = 'usage is: release <version>\n'
if #_ARGS ~= 1 then
error(usage, 0)
end
local version = _ARGS[1]
local kind = _ARGS[2]
local pkgname = "premake-" .. version
--
-- Look for required utilities
-- Make sure I've got what I've need to be happy.
--
local required = { "hg", "make", "gcc" }
local required = { "hg" }
for _, value in ipairs(required) do
z = exec("%s --version", value)
local z = execQuiet("%s --version", value)
if z ~= 0 then
error("** '" .. value .. "' not found", 0)
error("required tool '" .. value .. "' not found", 0)
end
end
--
-- Pre-release checklist
-- Figure out what I'm doing.
--
print( "")
print( "BEFORE RUNNING THIS SCRIPT follow the checklist in RELEASE.txt" )
print( "")
print( "Press [Enter] to begin.")
os.chdir("..")
local branch = os.outputof("hg branch"):gsub("%s+$", "")
--
-- Make sure I'm sure.
--
printf("")
printf("I am about to")
printf(" ...merge %s to the release branch", branchName)
printf(" ...update the embedded version to \"%s\"", version)
printf(" ...commit and tag the merged result")
printf("")
printf("Does this look right to you? If so, press [Enter] to begin.")
io.read()
---------------------------------------------------------------------------
--
-- Everything below this needs to be reworked for Mercurial
--
---------------------------------------------------------------------------
--
-- Check out the release tagged sources to releases/
-- Pull down the release branch.
--
print("Downloading release tag...")
print("Preparing release folder")
os.mkdir("release")
os.chdir("release")
os.rmdir(version)
os.rmdir(pkgname)
z = exec( "hg clone -r %s .. %s", version, pkgname)
print("Cloning source code")
local z = os.executef("hg clone .. -r release %s", branch, version)
if z ~= 0 then
error("** Failed to download tagged sources", 0)
error("clone failed", 0)
end
os.chdir(pkgname)
--
-- Merge in the release working branch.
--
error("merge of release working branch is not yet implemented")
--
@ -99,6 +97,7 @@ function dorelease()
print("Updating version number...")
os.chdir(version)
io.input("src/host/premake.c")
local text = io.read("*a")
text = text:gsub("HEAD", version)
@ -108,106 +107,7 @@ function dorelease()
--
-- Make absolutely sure the embedded scripts have been updated
-- Commit and tag merged revision.
--
print("Updating embedded scripts...")
z = exec("premake5 embed")
if z ~= 0 then
error("** Failed to update the embedded scripts", 0)
end
--
-- Generate source packaging
--
if kind == "source" then
--
-- Remove extra directories
--
print("Cleaning up the source tree...")
os.rmdir("samples")
os.rmdir("packages")
os.rmdir(".hg")
os.rmdir(".hgignore")
os.rmdir(".hgtags")
--
-- Generate project files to the build directory
--
print("Generating project files...")
exec("premake5 /to=build/vs2005 vs2005")
exec("premake5 /to=build/vs2008 vs2008")
exec("premake5 /to=build/vs2010 vs2010")
exec("premake5 /to=build/gmake.windows /os=windows gmake")
exec("premake5 /to=build/gmake.unix /os=linux gmake")
exec("premake5 /to=build/gmake.macosx /os=macosx /platform=universal32 gmake")
exec("premake5 /to=build/codeblocks.windows /os=windows codeblocks")
exec("premake5 /to=build/codeblocks.unix /os=linux codeblocks")
exec("premake5 /to=build/codeblocks.macosx /os=macosx /platform=universal32 codeblocks")
exec("premake5 /to=build/codelite.windows /os=windows codelite")
exec("premake5 /to=build/codelite.unix /os=linux codelite")
exec("premake5 /to=build/codelite.macosx /os=macosx /platform=universal32 codelite")
exec("premake5 /to=build/xcode3 /platform=universal32 xcode3")
--
-- Create source package
--
print("Creating source code package...")
os.chdir("..")
exec("zip -r9 %s-src.zip %s/*", pkgname, pkgname)
--
-- Create a binary package for this platform. This step requires a working
-- GNU/Make/GCC environment. I use MinGW on Windows.
--
else
print("Building platform binary release...")
exec("premake5 /platform=universal32 gmake")
exec("make config=%s", iif(os.is("macosx"), "releaseuniv32", "release"))
local fname
os.chdir("bin/release")
if os.is("windows") then
fname = string.format("%s-windows.zip", pkgname)
exec("zip -9 %s premake5.exe", fname)
else
fname = string.format("%s-%s.tar.gz", pkgname, os.get())
exec("tar czvf %s premake5", fname)
end
os.copyfile(fname, "../../../" .. fname)
os.chdir("../../..")
end
--
-- Upload files to SourceForge
--
--
-- Clean up
--
os.rmdir(pkgname)
print("")
print( "Finished.")
end
error("commit and tag of merged branch is not yet implemented")

View File

@ -82,7 +82,7 @@
if (_OPTIONS["version"]) then
printf(versionhelp, _PREMAKE_VERSION)
return 1
return 0
end
if (_OPTIONS["help"]) then

View File

@ -15,7 +15,7 @@
#define VERSION "HEAD"
#define COPYRIGHT "Copyright (C) 2002-2014 Jason Perkins and the Premake Project"
#define COPYRIGHT "Copyright (C) 2002-2015 Jason Perkins and the Premake Project"
#define PROJECT_URL "https://bitbucket.org/premake/premake-dev/wiki"
#define ERROR_MESSAGE "Error: %s\n"