Bug #76089 Out of tree builds don't work (can't find PCRE)

Submitted: 2 Mar 2015 8:32 Modified: 5 Mar 2015 19:30
Reporter: Justin Swanhart Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: JSON User-defined function ( UDF ) Severity:S3 (Non-critical)
Version:0.3.3 OS:Any
Assigned to: CPU Architecture:Any

[2 Mar 2015 8:32] Justin Swanhart
Description:
I don't like to build things in-tree.  cmake projects normally support out-of-tree builds.

How to repeat:
cd mysql-json-udf-0.3.3-labs-json-udfs-src
mkdir build/
cd build
cmake .. 
[snip]
make

In file included from /home/justin/mysql-json-udfs-0.3.3-labs-json-udfs-src/JParser.cc:16:0:
/home/justin/mysql-json-udfs-0.3.3-labs-json-udfs-src/JParser.h:36:18: fatal error: pcre.h: No such file or directory
 #include "pcre.h"
                  ^
compilation terminated.
make[2]: *** [CMakeFiles/my_json.dir/JParser.cc.o] Error 1
make[1]: *** [CMakeFiles/my_json.dir/all] Error 2
make: *** [all] Error 2

Suggested fix:
Make -n shows that the include directory isn't properly passed in.
You are using cmake differently than I am, as I never user the COMMAND function to build anything.  Take a look at the CMakeLists.txt for one of the UDF I'm developing.  

I use add_library() to compile the sources:

cmake_minimum_required(VERSION 2.6)
SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -Wno-literal-sufix -Wno-write-strings")
SET(presto_LIB_SRCS
  php.cpp
  presto.cpp
  rewrite.cpp
  presto.h
)

#-- automatically sets mysql include directory and library directory
#-- but the library isn't needed for UDF
find_package(MySQL REQUIRED)

add_library(presto SHARED ${presto_LIB_SRCS})
set_target_properties(PROPERTIES VERSION 1.0.0 SOVERSION 1)

install(TARGETS presto DESTINATION ${PROJECT_SOURCE_DIR}/lib)
[2 Mar 2015 9:00] MySQL Verification Team
Hello Justin Swanhart,

Thank you for the report.

Thanks,
Umesh
[2 Mar 2015 9:01] MySQL Verification Team
// On a new testbox

[root@cluster-repo server]# wget http://downloads.mysql.com/snapshots/pb/mysql-json-udfs-0.3.3/mysql-json-udfs-0.3.3-labs-j...
..

100%[========================================================================================================================================================>] 2,154,647    437K/s   in 8.5s

2015-03-04 16:00:02 (249 KB/s) - “mysql-json-udfs-0.3.3-labs-json-udfs-src.tar.gz” saved [2154647/2154647]

[root@cluster-repo server]# tar -zxvf mysql-json-udfs-0.3.3-labs-json-udfs-src.tar.gz
[root@cluster-repo server]# cd mysql-json-udfs-0.3.3-labs-json-udfs-src
[root@cluster-repo mysql-json-udfs-0.3.3-labs-json-udfs-src]# pwd
/data/ushastry/server/mysql-json-udfs-0.3.3-labs-json-udfs-src
[root@cluster-repo mysql-json-udfs-0.3.3-labs-json-udfs-src]# mkdir build
[root@cluster-repo mysql-json-udfs-0.3.3-labs-json-udfs-src]# cd build/
[root@cluster-repo build]# cmake ..
-- The C compiler identification is GNU 4.4.7
-- The CXX compiler identification is GNU 4.4.7
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
CMake Warning at CMakeLists.txt:34 (MESSAGE):
  Path to MySQL directory was not specified.  If something goes wrong re-run
  with option -DMYSQL_DIR

-- Could NOT find BZip2 (missing:  BZIP2_LIBRARIES BZIP2_INCLUDE_DIR)
-- Could NOT find ZLIB (missing:  ZLIB_LIBRARY ZLIB_INCLUDE_DIR)
-- Could not find OPTIONAL package Readline
-- Could not find OPTIONAL package Editline
-- Looking for dirent.h
-- Looking for dirent.h - found
-- Looking for stdint.h
-- Looking for stdint.h - found
-- Looking for inttypes.h
-- Looking for inttypes.h - found
-- Looking for sys/stat.h
-- Looking for sys/stat.h - found
-- Looking for sys/types.h
-- Looking for sys/types.h - found
-- Looking for unistd.h
-- Looking for unistd.h - found
-- Looking for windows.h
-- Looking for windows.h - not found
-- Looking for C++ include type_traits.h
-- Looking for C++ include type_traits.h - not found
-- Looking for C++ include bits/type_traits.h
-- Looking for C++ include bits/type_traits.h - not found
-- Looking for bcopy
-- Looking for bcopy - found
-- Looking for memmove
-- Looking for memmove - found
-- Looking for strerror
-- Looking for strerror - found
-- Looking for strtoll
-- Looking for strtoll - found
-- Looking for strtoq
-- Looking for strtoq - found
-- Looking for _strtoi64
-- Looking for _strtoi64 - not found
-- Looking for stddef.h
-- Looking for stddef.h - found
-- Check size of long long
-- Check size of long long - done
-- Check size of unsigned long long
-- Check size of unsigned long long - done
--
--
-- PCRE configuration summary:
--
--   Install prefix .................. : /usr/local
--   C compiler ...................... : /usr/bin/cc
--   C++ compiler .................... : /usr/bin/c++
--   C compiler flags ................ :
--   C++ compiler flags .............. :
--
--   Build 8 bit PCRE library ........ : ON
--   Build 16 bit PCRE library ....... : OFF
--   Build 32 bit PCRE library ....... : OFF
--   Build C++ library ............... : ON
--   Enable JIT compiling support .... : OFF
--   Enable UTF support .............. : OFF
--   Unicode properties .............. : OFF
--   Newline char/sequence ........... : LF
--   \R matches only ANYCRLF ......... : OFF
--   EBCDIC coding ................... : OFF
--   EBCDIC coding with NL=0x25 ...... : OFF
--   Rebuild char tables ............. : OFF
--   No stack recursion .............. : OFF
--   POSIX mem threshold ............. : 10
--   Internal link size .............. : 2
--   Parentheses nest limit .......... : 250
--   Match limit ..................... : 10000000
--   Match limit recursion ........... : MATCH_LIMIT
--   Build shared libs ............... : OFF
--   Build static libs ............... : ON
--   Build pcregrep .................. : ON
--   Enable JIT in pcregrep .......... : ON
--   Buffer size for pcregrep ........ : 20480
--   Build tests (implies pcretest  .. : ON
--                and pcregrep)
--   Link pcregrep with libz ......... : Library not found
--   Link pcregrep with libbz2 ....... : Library not found
--   Link pcretest with libeditline .. : Library not found
--   Link pcretest with libreadline .. : Library not found
--   Support Valgrind .................: OFF
--   Support coverage .................:
--
-- Configuring done
-- Generating done
-- Build files have been written to: /data/ushastry/server/mysql-json-udfs-0.3.3-labs-json-udfs-src/build
[root@cluster-repo build]# make
Scanning dependencies of target my_json
[  2%] Building CXX object CMakeFiles/my_json.dir/JParser.cc.o
In file included from /data/ushastry/server/mysql-json-udfs-0.3.3-labs-json-udfs-src/JParser.cc:16:
/data/ushastry/server/mysql-json-udfs-0.3.3-labs-json-udfs-src/JParser.h:36:18: error: pcre.h: No such file or directory
/data/ushastry/server/mysql-json-udfs-0.3.3-labs-json-udfs-src/JParser.cc: In member function ‘bool JParser::parse_num(char, int)’:
/data/ushastry/server/mysql-json-udfs-0.3.3-labs-json-udfs-src/JParser.cc:622: error: ‘pcre’ was not declared in this scope
/data/ushastry/server/mysql-json-udfs-0.3.3-labs-json-udfs-src/JParser.cc:622: error: ‘regex’ was not declared in this scope
/data/ushastry/server/mysql-json-udfs-0.3.3-labs-json-udfs-src/JParser.cc:641: error: ‘PCRE_EXTENDED’ was not declared in this scope
/data/ushastry/server/mysql-json-udfs-0.3.3-labs-json-udfs-src/JParser.cc:641: error: ‘pcre_compile’ was not declared in this scope
/data/ushastry/server/mysql-json-udfs-0.3.3-labs-json-udfs-src/JParser.cc:648: error: ‘pcre_exec’ was not declared in this scope
/data/ushastry/server/mysql-json-udfs-0.3.3-labs-json-udfs-src/JParser.cc:654: error: ‘pcre_free’ was not declared in this scope
/data/ushastry/server/mysql-json-udfs-0.3.3-labs-json-udfs-src/JParser.cc:657: error: ‘pcre_free’ was not declared in this scope
make[2]: *** [CMakeFiles/my_json.dir/JParser.cc.o] Error 1
make[1]: *** [CMakeFiles/my_json.dir/all] Error 2
make: *** [all] Error 2
[root@cluster-repo build]#

// may mysql installation path required?

README mentions - Build uses CMake. To compile, run:

cmake . -DMYSQL_DIR=/path/to/mysql/installation
make
[5 Mar 2015 19:30] Sveta Smirnova
Posted by developer:
 
Fixed in version 0.4.0

Portions of this website are copyright © 2001, 2002 The PHP Group

Page generated in 0.053 sec. using MySQL 8.4.7-u6-cloud

Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.