|
1 | | -# Will need windows logic someday, even though it doesn't work yet, so go ahead |
2 | | -# and add the DLL_DEFINE macro |
3 | 1 |
|
4 | | -MACRO(DLL_DEFINE libname) |
5 | | - IF(MSVC) |
6 | | - STRING(REGEX REPLACE "lib" "" LOWERCORE "${libname}") |
7 | | - STRING(TOUPPER ${LOWERCORE} UPPER_CORE) |
8 | | - add_definitions("-D${UPPER_CORE}_EXPORT_DLL") |
9 | | - ENDIF(MSVC) |
10 | | -ENDMACRO() |
| 2 | +MACRO(DEFINE_DLL_EXPORTS libname) |
| 3 | + IF( MSVC OR BORLAND ) |
| 4 | + if( ${libname} MATCHES "SDAI_.*" ) |
| 5 | + set( export "SCL_SCHEMA_DLL_EXPORTS" ) |
| 6 | + else() |
| 7 | + STRING(REGEX REPLACE "lib" "" shortname "${libname}") |
| 8 | + STRING(REGEX REPLACE "step" "" LOWERCORE "${shortname}") |
| 9 | + STRING(TOUPPER ${LOWERCORE} UPPER_CORE) |
| 10 | + set( export "SCL_${UPPER_CORE}_DLL_EXPORTS" ) |
| 11 | + endif() |
| 12 | + get_target_property(defs ${libname} COMPILE_DEFINITIONS ) |
| 13 | + if( defs ) #if no properties, ${defs} will be defs-NOTFOUND which CMake interprets as false |
| 14 | + set( defs "${defs};${export}") |
| 15 | + else( defs ) |
| 16 | + set( defs "${export}") |
| 17 | + endif( defs ) |
| 18 | + set_target_properties(${libname} PROPERTIES COMPILE_DEFINITIONS "${defs}" ) |
| 19 | + ENDIF( MSVC OR BORLAND ) |
| 20 | +ENDMACRO(DEFINE_DLL_EXPORTS libname) |
11 | 21 |
|
| 22 | +MACRO( DEFINE_DLL_IMPORTS tgt libs ) |
| 23 | + IF( MSVC OR BORLAND ) |
| 24 | + get_target_property(defs ${tgt} COMPILE_DEFINITIONS ) |
| 25 | + if( NOT defs ) #if no properties, ${defs} will be defs-NOTFOUND which CMake interprets as false |
| 26 | + set( defs "") |
| 27 | + endif( NOT defs ) |
| 28 | + foreach( lib ${libs} ) |
| 29 | + STRING(REGEX REPLACE "lib" "" shortname "${lib}") |
| 30 | + STRING(REGEX REPLACE "step" "" LOWERCORE "${shortname}") |
| 31 | + STRING(TOUPPER ${LOWERCORE} UPPER_CORE) |
| 32 | + list( APPEND defs "SCL_${UPPER_CORE}_DLL_IMPORTS" ) |
| 33 | + endforeach( lib ${libs} ) |
| 34 | + if( DEFINED defs ) |
| 35 | + if( defs ) |
| 36 | + set_target_properties( ${tgt} PROPERTIES COMPILE_DEFINITIONS "${defs}" ) |
| 37 | + endif( defs ) |
| 38 | + endif( DEFINED defs ) |
| 39 | + ENDIF( MSVC OR BORLAND ) |
| 40 | +ENDMACRO( DEFINE_DLL_IMPORTS tgt libs ) |
12 | 41 |
|
13 | 42 | MACRO(SCL_ADDEXEC execname srcs libs) |
14 | | - STRING(REGEX REPLACE " " ";" srcslist "${srcs}") |
15 | | - STRING(REGEX REPLACE " " ";" libslist "${libs}") |
16 | | - add_executable(${execname} ${srcslist}) |
17 | | - target_link_libraries(${execname} ${libslist}) |
18 | | - INSTALL(TARGETS ${execname} DESTINATION bin) |
19 | | - # Enable extra compiler flags if local executables and/or global options dictate |
20 | | - SET(LOCAL_COMPILE_FLAGS "") |
21 | | - FOREACH(extraarg ${ARGN}) |
22 | | - IF(${extraarg} MATCHES "STRICT" AND SCL-ENABLE_STRICT) |
23 | | - SET(LOCAL_COMPILE_FLAGS "${LOCAL_COMPILE_FLAGS} ${STRICT_FLAGS}") |
24 | | - ENDIF(${extraarg} MATCHES "STRICT" AND SCL-ENABLE_STRICT) |
25 | | - ENDFOREACH(extraarg ${ARGN}) |
26 | | - IF(LOCAL_COMPILE_FLAGS) |
27 | | - SET_TARGET_PROPERTIES(${execname} PROPERTIES COMPILE_FLAGS ${LOCAL_COMPILE_FLAGS}) |
28 | | - ENDIF(LOCAL_COMPILE_FLAGS) |
| 43 | + STRING(REGEX REPLACE " " ";" srcslist "${srcs}") |
| 44 | + STRING(REGEX REPLACE " " ";" libslist "${libs}") |
| 45 | + add_executable(${execname} ${srcslist}) |
| 46 | + target_link_libraries(${execname} ${libslist}) |
| 47 | + DEFINE_DLL_IMPORTS(${execname} "${libslist}") #add import definitions for all libs that the executable is linked to |
| 48 | + INSTALL(TARGETS ${execname} DESTINATION bin) |
| 49 | + # Enable extra compiler flags if local executables and/or global options dictate |
| 50 | + SET(LOCAL_COMPILE_FLAGS "") |
| 51 | + FOREACH(extraarg ${ARGN}) |
| 52 | + IF(${extraarg} MATCHES "STRICT" AND SCL-ENABLE_STRICT) |
| 53 | + SET(LOCAL_COMPILE_FLAGS "${LOCAL_COMPILE_FLAGS} ${STRICT_FLAGS}") |
| 54 | + ENDIF(${extraarg} MATCHES "STRICT" AND SCL-ENABLE_STRICT) |
| 55 | + ENDFOREACH(extraarg ${ARGN}) |
| 56 | + IF(LOCAL_COMPILE_FLAGS) |
| 57 | + SET_TARGET_PROPERTIES(${execname} PROPERTIES COMPILE_FLAGS ${LOCAL_COMPILE_FLAGS}) |
| 58 | + ENDIF(LOCAL_COMPILE_FLAGS) |
29 | 59 | ENDMACRO(SCL_ADDEXEC execname srcs libs) |
30 | 60 |
|
31 | 61 | MACRO(SCL_ADDLIB libname srcs libs) |
32 | 62 | STRING(REGEX REPLACE " " ";" srcslist "${srcs}") |
33 | 63 | STRING(REGEX REPLACE " " ";" libslist1 "${libs}") |
34 | 64 | STRING(REGEX REPLACE "-framework;" "-framework " libslist "${libslist1}") |
35 | | - DLL_DEFINE(${libname}) |
36 | 65 | IF(SCL_BUILD_SHARED_LIBS) |
37 | | - add_library(${libname} SHARED ${srcslist}) |
38 | | - if(NOT ${libs} MATCHES "NONE") |
39 | | - target_link_libraries(${libname} ${libslist}) |
40 | | - endif(NOT ${libs} MATCHES "NONE") |
41 | | - SET_TARGET_PROPERTIES(${libname} PROPERTIES VERSION ${SCL_ABI_VERSION} SOVERSION ${SCL_ABI_SOVERSION} ) |
42 | | - INSTALL(TARGETS ${libname} DESTINATION lib) |
| 66 | + add_library(${libname} SHARED ${srcslist}) |
| 67 | + DEFINE_DLL_EXPORTS(${libname}) |
| 68 | + if(NOT ${libs} MATCHES "NONE") |
| 69 | + target_link_libraries(${libname} ${libslist}) |
| 70 | + DEFINE_DLL_IMPORTS(${libname} "${libslist}" ) |
| 71 | + endif(NOT ${libs} MATCHES "NONE") |
| 72 | + SET_TARGET_PROPERTIES(${libname} PROPERTIES VERSION ${SCL_ABI_VERSION} SOVERSION ${SCL_ABI_SOVERSION} ) |
| 73 | + INSTALL(TARGETS ${libname} DESTINATION lib) |
| 74 | + if(APPLE) |
| 75 | + set_target_properties(${libname} PROPERTIES LINK_FLAGS "-flat_namespace -undefined suppress") |
| 76 | + endif(APPLE) |
43 | 77 | ENDIF(SCL_BUILD_SHARED_LIBS) |
44 | 78 | IF(SCL_BUILD_STATIC_LIBS AND NOT MSVC) |
45 | | - add_library(${libname}-static STATIC ${srcslist}) |
46 | | - if(NOT ${libs} MATCHES "NONE") |
47 | | - target_link_libraries(${libname}-static ${libslist}) |
48 | | - endif(NOT ${libs} MATCHES "NONE") |
49 | | - IF(NOT WIN32) |
50 | | - SET_TARGET_PROPERTIES(${libname}-static PROPERTIES OUTPUT_NAME "${libname}") |
51 | | - ENDIF(NOT WIN32) |
52 | | - IF(WIN32) |
53 | | - # We need the lib prefix on win32, so add it even if our add_library |
54 | | - # wrapper function has removed it due to the target name - see |
55 | | - # http://www.cmake.org/Wiki/CMake_FAQ#How_do_I_make_my_shared_and_static_libraries_have_the_same_root_name.2C_but_different_suffixes.3F |
56 | | - SET_TARGET_PROPERTIES(${libname}-static PROPERTIES PREFIX "lib") |
57 | | - ENDIF(WIN32) |
58 | | - INSTALL(TARGETS ${libname}-static DESTINATION lib) |
| 79 | + add_library(${libname}-static STATIC ${srcslist}) |
| 80 | + DEFINE_DLL_EXPORTS(${libname}-static) |
| 81 | + if(NOT ${libs} MATCHES "NONE") |
| 82 | + target_link_libraries(${libname}-static "${libslist}") |
| 83 | + DEFINE_DLL_IMPORTS(${libname}-static ${libslist} ) |
| 84 | + endif(NOT ${libs} MATCHES "NONE") |
| 85 | + IF(NOT WIN32) |
| 86 | + SET_TARGET_PROPERTIES(${libname}-static PROPERTIES OUTPUT_NAME "${libname}") |
| 87 | + ENDIF(NOT WIN32) |
| 88 | + IF(WIN32) |
| 89 | + # We need the lib prefix on win32, so add it even if our add_library |
| 90 | + # wrapper function has removed it due to the target name - see |
| 91 | + # http://www.cmake.org/Wiki/CMake_FAQ#How_do_I_make_my_shared_and_static_libraries_have_the_same_root_name.2C_but_different_suffixes.3F |
| 92 | + SET_TARGET_PROPERTIES(${libname}-static PROPERTIES PREFIX "lib") |
| 93 | + ENDIF(WIN32) |
| 94 | + INSTALL(TARGETS ${libname}-static DESTINATION lib) |
| 95 | + if(APPLE) |
| 96 | + set_target_properties(${libname}-static PROPERTIES LINK_FLAGS "-flat_namespace -undefined suppress") |
| 97 | + endif(APPLE) |
59 | 98 | ENDIF(SCL_BUILD_STATIC_LIBS AND NOT MSVC) |
60 | 99 | # Enable extra compiler flags if local libraries and/or global options dictate |
61 | 100 | SET(LOCAL_COMPILE_FLAGS "") |
62 | 101 | FOREACH(extraarg ${ARGN}) |
63 | | - IF(${extraarg} MATCHES "STRICT" AND SCL-ENABLE_STRICT) |
64 | | - SET(LOCAL_COMPILE_FLAGS "${LOCAL_COMPILE_FLAGS} ${STRICT_FLAGS}") |
65 | | - ENDIF(${extraarg} MATCHES "STRICT" AND SCL-ENABLE_STRICT) |
| 102 | + IF(${extraarg} MATCHES "STRICT" AND SCL-ENABLE_STRICT) |
| 103 | + SET(LOCAL_COMPILE_FLAGS "${LOCAL_COMPILE_FLAGS} ${STRICT_FLAGS}") |
| 104 | + ENDIF(${extraarg} MATCHES "STRICT" AND SCL-ENABLE_STRICT) |
66 | 105 | ENDFOREACH(extraarg ${ARGN}) |
67 | 106 | IF(LOCAL_COMPILE_FLAGS) |
68 | | - IF(BUILD_SHARED_LIBS) |
69 | | - SET_TARGET_PROPERTIES(${libname} PROPERTIES COMPILE_FLAGS ${LOCAL_COMPILE_FLAGS}) |
70 | | - ENDIF(BUILD_SHARED_LIBS) |
71 | | - IF(BUILD_STATIC_LIBS AND NOT MSVC) |
72 | | - SET_TARGET_PROPERTIES(${libname}-static PROPERTIES COMPILE_FLAGS ${LOCAL_COMPILE_FLAGS}) |
73 | | - ENDIF(BUILD_STATIC_LIBS AND NOT MSVC) |
| 107 | + IF(BUILD_SHARED_LIBS) |
| 108 | + SET_TARGET_PROPERTIES(${libname} PROPERTIES COMPILE_FLAGS ${LOCAL_COMPILE_FLAGS}) |
| 109 | + ENDIF(BUILD_SHARED_LIBS) |
| 110 | + IF(BUILD_STATIC_LIBS AND NOT MSVC) |
| 111 | + SET_TARGET_PROPERTIES(${libname}-static PROPERTIES COMPILE_FLAGS ${LOCAL_COMPILE_FLAGS}) |
| 112 | + ENDIF(BUILD_STATIC_LIBS AND NOT MSVC) |
74 | 113 | ENDIF(LOCAL_COMPILE_FLAGS) |
75 | 114 | ENDMACRO(SCL_ADDLIB libname srcs libs) |
0 commit comments