@@ -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+ )
2017else (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 )
2323endif (SC_GENERATE_LP_SOURCES )
2424
2525set (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
118107if (SC_ENABLE_TESTING)
119108 add_subdirectory (test )
0 commit comments