Mercurial > irccd
changeset 101:113d909fdfe1
CMake: disallow absolute paths, #389
author | David Demelier <markand@malikania.fr> |
---|---|
date | Mon, 25 Apr 2016 21:16:47 +0200 |
parents | a3814665a60d |
children | 4777f7e18bf2 |
files | CMakeLists.txt cmake/IrccdOptions.cmake cmake/IrccdSystem.cmake cmake/function/IrccdDefineExecutable.cmake cmake/function/IrccdDefineHtml.cmake cmake/function/IrccdDefineMan.cmake cmake/function/IrccdDefinePlugin.cmake cmake/internal/sysconfig.hpp.in contrib/CMakeLists.txt doc/CMakeLists.txt doc/examples/CMakeLists.txt doc/html/resources/CMakeLists.txt lib/CMakeLists.txt lib/irccd/path.cpp lib/irccd/path.hpp plugins/CMakeLists.txt |
diffstat | 16 files changed, 51 insertions(+), 177 deletions(-) [+] |
line wrap: on
line diff
--- a/CMakeLists.txt Fri Apr 22 18:50:00 2016 +0200 +++ b/CMakeLists.txt Mon Apr 25 21:16:47 2016 +0200 @@ -137,23 +137,3 @@ # # add_dependencies(release package_ifw) #endif () - -# Show warnings about non-relocatable irccd. -if (NOT IRCCD_RELOCATABLE) - message("Note: irccd is not relocatable, the following paths are absolute:") - message("") - - foreach (path ${IRCCD_ABSOLUTE_PATHS}) - message(" ${path} is set to ${${path}}") - endforeach () - - message("") - message("You can still use irccd, but you won't be able to move the application to a") - message("different directory.") - message("") - message("This may be an issue with some packages manager which allows relocating") - message("application in different directories.") - message("") - message("Set to relative paths if this is a concern.") - message("") -endif ()
--- a/cmake/IrccdOptions.cmake Fri Apr 22 18:50:00 2016 +0200 +++ b/cmake/IrccdOptions.cmake Mon Apr 25 21:16:47 2016 +0200 @@ -37,9 +37,6 @@ # # Options that controls both installations and the irccd runtime: # -# Note: it is allowed to use absolute path but it's *strongly* recommended to -# use relative paths if you want to keep irccd relocatable. -# # WITH_BINDIR Binary directory for irccd, irccdctl # WITH_PLUGINDIR Path where plugins must be installed # WITH_DOCDIR Path where to install documentation @@ -129,22 +126,14 @@ endif () # -# Check if any of these path is absolute and mark irccd relocatable -# only if all paths are relative +# Check if any of these path is absolute and raise an error if true. # -set(IRCCD_RELOCATABLE TRUE) - foreach (d WITH_BINDIR WITH_CACHEDIR WITH_DATADIR WITH_CONFDIR WITH_PLUGINDIR) if (IS_ABSOLUTE ${${d}}) - list(APPEND IRCCD_ABSOLUTE_PATHS ${d}) - set(IRCCD_RELOCATABLE FALSE) + message(FATAL_ERROR "${d} can not be absolute (${${d}} given)") endif () endforeach () -if (IRCCD_RELOCATABLE) - set(IRCCD_FAKEDIR ${CMAKE_BINARY_DIR}/fakeroot) -endif () - # --------------------------------------------------------- # Internal dependencies # --------------------------------------------------------- @@ -222,9 +211,7 @@ set(IRCCD_PACKAGE FALSE) -if (NOT IRCCD_RELOCATABLE) - set(IRCCD_PACKAGE_MSG "No (irccd not relocatable)") -elseif (NOT WITH_HTML) +if (NOT WITH_HTML) set(IRCCD_PACKAGE_MSG "No (HTML documentation disabled)") elseif (NOT WIN32) set(IRCCD_PACKAGE_MSG "No (only for Windows)")
--- a/cmake/IrccdSystem.cmake Fri Apr 22 18:50:00 2016 +0200 +++ b/cmake/IrccdSystem.cmake Mon Apr 25 21:16:47 2016 +0200 @@ -68,6 +68,12 @@ set(IRCCD_64BITS FALSE) endif () +set(IRCCD_FAKEROOTDIR ${CMAKE_BINARY_DIR}/fakeroot) + +if (NOT EXISTS ${IRCCD_FAKEROOTDIR}) + file(MAKE_DIRECTORY ${IRCCD_FAKEROOTDIR}) +endif () + # --------------------------------------------------------- # System identification # --------------------------------------------------------- @@ -250,22 +256,7 @@ check_struct_has_member("struct stat" st_uid sys/stat.h HAVE_STAT_ST_UID) # Configuration file. -file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/irccd) - configure_file( ${CMAKE_CURRENT_LIST_DIR}/internal/sysconfig.hpp.in - ${CMAKE_BINARY_DIR}/irccd/sysconfig.hpp -) - -install( - FILES ${CMAKE_BINARY_DIR}/irccd/sysconfig.hpp - DESTINATION include/irccd + ${IRCCD_FAKEROOTDIR}/include/irccd/sysconfig.hpp ) - -# Also copy to fakedir if possible -if (IRCCD_RELOCATABLE) - file( - COPY ${CMAKE_BINARY_DIR}/irccd/sysconfig.hpp - DESTINATION ${IRCCD_FAKEDIR}/include/irccd - ) -endif ()
--- a/cmake/function/IrccdDefineExecutable.cmake Fri Apr 22 18:50:00 2016 +0200 +++ b/cmake/function/IrccdDefineExecutable.cmake Mon Apr 25 21:16:47 2016 +0200 @@ -56,24 +56,9 @@ target_compile_definitions(${EXE_TARGET} PRIVATE ${EXE_FLAGS}) target_link_libraries(${EXE_TARGET} ${EXE_LIBRARIES}) - # use fakeroot if relocatable for public executables. - if (IRCCD_RELOCATABLE AND NOT EXE_PRIVATE) - file(MAKE_DIRECTORY ${CMAKE_BINARY_DIR}/fakeroot/${WITH_BINDIR}) - - set_target_properties( - ${EXE_TARGET} - PROPERTIES - RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/fakeroot/${WITH_BINDIR} - RUNTIME_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR}/fakeroot/${WITH_BINDIR} - RUNTIME_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR}/fakeroot/${WITH_BINDIR} - ) - endif () - - # Install the target. - if (EXE_INSTALL) - install( - TARGETS ${EXE_TARGET} - RUNTIME DESTINATION ${WITH_BINDIR} - ) + # use fakeroot for public executables. + if (NOT EXE_PRIVATE) + set_target_properties(${EXE_TARGET} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${IRCCD_FAKEROOTDIR}/${WITH_BINDIR}) + install(TARGETS ${EXE_TARGET} RUNTIME DESTINATION ${WITH_BINDIR}) endif () endfunction()
--- a/cmake/function/IrccdDefineHtml.cmake Fri Apr 22 18:50:00 2016 +0200 +++ b/cmake/function/IrccdDefineHtml.cmake Mon Apr 25 21:16:47 2016 +0200 @@ -57,11 +57,7 @@ message(FATAL_ERROR "Please specify a target") endif () - if (IRCCD_RELOCATABLE) - set(base ${CMAKE_BINARY_DIR}/fakeroot/${WITH_DOCDIR}) - else () - set(base ${CMAKE_BINARY_DIR}/docs) - endif () + set(base ${IRCCD_FAKEROOTDIR}/${WITH_DOCDIR}) if (HTML_OUTPUT) #
--- a/cmake/function/IrccdDefineMan.cmake Fri Apr 22 18:50:00 2016 +0200 +++ b/cmake/function/IrccdDefineMan.cmake Mon Apr 25 21:16:47 2016 +0200 @@ -28,16 +28,9 @@ function(irccd_define_man file man) if (WITH_MAN) - set(path ${doc_SOURCE_DIR}/man/${file}.in) - - # install to fakeroot if applicable. - if (IRCCD_RELOCATABLE) - set(output ${CMAKE_BINARY_DIR}/fakeroot/${WITH_MANDIR}/${man}/${file}) - else () - set(output ${CMAKE_BINARY_DIR}/docs/man/${man}/${file}) - endif () - - configure_file(${path} ${output} @ONLY) + set(input ${doc_SOURCE_DIR}/man/${file}.in) + set(output ${IRCCD_FAKEROOTDIR}/${WITH_MANDIR}/${man}/${file}) + configure_file(${input} ${output} @ONLY) install(FILES ${output} DESTINATION ${WITH_MANDIR}/${man}) endif () endfunction()
--- a/cmake/function/IrccdDefinePlugin.cmake Fri Apr 22 18:50:00 2016 +0200 +++ b/cmake/function/IrccdDefinePlugin.cmake Mon Apr 25 21:16:47 2016 +0200 @@ -27,12 +27,7 @@ # macro(irccd_define_plugin file) get_filename_component(name ${file} NAME) - - if (IRCCD_RELOCATABLE) - set(base ${CMAKE_BINARY_DIR}/fakeroot/${WITH_PLUGINDIR}) - else () - set(base ${CMAKE_BINARY_DIR}/plugin) - endif () + set(base ${IRCCD_FAKEROOTDIR}/${WITH_PLUGINDIR}) # Substitude variables in the JavaScript file. configure_file(${file} ${base}/${name})
--- a/cmake/internal/sysconfig.hpp.in Fri Apr 22 18:50:00 2016 +0200 +++ b/cmake/internal/sysconfig.hpp.in Mon Apr 25 21:16:47 2016 +0200 @@ -38,8 +38,6 @@ #define IRCCD_VERSION_MINOR @IRCCD_VERSION_MINOR@ #define IRCCD_VERSION_PATCH @IRCCD_VERSION_PATCH@ -#cmakedefine IRCCD_RELOCATABLE - /* * System identification. * ------------------------------------------------------------------
--- a/contrib/CMakeLists.txt Fri Apr 22 18:50:00 2016 +0200 +++ b/contrib/CMakeLists.txt Mon Apr 25 21:16:47 2016 +0200 @@ -21,12 +21,7 @@ if (WITH_SYSTEMD) # Directory for systemd set(WITH_SYSTEMDDIR "/usr/lib/systemd/system" CACHE STRING "Absolute path where to install systemd files") - - if (IRCCD_RELOCATABLE) - set(PATH "${CMAKE_INSTALL_PREFIX}/${WITH_BINDIR}/irccd") - else () - set(PATH "${WITH_BINDIR}/irccd") - endif () + set(PATH "${CMAKE_INSTALL_PREFIX}/${WITH_BINDIR}/irccd") configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/irccd.service
--- a/doc/CMakeLists.txt Fri Apr 22 18:50:00 2016 +0200 +++ b/doc/CMakeLists.txt Mon Apr 25 21:16:47 2016 +0200 @@ -31,20 +31,6 @@ ${doc_SOURCE_DIR}/procs/60.new-command.md ) -# -# Set the DOC_OUTPUT variable to where files will be installed -# ------------------------------------------------------------------- -# -# Depending if irccd is relocatable or not, documentation generated will be in a different folder, either -# in the real fakeroot documentation directory or not. -# - -if (IRCCD_RELOCATABLE) - set(DOC_OUTPUT ${CMAKE_BINARY_DIR}/fakeroot/${WITH_DOCDIR}) -else () - set(DOC_OUTPUT ${CMAKE_BINARY_DIR}/docs) -endif () - # Needed for fakeroot if (WITH_DOXYGEN) add_subdirectory(doxygen)
--- a/doc/examples/CMakeLists.txt Fri Apr 22 18:50:00 2016 +0200 +++ b/doc/examples/CMakeLists.txt Mon Apr 25 21:16:47 2016 +0200 @@ -18,32 +18,30 @@ project(examples) -if (IRCCD_RELOCATABLE) - add_custom_command( - OUTPUT - ${CMAKE_BINARY_DIR}/fakeroot/${WITH_CONFDIR}/irccd.conf.sample - ${CMAKE_BINARY_DIR}/fakeroot/${WITH_CONFDIR}/irccdctl.conf.sample - COMMAND - ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/irccd.conf ${CMAKE_BINARY_DIR}/fakeroot/${WITH_CONFDIR}/irccd.conf.sample - COMMAND - ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/irccdctl.conf ${CMAKE_BINARY_DIR}/fakeroot/${WITH_CONFDIR}/irccdctl.conf.sample - DEPENDS - ${CMAKE_CURRENT_SOURCE_DIR}/irccd.conf - ${CMAKE_CURRENT_SOURCE_DIR}/irccdctl.conf - ) +add_custom_command( + OUTPUT + ${IRCCD_FAKEROOTDIR}/${WITH_CONFDIR}/irccd.conf.sample + ${IRCCD_FAKEROOTDIR}/${WITH_CONFDIR}/irccdctl.conf.sample + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/irccd.conf ${IRCCD_FAKEROOTDIR}/${WITH_CONFDIR}/irccd.conf.sample + COMMAND + ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/irccdctl.conf ${IRCCD_FAKEROOTDIR}/${WITH_CONFDIR}/irccdctl.conf.sample + DEPENDS + ${CMAKE_CURRENT_SOURCE_DIR}/irccd.conf + ${CMAKE_CURRENT_SOURCE_DIR}/irccdctl.conf +) - add_custom_target( - docs-examples - DEPENDS - ${CMAKE_BINARY_DIR}/fakeroot/${WITH_CONFDIR}/irccd.conf.sample - ${CMAKE_BINARY_DIR}/fakeroot/${WITH_CONFDIR}/irccdctl.conf.sample - SOURCES - ${CMAKE_CURRENT_SOURCE_DIR}/irccd.conf - ${CMAKE_CURRENT_SOURCE_DIR}/irccdctl.conf - ) +add_custom_target( + docs-examples + DEPENDS + ${IRCCD_FAKEROOTDIR}/${WITH_CONFDIR}/irccd.conf.sample + ${IRCCD_FAKEROOTDIR}/${WITH_CONFDIR}/irccdctl.conf.sample + SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/irccd.conf + ${CMAKE_CURRENT_SOURCE_DIR}/irccdctl.conf +) - add_dependencies(docs docs-examples) -endif () +add_dependencies(docs docs-examples) install( FILES irccdctl.conf
--- a/doc/html/resources/CMakeLists.txt Fri Apr 22 18:50:00 2016 +0200 +++ b/doc/html/resources/CMakeLists.txt Mon Apr 25 21:16:47 2016 +0200 @@ -41,9 +41,9 @@ foreach (f ${CSS_FILES} ${JS_FILES}) get_filename_component(base ${f} DIRECTORY) get_filename_component(name ${f} NAME) - list(APPEND OUTPUTS ${DOC_OUTPUT}/${base}/${name}) + list(APPEND OUTPUTS ${IRCCD_FAKEROOTDIR}/${WITH_DOCDIR}/${base}/${name}) list(APPEND SOURCES ${resources_SOURCE_DIR}/${f}) - list(APPEND COMMANDS COMMAND ${CMAKE_COMMAND} -E copy ${resources_SOURCE_DIR}/${f} ${DOC_OUTPUT}/${base}) + list(APPEND COMMANDS COMMAND ${CMAKE_COMMAND} -E copy ${resources_SOURCE_DIR}/${f} ${IRCCD_FAKEROOTDIR}/${WITH_DOCDIR}/${base}) install(FILES ${resources_SOURCE_DIR}/${f} DESTINATION ${WITH_DOCDIR}/${base}) endforeach () @@ -51,8 +51,8 @@ OUTPUT ${OUTPUTS} DEPENDS ${SOURCES} COMMENT "Copying HTML resources" - COMMAND ${CMAKE_COMMAND} -E make_directory ${DOC_OUTPUT}/css - COMMAND ${CMAKE_COMMAND} -E make_directory ${DOC_OUTPUT}/js + COMMAND ${CMAKE_COMMAND} -E make_directory ${IRCCD_FAKEROOTDIR}/${WITH_DOCDIR}/css + COMMAND ${CMAKE_COMMAND} -E make_directory ${IRCCD_FAKEROOTDIR}/${WITH_DOCDIR}/js ${COMMANDS} )
--- a/lib/CMakeLists.txt Fri Apr 22 18:50:00 2016 +0200 +++ b/lib/CMakeLists.txt Mon Apr 25 21:16:47 2016 +0200 @@ -27,8 +27,8 @@ PUBLIC $<BUILD_INTERFACE:${duktape_SOURCE_DIR}> $<BUILD_INTERFACE:${extern-libircclient_SOURCE_DIR}/include> - $<BUILD_INTERFACE:${irccd_BINARY_DIR}/irccd> - $<BUILD_INTERFACE:${irccd_BINARY_DIR}> + $<BUILD_INTERFACE:${IRCCD_FAKEROOTDIR}/include/irccd> + $<BUILD_INTERFACE:${IRCCD_FAKEROOTDIR}/include> $<BUILD_INTERFACE:${lib_SOURCE_DIR}> $<INSTALL_INTERFACE:include> ${OPENSSL_INCLUDE_DIR}
--- a/lib/irccd/path.cpp Fri Apr 22 18:50:00 2016 +0200 +++ b/lib/irccd/path.cpp Mon Apr 25 21:16:47 2016 +0200 @@ -71,14 +71,11 @@ * Base program directory * ------------------------------------------------------------------ * - * This variable stores the program base directory. It is only enabled when irccd is relocatable because we can - * retrieve the base directory by removing WITH_BINDIR. + * This variable stores the program base directory. * * If it is empty, the program was not able to detect it (e.g. error, not supported). */ -#if defined(IRCCD_RELOCATABLE) - std::string base; #if defined(IRCCD_SYSTEM_WINDOWS) @@ -167,8 +164,6 @@ #endif -#endif // !IRCCD_RELOCATABLE - /* * System paths * ------------------------------------------------------------------ @@ -180,46 +175,30 @@ std::string systemConfig() { -#if defined(IRCCD_RELOCATABLE) assert(!base.empty()); return base + WITH_CONFDIR; -#else - return fs::isAbsolute(WITH_CONFDIR) ? WITH_CONFDIR : std::string(PREFIX) + fs::separator() + WITH_CONFDIR; -#endif } std::string systemData() { -#if defined(IRCCD_RELOCATABLE) assert(!base.empty()); return base + WITH_DATADIR; -#else - return fs::isAbsolute(WITH_DATADIR) ? WITH_CONFDIR : std::string(PREFIX) + fs::separator() + WITH_DATADIR; -#endif } std::string systemCache() { -#if defined(IRCCD_RELOCATABLE) assert(!base.empty()); return base + WITH_CACHEDIR; -#else - return fs::isAbsolute(WITH_CACHEDIR) ? WITH_CACHEDIR : std::string(PREFIX) + fs::separator() + WITH_CACHEDIR; -#endif } std::string systemPlugins() { -#if defined(IRCCD_RELOCATABLE) assert(!base.empty()); return base + WITH_PLUGINDIR; -#else - return fs::isAbsolute(WITH_PLUGINDIR) ? WITH_PLUGINDIR : std::string(PREFIX) + fs::separator() + WITH_PLUGINDIR; -#endif } /* @@ -388,7 +367,6 @@ void setApplicationPath(const std::string &argv0) { -#if defined(IRCCD_RELOCATABLE) try { base = executablePath(); } catch (const std::exception &) { @@ -439,9 +417,6 @@ base = clean(base); assert(!base.empty()); -#else - (void)argv0; -#endif } std::string clean(std::string input)
--- a/lib/irccd/path.hpp Fri Apr 22 18:50:00 2016 +0200 +++ b/lib/irccd/path.hpp Mon Apr 25 21:16:47 2016 +0200 @@ -89,8 +89,7 @@ /** * Generic function for multiple paths. * - * This function will add more directories than pathSystem*() and pathUser*() functions, for example - * it will add some path if irccd is relocatable. + * This function will add more directories than pathSystem*() and pathUser*() functions. * * \pre setApplicationPath must have been called * \param path the type of path
--- a/plugins/CMakeLists.txt Fri Apr 22 18:50:00 2016 +0200 +++ b/plugins/CMakeLists.txt Mon Apr 25 21:16:47 2016 +0200 @@ -32,11 +32,7 @@ # 2. Build documentation. if (WITH_HTML) - if (IRCCD_RELOCATABLE) - set(basedocdir ${CMAKE_BINARY_DIR}/fakeroot/${WITH_DOCDIR}) - else () - set(basedocdir ${CMAKE_BINARY_DIR}/docs) - endif () + set(basedocdir ${IRCCD_FAKEROOTDIR}/${WITH_DOCDIR}) file(RELATIVE_PATH baseurl ${basedocdir}/plugin ${basedocdir})