Commit db8f698c authored by Sergei Golubchik's avatar Sergei Golubchik

new configure option: NOT_FOR_DISTRIBUTION

fix safemalloc to compile w/o libbfd.

CMakeLists.txt:
  NOT_FOR_DISTRIBUTION option
cmake/readline.cmake:
  simplify libedit/readline detection.
  never use bundled libedit.
  use system readline v6 only if NOT_FOR_DISTRIBUTION=1
configure.cmake:
  use libbfd only if NOT_FOR_DISTRIBUTION=1
include/my_stacktrace.h:
  link with libbfd even w/o safemalloc.
parent 44d335b8
...@@ -166,6 +166,7 @@ ENDIF() ...@@ -166,6 +166,7 @@ ENDIF()
OPTION (WITH_UNIT_TESTS "Compile MySQL with unit tests" ON) OPTION (WITH_UNIT_TESTS "Compile MySQL with unit tests" ON)
MARK_AS_ADVANCED(CYBOZU BACKUP_TEST WITHOUT_SERVER DISABLE_SHARED) MARK_AS_ADVANCED(CYBOZU BACKUP_TEST WITHOUT_SERVER DISABLE_SHARED)
OPTION(NOT_FOR_DISTRIBUTION "Allow linking with GPLv2-incompatible system libraries. Only set it you never plan to distribute the resulting binaries" OFF)
OPTION(ENABLE_DEBUG_SYNC "Enable debug sync (debug builds only)" ON) OPTION(ENABLE_DEBUG_SYNC "Enable debug sync (debug builds only)" ON)
IF(ENABLE_DEBUG_SYNC) IF(ENABLE_DEBUG_SYNC)
...@@ -264,9 +265,9 @@ MYSQL_CHECK_READLINE() ...@@ -264,9 +265,9 @@ MYSQL_CHECK_READLINE()
# #
IF(MYSQL_MAINTAINER_MODE) IF(MYSQL_MAINTAINER_MODE)
# Set compiler flags required under maintainer mode. # Set compiler flags required under maintainer mode.
MESSAGE(STATUS "C warning options: ${MY_MAINTAINER_C_WARNINGS}") #MESSAGE(STATUS "C warning options: ${MY_MAINTAINER_C_WARNINGS}")
SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MY_MAINTAINER_C_WARNINGS}") SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${MY_MAINTAINER_C_WARNINGS}")
MESSAGE(STATUS "C++ warning options: ${MY_MAINTAINER_CXX_WARNINGS}") #MESSAGE(STATUS "C++ warning options: ${MY_MAINTAINER_CXX_WARNINGS}")
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MY_MAINTAINER_CXX_WARNINGS}") SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${MY_MAINTAINER_CXX_WARNINGS}")
ENDIF() ENDIF()
...@@ -392,3 +393,9 @@ IF(NOT INSTALL_LAYOUT MATCHES "RPM") ...@@ -392,3 +393,9 @@ IF(NOT INSTALL_LAYOUT MATCHES "RPM")
PATTERN "sp-imp-spec.txt" EXCLUDE PATTERN "sp-imp-spec.txt" EXCLUDE
) )
ENDIF() ENDIF()
IF(NON_DISTRIBUTABLE_WARNING)
MESSAGE(WARNING "
You have linked MariaDB with GPLv3 libraries! You may not distribute the resulting binary. If you do, you will put yourself into a legal problem with Free Software Foundation.")
ENDIF()
...@@ -21,16 +21,15 @@ INCLUDE_DIRECTORIES( ...@@ -21,16 +21,15 @@ INCLUDE_DIRECTORIES(
${CMAKE_SOURCE_DIR}/regex ${CMAKE_SOURCE_DIR}/regex
${CMAKE_SOURCE_DIR}/sql ${CMAKE_SOURCE_DIR}/sql
${CMAKE_SOURCE_DIR}/strings ${CMAKE_SOURCE_DIR}/strings
${READLINE_INCLUDE_DIR} ${MY_READLINE_INCLUDE_DIR}
${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_BINARY_DIR}
) )
ADD_DEFINITIONS(${READLINE_DEFINES})
ADD_DEFINITIONS(${SSL_DEFINES}) ADD_DEFINITIONS(${SSL_DEFINES})
MYSQL_ADD_EXECUTABLE(mysql completion_hash.cc mysql.cc readline.cc sql_string.cc) MYSQL_ADD_EXECUTABLE(mysql completion_hash.cc mysql.cc readline.cc sql_string.cc)
TARGET_LINK_LIBRARIES(mysql mysqlclient) TARGET_LINK_LIBRARIES(mysql mysqlclient)
IF(UNIX) IF(UNIX)
TARGET_LINK_LIBRARIES(mysql ${READLINE_LIBRARY}) TARGET_LINK_LIBRARIES(mysql ${MY_READLINE_LIBRARY})
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -rdynamic") SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -rdynamic")
ENDIF(UNIX) ENDIF(UNIX)
......
...@@ -14,6 +14,8 @@ ...@@ -14,6 +14,8 @@
# along with this program; if not, write to the Free Software # along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
INCLUDE(CheckCXXSourceCompiles)
MACRO (MYSQL_CHECK_MULTIBYTE) MACRO (MYSQL_CHECK_MULTIBYTE)
CHECK_INCLUDE_FILE(wctype.h HAVE_WCTYPE_H) CHECK_INCLUDE_FILE(wctype.h HAVE_WCTYPE_H)
CHECK_INCLUDE_FILE(wchar.h HAVE_WCHAR_H) CHECK_INCLUDE_FILE(wchar.h HAVE_WCHAR_H)
...@@ -112,35 +114,32 @@ ENDMACRO() ...@@ -112,35 +114,32 @@ ENDMACRO()
MACRO (MYSQL_USE_BUNDLED_READLINE) MACRO (MYSQL_USE_BUNDLED_READLINE)
SET(USE_NEW_READLINE_INTERFACE 1) SET(USE_NEW_READLINE_INTERFACE 1)
SET(HAVE_HIST_ENTRY) SET(HAVE_HIST_ENTRY)
SET(USE_LIBEDIT_INTERFACE)
SET(READLINE_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/cmd-line-utils) SET(READLINE_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/cmd-line-utils)
SET(READLINE_LIBRARY readline) SET(READLINE_LIBRARY readline)
FIND_CURSES() FIND_CURSES()
ADD_SUBDIRECTORY(${CMAKE_SOURCE_DIR}/cmd-line-utils/readline) ADD_SUBDIRECTORY(${CMAKE_SOURCE_DIR}/cmd-line-utils/readline)
ENDMACRO() ENDMACRO()
MACRO (MYSQL_USE_BUNDLED_LIBEDIT) MACRO (MYSQL_FIND_SYSTEM_READLINE)
SET(USE_LIBEDIT_INTERFACE 1)
SET(HAVE_HIST_ENTRY 1)
SET(READLINE_INCLUDE_DIR ${CMAKE_SOURCE_DIR}/cmd-line-utils/libedit)
SET(READLINE_LIBRARY edit)
FIND_CURSES()
ADD_SUBDIRECTORY(${CMAKE_SOURCE_DIR}/cmd-line-utils/libedit)
ENDMACRO()
MACRO (MYSQL_FIND_SYSTEM_READLINE name)
FIND_PATH(${name}_INCLUDE_DIR readline/readline.h ) FIND_PATH(READLINE_INCLUDE_DIR readline/readline.h )
FIND_LIBRARY(${name}_LIBRARY NAMES ${name}) FIND_LIBRARY(READLINE_LIBRARY NAMES readline)
MARK_AS_ADVANCED(${name}_INCLUDE_DIR ${name}_LIBRARY) MARK_AS_ADVANCED(READLINE_INCLUDE_DIR READLINE_LIBRARY)
INCLUDE(CheckCXXSourceCompiles) SET(CMAKE_REQUIRES_LIBRARIES ${READLINE_LIBRARY})
SET(CMAKE_REQUIRES_LIBRARIES ${${name}_LIBRARY})
IF(READLINE_LIBRARY AND READLINE_INCLUDE_DIR)
SET(CMAKE_REQUIRED_LIBRARIES ${READLINE_LIBRARY})
CHECK_CXX_SOURCE_COMPILES("
#include <stdio.h>
#include <readline/readline.h>
int main(int argc, char **argv)
{
rl_completion_func_t *func1= (rl_completion_func_t*)0;
rl_compentry_func_t *func2= (rl_compentry_func_t*)0;
}"
NEW_READLINE_INTERFACE)
IF(${name}_LIBRARY AND ${name}_INCLUDE_DIR)
SET(SYSTEM_READLINE_FOUND 1)
SET(CMAKE_REQUIRED_LIBRARIES ${${name}_LIBRARY})
CHECK_CXX_SOURCE_COMPILES(" CHECK_CXX_SOURCE_COMPILES("
#include <stdio.h> #include <stdio.h>
#include <readline/readline.h> #include <readline/readline.h>
...@@ -149,37 +148,54 @@ MACRO (MYSQL_FIND_SYSTEM_READLINE name) ...@@ -149,37 +148,54 @@ MACRO (MYSQL_FIND_SYSTEM_READLINE name)
HIST_ENTRY entry; HIST_ENTRY entry;
return 0; return 0;
}" }"
${name}_HAVE_HIST_ENTRY) HAVE_HIST_ENTRY)
CHECK_CXX_SOURCE_COMPILES(" CHECK_C_SOURCE_COMPILES("
#include <stdio.h> #include <stdio.h>
#include <readline/readline.h> #include <readline/readline.h>
#if RL_VERSION_MAJOR > 5
#error
#endif
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
char res= *(*rl_completion_entry_function)(0,0); return 0;
completion_matches(0,0);
}" }"
${name}_USE_LIBEDIT_INTERFACE) READLINE_V5)
IF(NEW_READLINE_INTERFACE)
IF (READLINE_V5)
SET(USE_NEW_READLINE_INTERFACE 1)
ELSE()
IF(NOT_FOR_DISTRIBUTION)
SET(NON_DISTRIBUTABLE_WARNING 1)
SET(USE_NEW_READLINE_INTERFACE 1)
ELSE()
SET(USE_NEW_READLINE_INTERFACE 0)
ENDIF(NOT_FOR_DISTRIBUTION)
ENDIF(READLINE_V5)
ENDIF(NEW_READLINE_INTERFACE)
ENDIF()
ENDMACRO()
MACRO (MYSQL_FIND_SYSTEM_LIBEDIT)
FIND_PATH(READLINE_INCLUDE_DIR readline/readline.h )
FIND_LIBRARY(READLINE_LIBRARY NAMES readline)
MARK_AS_ADVANCED(READLINE_INCLUDE_DIR READLINE_LIBRARY)
SET(CMAKE_REQUIRES_LIBRARIES ${READLINE_LIBRARY})
IF(READLINE_LIBRARY AND READLINE_INCLUDE_DIR)
CHECK_CXX_SOURCE_COMPILES(" CHECK_CXX_SOURCE_COMPILES("
#include <stdio.h> #include <stdio.h>
#include <readline/readline.h> #include <readline/readline.h>
int main(int argc, char **argv) int main(int argc, char **argv)
{ {
rl_completion_func_t *func1= (rl_completion_func_t*)0; char res= *(*rl_completion_entry_function)(0,0);
rl_compentry_func_t *func2= (rl_compentry_func_t*)0; completion_matches(0,0);
}" }"
${name}_USE_NEW_READLINE_INTERFACE) LIBEDIT_INTERFACE)
SET(USE_LIBEDIT_INTERFACE ${LIBEDIT_INTERFACE})
IF(${name}_USE_LIBEDIT_INTERFACE OR ${name}_USE_NEW_READLINE_INTERFACE)
SET(READLINE_LIBRARY ${${name}_LIBRARY})
SET(READLINE_INCLUDE_DIR ${${name}_INCLUDE_DIR})
SET(HAVE_HIST_ENTRY ${${name}_HAVE_HIST_ENTRY})
SET(USE_LIBEDIT_INTERFACE ${${name}_USE_LIBEDIT_INTERFACE})
SET(USE_NEW_READLINE_INTERFACE ${${name}_USE_NEW_READLINE_INTERFACE})
SET(READLINE_FOUND 1)
ENDIF()
ENDIF() ENDIF()
ENDMACRO() ENDMACRO()
...@@ -187,44 +203,21 @@ ENDMACRO() ...@@ -187,44 +203,21 @@ ENDMACRO()
MACRO (MYSQL_CHECK_READLINE) MACRO (MYSQL_CHECK_READLINE)
IF (NOT WIN32) IF (NOT WIN32)
MYSQL_CHECK_MULTIBYTE() MYSQL_CHECK_MULTIBYTE()
IF(NOT CYGWIN) SET(WITH_READLINE OFF CACHE BOOL "Use bundled readline")
SET(WITH_LIBEDIT ON CACHE BOOL "Use bundled libedit")
SET(WITH_READLINE OFF CACHE BOOL "Use bundled readline")
ELSE()
# Bundled libedit does not compile on cygwin, only readline
SET(WITH_READLINE OFF CACHE BOOL "Use bundled readline")
ENDIF()
# Handle mutual exclusion of WITH_READLINE/WITH_LIBEDIT variables
# We save current setting to recognize when user switched between
# WITH_READLINE and WITH_LIBEDIT
IF(WITH_READLINE)
IF(NOT SAVE_READLINE_SETTING OR SAVE_READLINE_SETTING MATCHES
"WITH_LIBEDIT")
SET(WITH_LIBEDIT OFF CACHE BOOL "Use bundled libedit" FORCE)
ENDIF()
ELSEIF(WITH_LIBEDIT)
IF(NOT SAVE_READLINE_SETTING OR SAVE_READLINE_SETTING MATCHES
"WITH_READLINE")
SET(WITH_READLINE OFF CACHE BOOL "Use bundled readline" FORCE)
ENDIF()
ENDIF()
IF(WITH_READLINE) IF(WITH_READLINE)
MYSQL_USE_BUNDLED_READLINE() MYSQL_USE_BUNDLED_READLINE()
SET(SAVE_READLINE_SETTING WITH_READLINE CACHE INTERNAL "" FORCE)
ELSEIF(WITH_LIBEDIT)
MYSQL_USE_BUNDLED_LIBEDIT()
SET(SAVE_READLINE_SETTING WITH_LIBEDIT CACHE INTERNAL "" FORCE)
ELSE() ELSE()
MYSQL_FIND_SYSTEM_READLINE(readline) MYSQL_FIND_SYSTEM_READLINE()
IF(NOT READLINE_FOUND) IF(NOT USE_NEW_READLINE_INTERFACE)
MYSQL_FIND_SYSTEM_READLINE(edit) MYSQL_FIND_SYSTEM_LIBEDIT()
IF(NOT READLINE_FOUND) IF(NOT USE_LIBEDIT_INTERFACE)
MESSAGE(FATAL_ERROR "Cannot find system readline or libedit libraries.Use WITH_READLINE or WITH_LIBEDIT") MYSQL_USE_BUNDLED_READLINE()
ENDIF() ENDIF()
ENDIF() ENDIF()
ENDIF() ENDIF()
SET(MY_READLINE_INCLUDE_DIR ${READLINE_INCLUDE_DIR})
SET(MY_READLINE_LIBRARY ${READLINE_LIBRARY})
ENDIF(NOT WIN32) ENDIF(NOT WIN32)
ENDMACRO() ENDMACRO()
...@@ -187,7 +187,7 @@ CHECK_INCLUDE_FILES (aio.h HAVE_AIO_H) ...@@ -187,7 +187,7 @@ CHECK_INCLUDE_FILES (aio.h HAVE_AIO_H)
CHECK_INCLUDE_FILES (arpa/inet.h HAVE_ARPA_INET_H) CHECK_INCLUDE_FILES (arpa/inet.h HAVE_ARPA_INET_H)
CHECK_INCLUDE_FILES (crypt.h HAVE_CRYPT_H) CHECK_INCLUDE_FILES (crypt.h HAVE_CRYPT_H)
CHECK_INCLUDE_FILE_CXX (cxxabi.h HAVE_CXXABI_H) CHECK_INCLUDE_FILE_CXX (cxxabi.h HAVE_CXXABI_H)
CHECK_INCLUDE_FILES (bfd.h HAVE_BFD_H) CHECK_INCLUDE_FILES (bfd.h BFD_H_EXISTS)
CHECK_INCLUDE_FILES (dirent.h HAVE_DIRENT_H) CHECK_INCLUDE_FILES (dirent.h HAVE_DIRENT_H)
CHECK_INCLUDE_FILES (dlfcn.h HAVE_DLFCN_H) CHECK_INCLUDE_FILES (dlfcn.h HAVE_DLFCN_H)
CHECK_INCLUDE_FILES (execinfo.h HAVE_EXECINFO_H) CHECK_INCLUDE_FILES (execinfo.h HAVE_EXECINFO_H)
...@@ -261,6 +261,13 @@ CHECK_INCLUDE_FILES (wchar.h HAVE_WCHAR_H) ...@@ -261,6 +261,13 @@ CHECK_INCLUDE_FILES (wchar.h HAVE_WCHAR_H)
CHECK_INCLUDE_FILES (wctype.h HAVE_WCTYPE_H) CHECK_INCLUDE_FILES (wctype.h HAVE_WCTYPE_H)
CHECK_INCLUDE_FILES (sys/sockio.h HAVE_SYS_SOCKIO_H) CHECK_INCLUDE_FILES (sys/sockio.h HAVE_SYS_SOCKIO_H)
IF(BFD_H_EXISTS)
IF(NOT_FOR_DISTRIBUTION)
SET(NON_DISTRIBUTABLE_WARNING 1)
SET(HAVE_BFD_H 1)
ENDIF()
ENDIF()
IF(HAVE_SYS_STREAM_H) IF(HAVE_SYS_STREAM_H)
# Needs sys/stream.h on Solaris # Needs sys/stream.h on Solaris
CHECK_INCLUDE_FILES ("sys/stream.h;sys/ptem.h" HAVE_SYS_PTEM_H) CHECK_INCLUDE_FILES ("sys/stream.h;sys/ptem.h" HAVE_SYS_PTEM_H)
......
...@@ -55,23 +55,22 @@ void my_set_exception_pointers(EXCEPTION_POINTERS *ep); ...@@ -55,23 +55,22 @@ void my_set_exception_pointers(EXCEPTION_POINTERS *ep);
#endif #endif
#endif #endif
/* at the moment, safemalloc is the main user of libbfd */
#ifndef SAFEMALLOC
#undef HAVE_BFD_H
#endif
#ifdef HAVE_BFD_H #ifdef HAVE_BFD_H
#define HAVE_MY_ADDR_RESOLVE 1 #define HAVE_MY_ADDR_RESOLVE 1
#endif #endif
#ifdef HAVE_MY_ADDR_RESOLVE
typedef struct { typedef struct {
const char *file; const char *file;
const char *func; const char *func;
uint line; uint line;
} my_addr_loc; } my_addr_loc;
#ifdef HAVE_MY_ADDR_RESOLVE
int my_addr_resolve(void *ptr, my_addr_loc *loc); int my_addr_resolve(void *ptr, my_addr_loc *loc);
const char *my_addr_resolve_init(); const char *my_addr_resolve_init();
#else
#define my_addr_resolve_init() (0)
#define my_addr_resolve(A,B) (1)
#endif #endif
#ifdef HAVE_WRITE_CORE #ifdef HAVE_WRITE_CORE
......
...@@ -16,7 +16,7 @@ ...@@ -16,7 +16,7 @@
INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include
${CMAKE_SOURCE_DIR}/libmysqld/include ${CMAKE_SOURCE_DIR}/libmysqld/include
${CMAKE_SOURCE_DIR}/regex ${CMAKE_SOURCE_DIR}/regex
${READLINE_INCLUDE_DIR} ${MY_READLINE_INCLUDE_DIR}
) )
...@@ -27,8 +27,7 @@ MYSQL_ADD_EXECUTABLE(mysql_embedded ../../client/completion_hash.cc ...@@ -27,8 +27,7 @@ MYSQL_ADD_EXECUTABLE(mysql_embedded ../../client/completion_hash.cc
../../client/mysql.cc ../../client/readline.cc) ../../client/mysql.cc ../../client/readline.cc)
TARGET_LINK_LIBRARIES(mysql_embedded mysqlserver) TARGET_LINK_LIBRARIES(mysql_embedded mysqlserver)
IF(UNIX) IF(UNIX)
ADD_DEFINITIONS(${READLINE_DEFINES}) TARGET_LINK_LIBRARIES(mysql_embedded ${MY_READLINE_LIBRARY})
TARGET_LINK_LIBRARIES(mysql_embedded ${READLINE_LIBRARY})
ENDIF(UNIX) ENDIF(UNIX)
MYSQL_ADD_EXECUTABLE(mysqltest_embedded ../../client/mysqltest.cc) MYSQL_ADD_EXECUTABLE(mysqltest_embedded ../../client/mysqltest.cc)
......
...@@ -21,6 +21,7 @@ ...@@ -21,6 +21,7 @@
/** /**
strip the path, leave the file name and the last dirname strip the path, leave the file name and the last dirname
*/ */
static const char *strip_path(const char *s) __attribute__((unused));
static const char *strip_path(const char *s) static const char *strip_path(const char *s)
{ {
const char *prev, *last; const char *prev, *last;
......
...@@ -225,7 +225,7 @@ static void print_stack(void **frame) ...@@ -225,7 +225,7 @@ static void print_stack(void **frame)
fprintf(stderr, ", "); fprintf(stderr, ", ");
if (my_addr_resolve(frame[i], &loc)) if (my_addr_resolve(frame[i], &loc))
fprintf(stderr, "..."); fprintf(stderr, "%p", frame[i]);
else else
fprintf(stderr, "%s:%u", loc.file, loc.line); fprintf(stderr, "%s:%u", loc.file, loc.line);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment