Re: [Lldb-commits] [PATCH] D24846: [CMake] Generate LLDB_REVISION at build time

2016-09-23 Thread Phabricator via lldb-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rL282314: [CMake] Generate LLDB_REVISION at build time 
(authored by cbieneman).

Changed prior to commit:
  https://reviews.llvm.org/D24846?vs=72215=72381#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D24846

Files:
  lldb/trunk/source/CMakeLists.txt
  lldb/trunk/source/lldb.cpp

Index: lldb/trunk/source/lldb.cpp
===
--- lldb/trunk/source/lldb.cpp
+++ lldb/trunk/source/lldb.cpp
@@ -18,6 +18,10 @@
 
 #include "clang/Basic/Version.h"
 
+#ifdef HAVE_SVN_VERSION_INC
+#  include "SVNVersion.inc"
+#endif
+
 static const char *GetLLDBRevision() {
 #ifdef LLDB_REVISION
   return LLDB_REVISION;
Index: lldb/trunk/source/CMakeLists.txt
===
--- lldb/trunk/source/CMakeLists.txt
+++ lldb/trunk/source/CMakeLists.txt
@@ -40,6 +40,41 @@
 DEPENDS ${LLDB_VERS_GENERATED_FILE})
 endif()
 
+foreach(file
+"${LLDB_SOURCE_DIR}/.git/logs/HEAD" # Git
+"${LLDB_SOURCE_DIR}/.svn/wc.db" # SVN 1.7
+"${LLDB_SOURCE_DIR}/.svn/entries"   # SVN 1.6
+)
+  if(EXISTS "${file}")
+set(lldb_vc "${file}")
+break()
+  endif()
+endforeach()
+
+if(DEFINED lldb_vc)
+  set(version_inc "${CMAKE_CURRENT_BINARY_DIR}/SVNVersion.inc")
+  set(get_svn_script "${LLVM_MAIN_SRC_DIR}/cmake/modules/GetSVN.cmake")
+
+  # Create custom target to generate the VC revision include.
+  add_custom_command(OUTPUT "${version_inc}"
+DEPENDS "${lldb_vc}" "${get_svn_script}"
+COMMAND
+${CMAKE_COMMAND} "-DFIRST_SOURCE_DIR=${LLDB_SOURCE_DIR}"
+ "-DFIRST_NAME=LLDB"
+ "-DHEADER_FILE=${version_inc}"
+ -P "${get_svn_script}")
+
+  # Mark the generated header as being generated.
+  set_source_files_properties("${version_inc}"
+PROPERTIES GENERATED TRUE
+   HEADER_FILE_ONLY TRUE)
+
+  # Tell Version.cpp that it needs to build with -DHAVE_SVN_VERSION_INC.
+  set_source_files_properties(lldb.cpp
+PROPERTIES COMPILE_DEFINITIONS "HAVE_SVN_VERSION_INC")
+  list(APPEND lldbBase_SOURCES ${version_inc})
+endif()
+
 add_lldb_library(lldbBase
   ${lldbBase_SOURCES}
   )
@@ -64,29 +99,3 @@
 # Build API last.  Since liblldb needs to link against every other target, it 
needs
 # those targets to have already been created.
 add_subdirectory(API)
-
-# Determine LLDB revision and repository. GetSourceVersion and 
GetRepositoryPath are shell-scripts, and as
-# such will not work on Windows.
-if ( NOT CMAKE_SYSTEM_NAME MATCHES "Windows" )
-  execute_process(COMMAND ${CMAKE_SOURCE_DIR}/utils/GetSourceVersion 
${LLDB_SOURCE_DIR}
-  OUTPUT_VARIABLE LLDB_REVISION)
-  if ( LLDB_REVISION )
-string(REGEX REPLACE "(\r?\n)+$" "" LLDB_REVISION ${LLDB_REVISION})
-  endif()
-
-  execute_process(COMMAND ${CMAKE_SOURCE_DIR}/utils/GetRepositoryPath 
${LLDB_SOURCE_DIR}
-  OUTPUT_VARIABLE LLDB_REPOSITORY)
-  if ( LLDB_REPOSITORY )
-# Replace newline characters with spaces
-string(REGEX REPLACE "(\r?\n)+" " " LLDB_REPOSITORY ${LLDB_REPOSITORY})
-
-# Remove trailing spaces
-string(REGEX REPLACE "(\ )+$" "" LLDB_REPOSITORY ${LLDB_REPOSITORY})
-  endif()
-
-  set_property(
-SOURCE lldb.cpp
-PROPERTY COMPILE_DEFINITIONS "LLDB_REVISION=\"${LLDB_REVISION}\"" 
"LLDB_REPOSITORY=\"${LLDB_REPOSITORY}\"")
-endif ()
-# FIXME: implement svn/git revision and repository parsing solution on 
Windows. There is an SVN-only
-#revision parsing solution in tools/clang/lib/Basic/CMakelists.txt.


Index: lldb/trunk/source/lldb.cpp
===
--- lldb/trunk/source/lldb.cpp
+++ lldb/trunk/source/lldb.cpp
@@ -18,6 +18,10 @@
 
 #include "clang/Basic/Version.h"
 
+#ifdef HAVE_SVN_VERSION_INC
+#  include "SVNVersion.inc"
+#endif
+
 static const char *GetLLDBRevision() {
 #ifdef LLDB_REVISION
   return LLDB_REVISION;
Index: lldb/trunk/source/CMakeLists.txt
===
--- lldb/trunk/source/CMakeLists.txt
+++ lldb/trunk/source/CMakeLists.txt
@@ -40,6 +40,41 @@
 DEPENDS ${LLDB_VERS_GENERATED_FILE})
 endif()
 
+foreach(file
+"${LLDB_SOURCE_DIR}/.git/logs/HEAD" # Git
+"${LLDB_SOURCE_DIR}/.svn/wc.db" # SVN 1.7
+"${LLDB_SOURCE_DIR}/.svn/entries"   # SVN 1.6
+)
+  if(EXISTS "${file}")
+set(lldb_vc "${file}")
+break()
+  endif()
+endforeach()
+
+if(DEFINED lldb_vc)
+  set(version_inc "${CMAKE_CURRENT_BINARY_DIR}/SVNVersion.inc")
+  set(get_svn_script "${LLVM_MAIN_SRC_DIR}/cmake/modules/GetSVN.cmake")
+
+  # Create custom target to generate the VC revision include.
+  add_custom_command(OUTPUT "${version_inc}"
+DEPENDS "${lldb_vc}" "${get_svn_script}"
+COMMAND
+${CMAKE_COMMAND} "-DFIRST_SOURCE_DIR=${LLDB_SOURCE_DIR}"
+ "-DFIRST_NAME=LLDB"
+   

Re: [Lldb-commits] [PATCH] D24846: [CMake] Generate LLDB_REVISION at build time

2016-09-23 Thread Zachary Turner via lldb-commits
zturner accepted this revision.
zturner added a comment.

lgtm, everything works.


https://reviews.llvm.org/D24846



___
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


Re: [Lldb-commits] [PATCH] D24846: [CMake] Generate LLDB_REVISION at build time

2016-09-22 Thread Todd Fiala via lldb-commits
tfiala accepted this revision.
tfiala added a comment.
This revision is now accepted and ready to land.

Looks good.

I think it's fine landing here for now based on your earlier comments about the 
refactoring effort to get it into LLVM/clang.  I do think it's worth trying to 
sink it lower when the time is right to do more of that refactoring, though.

Thanks!


https://reviews.llvm.org/D24846



___
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


Re: [Lldb-commits] [PATCH] D24846: [CMake] Generate LLDB_REVISION at build time

2016-09-22 Thread Zachary Turner via lldb-commits
If it's non trivial then then can go in first, that's fine. I'm ooo for the
rest of the day, so let me test it out on Windows first
On Thu, Sep 22, 2016 at 4:36 PM Chris Bieneman  wrote:

> beanz added a comment.
>
> Putting this in LLVM would be ideal, but I think doing that requires a
> larger refactoring of how LLVM and Clang handle SCM versions. I was kinda
> hoping to land this and fix the lldb support, but if you'd prefer I can
> shelve this until after fixing LLVM & Clang.
>
>
> https://reviews.llvm.org/D24846
>
>
>
>
___
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


Re: [Lldb-commits] [PATCH] D24846: [CMake] Generate LLDB_REVISION at build time

2016-09-22 Thread Chris Bieneman via lldb-commits
beanz added a comment.

Putting this in LLVM would be ideal, but I think doing that requires a larger 
refactoring of how LLVM and Clang handle SCM versions. I was kinda hoping to 
land this and fix the lldb support, but if you'd prefer I can shelve this until 
after fixing LLVM & Clang.


https://reviews.llvm.org/D24846



___
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


Re: [Lldb-commits] [PATCH] D24846: [CMake] Generate LLDB_REVISION at build time

2016-09-22 Thread Zachary Turner via lldb-commits
zturner added a comment.

Should this be sunk into a common llvm function instead of copying from clang?  
I don't have a strong opinion, but are you one of the main CMake maintainers in 
LLVM, so whatever you think is best.


https://reviews.llvm.org/D24846



___
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits


[Lldb-commits] [PATCH] D24846: [CMake] Generate LLDB_REVISION at build time

2016-09-22 Thread Chris Bieneman via lldb-commits
beanz created this revision.
beanz added reviewers: tfiala, zturner.
beanz added a subscriber: lldb-commits.
Herald added subscribers: mgorny, beanz.

This alters the generation of LLDB_REVISION to be heavily based on how clang 
generates its version header. There are two benefits of this aproach.

(1) The LLDB_REVISION is generated at build time, so it will be updated after 
an SCM pull/update even if CMake doesn't re-run
(2) This works on Windows

As noted this code is a simplified implementation of the code from clang.

https://reviews.llvm.org/D24846

Files:
  source/CMakeLists.txt
  source/lldb.cpp

Index: source/lldb.cpp
===
--- source/lldb.cpp
+++ source/lldb.cpp
@@ -18,6 +18,10 @@
 
 #include "clang/Basic/Version.h"
 
+#ifdef HAVE_SVN_VERSION_INC
+#  include "SVNVersion.inc"
+#endif
+
 static const char *GetLLDBRevision() {
 #ifdef LLDB_REVISION
   return LLDB_REVISION;
Index: source/CMakeLists.txt
===
--- source/CMakeLists.txt
+++ source/CMakeLists.txt
@@ -40,6 +40,41 @@
 DEPENDS ${LLDB_VERS_GENERATED_FILE})
 endif()
 
+foreach(file
+"${LLDB_SOURCE_DIR}/.git/logs/HEAD" # Git
+"${LLDB_SOURCE_DIR}/.svn/wc.db" # SVN 1.7
+"${LLDB_SOURCE_DIR}/.svn/entries"   # SVN 1.6
+)
+  if(EXISTS "${file}")
+set(lldb_vc "${file}")
+break()
+  endif()
+endforeach()
+
+if(DEFINED lldb_vc)
+  set(version_inc "${CMAKE_CURRENT_BINARY_DIR}/SVNVersion.inc")
+  set(get_svn_script "${LLVM_MAIN_SRC_DIR}/cmake/modules/GetSVN.cmake")
+
+  # Create custom target to generate the VC revision include.
+  add_custom_command(OUTPUT "${version_inc}"
+DEPENDS "${lldb_vc}" "${get_svn_script}"
+COMMAND
+${CMAKE_COMMAND} "-DFIRST_SOURCE_DIR=${LLDB_SOURCE_DIR}"
+ "-DFIRST_NAME=LLDB"
+ "-DHEADER_FILE=${version_inc}"
+ -P "${get_svn_script}")
+
+  # Mark the generated header as being generated.
+  set_source_files_properties("${version_inc}"
+PROPERTIES GENERATED TRUE
+   HEADER_FILE_ONLY TRUE)
+
+  # Tell Version.cpp that it needs to build with -DHAVE_SVN_VERSION_INC.
+  set_source_files_properties(lldb.cpp
+PROPERTIES COMPILE_DEFINITIONS "HAVE_SVN_VERSION_INC")
+  list(APPEND lldbBase_SOURCES ${version_inc})
+endif()
+
 add_lldb_library(lldbBase
   ${lldbBase_SOURCES}
   )
@@ -64,29 +99,3 @@
 # Build API last.  Since liblldb needs to link against every other target, it 
needs
 # those targets to have already been created.
 add_subdirectory(API)
-
-# Determine LLDB revision and repository. GetSourceVersion and 
GetRepositoryPath are shell-scripts, and as
-# such will not work on Windows.
-if ( NOT CMAKE_SYSTEM_NAME MATCHES "Windows" )
-  execute_process(COMMAND ${CMAKE_SOURCE_DIR}/utils/GetSourceVersion 
${LLDB_SOURCE_DIR}
-  OUTPUT_VARIABLE LLDB_REVISION)
-  if ( LLDB_REVISION )
-string(REGEX REPLACE "(\r?\n)+$" "" LLDB_REVISION ${LLDB_REVISION})
-  endif()
-
-  execute_process(COMMAND ${CMAKE_SOURCE_DIR}/utils/GetRepositoryPath 
${LLDB_SOURCE_DIR}
-  OUTPUT_VARIABLE LLDB_REPOSITORY)
-  if ( LLDB_REPOSITORY )
-# Replace newline characters with spaces
-string(REGEX REPLACE "(\r?\n)+" " " LLDB_REPOSITORY ${LLDB_REPOSITORY})
-
-# Remove trailing spaces
-string(REGEX REPLACE "(\ )+$" "" LLDB_REPOSITORY ${LLDB_REPOSITORY})
-  endif()
-
-  set_property(
-SOURCE lldb.cpp
-PROPERTY COMPILE_DEFINITIONS "LLDB_REVISION=\"${LLDB_REVISION}\"" 
"LLDB_REPOSITORY=\"${LLDB_REPOSITORY}\"")
-endif ()
-# FIXME: implement svn/git revision and repository parsing solution on 
Windows. There is an SVN-only
-#revision parsing solution in tools/clang/lib/Basic/CMakelists.txt.


Index: source/lldb.cpp
===
--- source/lldb.cpp
+++ source/lldb.cpp
@@ -18,6 +18,10 @@
 
 #include "clang/Basic/Version.h"
 
+#ifdef HAVE_SVN_VERSION_INC
+#  include "SVNVersion.inc"
+#endif
+
 static const char *GetLLDBRevision() {
 #ifdef LLDB_REVISION
   return LLDB_REVISION;
Index: source/CMakeLists.txt
===
--- source/CMakeLists.txt
+++ source/CMakeLists.txt
@@ -40,6 +40,41 @@
 DEPENDS ${LLDB_VERS_GENERATED_FILE})
 endif()
 
+foreach(file
+"${LLDB_SOURCE_DIR}/.git/logs/HEAD" # Git
+"${LLDB_SOURCE_DIR}/.svn/wc.db" # SVN 1.7
+"${LLDB_SOURCE_DIR}/.svn/entries"   # SVN 1.6
+)
+  if(EXISTS "${file}")
+set(lldb_vc "${file}")
+break()
+  endif()
+endforeach()
+
+if(DEFINED lldb_vc)
+  set(version_inc "${CMAKE_CURRENT_BINARY_DIR}/SVNVersion.inc")
+  set(get_svn_script "${LLVM_MAIN_SRC_DIR}/cmake/modules/GetSVN.cmake")
+
+  # Create custom target to generate the VC revision include.
+  add_custom_command(OUTPUT "${version_inc}"
+DEPENDS "${lldb_vc}" "${get_svn_script}"
+COMMAND
+