ports/159231: [PATCH] databases/mysql-server: enable dtrace support on CURRENT or STABLE
Alex Samorukov
samm at os2.kiev.ua
Wed Jul 27 12:50:13 UTC 2011
>Number: 159231
>Category: ports
>Synopsis: [PATCH] databases/mysql-server: enable dtrace support on CURRENT or STABLE
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: freebsd-ports-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: change-request
>Submitter-Id: current-users
>Arrival-Date: Wed Jul 27 12:50:11 UTC 2011
>Closed-Date:
>Last-Modified:
>Originator: Alex Samorukov
>Release: FreeBSD 8.2-RELEASE i386
>Organization:
NetArt s.r.o.
>Environment:
System: FreeBSD bsd 8.2-RELEASE FreeBSD 8.2-RELEASE #0: Fri Feb 18 02:24:46 UTC 2011
>Description:
Added DTRACE configuration option (default off) and patched cmake files to build on
FreeBSD. Issue also reported to upstream: http://bugs.mysql.com/bug.php?id=62005
Added file(s):
- files/patch-dtrace.cmake
- files/patch-dtrace_prelink.cmake
Port maintainer (ale at FreeBSD.org) is cc'd.
Generated with FreeBSD Port Tools 0.99
>How-To-Repeat:
>Fix:
--- mysql-server-5.5.14_1.patch begins here ---
diff -ruN --exclude=CVS /root/mysql55-server.orig/Makefile /root/mysql55-server/Makefile
--- /root/mysql55-server.orig/Makefile 2011-07-12 16:44:51.000000000 +0200
+++ /root/mysql55-server/Makefile 2011-07-27 14:40:26.000000000 +0200
@@ -7,7 +7,7 @@
PORTNAME?= mysql
PORTVERSION= 5.5.14
-PORTREVISION?= 0
+PORTREVISION?= 1
CATEGORIES= databases ipv6
MASTER_SITES= ${MASTER_SITE_MYSQL}
MASTER_SITE_SUBDIR= MySQL-5.5
@@ -21,7 +21,8 @@
MAKE_JOBS_SAFE= yes
OPTIONS= OPENSSL "Enable SSL support" on \
- FASTMTX "Replace mutexes with spinlocks" off
+ FASTMTX "Replace mutexes with spinlocks" off \
+ DTRACE "Enable DTrace support" off
CMAKE_ARGS+= -DINSTALL_DOCDIR="share/doc/mysql" \
-DINSTALL_DOCREADMEDIR="share/doc/mysql" \
@@ -54,6 +55,10 @@
CMAKE_ARGS+= -DWITH_FAST_MUTEXES=1
.endif
+.if defined(WITH_DTRACE)
+CMAKE_ARGS+= -DENABLE_DTRACE=1
+.endif
+
# MySQL-Server part
.if !defined(CLIENT_ONLY)
USE_MYSQL= yes
diff -ruN --exclude=CVS /root/mysql55-server.orig/files/patch-dtrace.cmake /root/mysql55-server/files/patch-dtrace.cmake
--- /root/mysql55-server.orig/files/patch-dtrace.cmake 1970-01-01 01:00:00.000000000 +0100
+++ /root/mysql55-server/files/patch-dtrace.cmake 2011-07-27 14:40:27.000000000 +0200
@@ -0,0 +1,70 @@
+--- cmake/dtrace.cmake.orig 2011-06-21 16:42:39.000000000 +0000
++++ cmake/dtrace.cmake 2011-07-27 11:49:47.214815458 +0000
+@@ -34,13 +34,11 @@
+ FIND_PROGRAM(DTRACE dtrace)
+ MARK_AS_ADVANCED(DTRACE)
+
+- # On FreeBSD, dtrace does not handle userland tracing yet
+- IF(DTRACE AND NOT CMAKE_SYSTEM_NAME MATCHES "FreeBSD"
+- AND NOT BUGGY_GCC_NO_DTRACE_MODULES)
++ IF(DTRACE AND NOT BUGGY_GCC_NO_DTRACE_MODULES)
+ SET(ENABLE_DTRACE ON CACHE BOOL "Enable dtrace")
+ ENDIF()
+ SET(HAVE_DTRACE ${ENABLE_DTRACE})
+- IF(CMAKE_SYSTEM_NAME MATCHES "SunOS")
++ IF(CMAKE_SYSTEM_NAME MATCHES "SunOS|FreeBSD")
+ IF(CMAKE_SIZEOF_VOID_P EQUAL 4)
+ SET(DTRACE_FLAGS -32 CACHE INTERNAL "DTrace architecture flags")
+ ELSE()
+@@ -90,6 +88,10 @@
+ ENDIF()
+
+ FUNCTION(DTRACE_INSTRUMENT target)
++ # add libelf to the linker in the FreeBSD
++ IF(ENABLE_DTRACE AND CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
++ TARGET_LINK_LIBRARIES(${target} elf)
++ ENDIF()
+ IF(BUGGY_GCC_NO_DTRACE_MODULES)
+ GET_TARGET_PROPERTY(target_type ${target} TYPE)
+ IF(target_type MATCHES "MODULE_LIBRARY")
+@@ -105,7 +107,7 @@
+
+ # On Solaris, invoke dtrace -G to generate object file and
+ # link it together with target.
+- IF(CMAKE_SYSTEM_NAME MATCHES "SunOS")
++ IF(CMAKE_SYSTEM_NAME MATCHES "SunOS|FreeBSD")
+ SET(objdir ${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/${target}.dir)
+ SET(outfile ${objdir}/${target}_dtrace.o)
+ GET_TARGET_PROPERTY(target_type ${target} TYPE)
+@@ -117,6 +119,7 @@
+ -DDFILE=${CMAKE_BINARY_DIR}/include/probes_mysql.d
+ -DDTRACE_FLAGS=${DTRACE_FLAGS}
+ -DDIRS=.
++ -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
+ -DTYPE=${target_type}
+ -P ${CMAKE_SOURCE_DIR}/cmake/dtrace_prelink.cmake
+ WORKING_DIRECTORY ${objdir}
+@@ -152,13 +155,13 @@
+ # run them again through dtrace -G to generate an ELF file that links
+ # to mysqld.
+ MACRO (DTRACE_INSTRUMENT_STATIC_LIBS target libs)
+-IF(CMAKE_SYSTEM_NAME MATCHES "SunOS" AND ENABLE_DTRACE)
++IF(CMAKE_SYSTEM_NAME MATCHES "SunOS|FreeBSD" AND ENABLE_DTRACE)
+ # Filter out non-static libraries in the list, if any
+ SET(static_libs)
+ FOREACH(lib ${libs})
+ GET_TARGET_PROPERTY(libtype ${lib} TYPE)
+ IF(libtype MATCHES STATIC_LIBRARY)
+- SET(static_libs ${static_lics} ${lib})
++ SET(static_libs ${static_libs} ${lib})
+ ENDIF()
+ ENDFOREACH()
+
+@@ -177,6 +180,7 @@
+ -DDTRACE_FLAGS=${DTRACE_FLAGS}
+ "-DDIRS=${dirs}"
+ -DTYPE=MERGE
++ -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
+ -P ${CMAKE_SOURCE_DIR}/cmake/dtrace_prelink.cmake
+ VERBATIM
+ )
diff -ruN --exclude=CVS /root/mysql55-server.orig/files/patch-dtrace_prelink.cmake /root/mysql55-server/files/patch-dtrace_prelink.cmake
--- /root/mysql55-server.orig/files/patch-dtrace_prelink.cmake 1970-01-01 01:00:00.000000000 +0100
+++ /root/mysql55-server/files/patch-dtrace_prelink.cmake 2011-07-27 14:40:27.000000000 +0200
@@ -0,0 +1,36 @@
+--- cmake/dtrace_prelink.cmake.orig 2011-06-21 16:42:39.000000000 +0000
++++ cmake/dtrace_prelink.cmake 2011-07-27 11:48:13.000000000 +0000
+@@ -44,7 +44,13 @@
+ FILE(STRINGS ${dir}/dtrace_objects OBJS)
+ FOREACH(obj ${OBJS})
+ IF(obj)
+- EXECUTE_PROCESS(COMMAND cp ${obj} dtrace_objects_merge)
++ # use original, non modified object
++ IF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
++ GET_FILENAME_COMPONENT(obj_dest ${obj} NAME)
++ EXECUTE_PROCESS(COMMAND cp ${obj}.orig dtrace_objects_merge/${obj_dest})
++ ELSE()
++ EXECUTE_PROCESS(COMMAND cp ${obj} dtrace_objects_merge)
++ ENDIF()
+ ENDIF()
+ ENDFOREACH()
+ ENDFOREACH()
+@@ -62,6 +68,18 @@
+ LIST(APPEND REL_OBJECTS ${REL})
+ ENDFOREACH()
+
++# there is a bug in dtrace/freebsd. When dtrace -G is running second time on already
++# processed object it producing broken output. We need to save objects to use them
++# later on a link stage
++
++IF(CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
++ FOREACH(rel_object ${REL_OBJECTS})
++ EXECUTE_PROCESS(
++ COMMAND cp ${rel_object} ${rel_object}.orig
++ )
++ ENDFOREACH()
++ENDIF()
++
+ FILE(WRITE dtrace_timestamp "")
+ EXECUTE_PROCESS(
+ COMMAND ${DTRACE} ${DTRACE_FLAGS} -o ${OUTFILE} -G -s ${DFILE} ${REL_OBJECTS}
--- mysql-server-5.5.14_1.patch ends here ---
>Release-Note:
>Audit-Trail:
>Unformatted:
More information about the freebsd-ports-bugs
mailing list