@@ -19,6 +19,7 @@ IF(NOT CMAKE_BUILD_TYPE)
19
19
"Choose the type of build, options are: Debug Release RelWithDebInfo MinSizeRel."
20
20
FORCE)
21
21
ENDIF ()
22
+
22
23
IF (NOT CMAKE_DEBUG_POSTFIX )
23
24
SET (CMAKE_DEBUG_POSTFIX "" CACHE STRING
24
25
"Library postfix for debug builds. Normally left blank."
@@ -43,6 +44,83 @@ endif()
43
44
44
45
45
46
SET (LIBNAME "UnSF" )
47
+ IF (WIN32 )
48
+ ADD_DEFINITIONS ("-D_WIN32 -D_WIN32_WINNT=0x0502" )
49
+
50
+ # This option is mainly for static linking UnSF into another project
51
+ # that already defines the IDs. It is up to that project to ensure all
52
+ # required IDs are defined.
53
+ OPTION (UNSF_NO_UID_DEFS "Do not define GUIDs, IIDs, CLSIDs, or PropertyKeys" OFF )
54
+
55
+ IF (MINGW)
56
+ OPTION (UNSF_BUILD_IMPORT_LIB "Build an import .lib using dlltool (requires sed)" ON )
57
+ IF (NOT DLLTOOL)
58
+ IF (HOST)
59
+ SET (DLLTOOL "${HOST} -dlltool" )
60
+ ELSE ()
61
+ SET (DLLTOOL "dlltool" )
62
+ ENDIF ()
63
+ ENDIF ()
64
+ ENDIF ()
65
+ ENDIF ()
66
+
67
+ SET (EXTRA_CFLAGS "" )
68
+ IF (MSVC )
69
+ ADD_DEFINITIONS (-D_CRT_SECURE_NO_WARNINGS)
70
+ ADD_DEFINITIONS (-D_CRT_NONSTDC_NO_DEPRECATE)
71
+ SET (EXTRA_CFLAGS "${EXTRA_CFLAGS} /wd4098" )
72
+
73
+ OPTION (FORCE_STATIC_VCRT "Force /MT for static VC runtimes" OFF )
74
+ IF (FORCE_STATIC_VCRT)
75
+ FOREACH (flag_var
76
+ CMAKE_C_FLAGS CMAKE_C_FLAGS_DEBUG CMAKE_C_FLAGS_RELEASE
77
+ CMAKE_C_FLAGS_MINSIZEREL CMAKE_C_FLAGS_RELWITHDEBINFO)
78
+ IF (${flag_var} MATCHES "/MD" )
79
+ STRING (REGEX REPLACE "/MD" "/MT" ${flag_var} "${${flag_var} }" )
80
+ ENDIF ()
81
+ ENDFOREACH (flag_var)
82
+ ENDIF ()
83
+ ELSE ()
84
+ SET (EXTRA_CFLAGS "${EXTRA_CFLAGS} -Winline -Wall" )
85
+ #CHECK_C_COMPILER_FLAG(-Wextra HAVE_W_EXTRA)
86
+ IF (HAVE_W_EXTRA)
87
+ SET (EXTRA_CFLAGS "${EXTRA_CFLAGS} -Wextra" )
88
+ ENDIF ()
89
+
90
+ IF (UNSF_WERROR)
91
+ SET (EXTRA_CFLAGS "${EXTRA_CFLAGS} -Werror" )
92
+ ENDIF ()
93
+
94
+ # We want RelWithDebInfo to actually include debug stuff (define _DEBUG
95
+ # instead of NDEBUG)
96
+ FOREACH (flag_var CMAKE_C_FLAGS_RELWITHDEBINFO CMAKE_CXX_FLAGS_RELWITHDEBINFO )
97
+ IF (${flag_var} MATCHES "-DNDEBUG" )
98
+ STRING (REGEX REPLACE "-DNDEBUG" "-D_DEBUG" ${flag_var} "${${flag_var} }" )
99
+ ENDIF ()
100
+ ENDFOREACH ()
101
+
102
+ #CHECK_C_SOURCE_COMPILES("int foo() __attribute__((destructor));
103
+ # int main() {return 0;}" HAVE_GCC_DESTRUCTOR)
104
+
105
+ option (UNSF_STATIC_LIBGCC "Force -static-libgcc for static GCC runtimes" OFF )
106
+ if (UNSF_STATIC_LIBGCC)
107
+ set (OLD_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} )
108
+ set (CMAKE_REQUIRED_LIBRARIES ${CMAKE_REQUIRED_LIBRARIES} -static -libgcc)
109
+ check_c_source_compiles(
110
+ "#include <stdlib.h>
111
+ int main()
112
+ {
113
+ return 0;
114
+ }"
115
+ HAVE_STATIC_LIBGCC_SWITCH
116
+ )
117
+ if (HAVE_STATIC_LIBGCC_SWITCH)
118
+ set (EXTRA_LIBS ${EXTRA_LIBS} -static -libgcc)
119
+ endif ()
120
+ set (CMAKE_REQUIRED_LIBRARIES ${OLD_REQUIRED_LIBRARIES} )
121
+ unset (OLD_REQUIRED_LIBRARIES)
122
+ endif ()
123
+ ENDIF ()
46
124
47
125
# create our pkg-config: unsf.pc
48
126
SET (prefix ${CMAKE_INSTALL_PREFIX} )
@@ -62,22 +140,53 @@ SET(UNSF_OBJS libunsf.c)
62
140
63
141
IF (LIBTYPE STREQUAL "STATIC" )
64
142
ADD_LIBRARY (${LIBNAME} STATIC ${UNSF_OBJS} )
65
- SET (libUnSF_LOCATION "${CMAKE_BINARY_DIR} /lib${LIBNAME} .a" )
143
+ IF (MSVC )
144
+ SET (libUnSF_LOCATION "${CMAKE_BINARY_DIR} \\ ${LIBNAME} .lib" )
145
+ ELSE ()
146
+ SET (libUnSF_LOCATION "${CMAKE_BINARY_DIR} /lib${LIBNAME} .a" )
147
+ ENDIF ()
66
148
ELSE ()
67
149
ADD_LIBRARY (${LIBNAME} SHARED ${UNSF_OBJS} )
68
- SET (libUnSF_LOCATION "${CMAKE_BINARY_DIR} /lib${LIBNAME} .so" )
150
+ IF (MSVC )
151
+ SET (libUnSF_LOCATION "${CMAKE_BINARY_DIR} \\ ${LIBNAME} .dll" )
152
+ ELSE ()
153
+ SET (libUnSF_LOCATION "${CMAKE_BINARY_DIR} /lib${LIBNAME} .so" )
154
+ ENDIF ()
69
155
ENDIF ()
70
156
157
+
158
+ if ( MSVC )
159
+ set_target_properties ( ${LIBNAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} )
160
+ set_target_properties ( ${LIBNAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR} )
161
+ set_target_properties ( ${LIBNAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR} )
162
+ set_target_properties ( ${LIBNAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_BINARY_DIR} )
163
+ set_target_properties ( ${LIBNAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_BINARY_DIR} )
164
+ set_target_properties ( ${LIBNAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR} )
165
+ set_target_properties ( ${LIBNAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY_DEBUG ${CMAKE_BINARY_DIR} )
166
+ set_target_properties ( ${LIBNAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY_RELEASE ${CMAKE_BINARY_DIR} )
167
+ set_target_properties ( ${LIBNAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY_MINSIZEREL ${CMAKE_BINARY_DIR} )
168
+ set_target_properties ( ${LIBNAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY_RELWITHDEBINFO ${CMAKE_BINARY_DIR} )
169
+ endif ( MSVC )
170
+
171
+ add_definitions (-DUNSF_STATIC)
172
+
71
173
SET_PROPERTY (TARGET ${LIBNAME} APPEND PROPERTY COMPILE_FLAGS ${EXTRA_CFLAGS} )
72
174
73
175
IF (WIN32 AND UnSF_NO_UID_DEFS)
74
176
SET_PROPERTY (TARGET ${LIBNAME} APPEND PROPERTY COMPILE_DEFINITIONS NO_UID_DEFS)
177
+ ELSEIF (NOT WIN32 )
178
+ SET_PROPERTY (TARGET ${LIBNAME} APPEND PROPERTY POSITION_INDEPENDENT_CODE TRUE )
75
179
ENDIF ()
76
180
77
181
SET_TARGET_PROPERTIES (${LIBNAME} PROPERTIES VERSION ${LIB_VERSION}
78
182
SOVERSION ${LIB_MAJOR_VERSION} )
79
183
80
184
# build executable
81
- ADD_EXECUTABLE (unsf unsf.c libunsf.h)
82
- ADD_DEPENDENCIES (unsf ${LIBNAME} )
83
- TARGET_LINK_LIBRARIES (unsf ${libUnSF_LOCATION} ${EXTRA_LIBS} )
185
+ IF (MSVC )
186
+ SET (GETOPT getopt.c)
187
+ ELSE ()
188
+ SET (GETOPT)
189
+ ENDIF ()
190
+ ADD_EXECUTABLE (sf2pat unsf.c libunsf.h ${GETOPT} )
191
+ ADD_DEPENDENCIES (sf2pat ${LIBNAME} )
192
+ TARGET_LINK_LIBRARIES (sf2pat ${libUnSF_LOCATION} ${EXTRA_LIBS} )
0 commit comments