pmt: Improvement.
- At build time, the version, compile time, CMake version, compiler version, and compiler flags are retrieved with the new CMake module and a header is created. This header provides more robust version management and notifications. - Build warnings fixed, code corrected for compilation. - Improvements were made to CMake code. - Modifications were made to the tests to read the library's version information.
This commit is contained in:
@@ -18,14 +18,19 @@
|
||||
cmake_minimum_required(VERSION 3.10)
|
||||
project(pmt VERSION 1.0.0)
|
||||
|
||||
set(DEBUG_FLAGS -gdwarf-5 -fsanitize=address -fstack-protector -O0)
|
||||
|
||||
# Add compiler flag based on build type
|
||||
# Set compiler flags
|
||||
add_compile_options(-Wall -Werror)
|
||||
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
|
||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${DEBUG_FLAGS}")
|
||||
set(CMAKE_LINKER_FLAGS "${CMAKE_LINKER_FLAGS} ${DEBUG_FLAGS}")
|
||||
add_compile_options(-gdwarf-5 -fsanitize=address -fstack-protector)
|
||||
endif()
|
||||
|
||||
# Add pmt's CMake module(s)
|
||||
include(cmake/generate_headers.cmake)
|
||||
|
||||
# Generate header(s)
|
||||
get_property(FLAGS DIRECTORY PROPERTY COMPILE_OPTIONS)
|
||||
generateBuildInfo(${FLAGS})
|
||||
|
||||
# Add include directories
|
||||
include_directories(include srclib/libhelper/include srclib/libpartition_map/include)
|
||||
|
||||
|
||||
11
build.sh
11
build.sh
@@ -21,10 +21,7 @@ BUILD_64="build_arm64-v8a"
|
||||
BUILD_32="build_armeabi-v7a"
|
||||
THIS="$(basename $0)"
|
||||
|
||||
echo()
|
||||
{
|
||||
command echo "[$THIS]: $*"
|
||||
}
|
||||
echo() { command echo "[$THIS]: $@"; }
|
||||
|
||||
checks()
|
||||
{
|
||||
@@ -41,7 +38,11 @@ checks()
|
||||
clean()
|
||||
{
|
||||
echo "Cleaning workspace."
|
||||
rm -rf $BUILD_32 $BUILD_64 srclib/libhelper/tests/dir srclib/libhelper/tests/linkdir srclib/libhelper/tests/file.txt
|
||||
rm -rf $BUILD_32 $BUILD_64 \
|
||||
include/generated \
|
||||
srclib/libhelper/tests/dir \
|
||||
srclib/libhelper/tests/linkdir \
|
||||
srclib/libhelper/tests/file.txt
|
||||
}
|
||||
|
||||
build()
|
||||
|
||||
30
cmake/generate_headers.cmake
Normal file
30
cmake/generate_headers.cmake
Normal file
@@ -0,0 +1,30 @@
|
||||
#
|
||||
# Copyright 2025 Yağız Zengin
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||
# you may not use this file except in compliance with the License.
|
||||
# You may obtain a copy of the License at
|
||||
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
#
|
||||
|
||||
# Generate build info (version.hpp.in)
|
||||
function(generateBuildInfo BUILD_FLAGS)
|
||||
string(TIMESTAMP BUILD_DATE "%Y-%m-%d")
|
||||
string(TIMESTAMP BUILD_TIME "%H:%M:%S")
|
||||
|
||||
execute_process(COMMAND bash -c "mkdir -p ${CMAKE_SOURCE_DIR}/include/generated &>/dev/null")
|
||||
execute_process(COMMAND bash -c "${CMAKE_CXX_COMPILER} --version | head -n 1"
|
||||
OUTPUT_VARIABLE COMPILER_VERSION_STRING
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
|
||||
configure_file(${CMAKE_SOURCE_DIR}/include/buildInfo.hpp.in ${CMAKE_SOURCE_DIR}/include/generated/buildInfo.hpp @ONLY)
|
||||
|
||||
message(STATUS "Generated header: ${CMAKE_SOURCE_DIR}/include/generated/buildInfo.hpp")
|
||||
endfunction()
|
||||
29
include/buildInfo.hpp.in
Normal file
29
include/buildInfo.hpp.in
Normal file
@@ -0,0 +1,29 @@
|
||||
/*
|
||||
Copyright 2025 Yağız Zengin
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
#ifndef VERSION_HPP
|
||||
#define VERSION_HPP
|
||||
|
||||
// General build info
|
||||
#define BUILD_VERSION "@PROJECT_VERSION@"
|
||||
#define BUILD_TYPE "@CMAKE_BUILD_TYPE@"
|
||||
#define BUILD_DATE "@BUILD_DATE@"
|
||||
#define BUILD_TIME "@BUILD_TIME@"
|
||||
#define BUILD_FLAGS "@BUILD_FLAGS@"
|
||||
#define BUILD_CMAKE_VERSION "@CMAKE_VERSION@"
|
||||
#define BUILD_COMPILER_VERSION "@COMPILER_VERSION_STRING@"
|
||||
|
||||
#endif // #ifndef VERSION_HPP
|
||||
@@ -17,10 +17,6 @@
|
||||
#ifndef LIBHELPER_LIB_HPP
|
||||
#define LIBHELPER_LIB_HPP
|
||||
|
||||
#define LIBHELPER_MAJOR 1
|
||||
#define LIBHELPER_MINOR 0
|
||||
#define LIBHELPER_PATCH 0
|
||||
|
||||
#include <string>
|
||||
#include <string_view>
|
||||
#include <sstream>
|
||||
@@ -114,11 +110,11 @@ bool eraseDirectoryRecursive(const std::string_view directory);
|
||||
|
||||
// Getters
|
||||
size_t fileSize(const std::string_view file);
|
||||
std::string_view readSymlink(const std::string_view entry);
|
||||
std::string readSymlink(const std::string_view entry);
|
||||
|
||||
// SHA-256
|
||||
bool sha256Compare(const std::string_view file1, const std::string_view file2);
|
||||
std::optional<std::string_view> sha256Of(const std::string_view path);
|
||||
std::optional<std::string> sha256Of(const std::string_view path);
|
||||
|
||||
// Utilities
|
||||
bool copyFile(const std::string_view file, const std::string_view dest);
|
||||
|
||||
@@ -74,8 +74,8 @@ bool isHardLink(const std::string_view entry)
|
||||
|
||||
bool areLinked(const std::string_view entry1, const std::string_view entry2)
|
||||
{
|
||||
const std::string_view st1 = (isSymbolicLink(entry1)) ? readSymlink(entry1) : entry1;
|
||||
const std::string_view st2 = (isSymbolicLink(entry2)) ? readSymlink(entry2) : entry2;
|
||||
const std::string st1 = (isSymbolicLink(entry1)) ? readSymlink(entry1) : std::string(entry1.data());
|
||||
const std::string st2 = (isSymbolicLink(entry2)) ? readSymlink(entry2) : std::string(entry2.data());
|
||||
|
||||
return (st1 == st2);
|
||||
}
|
||||
|
||||
@@ -223,13 +223,13 @@ bool eraseDirectoryRecursive(const std::string_view directory)
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string_view readSymlink(const std::string_view entry)
|
||||
std::string readSymlink(const std::string_view entry)
|
||||
{
|
||||
char target[PATH_MAX];
|
||||
ssize_t len = readlink(entry.data(), target, (sizeof(target) - 1));
|
||||
if (len == -1) {
|
||||
throw Error("Cannot read symlink %s: %s", entry.data(), strerror(errno));
|
||||
return entry;
|
||||
return entry.data();
|
||||
}
|
||||
|
||||
target[len] = '\0';
|
||||
|
||||
@@ -25,7 +25,7 @@
|
||||
|
||||
namespace Helper {
|
||||
|
||||
std::optional<std::string_view> sha256Of(const std::string_view path)
|
||||
std::optional<std::string> sha256Of(const std::string_view path)
|
||||
{
|
||||
if (!fileIsExists(path)) {
|
||||
throw Error("Is not exists or not file: %s", path.data());
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <time.h>
|
||||
#include <libgen.h>
|
||||
#include <libhelper/lib.hpp>
|
||||
#include <generated/buildInfo.hpp>
|
||||
|
||||
namespace Helper {
|
||||
|
||||
@@ -130,11 +131,9 @@ std::string pathDirname(const std::string_view entry)
|
||||
|
||||
std::string getLibVersion()
|
||||
{
|
||||
return std::string(
|
||||
std::to_string(LIBHELPER_MAJOR) + "."
|
||||
+ std::to_string(LIBHELPER_MINOR) + "."
|
||||
+ std::to_string(LIBHELPER_PATCH)
|
||||
);
|
||||
char vinfo[512];
|
||||
sprintf(vinfo, "libhelper %s [%s %s]\nBuildType: %s\nCMakeVersion: %s\nCompilerVersion: %s\nBuildFlags: %s\n", BUILD_VERSION, BUILD_DATE, BUILD_TIME, BUILD_TYPE, BUILD_CMAKE_VERSION, BUILD_COMPILER_VERSION, BUILD_FLAGS);
|
||||
return std::string(vinfo);
|
||||
}
|
||||
|
||||
} // namespace Helper
|
||||
|
||||
@@ -88,6 +88,8 @@ int main(int argc, char** argv)
|
||||
std::cout << "pathJoin() test 3: " << Helper::pathJoin("mydir/", "/dir2") << std::endl;
|
||||
std::cout << "pathJoin() test 4: " << Helper::pathJoin("mydir", "/dir2") << std::endl;
|
||||
|
||||
std::cout << Helper::getLibVersion() << std::endl;
|
||||
|
||||
LOG(INFO) << "Info message" << std::endl;
|
||||
LOG(WARNING) << "Warning message" << std::endl;
|
||||
LOG(ERROR) << "Error message" << std::endl;
|
||||
|
||||
@@ -17,10 +17,6 @@
|
||||
#ifndef LIBPARTITION_MAP_LIB_HPP
|
||||
#define LIBPARTITION_MAP_LIB_HPP
|
||||
|
||||
#define LIBPARTITION_MAP_MAJOR 1
|
||||
#define LIBPARTITION_MAP_MINOR 0
|
||||
#define LIBPARTITION_MAP_PATCH 0
|
||||
|
||||
#include <string>
|
||||
#include <string_view>
|
||||
#include <optional>
|
||||
|
||||
@@ -29,6 +29,7 @@
|
||||
#include <sys/ioctl.h>
|
||||
#include <linux/fs.h>
|
||||
#include <libpartition_map/lib.hpp>
|
||||
#include <generated/buildInfo.hpp>
|
||||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
|
||||
@@ -199,11 +200,9 @@ bool basic_partition_map_builder::operator!() const
|
||||
|
||||
std::string getLibVersion()
|
||||
{
|
||||
return std::string(
|
||||
std::to_string(LIBPARTITION_MAP_MAJOR) + "."
|
||||
+ std::to_string(LIBPARTITION_MAP_MINOR) + "."
|
||||
+ std::to_string(LIBPARTITION_MAP_PATCH)
|
||||
);
|
||||
char vinfo[512];
|
||||
sprintf(vinfo, "libpartition_map %s [%s %s]\nBuildType: %s\nCMakeVersion: %s\nCompilerVersion: %s\nBuildFlags: %s\n", BUILD_VERSION, BUILD_DATE, BUILD_TIME, BUILD_TYPE, BUILD_CMAKE_VERSION, BUILD_COMPILER_VERSION, BUILD_FLAGS);
|
||||
return std::string(vinfo);
|
||||
}
|
||||
|
||||
} // namespace PartitionMap
|
||||
|
||||
@@ -69,6 +69,8 @@ int main(void) {
|
||||
|
||||
if (MyMap == MyMap2) std::cout << "map1 = map2" << std::endl;
|
||||
if (MyMap != MyMap2) std::cout << "map1 != map2" << std::endl;
|
||||
|
||||
std::cout << PartitionMap::getLibVersion() << std::endl;
|
||||
} catch (PartitionMap::Error& error) {
|
||||
std::cerr << error.what() << std::endl;
|
||||
return 1;
|
||||
|
||||
Reference in New Issue
Block a user