1- cmake_minimum_required (VERSION 3.16 )
1+ cmake_minimum_required (VERSION 3.17 )
22
3- set (
4- CMAKE_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR} /vcpkg/scripts/buildsystems/vcpkg.cmake"
5- CACHE STRING "Vcpkg toolchain file"
6- )
3+ if (NOT DEFINED ${CMAKE_TOOLCHAIN_FILE} )
4+ set (
5+ CMAKE_TOOLCHAIN_FILE "${CMAKE_CURRENT_SOURCE_DIR} /vcpkg/scripts/buildsystems/vcpkg.cmake"
6+ CACHE STRING "Vcpkg toolchain file"
7+ )
8+ endif ()
79
810project (
911 wowpkg
10- VERSION 0.3.1
12+ VERSION 0.4.0
1113 DESCRIPTION "A CLI World of Warcraft addon manager"
1214 LANGUAGES C
1315)
@@ -16,6 +18,7 @@ set(WOWPKG_C_STANDARD 11)
1618
1719option (WOWPKG_ENABLE_SANITIZERS "Build with or without sanitizers" OFF )
1820option (WOWPKG_ENABLE_TESTS "Build tests" OFF )
21+ option (WOWPKG_ENABLE_TESTS_INTEGRATION "Build integration tests" OFF )
1922option (WOWPKG_USE_DEVELOPMENT_PATHS "Determines what paths will be used to find some files" OFF )
2023
2124# Compiler flags that enable warnings.
@@ -57,18 +60,23 @@ if (WOWPKG_ENABLE_TESTS)
5760 enable_testing ()
5861endif ()
5962
60- find_package (CURL CONFIG REQUIRED )
63+ find_package (CURL REQUIRED )
6164find_package (cJSON CONFIG REQUIRED )
62- find_package (unofficial-minizip CONFIG REQUIRED )
65+ find_package (LibArchive REQUIRED )
6366
64- set (WOWPKG_LIBS CURL::libcurl cjson unofficial::minizip::minizip )
67+ set (WOWPKG_LIBS CURL::libcurl cjson LibArchive::LibArchive )
6568
6669if (MSVC )
67- # CMake does not set proper release flags for MSVC.
68- set (WFLAGS_RELEASE /O2 /GL /DNDEBUG /Zi /Gy)
69- set (WFLAGS /W4 "$<$<CONFIG :Release >:${WFLAGS_RELEASE} >" )
70+ set (WFLAGS_RELEASE /GL /O2)
71+ set (LDFLAGS_RELEASE /LTCG)
7072
71- set (LDFLAGS_RELEASE /DEBUG /INCREMENTAL:NO /OPT:REF /OPT:ICF)
73+ # Really only needed if the config is Release.
74+ if (WOWPKG_ENABLE_SANITIZERS)
75+ set (WFLAGS_RELEASE ${WFLAGS_RELEASE} /Zi)
76+ set (LDFLAGS_RELEASE ${LDFLAGS_RELEASE} /DEBUG)
77+ endif ()
78+
79+ set (WFLAGS /W4 "$<$<CONFIG :Release >:${WFLAGS_RELEASE} >" )
7280 set (LDFLAGS "$<$<CONFIG :Release >:${LDFLAGS_RELEASE} >" )
7381
7482 # A lot of the functions suggested by this are not available on other
@@ -80,25 +88,24 @@ else()
8088
8189 -Wall
8290 -Wextra
83- -Wshadow
84- -Wdouble-promotion
85- -Wconversion
8691 -Wpedantic
8792 -Wcast-align
88- -Wstrict-prototypes
89-
90- -Wwrite-strings
91- -Winit-self
93+ -Wcast-qual
94+ -Wconversion
95+ -Wdouble-promotion
9296 -Wformat=2
97+ -Winit-self
98+ -Wparentheses
99+ -Wshadow
100+ -Wstrict-aliasing
93101 -Wstrict-overflow=2
94- -Wcast-qual
95- -Wundef
102+ -Wstrict-prototypes
96103 -Wswitch-default
97- -fstack-protector-strong
98- -Wparentheses
99- -Wunused-macros
100104 -Wswitch-enum
101- -Wstrict-aliasing
105+ -Wundef
106+ -Wunused-macros
107+ -Wwrite-strings
108+ -fstack-protector-strong
102109 )
103110endif ()
104111
@@ -112,19 +119,20 @@ if (WOWPKG_ENABLE_SANITIZERS)
112119 set (
113120 SANFLAGS
114121
115- -fsanitize=address
116- -fsanitize=undefined
117- -fsanitize=float-divide-by-zero
118- -fsanitize=float-cast-overflow
119122 -fno-sanitize-recover=all
120- -fno-sanitize=null
121123 -fno-sanitize=alignment
124+ -fno-sanitize=null
125+ -fsanitize=address
126+ -fsanitize=float-cast-overflow
127+ -fsanitize=float-divide-by-zero
128+ -fsanitize=undefined
122129 )
123130
124131 set (WFLAGS ${WFLAGS} ${SANFLAGS} )
125132
126133 if (APPLE )
127- set (LDFLAGS ${SANFLAGS} -static-libsan)
134+ # set(LDFLAGS ${SANFLAGS} -static-libsan)
135+ set (LDFLAGS ${SANFLAGS} )
128136 else ()
129137 set (LDFLAGS ${SANFLAGS} -static-libasan)
130138 endif ()
@@ -136,11 +144,13 @@ set(
136144
137145 ${PROJECT_SOURCE_DIR} /src/addon.c
138146 ${PROJECT_SOURCE_DIR} /src/appstate.c
147+ ${PROJECT_SOURCE_DIR} /src/catalog.c
139148 ${PROJECT_SOURCE_DIR} /src/command.c
140149 ${PROJECT_SOURCE_DIR} /src/config.c
141150 ${PROJECT_SOURCE_DIR} /src/ini.c
142151 ${PROJECT_SOURCE_DIR} /src/list.c
143152 ${PROJECT_SOURCE_DIR} /src/osapi.c
153+ ${PROJECT_SOURCE_DIR} /src/osstring.c
144154 ${PROJECT_SOURCE_DIR} /src/zipper.c
145155)
146156
@@ -149,7 +159,7 @@ list(APPEND WOWPKG_DEFINES WOWPKG_VERSION="${PROJECT_VERSION}")
149159if (WOWPKG_USE_DEVELOPMENT_PATHS)
150160 message (STATUS "[${PROJECT_NAME} ] building with development paths" )
151161 list (APPEND WOWPKG_DEFINES
152- WOWPKG_USER_FILE_DIR="${PROJECT_SOURCE_DIR} /dev_only "
162+ WOWPKG_USER_FILE_DIR="${PROJECT_SOURCE_DIR} /data "
153163 WOWPKG_CATALOG_PATH="${PROJECT_SOURCE_DIR} /catalog"
154164 )
155165endif ()
@@ -158,7 +168,12 @@ add_subdirectory(src)
158168
159169if (WOWPKG_ENABLE_TESTS)
160170 message (STATUS "[${PROJECT_NAME} ] enabling tests" )
161- add_subdirectory (test )
171+ add_subdirectory (tests )
172+ endif ()
173+
174+ if (WOWPKG_ENABLE_TESTS_INTEGRATION)
175+ message (STATUS "[${PROJECT_NAME} ] enabling integration tests" )
176+ add_subdirectory (tests/integration )
162177endif ()
163178
164179if (APPLE )
@@ -183,6 +198,7 @@ else()
183198endif ()
184199
185200if (WIN32 )
201+ install (FILES ${PROJECT_SOURCE_DIR} /build/src/Release/archive .dll DESTINATION bin)
186202 install (FILES ${PROJECT_SOURCE_DIR} /build/src/Release/cjson.dll DESTINATION bin)
187203 install (FILES ${PROJECT_SOURCE_DIR} /build/src/Release/libcurl.dll DESTINATION bin)
188204 install (FILES ${PROJECT_SOURCE_DIR} /build/src/Release/zlib1.dll DESTINATION bin)
0 commit comments