pd4web 2.0.2__tar.gz → 2.0.4__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. {pd4web-2.0.2 → pd4web-2.0.4}/PKG-INFO +1 -1
  2. pd4web-2.0.4/Sources/Libraries/pd.cmake/pd.cmake +435 -0
  3. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/config.h +5 -0
  4. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web/Builder.py +14 -1
  5. pd4web-2.0.4/Sources/pd4web/Compilers.py +97 -0
  6. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web/Libraries.py +0 -1
  7. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web/Pd4Web.py +62 -55
  8. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web.cpp +10 -3
  9. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web.gui.js +33 -9
  10. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web.hpp +0 -4
  11. {pd4web-2.0.2 → pd4web-2.0.4}/pyproject.toml +5 -4
  12. pd4web-2.0.2/Sources/Libraries/pd.cmake/pd.cmake +0 -380
  13. pd4web-2.0.2/Sources/pd4web/Compilers.py +0 -78
  14. {pd4web-2.0.2 → pd4web-2.0.4}/LICENSE +0 -0
  15. {pd4web-2.0.2 → pd4web-2.0.4}/README.md +0 -0
  16. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/.clang-format +0 -0
  17. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/.prettierrc +0 -0
  18. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/.yamlftm +0 -0
  19. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/Libraries.yaml +0 -0
  20. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/cyclone.cmake +0 -0
  21. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/earplug.cmake +0 -0
  22. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/else.cmake +0 -0
  23. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/libpd.cmake +0 -0
  24. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/o.scofo~.cmake +0 -0
  25. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/.git +0 -0
  26. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/.github/workflows/c-cpp.yml +0 -0
  27. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/.gitignore +0 -0
  28. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/CMakeLists.txt +0 -0
  29. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/Examples/.clang-format +0 -0
  30. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/Examples/CMakeLists.txt +0 -0
  31. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/Examples/fft~/fft~-help.pd +0 -0
  32. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/Examples/fft~/fft~.cpp +0 -0
  33. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/Examples/simple/simple-help.pd +0 -0
  34. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/Examples/simple/simple-patch.pd +0 -0
  35. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/Examples/simple/simple.cpp +0 -0
  36. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/Examples/simple~/simple~-help.pd +0 -0
  37. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/Examples/simple~/simple~.cpp +0 -0
  38. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/LICENSE +0 -0
  39. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/README.md +0 -0
  40. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/Tests/01.Deprecated-Functions/CMakeLists.txt +0 -0
  41. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pd.cmake/Tests/CMakeLists.txt +0 -0
  42. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/pmpd.cmake +0 -0
  43. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/Libraries/timbreIDLib.cmake +0 -0
  44. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/__init__.py +0 -0
  45. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/cmake-format.yaml +0 -0
  46. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/externals.cpp +0 -0
  47. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/favicon.ico +0 -0
  48. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/index.html +0 -0
  49. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web/Emscripten.py +0 -0
  50. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web/Helpers.py +0 -0
  51. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web/Objects.py +0 -0
  52. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web/Patch.py +0 -0
  53. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web/__init__.py +0 -0
  54. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web.gitignore +0 -0
  55. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web.midi.js +0 -0
  56. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web.style.css +0 -0
  57. {pd4web-2.0.2 → pd4web-2.0.4}/Sources/pd4web.threads.js +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pd4web
3
- Version: 2.0.2
3
+ Version: 2.0.4
4
4
  Summary: pd4web compiles PureData patches with external objects for Wasm, allowing to run entire patches in web browsers.
5
5
  Home-page: https://charlesneimog.github.io/pd4web
6
6
  Author: Charles K. Neimog
@@ -0,0 +1,435 @@
1
+ # check if cmake version is higher than 3.19, we need cmake_language
2
+ if(${CMAKE_VERSION} VERSION_LESS "3.19")
3
+ message(FATAL_ERROR "pd.cmake requires Cmake Version 3.19 or newer")
4
+ endif()
5
+
6
+ # ╭──────────────────────────────────────╮
7
+ # │ Set pd.cmake variables │
8
+ # ╰──────────────────────────────────────╯
9
+ set(PDCMAKE_DIR
10
+ ${CMAKE_CURRENT_LIST_DIR}
11
+ CACHE STRING "PATH where is located pd.cmake file")
12
+
13
+ set(PD_FLOATSIZE
14
+ 32
15
+ CACHE STRING "the floatsize of Pd (32 or 64)")
16
+
17
+ set(PD_SOURCES_PATH
18
+ ""
19
+ CACHE PATH "Path to Pd sources")
20
+
21
+ set(PD_ENABLE_TILDE_TARGET_WARNING
22
+ ON
23
+ CACHE BOOL "Warning for Target with tilde")
24
+
25
+ set(PD_INSTALL_LIBS
26
+ ON
27
+ CACHE BOOL "Install Pd Externals on PDLIBDIR")
28
+
29
+ set(PD_BUILD_STATIC_OBJECTS
30
+ OFF
31
+ CACHE
32
+ BOOL
33
+ "Enable building static objects. Useful when using self-contained objects with libpd, such as in embedded systems or standalone applications."
34
+ )
35
+
36
+ # ╭──────────────────────────────────────╮
37
+ # │ Get default PDLIBDIR │
38
+ # ╰──────────────────────────────────────╯
39
+ if(APPLE)
40
+ set(PDLIBDIR
41
+ "~/Library/Pd"
42
+ CACHE PATH "Path where lib will be installed")
43
+ elseif(UNIX)
44
+ set(PDLIBDIR
45
+ "/usr/local/lib/pd-externals"
46
+ CACHE PATH "Path where lib will be installed")
47
+ elseif(WIN32)
48
+ set(PDLIBDIR
49
+ "$ENV{APPDATA}/Pd"
50
+ CACHE PATH "Path where lib will be installed")
51
+ else()
52
+ message(FATAL_ERROR "Platform not supported")
53
+ endif()
54
+
55
+ if(PD_INSTALL_LIBS)
56
+ message(STATUS "Pd Install Libs Path: ${PDLIBDIR}")
57
+ endif()
58
+
59
+ # ╭──────────────────────────────────────╮
60
+ # │ ToolChain for Raspberry (others) │
61
+ # ╰──────────────────────────────────────╯
62
+ if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64" AND CMAKE_SYSTEM_NAME MATCHES
63
+ "Linux")
64
+ set(CMAKE_SYSTEM_NAME Linux)
65
+ set(CMAKE_SYSTEM_PROCESSOR aarch64)
66
+ find_program(AARCH64_GCC NAMES aarch64-linux-gnu-gcc)
67
+ find_program(AARCH64_GXX NAMES aarch64-linux-gnu-g++)
68
+ if(AARCH64_GCC AND AARCH64_GXX)
69
+ set(CMAKE_C_COMPILER ${AARCH64_GCC})
70
+ set(CMAKE_CXX_COMPILER ${AARCH64_GXX})
71
+ else()
72
+ message(FATAL_ERROR "Cross-compilers for aarch64 architecture not found.")
73
+ endif()
74
+ elseif(CMAKE_SYSTEM_PROCESSOR MATCHES "arm" AND CMAKE_SYSTEM_NAME MATCHES
75
+ "Linux")
76
+ set(CMAKE_SYSTEM_NAME Linux)
77
+ set(CMAKE_SYSTEM_PROCESSOR arm)
78
+ find_program(ARM_GCC NAMES arm-linux-gnueabihf-gcc)
79
+ find_program(ARM_GXX NAMES arm-linux-gnueabihf-g++)
80
+ if(ARM_GCC AND ARM_GXX)
81
+ set(CMAKE_C_COMPILER ${ARM_GCC})
82
+ set(CMAKE_CXX_COMPILER ${ARM_GXX})
83
+ else()
84
+ message(
85
+ FATAL_ERROR "ERROR: Cross-compilers for ARM architecture not found.")
86
+ endif()
87
+ endif()
88
+
89
+ if(NOT PD_SOURCES_PATH)
90
+ if(WIN32 OR MINGW)
91
+ if(PD_FLOATSIZE EQUAL 64)
92
+ set(PD_SOURCES_PATH "C:/Program Files/Pd64/src")
93
+ if(NOT PDBINDIR)
94
+ set(PDBINDIR "C:/Program Files/Pd64/bin")
95
+ endif()
96
+ elseif(PD_FLOATSIZE EQUAL 32)
97
+ set(PD_SOURCES_PATH "C:/Program Files/Pd/src")
98
+ if(NOT PDBINDIR)
99
+ set(PDBINDIR "C:/Program Files/Pd/bin")
100
+ endif()
101
+ endif()
102
+ find_library(
103
+ PD_LIBRARY
104
+ NAMES pd
105
+ HINTS ${PDBINDIR})
106
+ find_path(PD_HEADER_PATH m_pd.h PATHS ${PD_SOURCES_PATH})
107
+ if(NOT PD_HEADER_PATH)
108
+ message(
109
+ FATAL_ERROR
110
+ "<m_pd.h> not found in C:\\Program Files\\Pd\\src, is Pd installed?")
111
+ endif()
112
+
113
+ elseif(APPLE)
114
+ file(GLOB PD_INSTALLER "/Applications/Pd*.app")
115
+ if(PD_INSTALLER)
116
+ foreach(app ${PD_INSTALLER})
117
+ get_filename_component(PD_SOURCES_PATH "${app}/Contents/Resources/src/"
118
+ ABSOLUTE)
119
+ endforeach()
120
+ else()
121
+ message(
122
+ FATAL_ERROR
123
+ "PD_SOURCES_PATH not set and no Pd.app found in /Applications, is Pd installed?"
124
+ )
125
+ endif()
126
+
127
+ find_path(PD_HEADER_PATH m_pd.h PATHS ${PD_SOURCES_PATH})
128
+ if(NOT PD_HEADER_PATH)
129
+ message(
130
+ FATAL_ERROR
131
+ "<m_pd.h> not found in /Applications/Pd.app/Contents/Resources/src/, is Pd installed?"
132
+ )
133
+ endif()
134
+ message(STATUS "PD_SOURCES_PATH not set, using ${PD_SOURCES_PATH}")
135
+
136
+ elseif(UNIX AND NOT APPLE)
137
+ if(NOT PD_SOURCES_PATH)
138
+ set(PD_SOURCES_PATH "/usr/include/pd/")
139
+ endif()
140
+ if(NOT PDBINDIR)
141
+ set(PDBINDIR ${PD_SOURCES_PATH}/../bin)
142
+ endif()
143
+ find_path(PD_HEADER_PATH m_pd.h PATHS ${PD_SOURCES_PATH})
144
+ if(NOT PD_HEADER_PATH AND NOT EMSCRIPTEN)
145
+ message(
146
+ WARNING "<m_pd.h> not found in /usr/include/pd/, is Pd installed?")
147
+ endif()
148
+
149
+ else()
150
+ message(
151
+ FATAL_ERROR "PD_SOURCES_PATH not set and no default path for the system")
152
+ endif()
153
+ set(PD_SOURCES_PATH ${PD_SOURCES_PATH})
154
+ endif()
155
+
156
+ # ╭──────────────────────────────────────╮
157
+ # │ Macros │
158
+ # ╰──────────────────────────────────────╯
159
+ macro(set_pd_external_path EXTERNAL_PATH)
160
+ message(
161
+ DEPRECATION
162
+ "set_pd_external_path was removed, you can set PDLIBDIR and run cmake with '-DPD_INSTALL_LIBS=ON' instead"
163
+ )
164
+ endmacro(set_pd_external_path)
165
+
166
+ # ──────────────────────────────────────
167
+ macro(set_pd_sources PD_SOURCES)
168
+ message(
169
+ DEPRECATION "set_pd_sources is deprecated, use pd_set_sources instead")
170
+ endmacro(set_pd_sources)
171
+
172
+ macro(pd_set_sources PD_SOURCES)
173
+ set(PD_SOURCES_PATH ${PD_SOURCES})
174
+ endmacro(pd_set_sources)
175
+
176
+ # ╭──────────────────────────────────────╮
177
+ # │ Functions │
178
+ # ╰──────────────────────────────────────╯
179
+ function(pd_add_datafile OBJ_TARGET DATA_FILE)
180
+ set(BOOLEAN_ARGS) # No args for now
181
+ set(ONE_ARGS) # Define optional arg for TARGET
182
+ set(MULTI_ARGS DESTINATION IGNORE_DIR)
183
+ cmake_parse_arguments(PD_DATAFILE "${BOOLEAN_ARGS}" "${ONE_ARGS}"
184
+ "${MULTI_ARGS}" ${ARGN})
185
+ if(${OBJ_TARGET} MATCHES "~$")
186
+ string(REGEX REPLACE "~$" "_tilde" OBJ_TARGET ${OBJ_TARGET})
187
+ endif()
188
+
189
+ foreach(DATA_FILE ${DATA_FILE})
190
+ if(IS_DIRECTORY ${DATA_FILE})
191
+ if(PD_DATAFILE_DESTINATION)
192
+ install(
193
+ DIRECTORY ${DATA_FILE}
194
+ DESTINATION ${PDLIBDIR}/${PROJECT_NAME}/${PD_DATAFILE_DESTINATION})
195
+ else()
196
+ install(DIRECTORY ${DATA_FILE} DESTINATION ${PDLIBDIR}/${PROJECT_NAME})
197
+ endif()
198
+ else()
199
+ if(PD_DATAFILE_DESTINATION)
200
+ install(
201
+ FILES ${DATA_FILE}
202
+ DESTINATION ${PDLIBDIR}/${PROJECT_NAME}/${PD_DATAFILE_DESTINATION})
203
+ else()
204
+ install(FILES ${DATA_FILE} DESTINATION ${PDLIBDIR}/${PROJECT_NAME})
205
+ endif()
206
+ endif()
207
+ endforeach()
208
+
209
+ endfunction(pd_add_datafile)
210
+
211
+ # ──────────────────────────────────────
212
+ macro(pd_set_lib_ext OBJ_TARGET_NAME)
213
+ if(EMSCRIPTEN)
214
+ return()
215
+ endif()
216
+ if(PD_EXTENSION)
217
+ set_target_properties(${OBJ_TARGET_NAME} PROPERTIES SUFFIX
218
+ ".${PD_EXTENSION}")
219
+ else()
220
+ if(NOT (PD_FLOATSIZE EQUAL 64 OR PD_FLOATSIZE EQUAL 32))
221
+ message(FATAL_ERROR "PD_FLOATSIZE must be 32 or 64")
222
+ endif()
223
+
224
+ if(APPLE)
225
+ if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm64")
226
+ set(PD_EXTENSION ".darwin-arm64-${PD_FLOATSIZE}.so")
227
+ else()
228
+ set(PD_EXTENSION ".darwin-amd64-${PD_FLOATSIZE}.so")
229
+ endif()
230
+
231
+ elseif(UNIX)
232
+ if(CMAKE_SIZEOF_VOID_P EQUAL 4) # 32-bit
233
+ if(CMAKE_SYSTEM_PROCESSOR MATCHES "arm")
234
+ set(PD_EXTENSION ".linux-arm-${PD_FLOATSIZE}.so")
235
+ endif()
236
+ else()
237
+ if(CMAKE_SYSTEM_PROCESSOR MATCHES "aarch64")
238
+ set(PD_EXTENSION ".linux-arm64-${PD_FLOATSIZE}.so")
239
+ else()
240
+ set(PD_EXTENSION ".linux-amd64-${PD_FLOATSIZE}.so")
241
+ endif()
242
+ endif()
243
+ elseif(WIN32)
244
+ if(CMAKE_SIZEOF_VOID_P EQUAL 4)
245
+ set(PD_EXTENSION ".windows-i386-${PD_FLOATSIZE}.dll")
246
+ else()
247
+ set(PD_EXTENSION ".windows-amd64-${PD_FLOATSIZE}.dll")
248
+ endif()
249
+ endif()
250
+
251
+ if(NOT PD_EXTENSION)
252
+ message(
253
+ FATAL_ERROR
254
+ "Not possible to determine the extension of the library, please set PD_EXTENSION"
255
+ )
256
+ endif()
257
+ set_target_properties(${OBJ_TARGET_NAME} PROPERTIES SUFFIX ${PD_EXTENSION})
258
+ endif()
259
+ endmacro(pd_set_lib_ext)
260
+
261
+ # ──────────────────────────────────────
262
+ function(pd_add_external PD_EXTERNAL_NAME EXTERNAL_SOURCES)
263
+
264
+ set(BOOLEAN_ARGS) # No args for now
265
+ set(ONE_ARGS TARGET) # Define optional arg for TARGET
266
+ set(MULTI_ARGS CXX_FLAGS C_FLAGS LINK_LIBRARIES) # Define multi args,
267
+ # CXX_FLAGS C_FLAGS
268
+ cmake_parse_arguments(PD_EXTERNAL "${BOOLEAN_ARGS}" "${ONE_ARGS}"
269
+ "${MULTI_ARGS}" ${ARGN})
270
+
271
+ # Warning case external name contains ~ and TARGET IS NOT DEFINED
272
+ if(${PD_EXTERNAL_NAME} MATCHES "~$" AND "${PD_EXTERNAL_TARGET}" STREQUAL "")
273
+ string(REGEX REPLACE "~$" "_tilde" OBJ_TARGET_NAME ${PD_EXTERNAL_NAME})
274
+ if(${ENABLE_TILDE_TARGET_WARNING})
275
+ message(
276
+ WARNING "TARGET for the external ${PD_EXTERNAL_NAME} contains \"~\", "
277
+ "replacing with _tilde. Use TARGET keyword in pd_add_external "
278
+ "to define a custom target name.\n")
279
+ endif()
280
+ elseif(NOT ${PD_EXTERNAL_TARGET} STREQUAL "")
281
+ set(OBJ_TARGET_NAME ${PD_EXTERNAL_TARGET})
282
+ else()
283
+ set(OBJ_TARGET_NAME ${PD_EXTERNAL_NAME})
284
+ endif()
285
+
286
+ if(EMSCRIPTEN OR PD_BUILD_STATIC_OBJECTS)
287
+ add_library(${OBJ_TARGET_NAME} STATIC ${EXTERNAL_SOURCES})
288
+ set_target_properties(${OBJ_TARGET_NAME} PROPERTIES OUTPUT_NAME
289
+ ${PD_EXTERNAL_NAME})
290
+ set_property(GLOBAL APPEND PROPERTY ${PROJECT_NAME}_STATIC_LIBRARIES
291
+ ${OBJ_TARGET_NAME})
292
+ else()
293
+ add_library(${OBJ_TARGET_NAME} SHARED ${EXTERNAL_SOURCES})
294
+ set_target_properties(${OBJ_TARGET_NAME} PROPERTIES PREFIX "")
295
+ set_target_properties(${OBJ_TARGET_NAME} PROPERTIES OUTPUT_NAME
296
+ ${PD_EXTERNAL_NAME})
297
+ pd_set_lib_ext(${OBJ_TARGET_NAME})
298
+ get_property(
299
+ PD_EXTENSION
300
+ TARGET ${OBJ_TARGET_NAME}
301
+ PROPERTY SUFFIX)
302
+ endif()
303
+
304
+ # Check if CXX_FLAGS is defined, if true set the flags
305
+ if(DEFINED PD_EXTERNAL_CXX_FLAGS)
306
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${PD_EXTERNAL_CXX_FLAGS}")
307
+ endif()
308
+
309
+ # Check if C_FLAGS is defined, if true set the flags
310
+ if(DEFINED PD_EXTERNAL_C_FLAGS)
311
+ set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${PD_EXTERNAL_C_FLAGS}")
312
+ endif()
313
+
314
+ # Check if LINK_LIBRARIES is defined, if true set the flags
315
+ if(DEFINED PD_EXTERNAL_LINK_LIBRARIES)
316
+ target_link_libraries(${OBJ_TARGET_NAME}
317
+ PRIVATE ${PD_EXTERNAL_LINK_LIBRARIES})
318
+ endif()
319
+ target_include_directories(${OBJ_TARGET_NAME} PRIVATE ${PD_SOURCES_PATH}
320
+ )# Add Pd Includes
321
+ if(WIN32)
322
+ if(PD_FLOATSIZE EQUAL 64)
323
+ target_link_libraries(${OBJ_TARGET_NAME} PRIVATE "${PDBINDIR}/pd64.lib")
324
+ elseif(PD_FLOATSIZE EQUAL 32)
325
+ target_link_libraries(${OBJ_TARGET_NAME} PRIVATE "${PDBINDIR}/pd.lib")
326
+ endif()
327
+ elseif(APPLE)
328
+ set_target_properties(${OBJ_TARGET_NAME}
329
+ PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
330
+ endif()
331
+
332
+ if(WIN32)
333
+ if(PD_FLOATSIZE EQUAL 64)
334
+ target_link_libraries(${OBJ_TARGET_NAME} PRIVATE "${PDBINDIR}/pd64.lib")
335
+ elseif(PD_FLOATSIZE EQUAL 32)
336
+ target_link_libraries(${OBJ_TARGET_NAME} PRIVATE "${PDBINDIR}/pd.lib")
337
+ endif()
338
+ elseif(APPLE)
339
+ set_target_properties(${OBJ_TARGET_NAME}
340
+ PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
341
+ endif()
342
+
343
+ if(PD_FLOATSIZE STREQUAL 64)
344
+ target_compile_definitions(${OBJ_TARGET_NAME} PRIVATE PD_FLOATSIZE=64)
345
+ endif()
346
+
347
+ set_target_properties(${OBJ_TARGET_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
348
+ set_target_properties(${OBJ_TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
349
+ set_target_properties(${OBJ_TARGET_NAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR})
350
+ foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
351
+ string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG)
352
+ set_target_properties(${OBJ_TARGET_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_CURRENT_BINARY_DIR})
353
+ set_target_properties(${OBJ_TARGET_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_CURRENT_BINARY_DIR})
354
+ set_target_properties(${OBJ_TARGET_NAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG} ${CMAKE_CURRENT_BINARY_DIR})
355
+ endforeach(OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES)
356
+
357
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PD_EXTERNAL_NAME}${PD_EXTENSION}
358
+ DESTINATION ${PDLIBDIR}/${PROJECT_NAME})
359
+
360
+ if(WIN32 AND CMAKE_GENERATOR MATCHES "Visual Studio")
361
+ string(FIND ${PD_EXTERNAL_NAME} "." NAME_HAS_DOT)
362
+ string(FIND ${PD_EXTERNAL_NAME} "~" NAME_HAS_TILDE)
363
+ if(NAME_HAS_DOT EQUAL -1)
364
+ string(REPLACE "~" "_tilde" EXPORT_FUNCTION "${PD_EXTERNAL_NAME}_setup")
365
+ else()
366
+ string(REPLACE "." "0x2e" TEMP_NAME "${PD_EXTERNAL_NAMEs}")
367
+ string(REPLACE "~" "_tilde" EXPORT_FUNCTION "setup_${TEMP_NAME}")
368
+ endif()
369
+ set_property(TARGET ${OBJ_TARGET_NAME} APPEND_STRING PROPERTY LINK_FLAGS "/export:${EXPORT_FUNCTION}")
370
+ endif()
371
+
372
+ endfunction(pd_add_external)
373
+
374
+ # ──────────────────────────────────────
375
+ function(add_pd_external PROJECT_NAME EXTERNAL_NAME EXTERNAL_SOURCES)
376
+ message(
377
+ WARNING "add_pd_external is deprecated, use pd_add_external instead.\n")
378
+
379
+ set(ALL_SOURCES ${EXTERNAL_SOURCES})
380
+ list(APPEND ALL_SOURCES ${ARGN})
381
+ source_group(src FILES ${ALL_SOURCES})
382
+ add_library(${PROJECT_NAME} SHARED ${ALL_SOURCES})
383
+ set_target_properties(${PROJECT_NAME} PROPERTIES PREFIX "")
384
+ set_property(TARGET ${PROJECT_NAME} PROPERTY EXTERNAL_DATA_FILES "")
385
+
386
+ target_include_directories(${PROJECT_NAME} PRIVATE ${PD_SOURCES_PATH})
387
+ set_target_properties(${PROJECT_NAME} PROPERTIES OUTPUT_NAME ${EXTERNAL_NAME})
388
+
389
+ # Defines the output path of the external.
390
+ set_target_properties(${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY
391
+ ${CMAKE_BINARY_DIR})
392
+ set_target_properties(${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY
393
+ ${CMAKE_BINARY_DIR})
394
+ set_target_properties(${PROJECT_NAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY
395
+ ${CMAKE_BINARY_DIR})
396
+
397
+ foreach(OUTPUTCONFIG ${CMAKE_CONFIGURATION_TYPES})
398
+ string(TOUPPER ${OUTPUTCONFIG} OUTPUTCONFIG)
399
+ set_target_properties(
400
+ ${PROJECT_NAME} PROPERTIES LIBRARY_OUTPUT_DIRECTORY_${OUTPUTCONFIG}
401
+ ${CMAKE_BINARY_DIR})
402
+ set_target_properties(
403
+ ${PROJECT_NAME} PROPERTIES RUNTIME_OUTPUT_DIRECTORY_${OUTPUTCONFIG}
404
+ ${CMAKE_BINARY_DIR})
405
+ set_target_properties(
406
+ ${PROJECT_NAME} PROPERTIES ARCHIVE_OUTPUT_DIRECTORY_${OUTPUTCONFIG}
407
+ ${CMAKE_BINARY_DIR})
408
+ endforeach(OUTPUTCONFIG CMAKE_CONFIGURATION_TYPES)
409
+
410
+ if(WIN32)
411
+ if(PD_FLOATSIZE EQUAL 64)
412
+ target_link_libraries(${PROJECT_NAME} PRIVATE "${PDBINDIR}/pd64.lib")
413
+ elseif(PD_FLOATSIZE EQUAL 32)
414
+ target_link_libraries(${PROJECT_NAME} PRIVATE "${PDBINDIR}/pd.lib")
415
+ endif()
416
+ elseif(APPLE)
417
+ set_target_properties(${PROJECT_NAME}
418
+ PROPERTIES LINK_FLAGS "-undefined dynamic_lookup")
419
+ endif()
420
+
421
+ get_property(
422
+ PD_EXTENSION
423
+ TARGET ${PROJECT_NAME}
424
+ PROPERTY SUFFIX) # set extension
425
+
426
+ if(PD_FLOATSIZE STREQUAL 64)
427
+ target_compile_definitions(${PROJECT_NAME} PRIVATE PD_FLOATSIZE=64)
428
+ endif()
429
+
430
+ pd_set_lib_ext(${PROJECT_NAME})
431
+ pd_add_datafile(
432
+ ${PROJECT_NAME}
433
+ "${CMAKE_CURRENT_BINARY_DIR}/${PD_EXTERNAL_NAME}${PD_EXTENSION}")
434
+
435
+ endfunction(add_pd_external)
@@ -1,5 +1,10 @@
1
1
  // This is automatically generated code from pd4web.py script
2
2
 
3
+ // Pd4Web Version
4
+ #define PD4WEB_VERSION_MAJOR 2
5
+ #define PD4WEB_VERSION_MINOR 0
6
+ #define PD4WEB_VERSION_PATCH 3
7
+
3
8
  // Project Name
4
9
  #define PD4WEB_PROJECT_NAME "Test10"
5
10
 
@@ -2,7 +2,7 @@ import os
2
2
  import re
3
3
  import shutil
4
4
  import subprocess
5
- import pygit2
5
+ import importlib.metadata as importlib_metadata
6
6
 
7
7
  from .Helpers import pd4web_print
8
8
  from .Patch import PatchLine
@@ -296,6 +296,16 @@ class GetAndBuildExternals:
296
296
 
297
297
  f.write("// This is automatically generated code from pd4web.py script\n\n")
298
298
 
299
+ pd4web_version = importlib_metadata.version("pd4web")
300
+ numbers = pd4web_version.split(".")
301
+ major = numbers[0]
302
+ minor = numbers[1]
303
+ patch = numbers[2]
304
+ f.write(f"// Pd4Web Version\n")
305
+ f.write(f"#define PD4WEB_VERSION_MAJOR {major}\n")
306
+ f.write(f"#define PD4WEB_VERSION_MINOR {minor}\n")
307
+ f.write(f"#define PD4WEB_VERSION_PATCH {patch}\n\n")
308
+
299
309
  f.write(f"// Project Name\n")
300
310
  projectName = os.path.basename(self.Pd4Web.PROJECT_ROOT)
301
311
  f.write(f'#define PD4WEB_PROJECT_NAME "{projectName}"\n\n')
@@ -356,6 +366,7 @@ class GetAndBuildExternals:
356
366
  os.chdir(self.Pd4Web.PROJECT_ROOT)
357
367
  emcmake = self.Pd4Web.Compiler.EMCMAKE
358
368
  cmake = self.Pd4Web.Compiler.CMAKE
369
+ ninja = self.Pd4Web.Compiler.NINJA
359
370
  command = [
360
371
  emcmake,
361
372
  cmake,
@@ -366,6 +377,8 @@ class GetAndBuildExternals:
366
377
  "-DPD4WEB=ON",
367
378
  "-G",
368
379
  "Ninja",
380
+ f"-DCMAKE_MAKE_PROGRAM={ninja}",
381
+
369
382
  ]
370
383
  if self.Pd4Web.verbose:
371
384
  pd4web_print(" ".join(command), color="green", silence=self.Pd4Web.SILENCE, pd4web=self.Pd4Web.PD_EXTERNAL)
@@ -0,0 +1,97 @@
1
+ import os
2
+ import platform
3
+ import cmake
4
+ import ninja
5
+ import subprocess
6
+ import tarfile
7
+
8
+ import pygit2
9
+
10
+ from .Helpers import pd4web_print
11
+ from .Pd4Web import Pd4Web
12
+
13
+
14
+ class ExternalsCompiler:
15
+ def __init__(self, Pd4Web: Pd4Web):
16
+ self.Pd4Web = Pd4Web
17
+ self.InitVariables()
18
+
19
+ if not os.path.exists(Pd4Web.APPDATA + "/emsdk"):
20
+ pd4web_print("Cloning emsdk", color="yellow", silence=self.Pd4Web.SILENCE, pd4web=self.Pd4Web.PD_EXTERNAL)
21
+ emsdk_path = Pd4Web.APPDATA + "/emsdk"
22
+ emsdk_git = "https://github.com/emscripten-core/emsdk"
23
+ ok = pygit2.clone_repository(emsdk_git, emsdk_path)
24
+ if not ok:
25
+ raise Exception("Failed to clone emsdk")
26
+ libRepo: pygit2.Repository = pygit2.Repository(emsdk_path)
27
+ tag_name = Pd4Web.EMSDK_VERSION
28
+
29
+ # commit
30
+ tag_ref = libRepo.references.get(f"refs/tags/{tag_name}")
31
+ if isinstance(tag_ref.peel(), pygit2.Tag):
32
+ commit = tag_ref.peel().target
33
+ else:
34
+ commit = tag_ref.peel()
35
+ libRepo.set_head(commit.id)
36
+ libRepo.checkout_tree(commit)
37
+ libRepo.reset(commit.id, pygit2.GIT_RESET_HARD)
38
+ self.InstallEMCC()
39
+
40
+ def InitVariables(self):
41
+ self.EMSDK = self.Pd4Web.APPDATA + "/emsdk/emsdk"
42
+ if platform.system() == "Windows":
43
+ self.EMCMAKE = self.Pd4Web.APPDATA + "/emsdk/upstream/emscripten/emcmake.bat"
44
+ else:
45
+ self.EMCMAKE = self.Pd4Web.APPDATA + "/emsdk/upstream/emscripten/emcmake"
46
+ self.CMAKE = self.GetCmake()
47
+ self.EMCC = self.Pd4Web.APPDATA + "/emsdk/upstream/emscripten/emcc"
48
+ self.NINJA = ninja.BIN_DIR + "/ninja"
49
+ if platform.system() == "Windows":
50
+ self.NINJA += ".exe"
51
+ self.EMCC += ".bat"
52
+
53
+ def GetCmake(self):
54
+ cmake_dir = cmake.CMAKE_BIN_DIR
55
+ cmake_bin = os.path.join(cmake_dir, "cmake")
56
+ if platform.system() == "Windows":
57
+ cmake_bin += ".exe"
58
+ if not os.path.exists(cmake_bin):
59
+ raise Exception("Cmake (module) is not installed. Please install it.")
60
+ return cmake_bin
61
+
62
+ def InstallEMCC(self):
63
+ pd4web_print("Installing emcc", color="yellow", silence=self.Pd4Web.SILENCE, pd4web=self.Pd4Web.PD_EXTERNAL)
64
+ if platform.system() == "Windows":
65
+ os.system(f"cmd /C {self.EMSDK} install latest")
66
+ os.system(f"cmd /C {self.EMSDK} activate latest")
67
+ return
68
+
69
+ elif platform.system() == "Linux":
70
+ pass
71
+
72
+ os.environ["EMSDK_QUIET"] = "1"
73
+ result = subprocess.run(["chmod", "+x", self.EMSDK], capture_output=not self.Pd4Web.verbose, text=True)
74
+ if result.returncode != 0:
75
+ raise Exception("Failed to make emsdk executable")
76
+
77
+ # ──────────────────────────────────────
78
+ result = subprocess.run(
79
+ [self.EMSDK, "install", "latest"],
80
+ capture_output=not self.Pd4Web.verbose,
81
+ text=True,
82
+ )
83
+ if result.returncode != 0:
84
+ raise Exception(f"Failed to install emsdk, result {result.returncode}, cmd: " + " ".join(result.args))
85
+
86
+ # ──────────────────────────────────────
87
+ result = subprocess.run(
88
+ [self.EMSDK, "activate", self.Pd4Web.EMSDK_VERSION], capture_output=not self.Pd4Web.verbose, text=True
89
+ )
90
+ if result.returncode != 0:
91
+ raise Exception(f"Failed to install emsdk, result {result.returncode}, cmd: " + " ".join(result.args))
92
+
93
+ def __str__(self):
94
+ return "< Compiler >"
95
+
96
+ def __repr__(self):
97
+ return "< Compiler >"
@@ -1,7 +1,6 @@
1
1
  import os
2
2
  import zipfile
3
3
 
4
- from pygit2.repository import Repository
5
4
  import requests
6
5
  import yaml
7
6
  import pygit2