1project(petway)
  2
  3# set(CMAKE_VERBOSE_MAKEFILE ON)
  4set(CMAKE_C_COMPILER clang)
  5set(CMAKE_C_STANDARD 23)
  6set(CMAKE_C_STANDARD_REQUIRED ON)
  7
  8add_compile_options(-Wall -Wextra -pedantic -Werror -Wno-unused-parameter -falign-functions=16)
  9
 10if(DEFINED ENV{DEBUG})
 11    add_compile_options(-g)
 12else()
 13    add_compile_options(-O3)
 14endif()
 15
 16find_package(ICU COMPONENTS uc)
 17
 18add_library(petway STATIC
 19    src/pw_assert.c
 20    src/pw_dump.c
 21    src/pw_hash.c
 22    src/pw_interfaces.c
 23    src/pw_task.c
 24    src/lib/accessors.c
 25    src/lib/cgi_utils.c
 26    src/lib/ctype/charlower.c
 27    src/lib/ctype/chartype.c
 28    src/lib/ctype/charupper.c
 29    src/lib/env.c
 30    src/lib/file/buffered_file.c
 31    src/lib/file/file.c
 32    src/lib/file/makedirs.c
 33    src/lib/file/read_file.c
 34    src/lib/file/read_text_file.c
 35    src/lib/file/rename.c
 36    src/lib/file/shorthand.c
 37    src/lib/file/stat.c
 38    src/lib/file/write_file.c
 39    src/lib/file/write_text_file.c
 40    src/lib/html_utils.c
 41    src/lib/json_serializer.c
 42    src/lib/idna/idna_decode.c
 43    src/lib/kvargs.c
 44    src/lib/netutils.c
 45    src/lib/parsers.c
 46    src/lib/socket.c
 47    src/lib/string_io.c
 48    src/lib/path/basename.c
 49    src/lib/path/dirname.c
 50    src/lib/path/path_split.c
 51    src/lib/path/path_join.c
 52    src/lib/path/path_normalize.c
 53    src/lib/path/path_va.c
 54    src/lib/uri/parse_uri.c
 55    src/types/array/array.c
 56    src/types/array/array_iterator.c
 57    src/types/array/basic_array.c
 58    src/types/compound.c
 59    src/types/datetime.c
 60    src/types/exception.c
 61    src/types/hash_table.c
 62    src/types/map.c
 63    src/types/pw_as_/as_bool.c
 64    src/types/pw_as_/as_char.c
 65    src/types/pw_as_/as_uchar.c
 66    src/types/pw_as_/as_short.c
 67    src/types/pw_as_/as_ushort.c
 68    src/types/pw_as_/as_int.c
 69    src/types/pw_as_/as_unsigned.c
 70    src/types/pw_as_/as_long.c
 71    src/types/pw_as_/as_ulong.c
 72    src/types/pw_as_/as_longlong.c
 73    src/types/pw_as_/as_ulonglong.c
 74    src/types/pw_as_/as_int8.c
 75    src/types/pw_as_/as_uint8.c
 76    src/types/pw_as_/as_int16.c
 77    src/types/pw_as_/as_uint16.c
 78    src/types/pw_as_/as_int32.c
 79    src/types/pw_as_/as_uint32.c
 80    src/types/pw_as_/as_int64.c
 81    src/types/pw_as_/as_uint64.c
 82    src/types/pw_as_/as_float.c
 83    src/types/pw_as_/as_double.c
 84    src/types/pw_as_/as_size_t.c
 85    src/types/pw_as_/as_ssize_t.c
 86    src/types/pw_as_/as_ptrdiff_t.c
 87    src/types/pw_as_/as_uintptr_t.c
 88    src/types/set.c
 89    src/types/status.c
 90    src/types/string/append.c
 91    src/types/string/capitalize.c
 92    src/types/string/char_at.c
 93    src/types/string/copy.c
 94    src/types/string/create.c
 95    src/types/string/dedent.c
 96    src/types/string/equal_i.c
 97    src/types/string/equal_z.c
 98    src/types/string/equal_zi.c
 99    src/types/string/erase.c
100    src/types/string/hash.c
101    src/types/string/indent.c
102    src/types/string/insert.c
103    src/types/string/is_ascii_digit.c
104    src/types/string/isdigit.c
105    src/types/string/isspace.c
106    src/types/string/lcut.c
107    src/types/string/panic.c
108    src/types/string/pw_printf.c
109    src/types/string/replace_all.c
110    src/types/string/reverse.c
111    src/types/string/rsplit_chr.c
112    src/types/string/skip_chars.c
113    src/types/string/skip_spaces.c
114    src/types/string/split_chr.c
115    src/types/string/string_type.c
116    src/types/string/strcat_va.c
117    src/types/string/strchr.c
118    src/types/string/strchr2.c
119    src/types/string/strchri.c
120    src/types/string/strip.c
121    src/types/string/strip_chars.c
122    src/types/string/strput.c
123    src/types/string/strrchr.c
124    src/types/string/strrchr2.c
125    src/types/string/strstr.c
126    src/types/string/strstri.c
127    src/types/string/strstrz.c
128    src/types/string/substr.c
129    src/types/string/substreq.c
130    src/types/string/substreqi.c
131    src/types/string/substreqz.c
132    src/types/string/substreqzi.c
133    src/types/string/truncate.c
134    src/types/string/upper_lower.c
135    src/types/string/utf.c
136    src/types/struct.c
137    src/types/types.c
138)
139
140target_include_directories(petway PUBLIC . include libpussy)
141target_link_libraries(petway ${CMAKE_SOURCE_DIR}/libpussy/libpussy.a)
142
143# common definitions
144
145set(common_defs_targets petway)
146
147foreach(TARGET ${common_defs_targets})
148
149    if(DEFINED ENV{DEBUG})
150        target_compile_definitions(${TARGET} PUBLIC DEBUG)
151    endif()
152
153    if(DEFINED ICU_FOUND AND NOT DEFINED ENV{PW_WITHOUT_ICU})
154        target_compile_definitions(${TARGET} PUBLIC PW_WITH_ICU)
155    endif()
156
157endforeach(TARGET)