cmake update
This commit is contained in:
parent
a27a9e6000
commit
3ba91b8072
@ -523,15 +523,9 @@ endif()
|
|||||||
|
|
||||||
# extra sanity checks to detect incompatible C vs CXX settings
|
# extra sanity checks to detect incompatible C vs CXX settings
|
||||||
if(NOT UPX_CONFIG_CMAKE_DISABLE_PLATFORM_CHECK)
|
if(NOT UPX_CONFIG_CMAKE_DISABLE_PLATFORM_CHECK)
|
||||||
if(NOT ",${CMAKE_C_PLATFORM_ID}," STREQUAL ",${CMAKE_CXX_PLATFORM_ID},")
|
upx_platform_check_mismatch(CMAKE_C_PLATFORM_ID CMAKE_CXX_PLATFORM_ID)
|
||||||
message(FATAL_ERROR "ERROR: CMAKE_C_PLATFORM_ID CMAKE_CXX_PLATFORM_ID mismatch")
|
upx_platform_check_mismatch(CMAKE_C_COMPILER_ABI CMAKE_CXX_COMPILER_ABI)
|
||||||
endif()
|
upx_platform_check_mismatch(CMAKE_C_COMPILER_FRONTEND_VARIANT CMAKE_CXX_COMPILER_FRONTEND_VARIANT)
|
||||||
if(NOT ",${CMAKE_C_COMPILER_ABI}," STREQUAL ",${CMAKE_CXX_COMPILER_ABI},")
|
|
||||||
message(FATAL_ERROR "ERROR: CMAKE_C_COMPILER_ABI CMAKE_CXX_COMPILER_ABI mismatch")
|
|
||||||
endif()
|
|
||||||
if(NOT ",${CMAKE_C_COMPILER_FRONTEND_VARIANT}," STREQUAL ",${CMAKE_CXX_COMPILER_FRONTEND_VARIANT},")
|
|
||||||
message(FATAL_ERROR "ERROR: CMAKE_C_COMPILER_FRONTEND_VARIANT CMAKE_CXX_COMPILER_FRONTEND_VARIANT mismatch")
|
|
||||||
endif()
|
|
||||||
endif() # UPX_CONFIG_CMAKE_DISABLE_PLATFORM_CHECK
|
endif() # UPX_CONFIG_CMAKE_DISABLE_PLATFORM_CHECK
|
||||||
|
|
||||||
upx_cmake_include_hook(9_finish)
|
upx_cmake_include_hook(9_finish)
|
||||||
|
|||||||
@ -171,6 +171,18 @@ function(upx_cache_bool_vars) # ARGV
|
|||||||
endforeach()
|
endforeach()
|
||||||
endfunction()
|
endfunction()
|
||||||
|
|
||||||
|
function(upx_platform_check_mismatch var_name_1 var_name_2)
|
||||||
|
if(DEFINED ${var_name_1} OR DEFINED ${var_name_2})
|
||||||
|
if(NOT ",${${var_name_1}}," STREQUAL ",${${var_name_2}},")
|
||||||
|
if(UPX_CONFIG_DISABLE_WERROR)
|
||||||
|
message(WARNING "WARNING: '${var_name_1}' '${var_name_2}' mismatch")
|
||||||
|
else()
|
||||||
|
message(FATAL_ERROR "FATAL ERROR: '${var_name_1}' '${var_name_2}' mismatch")
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endif()
|
||||||
|
endfunction()
|
||||||
|
|
||||||
#***********************************************************************
|
#***********************************************************************
|
||||||
# compilation flags
|
# compilation flags
|
||||||
#***********************************************************************
|
#***********************************************************************
|
||||||
|
|||||||
@ -4,36 +4,37 @@ set -e; set -o pipefail
|
|||||||
|
|
||||||
# Copyright (C) Markus Franz Xaver Johannes Oberhumer
|
# Copyright (C) Markus Franz Xaver Johannes Oberhumer
|
||||||
# assemble cmake config flags; useful for CI jobs
|
# assemble cmake config flags; useful for CI jobs
|
||||||
|
# also see misc/make/Makefile-extra.mk
|
||||||
|
|
||||||
cmake_config_flags=()
|
cmake_config_flags=()
|
||||||
|
|
||||||
add_flag() {
|
__add_cmake_config() {
|
||||||
[[ -z "${!1}" ]] || cmake_config_flags+=( -D$1="${!1}" )
|
[[ -z "${!1}" ]] || cmake_config_flags+=( -D$1="${!1}" )
|
||||||
}
|
}
|
||||||
|
|
||||||
# pass common CMake settings from environment to cmake
|
# pass common CMake settings from environment to cmake
|
||||||
for v in CMAKE_VERBOSE_MAKEFILE; do
|
for v in CMAKE_VERBOSE_MAKEFILE; do
|
||||||
add_flag $v
|
__add_cmake_config $v
|
||||||
done
|
done
|
||||||
# pass common CMake toolchain settings from environment to cmake
|
# pass common CMake toolchain settings from environment to cmake
|
||||||
for v in CMAKE_ADDR2LINE CMAKE_AR CMAKE_DLLTOOL CMAKE_LINKER CMAKE_NM CMAKE_OBJCOPY CMAKE_OBJDUMP CMAKE_RANLIB CMAKE_READELF CMAKE_STRIP CMAKE_TAPI; do
|
for v in CMAKE_ADDR2LINE CMAKE_AR CMAKE_DLLTOOL CMAKE_LINKER CMAKE_NM CMAKE_OBJCOPY CMAKE_OBJDUMP CMAKE_RANLIB CMAKE_READELF CMAKE_STRIP CMAKE_TAPI; do
|
||||||
add_flag $v
|
__add_cmake_config $v
|
||||||
done
|
done
|
||||||
# pass common CMake LTO toolchain settings from environment to cmake (for use with "-flto")
|
# pass common CMake LTO toolchain settings from environment to cmake (for use with "-flto")
|
||||||
for v in CMAKE_C_COMPILER_AR CMAKE_C_COMPILER_RANLIB CMAKE_CXX_COMPILER_AR CMAKE_CXX_COMPILER_RANLIB; do
|
for v in CMAKE_C_COMPILER_AR CMAKE_C_COMPILER_RANLIB CMAKE_CXX_COMPILER_AR CMAKE_CXX_COMPILER_RANLIB; do
|
||||||
add_flag $v
|
__add_cmake_config $v
|
||||||
done
|
done
|
||||||
# pass common CMake cross compilation settings from environment to cmake
|
# pass common CMake cross compilation settings from environment to cmake
|
||||||
for v in CMAKE_SYSTEM_NAME CMAKE_SYSTEM_PROCESSOR CMAKE_CROSSCOMPILING_EMULATOR; do
|
for v in CMAKE_SYSTEM_NAME CMAKE_SYSTEM_PROCESSOR CMAKE_CROSSCOMPILING_EMULATOR; do
|
||||||
add_flag $v
|
__add_cmake_config $v
|
||||||
done
|
done
|
||||||
# pass UPX config options from environment to cmake; see CMakeLists.txt
|
# pass UPX config options from environment to cmake; see CMakeLists.txt
|
||||||
for v in UPX_CONFIG_DISABLE_GITREV UPX_CONFIG_DISABLE_SANITIZE UPX_CONFIG_DISABLE_WSTRICT UPX_CONFIG_DISABLE_WERROR UPX_CONFIG_DISABLE_SELF_PACK_TEST; do
|
for v in UPX_CONFIG_DISABLE_GITREV UPX_CONFIG_DISABLE_SANITIZE UPX_CONFIG_DISABLE_WSTRICT UPX_CONFIG_DISABLE_WERROR UPX_CONFIG_DISABLE_SELF_PACK_TEST; do
|
||||||
add_flag $v
|
__add_cmake_config $v
|
||||||
done
|
done
|
||||||
# pass UPX extra compile options from environment to cmake; see CMakeLists.txt
|
# pass UPX extra compile options from environment to cmake; see CMakeLists.txt
|
||||||
for v in UPX_CONFIG_EXTRA_COMPILE_OPTIONS_BZIP2 UPX_CONFIG_EXTRA_COMPILE_OPTIONS_UCL UPX_CONFIG_EXTRA_COMPILE_OPTIONS_UPX UPX_CONFIG_EXTRA_COMPILE_OPTIONS_ZLIB UPX_CONFIG_EXTRA_COMPILE_OPTIONS_ZSTD; do
|
for v in UPX_CONFIG_EXTRA_COMPILE_OPTIONS_BZIP2 UPX_CONFIG_EXTRA_COMPILE_OPTIONS_UCL UPX_CONFIG_EXTRA_COMPILE_OPTIONS_UPX UPX_CONFIG_EXTRA_COMPILE_OPTIONS_ZLIB UPX_CONFIG_EXTRA_COMPILE_OPTIONS_ZSTD; do
|
||||||
add_flag $v
|
__add_cmake_config $v
|
||||||
done
|
done
|
||||||
|
|
||||||
exec "${CMAKE:-cmake}" $UPX_CMAKE_CONFIG_FLAGS "${cmake_config_flags[@]}" "$@"
|
exec "${CMAKE:-cmake}" $UPX_CMAKE_CONFIG_FLAGS "${cmake_config_flags[@]}" "$@"
|
||||||
|
|||||||
@ -741,12 +741,14 @@ TEST_CASE("libc snprintf") {
|
|||||||
CHECK_EQ(strcmp(buf, "-6.0.0.0.0.0.0.0.6.ffffffffffffffff"), 0);
|
CHECK_EQ(strcmp(buf, "-6.0.0.0.0.0.0.0.6.ffffffffffffffff"), 0);
|
||||||
snprintf(buf, sizeof(buf), "%d.%d.%d.%d.%d.%d.%d.%d.%d.%#jx", -7, 0, 0, 0, 0, 0, 0, 0, 7, um);
|
snprintf(buf, sizeof(buf), "%d.%d.%d.%d.%d.%d.%d.%d.%d.%#jx", -7, 0, 0, 0, 0, 0, 0, 0, 7, um);
|
||||||
CHECK_EQ(strcmp(buf, "-7.0.0.0.0.0.0.0.7.0xffffffffffffffff"), 0);
|
CHECK_EQ(strcmp(buf, "-7.0.0.0.0.0.0.0.7.0xffffffffffffffff"), 0);
|
||||||
snprintf(buf, sizeof(buf), "%#x %#lx %#llx", 17u, 18ul, 19ull);
|
snprintf(buf, sizeof(buf), "%#X %#lx %#llx", 26u, 27ul, 28ull);
|
||||||
CHECK_EQ(strcmp(buf, "0x11 0x12 0x13"), 0);
|
CHECK_EQ(strcmp(buf, "0X1A 0x1b 0x1c"), 0);
|
||||||
snprintf(buf, sizeof(buf), "%#X %#lX %#llX", 20u, 21ul, 22ull);
|
snprintf(buf, sizeof(buf), "%#06x %#06lX %#06llx", 26u, 27ul, 28ull);
|
||||||
CHECK_EQ(strcmp(buf, "0X14 0X15 0X16"), 0);
|
CHECK_EQ(strcmp(buf, "0x001a 0X001B 0x001c"), 0);
|
||||||
snprintf(buf, sizeof(buf), "%#06x %#06lx %#06llx", 23u, 24ul, 25ull);
|
snprintf(buf, sizeof(buf), "%#6x %#6lx %#6llX", 26u, 27ul, 28ull);
|
||||||
CHECK_EQ(strcmp(buf, "0x0017 0x0018 0x0019"), 0);
|
CHECK_EQ(strcmp(buf, " 0x1a 0x1b 0X1C"), 0);
|
||||||
|
snprintf(buf, sizeof(buf), "%#-6X %#-6lx %#-6llx", 26u, 27ul, 28ull);
|
||||||
|
CHECK_EQ(strcmp(buf, "0X1A 0x1b 0x1c "), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
#if 0
|
||||||
|
|||||||
@ -131,7 +131,7 @@ TEST_CASE("libc++") {
|
|||||||
CHECK(v.end() - v.begin() == N);
|
CHECK(v.end() - v.begin() == N);
|
||||||
CHECK(&v[0] == &(*(v.begin())));
|
CHECK(&v[0] == &(*(v.begin())));
|
||||||
// CHECK(&v[0] + N == &(*(v.end()))); // TODO later: is this legal??
|
// CHECK(&v[0] + N == &(*(v.end()))); // TODO later: is this legal??
|
||||||
// TODO later
|
// TODO later: make sure that this throws
|
||||||
#if defined(_LIBCPP_HARDENING_MODE_DEBUG) && \
|
#if defined(_LIBCPP_HARDENING_MODE_DEBUG) && \
|
||||||
(_LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_DEBUG)
|
(_LIBCPP_HARDENING_MODE == _LIBCPP_HARDENING_MODE_DEBUG)
|
||||||
CHECK_THROWS((void) &v[N]);
|
CHECK_THROWS((void) &v[N]);
|
||||||
@ -176,7 +176,7 @@ struct MyVType2 {
|
|||||||
UPX_CXX_DISABLE_ADDRESS(Self)
|
UPX_CXX_DISABLE_ADDRESS(Self)
|
||||||
UPX_CXX_DISABLE_NEW_DELETE(Self)
|
UPX_CXX_DISABLE_NEW_DELETE(Self)
|
||||||
};
|
};
|
||||||
TEST_CASE("upx_cxx_disable") {
|
TEST_CASE("UPX_CXX_DISABLE_xxx") {
|
||||||
MyType1<char, int, 1> dummy1;
|
MyType1<char, int, 1> dummy1;
|
||||||
MyType2<char, int, 2> dummy2;
|
MyType2<char, int, 2> dummy2;
|
||||||
MyVType1<char, int, 1> vdummy1;
|
MyVType1<char, int, 1> vdummy1;
|
||||||
@ -260,7 +260,7 @@ struct Z2_X2 : public X2 {
|
|||||||
// util
|
// util
|
||||||
**************************************************************************/
|
**************************************************************************/
|
||||||
|
|
||||||
TEST_CASE("Deleter") {
|
TEST_CASE("upx::ObjectDeleter 1") {
|
||||||
LE16 *o = nullptr; // object
|
LE16 *o = nullptr; // object
|
||||||
LE32 *a = nullptr; // array
|
LE32 *a = nullptr; // array
|
||||||
{
|
{
|
||||||
@ -275,7 +275,7 @@ TEST_CASE("Deleter") {
|
|||||||
assert(a == nullptr);
|
assert(a == nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("Deleter") {
|
TEST_CASE("upx::ObjectDeleter 2") {
|
||||||
constexpr size_t N = 2;
|
constexpr size_t N = 2;
|
||||||
BE16 *o[N]; // multiple objects
|
BE16 *o[N]; // multiple objects
|
||||||
BE32 *a[N]; // multiple arrays
|
BE32 *a[N]; // multiple arrays
|
||||||
@ -284,8 +284,10 @@ TEST_CASE("Deleter") {
|
|||||||
upx::ArrayDeleter<BE32 **> a_deleter{a, 0};
|
upx::ArrayDeleter<BE32 **> a_deleter{a, 0};
|
||||||
for (size_t i = 0; i < N; i++) {
|
for (size_t i = 0; i < N; i++) {
|
||||||
o[i] = new BE16;
|
o[i] = new BE16;
|
||||||
|
assert(o[i] != nullptr);
|
||||||
o_deleter.count += 1;
|
o_deleter.count += 1;
|
||||||
a[i] = New(BE32, 1 + i);
|
a[i] = New(BE32, 1 + i);
|
||||||
|
assert(a[i] != nullptr);
|
||||||
a_deleter.count += 1;
|
a_deleter.count += 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -295,7 +297,7 @@ TEST_CASE("Deleter") {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("ptr_static_cast") {
|
TEST_CASE("upx::ptr_static_cast") {
|
||||||
// check that we don't trigger any -Wcast-align warnings
|
// check that we don't trigger any -Wcast-align warnings
|
||||||
using upx::ptr_static_cast;
|
using upx::ptr_static_cast;
|
||||||
void *vp = nullptr;
|
void *vp = nullptr;
|
||||||
@ -335,7 +337,7 @@ TEST_CASE("ptr_static_cast") {
|
|||||||
assert((ic == ptr_static_cast<const int *>(ic)));
|
assert((ic == ptr_static_cast<const int *>(ic)));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("noncopyable") {
|
TEST_CASE("upx::noncopyable") {
|
||||||
struct Test : private upx::noncopyable {
|
struct Test : private upx::noncopyable {
|
||||||
int v = 1;
|
int v = 1;
|
||||||
};
|
};
|
||||||
@ -458,7 +460,7 @@ struct TestTriBool {
|
|||||||
};
|
};
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
TEST_CASE("TriBool") {
|
TEST_CASE("upx::TriBool") {
|
||||||
using upx::TriBool, upx::tribool;
|
using upx::TriBool, upx::tribool;
|
||||||
static_assert(!tribool(false));
|
static_assert(!tribool(false));
|
||||||
static_assert(tribool(true));
|
static_assert(tribool(true));
|
||||||
|
|||||||
12
src/help.cpp
12
src/help.cpp
@ -96,16 +96,18 @@ void show_usage(void) {
|
|||||||
|
|
||||||
namespace {
|
namespace {
|
||||||
struct PackerNames {
|
struct PackerNames {
|
||||||
|
PackerNames() noexcept = default;
|
||||||
|
~PackerNames() noexcept = default;
|
||||||
struct Entry {
|
struct Entry {
|
||||||
const char *fname;
|
const char *fname;
|
||||||
const char *sname;
|
const char *sname;
|
||||||
};
|
};
|
||||||
Entry names[64];
|
static constexpr size_t MAX_NAMES = 64;
|
||||||
size_t names_count;
|
Entry names[MAX_NAMES];
|
||||||
const Options *o;
|
size_t names_count = 0;
|
||||||
PackerNames() : names_count(0), o(nullptr) {}
|
const Options *o = nullptr;
|
||||||
void add(const PackerBase *pb) {
|
void add(const PackerBase *pb) {
|
||||||
assert_noexcept(names_count < 64);
|
assert_noexcept(names_count < MAX_NAMES);
|
||||||
names[names_count].fname = pb->getFullName(o);
|
names[names_count].fname = pb->getFullName(o);
|
||||||
names[names_count].sname = pb->getName();
|
names[names_count].sname = pb->getName();
|
||||||
names_count++;
|
names_count++;
|
||||||
|
|||||||
@ -320,12 +320,17 @@ TEST_CASE("MemBuffer global overloads") {
|
|||||||
CHECK_THROWS(set_le64(mb4, 0));
|
CHECK_THROWS(set_le64(mb4, 0));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST_CASE("MemBuffer unused") {
|
TEST_CASE("MemBuffer unused 1") {
|
||||||
MemBuffer mb;
|
MemBuffer mb;
|
||||||
CHECK(mb.raw_ptr() == nullptr);
|
CHECK(mb.raw_ptr() == nullptr);
|
||||||
CHECK(mb.raw_size_in_bytes() == 0);
|
CHECK(mb.raw_size_in_bytes() == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST_CASE("MemBuffer unused 2") {
|
||||||
|
MemBuffer mb;
|
||||||
|
(void) mb;
|
||||||
|
}
|
||||||
|
|
||||||
TEST_CASE("MemBuffer array access") {
|
TEST_CASE("MemBuffer array access") {
|
||||||
constexpr size_t N = 16;
|
constexpr size_t N = 16;
|
||||||
MemBuffer mb(N);
|
MemBuffer mb(N);
|
||||||
|
|||||||
@ -29,6 +29,9 @@
|
|||||||
// dispatch. PackMaster by itself will instantiate a concrete subclass
|
// dispatch. PackMaster by itself will instantiate a concrete subclass
|
||||||
// of class PackerBase which then does the actual work.
|
// of class PackerBase which then does the actual work.
|
||||||
// And see p_com.cpp for a simple executable format.
|
// And see p_com.cpp for a simple executable format.
|
||||||
|
//
|
||||||
|
// This file also has the burden to deal with all those pesky low-level
|
||||||
|
// file handling issues.
|
||||||
|
|
||||||
#define WANT_WINDOWS_LEAN_H 1 // _get_osfhandle, GetFileTime, SetFileTime
|
#define WANT_WINDOWS_LEAN_H 1 // _get_osfhandle, GetFileTime, SetFileTime
|
||||||
#include "util/system_headers.h"
|
#include "util/system_headers.h"
|
||||||
@ -325,7 +328,7 @@ void do_one_file(const char *const iname, char *const oname) may_throw {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// handle command - actual work is here
|
// handle command - actual work starts HERE
|
||||||
PackMaster pm(&fi, opt);
|
PackMaster pm(&fi, opt);
|
||||||
if (opt->cmd == CMD_COMPRESS)
|
if (opt->cmd == CMD_COMPRESS)
|
||||||
pm.pack(&fo);
|
pm.pack(&fo);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user