diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 39e4a9dc101a9f45886f10b73c595e7d4870c036..6446b047b217e8daea645c0c7aa7c83bc7511946 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -11,8 +11,6 @@ endif() include(CheckIncludeFile) -set(CMake_USE_ELF_PARSER 1) - if(NOT CMake_DEFAULT_RECURSION_LIMIT) if(DEFINED ENV{DASHBOARD_TEST_FROM_CTEST}) set(CMake_DEFAULT_RECURSION_LIMIT 100) @@ -83,11 +81,6 @@ include_directories( ${CMake_HAIKU_INCLUDE_DIRS} ) -# The ELF parser can be built on all platforms. -if(CMake_USE_ELF_PARSER) - set(ELF_SRCS cmELF.h cmELF.cxx) -endif() - # Check if we can build the Mach-O parser. if(CMake_USE_MACH_PARSER) set(MACH_SRCS cmMachO.h cmMachO.cxx) @@ -217,7 +210,8 @@ set(SRCS cmDocumentationSection.cxx cmDynamicLoader.cxx cmDynamicLoader.h - ${ELF_SRCS} + cmELF.h + cmELF.cxx cmExprParserHelper.cxx cmExportBuildAndroidMKGenerator.h cmExportBuildAndroidMKGenerator.cxx diff --git a/Source/cmConfigure.cmake.h.in b/Source/cmConfigure.cmake.h.in index aeca6b42acb92f01c03df25d61718a82621ba7ab..6a419f681be8380c29cf3da3e0fcf8bb8ffb5856 100644 --- a/Source/cmConfigure.cmake.h.in +++ b/Source/cmConfigure.cmake.h.in @@ -16,7 +16,6 @@ #cmakedefine HAVE_ENVIRON_NOT_REQUIRE_PROTOTYPE #cmakedefine HAVE_UNSETENV -#cmakedefine CMake_USE_ELF_PARSER #cmakedefine CMake_USE_MACH_PARSER #cmakedefine CMake_USE_XCOFF_PARSER #define CMake_DEFAULT_RECURSION_LIMIT @CMake_DEFAULT_RECURSION_LIMIT@ diff --git a/Source/cmELF.h b/Source/cmELF.h index 5700a3817cb6cb96c3a72cf899c39a106bbb14e6..5807c1625595a74b400ae3b8e0e3444704cad650 100644 --- a/Source/cmELF.h +++ b/Source/cmELF.h @@ -10,10 +10,6 @@ #include <utility> #include <vector> -#if !defined(CMake_USE_ELF_PARSER) -# error "This file may be included only if CMake_USE_ELF_PARSER is enabled." -#endif - class cmELFInternal; /** \class cmELF diff --git a/Source/cmFileCommand.cxx b/Source/cmFileCommand.cxx index 0ad59c7b5d356371521e7030511b2291848e40f5..1e3076f88dc6dd5cc20ce5d834b861328941f5e2 100644 --- a/Source/cmFileCommand.cxx +++ b/Source/cmFileCommand.cxx @@ -31,6 +31,7 @@ #include "cmArgumentParser.h" #include "cmCMakePath.h" #include "cmCryptoHash.h" +#include "cmELF.h" #include "cmExecutionStatus.h" #include "cmFSPermissions.h" #include "cmFileCopier.h" @@ -64,10 +65,6 @@ # include "cmFileLockResult.h" #endif -#if defined(CMake_USE_ELF_PARSER) -# include "cmELF.h" -#endif - #if defined(_WIN32) # include <windows.h> #endif @@ -1242,8 +1239,12 @@ bool HandleReadElfCommand(std::vector<std::string> const& args, return false; } -#if defined(CMake_USE_ELF_PARSER) cmELF elf(fileNameArg.c_str()); + if (!elf) { + status.SetError(cmStrCat("READ_ELF given FILE \"", fileNameArg, + "\" that is not a valid ELF file.")); + return false; + } if (!arguments.RPath.empty()) { if (cmELF::StringEntry const* se_rpath = elf.GetRPath()) { @@ -1261,15 +1262,6 @@ bool HandleReadElfCommand(std::vector<std::string> const& args, } return true; -#else - std::string error = "ELF parser not available on this platform."; - if (arguments.Error.empty()) { - status.SetError(error); - return false; - } - status.GetMakefile().AddDefinition(arguments.Error, error); - return true; -#endif } bool HandleInstallCommand(std::vector<std::string> const& args, diff --git a/Source/cmGeneratorTarget.cxx b/Source/cmGeneratorTarget.cxx index f268c6c3e6fc33ee7ee22b3a392194eb432f0222..aff32a496b35566e81bbf0a27aa934f2d3c21a7a 100644 --- a/Source/cmGeneratorTarget.cxx +++ b/Source/cmGeneratorTarget.cxx @@ -2142,7 +2142,6 @@ bool cmGeneratorTarget::IsChrpathUsed(const std::string& config) const return true; } -#if defined(CMake_USE_ELF_PARSER) || defined(CMake_USE_XCOFF_PARSER) // Enable if the rpath flag uses a separator and the target uses // binaries we know how to edit. std::string ll = this->GetLinkerLanguage(config); @@ -2155,21 +2154,17 @@ bool cmGeneratorTarget::IsChrpathUsed(const std::string& config) const // CMAKE_EXECUTABLE_FORMAT. if (cmProp fmt = this->Makefile->GetDefinition("CMAKE_EXECUTABLE_FORMAT")) { -# if defined(CMake_USE_ELF_PARSER) if (*fmt == "ELF") { return true; } -# endif -# if defined(CMake_USE_XCOFF_PARSER) +#if defined(CMake_USE_XCOFF_PARSER) if (*fmt == "XCOFF") { return true; } -# endif +#endif } } } -#endif - static_cast<void>(config); return false; } diff --git a/Source/cmSystemTools.cxx b/Source/cmSystemTools.cxx index d6b82086d6573fbdcb8361ba57b632b38203cfb7..f082ae84bbfb4f44ba249be8b31e6015f6016e58 100644 --- a/Source/cmSystemTools.cxx +++ b/Source/cmSystemTools.cxx @@ -20,6 +20,7 @@ #include <cm3p/uv.h> #include "cmDuration.h" +#include "cmELF.h" #include "cmMessageMetadata.h" #include "cmProcessOutput.h" #include "cmRange.h" @@ -46,12 +47,6 @@ # include "cmCryptoHash.h" #endif -#if defined(CMake_USE_ELF_PARSER) -# include "cmELF.h" -#else -class cmELF; -#endif - #if defined(CMake_USE_MACH_PARSER) # include "cmMachO.h" #endif @@ -2448,14 +2443,12 @@ void cmSystemTools::MakefileColorEcho(int color, const char* message, bool cmSystemTools::GuessLibrarySOName(std::string const& fullPath, std::string& soname) { -// For ELF shared libraries use a real parser to get the correct -// soname. -#if defined(CMake_USE_ELF_PARSER) + // For ELF shared libraries use a real parser to get the correct + // soname. cmELF elf(fullPath.c_str()); if (elf) { return elf.GetSOName(soname); } -#endif // If the file is not a symlink we have no guess for its soname. if (!cmSystemTools::FileIsSymlink(fullPath)) { @@ -2543,14 +2536,6 @@ cm::optional<bool> AdjustRPathELF(std::string const& file, const AdjustCallback& adjustCallback, std::string* emsg, bool* changed) { -#if !defined(CMake_USE_ELF_PARSER) - (void)file; - (void)emptyCallback; - (void)adjustCallback; - (void)emsg; - (void)changed; - return cm::nullopt; // Cannot handle ELF files. -#else if (changed) { *changed = false; } @@ -2678,7 +2663,6 @@ cm::optional<bool> AdjustRPathELF(std::string const& file, *changed = true; } return true; -#endif } std::function<bool(std::string*, const cmELF&)> MakeEmptyCallback( @@ -2690,16 +2674,11 @@ std::function<bool(std::string*, const cmELF&)> MakeEmptyCallback( // okay. return true; } -#if defined(CMake_USE_ELF_PARSER) if (emsg) { *emsg = cmStrCat("No valid ELF RPATH or RUNPATH entry exists in the file; ", elf.GetErrorMessage()); } -#else - static_cast<void>(emsg); - static_cast<void>(elf); -#endif return false; }; } @@ -3033,12 +3012,6 @@ int cmSystemTools::strverscmp(std::string const& lhs, std::string const& rhs) static cm::optional<bool> RemoveRPathELF(std::string const& file, std::string* emsg, bool* removed) { -#if !defined(CMake_USE_ELF_PARSER) - (void)file; - (void)emsg; - (void)removed; - return cm::nullopt; // Cannot handle ELF files. -#else if (removed) { *removed = false; } @@ -3177,7 +3150,6 @@ static cm::optional<bool> RemoveRPathELF(std::string const& file, *removed = true; } return true; -#endif } static cm::optional<bool> RemoveRPathXCOFF(std::string const& file, @@ -3224,7 +3196,6 @@ bool cmSystemTools::RemoveRPath(std::string const& file, std::string* emsg, bool cmSystemTools::CheckRPath(std::string const& file, std::string const& newRPath) { -#if defined(CMake_USE_ELF_PARSER) // Parse the ELF binary. cmELF elf(file.c_str()); if (elf) { @@ -3247,7 +3218,6 @@ bool cmSystemTools::CheckRPath(std::string const& file, } return false; } -#endif #if defined(CMake_USE_XCOFF_PARSER) // Parse the XCOFF binary. cmXCOFF xcoff(file.c_str()); diff --git a/Tests/RunCMake/CMakeLists.txt b/Tests/RunCMake/CMakeLists.txt index 256c8a66d9ee002ca7e98e908934efda89693893..59fa9dcae3e29fe59a1783438c097195b50a649d 100644 --- a/Tests/RunCMake/CMakeLists.txt +++ b/Tests/RunCMake/CMakeLists.txt @@ -377,9 +377,7 @@ add_RunCMake_test(ctest_upload) add_RunCMake_test(ctest_fixtures) add_RunCMake_test(file -DMSYS=${MSYS}) add_RunCMake_test(file-CHMOD -DMSYS=${MSYS}) -if(CMake_USE_ELF_PARSER) - add_RunCMake_test(file-RPATH -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME} -DCMake_USE_ELF_PARSER=${CMake_USE_ELF_PARSER}) -endif() +add_RunCMake_test(file-RPATH -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}) add_RunCMake_test(find_file) add_RunCMake_test(find_library -DCYGWIN=${CYGWIN} -DMSYS=${MSYS}) add_RunCMake_test(find_package -DMSYS=${MSYS}) diff --git a/Tests/RunCMake/file-RPATH/RunCMakeTest.cmake b/Tests/RunCMake/file-RPATH/RunCMakeTest.cmake index e209f353a23a8a0c5f2056877dd46584dc60ff1b..1ca2e757a69cd30083adde1f951db42ed273f59c 100644 --- a/Tests/RunCMake/file-RPATH/RunCMakeTest.cmake +++ b/Tests/RunCMake/file-RPATH/RunCMakeTest.cmake @@ -1,8 +1,6 @@ include(RunCMake) -if(CMake_USE_ELF_PARSER) - run_cmake_command(ELF ${CMAKE_COMMAND} -P ${RunCMake_SOURCE_DIR}/ELF.cmake) -endif() +run_cmake_command(ELF ${CMAKE_COMMAND} -P ${RunCMake_SOURCE_DIR}/ELF.cmake) if(CMAKE_SYSTEM_NAME STREQUAL "AIX") run_cmake_command(XCOFF ${CMAKE_COMMAND} -P ${RunCMake_SOURCE_DIR}/XCOFF.cmake) diff --git a/bootstrap b/bootstrap index f8d2f693c2f465047e7b3ab9367b921a2fe1f753..540743d3c5e2464789aae0f38afb51ddfd780ac8 100755 --- a/bootstrap +++ b/bootstrap @@ -324,6 +324,7 @@ CMAKE_CXX_SOURCES="\ cmDefinePropertyCommand \ cmDefinitions \ cmDocumentationFormatter \ + cmELF \ cmEnableLanguageCommand \ cmEnableTestingCommand \ cmExecProgramCommand \