From 03c4184067d8f6cf7a9f7bffd3b92d0035f64eda Mon Sep 17 00:00:00 2001 From: "Markus F.X.J. Oberhumer" Date: Tue, 23 Jul 2024 12:24:09 +0200 Subject: [PATCH] all: misc cleanups --- CMakeLists.txt | 18 +------- Makefile | 7 +-- misc/cmake/functions.cmake | 41 +++++++++++++++--- misc/cmake/print_info.cmake | 75 +++++++++++++++++---------------- misc/cmake/self_pack_test.cmake | 2 +- misc/make/Makefile-extra.mk | 26 +++++++----- misc/testsuite/mimic_ctest.sh | 7 +-- src/stub/scripts/bin2h.py | 2 +- src/stub/scripts/brandelf.py | 16 +++---- src/stub/scripts/gpp_inc.py | 8 ++-- src/stub/scripts/xstrip.py | 8 ++-- 11 files changed, 118 insertions(+), 92 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 9dcd0a36..90340a25 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -68,7 +68,7 @@ upx_cmake_include_hook(2_init) # clean up a few files if you accidentally try an in-source build. upx_disallow_in_source_build() -# global settings part 1 +# global settings if(${CMAKE_VERSION} VERSION_GREATER "3.14.99" AND NOT DEFINED CMAKE_MSVC_RUNTIME_LIBRARY) set(CMAKE_MSVC_RUNTIME_LIBRARY "MultiThreaded") cmake_policy(SET CMP0091 NEW) @@ -136,21 +136,6 @@ upx_set_default_build_type(Release) # default is CMAKE_BUILD_TYPE=Release project(upx VERSION "${UPX_VERSION_STRING}" LANGUAGES C CXX) upx_apply_build_type() -# global settings part 2 -if(CMAKE_GENERATOR MATCHES "Ninja" AND NOT CMAKE_EXECUTABLE_FORMAT MATCHES "^ELF") - set(CMAKE_BUILD_WITH_INSTALL_RPATH ON) -endif() - -# set MSVC_FRONTEND, GNU_FRONTEND and MINGW -if(NOT DEFINED MSVC_FRONTEND AND (MSVC OR CMAKE_C_COMPILER_FRONTEND_VARIANT MATCHES "^MSVC")) - set(MSVC_FRONTEND 1) -elseif (NOT DEFINED GNU_FRONTEND AND (CMAKE_C_COMPILER_FRONTEND_VARIANT MATCHES "^GNU" OR CMAKE_C_COMPILER_ID MATCHES "(Clang|GNU)")) - set(GNU_FRONTEND 1) -endif() -if(NOT DEFINED MINGW AND CMAKE_C_PLATFORM_ID MATCHES "^MinGW") - set(MINGW 1) -endif() - #*********************************************************************** # common compilation flags #*********************************************************************** @@ -514,6 +499,7 @@ upx_print_var(CMAKE_VERSION UPX_CONFIG_CMAKE_MINIMUM_REQUIRED_VERSION CMAKE_GENE if(NOT UPX_CONFIG_CMAKE_DISABLE_PRINT_INFO) # print detailed info include("${CMAKE_CURRENT_SOURCE_DIR}/misc/cmake/print_info.cmake") + upx_print_info() endif() upx_print_var(CMAKE_INSTALL_PREFIX CMAKE_CONFIGURATION_TYPES CMAKE_TRY_COMPILE_CONFIGURATION CMAKE_BUILD_TYPE) if(Threads_FOUND) diff --git a/Makefile b/Makefile index 54b64298..285b9c02 100644 --- a/Makefile +++ b/Makefile @@ -29,7 +29,7 @@ endif run_cmake_config = $(CMAKE) -S . -B $1 $(UPX_CMAKE_CONFIG_FLAGS) -DCMAKE_BUILD_TYPE=$2 run_cmake_build = $(CMAKE) --build $1 $(UPX_CMAKE_BUILD_FLAGS) --config $2 # avoid re-running run_cmake_config if .upx_cmake_config_done.txt already exists -run_config = $(if $(wildcard $1/CMakeFiles/.upx_cmake_config_done.txt),,$(call run_cmake_config,$1,$2)) +run_config = $(if $(wildcard $1/CMakeFiles/.*_cmake_config_done.txt),,$(call run_cmake_config,$1,$2)) run_build = $(call run_cmake_build,$1,$2) build/debug: PHONY @@ -77,11 +77,12 @@ test: $$(patsubst %+test,%,$$(.DEFAULT_GOAL))+test PHONY # # extra pre-defined build configurations and some utility; optional -include ./misc/make/Makefile-extra.mk +-include ./Makevars-local.mk +-include ./misc/make/Makefile-extra.mk # developer convenience ifneq ($(wildcard /usr/bin/env),) # need Unix utils like bash, perl, sed, xargs, etc. -ifneq ($(wildcard ./misc/scripts/.),) +ifneq ($(and $(wildcard ./misc/scripts/.),$(wildcard ./doc/upx.pod)),) check-whitespace clang-format run-testsuite run-testsuite-all run-testsuite-debug run-testsuite-release: src/Makefile PHONY $(MAKE) -C src $@ endif diff --git a/misc/cmake/functions.cmake b/misc/cmake/functions.cmake index a9782761..46be5c1f 100644 --- a/misc/cmake/functions.cmake +++ b/misc/cmake/functions.cmake @@ -42,6 +42,10 @@ macro(upx_set_default_build_type type) if(NOT upx_global_is_multi_config AND NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE "${upx_global_default_build_type}" CACHE STRING "Choose the type of build." FORCE) endif() + # also enable CMAKE_EXPORT_COMPILE_COMMANDS by default + if(NOT DEFINED CMAKE_EXPORT_COMPILE_COMMANDS) + set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + endif() endmacro() # set the default multi-config build type; must be called after project() cmake init @@ -63,6 +67,22 @@ macro(upx_apply_build_type) set(CMAKE_TRY_COMPILE_CONFIGURATION "${upx_global_default_build_type}") endif() endif() + # handle CMAKE_BUILD_WITH_INSTALL_RPATH + if(NOT DEFINED CMAKE_BUILD_WITH_INSTALL_RPATH) + if(CMAKE_GENERATOR MATCHES "Ninja" AND NOT CMAKE_EXECUTABLE_FORMAT MATCHES "^ELF") + # info: needed by Ninja generator unless on an ELF-based or XCOFF-based platform + set(CMAKE_BUILD_WITH_INSTALL_RPATH ON) + endif() + endif() + # and also set MSVC_FRONTEND, GNU_FRONTEND and MINGW + if(NOT DEFINED MSVC_FRONTEND AND (MSVC OR CMAKE_C_COMPILER_FRONTEND_VARIANT MATCHES "^MSVC")) + set(MSVC_FRONTEND 1) + elseif(NOT DEFINED GNU_FRONTEND AND (CMAKE_C_COMPILER_FRONTEND_VARIANT MATCHES "^GNU" OR CMAKE_C_COMPILER_ID MATCHES "(Clang|GNU|LLVM)")) + set(GNU_FRONTEND 1) + endif() + if(NOT DEFINED MINGW AND CMAKE_C_PLATFORM_ID MATCHES "^MinGW") + set(MINGW 1) + endif() endmacro() # ternary conditional operator @@ -97,7 +117,7 @@ function(upx_make_bool_var result_var_name var_name default_value) set(${result_var_name} "${result}" PARENT_SCOPE) # return value endfunction() -function(upx_unused_var) # ARGV +function(upx_maybe_unused_var) # ARGV foreach(var_name ${ARGV}) if(DEFINED ${var_name}) set(dummy "${${var_name}}") @@ -339,6 +359,15 @@ endfunction() # sanitize a target; note that this may require special run-time support libs from your toolchain function(upx_sanitize_target) # ARGV + # default sanitizer for Debug builds + if(NOT DEFINED upx_sanitize_flags_debug) + set(upx_sanitize_flags_debug -fsanitize=undefined -fsanitize-undefined-trap-on-error -fstack-protector-all) + endif() + # default sanitizer for Release builds + if(NOT DEFINED upx_sanitize_flags_release) + set(upx_sanitize_flags_release -fstack-protector) + endif() + foreach(t ${ARGV}) if(UPX_CONFIG_DISABLE_SANITIZE) # no-op @@ -356,12 +385,10 @@ function(upx_sanitize_target) # ARGV # unsupported compiler; unreliable/broken sanitize implementation before gcc-8 (May 2018) message(WARNING "WARNING: ignoring SANITIZE for target '${t}'") else() - # default sanitizer for Debug builds - target_compile_options(${t} PRIVATE $<$:-fsanitize=undefined -fsanitize-undefined-trap-on-error -fstack-protector-all>) - # default sanitizer for Release builds - target_compile_options(${t} PRIVATE $<$:-fstack-protector>) - target_compile_options(${t} PRIVATE $<$:-fstack-protector>) - target_compile_options(${t} PRIVATE $<$:-fstack-protector>) + target_compile_options(${t} PRIVATE $<$:${upx_sanitize_flags_debug}>) + target_compile_options(${t} PRIVATE $<$:${upx_sanitize_flags_release}>) + target_compile_options(${t} PRIVATE $<$:${upx_sanitize_flags_release}>) + target_compile_options(${t} PRIVATE $<$:${upx_sanitize_flags_release}>) endif() endforeach() endfunction() diff --git a/misc/cmake/print_info.cmake b/misc/cmake/print_info.cmake index 5b7edf84..b252e134 100644 --- a/misc/cmake/print_info.cmake +++ b/misc/cmake/print_info.cmake @@ -8,48 +8,51 @@ # print some info about the build configuration #*********************************************************************** -get_property(PROPERTY_GENERATOR_IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) -get_property(PROPERTY_TARGET_SUPPORTS_SHARED_LIBS GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS) +function(upx_print_info) # ARGV + get_property(PROPERTY_GENERATOR_IS_MULTI_CONFIG GLOBAL PROPERTY GENERATOR_IS_MULTI_CONFIG) + get_property(PROPERTY_TARGET_SUPPORTS_SHARED_LIBS GLOBAL PROPERTY TARGET_SUPPORTS_SHARED_LIBS) -# generator -upx_print_var(CMAKE_GENERATOR_TOOLSET CMAKE_GENERATOR_PLATFORM) -upx_print_var(PROPERTY_GENERATOR_IS_MULTI_CONFIG) + # generator + upx_print_var(CMAKE_GENERATOR_TOOLSET CMAKE_GENERATOR_PLATFORM) + upx_print_var(PROPERTY_GENERATOR_IS_MULTI_CONFIG) -# directories -if(NOT ",${CMAKE_BINARY_DIR}," STREQUAL ",${CMAKE_CURRENT_BINARY_DIR}," OR NOT ",${CMAKE_SOURCE_DIR}," STREQUAL ",${CMAKE_CURRENT_SOURCE_DIR},") - upx_print_var(CMAKE_BINARY_DIR CMAKE_SOURCE_DIR CMAKE_CURRENT_BINARY_DIR CMAKE_CURRENT_SOURCE_DIR) -endif() + # directories + if(NOT ",${CMAKE_BINARY_DIR}," STREQUAL ",${CMAKE_CURRENT_BINARY_DIR}," OR NOT ",${CMAKE_SOURCE_DIR}," STREQUAL ",${CMAKE_CURRENT_SOURCE_DIR},") + upx_print_var(CMAKE_BINARY_DIR CMAKE_SOURCE_DIR CMAKE_CURRENT_BINARY_DIR CMAKE_CURRENT_SOURCE_DIR) + endif() -# system -upx_print_var(CMAKE_HOST_SYSTEM_NAME CMAKE_HOST_SYSTEM_VERSION CMAKE_HOST_SYSTEM_PROCESSOR) -upx_print_var(CMAKE_SYSTEM_NAME CMAKE_SYSTEM_VERSION CMAKE_SYSTEM_PROCESSOR) -upx_print_var(CMAKE_ANDROID_NDK CMAKE_ANDROID_NDK_VERSION CMAKE_ANDROID_STANDALONE_TOOLCHAIN) -upx_print_var(CMAKE_APPLE_SILICON_PROCESSOR CMAKE_OSX_DEPLOYMENT_TARGET CMAKE_OSX_SYSROOT) -upx_print_var(CMAKE_VS_PLATFORM_TOOLSET CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE CMAKE_VS_PLATFORM_TOOLSET_VERSION) -upx_print_var(CMAKE_CROSSCOMPILING CMAKE_CROSSCOMPILING_EMULATOR) + # system + upx_print_var(CMAKE_HOST_SYSTEM_NAME CMAKE_HOST_SYSTEM_VERSION CMAKE_HOST_SYSTEM_PROCESSOR) + upx_print_var(CMAKE_SYSTEM_NAME CMAKE_SYSTEM_VERSION CMAKE_SYSTEM_PROCESSOR) + upx_print_var(CMAKE_ANDROID_NDK CMAKE_ANDROID_NDK_VERSION CMAKE_ANDROID_STANDALONE_TOOLCHAIN) + upx_print_var(CMAKE_APPLE_SILICON_PROCESSOR CMAKE_OSX_DEPLOYMENT_TARGET CMAKE_OSX_SYSROOT) + upx_print_var(CMAKE_VS_PLATFORM_TOOLSET CMAKE_VS_PLATFORM_TOOLSET_HOST_ARCHITECTURE CMAKE_VS_PLATFORM_TOOLSET_VERSION) + upx_print_var(CMAKE_CROSSCOMPILING CMAKE_CROSSCOMPILING_EMULATOR) + upx_print_var(CMAKE_SIZEOF_VOID_P) -# binutils -upx_print_var(CMAKE_EXECUTABLE_FORMAT CMAKE_AR CMAKE_RANLIB) + # binutils + upx_print_var(CMAKE_EXECUTABLE_FORMAT CMAKE_AR CMAKE_RANLIB) -# compilers -foreach(lang IN ITEMS ASM C CXX) - upx_print_var(CMAKE_${lang}_COMPILER_LAUNCHER) - upx_print_var(CMAKE_${lang}_COMPILER) - upx_print_var(CMAKE_${lang}_COMPILER_ID) - upx_print_var(CMAKE_${lang}_COMPILER_VERSION) - upx_print_var(CMAKE_${lang}_COMPILER_FRONTEND_VARIANT ) - upx_print_var(CMAKE_${lang}_COMPILER_ARCHITECTURE_ID) - upx_print_var(CMAKE_${lang}_PLATFORM_ID) - upx_print_var(CMAKE_${lang}_COMPILER_ABI) - upx_print_var(CMAKE_${lang}_COMPILER_TARGET) -endforeach() + # compilers + foreach(lang IN ITEMS ASM C CXX) + upx_print_var(CMAKE_${lang}_COMPILER_LAUNCHER) + upx_print_var(CMAKE_${lang}_COMPILER) + upx_print_var(CMAKE_${lang}_COMPILER_ID) + upx_print_var(CMAKE_${lang}_COMPILER_VERSION) + upx_print_var(CMAKE_${lang}_COMPILER_FRONTEND_VARIANT ) + upx_print_var(CMAKE_${lang}_COMPILER_ARCHITECTURE_ID) + upx_print_var(CMAKE_${lang}_PLATFORM_ID) + upx_print_var(CMAKE_${lang}_COMPILER_ABI) + upx_print_var(CMAKE_${lang}_COMPILER_TARGET) + endforeach() -# misc -upx_print_var(CMAKE_BUILD_WITH_INSTALL_RPATH) -upx_print_var(CMAKE_INTERPROCEDURAL_OPTIMIZATION CMAKE_POSITION_INDEPENDENT_CODE) -upx_print_var(PROPERTY_TARGET_SUPPORTS_SHARED_LIBS) + # misc + upx_print_var(CMAKE_BUILD_WITH_INSTALL_RPATH) + upx_print_var(CMAKE_INTERPROCEDURAL_OPTIMIZATION CMAKE_POSITION_INDEPENDENT_CODE) + upx_print_var(PROPERTY_TARGET_SUPPORTS_SHARED_LIBS) -# shortcuts -upx_print_var(APPLE CLANG CYGWIN GNU_FRONTEND GNUC MINGW MSVC MSVC_FRONTEND MSVC_IDE MSVC_TOOLSET_VERSION MSVC_VERSION MSYS UNIX WIN32 WIN64) + # shortcuts + upx_print_var(APPLE CLANG CYGWIN GNU_FRONTEND GNUC MINGW MSVC MSVC_FRONTEND MSVC_IDE MSVC_TOOLSET_VERSION MSVC_VERSION MSYS UNIX WIN32 WIN64) +endfunction() # vim:set ft=cmake ts=4 sw=4 tw=0 et: diff --git a/misc/cmake/self_pack_test.cmake b/misc/cmake/self_pack_test.cmake index 63f6efce..aa653816 100644 --- a/misc/cmake/self_pack_test.cmake +++ b/misc/cmake/self_pack_test.cmake @@ -137,7 +137,7 @@ if(NOT UPX_CONFIG_DISABLE_EXHAUSTIVE_TESTS) endif() endforeach() endforeach() -endif () # UPX_CONFIG_DISABLE_EXHAUSTIVE_TESTS +endif() # UPX_CONFIG_DISABLE_EXHAUSTIVE_TESTS # clean up set(emu "") diff --git a/misc/make/Makefile-extra.mk b/misc/make/Makefile-extra.mk index a41e7e17..bc6a11c8 100644 --- a/misc/make/Makefile-extra.mk +++ b/misc/make/Makefile-extra.mk @@ -70,34 +70,37 @@ build/extra/clang-static/debug: PHONY; $(call run_config_and_build,$@,Debug) build/extra/clang-static/release: PHONY; $(call run_config_and_build,$@,Release) build/extra/clang-static/%: export CC = clang -static build/extra/clang-static/%: export CXX = clang++ -static +build/extra/clang-static/%: export UPX_CONFIG_DISABLE_SHARED_LIBS = ON # force building with clang/clang++ -static-pie build/extra/clang-static-pie/debug: PHONY; $(call run_config_and_build,$@,Debug) build/extra/clang-static-pie/release: PHONY; $(call run_config_and_build,$@,Release) build/extra/clang-static-pie/%: export CC = clang -static-pie -fPIE -Wno-unused-command-line-argument build/extra/clang-static-pie/%: export CXX = clang++ -static-pie -fPIE -Wno-unused-command-line-argument +build/extra/clang-static-pie/%: export UPX_CONFIG_DISABLE_SHARED_LIBS = ON # force building with clang/clang++ -static -flto build/extra/clang-static-lto/debug: PHONY; $(call run_config_and_build,$@,Debug) build/extra/clang-static-lto/release: PHONY; $(call run_config_and_build,$@,Release) build/extra/clang-static-lto/%: export CC = clang -static -flto build/extra/clang-static-lto/%: export CXX = clang++ -static -flto +build/extra/clang-static-lto/%: export UPX_CONFIG_DISABLE_SHARED_LIBS = ON # force building with clang/clang++ C++20 (and C17) build/extra/clang-std-cxx20/debug: PHONY; $(call run_config_and_build,$@,Debug) build/extra/clang-std-cxx20/release: PHONY; $(call run_config_and_build,$@,Release) build/extra/clang-std-cxx20/%: export CC = clang -std=gnu17 build/extra/clang-std-cxx20/%: export CXX = clang++ -std=gnu++20 -build/extra/clang-std-cxx20/%: export UPX_CONFIG_DISABLE_C_STANDARD=ON -build/extra/clang-std-cxx20/%: export UPX_CONFIG_DISABLE_CXX_STANDARD=ON +build/extra/clang-std-cxx20/%: export UPX_CONFIG_DISABLE_C_STANDARD = ON +build/extra/clang-std-cxx20/%: export UPX_CONFIG_DISABLE_CXX_STANDARD = ON # force building with clang/clang++ C++23 (and C23) build/extra/clang-std-cxx23/debug: PHONY; $(call run_config_and_build,$@,Debug) build/extra/clang-std-cxx23/release: PHONY; $(call run_config_and_build,$@,Release) build/extra/clang-std-cxx23/%: export CC = clang -std=gnu2x -Wno-constant-logical-operand build/extra/clang-std-cxx23/%: export CXX = clang++ -std=gnu++2b -build/extra/clang-std-cxx23/%: export UPX_CONFIG_DISABLE_C_STANDARD=ON -build/extra/clang-std-cxx23/%: export UPX_CONFIG_DISABLE_CXX_STANDARD=ON +build/extra/clang-std-cxx23/%: export UPX_CONFIG_DISABLE_C_STANDARD = ON +build/extra/clang-std-cxx23/%: export UPX_CONFIG_DISABLE_CXX_STANDARD = ON # force building with gcc/g++ build/extra/gcc/debug: PHONY; $(call run_config_and_build,$@,Debug) @@ -134,42 +137,45 @@ build/extra/gcc-static/debug: PHONY; $(call run_config_and_build,$@,Debug) build/extra/gcc-static/release: PHONY; $(call run_config_and_build,$@,Release) build/extra/gcc-static/%: export CC = gcc -static build/extra/gcc-static/%: export CXX = g++ -static +build/extra/gcc-static/%: export UPX_CONFIG_DISABLE_SHARED_LIBS = ON # force building with gcc/g++ -static-pie build/extra/gcc-static-pie/debug: PHONY; $(call run_config_and_build,$@,Debug) build/extra/gcc-static-pie/release: PHONY; $(call run_config_and_build,$@,Release) build/extra/gcc-static-pie/%: export CC = gcc -static-pie -fPIE build/extra/gcc-static-pie/%: export CXX = g++ -static-pie -fPIE +build/extra/gcc-static-pie/%: export UPX_CONFIG_DISABLE_SHARED_LIBS = ON # force building with gcc/g++ -static -flto build/extra/gcc-static-lto/debug: PHONY; $(call run_config_and_build,$@,Debug) build/extra/gcc-static-lto/release: PHONY; $(call run_config_and_build,$@,Release) build/extra/gcc-static-lto/%: export CC = gcc -static -flto build/extra/gcc-static-lto/%: export CXX = g++ -static -flto +build/extra/gcc-static-lto/%: export UPX_CONFIG_DISABLE_SHARED_LIBS = ON # force building with gcc/g++ C++20 (and C17) build/extra/gcc-std-cxx20/debug: PHONY; $(call run_config_and_build,$@,Debug) build/extra/gcc-std-cxx20/release: PHONY; $(call run_config_and_build,$@,Release) build/extra/gcc-std-cxx20/%: export CC = gcc -std=gnu17 build/extra/gcc-std-cxx20/%: export CXX = g++ -std=gnu++20 -build/extra/gcc-std-cxx20/%: export UPX_CONFIG_DISABLE_C_STANDARD=ON -build/extra/gcc-std-cxx20/%: export UPX_CONFIG_DISABLE_CXX_STANDARD=ON +build/extra/gcc-std-cxx20/%: export UPX_CONFIG_DISABLE_C_STANDARD = ON +build/extra/gcc-std-cxx20/%: export UPX_CONFIG_DISABLE_CXX_STANDARD = ON # force building with gcc/g++ C++23 (and C23) build/extra/gcc-std-cxx23/debug: PHONY; $(call run_config_and_build,$@,Debug) build/extra/gcc-std-cxx23/release: PHONY; $(call run_config_and_build,$@,Release) build/extra/gcc-std-cxx23/%: export CC = gcc -std=gnu2x build/extra/gcc-std-cxx23/%: export CXX = g++ -std=gnu++2b -build/extra/gcc-std-cxx23/%: export UPX_CONFIG_DISABLE_C_STANDARD=ON -build/extra/gcc-std-cxx23/%: export UPX_CONFIG_DISABLE_CXX_STANDARD=ON +build/extra/gcc-std-cxx23/%: export UPX_CONFIG_DISABLE_C_STANDARD = ON +build/extra/gcc-std-cxx23/%: export UPX_CONFIG_DISABLE_CXX_STANDARD = ON # force building with gcc/g++ C++26 (EXPERIMENTAL; need gcc-14) build/extra/gcc-std-cxx26/debug: PHONY; $(call run_config_and_build,$@,Debug) build/extra/gcc-std-cxx26/release: PHONY; $(call run_config_and_build,$@,Release) build/extra/gcc-std-cxx26/%: export CC = gcc -std=gnu23 build/extra/gcc-std-cxx26/%: export CXX = g++ -std=gnu++26 -build/extra/gcc-std-cxx26/%: export UPX_CONFIG_DISABLE_C_STANDARD=ON -build/extra/gcc-std-cxx26/%: export UPX_CONFIG_DISABLE_CXX_STANDARD=ON +build/extra/gcc-std-cxx26/%: export UPX_CONFIG_DISABLE_C_STANDARD = ON +build/extra/gcc-std-cxx26/%: export UPX_CONFIG_DISABLE_CXX_STANDARD = ON # cross compiler: Linux glibc aarch64-linux-gnu (arm64) build/extra/cross-linux-gnu-aarch64/debug: PHONY; $(call run_config_and_build,$@,Debug) diff --git a/misc/testsuite/mimic_ctest.sh b/misc/testsuite/mimic_ctest.sh index 4d2d2d16..1fe3c4e6 100755 --- a/misc/testsuite/mimic_ctest.sh +++ b/misc/testsuite/mimic_ctest.sh @@ -6,8 +6,9 @@ argv0=$0; argv0abs=$(readlink -fn "$argv0"); argv0dir=$(dirname "$argv0abs") # # Copyright (C) Markus Franz Xaver Johannes Oberhumer # -# mimic running "ctest", i.e. the "test" section of CMakeLists.txt; does not redirect stdout -# (allows freely setting $upx_exe_runner, while CMake is restricted to configure-time settings) +# mimic running "ctest", i.e. the "test" section of CMakeLists.txt +# - does not redirect stdout +# - allows freely setting $upx_exe_runner, while CMake is restricted to configure-time settings # # requires: # $upx_exe (required, but with convenience fallback "./upx") @@ -48,7 +49,7 @@ if ! "${run_upx[@]}" --help >/dev/null; then echo "UPX-ERROR: FATAL: upx --help #*********************************************************************** # see CMakeLists.txt # -# IDEA: create a Makefile and use "make -j" so that these tests can +# IDEA: create a Makefile and use "make -j8" so that these tests can # run in parallel much like "ctest --parallel 8" #*********************************************************************** diff --git a/src/stub/scripts/bin2h.py b/src/stub/scripts/bin2h.py index bb309f93..44bfb6c0 100644 --- a/src/stub/scripts/bin2h.py +++ b/src/stub/scripts/bin2h.py @@ -256,7 +256,7 @@ def compress_stub(method, idata): # encode upx stub header odata = encode_compressed_stub_header(method, idata, odata) + odata else: - raise Exception, ("invalid method", method, opts.methods) + raise Exception("invalid method", method, opts.methods) if 1 and len(odata) >= len(idata): # not compressible return 0, idata diff --git a/src/stub/scripts/brandelf.py b/src/stub/scripts/brandelf.py index 0d6be757..623ba361 100644 --- a/src/stub/scripts/brandelf.py +++ b/src/stub/scripts/brandelf.py @@ -58,29 +58,29 @@ def do_file(fn): def brand_arm(s): if e_ident[4:7] != s: - raise Exception, "%s is not %s" % (fn, opts.bfdname) + raise Exception("%s is not %s" % (fn, opts.bfdname)) write("\x61") # ELFOSABI_ARM def brand_freebsd(s): if e_ident[4:7] != s: - raise Exception, "%s is not %s" % (fn, opts.bfdname) + raise Exception("%s is not %s" % (fn, opts.bfdname)) write("\x09") def brand_linux(s): if e_ident[4:7] != s: - raise Exception, "%s is not %s" % (fn, opts.bfdname) + raise Exception("%s is not %s" % (fn, opts.bfdname)) ##write("\x00Linux\x00\x00\x00") write("\x00" * 9) def brand_netbsd(s): if e_ident[4:7] != s: - raise Exception, "%s is not %s" % (fn, opts.bfdname) + raise Exception("%s is not %s" % (fn, opts.bfdname)) write("\x02") def brand_openbsd(s): if e_ident[4:7] != s: - raise Exception, "%s is not %s" % (fn, opts.bfdname) + raise Exception("%s is not %s" % (fn, opts.bfdname)) write("\x0c") if opts.bfdname[:3] == "elf": if e_ident[:4] != "\x7f\x45\x4c\x46": - raise Exception, "%s is not %s" % (fn, "ELF") + raise Exception("%s is not %s" % (fn, "ELF")) fp.seek(7, 0) if opts.bfdname == "elf32-bigarm" and opts.elfosabi == "arm": brand_arm("\x01\x02\x01") @@ -106,7 +106,7 @@ def do_file(fn): done = 0 fp.close() if not done: - raise Exception, ("error: invalid args", opts.__dict__) + raise Exception("error: invalid args", opts.__dict__) def main(argv): @@ -127,7 +127,7 @@ def main(argv): else: assert 0, ("getopt problem:", opt, optarg, xopts, args) # process arguments if not args: - raise Exception, "error: no arguments given" + raise Exception("error: no arguments given") for arg in args: do_file(arg) return 0 diff --git a/src/stub/scripts/gpp_inc.py b/src/stub/scripts/gpp_inc.py index 0e159be2..e1d00810 100644 --- a/src/stub/scripts/gpp_inc.py +++ b/src/stub/scripts/gpp_inc.py @@ -63,7 +63,7 @@ def not_found(state, l, inc, fatal=None): if fatal is None: fatal = opts.fatal if fatal: - raise Exception, "%s:%d: include file %s not found" % (state[0], state[2], inc) + raise Exception("%s:%d: include file %s not found" % (state[0], state[2], inc)) return l @@ -78,7 +78,7 @@ def parse_comment(state, l, comment): if f == "ignore=0": cf["fatal"] = 1 elif f == "ignore=1": cf["fatal"] = 0 else: - raise Exception, "%s:%d: bad flags %s %s" % (state[0], state[2], f, str(flags)) + raise Exception("%s:%d: bad flags %s %s" % (state[0], state[2], f, str(flags))) return cf @@ -93,7 +93,7 @@ def handle_inc_c(state, l, ofp): elif q1 == '"' and q2 == '"': dirs = [state[1]] + opts.includes else: - raise Exception, "syntax error: include line " + l + raise Exception("syntax error: include line " + l) for dir in dirs: fn = os.path.join(dir, inc) if os.path.isfile(fn): @@ -114,7 +114,7 @@ def handle_inc_nasm(state, l, ofp): elif q1 == '"' and q2 == '"': pass else: - raise Exception, "syntax error: include line " + l + raise Exception("syntax error: include line " + l) # info: nasm simply does concat the includes for prefix in opts.includes + [""]: fn = prefix + inc diff --git a/src/stub/scripts/xstrip.py b/src/stub/scripts/xstrip.py index 45bad0c8..b77b7d12 100644 --- a/src/stub/scripts/xstrip.py +++ b/src/stub/scripts/xstrip.py @@ -73,6 +73,8 @@ def check_dump(dump_fn): psections = d.find("Sections:\n") psymbols = d.find("SYMBOL TABLE:\n") prelocs = d.find("RELOCATION RECORDS FOR "); + if prelocs == -1: # no relocations + prelocs = len(d) assert 0 <= psections < psymbols < prelocs # preprocessSections sections = [] @@ -139,7 +141,7 @@ def do_file(fn): fp.seek(0, 0) idata = fp.read() if idata[:4] != "\x7f\x45\x4c\x46": - raise Exception, "%s is not %s" % (fn, "ELF") + raise Exception("%s is not %s" % (fn, "ELF")) if idata[4:7] == "\x01\x01\x01": # ELF32 LE eh, idata = idata[:52], idata[52:] @@ -162,7 +164,7 @@ def do_file(fn): e_shnum, e_shstrndx = struct.unpack(">HH", eh[60:64]) assert e_shstrndx + 3 == e_shnum else: - raise Exception, "%s is not %s" % (fn, "ELF") + raise Exception("%s is not %s" % (fn, "ELF")) odata = None pos = idata.find("\0.symtab\0.strtab\0.shstrtab\0") @@ -207,7 +209,7 @@ def main(argv): elif opt in ["--with-dump"]: opts.with_dump = optarg else: assert 0, ("getopt problem:", opt, optarg, xopts, args) if not args: - raise Exception, "error: no arguments given" + raise Exception("error: no arguments given") if opts.with_dump or opts.bindump: assert len(args) == 1, "need exactly one file" # process arguments