Browse Source

Adding AtomicBuildInfo with additional build information (date, time, git hash, build name), potential fix for new OS X SDK

Josh Engebretson 9 years ago
parent
commit
5495d90e6c

+ 0 - 3
Build/CMake/Modules/AtomicCommon.cmake

@@ -27,9 +27,6 @@ add_definitions(-DATOMIC_CXX11=1)
 
 set (CMAKE_C_FLAGS_DEBUG "${CMAKE_C_FLAGS_DEBUG} -DATOMIC_DEBUG")
 set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -DATOMIC_DEBUG")
-
-set (ATOMIC_LINK_LIBRARIES ${ATOMIC_LINK_LIBRARIES} AtomicBuildInfo)
-
 if(CMAKE_SIZEOF_VOID_P MATCHES 8)
   set(ATOMIC_PROJECT_ARCH "x86_64")
   set(ATOMIC_64BIT 1)

+ 2 - 1
Build/CMake/Modules/AtomicDesktop.cmake

@@ -1,6 +1,8 @@
 
 include(AtomicCommon)
 
+set (ATOMIC_DESKTOP TRUE)
+
 include_directories(${CMAKE_SOURCE_DIR}/Source/ThirdParty/Poco/Foundation/include)
 
 add_definitions( -DATOMIC_PLATFORM_DESKTOP -DATOMIC_NAVIGATION -DATOMIC_TBUI -DATOMIC_FILEWATCHER -DPOCO_NO_AUTOMATIC_LIBS -DPOCO_STATIC )
@@ -32,4 +34,3 @@ if (EXISTS ${CMAKE_SOURCE_DIR}/Submodules/CEF)
     set(ATOMIC_WEBVIEW TRUE)
     add_definitions( -DATOMIC_WEBVIEW )
 endif()
-

+ 130 - 0
Build/CMake/Modules/GetGitRevisionDescription.cmake

@@ -0,0 +1,130 @@
+# - Returns a version string from Git
+#
+# These functions force a re-configure on each git commit so that you can
+# trust the values of the variables in your build system.
+#
+#  get_git_head_revision(<refspecvar> <hashvar> [<additional arguments to git describe> ...])
+#
+# Returns the refspec and sha hash of the current head revision
+#
+#  git_describe(<var> [<additional arguments to git describe> ...])
+#
+# Returns the results of git describe on the source tree, and adjusting
+# the output so that it tests false if an error occurs.
+#
+#  git_get_exact_tag(<var> [<additional arguments to git describe> ...])
+#
+# Returns the results of git describe --exact-match on the source tree,
+# and adjusting the output so that it tests false if there was no exact
+# matching tag.
+#
+# Requires CMake 2.6 or newer (uses the 'function' command)
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <[email protected]> <[email protected]>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+if(__get_git_revision_description)
+	return()
+endif()
+set(__get_git_revision_description YES)
+
+# We must run the following at "include" time, not at function call time,
+# to find the path to this module rather than the path to a calling list file
+get_filename_component(_gitdescmoddir ${CMAKE_CURRENT_LIST_FILE} PATH)
+
+function(get_git_head_revision _refspecvar _hashvar)
+	set(GIT_PARENT_DIR "${CMAKE_CURRENT_SOURCE_DIR}")
+	set(GIT_DIR "${GIT_PARENT_DIR}/.git")
+	while(NOT EXISTS "${GIT_DIR}")	# .git dir not found, search parent directories
+		set(GIT_PREVIOUS_PARENT "${GIT_PARENT_DIR}")
+		get_filename_component(GIT_PARENT_DIR ${GIT_PARENT_DIR} PATH)
+		if(GIT_PARENT_DIR STREQUAL GIT_PREVIOUS_PARENT)
+			# We have reached the root directory, we are not in git
+			set(${_refspecvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
+			set(${_hashvar} "GITDIR-NOTFOUND" PARENT_SCOPE)
+			return()
+		endif()
+		set(GIT_DIR "${GIT_PARENT_DIR}/.git")
+	endwhile()
+	# check if this is a submodule
+	if(NOT IS_DIRECTORY ${GIT_DIR})
+		file(READ ${GIT_DIR} submodule)
+		string(REGEX REPLACE "gitdir: (.*)\n$" "\\1" GIT_DIR_RELATIVE ${submodule})
+		get_filename_component(SUBMODULE_DIR ${GIT_DIR} PATH)
+		get_filename_component(GIT_DIR ${SUBMODULE_DIR}/${GIT_DIR_RELATIVE} ABSOLUTE)
+	endif()
+	set(GIT_DATA "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/git-data")
+	if(NOT EXISTS "${GIT_DATA}")
+		file(MAKE_DIRECTORY "${GIT_DATA}")
+	endif()
+
+	if(NOT EXISTS "${GIT_DIR}/HEAD")
+		return()
+	endif()
+	set(HEAD_FILE "${GIT_DATA}/HEAD")
+	configure_file("${GIT_DIR}/HEAD" "${HEAD_FILE}" COPYONLY)
+
+	configure_file("${_gitdescmoddir}/GetGitRevisionDescription.cmake.in"
+		"${GIT_DATA}/grabRef.cmake"
+		@ONLY)
+	include("${GIT_DATA}/grabRef.cmake")
+
+	set(${_refspecvar} "${HEAD_REF}" PARENT_SCOPE)
+	set(${_hashvar} "${HEAD_HASH}" PARENT_SCOPE)
+endfunction()
+
+function(git_describe _var)
+	if(NOT GIT_FOUND)
+		find_package(Git QUIET)
+	endif()
+	get_git_head_revision(refspec hash)
+	if(NOT GIT_FOUND)
+		set(${_var} "GIT-NOTFOUND" PARENT_SCOPE)
+		return()
+	endif()
+	if(NOT hash)
+		set(${_var} "HEAD-HASH-NOTFOUND" PARENT_SCOPE)
+		return()
+	endif()
+
+	# TODO sanitize
+	#if((${ARGN}" MATCHES "&&") OR
+	#	(ARGN MATCHES "||") OR
+	#	(ARGN MATCHES "\\;"))
+	#	message("Please report the following error to the project!")
+	#	message(FATAL_ERROR "Looks like someone's doing something nefarious with git_describe! Passed arguments ${ARGN}")
+	#endif()
+
+	#message(STATUS "Arguments to execute_process: ${ARGN}")
+
+	execute_process(COMMAND
+		"${GIT_EXECUTABLE}"
+		describe
+		${hash}
+		${ARGN}
+		WORKING_DIRECTORY
+		"${CMAKE_CURRENT_SOURCE_DIR}"
+		RESULT_VARIABLE
+		res
+		OUTPUT_VARIABLE
+		out
+		ERROR_QUIET
+		OUTPUT_STRIP_TRAILING_WHITESPACE)
+	if(NOT res EQUAL 0)
+		set(out "${out}-${res}-NOTFOUND")
+	endif()
+
+	set(${_var} "${out}" PARENT_SCOPE)
+endfunction()
+
+function(git_get_exact_tag _var)
+	git_describe(out --exact-match ${ARGN})
+	set(${_var} "${out}" PARENT_SCOPE)
+endfunction()

+ 41 - 0
Build/CMake/Modules/GetGitRevisionDescription.cmake.in

@@ -0,0 +1,41 @@
+#
+# Internal file for GetGitRevisionDescription.cmake
+#
+# Requires CMake 2.6 or newer (uses the 'function' command)
+#
+# Original Author:
+# 2009-2010 Ryan Pavlik <[email protected]> <[email protected]>
+# http://academic.cleardefinition.com
+# Iowa State University HCI Graduate Program/VRAC
+#
+# Copyright Iowa State University 2009-2010.
+# Distributed under the Boost Software License, Version 1.0.
+# (See accompanying file LICENSE_1_0.txt or copy at
+# http://www.boost.org/LICENSE_1_0.txt)
+
+set(HEAD_HASH)
+
+file(READ "@HEAD_FILE@" HEAD_CONTENTS LIMIT 1024)
+
+string(STRIP "${HEAD_CONTENTS}" HEAD_CONTENTS)
+if(HEAD_CONTENTS MATCHES "ref")
+	# named branch
+	string(REPLACE "ref: " "" HEAD_REF "${HEAD_CONTENTS}")
+	if(EXISTS "@GIT_DIR@/${HEAD_REF}")
+		configure_file("@GIT_DIR@/${HEAD_REF}" "@GIT_DATA@/head-ref" COPYONLY)
+	else()
+		configure_file("@GIT_DIR@/packed-refs" "@GIT_DATA@/packed-refs" COPYONLY)
+		file(READ "@GIT_DATA@/packed-refs" PACKED_REFS)
+		if(${PACKED_REFS} MATCHES "([0-9a-z]*) ${HEAD_REF}")
+			set(HEAD_HASH "${CMAKE_MATCH_1}")
+		endif()
+	endif()
+else()
+	# detached HEAD
+	configure_file("@GIT_DIR@/HEAD" "@GIT_DATA@/head-ref" COPYONLY)
+endif()
+
+if(NOT HEAD_HASH)
+	file(READ "@GIT_DATA@/head-ref" HEAD_HASH LIMIT 1024)
+	string(STRIP "${HEAD_HASH}" HEAD_HASH)
+endif()

+ 3 - 0
Script/AtomicEditor/editor/EditorLicense.ts

@@ -43,6 +43,8 @@ class EditorLicense extends Atomic.ScriptObject {
 
     handleLicenseEulaAccepted(eventData) {
 
+        // Disabled for now
+        /*
         var sha = Atomic.getGitRevision();
 
         if (sha == "Unversioned Build" || Preferences.getInstance().editorBuildData.lastEditorBuildSHA == sha)
@@ -50,6 +52,7 @@ class EditorLicense extends Atomic.ScriptObject {
 
         var ops = EditorUI.getModelOps();
         ops.showNewBuildWindow();
+        */
 
     }
 

+ 12 - 2
Script/AtomicEditor/ui/modal/About.ts

@@ -85,9 +85,19 @@ class About extends ModalWindow {
 
         var text = "";
 
+        var buildName = Atomic.AtomicBuildInfo.getBuildName();
+        var buildDate = Atomic.AtomicBuildInfo.getBuildDate();
+        var buildTime = Atomic.AtomicBuildInfo.getBuildTime();
+        var buildSHA = Atomic.AtomicBuildInfo.getGitSHA();
+
+        var buildString = `<color #FFFFFF>'${buildName}' - ${buildDate} ${buildTime}\nGit: ${buildSHA} </color>`;
+
         text += "<widget TBImageWidget: filename: 'AtomicEditor/editor/images/atomic_logo.png'>\n\n";
-        text += "<color #D4FB79>Git SHA: " + Atomic.getGitRevision() + "</color>\n\n";
-        text += "(c) 2014-2016 THUNDERBEAST GAMES LLC\n\n\n";
+        text += "(c) 2014-2016 THUNDERBEAST GAMES LLC\n\n";
+
+        text += "<color #76D6FF>Build Information:</color>\n";
+
+        text += "<color #D4FB79>" + buildString + "</color>\n\n";
 
         text += "<color #D4FB79>Installed platforms and modules:</color>\n\n";
 

+ 2 - 2
Script/Packages/Atomic/Core.json

@@ -1,7 +1,7 @@
 {
 	"name" : "Core",
-	"sources" : ["Source/Atomic/Core"],
-	"classes" : ["Context", "Object"],
+	"sources" : ["Source/Atomic/Core", "Source/Atomic/BuildInfo"],
+	"classes" : ["Context", "Object", "AtomicBuildInfo"],
 	"classes_rename" : {
 		"Object" : "AObject"
 	},

+ 2 - 0
Source/Atomic/BuildInfo/.gitignore

@@ -0,0 +1,2 @@
+_*.*
+AtomicGitSHA.cpp

+ 40 - 0
Source/Atomic/BuildInfo/AtomicBuildInfo.cpp

@@ -0,0 +1,40 @@
+
+#include <Atomic/Core/StringUtils.h>
+#include "AtomicGitSHA.h"
+#include "AtomicBuildInfo.h"
+
+namespace Atomic
+{
+
+String AtomicBuildInfo::GetBuildString()
+{
+    return ToString("(%s): %s %s Git: %s", GetBuildName().CString(), GetBuildDate().CString(), GetBuildTime().CString(), GetGitSHA().CString());
+}
+
+String AtomicBuildInfo::GetGitSHA()
+{
+    return ATOMIC_BUILDINFO_GITSHA;
+}
+
+String AtomicBuildInfo::GetBuildDate()
+{
+    return __DATE__;
+}
+
+String AtomicBuildInfo::GetBuildTime()
+{
+    return __TIME__;
+}
+
+String AtomicBuildInfo::GetBuildName()
+{
+#ifdef ATOMIC_BUILD_NAME
+    return ATOMIC_BUILD_NAME;
+#else
+    return "The Unamable";
+#endif
+}
+
+
+
+}

+ 27 - 2
Source/AtomicBuildInfo/AtomicBuildInfo.h → Source/Atomic/BuildInfo/AtomicBuildInfo.h

@@ -24,10 +24,35 @@
 
 #pragma once
 
+#include <Atomic/Container/RefCounted.h>
+
 namespace Atomic
 {
 
-/// Get the Git SHA of the Build, currently only valid for a binary release off CI
-const char* GetGitSHA();
+class AtomicBuildInfo : public RefCounted
+{
+    ATOMIC_REFCOUNTED(AtomicBuildInfo)
+
+    public:
+
+    AtomicBuildInfo() {}
+
+    /// Get the Git SHA of the build
+    static String GetGitSHA();
+
+    /// Get the Date of the build
+    static String GetBuildDate();
+
+    /// Get the Time of the build
+    static String GetBuildTime();
+
+    /// Get the build release name
+    static String GetBuildName();
+
+    /// Get the build string in form (BuildName): BuildDate BuildTime Git:SHA
+    static String GetBuildString();
+
+};
+
 
 }

+ 8 - 0
Source/Atomic/BuildInfo/AtomicGitSHA.cpp.in

@@ -0,0 +1,8 @@
+
+namespace Atomic
+{
+
+#define GIT_SHA1 "@GIT_SHA1@"
+const char* ATOMIC_BUILDINFO_GITSHA = GIT_SHA1;
+
+}

+ 7 - 0
Source/Atomic/BuildInfo/AtomicGitSHA.h

@@ -0,0 +1,7 @@
+
+namespace Atomic
+{
+
+    extern const char* ATOMIC_BUILDINFO_GITSHA;
+
+}

+ 10 - 0
Source/Atomic/BuildInfo/CMakeLists.txt

@@ -0,0 +1,10 @@
+
+include(GetGitRevisionDescription)
+
+get_git_head_revision(GIT_REFSPEC GIT_SHA1)
+
+configure_file("${CMAKE_CURRENT_SOURCE_DIR}/AtomicGitSHA.cpp.in" "${CMAKE_CURRENT_SOURCE_DIR}/AtomicGitSHA.cpp" @ONLY)
+
+set (SOURCE_FILES AtomicBuildInfo.cpp AtomicBuildInfo.h AtomicGitSHA.cpp AtomicGitSHA.h)
+
+add_library(AtomicBuildInfo ${SOURCE_FILES})

+ 7 - 0
Source/Atomic/CMakeLists.txt

@@ -93,6 +93,13 @@ GroupSources("UI")
 GroupSources("Web")
 GroupSources("Script")
 
+# Handle Git Revision
+include(GetGitRevisionDescription)
+get_git_head_revision(GIT_REFSPEC GIT_SHA1)
+configure_file("${CMAKE_CURRENT_SOURCE_DIR}/BuildInfo/AtomicGitSHA.cpp.in" "${CMAKE_CURRENT_SOURCE_DIR}/AtomicGitSHA.cpp" @ONLY)
+
+set (SOURCE_FILES ${SOURCE_FILES} BuildInfo/AtomicBuildInfo.cpp BuildInfo/AtomicBuildInfo.h BuildInfo/AtomicGitSHA.cpp BuildInfo/AtomicGitSHA.h)
+
 add_library(Atomic ${SOURCE_FILES})
 
 include(AtomicDoc)

+ 0 - 1
Source/AtomicBuildInfo/.gitignore

@@ -1 +0,0 @@
-_*.*

+ 0 - 14
Source/AtomicBuildInfo/AtomicBuildInfo.cpp

@@ -1,14 +0,0 @@
-
-
-#include "_GeneratedRevision.h"
-#include "AtomicBuildInfo.h"
-
-namespace Atomic
-{
-
-const char* GetGitSHA()
-{
-    return atomicBuildRevision;
-}
-
-}

+ 0 - 33
Source/AtomicBuildInfo/CMakeLists.txt

@@ -1,33 +0,0 @@
-
-set (ATOMIC_GIT_SHA "Unversioned Build")
-
-if (DEFINED ENV{ATOMIC_BUILD_SHA})
-    set (ATOMIC_GIT_SHA $ENV{ATOMIC_BUILD_SHA})
-endif ()
-
-set (WRITE_REVISION "")
-
-if (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/_GeneratedRevision.h OR NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/_GeneratedRevision.cache)
-    set (WRITE_REVISION "TRUE")
-else()
-
-    file (READ ${CMAKE_CURRENT_SOURCE_DIR}/_GeneratedRevision.cache ATOMIC_CACHE_SHA)
-
-    if (NOT ATOMIC_GIT_SHA STREQUAL ATOMIC_CACHE_SHA)
-        set (WRITE_REVISION "TRUE")
-    endif()
-
-endif()
-
-if (${WRITE_REVISION})
-    #message ("Writing Git Revision: ${WRITE_REVISION} : ATOMIC_GIT_SHA:${ATOMIC_GIT_SHA} ATOMIC_CACHE_SHA:${ATOMIC_CACHE_SHA}")
-    file (WRITE ${CMAKE_CURRENT_SOURCE_DIR}/_GeneratedRevision.h "const char* atomicBuildRevision=\"${ATOMIC_GIT_SHA}\";\n")
-    file (WRITE ${CMAKE_CURRENT_SOURCE_DIR}/_GeneratedRevision.cache "${ATOMIC_GIT_SHA}")
-else()
-    #message ("Using Cached Git Revision: ${WRITE_REVISION} : ATOMIC_GIT_SHA:${ATOMIC_GIT_SHA} ATOMIC_CACHE_SHA:${ATOMIC_CACHE_SHA}")
-endif()
-
-
-file (GLOB SOURCE_FILES *.cpp *.h)
-
-add_library(AtomicBuildInfo ${SOURCE_FILES})

+ 0 - 13
Source/AtomicJS/Javascript/JSAtomic.cpp

@@ -63,8 +63,6 @@
 #include <Atomic/Scene/Scene.h>
 #include <Atomic/Environment/ProcSky.h>
 
-#include <AtomicBuildInfo/AtomicBuildInfo.h>
-
 namespace Atomic
 {
 
@@ -199,13 +197,6 @@ static int js_atomic_GetUI(duk_context* ctx)
     return 1;
 }
 
-static int js_atomic_GetGitRevision(duk_context* ctx)
-{
-    duk_push_string(ctx, GetGitSHA());
-    return 1;
-}
-
-
 
 static int js_atomic_script(duk_context* ctx)
 {
@@ -432,10 +423,6 @@ void jsapi_init_atomic(JSVM* vm)
     js_push_class_object_instance(ctx, vm->GetSubsystem<UI>(), "UI");
     duk_put_prop_string(ctx, -2, "ui");
 
-    // end subsystems
-    duk_push_c_function(ctx, js_atomic_GetGitRevision, 0);
-    duk_put_prop_string(ctx, -2, "getGitRevision");
-
     duk_push_c_function(ctx, js_atomic_script, 1);
     duk_put_prop_string(ctx, -2, "script");
 

+ 0 - 1
Source/CMakeLists.txt

@@ -1,6 +1,5 @@
 
 add_subdirectory(ThirdParty)
-add_subdirectory(AtomicBuildInfo)
 add_subdirectory(Atomic)
 add_subdirectory(AtomicJS)
 

+ 7 - 0
Source/ThirdParty/Civetweb/src/civetweb.c

@@ -132,6 +132,10 @@ mg_static_assert(sizeof(void *) >= sizeof(int), "data type size check");
 #include <mach/mach_time.h>
 #include <assert.h>
 
+// ATOMIC BEGIN
+#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_12
+// ATOMIC END
+
 /* clock_gettime is not implemented on OSX */
 int clock_gettime(int clk_id, struct timespec *t);
 
@@ -174,6 +178,9 @@ int clock_gettime(int clk_id, struct timespec *t)
 	}
 	return -1; /* EINVAL - Clock ID is unknown */
 }
+
+#endif
+
 #endif
 
 #include <time.h>

+ 10 - 0
Source/ToolCore/JSBind/JSBTypeScript.cpp

@@ -228,16 +228,26 @@ void JSBTypeScript::ExportModuleClasses(JSBModule* module)
 
             JSBFunctionType* ftype = NULL;
 
+            bool isStatic = false;
+
             if (prop->getter_ && !prop->getter_->Skip(BINDINGLANGUAGE_JAVASCRIPT))
             {
                 ftype = prop->getter_->GetReturnType();
+                isStatic = prop->getter_->IsStatic();
             }
             else if (prop->setter_ && !prop->setter_->Skip(BINDINGLANGUAGE_JAVASCRIPT))
+            {
                 ftype = prop->setter_->GetParameters()[0];
+                isStatic = prop->setter_->IsStatic();
+            }
 
             if (!ftype)
                 continue;
 
+            // TODO: static properies not currently working with generated TS
+            if (isStatic)
+                continue;
+
             String scriptType = GetScriptType(ftype);
             String scriptName = prop->GetCasePropertyName();