<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Premake Blog</title>
        <link>https://premake.github.io/blog</link>
        <description>Premake Blog</description>
        <lastBuildDate>Sun, 22 Dec 2024 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Roadmap to 5.0]]></title>
            <link>https://premake.github.io/blog/2024/12/22/community-update-12</link>
            <guid>https://premake.github.io/blog/2024/12/22/community-update-12</guid>
            <pubDate>Sun, 22 Dec 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[Premake 5.0 is the next major release of the popular build configuration tool, designed to simplify and streamline the process of generating project files for various development environments. This roadmap outlines the key milestones that will be achieved in the journey towards the first stable release of Premake 5.0.]]></description>
            <content:encoded><![CDATA[<p>Premake 5.0 is the next major release of the popular build configuration tool, designed to simplify and streamline the process of generating project files for various development environments. This roadmap outlines the key milestones that will be achieved in the journey towards the first stable release of Premake 5.0.</p>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="milestones">Milestones<a href="https://premake.github.io/blog/2024/12/22/community-update-12#milestones" class="hash-link" aria-label="Direct link to Milestones" title="Direct link to Milestones">​</a></h2>
<ol>
<li><strong>Explicit APIs for Flags</strong>: In the past, Premake has support various flags for project generation, such as <code>MFC</code> and <code>LinkTimeOptimization</code>. In the 5.0 stable release, all flags will have been replaced by dedicated APIs. The current development builds have already begun this process.</li>
<li><strong>Deprecation and Removal of the gmake Exporter</strong>: For many years now, the <code>gmake2</code> exporter has been our suggested generator for GNU Makefiles. As the 5.0 stable release approaches, <code>gmake</code> will be moved to <code>gmakelegacy</code> and <code>gmake2</code> will become <code>gmake</code>. It is encouraged that users that are still using the legacy <code>gmake</code> exporter to try <code>gmake2</code> and report any deficiencies. The deprecation and removal process will happen over the next several beta releases, with planned complete removal within 2025.</li>
<li><strong>Removal of Existing Deprecated APIs</strong>: There are many existing APIs that have been deprecated for several releases now in Premake, both functions and enumerations. To reduce the surface space of the API, existing deprecated APIs with replacements will be removed. Deprecated APIs without a direct replacement will be provided with either a replacement API or instructions on how to replace the behavior (where possible).</li>
</ol>
<h2 class="anchor anchorWithStickyNavbar_LWe7" id="key-planned-improvements">Key Planned Improvements<a href="https://premake.github.io/blog/2024/12/22/community-update-12#key-planned-improvements" class="hash-link" aria-label="Direct link to Key Planned Improvements" title="Direct link to Key Planned Improvements">​</a></h2>
<ol>
<li><strong>Better Documentation</strong>: For the 5.0 release, the Premake team will be ensuring that all APIs and public-facing behaviors are sufficiently documented. This includes making sure documentation exists for each of these APIs, as well as sufficient examples of their usage. In addition to increased documentation of the Premake APIs, the guides on how to use and extend Premake will be reviewed to ensure they still demonstrate best practices and reflect upcoming API changes. The documentation will also be reviewed to ensure that there are sufficient examples of extending Premake's functionality.</li>
<li><strong>General Bug Fixes</strong>: There are currently many open bug reports on GitHub for Premake. The team plans to prioritize the bugs and add fixes and tests where possible to prevent future regressions.</li>
<li><strong>Improved Extension Support</strong>: In Premake 5.0-beta3, extending core functionality in Premake, especially exporters, is tedious. As the 5.0 stable release approaches, the team plans to review the mechanisms to extend toolsets and exporters. This may incur a breaking change to external modules using the existing extension mechanisms; however, documentation will be updated as these occur as well as a transition period. For these changes, community feedback is highly encouraged to make sure this is done in a way that everyone benefits from.</li>
<li><strong>Improved CI</strong>: Currently, Premake has many build pipelines for verifying builds on various architectures, as well as running the test suites on those platforms. We are investigating improvements to the CI process, such as improved release artifact generation and more robust pipelines. This effort will also include general improvements to the release creation process.</li>
<li><strong>Increased Testing Coverage</strong>: Premake currently has a large suite of tests, but there are gaps. As part of our push to 5.0, the development team plans to identify and add tests for the gaps in both our public API and internal functionality.</li>
</ol>
<p>These goals are not all encompassing of Premake 5.0's first stable release, but summarize the high level milestones that the team intends to meet. We look forward to any feedback you have regarding the upcoming changes to Premake. If you are looking to contribute to Premake but don't know where to start, take a look at the GitHub issues list or open a discussion and a member of the team will be able to direct you to where to begin.</p>
<p>Premake would not be possible without the support of the community, our contributors, and our sponsors on <a href="https://opencollective.com/premake" target="_blank" rel="noopener noreferrer">Open Collective</a>. Thank you for your continued support throughout this exciting journey towards 5.0.</p>
<p>The Premake Team</p>]]></content:encoded>
            <category>community-updates</category>
        </item>
        <item>
            <title><![CDATA[Community Update #11]]></title>
            <link>https://premake.github.io/blog/2024/11/09/community-update-11</link>
            <guid>https://premake.github.io/blog/2024/11/09/community-update-11</guid>
            <pubDate>Sat, 09 Nov 2024 00:00:00 GMT</pubDate>
            <description><![CDATA[It's been almost 3 years since the last community update, and over 2 years since the last beta.  Without further ado, here are the community contributions fromt the last 2 years.]]></description>
            <content:encoded><![CDATA[<p>It's been almost 3 years since the last community update, and over 2 years since the last beta.  Without further ado, here are the community contributions fromt the last 2 years.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="road-to-premake-50">Road to Premake 5.0<a href="https://premake.github.io/blog/2024/11/09/community-update-11#road-to-premake-50" class="hash-link" aria-label="Direct link to Road to Premake 5.0" title="Direct link to Road to Premake 5.0">​</a></h3>
<p>Most of the heavy lifting for Premake 5.0 is done, but there are a few major milestones left for leaving beta and going to full release.</p>
<ol>
<li>
<p>Deprecation and removal of the <a href="https://premake.github.io/docs/flags" target="_blank" rel="noopener noreferrer">flags</a> API. Flags are a remenant of older models. Instead, flags will be migrated to the idiomatic Premake approach of dedicated APIs. This isn't going to be as trivial as "On" and "Off", as many of these flags represent a larger group of behaviors.</p>
</li>
<li>
<p>Deprecation and removal of the gmake exporter in favor of gmake2. This has been one of the goals for many years now, and we're confident that gmake2 is in a spot where it can be "promoted" to the primary GNU makefile exporter. In the next release, gmake will likely be renamed and deprecated, and gmake will describe the gmake2 exporter. This will be a breaking change, but we feel it is the best way forward to remove the bifurcation of the makefile exporter. Until the time when we do remove the legacy gmake exporter, users current leveraging the legacy exporter are encouraged to try out the gmake2 exporter and report any defects or feature deficiencies in order to make the change as seamless as possible.</p>
</li>
</ol>
<p>In order to make sure we capture the needs of users for the 5.0 stable release, I encourage you to open issues or discussions to ensure the transition to 5.0 is an easy user experience.</p>
<p>{/* truncate */}</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="community-contributions">Community Contributions<a href="https://premake.github.io/blog/2024/11/09/community-update-11#community-contributions" class="hash-link" aria-label="Direct link to Community Contributions" title="Direct link to Community Contributions">​</a></h3>
<ul>
<li><a href="https://github.com/premake/premake-core/pull/1841" target="_blank" rel="noopener noreferrer">#1841</a>  Update shadertype.md (@TylerDahl)</li>
<li><a href="https://github.com/premake/premake-core/pull/1842" target="_blank" rel="noopener noreferrer">#1842</a>  Update shaderobjectfileoutput.md (@TylerDahl)</li>
<li><a href="https://github.com/premake/premake-core/pull/1843" target="_blank" rel="noopener noreferrer">#1843</a>  Update shadermodel.md (@TylerDahl)</li>
<li><a href="https://github.com/premake/premake-core/pull/1942" target="_blank" rel="noopener noreferrer">#1942</a>  Release/v5.0 beta2 (@premake)</li>
<li><a href="https://github.com/premake/premake-core/pull/1951" target="_blank" rel="noopener noreferrer">#1951</a>  Fix custom build with missing directory (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/1952" target="_blank" rel="noopener noreferrer">#1952</a>  vstudio: add usestandardpreprocessor option (@flakey5)</li>
<li><a href="https://github.com/premake/premake-core/pull/1954" target="_blank" rel="noopener noreferrer">#1954</a>  Add newoption.catagory to documentation, mark os.is as deprecated (@thomashope)</li>
<li><a href="https://github.com/premake/premake-core/pull/1959" target="_blank" rel="noopener noreferrer">#1959</a>  Use admonitions in documentation for things marked as deprecated (@thomashope)</li>
<li><a href="https://github.com/premake/premake-core/pull/1970" target="_blank" rel="noopener noreferrer">#1970</a>  Updated Android docs (@LORgames)</li>
<li><a href="https://github.com/premake/premake-core/pull/1971" target="_blank" rel="noopener noreferrer">#1971</a>  Fixed a couple of issues with the Custom Rules docs (@LORgames)</li>
<li><a href="https://github.com/premake/premake-core/pull/1975" target="_blank" rel="noopener noreferrer">#1975</a>  Strip linking decorators for sibling projects (@LORgames)</li>
<li><a href="https://github.com/premake/premake-core/pull/1976" target="_blank" rel="noopener noreferrer">#1976</a>  Android projects use IncludePath instead of ExternalIncludePath (@LORgames)</li>
<li><a href="https://github.com/premake/premake-core/pull/1978" target="_blank" rel="noopener noreferrer">#1978</a>  Added support for CopyFileToFolders via Copy buildaction (@LORgames)</li>
<li><a href="https://github.com/premake/premake-core/pull/1980" target="_blank" rel="noopener noreferrer">#1980</a>  Added UWP support for VS projects (@LORgames)</li>
<li><a href="https://github.com/premake/premake-core/pull/1981" target="_blank" rel="noopener noreferrer">#1981</a>  Update usefullpaths.md (@nepp95)</li>
<li><a href="https://github.com/premake/premake-core/pull/1985" target="_blank" rel="noopener noreferrer">#1985</a>  Update defaultplatform.md (@GiacomoMaino)</li>
<li><a href="https://github.com/premake/premake-core/pull/1992" target="_blank" rel="noopener noreferrer">#1992</a>  Add AntTarget to vsandroid project file (@0x416c69)</li>
<li><a href="https://github.com/premake/premake-core/pull/1997" target="_blank" rel="noopener noreferrer">#1997</a>  Add validation for toolset. (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/2003" target="_blank" rel="noopener noreferrer">#2003</a>  Allow to specify "--cc=msc" as command line. (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/2004" target="_blank" rel="noopener noreferrer">#2004</a>  Handle entrypoint for msc. (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/2006" target="_blank" rel="noopener noreferrer">#2006</a>  <code>externalwarnings</code>, <code>externalanglebrackets</code>, <code>externalincludedirs</code> was already available in vs2019 (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/2009" target="_blank" rel="noopener noreferrer">#2009</a>  Fix typos in comment. (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/2010" target="_blank" rel="noopener noreferrer">#2010</a>  Typo fix (@brno32)</li>
<li><a href="https://github.com/premake/premake-core/pull/2011" target="_blank" rel="noopener noreferrer">#2011</a>  Add support for unity builds (@Sharlock93)</li>
<li><a href="https://github.com/premake/premake-core/pull/2022" target="_blank" rel="noopener noreferrer">#2022</a>  Fix Debian build recepie. (@KOLANICH-tools)</li>
<li><a href="https://github.com/premake/premake-core/pull/2023" target="_blank" rel="noopener noreferrer">#2023</a>  Fix support of openmp for visual studio with clang toolset. (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/2024" target="_blank" rel="noopener noreferrer">#2024</a>  Fix typo in bytecode description. (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/2025" target="_blank" rel="noopener noreferrer">#2025</a>  Fix missing targets file issue in some C++ nuget packages (@hanagasira)</li>
<li><a href="https://github.com/premake/premake-core/pull/2027" target="_blank" rel="noopener noreferrer">#2027</a>  <code>sanitize { "Address" }</code> should set link flags too for gcc/clang. (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/2028" target="_blank" rel="noopener noreferrer">#2028</a>  Add support for idirafter flag in GCC/Clang (@nickclark2016)</li>
<li><a href="https://github.com/premake/premake-core/pull/2032" target="_blank" rel="noopener noreferrer">#2032</a>  Change to minimize differences after Codelite re-save the file (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/2034" target="_blank" rel="noopener noreferrer">#2034</a>  Robustify <code>http.get</code> tests with retry. (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/2039" target="_blank" rel="noopener noreferrer">#2039</a>  gmake2: Fix detecting msdos vs posix shell (@Peter0x44)</li>
<li><a href="https://github.com/premake/premake-core/pull/2042" target="_blank" rel="noopener noreferrer">#2042</a>  Fix <code>compileas "C"</code> and <code>"C++"</code> for gcc (shared with clang). (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/2052" target="_blank" rel="noopener noreferrer">#2052</a>  Fix typo (@rafaelcn)</li>
<li><a href="https://github.com/premake/premake-core/pull/2061" target="_blank" rel="noopener noreferrer">#2061</a>  Fixed issue with Codelite unit test (@LORgames)</li>
<li><a href="https://github.com/premake/premake-core/pull/2064" target="_blank" rel="noopener noreferrer">#2064</a>  Updated actions from v2 to v3 (@LORgames)</li>
<li><a href="https://github.com/premake/premake-core/pull/2066" target="_blank" rel="noopener noreferrer">#2066</a>  Improve error message of <code>include</code> (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/2070" target="_blank" rel="noopener noreferrer">#2070</a>  Add support of prelink steps (similar to prebuild steps) for Codelite. (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/2072" target="_blank" rel="noopener noreferrer">#2072</a>  Fix prelink step dependencies for gmake (to be done after compilation). (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/2075" target="_blank" rel="noopener noreferrer">#2075</a>  remove trailing whitespaces and add new line at eof (@hanagasira)</li>
<li><a href="https://github.com/premake/premake-core/pull/2076" target="_blank" rel="noopener noreferrer">#2076</a>  Allow to select specific version of msc in command line. (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/2081" target="_blank" rel="noopener noreferrer">#2081</a>  Add some missing flags for msc toolset (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/2084" target="_blank" rel="noopener noreferrer">#2084</a>  Update debugdir.md docs to clarify feature support (@thomashope)</li>
<li><a href="https://github.com/premake/premake-core/pull/2087" target="_blank" rel="noopener noreferrer">#2087</a>  Add clarification for relative paths (@learn-more)</li>
<li><a href="https://github.com/premake/premake-core/pull/2088" target="_blank" rel="noopener noreferrer">#2088</a>  Fix nil indexing for codelite (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/2090" target="_blank" rel="noopener noreferrer">#2090</a>  Add support to <code>undefines</code> for Codelite. (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/2102" target="_blank" rel="noopener noreferrer">#2102</a>  remove reference to non existent example. (@mcarlson-nvidia)</li>
<li><a href="https://github.com/premake/premake-core/pull/2104" target="_blank" rel="noopener noreferrer">#2104</a>  Add VS2022 to list of valid kinds for Android Packaging (@premake)</li>
<li><a href="https://github.com/premake/premake-core/pull/2117" target="_blank" rel="noopener noreferrer">#2117</a>  Require unistd.h for macosx in libzip (@nickclark2016)</li>
<li><a href="https://github.com/premake/premake-core/pull/2118" target="_blank" rel="noopener noreferrer">#2118</a>  Changes target of HTTP tests to hopefully resolve test issues in CI (@nickclark2016)</li>
<li><a href="https://github.com/premake/premake-core/pull/2122" target="_blank" rel="noopener noreferrer">#2122</a>  Fix <code>premake.findProjectScript</code> of previous commit. (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/2127" target="_blank" rel="noopener noreferrer">#2127</a>  Fixes for using debugger under Linux (@vadz)</li>
<li><a href="https://github.com/premake/premake-core/pull/2131" target="_blank" rel="noopener noreferrer">#2131</a>  Use call array for MSVS filters file generation too (@vadz)</li>
<li><a href="https://github.com/premake/premake-core/pull/2135" target="_blank" rel="noopener noreferrer">#2135</a>  Fix libzip missing a library (@KanuX-14)</li>
<li><a href="https://github.com/premake/premake-core/pull/2172" target="_blank" rel="noopener noreferrer">#2172</a>  Custom LLVM Versions for VS2019+ (@nickclark2016)</li>
<li><a href="https://github.com/premake/premake-core/pull/2187" target="_blank" rel="noopener noreferrer">#2187</a>  Enable code analysis via clang-tidy in Visual Studio (@theComputeKid)</li>
<li><a href="https://github.com/premake/premake-core/pull/2194" target="_blank" rel="noopener noreferrer">#2194</a>  [vs*] Allow to have per-file <code>cdialect</code>/<code>cppdialect</code>. (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/2195" target="_blank" rel="noopener noreferrer">#2195</a>  [vs2010+] Handle <code>compileas</code> for files with "unknown" extensions. (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/2203" target="_blank" rel="noopener noreferrer">#2203</a>  Add CA root certificate path for Haiku (@augiedoggie)</li>
<li><a href="https://github.com/premake/premake-core/pull/2217" target="_blank" rel="noopener noreferrer">#2217</a>  Add Library to available shadertypes (@vkaytsanov)</li>
<li><a href="https://github.com/premake/premake-core/pull/2237" target="_blank" rel="noopener noreferrer">#2237</a>  [CI] add dependabot.yml to maintain version action up to date (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/2238" target="_blank" rel="noopener noreferrer">#2238</a>  Bump the github-actions group with 3 updates (@premake)</li>
<li><a href="https://github.com/premake/premake-core/pull/2243" target="_blank" rel="noopener noreferrer">#2243</a>  Fix stack manipulation in Premake's <code>luaL_loadfilex</code> override. (@tritao)</li>
<li><a href="https://github.com/premake/premake-core/pull/2251" target="_blank" rel="noopener noreferrer">#2251</a>  Add a <code>os.hostarch()</code> function to get the host system architecture. (@tritao)</li>
<li><a href="https://github.com/premake/premake-core/pull/2252" target="_blank" rel="noopener noreferrer">#2252</a>  Document <code>os.rename</code> and <code>os.getenv</code> APIs (@tritao)</li>
<li><a href="https://github.com/premake/premake-core/pull/2253" target="_blank" rel="noopener noreferrer">#2253</a>  Add <code>term.clearToEndOfLine</code> and <code>term.moveLeft</code> API additions. (@tritao)</li>
<li><a href="https://github.com/premake/premake-core/pull/2254" target="_blank" rel="noopener noreferrer">#2254</a>  Adds <code>desktop</code> system tag to desktop systems. (@tritao)</li>
<li><a href="https://github.com/premake/premake-core/pull/2255" target="_blank" rel="noopener noreferrer">#2255</a>  Move sanitize, visibility and inlinesvisibility to shared table. (@alex-rass-88)</li>
<li><a href="https://github.com/premake/premake-core/pull/2261" target="_blank" rel="noopener noreferrer">#2261</a>  Add tests for <code>table.merge</code>. (@tritao)</li>
<li><a href="https://github.com/premake/premake-core/pull/2263" target="_blank" rel="noopener noreferrer">#2263</a>  Adds a new <code>os.targetarch()</code> function. (@tritao)</li>
<li><a href="https://github.com/premake/premake-core/pull/2264" target="_blank" rel="noopener noreferrer">#2264</a>  Show error messages from broken includes (@richard-sim)</li>
<li><a href="https://github.com/premake/premake-core/pull/2268" target="_blank" rel="noopener noreferrer">#2268</a>  Re-structure common docs files into sub-folders. (@tritao)</li>
<li><a href="https://github.com/premake/premake-core/pull/2269" target="_blank" rel="noopener noreferrer">#2269</a>  Upgrade docs to latest Docusaurus version. (@tritao)</li>
<li><a href="https://github.com/premake/premake-core/pull/2271" target="_blank" rel="noopener noreferrer">#2271</a>  Add <code>linker</code> flag and <code>LLD</code> support. (@tritao)</li>
<li><a href="https://github.com/premake/premake-core/pull/2272" target="_blank" rel="noopener noreferrer">#2272</a>  Fixed issue with include failing to find embedded files (@LORgames)</li>
<li><a href="https://github.com/premake/premake-core/pull/2274" target="_blank" rel="noopener noreferrer">#2274</a>  Port Premake to Cosmopolitan Libc (@tritao)</li>
<li><a href="https://github.com/premake/premake-core/pull/2277" target="_blank" rel="noopener noreferrer">#2277</a>  Add C++23 cppdialect (@jlaumon)</li>
<li><a href="https://github.com/premake/premake-core/pull/2278" target="_blank" rel="noopener noreferrer">#2278</a>  Prevent empty arrays as expected values for test.contains and test.excludes (@LORgames)</li>
<li><a href="https://github.com/premake/premake-core/pull/2279" target="_blank" rel="noopener noreferrer">#2279</a>  Added ci job to simplify required checks in PRs (@LORgames)</li>
<li><a href="https://github.com/premake/premake-core/pull/2280" target="_blank" rel="noopener noreferrer">#2280</a>  Upgrade <code>libcurl</code> to latest. (@tritao)</li>
<li><a href="https://github.com/premake/premake-core/pull/2281" target="_blank" rel="noopener noreferrer">#2281</a>  Fix vstudio/MSC not supporting the C++23 flag yet (@jlaumon)</li>
<li><a href="https://github.com/premake/premake-core/pull/2283" target="_blank" rel="noopener noreferrer">#2283</a>  Miscelanneous cleanups (@tritao)</li>
<li><a href="https://github.com/premake/premake-core/pull/2284" target="_blank" rel="noopener noreferrer">#2284</a>  Fix <code>os.host</code> for Cosmopolitan build (@tritao)</li>
<li><a href="https://github.com/premake/premake-core/pull/2287" target="_blank" rel="noopener noreferrer">#2287</a>  [doc] Write doc for <code>unsignedchar</code> (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/2294" target="_blank" rel="noopener noreferrer">#2294</a>  Add projects web and github (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/2299" target="_blank" rel="noopener noreferrer">#2299</a>  Remove generated "website/node_modules"'s files from project (@Jarod42)</li>
<li><a href="https://github.com/premake/premake-core/pull/2301" target="_blank" rel="noopener noreferrer">#2301</a>  Fix spelling insice -&gt; inside (@jonesy-b-dev)</li>
<li><a href="https://github.com/premake/premake-core/pull/2316" target="_blank" rel="noopener noreferrer">#2316</a>  Update modules.md (@day-garwood)</li>
</ul>
<p>Additional gratitude and good wishes to everyone who helped review pull requests and triage issues this cycle. Projects like this don't work without you.</p>
<div>
	<a href="https://opencollective.com/_fivem" target="_blank" rel="noopener noreferrer">
		<img decoding="async" loading="lazy" src="https://images.opencollective.com/_fivem/2f78b5f/logo/128.png" class="img_ev3q">
	</a>
</div>
<p>A big shout out to our premier sponsor <strong><a href="https://opencollective.com/_fivem" target="_blank" rel="noopener noreferrer">Cfx.re</a></strong> and all <a href="https://opencollective.com/premake#section-contributors" target="_blank" rel="noopener noreferrer">our monthly backers</a>—be sure to check out their work and support them back if you can!</p>
<p>We welcome questions, suggestions, and concerns. Message or DM us at <a href="https://twitter.com/premakeapp" target="_blank" rel="noopener noreferrer">@premakeapp</a> or <a href="https://github.com/premake/premake-core/discussions" target="_blank" rel="noopener noreferrer">open a discussion on GitHub</a>.</p>]]></content:encoded>
            <category>community-updates</category>
        </item>
        <item>
            <title><![CDATA[Community Update #10]]></title>
            <link>https://premake.github.io/blog/2021/11/21/community-update-10</link>
            <guid>https://premake.github.io/blog/2021/11/21/community-update-10</guid>
            <pubDate>Sun, 21 Nov 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[Premake 5.0-beta1! 🥳]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_LWe7" id="premake-50-beta1-">Premake 5.0-beta1! 🥳<a href="https://premake.github.io/blog/2021/11/21/community-update-10#premake-50-beta1-" class="hash-link" aria-label="Direct link to Premake 5.0-beta1! 🥳" title="Direct link to Premake 5.0-beta1! 🥳">​</a></h3>
<p>After one of the world's longest alpha cycles, Premake5 has finally entered beta! I don't know about you, but I definitely had a drink to celebrate. Might have been two, even. Probably.</p>
<p>As <a href="https://premake.github.io/blog/2021/08/01/community-update-9#the-path-to-50">previously discussed</a>, we've started the process of stabilizing 5.0 and shifting breaking changes over to the new v6.x branch. We've <a href="https://github.com/premake/premake-core/milestone/3" target="_blank" rel="noopener noreferrer">set up a milestone to track our progress</a> toward a stable 5.0 release, and this is the first step in working it down.</p>
<p>Most of the changes in the queue are under-the-hood: release automation, bootstrapping, and unit test fixes. The only potentially significant breaking change remaining is <a href="https://github.com/premake/premake-core/issues/1099" target="_blank" rel="noopener noreferrer">promoting the <code>gmake2</code> exporter</a>, which I will be prioritizing for the next beta. If you happen to still be using the older <code>gmake</code> exporter, please give <code>gmake2</code> a try and let us know if you encounter issues! Most fixes have been going to <code>gmake2</code> lately, so we expect your experience will be a good one.</p>
<p>{/* truncate */}</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="premake6">Premake6<a href="https://premake.github.io/blog/2021/11/21/community-update-10#premake6" class="hash-link" aria-label="Direct link to Premake6" title="Direct link to Premake6">​</a></h3>
<p>As of this morning, Premake6 is now "self-hosting" on Visual Studio, Make, and Xcode, meaning that it can generate its own project files, which can then be used to build Premake6. This is a big milestone, since we can now move past isolated unit tests and actually verify our changes with working builds on all three toolsets. All of Premake's core functionality is now fully online, and we're shifting our focus to prioritizing and porting individual features. Still lots of hardcoded settings and to-dos, but full speed ahead!</p>
<p><em>(Speaking of which: I know the pace is slow—definitely slower than I would like—but thanks to <a href="https://premake.github.io/blog/2021/11/21/community-update-10#our-sponsors">our backers</a> it’s steady progress. For a bunch of nights-and-weekends part-timers we’re doing alright.)</em></p>
<p>I'm currently taking a bug fix &amp; cleanup pass over what we have so far, and filling in gaps in the documentation to make sure we're not leaving too much debt behind. High priority next steps include rethinking how we abstract toolsets like GCC &amp; Clang, so we can push ahead implementing new features on top of those abstractions. And then implementing links and (...drum roll...) <em><a href="https://github.com/premake/premake-core/issues/1346" target="_blank" rel="noopener noreferrer">usages</a></em> (yes, really!) so we can start linking projects and their dependencies together.</p>
<p>Hat tip to <a href="https://github.com/nickclark2016" target="_blank" rel="noopener noreferrer">@nickclark2016</a> for tackling the new makefile exporter!</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="community-contributions">Community Contributions<a href="https://premake.github.io/blog/2021/11/21/community-update-10#community-contributions" class="hash-link" aria-label="Direct link to Community Contributions" title="Direct link to Community Contributions">​</a></h3>
<p>Yay open source development! 🎉 Big shout out to everyone who took the time to contribute this cycle.</p>
<ul>
<li><a href="https://github.com/premake/premake-core/pull/1629" target="_blank" rel="noopener noreferrer">#1629</a> Add support for macOS universal binary (<a href="https://github.com/sukiyaki" target="_blank" rel="noopener noreferrer">@tempura-sukiyaki</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1661" target="_blank" rel="noopener noreferrer">#1661</a> Add <code>frameworkdirs</code> support to gmake &amp; gmake2 with gcc/clang toolsets (<a href="https://github.com/depinxi" target="_blank" rel="noopener noreferrer">@depinxi</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1672" target="_blank" rel="noopener noreferrer">#1672</a> C# Symbol Premake → VS Mapping Changes (<a href="https://github.com/nickclark2016" target="_blank" rel="noopener noreferrer">@nickclark2016</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1680" target="_blank" rel="noopener noreferrer">#1680</a> Fix some build issues with mingw (<a href="https://github.com/Biswa96" target="_blank" rel="noopener noreferrer">@Biswa96</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1687" target="_blank" rel="noopener noreferrer">#1687</a> Update deprecated entry for newaction (<a href="https://github.com/Jarod42" target="_blank" rel="noopener noreferrer">@Jarod42</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1704" target="_blank" rel="noopener noreferrer">#1704</a> VS2022 Exporter (<a href="https://github.com/nickclark2016" target="_blank" rel="noopener noreferrer">@nickclark2016</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1710" target="_blank" rel="noopener noreferrer">#1710</a> Add support for SSE 4.2 (<a href="https://github.com/ActuallyaDeviloper" target="_blank" rel="noopener noreferrer">@ActuallyaDeviloper</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1712" target="_blank" rel="noopener noreferrer">#1712</a> Add OpenMP support for Visual Studio (<a href="https://github.com/rvw" target="_blank" rel="noopener noreferrer">@T-rvw</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1713" target="_blank" rel="noopener noreferrer">#1713</a> Upgrade docusaurus version to beta.6 (<a href="https://github.com/KyrietS" target="_blank" rel="noopener noreferrer">@KyrietS</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1715" target="_blank" rel="noopener noreferrer">#1715</a> Docs maintenance (<a href="https://github.com/KyrietS" target="_blank" rel="noopener noreferrer">@KyrietS</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1718" target="_blank" rel="noopener noreferrer">#1718</a> Deprecate <code>configuration()</code> (<a href="https://github.com/starkos" target="_blank" rel="noopener noreferrer">@starkos</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1720" target="_blank" rel="noopener noreferrer">#1720</a> Improve <code>justmycode</code> (<a href="https://github.com/rvw" target="_blank" rel="noopener noreferrer">@T-rvw</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1721" target="_blank" rel="noopener noreferrer">#1721</a> Add custom rules for Gmake2 &amp; Codelite (<a href="https://github.com/Jarod42" target="_blank" rel="noopener noreferrer">@Jarod42</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1723" target="_blank" rel="noopener noreferrer">#1723</a> Add configuration condition to VS csproj references ItemGroup (<a href="https://github.com/cicanci" target="_blank" rel="noopener noreferrer">@cicanci</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1726" target="_blank" rel="noopener noreferrer">#1726</a> Updated cdialect and cppdialect docs (<a href="https://github.com/LORgames" target="_blank" rel="noopener noreferrer">@LORgames</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1727" target="_blank" rel="noopener noreferrer">#1727</a> Updated architecture docs (<a href="https://github.com/LORgames" target="_blank" rel="noopener noreferrer">@LORgames</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1728" target="_blank" rel="noopener noreferrer">#1728</a> Add action to check for and generate missing documentation (<a href="https://github.com/LORgames" target="_blank" rel="noopener noreferrer">@LORgames</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1730" target="_blank" rel="noopener noreferrer">#1730</a> Added missing <code>compileas</code> values to docs (<a href="https://github.com/LORgames" target="_blank" rel="noopener noreferrer">@LORgames</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1734" target="_blank" rel="noopener noreferrer">#1734</a> Add VS 2022 bootstrapping support (<a href="https://github.com/afxw" target="_blank" rel="noopener noreferrer">@afxw</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1736" target="_blank" rel="noopener noreferrer">#1736</a> Update showcase to include Orx (<a href="https://github.com/sausagejohnson" target="_blank" rel="noopener noreferrer">@sausagejohnson</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1737" target="_blank" rel="noopener noreferrer">#1737</a> Change Visual Studio Version to 17 so sln is opened with VS2022 (<a href="https://github.com/simco50" target="_blank" rel="noopener noreferrer">@simco50</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1739" target="_blank" rel="noopener noreferrer">#1739</a> Fix #1628 failing macOS os.findlib() test (<a href="https://github.com/starkos" target="_blank" rel="noopener noreferrer">@starkos</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1744" target="_blank" rel="noopener noreferrer">#1744</a> Add check for missing values in documentation (<a href="https://github.com/LORgames" target="_blank" rel="noopener noreferrer">@LORgames</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1745" target="_blank" rel="noopener noreferrer">#1745</a> Adding documentation for module options (<a href="https://github.com/harnisch" target="_blank" rel="noopener noreferrer">@hannes-harnisch</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1749" target="_blank" rel="noopener noreferrer">#1749</a> Changed C++20 to emit C++20 instead of C++Latest in MSVC (<a href="https://github.com/nickclark2016" target="_blank" rel="noopener noreferrer">@nickclark2016</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1752" target="_blank" rel="noopener noreferrer">#1752</a> Added C17/GNU17 support to gmake/gmake2 exporters (<a href="https://github.com/nickclark2016" target="_blank" rel="noopener noreferrer">@nickclark2016</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1753" target="_blank" rel="noopener noreferrer">#1753</a> Update documentation link in README (<a href="https://github.com/nickclark2016" target="_blank" rel="noopener noreferrer">@nickclark2016</a>)</li>
</ul>
<p>Extra thanks to the unsung heroes not mentioned here who helped review pull requests, triage issues, and generally keep the machine humming.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="our-sponsors">Our Sponsors<a href="https://premake.github.io/blog/2021/11/21/community-update-10#our-sponsors" class="hash-link" aria-label="Direct link to Our Sponsors" title="Direct link to Our Sponsors">​</a></h3>
<div>
	<a href="https://opencollective.com/_fivem" target="_blank" rel="noopener noreferrer">
		<img decoding="async" loading="lazy" src="https://images.opencollective.com/_fivem/2f78b5f/logo/128.png" class="img_ev3q">
	</a>
</div>
<p>Which brings us at last to our regular <em>thank you</em> &amp; shout out to our premier sponsor <strong><a href="https://opencollective.com/_fivem" target="_blank" rel="noopener noreferrer">Cfx.re</a></strong> as well as all <a href="https://opencollective.com/premake#section-contributors" target="_blank" rel="noopener noreferrer">our monthly backers</a>—be sure to check out their work and support them back if you can!</p>
<p>I welcome questions, suggestions, and concerns. Message or DM me at <a href="https://twitter.com/premakeapp" target="_blank" rel="noopener noreferrer">@premakeapp</a>, email at <a href="mailto:starkos@industriousone.com" target="_blank" rel="noopener noreferrer">starkos@industriousone.com</a>, or <a href="https://github.com/premake/premake-core/discussions" target="_blank" rel="noopener noreferrer">open a discussion on GitHub</a>.</p>]]></content:encoded>
            <category>community-updates</category>
        </item>
        <item>
            <title><![CDATA[Community Update #9]]></title>
            <link>https://premake.github.io/blog/2021/08/01/community-update-9</link>
            <guid>https://premake.github.io/blog/2021/08/01/community-update-9</guid>
            <pubDate>Sun, 01 Aug 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[I can't believe we're already eight months into 2021, how did this happen.]]></description>
            <content:encoded><![CDATA[<p>I can't believe we're already eight months into 2021, how did this happen.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="branch-dont-backport">Branch, don't backport<a href="https://premake.github.io/blog/2021/08/01/community-update-9#branch-dont-backport" class="hash-link" aria-label="Direct link to Branch, don't backport" title="Direct link to Branch, don't backport">​</a></h3>
<p>In the last update, I asked for input on where the work going into <a href="https://github.com/starkos/premake-next" target="_blank" rel="noopener noreferrer">premake-next</a> should end up: branch a new 6.x major version, or backport the changes to 5.x? There was <a href="https://github.com/premake/premake-core/discussions/1616" target="_blank" rel="noopener noreferrer">solid consensus</a> that premake-next should be treated as a new major version, with v5 upgraded to a stable release for on-going support. Thanks to everyone who participated and offered feedback!</p>
<p>With that settled, I've archived the premake-next repository and moved all development to <a href="https://github.com/premake/premake-core/tree/6.x" target="_blank" rel="noopener noreferrer">a new 6.x branch on premake-core</a>. As of the next release, I'll be upgrading the status of 5.0 from alpha to beta, with the intention of making the first stable release shortly.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="the-path-to-50">The Path to 5.0<a href="https://premake.github.io/blog/2021/08/01/community-update-9#the-path-to-50" class="hash-link" aria-label="Direct link to The Path to 5.0" title="Direct link to The Path to 5.0">​</a></h3>
<p>Premake's perpetual alpha status <a href="https://github.com/premake/premake-core/issues/1536" target="_blank" rel="noopener noreferrer">causes confusion</a> and makes it <a href="https://github.com/premake/premake-core/issues/1423" target="_blank" rel="noopener noreferrer">difficult for some people to adopt</a>. We've been hanging on to that label in the hope we'd get a chance to overhaul the makefile and Xcode exporters. But now that we have a v6 branch it makes sense break things over there instead, and get v5 to a stable release sooner rather than later.</p>
<p>I've <a href="https://github.com/premake/premake-core/milestone/3" target="_blank" rel="noopener noreferrer">opened a 5.0 milestone</a> on the project and will be assigning a few issues to myself there. If you have a backward-compatibility breaking change that you feel must get in before 5.0 becomes stable, open or escalate an issue ASAP so we can get it on the roadmap. And as ever, we're all really busy, so any help getting this over the finish line is much appreciated!</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="premake6">Premake6<a href="https://premake.github.io/blog/2021/08/01/community-update-9#premake6" class="hash-link" aria-label="Direct link to Premake6" title="Direct link to Premake6">​</a></h3>
<p>In other news, Premake6 can now generate its own Visual Studio project files and bootstrap itself. That doesn't sound very impressive, but it does means that all of the under the hood stuff is now online and working as intended, and a full vertical slice has been completed. 🎉</p>
<p><a href="https://github.com/nickclark2016" target="_blank" rel="noopener noreferrer">@nickclark2016</a> has volunteered to begin looking into a new-and-improved makefile exporter, which frees me up to start looking at Xcode and improving the way we represent toolsets like Clang and GCC. The stable release of 5.0 is likely to take up all the air in the room for a bit, but hopefully I can report progress on those soon.</p>
<p>{/* truncate */}</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="community-contributions">Community Contributions<a href="https://premake.github.io/blog/2021/08/01/community-update-9#community-contributions" class="hash-link" aria-label="Direct link to Community Contributions" title="Direct link to Community Contributions">​</a></h3>
<p>The community keeps things rolling—many thanks to everyone listed here!</p>
<ul>
<li><a href="https://github.com/premake/premake-core/pull/1570" target="_blank" rel="noopener noreferrer">#1570</a> Initial C++20 module support for Visual Studio (<a href="https://github.com/hannes-harnisch" target="_blank" rel="noopener noreferrer">@hannes-harnisch</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1625" target="_blank" rel="noopener noreferrer">#1625</a> Remove "*ng" action deprecation and auto-fix (<a href="https://github.com/noresources" target="_blank" rel="noopener noreferrer">@noresources</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1635" target="_blank" rel="noopener noreferrer">#1635</a> Fix typo in Using Premake documentation (<a href="https://github.com/abhiss" target="_blank" rel="noopener noreferrer">@abhiss</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1638" target="_blank" rel="noopener noreferrer">#1638</a> Fix broken links in docs (<a href="https://github.com/KyrietS" target="_blank" rel="noopener noreferrer">@KyrietS</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1642" target="_blank" rel="noopener noreferrer">#1642</a> Fix spelling mistake (<a href="https://github.com/Troplo" target="_blank" rel="noopener noreferrer">@Troplo</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1644" target="_blank" rel="noopener noreferrer">#1644</a> Fix author name and update time on pages (<a href="https://github.com/KyrietS" target="_blank" rel="noopener noreferrer">@KyrietS</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1645" target="_blank" rel="noopener noreferrer">#1645</a> Add missing support for prebuildmessage/postbuildmessage for Codelite (<a href="https://github.com/Jarod42" target="_blank" rel="noopener noreferrer">@Jarod42</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1649" target="_blank" rel="noopener noreferrer">#1649</a> Fix curl header search path (<a href="https://github.com/depinxi" target="_blank" rel="noopener noreferrer">@depinxi</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1654" target="_blank" rel="noopener noreferrer">#1654</a> xcode4: Fix missing link of sibling project with custom targetextension (<a href="https://github.com/depinxi" target="_blank" rel="noopener noreferrer">@depinxi</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1655" target="_blank" rel="noopener noreferrer">#1655</a> Compiler Version support for Visual Studion 2017+ (<a href="https://github.com/nickclark2016" target="_blank" rel="noopener noreferrer">@nickclark2016</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1657" target="_blank" rel="noopener noreferrer">#1657</a> Renormalize line endings (<a href="https://github.com/nickclark2016" target="_blank" rel="noopener noreferrer">@nickclark2016</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1663" target="_blank" rel="noopener noreferrer">#1663</a> compilebuildoutputs make some comments obsolete (<a href="https://github.com/Jarod42" target="_blank" rel="noopener noreferrer">@Jarod42</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1668" target="_blank" rel="noopener noreferrer">#1668</a> Fix v6 bootstrapping from v5 (<a href="https://github.com/starkos" target="_blank" rel="noopener noreferrer">@starkos</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1673" target="_blank" rel="noopener noreferrer">#1673</a> Updated sidebar to include toolsversion link (<a href="https://github.com/nickclark2016" target="_blank" rel="noopener noreferrer">@nickclark2016</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1662" target="_blank" rel="noopener noreferrer">#1662</a> Handle buildcommand for Codelite (<a href="https://github.com/Jarod42" target="_blank" rel="noopener noreferrer">@Jarod42</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1658" target="_blank" rel="noopener noreferrer">#1658</a> Fix D module compiler output for visual studio (<a href="https://github.com/nickclark2016" target="_blank" rel="noopener noreferrer">@nickclark2016</a>)</li>
</ul>
<p>Additional gratitude and good wishes to everyone who helped review pull requests and triage issues this cycle. Projects like this don't work without you.</p>
<div>
	<a href="https://opencollective.com/_fivem" target="_blank" rel="noopener noreferrer">
		<img decoding="async" loading="lazy" src="https://images.opencollective.com/_fivem/2f78b5f/logo/128.png" class="img_ev3q">
	</a>
</div>
<p>A big shout out to our premier sponsor <strong><a href="https://opencollective.com/_fivem" target="_blank" rel="noopener noreferrer">Cfx.re</a></strong> and all <a href="https://opencollective.com/premake#section-contributors" target="_blank" rel="noopener noreferrer">our monthly backers</a>—be sure to check out their work and support them back if you can!</p>
<p>I welcome questions, suggestions, and concerns. Message or DM me at <a href="https://twitter.com/premakeapp" target="_blank" rel="noopener noreferrer">@premakeapp</a>, email at <a href="mailto:starkos@industriousone.com" target="_blank" rel="noopener noreferrer">starkos@industriousone.com</a>, or <a href="https://github.com/premake/premake-core/discussions" target="_blank" rel="noopener noreferrer">open a discussion on GitHub</a>.</p>]]></content:encoded>
            <category>community-updates</category>
        </item>
        <item>
            <title><![CDATA[Community Update #8]]></title>
            <link>https://premake.github.io/blog/2021/04/20/community-update-8</link>
            <guid>https://premake.github.io/blog/2021/04/20/community-update-8</guid>
            <pubDate>Tue, 20 Apr 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[Welcome Website!]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_LWe7" id="welcome-website">Welcome Website!<a href="https://premake.github.io/blog/2021/04/20/community-update-8#welcome-website" class="hash-link" aria-label="Direct link to Welcome Website!" title="Direct link to Welcome Website!">​</a></h3>
<p>The biggest update this cycle: a new and very much improved Premake website. Built with <a href="https://docusaurus.io/" target="_blank" rel="noopener noreferrer">Docusaurus</a>, the new site gives us better navigation and search, a place for news (with RSS!) and it sure looks a hell of a lot better than my "make a website in 20 minutes" version we were running before.</p>
<p>Many thanks to <a href="https://github.com/KyrietS" target="_blank" rel="noopener noreferrer">@KyrietS</a> for kicking off the process and the help with bootstrapping and content migration! 🙌</p>
<p>On the process side, this upgrade means that the <a href="https://github.com/premake/premake-core/tree/master/website/docs" target="_blank" rel="noopener noreferrer">documentation now lives with the code</a>. Anyone can contribute by submitting a pull request, and the docs can now be updated right alongside the code that implements the changes. I'm optimistic this will help us improve the accuracy and timeliness of the documentation.</p>
<p><em>(The GitHub wiki served us well in its time, and is still there for the historical record. But people tended to not keep it up to date with the code. Navigation and search wasn't as nice. And permissions were all-or-nothing; there was no great way to strike a balance between community edits and preventing spam and vandalism.)</em></p>
<p>Very happy about this.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="premake-v50-alpha16-released">Premake v5.0-alpha16 Released<a href="https://premake.github.io/blog/2021/04/20/community-update-8#premake-v50-alpha16-released" class="hash-link" aria-label="Direct link to Premake v5.0-alpha16 Released" title="Direct link to Premake v5.0-alpha16 Released">​</a></h3>
<p>I…did not realize how long it had been since there was a proper release. Pandemic and all that. I've corrected the matter: <a href="https://github.com/premake/premake-core/releases/tag/v5.0.0-alpha16" target="_blank" rel="noopener noreferrer">v5.0-alpha16 is now available</a>, with lots of good improvements. See the full changelog <a href="https://github.com/premake/premake-core/releases/tag/v5.0.0-alpha16" target="_blank" rel="noopener noreferrer">here</a>.</p>
<p>(By the way, if anyone out there has a knack for build automation I'd love to see these releases automated. Get in touch!)</p>
<p>{/* truncate */}</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="rfc-branch-or-backport">RFC: Branch or Backport<a href="https://premake.github.io/blog/2021/04/20/community-update-8#rfc-branch-or-backport" class="hash-link" aria-label="Direct link to RFC: Branch or Backport" title="Direct link to RFC: Branch or Backport">​</a></h3>
<p>I also finally sat down and <a href="https://github.com/premake/premake-core/discussions/1616" target="_blank" rel="noopener noreferrer">opened an RFC</a> to figure out what to do with the work going on over at <a href="https://github.com/starkos/premake-next" target="_blank" rel="noopener noreferrer">premake-next</a>: branch and push ahead to a v6, or backport the improvements into v5? I've gone back and forth on it but came down on the side of branching; now I'd love to hear what the community thinks. Join the discussion <a href="https://github.com/premake/premake-core/discussions/1616" target="_blank" rel="noopener noreferrer">here</a>.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="whats-next-for-next">What's Next for Next<a href="https://premake.github.io/blog/2021/04/20/community-update-8#whats-next-for-next" class="hash-link" aria-label="Direct link to What's Next for Next" title="Direct link to What's Next for Next">​</a></h3>
<p>While we're discussing, I'm hoping to get back to <a href="https://github.com/starkos/premake-next" target="_blank" rel="noopener noreferrer">premake-next</a>, finish up the first few build switches (defines, include directories, that kind of thing), and show them working for both project and file-level configurations, exported for Visual Studio.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="thanks-">Thanks 🙏<a href="https://premake.github.io/blog/2021/04/20/community-update-8#thanks-" class="hash-link" aria-label="Direct link to Thanks 🙏" title="Direct link to Thanks 🙏">​</a></h3>
<p>As I do but never do enough, many thanks to <a href="https://github.com/samsinsane" target="_blank" rel="noopener noreferrer">@samsinsane</a>, <a href="https://github.com/KyrietS" target="_blank" rel="noopener noreferrer">@KyrietS</a>, and <a href="https://github.com/premake/premake-core/pulls?q=is%3Apr+is%3Aclosed+sort%3Aupdated-desc" target="_blank" rel="noopener noreferrer">everyone who contributed code</a> and helped review PRs and issues this cycle.</p>
<p>Many thanks to <strong><a href="https://opencollective.com/_fivem#section-contributions" target="_blank" rel="noopener noreferrer">CitizenFX Collective</a></strong> and <strong><a href="https://opencollective.com/premake#section-contributors" target="_blank" rel="noopener noreferrer">all our monthly backers</a></strong> who allow me to work on Premake instead of shilling for client work. Couldn't be doing this without your generosity.</p>
<p>And as ever: I welcome questions, suggestions, and concerns. Message or DM me at <a href="https://twitter.com/premakeapp" target="_blank" rel="noopener noreferrer">@premakeapp</a>, email at <a href="mailto:starkos@industriousone.com" target="_blank" rel="noopener noreferrer">starkos@industriousone.com</a>, or <a href="https://github.com/premake/premake-core/discussions" target="_blank" rel="noopener noreferrer">open a discussion on GitHub</a>.</p>
<p>~st.</p>]]></content:encoded>
            <category>community-updates</category>
        </item>
        <item>
            <title><![CDATA[Community Update #7]]></title>
            <link>https://premake.github.io/blog/2021/02/24/community-update-7</link>
            <guid>https://premake.github.io/blog/2021/02/24/community-update-7</guid>
            <pubDate>Wed, 24 Feb 2021 00:00:00 GMT</pubDate>
            <description><![CDATA[A quick update this cycle so I can get right back to it: I managed to free up meaningful blocks of time for Premake in February—felt good!—and tackle files and removeFiles, support configuration and platform specific files, and get it all exporting to Visual Studio (…and bulldoze through the rabbit holes along the way). From the user-facing side not a big change, but a hefty commit just the same. The core platform is starting to feel reasonably complete.]]></description>
            <content:encoded><![CDATA[<p>A quick update this cycle so I can get right back to it: I managed to free up meaningful blocks of time for Premake in February—felt good!—and tackle <strong>files</strong> and <strong>removeFiles</strong>, support configuration and platform specific files, and get it all exporting to Visual Studio (…and bulldoze through the rabbit holes along the way). From the user-facing side not a big change, but <a href="https://github.com/starkos/premake-next/commit/f5cb8678a6cc2939faceacbb8143bd9a094709f6" target="_blank" rel="noopener noreferrer">a hefty commit</a> just the same. The core platform is starting to feel reasonably complete.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="whats-next">What's Next<a href="https://premake.github.io/blog/2021/02/24/community-update-7#whats-next" class="hash-link" aria-label="Direct link to What's Next" title="Direct link to What's Next">​</a></h3>
<ul>
<li>For real this time, first thing: step away from the code and open an RFC on merging the projects. I've never been great at that whole "stepping away from the code" thing but I'll do my very best.</li>
<li>Work with <a href="https://github.com/KyrietS" target="_blank" rel="noopener noreferrer">@KyrietS</a> to bring <a href="https://github.com/premake/premake-core/pull/1587" target="_blank" rel="noopener noreferrer">a new &amp; improved documentation system online</a>.</li>
</ul>
<p>Longer term: push to get the new code to the point where it can generate its own Visual Studio project files. I've actually done a good chunk of work on this, but wasn't quite able to bring it home this month. Then do the same with Xcode.</p>
<p>{/* truncate */}</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="meanwhile-in-v5">Meanwhile in V5<a href="https://premake.github.io/blog/2021/02/24/community-update-7#meanwhile-in-v5" class="hash-link" aria-label="Direct link to Meanwhile in V5" title="Direct link to Meanwhile in V5">​</a></h3>
<p>The community making the world a better place…</p>
<ul>
<li><a href="https://github.com/premake/premake-core/pull/1551" target="_blank" rel="noopener noreferrer">#1551</a> Add NetCore to CLR API (<a href="https://github.com/nickclark2016" target="_blank" rel="noopener noreferrer">@nickclark2016</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1554" target="_blank" rel="noopener noreferrer">#1554</a> [clang] Use <code>llvm-ar</code> linker when LTO flag is set (<a href="https://github.com/JoelLinn" target="_blank" rel="noopener noreferrer">@JoelLinn</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1552" target="_blank" rel="noopener noreferrer">#1552</a> Fix MSC LTO, runtime, subsystem (<a href="https://github.com/JoelLinn" target="_blank" rel="noopener noreferrer">@JoelLinn</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1560" target="_blank" rel="noopener noreferrer">#1560</a> Add newer shader versions (<a href="https://github.com/dpeter99" target="_blank" rel="noopener noreferrer">@dpeter99</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1562" target="_blank" rel="noopener noreferrer">#1562</a> Remove moduledownloader to avoid RCE (<a href="https://github.com/gibbed" target="_blank" rel="noopener noreferrer">@gibbed</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1564" target="_blank" rel="noopener noreferrer">#1564</a> Improve .NET version check to support net5.0+ (<a href="https://github.com/ClxS" target="_blank" rel="noopener noreferrer">@ClxS</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1565" target="_blank" rel="noopener noreferrer">#1565</a> Move AllowUnsafeBlocks to project level property (<a href="https://github.com/ClxS" target="_blank" rel="noopener noreferrer">@ClxS</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1566" target="_blank" rel="noopener noreferrer">#1566</a> Set execute bit on Bootstrap.bat (<a href="https://github.com/ratzlaff" target="_blank" rel="noopener noreferrer">@ratzlaff</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1571" target="_blank" rel="noopener noreferrer">#1571</a> Add useFullPaths for Visual Studio projects (<a href="https://github.com/public" target="_blank" rel="noopener noreferrer">@cos-public</a>)</li>
<li><a href="https://github.com/premake/premake-core/pull/1576" target="_blank" rel="noopener noreferrer">#1576</a> Mesh and amplification shader type for Visual Studio (<a href="https://github.com/pkurth" target="_blank" rel="noopener noreferrer">@pkurth</a>)</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="thanks">Thanks!<a href="https://premake.github.io/blog/2021/02/24/community-update-7#thanks" class="hash-link" aria-label="Direct link to Thanks!" title="Direct link to Thanks!">​</a></h3>
<p>Kudos and a call out to <strong><a href="https://github.com/samsinsane" target="_blank" rel="noopener noreferrer">@samsinsane</a></strong> and the contributors listed above, <strong><a href="https://opencollective.com/_fivem#section-contributions" target="_blank" rel="noopener noreferrer">CitizenFX Collective</a></strong> for their continued strong financial support, and to <a href="https://opencollective.com/premake#section-contributors" target="_blank" rel="noopener noreferrer">all of our monthly backers</a>! Be sure to check out their work and support them back if you can!</p>
<p>Lots of big changes happening—I welcome questions, suggestions, and concerns. Everything is up for discussion, from the feature set to the coding style. You can message or DM me at <a href="https://twitter.com/premakeapp" target="_blank" rel="noopener noreferrer">@premakeapp</a>, email at <a href="mailto:starkos@industriousone.com" target="_blank" rel="noopener noreferrer">starkos@industriousone.com</a>, or open an issue on <a href="https://github.com/starkos/premake-next" target="_blank" rel="noopener noreferrer">the premake-next GitHub project</a>.</p>
<p>~st.</p>]]></content:encoded>
            <category>community-updates</category>
        </item>
        <item>
            <title><![CDATA[Community Update #6]]></title>
            <link>https://premake.github.io/blog/2020/11/02/community-udpate-6</link>
            <guid>https://premake.github.io/blog/2020/11/02/community-udpate-6</guid>
            <pubDate>Mon, 02 Nov 2020 00:00:00 GMT</pubDate>
            <description><![CDATA[Enter the Exporters]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_LWe7" id="enter-the-exporters">Enter the Exporters<a href="https://premake.github.io/blog/2020/11/02/community-udpate-6#enter-the-exporters" class="hash-link" aria-label="Direct link to Enter the Exporters" title="Direct link to Enter the Exporters">​</a></h3>
<p>The focus for this cycle was getting an exporter—I settled on Visual Studio—up and running and able to generate a basic, mostly hardcoded workspace and project. More details below, but TL;DR:</p>
<ul>
<li>All of the core systems are now in play, with the exception of toolsets and token expansion (more on those below)</li>
<li>The <strong>workspace</strong>, <strong>project</strong>, <strong>location</strong>, and <strong>filename</strong> scripting APIs are implemented, as well as the ability to declare conditional configuration blocks</li>
<li>A very rudimentary Visual Studio exporter is now in place, with the ability to generate mostly hardcoded C/C++ solutions and projects at the specified locations and filenames</li>
</ul>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="whats-next-for-next">What's Next for Next<a href="https://premake.github.io/blog/2020/11/02/community-udpate-6#whats-next-for-next" class="hash-link" aria-label="Direct link to What's Next for Next" title="Direct link to What's Next for Next">​</a></h3>
<p>For those of you who are more interested in "is it done yet?" than "what's new?", here's my current thinking on what comes next:</p>
<ul>
<li>Decide if/how/when/where these improvements get merged (or not) with Premake5. I have some thoughts of course, and will be opening an RFC on the issue tracker shortly to gather feedback. I'l announce it on <a href="https://twitter.com/premakeapp" target="_blank" rel="noopener noreferrer">@premakeapp</a> when I do.</li>
<li>Get build configurations &amp; files online—be able to generate simple Visual Studio C/C++ projects with no extra switches or dependencies</li>
<li>Get Make and Xcode up to same level as Visual Studio—going to be some rewriting here as that code has seen a lot of wear and tear, and needs to be brought up to the latest code conventions</li>
<li>Decide on and build out the new solution for toolset adapters—I'll open an RFC on the issue tracker for this as well</li>
<li>Add <strong>kind, links,</strong> and the most important switches (e.g. <strong>includedirs, symbols, optimize</strong>)—be able to support the most common C/C++ builds</li>
</ul>
<p>Somewhere in there I should also backfill the documentation so people know what's working. All of this is subject to change and peer pressure, feedback welcome.</p>
<p>{/* truncate */}</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="whats-new">What's New<a href="https://premake.github.io/blog/2020/11/02/community-udpate-6#whats-new" class="hash-link" aria-label="Direct link to What's New" title="Direct link to What's New">​</a></h3>
<p>I'm doing my best to keep <a href="https://github.com/starkos/premake-next/blob/master/docs/Changes-Since-v5.md" target="_blank" rel="noopener noreferrer">an inventory of the major changes here</a>; let me know if you spot anything missing (and thanks to those who have already).</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="scoping-is-now-explicit">Scoping is now explicit<a href="https://premake.github.io/blog/2020/11/02/community-udpate-6#scoping-is-now-explicit" class="hash-link" aria-label="Direct link to Scoping is now explicit" title="Direct link to Scoping is now explicit">​</a></h4>
<p>Premake4/5's scoping rules have always been a big gotcha. Tough for newcomers, easy to break even for experienced users, and very difficult to debug. I'm proposing that scoping be made explicit using function callbacks. Here's what a simple Hello World script might look with the new approach (apologies again for the images; if OpenCollective's editor supports code blocks I haven't been able to find them yet).</p>
<div class="language-lua codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lua codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">workspace</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">'HelloWorld'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">function</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	</span><span class="token function" style="color:rgb(130, 170, 255)">configurations</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'Debug'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'Release'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	</span><span class="token function" style="color:rgb(130, 170, 255)">project</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">'HelloWorld'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">function</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">		kind </span><span class="token string" style="color:rgb(195, 232, 141)">'ConsoleApplication'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">		</span><span class="token function" style="color:rgb(130, 170, 255)">files</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'**.h'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'**.cpp'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">		</span><span class="token function" style="color:rgb(130, 170, 255)">when</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> configurations</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token string" style="color:rgb(195, 232, 141)">'Debug'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">function</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">			</span><span class="token function" style="color:rgb(130, 170, 255)">defines</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'DEBUG'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">			symbols </span><span class="token string" style="color:rgb(195, 232, 141)">'On'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">		</span><span class="token keyword" style="font-style:italic">end</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">		</span><span class="token function" style="color:rgb(130, 170, 255)">when</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> configurations</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token string" style="color:rgb(195, 232, 141)">'Release'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">function</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">			</span><span class="token function" style="color:rgb(130, 170, 255)">defines</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'NDEBUG'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">			optimize </span><span class="token string" style="color:rgb(195, 232, 141)">'On'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">		</span><span class="token keyword" style="font-style:italic">end</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	</span><span class="token keyword" style="font-style:italic">end</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">end</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><em>(Keep in mind, only <strong>workspace, project, location,</strong> and <strong>filename</strong> are implemented so far, the rest will be coming online ASAP. The name <strong>when()</strong> is a proposal, feedback welcome.)</em></p>
<p>Under the hood, the provided configuration functions are called immediately. Under the hood, that workspace() helper looks like:</p>
<div class="language-lua codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lua codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">function</span><span class="token plain"> </span><span class="token function" style="color:rgb(130, 170, 255)">workspace</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> fn</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	</span><span class="token function" style="color:rgb(130, 170, 255)">workspaces</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">name</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	</span><span class="token function" style="color:rgb(130, 170, 255)">when</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> workspaces </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> name </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">function</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">		</span><span class="token function" style="color:rgb(130, 170, 255)">baseDir</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token plain">_SCRIPT_DIR</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">		</span><span class="token function" style="color:rgb(130, 170, 255)">fn</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	</span><span class="token keyword" style="font-style:italic">end</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">end</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>…so things still work the same as in Premake5, but scopes are now clearly explicit, and the indentation actually makes real sense (and gets syntax-aware editor support.</p>
<p>The syntax is, unfortunately, noisy. Down the road I wouldn't be opposed to tweaking Premake's embedded Lua runtime to provide a simpler syntax.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="exporters-are-no-longer-version-specific">Exporters are no longer version specific<a href="https://premake.github.io/blog/2020/11/02/community-udpate-6#exporters-are-no-longer-version-specific" class="hash-link" aria-label="Direct link to Exporters are no longer version specific" title="Direct link to Exporters are no longer version specific">​</a></h4>
<p>The command to export a project for Visual Studio now looks like this:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain"># target the latest version of Visual Studio we support</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">premake6 vstudio</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"># target a specific version</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">premake6 vstudio=2017</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>As anyone working on the Visual Studio or Xcode exporters is well aware, tool vendors are no longer waiting for the next major release to add features and change project formats. While more work is needed, the new command line syntax at least opens up the possibility of doing something like…</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token plain">premake6 vstudio=14.0.25431.01</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>…which will allow us to support people who need to target a specific build of one of these tools.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="container-hierarchy-is-now-more-flexible">Container hierarchy is now more flexible<a href="https://premake.github.io/blog/2020/11/02/community-udpate-6#container-hierarchy-is-now-more-flexible" class="hash-link" aria-label="Direct link to Container hierarchy is now more flexible" title="Direct link to Container hierarchy is now more flexible">​</a></h4>
<p>In Premake4+, projects were required to be declared within one and only one workspace; this is now loosened up. The earlier Hello, World example could also be written like:</p>
<div class="language-lua codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lua codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">workspaces</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'HelloWorld'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">projects</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'HelloWorld'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">when</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'workspaces:HelloWorld'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token keyword" style="font-style:italic">function</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	</span><span class="token function" style="color:rgb(130, 170, 255)">projects</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'HelloWorld'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">end</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p>Projects can be shared between workspaces, or even be completely standalone, if the target toolset supports it.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="whats-next">What's next<a href="https://premake.github.io/blog/2020/11/02/community-udpate-6#whats-next" class="hash-link" aria-label="Direct link to What's next" title="Direct link to What's next">​</a></h3>
<p>I covered this above, but an RFC to coordinate v5 vs. vNext development is currently next on my to-do list.</p>
<p>These are big changes and I welcome questions, suggestions, and concerns. Everything is up for discussion, from the feature set, to the coding style. You can message or DM me at <a href="https://twitter.com/premakeapp" target="_blank" rel="noopener noreferrer">@premakeapp</a>, email at <strong><a href="mailto:starkos@industriousone.com" target="_blank" rel="noopener noreferrer">starkos@industriousone.com</a></strong>, or open an issue on <a href="https://github.com/starkos/premake-next" target="_blank" rel="noopener noreferrer">the premake-next GitHub project</a>.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="thanks-to-our-supporters-">Thanks to our supporters! 🎉<a href="https://premake.github.io/blog/2020/11/02/community-udpate-6#thanks-to-our-supporters-" class="hash-link" aria-label="Direct link to Thanks to our supporters! 🎉" title="Direct link to Thanks to our supporters! 🎉">​</a></h3>
<p>Many thanks to my co-maintainer <a href="https://github.com/samsinsane" target="_blank" rel="noopener noreferrer">@samsinsane</a>, who has been doing a stellar job of keeping the shop running while I've been distracted with the new code, and to <a href="https://github.com/nickclark2016" target="_blank" rel="noopener noreferrer">@nickclark2016</a>, <a href="https://github.com/noresources" target="_blank" rel="noopener noreferrer">@noresources</a>, <a href="https://github.com/nickgravelyn" target="_blank" rel="noopener noreferrer">@nickgravelyn</a>, <a href="https://github.com/Jarod42" target="_blank" rel="noopener noreferrer">@Jarod42</a>, and <a href="https://github.com/cos-public" target="_blank" rel="noopener noreferrer">@cos-public</a> for helping out with issues and new pull requests—very much appreciated!</p>
<p>And another big shout out to <strong><a href="https://opencollective.com/_fivem#section-contributions" target="_blank" rel="noopener noreferrer">CitizenFX Collective</a></strong> for their continued strong financial support—as well as [all of our monthly backers](<a href="https://opencollective.com/premake#section-contributors" target="_blank" rel="noopener noreferrer">https://opencollective.com/premake#section-contributors</a>!</p>
<p>Doing my best to get this new version fully up to speed ASAP for all of you.</p>
<p>~st.</p>]]></content:encoded>
            <category>community-updates</category>
        </item>
        <item>
            <title><![CDATA[Community Update #5]]></title>
            <link>https://premake.github.io/blog/2020/08/04/community-update-5</link>
            <guid>https://premake.github.io/blog/2020/08/04/community-update-5</guid>
            <pubDate>Tue, 04 Aug 2020 00:00:00 GMT</pubDate>
            <description><![CDATA[The new storage system has arrived]]></description>
            <content:encoded><![CDATA[<h3 class="anchor anchorWithStickyNavbar_LWe7" id="the-new-storage-system-has-arrived">The new storage system has arrived<a href="https://premake.github.io/blog/2020/08/04/community-update-5#the-new-storage-system-has-arrived" class="hash-link" aria-label="Direct link to The new storage system has arrived" title="Direct link to The new storage system has arrived">​</a></h3>
<p>I am happy to be able to say that I've wrapped up the first round of development on <a href="https://github.com/starkos/premake-next/tree/master/core/modules/store" target="_blank" rel="noopener noreferrer">the new storage &amp; query system</a>. I threw <a href="https://github.com/starkos/premake-next/blob/master/core/modules/store/tests/test_query.lua" target="_blank" rel="noopener noreferrer">every edge case I could think of</a> at it and was able to, eventually, pass them all.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="whats-new-with-the-new-system">What's new with the new system?<a href="https://premake.github.io/blog/2020/08/04/community-update-5#whats-new-with-the-new-system" class="hash-link" aria-label="Direct link to What's new with the new system?" title="Direct link to What's new with the new system?">​</a></h3>
<p>Learning my lesson from past development, I did my best to make this new version as open-ended and unconstrained as possible.</p>
<p><strong>A proper API.</strong> The storage and query API have been cleaned up and condensed to make things easier and more powerful for module authors. (Sorry for the inline images, the OpenCollective editor won't allow me to author code blocks?)</p>
<p>{/* truncate */}</p>
<div class="language-lua codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lua codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">-- create a new query, targeting a particular "environment";</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">-- returns the global configuration for that environment</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">local</span><span class="token plain"> global </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> store</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token function" style="color:rgb(130, 170, 255)">query</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> system</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token string" style="color:rgb(195, 232, 141)">'windows'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> action</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token string" style="color:rgb(195, 232, 141)">'vs2019'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">-- from the global scope, get the configuration for a specific workspace</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">local</span><span class="token plain"> wks </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> global</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token function" style="color:rgb(130, 170, 255)">select</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> workspaces</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token string" style="color:rgb(195, 232, 141)">'Workspace1'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">-- from that workspace, get the configuration for a specific project</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">local</span><span class="token plain"> prj </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> wks</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token function" style="color:rgb(130, 170, 255)">select</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> projects</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token string" style="color:rgb(195, 232, 141)">'Project1'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><strong>No containers.</strong> Unlike the v5 system, there is no hardcoded "container" hierarchy. "Scopes" are arbitrary and defined by the query author, making new or ad hoc scopes trivial to implement.</p>
<div class="language-lua codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lua codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">-- configuration for Project1 common to all workspaces</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">local</span><span class="token plain"> prj1 </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> global</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token function" style="color:rgb(130, 170, 255)">select</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> projects</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token string" style="color:rgb(195, 232, 141)">'Project1'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">-- all DLL configuration</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">local</span><span class="token plain"> cfg </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> global</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token function" style="color:rgb(130, 170, 255)">select</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> kind</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token string" style="color:rgb(195, 232, 141)">'SharedLib'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><strong>Fine-grained inheritance.</strong> Inheritance in v5 was baked into the system and difficult to modify or work around. The new system allows inheritance to be enabled (or not) between any "scopes", or even on a per-fetch basis.</p>
<div class="language-lua codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lua codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">-- this project inherits values from the workspace</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">local</span><span class="token plain"> prj1 </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> wks</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token function" style="color:rgb(130, 170, 255)">select</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> projects</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token string" style="color:rgb(195, 232, 141)">'Project1'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token function" style="color:rgb(130, 170, 255)">inheritValues</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">-- this project does not inherit workspace values</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">local</span><span class="token plain"> prj2 </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> wks</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token function" style="color:rgb(130, 170, 255)">select</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> projects</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token string" style="color:rgb(195, 232, 141)">'Project2'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">-- inheritance can then be enabled for a particular fetch</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">prj2</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token function" style="color:rgb(130, 170, 255)">inheritValues</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token punctuation" style="color:rgb(199, 146, 234)">.</span><span class="token function" style="color:rgb(130, 170, 255)">fetch</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">'defines'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">-- get all configuration specific to the Win64 debug build, without</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">-- inheriting anything from the project. This was really difficult</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">-- to do in the previous system</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">local</span><span class="token plain"> files </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> prj2</span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token function" style="color:rgb(130, 170, 255)">select</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> platforms</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token string" style="color:rgb(195, 232, 141)">'Win64'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> configurations</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token string" style="color:rgb(195, 232, 141)">'Debug'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><strong>No more file configurations.</strong> This one pleases me greatly: file-level configuration is now no different than anything else. This will make it much easier to implement per-file configuration settings going forward.</p>
<div class="language-lua codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lua codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token keyword" style="font-style:italic">local</span><span class="token plain"> file </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> prj</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token function" style="color:rgb(130, 170, 255)">select</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> files</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token string" style="color:rgb(195, 232, 141)">'Hello.cpp'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">local</span><span class="token plain"> fileCfg </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> file</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token function" style="color:rgb(130, 170, 255)">select</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> configurations</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token string" style="color:rgb(195, 232, 141)">'Debug'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token keyword" style="font-style:italic">local</span><span class="token plain"> fileDefines </span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token plain"> fileCfg</span><span class="token punctuation" style="color:rgb(199, 146, 234)">:</span><span class="token function" style="color:rgb(130, 170, 255)">fetch</span><span class="token punctuation" style="color:rgb(199, 146, 234)">(</span><span class="token string" style="color:rgb(195, 232, 141)">'defines'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">)</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><strong>No "magic" fields.</strong> In v5, certain fields received special processing to enable out-of-order evaluation for situations like the one shown below. This worked for most projects, but not for everyone, and it added extra processing and overhead. The new system is able to handle situations like these as a general case, with no workarounds.</p>
<div class="language-lua codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lua codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">filter</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> kind</span><span class="token operator" style="color:rgb(137, 221, 255)">=</span><span class="token string" style="color:rgb(195, 232, 141)">'SharedLib'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain">  </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">-- don't yet know what `kind` will be</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	defines </span><span class="token string" style="color:rgb(195, 232, 141)">'DLL_EXPORT'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">project </span><span class="token string" style="color:rgb(195, 232, 141)">'Project1'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	kind </span><span class="token string" style="color:rgb(195, 232, 141)">'SharedLib'</span><span class="token plain">   </span><span class="token comment" style="color:rgb(105, 112, 152);font-style:italic">-- need to go back and get that earlier define</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<p><strong>Reduced configuration constraints.</strong> It now possible to share projects between workspaces, just as you would any other configuration. Containers which previously required the use of special APIs now work like any other field. Using the v5 scripting syntax (which isn't implemented in the new version), that means you can do things like:</p>
<div class="language-lua codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#bfc7d5;--prism-background-color:#292d3e"><div class="codeBlockContent_biex"><pre tabindex="0" class="prism-code language-lua codeBlock_bY9V thin-scrollbar" style="color:#bfc7d5;background-color:#292d3e"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#bfc7d5"><span class="token function" style="color:rgb(130, 170, 255)">workspaces</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'Workspace1'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'Workspace2'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">projects</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'Project1'</span><span class="token punctuation" style="color:rgb(199, 146, 234)">,</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'Project2'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain" style="display:inline-block"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain"></span><span class="token function" style="color:rgb(130, 170, 255)">filter</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'workspaces:Workspace*'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#bfc7d5"><span class="token plain">	</span><span class="token function" style="color:rgb(130, 170, 255)">projects</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">{</span><span class="token plain"> </span><span class="token string" style="color:rgb(195, 232, 141)">'Project1'</span><span class="token plain"> </span><span class="token punctuation" style="color:rgb(199, 146, 234)">}</span><br></span></code></pre><div class="buttonGroup__atx"><button type="button" aria-label="Copy code to clipboard" title="Copy" class="clean-btn"><span class="copyButtonIcons_eSgA" aria-hidden="true"><svg viewBox="0 0 24 24" class="copyButtonIcon_y97N"><path fill="currentColor" d="M19,21H8V7H19M19,5H8A2,2 0 0,0 6,7V21A2,2 0 0,0 8,23H19A2,2 0 0,0 21,21V7A2,2 0 0,0 19,5M16,1H4A2,2 0 0,0 2,3V17H4V3H16V1Z"></path></svg><svg viewBox="0 0 24 24" class="copyButtonSuccessIcon_LjdS"><path fill="currentColor" d="M21,7L9,19L3.5,13.5L4.91,12.09L9,16.17L19.59,5.59L21,7Z"></path></svg></span></button></div></div></div>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="on-performance">On performance<a href="https://premake.github.io/blog/2020/08/04/community-update-5#on-performance" class="hash-link" aria-label="Direct link to On performance" title="Direct link to On performance">​</a></h3>
<p>When I announced that I was working on a new system, several people were quick to raise performance as a critical concern. While it is too soon for performance testing—this is just the "keep it simple; make it work" version—I have tried to design the overall approach for optimizability. The new system is simpler and "flatter", provides more opportunities for caching intermediate results, and should translate to C reasonably well. Once the new system has been proven fit for purpose and there are enough features in place to run a real world test I will loop back to complete those optimizations.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="next-steps">Next steps<a href="https://premake.github.io/blog/2020/08/04/community-update-5#next-steps" class="hash-link" aria-label="Direct link to Next steps" title="Direct link to Next steps">​</a></h3>
<p>All of these improvements and advances are academic until you can actually generate some output, so that's next on my list. In order to cut to the chase and get us to a "v5 vs. v6" decision as quickly as possible, without getting mired in all of the complexities of targeting a specific toolset, I'm planning to build a JSON export module over the new code. (This is something I've wanted in the past to assist with tooling, automation and visualization anyway.) That should allow me to quickly build out the scaffolding and APIs required by all exporters, as well as provide a good testbed for bringing the remaining features online as we move ahead. Feedback on that approach, or alternative suggestions, are welcome.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="v5-vs-v6">v5 vs. v6<a href="https://premake.github.io/blog/2020/08/04/community-update-5#v5-vs-v6" class="hash-link" aria-label="Direct link to v5 vs. v6" title="Direct link to v5 vs. v6">​</a></h3>
<p>It's my hope that with an exporter in place folks will have enough to see and touch to consider where things go next. Do we backport the new code to v5 and rework all of the existing actions, potentially breaking existing projects? Or do we flip the bit on v5, mark it "stable", and push ahead with a v6 instead? (I have an opinion, but keeping an open mind.) When the time comes I'll open an RFC issue on GitHub so everyone can have their say on the matter.</p>
<h3 class="anchor anchorWithStickyNavbar_LWe7" id="feedback-is-welcome-and-appreciated">Feedback is welcome and appreciated!<a href="https://premake.github.io/blog/2020/08/04/community-update-5#feedback-is-welcome-and-appreciated" class="hash-link" aria-label="Direct link to Feedback is welcome and appreciated!" title="Direct link to Feedback is welcome and appreciated!">​</a></h3>
<p>These are big changes and I welcome questions, suggestions, and concerns. Everything is up for discussion, from the feature set, to the coding style. You can message or DM me at <a href="https://twitter.com/premakeapp" target="_blank" rel="noopener noreferrer">@premakeapp</a>, email at <strong><a href="mailto:starkos@industriousone.com" target="_blank" rel="noopener noreferrer">starkos@industriousone.com</a></strong>, or open an issue on <a href="https://github.com/starkos/premake-next" target="_blank" rel="noopener noreferrer">the premake-next GitHub project</a>.</p>
<p>And as we do: a shout out to <strong><a href="https://opencollective.com/_fivem" target="_blank" rel="noopener noreferrer">CitizenFX Collective</a></strong> and <strong><a href="https://opencollective.com/industriousone" target="_blank" rel="noopener noreferrer">Industrious One</a></strong> and <strong><a href="https://opencollective.com/premake#section-contributors" target="_blank" rel="noopener noreferrer">everyone else</a></strong> who has helped back us so far. Getting this new system shipped crosses a big dependency off the to-do list, and I'm not sure it ever would have seen the light of day without your help. Many and sincere thanks to all of you! 🙌</p>
<p>~st.</p>]]></content:encoded>
            <category>community-updates</category>
        </item>
        <item>
            <title><![CDATA[Community Update #4]]></title>
            <link>https://premake.github.io/blog/2020/04/07/community-update-4</link>
            <guid>https://premake.github.io/blog/2020/04/07/community-update-4</guid>
            <pubDate>Tue, 07 Apr 2020 00:00:00 GMT</pubDate>
            <description><![CDATA[It's been much longer than anticipated since the last community update. I was out of the country for a bit, and then shortly after my return the whole Situation hit the fan and things got crazy for a while. I'm back now, up and running and looking ahead to what's next. I hope all of you are also safe and sound and getting your groove back.]]></description>
            <content:encoded><![CDATA[<p>It's been much longer than anticipated since the last community update. I was out of the country for a bit, and then shortly after my return the whole Situation hit the fan and things got crazy for a while. I'm back now, up and running and looking ahead to what's next. I hope all of you are also safe and sound and getting your groove back.</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="inbox-zero">Inbox Zero<a href="https://premake.github.io/blog/2020/04/07/community-update-4#inbox-zero" class="hash-link" aria-label="Direct link to Inbox Zero" title="Direct link to Inbox Zero">​</a></h4>
<p>Rather than diving right back into <a href="https://github.com/starkos/premake-next" target="_blank" rel="noopener noreferrer">premake-next</a>, it felt best to take a turn clearing out the lingering pull requests that have been haunting our queue, in some cases for years now. <a href="https://github.com/samsinsane" target="_blank" rel="noopener noreferrer">@saminsane</a> has been doing a fantastic job triaging your new PRs and getting them merged; I just had to deal with the older ones which, for various reasons, couldn't easily be landed.</p>
<p>Long story short: after several years, we're at <a href="https://twitter.com/premakeapp/status/1250780905016303616" target="_blank" rel="noopener noreferrer">inbox zero</a>. Check out <a href="https://github.com/premake/premake-core/issues?q=is%3Aissue+is%3Aopen+sort%3Aupdated-desc" target="_blank" rel="noopener noreferrer">Premake's recently closed PR list</a> for the details on how we got there.</p>
<p>Whew!</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="alpha-15">Alpha-15<a href="https://premake.github.io/blog/2020/04/07/community-update-4#alpha-15" class="hash-link" aria-label="Direct link to Alpha-15" title="Direct link to Alpha-15">​</a></h4>
<p>With inbox zero reached, we also cut <a href="https://github.com/premake/premake-core/releases/tag/v5.0.0-alpha15" target="_blank" rel="noopener noreferrer">a new 5.0 alpha release</a> with over 50 changes and fixes, from over 20 different contributors. Nicely done everyone, and thanks! 🙌</p>
<p>{/* truncate */}</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="premake5-stable">Premake5 Stable?<a href="https://premake.github.io/blog/2020/04/07/community-update-4#premake5-stable" class="hash-link" aria-label="Direct link to Premake5 Stable?" title="Direct link to Premake5 Stable?">​</a></h4>
<p>Speaking of changes and releases, <a href="https://github.com/premake/premake-core/issues/1423" target="_blank" rel="noopener noreferrer">#1423</a> from <a href="https://github.com/dvzrv" target="_blank" rel="noopener noreferrer">@dvzrz</a> asks whether it's (finally) time to cut a stable release of Premake5. Fair question! As I responded on the issue, <a href="https://github.com/samsinsane" target="_blank" rel="noopener noreferrer">@saminsane</a> and I have discussed this before, and our general feeling is that there are too many big, breaking changes that still need to be made.</p>
<blockquote>
<p>Gmake/Gmake2 situation needs to be sorted, the Xcode exporter needs to be made fit for use, both Gmake &amp; Xcode need to be made module-friendly, and the toolset abstractions need to be reworked to support more real-world setups. The internal APIs really should be cleaned up and naming conventions standardized for module developers.</p>
</blockquote>
<p>Help tackling those areas is, of course, very welcome.</p>
<p>That said…</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="back-to-next">Back to Next<a href="https://premake.github.io/blog/2020/04/07/community-update-4#back-to-next" class="hash-link" aria-label="Direct link to Back to Next" title="Direct link to Back to Next">​</a></h4>
<p>With the PRs cleared and a new alpha released, I'm now turning my attention back to <a href="https://github.com/starkos/premake-next" target="_blank" rel="noopener noreferrer">premake-next</a>. I'm going to adjust the plan a bit and focus on getting the new storage and query systems online ASAP. Fixing these two systems is the point of whole exercise, and it seems worth getting more eyes on them sooner than later, even if the configuration blocks have to be manually assembled (i.e. the convenience functions like workspace(), project(), defines(), files(), etc. won't be there yet…it will make sense when you see it).</p>
<h4 class="anchor anchorWithStickyNavbar_LWe7" id="so-long-and-thanks-for-all-the-fish">So long and thanks for all the fish<a href="https://premake.github.io/blog/2020/04/07/community-update-4#so-long-and-thanks-for-all-the-fish" class="hash-link" aria-label="Direct link to So long and thanks for all the fish" title="Direct link to So long and thanks for all the fish">​</a></h4>
<p>As ever, big and many thanks to everyone who contributed to alpha-15, and to everyone who continues to support <a href="https://opencollective.com/premake" target="_blank" rel="noopener noreferrer">the Premake OpenCollective</a>, with an extra special 🎉 to new sponsors <a href="https://opencollective.com/emilio-lopez" target="_blank" rel="noopener noreferrer">Emilio Lopez</a> and <a href="https://opencollective.com/benjamin-schlotter" target="_blank" rel="noopener noreferrer">Benjamin Schlotter</a>, and our stalwart benefactor <strong><a href="https://opencollective.com/_fivem" target="_blank" rel="noopener noreferrer">CitizenFX Collective</a></strong>. I wouldn't be able to get any of this done without your help, and I truly appreciate it.</p>
<p>Stay safe!</p>
<p>~st.</p>
<p>(Your feedback is welcome and appreciated—come find us at <a href="https://github.com/premake" target="_blank" rel="noopener noreferrer">github.com/premake</a> or <a href="https://twitter.com/premakeapp" target="_blank" rel="noopener noreferrer">@premakeapp</a>.)</p>]]></content:encoded>
            <category>community-updates</category>
        </item>
        <item>
            <title><![CDATA[Community Update #3]]></title>
            <link>https://premake.github.io/blog/2020/01/08/community-update-3</link>
            <guid>https://premake.github.io/blog/2020/01/08/community-update-3</guid>
            <pubDate>Wed, 08 Jan 2020 00:00:00 GMT</pubDate>
            <description><![CDATA[Just a quick update this time: I had big plans for new features this cycle, but ended up getting swamped in end-of-year deadlines, and was only able to deliver a small portion of what I had intended (and late, at that). Still, I did manage a quick port-and-polish of the unit testing module and all of its dependencies, so I'm well positioned to begin the new user scripting API work in earnest. I will be on the road a fair bit over the next quarter, but I'm still optimistic that I can get enough of the new system online to give folks a sense of where things are headed.]]></description>
            <content:encoded><![CDATA[<p>Just a quick update this time: I had big plans for new features this cycle, but ended up getting swamped in end-of-year deadlines, and was only able to deliver a small portion of what I had intended (and late, at that). Still, I did manage a quick port-and-polish of the unit testing module and all of its dependencies, so I'm well positioned to begin the new user scripting API work in earnest. I will be on the road a fair bit over the next quarter, but I'm still optimistic that I can get enough of the new system online to give folks a sense of where things are headed.</p>
<p>If you haven't been following along, you can see what I've been up to, and why, over at <a href="https://github.com/starkos/premake-next" target="_blank" rel="noopener noreferrer">my premake-next repository on GitHub</a>. I'm also posting regular updates here, as well as at <a href="https://twitter.com/premakeapp" target="_blank" rel="noopener noreferrer">@premakeapp</a>.</p>
<p>Many thanks to <strong><a href="https://opencollective.com/_fivem" target="_blank" rel="noopener noreferrer">CitizenFX Collective</a></strong> and <strong><a href="https://opencollective.com/industriousone" target="_blank" rel="noopener noreferrer">Industrious One</a></strong>, and to new contributors <strong><a href="https://opencollective.com/renaud-guillard" target="_blank" rel="noopener noreferrer">Renaud Guillard</a>, <a href="https://opencollective.com/wracky" target="_blank" rel="noopener noreferrer">Wracky</a>,</strong> and <strong><a href="https://opencollective.com/micha-titulaer" target="_blank" rel="noopener noreferrer">MiCroN3000</a></strong>. Your generous support makes this possible, and is very much appreciated! 🎉</p>
<p>~st.</p>
<p>(Your feedback is welcome and appreciated—come find us at <a href="https://github.com/premake" target="_blank" rel="noopener noreferrer">github.com/premake</a> or <a href="https://twitter.com/premakeapp" target="_blank" rel="noopener noreferrer">@premakeapp</a>.)</p>
<p>{/* truncate */}</p>]]></content:encoded>
            <category>community-updates</category>
        </item>
        <item>
            <title><![CDATA[Community Update #2]]></title>
            <link>https://premake.github.io/blog/2019/10/23/ community-update-2</link>
            <guid>https://premake.github.io/blog/2019/10/23/ community-update-2</guid>
            <pubDate>Wed, 23 Oct 2019 00:00:00 GMT</pubDate>
            <description><![CDATA[For this cycle (I work in eight-week cycles and fill in as much Premake work as I can), I completed a long overdue pruning of the pull request backlog. Working up from the oldest, I was able to get it down to just four, all in striking distance of merging and just needing a little follow-up (assistance welcome!). I'll drop a list of all the PRs that were moved at the bottom of this update. Because…]]></description>
            <content:encoded><![CDATA[<p>For this cycle (I work in eight-week cycles and fill in as much Premake work as I can), I completed a long overdue pruning of <a href="https://github.com/starkos/premake-next/pulls" target="_blank" rel="noopener noreferrer">the pull request backlog</a>. Working up from the oldest, I was able to get it down to just four, all in striking distance of merging and just needing a little follow-up (assistance welcome!). I'll drop a list of all the PRs that were moved at the bottom of this update. Because…</p>
<p>…more importantly, while I have this opportunity to log solid blocks of time to Premake (<a href="https://opencollective.com/premake#section-contributors" target="_blank" rel="noopener noreferrer">thank you!</a>), I'm taking on its biggest weakness: the project configuration system, the heart of the program that stores your scripted project settings and serves them back to the exporters and actions. The shortcomings in this system are the reason why it's so difficult to support per-file configurations, why we struggle to express makefiles succinctly, and why we can't do a better job of scaling up to large numbers of platforms/architectures/toolsets/etc. Fixing this fixes many things.</p>
<p>To get this done in the most expedient way, and with the least disruption, I’ve <a href="https://github.com/starkos/premake-next" target="_blank" rel="noopener noreferrer">spun up a new working space at premake-next</a>. For those interested, you can read more about what I'm doing, why, and where it's all headed <a href="https://github.com/starkos/premake-next" target="_blank" rel="noopener noreferrer">over there</a>. And I’ll also continue posting regular updates <a href="https://opencollective.com/premake" target="_blank" rel="noopener noreferrer">here on the Collective</a>.</p>
<p>Which brings me to the part where I give a huge THANK YOU! to our continuing sponsors <strong><a href="https://opencollective.com/_fivem" target="_blank" rel="noopener noreferrer">CitizenFX Collective</a></strong> and <a href="https://opencollective.com/industriousone" target="_blank" rel="noopener noreferrer">Industrious One</a>. I would not be able to tackle any of this were it not for your continued support. 🙌</p>
<p>For the next cycle, I plan to start filling in the details of an improved configuration storage approach and, if possible, merge another <a href="https://github.com/premake/premake-core/pulls" target="_blank" rel="noopener noreferrer">pull request or two</a>.</p>
<p>~st.</p>
<p>{/* truncate */}</p>
<p><strong>Completed Tasks:</strong></p>
<ul>
<li>Boostrapped <a href="https://github.com/starkos/premake-next" target="_blank" rel="noopener noreferrer">Premake-next</a></li>
<li>Closed <a href="https://github.com/premake/premake-core/pull/1259" target="_blank" rel="noopener noreferrer">PR #1259</a> with <a href="https://github.com/premake/premake-core/pull/1355" target="_blank" rel="noopener noreferrer">PR #1355</a></li>
<li>Closed <a href="https://github.com/premake/premake-core/pull/1271" target="_blank" rel="noopener noreferrer">PR #1271</a> with <a href="https://github.com/premake/premake-core/pull/1356" target="_blank" rel="noopener noreferrer">PR #1356</a></li>
<li>Closed <a href="https://github.com/premake/premake-core/pull/1063" target="_blank" rel="noopener noreferrer">PR #1063</a> with <a href="https://github.com/premake/premake-core/pull/1357" target="_blank" rel="noopener noreferrer">PR #1357</a></li>
<li>Merged new PRs <a href="https://github.com/premake/premake-core/pull/1345" target="_blank" rel="noopener noreferrer">#1345</a>, <a href="https://github.com/premake/premake-core/pull/1351" target="_blank" rel="noopener noreferrer">1351</a>, <a href="https://github.com/premake/premake-core/pull/1352" target="_blank" rel="noopener noreferrer">1352</a>, <a href="https://github.com/premake/premake-core/pull/1353" target="_blank" rel="noopener noreferrer">1353</a>, <a href="https://github.com/premake/premake-core/pull/1358" target="_blank" rel="noopener noreferrer">1358</a></li>
<li>Closed <a href="https://github.com/premake/premake-core/issues/38" target="_blank" rel="noopener noreferrer">issue #38</a> and <a href="https://github.com/premake/premake-core/pull/624" target="_blank" rel="noopener noreferrer">PR #624</a> with <a href="https://github.com/premake/premake-core/issues/1344" target="_blank" rel="noopener noreferrer">feature request #1344</a></li>
<li>Closed <a href="https://github.com/premake/premake-core/issues/237" target="_blank" rel="noopener noreferrer">issue #237</a> and <a href="https://github.com/premake/premake-core/pull/956" target="_blank" rel="noopener noreferrer">PR #956</a> with <a href="https://github.com/premake/premake-core/issues/1346" target="_blank" rel="noopener noreferrer">feature request #1346</a></li>
<li>Closed stale PRs <a href="https://github.com/premake/premake-core/pull/968" target="_blank" rel="noopener noreferrer">#968</a>, <a href="https://github.com/premake/premake-core/pull/1003" target="_blank" rel="noopener noreferrer">1003</a>, <a href="https://github.com/premake/premake-core/pull/1054" target="_blank" rel="noopener noreferrer">1054</a>, <a href="https://github.com/premake/premake-core/pull/1112" target="_blank" rel="noopener noreferrer">1112</a>, <a href="https://github.com/premake/premake-core/pull/1119" target="_blank" rel="noopener noreferrer">1119</a>, <a href="https://github.com/premake/premake-core/pull/1196" target="_blank" rel="noopener noreferrer">1196</a>, <a href="https://github.com/premake/premake-core/pull/1252" target="_blank" rel="noopener noreferrer">1252</a>, <a href="https://github.com/premake/premake-core/pull/1301" target="_blank" rel="noopener noreferrer">1301</a></li>
<li>Added new "Get help" and "Ask a question" issue templates; improved "Report a bug" and "Request a feature" templates</li>
</ul>]]></content:encoded>
            <category>community-updates</category>
        </item>
        <item>
            <title><![CDATA[Community Update #1]]></title>
            <link>https://premake.github.io/blog/2019/08/31/community-update-1</link>
            <guid>https://premake.github.io/blog/2019/08/31/community-update-1</guid>
            <pubDate>Sat, 31 Aug 2019 00:00:00 GMT</pubDate>
            <description><![CDATA[Say hello to the new Premake OpenCollective!]]></description>
            <content:encoded><![CDATA[<p>Say hello to <a href="https://opencollective.com/premake" target="_blank" rel="noopener noreferrer">the new Premake OpenCollective</a>!</p>
<p>As I'm sure you are all too aware, Premake development has slowed to a trickle. I've been taking on more and more client work to keep the books balanced, and there simply isn't any useful time left over at the end of the day. A not uncommon problem!</p>
<p>So I'm trying an experiment: can we, as a community, create a pool of funding to speed up Premake's development? Is there enough interest to make it happen? If so, I would be delighted to transition hours from client work back to Premake, as well as put funds toward bounties and recognizing contributions from the community.</p>
<p>The experiment is now officially underway. As long as it continues, I'll provide regular updates on our progress and upcoming work. This cycle, I was able to…</p>
<ul>
<li>
<p>Set up <a href="https://opencollective.com/premake" target="_blank" rel="noopener noreferrer">this OpenCollective</a>, enabling the Premake project to accept contributions to fund on-going development and community support (<a href="https://github.com/premake/premake-core/pull/1314" target="_blank" rel="noopener noreferrer">#1314</a>, <a href="https://github.com/premake/premake-core/pull/1316" target="_blank" rel="noopener noreferrer">#1316</a>)</p>
</li>
<li>
<p>Register <a href="https://twitter.com/premakeapp" target="_blank" rel="noopener noreferrer">@premakeapp</a> on Twitter for announcements and group communication (and maybe a little self-promotion). Come join us! (<a href="https://github.com/premake/premake-core/pull/1315" target="_blank" rel="noopener noreferrer">#1315</a>)</p>
</li>
<li>
<p>Improve the project on-boarding experience with a new <a href="https://github.com/premake/premake-core/blob/master/README.md" target="_blank" rel="noopener noreferrer">README.md</a> and <a href="https://github.com/premake/premake-core/blob/master/CONTRIBUTING.md" target="_blank" rel="noopener noreferrer">CONTRIBUTING.md</a> (<a href="https://github.com/premake/premake-core/pull/1324" target="_blank" rel="noopener noreferrer">#1324</a>, <a href="https://github.com/premake/premake-core/pull/1325" target="_blank" rel="noopener noreferrer">#1325</a>)</p>
</li>
<li>
<p>Improve the collaboration process with new issue, feature, and pull request templates (<a href="https://github.com/premake/premake-core/pull/1326" target="_blank" rel="noopener noreferrer">#1326</a>, <a href="https://github.com/premake/premake-core/pull/1327" target="_blank" rel="noopener noreferrer">#1327</a>)</p>
</li>
</ul>
<p>{/* truncate */}</p>
<p>I'm not charging any expenses against the collective this cycle so we can build up a balance to recognize cool or important contributions from the community. You can track our finances and transactions at any time on <a href="https://opencollective.com/premake" target="_blank" rel="noopener noreferrer">our OpenCollective page</a>.</p>
<p>For the next cycle, I'd like to show a little maintainer love by working down (and ideally clearing) the <a href="https://github.com/premake/premake-core/pulls" target="_blank" rel="noopener noreferrer">open pull request queue</a> and, time permitting, do a bit of grooming on the <a href="https://github.com/premake/premake-core/issues" target="_blank" rel="noopener noreferrer">open issue list</a> as well. Longer term, I've put a great deal of time and thought into fixing Premake's core configuration engine, which is holding back development on a number of important features. I've figured out <a href="https://github.com/industriousone/premake-query" target="_blank" rel="noopener noreferrer">how it should work</a>; now I'm puzzling over <a href="https://github.com/starkos/premake-next" target="_blank" rel="noopener noreferrer">how to get there</a> from where we are.</p>
<p>Many thanks to <strong>[CitizenFX Collective](<a href="https://opencollective.com/_fivem" target="_blank" rel="noopener noreferrer">https://opencollective.com/_fivem</a>](<a href="https://opencollective.com/_fivem" target="_blank" rel="noopener noreferrer">https://opencollective.com/_fivem</a>)</strong> and <strong><a href="https://opencollective.com/industriousone" target="_blank" rel="noopener noreferrer">Industrious One</a></strong> for their generous support this cycle. Your contributions make this possible! 🎉</p>
<p>~st.</p>
<p><em>(Your feedback is welcome and appreciated—come find us at <a href="https://github.com/premake" target="_blank" rel="noopener noreferrer">github.com/premake</a> or <a href="https://twitter.com/premakeapp" target="_blank" rel="noopener noreferrer">@premakeapp</a>.)</em></p>]]></content:encoded>
            <category>community-updates</category>
        </item>
    </channel>
</rss>