Compare commits

...

9 Commits

Author SHA1 Message Date
Duncan Ogilvie 52671dcf5b Improve documentation for conditions 2021-12-08 14:39:48 +01:00
Duncan Ogilvie 094bab1b81 Add clarification that the system compiler is used when building cmkr 2021-12-08 14:39:35 +01:00
Duncan Ogilvie 0f559bc803 Do not make Package.config default to true 2021-12-08 14:39:18 +01:00
Duncan Ogilvie 491486075d Error when running cmkr.cmake as a script 2021-11-28 22:18:14 +01:00
Duncan Ogilvie ed84fc0251 Merge pull request #29 from build-cpp/fix-actions-pr
Fix a bug in the logic to skip building pull requests from the same repo
2021-10-27 18:11:24 +02:00
Duncan Ogilvie 8b6780fe1a Fix a bug in the logic to skip building pull requests from the same repository 2021-10-27 18:03:17 +02:00
Duncan Ogilvie 9ebcb1fb06 Bump CMKR_TAG 2021-10-24 16:19:50 +02:00
Duncan Ogilvie 7c7144b183 Also generate CMakeLists.txt when calling cmkr init 2021-10-24 16:19:08 +02:00
Duncan Ogilvie 07797988b5 Fix a critical bug in generate_resources.cmake 2021-10-24 16:19:03 +02:00
10 changed files with 46 additions and 15 deletions
+1 -1
View File
@@ -5,7 +5,7 @@ on: [push, pull_request]
jobs:
build:
# Skip building pull requests from the same repository
if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != '${{ github.repository }}'
if: ${{ github.event_name == 'push' || (github.event_name == 'pull_request' && github.event.pull_request.head.repo.full_name != github.repository) }}
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
+8 -3
View File
@@ -1,16 +1,21 @@
include_guard()
if(CMAKE_SCRIPT_MODE_FILE)
message(FATAL_ERROR "Running cmkr.cmake as a script is unsupported. To build your project try: cmake -B build")
endif()
# Change these defaults to point to your infrastructure if desired
set(CMKR_REPO "https://github.com/build-cpp/cmkr" CACHE STRING "cmkr git repository" FORCE)
set(CMKR_TAG "archive_9e1fa5dc" CACHE STRING "cmkr git tag (this needs to be available forever)" FORCE)
set(CMKR_TAG "archive_7c7144b1" CACHE STRING "cmkr git tag (this needs to be available forever)" FORCE)
# Set these from the command line to customize for development/debugging purposes
set(CMKR_EXECUTABLE "" CACHE FILEPATH "cmkr executable")
set(CMKR_SKIP_GENERATION OFF CACHE BOOL "skip automatic cmkr generation")
# Disable cmkr if generation is disabled
if(DEFINED ENV{CI} OR CMKR_SKIP_GENERATION)
if(DEFINED ENV{CI} OR CMKR_SKIP_GENERATION OR CMKR_BUILD_SKIP_GENERATION)
message(STATUS "[cmkr] Skipping automatic cmkr generation")
unset(CMKR_BUILD_SKIP_GENERATION CACHE)
macro(cmkr)
endmacro()
return()
@@ -76,7 +81,7 @@ else()
${CMKR_REPO}
"${CMKR_DIRECTORY}"
)
message(STATUS "[cmkr] Building cmkr...")
message(STATUS "[cmkr] Building cmkr (using system compiler)...")
cmkr_exec("${CMAKE_COMMAND}"
--no-warn-unused-cli
"${CMKR_DIRECTORY}"
+6 -7
View File
@@ -7,13 +7,12 @@ function(generate_resources target)
foreach(SOURCE ${TARGET_SOURCES})
if(SOURCE MATCHES ".cmake$")
get_filename_component(RESOURCE_NAME "${SOURCE}" NAME_WE)
set(RESOURCE_HEADER "include/resources/${RESOURCE_NAME}.h")
configure_file("${SOURCE}" "${CMAKE_CURRENT_BINARY_DIR}/${RESOURCE_HEADER}")
file(READ "${CMAKE_CURRENT_BINARY_DIR}/${RESOURCE_HEADER}" RESOURCE_CONTENTS)
file(GENERATE
OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/${RESOURCE_HEADER}"
CONTENT "namespace cmkr {\nnamespace resources {\nstatic const char* ${RESOURCE_NAME} = R\"RESOURCE(${RESOURCE_CONTENTS})RESOURCE\";\n}\n}"
)
set(RESOURCE_HEADER "include/resources/${RESOURCE_NAME}.hpp")
# Add configure-time dependency on the source file
configure_file("${SOURCE}" "${RESOURCE_HEADER}" COPYONLY)
# Generate the actual resource into the header
file(READ "${SOURCE}" RESOURCE_CONTENTS)
configure_file("${PROJECT_SOURCE_DIR}/cmake/resource.hpp.in" "${RESOURCE_HEADER}" @ONLY)
message(STATUS "[cmkr] Generated ${RESOURCE_HEADER}")
endif()
endforeach()
+7
View File
@@ -0,0 +1,7 @@
namespace cmkr {
namespace resources {
static const char* @RESOURCE_NAME@ = R"RESOURCE(@RESOURCE_CONTENTS@)RESOURCE";
}
}
+17 -1
View File
@@ -39,12 +39,28 @@ include-after = ["cmake/after-project.cmake"]
## Conditions
You can specify your own conditions and use them in any `condition` field:
```toml
[conditions]
arch64 = "CMAKE_SIZEOF_VOID_P EQUALS 8"
arch32 = "CMAKE_SIZEOF_VOID_P EQUALS 4"
```
This will make the `arch64` and `arch32` conditions available with their respective CMake expressions. The following conditions are predefined (you can override them if you desire):
```toml
[conditions]
windows = "WIN32"
macos = "CMAKE_SYSTEM_NAME MATCHES \"Darwin\""
unix = "UNIX"
bsd = "CMAKE_SYSTEM_NAME MATCHES \"BSD\""
linux = "CMAKE_SYSTEM_NAME MATCHES \"Linux\""
gcc = "CMAKE_CXX_COMPILER_ID STREQUAL \"GNU\" OR CMAKE_C_COMPILER_ID STREQUAL \"GNU\""
clang = "CMAKE_CXX_COMPILER_ID MATCHES \"Clang\" OR CMAKE_C_COMPILER_ID MATCHES \"Clang\""
msvc = "MSVC"
```
## Subdirectories
```toml
@@ -69,7 +85,7 @@ url = "https://github.com/microsoft/vcpkg/archive/refs/tags/2021.05.12.tar.gz"
packages = ["fmt", "zlib"]
```
The vcpkg `version` will automatically generate the `url` from the official repository. For a custom registry you can specify your own `url` (and omit the `version`).
The vcpkg `version` will automatically generate the `url` from the [official repository](https://github.com/microsoft/vcpkg/releases). For a custom registry you can specify your own `url` (and omit the `version`). You can browse available packages on [vcpkg.io](https://vcpkg.io/en/packages.html).
## Packages
+1
View File
@@ -0,0 +1 @@
google-site-verification: google13f7c659b54c069f.html
+1 -1
View File
@@ -28,7 +28,7 @@ struct Package {
std::string name;
std::string version;
bool required = true;
bool config = true;
bool config = false;
std::vector<std::string> components;
};
+3
View File
@@ -36,6 +36,9 @@ const char *handle_args(int argc, char **argv) {
auto ret = cmkr::gen::generate_project(type.c_str());
if (ret)
return "Initialization failure!";
ret = cmkr::gen::generate_cmake(fs::current_path().string().c_str());
if (ret)
return "CMake generation error!";
return "Directory initialized!";
} else if (main_arg == "build") {
auto ret = build::run(argc, argv);
+1 -1
View File
@@ -25,7 +25,7 @@ int run(int argc, char **argv) {
if (gen::generate_cmake(fs::current_path().string().c_str()))
throw std::runtime_error("CMake generation failure!");
ss << "cmake -S. -DCMKR_SKIP_GENERATION=ON -B" << project.build_dir << " ";
ss << "cmake -S. -DCMKR_BUILD_SKIP_GENERATION=ON -B" << project.build_dir << " ";
if (!project.generator.empty()) {
ss << "-G \"" << project.generator << "\" ";
+1 -1
View File
@@ -1,7 +1,7 @@
#include "cmake_generator.hpp"
#include "error.hpp"
#include "literals.hpp"
#include <resources/cmkr.h>
#include <resources/cmkr.hpp>
#include "fs.hpp"
#include <cassert>