From 4a0a5063fbc992e6c452b280ef7dfdcc89d65db1 Mon Sep 17 00:00:00 2001 From: friendlyanon Date: Mon, 17 Jan 2022 20:40:01 +0100 Subject: [PATCH 1/2] Add CMake build tooling --- CMakeLists.txt | 63 +++++++++++++++++++++++++++++++++++++++++++++ cmake/install.cmake | 15 +++++++++++ 2 files changed, 78 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 cmake/install.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..959d43e --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,63 @@ +cmake_minimum_required(VERSION 3.1) + +project(cloop CXX) + +# ---- cloop executable ---- + +add_executable( + cloop + src/cloop/Expr.cpp + src/cloop/Generator.cpp + src/cloop/Lexer.cpp + src/cloop/Main.cpp + src/cloop/Parser.cpp + src/cloop/Expr.h + src/cloop/Generator.h + src/cloop/Lexer.h + src/cloop/Parser.h +) + +# ---- Install rules ---- + +if(CMAKE_SKIP_INSTALL_RULES) + return() +endif() + +include(GNUInstallDirs) + +install( + TARGETS cloop + EXPORT cloopTargets + RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT cloop_Runtime +) + +set(CMAKE_INSTALL_DEFAULT_COMPONENT_NAME cloop_Development) + +set( + cloop_INSTALL_CMAKEDIR "${CMAKE_INSTALL_DATADIR}/cloop" + CACHE PATH "CMake package config location relative to the install prefix" +) +mark_as_advanced(cloop_INSTALL_CMAKEDIR) + +install( + EXPORT cloopTargets + NAMESPACE cloop:: + DESTINATION "${cloop_INSTALL_CMAKEDIR}" +) + +if(CMAKE_VERSION VERSION_LESS "3.14") + set(maybe_exe cloop) + if(WIN32) + set(maybe_exe cloop.exe) + endif() + set(cloop_EXECUTABLE_NAME "${maybe_exe}" CACHE STRING "Executable name") +else() + cmake_policy(SET CMP0087 NEW) + set(cloop_EXECUTABLE_NAME "$") +endif() +install(CODE "set(cloop_NAME [[${cloop_EXECUTABLE_NAME}]])") + +install(CODE "set(cloop_INSTALL_CMAKEDIR [[${cloop_INSTALL_CMAKEDIR}]])") +install(CODE "set(CMAKE_INSTALL_BINDIR [[${CMAKE_INSTALL_BINDIR}]])") + +install(SCRIPT cmake/install.cmake) diff --git a/cmake/install.cmake b/cmake/install.cmake new file mode 100644 index 0000000..684197b --- /dev/null +++ b/cmake/install.cmake @@ -0,0 +1,15 @@ +get_filename_component(prefix "${CMAKE_INSTALL_PREFIX}" ABSOLUTE) + +file( + RELATIVE_PATH relative_path + "/${cloop_INSTALL_CMAKEDIR}" "/${CMAKE_INSTALL_BINDIR}/${cloop_NAME}" +) + +file(WRITE "${prefix}/${cloop_INSTALL_CMAKEDIR}/cloopConfig.cmake" "\ +get_filename_component( + CLOOP_EXECUTABLE \"\${CMAKE_CURRENT_LIST_DIR}/${relative_path}\" + ABSOLUTE +) + +include(\"\${CMAKE_CURRENT_LIST_DIR}/cloopTargets.cmake\") +") From e44a20716db768a406daeac37294b5670b444606 Mon Sep 17 00:00:00 2001 From: friendlyanon Date: Tue, 18 Jan 2022 03:01:34 +0100 Subject: [PATCH 2/2] Set `CXX_STANDARD` to 98 The code uses std::auto_ptr, so this project should preferably be compiled in C++98 mode. --- CMakeLists.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 959d43e..001cdb1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -17,6 +17,9 @@ add_executable( src/cloop/Parser.h ) +# Code uses std::auto_ptr +set_property(TARGET cloop PROPERTY CXX_STANDARD 98) + # ---- Install rules ---- if(CMAKE_SKIP_INSTALL_RULES)