Skip to content

Commit 06b13bb

Browse files
committed
Make a stab at adapting the new, simplier verification to vanilla stepcode
1 parent e38519a commit 06b13bb

8 files changed

Lines changed: 143 additions & 237 deletions

File tree

cmake/Generated_Source_Utils.cmake

Lines changed: 1 addition & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ macro(VERIFY_FILES filelist warn resultvar)
3232
MD5(${filefullname} ${filevar}_md5)
3333
if(NOT "${${filevar}_md5}" STREQUAL "${baseline_${filevar}_md5}")
3434
if("${warn}" STREQUAL "1")
35-
message("\n${filename} differs from baseline: baseline md5 hash is ${baseline_${filevar}_md5} and current hash is ${${filevar}_md5}\n")
35+
message("\n${filename} differs from baseline: baseline md5 hash is ${baseline_${filevar}_md5} and current hash is ${${filevar}_md5}\n")
3636
endif("${warn}" STREQUAL "1")
3737
set(${resultvar} 0)
3838
endif(NOT "${${filevar}_md5}" STREQUAL "${baseline_${filevar}_md5}")
@@ -59,20 +59,6 @@ macro(WRITE_MD5_SUMS filelist outfile)
5959
endforeach(fileitem ${filelist})
6060
endmacro(WRITE_MD5_SUMS)
6161

62-
63-
macro(GET_GENERATOR_EXEC_VERSIONS)
64-
# Read lemon version
65-
execute_process(COMMAND ${LEMON_EXECUTABLE} -x OUTPUT_VARIABLE lemon_version)
66-
string(REPLACE "Lemon version " "" lemon_version "${lemon_version}")
67-
string(STRIP "${lemon_version}" lemon_version)
68-
# Read re2c version
69-
execute_process(COMMAND ${RE2C_EXECUTABLE} -V OUTPUT_VARIABLE re2c_version)
70-
string(STRIP "${re2c_version}" re2c_version)
71-
# Read perplex version
72-
execute_process(COMMAND ${PERPLEX_EXECUTABLE} -v OUTPUT_VARIABLE perplex_version)
73-
string(STRIP "${perplex_version}" perplex_version)
74-
endmacro(GET_GENERATOR_EXEC_VERSIONS)
75-
7662
# Local Variables:
7763
# tab-width: 8
7864
# mode: cmake

cmake/manage_generated.cmake.in

Lines changed: 0 additions & 102 deletions
This file was deleted.

cmake/md5_gen.cmake.in

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# Inherit the parent CMake setting
2+
set(CURRENT_SOURCE_DIR @CMAKE_CURRENT_SOURCE_DIR@)
3+
set(CURRENT_BINARY_DIR @CMAKE_CURRENT_BINARY_DIR@)
4+
5+
# Define a variety of convenience routines
6+
include(@PROJECT_CMAKE_DIR@/Generated_Source_Utils.cmake)
7+
8+
# The following steps are executed to sync generated sources:
9+
#
10+
# 1. Create a new verification_info.cmake file and populate
11+
# it with the MD5 sums for current files.
12+
#
13+
# 2. Overwrite the original cached verification_info.cmake
14+
# and generated files with the new ones. If LOCKED_SOURCE_DIR
15+
# is ON, this step will not be carried out - instead, an
16+
# informational message with manual updating instructions
17+
# will be printed.
18+
19+
set(new_info_file "${CURRENT_BINARY_DIR}/verification_info.cmake")
20+
21+
22+
file(WRITE ${new_info_file} "# Autogenerated verification information\n")
23+
24+
# Handle input files
25+
set(input_files "@MD5_FILELIST@")
26+
WRITE_MD5_SUMS("${input_files}" "${new_info_file}")
27+
28+
message("New verification file created: ${new_info_file}")
29+
30+
# Local Variables:
31+
# tab-width: 8
32+
# mode: cmake
33+
# indent-tabs-mode: t
34+
# End:
35+
# ex: shiftwidth=2 tabstop=8

cmake/md5_verify.cmake.in

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
# Inherit the parent CMake setting
2+
set(DEBUGGING_GENERATED_SOURCES @DEBUGGING_GENERATED_SOURCES@)
3+
set(CURRENT_SOURCE_DIR "@CMAKE_CURRENT_SOURCE_DIR@")
4+
5+
# Include the file the provides the baseline against which
6+
# current files will be compared
7+
8+
include("@BASELINE_INFORMATION_FILE@")
9+
10+
# Define a variety of convenience routines
11+
include("@PROJECT_CMAKE_DIR@/Generated_Source_Utils.cmake")
12+
13+
# Individually verify all of the files in question.
14+
set(filelist "@MD5_FILELIST@")
15+
VERIFY_FILES("${filelist}" 1 srcs_pass)
16+
if(NOT srcs_pass)
17+
if(NOT DEBUGGING_GENERATED_SOURCES)
18+
message(FATAL_ERROR "Sources have been modified and md5 sums have not been updated. This generally indicates either\n a) an input file has been modified but generated files have not been updated, or\n b) genenerated files have been edited directly.\nTo clear the error:\n a) Copy the new generated sources from the build directory to the generated/ sources directory, use the <target>_md5gen build target to create a new verifictation_info.cmake file, and copy verfication_info.cmake to generated/ as well.\n b) install Perplex/Re2C/LEMON and make the changes to the input file rather than the generated file.\nNote:\n If this is a debugging situation where multiple sequential tests must be conducted, temporarily set the variable DEBUGGING_GENERATED_SOURCES to ON during the CMake configure to disable this check.\nThis measure is necessary to ensure that compilations using either Perplex/Re2C/LEMON generation or the cached outputs of those tools produce consistent results.")
19+
else(NOT DEBUGGING_GENERATED_SOURCES)
20+
message(WARNING "Note: Sources have been modified and md5 sums have not been updated - build failure condition temporarily overridden by DEBUGGING_GENERATED_SOURCES setting.")
21+
endif(NOT DEBUGGING_GENERATED_SOURCES)
22+
endif(NOT srcs_pass)
23+
24+
25+
# Local Variables:
26+
# tab-width: 8
27+
# mode: cmake
28+
# indent-tabs-mode: t
29+
# End:
30+
# ex: shiftwidth=2 tabstop=8

cmake/verify_generated.cmake.in

Lines changed: 0 additions & 39 deletions
This file was deleted.

src/express/CMakeLists.txt

Lines changed: 56 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -2,72 +2,57 @@ include_directories(
22
${CMAKE_CURRENT_BINARY_DIR}
33
${CMAKE_CURRENT_SOURCE_DIR}
44
${SC_SOURCE_DIR}/src/base
5-
)
5+
)
66

77
# Set up the information we need to feed the generated source management
88
# scripts
99
set(BASELINE_INFORMATION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/generated/verification_info.cmake")
1010
set(PROJECT_CMAKE_DIR "${SC_SOURCE_DIR}/cmake")
11-
set(INPUT_FILELIST expscan.l expparse.y)
12-
set(TEMPLATE_FILELIST ${LEMON_TEMPLATE} ${PERPLEX_TEMPLATE})
13-
set(BUILD_OUTPUT_FILELIST
14-
${CMAKE_CURRENT_BINARY_DIR}/expscan.c
15-
${CMAKE_CURRENT_BINARY_DIR}/expscan.h
16-
${CMAKE_CURRENT_BINARY_DIR}/expparse.c
17-
${CMAKE_CURRENT_BINARY_DIR}/expparse.h
18-
)
19-
set(CACHED_FILES_DIR "${CMAKE_CURRENT_SOURCE_DIR}/generated")
20-
string(REPLACE "${CMAKE_CURRENT_BINARY_DIR}" "${CACHED_FILES_DIR}" CACHED_FILELIST "${BUILD_OUTPUT_FILELIST}")
21-
set(SYNC_SCRIPT "${CMAKE_CURRENT_BINARY_DIR}/express_sync_generated.cmake")
22-
set(SYNC_TARGET_NAME "express_sync_generated_files")
11+
set(MD5_FILELIST
12+
"${CMAKE_CURRENT_SOURCE_DIR}/expscan.l"
13+
"${CMAKE_CURRENT_SOURCE_DIR}/expparse.y"
14+
"${CMAKE_CURRENT_SOURCE_DIR}/generated/expscan.c"
15+
"${CMAKE_CURRENT_SOURCE_DIR}/generated/expscan.h"
16+
"${CMAKE_CURRENT_SOURCE_DIR}/generated/expparse.c"
17+
"${CMAKE_CURRENT_SOURCE_DIR}/generated/expparse.h"
18+
)
19+
configure_file(${SC_SOURCE_DIR}/cmake/md5_gen.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/express_md5gen.cmake @ONLY)
20+
configure_file(${SC_SOURCE_DIR}/cmake/md5_verify.cmake.in ${CMAKE_CURRENT_BINARY_DIR}/express_verify.cmake @ONLY)
21+
22+
# Convenience target to generate an updated verification_info.cmake file
23+
add_custom_command(
24+
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/express_md5gen.sentinel
25+
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/express_md5gen.cmake
26+
COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/express_md5gen.sentinel
27+
)
28+
add_custom_target(express_md5gen DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/express_md5gen.sentinel)
29+
30+
# Target for actually checking cached MD5 sums against files
31+
add_custom_command(
32+
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/express_verify.sentinel
33+
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/express_verify.cmake
34+
COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/express_verify.sentinel
35+
DEPENDS ${MD5_FILELIST}
36+
)
37+
add_custom_target(express_verify DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/express_verify.sentinel)
38+
2339

2440
# Depending on whether we're using pre-generated sources or building them on
2541
# the fly, set up targets and source lists.
2642
if(SC_GENERATE_LP_SOURCES)
27-
LEMON_TARGET(ExpParser expparse.y expparse.c expparse.h)
28-
PERPLEX_TARGET(ExpScanner expscan.l ${CMAKE_CURRENT_BINARY_DIR}/expscan.c ${CMAKE_CURRENT_BINARY_DIR}/expscan.h)
43+
LEMON_TARGET(ExpParser expparse.y)
44+
PERPLEX_TARGET(ExpScanner expscan.l)
2945
ADD_PERPLEX_LEMON_DEPENDENCY(ExpScanner ExpParser)
3046
set(EXPRESS_GENERATED_SRCS
31-
${LEMON_ExpParser_OUTPUT_SOURCE}
32-
${PERPLEX_ExpScanner_OUTPUTS}
33-
)
34-
configure_file(${SC_SOURCE_DIR}/cmake/manage_generated.cmake.in
35-
${CMAKE_CURRENT_BINARY_DIR}/express_manage_generated.cmake @ONLY)
36-
add_custom_command(
37-
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/express_manage_generated.sentinel
38-
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/express_manage_generated.cmake
39-
COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/express_manage_generated.sentinel
40-
DEPENDS ${INPUT_FILELIST} ${TEMPLATE_FILELIST} ${CACHED_FILELIST} ${PERPLEX_ExpScanner_OUTPUTS} ${LEMON_ExpParser_OUTPUT_SOURCE} generated/verification_info.cmake ${PROJECT_CMAKE_DIR}/Generated_Source_Utils.cmake
41-
)
42-
add_custom_target(express_verify DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/express_manage_generated.sentinel)
43-
44-
configure_file(${SC_SOURCE_DIR}/cmake/sync_generated.cmake.in
45-
${CMAKE_CURRENT_BINARY_DIR}/express_sync_generated.cmake @ONLY)
46-
add_custom_command(
47-
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/express_sync_generated.sentinel
48-
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/express_sync_generated.cmake
49-
COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/express_sync_generated.sentinel
50-
DEPENDS ${INPUT_FILELIST} ${TEMPLATE_FILELIST} ${PERPLEX_ExpScanner_OUTPUTS} ${LEMON_ExpParser_OUTPUT_SOURCE} ${PROJECT_CMAKE_DIR}/Generated_Source_Utils.cmake
51-
)
52-
add_custom_target(express_sync_generated_files DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/express_sync_generated.sentinel)
53-
47+
${LEMON_ExpParser_SRC}
48+
${PERPLEX_ExpScanner_SRC}
49+
)
5450
else(SC_GENERATE_LP_SOURCES)
55-
51+
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/generated)
5652
set(EXPRESS_GENERATED_SRCS
5753
generated/expparse.c
5854
generated/expscan.c
59-
)
60-
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/generated)
61-
configure_file(${SC_SOURCE_DIR}/cmake/verify_generated.cmake.in
62-
${CMAKE_CURRENT_BINARY_DIR}/express_verify_generated.cmake @ONLY)
63-
add_custom_command(
64-
OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/express_verify_generated.sentinel
65-
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/express_verify_generated.cmake
66-
COMMAND ${CMAKE_COMMAND} -E touch ${CMAKE_CURRENT_BINARY_DIR}/express_verify_generated.sentinel
67-
DEPENDS ${INPUT_FILELIST} ${CACHED_FILELIST} generated/verification_info.cmake ${PROJECT_CMAKE_DIR}/Generated_Source_Utils.cmake
68-
)
69-
add_custom_target(express_verify DEPENDS ${CMAKE_CURRENT_BINARY_DIR}/express_verify_generated.sentinel)
70-
55+
)
7156
endif(SC_GENERATE_LP_SOURCES)
7257

7358
set(EXPRESS_SOURCES
@@ -110,14 +95,29 @@ set(CHECK_EXPRESS_SOURCES
11095
inithook.c
11196
)
11297

113-
set(EXPRESS_PRIVATE_HDRS
98+
SET(EXPRESS_PRIVATE_HDRS
99+
exptoks.h
114100
stack.h
115-
)
101+
)
116102

117103
SC_ADDLIB(express "${EXPRESS_SOURCES}" "base")
118-
add_dependencies(express express_verify)
119-
add_dependencies(express version_string)
120-
SC_ADDEXEC("check-express" "${CHECK_EXPRESS_SOURCES}" "express;base")
104+
if(SC_GENERATE_LP_SOURCES)
105+
set_property(TARGET express APPEND PROPERTY INCLUDE_DIRECTORIES "${PERPLEX_ExpScanner_INCLUDE_DIR}")
106+
set_property(TARGET express APPEND PROPERTY INCLUDE_DIRECTORIES "${LEMON_ExpParser_INCLUDE_DIR}")
107+
endif(SC_GENERATE_LP_SOURCES)
108+
109+
if(SC_GENERATE_LP_SOURCES)
110+
add_custom_command(TARGET express POST_BUILD
111+
COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_DIR}/express_verify.cmake
112+
)
113+
else(SC_GENERATE_LP_SOURCES)
114+
add_dependencies(express express_verify)
115+
endif(SC_GENERATE_LP_SOURCES)
116+
117+
if(NOT SC_IS_SUBBUILD)
118+
add_dependencies(express version_string)
119+
endif(NOT SC_IS_SUBBUILD)
120+
SC_ADDEXEC("check-express" "${CHECK_EXPRESS_SOURCES}" "express;base" ${SC_EXEC_NOINSTALL})
121121

122122
if(SC_ENABLE_TESTING)
123123
add_subdirectory(test)

0 commit comments

Comments
 (0)