summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt5
-rw-r--r--cmake/GitVersion.cmake18
-rw-r--r--cmake/SlangTarget.cmake8
-rw-r--r--slang-tag-version.h1
-rw-r--r--slang-tag-version.h.in1
-rw-r--r--source/slang/CMakeLists.txt2
-rw-r--r--source/slang/slang.cpp2
7 files changed, 27 insertions, 10 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 70e204e7e..f16f31fbb 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -4,12 +4,13 @@ cmake_minimum_required(VERSION 3.25)
# from git describe
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_LIST_DIR}/cmake")
include(GitVersion)
-get_git_version(SLANG_VERSION "${CMAKE_CURRENT_LIST_DIR}")
+get_git_version(SLANG_VERSION_NUMERIC SLANG_VERSION_FULL "${CMAKE_CURRENT_LIST_DIR}")
#
# Our project
#
-project(slang VERSION "${SLANG_VERSION}" LANGUAGES)
+project(slang VERSION "${SLANG_VERSION_NUMERIC}" LANGUAGES)
+set(PROJECT_VERSION "${SLANG_VERSION_FULL}")
#
# Global CMake options
diff --git a/cmake/GitVersion.cmake b/cmake/GitVersion.cmake
index 7044aaffc..386ca309c 100644
--- a/cmake/GitVersion.cmake
+++ b/cmake/GitVersion.cmake
@@ -1,16 +1,16 @@
find_package(Git)
# Extract a version from the latest tag matching something like v1.2.3.4
-function(get_git_version var dir)
+function(get_git_version var_numeric var dir)
if(NOT DEFINED ${var})
- set(version "0.0")
+ set(version_numeric "0.0.0")
+ set(version "0.0.0-unknown")
if(GIT_EXECUTABLE)
set(command
"${GIT_EXECUTABLE}"
-C
"${dir}"
describe
- --abbrev=0
--tags
--match
v*
@@ -19,19 +19,20 @@ function(get_git_version var dir)
COMMAND ${command}
RESULT_VARIABLE result
OUTPUT_STRIP_TRAILING_WHITESPACE
- OUTPUT_VARIABLE version
+ OUTPUT_VARIABLE version_out
)
if(NOT result EQUAL 0)
message(
WARNING
"Getting ${var} failed: ${command} returned ${result}"
)
- elseif("${version}" MATCHES "^v([0-9]+(\.[0-9]+)*).*")
+ elseif("${version_out}" MATCHES "^v(([0-9]+(\\.[0-9]+)*).*)")
set(version "${CMAKE_MATCH_1}")
+ set(version_numeric "${CMAKE_MATCH_2}")
else()
message(
WARNING
- "Couldn't parse numeric version (like v1.2.3) from ${version}"
+ "Couldn't parse version (like v1.2.3 or v1.2.3-foo) from ${version_out}"
)
endif()
else()
@@ -42,6 +43,11 @@ function(get_git_version var dir)
endif()
endif()
+ set(${var_numeric}
+ ${version_numeric}
+ CACHE STRING
+ "The project version numeric part, detected using git if available"
+ )
set(${var}
${version}
CACHE STRING
diff --git a/cmake/SlangTarget.cmake b/cmake/SlangTarget.cmake
index fdf3458cf..07409a960 100644
--- a/cmake/SlangTarget.cmake
+++ b/cmake/SlangTarget.cmake
@@ -60,6 +60,7 @@ function(slang_add_target dir type)
INCLUDE_FROM_PRIVATE
# Any include directories other targets need to use this target
INCLUDE_DIRECTORIES_PUBLIC
+ INCLUDE_DIRECTORIES_PRIVATE
# Add a dependency on the new target to the specified targets
REQUIRED_BY
# Add a dependency to the new target on the specified targets
@@ -234,6 +235,13 @@ function(slang_add_target dir type)
PUBLIC "$<BUILD_INTERFACE:${inc_abs}>"
)
endforeach()
+ foreach(inc ${ARG_INCLUDE_DIRECTORIES_PRIVATE})
+ get_filename_component(inc_abs ${inc} ABSOLUTE)
+ target_include_directories(
+ ${target}
+ PRIVATE "$<BUILD_INTERFACE:${inc_abs}>"
+ )
+ endforeach()
#
# Set up export macros
diff --git a/slang-tag-version.h b/slang-tag-version.h
deleted file mode 100644
index f2ecc1d4f..000000000
--- a/slang-tag-version.h
+++ /dev/null
@@ -1 +0,0 @@
-#define SLANG_TAG_VERSION "unknown"
diff --git a/slang-tag-version.h.in b/slang-tag-version.h.in
new file mode 100644
index 000000000..d390d3fdb
--- /dev/null
+++ b/slang-tag-version.h.in
@@ -0,0 +1 @@
+#define SLANG_TAG_VERSION "@SLANG_VERSION_FULL@"
diff --git a/source/slang/CMakeLists.txt b/source/slang/CMakeLists.txt
index d708bde1e..495a05f36 100644
--- a/source/slang/CMakeLists.txt
+++ b/source/slang/CMakeLists.txt
@@ -249,6 +249,7 @@ target_include_directories(
#
# Slang itself
#
+configure_file(${slang_SOURCE_DIR}/slang-tag-version.h.in slang-tag-version.h)
slang_add_target(
.
${SLANG_LIB_TYPE}
@@ -266,6 +267,7 @@ slang_add_target(
# slang.h is in the project root, so include that directory in the interface
# for slang
INCLUDE_DIRECTORIES_PUBLIC ${slang_SOURCE_DIR}
+ INCLUDE_DIRECTORIES_PRIVATE ${CMAKE_CURRENT_BINARY_DIR}
EXPORT_MACRO_PREFIX SLANG
INSTALL
PUBLIC_HEADERS ${slang_SOURCE_DIR}/slang*.h
diff --git a/source/slang/slang.cpp b/source/slang/slang.cpp
index d601dcd0e..6b7e2a254 100644
--- a/source/slang/slang.cpp
+++ b/source/slang/slang.cpp
@@ -47,7 +47,7 @@
#include "slang-check-impl.h"
-#include "../../slang-tag-version.h"
+#include "slang-tag-version.h"
#include <sys/stat.h>