Revision: 719
http://vcs.pcre.org/viewvc?view=rev&revision=719
Author: ph10
Date: 2011-10-07 12:41:05 +0100 (Fri, 07 Oct 2011)
Log Message:
-----------
Another improved RunTest.bat and also CMakeLists.txt provided by Sheri P.
Modified Paths:
--------------
code/trunk/CMakeLists.txt
code/trunk/ChangeLog
code/trunk/RunTest.bat
Modified: code/trunk/CMakeLists.txt
===================================================================
--- code/trunk/CMakeLists.txt 2011-10-05 16:11:19 UTC (rev 718)
+++ code/trunk/CMakeLists.txt 2011-10-07 11:41:05 UTC (rev 719)
@@ -41,11 +41,23 @@
# 2011-08-22 PH added PCRE_SUPPORT_JIT
# 2011-09-06 PH modified WIN32 ADD_TEST line as suggested by Sergey Cherepanov
# 2011-09-06 PH added PCRE_SUPPORT_PCREGREP_JIT
+# 2011-10-04 Sheri added support for including coff data in windows shared libraries
+# compiled with MINGW if pcre.rc and/or pcreposix.rc are placed in
+# the source dir by the user prior to building
+# 2011-10-04 Sheri changed various add_test's to use exes' location built instead
+# of DEBUG location only (likely only matters in MSVC)
+# 2011-10-04 Sheri added scripts to provide needed variables to RunTest and
+# RunGrepTest (used for UNIX and Msys)
+# 2011-10-04 Sheri added scripts to provide needed variables and to execute
+# RunTest.bat in Win32 (for effortless testing with "make test")
+# 2011-10-04 Sheri Increased minimum required cmake version
PROJECT(PCRE C CXX)
-CMAKE_MINIMUM_REQUIRED(VERSION 2.4.6)
+# Increased minimum to 2.8.0 to support newer add_test features
+CMAKE_MINIMUM_REQUIRED(VERSION 2.8.0)
+
SET(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) # for FindReadline.cmake
# external packages
@@ -344,10 +356,34 @@
pcre_xclass.c
)
+
SET(PCREPOSIX_HEADERS pcreposix.h)
SET(PCREPOSIX_SOURCES pcreposix.c)
+IF(MINGW AND NOT PCRE_STATIC)
+IF (EXISTS ${PROJECT_SOURCE_DIR}/pcre.rc)
+ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_SOURCE_DIR}/pcre.o
+PRE-LINK
+COMMAND windres ARGS pcre.rc pcre.o
+WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+COMMENT Using pcre coff info in mingw build)
+SET(PCRE_SOURCES
+ ${PCRE_SOURCES} ${PROJECT_SOURCE_DIR}/pcre.o
+)
+ENDIF(EXISTS ${PROJECT_SOURCE_DIR}/pcre.rc)
+IF (EXISTS ${PROJECT_SOURCE_DIR}/pcreposix.rc)
+ADD_CUSTOM_COMMAND(OUTPUT ${PROJECT_SOURCE_DIR}/pcreposix.o
+PRE-LINK
+COMMAND windres ARGS pcreposix.rc pcreposix.o
+WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}
+COMMENT Using pcreposix coff info in mingw build)
+SET(PCREPOSIX_SOURCES
+ ${PCREPOSIX_SOURCES} ${PROJECT_SOURCE_DIR}/pcreposix.o
+)
+ENDIF(EXISTS ${PROJECT_SOURCE_DIR}/pcreposix.rc)
+ENDIF(MINGW AND NOT PCRE_STATIC)
+
SET(PCRECPP_HEADERS
pcrecpp.h
pcre_scanner.h
@@ -433,13 +469,12 @@
# SET_TARGET_PROPERTIES(pcredemo PROPERTIES COMPILE_FLAGS "-DPCRE_STATIC")
# ENDIF(NOT BUILD_SHARED_LIBS)
-IF(PCRE_BUILD_PCREGREP)
+IF(PCRE_BUILD_PCREGREP OR PCRE_BUILD_TESTS)
ADD_EXECUTABLE(pcregrep pcregrep.c)
SET(targets ${targets} pcregrep)
TARGET_LINK_LIBRARIES(pcregrep pcreposix ${PCREGREP_LIBS})
-ENDIF(PCRE_BUILD_PCREGREP)
+ENDIF(PCRE_BUILD_PCREGREP OR PCRE_BUILD_TESTS)
-
# Testing
IF(PCRE_BUILD_TESTS)
ENABLE_TESTING()
@@ -473,59 +508,109 @@
TARGET_LINK_LIBRARIES(pcre_stringpiece_unittest pcrecpp)
ENDIF(PCRE_BUILD_PCRECPP)
+ # exes in Debug location tested by the RunTest shell script
+ # via "make test"
GET_TARGET_PROPERTY(PCREGREP_EXE pcregrep DEBUG_LOCATION)
GET_TARGET_PROPERTY(PCRETEST_EXE pcretest DEBUG_LOCATION)
- # Write out a CTest configuration file that sets some needed environment
- # variables for the test scripts.
+# =================================================
+ # Write out a CTest configuration file
#
FILE(WRITE ${PROJECT_BINARY_DIR}/CTestCustom.ctest
"# This is a generated file.
- SET(ENV{srcdir} ${PROJECT_SOURCE_DIR})
- SET(ENV{pcregrep} ${PCREGREP_EXE})
- SET(ENV{pcretest} ${PCRETEST_EXE})
- ")
+MESSAGE(\"When testing is complete, review test output in the
+${PROJECT_BINARY_DIR}/Testing/Temporary folder.\")
+MESSAGE(\"\")
+")
+ FILE(WRITE ${PROJECT_BINARY_DIR}/pcre_test.sh
+ "#! /bin/sh
+# This is a generated file.
+srcdir=${PROJECT_SOURCE_DIR}
+pcregrep=${PCREGREP_EXE}
+pcretest=${PCRETEST_EXE}
+source ${PROJECT_SOURCE_DIR}/RunTest
+if test \"$?\" != \"0\"; then exit 1; fi
+# End
+")
+
+ FILE(WRITE ${PROJECT_BINARY_DIR}/pcre_grep_test.sh
+ "#! /bin/sh
+# This is a generated file.
+srcdir=${PROJECT_SOURCE_DIR}
+pcregrep=${PCREGREP_EXE}
+pcretest=${PCRETEST_EXE}
+source ${PROJECT_SOURCE_DIR}/RunGrepTest
+if test \"$?\" != \"0\"; then exit 1; fi
+# End
+")
+
IF(UNIX)
- ADD_TEST(pcre_test ${PROJECT_SOURCE_DIR}/RunTest)
- ADD_TEST(pcre_grep_test ${PROJECT_SOURCE_DIR}/RunGrepTest)
+ ADD_TEST(pcre_test ${PROJECT_BINARY_DIR}/pcre_test.sh)
+ ADD_TEST(pcre_grep_test ${PROJECT_BINARY_DIR}/pcre_grep_test.sh)
ENDIF(UNIX)
IF(WIN32)
+ # Provide environment for executing the bat file version of RunTest
+ string(REPLACE "/" "\\" winsrc "${PROJECT_SOURCE_DIR}")
+
+ FILE(WRITE ${PROJECT_BINARY_DIR}/pcre_test.txt
+ "\@REM This is a generated file.
+\@Echo off
+setlocal
+SET\ srcdir=\${srcdir}
+SET\ pcretest=\${pcretest}
+SET\ pcregrep=\${pcregrep}
+call \"\${srcdir}\\RunTest.Bat\"
+if errorlevel 1 exit /b 1
+echo RunTest.bat tests successfully completed
+")
+
+ FILE(WRITE ${PROJECT_BINARY_DIR}/BatDriver.cmake
+ "# This is a generated file.
+# this script is run with arguments via the cmake command in add_test(NAME pcre_test_bat)
+# BatDriver feeds the actual location of pcretest.exe and pcregrep.exe
+FILE(TO_NATIVE_PATH \${pcretestx} pcretest)
+FILE(TO_NATIVE_PATH \${pcregrepx} pcregrep)
+FILE(TO_NATIVE_PATH \${srcdirx} srcdir)
+configure_file(\"\${bindirx}/pcre_test.txt\" \"\${bindirx}/pcre_test.bat\")
+# MESSAGE(\"cmake\ variable\ pcretest\ is\ \${pcretest}\")
+# MESSAGE(\"cmake\ variable\ pcregrep\ is\ \${pcregrep}\")
+# STRING(REPLACE \" \" \"\\ \" bindir \${bindirx})
+MESSAGE(\"COMMAND pcre_test.bat \")
+EXECUTE_PROCESS(COMMAND pcre_test.bat
+WORKING_DIRECTORY .
+OUTPUT_VARIABLE batoutput)
+MESSAGE(\"OUTPUT: \${batoutput}\")
+")
+
+ ADD_TEST(NAME pcre_test_bat
+ COMMAND ${CMAKE_COMMAND} -D bindirx=${PROJECT_BINARY_DIR} -D srcdirx=${PROJECT_SOURCE_DIR} -D pcretestx=$<TARGET_FILE:pcretest> -D pcregrepx=$<TARGET_FILE:pcregrep> -P "${PROJECT_BINARY_DIR}/BatDriver.cmake")
+ SET_TESTS_PROPERTIES(pcre_test_bat PROPERTIES
+ PASS_REGULAR_EXPRESSION "RunTest\\.bat tests successfully completed")
+
IF("$ENV{OSTYPE}" STREQUAL "msys")
- ADD_TEST(pcre_test sh ${PROJECT_SOURCE_DIR}/RunTest)
- ADD_TEST(pcre_grep_test sh ${PROJECT_SOURCE_DIR}/RunGrepTest)
- ELSE("$ENV{OSTYPE}" STREQUAL "msys")
- # ADD_TEST(pcre_test cmd /C ${PROJECT_SOURCE_DIR}/RunTest.bat)
- ADD_TEST(pcre_test ${PROJECT_SOURCE_DIR}/RunTest.bat)
+ # Both the sh and bat file versions of RunTest are run if make test is used
+ # in msys
+
+ ADD_TEST(pcre_test_sh sh.exe ${PROJECT_BINARY_DIR}/pcre_test.sh)
+ ADD_TEST(pcre_grep_test sh.exe ${PROJECT_BINARY_DIR}/pcre_grep_test.sh)
+
ENDIF("$ENV{OSTYPE}" STREQUAL "msys")
ENDIF(WIN32)
+ # Changed to accommodate testing whichever location was just built
+
IF(PCRE_SUPPORT_JIT)
- GET_TARGET_PROPERTY(PCRE_JIT_TEST_EXE
- pcre_jit_test
- DEBUG_LOCATION)
+ ADD_TEST(pcre_jit_test pcre_jit_test)
ENDIF(PCRE_SUPPORT_JIT)
- GET_TARGET_PROPERTY(PCRECPP_UNITTEST_EXE
- pcrecpp_unittest
- DEBUG_LOCATION)
+ IF(PCRE_BUILD_PCRECPP)
+ ADD_TEST(pcrecpp_test pcrecpp_unittest)
+ ADD_TEST(pcre_scanner_test pcre_scanner_unittest)
+ ADD_TEST(pcre_stringpiece_test pcre_stringpiece_unittest)
- GET_TARGET_PROPERTY(PCRE_SCANNER_UNITTEST_EXE
- pcre_scanner_unittest
- DEBUG_LOCATION)
-
- GET_TARGET_PROPERTY(PCRE_STRINGPIECE_UNITTEST_EXE
- pcre_stringpiece_unittest
- DEBUG_LOCATION)
-
- IF(PCRE_SUPPORT_JIT)
- ADD_TEST(pcre_jit_test ${PCRE_JIT_TEST_EXE})
- ENDIF(PCRE_SUPPORT_JIT)
-
- ADD_TEST(pcrecpp_test ${PCRECPP_UNITTEST_EXE})
- ADD_TEST(pcre_scanner_test ${PCRE_SCANNER_UNITTEST_EXE})
- ADD_TEST(pcre_stringpiece_test ${PCRE_STRINGPIECE_UNITTEST_EXE})
+ ENDIF(PCRE_BUILD_PCRECPP)
ENDIF(PCRE_BUILD_TESTS)
# Installation
@@ -555,7 +640,6 @@
SET(man3 ${man3_new})
ENDIF(PCRE_BUILD_PCRECPP)
-
INSTALL(FILES ${man1} DESTINATION man/man1)
INSTALL(FILES ${man3} DESTINATION man/man3)
INSTALL(FILES ${html} DESTINATION share/doc/pcre/html)
@@ -603,7 +687,8 @@
MESSAGE(STATUS " Build pcregrep .................. : ${PCRE_BUILD_PCREGREP}")
MESSAGE(STATUS " Enable JIT in pcregrep .......... : ${PCRE_SUPPORT_PCREGREP_JIT}")
MESSAGE(STATUS " Buffer size for pcregrep ........ : ${PCREGREP_BUFSIZE}")
- MESSAGE(STATUS " Build tests (implies pcretest) .. : ${PCRE_BUILD_TESTS}")
+ MESSAGE(STATUS " Build tests (implies pcretest .. : ${PCRE_BUILD_TESTS}")
+ MESSAGE(STATUS " and pcregrep)")
IF(ZLIB_FOUND)
MESSAGE(STATUS " Link pcregrep with libz ......... : ${PCRE_SUPPORT_LIBZ}")
ELSE(ZLIB_FOUND)
Modified: code/trunk/ChangeLog
===================================================================
--- code/trunk/ChangeLog 2011-10-05 16:11:19 UTC (rev 718)
+++ code/trunk/ChangeLog 2011-10-07 11:41:05 UTC (rev 719)
@@ -54,8 +54,8 @@
8. If (*THEN) was present in the first (true) branch of a conditional group,
it was not handled as intended. [But see 16 below.]
-9. Replaced RunTest.bat with the much improved version provided by Sheri
- Pierce.
+9. Replaced RunTest.bat and CMakeLists.txt with improved versions provided by
+ Sheri Pierce.
10. A pathological pattern such as /(*ACCEPT)a/ was miscompiled, thinking that
the first byte in a match must be "a".
Modified: code/trunk/RunTest.bat
===================================================================
--- code/trunk/RunTest.bat 2011-10-05 16:11:19 UTC (rev 718)
+++ code/trunk/RunTest.bat 2011-10-07 11:41:05 UTC (rev 719)
@@ -1,7 +1,7 @@
@echo off
@rem This file must use CRLF linebreaks to function properly
-@rem and user must have external findstr command
-@rem This file was contributed by Ralf Junker, and touched up by
+@rem and requires both pcretest and pcregrep
+@rem This file was originally contributed by Ralf Junker, and touched up by
@rem Daniel Richard G. Tests 10-12 added by Philip H.
@rem Philip H also changed test 3 to use "wintest" files.
@rem
@@ -17,33 +17,51 @@
@rem 10 requires ucp and link size 2
@rem 14 requires presense of jit support
@rem 15 requires absence of jit support
-
@rem Sheri P also added override tests for study and jit testing
-@rem Output is written to newly created subfolders named testout testoutstudy and testoutjit.
-@rem Current dir should be the build dir. The testdata folder should exist in the current dir or in ..
-@rem Copy RunTest.bat to the build dir manually if necessary.
-@rem
setlocal enabledelayedexpansion
-
-if exist testdata set srcdir=.
-if [%srcdir%]==[] set srcdir=..
-if NOT exist %srcdir%\testdata (
-echo distribution testdata folder not found.
+if [%srcdir%]==[] (
+if exist testdata\ set srcdir=.)
+if [%srcdir%]==[] (
+if exist ..\testdata\ set srcdir=..)
+if [%srcdir%]==[] (
+if exist ..\..\testdata\ set srcdir=..\..)
+if NOT exist "%srcdir%\testdata\" (
+Error: echo distribution testdata folder not found.
+call :conferror
exit /b 1
goto :eof
)
-if [%pcretest%]==[] set pcretest=pcretest
-%pcretest% -C |findstr /C:"No UTF-8 support" >NUL
+if "%pcregrep%"=="" set pcregrep=.\pcregrep.exe
+if "%pcretest%"=="" set pcretest=.\pcretest.exe
+
+echo source dir is %srcdir%
+echo pcretest=%pcretest%
+echo pcregrep=%pcregrep%
+
+if NOT exist "%pcregrep%" (
+echo Error: "%pcregrep%" not found.
+echo.
+call :conferror
+exit /b 1
+)
+
+if NOT exist "%pcretest%" (
+echo Error: "%pcretest%" not found.
+echo.
+call :conferror
+exit /b 1
+)
+
+"%pcretest%" -C|"%pcregrep%" --no-jit "No UTF-8 support">NUL
set utf8=%ERRORLEVEL%
-%pcretest% -C |findstr /C:"No Unicode properties support" >NUL
+"%pcretest%" -C|"%pcregrep%" --no-jit "No Unicode properties support">NUL
set ucp=%ERRORLEVEL%
-%pcretest% -C |findstr /C:"No just-in-time compiler support" >NUL
+"%pcretest%" -C|"%pcregrep%" --no-jit "No just-in-time compiler support">NUL
set jit=%ERRORLEVEL%
-%pcretest% -C |findstr /C:"Internal link size = 2" >NUL
+"%pcretest%" -C|"%pcregrep%" --no-jit "Internal link size = 2">NUL
set link2=%ERRORLEVEL%
-
set ucpandlink2=0
if %ucp% EQU 1 (
if %link2% EQU 0 set ucpandlink2=1
@@ -83,6 +101,8 @@
exit /b 1
)
)
+set failed="no"
+
if "%all%" == "yes" (
set do1=yes
set do2=yes
@@ -101,6 +121,9 @@
set do15=yes
)
+@echo RunTest.bat's pcretest output is written to newly created subfolders named
+@echo testout, testoutstudy and testoutjit.
+@echo.
if "%do1%" == "yes" call :do1
if "%do2%" == "yes" call :do2
if "%do3%" == "yes" call :do3
@@ -116,6 +139,11 @@
if "%do13%" == "yes" call :do13
if "%do14%" == "yes" call :do14
if "%do15%" == "yes" call :do15
+if %failed% == "yes" (
+echo In above output, one or more of the various tests failed!
+exit /b 1
+)
+echo All OK
goto :eof
:runsub
@@ -149,22 +177,39 @@
set testoutput=wintestoutput%1
)
-echo.
echo Test %1: %3
-%pcretest% %4 %5 %6 %7 %8 %9 %srcdir%\testdata\%testinput%>%2\%testoutput%
+"%pcretest%" %4 %5 %6 %7 %8 %9 "%srcdir%\testdata\%testinput%">%2\%testoutput%
if errorlevel 1 (
- echo Test %1: pcretest failed!
+ echo. failed executing command-line:
+ echo. "%pcretest%" %4 %5 %6 %7 %8 %9 "%srcdir%\testdata\%testinput%"^>%2\%testoutput%
+ set failed="yes"
goto :eof
)
-fc /n %srcdir%\testdata\%testoutput% %2\%testoutput%
+fc /n "%srcdir%\testdata\%testoutput%" "%2\%testoutput%">NUL
if errorlevel 1 (
- echo Test %1: file compare failed!
+ echo. failed comparison: fc /n "%srcdir%\testdata\%testoutput%" "%2\%testoutput%"
+ set failed="yes"
+ if [%1]==[2] (
+ echo.
+ echo ** Test 2 requires a lot of stack. PCRE can be configured to
+ echo ** use heap for recursion. Otherwise, to pass Test 2
+ echo ** you generally need to allocate 8 mb stack to PCRE.
+ echo ** See the 'pcrestack' page for a discussion of PCRE's
+ echo ** stack usage.
+ echo.
+)
+ if [%1]==[3] (
+ echo.
+ echo ** Test 3 failure usually means french locale is not
+ echo ** available on the system, rather than a bug or problem with PCRE.
+ echo.
+)
+
goto :eof
)
-echo Test %1: Passed.
-echo.
+echo. Passed.
goto :eof
:do1
@@ -295,3 +340,25 @@
call :runsub 15 testout "JIT-specific features - no JIT" -q
call :runsub 15 testoutstudy "Test with Study Override" -q -s
goto :eof
+
+:conferror
+@echo Configuration error.
+@echo.
+@echo If configured with cmake and executed via "make test" or the MSVC "RUN_TESTS"
+@echo project, pcre_test.bat defines variables and automatically calls RunTest.bat.
+@echo For manual testing of all available features, after configuring with cmake
+@echo and building, you can run the built pcre_test.bat. For best results with
+@echo cmake builds and tests avoid directories with full path names that include
+@echo spaces for source or build.
+@echo.
+@echo Otherwise, if the build dir is in a subdir of the source dir, testdata needed
+@echo for input and verification should be found automatically when (from the
+@echo location of the the built exes) you call RunTest.bat. By default RunTest.bat
+@echo runs all tests compatible with the linked pcre library but it can be given
+@echo a test number as an argument.
+@echo.
+@echo If the build dir is not under the source dir you can either copy your exes
+@echo to the source folder or copy RunTest.bat and the testdata folder to the
+@echo location of your built exes and then run RunTest.bat.
+@echo.
+goto :eof