Skip to content

Commit 30d570a

Browse files
committed
Simplify the libexpress build logic.
This approach seems to be more reliable when it comes to generating expscan.h in the proper sequence for building.
1 parent 18b4d82 commit 30d570a

File tree

2 files changed

+50
-69
lines changed

2 files changed

+50
-69
lines changed

src/express/CMakeLists.txt

Lines changed: 50 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -10,19 +10,23 @@ if(SC_GENERATE_LP_SOURCES)
1010
LEMON_TARGET(ExpParser expparse.y)
1111
PERPLEX_TARGET(ExpScanner expscan.l)
1212
ADD_PERPLEX_LEMON_DEPENDENCY(ExpScanner ExpParser)
13-
14-
add_library(objlib_expscan_c OBJECT ${PERPLEX_ExpScanner_SRC})
15-
set_property(TARGET objlib_expscan_c PROPERTY POSITION_INDEPENDENT_CODE ON)
16-
17-
add_library(objlib_expparse_c OBJECT ${LEMON_ExpParser_SRC})
18-
set_property(TARGET objlib_expparse_c PROPERTY POSITION_INDEPENDENT_CODE ON)
19-
13+
include_directories(
14+
${LEMON_ExpParser_INCLUDE_DIR}
15+
${PERPLEX_ExpScanner_INCLUDE_DIR}
16+
)
2017
else(SC_GENERATE_LP_SOURCES)
21-
add_subdirectory(generated)
22-
include_directories(generated)
18+
set(LEMON_ExpParser_SRC ${CMAKE_CURRENT_SOURCE_DIR}/generated/expparse.c)
19+
set(LEMON_ExpParser_HDR ${CMAKE_CURRENT_SOURCE_DIR}/generated/expparse.h)
20+
set(PERPLEX_ExpScanner_SRC ${CMAKE_CURRENT_SOURCE_DIR}/generated/expscan.c)
21+
set(PERPLEX_ExpScanner_HDR ${CMAKE_CURRENT_SOURCE_DIR}/generated/expscan.h)
22+
include_directories(${CMAKE_CURRENT_SOURCE_DIR}/generated)
2323
endif(SC_GENERATE_LP_SOURCES)
2424

2525
set(EXPRESS_SOURCES
26+
${LEMON_ExpParser_HDR}
27+
${LEMON_ExpParser_SRC}
28+
${PERPLEX_ExpScanner_HDR}
29+
${PERPLEX_ExpScanner_SRC}
2630
symbol.c
2731
type.c
2832
variable.c
@@ -47,30 +51,42 @@ set(EXPRESS_SOURCES
4751
ordered_attrs.cc
4852
info.c
4953
factory.c
50-
)
51-
52-
set(EXPRESS_OBJS)
53-
foreach(_src ${EXPRESS_SOURCES})
54-
string(REPLACE "." "_" _suffix ${_src})
55-
set(_objlib "objlib_${_suffix}")
56-
add_library(${_objlib} OBJECT ${_src})
57-
# TODO: probably PIC should be used everywhere...
58-
set_property(TARGET ${_objlib} PROPERTY POSITION_INDEPENDENT_CODE ON)
59-
list(APPEND EXPRESS_OBJS $<TARGET_OBJECTS:${_objlib}>)
60-
endforeach()
61-
62-
list(APPEND EXPRESS_OBJS $<TARGET_OBJECTS:objlib_expscan_c>)
63-
list(APPEND EXPRESS_OBJS $<TARGET_OBJECTS:objlib_expparse_c>)
64-
54+
)
6555

66-
if(SC_GENERATE_LP_SOURCES)
67-
set_property(TARGET objlib_expparse_c objlib_express_c objlib_lexact_c
68-
APPEND PROPERTY INCLUDE_DIRECTORIES "${PERPLEX_ExpScanner_INCLUDE_DIR}")
69-
set_property(TARGET objlib_expscan_c objlib_express_c objlib_lexact_c
70-
APPEND PROPERTY INCLUDE_DIRECTORIES "${LEMON_ExpParser_INCLUDE_DIR}")
71-
# OBJECT libraries are not targets, and so an explicit dependency is required
72-
set_source_files_properties(express.c lexact.c PROPERTIES OBJECT_DEPENDS "${PERPLEX_ExpScanner_HDR};${LEMON_ExpParser_HDR}")
73-
endif()
56+
add_library(express-obj OBJECT ${EXPRESS_SOURCES})
57+
add_dependencies(express-obj base)
58+
if(MSVC)
59+
set_property(TARGET express-obj APPEND PROPERTY COMPILE_DEFINITIONS "SC_EXPRESS_DLL_EXPORTS")
60+
endif(MSVC)
61+
62+
63+
add_library(express SHARED ${EXPRESS_SOURCES})
64+
target_link_libraries(express base)
65+
if(OPENBSD)
66+
set_target_properties(express PROPERTIES VERSION ${SC_VERSION_MAJOR}.${SC_VERSION_MINOR})
67+
else(OPENBSD)
68+
set_target_properties(express PROPERTIES VERSION ${SC_VERSION} SOVERSION ${SC_VERSION_MAJOR})
69+
endif(OPENBSD)
70+
if(APPLE)
71+
set_property(TARGET express APPEND PROPERTY LINK_FLAGS "-flat_namespace -undefined suppress")
72+
endif(APPLE)
73+
install(TARGETS express
74+
RUNTIME DESTINATION ${BIN_DIR}
75+
LIBRARY DESTINATION ${LIB_DIR}
76+
ARCHIVE DESTINATION ${LIB_DIR})
77+
78+
if(MSVC)
79+
set_property(TARGET express APPEND PROPERTY COMPILE_DEFINITIONS "SC_EXPRESS_DLL_EXPORTS")
80+
set_property(TARGET express APPEND PROPERTY INTERFACE_COMPILE_DEFINITIONS "SC_EXPRESS_DLL_IMPORTS")
81+
endif(MSVC)
82+
83+
if (BUILD_STATIC_LIBS)
84+
add_library(express-static STATIC ${EXPRESS_SOURCES})
85+
install(TARGETS express-static
86+
RUNTIME DESTINATION ${BIN_DIR}
87+
LIBRARY DESTINATION ${LIB_DIR}
88+
ARCHIVE DESTINATION ${LIB_DIR})
89+
endif (BUILD_STATIC_LIBS)
7490

7591
# TODO
7692
# Currently, fedex.c provides the main() for multiple programs. These programs
@@ -85,35 +101,8 @@ set(CHECK_EXPRESS_SOURCES
85101
fedex.c
86102
inithook.c
87103
)
88-
89-
SET(EXPRESS_PRIVATE_HDRS
90-
exptoks.h
91-
stack.h
92-
)
93-
94-
variable_watch(SC_ADDLIB_EXPRESS_ARG_LINK_LIBRARIES)
95-
variable_watch(SC_ADDLIB_EXPRESS-STATIC_ARG_LINK_LIBRARIES)
96-
97-
if($CACHE{SC_BUILD_SHARED_LIBS})
98-
SC_ADDLIB(express SHARED SOURCES "dummy.c" ${EXPRESS_OBJS} LINK_LIBRARIES base)
99-
if(WIN32)
100-
target_compile_definitions(express PRIVATE SC_EXPRESS_DLL_EXPORTS)
101-
endif()
102-
103-
if(NOT SC_IS_SUBBUILD AND SC_GIT_VERSION)
104-
add_dependencies(express version_string)
105-
endif()
106-
endif()
107-
108-
if($CACHE{SC_BUILD_STATIC_LIBS})
109-
SC_ADDLIB(express-static STATIC SOURCES "dummy.c" ${EXPRESS_OBJS} LINK_LIBRARIES base-static)
110-
111-
if(NOT SC_IS_SUBBUILD AND SC_GIT_VERSION)
112-
add_dependencies(express-static version_string)
113-
endif()
114-
endif()
115-
116-
SC_ADDEXEC(check-express SOURCES ${CHECK_EXPRESS_SOURCES} LINK_LIBRARIES express base ${SC_EXEC_NOINSTALL})
104+
add_executable(check-express ${CHECK_EXPRESS_SOURCES})
105+
target_link_libraries(check-express express base)
117106

118107
if(SC_ENABLE_TESTING)
119108
add_subdirectory(test)

src/express/generated/CMakeLists.txt

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

0 commit comments

Comments
 (0)