Compare commits

..
886 Commits
Author SHA1 Message Date
Clifford Yapp 0bf111e741 re2c has ext submodule, don't fail fataly w/ local sources 2026-10-13 11:02:23 -04:00
Clifford Yapp 42d8d7ca57 Bake logic for redirecting git URLs into CMake
If we need to use some source other than github.com for our bext
repositories, historically the user had to manually set up the
remappings to make that work.

This commit adds support for a BEXT_REPOSITORY_ROOT CMake variable that
will handle the necessary redirects automatically.
2026-10-10 10:50:17 -04:00
Clifford Yapp 5ccf9b577d Patch IWidgets to avoid a conflict with Tk 2026-10-06 00:54:29 -04:00
Clifford Yapp cfe7b808cf Get plief update 2026-10-05 21:26:15 +00:00
Clifford Yapp f8245e0bb3 See where we stand with macos-15 2026-10-04 13:21:51 -04:00
Christopher Sean Morrison 0682795bcf always build strclear optimized since it's for our builds, and needs to be fast 2026-09-24 12:29:42 -04:00
Christopher Sean Morrison 6d97793557 preserve the compilers we set for nested configures, avoid abi incompat. 2026-09-24 12:28:41 -04:00
Christopher Sean Morrison bbf604b69f ospray superbuild says oidn Debug build on msvc is broken, so accommodate.
should revisit whether it's actually still busted at some point.
2026-09-24 12:27:41 -04:00
Clifford Yapp 31a13bc8d3 Move specialized Xmin discussion to separate file 2026-09-17 10:42:08 -04:00
Clifford Yapp 76e1dbdb3a Correct expat CMakeLists.txt location 2026-09-17 10:33:40 -04:00
Clifford Yapp 12115e6c59 Look for CMakeLists.txt in subdirectory 2026-09-17 06:50:02 -04:00
Clifford Yapp 1c7c8af7d0 Preserve timestamps for unchanged installed files
Avoid rewriting identical installed files during Tcl, Tk, and general
bext installs. Remove the unconditional build stamp so no-op builds do
not trigger a dependent BRL-CAD reconfigure.
2026-09-16 18:39:14 +00:00
Clifford Yapp fe3b288e65 Stabilize Tcl, Tk, and Itk builds across platforms
Initialize MSVC build environments reliably and keep Git Bash's link
utility from shadowing the MSVC linker. Route dependency patches
through a portable wrapper, normalize patch paths and line endings,
and split Tcl/Tk patches by platform.

Harden Windows Tcl package builds, install the complete Itk runtime
library, and keep repeated zlib patch steps idempotent.
2026-09-16 18:39:14 +00:00
Clifford Yapp 84a51b3601 Build the Tcl GUI stack with Itcl and Itk 4
Use Itcl 4.3.7 from Tcl's complete source distribution in place of the
separate Itcl 3 project and copied private headers. Build Itk 4.2.7
against matching Tcl, Tk, and Itcl sources, and adapt Iwidgets 4.1.1
for Itcl 4.

Require Itcl 4.3 and Itk 4.2.3 when selecting a system stack. Link
tclsh with a relocatable runtime search path and use BRL-CAD's Itk
mirror.
2026-09-16 18:39:14 +00:00
Clifford Yapp 05611e687e Upgrade Tcl and Tk source distributions to 8.6.18
Advance the full-source mirrors to the final Tcl/Tk 8.6 release. Refresh
the downstream source patches and add a wrapper for applying patches to
staged external projects.
2026-09-16 18:39:14 +00:00
Clifford Yapp 78421c1ecc Enable long pathnames on Windows 2026-09-16 14:30:08 -04:00
Clifford Yapp da3a1e98fd Break out eigen patch topics
(cherry picked from commit 45e24bc30669b64cfee6ceea20705f41001d9ffb)
2026-09-15 19:01:56 -04:00
Clifford Yapp 028c2e3c0a Support compact ELF PHDR relocation in LIEF
Some linkers may emit a compact non-PIE executable with both a
RELRO-backed BSS-like LOAD and a final data/BSS LOAD.  LIEF BSS_END
relocation rejected such valid binaries because it required exactly
one BSS-like segment.

Select the final LOAD using both file and virtual ordering and
require only that segment to be BSS-like.  Also constrain SEGMENT_GAP
growth by the smaller file and virtual gaps so a rewritten LOAD
cannot overlap its neighbor.  Backport the upstream PT_PHDR-size
correction so the relocated header segment describes its reserved
mapping.

This permits RPATH growth in Tcl 8.6 launchers and leaves them
executable after both BSS_END relocation and a later SEGMENT_GAP
relocation.
2026-09-14 22:32:55 -04:00
Clifford Yapp fa74b75c10 Prevent failed plief writes from corrupting binaries
Update plief to write, parse, and verify ELF changes in a temporary
file before replacing the input.  This keeps staged executables intact
when LIEF cannot grow their dynamic string table for a longer RUNPATH.
2026-09-14 22:32:46 -04:00
Clifford Yapp 51ab96ae0d Add an Xmin-backed Tk and Qt build profile
Xmin is the minimal X11/OpenGL compatibility SDK from
https://github.com/starseeker/Xmin

Allow bundled Tk and Qt to use Xmin's minimal X11 client and
software-direct OpenGL interfaces instead of host X11 and OpenGL
libraries. This provides a coherent, relocatable GUI toolkit stack
that does not silently acquire dependencies from the build host.

Select the profile with BEXT_XMIN_ROOT without changing which packages
are otherwise enabled. Patch Tk to use the Xmin client facade and
embedded fonts, and patch Qt's qxcb desktop-OpenGL path to consume the
SDK's imported targets.

Stage patched sources separately and invalidate generated state when
the profile or patch inputs change. Preserve Xmin in installed Qt
metadata. Audit built and installed libraries to reject unresolved
dependencies or accidental linkage to host X11, XCB, or OpenGL
libraries. Leave normal system discovery unchanged when the profile
is disabled.
2026-09-14 22:32:22 -04:00
Clifford Yapp 82945d86be Update lief patch for Apple's patch command
The pinned LIEF 1.0.0 source changed line 4 from enable_language(C) to
set_property(GLOBAL PROPERTY USE_FOLDERS ON), but
lief/lief_cmake.patch:1 retained the old context. GNU patch applies it
with fuzz, explaining Linux success.  Apple’s patch 2.0-12u11 anchors
start-of-file hunks and rejects that mismatch, producing the failure at
osx_failure.txt:1115. This behavior is explicit in Apple’s patch
implementation:

https://github.com/apple-oss-distributions/patch_cmds/blob/patch_cmds-45.120.3/patch/patch.c#L1539-L1557
2026-09-14 06:45:03 -04:00
Clifford Yapp d71febe142 Looking like problem was more with our patch file - remove sb_patch.patch 2026-09-14 06:43:37 -04:00
Clifford Yapp fe4d95add4 Hit an issue with sb_patch - adjust patch file and correct sb_patch. (Need to submit the latter upstream) 2026-09-10 18:15:03 +00:00
Clifford Yapp 102f97cb07 Permit legacy double accessors in permissive mode
Keep strict parsing compliant with glTF 2.0 while allowing permissive readers to recover files containing the historical non-standard DOUBLE component type. Add coverage for both modes.
2026-09-10 16:53:49 +00:00
Clifford Yapp 10e3a01fce TinyGLTF v3 was a major change - make some adjustments to better set it up for BRL-CAD use. 2026-09-10 15:59:30 +00:00
Clifford Yapp b37d4565d1 Make a stab at producing consumable binary artifacts for BRL-CAD builds. 2026-09-10 15:59:30 +00:00
Clifford Yapp 921f0045a2 Fix GTE patch 2026-09-10 15:59:30 +00:00
Clifford Yapp c5d91b13a1 Match latest upstream sb patch 2026-09-10 11:54:41 -04:00
Clifford Yapp d73b1762a9 Update stepcode sha1 to latest 2026-09-10 13:58:02 +00:00
Clifford Yapp f6d3f346d8 Backport upstream fix for major/minor macros 2026-09-10 13:46:46 +00:00
Clifford Yapp 9788dcf2a6 Add bigobj for Eigen debug building on MSVC 2026-09-10 13:33:06 +00:00
Clifford Yapp 116746de32 Remove some more branch=RELEASE markers where we're switching to using tags 2026-09-09 15:55:50 -04:00
Clifford Yapp 990f4c3639 Update to osmesa upstream sha1 bfa90de 2026-09-09 15:52:29 -04:00
Clifford Yapp f26c88f95b Update opennurbs to v8.34.26223.11001 2026-09-09 15:50:32 -04:00
Clifford Yapp 8307051b6a Update manifold patching for v3.5.3 2026-09-09 19:50:07 +00:00
Clifford Yapp 6aa9c192ed Update Manifold to v3.5.3 tag 2026-09-09 15:07:30 -04:00
Clifford Yapp 0995755d56 Remove xmltools 2026-09-09 15:04:37 -04:00
Clifford Yapp 333b86b81c Update PoissonRecon to v18.75 2026-09-09 13:46:30 -04:00
Clifford Yapp 4adc14081a Update GeometricTools to v8.2 tag 2026-09-09 13:42:21 -04:00
Clifford Yapp 7c25d80e2b Update Clipper2 to v1.5.4 2026-09-09 13:30:42 -04:00
Clifford Yapp 159e6213df Update OpenCV to v5.0.0 2026-09-09 13:25:22 -04:00
Clifford Yapp fd118bd1cf Update to pugixml v1.16 2026-09-09 12:57:19 -04:00
Clifford Yapp 8ac868da8b Update to tinygltf v3.0.1 2026-09-09 12:52:05 -04:00
Clifford Yapp 3b88d2086f Update GDAL to v3.13.3 2026-09-09 12:39:40 -04:00
Clifford Yapp 9b7024becb Update to PROJ v9.8.1 2026-09-09 11:59:14 -04:00
Clifford Yapp b0f9221dca Update to sqlite3 v3.53.4 2026-09-09 11:56:23 -04:00
Clifford Yapp d854219aa9 Switching to using tags rather than RELEASE branch for most cases 2026-09-09 11:54:11 -04:00
Clifford Yapp 056188d31e Update to oneTBB v2023.1.0 2026-09-09 11:47:56 -04:00
Clifford Yapp b466277ae9 Update Eigen to v5.0.1 2026-09-09 11:44:00 -04:00
Clifford Yapp 8c63fe7dcd Update LMDB to v1.0.1 2026-09-09 11:30:17 -04:00
Clifford Yapp 4d8cc8d980 Update to libtiff v4.7.2 2026-09-09 11:27:27 -04:00
Clifford Yapp 9a909d5e9d Update libpng to v1.6.58 2026-09-09 11:23:28 -04:00
Clifford Yapp 6bc1e3c838 Update libjpeg-turbo to v3.2.0 2026-09-09 11:21:22 -04:00
Clifford Yapp a0d2801f64 Update zlib to v1.3.2 2026-09-09 15:12:08 +00:00
Clifford Yapp ac076a890d Update to netpbm v10.86.50 2026-09-09 11:08:08 -04:00
Clifford Yapp f89ea26a1b Been using plief for a while - remove patchelf fallback 2026-09-09 10:05:01 -04:00
Clifford Yapp be80be1a24 Update LIEF to upstream tag v1.0.0 2026-09-09 10:03:24 -04:00
Clifford Yapp 0c0db6e986 Remove xmltools (we've switched off of docbook) 2026-09-09 09:56:10 -04:00
Clifford Yapp 4fca55f381 Update re2c to v4.6 2026-09-09 09:50:17 -04:00
Clifford Yapp c8f3497730 Update astyle to upstream tag v3.6.18 2026-09-09 09:26:08 -04:00
Clifford Yapp 7686500d1a Adjust Manifold handling of allocation failures
Release-mode allocation checks now throw std::bad_alloc, guard
byte-count overflow, and preserve storage ownership during failed
copies. Empty copy assignment also no longer leaves a dangling
allocation.
2026-09-06 00:31:41 -04:00
Clifford Yapp b9cebb4453 Add openvdb to DEPENDENCIES.md 2026-09-02 10:33:38 -04:00
Christopher Sean Morrison 679eb6fcd9 pass ZLIB_INCLUDE_DIR and ZLIB_LIBRARY forward so a system doesn't override ours 2026-09-01 07:58:03 -04:00
Christopher Sean Morrison 21ae7bea54 we need to find our zlib 2026-09-01 01:36:04 -04:00
Christopher Sean Morrison 0f6d38ec1a needs zlib 2026-09-01 01:36:04 -04:00
Christopher Sean Morrison 97d28467b8 switch from v13.0.0 tag to master since it's out of date with our tbb otherwise 2026-09-01 01:36:04 -04:00
Christopher Sean Morrison baddbbded1 enable openvdb for all the good things coming 2026-09-01 01:36:04 -04:00
Clifford Yapp 2db0665299 Get mmesh math fix 2026-08-31 19:24:41 +00:00
Clifford Yapp 82880179d2 Update DEPENDENCIES.md 2026-08-27 12:35:15 -04:00
Clifford Yapp e688399906 Tcl uses zlib and libpng 2026-08-26 19:20:12 +00:00
Clifford Yapp 462c1aa715 Adjust check for PLIEF being set 2026-08-25 14:02:25 +00:00
Clifford Yapp c5c2de9507 Add a finalization step to prepare bext for use by the BRL-CAD configure process
This is done to avoid every cold BRL-CAD configure staging process needing
to repeat the same (expensive) characterization and setup work.  Now it should
only need to do the parts specific to that build location.
2026-08-24 21:36:41 +00:00
Clifford Yapp 5771519119 Whoops - if manifold is libbg component enabled, clipper2 needs to be as well. 2026-08-21 12:04:47 -04:00
Clifford Yapp 99b39937c4 Add libbg to manifold components list 2026-08-21 09:47:31 -04:00
Clifford Yapp 6890172ba2 OpenNURBS wasn't handling some memory failures gracefully - need clean returns. 2026-08-21 08:16:20 -04:00
Christopher Sean Morrison 0f1eac972c turn off clang introspection tools 2026-08-16 00:00:04 -04:00
Christopher Sean Morrison 0d1da2084a move llvm about 20 deps earlier.
basically as early as possible so it's build can overlap with the other deps being compiled.  it needs zlib, which needs patch (and maybe m4/flex/bison).  this should cut the everything build down by 10-25%.
2026-08-15 23:25:23 -04:00
Christopher Sean Morrison bd388e91cf add a patch to skip runnning cat on windows, build failure 2026-08-12 13:33:35 -04:00
Christopher Sean Morrison dc99a85999 malformed, patch lines counts were off 2 2026-08-11 15:16:11 -04:00
Clifford Yapp f73f4a914a More Windows long string fixes 2026-08-07 19:18:17 +00:00
Clifford Yapp 29a10adaff Update stepcode to latest 2026-08-07 13:51:45 -04:00
Clifford Yapp d7bf07d0e6 Patches for stepcode + Clang 2026-08-07 14:47:35 +00:00
Clifford Yapp ad7aca815a oneTBB FreeBSD build adjustment 2026-08-06 14:58:25 +00:00
Clifford Yapp fda4fe0f17 Adjustments to OpenNURBS building 2026-08-06 14:22:02 +00:00
Christopher Sean Morrison 6f5ad5b668 expand the patch to mac builds also since latest libc++ there also needs it 2026-08-05 00:14:35 -04:00
Clifford Yapp 195dc3e24d Updates to support new stepcode converter
Extensive reworking of step conversion requires stepcode changes -
update upstream
2026-08-04 09:48:49 -04:00
Clifford Yapp d35d0152f8 Add a couple validity checking logic corrections for opennurbs that fell out of the step converter work. 2026-08-04 09:48:33 -04:00
Christopher Sean Morrison 5801e9f9e6 set USE_LLVM_BITCODE=OFF. our bundled llvm is too far out of date with the latest compilers. 2026-08-02 01:05:03 -04:00
Christopher Sean Morrison 006e9db355 latest mac llvm is just as incompatible as latest msvc 2026-08-02 01:02:50 -04:00
Clifford Yapp 8eae2d40eb Update DEPENDENCIES.md 2026-07-27 07:57:55 -04:00
Christopher Sean Morrison baf3038cd1 needs to be the module to work with cmake_find_package_prefer_config 2026-07-25 10:34:15 -04:00
Christopher Sean Morrison 52011c5dcf propagate our openexr setting 2026-07-25 10:10:05 -04:00
Christopher Sean Morrison 39b9138854 osl requires openexr 2026-07-25 10:09:23 -04:00
Christopher Sean Morrison ae9d550713 strip the m4 windows hack 2026-07-24 15:59:47 -04:00
Christopher Sean Morrison 4f151ba7f3 oops, this was windows specific debugging, pull it up and block it off 2026-07-24 13:49:20 -04:00
Christopher Sean Morrison 3f5aeef137 our llvm has fallen behind, so osl fails.
we need to make sure the llvm osl is compiling against (our old one) is compiler/header-compatible with the system SDK and STL headers, which means either user manually specifying CMAKE_OSX_SYSROOT during cmake or reporting early fatal error when SDK is too new.

basically, we need to upgrade our llvm/osl/etc stack but this keeps us working.
2026-07-24 13:43:46 -04:00
Clifford Yapp 4dd532a1f4 Stash some work on getting OpenVDB going in a bext building context. 2026-07-24 13:21:43 -04:00
Clifford Yapp 87a9e4a361 Revert "Put strclear and plief back to older versions"
Put back the newer versions to prepare for CMake updates
in BRL-CAD

This reverts commit a16b4a6baf.
2026-07-23 16:53:55 -04:00
Christopher Sean Morrison f1bfca24ab we want oidn turned on 2026-07-23 15:45:28 -04:00
Christopher Sean Morrison 55c6b66ff4 add oidn to OSPRAY group 2026-07-23 15:45:27 -04:00
Christopher Sean Morrison 799bec628e add open image denoising (oidn) 2026-07-23 15:45:27 -04:00
Christopher Sean Morrison f50169703c finally fixed the memory corruption on windows, and update OSL colorspace.
appleseed was doing an alligned alloc inside the DLL but that meant we'd end up with new/delete mismatches (particularly with STL but really anything that allocates) when appleseed is embedded or calls into a plugin (like our BRL-CAD plugin).  this was particularly challenging for any data passing in/out of the dll, so workaround here is to stick with standard malloc/free.
2026-07-23 15:45:27 -04:00
Christopher Sean Morrison f5b44b800b appears to be a genuine typo, unclear how it worked anywhere 2026-07-23 09:18:12 -04:00
Christopher Sean Morrison 2b7b512d91 two headers missing, fails latest compiler 2026-07-22 19:20:32 -04:00
Christopher Sean Morrison 74a62e770f make sure we don't traverse in for examples also 2026-07-22 19:19:57 -04:00
Christopher Sean Morrison b54c4d94c9 only add the dependentloadflag option when not debug build 2026-07-22 19:18:25 -04:00
Christopher Sean Morrison f388808dd5 turn off tools and examples also 2026-07-22 17:30:39 -04:00
Clifford Yapp 12f7d5669e Revert "ap214 conversion work wants a patch to opennurbs trim checking"
Backing this out for now - previous commit was to stash it for later
evaluation.

This reverts commit 56e1306436.
2026-07-20 20:12:39 -04:00
Clifford Yapp 56e1306436 ap214 conversion work wants a patch to opennurbs trim checking 2026-07-20 20:12:17 -04:00
Clifford Yapp 1d8e8de021 Bump patch to version with latest upstream fixes 2026-07-20 09:51:28 -04:00
Clifford Yapp 0cbda94442 Back out the ap214 patching for now
Not compiling on Windows - we can put this back and sort out the issues after
release.
2026-07-20 09:43:55 -04:00
Clifford Yapp 19777317de Revert patch update from "Adjust stepcode patches for shannonbooth patch"
This partially reverts commit 79b68d9c8c.

Apparently latest fails in CI environment for some reason...
2026-07-20 00:31:31 -04:00
Clifford Yapp 79b68d9c8c Adjust stepcode patches for shannonbooth patch
Hit a bug in the shannonbooth path implementation - git formatted
patches take a different write path, which doesn't handle newline output
quite right.

Ironically, patch is the one tool in bext that would be hard to patch.
Adjust stepcode patch files.  Update the patch submodule while we're at
it - that doesn't fix the issue (needs a PR to upstream) but in the
meantime this will hopefully work around the limitation
2026-07-20 00:16:43 -04:00
Clifford Yapp fb01cf5ec0 Whoops - don't delete our own working directory 2026-07-19 21:06:06 -04:00
Clifford Yapp b60279fce4 Fix STEPcode patching, make qt build more robust
Was missing one stepcode patch, and hit an issue where a stale Qt build
was messing with a new build.  Make some adjustments to the CMake logic
to try and be more resilient.
2026-07-19 19:58:31 -04:00
Clifford Yapp f6c1e219f4 More stepcode patches for converter work 2026-07-19 00:20:23 -04:00
Clifford Yapp 2aceec95cc Add STEPcode lazy importer support
When Codex GPT 5.6 was working on AP214 import, it wanted some stepcode
changes.  For now stashing as patches - will need to upstream this
later.
2026-07-18 19:44:35 -04:00
Christopher Sean Morrison 4e4f85a5f5 in debug mode on windows. llvm exe linker flags emit options with a space and quoting fails.
if we wrap the entire arg in quotes, cmake doesn't choke up.
2026-07-16 21:23:52 -04:00
Christopher Sean Morrison 219f68c626 update presets to put the build type in subdirs.
this helps keep compatibility straight on windows.
2026-07-16 17:25:54 -04:00
Clifford Yapp 374a5d4b72 Fixes for building on FreeBSD 2026-07-15 16:49:03 +00:00
Clifford Yapp 54051990cd Get updated Qt 6.11.1 .cmake.conf files 2026-07-15 13:01:58 -04:00
Christopher Sean Morrison ff76b235c7 fix bison build on latest mac. update that just landed now provides a function that it didn't before (posix_spawn_file_actions_addchdir). so we tell configure that we have it. 2026-07-15 00:36:55 -04:00
Christopher Sean Morrison c565aa23d4 boost continues to be a pita, and undoubtedly more work needed here, but this gets us fully going on windows again. needed to force vc145 with vs2026 (which means probably no good for 2022/2019 now) because boost header awareness only goes to 143. also needed to poke OSL for config mode builds. 2026-07-14 18:03:49 -04:00
Christopher Sean Morrison 7d0e799891 we need to pass OSL tools all the way through to the subbuild or it has trouble 2026-07-14 18:03:49 -04:00
Christopher Sean Morrison d9f12abc00 drop the EXACT keyword on ospray's find of rkcommon so it'll use our newer version 2026-07-14 18:03:49 -04:00
Christopher Sean Morrison 13e04ce769 since we can't import dynamic, turn on static 2026-07-14 18:03:49 -04:00
Christopher Sean Morrison b43c55bd16 this one was crazy obscure and hard to find. windows outputs z_brl-static which we weren't looking for. this resulted in ispc-slim runtime failures as it tried to load among other woes. 2026-07-14 18:03:48 -04:00
Clifford Yapp fa85fcbe8e Update Qt to 6.11.2 2026-07-14 11:50:24 -04:00
Clifford Yapp a16b4a6baf Put strclear and plief back to older versions
New versions are optimized for the newer cmakeupdate parallelized
workflow and appear to be slower with the current BRL-CAD CMake
setup.  We'll put the new versions back when we drop the BRL-CAD
CMake updates.

This reverts commit 5cec0988eb.
and 5fbd44a9b0.
2026-07-14 10:40:17 -04:00
Christopher Sean Morrison 364b6b4ee2 ditto, provide the right name 2026-07-13 19:04:06 -04:00
Christopher Sean Morrison 4ca1f79ab9 make them symmetric even if it doesn't build bison 2026-07-13 19:04:06 -04:00
Christopher Sean Morrison 6709a5e275 can't assume name is flex. it's win_flex on windows. probably a better way than this. 2026-07-13 19:04:06 -04:00
Christopher Sean Morrison 62dd245aed normalize to forward slashes for windows 2026-07-13 19:04:05 -04:00
Christopher Sean Morrison 86895dcdbd if we have m4, pass it through to ispc 2026-07-13 19:04:05 -04:00
Erik Greenwald 6efe6ecbcf set minimum cmake to 3.26, required for -- passthrough without triggering -i wizard error 2026-07-13 15:01:40 -04:00
Christopher Sean Morrison 8621d937c2 another windows fix, apparently rkcommon doesn't respect TBB_ROOT -- it wants its own RKCOMMON_TBB_ROOT to be set. setting both just in case the find logic is inconsistent 2026-07-13 14:37:27 -04:00
Christopher Sean Morrison 7e35512c44 try harder to ensure openexr and imath are passed forward 2026-07-13 01:39:14 -04:00
Christopher Sean Morrison 7ebceffe79 update table with a stub so it can replace the table automatically. we lost the short descriptions, but hopefully can find a way to restore them 2026-07-11 02:10:43 -04:00
Christopher Sean Morrison c57c062f25 add generation of deps and sbom to testing 2026-07-11 02:07:36 -04:00
Christopher Sean Morrison 5f02a06a27 missing LICENSE file for tinygltf 2026-07-11 02:05:29 -04:00
Christopher Sean Morrison 2af8cce2bb add some additional commands and targets to generate sbom and updated DEPENDENCIES.md 2026-07-11 02:04:13 -04:00
Christopher Sean Morrison 5f9560441f automatically generate DEPENDENCIES.md but still try to be as general as possible. 2026-07-11 02:00:29 -04:00
Christopher Sean Morrison 6e6a6175fd pull dep data from the tree and build files for reuse 2026-07-11 01:57:39 -04:00
Christopher Sean Morrison c0c4c2f4d0 add logic for generating an spdx sbom automatically 2026-07-11 01:55:50 -04:00
Christopher Sean Morrison a48ae4bc4e skip makeinfo, we don't need their docs 2026-07-11 00:02:29 -04:00
Christopher Sean Morrison 98be15e700 yup, wrong target name. it's ONETBB_TARGET and explains the windows failure. also set CMAKE_FIND_PACKAGE_PREFER_CONFIG. 2026-07-11 00:01:54 -04:00
Christopher Sean Morrison 0f52b9f48a leave comment for future me on SOURCE_DIR vs URL 2026-07-10 11:01:09 -04:00
Christopher Sean Morrison 05e442e141 make sure we use our flex/bison when we build it 2026-07-10 10:59:38 -04:00
Christopher Sean Morrison c6388d2a70 looks like overreach, just the ones that kick off regen 2026-07-10 10:59:38 -04:00
Christopher Sean Morrison e5775f675f no longer using the template 2026-07-10 10:59:38 -04:00
Christopher Sean Morrison 9f301944c2 generate bext.dot automatically, and make sure flex/bison are on 2026-07-10 10:59:38 -04:00
Christopher Sean Morrison 122ba04a96 no longer needs to manually build the bext.dot as a side effect 2026-07-10 10:59:38 -04:00
Christopher Sean Morrison 10ce6a2a8f notes bext.dot is generated along with the renderings 2026-07-10 10:59:38 -04:00
Christopher Sean Morrison 3b55bceffc these quotes continue to be a hassle 2026-07-10 10:59:38 -04:00
Christopher Sean Morrison c116241190 new logic to automatically generate the .dot entirely, without a header template. only bit baked in is a top BRL-CAD node. 2026-07-10 10:59:38 -04:00
Christopher Sean Morrison 84d6e8c641 touch more files to ensure autogen isn't needed 2026-07-10 10:59:38 -04:00
Christopher Sean Morrison 50ca670e0d more streamlining 2026-07-10 10:59:38 -04:00
Christopher Sean Morrison f75541f5a6 some additional flags for build efficiency 2026-07-10 10:59:38 -04:00
Clifford Yapp e6f2e2a2a8 Remove no-longer-needed Find modules 2026-07-10 09:30:09 -04:00
Christopher Sean Morrison 01f26ed978 maybe belongs in a separate file, but override ExternalProject_Add() to inject a CMAKE_POLICY_VERSION_MINIUMUM globally across all submodules. fixes msvc configure errors with latest cmake 4+. args should be all precisely preserved. 2026-07-07 14:42:35 -04:00
Christopher Sean Morrison 119ca0197e turn off path hardening so the existing logic finds nmakehlp.exe 2026-07-07 14:39:34 -04:00
Christopher Sean Morrison 9ac8d7c62d ispc fails on windows with the bundled llvm and latest studio because latest studio needs one even newer than ours. this makes it use msvc's instead of ours on windows (and fixes .exe suffix) 2026-07-07 14:38:27 -04:00
Clifford Yapp 5cec0988eb Update strclear sha1 2026-07-01 14:27:24 -04:00
Clifford Yapp d0c83bb5fc Update LIEF to 0.17.6 2026-07-01 09:37:18 -04:00
Clifford Yapp 5fbd44a9b0 Update plief and strclear tools 2026-06-30 23:24:46 -04:00
Clifford Yapp 99b7124ed1 First cut at an improved FindZLIB.cmake
The default FindZLIB.cmake doesn't appear to define targets for the
shared and static libraries separately.  See if we can improve the
situation.  (This is only the FindZLIB.cmake file itself - no caller
updates have been made yet.)
2026-06-29 19:37:05 -04:00
Christopher Sean Morrison cc4ebeeb38 some tips for speeding up updates 2026-06-22 12:51:38 -04:00
Christopher Sean Morrison 40f83e952b update in parallel 2026-06-22 12:49:37 -04:00
Christopher Sean Morrison 13af2bf64c use QUIET to quell the find_package() blather as it otherwise looks like an error. still prints summary at the end, so we'll know which are system and which are not 2026-06-22 12:03:51 -04:00
Clifford Yapp 71b46f4f20 Update submodules 2026-06-21 19:33:08 -04:00
Christopher Sean Morrison 344809cdde add the bootstrap logic 2026-06-09 06:47:43 -04:00
Christopher Sean Morrison 136738824c refactor use of helper to simplify and make consistent 2026-06-09 06:46:58 -04:00
Christopher Sean Morrison a84fb416de document bootstrapping path to prefetch, or no-op preview 2026-06-09 06:45:01 -04:00
Christopher Sean Morrison dd504f3f89 print a summary 2026-06-09 06:44:07 -04:00
Christopher Sean Morrison c41c111bc9 refactor the summary printing 2026-06-09 06:43:41 -04:00
Christopher Sean Morrison b41712afdc make the runner check all the preset configurations 2026-06-03 02:15:51 -04:00
Christopher Sean Morrison dffd78f2c3 define four presets: auto, bundled, minimal, and everything. 2026-06-03 02:06:34 -04:00
Christopher Sean Morrison 3e43fdd83e looks like we can get away with not patching bison.
it was attempting to rerun autoconf because the copy from src to build dir updates all the timestamps, making it seem like they needed to be regenerated.  running touch_nocreate lets them be newer so make isn't triggered.  the patch would also update and require re-running automake+autoreconf, so this also avoids that regen path as well.

should probably run touch_nocreate on all the copied autotools codes..
2026-05-31 11:34:29 -04:00
Christopher Sean Morrison 02798b5732 constness patch for gcc 14 throwing errors 2026-05-31 11:13:51 -04:00
Christopher Sean Morrison 7c9d874bf5 make patching resilient to already-applied patches.
by default, patch returns non-zero even if -N option was specified.  while we could patch our patch to make it return zero, we can't patch a system binary.  instead we set up a patch wrapper that actually attempts to reverse the patch in dry-run mode (only when patching normally fails).  if that succeeds/returns zero, we know it's already applied and return successfully.

this accounts for some very obscure bug or race condition where cmake ends up attempting to patch the same code multiple times, randomly erroring out the build.  this makes it resilient at least to any patch-already-applied conditions.
2026-05-31 08:03:54 -04:00
Clifford Yapp 949b394e8b WITH_TCL_DIR needs to have tclConfig.sh - look a little harder 2026-05-29 11:45:52 -04:00
Clifford Yapp fb4c47790a bz doesn't like csetjump - just use setjump.h 2026-05-29 11:31:22 -04:00
Clifford Yapp 564f66ef8f Have PROJ use the same FindSQLite3.cmake as the main bext configure. 2026-05-29 09:44:00 -04:00
Clifford Yapp 366d4a8ccb Update opennurbs FreeBSD patch 2026-05-27 13:50:08 -04:00
Christopher Sean Morrison d8d2099421 no longer need the conditional patch script since everyone is in the build dir. 2026-05-25 00:43:25 -04:00
Christopher Sean Morrison bdaf9c1d51 ditto for appleseed, patch in build dir like the rest 2026-05-25 00:42:41 -04:00
Christopher Sean Morrison ba73add03b restore consistency with the rest, copy in and patch in build dir instead of source 2026-05-25 00:39:37 -04:00
Christopher Sean Morrison a61f1674be patch bullet's doxygen so we don't error out in our code when including their headers.
should be including as system headers, but this takes care of it.
2026-05-23 13:19:02 -04:00
Christopher Sean Morrison 9de877163d Update OSPRay and dependencies to latest versions 2026-05-23 13:13:42 -04:00
Christopher Sean Morrison 7eaec42723 configure submodules to pull a shallow clone by default. cuts disk usage in half (~10gb). 2026-05-20 23:09:18 -04:00
Christopher Sean Morrison ef7b754633 expand the clean target to reset our ExternalProject dir while leaving the top-level configure and install products alone.
this lets one run make clean even in specific dep dirs to get them to cleanly rebuild without kicking off cmake, without needing to blow the whole thing away.
2026-05-16 17:12:29 -04:00
Christopher Sean Morrison 0139aef7cf apply patch through wrapper to detect if already applied.
avoids warning and/or re-applying the patch incorrectly.
2026-05-16 15:41:59 -04:00
Clifford Yapp 6f6ee77f4b We should no longer need geogram in bext - handled in BRL-CAD's src/libbg 2026-05-11 19:18:35 -04:00
Christopher Sean Morrison 9a4f748199 patch appleseed to use our newer openexr (plus a minor code fix) 2026-05-11 11:59:15 -04:00
Christopher Sean Morrison f2f561a701 osl mac build was pulling wrong sdk (or not inheriting the right one), so manually set it.
this appears to get things working cleanly, full build.
2026-05-11 11:57:29 -04:00
Christopher Sean Morrison b0ebab1bd4 OIIO needs several paths and flags propagated for build to behave on mac 2026-05-11 11:51:16 -04:00
Christopher Sean Morrison 8d3c3d3348 give llvm our macro for finding our namemod'd zlib 2026-05-11 11:50:10 -04:00
Christopher Sean Morrison 606596f1f1 fix path on where to find our FindZLIB.cmake, and tell cmake where to find flex/bison, to avoid needing the manual root hinting 2026-05-11 11:49:19 -04:00
Christopher Sean Morrison d30c9b9c99 lets not re-run autogen.sh every time, just run the snapshotted configure.
running autogen re-generates configure but also requires a littany of additional tools (autoconf, automake, m4, gettext, etc) that must be installed.  the resulting configure is already checked in and represents a release snapshot (i.e., as a user checkout, or as deployed software) which is better than treating it as a developer checkout, needing additional tools.  shoudl be much less brittle this way.
2026-05-11 09:10:07 -04:00
Christopher Sean Morrison 62dd78aa8d turn off simd, patch it, and force our exr.
appleseed's old build doesn't know non-intel macs are a thing, so turn off simd until it can be updated when compiling on mac.  the patch looks like it has proper fixes so go ahead and apply it as well.  build still kept pulling in homebrew openexr, so forcing our install prefix and openexr was also needed, though this will likely need adjustment for default/auto to work.
2026-05-11 09:04:05 -04:00
Christopher Sean Morrison 2cf50965dc needs png and zlib headers 2026-05-11 08:37:47 -04:00
Christopher Sean Morrison 14df08be98 trying to mix system png and zlib on mac when we're building bundled is no-go.
there's too many incompatibilities given we're on a different version, so forcibly make sure we only attempt the system framework as a last resort.
2026-05-11 08:29:19 -04:00
Christopher Sean Morrison 352b58f0ae we don't need or want png to be a framework on mac 2026-05-11 08:24:29 -04:00
Christopher Sean Morrison 2fb93e20f4 if we're on mac M-chips, we need to specify neon 2026-05-11 08:23:57 -04:00
Christopher Sean Morrison 3827531ead looks like a copy-paste oops, FindICU is in our boost dir 2026-05-09 11:40:47 -04:00
Christopher Sean Morrison d1a01b527a document how to add a new dep, what all is needed 2026-05-09 01:20:53 -04:00
Christopher Sean Morrison d26b3f13fb breadcrumb to adding a new external dep 2026-05-09 00:45:01 -04:00
Christopher Sean Morrison b337acc1f3 tame the beast, improve usability of the readme.
while more lines overall and more sections or structure, it's less than half the text with the four most common use cases called out specifically (default, all active, all off, and everything on including the extras.  also links over to the other docs for more info and discoverability.
2026-05-09 00:39:48 -04:00
Christopher Sean Morrison 4c289c0d5d move some of the caveats and requirements into the install file.
also gives us space to elaborate on build requirements, and unlikely use cases like recursive and shallow clones
2026-05-09 00:26:45 -04:00
Christopher Sean Morrison c66cf8d7e7 document all of the deps, which USE_* groups enable them, and where they go.
was having a hard time figuring out what went with what without diving into the CMake logic.
2026-05-09 00:16:08 -04:00
Clifford Yapp dda9c16a80 Grr. Bullet3 CMake is explicit about MSVC - try their option 2026-05-06 19:54:36 -04:00
Clifford Yapp bb75c9a35f Looks like we're not getting the runtime library we need on MSVC? 2026-05-06 12:51:32 -04:00
Clifford Yapp a9dd4139ee I think on MSVC we need separate output names for static libs? 2026-05-05 15:13:25 -04:00
Clifford Yapp 5f15f22fcd Bullet needs to be told to install the libs 2026-05-05 14:32:23 -04:00
Clifford Yapp 39d38050b1 Add bullet3 physics library 2026-05-05 13:53:59 -04:00
Clifford Yapp a75b442696 Update osmesa to latest upstream 2026-05-05 12:12:41 -04:00
Clifford Yapp f8e0be4212 Update to plief with SONAME support 2026-04-30 13:14:39 -04:00
Clifford Yapp 43a173bfe5 Add manifold static lib build 2026-04-30 12:58:03 -04:00
Clifford Yapp ec45d1802d Add a static clipper2 library build target 2026-04-30 12:42:57 -04:00
Clifford Yapp 269a10e090 Update mmesh 2026-04-30 10:25:04 -04:00
Clifford Yapp 8af33bc12f Build regex position independent 2026-04-27 15:51:20 -04:00
Erik Greenwald 1aa3cfdffc Fix Find modules to detect system libraries and validate lemon compatibility
FindLMDB and FindSQLite3 only searched paths when *_ROOT was set,
missing system-installed libraries entirely.  Add fallback to default
CMake search paths so system -dev packages are found.

FindLEMON now tests whether the found lemon supports %realloc/%free
directives required by stepcode.  System lemon (SQLite's) lacks these
BRL-CAD extensions, so the test correctly rejects it and triggers a
local build of the forked lemon.
2026-04-06 09:44:45 -04:00
Clifford Yapp b78aa61494 Remove OpenMesh dependency 2026-03-21 09:29:54 -04:00
Clifford Yapp 016b9bd11e Add libjpeg in preparation for adding JPEG support to libicv 2026-03-20 09:37:38 -04:00
Clifford Yapp 4df2c07626 Have qt depend on zlib build 2026-02-12 12:29:44 -05:00
Clifford Yapp 8ec79c216f Update Qt to v6.10.2 2026-02-12 12:29:36 -05:00
Clifford Yapp ccee7d8da2 Update stepcode for CMake cleanup 2026-02-12 12:29:28 -05:00
Clifford Yapp 0fe0277e88 Update stepcode module to get updates for newer compilers 2026-02-12 12:29:17 -05:00
Clifford Yapp fd4bf7c3ae Update libtiff to v4.7.1 2026-02-12 12:28:56 -05:00
Clifford Yapp 926bc4d20f Initialize stb_image array in assetimport 2026-02-12 12:28:10 -05:00
Clifford Yapp 13e7b8f057 Update OpenCV to v4.13.0 2026-02-12 12:04:10 -05:00
Clifford Yapp c492e7f63b Update LIEF to upstream SHA1 7db1318 2026-02-12 12:04:02 -05:00
Clifford Yapp 63ddb79c16 Update pugixml to v1.15 2026-02-12 12:03:53 -05:00
Clifford Yapp a0f0b51a7d Update lmdb to v0.9.35 2026-02-12 12:03:46 -05:00
Clifford Yapp 1114fad340 Update libjpeg-turbo to v3.1.3 2026-02-12 12:03:37 -05:00
Clifford Yapp 62e4015096 Update sqlite3 to v3.51.2 2026-02-12 12:01:53 -05:00
Clifford Yapp beead06c09 Update assimp to v6.0.4 2026-02-12 12:01:41 -05:00
Clifford Yapp 69cd9afc93 Update PROJ to v9.7.1 and GDAL to v3.12.1 2026-02-12 11:57:30 -05:00
Clifford Yapp eb20e24397 Update libpng to v1.6.54 2026-02-12 11:49:55 -05:00
f4alt bc73bf4e9b update mmesh 2026-02-10 08:58:10 -05:00
Clifford Yapp cfdef3de77 Remove utahrle - no longer needed by latest BRL-CAD 2026-01-02 13:57:32 -05:00
Clifford Yapp 228201d3e1 Correct expparse patch
Earlier version was made against a file that had some leftover code
in it from earlier experiments, so it didn't apply cleanly.
2025-12-10 09:28:33 -05:00
Clifford Yapp d79f88cb4b Add a patch to allow stepcode to build with newer versions of lemon 2025-12-09 15:25:05 -05:00
Clifford Yapp 37cb81016a Update lemon to latest upstream version as of 2025-12-09 2025-12-09 15:16:33 -05:00
Clifford Yapp 546d964c3b Update libpng to v1.6.52 2025-12-04 15:57:25 -05:00
Clifford Yapp 194e19196d Experiment with using git reset and clean to avoid src copying
Generally in BRL-CAD we treat the source tree as unmodifiable by the build
system.  Applying that principle to bext, that means any time we must patch
a source tree (which is more often than not) we make a copy of the original
sources in the build directory and work on that copy.

This works, but has a considerable downside from a diskspace consumption
perspective (not to mention the cost of all the file I/O.)  A possible
alternative is to use the fact that all the target directories are
submodules and take advantage of git's abilities to reset the source
directory to a clean state.  We can combine --reset hard and -clean -fdx
to return a source tree modified by patching to its pristine state,
ensuring a suitable target for patching even if a previous build had
already applied the patches once.

Commiting this just on zlib now as a test and to work through the potential
tradeoffs of this approach.  Doing it this way will eliminate the ability
of devs to modify and tweak the sources in-situ for quick and easy testing, but
there are ways around that. What I'm currently leaning towards is recommending
to developers that if they want to iteratively work with a particular
dependency to develop a patch, they do so by removing the submodule git
repository and temporarily replacing it with their own (WITHOUT committing the
change from a submodule to a local repo.) Then, having their own repository to
work in, they can commit any intermediate testing states they may want to try
as a foundation for the patch-build cycle to the temporary repo.  Since they
will be committed the testing changes will be the target for the reset and
clean commands and survive multiple patch/build cycles.  They can also do the
reset and clean manually themselves to restore the pre-patch state to make and
commit more changes from a clean, pre-patched state.

Another possible approach would be to see if the patch -R capability could be
utilized at the end of the ExternalProject_Add cycle to undo the patch
applications while still leaving behind any custom mods a developer might have
added while testing.  I'm leaning against trying that because it adds
complexity and fragility to the process - for example, if something went wrong
mid-build with the external project we'd never get to the patch -R step to do
the cleanup and the next cycle through patching would fail.  Plus we could be
asking quite a lot of the patch -R capability depending on what pre-patch
changes were present.  The git reset+clean should be a simple and robust way to
ensure a clean starting point, with the substitute-local-repo-for-submodule
trick allowing for more flexibility on the (usually fairly rare) occasions we
need to do iterative work on a dependency in the bext context.
2025-08-28 13:17:56 -04:00
Clifford Yapp f75ec63b1e Update GDAL to v3.11.3 2025-08-28 11:58:22 -04:00
Clifford Yapp b8c7c5f262 Use git submodule SHA1 values to reset build directories on configure
If a submodule has been updated, its build directory must be considered out of
date and in need of recompilation.  Previously this was done manually, but if
the cmake configure process is re-run we can check a stored SHA1 and handle the
reset automatically.

This is still not perfect - if a rebuild has other implications for the overall
build (like, say, new header versions being used in the updated module that
have compile time implications for other submoduiles using the output of the
changed module) this won't automatically trigger redos on all those builds.
Still, it's a step in the right direction and will handle many cases.
2025-08-26 16:54:25 -04:00
Clifford Yapp 9278314222 Update files to check for completed git submodule init 2025-08-26 16:49:25 -04:00
Clifford Yapp 0352b63f73 Break out FindICU.cmake, fix path for boost FindZLIB.cmake 2025-08-26 16:16:28 -04:00
Clifford Yapp 18fc3a6206 Add a few more file-level operations for opencolorio and proj 2025-08-26 16:10:59 -04:00
Clifford Yapp edfd0ba01b Copy FindPNG.cmake into place as well 2025-08-26 15:56:08 -04:00
Clifford Yapp 0ae7f1dc1d Use cmake -E copy to stage FindZLIB.cmake rather than patching 2025-08-26 14:48:28 -04:00
Clifford Yapp 8075a8544d Apparently astyle has a library build mode that's activated if you pass in BUILD_STATIC_LIBS. We want the executable 2025-08-20 12:44:56 -04:00
Clifford Yapp e8cdc58fb0 Update geogram to v1.9.6 + patches through 35cf7d6 2025-08-20 09:34:20 -04:00
Clifford Yapp 4dd690900c Update mmesh 2025-08-19 13:08:56 -04:00
Clifford Yapp e810f0e7a6 Update manifold to version 3.2.1 + patches through e047ba6
This version uses linalg rather than glm, eliminating a dependency, and also
features improved determinism when it comes to output generation.

With the new debugging output features in this version, we no longer need the
assimp meshIO support or our patch file.

We explicitly disable some Manifold features in our configure for proper
behavior in our build, as well as bumping Clipper to v1.5.2 to match Manifold.
We also need to define CMAKE_WINDOWS_EXPORT_ALL_SYMBOLS for Clipper2 to get a
.lib file expected by the Manifold build.

Note that changes to the internal math in Manifold v3 (in particularl switching
to double from float) mean that certain automatic "simplification" behaviors we
were seeing in v2 manifold now need to be manually handled on the BRL-CAD side
to avoid major performance hits.
2025-08-18 15:30:53 -04:00
Clifford Yapp 40de130363 Looks as if the MSVC issue was actually needing NOMINMAX 2025-08-15 19:36:40 -04:00
Clifford Yapp 07e655794b Getting compile issue on Windows as well - try a patch 2025-08-15 16:27:25 -04:00
Clifford Yapp a557407c71 Add patch for OSX RSS lookup 2025-08-15 16:16:58 -04:00
Clifford Yapp fa282dc2d1 Add some initializations and bounds checks to avoid link-time warnings 2025-08-15 12:39:50 -04:00
Clifford Yapp 42f9cd28fd Add PoissonRecon submodule 2025-08-15 11:37:02 -04:00
Clifford Yapp a7de70fe15 Bump bext to latest mmesh 2025-08-14 15:55:29 -04:00
Clifford Yapp b7eb5fa064 Get latest mmesh for comment fix 2025-08-14 10:46:49 -04:00
Clifford Yapp 70bf649aec Bump mmesh submodule to test out EXPORT logic 2025-08-13 16:56:42 -04:00
Christopher Sean Morrison 17f3f0c802 need to pass the QT_ALLOW_HEADLESS setting through 2025-08-08 17:15:55 -04:00
f4alt 97144d9ce8 missed a close 2025-08-07 12:30:46 -04:00
f4alt 5d1739c736 see if we got it right this time
using widget and window styling is not reliable either.. Go back to
backend checks but lets try direct2d for windows and ensure mac has
cocoa qpa_platform
2025-08-07 01:01:51 -04:00
f4alt 657d0b2c8f take another approach to gui mode guess
FEATURE_xx formatting appears to be inconsistent on different systems.
Instead, use the widget and os styles to hint that we're built with gui
enabled
2025-08-05 16:04:01 -04:00
Christopher Sean Morrison fe856ea716 support headless qt for CI and CLI modes of use, but not by default
if GUI mode is not supported, build fails with diagnostic info.  re-running with QT_ALLOW_HEADLESS lets the build continue with whatever Qt defaults to.  means we also no longer force the -xcb option, which was causing build failures irrelevant at the time due to missing some xcb and xkb devel packages on rhel.  this generalized result should give us fair warning on all the major platforms if there's an issue.
2025-08-01 22:01:47 -04:00
Clifford Yapp b171adcc33 Update strclear 2025-07-24 08:34:41 -04:00
Clifford Yapp a77f10ccb5 As two separate commands this works in Powershell too, not just sh 2025-07-23 15:26:30 -04:00
Clifford Yapp 4ae43a98dc Grab simplified strclear (removed strnstr). NOT experimenting with new filesystem path translation option yet - that's too fraught to play with this close to release. 2025-07-22 22:17:54 -04:00
Clifford Yapp e819891ffc Try using <SOURCE_DIR> - if this works we should update other build logic needing this info... 2025-07-22 19:17:56 -04:00
Clifford Yapp 174ddc4281 Fix directory 2025-07-22 19:13:07 -04:00
Clifford Yapp a001088581 Checkpoint - failing consistently now, at least - looks like may need to disable pkgconfig searching 2025-07-22 17:17:34 -04:00
Clifford Yapp 3cfa175196 Use updated strclear 2025-07-22 14:18:30 -04:00
Clifford Yapp 7c54f6d527 Check both source and binary dir, fix wait 2025-07-22 14:15:03 -04:00
Clifford Yapp c944b18111 Warn if REAL_PATH doesn't match PROJECT_SOURCE_DIR
If we're building in a symlinked directory for our working directory, we end up
with mismatched paths being used for outputs if the build logic is calling
realpath for anything.  That in turn means subsequent strclear logic won't be
looking for the right paths when it is trying to do scrubbing.  Not failing
the build outright, but being noisy since this is very likely to break things.
2025-07-22 14:06:45 -04:00
Clifford Yapp 4843b29eb6 Adjust assimp CMake to use the zlib target
We were getting a bext full path for zlib from the assimpTargets.cmake
file - use the ZLIB::ZLIB target instead and call find_package like
libpng does.
2025-07-22 10:10:00 -04:00
Clifford Yapp ecec7ad81d More README adjustments 2025-07-22 10:02:58 -04:00
Clifford Yapp a1aeeb1313 No longer writing to HOME by default - update bext README. 2025-07-22 09:10:27 -04:00
Clifford Yapp 295cdc9f0f bundled vars incorrect for Eigen and tinygltf 2025-07-18 13:09:00 -04:00
f4alt 06d1ac96f9 quick note about building debug-able tcl 2025-06-26 11:35:28 -04:00
Christopher Sean Morrison 8d97de2af8 fix RHEL8 compile when using android_uuid fallback.
adding C files to a CXX-only project resulted in the files being silently ignored, so expanded to C and CXX toolchaining.  now also compiling into their own object library that gets added because the opennurbs precompiled header would get processed by cmake as C, resulting in build failure.  if a system uuid library is found, we do try to link against it but couldn't get that to succeed on rhel8, seemingly lacking cmake find support.
2025-06-25 09:34:06 -04:00
Christopher Sean Morrison fa11494067 nice they made it an option, but ccache is causing a variety of issues on RHEL8 2025-06-23 19:11:08 -04:00
Christopher Sean Morrison 3211ee1861 fix RHEL8 build failure.
lief automatically tries to use ccache but then ccache ends up choking on 'ar qc' to link the lib static.
2025-06-10 17:10:10 -04:00
Clifford Yapp cef112292a Use a separate COMMAND line for the second patch file
For consistency with other code, use COMMAND to apply the second patch file
2025-06-03 08:37:19 -04:00
Christopher Sean Morrison 5f8ed1189c patch an explicit conversion issue already fixed upstream, until we update.
added as separate patch so it's easier to undo later and be documented / exist separately.

also enabled on mac so it can also help catch issues during ci/cd compilation.
2025-06-03 02:01:47 -04:00
Daniel Rossberg affb3b60f6 made the static library usable
without -fPIC, the MOOSE brlcad library cannot be linked with the static version of the lmdb library
2025-05-03 15:40:20 +02:00
Daniel Rossberg 543b340820 build more static libraries
made static library building the default
2025-05-03 15:37:23 +02:00
Clifford Yapp 935331c5eb Enable verbose logging for CI building to help with debugging 2025-04-16 15:33:18 -04:00
Clifford Yapp 7cf75fd2c1 Try handling the Tk build similarily to how we handle the Tcl build. 2025-04-16 11:53:08 -04:00
Clifford Yapp b83786ff08 Try clearing RC as well as CC 2025-04-16 11:14:49 -04:00
Clifford Yapp 2b480a266a Need to call out librt until we've completed the Manifold upgrade. 2025-04-16 09:00:15 -04:00
Clifford Yapp ce95a2668d Support using ':' to delimit components 2025-04-16 08:48:49 -04:00
Clifford Yapp ee06c9068b Correct directory target for itcl3 hdrs 2025-04-15 11:03:08 -04:00
Clifford Yapp 2035d78b52 Use the variable instead of repeating the target path. 2025-04-15 10:52:22 -04:00
Clifford Yapp aea0dee2ef Remove references to bext_output 2025-04-15 10:07:22 -04:00
Clifford Yapp 9cbd27d307 Break the utility functions and macros into their own file. 2025-04-15 09:52:30 -04:00
Clifford Yapp 7bebf9ea7a The way the OSX Debug build is failing makes me wonder if ITCL_TARGET isn't set when we're doing the itk CMake logic... 2025-04-15 09:10:46 -04:00
Clifford Yapp 40a163b478 Need to use @ syntax 2025-04-14 15:09:03 -04:00
Clifford Yapp 27e9152fe7 Test a conditional to trigger when we're using Ninja on Windows - looks like it will need different env setup. 2025-04-11 09:48:27 -04:00
Clifford Yapp 442086b36c tk_configure doesn't have enough info to set the WITH_TCL_FLAG dir correctly - do it in the top level. 2025-04-11 09:12:48 -04:00
Clifford Yapp 82fc774da6 Note remaining work for patchs - grepping the .patch files for 1969 is a quick way to find files being added. 2025-04-10 21:38:46 -04:00
Clifford Yapp 66f095a7d9 Separate out the opennurbs_x file adds and use cmake -E 2025-04-10 21:33:17 -04:00
Clifford Yapp 7476dee430 Place Itcl files for Itk with cmake -E 2025-04-10 21:26:21 -04:00
Clifford Yapp 632dbeac1b Add and remove whole files with cmake -E for zlib 2025-04-10 21:18:40 -04:00
Clifford Yapp 998ddc16dc Use cmake -E copy_directory rather than patch for private Tcl hdrs 2025-04-10 21:08:29 -04:00
Clifford Yapp 8a9a21f285 Use file copying to add whole files for ITcl/Itk
Instead of bloating the patch files, per suggestion from Sean stash copies of
files we are adding wholesale and use copy commands to set them up in the
source tree.

Still need to convert the tcl_hdrs patch for Itcl - probably want to make use
of cmake -E copy_directory_if_different for that one - but this should
establish the general pattern.
2025-04-08 13:53:04 -04:00
Christopher Sean Morrison 90ea63597e apply same fix as tcl for mac.
by using a sub-cmake, we can more easily set all the flags and conditionlize on Mac's specific needs for peeking
into the framework dirs when CC ends up set to the built-in xcode version of cc that's configured sans sys libs.
2025-03-24 01:50:11 -04:00
Christopher Sean Morrison df352726ce mac don't need LD_LIBRARY_PATH 2025-03-24 00:38:13 -04:00
Christopher Sean Morrison 9449a6599f entire file is premised on not-windows, and we didn't leverage that to collapse the conditional in here, so just skip it 2025-03-24 00:37:54 -04:00
Christopher Sean Morrison f2a02366be good gravy that took so many iterations to get working.. fix non-default mac builds.
something still unknown is causing CC to sometimes be set and sometimes not, and there's a
particularly challenging difference between the first build attempt and subsequent builds.
on subsequent, CC ends up being gcc which succeeds, but first build will be unmodified with
CC pointing to /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc
which builds without default search dirs/paths/libs.  So we need to add them.
Alas, this means adding a mix of include dirs, lib dirs, and libs with there being
another discrepancy between the tcl and pkgs/itcl using differnet build rules (the
latter doesn't appear to set/respect LDFLAGS.  Workaround is to set LDFLAGS and
CFLAGS, in addition to CPPFLAGS.  This appears to finally have worked.
2025-03-23 23:30:02 -04:00
Christopher Sean Morrison f68d029b9f unused check, and now we need it elsewhere in the sub-cmake 2025-03-23 23:09:16 -04:00
Clifford Yapp 6f48a372bf Point tkhtml and tktable submodules to latest committed SHA1s 2025-03-19 14:36:51 -04:00
Christopher Sean Morrison 853629b6aa Revert "pass itcl vars forward"
This reverts commit ec648a3f3f.

We actually don't want to pass these vars forward because they're
potentially unset, and then when passed forward, they're cached and
subsequent find_library() calls skip even checking for it.
2025-03-19 03:17:04 -04:00
Christopher Sean Morrison 8fe78cfe60 fix latent tcl vs itcl typos 2025-03-19 03:00:16 -04:00
Christopher Sean Morrison 0388f4a12f sync with bext parent FindTCL.cmake which has Framework detection disabled.
cmake deprecated it in latest revs, so this also quells a bunch of policy warnings.  crazy that the files are embedded as patch data instead of file copies, but something to fix later.
2025-03-19 02:40:47 -04:00
Christopher Sean Morrison 5e72707059 update to latest main with updated FindTCL.cmake 2025-03-19 02:26:08 -04:00
Christopher Sean Morrison 79a7111dfa Since bext is not expected to be system-installed outside of a BRL-CAD
build (and doesn't appear to be structured for it right now also),
default CMAKE_INSTALL_PREFIX to the build directory (wherein it will
create an install and noinstall subdirs).

This addresses an issue where default bext builds with different
configurations (e.g., Release and Debug) won't look by default into a
common path (HOME/bext_output) and find other configuration
products. This was problematic for non-enable-all builds and even
existing partial builds since it would find and prefer to use the
found version in install even with enable-all.  The non-deterministic
nature made for very difficult to reproduce and debug failure states
as well.

Another issue was the default surprise of having files written outside
of the build dir, unspecified by the user.  This was exacerbated on a
system where build dir and home dir existed on different partitions
with different capacity and performance characteristics.
2025-03-18 11:00:26 -04:00
Clifford Yapp 90642ca5ae Add fix for CVE-2025-2151 2025-03-13 14:13:07 -04:00
Christopher Sean Morrison f11907cb9d stubs aren't passing forward. need our custom logic for Tcl to get vars set.
quell an if/endif warning while we're at it.
2025-03-04 04:29:57 -05:00
Christopher Sean Morrison 54be88f43f pass stub libs forward 2025-03-04 04:08:13 -05:00
Christopher Sean Morrison ec648a3f3f pass itcl vars forward 2025-03-04 03:54:54 -05:00
Christopher Sean Morrison ca22a6953d add a newline 2025-03-04 03:38:24 -05:00
Christopher Sean Morrison fdda7359c1 hint the location better? 2025-03-04 03:22:26 -05:00
Christopher Sean Morrison 4db3a8c285 resort to manually patching FindITCL.cmake into place, ugh. 2025-03-04 03:17:16 -05:00
Christopher Sean Morrison c4a046f7c4 see if we can find our parent find scripts as these were modified 2025-03-04 02:54:02 -05:00
Christopher Sean Morrison 8eb4776ce0 sync with main repo rev since it looks like it's more separated per line 2025-03-04 02:44:32 -05:00
Christopher Sean Morrison 0dcb158eab typo 2025-03-04 02:38:33 -05:00
Christopher Sean Morrison 685e77285f Mac frameworks are apparently deprecated in cmake, so rip out the logic.
long time since we built with system tcl/tk so will need to revisit the whole approach regardless.
2025-03-04 02:28:53 -05:00
Christopher Sean Morrison 650274859e promote not finding frameworks to all externals 2025-03-04 02:24:33 -05:00
Christopher Sean Morrison 3241e30ea9 make Geogram match project name to avoid warnings 2025-03-04 02:24:01 -05:00
Christopher Sean Morrison ea95b66680 match the package name to avoid warning 2025-03-04 02:11:58 -05:00
Christopher Sean Morrison b053baaf86 get default mac build working with libpng + system libz.
without enable_all=on, png was getting mixed signals as it wasn't defining the prefix (as there was a system libz), but then not actually adding the system libz to the link line.  result was unresolved zlib symbols.  this tell png to turn off libz building, so it'll use the system libz, if our parent config has building zlib turned off.
2025-02-26 01:45:05 -05:00
Christopher Sean Morrison 9d046fe578 force CC off but keep prior setting logged 2025-02-20 10:16:39 -05:00
Clifford Yapp 0c539a0395 Back up manifold upgrade - looks like we're not ready for 3.0 yet. 2025-02-19 16:24:00 -05:00
Clifford Yapp 7ac50ea0db Always enable optimized Manifold
Found out the hard way that a Debug manifold build without optimization is MUCH
slower - impractically slow when it comes to things like plate mode bot
offsetting.

In the (rare) event we really need something like understandable perf reporting
on Linux, this setting can be manually turned off in this file.
2025-02-19 09:35:34 -05:00
Clifford Yapp e466239372 Point Manifold at our local PUGIXML if enabled
Was getting a linking failure with pugixml - -lpugixml doesn't work out of the
box if we're using the bundled pugixml build.

Making a patch file for this - not worth pushing upstream, since the proper fix
in this particular case is to teach Manifold to read and write it's own
enhanced glTF files with topology info using the EXT_mesh_manifold extension.
If we can do that we should be able to completely remove the assimp dependency
from Manifold.
2025-02-19 08:58:43 -05:00
Clifford Yapp ceb224d5b5 Update Manifold submodule to v3.0.1 2025-02-19 08:24:58 -05:00
Christopher Sean Morrison 5277e71dac LICENSES.TXT apparently renamed to LICENSE 2025-02-13 12:02:20 -05:00
Christopher Sean Morrison ba8043ccdb updated manifold 2025-02-13 11:55:02 -05:00
Christopher Sean Morrison cf10cf56f1 lets try wiping out CC 2025-02-13 11:48:55 -05:00
Christopher Sean Morrison 1212ce9664 Merge branch 'main' of https://github.com/BRL-CAD/bext into HEAD 2025-02-06 14:43:30 -05:00
Christopher Sean Morrison 0a45216aff install script has same issue, needing vcvars in same env as nmake 2025-02-06 11:56:53 -05:00
Christopher Sean Morrison fa61afc565 see if we can narrow down the CC diff 2025-02-06 11:56:20 -05:00
Christopher Sean Morrison e18b1c12a7 see if we can fix the default Mac build 2025-02-06 10:59:16 -05:00
Christopher Sean Morrison eb1cb5346e looks like cmake cranks up the level, which results in misleading registry error output. suppress. 2025-02-06 10:58:56 -05:00
Christopher Sean Morrison bc693f8244 getting much closer. this ensures the vcvars are in same scope as nmake 2025-02-06 10:33:30 -05:00
Christopher Sean Morrison eb91894d69 extra lines skips directives 2025-02-06 10:32:37 -05:00
Christopher Sean Morrison d1832df2ad put the vcvars variables into the same context as nmake 2025-02-05 23:35:41 -05:00
Clifford Yapp 068f42ad92 Add some specifiers for build types to CMake lines 2025-02-04 11:48:32 -05:00
Clifford Yapp ed8a0febc2 Try running MSVC nmake install from a .cmake script 2025-02-04 07:03:47 -05:00
Christopher Sean Morrison a8e0ae9020 add logging to affirm the vcvars.bat 2025-01-29 20:40:05 -05:00
Christopher Sean Morrison a706f0f997 remove Mac LIBRARY_PATH override.
it causes tcl's configure to configure CC=/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/cc which requires full definition of system include and lib search paths (i.e., more than LIBRARY_PATH).  it doesn't work otherwise, resulting in basic failures like not finding system headers.  even with CPATH set, still needs more.  default compiler works, so reverting to see if the previous issue has an alternate solution or was temporary.
2025-01-26 00:13:30 -05:00
Clifford Yapp 3948f11cf2 Add patch for geogram FreeBSD building
Based on patches from
https://cgit.freebsd.org/ports/tree/math/geogram

Needs testing.  OpenBSD (and possibly other BSDs) will probably need
their own set of patches along these lines.
2025-01-10 12:57:29 -05:00
Clifford Yapp 306f40246d See if we can enable position independent code across the board for zlib 2025-01-02 21:11:50 -05:00
Clifford Yapp e1435bdc0f Add note about doing initial work outside main 2024-12-23 11:00:30 -05:00
Clifford Yapp 861e6a4d7b Remove obsolete comment 2024-11-14 15:44:45 -05:00
Clifford Yapp e051d93fc1 Build relocatable tinygltf 2024-11-01 16:31:05 -04:00
Clifford Yapp ab8b42d88c Remove FindLINENOISE.cmake file as well 2024-10-30 11:38:27 -04:00
Clifford Yapp 142598aa44 Remove C library version of linenoise - using hpp header version 2024-10-30 11:33:04 -04:00
Clifford Yapp 8531c6cbbb Not using meshIO in librt 2024-10-22 16:25:39 -04:00
Clifford Yapp 80bc44df7e Add tinygltf as a bext component 2024-10-22 15:22:10 -04:00
Clifford Yapp 2182291409 Reapply "Looks like BSD uses locale_t as well"
Whoops, this should be independent of the zlib changes

This reverts commit 91aaf2a205.
2024-10-15 16:09:59 -04:00
Clifford Yapp dfffb9b80f Revert "Add GLM - Manifold uses this, including in its headers, so we need it installed."
This reverts commit dccdb61ac7.
2024-10-15 15:56:53 -04:00
Clifford Yapp d8f6d0324a Revert "Rework zlib patching"
This reverts commit c2aabae647.
2024-10-15 15:55:43 -04:00
Clifford Yapp 0820e71165 Revert "Try generating a ZLIBConfig.cmake file"
This reverts commit 690b4b07a1.
2024-10-15 15:55:20 -04:00
Clifford Yapp bc4902c4b3 Revert "See if we can remove the FindZLIB.cmake customization patch from assetimport"
This reverts commit 749a13ccf6.
2024-10-15 15:55:19 -04:00
Clifford Yapp 40d105d04e Reapply "See if we can remove the FindZLIB.cmake customization patch from assetimport"
This reverts commit d8dd4807a9.
2024-10-15 15:55:18 -04:00
Clifford Yapp bed5608428 Revert "Fix includes, add Z_PREFIX define"
This reverts commit cf41e92458.
2024-10-15 15:55:16 -04:00
Clifford Yapp 91aaf2a205 Revert "Looks like BSD uses locale_t as well"
This reverts commit dcccf402a7.
2024-10-15 15:55:14 -04:00
Clifford Yapp dcccf402a7 Looks like BSD uses locale_t as well 2024-10-09 17:00:10 -04:00
Clifford Yapp cf41e92458 Fix includes, add Z_PREFIX define 2024-10-09 16:34:44 -04:00
Clifford Yapp d8dd4807a9 Revert "See if we can remove the FindZLIB.cmake customization patch from assetimport"
Need to think more about Z_PREFIX and the Config.cmake setup...

This reverts commit 749a13ccf6.
2024-10-09 16:19:05 -04:00
Clifford Yapp 749a13ccf6 See if we can remove the FindZLIB.cmake customization patch from assetimport 2024-10-09 16:13:15 -04:00
Clifford Yapp 690b4b07a1 Try generating a ZLIBConfig.cmake file 2024-10-09 15:02:44 -04:00
Clifford Yapp c2aabae647 Rework zlib patching
Break CMake changes, rc mod and zlib prefixing out into separate
patches.  To make the diff more useful, incorporate file moves into the
patching process so we can diff the current zlib.h and our zlib.h.in (as
well as the same thing for zconf) rather than deleting and adding.
2024-10-09 13:11:53 -04:00
Clifford Yapp ab8512efcf Add Clipper2 as a dependency (needed by Manifold) 2024-10-09 12:46:40 -04:00
Clifford Yapp dccdb61ac7 Add GLM - Manifold uses this, including in its headers, so we need it installed. 2024-10-09 12:46:40 -04:00
Clifford Yapp 5759ffc9de Add some notes on how to handle switching between bext versions in a clone. 2024-10-02 16:04:34 -04:00
Clifford Yapp 0d3c74b69a List opennurbs_windows_targetver.h header 2024-09-25 10:27:17 -04:00
Clifford Yapp 71d9114419 Adjust patches for newer opennurbs - this succeeds, but should update the last few to reset the line offsets. 2024-09-24 16:43:31 -04:00
Clifford Yapp b6472f23c3 Update OpenNURBS to v8.10.24228.13001 2024-09-24 10:43:53 -04:00
Clifford Yapp 2f91d60a8c Update GeometricTools to 7adae93f8 2024-09-24 10:38:05 -04:00
Clifford Yapp 5db058e750 Update Asset Import Library to v5.4.3 2024-09-24 10:35:31 -04:00
Clifford Yapp 33c1bb2f7b Update GDAL to v3.9.2 2024-09-24 10:30:54 -04:00
Clifford Yapp 2b4dd2c226 Update PROJ to v9.5.0 2024-09-24 10:28:07 -04:00
Clifford Yapp 256cc9af17 Update SQLite to v3.46.1 2024-09-24 10:25:05 -04:00
Clifford Yapp 0ace428b5d Update lmdb to 9c9d345 2024-09-24 10:18:21 -04:00
Clifford Yapp 9795274864 Update libtiff to v4.7.0 2024-09-24 10:15:04 -04:00
Clifford Yapp fc7ddc31ab Update to netpbm v10.86.42 2024-09-24 10:10:08 -04:00
Clifford Yapp 98c7dc83ce Update LIEF to v0.15.1 2024-09-24 10:01:17 -04:00
Clifford Yapp 981b347657 Switch LIEF submodule to point at RELEASE branch 2024-09-24 10:00:35 -04:00
Clifford Yapp 637467b27b Update AStyle to v3.6.2 2024-09-24 09:52:02 -04:00
Clifford Yapp a7cf15c27c Update bext libpng to v1.6.44 2024-09-24 09:46:51 -04:00
Clifford Yapp 7b8f87a428 Merge branch 'main' into RELEASE 2024-09-23 12:25:46 -04:00
Clifford Yapp 544ddc86fd Update gdal to SHA1 6caa025977 2024-09-23 12:25:38 -04:00
Clifford Yapp ba294f7468 Merge branch 'main' into RELEASE 2024-09-20 15:00:32 -04:00
Clifford Yapp 5df71de0b6 Adjust Tk settings 2024-09-20 15:00:14 -04:00
Clifford Yapp d7ddb270ac Merge branch 'main' into RELEASE 2024-09-20 14:11:31 -04:00
Clifford Yapp 17f5b95371 Add cad_enable check for Tk 2024-09-20 14:10:14 -04:00
Clifford Yapp a5cae2177c Merge branch 'main' into RELEASE 2024-09-20 13:59:28 -04:00
Clifford Yapp 0a21754eb3 Add cad_enable check for Itk 2024-09-20 13:59:03 -04:00
Clifford Yapp f91a4ca64e Merge branch 'main' into RELEASE 2024-09-20 12:06:12 -04:00
Clifford Yapp b85a7a0fd8 Depending on configure settings, libdm and liboptical can use Tcl. 2024-09-20 12:05:13 -04:00
Clifford Yapp 2907a171ff Update UtahRLE to get dll export pattern update 2024-09-17 18:20:27 -04:00
Clifford Yapp b2f8f492fe Update UtahRLE to get dll export pattern update 2024-09-17 18:19:55 -04:00
Clifford Yapp 687ff98a23 Learned a way from CMake discourse forum to get CMAKE_SHARED_LIBRARY_SUFFIX in a script. 2024-09-12 19:51:40 -04:00
Clifford Yapp 42f9e40c12 Merge branch 'main' into RELEASE 2024-09-12 19:33:23 -04:00
Clifford Yapp bbaf1808ae Try patches to avoid problems loading Dll on Windows
The JavaCheck.cmake test was failing on Windows.  Starting from the
known working 7.38.2 BRL-CAD version, worked through the changes and it
looks as if these were the "poison pills."

Not 100% sure of the reason for the failure, but it looks like we may be
able to disable the code in question.  Post effects don't seem to be
used by the code paths we're interested in.  The 3dm attribute change is
a little riskier and needs testing.
2024-09-12 16:44:22 -04:00
Clifford Yapp 515e4e710c Note info identified so far on OpenNURBS.dll loading issue. 2024-09-12 16:18:20 -04:00
f4alt f930acc096 improve clarity
try to make it a bit more clear to first-time builders that this should
be the install location (not the build dir), and the path should end at
bext_output
2024-09-12 09:50:38 -04:00
f4alt 72c70f8f3d internal directories have been removed from brlcad main 2024-09-12 09:50:38 -04:00
Clifford Yapp 3d22937cff Since we have to feed command line parameters, print them back out so we can see if anything needs quoting. 2024-09-11 12:02:45 -04:00
Clifford Yapp 84bba8b858 Looks like find_package will run in CMake's -P script mode - leverage it. 2024-09-11 11:54:57 -04:00
Clifford Yapp cf70529670 Add a script to help test dynamic library loading with Java 2024-09-11 11:22:58 -04:00
Clifford Yapp b116cfb258 Patch was malformed 2024-09-09 15:57:27 -04:00
Clifford Yapp 0a3725b628 Yikes. Let's see if we can back the minimum CMake used by LIEF back to 3.18 - 3.24 is quite aggressive. 2024-09-09 14:03:03 -04:00
Clifford Yapp 3353d241f0 Looks like the BSD define isn't working for brlcad.org - try __FreeBSD__ 2024-09-09 13:24:49 -04:00
Clifford Yapp 357a60863f Adjust LoadLibrary cmake script 2024-09-09 12:56:35 -04:00
Clifford Yapp 08248d2897 Fix variable type 2024-09-09 12:43:15 -04:00
Clifford Yapp 6a6d279d4e Fix generator expression syntax 2024-09-09 12:42:11 -04:00
Clifford Yapp 59d1e24e68 Fix path 2024-09-09 12:41:02 -04:00
Clifford Yapp 288e25ef39 First cut at logic to check LoadLibrary behavior with output dlls. 2024-09-09 12:25:52 -04:00
Clifford Yapp 5aaa811f04 Merge branch 'main' into RELEASE 2024-08-31 21:09:51 -04:00
Clifford Yapp 05c22d73f0 Geogram is being used by librt now - not an extra. 2024-08-31 21:09:37 -04:00
f4alt c57507eb2a has to match lib and find_package lower-case 2024-08-27 08:34:15 -04:00
Clifford Yapp c7be60c83b Merge branch 'main' into RELEASE 2024-08-23 22:18:43 -04:00
Clifford Yapp 485cc715e8 Match BRL-CAD FindGTE.cmake file 2024-08-23 16:25:35 -04:00
Clifford Yapp 0872937a11 Update GeometricTools to latest upstream 2024-08-23 16:09:38 -04:00
Clifford Yapp de0df334c0 Set CMP0144 policy to NEW for asset import library 2024-08-22 16:11:15 -04:00
Clifford Yapp 3ff2164b31 Add mmesh submodule 2024-08-19 15:57:28 -04:00
Clifford Yapp 602ac5fb94 Stub in logic for BRL-CAD/mmesh building 2024-08-19 14:29:46 -04:00
Clifford Yapp 39d5d44888 typo 2024-08-19 09:31:52 -04:00
Clifford Yapp 78bce3133a Debug Linux build is hitting disk space issues - disable USE_GDAL 2024-08-16 08:52:11 -04:00
Clifford Yapp aa836fcc63 Add SDK usr/lib to LIBRARY_PATH on Mac for Tcl
Initial clone is failing on an in-build-dir checkout, unable to compile
because it can't find the System lib.
2024-08-14 17:18:13 -04:00
Clifford Yapp cef79c3022 Add SDK usr/lib to LIBRARY_PATH on Mac for Tcl
Initial clone is failing on an in-build-dir checkout, unable to compile
because it can't find the System lib.
2024-08-14 17:16:58 -04:00
Clifford Yapp 696eff58be Try @rpath instead of @executable_path for libtcl
(cherry picked from commit 95696c206e)
2024-08-14 11:27:25 -04:00
Clifford Yapp 50de3088c7 Need find_package(TCL) for TCL_INCLUDE_PATH 2024-08-06 21:13:05 -04:00
Clifford Yapp 0e17d83856 Whoops, need to set TCL_SOURCE_DIR if we found tcl/tcl 2024-08-06 20:59:23 -04:00
Christopher Sean Morrison 21b72aaab2 verb instead of noun, rename TargetDeps to RegisterDeps.
make it a smidge more clear what this macro is doing in the call sites.  document it also and detangle the side effect from its core purpose.
2024-08-06 18:05:14 -04:00
Christopher Sean Morrison 7bebe2a504 need quotes 2024-08-06 17:01:05 -04:00
Christopher Sean Morrison c5c6821632 replace the range with a minimum.
subsequent logic assumes there will be dirs and products like tcl86, so likely needs more work.  probably inadequate if we find a system 8.7+ for example, but we at least use vars which are hopefully set during find_package().
2024-08-06 16:58:56 -04:00
Clifford Yapp f607741abf Add commented out logic for SPSR repository
Not adding the submodule yet - need to be sure this can actually work -
but looking to use the "header only" mode of SPSR added to upstream code
to replace the bundled copy in BRL-CAD.

Once it is demonstrated to be working, add the submodule and uncomment
in dependencies.cmake
2024-08-06 15:14:40 -04:00
Clifford Yapp 1c367b9338 Add patching option to try and make Itcl build more robust to missing private headers. 2024-08-06 13:26:23 -04:00
Clifford Yapp 4d5e8db0c7 Persist our ENABLE_ALL setting after the first CMake run 2024-08-06 12:46:01 -04:00
Clifford Yapp 979ca2e7a4 Fix variable name 2024-08-06 12:46:01 -04:00
Christopher Sean Morrison 6f9914ca14 fix BSD compilation issue.
fcloseall() on BSD returns void, so can't directly use it as a return on a function that returns int.  instead of manually rolling a version that reports how many were closed, we just close all and say 0 (aiming to avoid any error-checking callers while still closing all handles).
2024-08-06 10:19:58 -04:00
Clifford Yapp 95696c206e Try @rpath instead of @executable_path for libtcl 2024-08-05 19:30:03 -04:00
Clifford Yapp b12f5a30c0 Add GeometricTools as a bext module
This is preliminary - setting up to replace our copies of "ported" GTE
algorithms with calls to the upstream copies directly.  The key part of
GTE for our use case is header only, so treating it like Eigen and
staging it in noinstall.
2024-07-31 16:58:15 -04:00
Christopher Sean Morrison 55652f1d98 remove unused patch 2024-07-26 22:54:36 -06:00
Christopher Sean Morrison f39a5b0997 remove unused patch 2024-07-26 22:54:19 -06:00
Christopher Sean Morrison 157a1a7e7b Fix linux build failure affecting tcl/tk, make jobserver related.
Build was failing during Tcl install phase, which was a plain
"make install" and resulting in an error:

make[3]: *** read jobs pipe: Bad file descriptor.  Stop.
make[3]: *** Waiting for unfinished jobs....

This error is related to the make jobserver feature, pointing at
a likely cmake bug in the generated make logic, or a bug in make
itself, or an OS named pipe bug.  Bug encountered on VMs as well
as OpenSuse Linux (which may or may not have been a VM).

Unexpected workaround was to actually add the -j flag to the make
calls which disables jobserver mode on recursive make invocations.
Took that opportunity to enforce -j1 on install calls to avoid
any possibility of output race ordering on what should be an
I/O-bound build stage.
2024-07-26 20:41:20 -06:00
Christopher Sean Morrison 968a13c432 Fix linux build failure affecting tcl/tk, make jobserver related.
Build was failing during Tcl install phase, which was a plain
"make install" and resulting in an error:

make[3]: *** read jobs pipe: Bad file descriptor.  Stop.
make[3]: *** Waiting for unfinished jobs....

This error is related to the make jobserver feature, pointing at
a likely cmake bug in the generated make logic, or a bug in make
itself, or an OS named pipe bug.  Bug encountered on VMs as well
as OpenSuse Linux (which may or may not have been a VM).

Unexpected workaround was to actually add the -j flag to the make
calls which disables jobserver mode on recursive make invocations.
Took that opportunity to enforce -j1 on install calls to avoid
any possibility of output race ordering on what should be an
I/O-bound build stage.
2024-07-27 02:39:10 +00:00
Clifford Yapp 06ee31fce8 Merge branch 'main' into RELEASE 2024-07-26 18:11:58 -04:00
Clifford Yapp d22fbac295 Always build Tcl in series, not parallel - parallel building appears to be problematic in some environments 2024-07-26 18:11:43 -04:00
Clifford Yapp c03b2bd41c Merge branch 'main' into RELEASE 2024-07-13 00:47:25 -04:00
Clifford Yapp 7302a8ab38 Need to install uuid.h header 2024-07-13 00:47:09 -04:00
Clifford Yapp ffbeab6759 Merge branch 'main' into RELEASE 2024-07-12 20:47:51 -04:00
Clifford Yapp 60d8417540 Looks like clang static analyzer build needs -latomic 2024-07-12 20:47:40 -04:00
Clifford Yapp 541f65e180 Merge branch 'main' into RELEASE 2024-07-12 14:22:28 -04:00
Clifford Yapp 24a5e3844f Build both static and shared lmdb libs 2024-07-12 14:21:13 -04:00
Clifford Yapp 6f3de9da78 Merge branch 'main' into RELEASE 2024-07-12 08:22:03 -04:00
Clifford Yapp ffefe2f779 Need build types for Windows builds 2024-07-11 15:49:57 -04:00
Clifford Yapp 675de3d66e Remove --single-branch to support older Git versions 2024-07-11 15:40:08 -04:00
Sean Morrison e4f40da2f2 single-branch is not a valid option on git 2.20.4 2024-07-11 12:39:09 -07:00
Clifford Yapp a7c15d14df Back up Manifold to last successful CI build version
See https://stackoverflow.com/a/8813266/2037687 for how this is done.
Upstream has been notified of a problem when building with Debug config
on Windows, so until then stick with the older version.
2024-07-10 14:51:26 -04:00
Clifford Yapp c0435ce1f4 Put local itcl3 dir first 2024-07-10 11:19:40 -04:00
Clifford Yapp 561eab15a7 Hmm. Simplify to try and get the tmate session to trigger 2024-07-10 10:48:37 -04:00
Clifford Yapp 53c65285e1 Try to make sure Itk always has the internal Itcl headers 2024-07-10 10:46:08 -04:00
Clifford Yapp 943d33711e Try adding an interactive Linux option for bext 2024-07-10 09:25:41 -04:00
Clifford Yapp 0938d6f4da Specify build type for Windows CMake configure 2024-07-09 21:45:31 -04:00
Clifford Yapp 43c3239a4c Whoops, missed a MANIFOLD_EXCEPTIONS check 2024-07-09 21:32:47 -04:00
Clifford Yapp ab640fadfe vec DECL was changed in recent glm - change the def to match the old expanded version. 2024-07-09 20:10:45 -04:00
Clifford Yapp 920ec5dd04 Patch manifold build for OSX 2024-07-09 17:08:23 -04:00
Clifford Yapp bf58700777 Update RELEASE to include manifold upstream changes through b817d07 2024-07-02 20:09:55 -04:00
Clifford Yapp 3258da3917 Remove reference to header not present in repository 2024-06-28 18:44:54 -04:00
Clifford Yapp cba7f6cd90 Looks like we may not need the dynamic zstd, disable to try and avoid Windows build issue. 2024-06-28 15:02:58 -04:00
Clifford Yapp 4167ad7da6 Make sure AStyle compiles C++17 for string_view 2024-06-28 12:13:44 -04:00
Clifford Yapp 481505e796 Update to latest osmesa SHA1 2024-06-28 10:10:27 -04:00
Clifford Yapp 79beea1bc9 Looks like art doesn't need these - try turning off to see if we can avoid the Windows build issue. 2024-06-27 22:00:29 -04:00
Clifford Yapp 264722d045 Fix ast patch 2024-06-27 18:36:10 -04:00
Clifford Yapp bc9516ba98 Remove poly2tri - should be superceded in BRL-CAD by detria 2024-06-27 18:25:54 -04:00
Clifford Yapp c6ef344ce5 Missed a crc32 in the llvm_z_brl patch 2024-06-27 14:49:37 -04:00
Clifford Yapp 4277666e7a Update ISPC to v1.24.0 and OSPRay to v3.1.0 2024-06-26 21:09:46 -04:00
Clifford Yapp 0df2709eec Get latest appleseed changes
This combination of LLVM, OSL and Appleseed compiles on Linux, and will
build the art binary on Linux.  However, art output is incorrect - it
produces only a black silhouette with moss.g  Going ahead and
committing progress thus far since we seem to be relatively close to
getting it working.
2024-06-26 17:11:59 -04:00
Clifford Yapp 3d4f8f1e96 Update OSL to v1.13.10.0 2024-06-26 17:11:41 -04:00
Clifford Yapp 5d0ba73b59 Update LLVM to v18.1.8 2024-06-26 17:11:06 -04:00
Clifford Yapp 896e27bd6e Add missing STRCASECMP define to GDAL patch 2024-06-26 17:02:51 -04:00
Clifford Yapp 033d5e5b2a Add FindZLIB.cmake back into opennurbs CMake patch 2024-06-26 16:57:03 -04:00
Clifford Yapp 0ed488b5ac Tweak to help Appleseed find Eigen 2024-06-26 16:36:19 -04:00
Clifford Yapp 25c74f1e32 Update patches for OSL v1.13.10.0 2024-06-26 16:22:36 -04:00
Clifford Yapp b2df8bdb06 Update patches for LLVM 18 2024-06-26 14:07:23 -04:00
Clifford Yapp 9999edf0d2 Update Qt to v6.7.2 2024-06-26 10:44:00 -04:00
Clifford Yapp fd00536b0d Update embree patch for new sources 2024-06-25 19:46:03 -04:00
Clifford Yapp 918141c701 Update embree to v4.3.2 2024-06-25 19:42:18 -04:00
Clifford Yapp 732955ba5f Update geogram to v1.9.0 2024-06-25 19:40:26 -04:00
Clifford Yapp 5fbc05d675 Update patches for latest OpenNURBS
Also making a stab at trying to get our CMakeLists.txt closer to the
upstream file.  Still significant differences, but trying to work
towards minimizing them for easier updating.
2024-06-25 16:55:09 -04:00
Clifford Yapp 6e75eb24ab Update OpenNURBS to v8.8 2024-06-25 15:02:26 -04:00
Clifford Yapp dbb444eceb Update manifold to v2.5.1 2024-06-25 10:59:50 -04:00
Clifford Yapp aa5a700789 Update OpenMesh to v11.0 2024-06-25 10:36:45 -04:00
Clifford Yapp 22b322d57e Update opencv patch for v4.10.0 2024-06-25 10:33:05 -04:00
Clifford Yapp 5901c2086e Update OpenCV to v4.10.0 2024-06-25 10:17:44 -04:00
Clifford Yapp 0c4efb911f Update asset import patch for new version 2024-06-25 10:11:53 -04:00
Clifford Yapp 7073f5e21d Update Asset Import Library to v5.4.1 2024-06-25 10:08:00 -04:00
Clifford Yapp 1f3c5b17df Update GDAL to v3.9.0 2024-06-25 10:04:53 -04:00
Clifford Yapp 1baa0805d8 Update PROJ patch for new version 2024-06-25 09:50:48 -04:00
Clifford Yapp c27d75f3fa Update PROJ to v9.4.1 2024-06-25 09:45:53 -04:00
Clifford Yapp 86457b6614 Update sqlite3 to v3.46.0 2024-06-25 09:40:27 -04:00
Clifford Yapp 0ee1183d84 Update rkcommon to v1.13.0 2024-06-25 09:37:26 -04:00
Clifford Yapp 43842f962c Update oneTBB to v2021.12.0 2024-06-25 09:34:48 -04:00
Clifford Yapp 18627d5a8e Update lmdb to upstream ddd0a77 2024-06-25 09:30:20 -04:00
Clifford Yapp d00f5b18e1 We don't want OpenImageIO running the generate step every time, since it repeates the full build. 2024-06-25 09:27:30 -04:00
Clifford Yapp a712d631c5 Update OpenImageIO to v2.5.12.0 2024-06-25 09:14:39 -04:00
Clifford Yapp 7b051c101b Update OpenColorIO to v2.3.2 2024-06-24 21:28:20 -04:00
Clifford Yapp 8cb0a1c56d Update openexr to v3.2.4 2024-06-24 21:23:39 -04:00
Clifford Yapp b5f00f5a90 Update libjpeg-turbo to v3.0.3 2024-06-24 21:16:38 -04:00
Clifford Yapp 813e093e28 Update netpbm to 10.86.41 (no change for BRL-CAD subset) 2024-06-24 21:14:23 -04:00
Clifford Yapp eb5a34f461 Update Boost to v1.85.0 2024-06-24 20:59:02 -04:00
Clifford Yapp 3c561a6824 Pull in revert of ICU use of auto in template - causing xerces-c build error 2024-06-24 20:49:45 -04:00
Clifford Yapp e69b1fbc76 Update xerces-c to v3.2.5 2024-06-24 20:37:42 -04:00
Clifford Yapp 2301c69e6d Update ICU to v75.1 2024-06-24 20:24:58 -04:00
Clifford Yapp 4d9afc50bb Update expat patch to more precisely match latest sources 2024-06-24 20:16:05 -04:00
Clifford Yapp 32efb3d026 Update libexpat to v2.6.2 2024-06-24 20:13:11 -04:00
Clifford Yapp d37692aa1e Update fmt LICENSE filename 2024-06-24 20:08:31 -04:00
Clifford Yapp 16f6b5bf82 Update fmt to v10.2.1 2024-06-24 20:07:07 -04:00
Clifford Yapp 9208181d63 Update libdeflate to v1.20 2024-06-24 20:04:19 -04:00
Clifford Yapp 86fb7d34a9 Update minizip-ng to version 4.0.7 2024-06-24 19:57:22 -04:00
Clifford Yapp 5a5e05f5f6 Update zstd to v1.5.6 2024-06-24 19:24:59 -04:00
Clifford Yapp fc2e3c1e07 Update plief to work with latest LIEF upstream 2024-06-24 13:16:57 -04:00
Clifford Yapp 7cbaac4a28 Apply patch for uint64_t type 2024-06-24 12:16:56 -04:00
Clifford Yapp 53cd231363 Update LIEF to 2b68ae5 2024-06-24 11:54:57 -04:00
Clifford Yapp 46c81075fc Update AStyle to v3.5 2024-06-24 11:42:58 -04:00
Clifford Yapp 37d9a2763c Note source of winflexbison 2024-06-24 11:27:31 -04:00
Clifford Yapp d9a36cfb97 Update sb_patch to 47e1729 2024-06-24 11:21:53 -04:00
Clifford Yapp e4c8422a8a Separate the actual project listings into their own file 2024-06-24 11:11:21 -04:00
Clifford Yapp 73a04e14d0 Limit the build types the same way we do for BRL-CAD proper. If multiple configs are desired, one should use multiple build directories and different CMAKE_INSTALL_PREFIX targets. 2024-05-22 15:56:12 -04:00
Clifford Yapp e1fb40ab83 Provide feedback on what is being checked 2024-05-21 16:19:29 -04:00
Clifford Yapp 8646398a31 Adjust dllcheck target 2024-05-21 16:17:44 -04:00
Clifford Yapp dd2a46e07e See if we can cobble together a CMake target to test the dll types of bext outputs, to try and catch if a given project's build logic isn't giving us binaries built using the right config. 2024-05-21 16:04:51 -04:00
Clifford Yapp 5a343665f0 See if we can avoid messing with MD/MD on Windows
Getting test failures in BRL-CAD debug mode on Windows with assert
failures coming from Geogram - indications hunting around are this might
be a consequence of mixing MD and MT.  Try removing the logic that
messes with those settings explicitly in Geogram.
2024-05-16 19:18:05 -04:00
Clifford Yapp 71f137b6d6 Update gdal submodule 2024-05-15 13:59:28 -04:00
Clifford Yapp b9abe63d8d Update geogram submodule 2024-05-10 23:09:04 -04:00
Clifford Yapp 59398dce43 Tweak FindASSETIMPORT so the bundled reporting works 2024-05-09 20:45:10 -04:00
Clifford Yapp 080bbbbc1a Ignore CMakeUserPresets.json 2024-05-09 10:13:37 -04:00
Clifford Yapp dff0841d48 Update manifold submodule 2024-05-08 15:36:07 -04:00
Clifford Yapp 9a99031190 System LIEF isn't working right now 2024-05-08 15:23:53 -04:00
Clifford Yapp 4ab303c820 At least on ubuntu, there is a system liblief-dev package available. 2024-05-08 11:32:03 -04:00
Clifford Yapp ffdfb216a8 If the narrow searches don't find asset import, search more broadly. 2024-05-08 11:24:57 -04:00
Clifford Yapp 2356a7431d Still incorrect syntax 2024-04-29 15:04:51 -04:00
Clifford Yapp 495ea6e414 Incorrect syntax 2024-04-29 15:01:34 -04:00
Clifford Yapp 2b298323a6 Try installing Xquartz on OSX runners
Not sure exactly what happened yet, but main BRL-CAD CI suddenly reports
a Tk build failure on OSX when trying to look for Xlib.h, and there
haven't been any recent changes that I would expect to impact the bext
Tk build unless the Github runner environment has somehow changed.

Since we're not properly supporting Tk aqua, we really do need to do a
Tk X11 build if we're going to properly test our OSX configuration.
This tries out the https://stackoverflow.com/q/63648591/2037687 solution
2024-04-29 14:47:31 -04:00
Clifford Yapp 98a776cf44 Update setup-msbuild version 2024-04-29 14:43:34 -04:00
Clifford Yapp ad7e168a8c Hmm. Quick test of mmesh in librt didn't quite work - back out for now. 2024-04-22 20:15:53 -04:00
Clifford Yapp 2ccad66558 Add basic build files for mmesh 2024-04-22 15:54:11 -04:00
Clifford Yapp c342f95d3e Add mmesh submodule 2024-04-22 15:37:22 -04:00
Clifford Yapp e3fa21f04b Some OSX experiments hint that maybe the Geogram rpath settings are an issue for BRL-CAD's post-processing of the libs after copy? 2024-04-19 18:21:56 -04:00
Clifford Yapp f3b731dd51 Fix geogram superlu build warning on OSX. 2024-04-19 17:16:43 -04:00
Clifford Yapp 20f801ba2e Stop the Eigen build from doing export(PACKAGE)
We definitely don't want Eigen registering its build location with
CMake's find_package.  That's been good for some hilarity with the
BRL-CAD build...  I think we've got the build systems not using the
package registry, but even so let's not do this...

See https://cmake.org/cmake/help/latest/manual/cmake-packages.7.html#user-package-registry
for more info about the CMake User Package Registry
2024-04-16 20:41:34 -04:00
Clifford Yapp b0a2baef8d Getting weird Eigen find_package results due to find_package using the User Package Registry with stale info... disable looking there 2024-04-16 16:52:10 -04:00
Clifford Yapp e7b9880cbb Install the uuid.h header from android_uuid for opennurbs_system.h 2024-04-13 17:22:56 -04:00
Clifford Yapp ba24458387 Try wrapping Tcl configure and build steps the way we wrap Qt 2024-04-11 19:10:59 -04:00
Clifford Yapp c9c2a73cd6 Report output directory 2024-04-09 16:41:52 -04:00
Clifford Yapp c793b273a6 Add TODO file for bext 2024-04-09 13:46:25 -04:00
Clifford Yapp 055c7eb5b2 Use a variable to control the license output directory 2024-04-01 15:55:35 -04:00
Clifford Yapp 40ff1b465b Tweak bext_enable to see if we can use it with the cad_enable function. 2024-04-01 11:27:28 -04:00
Clifford Yapp cc241b036b First step in reducing boilerplate code in subprojects for enable/disable. Eventually want to get better about certain aspects of this, and refactoring this into common logic should help... 2024-04-01 11:01:12 -04:00
Clifford Yapp b6267a0e93 Update to latest utahrle submodule 2024-03-29 17:14:48 -04:00
Clifford Yapp 8f7516154f Don't let expat mess with its filename - that seems to be confusing the OpenColorIO build on Windows in Debug config. 2024-03-27 23:10:29 -04:00
Clifford Yapp 2da0457f56 Right... We can't just build Release with a Windows Debug build. 2024-03-27 20:20:13 -04:00
Clifford Yapp 62a03401c1 Update openimageio version to v2.5.9.0, update patch file 2024-03-27 15:00:47 -04:00
Clifford Yapp 62a736cc67 Debug building on Linux for LLVM is also problematic space wise. Let's just not do this - let the user know what's happening and why via configure message. 2024-03-27 10:32:47 -04:00
Clifford Yapp af131132e9 Need to think a little more about how to manage this - if ENABLE_ITK gets set to off, that sticks even if higher level settings change... 2024-03-27 08:10:55 -04:00
Clifford Yapp b30bd9f527 Windows debug flags were failing on Linux. These expressions can be tricky - make another try, but don't know if this works correctly on MSVC 2024-03-26 22:18:33 -04:00
Clifford Yapp 3344175dea Embree needs ISPC when we're doing the OSPRay build, but afaik doesn't requier it for Appleseed. Need to make this a conditional dep somehow, but for now just remove it. 2024-03-26 20:55:48 -04:00
Clifford Yapp dfb27be0b4 Try turning off a number of LIEF options. 2024-03-25 15:48:11 -04:00
Clifford Yapp 54bd914ff1 See if we can make bext configure respond to a BRLCAD_COMPONENTS list 2024-03-25 13:27:47 -04:00
Clifford Yapp 2f3a221d45 Add a note about shallow cloning and the tradeoffs. 2024-03-19 13:46:11 -04:00
Clifford Yapp 850421c5fa Adjust options 2024-03-19 13:18:08 -04:00
Clifford Yapp 489137979b CI runners appear to be bumping up against space constraints - put the challow clones back for that use case. 2024-03-19 13:02:02 -04:00
Clifford Yapp aa0d0e8bfb Correct which files we're checking for to spot populated repositories. 2024-03-19 11:40:03 -04:00
Clifford Yapp c2083b90fd Back off of using shallow clones
The checkout size, particularly when LLVM is involved, isn't drastically
smaller and the shallow clones act oddly when we try to do things other
that just a simple build.  Go simple unless there is some more
compelling advantage than checkout size.
2024-03-18 14:20:22 -04:00
Clifford Yapp b7caaa8a3e Disable building manifold tests 2024-03-18 13:04:40 -04:00
Clifford Yapp a595fbf590 Disable GDAL test building 2024-03-18 11:35:09 -04:00
Clifford Yapp f34ddb1097 Update osmesa submodule 2024-03-15 16:11:41 -04:00
Clifford Yapp a7ac6300ab Looking at more recent openNURBS upstream CMakeLists.txt, android_uuid isn't built with MSVC. 2024-03-15 16:09:44 -04:00
Clifford Yapp fdadaca0df Update osmesa submodule 2024-03-15 09:08:43 -04:00
Clifford Yapp 5efb97311f Update osmesa to latest upstream 2024-03-14 22:17:30 -04:00
Clifford Yapp 98aa0d9193 && syntax isn't used in powershell 2024-03-14 21:36:13 -04:00
Clifford Yapp 2899f1556a Try using powershell for the ninja build 2024-03-14 21:31:00 -04:00
Clifford Yapp 1d0275f150 Try to make sure we have unistd.h for OSX 2024-03-14 20:09:15 -04:00
Clifford Yapp 36d36de6a6 See if we can make the doc disabling patches more mimimalist 2024-03-14 19:53:10 -04:00
Clifford Yapp f8cdad5e93 Disable install of Tcl and Tk man pages 2024-03-14 11:08:40 -04:00
Clifford Yapp e18c072673 Note packages needed for Qt6 on Rocky Linux 8 2024-03-08 15:29:57 -05:00
Clifford Yapp 07e9c328af Bump Qt to 6.6.2 2024-03-08 00:28:42 -05:00
Clifford Yapp 0b9a6bb2b5 Warn if we have changed build settings and a populated bext_output 2024-03-07 20:30:56 -05:00
Clifford Yapp 8ff7d51859 Update enabled and disable projects based on changes in USE_* flags. 2024-03-07 16:47:57 -05:00
Clifford Yapp d9e846aca3 Update manifold to latest upstream 2024-03-07 12:25:09 -05:00
Clifford Yapp 52b2b62ad9 Try the same trick we use with geogram for Windows .lib 2024-03-07 12:24:21 -05:00
Clifford Yapp d67a290cca Update manifold to latest upstream 2024-03-07 12:07:08 -05:00
Clifford Yapp b46d051e1d Update manifold to latest upstream 2024-03-07 11:56:03 -05:00
Clifford Yapp 56e3221f9d Set some GLM variables 2024-03-07 11:55:23 -05:00
Clifford Yapp 7ce694f8cb Need MANIFOLD_EXPORT=ON for glb writing 2024-03-07 11:30:03 -05:00
Clifford Yapp 1c55f603e9 Run the vcvars bat file for Tcl/Tk
We appear to need this when using the stand-alone CMake GUI and Visual
Studio.  Not sure how this will work in other environments - we may have
to get smarter about when we do or don't use VCVARS_BAT based on what
CMake environment and/or build tools we are using...
2024-03-06 21:10:01 -05:00
Clifford Yapp 488f15defe We still need to respect SQLite3_ROOT 2024-03-06 19:47:31 -05:00
Clifford Yapp ab34dd4119 Adjust zlib.h include in zlib1.rc 2024-03-06 19:13:45 -05:00
Clifford Yapp 3cab8dc142 Put back the zlib prefix logic. 2024-03-06 18:25:35 -05:00
Clifford Yapp 77839da3e6 Adjust zlib patch 2024-03-06 17:31:42 -05:00
Clifford Yapp 4db1dafc99 Update Tcl/Tk to 8.6.14 2024-03-06 17:12:19 -05:00
Clifford Yapp 6ca530c966 Release mode building isn't working for assetimport library due to this line. 2024-03-06 16:22:55 -05:00
Clifford Yapp c6ca10036f Update GDAL to v3.8.4 2024-03-06 12:23:11 -05:00
Clifford Yapp 9bc084a2cd Update PROJ to v9.4.0 2024-03-06 12:22:39 -05:00
Clifford Yapp b056af9f68 Update to netpbm version 10.86.40 2024-03-06 11:23:08 -05:00
Clifford Yapp 3e7b37b263 Update OpenCV to version 4.9.0 2024-03-06 11:18:07 -05:00
Clifford Yapp a99ae416d8 Update sqlite3 to version 3.45.1 2024-03-06 11:05:46 -05:00
Clifford Yapp 81f3ddcad4 Pull in fix for CVE-2022-45748 2024-03-06 11:03:22 -05:00
Clifford Yapp 22a06c6fa7 Update libpng to v1.6.43 2024-03-06 10:55:46 -05:00
Clifford Yapp 2b0b2ea2db Just turn off the examples in configure rather than patching. 2024-03-06 10:42:11 -05:00
Clifford Yapp dfdae10719 Update zlib to version 1.3.1 2024-03-06 10:29:35 -05:00
Clifford Yapp 3dd7c37bd3 Need to specify BRLCAD_EXT_DIR location now if not letting BRL-CAD's configure do the work. 2024-02-16 21:38:26 -05:00
Clifford Yapp f9257a855b Same deal with Itk - see if we can find the necessary headers 2024-02-16 19:12:36 -05:00
Clifford Yapp 130614bda8 Try to find private Tcl hdrs in the system install for Itcl 2024-02-16 19:05:27 -05:00
Clifford Yapp 3697110a37 Don't define Z_PREFIX here - precludes using a system zlib 2024-02-16 15:41:43 -05:00
Clifford Yapp 1ce0f10240 Fix zlib patch 2024-02-16 15:11:55 -05:00
Clifford Yapp 39b869fd2b opennurbs patches weren't working with system patch on Ubuntu 2024-02-16 14:54:05 -05:00
Clifford Yapp 0ccc8074c0 BUILD_ALWAYS was off in src/other, but it probably makes more sense to default it to on for bext, since the whole point of this repository is building these projects. 2024-02-12 16:38:42 -05:00
f4alt c1e676f44e fix weird interaction with cmake value checking
on windows, cmake is interpreting the empty string as a set value which
causes problems in eigen/blas/CMakeLists.txt. Instead, correlate the
value with a 'false'
2024-02-12 12:58:03 -05:00
f4alt 01c306b547 need to force cmake to generate geogram.lib file 2024-02-12 12:43:59 -05:00
Clifford Yapp b954a90444 Update manifold to version with exported MeshGL 2024-02-12 10:19:23 -05:00
Christopher Sean Morrison b05b713926 try turning off .pdb and .ilk generation. 2024-02-08 10:00:51 -05:00
Clifford Yapp 8b5308a9ab Hmm. Getting a mismatch detected error when building ged-bot on Windows - looks like MT_StaticRelease from geogram and MD_DynamicRelease in bot.obj. Doubt it's this simple (in fact it is more likely to cascade into things like dll export issues), but try making add_library explicitly SHARED. 2024-01-27 01:07:08 -05:00
Clifford Yapp e28d1e8171 More glm bits for manifold 2024-01-27 00:53:37 -05:00
Clifford Yapp cad6fc4c1c Update manifold to latest RELEASE sha1 2024-01-27 00:47:42 -05:00
Clifford Yapp 57356a4cfc Restore manifold submodule 2024-01-27 00:25:54 -05:00
Clifford Yapp eb6981287c manifold submodule is in an odd state - clear 2024-01-27 00:24:05 -05:00
Clifford Yapp bc44104642 Geogram, like OpenNURBS, needs to be flagged as needing the SYSTEM include directive in CMake. 2024-01-26 19:07:38 -05:00
Clifford Yapp c983a5a698 Add a note about updating BRLCAD_Summary.cmake 2024-01-26 19:03:56 -05:00
Clifford Yapp a714bd50f7 Note where to add logic in BRL-CAD build for locating Geogram. 2024-01-26 18:57:17 -05:00
Clifford Yapp c56f028a1f Call out dependency files in directory structure description. 2024-01-25 16:46:25 -05:00
Clifford Yapp 65122bd5c9 USE_BRLCAD_EXTRA is on by default. 2024-01-25 16:42:56 -05:00
Clifford Yapp d376cbc451 Document USE_BRLCAD_EXTRA option 2024-01-25 16:40:42 -05:00
Clifford Yapp dda8450465 Add a note to check system vs bundled dependency building after the dust settles. 2024-01-25 16:11:05 -05:00
Clifford Yapp 8ed40ff7df Update worked geogram example notes through submodule setup. 2024-01-25 16:00:54 -05:00
Clifford Yapp 07d979f758 Add geogram geometry library to bext 2024-01-25 15:52:38 -05:00
Clifford Yapp 435833499d Start documenting geogram prep 2024-01-25 11:20:39 -05:00
Clifford Yapp 5f4fdd0b52 Start documenting the process of adding a brand new dependency to bext 2024-01-24 22:56:59 -05:00
Clifford Yapp 4c5d5810c8 Again, avoid crazy excaping for empty path quotes. 2024-01-24 11:31:09 -05:00
Clifford Yapp c9feaf93fd Add a different way to suppress the debug suffix
The quoting for passing the empty argument through the various CMake
layers wasn't working as expected - the quotes ended up incorporated
into the library .so filename.
2024-01-24 11:20:58 -05:00
Clifford Yapp 5c654c65cb Escape quote chars for passing into configure .cmake scripts. Hopefully will clear the "Argument not separated from previous token by whitespace" errors from PNG_BLD-configure-.cmake and OPENCV_BLD-configure-.cmake 2024-01-23 15:50:34 -05:00
Clifford Yapp 7e03f93823 Try a higher C++ standard for openmesh to see if that helps building on Mac. 2024-01-19 09:36:22 -05:00
Clifford Yapp 810b6f7155 Pull manifold ASSETIMPORT fix into bext 2024-01-12 15:19:40 -05:00
Clifford Yapp 8b3557af9d Require C++ 11 for openmesh 2023-12-21 19:34:49 -05:00
Clifford Yapp 62fd313b3f Update manifold build to use assetimport 2023-12-21 19:34:27 -05:00
Clifford Yapp 16e881242a Manifold debugging logic depends on assetimport 2023-12-21 18:46:47 -05:00
Clifford Yapp 171d6e3126 Update remainder of dependencies. ENABLE_ALL builds on Linux, but these versions have not been tested with BRL-CAD yet. 2023-12-21 14:52:24 -05:00
Clifford Yapp 0477b558bf Update OpenImageIO. May need to set up a local copy of robin-map - right now I think it's downloading it from https://github.com/Tessil/robin-map 2023-12-21 13:22:58 -05:00
Clifford Yapp 52cb2a1bf8 Add DARWIN define for strdup 2023-12-21 12:52:19 -05:00
Clifford Yapp cad7db63d0 Fix HAVE_UNISTD_H check 2023-12-21 12:14:08 -05:00
Clifford Yapp 1fab22d730 Looks like we still need this compiler bug workaround 2023-12-21 12:01:39 -05:00
Clifford Yapp f4172ea19c Pull in Windows fixes for netpbm build 2023-12-21 11:32:27 -05:00
Clifford Yapp f046dbf328 Tweak BRL-CAD opennurbs CMakeLists.txt file
Switching to the upstream CMake might have some implications that need
more careful study - in the meantime, see if we can tweak our build file
to add the libs and flags they're using.
2023-12-21 10:51:51 -05:00
Clifford Yapp 0606bbe687 Update netpbm submodule 2023-12-21 10:01:11 -05:00
Clifford Yapp df57ac4e31 Update OpenColorIO submodule and patch 2023-12-21 10:00:04 -05:00
Clifford Yapp e0796651f7 Update OpenMesh submodule 2023-12-20 14:43:16 -05:00
Clifford Yapp 189312068d Update netpbm submodule 2023-12-20 14:42:03 -05:00
Clifford Yapp 0802564789 Update PROJ and GDAL submodules 2023-12-20 14:40:54 -05:00
Clifford Yapp 2a3f35af62 Update submodules for LIEF and lmdb 2023-12-20 13:39:02 -05:00
Clifford Yapp b0220ecf03 Fix CMakeLists.txt patch, mods for BSD building 2023-12-20 13:24:37 -05:00
Clifford Yapp c61f3f1fc5 Start working on updating to 8.x openNURBS branch
Rhino 8 is out, so we need to look at making the jump to the 8.x branch.
This is a first cut at updating the patch files.  Note that the 8.x
branch has CMake logic already in place, so we need to look at minimally
modding what is there rather than overwriting to use our original
CMakeLists.txt file (which is what opennurbs_cmake.patch is currently
doing.)

The lock, lookup and statics patches are disabled, but currently left in
place until we're sure we don't need some variant of them in the new
code.
2023-12-20 12:08:38 -05:00
Clifford Yapp 78b4afd758 Try to strip RTC1 out of Debug configs
The main Qt build does this, but it looks like the qtsvg build isn't
doing it - patch to try and match the main Qt build's behavior for
removing RTC1
2023-12-20 10:33:42 -05:00
Clifford Yapp 88de8fe3fe Remove debug printing 2023-12-20 10:33:16 -05:00
Clifford Yapp ebfbfa59f0 Update png submodule and patch for v1.6.40 2023-12-19 21:08:03 -05:00
Clifford Yapp 8261440869 Did a lot of submodule updates in the BRL-CAD/* projects, which will break patching and potentially building in bext. Start introducing the updates gradually with patch and astyle 2023-12-19 19:17:50 -05:00
Clifford Yapp f3b623c922 Remove VCVARS_BAT from qt install script 2023-12-19 18:47:55 -05:00
Clifford Yapp 15795b327f See if we can remove VCVARS_BAT from the Tcl/Tk build as well. 2023-12-19 14:37:51 -05:00
Clifford Yapp 488afe1a2f See if we can set up the dev environment beforehand
Running the vcvars64.bat script via CMake doesn't seem to be working for
some reason, so try https://github.com/orgs/community/discussions/26887
from the yml file
2023-12-19 12:00:35 -05:00
Clifford Yapp 506d601379 Looks like VCVARS_BAT is the only path where Program Files is present. Can TO_NATIVE_PATH help here? 2023-12-19 10:34:32 -05:00
Clifford Yapp a3b77bceab Update qt to 6.6.1 2023-12-19 10:25:29 -05:00
Clifford Yapp b770656915 Try pre-populating the CMAKE_COMMAND string 2023-12-19 09:57:15 -05:00
Clifford Yapp b5d3c54bc9 Try to get a look at the configured qt_build.cmake file as produced by MSVC CI runners 2023-12-18 20:03:49 -05:00
Clifford Yapp f8f1bc5be1 Quote CMAKE_COMMAND in case of spaces in paths 2023-12-18 12:06:19 -05:00
Clifford Yapp bfca445dfa Update bext manifold submodule to latest 2023-12-18 10:45:26 -05:00
f4alt 4355f15780 update submodule reference for appleseed 2023-12-06 09:02:08 -05:00
f4alt e8dd79ebf1 update NOTES url's 2023-12-06 08:57:56 -05:00
f4alt 8acda1ba26 appleseed depends on eigen 2023-12-06 08:57:30 -05:00
Clifford Yapp 653166ab5d Shorten config names 2023-12-01 11:55:01 -05:00
Clifford Yapp 1e3e39ee1a Chris reports issues building Debug on Windows - try adding configs for both Debug and Release to CI to see if we can spot issues. 2023-12-01 11:52:26 -05:00
f4alt aa3a7266ec point to our fork of appleseed 2023-12-01 08:28:57 -05:00
f4alt 3a0ec2db83 build appleseed without tools
there's some uglyness in here on windows that we'll probably
want to run down eventually (for tools like the denoiser). For now, just
punt and turn them off to get a clean build.
2023-12-01 08:26:01 -05:00
Clifford Yapp 064df41294 Need the XCB dev packages for Qt building 2023-11-29 11:06:48 -05:00
Clifford Yapp f9d668ca95 Another NOTES adjustment 2023-11-29 08:51:47 -05:00
Clifford Yapp 61fcdff5d0 Tweaks for NOTES file 2023-11-29 08:50:30 -05:00
Clifford Yapp cffda40fb3 Add tiff to GDAL deps, enable JPEG as part of the GDAL stack. 2023-11-29 08:42:52 -05:00
Clifford Yapp 407e36c4d0 We're not counting on the fortran parts of Eigen afaik, so we don't want to worry about it if we have a busted fortran compiler... 2023-11-29 08:36:22 -05:00
Clifford Yapp 3c424cb46a ALL isn't the right target here... 2023-11-29 08:30:26 -05:00
Clifford Yapp 27c3b51018 Try tweaking opennurbs_defines patch 2023-11-29 08:27:47 -05:00
Clifford Yapp f6ef868926 Looks like there's a v4 of checkout 2023-11-28 19:42:15 -05:00
Clifford Yapp 0cf3e09127 Add a Github Actions file for bext
Not at all sure how this is going to go - it's quite likely we won't be
able to do this (at least, with ENABLE_ALL=ON) once Appleseed and OSPray
are on, but for now let's see if we can have Github do build testing for
us when we update dependencies.
2023-11-28 19:35:02 -05:00
Clifford Yapp 3a094e18c9 Remove the non-CMake parts of the assetimport patch - not applying to the newer version. 2023-11-28 19:25:39 -05:00
Clifford Yapp 08e402cd73 Update URLs 2023-11-28 19:20:43 -05:00
Clifford Yapp e7f1390d17 Incorporate latest BRL-CAD change into patch 2023-11-08 09:51:56 -05:00
Clifford Yapp c646752092 For completeness, show the GDAL update in bext after BRL-CAD/gdal is updated. 2023-11-03 14:11:30 -04:00
Clifford Yapp 00ffbf0434 Update GDAL submodule reference 2023-11-03 14:09:19 -04:00
Clifford Yapp 23bb902bf6 Add some notes and examples on updating dependencies 2023-11-03 14:08:22 -04:00
Clifford Yapp 863f833b85 Update submodule references for AssetImport, LIEF and Qt 2023-11-03 13:54:42 -04:00
Clifford Yapp 2fde8fa13b Turn on appleseed git submodule logic 2023-10-30 12:49:35 -04:00
Clifford Yapp eb903dea68 Point appleseed submodule to the working archive 2023-10-30 12:25:13 -04:00
Clifford Yapp 32877632fb Update manifold submodule 2023-10-30 12:21:19 -04:00
Clifford Yapp bc8068290e Add Manifold to the bext repository 2023-10-30 11:43:46 -04:00
Clifford Yapp 81ba092910 Merge pull request #2 from brlcad/mac-fixes
few more Mac build fixes
2023-10-23 13:54:23 -04:00
Christopher Sean Morrison e40f7403f7 use cmake vars. use escapes to quell a warning 2023-10-23 01:12:51 -04:00
Clifford Yapp 77e453e93f Need to list TCL in deps for TCL_TARGET variable setting 2023-10-12 13:16:28 -04:00
Clifford Yapp 51605ecabe Merge pull request #1 from brlcad/patch-1
fix sub-cmake invocation in execute_process()
2023-10-12 12:52:43 -04:00
Christopher Sean Morrison 1af78b420a don't assume it's just cmake
Use a variable for the path/name of the cmake process.
2023-10-12 11:36:49 -04:00
Clifford Yapp 3c26b04211 Re-add tcl submodule pointing to latest RELEASE commit 2023-10-11 19:51:45 -04:00
Clifford Yapp 2e82ef6cef Remove Tcl submodule - having trouble updating
For some reason the status is reporting it pointing to the core tag,
rather than RELEASE...
2023-10-11 19:49:43 -04:00
Clifford Yapp 51c3f8052b Correct color 2023-10-11 14:11:38 -04:00
Clifford Yapp 283be11213 Adjust a few links 2023-10-11 10:42:49 -04:00
Clifford Yapp aaa40c251b Add some instructions for the dependencies DOT file 2023-10-11 10:29:57 -04:00
Clifford Yapp 1994011c7e Missed lmdb.deps file 2023-10-11 10:16:46 -04:00
Clifford Yapp 29547c2d96 Add remainder of deps files 2023-10-11 10:14:38 -04:00
Clifford Yapp f294e635cf Correct macro name 2023-10-11 10:02:08 -04:00
Clifford Yapp 0a1fabbf55 Add some info about changing branch targets for submodules. 2023-10-11 09:50:39 -04:00
Clifford Yapp 3f618421ed Update some more deps listings 2023-10-11 09:43:00 -04:00
Clifford Yapp 6d75bf6352 Start a file with some notes on adding submodules - we're going to need to document how this works in detail. 2023-10-11 09:40:23 -04:00
Clifford Yapp ff306731f6 Try again, this time using 'git submodule add -b RELEASE https://github.com/BRL-CAD/tcl.git' 2023-10-11 09:16:32 -04:00
Clifford Yapp 4de75d599f Hmm, still getting the wrong branch 2023-10-11 09:12:03 -04:00
Clifford Yapp 12d47fb2bb Re-add Tcl submodule 2023-10-11 08:59:23 -04:00
Clifford Yapp ec4966a47f Clear Tcl submodule 2023-10-11 08:56:10 -04:00
Clifford Yapp 164a8b316c Add a few more directories to the new deps setup 2023-10-11 00:42:29 -04:00
Clifford Yapp f1f74a19a7 First stages of generating graphviz dot file - still haven't changed over all dependencies to new logic yet. 2023-10-11 00:30:44 -04:00
Clifford Yapp 400846ffa2 Start working on a graphviz dot file to visualize dependency trees 2023-10-10 23:20:48 -04:00
Clifford Yapp 93d63d9c31 Pass the build static libs flag to openNURBS 2023-10-06 16:45:35 -04:00
Clifford Yapp cec7700615 Make it easier to skip some of the optional BRL-CAD dependencies. 2023-10-05 15:34:09 -04:00
Clifford Yapp 0f48167965 For now, disable OSL shaders and tests build
The tests make sense to turn off, but it's less clear long term if we
really want to disable the shader building.

The immediate motivation is that oslc isn't running correctly in the
build on Windows.  So far it looks as if this is because the directory
containing the oslc.exe executable doesn't have all the dlls it needs -
if we copy oslc.exe and its dlls into the bin directory for
bext_output/install we do get as far as printing the help message (which
does NOT happen with its current location.)  We can probably get past
this by patching the OSL build to copy the dll files from bext_output
into the right place up front, but not bothering with that right now
since it's not 100% sure yet that we need the shaders build for our
purposes.
2023-10-05 12:39:45 -04:00
Clifford Yapp 6b297ce98c Correct names in README 2023-09-29 15:04:17 -04:00
Clifford Yapp 88f88424a5 Don't bother with opencv .gitignore 2023-09-29 13:50:30 -04:00
Clifford Yapp 7d7635f7e1 Add OpenEXR to the OpenColorIO dependency list 2023-09-29 09:37:47 -04:00
Clifford Yapp 67a8798132 This directory holds both install and noinstall contents, so name it generically 2023-09-28 23:32:20 -04:00
Clifford Yapp 7af56f874d Correct rpath setting for other noinstall tools 2023-09-28 23:28:53 -04:00
Clifford Yapp 379d51d2d7 Since we're already in a subdir, no need for the ext prefix 2023-09-28 23:10:35 -04:00
Clifford Yapp f5f7605877 xmltools is a noinstall build 2023-09-28 23:01:51 -04:00
Clifford Yapp c7ee093617 Turn off OSPRay examples - requires glfw3 2023-09-28 19:12:49 -04:00
Clifford Yapp 7438e0ba6e Try shared libraries for ncurses 2023-09-28 07:56:02 -04:00
Clifford Yapp 3a3a06f6c5 Just use the Qt internal solution, if that ends up working
Looking to be some trouble to wire our zlib/png into the build, so just
go with Qt's own solution to the issue (if it works.)
2023-09-27 21:36:24 -04:00
Clifford Yapp cb13149531 If we're going to patch qtbase, we need to copy it 2023-09-27 21:11:13 -04:00
Clifford Yapp 3074ac7213 Print output on success as well. 2023-09-27 20:59:57 -04:00
Clifford Yapp 67fe3a3a9c Use LD_LIBRARY_PATH for Qt build step as well. 2023-09-27 20:43:32 -04:00
Clifford Yapp 7eba290299 Call out system zlib and png in Qt configure 2023-09-27 20:25:16 -04:00
Clifford Yapp 0040a59fb8 Patch our modded FindZLIB and FindPNG into Qt
Not 100% sure this will be enough - to do this right we also need to get
ZLIB_ROOT and PNG_ROOT into the Qt configure - but if I'm understanding
correctly that that configure is triggering a CMake process then we want
it looking for our filenames.
2023-09-27 20:16:39 -04:00
Clifford Yapp 8aed6ae33b Start a file for setup instructions
The quick start assumes a system with the necessary dependencies in
place, but unlike the old-school BRL-CAD build we can't stand up these
software stacks without a sizable set of development packages in place.
Need to collect the instructions on how to do that somewhere, since we
aren't aiming to bootstrap things like fontconfig/freetype or XCB X11.
2023-09-27 20:07:31 -04:00
Clifford Yapp ab5a8ddc5e Check return for other steps as well 2023-09-27 19:44:32 -04:00
Clifford Yapp 0b192b855b Check return value of execute_process for qt configure 2023-09-27 19:36:44 -04:00
Clifford Yapp 52ae347952 Adjustments for OSL program linking
This likely needs more refinement for the non-ENABLE_ALL case, but looking like
we need to explicitly link in LLVMSupport and zlib
2023-09-27 10:10:01 -04:00
Clifford Yapp 233489de4b Need our FindZLIB for OSL as well. 2023-09-27 07:28:13 -04:00
Clifford Yapp 0f7ea2ea5c If asset import is going to use external pugixml, reorder and flag for BRLCAD 2023-09-26 20:56:15 -04:00
Clifford Yapp c741da34d2 Testing on a vanilla Ubuntu VM is helpful - patch minizip-ng to use the modded FindZLIB that looks for z_brl 2023-09-26 20:52:14 -04:00
Clifford Yapp e5e3cdfd2f Look for OpenEXR, not Imath 2023-09-26 09:59:19 -04:00
Clifford Yapp a43472c05f Look for OpenEXR, not Imath 2023-09-25 21:06:29 -04:00
Clifford Yapp f47f7e3635 We want to use find_package on Windows as well. 2023-09-25 14:15:35 -04:00
Clifford Yapp 683f1cd35e Cast to int to help fmt figure out what to do with these... 2023-09-25 13:32:05 -04:00
Clifford Yapp 42b642d827 On Windows key off of FLEX_BLD, since winflexbison does both... 2023-09-25 13:14:26 -04:00
Clifford Yapp 7756abc26f Explicitly look for win_* versions of flex/bison 2023-09-25 12:02:43 -04:00
Clifford Yapp 326dc9b364 Rather than changing component listings, use new lookup for Boost 2023-09-25 11:55:04 -04:00
Clifford Yapp 10928ea64e Our bundled Boost is newer - use the new methodology 2023-09-25 11:35:51 -04:00
Clifford Yapp 4a52c78dc5 Not creating a python.lib file - add declspec logic 2023-09-25 11:20:03 -04:00
Clifford Yapp b19d0d4857 adjustments to opencolorio build 2023-09-25 11:01:43 -04:00
Clifford Yapp 9e9c70b63c check if we have the target before adding to the link libraries 2023-09-25 10:13:14 -04:00
Clifford Yapp e61ca03011 See if we can use the copy of pugixml we're building for assetimport 2023-09-23 11:29:49 -04:00
Clifford Yapp 673cf5e019 Don't treat Qt6Svg separately, dependency wise - for us it's basically a part of the Qt build. 2023-09-23 10:08:22 -04:00
Clifford Yapp 244acf7d55 Have opencolorio link zstd 2023-09-23 10:05:00 -04:00
Clifford Yapp 3b25e1e2fa Couple fixes to CMake logic 2023-09-22 18:38:02 -04:00
Clifford Yapp bf3df6058b Don't special case PATCH in the dependencies
Got bitten with winflexbison, so that's a good hint to do what's cleaner
in the first place - treat patch the way we do any other subproject.
2023-09-22 18:33:07 -04:00
Clifford Yapp d34700b6f8 Patch comes before flexbison 2023-09-22 16:46:59 -04:00
Clifford Yapp 43f44fc85b Fix Appleseed dependency on ONETBB 2023-09-22 16:31:04 -04:00
Clifford Yapp 93c54e18ea Try using ncurses with ISPC 2023-09-22 15:01:01 -04:00
Clifford Yapp c15e5496de This generation step is failing on MSVC - see if we can just disable it. Excluding the custom rule from the target in Visual Studio did allow the rest of the LLVM build to succeed. 2023-09-22 12:55:26 -04:00
Clifford Yapp db7401ae04 Do the same for INCLUDEDIR - append :PATH suffix 2023-09-22 12:50:06 -04:00
Clifford Yapp 0ce18f4639 Specify LIBDIR is a PATH
Per a note in libjpeg's building instructions:

If setting one of these directory variables to a relative path using the
CMake command line, you must specify that the variable is of type `PATH`.
For example:

    cmake -G"{generator type}" -DCMAKE_INSTALL_LIBDIR:PATH=lib {source_directory}

Otherwise, CMake will assume that the path is relative to the build directory
rather than the install directory.
2023-09-22 12:47:18 -04:00
Clifford Yapp 3d7e32dd3d Try to more uniformly set LIB_DIR on installation 2023-09-22 12:01:32 -04:00
Clifford Yapp 9f96916716 Avoid having git status check submodules
For this repository, the files were are maintaining are not the submodules but
the build logic and patch files.  If we've cloned all the submodules the file
hierarchy is rather large and a status check can be needlessly slow - use the
ignore submodule directive to focus the command on the relevant parts of the
repository.
2023-09-22 11:22:50 -04:00
Clifford Yapp d7ea9b12b4 Add an integrity check to make sure we're adding subdirectories in the right order according to the dependency declarations. 2023-09-22 11:17:22 -04:00
Clifford Yapp 39c58e9921 Boost needs to come before OpenImageIO 2023-09-22 10:51:02 -04:00
Clifford Yapp 44773d6927 See if we can turn off ZSTD for our LLVM use case
Yikes.  ZSTD is causing linking failures when trying to build on
Windows, and hunting around online finds a long history of problems with
the CMake build setup for this use case... see, for example:

https://github.com/llvm/llvm-project/issues/58558

Not quite sure yet what properties aren't getting set on the imported
targets to cause NOTFOUND entries to try and get linked.  If we do need
ZSTD I'll have to try and follow the logic flow through the LLVM CMake
and prepare a patch.
2023-09-21 21:12:42 -04:00
Clifford Yapp 7bd5a3e976 Fix upstream has ICU working - restore plief
https://github.com/lief-project/LIEF/issues/969 was resolved, and that
was the only known breakage with plief - restore.  However, at least for
the moment we'll leave patchelf in the tree (commented out) for
insurance.
2023-09-21 20:07:38 -04:00
Clifford Yapp 377ff05fc8 For the moment, use master instead of RELEASE for LIEF while we're working out issues. 2023-09-21 19:42:07 -04:00
Clifford Yapp 6f63e2f9a3 ISPC apparently wants the AArch64 backend 2023-09-21 16:06:38 -04:00
Clifford Yapp 40819ab189 Explain why this particular setting is in a cache file 2023-09-21 15:00:52 -04:00
Clifford Yapp 21065f656f Python isn't just an ISPC problem - needed by LLVM
Arrgh.  LLVM's CMake logic is executing python scripts to do things like
path manipulation.  Short of trying to rework all their python scripts
into native CMake and get the patches accepted, we're going to need
Python to do BOTH the Appleseed and OSPRay builds.
2023-09-21 14:45:17 -04:00
Clifford Yapp 3bf778b276 Try to limit the targets LLVM builds for - need to figure out what we actually need. Starting with ARM and X86. 2023-09-21 14:31:15 -04:00
Clifford Yapp 8eabc42641 Adjust z_brl patch for LLVM 2023-09-21 14:00:00 -04:00
Clifford Yapp 7079e41cf7 Use lower case zstd 2023-09-21 11:55:35 -04:00
Clifford Yapp 2a940d3492 Try turning on optimized tablegen 2023-09-21 11:04:04 -04:00
Clifford Yapp 71b4edac9e LLVM linking is memory hungry - per https://llvm.org/docs/CMake.html use LLVM_PARALLEL_JOBS to throttle. 2023-09-21 10:55:55 -04:00
Clifford Yapp 3f9c8c052c Add ZSTD to the llvm target list 2023-09-21 10:27:33 -04:00
Clifford Yapp a34245bab4 Adjust pystring CMake file 2023-09-21 09:03:42 -04:00
Clifford Yapp 16175fd4e1 Fix oneTBB target name 2023-09-20 22:00:12 -04:00
Clifford Yapp 62598fdc01 Adjust/fix poly2tri patch file 2023-09-20 21:51:06 -04:00
Clifford Yapp 74eaa00d11 rkcommon needs TBB_ROOT 2023-09-20 21:38:22 -04:00
Clifford Yapp c48c639999 Mark new submodules as shallow 2023-09-20 21:18:38 -04:00
Clifford Yapp ca5fe9ebca Remove doc submodule 2023-09-20 20:59:59 -04:00
Clifford Yapp 3814669101 Add the OSPRay dependencies and OSPRay itself 2023-09-20 20:55:31 -04:00
Clifford Yapp e050f65ae7 Put back patchelf until LIEF/plief bug is resolved
Welp.  Since patchelf works, restore it until the LIEF+icv issue is
sorted out.
2023-09-20 20:53:51 -04:00
Clifford Yapp 02004553ca Add a note about the xerces-c + icu situation
I thought it was a problem on either the xerces-c or icu end, but it
looks like the real problem may be with LIEF - BRL-CAD uses it to assign
RPATH values, and the libicuuc.so file produced by that process didn't
work whereas the same operation performed with patchelf produced a
working .so output.  Reported upstream at
https://github.com/lief-project/LIEF/issues/969
2023-09-20 18:52:27 -04:00
Clifford Yapp 929c181281 GROUPS can take multiple arguments 2023-09-20 15:22:22 -04:00
Clifford Yapp 24074b261f xerces-c needs to be able to find both icu libs
Problem was a little different than I thought - xerces-c wasn't
correctly linking to the icu libraries because libicuuc needs its data
library, and without the rpath help it can't find it in the non-standard
location when it comes time to link - problem manifested when xerces-c
was built with its test applications, so not a BRL-CAD specific problem.
Setting LD_LIBRARY_PATH also resolved the issue, making it clear the
problem was finding the needed libraries.

Needs a full clean build test, but setting the install RPATH for
xerces-c seems to work in initial testing.
2023-09-20 14:30:37 -04:00
Clifford Yapp 263d95e166 Ubuntu source pkg build of this lib mentions not using the renaming option 2023-09-20 14:06:43 -04:00
Clifford Yapp 37afe79b20 Add control files for Appleseed build 2023-09-20 00:19:13 -04:00
Clifford Yapp 9c8585d2af Add Embree for Appleseed (and eventually OSPRay) 2023-09-19 23:22:04 -04:00
Clifford Yapp 839d69ca04 Get OSL building (apparently we need more of LLVM than previous settings were installing... 2023-09-19 22:59:51 -04:00
Clifford Yapp 4c39d0140b Add OpenColorIO and OpenImageIO for Appleseed 2023-09-19 21:32:29 -04:00
Clifford Yapp 83a85bad6d Add OpenEXR for Appleseed 2023-09-19 21:13:36 -04:00
Clifford Yapp 743ce65e8d Explain what happens after boost fork is updated. 2023-09-19 20:42:44 -04:00
Clifford Yapp 7b47e8f1e6 Add an explanation for how we handle the upstream boost and our fork of it to provide a usable CMake build of Boost for this repo. 2023-09-19 20:39:11 -04:00
Clifford Yapp 6a94470f5a Add Boost for Appleseed
Per the following:

ldd *boost*.so |grep -v linux-vdso|grep -v libstdc|grep -v libc|grep -v libm|grep -v ld-linux|grep -v libgcc

ALl the library linkages seem to be local- we've disable bzip2 and lzma,
as well as using the bundled zlib, zstd and icu.
2023-09-19 20:25:07 -04:00
Clifford Yapp 57a506219a Enable git check 2023-09-19 16:55:15 -04:00
Clifford Yapp 4636bcc964 Add LLVM for Appleseed (and eventually OSPRay) 2023-09-19 16:49:52 -04:00
Clifford Yapp e7d217ad9c Add oneTBB for Appleseed (and eventually OSPRay) 2023-09-19 10:22:33 -04:00
Clifford Yapp 968a7f915d If we're going to add libtiff, GDAL should use it too. 2023-09-19 10:04:13 -04:00
Clifford Yapp e0981a5884 Add git init function call for jpeg 2023-09-19 10:01:23 -04:00
Clifford Yapp 1a9eaff9f8 Add libtiff for Appleseed 2023-09-19 10:01:09 -04:00
Clifford Yapp 102e96efdd Flag Appleseed for libpng 2023-09-19 09:50:31 -04:00
Clifford Yapp 0fcadf6ed1 Add libjpeg-turbo (for Appleseed) 2023-09-19 09:49:52 -04:00
Clifford Yapp 5f4bdd7f0d More README adjustments 2023-09-18 23:06:10 -04:00
Clifford Yapp 99b039de81 Adjust README 2023-09-18 23:00:40 -04:00
Clifford Yapp 007857634b For our purpose here, shallow clones are preferred 2023-09-18 22:40:47 -04:00
Clifford Yapp 9d343ed826 Experiment with shallow cloning of submodules
We're essentially using submodules here as source management, not really
intending to do major development within the submodule repositories.
That being the case, let's see if shallow clones can do the job with
less time and space.
2023-09-18 22:13:28 -04:00
Clifford Yapp 4163a3fef1 xerces-c needs icu, at least on some platforms 2023-09-18 22:09:03 -04:00
Clifford Yapp 06f427cf5c Unless we actually need it, turn of network support in xerces-c 2023-09-18 21:35:01 -04:00
Clifford Yapp fd003224f6 Add various XML libraries for Appleseed 2023-09-18 21:24:17 -04:00
Clifford Yapp a98783681b Add fmt, yaml-cpp and pystring for Appleseed 2023-09-18 21:05:59 -04:00
Clifford Yapp 32bf25c31c Add libdeflate (for Appleseed) 2023-09-18 20:54:48 -04:00
Clifford Yapp 5c3a79d396 Only copy the license if the folder is populated 2023-09-18 20:49:57 -04:00
Clifford Yapp 431be0ba23 Add lz4 compression library (for Appleseed) 2023-09-18 20:49:25 -04:00
Clifford Yapp 95f0d972e5 Add minizip-ng (for Appleseed) 2023-09-18 20:44:20 -04:00
Clifford Yapp d61a8d3b21 Add flex and bison for Appleseed
Unfortunately, flex and bison still use autotools to build, which may be
problematic on some systems... need to figure out what to do if that
proves to be an issue.
2023-09-18 19:55:19 -04:00
Clifford Yapp 3831566982 Start setting the stage for Appleseed/OSPRay 2023-09-18 18:52:38 -04:00
Clifford Yapp aecf03e24a Add a note about why we're patching lemon and what we need to do instead. 2023-09-18 17:27:46 -04:00
Clifford Yapp e9bbb3f165 Patch to disable parts of re2c build needing Python 2023-09-18 17:09:04 -04:00
Clifford Yapp c2eb239da2 Like LIEF, don't build the plief tool on platforms where we don't need it. 2023-09-18 16:45:34 -04:00
Clifford Yapp 0d3ae5240d Poly2Tri needs the patch tool 2023-09-18 16:28:34 -04:00
Clifford Yapp c496ccb189 Would help to apply the patch on Windows... 2023-09-18 16:04:25 -04:00
Clifford Yapp fbe282c331 Release tarball has populated manifest.uuid
Looks as if this needs to be present or Windows Tk build tries to
generate it.
2023-09-18 16:02:14 -04:00
Clifford Yapp 9b06b06c67 Remove .git directory from tk src folder
Not 100% sure yet, but it looks as if the Windows Tk build is doing
something different if the source directory looks like a git repository.
2023-09-18 15:28:30 -04:00
Clifford Yapp 07566fd1f1 Patch SQLite find logic for PROJ 2023-09-18 15:18:13 -04:00
Clifford Yapp aef908c072 Adjust readme 2023-09-18 14:49:07 -04:00
Clifford Yapp 0ea850b5f4 If we're patching, need to copy source dir 2023-09-18 14:25:18 -04:00
Clifford Yapp 0676c5e399 Pull latest versions from BRL-CAD 2023-09-18 13:56:10 -04:00
Clifford Yapp c9972f8935 Add Find modules 2023-09-18 13:52:41 -04:00
Clifford Yapp 86689dcf9e Add a note that recurse-submodules is optional 2023-09-18 13:46:41 -04:00
Clifford Yapp 43341b67b0 Fix directories, remove DEPENDS from ExternaProject_Add - the latter are handled by the ExternalProject_Add step dependencies 2023-09-18 13:44:12 -04:00
Clifford Yapp 7aa219949f Experiment with lazily populating git submodules based on configure settings 2023-09-18 13:39:34 -04:00
Clifford Yapp 652a1f4877 Make lemon match current version in BRL-CAD (temporary)
wfobj's obj_grammer.yy doesn't work with the newest lemon - need to fix
that, but until we do add a patch to step it down to the working
version.
2023-09-17 21:02:41 -04:00
Clifford Yapp 8d9fe660b3 Add Qt6 2023-09-17 20:45:52 -04:00
Clifford Yapp b7b9316883 Set up Tcl/Tk components 2023-09-17 20:28:03 -04:00
Clifford Yapp 32361423bf Make sure all the projects have a URL 2023-09-17 14:57:00 -04:00
Clifford Yapp 1471ac8ace Add other BRL-CAD dependencies - should just leave Tcl and Qt 2023-09-17 14:54:42 -04:00
Clifford Yapp e6399eb176 Add openNURBS 2023-09-17 14:35:10 -04:00
Clifford Yapp 71c34c0acb Add OpenMesh 2023-09-17 14:27:54 -04:00
Clifford Yapp 1e4968a4f8 Enable OpenCV 2023-09-17 13:03:35 -04:00
Clifford Yapp 1782525344 Add Asset Import Library 2023-09-17 12:56:43 -04:00
Clifford Yapp ccae111380 Add GDAL and its dependencies 2023-09-17 12:45:56 -04:00
Clifford Yapp 20f3eab18a Add STEPcode 2023-09-17 12:15:32 -04:00
Clifford Yapp af0f9188bc Add Eigen 2023-09-17 12:02:47 -04:00
Clifford Yapp a2d320d9f8 Add LMDB 2023-09-17 11:51:44 -04:00
Clifford Yapp 86ad7a1a6e Add regex and linenoise 2023-09-17 11:34:47 -04:00
Clifford Yapp 1ae5b1b532 Add netpbm to the build
The BRL-CAD github netpbm repository is being used to hold our mods in a
"brlcad" branch.  The netpbm repository is arguably the cleanest
solution thus far to the problem of maintaining our netpbm mods - it
simplified the 10.73.42 -> 10.73.43 check considerably.
2023-09-17 01:33:41 -04:00
Clifford Yapp de54617f0c Enable the zlib and png builds 2023-09-17 00:47:48 -04:00
Clifford Yapp 55fef0df33 Populate top level CMake modules directory 2023-09-16 23:39:55 -04:00
Clifford Yapp dfb7832267 In the case of these two, find_program is enough 2023-09-16 23:38:01 -04:00
Clifford Yapp 5a90876f5f Add xmltools 2023-09-16 23:26:04 -04:00
Clifford Yapp 83d5d17256 Add strclear utility 2023-09-16 23:20:26 -04:00
Clifford Yapp 05f70c0c46 Add plief utilty for RPATH manipulation using LIEF 2023-09-16 22:44:32 -04:00
Clifford Yapp c53167db54 Add perplex scanner generator 2023-09-16 22:34:45 -04:00
Clifford Yapp 1e7708183a Default lemon location for lempar.c is next to binary 2023-09-16 22:20:43 -04:00
Clifford Yapp 984f05bf9a Add re2c lexer generator 2023-09-16 22:11:10 -04:00
Clifford Yapp 1fdddeab2e Add LEMON parser generator 2023-09-16 22:04:20 -04:00
Clifford Yapp 7048eeaac4 Fix formatting of message 2023-09-16 19:58:46 -04:00
Clifford Yapp 4a076aa916 Add a check that the repository was cloned properly, and tell the user what to do if it wasn't 2023-09-16 19:52:38 -04:00
Clifford Yapp 56ebe22921 Add LIEF submodule, using a branch as target
Adding LIEF, we want to target a release rather than the latest main
branch.  However, since the upstream doesn't use a release branch the
way BRL-CAD does and git submodules can't point at tags, we need to do
something else.

Taking advantage of the fact that we're using a BRL-CAD/LIEF fork of the
upstream https://github.com/lief-project/LIEF repository, we add in our
fork a RELEASE branch that (currently) points to the v0.13.2 tag. From
a clone of our fork:

git checkout 0.13.2
git switch -c RELEASE
git push --set-upstream origin RELEASE

Then, when adding LIEF as a submodule to bext, we target the RELEASE
branch:

git submodule add -b RELEASE https://github.com/BRL-CAD/LIEF

What this should let us do is update our fork's RELEASE branch as needed
to target new LIEF releases, with our submodule tracking our fork's
RELEASE branch rather than the live development branch.

TODO - establish the correct mechanism for updating the RELEASE branch
in our LIEF fork - probably will involve deleting and re-creating the
branch in the github repo, but may need a little experimentation.
2023-09-16 19:41:57 -04:00
Clifford Yapp f768503f55 Set up a .gitignore file
Note - deliberately leaving .clang-format off this list since some of
the repositories we are interested in expect to have this file present.
2023-09-16 19:12:18 -04:00
Clifford Yapp 760ed788fd Enable AStyle build and submodule. 2023-09-16 19:10:56 -04:00
Clifford Yapp e2ea3238f6 First test of using git submodule for the sources
Various experiments with earlier forms of this repository indicated that
as it grows, the performance of git will begin to get unwieldy as we
include more and more large source trees in one repo.  Instead, let's
see if modules can work for this particular use case.

However, rather than point directly at 3rd party repositories, we're
going to establish one level of indirection by making BRL-CAD project
forks of the upstream repositories (or, if the parent project isn't set
up to fork, establish our own as a place to hold that project's files
and updates.)  This gives us a degree of insulation should the upstream
project disappear, but (for those projects were we can properly fork)
also gives us an easy mechanism to pull updates from upstream into our
local forks.

This commit is the first test of the pattern in that it points to a
BRL-CAD/patch fork of https://github.com/shannonbooth/patch - in this
case we simply point at the default git submodule target, since this
project doesn't (yet) have a release we are targeting.
2023-09-16 18:55:10 -04:00
Clifford Yapp cb119fbf45 Initialize with README.md 2023-09-16 18:26:39 -04:00
571 changed files with 27979 additions and 45702 deletions
+1
View File
@@ -0,0 +1 @@
*.patch -whitespace
+214
View File
@@ -0,0 +1,214 @@
name: Binary dependencies
on:
push:
schedule:
- cron: '30 2 * * 3'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: false
permissions:
contents: read
env:
BEXT_ARCHIVE_RETENTION_DAYS: 90
jobs:
# Finalized package metadata retains its install prefix. runner.temp is
# stable between producer and consumer jobs on each pinned runner image.
linux_release:
name: Ubuntu GCC Release Build
runs-on: ubuntu-24.04
outputs:
artifact-id: ${{ steps.upload.outputs.artifact-id }}
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Checkout
uses: actions/checkout@v4
- name: Setup - System
env:
DEBIAN_FRONTEND: noninteractive
run: |
sudo apt-get update
# Install XCB/OpenGL dev pkgs for Qt - see:
# https://wiki.qt.io/Building_Qt_6_from_Git
# https://doc.qt.io/qt-6/linux-requirements.html
sudo apt-get install libfontconfig1-dev libfreetype6-dev libx11-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libxcb-cursor-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util-dev libxcb-xinerama0-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev
sudo apt-get install libgl-dev
sudo apt-get install libinput-dev
sudo apt-get clean
- name: Configure
run: cmake -S . -G Ninja -B build -DENABLE_ALL=ON -DGIT_SHALLOW_CLONE=ON -DCMAKE_BUILD_TYPE=Release -DEXT_BUILD_VERBOSE=ON -DCMAKE_INSTALL_PREFIX="$RUNNER_TEMP/bext_output"
- name: Build
run: cmake --build build --parallel 2 --verbose
- name: Package dependency tree
if: github.ref == 'refs/heads/main'
shell: bash
env:
BEXT_CHANNEL: ubuntu-24.04-${{ runner.arch }}-release
working-directory: ${{ runner.temp }}/bext_output
run: |
test -d install
test -d noinstall
test -f bext-install-manifest.json
cmake -E tar cfz "$RUNNER_TEMP/bext-$BEXT_CHANNEL.tar.gz" --format=gnutar install noinstall bext-install-manifest.json
- name: Upload dependency tree
if: github.ref == 'refs/heads/main'
id: upload
uses: actions/upload-artifact@v4
with:
name: bext-ubuntu-24.04-${{ runner.arch }}-release-${{ github.sha }}
path: ${{ runner.temp }}/bext-ubuntu-24.04-${{ runner.arch }}-release.tar.gz
if-no-files-found: error
retention-days: ${{ env.BEXT_ARCHIVE_RETENTION_DAYS }}
compression-level: 0
windows_ninja_release:
name: MSVC - Ninja Release build
runs-on: windows-2025
outputs:
artifact-id: ${{ steps.upload.outputs.artifact-id }}
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Checkout
uses: actions/checkout@v4
- name: Add github workspace to path
shell: pwsh
run: Add-Content -Path $env:GITHUB_PATH -Value $env:GITHUB_WORKSPACE
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v2
- name: Add cl.exe to PATH
uses: ilammy/msvc-dev-cmd@v1
- name: Configure
shell: pwsh
run: |
cmake -S . -B build -G Ninja -DCMAKE_C_COMPILER=cl.exe -DCMAKE_CXX_COMPILER=cl.exe -DCMAKE_BUILD_TYPE=Release -DENABLE_ALL=ON -DGIT_SHALLOW_CLONE=ON -DEXT_BUILD_VERBOSE=ON -DCMAKE_INSTALL_PREFIX="$env:RUNNER_TEMP/bext_output"
# Ensure generated files are flushed before compilation begins.
Write-VolumeCache C
Write-VolumeCache D
- name: Build
shell: pwsh
run: cmake --build build --parallel 2 --verbose
- name: Package dependency tree
if: github.ref == 'refs/heads/main'
shell: bash
env:
BEXT_CHANNEL: windows-2025-${{ runner.arch }}-release
working-directory: ${{ runner.temp }}/bext_output
run: |
test -d install
test -d noinstall
test -f bext-install-manifest.json
cmake -E tar cfz "$RUNNER_TEMP/bext-$BEXT_CHANNEL.tar.gz" --format=gnutar install noinstall bext-install-manifest.json
- name: Upload dependency tree
if: github.ref == 'refs/heads/main'
id: upload
uses: actions/upload-artifact@v4
with:
name: bext-windows-2025-${{ runner.arch }}-release-${{ github.sha }}
path: ${{ runner.temp }}/bext-windows-2025-${{ runner.arch }}-release.tar.gz
if-no-files-found: error
retention-days: ${{ env.BEXT_ARCHIVE_RETENTION_DAYS }}
compression-level: 0
macos_release:
name: macOS Clang Release Build
runs-on: macos-15
outputs:
artifact-id: ${{ steps.upload.outputs.artifact-id }}
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Checkout
uses: actions/checkout@v4
- name: Install Xquartz
run: brew install xquartz --cask
- name: Configure
env:
CC: clang
CXX: clang++
run: cmake -S . -G Ninja -B build -DENABLE_ALL=ON -DGIT_SHALLOW_CLONE=ON -DCMAKE_BUILD_TYPE=Release -DEXT_BUILD_VERBOSE=ON -DCMAKE_INSTALL_PREFIX="$RUNNER_TEMP/bext_output"
- name: Build
run: cmake --build build --parallel 2 --verbose
- name: Package dependency tree
if: github.ref == 'refs/heads/main'
shell: bash
env:
BEXT_CHANNEL: macos-15-${{ runner.arch }}-release
working-directory: ${{ runner.temp }}/bext_output
run: |
test -d install
test -d noinstall
test -f bext-install-manifest.json
cmake -E tar cfz "$RUNNER_TEMP/bext-$BEXT_CHANNEL.tar.gz" --format=gnutar install noinstall bext-install-manifest.json
- name: Upload dependency tree
if: github.ref == 'refs/heads/main'
id: upload
uses: actions/upload-artifact@v4
with:
name: bext-macos-15-${{ runner.arch }}-release-${{ github.sha }}
path: ${{ runner.temp }}/bext-macos-15-${{ runner.arch }}-release.tar.gz
if-no-files-found: error
retention-days: ${{ env.BEXT_ARCHIVE_RETENTION_DAYS }}
compression-level: 0
publish:
name: Publish dependency set
if: github.ref == 'refs/heads/main'
needs: [linux_release, windows_ninja_release, macos_release]
runs-on: ubuntu-24.04
permissions:
actions: write
contents: read
steps:
- name: Record complete dependency set
run: echo "${{ github.sha }}" > "$RUNNER_TEMP/bext-production"
- name: Upload completion marker
id: marker
uses: actions/upload-artifact@v4
with:
name: bext-production-${{ github.sha }}
path: ${{ runner.temp }}/bext-production
if-no-files-found: error
retention-days: ${{ env.BEXT_ARCHIVE_RETENTION_DAYS }}
- name: Remove superseded dependency sets
shell: bash
env:
GH_TOKEN: ${{ github.token }}
CURRENT_ARTIFACT_IDS: ${{ needs.linux_release.outputs.artifact-id }},${{ needs.windows_ninja_release.outputs.artifact-id }},${{ needs.macos_release.outputs.artifact-id }},${{ steps.marker.outputs.artifact-id }}
run: |
set -euo pipefail
artifact_pattern='^bext-((ubuntu-24\.04|windows-2025|macos-15)-(X86|X64|ARM|ARM64)-release|production)-'
artifact_rows="$(gh api --paginate "repos/$GITHUB_REPOSITORY/actions/artifacts?per_page=100" --jq '.artifacts[] | [.id, .name] | @tsv')"
while IFS=$'\t' read -r artifact_id artifact_name; do
if [[ "$artifact_name" =~ $artifact_pattern && ",${CURRENT_ARTIFACT_IDS}," != *",${artifact_id},"* ]]; then
gh api --method DELETE "repos/$GITHUB_REPOSITORY/actions/artifacts/$artifact_id"
fi
done <<< "$artifact_rows"
+256
View File
@@ -0,0 +1,256 @@
# This file defines Continuous Integration (CI) tests for bext using the
# Github Actions framework. Currently it defines configurations for Windows,
# Linux and OSX.
#
# For more information about available platforms for testing, see:
#
# https://docs.github.com/en/free-pro-team@latest/actions/reference/specifications-for-github-hosted-runners
#
# The general rule when building in CI is to go more verbose in output settings
# rather than less, since iterative debugging isn't practical.
#
# We generally want to avoid parallel building - while that will sometimes
# catch dependency issues, it also makes the outputs far harder to interpret
# when there is a problem. However, the full BRL-CAD dependency stack is quite
# a long build, so in this case we are experimenting with it to see if it can
# help our build times on the runners.
name: BRL-CAD
on: [push]
jobs:
dependency_metadata:
name: Dependency metadata and supply-chain checks
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Validate dependency metadata and documentation
run: cmake -DBEXT_SOURCE_DIR="$GITHUB_WORKSPACE" -DBEXT_DOC_MODE=CHECK -P CMake/GenerateDependencyDocs.cmake
- name: Generate SPDX SBOM
run: cmake -DBEXT_SOURCE_DIR="$GITHUB_WORKSPACE" -DBEXT_SBOM_OUTPUT="$RUNNER_TEMP/bext.spdx.json" -P CMake/GenerateSbom.cmake
- name: Upload SPDX SBOM
uses: actions/upload-artifact@v4
with:
name: bext-spdx-sbom
path: ${{ runner.temp }}/bext.spdx.json
linux_configure_presets:
name: Ubuntu Configure Preset - ${{ matrix.preset }}
runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
preset: [auto, bundled, minimal, everything]
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Checkout
uses: actions/checkout@v4
- name: Setup - System
env:
DEBIAN_FRONTEND: noninteractive
run: |
sudo apt-get update
# Install XCB/OpenGL dev pkgs for Qt - see:
# https://wiki.qt.io/Building_Qt_6_from_Git
# https://doc.qt.io/qt-6/linux-requirements.html
sudo apt-get install flex bison m4 libfontconfig1-dev libfreetype6-dev libx11-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libxcb-cursor-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util-dev libxcb-xinerama0-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev
sudo apt-get install libgl-dev
sudo apt-get install libinput-dev
sudo apt-get clean
- name: Configure
run: |
export PATH=$GITHUB_WORKSPACE:$PATH
cmake --preset ${{ matrix.preset }} -DGIT_SHALLOW_CLONE=ON -DEXT_BUILD_VERBOSE=ON
windows_ninja_debug:
name: MSVC - Ninja Debug build
runs-on: windows-latest
strategy:
fail-fast: true
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Checkout
uses: actions/checkout@v4
- name: Add github workspace to path
# https://github.community/t/deprecated-add-path/136621
run: echo "$ENV{GITHUB_WORKSPACE}" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v2
- name: Add cl.exe to PATH
uses: ilammy/msvc-dev-cmd@v1
- name: Configure
shell: powershell
run: |
cmake -S . -B build -G Ninja -DCMAKE_C_COMPILER="cl.exe" -DCMAKE_CXX_COMPILER="cl.exe" -DCMAKE_BUILD_TYPE=Debug -DENABLE_ALL=ON -DGIT_SHALLOW_CLONE=ON -DEXT_BUILD_VERBOSE=ON
# We do the following in order to help ensure files are "flushed"
# to disk before compilation is attempted
# https://superuser.com/a/1553374/1286142
powershell Write-VolumeCache C
powershell Write-VolumeCache D
- name: Build
shell: powershell
run: |
cd build; ninja -j2 -v
# TODO - if the loading isn't too extreme, it would be good to do a BRL-CAD
# build against the output of this...
# - name: Build - BRL-CAD
# run: |
# # TODO - figure out how to do this...
windows_std_tools_release:
name: MSVC - Standard Tools Release Build
runs-on: windows-latest
strategy:
fail-fast: true
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Checkout
uses: actions/checkout@v4
- name: Add github workspace to path
# https://github.community/t/deprecated-add-path/136621
run: echo "$ENV{GITHUB_WORKSPACE}" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v2
- name: Add cl.exe to PATH
uses: ilammy/msvc-dev-cmd@v1
- name: Configure
shell: cmd
run: |
cmake -S . -B build -DENABLE_ALL=ON -DGIT_SHALLOW_CLONE=ON -DCMAKE_BUILD_TYPE=Release -DEXT_BUILD_VERBOSE=ON
# We do the following in order to help ensure files are "flushed"
# to disk before compilation is attempted
# https://superuser.com/a/1553374/1286142
powershell Write-VolumeCache C
powershell Write-VolumeCache D
- name: Build
shell: cmd
run: |
cmake --build build --config Release -j2
windows_std_tools_debug:
name: MSVC - Standard Tools Debug Build
runs-on: windows-latest
strategy:
fail-fast: true
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Checkout
uses: actions/checkout@v4
- name: Add github workspace to path
# https://github.community/t/deprecated-add-path/136621
run: echo "$ENV{GITHUB_WORKSPACE}" | Out-File -Append -FilePath $env:GITHUB_PATH -Encoding utf8
- name: Add msbuild to PATH
uses: microsoft/setup-msbuild@v2
- name: Add cl.exe to PATH
uses: ilammy/msvc-dev-cmd@v1
- name: Configure
shell: cmd
run: |
cmake -S . -B build -DENABLE_ALL=ON -DGIT_SHALLOW_CLONE=ON -DCMAKE_BUILD_TYPE=Debug -DEXT_BUILD_VERBOSE=ON
# We do the following in order to help ensure files are "flushed"
# to disk before compilation is attempted
# https://superuser.com/a/1553374/1286142
powershell Write-VolumeCache C
powershell Write-VolumeCache D
- name: Build
shell: cmd
run: |
cmake --build build --config Debug -j2
linux_debug:
name: Ubuntu GCC Debug Build
runs-on: ubuntu-latest
strategy:
fail-fast: true
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Checkout
uses: actions/checkout@v4
- name: Setup - System
env:
DEBIAN_FRONTEND: noninteractive
run: |
sudo apt-get update
# Install XCB/OpenGL dev pkgs for Qt - see:
# https://wiki.qt.io/Building_Qt_6_from_Git
# https://doc.qt.io/qt-6/linux-requirements.html
sudo apt-get install libfontconfig1-dev libfreetype6-dev libx11-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libxcb-cursor-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util-dev libxcb-xinerama0-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev
sudo apt-get install libgl-dev
sudo apt-get install libinput-dev
sudo apt-get clean
- name: Configure
run: |
export PATH=$ENV{GITHUB_WORKSPACE}:$PATH
# We're running into disk space issues with the Linux debug build, so turn off GDAL
cmake -S . -G Ninja -B build -DENABLE_ALL=ON -DGIT_SHALLOW_CLONE=ON -DCMAKE_BUILD_TYPE=Debug -DUSE_GDAL=OFF -DEXT_BUILD_VERBOSE=ON
- name: Build
run: |
export PATH=$ENV{GITHUB_WORKSPACE}:$PATH
cd build && ninja -j2 -v
osx_debug:
name: macOS Clang Debug Build
runs-on: macos-latest
strategy:
fail-fast: true
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Checkout
uses: actions/checkout@v4
- name: Install Xquartz
run: |
brew install xquartz --cask
- name: Configure
run: |
export PATH=$ENV{GITHUB_WORKSPACE}:$PATH
export CC=clang
export CXX=clang++
cmake -S . -G Ninja -B build -DENABLE_ALL=ON -DGIT_SHALLOW_CLONE=ON -DCMAKE_BUILD_TYPE=Debug -DEXT_BUILD_VERBOSE=ON
- name: Build
run: |
export PATH=$ENV{GITHUB_WORKSPACE}:$PATH
cd build && ninja -j2 -v
+56
View File
@@ -0,0 +1,56 @@
# The purpose of this particular test definition is to support on-demand
# interactive command shells. We sometimes see problems that occur only in the
# Github Runner environments, and in order to explore what is happening we need
# an interactive prompt (the alternative is hours-per-cycle submit and test
# loops, which doesn't scale at all.)
#
# Unlike the other BRL-CAD tests, this one is started manually from the Github
# website. For more information see https://mxschmitt.github.io/action-tmate/
#
# The "recommended" way to use this action is for the dev to make a fork of
# the repository, alter the configure and/or build logic below for their
# particular use case (the example below is a libged-only build used to zero
# in on a specific libged behavior) before running.
name: BRL-CAD Linux Interactive Debugging
on: [workflow_dispatch]
jobs:
linux:
name: Ubuntu Latest GCC
runs-on: ubuntu-latest
steps:
- name: Setup - CMake
uses: lukka/get-cmake@latest
- name: Setup - System
env:
DEBIAN_FRONTEND: noninteractive
run: |
sudo apt-get update
# Install XCB/OpenGL dev pkgs for Qt - see:
# https://wiki.qt.io/Building_Qt_6_from_Git
# https://doc.qt.io/qt-6/linux-requirements.html
sudo apt-get install libfontconfig1-dev libfreetype6-dev libx11-dev libx11-xcb-dev libxext-dev libxfixes-dev libxi-dev libxrender-dev libxcb1-dev libxcb-cursor-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util-dev libxcb-xinerama0-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev
sudo apt-get install libgl-dev
sudo apt-get install libinput-dev
sudo apt-get clean
- name: Checkout
uses: actions/checkout@v4
- name: Build Directory setup
run: |
cmake -E make_directory ./build_linux
- name: Configure
run: |
export PATH=$ENV{GITHUB_WORKSPACE}:$PATH
cmake -S . -G Ninja -B build -DENABLE_ALL=ON -DGIT_SHALLOW_CLONE=ON -DCMAKE_BUILD_TYPE=Debug
- name: Debugging - tmate session
uses: mxschmitt/action-tmate@v3
+24 -4
View File
@@ -1,5 +1,25 @@
# Xcode
xcuserdata/
# Common build directories used in the source tree
/build
/.build
/*_build
/*-build
/out
# JetBrains
.idea/
# Temporary files
*~
\#*\#
.\#*
[._]*.s[a-v][a-z]
[._]*.sw[a-p]
[._]s[a-v][a-z]
[._]sw[a-p]
# OS specific files
.DS_Store
.DS_Store?
.vscode
CMakeLists.txt.user
/.vs
/CMakeSettings.json
/CMakeUserPresets.json
+364
View File
@@ -0,0 +1,364 @@
[submodule "patch/patch"]
path = patch/patch
url = https://github.com/BRL-CAD/patch
ignore = dirty
shallow = true
[submodule "astyle/astyle"]
path = astyle/astyle
url = https://github.com/BRL-CAD/astyle
ignore = dirty
shallow = true
[submodule "lief/LIEF"]
path = lief/LIEF
url = https://github.com/BRL-CAD/LIEF
ignore = dirty
shallow = true
[submodule "lemon/lemon"]
path = lemon/lemon
url = https://github.com/BRL-CAD/lemon
ignore = dirty
shallow = true
[submodule "re2c/re2c"]
path = re2c/re2c
url = https://github.com/BRL-CAD/re2c
ignore = dirty
shallow = true
[submodule "perplex/perplex"]
path = perplex/perplex
url = https://github.com/BRL-CAD/perplex
ignore = dirty
shallow = true
[submodule "plief/plief"]
path = plief/plief
url = https://github.com/BRL-CAD/plief
ignore = dirty
shallow = true
[submodule "strclear/strclear"]
path = strclear/strclear
url = https://github.com/BRL-CAD/strclear
ignore = dirty
shallow = true
[submodule "zlib/zlib"]
path = zlib/zlib
url = https://github.com/BRL-CAD/zlib
ignore = dirty
shallow = true
[submodule "png/libpng"]
path = png/libpng
url = https://github.com/BRL-CAD/libpng
ignore = dirty
shallow = true
[submodule "netpbm/netpbm"]
path = netpbm/netpbm
url = https://github.com/BRL-CAD/netpbm
branch = brlcad
ignore = dirty
shallow = true
[submodule "regex/regex"]
path = regex/regex
url = https://github.com/BRL-CAD/regex
ignore = dirty
shallow = true
[submodule "lmdb/lmdb"]
path = lmdb/lmdb
url = https://github.com/BRL-CAD/lmdb
ignore = dirty
shallow = true
[submodule "eigen/eigen"]
path = eigen/eigen
url = https://github.com/BRL-CAD/eigen
ignore = dirty
shallow = true
[submodule "stepcode/stepcode"]
path = stepcode/stepcode
url = https://github.com/BRL-CAD/stepcode
branch = RELEASE
ignore = dirty
shallow = true
[submodule "sqlite3/sqlite3"]
path = sqlite3/sqlite3
url = https://github.com/BRL-CAD/sqlite3.git
ignore = dirty
shallow = true
[submodule "proj/PROJ"]
path = proj/PROJ
url = https://github.com/BRL-CAD/PROJ
ignore = dirty
shallow = true
[submodule "gdal/gdal"]
path = gdal/gdal
url = https://github.com/BRL-CAD/gdal
ignore = dirty
shallow = true
[submodule "assetimport/assimp"]
path = assetimport/assimp
url = https://github.com/BRL-CAD/assimp
branch = RELEASE
ignore = dirty
shallow = true
[submodule "opencv/opencv"]
path = opencv/opencv
url = https://github.com/BRL-CAD/opencv
ignore = dirty
shallow = true
[submodule "opennurbs/opennurbs"]
path = opennurbs/opennurbs
url = https://github.com/BRL-CAD/opennurbs
ignore = dirty
shallow = true
[submodule "openvdb/openvdb"]
path = openvdb/openvdb
url = https://github.com/BRL-CAD/openvdb
branch = master
ignore = dirty
shallow = true
[submodule "osmesa/osmesa"]
path = osmesa/osmesa
url = https://github.com/BRL-CAD/osmesa
ignore = dirty
shallow = true
[submodule "tk/tk"]
path = tk/tk
url = https://github.com/BRL-CAD/tk
branch = RELEASE
ignore = dirty
shallow = true
[submodule "itk/itk"]
path = itk/itk
url = https://github.com/BRL-CAD/itk
branch = main
ignore = dirty
shallow = true
[submodule "iwidgets/iwidgets"]
path = iwidgets/iwidgets
url = https://github.com/BRL-CAD/iwidgets
ignore = dirty
shallow = true
[submodule "tktable/tktable"]
path = tktable/tktable
url = https://github.com/BRL-CAD/tktable
ignore = dirty
shallow = true
[submodule "tkhtml/tkhtml"]
path = tkhtml/tkhtml
url = https://github.com/BRL-CAD/tkhtml
ignore = dirty
shallow = true
[submodule "qt/qt"]
path = qt/qt
url = https://github.com/BRL-CAD/qt
ignore = dirty
shallow = true
[submodule "flexbison/bison"]
path = flexbison/bison
url = https://github.com/BRL-CAD/bison
ignore = dirty
shallow = true
[submodule "flexbison/flex"]
path = flexbison/flex
url = https://github.com/BRL-CAD/flex
branch = RELEASE
ignore = dirty
shallow = true
[submodule "flexbison/winflexbison"]
path = flexbison/winflexbison
url = https://github.com/BRL-CAD/winflexbison
branch = RELEASE
ignore = dirty
shallow = true
[submodule "minizip-ng/minizip-ng"]
path = minizip-ng/minizip-ng
url = https://github.com/BRL-CAD/minizip-ng
branch = RELEASE
ignore = dirty
shallow = true
[submodule "lz4/lz4"]
path = lz4/lz4
url = https://github.com/BRL-CAD/lz4
branch = RELEASE
ignore = dirty
shallow = true
[submodule "deflate/libdeflate"]
path = deflate/libdeflate
url = https://github.com/BRL-CAD/libdeflate
branch = RELEASE
ignore = dirty
shallow = true
[submodule "fmt/fmt"]
path = fmt/fmt
url = https://github.com/BRL-CAD/fmt
branch = RELEASE
ignore = dirty
shallow = true
[submodule "yaml-cpp/yaml-cpp"]
path = yaml-cpp/yaml-cpp
url = https://github.com/BRL-CAD/yaml-cpp
branch = RELEASE
ignore = dirty
shallow = true
[submodule "pystring/pystring"]
path = pystring/pystring
url = https://github.com/BRL-CAD/pystring
branch = RELEASE
ignore = dirty
shallow = true
[submodule "expat/libexpat"]
path = expat/libexpat
url = https://github.com/BRL-CAD/libexpat
branch = RELEASE
ignore = dirty
shallow = true
[submodule "pugixml/pugixml"]
path = pugixml/pugixml
url = https://github.com/BRL-CAD/pugixml
branch = RELEASE
ignore = dirty
shallow = true
[submodule "xerces-c/xerces-c"]
path = xerces-c/xerces-c
url = https://github.com/BRL-CAD/xerces-c
branch = RELEASE
ignore = dirty
shallow = true
[submodule "icu/icu"]
path = icu/icu
url = https://github.com/BRL-CAD/icu
branch = RELEASE
ignore = dirty
shallow = true
[submodule "jpeg/libjpeg-turbo"]
path = jpeg/libjpeg-turbo
url = https://github.com/BRL-CAD/libjpeg-turbo
ignore = dirty
shallow = true
[submodule "tiff/libtiff"]
path = tiff/libtiff
url = https://github.com/BRL-CAD/libtiff
ignore = dirty
shallow = true
[submodule "onetbb/oneTBB"]
path = onetbb/oneTBB
url = https://github.com/BRL-CAD/oneTBB
ignore = dirty
shallow = true
[submodule "llvm/llvm-project"]
path = llvm/llvm-project
url = https://github.com/BRL-CAD/llvm-project
branch = RELEASE
ignore = dirty
shallow = true
[submodule "zstd/zstd"]
path = zstd/zstd
url = https://github.com/BRL-CAD/zstd
branch = RELEASE
ignore = dirty
shallow = true
[submodule "boost/boost"]
path = boost/boost
url = https://github.com/BRL-CAD/boost
branch = RELEASE
ignore = dirty
shallow = true
[submodule "openexr/openexr"]
path = openexr/openexr
url = https://github.com/BRL-CAD/openexr
branch = RELEASE
ignore = dirty
shallow = true
[submodule "opencolorio/OpenColorIO"]
path = opencolorio/OpenColorIO
url = https://github.com/BRL-CAD/OpenColorIO
branch = RELEASE
ignore = dirty
shallow = true
[submodule "openimageio/oiio"]
path = openimageio/oiio
url = https://github.com/BRL-CAD/oiio
branch = RELEASE
ignore = dirty
shallow = true
[submodule "osl/OpenShadingLanguage"]
path = osl/OpenShadingLanguage
url = https://github.com/BRL-CAD/OpenShadingLanguage
branch = RELEASE
ignore = dirty
shallow = true
[submodule "embree/embree"]
path = embree/embree
url = https://github.com/BRL-CAD/embree
branch = RELEASE
ignore = dirty
shallow = true
[submodule "rkcommon/rkcommon"]
path = rkcommon/rkcommon
url = https://github.com/BRL-CAD/rkcommon
branch = RELEASE
ignore = dirty
shallow = true
[submodule "ispc/ispc"]
path = ispc/ispc
url = https://github.com/BRL-CAD/ispc
branch = RELEASE
ignore = dirty
shallow = true
[submodule "ospray/ospray"]
path = ospray/ospray
url = https://github.com/BRL-CAD/ospray
branch = RELEASE
ignore = dirty
shallow = true
[submodule "ncurses/ncurses"]
path = ncurses/ncurses
url = https://github.com/BRL-CAD/ncurses
ignore = dirty
shallow = true
[submodule "tcl/tcl"]
path = tcl/tcl
url = https://github.com/BRL-CAD/tcl.git
branch = RELEASE
ignore = dirty
shallow = true
[submodule "manifold/manifold"]
path = manifold/manifold
url = https://github.com/BRL-CAD/manifold.git
ignore = dirty
shallow = true
[submodule "appleseed/appleseed"]
path = appleseed/appleseed
url = https://github.com/BRL-CAD/appleseed
ignore = dirty
shallow = true
[submodule "gte/GeometricTools"]
path = gte/GeometricTools
url = https://github.com/BRL-CAD/GeometricTools
ignore = dirty
shallow = true
[submodule "mmesh/mmesh"]
path = mmesh/mmesh
url = https://github.com/BRL-CAD/mmesh.git
ignore = dirty
shallow = true
[submodule "clipper2/Clipper2"]
path = clipper2/Clipper2
url = https://github.com/BRL-CAD/Clipper2.git
ignore = dirty
shallow = true
[submodule "tinygltf/tinygltf"]
path = tinygltf/tinygltf
url = https://github.com/BRL-CAD/tinygltf.git
ignore = dirty
shallow = true
[submodule "poissonrecon/PoissonRecon"]
path = poissonrecon/PoissonRecon
url = https://github.com/BRL-CAD/PoissonRecon
ignore = dirty
shallow = true
[submodule "bullet/bullet3"]
path = bullet/bullet3
url = https://github.com/BRL-CAD/bullet3.git
branch = RELEASE
ignore = dirty
shallow = true
[submodule "oidn/oidn"]
path = oidn/oidn
url = https://github.com/BRL-CAD/oidn
-26
View File
@@ -1,26 +0,0 @@
language: c
os:
- linux
compiler:
- clang
- gcc
python:
- "2.7"
before_install:
- sudo apt-get install libbsd-dev
- sudo pip install --upgrade pip
- sudo pip install numpy
before_script:
- mkdir build
- cd build
- cmake .. -DBUILD_TEST=ON
script:
- make
- cd ../test
- python test.py --exe_dir=../build
+80
View File
@@ -0,0 +1,80 @@
set(bext_root "${CMAKE_CURRENT_LIST_DIR}/..")
get_filename_component(bext_root "${bext_root}" ABSOLUTE)
include("${CMAKE_CURRENT_LIST_DIR}/BextGit.cmake")
if (NOT DEFINED PROFILE)
message(FATAL_ERROR "Set PROFILE to one of: auto, bundled, minimal, everything")
endif (NOT DEFINED PROFILE)
string(TOLOWER "${PROFILE}" profile)
set(active_groups)
if (profile STREQUAL "auto" OR profile STREQUAL "bundled")
set(active_groups BRLCAD BRLCAD_EXTRA GDAL QT TCL)
elseif (profile STREQUAL "minimal")
set(active_groups BRLCAD)
elseif (profile STREQUAL "everything")
set(active_groups APPLESEED BRLCAD BRLCAD_EXTRA GDAL OSPRAY QT TCL)
else ()
message(FATAL_ERROR "Unknown PROFILE \"${PROFILE}\". Expected: auto, bundled, minimal, everything")
endif ()
find_program(GIT_EXECUTABLE git)
if (NOT GIT_EXECUTABLE)
message(FATAL_ERROR "Unable to find git executable required for bootstrap")
endif (NOT GIT_EXECUTABLE)
file(STRINGS "${bext_root}/CMakeLists.txt" project_lines REGEX "add_project\\(")
set(project_paths)
foreach(line ${project_lines})
string(STRIP "${line}" stripped_line)
if (stripped_line MATCHES "^#")
continue()
endif (stripped_line MATCHES "^#")
if (NOT stripped_line MATCHES "^add_project\\(([A-Za-z0-9_+.-]+)")
continue()
endif (NOT stripped_line MATCHES "^add_project\\(([A-Za-z0-9_+.-]+)")
set(project_name "${CMAKE_MATCH_1}")
set(include_project FALSE)
if (stripped_line MATCHES "GROUPS \"([^\"]+)\"")
set(project_groups "${CMAKE_MATCH_1}")
string(REPLACE ";" ";" project_groups "${project_groups}")
foreach(group ${project_groups})
list(FIND active_groups "${group}" group_index)
if (NOT group_index EQUAL -1)
set(include_project TRUE)
break()
endif (NOT group_index EQUAL -1)
endforeach(group ${project_groups})
else ()
set(include_project TRUE)
endif ()
if (include_project)
list(APPEND project_paths "${project_name}")
endif (include_project)
endforeach(line ${project_lines})
list(REMOVE_DUPLICATES project_paths)
list(SORT project_paths)
string(REPLACE ";" ", " active_groups_str "${active_groups}")
string(REPLACE ";" ", " project_paths_str "${project_paths}")
message(STATUS "bext bootstrap profile: ${profile}")
message(STATUS "active USE_* groups: ${active_groups_str}")
message(STATUS "project submodules: ${project_paths_str}")
if (LIST_ONLY)
message(STATUS "LIST_ONLY is ON, skipping git submodule update")
return()
endif (LIST_ONLY)
bext_git_submodule_update("${bext_root}" --jobs 8 -- ${project_paths})
message(STATUS "Bootstrap complete for profile ${profile}")
+220
View File
@@ -0,0 +1,220 @@
# Derive bext dependency metadata from the existing build files. This module
# deliberately does not introduce a manifest: CMakeLists.txt, per-project
# .deps files, wrapper install settings, .gitmodules, and the Git index remain
# the sources of truth.
function(_bext_inventory_key out value)
string(TOUPPER "${value}" key)
string(REGEX REPLACE "[^A-Z0-9]" "_" key "${key}")
set(${out} "${key}" PARENT_SCOPE)
endfunction()
function(_bext_inventory_set project field value)
_bext_inventory_key(key "${project}")
set_property(GLOBAL PROPERTY "BEXT_INVENTORY_${key}_${field}" "${value}")
endfunction()
function(bext_inventory_get out project field)
_bext_inventory_key(key "${project}")
get_property(value GLOBAL PROPERTY "BEXT_INVENTORY_${key}_${field}")
set(${out} "${value}" PARENT_SCOPE)
endfunction()
function(_bext_inventory_submodule_lookup out_url out_sha source_dir path)
get_property(entries GLOBAL PROPERTY BEXT_INVENTORY_SUBMODULES)
foreach(entry ${entries})
string(REPLACE "|" ";" parts "${entry}")
list(GET parts 0 entry_path)
if ("${entry_path}" STREQUAL "${path}")
list(GET parts 1 entry_url)
execute_process(
COMMAND git ls-tree HEAD -- "${path}"
WORKING_DIRECTORY "${source_dir}"
RESULT_VARIABLE tree_result
OUTPUT_VARIABLE tree_line
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if (NOT tree_result EQUAL 0 OR NOT tree_line MATCHES "^[0-9]+ commit ([0-9a-f]+)")
message(FATAL_ERROR "Unable to read pinned commit for submodule ${path}")
endif()
set(${out_url} "${entry_url}" PARENT_SCOPE)
set(${out_sha} "${CMAKE_MATCH_1}" PARENT_SCOPE)
return()
endif()
endforeach()
set(${out_url} "" PARENT_SCOPE)
set(${out_sha} "" PARENT_SCOPE)
endfunction()
function(bext_collect_dependency_inventory source_dir)
get_filename_component(source_dir "${source_dir}" ABSOLUTE)
if (NOT EXISTS "${source_dir}/CMakeLists.txt" OR NOT EXISTS "${source_dir}/.gitmodules")
message(FATAL_ERROR "${source_dir} is not a bext source tree")
endif()
# Read submodule paths and URLs without requiring submodules to be populated.
file(STRINGS "${source_dir}/.gitmodules" gitmodule_lines)
set(submodules)
set(current_path "")
foreach(line ${gitmodule_lines})
string(STRIP "${line}" line)
if (line MATCHES "^path = (.+)$")
set(current_path "${CMAKE_MATCH_1}")
elseif(line MATCHES "^url = (.+)$" AND current_path)
list(APPEND submodules "${current_path}|${CMAKE_MATCH_1}")
set(current_path "")
endif()
endforeach()
set_property(GLOBAL PROPERTY BEXT_INVENTORY_SUBMODULES "${submodules}")
file(STRINGS "${source_dir}/CMakeLists.txt" top_lines)
set(projects)
foreach(line ${top_lines})
string(STRIP "${line}" stripped)
if (stripped MATCHES "^#" OR NOT stripped MATCHES "^add_project\\(([^ )]+)")
continue()
endif()
set(project "${CMAKE_MATCH_1}")
list(APPEND projects "${project}")
if (stripped MATCHES "GROUPS +\"([^\"]+)\"")
set(groups "${CMAKE_MATCH_1}")
else()
set(groups "always considered")
endif()
_bext_inventory_set("${project}" GROUPS "${groups}")
endforeach()
list(REMOVE_DUPLICATES projects)
set(all_providers)
foreach(project ${projects})
set(wrapper "${source_dir}/${project}/CMakeLists.txt")
if (NOT EXISTS "${wrapper}")
message(FATAL_ERROR "Project ${project} has no wrapper CMakeLists.txt")
endif()
file(READ "${wrapper}" wrapper_text)
if (wrapper_text MATCHES "-DCMAKE_INSTALL_PREFIX=\\$\\{CMAKE_BUNDLE_INSTALL_PREFIX\\}" OR
wrapper_text MATCHES "--prefix=\\$\\{CMAKE_BUNDLE_INSTALL_PREFIX\\}")
set(output_class install)
elseif(wrapper_text MATCHES "-DCMAKE_INSTALL_PREFIX=\\$\\{CMAKE_NOBUNDLE_INSTALL_PREFIX\\}" OR
wrapper_text MATCHES "--prefix=\\$\\{CMAKE_NOBUNDLE_INSTALL_PREFIX\\}")
set(output_class noinstall)
elseif(wrapper_text MATCHES "CMAKE_BUNDLE_INSTALL_PREFIX" AND
NOT wrapper_text MATCHES "CMAKE_NOBUNDLE_INSTALL_PREFIX")
# Some custom build drivers (currently Tcl) receive the prefix through a
# configured helper script rather than directly in ExternalProject_Add.
set(output_class install)
else()
message(FATAL_ERROR "Cannot derive output class for ${project}")
endif()
_bext_inventory_set("${project}" OUTPUT "${output_class}")
if (wrapper_text MATCHES "DOC_LICENSE_DIR")
set(has_license TRUE)
else()
set(has_license FALSE)
endif()
_bext_inventory_set("${project}" HAS_LICENSE "${has_license}")
set(deps)
set(depfile "${source_dir}/${project}/${project}.deps")
if (EXISTS "${depfile}")
file(STRINGS "${depfile}" dep_lines)
foreach(dep ${dep_lines})
string(STRIP "${dep}" dep)
if (dep AND NOT dep MATCHES "^#")
string(TOLOWER "${dep}" dep)
string(REPLACE "_" "-" dep "${dep}")
list(APPEND deps "${dep}")
endif()
endforeach()
endif()
list(REMOVE_DUPLICATES deps)
_bext_inventory_set("${project}" DEPS "${deps}")
set(paths)
string(REGEX MATCHALL "git_submodule_init\\([A-Za-z0-9_+./-]+ +" init_calls "${wrapper_text}")
foreach(call ${init_calls})
string(REGEX REPLACE "git_submodule_init\\(([A-Za-z0-9_+./-]+) +" "\\1" path "${call}")
list(APPEND paths "${project}/${path}")
endforeach()
list(REMOVE_DUPLICATES paths)
if (NOT paths)
message(FATAL_ERROR "Project ${project} does not declare a source with git_submodule_init")
endif()
_bext_inventory_set("${project}" SUBMODULE_PATHS "${paths}")
set(urls)
set(shas)
foreach(path ${paths})
_bext_inventory_submodule_lookup(url sha "${source_dir}" "${path}")
if (NOT url)
message(FATAL_ERROR "${project} uses ${path}, but it is absent from .gitmodules")
endif()
list(APPEND urls "${url}")
list(APPEND shas "${sha}")
endforeach()
_bext_inventory_set("${project}" SOURCE_URLS "${urls}")
_bext_inventory_set("${project}" SOURCE_SHAS "${shas}")
string(REGEX MATCHALL "ExternalProject_Add\\([A-Za-z0-9_+-]+_BLD" provider_calls "${wrapper_text}")
foreach(call ${provider_calls})
string(REGEX REPLACE "ExternalProject_Add\\(([A-Za-z0-9_+-]+)_BLD" "\\1" provider "${call}")
string(TOLOWER "${provider}" provider)
string(REPLACE "_" "-" provider "${provider}")
list(APPEND all_providers "${provider}")
endforeach()
endforeach()
list(REMOVE_DUPLICATES all_providers)
# Validate dependency references and topological consistency.
foreach(project ${projects})
bext_inventory_get(deps "${project}" DEPS)
foreach(dep ${deps})
list(FIND projects "${dep}" project_index)
list(FIND all_providers "${dep}" provider_index)
if (project_index EQUAL -1 AND provider_index EQUAL -1)
message(FATAL_ERROR "${project}.deps references unknown dependency ${dep}")
endif()
endforeach()
endforeach()
set(resolved)
set(remaining ${projects})
while(remaining)
set(progress FALSE)
foreach(project ${remaining})
bext_inventory_get(deps "${project}" DEPS)
set(ready TRUE)
foreach(dep ${deps})
list(FIND projects "${dep}" dep_project_index)
if (NOT dep_project_index EQUAL -1)
list(FIND resolved "${dep}" resolved_index)
if (resolved_index EQUAL -1)
set(ready FALSE)
endif()
endif()
endforeach()
if (ready)
list(APPEND resolved "${project}")
list(REMOVE_ITEM remaining "${project}")
set(progress TRUE)
endif()
endforeach()
if (NOT progress)
message(FATAL_ERROR "Dependency cycle detected among: ${remaining}")
endif()
endwhile()
# Distributed outputs must install their legal notice alongside the bundle.
foreach(project ${projects})
bext_inventory_get(output_class "${project}" OUTPUT)
bext_inventory_get(has_license "${project}" HAS_LICENSE)
if (output_class STREQUAL "install" AND NOT has_license)
message(FATAL_ERROR "Bundled project ${project} does not install a license via DOC_LICENSE_DIR")
endif()
endforeach()
list(SORT projects)
set(BEXT_INVENTORY_PROJECTS "${projects}" PARENT_SCOPE)
endfunction()
+104
View File
@@ -0,0 +1,104 @@
# Shared repository selection for configure-time and bootstrap submodule updates.
# Keep .gitmodules canonical and scope all overrides to the Git process tree.
include_guard(GLOBAL)
set(_BEXT_GIT_CANONICAL_ROOT "https://github.com/BRL-CAD")
set(BEXT_REPOSITORY_ROOT "${_BEXT_GIT_CANONICAL_ROOT}" CACHE STRING
"Repository URL or local mirror directory containing bext's dependency repositories")
function(bext_git_repository_root out_root out_local)
set(root "${BEXT_REPOSITORY_ROOT}")
set(local FALSE)
if (root STREQUAL "")
message(FATAL_ERROR "BEXT_REPOSITORY_ROOT must be a repository URL or local mirror directory")
endif ()
# Check drive paths before URL schemes or scp-style SSH locations.
if (root MATCHES "^file://")
set(local TRUE)
string(REPLACE "=" "%3D" root "${root}")
elseif (root MATCHES "^[A-Za-z]:[/\\\\]" OR
NOT (root MATCHES "^[A-Za-z][A-Za-z0-9+.-]*://" OR root MATCHES "^[^/]+:.+"))
set(local TRUE)
string(REPLACE "\\" "/" root "${root}")
if (WIN32 OR NOT root MATCHES "^[A-Za-z]:/")
get_filename_component(root "${root}" ABSOLUTE
BASE_DIR "${CMAKE_CURRENT_FUNCTION_LIST_DIR}/..")
endif ()
# Encode path characters with special meaning in a file URL. In
# particular, a literal % in a native path must not become a URL escape.
string(REPLACE "%" "%25" root "${root}")
string(REPLACE " " "%20" root "${root}")
string(REPLACE "#" "%23" root "${root}")
string(REPLACE "?" "%3F" root "${root}")
string(REPLACE "=" "%3D" root "${root}")
if (root MATCHES "^[A-Za-z]:/")
set(root "file:///${root}")
elseif (root MATCHES "^//")
set(root "file:${root}")
else ()
set(root "file://${root}")
endif ()
endif ()
if (NOT root MATCHES "^file:///*$")
string(REGEX REPLACE "/+$" "" root "${root}")
string(APPEND root "/")
else ()
set(root "file:///")
endif ()
set(${out_root} "${root}" PARENT_SCOPE)
set(${out_local} "${local}" PARENT_SCOPE)
endfunction()
function(bext_git_submodule_update working_directory)
find_program(GIT_EXECUTABLE git)
if (NOT GIT_EXECUTABLE)
message(FATAL_ERROR "Need to populate Git submodules, but unable to find git executable")
endif ()
bext_git_repository_root(root local)
set(git_command "${GIT_EXECUTABLE}")
if (WIN32)
list(APPEND git_command -c core.longpaths=true)
endif ()
if (NOT root STREQUAL "${_BEXT_GIT_CANONICAL_ROOT}/")
list(APPEND git_command -c "url.${root}.insteadOf=${_BEXT_GIT_CANONICAL_ROOT}/")
endif ()
set(shallow_args)
if (local)
list(APPEND git_command -c protocol.file.allow=always)
# The environment restriction also reaches recursive Git processes and
# overrides any protocol permissions in the user's Git configuration.
list(PREPEND git_command "${CMAKE_COMMAND}" -E env GIT_ALLOW_PROTOCOL=file --)
list(APPEND shallow_args --no-recommend-shallow)
elseif (GIT_SHALLOW_CLONE)
list(APPEND shallow_args --recommend-shallow)
endif ()
execute_process(
COMMAND ${git_command} submodule update --init --recursive ${shallow_args} ${ARGN}
WORKING_DIRECTORY "${working_directory}"
RESULT_VARIABLE git_result
)
if (NOT git_result STREQUAL "0")
set(local_note "")
if (local)
set(local_note " Only file transport is permitted; all required repositories and pinned commits must be available locally, including recursive submodules.")
endif ()
message(WARNING
"Git submodule update failed in ${working_directory} using BEXT_REPOSITORY_ROOT=${BEXT_REPOSITORY_ROOT} (${git_result}).${local_note}")
endif ()
endfunction()
bext_git_repository_root(_bext_git_root _bext_git_local)
message(STATUS "bext repository root: ${_bext_git_root}")
if (_bext_git_local)
message(STATUS "bext Git updates: file transport only, shallow recommendations disabled")
if (GIT_SHALLOW_CLONE)
message(STATUS "Ignoring GIT_SHALLOW_CLONE for the local repository mirror")
endif ()
endif ()
unset(_bext_git_root)
unset(_bext_git_local)
+85
View File
@@ -0,0 +1,85 @@
# D L L T Y P E C H E C K . C M A K E
# BRL-CAD
#
# Copyright (c) 2024 United States Government as represented by
# the U.S. Army Research Laboratory.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following
# disclaimer in the documentation and/or other materials provided
# with the distribution.
#
# 3. The name of the author may not be used to endorse or promote
# products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
###
# Utility function to check the type of dlls built by bext.
include(CMakeParseArguments)
function(DllTypeCheck btype dlldir)
if (NOT EXISTS "${dlldir}")
return()
endif (NOT EXISTS "${dlldir}")
find_program(DUMPBIN_EXEC dumpbin)
if (NOT DUMPBIN_EXEC)
return()
endif (NOT DUMPBIN_EXEC)
file(GLOB dll_files RELATIVE "${dlldir}" "${dlldir}/*.dll")
set(non_match 0)
foreach(dlf ${dll_files})
message("Dll Type check: ${dlf}")
# dumpbin doesn't like CMake style paths
file(TO_NATIVE_PATH "${dlf}" TBFN)
# https://stackoverflow.com/a/28304716/2037687
execute_process(COMMAND ${DUMPBIN_EXEC} /dependents ${TBFN}
OUTPUT_VARIABLE DB_OUT
ERROR_VARIABLE DB_OUT)
if ("${btype}" STREQUAL "Release")
if ("${DB_OUT}" MATCHES ".*MSVCP[0-9]*d.dll.*" OR "${DB_OUT}" MATCHES ".*MSVCP[0-9]*D.dll.*")
set(non_match 1)
message("Release build specified, but ${dlf} is built as Debug.")
endif ("${DB_OUT}" MATCHES ".*MSVCP[0-9]*d.dll.*" OR "${DB_OUT}" MATCHES ".*MSVCP[0-9]*D.dll.*")
endif ("${btype}" STREQUAL "Release")
if ("${btype}" STREQUAL "Debug")
if (NOT "${DB_OUT}" MATCHES ".*MSVCP[0-9]*d.dll.*" AND NOT "${DB_OUT}" MATCHES ".*MSVCP[0-9]*D.dll.*")
set(non_match 1)
message("Debug build specified, but ${dlf} is built as Release.")
endif (NOT "${DB_OUT}" MATCHES ".*MSVCP[0-9]*d.dll.*" AND NOT "${DB_OUT}" MATCHES ".*MSVCP[0-9]*D.dll.*")
endif ("${btype}" STREQUAL "Debug")
endforeach(dlf ${dll_files})
if (non_match)
message(FATAL_ERROR "Found non-matching dll files - check build logic.")
endif (non_match)
endfunction(DllTypeCheck btype)
if (CMAKE_BUILD_TYPE AND DLL_DIR)
DllTypeCheck(${CMAKE_BUILD_TYPE} ${DLL_DIR})
endif (CMAKE_BUILD_TYPE AND DLL_DIR)
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
+451
View File
@@ -0,0 +1,451 @@
# Finalize the bundled bext output and publish its file-processing manifest.
foreach(required_var
BEXT_INSTALL_ROOT
BEXT_MANIFEST
BEXT_SOURCE_ROOT
BEXT_BINARY_ROOT
BEXT_NOINSTALL_ROOT
BEXT_STRCLEAR
BEXT_SYSTEM_NAME
BIN_DIR
LIB_DIR)
if (NOT DEFINED ${required_var} OR "${${required_var}}" STREQUAL "")
message(FATAL_ERROR "${required_var} is required")
endif ()
endforeach()
function(bext_json_escape outvar value)
set(escaped "${value}")
string(REPLACE "\\" "\\\\" escaped "${escaped}")
string(REPLACE "\"" "\\\"" escaped "${escaped}")
string(REPLACE "\r" "\\r" escaped "${escaped}")
string(REPLACE "\n" "\\n" escaped "${escaped}")
set(${outvar} "${escaped}" PARENT_SCOPE)
endfunction()
function(bext_write_json_array manifest key values)
file(APPEND "${manifest}" " \"${key}\": [\n")
set(first TRUE)
foreach(value ${${values}})
bext_json_escape(escaped "${value}")
if (first)
set(first FALSE)
else ()
file(APPEND "${manifest}" ",\n")
endif ()
file(APPEND "${manifest}" " \"${escaped}\"")
endforeach()
file(APPEND "${manifest}" "\n ]")
endfunction()
function(bext_write_file_list outvar filename values)
file(WRITE "${filename}" "")
foreach(value ${${values}})
file(APPEND "${filename}" "${value}\n")
endforeach()
set(${outvar} "${filename}" PARENT_SCOPE)
endfunction()
function(bext_content_fingerprints outvar root label file_list_var)
set(records "")
foreach(relative IN LISTS ${file_list_var})
set(path "${root}/${relative}")
if (IS_SYMLINK "${path}")
file(READ_SYMLINK "${path}" value)
string(APPEND records "L ${label}/${relative} ${value}\n")
else ()
file(SHA256 "${path}" value)
string(APPEND records "F ${label}/${relative} ${value}\n")
endif ()
endforeach()
set(${outvar} "${records}" PARENT_SCOPE)
endfunction()
function(bext_relative_path outvar path)
file(RELATIVE_PATH relative "${BEXT_INSTALL_ROOT}" "${path}")
string(REPLACE "\\" "/" relative "${relative}")
set(${outvar} "${relative}" PARENT_SCOPE)
endfunction()
function(bext_is_skipped path outvar)
if ("${path}" MATCHES "(^|/)(encodings|include|man|msgs)(/|$)")
set(${outvar} TRUE PARENT_SCOPE)
else ()
set(${outvar} FALSE PARENT_SCOPE)
endif ()
endfunction()
function(bext_is_cmake_file path outvar)
if ("${path}" MATCHES "(Deps|Modules|Version|Targets|Config)\\.cmake$" OR
"${path}" MATCHES "\\.pc$")
set(${outvar} TRUE PARENT_SCOPE)
else ()
set(${outvar} FALSE PARENT_SCOPE)
endif ()
endfunction()
function(bext_run_binary_clear files)
if (NOT files)
return()
endif ()
set(clear_targets
"${BEXT_SOURCE_ROOT}"
"${BEXT_BINARY_ROOT}"
"${BEXT_NOINSTALL_ROOT}"
"${BEXT_INSTALL_ROOT}"
)
set(file_list "${BEXT_BINARY_ROOT}/CMakeFiles/bext-binary-files.txt")
bext_write_file_list(file_list "${file_list}" files)
set(command "${BEXT_STRCLEAR}" -p -b -c --files "${file_list}")
list(APPEND command ${clear_targets})
execute_process(
COMMAND ${command}
RESULT_VARIABLE result
OUTPUT_VARIABLE output
ERROR_VARIABLE error
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "strclear binary cleanup failed: ${error}${output}")
endif ()
endfunction()
function(bext_run_rpath_update files)
if (NOT files OR NOT BEXT_PLIEF)
return()
endif ()
execute_process(
COMMAND "${BEXT_PLIEF}" --help
RESULT_VARIABLE help_result
OUTPUT_VARIABLE help_output
ERROR_QUIET
)
if (NOT help_result EQUAL 0)
message(FATAL_ERROR "Unable to query ${BEXT_PLIEF}")
endif ()
set(rpath_args --set-rpath "${BEXT_INSTALL_ROOT}/${LIB_DIR}")
if ("${help_output}" MATCHES "--set-rpath-if-needed")
list(APPEND rpath_args
--set-rpath-if-needed
--stale-rpath-prefix "${BEXT_INSTALL_ROOT}"
--stale-rpath-prefix "${BEXT_BINARY_ROOT}"
)
if ("${help_output}" MATCHES "--set-rpath-if-needed-prepend")
list(APPEND rpath_args --set-rpath-if-needed-prepend)
endif ()
endif ()
if ("${help_output}" MATCHES "--files")
set(file_list "${BEXT_BINARY_ROOT}/CMakeFiles/bext-rpath-files.txt")
bext_write_file_list(file_list "${file_list}" files)
execute_process(
COMMAND "${BEXT_PLIEF}" ${rpath_args} --files "${file_list}"
RESULT_VARIABLE result
OUTPUT_VARIABLE output
ERROR_VARIABLE error
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "RPATH update failed: ${error}${output}")
endif ()
else ()
foreach(file ${files})
execute_process(
COMMAND "${BEXT_PLIEF}" ${rpath_args} "${file}"
RESULT_VARIABLE result
OUTPUT_VARIABLE output
ERROR_VARIABLE error
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "RPATH update failed for ${file}: ${error}${output}")
endif ()
endforeach()
endif ()
endfunction()
function(bext_run_text_replace files target replacement)
if (NOT files OR "${target}" STREQUAL "")
return()
endif ()
set(text_paths)
foreach(relative ${files})
list(APPEND text_paths "${BEXT_INSTALL_ROOT}/${relative}")
endforeach()
set(file_list "${BEXT_BINARY_ROOT}/CMakeFiles/bext-text-files.txt")
bext_write_file_list(file_list "${file_list}" text_paths)
execute_process(
COMMAND "${BEXT_STRCLEAR}" -p --files "${file_list}" "${target}" "${replacement}"
RESULT_VARIABLE result
OUTPUT_VARIABLE output
ERROR_VARIABLE error
)
if (NOT result EQUAL 0)
message(FATAL_ERROR "strclear text replacement failed for ${target}: ${error}${output}")
endif ()
endfunction()
file(MAKE_DIRECTORY "${BEXT_BINARY_ROOT}/CMakeFiles")
file(GLOB_RECURSE installed_files
LIST_DIRECTORIES false
RELATIVE "${BEXT_INSTALL_ROOT}"
"${BEXT_INSTALL_ROOT}/*"
)
list(SORT installed_files)
set(classify_files)
set(skipped_files)
foreach(relative ${installed_files})
set(path "${BEXT_INSTALL_ROOT}/${relative}")
if (IS_SYMLINK "${path}")
list(APPEND skipped_files "${relative}")
continue()
endif ()
bext_is_skipped("${relative}" skipped)
if (skipped)
list(APPEND skipped_files "${relative}")
else ()
list(APPEND classify_files "${path}")
endif ()
endforeach()
set(text_files)
set(binary_probe_files)
if (classify_files)
execute_process(
COMMAND "${BEXT_STRCLEAR}" --help
RESULT_VARIABLE strclear_help_result
OUTPUT_VARIABLE strclear_help
ERROR_QUIET
)
if (NOT strclear_help_result EQUAL 0)
message(FATAL_ERROR "Unable to query ${BEXT_STRCLEAR}")
endif ()
if ("${strclear_help}" MATCHES "--classify" AND "${strclear_help}" MATCHES "--files")
set(classify_list "${BEXT_BINARY_ROOT}/CMakeFiles/bext-classify-files.txt")
bext_write_file_list(classify_list "${classify_list}" classify_files)
execute_process(
COMMAND "${BEXT_STRCLEAR}" --classify --files "${classify_list}"
RESULT_VARIABLE classify_result
OUTPUT_VARIABLE classify_output
ERROR_VARIABLE classify_error
)
if (NOT classify_result EQUAL 0)
message(FATAL_ERROR "strclear classification failed: ${classify_error}${classify_output}")
endif ()
string(REPLACE "\r\n" "\n" classify_output "${classify_output}")
string(REPLACE "\n" ";" classify_records "${classify_output}")
foreach(record ${classify_records})
if ("${record}" STREQUAL "")
continue()
endif ()
string(JSON type ERROR_VARIABLE json_error GET "${record}" type)
string(JSON path ERROR_VARIABLE path_error GET "${record}" path)
if (NOT "${json_error}" STREQUAL "NOTFOUND" OR NOT "${path_error}" STREQUAL "NOTFOUND")
message(FATAL_ERROR "Invalid strclear classification record: ${record}")
endif ()
bext_relative_path(relative "${path}")
if ("${type}" STREQUAL "TEXT")
list(APPEND text_files "${relative}")
elseif ("${type}" STREQUAL "BINARY")
list(APPEND binary_probe_files "${relative}")
else ()
message(FATAL_ERROR "Unknown strclear classification: ${type}")
endif ()
endforeach()
else ()
foreach(path ${classify_files})
execute_process(
COMMAND "${BEXT_STRCLEAR}" -B "${path}"
RESULT_VARIABLE binary_result
ERROR_QUIET
)
bext_relative_path(relative "${path}")
if (binary_result EQUAL 0)
list(APPEND binary_probe_files "${relative}")
elseif (binary_result EQUAL 1)
list(APPEND text_files "${relative}")
else ()
message(FATAL_ERROR "strclear could not classify ${path}")
endif ()
endforeach()
endif ()
endif ()
set(rpath_files)
set(binary_files)
if (binary_probe_files)
if (BEXT_PLIEF)
execute_process(
COMMAND "${BEXT_PLIEF}" --help
RESULT_VARIABLE plief_help_result
OUTPUT_VARIABLE plief_help
ERROR_QUIET
)
else ()
set(plief_help_result 1)
endif ()
if (plief_help_result EQUAL 0 AND "${plief_help}" MATCHES "--classify" AND "${plief_help}" MATCHES "--files")
set(plief_list "${BEXT_BINARY_ROOT}/CMakeFiles/bext-plief-files.txt")
set(plief_paths)
foreach(relative ${binary_probe_files})
list(APPEND plief_paths "${BEXT_INSTALL_ROOT}/${relative}")
endforeach()
bext_write_file_list(plief_list "${plief_list}" plief_paths)
execute_process(
COMMAND "${BEXT_PLIEF}" --classify --files "${plief_list}"
RESULT_VARIABLE plief_result
OUTPUT_VARIABLE plief_output
ERROR_VARIABLE plief_error
)
if (NOT plief_result EQUAL 0)
message(FATAL_ERROR "plief classification failed: ${plief_error}${plief_output}")
endif ()
string(REPLACE "\r\n" "\n" plief_output "${plief_output}")
string(REPLACE "\n" ";" plief_records "${plief_output}")
foreach(record ${plief_records})
if ("${record}" STREQUAL "")
continue()
endif ()
string(JSON type ERROR_VARIABLE json_error GET "${record}" type)
string(JSON path ERROR_VARIABLE path_error GET "${record}" path)
if (NOT "${json_error}" STREQUAL "NOTFOUND" OR NOT "${path_error}" STREQUAL "NOTFOUND")
message(FATAL_ERROR "Invalid plief classification record: ${record}")
endif ()
bext_relative_path(relative "${path}")
if ("${type}" STREQUAL "ELF")
list(APPEND rpath_files "${relative}")
elseif ("${type}" STREQUAL "OTHER")
list(APPEND binary_files "${relative}")
else ()
message(FATAL_ERROR "Unknown plief classification: ${type}")
endif ()
endforeach()
else ()
if ("${BEXT_SYSTEM_NAME}" STREQUAL "Darwin")
foreach(relative ${binary_probe_files})
execute_process(
COMMAND otool -l "${BEXT_INSTALL_ROOT}/${relative}"
RESULT_VARIABLE otool_result
OUTPUT_VARIABLE otool_output
ERROR_QUIET
)
if (otool_result EQUAL 0 AND
NOT "${otool_output}" MATCHES "Archive|not an object")
list(APPEND rpath_files "${relative}")
else ()
list(APPEND binary_files "${relative}")
endif ()
endforeach()
else ()
list(APPEND binary_files ${binary_probe_files})
endif ()
endif ()
else ()
set(plief_help_result 1)
endif ()
list(SORT text_files)
list(SORT rpath_files)
list(SORT binary_files)
set(cmake_files)
set(plain_text_files)
foreach(relative ${text_files})
bext_is_cmake_file("${relative}" is_cmake)
if (is_cmake)
list(APPEND cmake_files "${relative}")
else ()
list(APPEND plain_text_files "${relative}")
endif ()
endforeach()
list(SORT cmake_files)
list(SORT plain_text_files)
# Replace paths that only have meaning while bext is being built. Keep the
# install prefix intact: downstream projects replace this canonical prefix
# with their own staging prefix after copying the finalized tree.
set(text_paths ${text_files})
foreach(clear_target
"${BEXT_SOURCE_ROOT}"
"${BEXT_BINARY_ROOT}"
"${BEXT_NOINSTALL_ROOT}")
bext_run_text_replace("${text_paths}" "${clear_target}" "${BEXT_INSTALL_ROOT}")
endforeach()
# Clear paths before restoring the canonical bext RPATH. Clearing the install
# root after the RPATH update would also clear the newly written RPATH.
set(all_binary_files ${rpath_files} ${binary_files})
set(binary_paths)
set(rpath_paths)
foreach(relative ${all_binary_files})
list(APPEND binary_paths "${BEXT_INSTALL_ROOT}/${relative}")
endforeach()
foreach(relative ${rpath_files})
list(APPEND rpath_paths "${BEXT_INSTALL_ROOT}/${relative}")
endforeach()
set(binary_cleanup_paths ${binary_paths})
if ("${BEXT_SYSTEM_NAME}" STREQUAL "Darwin" AND
NOT BEXT_PLIEF)
# Without plief, preserve Mach-O RPATH load commands for BRL-CAD's
# install_name_tool staging pass.
set(binary_cleanup_paths)
foreach(relative ${binary_files})
list(APPEND binary_cleanup_paths "${BEXT_INSTALL_ROOT}/${relative}")
endforeach()
endif ()
bext_run_binary_clear("${binary_cleanup_paths}")
bext_run_rpath_update("${rpath_paths}")
file(WRITE "${BEXT_MANIFEST}.tmp" "{\n")
file(APPEND "${BEXT_MANIFEST}.tmp" " \"schema\": 1,\n")
bext_json_escape(platform "${BEXT_SYSTEM_NAME}")
file(APPEND "${BEXT_MANIFEST}.tmp" " \"platform\": \"${platform}\",\n")
file(APPEND "${BEXT_MANIFEST}.tmp" " \"install_root\": \"install\",\n")
file(APPEND "${BEXT_MANIFEST}.tmp" " \"generated_by\": \"bext\",\n")
bext_write_json_array("${BEXT_MANIFEST}.tmp" "files" installed_files)
file(APPEND "${BEXT_MANIFEST}.tmp" ",\n")
bext_write_json_array("${BEXT_MANIFEST}.tmp" "rpath" rpath_files)
file(APPEND "${BEXT_MANIFEST}.tmp" ",\n")
bext_write_json_array("${BEXT_MANIFEST}.tmp" "binary" binary_files)
file(APPEND "${BEXT_MANIFEST}.tmp" ",\n")
bext_write_json_array("${BEXT_MANIFEST}.tmp" "cmake" cmake_files)
file(APPEND "${BEXT_MANIFEST}.tmp" ",\n")
bext_write_json_array("${BEXT_MANIFEST}.tmp" "text" plain_text_files)
file(APPEND "${BEXT_MANIFEST}.tmp" "\n}\n")
file(COPY_FILE "${BEXT_MANIFEST}.tmp" "${BEXT_MANIFEST}" ONLY_IF_DIFFERENT)
file(REMOVE "${BEXT_MANIFEST}.tmp")
# Existing files are watched by downstream builds. This list also detects
# additions and removals without changing its timestamp on a no-op build.
file(GLOB_RECURSE noinstall_files
LIST_DIRECTORIES false
RELATIVE "${BEXT_NOINSTALL_ROOT}"
"${BEXT_NOINSTALL_ROOT}/*"
)
list(REMOVE_ITEM noinstall_files "build-stamp")
list(SORT noinstall_files)
set(noinstall_inventory "${BEXT_BINARY_ROOT}/CMakeFiles/bext-noinstall-files.txt")
bext_write_file_list(noinstall_inventory "${noinstall_inventory}" noinstall_files)
file(COPY_FILE "${noinstall_inventory}" "${BEXT_NOINSTALL_ROOT}/build-stamp"
ONLY_IF_DIFFERENT)
# Finalized binaries and config files may be rewritten on every install even
# when their resulting bytes are unchanged. Publish one stable dependency for
# downstream builds instead of making them watch every output timestamp.
bext_content_fingerprints(installed_content "${BEXT_INSTALL_ROOT}" "install"
installed_files)
bext_content_fingerprints(noinstall_content "${BEXT_NOINSTALL_ROOT}" "noinstall"
noinstall_files)
file(SHA256 "${BEXT_MANIFEST}" manifest_digest)
string(SHA256 content_digest
"${installed_content}${noinstall_content}M ${manifest_digest}\n")
set(content_stamp "${BEXT_BINARY_ROOT}/bext-content-stamp")
file(WRITE "${content_stamp}.tmp" "${content_digest}\n")
file(COPY_FILE "${content_stamp}.tmp" "${content_stamp}" ONLY_IF_DIFFERENT)
file(REMOVE "${content_stamp}.tmp")
message(STATUS "Generated bext install manifest: ${BEXT_MANIFEST}")
+100
View File
@@ -0,0 +1,100 @@
#
# This file is modeled after appleseed.
# Visit https://appleseedhq.net/ for additional information and resources.
#
# This software is released under the MIT license.
#
# Copyright (c) 2014-2018 Esteban Tovagliari, The appleseedhq Organization
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
###
# - Find ASSETIMPORT
# Find the native ASSETIMPORT includes and library
#
# ASSETIMPORT_INCLUDE_DIR - where to find include headers
# ASSETIMPORT_LIBRARIES - List of libraries when using assetimport.
#
###
# - helpful cmake flags when building
#
# ASSETIMPORT_ROOT - path to assetimport root if it is built outside of /usr
#
#=============================================================================
set(_ASSETIMPORT_SEARCHES)
# Search ASSETIMPORT_ROOT first if it is set.
if(ASSETIMPORT_ROOT)
set(_ASSETIMPORT_SEARCH_ROOT PATHS ${ASSETIMPORT_ROOT} NO_DEFAULT_PATH)
list(APPEND _ASSETIMPORT_SEARCHES _ASSETIMPORT_SEARCH_ROOT)
endif()
set(ASSETIMPORT_NAMES assimp assimpd)
# Try each search configuration.
foreach(search ${_ASSETIMPORT_SEARCHES})
find_path(ASSETIMPORT_INCLUDE_DIR
NAMES assimp/postprocess.h assimp/scene.h assimp/version.h assimp/config.h assimp/cimport.h
${${search}} PATH_SUFFIXES include)
find_library(ASSETIMPORT_LIBRARY
NAMES ${ASSETIMPORT_NAMES}
${${search}} PATH_SUFFIXES lib lib64 bin)
endforeach()
if (NOT ASSETIMPORT_LIBRARY OR NOT ASSETIMPORT_INCLUDE_DIR)
# Try a more generic search
find_path(ASSETIMPORT_INCLUDE_DIR
NAMES assimp/postprocess.h assimp/scene.h assimp/version.h assimp/config.h assimp/cimport.h
PATH_SUFFIXES include)
find_library(ASSETIMPORT_LIBRARY
NAMES ${ASSETIMPORT_NAMES}
PATH_SUFFIXES lib lib64 bin)
endif (NOT ASSETIMPORT_LIBRARY OR NOT ASSETIMPORT_INCLUDE_DIR)
# Handle the QUIETLY and REQUIRED arguments and set assetimport_FOUND.
include (FindPackageHandleStandardArgs)
find_package_handle_standard_args (ASSETIMPORT REQUIRED_VARS
ASSETIMPORT_LIBRARY
ASSETIMPORT_INCLUDE_DIR
)
# Set the output variables.
if (ASSETIMPORT_FOUND)
set (ASSETIMPORT_LIBRARY "${ASSETIMPORT_LIBRARY}" CACHE PATH "Asset Import Library")
set (ASSETIMPORT_INCLUDE_DIRS ${ASSETIMPORT_INCLUDE_DIR})
set (ASSETIMPORT_LIBRARIES ${ASSETIMPORT_LIBRARY})
else ()
set (ASSETIMPORT_INCLUDE_DIRS)
set (ASSETIMPORT_LIBRARIES)
endif ()
mark_as_advanced (
ASSETIMPORT_INCLUDE_DIR
ASSETIMPORT_LIBRARY
)
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
+82
View File
@@ -0,0 +1,82 @@
# F I N D G T E . C M A K E
# BRL-CAD
#
# Copyright (c) 2024 United States Government as represented by
# the U.S. Army Research Laboratory.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following
# disclaimer in the documentation and/or other materials provided
# with the distribution.
#
# 3. The name of the author may not be used to endorse or promote
# products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
###
# Find GeometricTools Mathematics headers
#
# Once done this will define
#
# GTE_FOUND - system has GTE Mathematics headers
# GTE_INCLUDE_DIR - the GTE include directory
#
# and the following imported target:
#
# GTE::GTE- Provides include dir for GeometricTools Mathematics headers
set(_GTE_SEARCHES)
# Search GTE_ROOT first if it is set.
if(GTE_ROOT)
set(_GTE_SEARCH_ROOT PATHS ${GTE_ROOT} NO_DEFAULT_PATH)
list(APPEND _GTE_SEARCHES _GTE_SEARCH_ROOT)
endif()
# Try each search configuration.
foreach(search ${_GTE_SEARCHES})
find_path(GTE_INCLUDE_DIR NAMES Mathematics/ConvexHull3.h ${${search}} PATH_SUFFIXES include include/GTE)
endforeach()
mark_as_advanced(GTE_INCLUDE_DIR)
# handle the QUIETLY and REQUIRED arguments and set ZLIB_FOUND to TRUE if
# all listed variables are TRUE
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GTE REQUIRED_VARS GTE_INCLUDE_DIR)
if(GTE_FOUND)
set(GTE_INCLUDE_DIRS ${GTE_INCLUDE_DIR})
if(NOT TARGET GTE::GTE)
add_library(GTE::GTE UNKNOWN IMPORTED)
set_target_properties(GTE::GTE PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${GTE_INCLUDE_DIRS}")
endif()
endif()
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
+268
View File
@@ -0,0 +1,268 @@
#
# - Find lemon executable and provides macros to generate custom build rules
# The module defines the following variables
#
# LEMON_EXECUTABLE - path to the lemon program
# LEMON_TEMPLATE - location of the lemon template file
#=============================================================================
# F I N D L E M O N . C M A K E
#
# Originally based off of FindBISON.cmake from Kitware's CMake distribution
#
# Copyright (c) 2010-2023 United States Government as represented by
# the U.S. Army Research Laboratory.
# Copyright 2009 Kitware, Inc.
# Copyright 2006 Tristan Carel
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# * The names of the authors may not be used to endorse or promote
# products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#=============================================================================
set(_LEMON_SEARCHES)
# Search LEMON_ROOT first if it is set.
if(LEMON_ROOT)
set(_LEMON_SEARCH_ROOT PATHS ${LEMON_ROOT} NO_DEFAULT_PATH)
list(APPEND _LEMON_SEARCHES _LEMON_SEARCH_ROOT)
endif()
# Normal search.
set(_LEMON_x86 "(x86)")
set(_LEMON_SEARCH_NORMAL
PATHS "$ENV{ProgramFiles}/lemon"
"$ENV{ProgramFiles${_LEMON_x86}}/lemon")
unset(_LEMON_x86)
list(APPEND _LEMON_SEARCHES _LEMON_SEARCH_NORMAL)
set(LEMON_NAMES lemon)
# Try each search configuration.
foreach(search ${_LEMON_SEARCHES})
find_program(LEMON_EXECUTABLE lemon ${${search}} PATH_SUFFIXES bin)
endforeach()
mark_as_advanced(LEMON_EXECUTABLE)
foreach(search ${_LEMON_SEARCHES})
find_file(LEMON_TEMPLATE lempar.c ${${search}} PATH_SUFFIXES ${DATA_DIR} ${DATA_DIR}/lemon)
endforeach()
mark_as_advanced(LEMON_TEMPLATE)
if (LEMON_EXECUTABLE AND NOT LEMON_TEMPLATE)
# look for the template in share
if (DATA_DIR AND EXISTS "${DATA_DIR}/lemon/lempar.c")
set (LEMON_TEMPLATE "${DATA_DIR}/lemon/lempar.c")
elseif (EXISTS "share/lemon/lempar.c")
set (LEMON_TEMPLATE "share/lemon/lempar.c")
elseif (EXISTS "/usr/share/lemon/lempar.c")
set (LEMON_TEMPLATE "/usr/share/lemon/lempar.c")
endif (DATA_DIR AND EXISTS "${DATA_DIR}/lemon/lempar.c")
endif (LEMON_EXECUTABLE AND NOT LEMON_TEMPLATE)
if (LEMON_EXECUTABLE AND NOT LEMON_TEMPLATE)
# look for the template in bin dir
get_filename_component(lemon_path ${LEMON_EXECUTABLE} DIRECTORY)
if (lemon_path)
if (EXISTS ${lemon_path}/lempar.c)
set (LEMON_TEMPLATE "${lemon_path}/lempar.c")
endif (EXISTS ${lemon_path}/lempar.c)
if (EXISTS /usr/share/lemon/lempar.c)
set (LEMON_TEMPLATE "/usr/share/lemon/lempar.c")
endif (EXISTS /usr/share/lemon/lempar.c)
endif (lemon_path)
endif(LEMON_EXECUTABLE AND NOT LEMON_TEMPLATE)
if (LEMON_EXECUTABLE AND NOT LEMON_TEMPLATE)
# fallback
set (LEMON_TEMPLATE "lempar.c")
if (NOT EXISTS ${LEMON_TEMPLATE})
message(WARNING "Lemon's lempar.c template file could not be found automatically, set LEMON_TEMPLATE")
endif (NOT EXISTS ${LEMON_TEMPLATE})
endif (LEMON_EXECUTABLE AND NOT LEMON_TEMPLATE)
mark_as_advanced(LEMON_TEMPLATE)
# Verify lemon supports %realloc and %free directives (BRL-CAD extensions).
# System lemon (from SQLite) does not support these, but stepcode requires them.
if(LEMON_EXECUTABLE AND LEMON_TEMPLATE)
set(_lemon_test_dir "${CMAKE_CURRENT_BINARY_DIR}/CMakeFiles/lemon_test")
file(MAKE_DIRECTORY "${_lemon_test_dir}")
file(WRITE "${_lemon_test_dir}/test.y"
"%token_type {int}\n%realloc realloc\n%free free\n%start_symbol start\nstart ::= .\n")
execute_process(
COMMAND ${LEMON_EXECUTABLE} -T${LEMON_TEMPLATE} -q test.y
WORKING_DIRECTORY "${_lemon_test_dir}"
RESULT_VARIABLE _lemon_test_result
OUTPUT_QUIET ERROR_QUIET
)
if(NOT _lemon_test_result EQUAL 0)
message(STATUS "Found lemon at ${LEMON_EXECUTABLE} but it lacks %realloc/%free support")
set(LEMON_EXECUTABLE "LEMON_EXECUTABLE-NOTFOUND" CACHE FILEPATH "Path to lemon" FORCE)
set(LEMON_TEMPLATE "LEMON_TEMPLATE-NOTFOUND" CACHE FILEPATH "Path to lempar.c" FORCE)
endif()
file(REMOVE_RECURSE "${_lemon_test_dir}")
unset(_lemon_test_dir)
unset(_lemon_test_result)
endif()
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(LEMON DEFAULT_MSG LEMON_EXECUTABLE LEMON_TEMPLATE)
# Define the macro
# LEMON_TARGET(<Name> <LemonInput> <LemonSource> <LemonHeader>
# [<ArgString>])
# which will create a custom rule to generate a parser. <LemonInput> is
# the path to a lemon file. <LemonSource> is the desired name for the
# generated source file. <LemonHeader> is the desired name for the
# generated header which contains the token list. Anything in the optional
# <ArgString> parameter is appended to the lemon command line.
#
# ====================================================================
# Example:
#
# find_package(LEMON)
# LEMON_TARGET(MyParser parser.y parser.c parser.h)
# add_executable(Foo main.cpp ${LEMON_MyParser_OUTPUTS})
# ====================================================================
include(CMakeParseArguments)
if(NOT COMMAND LEMON_TARGET)
macro(LEMON_TARGET Name Input)
get_filename_component(IN_FILE_WE ${Input} NAME_WE)
set(LVAR_PREFIX ${Name}_${IN_FILE_WE})
if(${ARGC} GREATER 3)
CMAKE_PARSE_ARGUMENTS(${LVAR_PREFIX} "" "OUT_SRC_FILE;OUT_HDR_FILE;WORKING_DIR;EXTRA_ARGS" "" ${ARGN})
endif(${ARGC} GREATER 3)
if (TARGET perplex_stage)
set(DEPS_TARGET perplex_stage)
endif (TARGET perplex_stage)
# Need a working directory
if("${${LVAR_PREFIX}_WORKING_DIR}" STREQUAL "")
set(${LVAR_PREFIX}_WORKING_DIR "${CMAKE_CURRENT_BINARY_DIR}/${LVAR_PREFIX}")
endif("${${LVAR_PREFIX}_WORKING_DIR}" STREQUAL "")
file(MAKE_DIRECTORY ${${LVAR_PREFIX}_WORKING_DIR})
# Output source file
if ("${${LVAR_PREFIX}_OUT_SRC_FILE}" STREQUAL "")
set(${LVAR_PREFIX}_OUT_SRC_FILE ${${LVAR_PREFIX}_WORKING_DIR}/${IN_FILE_WE}.c)
else ("${${LVAR_PREFIX}_OUT_SRC_FILE}" STREQUAL "")
get_filename_component(specified_out_dir ${${LVAR_PREFIX}_OUT_SRC_FILE} DIRECTORY)
if(NOT "${specified_out_dir}" STREQUAL "")
message(FATAL_ERROR "\nFull path specified for OUT_SRC_FILE - should be filename only.\n")
endif(NOT "${specified_out_dir}" STREQUAL "")
set(${LVAR_PREFIX}_OUT_SRC_FILE ${${LVAR_PREFIX}_WORKING_DIR}/${${LVAR_PREFIX}_OUT_SRC_FILE})
endif ("${${LVAR_PREFIX}_OUT_SRC_FILE}" STREQUAL "")
# Output header file
if ("${${LVAR_PREFIX}_OUT_HDR_FILE}" STREQUAL "")
set(${LVAR_PREFIX}_OUT_HDR_FILE ${${LVAR_PREFIX}_WORKING_DIR}/${IN_FILE_WE}.h)
else ("${${LVAR_PREFIX}_OUT_HDR_FILE}" STREQUAL "")
get_filename_component(specified_out_dir ${${LVAR_PREFIX}_OUT_HDR_FILE} DIRECTORY)
if(NOT "${specified_out_dir}" STREQUAL "")
message(FATAL_ERROR "\nFull path specified for OUT_HDR_FILE - should be filename only.\n")
endif(NOT "${specified_out_dir}" STREQUAL "")
set(${LVAR_PREFIX}_OUT_HDR_FILE ${${LVAR_PREFIX}_WORKING_DIR}/${${LVAR_PREFIX}_OUT_HDR_FILE})
endif ("${${LVAR_PREFIX}_OUT_HDR_FILE}" STREQUAL "")
# input file
get_filename_component(in_full ${Input} ABSOLUTE)
if("${in_full}" STREQUAL "${Input}")
set(lemon_in_file ${Input})
else("${in_full}" STREQUAL "${Input}")
set(lemon_in_file "${CMAKE_CURRENT_SOURCE_DIR}/${Input}")
endif("${in_full}" STREQUAL "${Input}")
# names of lemon output files will be based on the name of the input file
set(LEMON_GEN_SOURCE ${${LVAR_PREFIX}_WORKING_DIR}/${IN_FILE_WE}.c)
set(LEMON_GEN_HEADER ${${LVAR_PREFIX}_WORKING_DIR}/${IN_FILE_WE}.h)
set(LEMON_GEN_OUT ${${LVAR_PREFIX}_WORKING_DIR}/${IN_FILE_WE}.out)
# copy input to bin directory and run lemon
get_filename_component(INPUT_NAME ${Input} NAME)
add_custom_command(
OUTPUT ${LEMON_GEN_OUT} ${LEMON_GEN_SOURCE} ${LEMON_GEN_HEADER}
COMMAND ${CMAKE_COMMAND} -E copy ${lemon_in_file} ${${LVAR_PREFIX}_WORKING_DIR}/${INPUT_NAME}
COMMAND ${CMAKE_COMMAND} -E touch ${${LVAR_PREFIX}_WORKING_DIR}/${INPUT_NAME}-tmp_cpy.done
COMMAND ${CMAKE_COMMAND} -E remove ${${LVAR_PREFIX}_WORKING_DIR}/${INPUT_NAME}-tmp_cpy.done
COMMAND ${LEMON_EXECUTABLE} -T${LEMON_TEMPLATE} ${${LVAR_PREFIX}_WORKING_DIR}/${INPUT_NAME} ${${LVAR_PREFIX}__EXTRA_ARGS}
DEPENDS ${Input} ${LEMON_EXECUTABLE_TARGET} ${DEPS_TARGET}
WORKING_DIRECTORY ${${LVAR_PREFIX}_WORKING_DIR}
COMMENT "[LEMON][${Name}] Building parser with ${LEMON_EXECUTABLE}"
)
# rename generated outputs
if(NOT "${${LVAR_PREFIX}_OUT_SRC_FILE}" STREQUAL "${LEMON_GEN_SOURCE}")
add_custom_command(
OUTPUT ${${LVAR_PREFIX}_OUT_SRC_FILE} ${${LVAR_PREFIX}_OUT_SRC_FILE}-src_cpy.done
COMMAND ${CMAKE_COMMAND} -E copy ${LEMON_GEN_SOURCE} ${${LVAR_PREFIX}_OUT_SRC_FILE}
COMMAND ${CMAKE_COMMAND} -E touch ${${LVAR_PREFIX}_OUT_SRC_FILE}-src_cpy.done
DEPENDS ${LemonInput} ${LEMON_EXECUTABLE_TARGET} ${LEMON_GEN_SOURCE} ${DEPS_TARGET}
)
set(LEMON_${Name}_OUTPUTS ${${LVAR_PREFIX}_OUT_SRC_FILE} ${LEMON_${Name}_OUTPUTS} ${${LVAR_PREFIX}_OUT_SRC_FILE}-src_cpy.done)
endif(NOT "${${LVAR_PREFIX}_OUT_SRC_FILE}" STREQUAL "${LEMON_GEN_SOURCE}")
if(NOT "${${LVAR_PREFIX}_OUT_HDR_FILE}" STREQUAL "${LEMON_GEN_HEADER}")
add_custom_command(
OUTPUT ${${LVAR_PREFIX}_OUT_HDR_FILE} ${${LVAR_PREFIX}_OUT_HDR_FILE}-hdr_cpy.done
COMMAND ${CMAKE_COMMAND} -E copy ${LEMON_GEN_HEADER} ${${LVAR_PREFIX}_OUT_HDR_FILE}
COMMAND ${CMAKE_COMMAND} -E touch ${${LVAR_PREFIX}_OUT_HDR_FILE}-hdr_cpy.done
DEPENDS ${LemonInput} ${LEMON_EXECUTABLE_TARGET} ${LEMON_GEN_HEADER} ${DEPS_TARGET}
)
set(LEMON_${Name}_OUTPUTS ${${LVAR_PREFIX}_OUT_HDR_FILE} ${LEMON_${Name}_OUTPUTS} ${${LVAR_PREFIX}_OUT_HDR_FILE}-hdr_cpy.done)
endif(NOT "${${LVAR_PREFIX}_OUT_HDR_FILE}" STREQUAL "${LEMON_GEN_HEADER}")
set(LEMON_${Name}_OUTPUTS ${LEMON_${Name}_OUTPUTS} ${LEMON_GEN_OUT})
# make sure we clean up generated output and copied input
set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${LEMON_${Name}_OUTPUTS}")
set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${${LVAR_PREFIX}_WORKING_DIR}/${INPUT_NAME}")
# macro ran successfully
set(LEMON_${Name}_DEFINED TRUE)
set(LEMON_${Name}_SRC ${${LVAR_PREFIX}_OUT_SRC_FILE})
set(LEMON_${Name}_HDR ${${LVAR_PREFIX}_OUT_HDR_FILE})
set(LEMON_${Name}_INCLUDE_DIR ${${LVAR_PREFIX}_WORKING_DIR})
endmacro(LEMON_TARGET)
endif(NOT COMMAND LEMON_TARGET)
#============================================================
# FindLEMON.cmake ends here
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
+80
View File
@@ -0,0 +1,80 @@
#.rst:
# FindLMDB
# --------
#
# Find the native LMDB includes and library.
#
# IMPORTED Targets
# ^^^^^^^^^^^^^^^^
#
# This module defines :prop_tgt:`IMPORTED` target ``LMDB::LMDB``, if
# LMDB has been found.
#
# Result Variables
# ^^^^^^^^^^^^^^^^
#
# This module defines the following variables:
#
# ::
#
# LMDB_INCLUDE_DIRS - where to find lmdb.h, etc.
# LMDB_LIBRARIES - List of libraries when using lmdb.
# LMDB_FOUND - True if lmdb found.
#
# Hints
# ^^^^^
#
# A user may set ``LMDB_ROOT`` to a lmdb installation root to tell this
# module where to look.
#=============================================================================
# Copyright 2001-2011 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
set(_LMDB_SEARCHES)
# Search LMDB_ROOT first if it is set.
if(LMDB_ROOT)
set(_LMDB_SEARCH_ROOT PATHS ${LMDB_ROOT} NO_DEFAULT_PATH)
list(APPEND _LMDB_SEARCHES _LMDB_SEARCH_ROOT)
endif()
# Fall back to default system paths
set(_LMDB_SEARCH_NORMAL)
list(APPEND _LMDB_SEARCHES _LMDB_SEARCH_NORMAL)
set(LMDB_NAMES lmdb lmdbd)
# Try each search configuration.
foreach(search ${_LMDB_SEARCHES})
find_path(LMDB_INCLUDE_DIR NAMES lmdb.h ${${search}} PATH_SUFFIXES include include/lmdb)
find_library(LMDB_LIBRARY NAMES ${LMDB_NAMES} ${${search}} PATH_SUFFIXES lib)
endforeach()
mark_as_advanced(LMDB_LIBRARY LMDB_INCLUDE_DIR)
# handle the QUIETLY and REQUIRED arguments and set LMDB_FOUND to TRUE if
# all listed variables are TRUE
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(LMDB REQUIRED_VARS LMDB_LIBRARY LMDB_INCLUDE_DIR)
if(LMDB_FOUND)
set(LMDB_INCLUDE_DIRS ${LMDB_INCLUDE_DIR})
set(LMDB_LIBRARIES ${LMDB_LIBRARY})
if(NOT TARGET LMDB::LMDB)
add_library(LMDB::LMDB UNKNOWN IMPORTED)
set_target_properties(LMDB::LMDB PROPERTIES
IMPORTED_LOCATION "${LMDB_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${LMDB_INCLUDE_DIRS}")
endif()
endif()
+94
View File
@@ -0,0 +1,94 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
#[=======================================================================[.rst:
FindMANIFOLD
--------
Find the native MANIFOLD includes and library.
IMPORTED Targets
^^^^^^^^^^^^^^^^
This module defines :prop_tgt:`IMPORTED` target ``MANIFOLD::MANIFOLD``, if
MANIFOLD has been found.
Result Variables
^^^^^^^^^^^^^^^^
This module defines the following variables:
::
MANIFOLD_INCLUDE_DIRS - where to find manifold/manifold.h, etc.
MANIFOLD_LIBRARIES - List of libraries when using Manifold.
MANIFOLD_FOUND - True if Manifold found.
Hints
^^^^^
A user may set ``MANIFOLD_ROOT`` to a Manifold installation root to tell this
module where to look.
#]=======================================================================]
set(_MANIFOLD_SEARCHES)
# Search MANIFOLD_ROOT first if it is set.
if(MANIFOLD_ROOT)
set(_MANIFOLD_SEARCH_ROOT PATHS ${MANIFOLD_ROOT} NO_DEFAULT_PATH)
list(APPEND _MANIFOLD_SEARCHES _MANIFOLD_SEARCH_ROOT)
endif()
set(MANIFOLD_NAMES manifold)
# Try each search configuration.
foreach(search ${_MANIFOLD_SEARCHES})
find_path(MANIFOLD_INCLUDE_DIR NAMES manifold.h ${${search}} PATH_SUFFIXES include include/manifold)
endforeach()
# Allow MANIFOLD_LIBRARY to be set manually, as the location of the Manifold library
if(NOT MANIFOLD_LIBRARY)
foreach(search ${_MANIFOLD_SEARCHES})
find_library(MANIFOLD_LIBRARY NAMES ${MANIFOLD_NAMES} NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib)
endforeach()
endif()
unset(MANIFOLD_NAMES)
mark_as_advanced(MANIFOLD_INCLUDE_DIR)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(MANIFOLD REQUIRED_VARS MANIFOLD_LIBRARY MANIFOLD_INCLUDE_DIR)
if(MANIFOLD_FOUND)
set(MANIFOLD_INCLUDE_DIRS ${MANIFOLD_INCLUDE_DIR})
if(NOT MANIFOLD_LIBRARIES)
set(MANIFOLD_LIBRARIES ${MANIFOLD_LIBRARY})
endif()
if(NOT TARGET MANIFOLD::MANIFOLD)
add_library(MANIFOLD::MANIFOLD UNKNOWN IMPORTED)
set_target_properties(MANIFOLD::MANIFOLD PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${MANIFOLD_INCLUDE_DIRS}")
if(MANIFOLD_LIBRARY_RELEASE)
set_property(TARGET MANIFOLD::MANIFOLD APPEND PROPERTY
IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(MANIFOLD::MANIFOLD PROPERTIES
IMPORTED_LOCATION_RELEASE "${MANIFOLD_LIBRARY_RELEASE}")
endif()
if(MANIFOLD_LIBRARY_DEBUG)
set_property(TARGET MANIFOLD::MANIFOLD APPEND PROPERTY
IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(MANIFOLD::MANIFOLD PROPERTIES
IMPORTED_LOCATION_DEBUG "${MANIFOLD_LIBRARY_DEBUG}")
endif()
if(NOT MANIFOLD_LIBRARY_RELEASE AND NOT MANIFOLD_LIBRARY_DEBUG)
set_property(TARGET MANIFOLD::MANIFOLD APPEND PROPERTY
IMPORTED_LOCATION "${MANIFOLD_LIBRARY}")
endif()
endif()
endif()
+94
View File
@@ -0,0 +1,94 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
#[=======================================================================[.rst:
FindMMESH
--------
Find the native MMESH includes and library.
IMPORTED Targets
^^^^^^^^^^^^^^^^
This module defines :prop_tgt:`IMPORTED` target ``MMESH::MMESH``, if
MMESH has been found.
Result Variables
^^^^^^^^^^^^^^^^
This module defines the following variables:
::
MMESH_INCLUDE_DIRS - where to find mmesh.h, etc.
MMESH_LIBRARIES - List of libraries when using openNURBS.
MMESH_FOUND - True if openNURBS found.
Hints
^^^^^
A user may set ``MMESH_ROOT`` to a openNURBS installation root to tell this
module where to look.
#]=======================================================================]
set(_MMESH_SEARCHES)
# Search MMESH_ROOT first if it is set.
if(MMESH_ROOT)
set(_MMESH_SEARCH_ROOT PATHS ${MMESH_ROOT} NO_DEFAULT_PATH)
list(APPEND _MMESH_SEARCHES _MMESH_SEARCH_ROOT)
endif()
set(MMESH_NAMES mmesh OSMesa)
# Try each search configuration.
foreach(search ${_MMESH_SEARCHES})
find_path(MMESH_INCLUDE_DIR NAMES meshdecimation.h ${${search}} PATH_SUFFIXES include/mmesh mmesh)
endforeach()
# Allow MMESH_LIBRARY to be set manually, as the location of the openNURBS library
if(NOT MMESH_LIBRARY)
foreach(search ${_MMESH_SEARCHES})
find_library(MMESH_LIBRARY NAMES ${MMESH_NAMES} NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib)
endforeach()
endif()
unset(MMESH_NAMES)
mark_as_advanced(MMESH_INCLUDE_DIR)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(MMESH REQUIRED_VARS MMESH_LIBRARY MMESH_INCLUDE_DIR)
if(MMESH_FOUND)
set(MMESH_INCLUDE_DIRS ${MMESH_INCLUDE_DIR})
if(NOT MMESH_LIBRARIES)
set(MMESH_LIBRARIES ${MMESH_LIBRARY})
endif()
if(NOT TARGET MMESH::MMESH)
add_library(MMESH::MMESH UNKNOWN IMPORTED)
set_target_properties(MMESH::MMESH PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${MMESH_INCLUDE_DIRS}")
if(MMESH_LIBRARY_RELEASE)
set_property(TARGET MMESH::MMESH APPEND PROPERTY
IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(MMESH::MMESH PROPERTIES
IMPORTED_LOCATION_RELEASE "${MMESH_LIBRARY_RELEASE}")
endif()
if(MMESH_LIBRARY_DEBUG)
set_property(TARGET MMESH::MMESH APPEND PROPERTY
IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(MMESH::MMESH PROPERTIES
IMPORTED_LOCATION_DEBUG "${MMESH_LIBRARY_DEBUG}")
endif()
if(NOT MMESH_LIBRARY_RELEASE AND NOT MMESH_LIBRARY_DEBUG)
set_property(TARGET MMESH::MMESH APPEND PROPERTY
IMPORTED_LOCATION "${MMESH_LIBRARY}")
endif()
endif()
endif()
+102
View File
@@ -0,0 +1,102 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
#[=======================================================================[.rst:
FindNETPBM
--------
Find the native NETPBM includes and library.
IMPORTED Targets
^^^^^^^^^^^^^^^^
This module defines :prop_tgt:`IMPORTED` target ``NETPBM::NETPBM``, if
NETPBM has been found.
Result Variables
^^^^^^^^^^^^^^^^
This module defines the following variables:
::
NETPBM_INCLUDE_DIRS - where to find pam.h, etc.
NETPBM_LIBRARIES - List of libraries when using netpbm.
NETPBM_FOUND - True if netpbm found.
Hints
^^^^^
A user may set ``NETPBM_ROOT`` to a netpbm installation root to tell this
module where to look.
#]=======================================================================]
set(_NETPBM_SEARCHES)
# Search NETPBM_ROOT first if it is set.
if(NETPBM_ROOT)
set(_NETPBM_SEARCH_ROOT PATHS ${NETPBM_ROOT} NO_DEFAULT_PATH)
list(APPEND _NETPBM_SEARCHES _NETPBM_SEARCH_ROOT)
endif()
# Normal search.
set(_NETPBM_x86 "(x86)")
set(_NETPBM_SEARCH_NORMAL
PATHS "$ENV{ProgramFiles}/netpbm"
"$ENV{ProgramFiles${_NETPBM_x86}}/netpbm")
unset(_NETPBM_x86)
list(APPEND _NETPBM_SEARCHES _NETPBM_SEARCH_NORMAL)
set(NETPBM_NAMES netpbm)
# Try each search configuration.
foreach(search ${_NETPBM_SEARCHES})
find_path(NETPBM_INCLUDE_DIR NAMES pam.h ${${search}} PATH_SUFFIXES include include/netpbm netpbm)
endforeach()
# Allow NETPBM_LIBRARY to be set manually, as the location of the netpbm library
if(NOT NETPBM_LIBRARY)
foreach(search ${_NETPBM_SEARCHES})
find_library(NETPBM_LIBRARY NAMES ${NETPBM_NAMES} NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib)
endforeach()
endif()
unset(NETPBM_NAMES)
mark_as_advanced(NETPBM_INCLUDE_DIR)
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(NETPBM REQUIRED_VARS NETPBM_LIBRARY NETPBM_INCLUDE_DIR)
if(NETPBM_FOUND)
set(NETPBM_INCLUDE_DIRS ${NETPBM_INCLUDE_DIR})
if(NOT NETPBM_LIBRARIES)
set(NETPBM_LIBRARIES ${NETPBM_LIBRARY})
endif()
if(NOT TARGET NETPBM::NETPBM)
add_library(NETPBM::NETPBM UNKNOWN IMPORTED)
set_target_properties(NETPBM::NETPBM PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${NETPBM_INCLUDE_DIRS}")
if(NETPBM_LIBRARY_RELEASE)
set_property(TARGET NETPBM::NETPBM APPEND PROPERTY
IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(NETPBM::NETPBM PROPERTIES
IMPORTED_LOCATION_RELEASE "${NETPBM_LIBRARY_RELEASE}")
endif()
if(NETPBM_LIBRARY_DEBUG)
set_property(TARGET NETPBM::NETPBM APPEND PROPERTY
IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(NETPBM::NETPBM PROPERTIES
IMPORTED_LOCATION_DEBUG "${NETPBM_LIBRARY_DEBUG}")
endif()
if(NOT NETPBM_LIBRARY_RELEASE AND NOT NETPBM_LIBRARY_DEBUG)
set_property(TARGET NETPBM::NETPBM APPEND PROPERTY
IMPORTED_LOCATION "${NETPBM_LIBRARY}")
endif()
endif()
endif()
+103
View File
@@ -0,0 +1,103 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
#[=======================================================================[.rst:
FindOPENNURBS
--------
Find the native OPENNURBS includes and library.
IMPORTED Targets
^^^^^^^^^^^^^^^^
This module defines :prop_tgt:`IMPORTED` target ``OPENNURBS::OPENNURBS``, if
OPENNURBS has been found.
Result Variables
^^^^^^^^^^^^^^^^
This module defines the following variables:
::
OPENNURBS_INCLUDE_DIRS - where to find opennurbs.h, etc.
OPENNURBS_LIBRARIES - List of libraries when using openNURBS.
OPENNURBS_FOUND - True if openNURBS found.
Hints
^^^^^
A user may set ``OPENNURBS_ROOT`` to a openNURBS installation root to tell this
module where to look.
#]=======================================================================]
set(_OPENNURBS_SEARCHES)
# Search OPENNURBS_ROOT first if it is set.
if(OPENNURBS_ROOT)
set(_OPENNURBS_SEARCH_ROOT PATHS ${OPENNURBS_ROOT} NO_DEFAULT_PATH)
list(APPEND _OPENNURBS_SEARCHES _OPENNURBS_SEARCH_ROOT)
endif()
# Normal search.
set(_OPENNURBS_x86 "(x86)")
set(_OPENNURBS_SEARCH_NORMAL
PATHS "$ENV{ProgramFiles}/openNURBS"
"$ENV{ProgramFiles${_OPENNURBS_x86}}/openNURBS")
unset(_OPENNURBS_x86)
list(APPEND _OPENNURBS_SEARCHES _OPENNURBS_SEARCH_NORMAL)
set(OPENNURBS_NAMES openNURBS OpenNURBS)
# Try each search configuration.
foreach(search ${_OPENNURBS_SEARCHES})
find_path(OPENNURBS_INCLUDE_DIR NAMES opennurbs.h ${${search}} PATH_SUFFIXES include include/openNURBS openNURBS include/OpenNURBS OpenNURBS)
find_path(OPENNURBS_X_INCLUDE_DIR NAMES opennurbs_x.h ${${search}} PATH_SUFFIXES include include/openNURBS openNURBS include/OpenNURBS OpenNURBS)
endforeach()
# Allow OPENNURBS_LIBRARY to be set manually, as the location of the openNURBS library
if(NOT OPENNURBS_LIBRARY)
foreach(search ${_OPENNURBS_SEARCHES})
find_library(OPENNURBS_LIBRARY NAMES ${OPENNURBS_NAMES} NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib)
endforeach()
endif()
unset(OPENNURBS_NAMES)
mark_as_advanced(OPENNURBS_INCLUDE_DIR)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(OPENNURBS REQUIRED_VARS OPENNURBS_LIBRARY OPENNURBS_INCLUDE_DIR OPENNURBS_X_INCLUDE_DIR)
if(OPENNURBS_FOUND)
set(OPENNURBS_INCLUDE_DIRS ${OPENNURBS_INCLUDE_DIR})
if(NOT OPENNURBS_LIBRARIES)
set(OPENNURBS_LIBRARIES ${OPENNURBS_LIBRARY})
endif()
if(NOT TARGET OPENNURBS::OPENNURBS)
add_library(OPENNURBS::OPENNURBS UNKNOWN IMPORTED)
set_target_properties(OPENNURBS::OPENNURBS PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${OPENNURBS_INCLUDE_DIRS}")
if(OPENNURBS_LIBRARY_RELEASE)
set_property(TARGET OPENNURBS::OPENNURBS APPEND PROPERTY
IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(OPENNURBS::OPENNURBS PROPERTIES
IMPORTED_LOCATION_RELEASE "${OPENNURBS_LIBRARY_RELEASE}")
endif()
if(OPENNURBS_LIBRARY_DEBUG)
set_property(TARGET OPENNURBS::OPENNURBS APPEND PROPERTY
IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(OPENNURBS::OPENNURBS PROPERTIES
IMPORTED_LOCATION_DEBUG "${OPENNURBS_LIBRARY_DEBUG}")
endif()
if(NOT OPENNURBS_LIBRARY_RELEASE AND NOT OPENNURBS_LIBRARY_DEBUG)
set_property(TARGET OPENNURBS::OPENNURBS APPEND PROPERTY
IMPORTED_LOCATION "${OPENNURBS_LIBRARY}")
endif()
endif()
endif()
+94
View File
@@ -0,0 +1,94 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
#[=======================================================================[.rst:
FindOSMESA
--------
Find the native OSMESA includes and library.
IMPORTED Targets
^^^^^^^^^^^^^^^^
This module defines :prop_tgt:`IMPORTED` target ``OSMESA::OSMESA``, if
OSMESA has been found.
Result Variables
^^^^^^^^^^^^^^^^
This module defines the following variables:
::
OSMESA_INCLUDE_DIRS - where to find osmesa.h, etc.
OSMESA_LIBRARIES - List of libraries when using openNURBS.
OSMESA_FOUND - True if openNURBS found.
Hints
^^^^^
A user may set ``OSMESA_ROOT`` to a openNURBS installation root to tell this
module where to look.
#]=======================================================================]
set(_OSMESA_SEARCHES)
# Search OSMESA_ROOT first if it is set.
if(OSMESA_ROOT)
set(_OSMESA_SEARCH_ROOT PATHS ${OSMESA_ROOT} NO_DEFAULT_PATH)
list(APPEND _OSMESA_SEARCHES _OSMESA_SEARCH_ROOT)
endif()
set(OSMESA_NAMES osmesa OSMesa)
# Try each search configuration.
foreach(search ${_OSMESA_SEARCHES})
find_path(OSMESA_INCLUDE_DIR NAMES osmesa.h ${${search}} PATH_SUFFIXES include include/OSMesa OSMesa)
endforeach()
# Allow OSMESA_LIBRARY to be set manually, as the location of the openNURBS library
if(NOT OSMESA_LIBRARY)
foreach(search ${_OSMESA_SEARCHES})
find_library(OSMESA_LIBRARY NAMES ${OSMESA_NAMES} NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib)
endforeach()
endif()
unset(OSMESA_NAMES)
mark_as_advanced(OSMESA_INCLUDE_DIR)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(OSMESA REQUIRED_VARS OSMESA_LIBRARY OSMESA_INCLUDE_DIR)
if(OSMESA_FOUND)
set(OSMESA_INCLUDE_DIRS ${OSMESA_INCLUDE_DIR})
if(NOT OSMESA_LIBRARIES)
set(OSMESA_LIBRARIES ${OSMESA_LIBRARY})
endif()
if(NOT TARGET OSMESA::OSMESA)
add_library(OSMESA::OSMESA UNKNOWN IMPORTED)
set_target_properties(OSMESA::OSMESA PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${OSMESA_INCLUDE_DIRS}")
if(OSMESA_LIBRARY_RELEASE)
set_property(TARGET OSMESA::OSMESA APPEND PROPERTY
IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(OSMESA::OSMESA PROPERTIES
IMPORTED_LOCATION_RELEASE "${OSMESA_LIBRARY_RELEASE}")
endif()
if(OSMESA_LIBRARY_DEBUG)
set_property(TARGET OSMESA::OSMESA APPEND PROPERTY
IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(OSMESA::OSMESA PROPERTIES
IMPORTED_LOCATION_DEBUG "${OSMESA_LIBRARY_DEBUG}")
endif()
if(NOT OSMESA_LIBRARY_RELEASE AND NOT OSMESA_LIBRARY_DEBUG)
set_property(TARGET OSMESA::OSMESA APPEND PROPERTY
IMPORTED_LOCATION "${OSMESA_LIBRARY}")
endif()
endif()
endif()
+292
View File
@@ -0,0 +1,292 @@
#
# - Find perplex executable and provides macros to generate custom build rules
# The module defines the following variables
#
# PERPLEX_EXECUTABLE - path to the perplex program
# PERPLEX_TEMPLATE - location of the perplex template file
#=============================================================================
# F I N D P E R P L E X . C M A K E
#
# Originally based off of FindBISON.cmake from Kitware's CMake distribution
#
# Copyright (c) 2010-2023 United States Government as represented by
# the U.S. Army Research Laboratory.
# Copyright 2009 Kitware, Inc.
# Copyright 2006 Tristan Carel
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# * The names of the authors may not be used to endorse or promote
# products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#=============================================================================
set(_PERPLEX_SEARCHES)
# Search PERPLEX_ROOT first if it is set.
if(PERPLEX_ROOT)
set(_PERPLEX_SEARCH_ROOT PATHS ${PERPLEX_ROOT} NO_DEFAULT_PATH)
list(APPEND _PERPLEX_SEARCHES _PERPLEX_SEARCH_ROOT)
endif()
# Normal search.
set(_PERPLEX_x86 "(x86)")
set(_PERPLEX_SEARCH_NORMAL
PATHS "$ENV{ProgramFiles}/perplex"
"$ENV{ProgramFiles${_PERPLEX_x86}}/perplex")
unset(_PERPLEX_x86)
list(APPEND _PERPLEX_SEARCHES _PERPLEX_SEARCH_NORMAL)
set(PERPLEX_NAMES perplex)
# Try each search configuration.
foreach(search ${_PERPLEX_SEARCHES})
find_program(PERPLEX_EXECUTABLE perplex ${${search}} PATH_SUFFIXES bin)
endforeach()
mark_as_advanced(PERPLEX_EXECUTABLE)
foreach(search ${_PERPLEX_SEARCHES})
find_file(PERPLEX_TEMPLATE perplex_template.c ${${search}} PATH_SUFFIXES ${DATA_DIR} ${DATA_DIR}/perplex)
endforeach()
mark_as_advanced(PERPLEX_TEMPLATE)
if(PERPLEX_EXECUTABLE AND NOT PERPLEX_TEMPLATE)
get_filename_component(perplex_path ${PERPLEX_EXECUTABLE} DIRECTORY)
if(perplex_path)
set(PERPLEX_TEMPLATE "")
if(EXISTS ${perplex_path}/../share/perplex/perplex_template.c)
get_filename_component(perplex_template_path "${perplex_path}/../share/perplex/perplex_template.c" ABSOLUTE)
set(PERPLEX_TEMPLATE "${perplex_template_path}")
endif(EXISTS ${perplex_path}/../share/perplex/perplex_template.c)
if(EXISTS ${perplex_path}/../share/perplex_template.c AND NOT PERPLEX_TEMPLATE)
get_filename_component(perplex_template_path "${perplex_path}/../share/perplex_template.c" ABSOLUTE)
set(PERPLEX_TEMPLATE "${perplex_template_path}")
endif(EXISTS ${perplex_path}/../share/perplex_template.c AND NOT PERPLEX_TEMPLATE)
endif(perplex_path)
if(EXISTS /usr/share/perplex/perplex_template.c AND NOT PERPLEX_TEMPLATE)
set(PERPLEX_TEMPLATE "/usr/share/perplex/perplex_template.c")
endif(EXISTS /usr/share/perplex/perplex_template.c AND NOT PERPLEX_TEMPLATE)
endif(PERPLEX_EXECUTABLE AND NOT PERPLEX_TEMPLATE)
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(PERPLEX DEFAULT_MSG PERPLEX_EXECUTABLE PERPLEX_TEMPLATE)
mark_as_advanced(PERPLEX_TEMPLATE)
# Defines two macros - PERPLEX_TARGET, which takes perplex inputs and
# runs both perplex and re2c to generate C source code/headers, and
# ADD_PERPLEX_LEMON_DEPENDENCY which is used to set up dependencies between
# scanner and parser targets when necessary.
#
# #====================================================================
# Example:
#
# find_package(LEMON)
# find_package(RE2C)
# find_package(PERPLEX)
#
# LEMON_TARGET(MyParser parser.y "${CMAKE_CURRENT_BINARY_DIR}/parser.cpp")
# PERPLEX_TARGET(MyScanner scanner.re "${CMAKE_CURRENT_BINARY_DIR}/scanner.cpp" "${CMAKE_CURRENT_BINARY_DIR}/scanner_header.hpp")
# ADD_PERPLEX_LEMON_DEPENDENCY(MyScanner MyParser)
#
# include_directories("${CMAKE_CURRENT_BINARY_DIR}")
# add_executable(Foo
# Foo.cc
# ${LEMON_MyParser_OUTPUTS}
# ${PERPLEX_MyScanner_OUTPUTS}
# )
# ====================================================================
#
#=============================================================================
#
# Originally based off of FindBISON.cmake from Kitware's CMake distribution
#
# Copyright (c) 2010-2023 United States Government as represented by
# the U.S. Army Research Laboratory.
# Copyright 2009 Kitware, Inc.
# Copyright 2006 Tristan Carel
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# * The names of the authors may not be used to endorse or promote
# products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#=============================================================================
#============================================================
# PERPLEX_TARGET (public macro)
#============================================================
include(CMakeParseArguments)
if(NOT COMMAND PERPLEX_TARGET)
macro(PERPLEX_TARGET Name Input)
get_filename_component(IN_FILE_WE ${Input} NAME_WE)
set(PVAR_PREFIX ${Name}_${IN_FILE_WE})
if (TARGET perplex_stage)
set(DEP_TARGET perplex_stage)
endif (TARGET perplex_stage)
if(${ARGC} GREATER 3)
CMAKE_PARSE_ARGUMENTS(${PVAR_PREFIX} "" "TEMPLATE;OUT_SRC_FILE;OUT_HDR_FILE;WORKING_DIR" "" ${ARGN})
endif(${ARGC} GREATER 3)
# Need a working directory
if("${${PVAR_PREFIX}_WORKING_DIR}" STREQUAL "")
set(${PVAR_PREFIX}_WORKING_DIR "${CMAKE_CURRENT_BINARY_DIR}/${PVAR_PREFIX}")
endif("${${PVAR_PREFIX}_WORKING_DIR}" STREQUAL "")
file(MAKE_DIRECTORY ${${PVAR_PREFIX}_WORKING_DIR})
# Set up intermediate and final output names
# Output source file
if ("${${PVAR_PREFIX}_OUT_SRC_FILE}" STREQUAL "")
set(${PVAR_PREFIX}_OUT_SRC_FILE ${${PVAR_PREFIX}_WORKING_DIR}/${IN_FILE_WE}.c)
else ("${${PVAR_PREFIX}_OUT_SRC_FILE}" STREQUAL "")
get_filename_component(specified_out_dir ${${PVAR_PREFIX}_OUT_SRC_FILE} DIRECTORY)
if(NOT "${specified_out_dir}" STREQUAL "")
message(FATAL_ERROR "\nFull path specified for OUT_SRC_FILE - should be filename only.\n")
endif(NOT "${specified_out_dir}" STREQUAL "")
set(${PVAR_PREFIX}_OUT_SRC_FILE ${${PVAR_PREFIX}_WORKING_DIR}/${${PVAR_PREFIX}_OUT_SRC_FILE})
endif ("${${PVAR_PREFIX}_OUT_SRC_FILE}" STREQUAL "")
# Output header file
if ("${${PVAR_PREFIX}_OUT_HDR_FILE}" STREQUAL "")
set(${PVAR_PREFIX}_OUT_HDR_FILE ${${PVAR_PREFIX}_WORKING_DIR}/${IN_FILE_WE}.h)
else ("${${PVAR_PREFIX}_OUT_HDR_FILE}" STREQUAL "")
get_filename_component(specified_out_dir ${${PVAR_PREFIX}_OUT_HDR_FILE} DIRECTORY)
if(NOT "${specified_out_dir}" STREQUAL "")
message(FATAL_ERROR "\nFull path specified for OUT_HDR_FILE - should be filename only.\n")
endif(NOT "${specified_out_dir}" STREQUAL "")
set(${PVAR_PREFIX}_OUT_HDR_FILE ${${PVAR_PREFIX}_WORKING_DIR}/${${PVAR_PREFIX}_OUT_HDR_FILE})
endif ("${${PVAR_PREFIX}_OUT_HDR_FILE}" STREQUAL "")
# input file
get_filename_component(in_full ${Input} ABSOLUTE)
if("${in_full}" STREQUAL "${Input}")
set(perplex_in_file ${Input})
else("${in_full}" STREQUAL "${Input}")
set(perplex_in_file "${CMAKE_CURRENT_SOURCE_DIR}/${Input}")
endif("${in_full}" STREQUAL "${Input}")
# Intermediate file
set(re2c_src "${${PVAR_PREFIX}_WORKING_DIR}/${IN_FILE_WE}.re")
# Make sure we have a template
if ("${${PVAR_PREFIX}_TEMPLATE}" STREQUAL "")
if(PERPLEX_TEMPLATE)
set(${PVAR_PREFIX}_TEMPLATE ${PERPLEX_TEMPLATE})
else(PERPLEX_TEMPLATE)
message(FATAL_ERROR "\nNo Perplex template file specified - please specify the file using the PERPLEX_TEMPLATE variable:\ncmake .. -DPERPLEX_TEMPLATE=/path/to/template_file.c\n")
endif(PERPLEX_TEMPLATE)
endif ("${${PVAR_PREFIX}_TEMPLATE}" STREQUAL "")
get_filename_component(IN_FILE ${Input} NAME)
add_custom_command(
OUTPUT ${re2c_src} ${${PVAR_PREFIX}_OUT_HDR_FILE} ${${PVAR_PREFIX}_WORKING_DIR}/${IN_FILE}
COMMAND ${CMAKE_COMMAND} -E copy ${perplex_in_file} ${${PVAR_PREFIX}_WORKING_DIR}/${IN_FILE}
COMMAND ${CMAKE_COMMAND} -E touch ${${PVAR_PREFIX}_WORKING_DIR}/${IN_FILE}_cpy.done
COMMAND ${CMAKE_COMMAND} -E remove ${${PVAR_PREFIX}_WORKING_DIR}/${IN_FILE}_cpy.done
COMMAND ${PERPLEX_EXECUTABLE} -c -o ${re2c_src} -i ${${PVAR_PREFIX}_OUT_HDR_FILE} -t ${${PVAR_PREFIX}_TEMPLATE} ${${PVAR_PREFIX}_WORKING_DIR}/${IN_FILE}
DEPENDS ${Input} ${PERPLEX_EXECUTABLE_TARGET} ${RE2C_EXECUTABLE_TARGET} ${DEP_TARGET}
WORKING_DIRECTORY ${${PVAR_PREFIX}_WORKING_DIR}
COMMENT "[PERPLEX][${Name}] Generating re2c input with ${PERPLEX_EXECUTABLE}"
)
if(NOT DEBUGGING_GENERATED_SOURCES)
add_custom_command(
OUTPUT ${${PVAR_PREFIX}_OUT_SRC_FILE}
COMMAND ${RE2C_EXECUTABLE} --no-debug-info --no-generation-date -c -o ${${PVAR_PREFIX}_OUT_SRC_FILE} ${re2c_src}
DEPENDS ${Input} ${re2c_src} ${${PVAR_PREFIX}_OUT_HDR_FILE} ${PERPLEX_EXECUTABLE_TARGET} ${RE2C_EXECUTABLE_TARGET} ${DEP_TARGET}
WORKING_DIRECTORY ${${PVAR_PREFIX}_WORKING_DIR}
COMMENT "[RE2C][${Name}] Building scanner with ${RE2C_EXECUTABLE}"
)
else(NOT DEBUGGING_GENERATED_SOURCES)
add_custom_command(
OUTPUT ${${PVAR_PREFIX}_OUT_SRC_FILE}
COMMAND ${RE2C_EXECUTABLE} --no-generation-date -c -o ${${PVAR_PREFIX}_OUT_SRC_FILE} ${re2c_src}
DEPENDS ${Input} ${re2c_src} ${${PVAR_PREFIX}_OUT_HDR_FILE} ${PERPLEX_EXECUTABLE_TARGET} ${RE2C_EXECUTABLE_TARGET} ${DEP_TARGET}
WORKING_DIRECTORY ${${PVAR_PREFIX}_WORKING_DIR}
COMMENT "[RE2C][${Name}] Building scanner with ${RE2C_EXECUTABLE}"
)
endif(NOT DEBUGGING_GENERATED_SOURCES)
set(PERPLEX_${Name}_DEFINED TRUE)
set(PERPLEX_${Name}_SRC ${${PVAR_PREFIX}_OUT_SRC_FILE})
set(PERPLEX_${Name}_HDR ${${PVAR_PREFIX}_OUT_HDR_FILE})
set(PERPLEX_${Name}_INCLUDE_DIR ${${PVAR_PREFIX}_WORKING_DIR})
endmacro(PERPLEX_TARGET)
endif(NOT COMMAND PERPLEX_TARGET)
#============================================================
# ADD_PERPLEX_LEMON_DEPENDENCY (public macro)
#============================================================
if(NOT COMMAND ADD_PERPLEX_LEMON_DEPENDENCY)
macro(ADD_PERPLEX_LEMON_DEPENDENCY PERPLEXTarget LemonTarget)
if(NOT PERPLEX_${PERPLEXTarget}_SRC)
message(SEND_ERROR "PERPLEX target `${PERPLEXTarget}' does not exists.")
endif()
if(NOT LEMON_${LemonTarget}_HDR)
message(SEND_ERROR "Lemon target `${LemonTarget}' does not exists.")
endif()
set_source_files_properties(${PERPLEX_${PERPLEXTarget}_SRC}
PROPERTIES OBJECT_DEPENDS ${LEMON_${LemonTarget}_HDR})
endmacro(ADD_PERPLEX_LEMON_DEPENDENCY)
endif(NOT COMMAND ADD_PERPLEX_LEMON_DEPENDENCY)
#============================================================
# FindPERPLEX.cmake ends here
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
+199
View File
@@ -0,0 +1,199 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
#[=======================================================================[.rst:
FindPNG
-------
Find libpng, the official reference library for the PNG image format.
Imported targets
^^^^^^^^^^^^^^^^
.. versionadded:: 3.5
This module defines the following :prop_tgt:`IMPORTED` target:
``PNG::PNG``
The libpng library, if found.
Result variables
^^^^^^^^^^^^^^^^
This module will set the following variables in your project:
``PNG_INCLUDE_DIRS``
where to find png.h, etc.
``PNG_LIBRARIES``
the libraries to link against to use PNG.
``PNG_DEFINITIONS``
You should add_definitions(${PNG_DEFINITIONS}) before compiling code
that includes png library files.
``PNG_FOUND``
If false, do not try to use PNG.
``PNG_VERSION_STRING``
the version of the PNG library found (since CMake 2.8.8)
Obsolete variables
^^^^^^^^^^^^^^^^^^
The following variables may also be set, for backwards compatibility:
``PNG_LIBRARY``
where to find the PNG library.
``PNG_INCLUDE_DIR``
where to find the PNG headers (same as PNG_INCLUDE_DIRS)
Since PNG depends on the ZLib compression library, none of the above
will be defined unless ZLib can be found.
#]=======================================================================]
if(PNG_FIND_QUIETLY)
set(_FIND_ZLIB_ARG QUIET)
endif()
find_package(ZLIB ${_FIND_ZLIB_ARG})
if(ZLIB_FOUND)
set(_PNG_SEARCHES)
if(APPLE)
set(_PNG_CMAKE_FIND_FRAMEWORK "${CMAKE_FIND_FRAMEWORK}")
set(CMAKE_FIND_FRAMEWORK LAST)
endif()
# Search PNG_ROOT first if it is set.
if(PNG_ROOT)
set(_PNG_SEARCH_ROOT PATHS ${PNG_ROOT} NO_DEFAULT_PATH)
list(APPEND _PNG_SEARCHES _PNG_SEARCH_ROOT)
endif()
list(APPEND PNG_NAMES png_brl libpng_brl png libpng)
unset(PNG_NAMES_DEBUG)
set(_PNG_VERSION_SUFFIXES 17 16 15 14 12)
if (PNG_FIND_VERSION MATCHES "^([0-9]+)\\.([0-9]+)(\\..*)?$")
set(_PNG_VERSION_SUFFIX_MIN "${CMAKE_MATCH_1}${CMAKE_MATCH_2}")
if (PNG_FIND_VERSION_EXACT)
set(_PNG_VERSION_SUFFIXES ${_PNG_VERSION_SUFFIX_MIN})
else ()
string(REGEX REPLACE
"${_PNG_VERSION_SUFFIX_MIN}.*" "${_PNG_VERSION_SUFFIX_MIN}"
_PNG_VERSION_SUFFIXES "${_PNG_VERSION_SUFFIXES}")
endif ()
unset(_PNG_VERSION_SUFFIX_MIN)
endif ()
foreach(v IN LISTS _PNG_VERSION_SUFFIXES)
list(APPEND PNG_NAMES png_brl${v} libpng_brl${v} png${v} libpng${v} libpng${v}_static)
list(APPEND PNG_NAMES_DEBUG png_brl${v}d libpng_brl${v}d png${v}d libpng${v}d libpng${v}_staticd)
endforeach()
unset(_PNG_VERSION_SUFFIXES)
# Try each search configuration.
# For compatibility with versions prior to this multi-config search, honor
# any PNG_LIBRARY that is already specified and skip the search.
if(NOT PNG_LIBRARY)
foreach(search ${_PNG_SEARCHES})
find_path(PNG_PNG_INCLUDE_DIR png.h ${${search}} PATH_SUFFIXES include include/libpng)
find_library(PNG_LIBRARY_RELEASE ${${search}} NAMES ${PNG_NAMES} NAMES_PER_DIR PATH_SUFFIXES lib)
find_library(PNG_LIBRARY_DEBUG ${${search}} NAMES ${PNG_NAMES_DEBUG} NAMES_PER_DIR PATH_SUFFIXES lib)
include(SelectLibraryConfigurations)
select_library_configurations(PNG)
mark_as_advanced(PNG_LIBRARY_RELEASE PNG_LIBRARY_DEBUG)
endforeach()
endif()
mark_as_advanced(PNG_LIBRARY)
mark_as_advanced(PNG_PNG_INCLUDE_DIR)
# If we still don't have PNG_LIBRARY, try without specifying search paths
if(NOT PNG_LIBRARY)
find_library(PNG_LIBRARY_RELEASE NAMES ${PNG_NAMES} NAMES_PER_DIR PATH_SUFFIXES lib)
find_library(PNG_LIBRARY_DEBUG NAMES ${PNG_NAMES_DEBUG} NAMES_PER_DIR PATH_SUFFIXES lib)
include(SelectLibraryConfigurations)
select_library_configurations(PNG)
mark_as_advanced(PNG_LIBRARY_RELEASE PNG_LIBRARY_DEBUG)
endif()
if(APPLE)
set(CMAKE_FIND_FRAMEWORK "${_PNG_CMAKE_FIND_FRAMEWORK}")
unset(_PNG_CMAKE_FIND_FRAMEWORK)
endif()
unset(PNG_NAMES)
unset(PNG_NAMES_DEBUG)
# Set by select_library_configurations(), but we want the one from
# find_package_handle_standard_args() below.
unset(PNG_FOUND)
if (PNG_LIBRARY AND PNG_PNG_INCLUDE_DIR)
# png.h includes zlib.h. Sigh.
set(PNG_INCLUDE_DIRS ${PNG_PNG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR} )
set(PNG_INCLUDE_DIR ${PNG_INCLUDE_DIRS} ) # for backward compatibility
set(PNG_LIBRARIES ${PNG_LIBRARY} ${ZLIB_LIBRARY})
if((CMAKE_SYSTEM_NAME STREQUAL "Linux") AND
("${PNG_LIBRARY}" MATCHES "\\${CMAKE_STATIC_LIBRARY_SUFFIX}$"))
list(APPEND PNG_LIBRARIES m)
endif()
if (CYGWIN)
if(BUILD_SHARED_LIBS)
# No need to define PNG_USE_DLL here, because it's default for Cygwin.
else()
set (PNG_DEFINITIONS -DPNG_STATIC)
set(_PNG_COMPILE_DEFINITIONS PNG_STATIC)
endif()
endif ()
if(NOT TARGET PNG::PNG)
add_library(PNG::PNG UNKNOWN IMPORTED)
set_target_properties(PNG::PNG PROPERTIES
IMPORTED_NO_SYSTEM TRUE
INTERFACE_COMPILE_DEFINITIONS "${_PNG_COMPILE_DEFINITIONS}"
INTERFACE_INCLUDE_DIRECTORIES "${PNG_INCLUDE_DIRS}"
INTERFACE_LINK_LIBRARIES ZLIB::ZLIB)
if((CMAKE_SYSTEM_NAME STREQUAL "Linux") AND
("${PNG_LIBRARY}" MATCHES "\\${CMAKE_STATIC_LIBRARY_SUFFIX}$"))
set_property(TARGET PNG::PNG APPEND PROPERTY
INTERFACE_LINK_LIBRARIES m)
endif()
if(EXISTS "${PNG_LIBRARY}")
set_target_properties(PNG::PNG PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES "C"
IMPORTED_LOCATION "${PNG_LIBRARY}")
endif()
if(EXISTS "${PNG_LIBRARY_RELEASE}")
set_property(TARGET PNG::PNG APPEND PROPERTY
IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(PNG::PNG PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "C"
IMPORTED_LOCATION_RELEASE "${PNG_LIBRARY_RELEASE}")
endif()
if(EXISTS "${PNG_LIBRARY_DEBUG}")
set_property(TARGET PNG::PNG APPEND PROPERTY
IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(PNG::PNG PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "C"
IMPORTED_LOCATION_DEBUG "${PNG_LIBRARY_DEBUG}")
endif()
endif()
unset(_PNG_COMPILE_DEFINITIONS)
endif ()
if (PNG_PNG_INCLUDE_DIR AND EXISTS "${PNG_PNG_INCLUDE_DIR}/png.h")
file(STRINGS "${PNG_PNG_INCLUDE_DIR}/png.h" png_version_str REGEX "^#define[ \t]+PNG_LIBPNG_VER_STRING[ \t]+\".+\"")
string(REGEX REPLACE "^#define[ \t]+PNG_LIBPNG_VER_STRING[ \t]+\"([^\"]+)\".*" "\\1" PNG_VERSION_STRING "${png_version_str}")
unset(png_version_str)
endif ()
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(PNG
REQUIRED_VARS PNG_LIBRARY PNG_PNG_INCLUDE_DIR
VERSION_VAR PNG_VERSION_STRING)
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
+40
View File
@@ -0,0 +1,40 @@
# Find Adaptive Multigrid Solver headers for Poisson Surface Reconstruction
#
# Once done this will define
#
# POISSONRECON_FOUND - system has Adaptive Multigrid Solver headers
# POISSONRECON_INCLUDE_DIR - the Adaptive Multigrid Solver include directory
#
# and the following imported target:
#
# POISSONRECON::POISSONRECON- Provides include dir for headers
set(_POISSONRECON_SEARCHES)
# Search POISSONRECON_ROOT first if it is set.
if(POISSONRECON_ROOT)
set(_POISSONRECON_SEARCH_ROOT PATHS ${POISSONRECON_ROOT} NO_DEFAULT_PATH)
list(APPEND _POISSONRECON_SEARCHES _POISSONRECON_SEARCH_ROOT)
endif()
# Try each search configuration.
foreach(search ${_POISSONRECON_SEARCHES})
find_path(POISSONRECON_INCLUDE_DIR NAMES SPSR/Reconstructors.h ${${search}} PATH_SUFFIXES include)
endforeach()
mark_as_advanced(POISSONRECON_INCLUDE_DIR)
# handle the QUIETLY and REQUIRED arguments and set ZLIB_FOUND to TRUE if
# all listed variables are TRUE
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(POISSONRECON REQUIRED_VARS POISSONRECON_INCLUDE_DIR)
if(POISSONRECON_FOUND)
set(POISSONRECON_INCLUDE_DIRS ${POISSONRECON_INCLUDE_DIR})
if(NOT TARGET POISSONRECON::POISSONRECON)
add_library(POISSONRECON::POISSONRECON UNKNOWN IMPORTED)
set_target_properties(POISSONRECON::POISSONRECON PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${POISSONRECON_INCLUDE_DIRS}")
endif()
endif()
+80
View File
@@ -0,0 +1,80 @@
###############################################################################
# CMake module to search for PROJ library
#
# On success, the macro sets the following variables:
# PROJ_FOUND = if the library found
# PROJ_VERSION = version number of PROJ found
# PROJ_LIBRARIES = full path to the library
# PROJ_INCLUDE_DIR = where to find the library headers
# Also defined, but not for general use are
# PROJ_LIBRARY, where to find the PROJ library.
#
# Copyright (c) 2009 Mateusz Loskot <mateusz@loskot.net>
#
# Redistribution and use is allowed according to the terms of the BSD license.
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
#
###############################################################################
set(_PROJ_SEARCHES)
# Search PROJ_ROOT first if it is set.
if(PROJ_ROOT)
set(_PROJ_SEARCH_ROOT PATHS ${PROJ_ROOT} NO_DEFAULT_PATH)
list(APPEND _PROJ_SEARCHES _PROJ_SEARCH_ROOT)
endif()
# Normal search.
set(_PROJ_x86 "(x86)")
set(_PROJ_SEARCH_NORMAL
PATHS
"$ENV{OSGEO4W_HOME}"
"C:/OSGeo4W"
"$ENV{ProgramFiles}/proj"
"$ENV{ProgramFiles${_PROJ_x86}}/proj"
)
unset(_PROJ_x86)
list(APPEND _PROJ_SEARCHES _PROJ_SEARCH_NORMAL)
# Try each search configuration.
foreach(search ${_PROJ_SEARCHES})
find_path(PROJ_INCLUDE_DIR NAMES proj.h ${${search}} PATH_SUFFIXES include include/proj proj)
endforeach()
if (PROJ_INCLUDE_DIR)
# Extract version from proj.h (ex: 480)
file(STRINGS ${PROJ_INCLUDE_DIR}/proj.h PJ_MAJORSTR REGEX "#define[ ]+PROJ_VERSION_MAJOR[ ]+[0-9]+")
string(REGEX MATCH "[0-9]+" PJ_MAJOR ${PJ_MAJORSTR})
file(STRINGS ${PROJ_INCLUDE_DIR}/proj.h PJ_MINORSTR REGEX "#define[ ]+PROJ_VERSION_MINOR[ ]+[0-9]+")
string(REGEX MATCH "[0-9]+" PJ_MINOR ${PJ_MINORSTR})
file(STRINGS ${PROJ_INCLUDE_DIR}/proj.h PJ_PATCHSTR REGEX "#define[ ]+PROJ_VERSION_PATCH[ ]+[0-9]+")
string(REGEX MATCH "[0-9]+" PJ_PATCH ${PJ_PATCHSTR})
set(PROJ_VERSION ${PJ_MAJOR}.${PJ_MINOR}.${PJ_PATCH})
endif()
set(PROJ_NAMES ${PROJ_NAMES} proj proj_i)
if(NOT PROJ_LIBRARY)
foreach(search ${_PROJ_SEARCHES})
find_library(PROJ_LIBRARY NAMES ${PROJ_NAMES} NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib)
endforeach()
endif()
unset(PROJ_NAMES)
if(PROJ_LIBRARY)
set(PROJ_LIBRARIES ${PROJ_LIBRARY})
endif()
# Handle the QUIETLY and REQUIRED arguments and set PROJ_FOUND to TRUE
# if all listed variables are TRUE
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(PROJ DEFAULT_MSG
PROJ_LIBRARY
PROJ_INCLUDE_DIR)
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
+167
View File
@@ -0,0 +1,167 @@
# The module defines the following variables:
# RE2C_EXECUTABLE - the path to the re2c executable
#
#=============================================================================
set(_RE2C_SEARCHES)
# Search RE2C_ROOT first if it is set.
if(RE2C_ROOT)
set(_RE2C_SEARCH_ROOT PATHS ${RE2C_ROOT} NO_DEFAULT_PATH)
list(APPEND _RE2C_SEARCHES _RE2C_SEARCH_ROOT)
endif()
# Normal search.
set(_RE2C_x86 "(x86)")
set(_RE2C_SEARCH_NORMAL
PATHS "$ENV{ProgramFiles}/re2c"
"$ENV{ProgramFiles${_RE2C_x86}}/re2c")
unset(_RE2C_x86)
list(APPEND _RE2C_SEARCHES _RE2C_SEARCH_NORMAL)
set(RE2C_NAMES re2c)
# Try each search configuration.
foreach(search ${_RE2C_SEARCHES})
find_program(RE2C_EXECUTABLE re2c ${${search}} PATH_SUFFIXES bin)
endforeach()
mark_as_advanced(RE2C_EXECUTABLE)
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(RE2C DEFAULT_MSG RE2C_EXECUTABLE)
# Provide a macro to generate custom build rules:
# RE2C_TARGET(Name RE2CInput RE2COutput [COMPILE_FLAGS <string>])
# which creates a custom command to generate the <RE2COutput> file from
# the <RE2CInput> file. If COMPILE_FLAGS option is specified, the next
# parameter is added to the re2c command line. Name is an alias used to
# get details of this custom command.
# This module also defines a macro:
# ADD_RE2C_LEMON_DEPENDENCY(RE2CTarget LemonTarget)
# which adds the required dependency between a scanner and a parser
# where <RE2CTarget> and <LemonTarget> are the first parameters of
# respectively RE2C_TARGET and LEMON_TARGET macros.
#
# ====================================================================
# Example:
#
# find_package(LEMON)
# find_package(RE2C)
#
# LEMON_TARGET(MyParser parser.y "${CMAKE_CURRENT_BINARY_DIR}/parser.cpp")
# RE2C_TARGET(MyScanner scanner.re "${CMAKE_CURRENT_BINARY_DIR}/scanner.cpp")
# ADD_RE2C_LEMON_DEPENDENCY(MyScanner MyParser)
#
# include_directories("${CMAKE_CURRENT_BINARY_DIR}")
# add_executable(Foo
# Foo.cc
# ${LEMON_MyParser_OUTPUTS}
# ${RE2C_MyScanner_OUTPUTS}
# )
# ====================================================================
#
#=============================================================================
# Copyright (c) 2010-2023 United States Government as represented by
# the U.S. Army Research Laboratory.
# Copyright 2009 Kitware, Inc.
# Copyright 2006 Tristan Carel
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# * Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# * Redistributions in binary form must reproduce the above copyright
# notice, this list of conditions and the following disclaimer in the
# documentation and/or other materials provided with the distribution.
#
# * The names of the authors may not be used to endorse or promote
# products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
# HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#=============================================================================
#============================================================
# RE2C_TARGET (public macro)
#============================================================
#
# TODO - rework this macro to make use of CMakeParseArguments, see
# http://www.cmake.org/pipermail/cmake/2012-July/051309.html
if(NOT COMMAND RE2C_TARGET)
macro(RE2C_TARGET Name Input Output)
set(RE2C_TARGET_usage "RE2C_TARGET(<Name> <Input> <Output> [COMPILE_FLAGS <string>]")
if(${ARGC} GREATER 3)
if(${ARGC} EQUAL 5)
if("${ARGV3}" STREQUAL "COMPILE_FLAGS")
set(RE2C_EXECUTABLE_opts "${ARGV4}")
SEPARATE_ARGUMENTS(RE2C_EXECUTABLE_opts)
else()
message(SEND_ERROR ${RE2C_TARGET_usage})
endif()
else()
message(SEND_ERROR ${RE2C_TARGET_usage})
endif()
endif()
add_custom_command(OUTPUT ${Output}
COMMAND ${RE2C_EXECUTABLE}
ARGS ${RE2C_EXECUTABLE_opts} -o${Output} ${Input}
DEPENDS ${Input} ${RE2C_EXECUTABLE_TARGET}
COMMENT "[RE2C][${Name}] Building scanner with ${RE2C_EXECUTABLE}"
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}")
set(RE2C_${Name}_DEFINED TRUE)
set(RE2C_${Name}_OUTPUTS ${Output})
set(RE2C_${Name}_INPUT ${Input})
set(RE2C_${Name}_COMPILE_FLAGS ${RE2C_EXECUTABLE_opts})
set_property(DIRECTORY APPEND PROPERTY ADDITIONAL_MAKE_CLEAN_FILES "${Output}")
endmacro(RE2C_TARGET)
endif(NOT COMMAND RE2C_TARGET)
#============================================================
#============================================================
# ADD_RE2C_LEMON_DEPENDENCY (public macro)
#============================================================
#
if(NOT COMMAND ADD_RE2C_LEMON_DEPENDENCY)
macro(ADD_RE2C_LEMON_DEPENDENCY RE2CTarget LemonTarget)
if(NOT RE2C_${RE2CTarget}_OUTPUTS)
message(SEND_ERROR "RE2C target `${RE2CTarget}' does not exists.")
endif()
if(NOT LEMON_${LemonTarget}_HDR)
message(SEND_ERROR "Lemon target `${LemonTarget}' does not exists.")
endif()
set_source_files_properties(${RE2C_${RE2CTarget}_OUTPUTS}
PROPERTIES OBJECT_DEPENDS ${LEMON_${LemonTarget}_HDR})
endmacro(ADD_RE2C_LEMON_DEPENDENCY)
endif(NOT COMMAND ADD_RE2C_LEMON_DEPENDENCY)
#============================================================
# RE2C_Util.cmake ends here
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
+84
View File
@@ -0,0 +1,84 @@
#.rst:
# FindREGEX
# --------
#
# Find the native REGEX includes and library.
#
# IMPORTED Targets
# ^^^^^^^^^^^^^^^^
#
# This module defines :prop_tgt:`IMPORTED` target ``REGEX::REGEX``, if
# REGEX has been found.
#
# Result Variables
# ^^^^^^^^^^^^^^^^
#
# This module defines the following variables:
#
# ::
#
# REGEX_INCLUDE_DIRS - where to find regex.h, etc.
# REGEX_LIBRARIES - List of libraries when using regex.
# REGEX_FOUND - True if regex found.
#
#
# Hints
# ^^^^^
#
# A user may set ``REGEX_ROOT`` to a regex installation root to tell this
# module where to look.
#=============================================================================
# Copyright 2001-2011 Kitware, Inc.
#
# Distributed under the OSI-approved BSD License (the "License");
# see accompanying file Copyright.txt for details.
#
# This software is distributed WITHOUT ANY WARRANTY; without even the
# implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
# See the License for more information.
#=============================================================================
# (To distribute this file outside of CMake, substitute the full
# License text for the above reference.)
set(_REGEX_SEARCHES)
# Search REGEX_ROOT first if it is set.
if(REGEX_ROOT)
set(_REGEX_SEARCH_ROOT PATHS ${REGEX_ROOT} NO_DEFAULT_PATH)
list(APPEND _REGEX_SEARCHES _REGEX_SEARCH_ROOT)
endif()
# Normal search.
set(_REGEX_SEARCH_NORMAL
PATHS "[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\Regex;InstallPath]"
"$ENV{PROGRAMFILES}/regex"
)
list(APPEND _REGEX_SEARCHES _REGEX_SEARCH_NORMAL)
set(REGEX_NAMES regex_brl regex_brld regex regexd regexd1)
# Try each search configuration.
foreach(search ${_REGEX_SEARCHES})
find_path(REGEX_INCLUDE_DIR NAMES regex.h ${${search}} PATH_SUFFIXES include)
find_library(REGEX_LIBRARY NAMES ${REGEX_NAMES} ${${search}} PATH_SUFFIXES lib)
endforeach()
mark_as_advanced(REGEX_LIBRARY REGEX_INCLUDE_DIR)
# handle the QUIETLY and REQUIRED arguments and set REGEX_FOUND to TRUE if
# all listed variables are TRUE
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(REGEX REQUIRED_VARS REGEX_LIBRARY REGEX_INCLUDE_DIR)
if(REGEX_FOUND)
set(REGEX_INCLUDE_DIRS ${REGEX_INCLUDE_DIR})
set(REGEX_LIBRARIES ${REGEX_LIBRARY})
if(NOT TARGET REGEX::REGEX)
add_library(REGEX::REGEX UNKNOWN IMPORTED)
set_target_properties(REGEX::REGEX PROPERTIES
IMPORTED_LOCATION "${REGEX_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${REGEX_INCLUDE_DIRS}")
endif()
endif()
+85
View File
@@ -0,0 +1,85 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
#[=======================================================================[.rst:
FindSQLite3
-----------
.. versionadded:: 3.14
Find the SQLite libraries, v3
IMPORTED targets
^^^^^^^^^^^^^^^^
This module defines the following :prop_tgt:`IMPORTED` target:
``SQLite::SQLite3``
Result variables
^^^^^^^^^^^^^^^^
This module will set the following variables if found:
``SQLite3_INCLUDE_DIRS``
where to find sqlite3.h, etc.
``SQLite3_LIBRARIES``
the libraries to link against to use SQLite3.
``SQLite3_EXECNAME``
the sqlite3 program name.
``SQLite3_VERSION``
version of the SQLite3 library found
``SQLite3_FOUND``
TRUE if found
#]=======================================================================]
set(_SQLite3_SEARCHES)
# Search SQLite3_ROOT first if it is set.
if(SQLite3_ROOT)
set(_SQLite3_SEARCH_ROOT PATHS ${SQLite3_ROOT} NO_DEFAULT_PATH)
list(APPEND _SQLite3_SEARCHES _SQLite3_SEARCH_ROOT)
endif()
# Fall back to default system paths
set(_SQLite3_SEARCH_NORMAL)
list(APPEND _SQLite3_SEARCHES _SQLite3_SEARCH_NORMAL)
set(SQLite3_NAMES sqlite3 sqlite libsqlite3 libsqlite)
# Try each search configuration.
foreach(search ${_SQLite3_SEARCHES})
find_path(SQLite3_INCLUDE_DIR NAMES sqlite3.h ${${search}} PATH_SUFFIXES include)
find_library(SQLite3_LIBRARY NAMES ${SQLite3_NAMES} ${${search}} PATH_SUFFIXES lib)
find_program(SQLite3_EXECNAME NAMES sqlite3 sqlite ${${search}} PATH_SUFFIXES bin)
endforeach()
mark_as_advanced(SQLite3_LIBRARY SQLite3_INCLUDE_DIR)
# Extract version information from the header file
if(SQLite3_INCLUDE_DIR)
file(STRINGS ${SQLite3_INCLUDE_DIR}/sqlite3.h _ver_line
REGEX "^#define SQLITE_VERSION *\"[0-9]+\\.[0-9]+\\.[0-9]+\""
LIMIT_COUNT 1)
string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+"
SQLite3_VERSION "${_ver_line}")
unset(_ver_line)
endif()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(SQLite3
REQUIRED_VARS SQLite3_INCLUDE_DIR SQLite3_LIBRARY
VERSION_VAR SQLite3_VERSION)
# Create the imported target
if(SQLite3_FOUND)
set(SQLite3_INCLUDE_DIRS ${SQLite3_INCLUDE_DIR})
set(SQLite3_LIBRARIES ${SQLite3_LIBRARY})
if(NOT TARGET SQLite::SQLite3)
add_library(SQLite::SQLite3 UNKNOWN IMPORTED)
set_target_properties(SQLite::SQLite3 PROPERTIES
IMPORTED_LOCATION "${SQLite3_LIBRARY}"
INTERFACE_INCLUDE_DIRECTORIES "${SQLite3_INCLUDE_DIR}")
endif()
endif()
+160
View File
@@ -0,0 +1,160 @@
# F I N D S T E P C O D E . C M A K E
# BRL-CAD
#
# Copyright (c) 2013-2023 United States Government as represented by
# the U.S. Army Research Laboratory.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following
# disclaimer in the documentation and/or other materials provided
# with the distribution.
#
# 3. The name of the author may not be used to endorse or promote
# products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
###
# - Find STEPCODE
#
# The following variables are set:
#
# STEPCODE_INCLUDE_DIRS - where to find stepcode headers
# STEPCODE_LIBRARIES - List of libraries when using stepcode.
# STEPCODE_FOUND - True if stepcode found.
# A user may set ``STEPCODE_ROOT`` to a stepcode installation root to tell this
# module where to look.
# =============================================================================
# Check that each of the libraries has an expected header,
# as well as the toplevel defined headers. (TODO - are the
# latter needed beyond the stepcode build itself? Trim this
# to the minimum actually needed...)
set(STEPCODE_HDRS
cldai/sdaiObject.h
cleditor/STEPfile.h
clstepcore/sdai.h
clutils/gennodearray.h
exppp/exppp.h
express/express.h
config.h
)
set(STEPCODE_LIBS
express
exppp
stepcore
stepeditor
stepdai
steputils
)
set(STEPCODE_EXEC
exp2cxx
exppp
)
# Search STEPCODE_ROOT first if it is set.
set(_STEPCODE_SEARCHES)
if(STEPCODE_ROOT)
set(_STEPCODE_SEARCH_ROOT PATHS ${STEPCODE_ROOT} NO_DEFAULT_PATH)
list(APPEND _STEPCODE_SEARCHES _STEPCODE_SEARCH_ROOT)
endif()
# Try each search configuration.
foreach(search ${_STEPCODE_SEARCHES})
find_path(STEPCODE_DAI_DIR NAMES sdaiObject.h ${${search}} PATH_SUFFIXES include include/stepcode/cldai)
find_path(STEPCODE_EDITOR_DIR NAMES STEPfile.h ${${search}} PATH_SUFFIXES include include/stepcode/cleditor)
find_path(STEPCODE_STEPCORE_DIR NAMES sdai.h ${${search}} PATH_SUFFIXES include include/stepcode/clstepcore)
find_path(STEPCODE_UTILS_DIR NAMES gennodearray.h ${${search}} PATH_SUFFIXES include include/stepcode/clutils)
find_path(STEPCODE_EXPPP_DIR NAMES exppp.h ${${search}} PATH_SUFFIXES include include/stepcode/exppp)
find_path(STEPCODE_EXPRESS_DIR NAMES express.h ${${search}} PATH_SUFFIXES include include/stepcode/express)
find_path(STEPCODE_INCLUDE_DIR NAMES config.h ${${search}} PATH_SUFFIXES include include/stepcode)
#TODO - should be an all-or-nothing for the set...
endforeach()
# Allow STEPCODE_LIBRARY to be set manually, as the location of the netpbm library
foreach(search ${_STEPCODE_SEARCHES})
find_library(STEPCODE_EXPRESS_LIBRARY NAMES express NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib)
if (WIN32)
find_library(STEPCODE_EXPPP_LIBRARY NAMES libexppp NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib)
else (WIN32)
find_library(STEPCODE_EXPPP_LIBRARY NAMES exppp NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib)
endif (WIN32)
find_library(STEPCODE_CORE_LIBRARY NAMES stepcore NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib)
find_library(STEPCODE_EDITOR_LIBRARY NAMES stepeditor NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib)
find_library(STEPCODE_DAI_LIBRARY NAMES stepdai NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib)
find_library(STEPCODE_UTILS_LIBRARY NAMES steputils NAMES_PER_DIR ${${search}} PATH_SUFFIXES lib)
#TODO - should be an all-or-nothing for the set...
endforeach()
# Allow STEPCODE_LIBRARY to be set manually, as the location of the netpbm library
foreach(search ${_STEPCODE_SEARCHES})
find_program(EXP2CXX_EXECUTABLE exp2cxx ${${search}} PATH_SUFFIXES bin)
find_program(EXPPP_EXECUTABLE exppp ${${search}} PATH_SUFFIXES bin)
#TODO - should be an all-or-nothing for the set...
endforeach()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(STEPCODE DEFAULT_MSG
STEPCODE_DAI_DIR
STEPCODE_EDITOR_DIR
STEPCODE_STEPCORE_DIR
STEPCODE_UTILS_DIR
STEPCODE_EXPPP_DIR
STEPCODE_EXPRESS_DIR
STEPCODE_INCLUDE_DIR
STEPCODE_EXPRESS_LIBRARY
STEPCODE_EXPPP_LIBRARY
STEPCODE_CORE_LIBRARY
STEPCODE_EDITOR_LIBRARY
STEPCODE_DAI_LIBRARY
STEPCODE_UTILS_LIBRARY
EXP2CXX_EXECUTABLE
EXPPP_EXECUTABLE
)
if (STEPCODE_FOUND)
set(STEPCODE_INCLUDE_DIRS
${STEPCODE_INCLUDE_DIR}
${STEPCODE_STEPCORE_DIR}
${STEPCODE_EDITOR_DIR}
${STEPCODE_UTILS_DIR}
${STEPCODE_DAI_DIR}
)
set(STEPCODE_LIBRARIES
${STEPCODE_EXPRESS_LIBRARY}
${STEPCODE_EXPPP_LIBRARY}
${STEPCODE_CORE_LIBRARY}
${STEPCODE_EDITOR_LIBRARY}
${STEPCODE_DAI_LIBRARY}
${STEPCODE_UTILS_LIBRARY}
)
endif()
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
+554
View File
@@ -0,0 +1,554 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
#[=======================================================================[.rst:
FindTCL
-------
This module finds if Tcl is installed and determines where the include
files and libraries are. It also determines what the name of the
library is. This code sets the following variables:
::
TCL_FOUND = Tcl was found
TCLSH_FOUND = TRUE if tclsh has been found
TCL_LIBRARY = path to Tcl library (tcl tcl80)
TCL_INCLUDE_PATH = path to where tcl.h can be found
TCL_TCLSH = path to tclsh binary (tcl tcl80)
If TCL_ENABLE_TK is set, the following are also set:
::
TK_FOUND = Tk was found
TCLTK_FOUND = Tcl and Tk were found
TK_LIBRARY = path to Tk library (tk tk80 etc)
TK_INCLUDE_PATH = path to where tk.h can be found
TK_WISH = full path to the wish executable
TCL_STUB_LIBRARY = path to Tcl stub library
TK_STUB_LIBRARY = path to Tk stub library
TTK_STUB_LIBRARY = path to ttk stub library
#]=======================================================================]
set(_TCL_SEARCHES)
# Search TCL_ROOT first if it is set.
if(TCL_ROOT)
set(_TCL_SEARCH_ROOT PATHS ${TCL_ROOT} NO_DEFAULT_PATH)
list(APPEND _TCL_SEARCHES _TCL_SEARCH_ROOT)
endif()
if(WIN32)
get_filename_component(
ActiveTcl_CurrentVersion
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl;CurrentVersion]"
NAME
)
set(
TCLTK_POSSIBLE_BIN_PATHS
${TCLTK_POSSIBLE_BIN_PATHS}
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl\\${ActiveTcl_CurrentVersion}]/bin"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.6;Root]/bin"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.5;Root]/bin"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.4;Root]/bin"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.3;Root]/bin"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.2;Root]/bin"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.0;Root]/bin"
)
get_filename_component(
ActiveTcl_CurrentVersion
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl;CurrentVersion]"
NAME
)
set(
TCLTK_POSSIBLE_LIB_PATHS
${TCLTK_POSSIBLE_LIB_PATHS}
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl\\${ActiveTcl_CurrentVersion}]/lib"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.6;Root]/lib"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.5;Root]/lib"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.4;Root]/lib"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.3;Root]/lib"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.2;Root]/lib"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.0;Root]/lib"
"$ENV{ProgramFiles}/Tcl/Lib"
"C:/Program Files/Tcl/lib"
"C:/Tcl/lib"
)
set(
TCLTK_POSSIBLE_INCLUDE_PATHS
${TCLTK_POSSIBLE_INCLUDE_PATHS}
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\ActiveState\\ActiveTcl\\${ActiveTcl_CurrentVersion}]/include"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.6;Root]/include"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.5;Root]/include"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.4;Root]/include"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.3;Root]/include"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.2;Root]/include"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\Scriptics\\Tcl\\8.0;Root]/include"
"$ENV{ProgramFiles}/Tcl/include"
"C:/Program Files/Tcl/include"
"C:/Tcl/include"
)
endif()
set(
TCL_TCLSH_NAMES
tclsh
tclsh${TCL_LIBRARY_VERSION}
tclsh${TK_LIBRARY_VERSION}
tclsh${TK_WISH_VERSION}
tclsh87
tclsh8.7
tclsh86
tclsh8.6
tclsh85
tclsh8.5
tclsh84
tclsh8.4
tclsh83
tclsh8.3
tclsh82
tclsh8.2
tclsh80
tclsh8.0
)
if(CYGWIN)
set(TCL_TCLSH_NAMES ${TCL_TCLSH_NAMES} cygtclsh83 cygtclsh80)
endif(CYGWIN)
foreach(search ${_TCL_SEARCHES})
find_program(TCL_TCLSH NAMES ${TCL_TCLSH_NAMES} ${${search}} PATH_SUFFIXES bin)
endforeach()
if(NOT TCL_TCLSH)
find_program(TCL_TCLSH NAMES ${TCL_TCLSH_NAMES} HINTS ${TCLTK_POSSIBLE_BIN_PATHS})
endif(NOT TCL_TCLSH)
if(TCL_ENABLE_TK)
set(
TK_WISH_NAMES
wish
wish${TCL_LIBRARY_VERSION}
wish${TK_LIBRARY_VERSION}
wish${TCL_TCLSH_VERSION}
wish86
wish8.6
wish85
wish8.5
wish84
wish8.4
wish83
wish8.3
wish82
wish8.2
wish80
wish8.0
)
if(CYGWIN)
set(TK_WISH_NAMES ${TK_WISH_NAMES} cygwish80)
endif()
foreach(search ${_TCL_SEARCHES})
find_program(TK_WISH NAMES ${TK_WISH_NAMES} ${${search}} PATH_SUFFIXES bin)
endforeach()
if(NOT TK_WISH)
find_program(TK_WISH NAMES ${TK_WISH_NAMES} HINTS ${TCLTK_POSSIBLE_BIN_PATHS})
endif(NOT TK_WISH)
endif(TCL_ENABLE_TK)
if(TCLSH_VERSION_STRING)
set(TCL_TCLSH_VERSION "${TCLSH_VERSION_STRING}")
else()
get_filename_component(TCL_TCLSH_PATH "${TCL_TCLSH}" PATH)
get_filename_component(TCL_TCLSH_PATH_PARENT "${TCL_TCLSH_PATH}" PATH)
string(REGEX REPLACE "^.*tclsh([0-9]\\.*[0-9]).*$" "\\1" TCL_TCLSH_VERSION "${TCL_TCLSH}")
endif()
set(TCLTK_POSSIBLE_LIB_PATHS "${TCL_INCLUDE_PATH_PARENT}/lib" "${TCL_LIBRARY_PATH}" "${TCL_TCLSH_PATH_PARENT}/lib")
if(TCL_ENABLE_TK)
set(
TCLTK_POSSIBLE_LIB_PATHS
${TCLTK_POSSIBLE_LIB_PATHS}
"${TK_INCLUDE_PATH_PARENT}/lib"
"${TK_LIBRARY_PATH}"
"${TK_WISH_PATH_PARENT}/lib"
)
endif(TCL_ENABLE_TK)
set(
TCLTK_POSSIBLE_LIB_PATH_SUFFIXES
lib
lib/tcl
lib/tcl/tcl8.7
lib/tcl/tcl8.6
lib/tcl/tcl8.5
lib/tcl/tcl8.4
)
if(TCL_ENABLE_TK)
set(
TCLTK_POSSIBLE_LIB_PATH_SUFFIXES
${TCLTK_POSSIBLE_LIB_PATH_SUFFIXES}
lib/tcl/tk8.7
lib/tcl/tk8.6
lib/tcl/tk8.5
lib/tcl/tk8.4
)
endif(TCL_ENABLE_TK)
set(
TCL_POSSIBLE_LIB_NAMES
tcl
tcl${TCL_LIBRARY_VERSION}
tcl${TCL_TCLSH_VERSION}
tcl${TK_WISH_VERSION}
tcl87
tcl8.7
tcl87t
tcl8.7t
tcl86
tcl8.6
tcl86t
tcl8.6t
tcl85
tcl8.5
tcl84
tcl8.4
tcl83
tcl8.3
tcl82
tcl8.2
tcl80
tcl8.0
)
if(NOT TCL_LIBRARY)
foreach(search ${_TCL_SEARCHES})
find_library(
TCL_LIBRARY
NAMES ${TCL_POSSIBLE_LIB_NAMES}
NAMES_PER_DIR
${${search}}
PATH_SUFFIXES ${TCLTK_POSSIBLE_LIB_PATH_SUFFIXES}
)
endforeach()
endif()
if(NOT TCL_LIBRARY)
find_library(
TCL_LIBRARY
NAMES ${TCL_POSSIBLE_LIB_NAMES}
PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
PATH_SUFFIXES ${TCLTK_POSSIBLE_LIB_PATH_SUFFIXES}
)
endif(NOT TCL_LIBRARY)
set(
TCLSTUB_POSSIBLE_LIB_NAMES
tclstub
tclstub${TK_LIBRARY_VERSION}
tclstub${TCL_TCLSH_VERSION}
tclstub${TK_WISH_VERSION}
tclstub87
tclstub8.7
tclstub86
tclstub8.6
tclstub85
tclstub8.5
tclstub84
tclstub8.4
tclstub83
tclstub8.3
tclstub82
tclstub8.2
tclstub80
tclstub8.0
)
if(NOT TCL_STUB_LIBRARY)
foreach(search ${_TCL_SEARCHES})
find_library(
TCL_STUB_LIBRARY
NAMES ${TCLSTUB_POSSIBLE_LIB_NAMES}
NAMES_PER_DIR
${${search}}
PATH_SUFFIXES ${TCLTK_POSSIBLE_LIB_PATH_SUFFIXES}
)
endforeach()
endif()
if(NOT TCL_STUB_LIBRARY)
find_library(TCL_STUB_LIBRARY NAMES ${TCLSTUB_POSSIBLE_LIB_NAMES} PATHS ${TCLTK_POSSIBLE_LIB_PATHS})
endif()
if(TCL_ENABLE_TK)
set(
TK_POSSIBLE_LIB_NAMES
tk
tk${TK_LIBRARY_VERSION}
tk${TCL_TCLSH_VERSION}
tk${TK_WISH_VERSION}
tk87
tk8.7
tk87t
tk8.7t
tk86
tk8.6
tk86t
tk8.6t
tk85
tk8.5
tk84
tk8.4
tk83
tk8.3
tk82
tk8.2
tk80
tk8.0
)
if(NOT TK_LIBRARY)
foreach(search ${_TCL_SEARCHES})
find_library(
TK_LIBRARY
NAMES ${TK_POSSIBLE_LIB_NAMES}
NAMES_PER_DIR
${${search}}
PATH_SUFFIXES ${TCLTK_POSSIBLE_LIB_PATH_SUFFIXES}
)
endforeach()
endif()
if(NOT TK_LIBRARY)
find_library(
TK_LIBRARY
NAMES ${TK_POSSIBLE_LIB_NAMES}
PATHS ${TCLTK_POSSIBLE_LIB_PATHS}
PATH_SUFFIXES ${TCLTK_POSSIBLE_LIB_PATH_SUFFIXES}
)
endif(NOT TK_LIBRARY)
set(
TK_STUB_POSSIBLE_LIB_NAMES
tkstub
tkstub${TCL_LIBRARY_VERSION}
tkstub${TCL_TCLSH_VERSION}
tkstub${TK_WISH_VERSION}
tkstub87
tkstub8.7
tkstub86
tkstub8.6
tkstub85
tkstub8.5
tkstub84
tkstub8.4
tkstub83
tkstub8.3
tkstub82
tkstub8.2
tkstub80
tkstub8.0
)
if(NOT TK_STUB_LIBRARY)
foreach(search ${_TCL_SEARCHES})
find_library(
TK_STUB_LIBRARY
NAMES ${TK_STUB_POSSIBLE_LIB_NAMES}
NAMES_PER_DIR
${${search}}
PATH_SUFFIXES ${TCLTK_POSSIBLE_LIB_PATH_SUFFIXES}
)
endforeach()
endif()
if(NOT TK_STUB_LIBRARY)
find_library(TK_STUB_LIBRARY NAMES ${TK_STUB_POSSIBLE_LIB_NAMES} PATHS ${TCLTK_POSSIBLE_LIB_PATHS})
endif()
set(
TTK_STUB_POSSIBLE_LIB_NAMES
ttkstub
ttkstub${TCL_LIBRARY_VERSION}
ttkstub${TCL_TCLSH_VERSION}
ttkstub${TK_WISH_VERSION}
ttkstub88
ttkstub8.8
ttkstub87
ttkstub8.7
ttkstub86
ttkstub8.6
ttkstub85
ttkstub8.5
)
if(NOT TTK_STUB_LIBRARY)
foreach(search ${_TCL_SEARCHES})
find_library(
TTK_STUB_LIBRARY
NAMES ${TTK_STUB_POSSIBLE_LIB_NAMES}
NAMES_PER_DIR
${${search}}
PATH_SUFFIXES ${TCLTK_POSSIBLE_LIB_PATH_SUFFIXES}
)
endforeach()
endif()
if(NOT TTK_STUB_LIBRARY)
find_library(TTK_STUB_LIBRARY NAMES ${TTK_STUB_POSSIBLE_LIB_NAMES} PATHS ${TCLTK_POSSIBLE_LIB_PATHS})
endif()
endif(TCL_ENABLE_TK)
set(
TCLTK_POSSIBLE_INCLUDE_PATHS
"${TCL_LIBRARY_PATH_PARENT}/include"
"${TCL_INCLUDE_PATH}"
"${TCL_TCLSH_PATH_PARENT}/include"
)
if(TCL_ENABLE_TK)
set(
TCLTK_POSSIBLE_INCLUDE_PATHS
${TCLTK_POSSIBLE_INCLUDE_PATHS}
"${TCL_LIBRARY_PATH_PARENT}/include"
"${TCL_INCLUDE_PATH}"
"${TCL_TCLSH_PATH_PARENT}/include"
)
endif(TCL_ENABLE_TK)
set(
TCLTK_POSSIBLE_INCLUDE_PATH_SUFFIXES
include
include/tcl${TCL_LIBRARY_VERSION}
include/tcl8.7
include/tcl8.6
include/tcl8.5
include/tcl8.4
include/tcl8.3
include/tcl8.2
include/tcl8.0
)
if(TCL_ENABLE_TK)
set(
TCLTK_POSSIBLE_INCLUDE_PATH_SUFFIXES
${TCLTK_POSSIBLE_INCLUDE_PATH_SUFFIXES}
include/tcl${TK_LIBRARY_VERSION}
include/tk8.7
include/tk8.6
include/tk8.5
include/tk8.4
)
endif(TCL_ENABLE_TK)
foreach(search ${_TCL_SEARCHES})
find_path(TCL_INCLUDE_PATH NAMES tcl.h ${${search}} PATH_SUFFIXES ${TCLTK_POSSIBLE_INCLUDE_PATH_SUFFIXES})
endforeach()
if(NOT TCL_INCLUDE_PATH)
find_path(
TCL_INCLUDE_PATH
NAMES tcl.h
HINTS ${TCLTK_POSSIBLE_INCLUDE_PATHS}
PATH_SUFFIXES ${TCLTK_POSSIBLE_INCLUDE_PATH_SUFFIXES}
)
endif()
if(TCL_ENABLE_TK)
foreach(search ${_TCL_SEARCHES})
find_path(TK_INCLUDE_PATH NAMES tk.h ${${search}} PATH_SUFFIXES ${TCLTK_POSSIBLE_INCLUDE_PATH_SUFFIXES})
endforeach()
if(NOT TK_INCLUDE_PATH)
find_path(
TK_INCLUDE_PATH
NAMES tk.h
HINTS ${TCLTK_POSSIBLE_INCLUDE_PATHS}
PATH_SUFFIXES ${TCLTK_POSSIBLE_INCLUDE_PATH_SUFFIXES}
)
endif()
# IFF we have TCL_TK_SYSTEM_GRAPHICS set and have a system TK_WISH, check that the
# windowing system matches the specified type
if(NOT "${TCL_TK_SYSTEM_GRAPHICS}" STREQUAL "" AND TK_WISH AND NOT TARGET "${TK_WISH}")
set(
tkwin_script
"
set filename \"${CMAKE_BINARY_DIR}/CMakeTmp/TK_WINDOWINGSYSTEM\"
set fileId [open $filename \"w\"]
set windowingsystem [tk windowingsystem]
puts $fileId $windowingsystem
close $fileId
exit
"
)
set(tkwin_scriptfile "${CMAKE_BINARY_DIR}/CMakeTmp/tk_windowingsystem.tcl")
set(WSYS "wm-NOTFOUND")
file(WRITE ${tkwin_scriptfile} ${tkwin_script})
execute_process(COMMAND ${TK_WISH} ${tkwin_scriptfile} OUTPUT_VARIABLE EXECOUTPUT)
if(EXISTS "${CMAKE_BINARY_DIR}/CMakeTmp/TK_WINDOWINGSYSTEM")
file(READ "${CMAKE_BINARY_DIR}/CMakeTmp/TK_WINDOWINGSYSTEM" readresultvar)
string(REGEX REPLACE "\n" "" WSYS "${readresultvar}")
endif(EXISTS "${CMAKE_BINARY_DIR}/CMakeTmp/TK_WINDOWINGSYSTEM")
# If we have no information about the windowing system or it does not match
# a specified system, the find_package detection has failed
if(NOT "${WSYS}" STREQUAL "${TCL_TK_SYSTEM_GRAPHICS}")
unset(TCL_LIBRARY CACHE)
unset(TCL_STUB_LIBRARY CACHE)
unset(TK_LIBRARY CACHE)
unset(TK_STUB_LIBRARY CACHE)
unset(TCL_FOUND CACHE)
unset(TK_FOUND CACHE)
unset(TCLTK_FOUND CACHE)
unset(TCLSH_FOUND CACHE)
unset(TCL_LIBRARY CACHE)
unset(TCL_INCLUDE_PATH CACHE)
unset(TCL_TCLSH CACHE)
unset(TK_LIBRARY CACHE)
unset(TK_INCLUDE_PATH CACHE)
unset(TK_WISH CACHE)
unset(TCL_STUB_LIBRARY CACHE)
unset(TK_STUB_LIBRARY CACHE)
unset(TTK_STUB_LIBRARY CACHE)
endif(NOT "${WSYS}" STREQUAL "${TCL_TK_SYSTEM_GRAPHICS}")
endif(NOT "${TCL_TK_SYSTEM_GRAPHICS}" STREQUAL "" AND TK_WISH AND NOT TARGET "${TK_WISH}")
endif(TCL_ENABLE_TK)
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(
TCL
REQUIRED_VARS TCL_LIBRARY TCL_STUB_LIBRARY TCL_INCLUDE_PATH TCL_TCLSH
VERSION_VAR TCLSH_VERSION_STRING
)
if(TCL_ENABLE_TK)
set(FPHSA_NAME_MISMATCHED 1)
set(TCLTK_FIND_REQUIRED ${TCL_FIND_REQUIRED})
set(TCLTK_FIND_QUIETLY ${TCL_FIND_QUIETLY})
find_package_handle_standard_args(
TCLTK
REQUIRED_VARS TCL_LIBRARY TCL_STUB_LIBRARY TCL_INCLUDE_PATH TK_LIBRARY TK_STUB_LIBRARY TK_INCLUDE_PATH
)
set(TK_FIND_REQUIRED ${TCL_FIND_REQUIRED})
set(TK_FIND_QUIETLY ${TCL_FIND_QUIETLY})
find_package_handle_standard_args(TK REQUIRED_VARS TK_LIBRARY TK_STUB_LIBRARY TK_INCLUDE_PATH TK_WISH)
unset(FPHSA_NAME_MISMATCHED)
endif(TCL_ENABLE_TK)
mark_as_advanced(
TCL_INCLUDE_PATH
TCL_LIBRARY
TCL_STUB_LIBRARY
TCL_TCLSH
TK_INCLUDE_PATH
TK_LIBRARY
TK_STUB_LIBRARY
TK_WISH
TTK_STUB_LIBRARY
)
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
+522
View File
@@ -0,0 +1,522 @@
# Distributed under the OSI-approved BSD 3-Clause License.
# See CMake's LICENSE.rst or https://cmake.org/licensing for details.
#
# BRL-CAD local variant:
# - Based on the modern CMake FindZLIB module structure.
# - Preserves BRL-CAD's custom zlib library names, including z_brl.
# - Honors ZLIB_ROOT and ENV{ZLIB_ROOT} as installation-root hints.
# - Keeps the traditional ZLIB::ZLIB target.
# - Adds optional variant targets when they can be found:
# ZLIB::ZLIB_SHARED
# ZLIB::ZLIB_STATIC
# ZLIB::ZLIBSTATIC (alias-compatible with upstream zlib's config package)
#
#[=======================================================================[.rst:
FindZLIB
--------
Finds the native zlib data compression library.
Imported Targets
^^^^^^^^^^^^^^^^
This module provides the following imported targets, when found:
``ZLIB::ZLIB``
Compatibility/default target that encapsulates the selected zlib usage
requirements. Selection follows ``ZLIB_USE_STATIC_LIBS`` when set.
``ZLIB::ZLIB_SHARED``
Shared zlib target, when a shared zlib library can be identified.
``ZLIB::ZLIB_STATIC``
Static zlib target, when a static zlib library can be identified.
``ZLIB::ZLIBSTATIC``
Alias to ``ZLIB::ZLIB_STATIC`` when the static target is available. This
matches the target name used by zlib's own CMake package.
Result Variables
^^^^^^^^^^^^^^^^
``ZLIB_FOUND``
Boolean indicating whether zlib was found.
``ZLIB_VERSION``
The version of zlib found.
``ZLIB_INCLUDE_DIRS``
Include directories containing ``zlib.h`` and other headers needed to use
zlib.
``ZLIB_LIBRARIES``
List of libraries needed to link to the default/selected zlib.
``ZLIB_SHARED_FOUND``
Boolean indicating whether a shared zlib library was found.
``ZLIB_STATIC_FOUND``
Boolean indicating whether a static zlib library was found.
``ZLIB_SHARED_LIBRARIES``
Shared zlib library or debug/optimized library list, when found.
``ZLIB_STATIC_LIBRARIES``
Static zlib library or debug/optimized library list, when found.
Hints
^^^^^
``ZLIB_ROOT``
A user may set this variable to a zlib installation root.
``ENV{ZLIB_ROOT}``
Environment-variable form of ``ZLIB_ROOT``.
``ZLIB_USE_STATIC_LIBS``
Set to ``ON`` before calling ``find_package(ZLIB)`` to prefer static
libraries for the compatibility/default ``ZLIB::ZLIB`` target.
``ZLIB_NAMES`` and ``ZLIB_NAMES_DEBUG``
Optional project override for the default selected-library search names.
``ZLIB_SHARED_NAMES`` and ``ZLIB_SHARED_NAMES_DEBUG``
Optional project override for shared-library search names.
``ZLIB_STATIC_NAMES`` and ``ZLIB_STATIC_NAMES_DEBUG``
Optional project override for static-library search names.
The default name lists include BRL-CAD's custom ``z_brl`` name.
#]=======================================================================]
cmake_policy(PUSH)
if(POLICY CMP0159)
cmake_policy(SET CMP0159 NEW) # file(STRINGS) with REGEX updates CMAKE_MATCH_<n>
endif()
set(_ZLIB_SEARCHES)
# Search ZLIB_ROOT first if it is set. Support both a CMake variable and
# an environment variable for command-line and packaged-build workflows.
if(ZLIB_ROOT)
set(_ZLIB_SEARCH_ROOT PATHS "${ZLIB_ROOT}" NO_DEFAULT_PATH)
list(APPEND _ZLIB_SEARCHES _ZLIB_SEARCH_ROOT)
elseif(DEFINED ENV{ZLIB_ROOT} AND NOT "$ENV{ZLIB_ROOT}" STREQUAL "")
set(_ZLIB_SEARCH_ROOT PATHS "$ENV{ZLIB_ROOT}" NO_DEFAULT_PATH)
list(APPEND _ZLIB_SEARCHES _ZLIB_SEARCH_ROOT)
endif()
# Normal search.
set(_ZLIB_x86 "(x86)")
set(_ZLIB_SEARCH_NORMAL
PATHS
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\GnuWin32\\Zlib;InstallPath]"
"$ENV{ProgramFiles}/zlib"
"$ENV{ProgramFiles${_ZLIB_x86}}/zlib"
)
unset(_ZLIB_x86)
list(APPEND _ZLIB_SEARCHES _ZLIB_SEARCH_NORMAL)
# BRL-CAD uses z_brl for its bundled zlib. Keep that name first so an
# explicitly supplied root or local prefix finds the BRL-CAD build before a
# generic system zlib.
set(_ZLIB_DEFAULT_SHARED_NAMES
z_brl
z
zlib
zdll
zlib1
zlibstatic
zlibwapi
zlibvc
zlibstat
)
set(_ZLIB_DEFAULT_SHARED_NAMES_DEBUG
z_brld
zd
zlibd
zdlld
zlibd1
zlib1d
zlibstaticd
zlibwapid
zlibvcd
zlibstatd
)
set(_ZLIB_DEFAULT_STATIC_NAMES
# On Windows the import library for the shared zlib and the static library
# share the .lib suffix, so the static name must come first and be distinct
# from the shared import lib (z_brl.lib) or find_library would pick the import
# lib and keep the z_brl.dll runtime dependency. BRL-CAD's static zlib is
# z_brl-static.lib.
z_brl-static
z_brl
z_brl_static
z_brlstatic
zs
zlibstatic
zlibstat
zlib
z
)
set(_ZLIB_DEFAULT_STATIC_NAMES_DEBUG
z_brld
z_brld_static
z_brldstatic
zsd
zlibstaticd
zlibstatd
zlibd
zd
)
if(NOT ZLIB_SHARED_NAMES)
set(ZLIB_SHARED_NAMES ${_ZLIB_DEFAULT_SHARED_NAMES})
endif()
if(NOT ZLIB_SHARED_NAMES_DEBUG)
set(ZLIB_SHARED_NAMES_DEBUG ${_ZLIB_DEFAULT_SHARED_NAMES_DEBUG})
endif()
if(NOT ZLIB_STATIC_NAMES)
set(ZLIB_STATIC_NAMES ${_ZLIB_DEFAULT_STATIC_NAMES})
endif()
if(NOT ZLIB_STATIC_NAMES_DEBUG)
set(ZLIB_STATIC_NAMES_DEBUG ${_ZLIB_DEFAULT_STATIC_NAMES_DEBUG})
endif()
if(NOT ZLIB_NAMES)
if(ZLIB_USE_STATIC_LIBS)
set(ZLIB_NAMES ${ZLIB_STATIC_NAMES})
else()
set(ZLIB_NAMES ${ZLIB_SHARED_NAMES})
endif()
endif()
if(NOT ZLIB_NAMES_DEBUG)
if(ZLIB_USE_STATIC_LIBS)
set(ZLIB_NAMES_DEBUG ${ZLIB_STATIC_NAMES_DEBUG})
else()
set(ZLIB_NAMES_DEBUG ${ZLIB_SHARED_NAMES_DEBUG})
endif()
endif()
foreach(search ${_ZLIB_SEARCHES})
find_path(ZLIB_INCLUDE_DIR
NAMES zlib.h
${${search}}
PATH_SUFFIXES include
)
endforeach()
function(_zlib_save_find_library_state)
foreach(v CMAKE_FIND_LIBRARY_PREFIXES CMAKE_FIND_LIBRARY_SUFFIXES)
if(DEFINED ${v})
set(_zlib_ORIG_${v} "${${v}}" PARENT_SCOPE)
set(_zlib_HAD_${v} TRUE PARENT_SCOPE)
else()
set(_zlib_ORIG_${v} PARENT_SCOPE)
set(_zlib_HAD_${v} FALSE PARENT_SCOPE)
endif()
endforeach()
endfunction()
macro(_zlib_restore_find_library_state)
foreach(v CMAKE_FIND_LIBRARY_PREFIXES CMAKE_FIND_LIBRARY_SUFFIXES)
if(_zlib_HAD_${v})
set(${v} "${_zlib_ORIG_${v}}")
else()
unset(${v})
endif()
endforeach()
endmacro()
function(_zlib_find_variant prefix libtype)
set(options)
set(oneValueArgs)
set(multiValueArgs NAMES NAMES_DEBUG)
cmake_parse_arguments(_ZLIB_FIND "${options}" "${oneValueArgs}" "${multiValueArgs}" ${ARGN})
_zlib_save_find_library_state()
# Support the MinGW/win32 Makefile.gcc build style.
if(WIN32)
list(APPEND CMAKE_FIND_LIBRARY_PREFIXES "" "lib")
list(APPEND CMAKE_FIND_LIBRARY_SUFFIXES ".dll.a")
endif()
if(libtype STREQUAL "STATIC")
if(WIN32)
set(CMAKE_FIND_LIBRARY_SUFFIXES .lib .a ${CMAKE_FIND_LIBRARY_SUFFIXES})
else()
set(CMAKE_FIND_LIBRARY_SUFFIXES .a)
endif()
elseif(libtype STREQUAL "SHARED")
if(WIN32)
# On Windows, shared zlib is normally discovered through an import
# library. Distinguishing a .lib import library from a static .lib is
# not reliable by suffix alone, so the name list does most of the work.
set(CMAKE_FIND_LIBRARY_SUFFIXES .dll.a .lib ${CMAKE_FIND_LIBRARY_SUFFIXES})
elseif(APPLE)
set(CMAKE_FIND_LIBRARY_SUFFIXES .dylib .so ${CMAKE_FIND_LIBRARY_SUFFIXES})
elseif(UNIX)
set(CMAKE_FIND_LIBRARY_SUFFIXES .so ${CMAKE_FIND_LIBRARY_SUFFIXES})
endif()
endif()
foreach(search ${_ZLIB_SEARCHES})
find_library(${prefix}_LIBRARY_RELEASE
NAMES ${_ZLIB_FIND_NAMES}
NAMES_PER_DIR
${${search}}
PATH_SUFFIXES lib lib64
)
find_library(${prefix}_LIBRARY_DEBUG
NAMES ${_ZLIB_FIND_NAMES_DEBUG}
NAMES_PER_DIR
${${search}}
PATH_SUFFIXES lib lib64
)
endforeach()
_zlib_restore_find_library_state()
set(${prefix}_LIBRARY_RELEASE "${${prefix}_LIBRARY_RELEASE}" PARENT_SCOPE)
set(${prefix}_LIBRARY_DEBUG "${${prefix}_LIBRARY_DEBUG}" PARENT_SCOPE)
endfunction()
# Main/default search. Preserve CMake's behavior of allowing ZLIB_LIBRARY to
# be set manually as the selected library.
if(NOT ZLIB_LIBRARY)
_zlib_find_variant(ZLIB UNKNOWN
NAMES ${ZLIB_NAMES}
NAMES_DEBUG ${ZLIB_NAMES_DEBUG}
)
include(SelectLibraryConfigurations)
select_library_configurations(ZLIB)
endif()
# Variant searches. These do not override the selected/default ZLIB_LIBRARY.
if(NOT ZLIB_SHARED_LIBRARY)
_zlib_find_variant(ZLIB_SHARED SHARED
NAMES ${ZLIB_SHARED_NAMES}
NAMES_DEBUG ${ZLIB_SHARED_NAMES_DEBUG}
)
include(SelectLibraryConfigurations)
select_library_configurations(ZLIB_SHARED)
endif()
if(NOT ZLIB_STATIC_LIBRARY)
_zlib_find_variant(ZLIB_STATIC STATIC
NAMES ${ZLIB_STATIC_NAMES}
NAMES_DEBUG ${ZLIB_STATIC_NAMES_DEBUG}
)
include(SelectLibraryConfigurations)
select_library_configurations(ZLIB_STATIC)
endif()
unset(ZLIB_NAMES)
unset(ZLIB_NAMES_DEBUG)
unset(_ZLIB_DEFAULT_SHARED_NAMES)
unset(_ZLIB_DEFAULT_SHARED_NAMES_DEBUG)
unset(_ZLIB_DEFAULT_STATIC_NAMES)
unset(_ZLIB_DEFAULT_STATIC_NAMES_DEBUG)
mark_as_advanced(
ZLIB_INCLUDE_DIR
ZLIB_LIBRARY
ZLIB_LIBRARY_RELEASE
ZLIB_LIBRARY_DEBUG
ZLIB_SHARED_LIBRARY
ZLIB_SHARED_LIBRARY_RELEASE
ZLIB_SHARED_LIBRARY_DEBUG
ZLIB_STATIC_LIBRARY
ZLIB_STATIC_LIBRARY_RELEASE
ZLIB_STATIC_LIBRARY_DEBUG
)
if(ZLIB_INCLUDE_DIR AND EXISTS "${ZLIB_INCLUDE_DIR}/zlib.h")
file(STRINGS "${ZLIB_INCLUDE_DIR}/zlib.h" ZLIB_H
REGEX "^#define ZLIB_VERSION \"[^\"]*\"$"
)
if(ZLIB_H MATCHES "ZLIB_VERSION \"(([0-9]+)\\.([0-9]+)(\\.([0-9]+)(\\.([0-9]+))?)?)")
set(ZLIB_VERSION_STRING "${CMAKE_MATCH_1}")
set(ZLIB_VERSION_MAJOR "${CMAKE_MATCH_2}")
set(ZLIB_VERSION_MINOR "${CMAKE_MATCH_3}")
set(ZLIB_VERSION_PATCH "${CMAKE_MATCH_5}")
set(ZLIB_VERSION_TWEAK "${CMAKE_MATCH_7}")
else()
set(ZLIB_VERSION_STRING "")
set(ZLIB_VERSION_MAJOR "")
set(ZLIB_VERSION_MINOR "")
set(ZLIB_VERSION_PATCH "")
set(ZLIB_VERSION_TWEAK "")
endif()
set(ZLIB_MAJOR_VERSION "${ZLIB_VERSION_MAJOR}")
set(ZLIB_MINOR_VERSION "${ZLIB_VERSION_MINOR}")
set(ZLIB_PATCH_VERSION "${ZLIB_VERSION_PATCH}")
set(ZLIB_VERSION "${ZLIB_VERSION_STRING}")
endif()
set(ZLIB_SHARED_FOUND FALSE)
if(ZLIB_INCLUDE_DIR AND ZLIB_SHARED_LIBRARY)
set(ZLIB_SHARED_FOUND TRUE)
set(ZLIB_SHARED_LIBRARIES ${ZLIB_SHARED_LIBRARY})
endif()
set(ZLIB_STATIC_FOUND FALSE)
if(ZLIB_INCLUDE_DIR AND ZLIB_STATIC_LIBRARY)
set(ZLIB_STATIC_FOUND TRUE)
set(ZLIB_STATIC_LIBRARIES ${ZLIB_STATIC_LIBRARY})
endif()
# Component support:
# find_package(ZLIB COMPONENTS shared)
# find_package(ZLIB COMPONENTS static)
#
# The compatibility/no-component case keeps the classic single-result behavior.
set(_ZLIB_REQUIRED_VARS ZLIB_LIBRARY ZLIB_INCLUDE_DIR)
foreach(_zlib_component IN LISTS ZLIB_FIND_COMPONENTS)
if(_zlib_component STREQUAL "shared")
if(ZLIB_SHARED_FOUND)
set(ZLIB_shared_FOUND TRUE)
else()
set(ZLIB_shared_FOUND FALSE)
endif()
list(APPEND _ZLIB_REQUIRED_VARS ZLIB_SHARED_LIBRARY)
elseif(_zlib_component STREQUAL "static")
if(ZLIB_STATIC_FOUND)
set(ZLIB_static_FOUND TRUE)
else()
set(ZLIB_static_FOUND FALSE)
endif()
list(APPEND _ZLIB_REQUIRED_VARS ZLIB_STATIC_LIBRARY)
else()
set(ZLIB_${_zlib_component}_FOUND FALSE)
endif()
endforeach()
include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(ZLIB
REQUIRED_VARS ${_ZLIB_REQUIRED_VARS}
VERSION_VAR ZLIB_VERSION
HANDLE_COMPONENTS
)
if(ZLIB_FOUND)
set(ZLIB_INCLUDE_DIRS ${ZLIB_INCLUDE_DIR})
if(NOT ZLIB_LIBRARIES)
set(ZLIB_LIBRARIES ${ZLIB_LIBRARY})
endif()
if(ZLIB_SHARED_FOUND AND NOT TARGET ZLIB::ZLIB_SHARED)
add_library(ZLIB::ZLIB_SHARED UNKNOWN IMPORTED)
set_target_properties(ZLIB::ZLIB_SHARED PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${ZLIB_INCLUDE_DIRS}"
IMPORTED_NO_SYSTEM TRUE
)
if(ZLIB_SHARED_LIBRARY_RELEASE)
set_property(TARGET ZLIB::ZLIB_SHARED APPEND PROPERTY
IMPORTED_CONFIGURATIONS RELEASE
)
set_target_properties(ZLIB::ZLIB_SHARED PROPERTIES
IMPORTED_LOCATION_RELEASE "${ZLIB_SHARED_LIBRARY_RELEASE}"
)
endif()
if(ZLIB_SHARED_LIBRARY_DEBUG)
set_property(TARGET ZLIB::ZLIB_SHARED APPEND PROPERTY
IMPORTED_CONFIGURATIONS DEBUG
)
set_target_properties(ZLIB::ZLIB_SHARED PROPERTIES
IMPORTED_LOCATION_DEBUG "${ZLIB_SHARED_LIBRARY_DEBUG}"
)
endif()
if(NOT ZLIB_SHARED_LIBRARY_RELEASE AND NOT ZLIB_SHARED_LIBRARY_DEBUG)
set_target_properties(ZLIB::ZLIB_SHARED PROPERTIES
IMPORTED_LOCATION "${ZLIB_SHARED_LIBRARY}"
)
endif()
endif()
if(ZLIB_STATIC_FOUND AND NOT TARGET ZLIB::ZLIB_STATIC)
add_library(ZLIB::ZLIB_STATIC STATIC IMPORTED)
set_target_properties(ZLIB::ZLIB_STATIC PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${ZLIB_INCLUDE_DIRS}"
IMPORTED_NO_SYSTEM TRUE
)
if(ZLIB_STATIC_LIBRARY_RELEASE)
set_property(TARGET ZLIB::ZLIB_STATIC APPEND PROPERTY
IMPORTED_CONFIGURATIONS RELEASE
)
set_target_properties(ZLIB::ZLIB_STATIC PROPERTIES
IMPORTED_LOCATION_RELEASE "${ZLIB_STATIC_LIBRARY_RELEASE}"
)
endif()
if(ZLIB_STATIC_LIBRARY_DEBUG)
set_property(TARGET ZLIB::ZLIB_STATIC APPEND PROPERTY
IMPORTED_CONFIGURATIONS DEBUG
)
set_target_properties(ZLIB::ZLIB_STATIC PROPERTIES
IMPORTED_LOCATION_DEBUG "${ZLIB_STATIC_LIBRARY_DEBUG}"
)
endif()
if(NOT ZLIB_STATIC_LIBRARY_RELEASE AND NOT ZLIB_STATIC_LIBRARY_DEBUG)
set_target_properties(ZLIB::ZLIB_STATIC PROPERTIES
IMPORTED_LOCATION "${ZLIB_STATIC_LIBRARY}"
)
endif()
endif()
if(TARGET ZLIB::ZLIB_STATIC AND NOT TARGET ZLIB::ZLIBSTATIC)
add_library(ZLIB::ZLIBSTATIC ALIAS ZLIB::ZLIB_STATIC)
endif()
if(NOT TARGET ZLIB::ZLIB)
add_library(ZLIB::ZLIB UNKNOWN IMPORTED)
set_target_properties(ZLIB::ZLIB PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${ZLIB_INCLUDE_DIRS}"
IMPORTED_NO_SYSTEM TRUE
)
if(ZLIB_LIBRARY_RELEASE)
set_property(TARGET ZLIB::ZLIB APPEND PROPERTY
IMPORTED_CONFIGURATIONS RELEASE
)
set_target_properties(ZLIB::ZLIB PROPERTIES
IMPORTED_LOCATION_RELEASE "${ZLIB_LIBRARY_RELEASE}"
)
endif()
if(ZLIB_LIBRARY_DEBUG)
set_property(TARGET ZLIB::ZLIB APPEND PROPERTY
IMPORTED_CONFIGURATIONS DEBUG
)
set_target_properties(ZLIB::ZLIB PROPERTIES
IMPORTED_LOCATION_DEBUG "${ZLIB_LIBRARY_DEBUG}"
)
endif()
if(NOT ZLIB_LIBRARY_RELEASE AND NOT ZLIB_LIBRARY_DEBUG)
set_target_properties(ZLIB::ZLIB PROPERTIES
IMPORTED_LOCATION "${ZLIB_LIBRARY}"
)
endif()
endif()
endif()
unset(_ZLIB_REQUIRED_VARS)
unset(_zlib_component)
unset(_ZLIB_SEARCHES)
unset(_ZLIB_SEARCH_ROOT)
unset(_ZLIB_SEARCH_NORMAL)
cmake_policy(POP)
+72
View File
@@ -0,0 +1,72 @@
if (NOT DEFINED BEXT_SOURCE_DIR)
message(FATAL_ERROR "BEXT_SOURCE_DIR is required")
endif()
if (NOT DEFINED BEXT_DOC_MODE)
set(BEXT_DOC_MODE CHECK)
endif()
include("${BEXT_SOURCE_DIR}/CMake/BextDependencyInventory.cmake")
bext_collect_dependency_inventory("${BEXT_SOURCE_DIR}")
set(generated "<!-- BEGIN GENERATED PROJECT TABLE -->\n")
string(APPEND generated "<!-- Generated by CMake/GenerateDependencyDocs.cmake; do not edit this block. -->\n")
string(APPEND generated "| Project | `USE_*` group(s) | Output | Dependencies | Source |\n")
string(APPEND generated "| --- | --- | --- | --- | --- |\n")
foreach(project ${BEXT_INVENTORY_PROJECTS})
bext_inventory_get(groups "${project}" GROUPS)
bext_inventory_get(output_class "${project}" OUTPUT)
bext_inventory_get(deps "${project}" DEPS)
bext_inventory_get(urls "${project}" SOURCE_URLS)
if (groups STREQUAL "always considered")
set(group_text "always considered")
else()
set(group_text "")
foreach(group ${groups})
if (group_text)
string(APPEND group_text ", ")
endif()
string(APPEND group_text "`USE_${group}`")
endforeach()
endif()
if (deps)
set(dep_text "")
foreach(dep ${deps})
if (dep_text)
string(APPEND dep_text ", ")
endif()
string(APPEND dep_text "`${dep}`")
endforeach()
else()
set(dep_text "—")
endif()
list(GET urls 0 primary_url)
string(APPEND generated "| `${project}` | ${group_text} | `${output_class}` | ${dep_text} | [repository](${primary_url}) |\n")
endforeach()
string(APPEND generated "<!-- END GENERATED PROJECT TABLE -->")
set(doc "${BEXT_SOURCE_DIR}/DEPENDENCIES.md")
file(READ "${doc}" current)
set(begin "<!-- BEGIN GENERATED PROJECT TABLE -->")
set(end "<!-- END GENERATED PROJECT TABLE -->")
string(FIND "${current}" "${begin}" begin_pos)
string(FIND "${current}" "${end}" end_pos)
if (begin_pos EQUAL -1 OR end_pos EQUAL -1 OR end_pos LESS begin_pos)
message(FATAL_ERROR "DEPENDENCIES.md is missing generated table markers")
endif()
string(LENGTH "${end}" end_len)
math(EXPR suffix_pos "${end_pos} + ${end_len}")
string(SUBSTRING "${current}" 0 ${begin_pos} prefix)
string(SUBSTRING "${current}" ${suffix_pos} -1 suffix)
set(expected "${prefix}${generated}${suffix}")
if (BEXT_DOC_MODE STREQUAL "WRITE")
file(WRITE "${doc}" "${expected}")
message(STATUS "Updated ${doc}")
elseif(BEXT_DOC_MODE STREQUAL "CHECK")
if (NOT current STREQUAL expected)
message(FATAL_ERROR "DEPENDENCIES.md is stale; run the update_dependency_docs target")
endif()
message(STATUS "Dependency metadata and DEPENDENCIES.md are valid")
else()
message(FATAL_ERROR "Unknown BEXT_DOC_MODE ${BEXT_DOC_MODE}; expected CHECK or WRITE")
endif()
+541
View File
@@ -0,0 +1,541 @@
if (NOT DEFINED BEXT_SOURCE_DIR)
message(FATAL_ERROR "BEXT_SOURCE_DIR is required")
endif ()
if (NOT DEFINED BEXT_BINARY_DIR)
message(FATAL_ERROR "BEXT_BINARY_DIR is required")
endif ()
set(graph_dot "${BEXT_BINARY_DIR}/bext.dot")
set(graph_svg "${BEXT_BINARY_DIR}/bext.svg")
function(_bext_graph_normalize_id out raw_value)
string(TOLOWER "${raw_value}" normalized)
string(REPLACE "_" "-" normalized "${normalized}")
set(${out} "${normalized}" PARENT_SCOPE)
endfunction()
function(_bext_graph_key out raw_value)
string(REGEX REPLACE "[^A-Za-z0-9]" "_" key "${raw_value}")
set(${out} "${key}" PARENT_SCOPE)
endfunction()
function(_bext_graph_set prefix node_id value)
_bext_graph_key(prop_key "${node_id}")
set_property(GLOBAL PROPERTY "${prefix}_${prop_key}" "${value}")
endfunction()
function(_bext_graph_get out prefix node_id)
_bext_graph_key(prop_key "${node_id}")
get_property(prop_value GLOBAL PROPERTY "${prefix}_${prop_key}")
set(${out} "${prop_value}" PARENT_SCOPE)
endfunction()
function(_bext_graph_append prefix node_id value)
_bext_graph_key(prop_key "${node_id}")
get_property(prop_values GLOBAL PROPERTY "${prefix}_${prop_key}")
list(APPEND prop_values "${value}")
list(REMOVE_DUPLICATES prop_values)
set_property(GLOBAL PROPERTY "${prefix}_${prop_key}" "${prop_values}")
endfunction()
function(_bext_graph_get_list out prefix node_id)
_bext_graph_key(prop_key "${node_id}")
get_property(prop_values GLOBAL PROPERTY "${prefix}_${prop_key}")
set(${out} "${prop_values}" PARENT_SCOPE)
endfunction()
function(_bext_graph_quote out value)
string(REPLACE "\"" "\\\"" escaped "${value}")
set(${out} "\"${escaped}\"" PARENT_SCOPE)
endfunction()
function(_bext_graph_label out value)
string(REPLACE "-" " " label_text "${value}")
set(${out} "${label_text}" PARENT_SCOPE)
endfunction()
function(_bext_graph_xml_escape out value)
string(REPLACE "&" "&amp;" escaped "${value}")
string(REPLACE "<" "&lt;" escaped "${escaped}")
string(REPLACE ">" "&gt;" escaped "${escaped}")
string(REPLACE "\"" "&quot;" escaped "${escaped}")
set(${out} "${escaped}" PARENT_SCOPE)
endfunction()
function(_bext_graph_write_line)
cmake_parse_arguments(ARG "" "TEXT" "" ${ARGN})
file(APPEND "${graph_dot}" "${ARG_TEXT}\n")
endfunction()
function(_bext_graph_color_by_depth out_fill out_outline out_font out_outline_font depth output_class)
set(strong_colors "#2563eb" "#0f766e" "#65a30d" "#d97706" "#dc2626" "#9333ea" "#0891b2" "#4f46e5")
set(pale_colors "#dbeafe" "#ccfbf1" "#ecfccb" "#ffedd5" "#fee2e2" "#f3e8ff" "#cffafe" "#e0e7ff")
set(strong_fonts "#ffffff" "#ffffff" "#111827" "#111827" "#ffffff" "#ffffff" "#111827" "#ffffff")
math(EXPR palette_index "(${depth} - 1) % 8")
list(GET strong_colors ${palette_index} strong_fill)
list(GET pale_colors ${palette_index} pale_fill)
list(GET strong_fonts ${palette_index} strong_font)
if ("${output_class}" STREQUAL "noinstall")
set(${out_fill} "${pale_fill}" PARENT_SCOPE)
set(${out_outline} "${strong_fill}" PARENT_SCOPE)
set(${out_font} "${strong_fill}" PARENT_SCOPE)
set(${out_outline_font} "${strong_fill}" PARENT_SCOPE)
else ()
set(${out_fill} "${strong_fill}" PARENT_SCOPE)
set(${out_outline} "${strong_fill}" PARENT_SCOPE)
set(${out_font} "${strong_font}" PARENT_SCOPE)
set(${out_outline_font} "${strong_fill}" PARENT_SCOPE)
endif ()
endfunction()
function(_bext_graph_find_submodule_url out project_name submodule_path)
set(search_path "${project_name}/${submodule_path}")
list(LENGTH submodule_path_entries submodule_count)
if (submodule_count GREATER 0)
math(EXPR last_index "${submodule_count} - 1")
foreach(idx RANGE 0 ${last_index})
list(GET submodule_path_entries ${idx} entry)
string(REPLACE "|" ";" parts "${entry}")
list(GET parts 0 entry_path)
list(GET parts 1 entry_url)
if ("${entry_path}" STREQUAL "${search_path}")
set(${out} "${entry_url}" PARENT_SCOPE)
return()
endif ()
endforeach ()
endif ()
set(${out} "" PARENT_SCOPE)
endfunction()
file(STRINGS "${BEXT_SOURCE_DIR}/.gitmodules" gitmodule_lines)
set(current_submodule_path "")
foreach(line ${gitmodule_lines})
string(STRIP "${line}" stripped_line)
if (stripped_line MATCHES "^path = (.+)$")
set(current_submodule_path "${CMAKE_MATCH_1}")
endif ()
if (stripped_line MATCHES "^url = (.+)$")
if (current_submodule_path)
list(APPEND submodule_path_entries "${current_submodule_path}|${CMAKE_MATCH_1}")
set(current_submodule_path "")
endif ()
endif ()
endforeach()
file(STRINGS "${BEXT_SOURCE_DIR}/CMakeLists.txt" top_level_lines)
set(project_ids)
set(actual_edges)
set(all_dep_ids)
foreach(line ${top_level_lines})
string(STRIP "${line}" stripped_line)
if (stripped_line MATCHES "^#")
continue()
endif ()
if (NOT stripped_line MATCHES "^add_project\\(([^ \t\\)]+)")
continue()
endif ()
set(project_name "${CMAKE_MATCH_1}")
_bext_graph_normalize_id(project_id "${project_name}")
list(APPEND project_ids "${project_id}")
_bext_graph_set(NODE_LABEL "${project_id}" "${project_name}")
_bext_graph_set(NODE_CLASS "${project_id}" "install")
set(project_cmakelists "${BEXT_SOURCE_DIR}/${project_name}/CMakeLists.txt")
file(READ "${project_cmakelists}" project_text)
if (project_text MATCHES "CMAKE_INSTALL_PREFIX=\\$\\{CMAKE_NOBUNDLE_INSTALL_PREFIX\\}" OR
project_text MATCHES "--prefix=\\$\\{CMAKE_NOBUNDLE_INSTALL_PREFIX\\}")
_bext_graph_set(NODE_CLASS "${project_id}" "noinstall")
endif ()
set(depfile "${BEXT_SOURCE_DIR}/${project_name}/${project_name}.deps")
if (EXISTS "${depfile}")
file(STRINGS "${depfile}" dep_lines)
foreach(dep_line ${dep_lines})
string(STRIP "${dep_line}" dep_name)
if (NOT dep_name)
continue()
endif ()
_bext_graph_normalize_id(dep_id "${dep_name}")
list(APPEND actual_edges "${project_id}|${dep_id}")
list(APPEND all_dep_ids "${dep_id}")
_bext_graph_get(dep_label NODE_LABEL "${dep_id}")
if (NOT dep_label)
string(TOLOWER "${dep_name}" dep_label_text)
_bext_graph_set(NODE_LABEL "${dep_id}" "${dep_label_text}")
endif ()
endforeach ()
endif ()
file(STRINGS "${project_cmakelists}" project_lines)
foreach(project_line ${project_lines})
string(STRIP "${project_line}" stripped_project_line)
if (stripped_project_line MATCHES "git_submodule_init\\(([A-Za-z0-9_+./-]+)[ \t]")
list(APPEND submodule_paths "${CMAKE_MATCH_1}")
endif ()
if (stripped_project_line MATCHES "ExternalProject_Add\\(([A-Za-z0-9_]+)_BLD")
_bext_graph_normalize_id(provider_id "${CMAKE_MATCH_1}")
list(APPEND provider_ids "${provider_id}")
endif ()
endforeach ()
list(REMOVE_DUPLICATES submodule_paths)
list(REMOVE_DUPLICATES provider_ids)
if (submodule_paths)
_bext_graph_set(PROJECT_SUBMODULE_PATHS "${project_id}" "${submodule_paths}")
endif ()
if (provider_ids)
_bext_graph_set(PROJECT_PROVIDER_IDS "${project_id}" "${provider_ids}")
endif ()
unset(submodule_paths)
unset(provider_ids)
endforeach()
list(REMOVE_DUPLICATES project_ids)
list(SORT project_ids)
list(REMOVE_DUPLICATES actual_edges)
list(REMOVE_DUPLICATES all_dep_ids)
set(alias_ids)
foreach(dep_id ${all_dep_ids})
list(FIND project_ids "${dep_id}" project_idx)
if (project_idx EQUAL -1)
list(APPEND alias_ids "${dep_id}")
endif ()
endforeach()
list(REMOVE_DUPLICATES alias_ids)
list(SORT alias_ids)
set(provider_edges)
foreach(project_id ${project_ids})
_bext_graph_get(project_name NODE_LABEL "${project_id}")
_bext_graph_get(project_submodule_paths PROJECT_SUBMODULE_PATHS "${project_id}")
foreach(submodule_path ${project_submodule_paths})
_bext_graph_find_submodule_url(project_url "${project_name}" "${submodule_path}")
if (project_url)
_bext_graph_set(NODE_URL "${project_id}" "${project_url}")
break()
endif ()
endforeach ()
_bext_graph_get(provider_ids PROJECT_PROVIDER_IDS "${project_id}")
foreach(provider_id ${provider_ids})
list(FIND alias_ids "${provider_id}" alias_idx)
if (alias_idx EQUAL -1)
continue()
endif ()
list(APPEND provider_edges "${project_id}|${provider_id}")
_bext_graph_get(alias_url NODE_URL "${provider_id}")
if (NOT alias_url)
foreach(submodule_path ${project_submodule_paths})
get_filename_component(submodule_name "${submodule_path}" NAME)
_bext_graph_normalize_id(submodule_id "${submodule_name}")
if ("${submodule_id}" STREQUAL "${provider_id}")
_bext_graph_find_submodule_url(alias_url_candidate "${project_name}" "${submodule_path}")
if (alias_url_candidate)
_bext_graph_set(NODE_URL "${provider_id}" "${alias_url_candidate}")
break()
endif ()
endif ()
endforeach ()
endif ()
_bext_graph_get(alias_class NODE_CLASS "${provider_id}")
if (NOT alias_class)
_bext_graph_get(project_class NODE_CLASS "${project_id}")
_bext_graph_set(NODE_CLASS "${provider_id}" "${project_class}")
endif ()
endforeach ()
endforeach()
list(REMOVE_DUPLICATES provider_edges)
list(SORT provider_edges)
set(node_ids ${project_ids} ${alias_ids})
list(REMOVE_DUPLICATES node_ids)
list(SORT node_ids)
set(incoming_project_targets)
foreach(edge ${actual_edges})
string(REPLACE "|" ";" edge_parts "${edge}")
list(GET edge_parts 0 edge_src)
list(GET edge_parts 1 edge_dst)
list(FIND project_ids "${edge_dst}" dst_project_idx)
if (NOT dst_project_idx EQUAL -1)
list(APPEND incoming_project_targets "${edge_dst}")
endif ()
endforeach()
list(REMOVE_DUPLICATES incoming_project_targets)
set(entry_project_ids)
foreach(project_id ${project_ids})
list(FIND incoming_project_targets "${project_id}" incoming_idx)
if (incoming_idx EQUAL -1)
list(APPEND entry_project_ids "${project_id}")
endif ()
endforeach()
list(SORT entry_project_ids)
set(active_nodes ${entry_project_ids})
foreach(project_id ${entry_project_ids})
_bext_graph_set(NODE_DEPTH "${project_id}" "1")
endforeach()
set(changed TRUE)
while (changed)
set(changed FALSE)
foreach(edge ${actual_edges})
string(REPLACE "|" ";" edge_parts "${edge}")
list(GET edge_parts 0 edge_src)
list(GET edge_parts 1 edge_dst)
_bext_graph_get(src_depth NODE_DEPTH "${edge_src}")
if (NOT src_depth)
continue()
endif ()
math(EXPR candidate_depth "${src_depth} + 1")
_bext_graph_get(dst_depth NODE_DEPTH "${edge_dst}")
if (NOT dst_depth OR candidate_depth LESS dst_depth)
_bext_graph_set(NODE_DEPTH "${edge_dst}" "${candidate_depth}")
set(changed TRUE)
endif ()
endforeach ()
endwhile ()
foreach(node_id ${node_ids})
_bext_graph_get(node_depth NODE_DEPTH "${node_id}")
if (NOT node_depth)
_bext_graph_set(NODE_DEPTH "${node_id}" "1")
endif ()
endforeach()
set(max_depth 1)
foreach(node_id ${node_ids})
_bext_graph_get(node_depth NODE_DEPTH "${node_id}")
if (node_depth GREATER max_depth)
set(max_depth "${node_depth}")
endif ()
endforeach()
file(WRITE "${graph_dot}" "digraph Deps {\n")
_bext_graph_write_line(TEXT " graph [rankdir=LR, overlap=false, splines=true];")
_bext_graph_write_line(TEXT " node [shape=box, style=bold, fontname=\"Helvetica\", penwidth=2.0, margin=\"0.12,0.06\"];")
_bext_graph_write_line(TEXT " edge [color=\"#6b7280\", arrowsize=0.7, penwidth=1.4];")
_bext_graph_write_line(TEXT "")
_bext_graph_write_line(TEXT " \"BRL_CAD\" [label=\"BRL-CAD\", URL=\"https://github.com/BRL-CAD/brlcad\", style=\"filled,bold\", fillcolor=\"#111827\", color=\"#111827\", fontcolor=\"#ffffff\", penwidth=2.4];")
_bext_graph_write_line(TEXT "")
foreach(depth RANGE 1 ${max_depth})
set(depth_nodes)
foreach(node_id ${node_ids})
_bext_graph_get(node_depth NODE_DEPTH "${node_id}")
if ("${node_depth}" STREQUAL "${depth}")
list(APPEND depth_nodes "${node_id}")
endif ()
endforeach ()
if (depth_nodes)
list(SORT depth_nodes)
_bext_graph_write_line(TEXT " { rank=same;")
foreach(node_id ${depth_nodes})
_bext_graph_get(node_label NODE_LABEL "${node_id}")
_bext_graph_get(node_class NODE_CLASS "${node_id}")
_bext_graph_get(node_url NODE_URL "${node_id}")
_bext_graph_color_by_depth(node_fill node_outline node_font node_outline_font "${depth}" "${node_class}")
_bext_graph_quote(node_name_q "${node_id}")
_bext_graph_quote(node_label_q "${node_label}")
if (node_url)
_bext_graph_quote(node_url_q "${node_url}")
set(url_attr ", URL=${node_url_q}")
else ()
set(url_attr "")
endif ()
if ("${node_class}" STREQUAL "noinstall")
set(node_style "filled,bold")
else ()
set(node_style "filled,bold")
endif ()
_bext_graph_write_line(TEXT " ${node_name_q} [label=${node_label_q}, style=\"${node_style}\", fillcolor=\"${node_fill}\", color=\"${node_outline}\", fontcolor=\"${node_font}\"${url_attr}];")
endforeach ()
_bext_graph_write_line(TEXT " }")
_bext_graph_write_line(TEXT "")
endif ()
endforeach ()
foreach(entry_project_id ${entry_project_ids})
_bext_graph_quote(entry_q "${entry_project_id}")
_bext_graph_write_line(TEXT " \"BRL_CAD\" -> ${entry_q} [color=\"#9ca3af\", penwidth=1.6];")
endforeach ()
if (entry_project_ids)
_bext_graph_write_line(TEXT "")
endif ()
list(SORT actual_edges)
foreach(edge ${actual_edges})
string(REPLACE "|" ";" edge_parts "${edge}")
list(GET edge_parts 0 edge_src)
list(GET edge_parts 1 edge_dst)
_bext_graph_quote(src_q "${edge_src}")
_bext_graph_quote(dst_q "${edge_dst}")
_bext_graph_write_line(TEXT " ${src_q} -> ${dst_q};")
endforeach ()
if (provider_edges)
_bext_graph_write_line(TEXT "")
foreach(edge ${provider_edges})
string(REPLACE "|" ";" edge_parts "${edge}")
list(GET edge_parts 0 edge_src)
list(GET edge_parts 1 edge_dst)
_bext_graph_quote(src_q "${edge_src}")
_bext_graph_quote(dst_q "${edge_dst}")
_bext_graph_write_line(TEXT " ${src_q} -> ${dst_q} [style=dashed, color=\"#9ca3af\", arrowhead=none, constraint=false];")
endforeach ()
endif ()
_bext_graph_write_line(TEXT "}")
set(node_width 190)
set(node_height 42)
set(column_gap 120)
set(row_gap 22)
set(graph_margin 40)
set(max_nodes_per_depth 1)
foreach(depth RANGE 1 ${max_depth})
set(depth_nodes)
foreach(node_id ${node_ids})
_bext_graph_get(node_depth NODE_DEPTH "${node_id}")
if ("${node_depth}" STREQUAL "${depth}")
list(APPEND depth_nodes "${node_id}")
endif ()
endforeach ()
list(LENGTH depth_nodes depth_node_count)
if (depth_node_count GREATER max_nodes_per_depth)
set(max_nodes_per_depth "${depth_node_count}")
endif ()
endforeach ()
math(EXPR graph_width "${graph_margin} * 2 + (${max_depth} + 1) * ${node_width} + ${max_depth} * ${column_gap}")
math(EXPR graph_height "${graph_margin} * 2 + ${max_nodes_per_depth} * ${node_height} + (${max_nodes_per_depth} - 1) * ${row_gap}")
math(EXPR root_x "${graph_margin}")
math(EXPR root_y "(${graph_height} - ${node_height}) / 2")
foreach(node_id ${node_ids})
_bext_graph_get(node_depth NODE_DEPTH "${node_id}")
set(depth_nodes)
foreach(depth_node_id ${node_ids})
_bext_graph_get(depth_node_depth NODE_DEPTH "${depth_node_id}")
if ("${depth_node_depth}" STREQUAL "${node_depth}")
list(APPEND depth_nodes "${depth_node_id}")
endif ()
endforeach ()
list(SORT depth_nodes)
list(FIND depth_nodes "${node_id}" depth_index)
math(EXPR node_x "${graph_margin} + ${node_depth} * (${node_width} + ${column_gap})")
math(EXPR node_y "${graph_margin} + ${depth_index} * (${node_height} + ${row_gap})")
_bext_graph_set(NODE_X "${node_id}" "${node_x}")
_bext_graph_set(NODE_Y "${node_id}" "${node_y}")
endforeach ()
file(WRITE "${graph_svg}" "<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" width=\"${graph_width}\" height=\"${graph_height}\" viewBox=\"0 0 ${graph_width} ${graph_height}\">\n")
file(APPEND "${graph_svg}" " <defs>\n")
file(APPEND "${graph_svg}" " <marker id=\"arrow\" markerWidth=\"10\" markerHeight=\"8\" refX=\"9\" refY=\"4\" orient=\"auto\" markerUnits=\"strokeWidth\">\n")
file(APPEND "${graph_svg}" " <path d=\"M0,0 L10,4 L0,8 z\" fill=\"#6b7280\" />\n")
file(APPEND "${graph_svg}" " </marker>\n")
file(APPEND "${graph_svg}" " </defs>\n")
file(APPEND "${graph_svg}" " <rect width=\"100%\" height=\"100%\" fill=\"#ffffff\" />\n")
foreach(entry_project_id ${entry_project_ids})
_bext_graph_get(dst_x NODE_X "${entry_project_id}")
_bext_graph_get(dst_y NODE_Y "${entry_project_id}")
math(EXPR src_cx "${root_x} + ${node_width}")
math(EXPR src_cy "${root_y} + (${node_height} / 2)")
set(dst_cx "${dst_x}")
math(EXPR dst_cy "${dst_y} + (${node_height} / 2)")
math(EXPR control_dx "(${dst_cx} - ${src_cx}) / 2")
math(EXPR control1_x "${src_cx} + ${control_dx}")
math(EXPR control2_x "${dst_cx} - ${control_dx}")
file(APPEND "${graph_svg}" " <path d=\"M ${src_cx} ${src_cy} C ${control1_x} ${src_cy}, ${control2_x} ${dst_cy}, ${dst_cx} ${dst_cy}\" fill=\"none\" stroke=\"#9ca3af\" stroke-width=\"1.6\" marker-end=\"url(#arrow)\" />\n")
endforeach ()
foreach(edge ${actual_edges})
string(REPLACE "|" ";" edge_parts "${edge}")
list(GET edge_parts 0 edge_src)
list(GET edge_parts 1 edge_dst)
_bext_graph_get(src_x NODE_X "${edge_src}")
_bext_graph_get(src_y NODE_Y "${edge_src}")
_bext_graph_get(dst_x NODE_X "${edge_dst}")
_bext_graph_get(dst_y NODE_Y "${edge_dst}")
math(EXPR src_cx "${src_x} + ${node_width}")
math(EXPR src_cy "${src_y} + (${node_height} / 2)")
set(dst_cx "${dst_x}")
math(EXPR dst_cy "${dst_y} + (${node_height} / 2)")
math(EXPR control_dx "(${dst_cx} - ${src_cx}) / 2")
math(EXPR control1_x "${src_cx} + ${control_dx}")
math(EXPR control2_x "${dst_cx} - ${control_dx}")
file(APPEND "${graph_svg}" " <path d=\"M ${src_cx} ${src_cy} C ${control1_x} ${src_cy}, ${control2_x} ${dst_cy}, ${dst_cx} ${dst_cy}\" fill=\"none\" stroke=\"#6b7280\" stroke-width=\"1.4\" marker-end=\"url(#arrow)\" />\n")
endforeach ()
foreach(edge ${provider_edges})
string(REPLACE "|" ";" edge_parts "${edge}")
list(GET edge_parts 0 edge_src)
list(GET edge_parts 1 edge_dst)
_bext_graph_get(src_x NODE_X "${edge_src}")
_bext_graph_get(src_y NODE_Y "${edge_src}")
_bext_graph_get(dst_x NODE_X "${edge_dst}")
_bext_graph_get(dst_y NODE_Y "${edge_dst}")
math(EXPR src_cx "${src_x} + ${node_width}")
math(EXPR src_cy "${src_y} + (${node_height} / 2)")
set(dst_cx "${dst_x}")
math(EXPR dst_cy "${dst_y} + (${node_height} / 2)")
math(EXPR control_dx "(${dst_cx} - ${src_cx}) / 2")
math(EXPR control1_x "${src_cx} + ${control_dx}")
math(EXPR control2_x "${dst_cx} - ${control_dx}")
file(APPEND "${graph_svg}" " <path d=\"M ${src_cx} ${src_cy} C ${control1_x} ${src_cy}, ${control2_x} ${dst_cy}, ${dst_cx} ${dst_cy}\" fill=\"none\" stroke=\"#9ca3af\" stroke-width=\"1.4\" stroke-dasharray=\"6 5\" />\n")
endforeach ()
file(APPEND "${graph_svg}" " <g>\n")
file(APPEND "${graph_svg}" " <a xlink:href=\"https://github.com/BRL-CAD/brlcad\">\n")
file(APPEND "${graph_svg}" " <rect x=\"${root_x}\" y=\"${root_y}\" width=\"${node_width}\" height=\"${node_height}\" rx=\"8\" fill=\"#111827\" stroke=\"#111827\" stroke-width=\"2.4\" />\n")
math(EXPR root_text_x "${root_x} + (${node_width} / 2)")
math(EXPR root_text_y "${root_y} + 27")
file(APPEND "${graph_svg}" " <text x=\"${root_text_x}\" y=\"${root_text_y}\" text-anchor=\"middle\" font-family=\"Helvetica\" font-size=\"16\" font-weight=\"700\" fill=\"#ffffff\">BRL-CAD</text>\n")
file(APPEND "${graph_svg}" " </a>\n")
file(APPEND "${graph_svg}" " </g>\n")
foreach(node_id ${node_ids})
_bext_graph_get(node_depth NODE_DEPTH "${node_id}")
_bext_graph_get(node_label NODE_LABEL "${node_id}")
_bext_graph_get(node_class NODE_CLASS "${node_id}")
_bext_graph_get(node_url NODE_URL "${node_id}")
_bext_graph_get(node_x NODE_X "${node_id}")
_bext_graph_get(node_y NODE_Y "${node_id}")
_bext_graph_color_by_depth(node_fill node_outline node_font node_outline_font "${node_depth}" "${node_class}")
_bext_graph_xml_escape(node_label_xml "${node_label}")
if (node_url)
_bext_graph_xml_escape(node_url_xml "${node_url}")
file(APPEND "${graph_svg}" " <g>\n")
file(APPEND "${graph_svg}" " <a xlink:href=\"${node_url_xml}\">\n")
else ()
file(APPEND "${graph_svg}" " <g>\n")
endif ()
file(APPEND "${graph_svg}" " <rect x=\"${node_x}\" y=\"${node_y}\" width=\"${node_width}\" height=\"${node_height}\" rx=\"8\" fill=\"${node_fill}\" stroke=\"${node_outline}\" stroke-width=\"2.0\" />\n")
math(EXPR text_x "${node_x} + (${node_width} / 2)")
math(EXPR text_y "${node_y} + 27")
file(APPEND "${graph_svg}" " <text x=\"${text_x}\" y=\"${text_y}\" text-anchor=\"middle\" font-family=\"Helvetica\" font-size=\"14\" font-weight=\"600\" fill=\"${node_font}\">${node_label_xml}</text>\n")
if (node_url)
file(APPEND "${graph_svg}" " </a>\n")
endif ()
file(APPEND "${graph_svg}" " </g>\n")
endforeach ()
file(APPEND "${graph_svg}" "</svg>\n")
if (DEFINED GRAPHVIZ_DOT_EXECUTABLE AND GRAPHVIZ_DOT_EXECUTABLE)
foreach(render_format png pdf)
if (DEFINED BEXT_RENDER_${render_format} AND BEXT_RENDER_${render_format})
execute_process(
COMMAND "${GRAPHVIZ_DOT_EXECUTABLE}" "-T${render_format}" "-o" "${BEXT_BINARY_DIR}/bext.${render_format}" "${graph_dot}"
COMMAND_ERROR_IS_FATAL ANY
)
endif ()
endforeach ()
endif ()
+115
View File
@@ -0,0 +1,115 @@
if (NOT DEFINED BEXT_SOURCE_DIR)
message(FATAL_ERROR "BEXT_SOURCE_DIR is required")
endif()
if (NOT DEFINED BEXT_SBOM_OUTPUT)
message(FATAL_ERROR "BEXT_SBOM_OUTPUT is required")
endif()
include("${BEXT_SOURCE_DIR}/CMake/BextDependencyInventory.cmake")
bext_collect_dependency_inventory("${BEXT_SOURCE_DIR}")
function(_bext_json_escape out value)
string(REPLACE "\\" "\\\\" value "${value}")
string(REPLACE "\"" "\\\"" value "${value}")
string(REPLACE "\n" "\\n" value "${value}")
string(REPLACE "\r" "\\r" value "${value}")
string(REPLACE "\t" "\\t" value "${value}")
set(${out} "${value}" PARENT_SCOPE)
endfunction()
function(_bext_spdx_id out project)
string(REGEX REPLACE "[^A-Za-z0-9.-]" "-" id "${project}")
set(${out} "SPDXRef-Package-${id}" PARENT_SCOPE)
endfunction()
execute_process(
COMMAND git rev-parse HEAD
WORKING_DIRECTORY "${BEXT_SOURCE_DIR}"
RESULT_VARIABLE git_result
OUTPUT_VARIABLE bext_revision
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if (NOT git_result EQUAL 0)
message(FATAL_ERROR "Unable to determine the bext revision")
endif()
string(TIMESTAMP created "%Y-%m-%dT%H:%M:%SZ" UTC)
get_filename_component(sbom_dir "${BEXT_SBOM_OUTPUT}" DIRECTORY)
file(MAKE_DIRECTORY "${sbom_dir}")
file(WRITE "${BEXT_SBOM_OUTPUT}" "{\n")
file(APPEND "${BEXT_SBOM_OUTPUT}" " \"spdxVersion\": \"SPDX-2.3\",\n")
file(APPEND "${BEXT_SBOM_OUTPUT}" " \"dataLicense\": \"CC0-1.0\",\n")
file(APPEND "${BEXT_SBOM_OUTPUT}" " \"SPDXID\": \"SPDXRef-DOCUMENT\",\n")
file(APPEND "${BEXT_SBOM_OUTPUT}" " \"name\": \"bext-dependencies\",\n")
file(APPEND "${BEXT_SBOM_OUTPUT}" " \"documentNamespace\": \"https://github.com/BRL-CAD/bext/sbom/${bext_revision}\",\n")
file(APPEND "${BEXT_SBOM_OUTPUT}" " \"creationInfo\": {\n")
file(APPEND "${BEXT_SBOM_OUTPUT}" " \"created\": \"${created}\",\n")
file(APPEND "${BEXT_SBOM_OUTPUT}" " \"creators\": [\"Tool: bext-GenerateSbom.cmake\"]\n")
file(APPEND "${BEXT_SBOM_OUTPUT}" " },\n")
file(APPEND "${BEXT_SBOM_OUTPUT}" " \"packages\": [\n")
list(LENGTH BEXT_INVENTORY_PROJECTS project_count)
set(project_index 0)
foreach(project ${BEXT_INVENTORY_PROJECTS})
math(EXPR project_index "${project_index} + 1")
bext_inventory_get(groups "${project}" GROUPS)
bext_inventory_get(output_class "${project}" OUTPUT)
bext_inventory_get(urls "${project}" SOURCE_URLS)
bext_inventory_get(shas "${project}" SOURCE_SHAS)
list(GET urls 0 primary_url)
list(GET shas 0 primary_sha)
_bext_spdx_id(spdx_id "${project}")
string(REPLACE ";" ", " all_urls "${urls}")
string(REPLACE ";" ", " all_shas "${shas}")
string(REPLACE ";" ", " group_text "${groups}")
_bext_json_escape(comment "groups: ${group_text}; output: ${output_class}; sources: ${all_urls}; pinned commits: ${all_shas}")
_bext_json_escape(primary_url "${primary_url}")
file(APPEND "${BEXT_SBOM_OUTPUT}" " {\n")
file(APPEND "${BEXT_SBOM_OUTPUT}" " \"name\": \"${project}\",\n")
file(APPEND "${BEXT_SBOM_OUTPUT}" " \"SPDXID\": \"${spdx_id}\",\n")
file(APPEND "${BEXT_SBOM_OUTPUT}" " \"versionInfo\": \"${primary_sha}\",\n")
file(APPEND "${BEXT_SBOM_OUTPUT}" " \"downloadLocation\": \"${primary_url}\",\n")
file(APPEND "${BEXT_SBOM_OUTPUT}" " \"filesAnalyzed\": false,\n")
file(APPEND "${BEXT_SBOM_OUTPUT}" " \"licenseConcluded\": \"NOASSERTION\",\n")
file(APPEND "${BEXT_SBOM_OUTPUT}" " \"licenseDeclared\": \"NOASSERTION\",\n")
file(APPEND "${BEXT_SBOM_OUTPUT}" " \"copyrightText\": \"NOASSERTION\",\n")
file(APPEND "${BEXT_SBOM_OUTPUT}" " \"comment\": \"${comment}\"\n")
if (project_index LESS project_count)
file(APPEND "${BEXT_SBOM_OUTPUT}" " },\n")
else()
file(APPEND "${BEXT_SBOM_OUTPUT}" " }\n")
endif()
endforeach()
file(APPEND "${BEXT_SBOM_OUTPUT}" " ],\n")
file(APPEND "${BEXT_SBOM_OUTPUT}" " \"relationships\": [\n")
set(relationships)
foreach(project ${BEXT_INVENTORY_PROJECTS})
_bext_spdx_id(project_id "${project}")
list(APPEND relationships "SPDXRef-DOCUMENT|DESCRIBES|${project_id}")
bext_inventory_get(deps "${project}" DEPS)
foreach(dep ${deps})
list(FIND BEXT_INVENTORY_PROJECTS "${dep}" dep_index)
if (NOT dep_index EQUAL -1)
_bext_spdx_id(dep_id "${dep}")
list(APPEND relationships "${project_id}|DEPENDS_ON|${dep_id}")
endif()
endforeach()
endforeach()
list(LENGTH relationships relationship_count)
set(relationship_index 0)
foreach(relationship ${relationships})
math(EXPR relationship_index "${relationship_index} + 1")
string(REPLACE "|" ";" parts "${relationship}")
list(GET parts 0 source_id)
list(GET parts 1 relationship_type)
list(GET parts 2 target_id)
file(APPEND "${BEXT_SBOM_OUTPUT}" " {\"spdxElementId\": \"${source_id}\", \"relationshipType\": \"${relationship_type}\", \"relatedSpdxElement\": \"${target_id}\"}")
if (relationship_index LESS relationship_count)
file(APPEND "${BEXT_SBOM_OUTPUT}" ",\n")
else()
file(APPEND "${BEXT_SBOM_OUTPUT}" "\n")
endif()
endforeach()
file(APPEND "${BEXT_SBOM_OUTPUT}" " ]\n}\n")
message(STATUS "Generated SPDX 2.3 SBOM: ${BEXT_SBOM_OUTPUT}")
+163
View File
@@ -0,0 +1,163 @@
# J A V A C H E C K . C M A K E
# BRL-CAD
#
# Copyright (c) 2024 United States Government as represented by
# the U.S. Army Research Laboratory.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following
# disclaimer in the documentation and/or other materials provided
# with the distribution.
#
# 3. The name of the author may not be used to endorse or promote
# products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
###
# Utility function to check that dlls can be loaded by the Java
# System.loadLibrary mechanism. Parameters (all are mandatory):
#
# Required parameters:
# DLL_DIR = directory holding shared library files to check
#
# The following can be specified in lieu of relying on find_package
# to locate Java:
# JCEXEC = path to javac compiler
# JAREXEC = path to jar archive creater
# JEXEC = path to java executable
function(JavaCheck JC_EXEC JAR_EXEC J_EXEC DLL_SUFFIX dlldir)
if (NOT EXISTS "${dlldir}")
message(FATAL_ERROR "Dll directory ${dlldir} not found\n")
endif ()
if (NOT EXISTS "${JC_EXEC}")
message(FATAL_ERROR "Java compiler executable ${JC_EXEC} not found\n")
endif ()
if (NOT EXISTS "${JAR_EXEC}")
message(FATAL_ERROR "Java archive creation executable ${JAR_EXEC} not found\n")
endif ()
if (NOT EXISTS "${J_EXEC}")
message(FATAL_ERROR "Java executable ${J_EXEC} not found\n")
endif ()
file(WRITE ${dlldir}/LoadLib.java "class LoadLib
{
public static void main(String []args)
{
if (args.length < 1) {
System.out.println(\"No DLL specified\");
System.exit(1);
}
System.out.println(\"Loading \" + args[0]);
System.loadLibrary(args[0]);
System.out.println(\"Done\");
}
}
"
)
# Help make sure Java finds the dynamically linked libraries in question
if (WIN32)
set(ENV{PATH} "${dlldir};$ENV{PATH}")
else (WIN32)
set(ENV{LD_LIBRARY_PATH} "${dlldir}")
endif (WIN32)
# Compile the file and create the jar archive
execute_process(COMMAND ${JC_EXEC} LoadLib.java
RESULT_VARIABLE LSTATUS OUTPUT_VARIABLE LOUT ERROR_VARIABLE LOUT
WORKING_DIRECTORY ${dlldir}
)
if (LSTATUS)
file(REMOVE ${dlldir}/LoadLib.java)
message(FATAL_ERROR "Failed to compile LoadLib.class: ${LOUT}")
endif (LSTATUS)
execute_process(COMMAND ${JAR_EXEC} -cf LoadLib.jar LoadLib.class
RESULT_VARIABLE LSTATUS OUTPUT_VARIABLE LOUT ERROR_VARIABLE LOUT
WORKING_DIRECTORY ${dlldir}
)
if (LSTATUS)
file(REMOVE ${dlldir}/LoadLib.java)
file(REMOVE ${dlldir}/LoadLib.class)
message(FATAL_ERROR "Failed to create JAR file LoadLib.jar: ${LOUT}")
endif (LSTATUS)
file(GLOB dll_files RELATIVE "${dlldir}" "${dlldir}/*${DLL_SUFFIX}")
set(load_fail 0)
foreach(dlf ${dll_files})
string(REGEX REPLACE "^lib" "" dlf "${dlf}")
string(REGEX REPLACE "${DLL_SUFFIX}$" "" dlf "${dlf}")
message("Dll System.loadLibrary check: ${J_EXEC} -cp LoadLib.jar LoadLib ${dlf}")
execute_process(COMMAND ${J_EXEC} -cp LoadLib.jar LoadLib ${dlf}
RESULT_VARIABLE LSTATUS OUTPUT_VARIABLE LOUT ERROR_VARIABLE LOUT
WORKING_DIRECTORY ${dlldir}
)
if (LSTATUS)
message("System.loadLibrary call with dll file ${dlf} did not succeed: ${LOUT}")
set(load_fail 1)
endif (LSTATUS)
endforeach(dlf ${dll_files})
file(REMOVE ${dlldir}/LoadLib.java)
file(REMOVE ${dlldir}/LoadLib.class)
file(REMOVE ${dlldir}/LoadLib.jar)
if (load_fail)
message(FATAL_ERROR "Dll files present that failed to load with LoadLibrary.")
endif (load_fail)
endfunction(JavaCheck)
if (NOT JCEXEC OR NOT JAREXEC OR NOT JEXEC)
find_package(Java REQUIRED)
set(JEXEC ${Java_JAVA_EXECUTABLE})
set(JCEXEC ${Java_JAVAC_EXECUTABLE})
set(JAREXEC ${Java_JAR_EXECUTABLE})
endif (NOT JCEXEC OR NOT JAREXEC OR NOT JEXEC)
# Populate CMAKE_SHARED_LIBRARY_SUFFIX variable. See:
# https://discourse.cmake.org/t/cmake-shared-library-suffix-in-script-processing-p-mode/11646
if (NOT DLLSUFFIX)
set(CMAKE_PLATFORM_INFO_DIR ${CMAKE_BINARY_DIR}${CMAKE_FILES_DIRECTORY})
include(${CMAKE_ROOT}/Modules/CMakeDetermineSystem.cmake)
include(${CMAKE_ROOT}/Modules/CMakeSystemSpecificInitialize.cmake)
include(${CMAKE_ROOT}/Modules/CMakeSystemSpecificInformation.cmake)
file(REMOVE ${CMAKE_PLATFORM_INFO_DIR})
set(DLLSUFFIX ${CMAKE_SHARED_LIBRARY_SUFFIX})
endif (NOT DLLSUFFIX)
# Report the active parameters
message("Java executable (JEXEC): ${JEXEC}")
message("Java compiler executable (JCEXEC): ${JCEXEC}")
message("Java archiver executable (JAREXEC): ${JAREXEC}")
message("Dll suffix (DLLSUFFIX): ${DLLSUFFIX}")
message("Dll directory (DLL_DIR): ${DLL_DIR}")
if (JCEXEC AND JAREXEC AND JEXEC AND DLLSUFFIX AND DLL_DIR)
JavaCheck(${JCEXEC} ${JAREXEC} ${JEXEC} ${DLLSUFFIX} ${DLL_DIR})
endif ()
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
+75
View File
@@ -0,0 +1,75 @@
# L O A D L I B R A R Y C H E C K . C M A K E
# BRL-CAD
#
# Copyright (c) 2024 United States Government as represented by
# the U.S. Army Research Laboratory.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following
# disclaimer in the documentation and/or other materials provided
# with the distribution.
#
# 3. The name of the author may not be used to endorse or promote
# products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
###
# Utility function to check that a dll can be loaded by the LoadLibrary
# function on Windows.
function(LoadLibraryCheck LLTEST_EXEC dlldir)
if (NOT EXISTS "${dlldir}")
message("Dll directory ${dlldir} not found\n")
return()
endif (NOT EXISTS "${dlldir}")
if (NOT EXISTS "${LLTEST_EXEC}")
message("Test executable ${LLTEST_EXEC} not found\n")
return()
endif (NOT EXISTS "${LLTEST_EXEC}")
file(GLOB dll_files RELATIVE "${dlldir}" "${dlldir}/*.dll")
set(load_fail 0)
foreach(dlf ${dll_files})
message("Dll LoadLibrary check: ${LLTEST_EXEC} ${dlf}")
execute_process(COMMAND ${LLTEST_EXEC} ${dlf}
RESULT_VARIABLE LSTATUS OUTPUT_VARIABLE LOUT ERROR_VARIABLE LOUT
WORKING_DIRECTORY ${dlldir}
)
if (LSTATUS)
message("LoadLibrary call with dll file ${dllfile} did not succeed: ${LOUT}")
set(load_fail 1)
endif (LSTATUS)
endforeach(dlf ${dll_files})
if (load_fail)
message(FATAL_ERROR "Dll files present that failed to load with LoadLibrary.")
endif (load_fail)
endfunction(LoadLibraryCheck)
if (LEXEC AND DLL_DIR)
LoadLibraryCheck(${LEXEC} ${DLL_DIR})
endif (LEXEC AND DLL_DIR)
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
+43
View File
@@ -0,0 +1,43 @@
/* L O A D L I B R A R Y T E S T . C P P
*
* Published in 2024 by the United States Government.
* This work is in the public domain.
*
*/
/** @file LoadLibraryTest.cpp
*
* File to test if a Dll file can be successfully loaded
* by the Windows LoadLibrary call.
*/
#include <windows.h>
#include <stdio.h>
int main(int argc, const char **argv)
{
if (argc < 2) {
printf("lltest <dllfile>\n");
return -1;
}
HINSTANCE linst = LoadLibrary(TEXT(argv[1]));
if (linst == NULL) {
printf("LoadLibrary of %s failed\n", argv[1]);
return 1;
}
BOOL flr = FreeLibrary(linst);
if (!flr) {
printf("FreeLibrary failed for %s\n", argv[1]);
return 1;
}
printf("Success\n");
return 0;
}
// Local Variables:
// tab-width: 8
// mode: C++
// c-basic-offset: 4
// indent-tabs-mode: t
// c-file-style: "stroustrup"
// End:
// ex: shiftwidth=4 tabstop=8
+246
View File
@@ -0,0 +1,246 @@
cmake_minimum_required(VERSION 3.19)
if (NOT DEFINED BEXT_PATCH_NATIVE_EXECUTABLE OR NOT BEXT_PATCH_NATIVE_EXECUTABLE)
message(FATAL_ERROR "BEXT_PATCH_NATIVE_EXECUTABLE is not defined")
endif()
if (NOT DEFINED BEXT_PATCH_CHECK_OPTION OR NOT BEXT_PATCH_CHECK_OPTION)
set(BEXT_PATCH_CHECK_OPTION "--dry-run")
endif()
set(patch_args)
set(seen_separator FALSE)
set(has_forward_flag FALSE)
set(has_reverse_flag FALSE)
set(has_noninteractive_flag FALSE)
set(has_check_flag FALSE)
set(has_input_file FALSE)
set(has_reject_file FALSE)
set(expect_input_file FALSE)
set(expect_reject_file FALSE)
set(input_file "")
math(EXPR last_arg "${CMAKE_ARGC} - 1")
foreach(arg_index RANGE 0 ${last_arg})
set(arg "${CMAKE_ARGV${arg_index}}")
if (seen_separator)
# Some platform patch tools accept -p1 while others require -p 1.
# Normalize the compact form once here for every wrapped invocation.
if (arg MATCHES "^-p([0-9]+)$")
list(APPEND patch_args "-p" "${CMAKE_MATCH_1}")
else()
list(APPEND patch_args "${arg}")
endif()
if (expect_input_file)
set(input_file "${arg}")
set(expect_input_file FALSE)
elseif (expect_reject_file)
set(expect_reject_file FALSE)
elseif (arg STREQUAL "-i" OR arg STREQUAL "--input")
set(has_input_file TRUE)
set(expect_input_file TRUE)
elseif (arg MATCHES "^-i(.+)")
set(has_input_file TRUE)
set(input_file "${CMAKE_MATCH_1}")
elseif (arg MATCHES "^--input=(.+)")
set(has_input_file TRUE)
set(input_file "${CMAKE_MATCH_1}")
endif()
if (arg STREQUAL "-r" OR arg STREQUAL "--reject-file")
set(has_reject_file TRUE)
set(expect_reject_file TRUE)
elseif (arg MATCHES "^-r(.+)")
set(has_reject_file TRUE)
elseif (arg MATCHES "^--reject-file=(.+)")
set(has_reject_file TRUE)
endif()
if (arg STREQUAL "-N" OR arg STREQUAL "--forward")
set(has_forward_flag TRUE)
endif()
if (arg STREQUAL "-R" OR arg STREQUAL "--reverse")
set(has_reverse_flag TRUE)
endif()
if (arg STREQUAL "-f" OR arg STREQUAL "--force" OR
arg STREQUAL "-t" OR arg STREQUAL "--batch")
set(has_noninteractive_flag TRUE)
endif()
if (arg STREQUAL "-C" OR arg STREQUAL "--dry-run")
set(has_check_flag TRUE)
endif()
endif()
if (arg STREQUAL "--")
set(seen_separator TRUE)
endif()
endforeach()
if (NOT seen_separator)
message(FATAL_ERROR "Patch wrapper requires '--' before patch arguments")
endif()
if (NOT patch_args)
message(FATAL_ERROR "Patch wrapper did not receive any patch arguments")
endif()
if (expect_input_file)
message(FATAL_ERROR "Patch input option is missing its file path")
endif()
if (expect_reject_file)
message(FATAL_ERROR "Patch reject option is missing its file path")
endif()
set(reject_path "")
set(reject_log_path "")
if (input_file AND DEFINED BEXT_PATCH_REJECT_DIR AND
BEXT_PATCH_REJECT_DIR)
get_filename_component(patch_name "${input_file}" NAME)
get_filename_component(patch_context "${CMAKE_CURRENT_BINARY_DIR}" NAME)
string(REGEX REPLACE "[^A-Za-z0-9_.-]" "_" patch_context
"${patch_context}")
set(reject_path
"${BEXT_PATCH_REJECT_DIR}/${patch_context}-${patch_name}.rej")
set(reject_log_path "${reject_path}.log")
endif()
function(clear_reject_artifacts)
if (reject_path)
file(REMOVE "${reject_path}" "${reject_log_path}")
endif()
endfunction()
function(preserve_reject_artifacts)
if (NOT reject_path)
return()
endif()
# Keep a native reject file when patch emitted one. Applicability checks do
# not normally emit rejects, so fall back to preserving the full patch.
file(MAKE_DIRECTORY "${BEXT_PATCH_REJECT_DIR}")
if (EXISTS "${reject_path}")
file(SIZE "${reject_path}" reject_size)
else()
set(reject_size 0)
endif()
if (reject_size EQUAL 0)
configure_file("${input_file}" "${reject_path}" COPYONLY)
endif()
file(WRITE "${reject_log_path}"
"Patch file: ${input_file}\n"
"Working directory: ${CMAKE_CURRENT_BINARY_DIR}\n\n"
"${patch_failure_output}")
message(STATUS
"Saved failed patch and diagnostics to ${reject_path} and "
"${reject_log_path}")
endfunction()
clear_reject_artifacts()
if (reject_path AND NOT has_reject_file)
list(APPEND patch_args "-r" "${reject_path}")
endif()
# Patch commands run during configure/build steps cannot consult a user. The
# short -t form is accepted by the bundled and supported Unix patch tools.
# Preserve an explicit --force/-f choice if a caller has made one.
if (NOT has_noninteractive_flag)
list(PREPEND patch_args "-t")
endif()
# Preflight file-based patches so a bad patch cannot leave a source tree half
# modified. Stdin cannot be preflighted because it cannot be replayed for the
# real invocation.
if (has_input_file AND NOT has_check_flag)
set(forward_check_args ${patch_args})
list(PREPEND forward_check_args "${BEXT_PATCH_CHECK_OPTION}")
execute_process(
COMMAND "${BEXT_PATCH_NATIVE_EXECUTABLE}" ${forward_check_args}
RESULT_VARIABLE forward_check_result
OUTPUT_VARIABLE forward_check_stdout
ERROR_VARIABLE forward_check_stderr
)
if (NOT forward_check_result EQUAL 0)
if (forward_check_result EQUAL 1 AND has_forward_flag AND
NOT has_reverse_flag)
set(reverse_check_args)
foreach(arg IN LISTS patch_args)
if (arg STREQUAL "-N" OR arg STREQUAL "--forward")
continue()
endif()
list(APPEND reverse_check_args "${arg}")
endforeach()
list(PREPEND reverse_check_args "${BEXT_PATCH_CHECK_OPTION}" "-R")
execute_process(
COMMAND "${BEXT_PATCH_NATIVE_EXECUTABLE}" ${reverse_check_args}
RESULT_VARIABLE reverse_result
OUTPUT_QUIET
ERROR_QUIET
)
if (reverse_result EQUAL 0)
clear_reject_artifacts()
message(STATUS
"Patch already applied or reversed; continuing because -N/--forward was requested."
)
return()
endif()
endif()
set(patch_failure_output
"${forward_check_stdout}${forward_check_stderr}")
preserve_reject_artifacts()
if (forward_check_stdout)
message("${forward_check_stdout}")
endif()
if (forward_check_stderr)
message("${forward_check_stderr}")
endif()
message(FATAL_ERROR
"Patch preflight failed with exit code ${forward_check_result}"
)
endif()
endif()
execute_process(
COMMAND "${BEXT_PATCH_NATIVE_EXECUTABLE}" ${patch_args}
RESULT_VARIABLE patch_result
OUTPUT_VARIABLE patch_stdout
ERROR_VARIABLE patch_stderr
ECHO_OUTPUT_VARIABLE
ECHO_ERROR_VARIABLE
)
if (patch_result EQUAL 0)
clear_reject_artifacts()
return()
endif()
if (patch_result EQUAL 1 AND has_forward_flag AND NOT has_reverse_flag)
set(reverse_check_args)
foreach(arg IN LISTS patch_args)
if (arg STREQUAL "-N" OR arg STREQUAL "--forward")
continue()
endif()
list(APPEND reverse_check_args "${arg}")
endforeach()
list(PREPEND reverse_check_args "${BEXT_PATCH_CHECK_OPTION}" "-R")
execute_process(
COMMAND "${BEXT_PATCH_NATIVE_EXECUTABLE}" ${reverse_check_args}
RESULT_VARIABLE reverse_result
OUTPUT_QUIET
ERROR_QUIET
)
if (reverse_result EQUAL 0)
clear_reject_artifacts()
execute_process(
COMMAND ${CMAKE_COMMAND} -E echo
"Patch already applied or reversed; continuing because -N/--forward was requested."
)
return()
endif()
endif()
set(patch_failure_output "${patch_stdout}${patch_stderr}")
preserve_reject_artifacts()
message(FATAL_ERROR "Patch command failed with exit code ${patch_result}")
+464
View File
@@ -0,0 +1,464 @@
# U T I L S . C M A K E
# BRL-CAD
#
# Copyright (c) 2025 United States Government as represented by
# the U.S. Army Research Laboratory.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions
# are met:
#
# 1. Redistributions of source code must retain the above copyright
# notice, this list of conditions and the following disclaimer.
#
# 2. Redistributions in binary form must reproduce the above
# copyright notice, this list of conditions and the following
# disclaimer in the documentation and/or other materials provided
# with the distribution.
#
# 3. The name of the author may not be used to endorse or promote
# products derived from this software without specific prior written
# permission.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS
# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
# NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
# SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
#
###
include("${CMAKE_CURRENT_LIST_DIR}/BextGit.cmake")
###############################################################################
# It is common for more complex targets to need to key build settings off of
# whether or not their dependencies are being built locally. These macros are
# used to cut down on boilerplate code
###############################################################################
macro(TargetVars roots)
foreach(root ${${roots}})
if (NOT ${root}_ADDED)
message(FATAL_ERROR "${root} is listed as a dependency but is not yet added - fix project ordering in top level CMakeLists.txt file")
endif (NOT ${root}_ADDED)
if (TARGET ${root}_BLD)
set(${root}_TARGET 1)
# Also set the TARGET var in the parent scope - may need it in other
# build logic besides the current directory.
set(${root}_TARGET 1 PARENT_SCOPE)
endif (TARGET ${root}_BLD)
endforeach(root ${${roots}})
endmacro(TargetVars root)
###
# Loads dependencies from an in-src file named same as containing
# directory with .deps suffix. Dependencies are added to the
# corresponding ${proot}_DEPENDS variable.
###
macro(RegisterDeps proot)
get_filename_component(dirname ${CMAKE_CURRENT_SOURCE_DIR} NAME)
if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${dirname}.deps")
message(FATAL_ERROR "No ${dirname}.deps file found in ${CMAKE_CURRENT_SOURCE_DIR}/")
endif (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${dirname}.deps")
file(STRINGS "${CMAKE_CURRENT_SOURCE_DIR}/${dirname}.deps" DEP_LINES)
string(TOLOWER "${proot}" lr)
# Add each dependency to this directory's _DEPENDS list
foreach(dl ${DEP_LINES})
set(${proot}_DEPENDS ${${proot}_DEPENDS} ${dl})
endforeach(dl ${DEP_LINES})
# Add all dependencies to the global ALL_DEPENDENCIES list
get_property(ALL_DEPS GLOBAL PROPERTY ALL_DEPENDENCIES)
set(ALL_DEPS ${ALL_DEPS} ${${proot}_DEPENDS})
list(SORT ALL_DEPS)
list(REMOVE_DUPLICATES ALL_DEPS)
set_property(GLOBAL PROPERTY ALL_DEPENDENCIES ${ALL_DEPS})
# Set the TARGET variables for CMake generator expression "if" tests
TargetVars(${proot}_DEPENDS)
endmacro(RegisterDeps)
macro(TargetInstallDeps croot roots)
foreach(root ${${roots}})
if (TARGET ${root}_BLD)
ExternalProject_Add_stepdependencies(${croot}_BLD configure ${root}_BLD-install)
endif (TARGET ${root}_BLD)
endforeach(root ${${root}})
endmacro(TargetInstallDeps root)
###############################################################################
# We're using submodules to avoid automatically having to download a huge
# amount of source code if it isn't needed. Define a convenience function
# to use in the project to populate the submodule checkouts if needed.
###############################################################################
function(git_submodule_init path checkfile)
string(REGEX REPLACE "[^A-Za-z0-9_+.-]" "_" stamp_name "${path}")
set(sha1_stamp "${CMAKE_CURRENT_BINARY_DIR}/build_sha1_${stamp_name}.txt")
if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${path}/${checkfile}")
bext_git_submodule_update("${CMAKE_CURRENT_SOURCE_DIR}" -- "${path}")
if (NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/${path}/${checkfile}")
message(FATAL_ERROR "Git submodule ${path} is missing ${checkfile} after checkout")
endif ()
execute_process(
COMMAND git log -1 --format=%H
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${path}
OUTPUT_VARIABLE GIT_SHA1
OUTPUT_STRIP_TRAILING_WHITESPACE
)
file(WRITE "${sha1_stamp}" ${GIT_SHA1})
else ()
execute_process(
COMMAND git log -1 --format=%H
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/${path}
OUTPUT_VARIABLE GIT_SHA1
OUTPUT_STRIP_TRAILING_WHITESPACE
)
if (EXISTS "${sha1_stamp}" )
file(READ "${sha1_stamp}" BUILD_SHA1)
if (NOT "${BUILD_SHA1}" MATCHES "${GIT_SHA1}")
message("Outdated sha1 stamp found for ${path}: resetting build directory ${CMAKE_CURRENT_BINARY_DIR}")
execute_process(
COMMAND ${CMAKE_COMMAND} -E rm -rf ${CMAKE_CURRENT_BINARY_DIR}
WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/..
)
file(MAKE_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}")
endif (NOT "${BUILD_SHA1}" MATCHES "${GIT_SHA1}")
endif()
file(WRITE "${sha1_stamp}" ${GIT_SHA1})
endif ()
endfunction(git_submodule_init path)
###############################################################################
# If we're using BRLCAD_COMPONENTS, the check of enabled/disabled is more
# nuanced. For bext, the BRLCAD_COMPONENTS list should be the expanded list
# from BRL-CAD's parent logic that fully populates the dependencies, not just
# the components directly specified by the user to BRL-CAD's configure.
###############################################################################
function(cad_enable pname components)
if (DEFINED BRLCAD_COMPONENTS)
# To avoid problems passing multiple components in, we support using ':' as
# a delimiter in addition to the standard CMake list entry delimiter ';'.
# TODO: If this doesn't cut it we'll probably have to pass in a file
# containing a list and read that.
string(REPLACE ":" ";" BRLCAD_COMPONENTS "${BRLCAD_COMPONENTS}")
# In case the component list changed, make sure we're
# not using a cached result.
unset(ENABLE_${pname} CACHE)
unset(DISABLE_${pname} CACHE)
set(acomponents ${components})
# Look for a component in the list
foreach(c ${BRLCAD_COMPONENTS})
list(FIND acomponents ${c} LFIND)
if (NOT LFIND EQUAL -1)
bext_enable_all_default(${pname} ${pname})
set(ENABLE_${pname} ${ENABLE_${pname}} PARENT_SCOPE)
set(DISABLE_${pname} OFF PARENT_SCOPE)
return()
endif (NOT LFIND EQUAL -1)
endforeach(c ${components})
# If we're a component build and this component
# isn't enabled, it's a definite off
set(ENABLE_${pname} OFF)
set(DISABLE_${pname} ON)
endif (DEFINED BRLCAD_COMPONENTS)
# Check for ENABLE_ALL
bext_enable_all_default(${pname} ${pname})
# Final decision
set(ENABLE_${pname} ${ENABLE_${pname}} PARENT_SCOPE)
set(DISABLE_${pname} ${DISABLE_${pname}} PARENT_SCOPE)
endfunction(cad_enable pname components)
###############################################################################
# The enable-disable-find logic for many dependencies follows a pattern. Try
# to wrap that pattern up so we can more easily adjust it for multiple projects
# simultaneously.
###############################################################################
macro(bext_enable pname)
string(TOUPPER "${pname}" upname)
#string(TOLOWER "${pname}" lpname)
bext_enable_all_default(${upname} ${pname})
if (NOT ENABLE_${upname} AND NOT DISABLE_${upname})
# This is an optional probe: a "not found" result is the normal, expected
# path that simply turns on the local build below, and the configure
# summary already reports which packages are built locally vs. found on the
# system. Pass QUIET so a missing package does not emit CMake's verbose
# "could not find a package configuration file" warning, which is noise
# here rather than something the developer needs to act on.
find_package(${pname} QUIET)
if (NOT ${pname}_FOUND AND NOT DEFINED ENABLE_${upname})
set(ENABLE_${upname} "ON" CACHE BOOL "Enable ${pname} build")
endif (NOT ${pname}_FOUND AND NOT DEFINED ENABLE_${upname})
endif (NOT ENABLE_${upname} AND NOT DISABLE_${upname})
set(ENABLE_${upname} "${ENABLE_${upname}}" CACHE BOOL "Enable ${pname} build")
endmacro(bext_enable pname)
###############################################################################
# Configure summary helpers
###############################################################################
macro(bext_enable_all_default enable_name summary_name)
if (ENABLE_ALL AND NOT DEFINED ENABLE_${enable_name})
set(ENABLE_${enable_name} ON)
endif (ENABLE_ALL AND NOT DEFINED ENABLE_${enable_name})
if (ENABLE_ALL AND ENABLE_${enable_name})
string(TOUPPER "${summary_name}" bext_enable_all_tracking_name)
string(REPLACE "-" "_" bext_enable_all_tracking_name "${bext_enable_all_tracking_name}")
set(BEXT_ENABLE_ALL_FORCED_${bext_enable_all_tracking_name} ON CACHE INTERNAL "Project selected for local build while ENABLE_ALL is active")
endif (ENABLE_ALL AND ENABLE_${enable_name})
endmacro(bext_enable_all_default enable_name summary_name)
function(_bext_summary_append property_name value)
get_property(values GLOBAL PROPERTY ${property_name})
list(APPEND values "${value}")
list(REMOVE_DUPLICATES values)
set_property(GLOBAL PROPERTY ${property_name} "${values}")
endfunction(_bext_summary_append property_name value)
function(_bext_summary_project_uses_local_build out pname upname)
set(local_build FALSE)
if (TARGET ${upname}_BLD)
set(local_build TRUE)
endif (TARGET ${upname}_BLD)
if (DEFINED ENABLE_${upname} AND ENABLE_${upname})
set(local_build TRUE)
endif (DEFINED ENABLE_${upname} AND ENABLE_${upname})
if ("${pname}" STREQUAL "flexbison")
if (TARGET FLEX_BLD OR TARGET BISON_BLD)
set(local_build TRUE)
endif (TARGET FLEX_BLD OR TARGET BISON_BLD)
endif ("${pname}" STREQUAL "flexbison")
if ("${pname}" STREQUAL "qt")
if (TARGET Qt6_BLD OR TARGET Qt6Svg_BLD)
set(local_build TRUE)
endif (TARGET Qt6_BLD OR TARGET Qt6Svg_BLD)
endif ("${pname}" STREQUAL "qt")
if ("${pname}" STREQUAL "tk")
if (TARGET TK_BLD)
set(local_build TRUE)
endif (TARGET TK_BLD)
endif ("${pname}" STREQUAL "tk")
set(${out} ${local_build} PARENT_SCOPE)
endfunction(_bext_summary_project_uses_local_build out pname upname)
function(_bext_summary_list_to_string out values)
set(list_values ${values})
if (list_values)
list(SORT list_values)
string(REPLACE ";" ", " rendered "${list_values}")
else (list_values)
set(rendered "none")
endif (list_values)
set(${out} "${rendered}" PARENT_SCOPE)
endfunction(_bext_summary_list_to_string out values)
function(bext_print_configure_summary)
set(active_groups)
foreach(grp APPLESEED BRLCAD BRLCAD_EXTRA GDAL OSPRAY QT TCL)
if (USE_${grp})
list(APPEND active_groups ${grp})
endif (USE_${grp})
endforeach(grp APPLESEED BRLCAD BRLCAD_EXTRA GDAL OSPRAY QT TCL)
get_property(local_projects GLOBAL PROPERTY BEXT_SUMMARY_LOCAL_PROJECTS)
get_property(system_projects GLOBAL PROPERTY BEXT_SUMMARY_SYSTEM_PROJECTS)
get_property(skipped_projects GLOBAL PROPERTY BEXT_SUMMARY_SKIPPED_PROJECTS)
get_property(forced_projects GLOBAL PROPERTY BEXT_SUMMARY_ENABLE_ALL_PROJECTS)
_bext_summary_list_to_string(active_groups_str "${active_groups}")
_bext_summary_list_to_string(local_projects_str "${local_projects}")
_bext_summary_list_to_string(system_projects_str "${system_projects}")
_bext_summary_list_to_string(skipped_projects_str "${skipped_projects}")
_bext_summary_list_to_string(forced_projects_str "${forced_projects}")
message(STATUS "")
message(STATUS "bext configure summary")
message(STATUS " active USE_* groups: ${active_groups_str}")
message(STATUS " local builds: ${local_projects_str}")
message(STATUS " not built locally: ${system_projects_str}")
if (ENABLE_ALL)
message(STATUS " ENABLE_ALL local-build set: ${forced_projects_str}")
endif (ENABLE_ALL)
message(STATUS " skipped because group inactive: ${skipped_projects_str}")
message(STATUS " bundled output root: ${CMAKE_BUNDLE_INSTALL_PREFIX}")
message(STATUS " noinstall output root: ${CMAKE_NOBUNDLE_INSTALL_PREFIX}")
message(STATUS "")
endfunction(bext_print_configure_summary)
###############################################################################
# The primary add_project function used to add individual dependency
# directories.
###############################################################################
function(add_project pname)
cmake_parse_arguments(A "" "" "GROUPS" ${ARGN})
string(TOUPPER "${pname}" UPNAME)
string(REPLACE "-" "_" UPNAME "${UPNAME}")
if (NOT A_GROUPS)
add_subdirectory(${pname})
_bext_summary_project_uses_local_build(local_build ${pname} ${UPNAME})
if (local_build)
_bext_summary_append(BEXT_SUMMARY_LOCAL_PROJECTS ${pname})
if (ENABLE_ALL AND BEXT_ENABLE_ALL_FORCED_${UPNAME})
_bext_summary_append(BEXT_SUMMARY_ENABLE_ALL_PROJECTS ${pname})
endif (ENABLE_ALL AND BEXT_ENABLE_ALL_FORCED_${UPNAME})
else (local_build)
_bext_summary_append(BEXT_SUMMARY_SYSTEM_PROJECTS ${pname})
endif (local_build)
set(${UPNAME}_ADDED 1 PARENT_SCOPE)
return()
endif (NOT A_GROUPS)
set(is_added FALSE)
foreach(grp ${A_GROUPS})
if (USE_${grp})
add_subdirectory(${pname})
set(is_added TRUE)
set(${UPNAME}_ADDED 1 PARENT_SCOPE)
break()
endif (USE_${grp})
endforeach(grp ${A_GROUPS})
if (is_added)
_bext_summary_project_uses_local_build(local_build ${pname} ${UPNAME})
if (local_build)
_bext_summary_append(BEXT_SUMMARY_LOCAL_PROJECTS ${pname})
if (ENABLE_ALL AND BEXT_ENABLE_ALL_FORCED_${UPNAME})
_bext_summary_append(BEXT_SUMMARY_ENABLE_ALL_PROJECTS ${pname})
endif (ENABLE_ALL AND BEXT_ENABLE_ALL_FORCED_${UPNAME})
else (local_build)
_bext_summary_append(BEXT_SUMMARY_SYSTEM_PROJECTS ${pname})
endif (local_build)
endif (is_added)
if (NOT is_added)
_bext_summary_append(BEXT_SUMMARY_SKIPPED_PROJECTS ${pname})
if (ENABLE_${UPNAME})
message("Disabling ${pname}")
set(STALE_INSTALL_WARN TRUE PARENT_SCOPE)
endif (ENABLE_${UPNAME})
execute_process(COMMAND ${CMAKE_COMMAND} -E rm -rf ${CMAKE_BINARY_DIR}/${pname})
unset(ENABLE_${UPNAME} CACHE)
endif (NOT is_added)
endfunction(add_project pname)
###############################################################################
# Make the built-in clean target reset ExternalProject working state without
# requiring a top-level CMake reconfigure. We preserve the generated control
# files in STAMP_DIR and TMP_DIR, but remove the step marker files and any
# generated source/build directories that can be safely recreated by the next
# build.
###############################################################################
function(_bext_collect_subdirs out dir)
set(dirs "${dir}")
get_property(subdirs DIRECTORY "${dir}" PROPERTY SUBDIRECTORIES)
foreach(subdir ${subdirs})
_bext_collect_subdirs(child_dirs "${subdir}")
list(APPEND dirs ${child_dirs})
endforeach()
set(${out} "${dirs}" PARENT_SCOPE)
endfunction(_bext_collect_subdirs out dir)
function(_bext_path_is_in_build_tree out path)
if (NOT path)
set(${out} FALSE PARENT_SCOPE)
return()
endif()
file(RELATIVE_PATH rel "${CMAKE_BINARY_DIR}" "${path}")
if (IS_ABSOLUTE "${rel}" OR "${rel}" MATCHES "^\\.\\.")
set(${out} FALSE PARENT_SCOPE)
else()
set(${out} TRUE PARENT_SCOPE)
endif()
endfunction(_bext_path_is_in_build_tree out path)
function(_bext_register_extproject_clean ep_target)
if (NOT TARGET ${ep_target})
return()
endif()
ExternalProject_Get_Property(${ep_target} SOURCE_DIR)
set(ep_source_dir "${SOURCE_DIR}")
ExternalProject_Get_Property(${ep_target} BINARY_DIR)
set(ep_build_dir "${BINARY_DIR}")
ExternalProject_Get_Property(${ep_target} STAMP_DIR)
set(ep_stamp_dir "${STAMP_DIR}")
_bext_path_is_in_build_tree(ep_source_is_generated "${ep_source_dir}")
_bext_path_is_in_build_tree(ep_build_is_generated "${ep_build_dir}")
set(clean_files
"${ep_stamp_dir}/${ep_target}-mkdir"
"${ep_stamp_dir}/${ep_target}-configure"
"${ep_stamp_dir}/${ep_target}-build"
"${ep_stamp_dir}/${ep_target}-install"
"${ep_stamp_dir}/${ep_target}-done"
)
# If the source tree is a generated copy in the build directory, remove it
# and force the full download/update/patch pipeline to rerun on next build.
if (ep_source_is_generated)
list(APPEND clean_files
"${ep_stamp_dir}/${ep_target}-download"
"${ep_stamp_dir}/${ep_target}-update"
"${ep_stamp_dir}/${ep_target}-patch"
"${ep_source_dir}"
)
endif()
# Some wrappers use a separate generated binary directory outside the default
# *_BLD-prefix/src tree (Qt is the main case.) If it lives in the build tree
# and isn't the same path as SOURCE_DIR, it is safe to remove here.
if (ep_build_is_generated AND NOT "${ep_build_dir}" STREQUAL "${ep_source_dir}")
list(APPEND clean_files "${ep_build_dir}")
endif()
list(REMOVE_DUPLICATES clean_files)
set_property(TARGET ${ep_target} APPEND PROPERTY ADDITIONAL_CLEAN_FILES "${clean_files}")
if (TARGET ${ep_target}-install)
set_property(TARGET ${ep_target}-install APPEND PROPERTY ADDITIONAL_CLEAN_FILES "${clean_files}")
endif()
endfunction(_bext_register_extproject_clean ep_target)
function(register_external_project_clean_targets)
_bext_collect_subdirs(all_dirs "${CMAKE_SOURCE_DIR}")
list(REMOVE_DUPLICATES all_dirs)
foreach(dir ${all_dirs})
get_property(dir_targets DIRECTORY "${dir}" PROPERTY BUILDSYSTEM_TARGETS)
foreach(dir_target ${dir_targets})
if ("${dir_target}" MATCHES "_BLD$")
_bext_register_extproject_clean("${dir_target}")
endif()
endforeach()
endforeach()
endfunction(register_external_project_clean_targets)
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
+846 -340
View File
File diff suppressed because it is too large Load Diff
+165
View File
@@ -0,0 +1,165 @@
{
"version": 3,
"cmakeMinimumRequired": {
"major": 3,
"minor": 21,
"patch": 0
},
"configurePresets": [
{
"name": "layout",
"hidden": true,
"description": "Output layout for presets whose name already carries the config (e.g. auto/Release, auto/Debug): build/<profile>/<Config>. Release and Debug trees sit side by side so both configs can be kept and consumed at once.",
"binaryDir": "${sourceDir}/build/${presetName}"
},
{
"name": "layout-implicit-release",
"hidden": true,
"description": "Output layout for the unqualified convenience aliases (e.g. --preset=auto): build/<profile>/Release. Resolves to the same tree as <profile>/Release.",
"binaryDir": "${sourceDir}/build/${presetName}/Release"
},
{
"name": "type-release",
"hidden": true,
"description": "Single-config Release build type (matches a BRL-CAD Release build).",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Release"
}
},
{
"name": "type-debug",
"hidden": true,
"description": "Single-config Debug build type (matches a BRL-CAD Debug build).",
"cacheVariables": {
"CMAKE_BUILD_TYPE": "Debug"
}
},
{
"name": "profile-auto",
"hidden": true,
"description": "Standard BRL-CAD-oriented profile. Use suitable system packages when found and build local copies only when needed.",
"cacheVariables": {
"USE_APPLESEED": "OFF",
"USE_BRLCAD": "ON",
"USE_BRLCAD_EXTRA": "ON",
"USE_GDAL": "ON",
"USE_OSPRAY": "OFF",
"USE_QT": "ON",
"USE_TCL": "ON"
}
},
{
"name": "profile-bundled",
"hidden": true,
"description": "Standard BRL-CAD-oriented profile with bundled/local builds preferred for all active dependency groups.",
"cacheVariables": {
"ENABLE_ALL": "ON",
"USE_APPLESEED": "OFF",
"USE_BRLCAD": "ON",
"USE_BRLCAD_EXTRA": "ON",
"USE_GDAL": "ON",
"USE_OSPRAY": "OFF",
"USE_QT": "ON",
"USE_TCL": "ON"
}
},
{
"name": "profile-minimal",
"hidden": true,
"description": "Core BRL-CAD profile without extras, GDAL, Qt, Tcl/Tk, Appleseed, or OSPRay.",
"cacheVariables": {
"USE_APPLESEED": "OFF",
"USE_BRLCAD": "ON",
"USE_BRLCAD_EXTRA": "OFF",
"USE_GDAL": "OFF",
"USE_OSPRAY": "OFF",
"USE_QT": "OFF",
"USE_TCL": "OFF"
}
},
{
"name": "profile-everything",
"hidden": true,
"description": "Enable all current dependency groups and prefer bundled/local builds for all of them.",
"cacheVariables": {
"ENABLE_ALL": "ON",
"USE_APPLESEED": "ON",
"USE_BRLCAD": "ON",
"USE_BRLCAD_EXTRA": "ON",
"USE_GDAL": "ON",
"USE_OSPRAY": "ON",
"USE_QT": "ON",
"USE_TCL": "ON",
"CMAKE_POLICY_VERSION_MINIMUM": "3.5"
}
},
{
"name": "auto",
"displayName": "Auto (Release)",
"description": "Convenience alias for auto/Release.",
"inherits": ["layout-implicit-release", "profile-auto", "type-release"]
},
{
"name": "auto/Release",
"displayName": "Auto (Release)",
"inherits": ["layout", "profile-auto", "type-release"]
},
{
"name": "auto/Debug",
"displayName": "Auto (Debug)",
"inherits": ["layout", "profile-auto", "type-debug"]
},
{
"name": "bundled",
"displayName": "Bundled (Release)",
"description": "Convenience alias for bundled/Release.",
"inherits": ["layout-implicit-release", "profile-bundled", "type-release"]
},
{
"name": "bundled/Release",
"displayName": "Bundled (Release)",
"inherits": ["layout", "profile-bundled", "type-release"]
},
{
"name": "bundled/Debug",
"displayName": "Bundled (Debug)",
"inherits": ["layout", "profile-bundled", "type-debug"]
},
{
"name": "minimal",
"displayName": "Minimal (Release)",
"description": "Convenience alias for minimal/Release.",
"inherits": ["layout-implicit-release", "profile-minimal", "type-release"]
},
{
"name": "minimal/Release",
"displayName": "Minimal (Release)",
"inherits": ["layout", "profile-minimal", "type-release"]
},
{
"name": "minimal/Debug",
"displayName": "Minimal (Debug)",
"inherits": ["layout", "profile-minimal", "type-debug"]
},
{
"name": "everything",
"displayName": "Everything (Release)",
"description": "Convenience alias for everything/Release.",
"inherits": ["layout-implicit-release", "profile-everything", "type-release"]
},
{
"name": "everything/Release",
"displayName": "Everything (Release)",
"inherits": ["layout", "profile-everything", "type-release"]
},
{
"name": "everything/Debug",
"displayName": "Everything (Debug)",
"inherits": ["layout", "profile-everything", "type-debug"]
}
]
}
+171
View File
@@ -0,0 +1,171 @@
# bext - Dependency Reference
This file is a package map for `bext`. It shows which `USE_*` groups can bring
each project into scope and whether its outputs land in `install/` or
`noinstall/`.
A package listed here may still use a system installation instead of building a
local copy unless `ENABLE_ALL=ON` or `ENABLE_<pkg>=ON` is used.
For some BRL-CAD-related packages, `BRLCAD_COMPONENTS` can narrow the final
selection further.
# Output types
* `install` - bundled output intended for downstream use
* `noinstall` - build-only tool or compile-time-only asset
# Projects
<!-- BEGIN GENERATED PROJECT TABLE -->
<!-- Generated by CMake/GenerateDependencyDocs.cmake; do not edit this block. -->
| Project | `USE_*` group(s) | Output | Dependencies | Source |
| --- | --- | --- | --- | --- |
| `appleseed` | `USE_APPLESEED` | `install` | `boost`, `eigen`, `embree`, `jpeg`, `llvm`, `lz4`, `onetbb`, `opencolorio`, `openexr`, `openimageio`, `osl`, `patch`, `png`, `tiff`, `xerces-c`, `zlib` | [repository](https://github.com/BRL-CAD/appleseed) |
| `assetimport` | `USE_BRLCAD` | `install` | `patch`, `pugixml`, `zlib` | [repository](https://github.com/BRL-CAD/assimp) |
| `astyle` | `USE_BRLCAD` | `noinstall` | `patch` | [repository](https://github.com/BRL-CAD/astyle) |
| `boost` | `USE_APPLESEED` | `install` | `icu`, `patch`, `zlib`, `zstd` | [repository](https://github.com/BRL-CAD/boost) |
| `bullet` | `USE_BRLCAD_EXTRA` | `install` | `patch` | [repository](https://github.com/BRL-CAD/bullet3.git) |
| `clipper2` | `USE_BRLCAD` | `install` | `patch` | [repository](https://github.com/BRL-CAD/Clipper2.git) |
| `deflate` | `USE_APPLESEED` | `install` | `patch` | [repository](https://github.com/BRL-CAD/libdeflate) |
| `eigen` | `USE_BRLCAD`, `USE_APPLESEED` | `noinstall` | `patch` | [repository](https://github.com/BRL-CAD/eigen) |
| `embree` | `USE_APPLESEED`, `USE_OSPRAY` | `install` | `boost`, `onetbb`, `patch`, `zlib` | [repository](https://github.com/BRL-CAD/embree) |
| `expat` | `USE_APPLESEED` | `install` | `patch` | [repository](https://github.com/BRL-CAD/libexpat) |
| `flexbison` | `USE_APPLESEED`, `USE_OSPRAY` | `noinstall` | — | [repository](https://github.com/BRL-CAD/winflexbison) |
| `fmt` | `USE_APPLESEED` | `install` | `patch` | [repository](https://github.com/BRL-CAD/fmt) |
| `gdal` | `USE_GDAL` | `install` | `patch`, `png`, `proj`, `sqlite3`, `tiff`, `zlib` | [repository](https://github.com/BRL-CAD/gdal) |
| `gte` | `USE_BRLCAD` | `noinstall` | `patch` | [repository](https://github.com/BRL-CAD/GeometricTools) |
| `icu` | `USE_APPLESEED` | `install` | `patch` | [repository](https://github.com/BRL-CAD/icu) |
| `ispc` | `USE_OSPRAY` | `install` | `bison`, `flex`, `patch`, `llvm`, `ncurses`, `zlib` | [repository](https://github.com/BRL-CAD/ispc) |
| `itk` | `USE_TCL` | `install` | `patch`, `tcl`, `tk` | [repository](https://github.com/BRL-CAD/itk) |
| `iwidgets` | `USE_TCL` | `install` | `patch`, `itk` | [repository](https://github.com/BRL-CAD/iwidgets) |
| `jpeg` | `USE_APPLESEED`, `USE_BRLCAD`, `USE_GDAL` | `install` | `patch` | [repository](https://github.com/BRL-CAD/libjpeg-turbo) |
| `lemon` | `USE_BRLCAD` | `noinstall` | `patch` | [repository](https://github.com/BRL-CAD/lemon) |
| `lief` | `USE_BRLCAD` | `noinstall` | `patch` | [repository](https://github.com/BRL-CAD/LIEF) |
| `llvm` | `USE_APPLESEED`, `USE_OSPRAY` | `install` | `patch`, `zlib` | [repository](https://github.com/BRL-CAD/llvm-project) |
| `lmdb` | `USE_BRLCAD` | `install` | `patch` | [repository](https://github.com/BRL-CAD/lmdb) |
| `lz4` | `USE_APPLESEED` | `install` | `patch` | [repository](https://github.com/BRL-CAD/lz4) |
| `manifold` | `USE_BRLCAD` | `install` | `patch`, `clipper2` | [repository](https://github.com/BRL-CAD/manifold.git) |
| `minizip-ng` | `USE_APPLESEED` | `install` | `patch`, `zlib`, `zstd` | [repository](https://github.com/BRL-CAD/minizip-ng) |
| `mmesh` | `USE_BRLCAD` | `install` | `patch` | [repository](https://github.com/BRL-CAD/mmesh.git) |
| `ncurses` | `USE_OSPRAY` | `install` | `patch` | [repository](https://github.com/BRL-CAD/ncurses) |
| `netpbm` | `USE_BRLCAD` | `install` | `patch` | [repository](https://github.com/BRL-CAD/netpbm) |
| `oidn` | `USE_OSPRAY` | `install` | `ispc`, `onetbb` | [repository](https://github.com/BRL-CAD/oidn) |
| `onetbb` | `USE_APPLESEED`, `USE_OSPRAY`, `USE_BRLCAD` | `install` | `patch` | [repository](https://github.com/BRL-CAD/oneTBB) |
| `opencolorio` | `USE_APPLESEED` | `install` | `expat`, `minizip-ng`, `openexr`, `patch`, `pystring`, `yaml-cpp`, `zlib`, `zstd` | [repository](https://github.com/BRL-CAD/OpenColorIO) |
| `opencv` | `USE_BRLCAD_EXTRA` | `install` | `patch`, `png`, `zlib` | [repository](https://github.com/BRL-CAD/opencv) |
| `openexr` | `USE_APPLESEED` | `install` | `deflate`, `patch` | [repository](https://github.com/BRL-CAD/openexr) |
| `openimageio` | `USE_APPLESEED` | `install` | `boost`, `fmt`, `jpeg`, `opencolorio`, `openexr`, `patch`, `png`, `tiff`, `zlib` | [repository](https://github.com/BRL-CAD/oiio) |
| `opennurbs` | `USE_BRLCAD` | `install` | `patch`, `zlib` | [repository](https://github.com/BRL-CAD/opennurbs) |
| `openvdb` | `USE_BRLCAD_EXTRA` | `install` | `onetbb`, `patch`, `zlib` | [repository](https://github.com/BRL-CAD/openvdb) |
| `osl` | `USE_APPLESEED` | `install` | `bison`, `boost`, `flex`, `llvm`, `openexr`, `openimageio`, `patch`, `pugixml`, `zlib` | [repository](https://github.com/BRL-CAD/OpenShadingLanguage) |
| `osmesa` | `USE_BRLCAD` | `install` | `patch` | [repository](https://github.com/BRL-CAD/osmesa) |
| `ospray` | `USE_OSPRAY` | `install` | `embree`, `ispc`, `oidn`, `onetbb`, `patch`, `rkcommon` | [repository](https://github.com/BRL-CAD/ospray) |
| `patch` | always considered | `noinstall` | — | [repository](https://github.com/BRL-CAD/patch) |
| `perplex` | `USE_BRLCAD` | `noinstall` | `patch`, `lemon`, `re2c` | [repository](https://github.com/BRL-CAD/perplex) |
| `plief` | `USE_BRLCAD` | `noinstall` | `lief`, `patch` | [repository](https://github.com/BRL-CAD/plief) |
| `png` | `USE_APPLESEED`, `USE_BRLCAD`, `USE_TCL` | `install` | `patch`, `zlib` | [repository](https://github.com/BRL-CAD/libpng) |
| `poissonrecon` | `USE_BRLCAD` | `noinstall` | `patch` | [repository](https://github.com/BRL-CAD/PoissonRecon) |
| `proj` | `USE_GDAL` | `install` | `patch`, `sqlite3` | [repository](https://github.com/BRL-CAD/PROJ) |
| `pugixml` | `USE_BRLCAD`, `USE_APPLESEED` | `install` | `patch` | [repository](https://github.com/BRL-CAD/pugixml) |
| `pystring` | `USE_APPLESEED` | `install` | `patch` | [repository](https://github.com/BRL-CAD/pystring) |
| `qt` | `USE_QT` | `install` | `patch`, `zlib` | [repository](https://github.com/BRL-CAD/qt) |
| `re2c` | `USE_BRLCAD` | `noinstall` | `patch` | [repository](https://github.com/BRL-CAD/re2c) |
| `regex` | `USE_BRLCAD` | `install` | `patch` | [repository](https://github.com/BRL-CAD/regex) |
| `rkcommon` | `USE_OSPRAY` | `install` | `onetbb`, `patch` | [repository](https://github.com/BRL-CAD/rkcommon) |
| `sqlite3` | `USE_GDAL` | `install` | `patch` | [repository](https://github.com/BRL-CAD/sqlite3.git) |
| `stepcode` | `USE_BRLCAD_EXTRA` | `install` | `lemon`, `patch`, `perplex`, `re2c` | [repository](https://github.com/BRL-CAD/stepcode) |
| `strclear` | `USE_BRLCAD` | `noinstall` | `patch` | [repository](https://github.com/BRL-CAD/strclear) |
| `tcl` | `USE_TCL` | `install` | `patch`, `zlib` | [repository](https://github.com/BRL-CAD/tcl.git) |
| `tiff` | `USE_APPLESEED`, `USE_GDAL` | `install` | `jpeg`, `patch`, `zlib` | [repository](https://github.com/BRL-CAD/libtiff) |
| `tinygltf` | `USE_BRLCAD` | `install` | `patch` | [repository](https://github.com/BRL-CAD/tinygltf.git) |
| `tk` | `USE_TCL` | `install` | `patch`, `tcl` | [repository](https://github.com/BRL-CAD/tk) |
| `tkhtml` | `USE_TCL` | `install` | `patch`, `tcl`, `tk` | [repository](https://github.com/BRL-CAD/tkhtml) |
| `tktable` | `USE_TCL` | `install` | `patch`, `tcl`, `tk` | [repository](https://github.com/BRL-CAD/tktable) |
| `xerces-c` | `USE_APPLESEED` | `install` | `icu`, `patch` | [repository](https://github.com/BRL-CAD/xerces-c) |
| `yaml-cpp` | `USE_APPLESEED` | `install` | `patch` | [repository](https://github.com/BRL-CAD/yaml-cpp) |
| `zlib` | `USE_APPLESEED`, `USE_BRLCAD`, `USE_OSPRAY`, `USE_TCL` | `install` | `patch` | [repository](https://github.com/BRL-CAD/zlib) |
| `zstd` | `USE_APPLESEED`, `USE_OSPRAY` | `install` | `patch` | [repository](https://github.com/BRL-CAD/zstd) |
<!-- END GENERATED PROJECT TABLE -->
# Notes
* `install/` versus `noinstall/` is about downstream use, not importance.
Several `noinstall` entries are essential build helpers.
* `ENABLE_ALL=ON` does not add `USE_APPLESEED` or `USE_OSPRAY` by itself.
Those groups still need to be enabled explicitly.
* A few source trees, such as `patchelf`, are present in the repository but are
not currently added by the top-level build.
* Run the `update_dependency_docs` target after changing project groups,
dependency edges, output locations, or submodule sources. CI runs
`check_dependency_metadata` to detect drift, unknown edges, cycles, missing
source pins, and missing bundled-output license installation.
* The `sbom` target writes an SPDX 2.3 JSON inventory to `bext.spdx.json` in
the build directory. `supply_chain_check` validates metadata and produces
the SBOM together.
# Adding a dependency
For maintainers, the high-level workflow for adding a new dependency to `bext`
is:
1. Decide whether the dependency belongs in `bext` at all.
Only add repositories that are expected to support live BRL-CAD or related
build features. Exploratory work that may be discarded should stay in a branch
until the dependency choice is settled.
2. Prepare the BRL-CAD-hosted source repository first.
`bext` generally points at BRL-CAD-managed copies of upstream sources rather
than upstream repositories directly. Before wiring anything into `bext`, make
sure the BRL-CAD copy has the intended `RELEASE` content, submodules handled as
needed, and license files available for installation.
3. Choose the `USE_*` group or groups that should bring the dependency into
scope.
This controls when the dependency is considered at all. If none of the
existing groups fit, add a new one only if it represents a real build profile
that users can reason about.
4. Add the new top-level directory and git submodule.
The directory should usually contain:
* the upstream source as a git submodule
* a managing `CMakeLists.txt`
* a `<name>.deps` file listing other `bext` projects it depends on
* any patch files or helper resources needed by the build
After `git submodule add`, update `.gitmodules` to include `ignore = dirty` for
the new entry, consistent with the existing submodules.
5. Add the build logic.
Follow the patterns used by nearby dependencies:
* use `git_submodule_init(...)`
* use `RegisterDeps(...)`
* decide whether the outputs belong in `install` or `noinstall`
* copy license files into `${DOC_LICENSE_DIR}`
* use `bext_enable(...)`, `cad_enable(...)`, or custom logic as needed to
respect system detection and BRL-CAD component selection
6. Register the dependency in the top-level build.
Add `add_project(...)` to the top-level `CMakeLists.txt` in dependency order so
that any prerequisites appear earlier in the file.
7. Update the docs.
At minimum:
* add the project to this file
* update `INSTALL.md` if the new dependency adds system prerequisites
* update `NOTES.md` if the dependency needs special submodule or maintainer
handling
8. Test the intended selection behavior and build flow.
Check at least:
* the default configure path for the relevant `USE_*` groups
* `-DENABLE_ALL=ON`
* any new or changed prerequisite detection
* downstream use if the outputs are intended for BRL-CAD bundling
9. Only after the dependency is working, commit the new submodule reference and
the `bext` integration together.
That keeps the repository history aligned with a working configuration rather
than a partial experiment.
For lower-level git and submodule procedures, see [NOTES.md](NOTES.md).
+167
View File
@@ -0,0 +1,167 @@
# bext - Installation Notes
This file covers machine setup and source checkout details. For the main build
flow and option behavior, see [README.md](README.md).
# Base requirements
All builds need:
* Git
* CMake 3.19 or newer
* A modern C compiler
* A modern C++ compiler
Additional requirements depend on the enabled stacks:
* `USE_APPLESEED` and `USE_OSPRAY` will use a system `flex` and
`bison` if they are already installed. If they are not and `bext`
needs to build them locally on non-Windows platforms, a working
Autotools stack is also needed.
* `USE_QT`, `USE_APPLESEED`, or `USE_OSPRAY` need Python 3 available
to the build.
* `USE_OSPRAY` needs `m4`.
# Source checkout options
Default clone:
```sh
git clone https://github.com/BRL-CAD/bext
```
This is usually the best starting point. `bext` will populate submodules on
demand during configure.
Recursive clone:
```sh
git clone --recursive https://github.com/BRL-CAD/bext
```
Use this if you want all submodule content fetched up front, or if you expect
to configure and build without network access later.
Shallow clone options:
* `cmake ../bext -DGIT_SHALLOW_CLONE=ON ...`
* `git clone --recursive --depth=1 https://github.com/BRL-CAD/bext`
Shallow clones are fine for compile-only use, but they are not recommended for
development or for submodule update work.
# Alternate repositories and offline mirrors
`BEXT_REPOSITORY_ROOT` selects the directory containing the dependency
repositories. It defaults to `https://github.com/BRL-CAD`. For another host,
specify the URL of the equivalent repository directory:
```sh
cmake --preset auto -DBEXT_REPOSITORY_ROOT=https://git.example.org/brlcad
```
For offline use, the directory can contain bare Git mirrors such as
`bext.git`, `astyle.git`, and `libpng.git`, as produced by BRL-CAD's
`sh/mirror_repos.sh`. Clone bext first, then let CMake populate the required
submodules:
```sh
git clone /path/to/mirror/BRL-CAD/bext.git
cd bext
cmake --preset auto -DBEXT_REPOSITORY_ROOT=/path/to/mirror/BRL-CAD
```
The root points directly to the repositories; CMake does not append `BRL-CAD`.
Local paths and `file://` URLs are supported, as are remote Git URLs including
`ssh://` URLs. Relative local paths are resolved against the bext source
directory. Quote the `-D` argument if the path contains spaces. The setting
is saved in the configure cache.
The optional bootstrap script accepts the same setting:
```sh
cmake -DPROFILE=auto -DBEXT_REPOSITORY_ROOT=/path/to/mirror/BRL-CAD \
-P CMake/BextBootstrap.cmake
```
Bootstrap runs separately from configure, so pass the setting to both commands
if you use both workflows. `LIST_ONLY=ON` previews bootstrap selection without
fetching.
CMake redirects `https://github.com/BRL-CAD/` URLs using command-scoped Git
configuration, including recursive submodule operations. Local roots enable
file transport and forbid network transport for those Git operations. They
also disable shallow-clone recommendations, even with `GIT_SHALLOW_CLONE=ON`,
so full mirrors can supply older pinned commits. The mirrors must contain all
required commits. Recursive submodules outside that URL prefix need their
own Git URL mappings and local mirrors; otherwise initialization fails.
The override does not change `.gitmodules` or install persistent Git rewrite
settings. To return CMake-driven updates to GitHub, set
`-DBEXT_REPOSITORY_ROOT=https://github.com/BRL-CAD`. Direct Git commands use
their normal configuration. This setting controls submodule fetching, not
network access by dependency build scripts.
# Path and directory caveats
* Avoid symlinked source or build directory paths. `bext` warns about these
because they can cause downstream install and rpath problems.
* On non-Windows platforms, bundled Tcl/Tk builds do not support spaces in the
source or build directory path.
# Ubuntu Linux
Base packages:
```sh
sudo apt install git cmake gcc g++
```
For Tcl/Tk builds:
```sh
sudo apt install libfontconfig1-dev libfreetype6-dev xserver-xorg-dev libx11-dev libxi-dev libxext-dev
```
For Qt, Appleseed, and OSPRay:
```sh
sudo apt install libpython3-dev
```
For Qt on X11 systems, install the XCB development packages:
```sh
sudo apt install libx11-xcb-dev libxfixes-dev libxrender-dev libxcb1-dev libxcb-cursor-dev libxcb-glx0-dev libxcb-keysyms1-dev libxcb-image0-dev libxcb-shm0-dev libxcb-icccm4-dev libxcb-sync-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-randr0-dev libxcb-render-util0-dev libxcb-util-dev libxcb-xinerama0-dev libxcb-xkb-dev libxkbcommon-dev libxkbcommon-x11-dev
```
For OSPRay:
```sh
sudo apt install m4 gcc-multilib g++-multilib
```
If you want to rely on system `flex` and `bison`:
```sh
sudo apt install flex bison
```
If `bext` may need to build `flex` and `bison` locally:
```sh
sudo apt install autotools-dev autoconf
```
# Windows
If you enable Qt, Appleseed, or OSPRay, make sure Python 3 is installed and
available in the build environment.
Keep the source and build directories close to the drive root when possible.
Some Windows build tools still have path length limits, even though bext enables
Git's long path handling when it checks out submodules.
# macOS
Assuming XCode is installed, good to go.
-17
View File
@@ -1,17 +0,0 @@
Condition of use and distribution are the same as zlib:
This software is provided 'as-is', without any express or implied
warranty. In no event will the authors be held liable for any damages
arising from the use of this software.
Permission is granted to anyone to use this software for any purpose,
including commercial applications, and to alter it and redistribute it
freely, subject to the following restrictions:
1. The origin of this software must not be misrepresented; you must not
claim that you wrote the original software. If you use this software
in a product, an acknowledgement in the product documentation would be
appreciated but is not required.
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
-37
View File
@@ -1,37 +0,0 @@
Pod::Spec.new do |s|
s.name = 'Minizip'
s.version = '2.0.1'
s.license = 'zlib'
s.summary = 'Minizip contrib in zlib with the latest bug fixes and advanced features'
s.description = <<-DESC
Minizip zlib contribution that includes:
* AES encryption
* I/O buffering
* PKWARE disk spanning
It also has the latest bug fixes that having been found all over the internet including the minizip forum and zlib developer's mailing list.
DESC
s.homepage = 'https://github.com/nmoinvaz/minizip'
s.authors = 'Gilles Vollant', 'Nathan Moinvaziri'
s.source = { :git => 'https://github.com/nmoinvaz/minizip.git' }
s.libraries = 'z'
s.subspec 'Core' do |sp|
sp.source_files = '{mz_strm,mz_strm_mem,mz_strm_buf,mz_unzip,mz_zip,mz_strm_crypt,mz_strm_posix,mz_strm_zlib}.{c,h}'
end
s.subspec 'AES' do |sp|
sp.dependency 'Minizip/Core'
sp.source_files = 'lib/aes/*.{c,h}', 'mz_strm_aes.{c,h}'
end
s.subspec 'BZIP2' do |sp|
sp.dependency 'Minizip/Core'
sp.source_files = 'lib/bzip2/*.{c,h}', 'mz_strm_bzip.{c,h}'
end
s.subspec 'LZMA' do |sp|
sp.dependency 'Minizip/Core'
sp.source_files = 'lib/liblzma/*.{c,h}', 'mz_strm_lzma.{c,h}'
end
end
+902
View File
@@ -0,0 +1,902 @@
# bext - Notes
When using submodules, there are some fairly non-intuitive aspects of managing them that need to be taken into consideration:
# Checkout out particular versions of bext
Because bext makes extensive use of git submodules, operations that in the BRL-CAD repository can normally be achieved with basic git commands may need additional options in bext to achieve expected results. A common example is switching a clone of bext to a specific revision. If you have (say) a checkout of main branch but wish to obtain bext's contents from the rel-7-40-2 branch, one might intuitively think a checkout would work. However, doing that checkout, we see:
```
bext (main)$ git checkout rel-7-40-2
M assetimport/assimp
M astyle/astyle
M gdal/gdal
M gte/GeometricTools
M lief/LIEF
M lmdb/lmdb
M netpbm/netpbm
M opennurbs/opennurbs
M png/libpng
M proj/PROJ
M sqlite3/sqlite3
M tiff/libtiff
branch 'rel-7-40-2' set up to track 'origin/rel-7-40-2'.
Switched to a new branch 'rel-7-40-2'
```
What are the modification notifications about? What has happened is the populated submodules are still in the state set up by the main branch - the checkout to rel-7-40-2 in the parent git repository did not alter their states, and so according to the rel-7-40-2 branch they are modified compared to what they should be:
```
bext (rel-7-40-2)$ git status
On branch rel-7-40-2
Your branch is up to date with 'origin/rel-7-40-2'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: assetimport/assimp (new commits)
modified: astyle/astyle (new commits)
modified: gdal/gdal (new commits)
modified: gte/GeometricTools (new commits)
modified: lief/LIEF (new commits)
modified: lmdb/lmdb (new commits)
modified: netpbm/netpbm (new commits)
modified: opennurbs/opennurbs (new commits)
modified: png/libpng (new commits)
modified: proj/PROJ (new commits)
modified: sqlite3/sqlite3 (new commits)
modified: tiff/libtiff (new commits)
no changes added to commit (use "git add" and/or "git commit -a")
```
Note that not all submodules are listed. In this case, bext was configured to only clone specific libraries needed for a BRL-CAD build, and unpopulated submodules have made the change to the new version without incident. To also put the populated submodules in the expected state, a second command is needed:
```
bext (rel-7-40-2)$ git submodule update --recursive
Submodule path 'assetimport/assimp': checked out '3783459a97c67ec9e44fbec8c64aa83ff352dd15'
Submodule path 'astyle/astyle': checked out 'c35f91f650455dc7b9fb16c65bb8f9a94f6a1479'
Submodule path 'gdal/gdal': checked out '6caa025977ad22a32cba0646cafc30c36ca4f423'
Submodule path 'gte/GeometricTools': checked out '2cc6ea322f4fca3b51805768485d3da15409aeec'
Submodule path 'lief/LIEF': checked out '2b68ae538316f9ded03f9e3661d63551ab755cb0'
Submodule path 'lmdb/lmdb': checked out 'ddd0a773e2f44d38e4e31ec9ed81af81f4e4ccbb'
Submodule path 'netpbm/netpbm': checked out '3f1172417c2453de752839243e9a36fba5b16b70'
Submodule path 'opennurbs/opennurbs': checked out '6dce0c19e71812a87cc9de189ba5fdbbf7b56e28'
Submodule path 'png/libpng': checked out 'ed217e3e601d8e462f7fd1e04bed43ac42212429'
Submodule path 'proj/PROJ': checked out '47410920e0426d0eccbdbc27ca9dfc494f68a084'
Submodule path 'sqlite3/sqlite3': checked out 'e3012e5fa233146122a08ab41f33f7747d6c821c'
Submodule path 'tiff/libtiff': checked out '8b20804fc0ddeaa93667b799b5e1a2a7dc9e3fb2'
```
A second status check will now report a clean tree:
```
bext (rel-7-40-2)$ git status
On branch rel-7-40-2
Your branch is up to date with 'origin/rel-7-40-2'.
```
# Adding a submodule (using Tcl as an example)
NOTE: When testing out new possible dependencies for BEXT, work should be done in
a branch first and then merged into main. Once part of the main history, we can't
remove a dependency repository without breaking bext history - thus, we only want to
add dependencies we're actually going to use for implementing live features. Exploratory
work that might be thrown away is outside of bext's 'main' branch scope.
```
user@linux:~/bext (main) $ cd tcl
user@linux:~/bext/tcl (main) $ git submodule add -b RELEASE https://github.com/BRL-CAD/tcl.git
```
Edit the new .gitmodules entry to add the "ignore = dirty" line, git add the updated .gitmodules file, and commit the addition of the new submodule.
# Finding the currently referenced submodule SHA1
Git stores a SHA1 to the upstream commit it will target, but this SHA1 isn't readily visible in the working git clone's files. To see it, per https://stackoverflow.com/a/5033973/2037687) use git ls-tree - for example, this prints the current Tcl SHA1:
```
user@linux:~/bext (main) $ git ls-tree main tcl/tcl
160000 commit 338c6692672696a76b6cb4073820426406c6f3f9 tcl/tcl
```
# Updating a submodule to a newer upstream
```
user@linux:~ $ git clone --recurse-submodules git@github.com:BRL-CAD/bext.git
user@linux:~ $ cd bext
user@linux:~/bext (main) $ git submodule update --remote
Submodule path 'assetimport/assimp': checked out '6a08c39e3a91ef385e76515cfad86aca4bfd57ff'
Submodule path 'lief/LIEF': checked out '6e4722624adffdbf2e8156d4b8b69aebb8a3c754'
Submodule path 'qt/qt': checked out 'c9e69df410c79e6bc7b8be0f2d35abf366879d50'
user@linux:~/bext (main) $ git status
On branch main
Your branch is up to date with 'origin/main'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: assetimport/assimp (new commits)
modified: lief/LIEF (new commits)
modified: qt/qt (new commits)
no changes added to commit (use "git add" and/or "git commit -a")
user@linux:~/bext (main) $ git add assetimport/assimp lief/LIEF qt/qt
user@linux:~/bext (main) $ git status
On branch main
Your branch is up to date with 'origin/main'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: assetimport/assimp
modified: lief/LIEF
modified: qt/qt
user@linux:~/bext (main) $ git commit -m "Update submodule references for AssetImport, LIEF and Qt"
user@linux:~/bext (main) $ git push
```
# Parallelize updates
git config submodule.fetchJobs 0 # 0 = one job per CPU core
git config fetch.parallel 0
git config fetch.recurseSubmodules on-demand # only fetch the submodules that changed
# Changing the branch of a submodule
https://stackoverflow.com/questions/29882960/changing-an-existing-submodules-branch
# Removing a submodule
As summarized by https://gist.github.com/myusuf3/7f645819ded92bda6677 (using tcl/tcl as an example):
* Delete the .gitmodules entry for the submodule being removed
* git add .gitmodules
* Delete the .git/config entry for the submodule being removed
* git rm --cached tcl/tcl
* rm -rf .git/modules/tcl/tcl
* git commit -m "Removing Tcl submodule"
* rm -rf tcl/tcl
# Updating the BRL-CAD copy of a submodule
The bext repository does not hold BRL-CAD's copies of the various source repositories used -
rather, it points to local repositories in BRL-CAD's project that hold them. This allows,
among other things, for a lighter footprint for a working checkout. It also gives us the
opportunity to keep the BRL-CAD copy in sync with upstream sources using the git and github
tools intended for those use cases.
To update (for example) BRL-CAD's copy of GDAL to reference the latest release:
```
user@linux:~ $ git clone git@github.com:BRL-CAD/gdal.git
user@linux:~ $ cd gdal
user@linux:~/gdal (master) $ git remote add upstream https://github.com/OSGeo/gdal
user@linux:~/gdal (master) $ git fetch upstream
remote: Enumerating objects: 4536, done.
remote: Counting objects: 100% (4132/4132), done.
remote: Compressing objects: 100% (986/986), done.
remote: Total 4536 (delta 3297), reused 3885 (delta 3141), pack-reused 404
Receiving objects: 100% (4536/4536), 6.70 MiB | 25.98 MiB/s, done.
Resolving deltas: 100% (3383/3383), completed with 505 local objects.
From https://github.com/OSGeo/gdal
* [new branch] backport-7740-to-release/3.7 -> upstream/backport-7740-to-release/3.7
* [new branch] master -> upstream/master
<snip>
* [new branch] vendor/1.4-esri -> upstream/vendor/1.4-esri
* [new tag] v3.7.3 -> v3.7.3
* [new tag] v3.7.3RC1 -> v3.7.3RC1
* [new tag] v3.8.0beta1 -> v3.8.0beta1
user@linux:~/gdal (master) $ git push --tags
Enumerating objects: 10565, done.
Counting objects: 100% (5511/5511), done.
Delta compression using up to 12 threads
Compressing objects: 100% (1354/1354), done.
Writing objects: 100% (4057/4057), 2.14 MiB | 10.63 MiB/s, done.
Total 4057 (delta 3407), reused 3324 (delta 2699), pack-reused 0
remote: Resolving deltas: 100% (3407/3407), completed with 641 local objects.
To github.com:BRL-CAD/gdal.git
* [new tag] v3.7.3 -> v3.7.3
* [new tag] v3.7.3RC1 -> v3.7.3RC1
* [new tag] v3.8.0beta1 -> v3.8.0beta1
user@linux:~/gdal (master) $ git checkout RELEASE
branch 'RELEASE' set up to track 'origin/RELEASE'.
Switched to a new branch 'RELEASE'
user@linux:~/gdal (RELEASE) $ git merge v3.7.3
Updating f74cd41441..6133cf34a7
Fast-forward
.github/workflows/alpine/Dockerfile.ci | 3 +-
.github/workflows/cmake_builds.yml | 11 ++-
<snip>
create mode 100644 autotest/ogr/data/shp/multipolygon_as_invalid_polygon.shp
create mode 100644 autotest/ogr/data/shp/multipolygon_as_invalid_polygon.shx
user@linux:~/gdal (RELEASE) $ git status
On branch RELEASE
Your branch is ahead of 'origin/RELEASE' by 90 commits.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
user@linux:~/gdal (RELEASE) $ git diff v3.7.3
user@linux:~/gdal (RELEASE) $ git push
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
To github.com:BRL-CAD/gdal.git
f74cd41441..6133cf34a7 RELEASE -> RELEASE
```
After this process, the bext repo should be updated with the procedure documented
earlier to update its reference to the gdal RELEASE HEAD:
```
user@linux:~/bext (main) $ git submodule update --remote
remote: Enumerating objects: 1619, done.
remote: Counting objects: 100% (990/990), done.
remote: Compressing objects: 100% (238/238), done.
remote: Total 398 (delta 322), reused 229 (delta 158), pack-reused 0
Receiving objects: 100% (398/398), 156.17 KiB | 4.34 MiB/s, done.
Resolving deltas: 100% (322/322), completed with 127 local objects.
From https://github.com/BRL-CAD/gdal
+ f74cd4144...6133cf34a RELEASE -> origin/RELEASE (forced update)
* [new tag] v3.7.3 -> v3.7.3
* [new tag] v3.7.3RC1 -> v3.7.3RC1
Submodule path 'gdal/gdal': checked out '6133cf34a78077998406c0c4045bf51f06e3f49d'
user@linux:~/bext (main) $ git status
On branch main
Your branch is up to date with 'origin/main'.
Changes not staged for commit:
(use "git add <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
modified: gdal/gdal (new commits)
no changes added to commit (use "git add" and/or "git commit -a")
user@linux:~/bext (main) $ git add gdal/gdal
user@linux:~/bext (main) $ git status
On branch main
Your branch is up to date with 'origin/main'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: gdal/gdal
user@linux:~/bext (main) $ git commit -m "Update GDAL submodule reference"
[main 00ffbf0] Update GDAL submodule reference
1 file changed, 1 insertion(+), 1 deletion(-)
user@linux:~/bext (main) $ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 12 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 352 bytes | 352.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To github.com:BRL-CAD/bext.git
23bb902..00ffbf0 main -> main
```
# Preparing a BRL-CAD copy of a dependency for addition as a new submodule
When adding a new submodule to bext, the first step is to prepare a BRL-CAD
fork (preferable) or repository (if forking isn't an option) of the project
that is going to be used. We deliberately do not directly reference third
party repositories, to make sure our build can't be suddenly broken if one of
them disappears or radically changes. Considerations when first forking:
* The ownership of the project should be the BRL-CAD organization.
* Uncheck the "clone only main branch" option - we want the full project
history available to us if needed, including the various branches. If
the upstream disappears, the BRL-CAD copy may become the only copy.
* Once the fork is complete, verify that Github Actions are disabled for the
fork - if not, go through and disable them.
Once we have a BRL-CAD/<dependency> repository, we can start looking at what
is needed to make it suitable for referencing by bext. We almost never point
bext at the main branch of a project, or indeed any actively developed branch -
we want a stable, known target that we update deliberately once we have verified
things are working. To this end, we create our own branch in the fork (typically
called RELEASE) and use that to do any necessary staging.
Note that normally (though not always) this doesn't involve modifying the
project source code - that is more typically handed by patch files in bext
itself to keep updating the parent project forks simpler. What we usually need
to do in the upstream RELEASE branch is replace git submodules being used in
the parent project with full copies of the populated submodule directories. In
other words, we want the RELEASE version of a repository to be a fully
self-contained clone without any dependencies on external repositories (the
boost repository is probably the most extreme example of this in bext, but
there are a number of others where we do the same thing.) When the RELEASE
branch is updated for BRL-CAD, it is also necessary to fully update all of the
contents of these submodule replacements at the same time. (More on how to do
this later.)
NOTE: when considering a dependency for BRL-CAD usage, be sure to check not
only the license of the project itself but also all the licenses of its
dependencies. Some projects will have optional features using libraries that
aren't license compatible with BRL-CAD, so those should be disabled and those
source codes not included in RELEASE. If a project has a hard dependency on an
incompatible library, unless that dependency can be replaced or the need for it
removed we can't use the parent project. (For example, we sometimes see new
academic codes associated with papers where the author relies on CGAL's GPL
licensed capabilities - even if the academic code itself is liberally licensed,
we would have to update or rewrite it to not require CGAL before we could use
it.
Once submodules and licenses have been handled and the project works in
isolation, the next step is to get it building as part of the bext ecosystem.
For initial experiments, you'll probably want to simply work with a copy of the
dependency rather than immediately integrating it as a submodule. (If it
proves too difficult to work with and we have to scrap it, you'll want to avoid
the mess of also having to undo its addition as a submodule to bext.) You'll
create a new top level directory for the dependency that will hold the
dependency file, patch files (if any are needed) and the actual project source
directory itself. There are lots of examples to use as starting points, and
the patterns should be consistent. The usual pain points of this part of the
process are:
* You need to get the build to support using the *locally* built versions
of dependencies, as well as the system versions. If you have a system
and a bext copy of a dependency present, you may find it's somewhat
challenging to get the build system to focus on the version you want it
to use. zlib is particularly difficult, since it is quite common as
a system dependency and it frequently "works" in builds without the dev
spotting the problem. We also must alter our zlib and png library names
to avoid conflicts with system versions, so it is almost always necessary
to update build systems to instruct them on how to find and use our
copies. Recommended best practice, in addition to testing on multiple
platforms for building, is to use a freshly set up Ubuntu virtual machine
with only the minimally required system development headers.
* You may discover that the upstream project is using older versions of
dependencies than BRL-CAD - in this situation, you'll want to do the work
to update the code to use the newer dependency. We typically won't bundle
older versions - it's hard enough to stay current with just one! - and
if you discover you need to make changes of that sort it is HIGHLY
recommended to push those back to the upstream project so you can
minimize your future maintenance overhead.
* We prohibit dependencies from installing anything into the top level
"root" directory - outputs should go into bin, lib, share and other
standard subdirectories to conform with the layout of a BRL-CAD install.
Occasionally this will require build system alterations - those sorts
of tweaks are normally handled as patches, unless a particular situation
suggests the upstream might be receptive to changing how their install
structure is laid out.
Once you have everything installing into install/ correctly and
using the correct dependencies, congratulations - you're now ready to add
the submodule to bext in lieu of a working source copy. This will allow
bext to manage when and how the directory is populated based on build
settings, as well as providing a convenient(ish) mechanism for updating
submodule references as needed (see above).
As an example, we document below the steps taken for the geogram library from
https://github.com/BrunoLevy/geogram (which we're no longer actively bundling,
but it still serves as a good illustration.) After creating a full fork of the
project via github and verifying actions were not enabled, we clone the new
repository recursively to get the source code of all submodules:
```
$ git clone --recursive git@github.com:BRL-CAD/geogram.git
```
Once we have the geogram clone, we enter the directory and create our RELEASE
branch (since the upstream doesn't have such a branch, we don't have to worry
about a conflict - if that branch name becomes a problem in the future we can
adjust.)
```
$ cd geogram
geogram (main)$ git branch -c RELEASE
geogram (main)$ git checkout RELEASE
```
We can see geogram has a number of submodules:
```
geogram (RELEASE)$ git submodule
57a8140c8e9cb71d5f01824aa0e934bf71f34e9d src/lib/geogram/third_party/amgcl (1.4.3-13-g57a8140)
b4a91513317119ff71a1186906a052da0e535913 src/lib/geogram/third_party/libMeshb (RELEASE7.5-64-gb4a9151)
4296cc91b5c8c26d4e7d7aac0cee2b194ffc5800 src/lib/geogram/third_party/rply (v1.1.4-1-g4296cc9)
f8f805f04631323c8a75accc009eb9701f5ca027 src/lib/geogram_gfx/third_party/imgui (v1.89.7-docking-35-gf8f805f0)
3eaf1255b29fdf5c2895856c7be7d7185ef2b241 src/lib/third_party/glfw (3.3-781-g3eaf1255)
```
The first order of business is to convert those into committed source trees in
this repository. Removing a submodule from git isn't as simple as removing the
directory itself - there are a couple specific commands that must be run. Before
we do so, however, we want to make local copies of the contents of the submodules
we are going to clear so we can re-add them as standard file check-ins (see
https://stackoverflow.com/a/16162000):
```
geogram (RELEASE)$ mkdir ~/geogram_submodules
geogram (RELEASE)$ mv src/lib/geogram/third_party/amgcl ~/geogram_submodules/
geogram (RELEASE)$ mv src/lib/geogram/third_party/libMeshb ~/geogram_submodules/
geogram (RELEASE)$ mv src/lib/geogram/third_party/rply ~/geogram_submodules/
geogram (RELEASE)$ mv src/lib/geogram_gfx/third_party/imgui ~/geogram_submodules/
geogram (RELEASE)$ mv src/lib/third_party/glfw ~/geogram_submodules/
geogram (RELEASE)$ mv src/lib/geogram/third_party/amgcl ~/geogram_submodules/
geogram (RELEASE)$ mv src/lib/geogram/third_party/libMeshb ~/geogram_submodules/
geogram (RELEASE)$ mv src/lib/geogram/third_party/rply ~/geogram_submodules/
geogram (RELEASE)$ mv src/lib/geogram_gfx/third_party/imgui ~/geogram_submodules/
geogram (RELEASE)$ mv src/lib/third_party/glfw ~/geogram_submodules/
geogram (RELEASE)$ git submodule deinit -f src/lib/geogram/third_party/amgcl
Submodule 'src/lib/geogram/third_party/amgcl' (https://github.com/ddemidov/amgcl.git) unregistered for path 'src/lib/geogram/third_party/amgcl'
geogram (RELEASE)$ git submodule deinit -f src/lib/geogram/third_party/libMeshb
Submodule 'src/lib/geogram/third_party/libMeshb' (https://github.com/LoicMarechal/libMeshb.git) unregistered for path 'src/lib/geogram/third_party/libMeshb'
geogram (RELEASE)$ git submodule deinit -f src/lib/geogram/third_party/rply
Submodule 'src/lib/geogram/third_party/rply' (https://github.com/diegonehab/rply.git) unregistered for path 'src/lib/geogram/third_party/rply'
geogram (RELEASE)$ git submodule deinit -f src/lib/geogram_gfx/third_party/imgui
Submodule 'src/lib/geogram_gfx/third_party/imgui' (https://github.com/ocornut/imgui.git) unregistered for path 'src/lib/geogram_gfx/third_party/imgui'
geogram (RELEASE)$ git submodule deinit -f src/lib/third_party/glfw
Submodule 'src/lib/third_party/glfw' (https://github.com/glfw/glfw.git) unregistered for path 'src/lib/third_party/glfw'
geogram (RELEASE)$ rm -rf .git/modules/src/lib/geogram/third_party/amgcl
geogram (RELEASE)$ rm -rf .git/modules/src/lib/geogram/third_party/libMeshb
geogram (RELEASE)$ rm -rf .git/modules/src/lib/geogram/third_party/rply
geogram (RELEASE)$ rm -rf .git/modules/src/lib/geogram_gfx/third_party/imgui
geogram (RELEASE)$ rm -rf .git/modules/src/lib/third_party/glfw
geogram (RELEASE)$ git rm --cached src/lib/geogram/third_party/amgcl
rm 'src/lib/geogram/third_party/amgcl'
geogram (RELEASE)$ git rm --cached src/lib/geogram/third_party/libMeshb
rm 'src/lib/geogram/third_party/libMeshb'
geogram (RELEASE)$ git rm --cached src/lib/geogram/third_party/rply
rm 'src/lib/geogram/third_party/rply'
geogram (RELEASE)$ git rm --cached src/lib/geogram_gfx/third_party/imgui
rm 'src/lib/geogram_gfx/third_party/imgui'
geogram (RELEASE)$ git rm --cached src/lib/third_party/glfw
rm 'src/lib/third_party/glfw'
geogram (RELEASE)$ git status
On branch RELEASE
Your branch is up to date with 'origin/main'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: src/lib/geogram/third_party/amgcl
deleted: src/lib/geogram/third_party/libMeshb
deleted: src/lib/geogram/third_party/rply
deleted: src/lib/geogram_gfx/third_party/imgui
deleted: src/lib/third_party/glfw
geogram (RELEASE)$ git commit -m "Remove git submodules"
```
If we check, we now see that no submodules are reported:
```
geogram (RELEASE)$ git submodule
```
Next we restore the copies of the source code made earlier to the working tree:
```
geogram (RELEASE)$ mv ~/geogram_submodules/amgcl/\* src/lib/geogram/third_party/amgcl/
geogram (RELEASE)$ mv ~/geogram_submodules/libMeshb/\* src/lib/geogram/third_party/libMeshb/
geogram (RELEASE)$ mv ~/geogram_submodules/rply/\* src/lib/geogram/third_party/rply/
geogram (RELEASE)$ mv ~/geogram_submodules/imgui/\* src/lib/geogram_gfx/third_party/imgui/
geogram (RELEASE)$ mv ~/geogram_submodules/glfw/\* src/lib/third_party/glfw/
geogram (RELEASE)$ git status
On branch RELEASE
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)
Untracked files:
(use "git add <file>..." to include in what will be committed)
src/lib/geogram/third_party/amgcl/
src/lib/geogram/third_party/libMeshb/
src/lib/geogram/third_party/rply/
src/lib/geogram_gfx/third_party/imgui/
src/lib/third_party/glfw/
geogram (RELEASE)$ git add -A
geogram (RELEASE)$ git status
On branch RELEASE
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: src/lib/geogram/third_party/amgcl/CMakeLists.txt
new file: src/lib/geogram/third_party/amgcl/LICENSE.md
<snip>
geogram (RELEASE)$ git commit -m "Commit files from former git submodules"
[RELEASE 27f3c3ccf] Commit files from former git submodules
1061 files changed, 393698 insertions(+)
create mode 100644 src/lib/geogram/third_party/amgcl/CMakeLists.txt
<snip>
```
Once this step is complete, we have a "stand-alone" version of geogram and we push the
RELEASE branch back to github:
```
geogram (RELEASE)$ git push origin HEAD
Enumerating objects: 1231, done.
Counting objects: 100% (1231/1231), done.
Delta compression using up to 12 threads
Compressing objects: 100% (1195/1195), done.
Writing objects: 100% (1223/1223), 7.12 MiB | 8.99 MiB/s, done.
Total 1223 (delta 254), reused 23 (delta 1), pack-reused 0
remote: Resolving deltas: 100% (254/254), completed with 6 local objects.
remote:
remote: Create a pull request for 'RELEASE' on GitHub by visiting:
remote: https://github.com/BRL-CAD/geogram/pull/new/RELEASE
remote:
To https://github.com/BRL-CAD/geogram.git
* [new branch] HEAD -> RELEASE
```
The RELEASE branch is now visible on the https://github.com/BRL-CAD/geogram project page.
Looking over the project contents, we see there are a number of third party components
we either don't want to or can't use. HLBFGS and triangle.c are for noncommercial use
only, and must be removed. Tetgen uses the AGPL and is incompatible with BRL-CAD's
licensing, so it too must be removed.
```
geogram (RELEASE)$ git rm -r src/lib/geogram/third_party/HLBFGS
geogram (RELEASE)$ git rm -r src/lib/geogram/third_party/triangle
geogram (RELEASE)$ git rm -r src/lib/geogram/third_party/tetgen
geogram (RELEASE)$ git commit -m "Remove sources for optional third party components with incompatible licenses"
[RELEASE 296fdc244] Remove sources for optional third party components with incompatible licenses
21 files changed, 94593 deletions(-)
delete mode 100644 src/lib/geogram/third_party/HLBFGS/HLBFGS.cpp
delete mode 100644 src/lib/geogram/third_party/HLBFGS/HLBFGS.h
delete mode 100644 src/lib/geogram/third_party/HLBFGS/HLBFGS_BLAS.cpp
delete mode 100644 src/lib/geogram/third_party/HLBFGS/HLBFGS_BLAS.h
delete mode 100644 src/lib/geogram/third_party/HLBFGS/ICFS.cpp
delete mode 100644 src/lib/geogram/third_party/HLBFGS/ICFS.h
delete mode 100644 src/lib/geogram/third_party/HLBFGS/LineSearch.cpp
delete mode 100644 src/lib/geogram/third_party/HLBFGS/LineSearch.h
delete mode 100644 src/lib/geogram/third_party/HLBFGS/Lite_Sparse_Matrix.cpp
delete mode 100644 src/lib/geogram/third_party/HLBFGS/Lite_Sparse_Matrix.h
delete mode 100644 src/lib/geogram/third_party/HLBFGS/README.txt
delete mode 100644 src/lib/geogram/third_party/HLBFGS/Sparse_Entry.h
delete mode 100644 src/lib/geogram/third_party/tetgen/README.txt
delete mode 100644 src/lib/geogram/third_party/tetgen/Tetgen1.6/README
delete mode 100644 src/lib/geogram/third_party/tetgen/Tetgen1.6/tetgen.cpp
delete mode 100644 src/lib/geogram/third_party/tetgen/Tetgen1.6/tetgen.h
delete mode 100755 src/lib/geogram/third_party/tetgen/tetgen.cpp
delete mode 100755 src/lib/geogram/third_party/tetgen/tetgen.h
delete mode 100644 src/lib/geogram/third_party/triangle/README
delete mode 100644 src/lib/geogram/third_party/triangle/triangle.c
delete mode 100644 src/lib/geogram/third_party/triangle/triangle.h
geogram (RELEASE)$ git push origin HEAD
```
Next, we determine how to build the project without the components we either
don't want to or cannot use. We will use build system options provided by the
upstream build if available - if alterations to the build logic are necessary
we will collect those into a patch file and use that . This generally involves
turning off any extra features we don't want to simplify the build and
dependency requirements as much as possible. In geogram's case, we tell it to
turn off graphics and build the library only, as well as disabling all the
optional third party components:
```
geogram (RELEASE)$ mkdir build && cd build
build (RELEASE)$ cmake .. -DGEOGRAM_LIB_ONLY=ON -DGEOGRAM_WITH_GRAPHICS=OFF -DGEOGRAM_WITH_LUA=OFF -DGEOGRAM_WITH_HLBFGS=OFF -DGEOGRAM_WITH_TETGEN=OFF -DGEOGRAM_WITH_TRIANGLE=OFF -DCMAKE_BUILD_TYPE=Release
CMake Deprecation Warning at CMakeLists.txt:5 (cmake_minimum_required):
Compatibility with CMake < 3.5 will be removed from a future version of
CMake.
Update the VERSION argument <min> value or use a ...<max> suffix to tell
CMake that the project does not need compatibility with older versions.
-- The C compiler identification is GNU 12.2.1
-- The CXX compiler identification is GNU 12.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Doxygen >= 1.7.0 not found, cannot generate documentation
CMake Deprecation Warning at doc/CMakeLists.txt:7 (cmake_minimum_required):
Compatibility with CMake < 3.5 will be removed from a future version of
CMake.
Update the VERSION argument <min> value or use a ...<max> suffix to tell
CMake that the project does not need compatibility with older versions.
-- Configuring done (0.7s)
-- Generating done (0.1s)
-- Build files have been written to: /geogram/build
build (RELEASE)$ make
[ 0%] Building C object src/lib/geogram/third_party/CMakeFiles/geogram_third_party.dir/libMeshb/sources/libmeshb7.c.o
[ 0%] Building C object src/lib/geogram/third_party/CMakeFiles/geogram_third_party.dir/rply/rply.c.o
[ 0%] Building C object src/lib/geogram/third_party/CMakeFiles/geogram_third_party.dir/zlib/adler32.c.o
[ 0%] Building C object src/lib/geogram/third_party/CMakeFiles/geogram_third_party.dir/zlib/compress.c.o
[ 1%] Building C object src/lib/geogram/third_party/CMakeFiles/geogram_third_party.dir/zlib/crc32.c.o
<snip>
```
One thing we spot when building starts is that there is a local zlib copy in geogram. That's not necessarily
a problem if it does not cause a conflict (for example, we allow Qt to use its own zlib since that is much
simpler than trying to inject our version into their build and they isoloate their version) but it's something to
be aware of as a source of potential issues. If it DOES cause a problem, we may have to alter geogram's build
to reference our zlib, if we are building a local copy.
After the library is complete, we use ldd to check and see if any system
libraries were linked that either already are or will need to be supplied by
bext are used:
```
geogram/build (RELEASE) $ ldd lib/libgeogram.so
linux-vdso.so.1 (0x00007fff0db46000)
libstdc++.so.6 => /lib/x86_64-linux-gnu/libstdc++.so.6 (0x00007efc63200000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007efc63515000)
libgomp.so.1 => /lib/x86_64-linux-gnu/libgomp.so.1 (0x00007efc63ef3000)
libgcc_s.so.1 => /lib/x86_64-linux-gnu/libgcc_s.so.1 (0x00007efc63ecf000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007efc62e00000)
/lib64/ld-linux-x86-64.so.2 (0x00007efc63f6a000)
```
At least for Linux, all the linked libraries appear to be system libs and not dependencies we may need
to supply ourselves, which is good. If geogram was going to require us to add more dependencies to avoid
the requirement to install system packages, we would have to repeat the above process for each of the
proposed dependencies as well before we would be ready to move on to bext.
Since we appear to have what we need, the next step takes place in the bext repository.
We create a new top level directory - in this case "geogram" - and add it to the toplevel
CMakeLists.txt file.
```
bext (main) $ mkdir geogram
bext (main) $ <manually edit CMakeLists.txt to add the following>
# Geogram - a programming library with geometric algorithms
# https://github.com/BrunoLevy/geogram
add_project(geogram GROUPS "BRLCAD_EXTRA")
```
We create a default "geogram.deps" file to list build dependencies for the bext superbuild.
By default everything depends on at least PATCH - if geogram ultimately needs other bext
components as well, they will be added later
```
bext (main) $ echo -e "PATCH\\n" > geogram/geogram.deps
```
Based on the above compilation, we know we will need to pass some geogram specific arguments
to configure. Using one of the other CMakeLists.txt files as a template, we create the following
geogram/CMakeLists.txt file:
```
set(ENABLE_GEOGRAM "${ENABLE_GEOGRAM}" CACHE BOOL "Enable Geogram build")
if (ENABLE_GEOGRAM)
git_submodule_init(geogram CMakeLists.txt)
RegisterDeps(GEOGRAM)
ExternalProject_Add(GEOGRAM_BLD
URL "${CMAKE_CURRENT_SOURCE_DIR}/geogram"
BUILD_ALWAYS ${EXT_BUILD_ALWAYS} ${LOG_OPTS}
#PATCH_COMMAND ${PATCH_EXECUTABLE};-E;-p1;${PATCH_OPTIONS};-i;${CMAKE_CURRENT_SOURCE_DIR}/geogram.patch
CMAKE_ARGS
${BUILD_TYPE_SPECIFIER}
-DBIN_DIR=${BIN_DIR}
-DLIB_DIR=${LIB_DIR}
-DBUILD_STATIC_LIBS=${BUILD_STATIC_LIBS}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_INSTALL_PREFIX=${CMAKE_BUNDLE_INSTALL_PREFIX}
-DCMAKE_INSTALL_LIBDIR:PATH=${LIB_DIR}
-DCMAKE_INSTALL_RPATH=${CMAKE_BUNDLE_INSTALL_PREFIX}/${LIB_DIR}
-DGEOGRAM_LIB_ONLY=ON
-DGEOGRAM_WITH_GRAPHICS=OFF
-DGEOGRAM_WITH_LUA=OFF
-DGEOGRAM_WITH_HLBFGS=OFF
-DGEOGRAM_WITH_TETGEN=OFF
-DGEOGRAM_WITH_TRIANGLE=OFF
LOG_CONFIGURE ${EXT_BUILD_QUIET}
LOG_BUILD ${EXT_BUILD_QUIET}
LOG_INSTALL ${EXT_BUILD_QUIET}
LOG_OUTPUT_ON_FAILURE ${EXT_BUILD_QUIET}
STEP_TARGETS install
)
TargetInstallDeps(GEOGRAM GEOGRAM_DEPENDS)
# Copy the license into position in CMAKE_BUNDLE_INSTALL_PREFIX
file(MAKE_DIRECTORY ${CMAKE_BUNDLE_INSTALL_PREFIX}/doc/legal/other)
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/geogram/LICENSE
${CMAKE_BUNDLE_INSTALL_PREFIX}/doc/legal/other/geogram.txt
COPYONLY
)
endif (ENABLE_GEOGRAM)
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
```
By default the PATCH\_COMMAND line is commented out - at this stage we don't know if we need to
apply any patches or not. We will definitely need to copy at least the LICENSE file. In this
case we will probably also want to append some of the other third party licenses used by geogram
into it for completeness, so we may end up either scripting that or making our own custom file
to store in geogram/. The latter is less ideal as it will have to be manually updated each time
we update geogram, but that might be simpler than a complex and fragile scripting solution - it
will require investigation.
The other item of note here is that we need find\_package to locate geogram. By default CMake
does not bundle a module for this, and geogram is not one of the projects that uses the newer
project-provided CMake information convention for find\_package, so we will have to supply a
FindGeogram.cmake file. In this case geogram itself has such a file in geogram/cmake/FindGeogram.cmake
so that is our starting point - we add it to the bext collection of CMake find\_package files:
```
bext (main) $ cp ~/geogram/cmake/FindGeogram.cmake CMake/
```
Although it is not immediately necessary for this stage of the setup, there is something we
should verify and correct about the FindGeogram.cmake file. The bext setup requires that
find\_package respect \*\_ROOT variables to allow us to point search paths to our local copies
of libs rather than system versions, and it is common for more obscure cmake files to not
be set up to search in this fashion. Accordingly, we alter FindGeogram.cmake
to add GEOGRAM\_ROOT to the set of search paths. This will eventually be necessary for the
copy added to the main BRL-CAD build, as well as for any new dependencies that need to link
against the local copy of geogram in the future.
For the initial test, we comment out the git\_submodule\_init line and manually position a copy
of the geogram source tree in geogram/geogram to simulate a submodule clone. For this test
we only are interested in building geogram and its requirements, rather than all of bext,
so we run make with the GEOGRAM_BLD target.
```
bext (main) $ cp -r ~/geogram geogram/
bext (main) $ mkdir build && cd build
build (main) $ cmake .. -DENABLE_ALL=ON -DCMAKE_BUILD_TYPE=Release
build (main) $ make GEOGRAM_BLD
[ 0%] Creating directories for 'PATCH_BLD'
[ 0%] No download step for 'PATCH_BLD'
[ 20%] No update step for 'PATCH_BLD'
[ 20%] No patch step for 'PATCH_BLD'
[ 20%] Performing configure step for 'PATCH_BLD'
-- PATCH_BLD configure command succeeded. See also bext/build/patch/PATCH_BLD-prefix/src/PATCH_BLD-stamp/PATCH_BLD-configure-*.log
[ 40%] Performing build step for 'PATCH_BLD'
-- PATCH_BLD build command succeeded. See also bext/build/patch/PATCH_BLD-prefix/src/PATCH_BLD-stamp/PATCH_BLD-build-*.log
[ 40%] Performing install step for 'PATCH_BLD'
-- PATCH_BLD install command succeeded. See also bext/build/patch/PATCH_BLD-prefix/src/PATCH_BLD-stamp/PATCH_BLD-install-*.log
[ 40%] Built target PATCH_BLD-install
[ 60%] Creating directories for 'GEOGRAM_BLD'
[ 60%] Performing download step (DIR copy) for 'GEOGRAM_BLD'
[ 60%] No update step for 'GEOGRAM_BLD'
[ 80%] No patch step for 'GEOGRAM_BLD'
[ 80%] Performing configure step for 'GEOGRAM_BLD'
-- GEOGRAM_BLD configure command succeeded. See also bext/build/geogram/GEOGRAM_BLD-prefix/src/GEOGRAM_BLD-stamp/GEOGRAM_BLD-configure-*.log
[ 80%] Performing build step for 'GEOGRAM_BLD'
-- GEOGRAM_BLD build command succeeded. See also bext/build/geogram/GEOGRAM_BLD-prefix/src/GEOGRAM_BLD-stamp/GEOGRAM_BLD-build-*.log
[ 80%] Performing install step for 'GEOGRAM_BLD'
-- GEOGRAM_BLD install command succeeded. See also bext/build/geogram/GEOGRAM_BLD-prefix/src/GEOGRAM_BLD-stamp/GEOGRAM_BLD-install-*.log
[ 80%] Built target GEOGRAM_BLD-install
[100%] Completed 'GEOGRAM_BLD'
[100%] Built target GEOGRAM_BLD
```
Once we have a successful completion, we inspect the contents of install:
```
bext/build (main) $ ls -R ~/install/
```
One thing to note is that a lot of the third party headers have been installed,
including lua (although we disabled it) and zlib. It might be possible to trim
the installed set of headers down if the subset of geogram we are interested in
doesn't require all of them, but it would also require patching the build logic
so it's not a step to take without some motivation. The zlib headers are concerning
if there's a risk of them getting incorporated into other builds instead of our
bundled zlib, but their location in include/geogram1/geogram/third_party/zlib should
help avoid accidental incorporation so for the moment we can wait and see. The
total file size for all the geogram headers is about 5M, which isn't enough to
justify a cleanup attempt without more pressing functional concerns.
Once everything looks like it should, we are ready to remove the working geogram
copy and add it properly as a submodule per the instructions at the top of this
file:
```
bext (main) $ rm -rf geogram/geogram && cd geogram
bext/geogram (main) $ git submodule add -b RELEASE https://github.com/BRL-CAD/geogram.git
bext/geogram (main) $ cd ..
bext (main) $ echo " ignore = dirty" >> .gitmodules
```
Then add all the new and updated files to git for committing, and make the
commit - geogram will now be present as a dependency in bext.
```
bext (main) $ git add .gitmodules CMakeLists.txt CMake/ geogram/
bext (main) $ git status
On branch main
Your branch is up to date with 'origin/main'.
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
modified: .gitmodules
new file: CMake/FindGeogram.cmake
modified: CMakeLists.txt
new file: geogram/CMakeLists.txt
new file: geogram/geogram
new file: geogram/geogram.deps
bext (main) $ git commit -m "Add geogram geometry library to bext"
[main 07d979f] Add geogram geometry library to bext
6 files changed, 227 insertions(+)
create mode 100644 CMake/FindGeogram.cmake
create mode 100644 geogram/CMakeLists.txt
create mode 160000 geogram/geogram
create mode 100644 geogram/geogram.deps
bext (main) $ git push
```
The final "git push" step publishes the new addition to the public github bext
repository, and will also kick off a continuous integration test build on
Windows, Mac and Linux. Because we tested only on Linux above, it is very
common to see build issues on one or both of Windows and Mac - any issues
should be immediately fixed, to keep bext building on all three platforms.
In the case of severe issues, comment out the add\_project line in the toplevel
bext CMakeLists.txt file corresponding to the new addition until the problems
can be resolved.
Having added the dependency successfully to bext, the next step is to set up
the main BRL-CAD build to make use of it. The FindGeogram.cmake file needs
to be added to BRL-CAD's misc/CMake folder, and the following code needs to be
added to misc/CMake/BRLCAD_ExternalDeps.cmake in order for the main BRL-CAD
build to be able to find a bundled Geogram:
```
# Geogram - a programming library with geometric algorithms
# https://github.com/BrunoLevy/geogram
find_package_reset(GEOGRAM RESET_TP)
set(GEOGRAM_ROOT "${CMAKE_BINARY_DIR}")
find_package(Geogram)
```
Because the Geogram headers will trigger compiler warnings for a BRL-CAD build,
we also need to identify "geogram" as a pattern on which to use the SYSTEM
keyword when it is used in include_directories calls:
```
set(SYS_INCLUDE_PATTERNS ${SYS_INCLUDE_PATTERNS} geogram)
list(REMOVE_DUPLICATES SYS_INCLUDE_PATTERNS)
set(SYS_INCLUDE_PATTERNS ${SYS_INCLUDE_PATTERNS} geogram CACHE STRING "Bundled system include dirs" FORCE)
```
We also need to add "Geogram" to the BUNDLED_LABELS list and GEOGRAM_LIBRARY to
the BUNDLED_VARS list in misc/CMake/BRLCAD_Summary.cmake - they both need to be
in the same relative positions in their respective lists. This will allow the
BRL-CAD configure summary to report on the status of the dependency automatically.
By convention we keep the labels alphabetized.
Note that the bext build takes responsibility for making third party
dependencies relocatable by leveraging LIEF, but if the upstream project ends
up encoding fixed install paths rather than using relative lookups it may
happen that a working install copy fails to work when copied into
the main BRL-CAD build. If and when that happens, the original sources must be
patched to allow for relocatable execution (we have to do this for Tcl, for
example.) This should be done via patch file, and if the upstream project will
take them push the necessary changes upstream to simplify incorporating new
versions down the road.
Once the dependency is looking stable and useful, it's time to circle back and
test the build logic for various configurations - system verisons of
dependencies (if any), bundled versions of dependencies (if any), installing a
system version of geogram and verifying that the FindGeogram.cmake file
successfully detects it and our build logic disables the local build, and
checking that the BRL-CAD FindGeogram.cmake and build logic also work in both
configurations. Unfortunately, especially given the huge number of projects
bext manages when everything is enabled, it's not practical to test all
combinations of system and local for all projects. Generally speaking, the
most important configurations are ENABLE_ALL=ON, system detection on a
"vanilla" Linux box with just the minimal system development headers for X11
et. al., and system detection on a Linux box with a lot of system versions of
libraries present. (For projects like geogram that have minimal entanglement
with other elements of bext it's more practical to check all configurations
using the GEOGRAM_BLD build target, but that won't always be possible -
build logic for projects like OSPray and Appleseed has the potential to
encounter a vast set of possible mixes of system and bundled libs.)
+183 -157
View File
@@ -1,157 +1,183 @@
# Minizip 2.0.1
This library is a refactoring of the minizip contribution found in the zlib distribution that is supported on Windows, macOS, and Linux. It is based on the original work of [Gilles Vollant](http://www.winimage.com/zLibDll/minizip.html) that has been contributed to by many people over the years.
Dev: ![Dev Branch Status](https://travis-ci.org/nmoinvaz/minizip.svg?branch=dev)
Master: ![Master Branch Status](https://travis-ci.org/nmoinvaz/minizip.svg?branch=master)
For the older release of the library checkout the [1.2](https://github.com/nmoinvaz/minizip/tree/1.2) branch.
## Build
To generate the project files for your platform and IDE download and run cmake in the project directory.
```
cmake .
cmake --build .
```
## Contents
| File(s) | Description | Required |
|:- |:-|:-:|
| miniunz.c | Sample unzip application | No |
| minizip.c | Sample zip application | No |
| mz_compat.\* | Minizip 1.0 compatibility layer | No |
| mz.h | Error codes and flags | Yes |
| mz_os\* | OS specific helper functions | Encryption |
| mz_strm.\* | Stream interface | Yes |
| mz_strm_aes.\* | WinZIP AES stream | No |
| mz_strm_buf.\* | Buffered stream | No |
| mz_strm_bzip.\* | BZIP2 stream using libbzip2 | No |
| mz_strm_crypt.\* | PKWARE traditional encryption stream | No |
| mz_strm_lzma.\* | LZMA stream using liblzma | No |
| mz_strm_mem.\* | Memory stream | Yes |
| mz_strm_split.\* | Disk splitting stream | No |
| mz_strm_posix.\* | File stream using Posix functions | Non-windows systems |
| mz_strm_win32.\* | File stream using Win32 API functions | Windows systems |
| mz_strm_zlib.\* | Deflate stream using zlib | Yes |
| mz_unzip.\* | Unzip functionality | Unzipping |
| mz_zip.\* | Zip functionality | Zipping |
## Features
### Streams
This library has been refactored around streams.
#### Memory Streaming
To unzip from a zip file in memory create a memory stream and pass it to the unzip open functions.
```
uint8_t *zip_buffer = NULL;
int32_t zip_buffer_size = 0;
void *mem_stream = NULL;
// fill zip_buffer with zip contents
mz_stream_mem_create(&mem_stream);
mz_stream_mem_set_buffer(mem_stream, zip_buffer, zip_buffer_size);
mz_stream_open(mem_stream, NULL, MZ_STREAM_MODE_READ);
void *unz_handle = mz_unzip_open(mem_stream);
// do unzip operations
mz_stream_mem_delete(&mem_stream);
```
To create a zip file in memory first create a growable memory stream and pass it to the zip open functions.
```
void *mem_stream = NULL;
mz_stream_mem_create(&mem_stream);
mz_stream_mem_set_grow(mem_stream, 1);
mz_stream_mem_set_grow_size(mem_stream, (128 * 1024));
mz_stream_open(mem_stream, NULL, MZ_STREAM_MODE_CREATE);
void *zip_handle = mz_zip_open(0, 0, mem_stream);
// do unzip operations
mz_stream_mem_delete(&mem_stream);
```
#### Buffered Streaming
By default the library will read bytes typically one at a time. The buffered stream allows for buffered read and write operations to improve I/O performance.
```
void *stream = NULL;
void *buf_stream = NULL;
mz_stream_os_create(&stream)
// do open os stream
mz_stream_buffered_create(&buf_stream);
mz_stream_buffered_open(buf_stream, NULL, MZ_STREAM_MODE_READ);
mz_stream_buffered_set_base(buf_stream, stream);
void *unz_handle = mz_unzip_open(buf_stream);
```
#### Disk Splitting Stream
To create an archive with multiple disks use the disk splitting stream and for zipping supply a disk size value in bytes.
```
void *stream = NULL;
void *split_stream = NULL;
mz_stream_os_create(&stream);
mz_stream_split_create(&split_stream);
mz_stream_split_set_prop_int64(split_stream, MZ_STREAM_PROP_DISK_SIZE, 64 * 1024);
mz_stream_set_base(split_stream, stream);
mz_stream_open(split_stream, path..
handle = mz_unzip/zip_open(split_stream);
```
The central directory is the only data stored in the .zip and doesn't follow disk size restrictions.
When unzipping it will automatically determine when in needs to cross disk boundaries.
### Compression Methods
#### BZIP2
+ Requires ``cmake . -DUSE_BZIP2=ON`` or ``#define HAVE_BZIP2``
+ Requires [BZIP2](http://www.bzip.org/) library
#### LZMA
+ Requires ``cmake . -DUSE_LZMA=ON`` or ``#define HAVE_LZMA``
+ Requires [liblzma](https://tukaani.org/xz/) library
### Encryption
#### [WinZIP AES Encryption](http://www.winzip.com/aes_info.htm)
+ Requires ``cmake . -DUSE_AES=ON`` or ``#define HAVE_AES``
+ Requires [Brian Gladman's](https://github.com/BrianGladman/aes) AES library
When zipping with a password it will always use AES 256-bit encryption.
When unzipping it will use AES decryption only if necessary. Does not support central directory or local file header encryption since it is not supported outside of PKZIP. For a more secure method it is best to just encrypt the zip post-process.
#### Disabling All Encryption
To disable encryption use the following cmake commands:
```
cmake . -DUSE_AES=OFF
cmake . -DUSE_CRYPT=OFF
```
### Windows RT
+ Requires ``#define MZ_USING_WINRT_API``
# bext - External Dependencies for BRL-CAD
`bext` builds third-party libraries and helper tools used by
[BRL-CAD](https://github.com/BRL-CAD/brlcad). By default it prefers suitable
system packages and builds local copies only when they are needed.
# Quick start
Clone the repository, configure with the official `auto` preset, and build:
```sh
git clone https://github.com/BRL-CAD/bext
cd bext
cmake --preset auto
cmake --build build/auto --config Release --parallel 8
```
Submodules are populated on demand during configure. For checkout and
platform setup details, see [INSTALL.md](INSTALL.md).
The preset workflow relies on CMake's newer preset support. If you are using
CMake 3.19 or 3.20, use the raw configure equivalents below.
# Optional bootstrap
If you want to fetch a given profile's source submodules up front
instead of letting configure fetch them on demand:
```sh
cmake -DPROFILE=auto -P CMake/BextBootstrap.cmake
cmake --preset auto
```
Use `LIST_ONLY=ON` to preview the selected submodules without fetching them,
and `GIT_SHALLOW_CLONE=ON` to specify shallow clones during bootstrap.
Both configure and bootstrap accept `BEXT_REPOSITORY_ROOT` to fetch from an
alternate host or a local Git mirror. See [alternate repositories and offline
mirrors](INSTALL.md#alternate-repositories-and-offline-mirrors) for examples.
# How manual selection works
Build selection happens in three layers:
1. `USE_*` options decide which dependency families are in scope.
2. For in-scope packages, the default behavior is to use a suitable system
package if one is found and build a local copy only when needed.
3. `ENABLE_<pkg>=ON` or `OFF` overrides one package explicitly.
Default `USE_*` values:
* `USE_BRLCAD=ON`
* `USE_BRLCAD_EXTRA=ON`
* `USE_GDAL=ON`
* `USE_QT=ON`
* `USE_TCL=ON`
* `USE_APPLESEED=OFF`
* `USE_OSPRAY=OFF`
`ENABLE_ALL=ON` changes step 2 by preferring local builds for packages in the
active `USE_*` groups. It does not turn on groups whose `USE_*` option is
`OFF`.
When `bext` is driven from a BRL-CAD build, `BRLCAD_COMPONENTS` can further
narrow some BRL-CAD-related packages to only those needed by the requested
component set.
# Official profiles
The supported configure entry points are:
* `auto` - standard BRL-CAD-oriented profile using suitable system packages
when found
* `bundled` - standard BRL-CAD-oriented profile with bundled/local builds
preferred for all active groups
* `minimal` - core BRL-CAD profile without extras, GDAL, Qt, Tcl/Tk,
Appleseed, or OSPRay
* `everything` - all current groups enabled with bundled/local builds
preferred throughout
Use them like this:
```sh
cmake --preset auto
cmake --preset bundled
cmake --preset minimal
cmake --preset everything
```
Build using the preset's build directory:
```sh
cmake --build build/auto --config Release --parallel 8
```
# Raw configure equivalents
`auto`:
```sh
cmake ../bext -DCMAKE_BUILD_TYPE=Release
```
`bundled`:
```sh
cmake ../bext -DENABLE_ALL=ON -DCMAKE_BUILD_TYPE=Release
```
`minimal`:
```sh
cmake ../bext \
-DUSE_BRLCAD_EXTRA=OFF \
-DUSE_GDAL=OFF \
-DUSE_QT=OFF \
-DUSE_TCL=OFF \
-DCMAKE_BUILD_TYPE=Release
```
`everything`:
```sh
cmake ../bext \
-DENABLE_ALL=ON \
-DUSE_APPLESEED=ON \
-DUSE_OSPRAY=ON \
-DCMAKE_BUILD_TYPE=Release
```
# Build outputs
By default, `CMAKE_INSTALL_PREFIX` is the build directory. `bext` creates two
output trees under that prefix:
* `install/` - files intended to be bundled with downstream software
* `noinstall/` - build-only tools and compile-time-only assets
* `bext-install-manifest.json` - relative file classifications and the
platform metadata needed by downstream staging builds
The normal build finalizes bundled binaries after all dependency install steps.
It uses `strclear` and, where available, `plief` to remove stale build paths and
normalize RPATH-bearing files before writing the manifest. Consumers should
continue to treat `install/` as read-only and perform their own staging-specific
path and RPATH edits on copied files.
The normal build also generates a dependency graph in the build directory as
`bext.dot`. When Graphviz `dot` is available, the build also emits rendered
forms such as `bext.svg`, `bext.png`, and `bext.pdf`.
When BRL-CAD consumes a `bext` build, `BRLCAD_EXT_DIR` should point at the
parent directory containing both `install/` and `noinstall/`.
# Using the build outputs with BRL-CAD
If you used the `auto` preset, `BRLCAD_EXT_DIR` should be `../bext/build/auto`.
Configure BRL-CAD with:
```sh
git clone https://github.com/BRL-CAD/brlcad
mkdir brlcad_build
cd brlcad_build
cmake ../brlcad -DBRLCAD_EXT_DIR=../bext_build -DCMAKE_BUILD_TYPE=Release
cmake --build . --config Release --parallel 8
```
If you built Qt in `bext`, also enable Qt in BRL-CAD:
```sh
cmake ../brlcad \
-DBRLCAD_EXT_DIR=../bext_build \
-DBRLCAD_ENABLE_QT=ON \
-DCMAKE_BUILD_TYPE=Release
```
# More information
* [INSTALL.md](INSTALL.md) - platform prerequisites, checkout options, and
setup caveats
* [DEPENDENCIES.md](DEPENDENCIES.md) - package-to-group reference, output
classification, and dependency addition workflow
* [NOTES.md](NOTES.md) - maintainer notes and submodule procedures
* [XMIN.md](XMIN.md) - testing-only headless X11 support using Xmin
+20
View File
@@ -0,0 +1,20 @@
A bunch of the patches are still adding FindZLIB.cmake - fix.
Make sure for all the Find*.cmake files we're adding we reference
the copy in the toplevel bext/CMake directory unless there's a reason
not to - shouldn't be making per-proejct addfiles/ copies of those
since we'd just have to update each one.
Right now, I don't think we're really handling switching config options
properly. If we enable/disable individual components, dependencies using
those components need to be reset - their old compiles will no longer be
valid if one of their dependencies changes. We need to:
1. clear the output directories, so the contents reflect the new
settings rather than keeping potentially outdated files
2. remove old build directory contents for those projects that have
had a dependency change status, so their compiles end up detecting
and linking to the correct versions. We can't depend on third
party build systems to reset everything correctly, so we need to
start clean.
+48
View File
@@ -0,0 +1,48 @@
# Xmin-backed bundled toolkits
Xmin is a small, self-contained X11 server and client library - see
https://github.com/starseeker/Xmin
An installed Xmin SDK can provide the X11 and OpenGL surface for bext's
bundled Tk and Qt, allowing fully interactive automated GUI application testing
in an environment that has neither X nor OpenGL.
Set `BEXT_XMIN_ROOT` to select the standard Xmin profile:
```sh
cmake -S /path/to/bext -B /path/to/bext-build \
-DBEXT_XMIN_ROOT=/absolute/path/to/xmin-sdk \
-DENABLE_TCL=ON -DENABLE_QT=ON
```
The profile affects only Tk and Qt packages selected for a local build. It
does not enable a package excluded by `USE_*`, `BRLCAD_COMPONENTS`, or an
explicit `DISABLE_*` setting.
* Tk is configured with `--with-xmin` and bext's matching Tk patch.
* Qt is built with the matching Xmin patch, the qxcb desktop-OpenGL profile,
and dependency audits that reject accidental host X11 or OpenGL linkage.
The patches are maintained next to the dependency build logic as
`tk/tk_xmin.patch` and `qt/qt_xmin.patch`. They are tied to the exact Tk
and Qt submodule revisions in this repository. Updating either dependency
therefore requires updating its patch; a stale patch fails during the patch
step rather than silently producing a mixed build.
The Xmin SDK must include toolkit-client support for Tk. Qt additionally
requires the Qt X11 compatibility client and client OpenGL support. Normal
system discovery is unchanged when `BEXT_XMIN_ROOT` is empty.
Qt's installed package metadata retains an explicit dependency on Xmin.
Downstream projects must therefore keep the same SDK discoverable with
`Xmin_DIR` or `CMAKE_PREFIX_PATH`; configuration fails instead of falling back
to host X libraries when that SDK is absent.
## Advanced toolkit patch controls
Unix builds may pass additional, semicolon-separated absolute patch paths in
`TK_EXTRA_PATCHES`, plus additional Tk `configure` arguments in
`TK_CONFIGURE_ARGS`. `QT_EXTRA_PATCHES` provides the corresponding Qt
hook. `QT_XMIN_ROOT` remains available for manually supplied Qt Xmin patches.
These low-level controls are not needed when `BEXT_XMIN_ROOT` selects the
standard profile.
+108
View File
@@ -0,0 +1,108 @@
bext_enable(APPLESEED)
if (ENABLE_APPLESEED)
git_submodule_init(appleseed CMakeLists.txt)
RegisterDeps(APPLESEED)
if (TARGET ZLIB_BLD)
set(Z_PREFIX_STR "brl_")
endif (TARGET ZLIB_BLD)
set(APPLESEED_SIMD_ARGS)
if (APPLE AND CMAKE_SYSTEM_PROCESSOR MATCHES "^(arm64|aarch64)")
list(APPEND APPLESEED_SIMD_ARGS
-DUSE_SSE=OFF
-DUSE_SSE42=OFF
-DUSE_AVX=OFF
-DUSE_AVX2=OFF
-DUSE_F16C=OFF
)
endif ()
ExternalProject_Add(APPLESEED_BLD
URL "${CMAKE_CURRENT_SOURCE_DIR}/appleseed"
BUILD_ALWAYS ${EXT_BUILD_ALWAYS} ${LOG_OPTS}
PATCH_COMMAND ${PATCH_EXECUTABLE};-E;-p1;${PATCH_OPTIONS};-i;${CMAKE_CURRENT_SOURCE_DIR}/appleseed.patch
CMAKE_ARGS
-DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON
${BUILD_TYPE_SPECIFIER}
${APPLESEED_SIMD_ARGS}
$<$<BOOL:${ZLIB_TARGET}>:-DZ_PREFIX=ON>
$<$<BOOL:${ZLIB_TARGET}>:-DZ_PREFIX_STR=${Z_PREFIX_STR}>
-DBOOST_ROOT=$<$<BOOL:${BOOST_TARGET}>:${CMAKE_BUNDLE_INSTALL_PREFIX}>
-DEigen3_ROOT=$<$<BOOL:${EIGEN_BUNDLED}>:${CMAKE_NOBUNDLE_INSTALL_PREFIX}>
-DEMBREE_ROOT=$<$<BOOL:${EMBREE_TARGET}>:${CMAKE_BUNDLE_INSTALL_PREFIX}>
-DISPC_ROOT=$<$<BOOL:${ISPC_TARGET}>:${CMAKE_BUNDLE_INSTALL_PREFIX}>
$<$<BOOL:${ONETBB_TARGET}>:-DTBB_ROOT=${CMAKE_BUNDLE_INSTALL_PREFIX}>
-DJPEG_ROOT=$<$<BOOL:${JPEG_TARGET}>:${CMAKE_BUNDLE_INSTALL_PREFIX}>
-DPNG_ROOT=$<$<BOOL:${PNG_TARGET}>:${CMAKE_BUNDLE_INSTALL_PREFIX}>
-DTIFF_ROOT=$<$<BOOL:${TIFF_TARGET}>:${CMAKE_BUNDLE_INSTALL_PREFIX}>
-DLLVM_ROOT=$<$<BOOL:${LLVM_TARGET}>:${CMAKE_BUNDLE_INSTALL_PREFIX}>
-DLZ4_ROOT=$<$<BOOL:${LZ4_TARGET}>:${CMAKE_BUNDLE_INSTALL_PREFIX}>
-DOPENCOLORIO_ROOT=$<$<BOOL:${OPENCOLORIO_TARGET}>:${CMAKE_BUNDLE_INSTALL_PREFIX}>
-DOPENEXR_ROOT=$<$<BOOL:${OPENEXR_TARGET}>:${CMAKE_BUNDLE_INSTALL_PREFIX}>
-DOPENIMAGEIO_ROOT=$<$<BOOL:${OPENIMAGEIO_TARGET}>:${CMAKE_BUNDLE_INSTALL_PREFIX}>
-DOSL_ROOT=$<$<BOOL:${OSL_TARGET}>:${CMAKE_BUNDLE_INSTALL_PREFIX}>
# appleseed locates the OSL tools (oslc shader compiler, oslinfo query tool)
# via find_program() calls in its FindOSL.cmake that are malformed -- the
# path hint is parsed as an additional program name -- so the tools are only
# found if they happen to be on PATH, otherwise OSL_COMPILER / OSL_QUERY_INFO
# end up empty. That breaks the .osl->.oso build (command degrades to just
# its flags, "'-O2' is not recognized") and the post-build copy of oslinfo
# into the sandbox (cmake -E copy with an empty source). Pass both tools
# explicitly, as appleseed's own CI does; find_program() honors a pre-set var.
-DOSL_COMPILER=$<$<BOOL:${OSL_TARGET}>:${CMAKE_BUNDLE_INSTALL_PREFIX}/${BIN_DIR}/oslc${CMAKE_EXECUTABLE_SUFFIX}>
-DOSL_QUERY_INFO=$<$<BOOL:${OSL_TARGET}>:${CMAKE_BUNDLE_INSTALL_PREFIX}/${BIN_DIR}/oslinfo${CMAKE_EXECUTABLE_SUFFIX}>
-DXERCES_C_ROOT=$<$<BOOL:${XERCES_C_TARGET}>:${CMAKE_BUNDLE_INSTALL_PREFIX}>
-DZLIB_C_ROOT=$<$<BOOL:${ZLIB_TARGET}>:${CMAKE_BUNDLE_INSTALL_PREFIX}>
-DWITH_STUDIO=OFF
-DWITH_BENCH=OFF
-DWITH_TOOLS=OFF
-DWITH_PYTHON2_BINDINGS=OFF
-DWITH_PYTHON3_BINDINGS=OFF
-DINSTALL_TESTS=OFF
-DINSTALL_API_EXAMPLES=OFF
-DWARNINGS_AS_ERRORS=OFF
-DUSE_FIND_PACKAGE_FOR_EMBREE=ON
-DUSE_FIND_PACKAGE_FOR_EXR=ON
-DUSE_FIND_PACKAGE_FOR_LZ4=ON
-DUSE_FIND_PACKAGE_FOR_OCIO=ON
-DUSE_FIND_PACKAGE_FOR_OIIO=ON
-DUSE_FIND_PACKAGE_FOR_OSL=ON
-DUSE_FIND_PACKAGE_FOR_XERCES=ON
-DUSE_FIND_PACKAGE_FOR_ZLIB=ON
-DBIN_DIR=${BIN_DIR}
-DLIB_DIR=${LIB_DIR}
-DBUILD_STATIC_LIBS=${BUILD_STATIC_LIBS}
-DCMAKE_PREFIX_PATH=${CMAKE_BUNDLE_INSTALL_PREFIX}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_INSTALL_PREFIX=${CMAKE_BUNDLE_INSTALL_PREFIX}
-DCMAKE_INSTALL_LIBDIR:PATH=${LIB_DIR}
-DCMAKE_INSTALL_RPATH=${CMAKE_BUNDLE_INSTALL_PREFIX}/${LIB_DIR}
-DOpenEXR_DIR=${CMAKE_BUNDLE_INSTALL_PREFIX}/${LIB_DIR}/cmake/OpenEXR
LOG_CONFIGURE ${EXT_BUILD_QUIET}
LOG_BUILD ${EXT_BUILD_QUIET}
LOG_INSTALL ${EXT_BUILD_QUIET}
LOG_OUTPUT_ON_FAILURE ${EXT_BUILD_QUIET}
STEP_TARGETS install
)
TargetInstallDeps(APPLESEED APPLESEED_DEPENDS)
# Copy the license into position in CMAKE_BUNDLE_INSTALL_PREFIX
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/appleseed/LICENSE.txt
${DOC_LICENSE_DIR}/appleseed.txt
COPYONLY
)
endif (ENABLE_APPLESEED)
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
Submodule appleseed/appleseed added at 05e66fd424
+17
View File
@@ -0,0 +1,17 @@
BOOST
EIGEN
EMBREE
JPEG
LLVM
LZ4
ONETBB
OPENCOLORIO
OPENEXR
OPENIMAGEIO
OSL
PATCH
PNG
TIFF
XERCES_C
ZLIB
+152
View File
@@ -0,0 +1,152 @@
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 74ed663..ba8c28e 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -224,9 +224,28 @@ if (USE_STATIC_BOOST)
endif ()
find_package(Boost 1.70 REQUIRED COMPONENTS atomic chrono date_time filesystem regex system thread wave)
add_definitions(-DBOOST_FILESYSTEM_VERSION=3 -DBOOST_FILESYSTEM_NO_DEPRECATED -DBOOST_ALL_DYN_LINK)
+if (MSVC)
+ # Boost 1.85's auto_link.hpp caps its MSVC toolset tag at vc143 (VS2022), but
+ # the bundled Boost is built with the newer (VS2026) toolset and installed as
+ # vc145. With BOOST_ALL_DYN_LINK the auto-link #pragma comment(lib, ...)
+ # directives would otherwise request boost_*-vc143-mt-x64-1_85.lib, which do
+ # not exist (LNK1104). Override the tag to match the bundled libraries.
+ add_definitions(-DBOOST_LIB_TOOLSET="vc145")
+endif ()
include_directories(SYSTEM ${Boost_INCLUDE_DIRS})
link_directories(${Boost_LIBRARY_DIRS})
find_package(OSL REQUIRED)
+# appleseed links OSL via the oslcomp/oslexec/oslquery_LIBRARY_IMP variables,
+# which are only populated by appleseed's module-mode FindOSL.cmake. When OSL is
+# resolved in CONFIG mode instead (e.g. CMAKE_FIND_PACKAGE_PREFER_CONFIG=ON with
+# a bundled OSLConfig.cmake), those variables stay empty and OSL is silently left
+# out of the link (unresolved OSL_v1_xx::ShadingSystem/RendererServices/... at
+# link time). Fall back to the imported targets provided by OSLConfig.
+if (TARGET OSL::oslexec AND NOT oslexec_LIBRARY_IMP)
+ set(oslcomp_LIBRARY_IMP OSL::oslcomp)
+ set(oslexec_LIBRARY_IMP OSL::oslexec)
+ set(oslquery_LIBRARY_IMP OSL::oslquery)
+endif ()
-find_package(OpenEXR REQUIRED)
+find_package(OpenEXR MODULE REQUIRED)
find_package(OpenImageIO REQUIRED)
@@ -275,7 +294,6 @@ endif ()
include_directories(
${IMATH_INCLUDE_DIRS}
- ${IMATH_INCLUDE_DIRS}/OpenEXR/
${LZ4_INCLUDE_DIR}
${OPENCOLORIO_INCLUDE_DIRS}
${OPENEXR_INCLUDE_DIRS}
@@ -674,3 +692,11 @@ endif ()
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
+find_package(OpenEXR REQUIRED)
+get_target_property(IMATH_INCLUDES Imath::Imath INTERFACE_INCLUDE_DIRECTORIES)
+if (APPLE)
+foreach (IMATH_INCLUDE_DIR IN LISTS IMATH_INCLUDES)
+ string (REGEX REPLACE "/Imath/?$" "" IMATH_INCLUDE_DIR "${IMATH_INCLUDE_DIR}")
+ add_compile_options("-Wp,-I${IMATH_INCLUDE_DIR}")
+endforeach ()
+endif ()
diff --git a/cmake/FindOpenEXR.cmake b/cmake/FindOpenEXR.cmake
index 00c769d..0f38a0d 100644
--- a/cmake/FindOpenEXR.cmake
+++ b/cmake/FindOpenEXR.cmake
@@ -56,16 +56,22 @@ if (TARGET OpenEXR::OpenEXR AND TARGET Imath::Imath)
# Mimic old style variables
set (OPENEXR_VERSION ${OpenEXR_VERSION})
get_target_property(IMATH_INCLUDES Imath::Imath INTERFACE_INCLUDE_DIRECTORIES)
+ set (IMATH_INCLUDE_DIRS ${IMATH_INCLUDES})
+ string (REGEX REPLACE "/Imath/?$" "" IMATH_INCLUDE_DIRS "${IMATH_INCLUDE_DIRS}")
+ set (IMATH_INCLUDE_DIR ${IMATH_INCLUDES})
get_target_property(ILMBASE_INCLUDES Imath::Imath INTERFACE_INCLUDE_DIRECTORIES)
- get_target_property(ILMBASE_IMATH_LIBRARY Imath::Imath INTERFACE_LINK_LIBRARIES)
- get_target_property(IMATH_LIBRARY Imath::Imath INTERFACE_LINK_LIBRARIES)
- get_target_property(OPENEXR_IEX_LIBRARY OpenEXR::Iex INTERFACE_LINK_LIBRARIES)
- get_target_property(OPENEXR_ILMTHREAD_LIBRARY OpenEXR::IlmThread INTERFACE_LINK_LIBRARIES)
+ set (ILMBASE_IMATH_LIBRARY Imath::Imath)
+ set (IMATH_LIBRARY Imath::Imath)
+ set (OPENEXR_IEX_LIBRARY OpenEXR::Iex)
+ set (OPENEXR_ILMTHREAD_LIBRARY OpenEXR::IlmThread)
set (ILMBASE_LIBRARIES ${ILMBASE_IMATH_LIBRARY})
set (ILMBASE_FOUND true)
get_target_property(OPENEXR_INCLUDES OpenEXR::OpenEXR INTERFACE_INCLUDE_DIRECTORIES)
- get_target_property(OPENEXR_ILMIMF_LIBRARY OpenEXR::OpenEXR INTERFACE_LINK_LIBRARIES)
+ set (OPENEXR_INCLUDE_DIRS ${OPENEXR_INCLUDES})
+ string (REGEX REPLACE "/OpenEXR/?$" "" OPENEXR_INCLUDE_DIRS "${OPENEXR_INCLUDE_DIRS}")
+ set (OPENEXR_INCLUDE_DIR ${OPENEXR_INCLUDES})
+ set (OPENEXR_ILMIMF_LIBRARY OpenEXR::OpenEXR)
set (OPENEXR_LIBRARIES ${OPENEXR_ILMIMF_LIBRARY} ${OPENEXR_IEX_LIBRARY} ${OPENEXR_ILMTHREAD_LIBRARY} ${ILMBASE_LIBRARIES})
set (OPENEXR_FOUND true)
diff --git a/src/thirdparty/bcd/bcd/Denoiser.cpp b/src/thirdparty/bcd/bcd/Denoiser.cpp
index 109ec87..ef7ed8e 100644
--- a/src/thirdparty/bcd/bcd/Denoiser.cpp
+++ b/src/thirdparty/bcd/bcd/Denoiser.cpp
@@ -125,7 +125,7 @@ bool Denoiser::denoise()
i,
boost::ref(abortRequested)));
- denoiseThreads.push_back(move(t));
+ denoiseThreads.push_back(std::move(t));
startPixelIndexIt = endPixelIndexIt;
}
diff --git a/src/appleseed/main/allocator.cpp b/src/appleseed/main/allocator.cpp
--- a/src/appleseed/main/allocator.cpp
+++ b/src/appleseed/main/allocator.cpp
@@ -58,6 +58,7 @@
#include <cassert>
#include <cstdint>
#include <cstdio>
+#include <cstdlib>
#include <cstring>
#include <ctime>
#include <exception>
@@ -501,7 +502,14 @@
if (size < 1)
size = 1;
- void* ptr = aligned_malloc(size, MemoryAlignment);
+ /* BRL-CAD PATCH: use plain malloc (already 16-byte aligned on x64)
+ * instead of aligned_malloc. This operator new/delete override only
+ * applies inside appleseed.dll, so std::strings/objects allocated by the
+ * default CRT allocator in other modules (art.exe, brl-cad DLLs,
+ * msvcp140d) and freed here would hit aligned_free() on a non-aligned
+ * block and crash (seen in foundation::SearchPaths::do_to_string at
+ * render start). malloc/free keep every module on one shared CRT heap. */
+ void* ptr = malloc(size);
if (!ptr)
throw std::bad_alloc();
@@ -514,7 +522,7 @@
if (!ptr)
return;
- aligned_free(ptr);
+ free(ptr);
}
}
diff --git a/src/appleseed/renderer/device/cpu/cpurenderdevice.cpp b/src/appleseed/renderer/device/cpu/cpurenderdevice.cpp
--- a/src/appleseed/renderer/device/cpu/cpurenderdevice.cpp
+++ b/src/appleseed/renderer/device/cpu/cpurenderdevice.cpp
@@ -86,7 +86,12 @@
m_texture_system,
m_error_handler);
m_shading_system->attribute("lockgeom", 1);
- m_shading_system->attribute("colorspace", "Linear");
+ /* BRL-CAD PATCH: OSL's working color space must be a name OSL knows (its
+ * default is "Rec709", the linear-Rec709 working space). The upstream
+ * "Linear" is not a recognized OSL color space, so OSL logged
+ * "Unknown color space \"Linear\"" on every color transform and flagged an
+ * error (nonzero process exit) even though rendering succeeded. */
+ m_shading_system->attribute("colorspace", "Rec709");
m_shading_system->attribute("commonspace", "world");
m_shading_system->attribute("statistics:level", 1);
m_shading_system->attribute(
+72
View File
@@ -0,0 +1,72 @@
# Decide if we're using assetimport.
# Also, assetimport is used directly by a libgcv plugin and (until we update to Manifold 3.0)
# is needed by Manifold, which is used by librt
cad_enable(ASSETIMPORT "libgcv;librt")
bext_enable(ASSETIMPORT)
# Decision made
if (ENABLE_ASSETIMPORT)
git_submodule_init(assimp CMakeLists.txt)
RegisterDeps(ASSETIMPORT)
if (TARGET ZLIB_BLD)
set(Z_PREFIX_STR "brl_")
endif (TARGET ZLIB_BLD)
ExternalProject_Add(ASSETIMPORT_BLD
URL "${CMAKE_CURRENT_SOURCE_DIR}/assimp"
BUILD_ALWAYS ${EXT_BUILD_ALWAYS} ${LOG_OPTS}
PATCH_COMMAND ${PATCH_EXECUTABLE};-E;-p1;${PATCH_OPTIONS};-i;${CMAKE_CURRENT_SOURCE_DIR}/assetimport_CMake.patch
COMMAND ${PATCH_EXECUTABLE};-E;-p1;${PATCH_OPTIONS};-i;${CMAKE_CURRENT_SOURCE_DIR}/assetimport_stb.patch
COMMAND ${CMAKE_COMMAND};-E;remove;<SOURCE_DIR>/cmake-modules/FindZLIB.cmake
COMMAND ${CMAKE_COMMAND};-E;copy;${PROJECT_SOURCE_DIR}/CMake/FindZLIB.cmake;<SOURCE_DIR>/cmake-modules/FindZLIB.cmake
CMAKE_ARGS
${BUILD_TYPE_SPECIFIER}
$<$<BOOL:${ZLIB_TARGET}>:-DZ_PREFIX=ON>
$<$<BOOL:${ZLIB_TARGET}>:-DZ_PREFIX_STR=${Z_PREFIX_STR}>
-DZLIB_ROOT=$<$<BOOL:${ZLIB_TARGET}>:${CMAKE_BUNDLE_INSTALL_PREFIX}>
-Dpugixml_ROOT=$<$<BOOL:${PUGIXML_TARGET}>:${CMAKE_BUNDLE_INSTALL_PREFIX}>
-DBIN_DIR=${BIN_DIR}
-DLIB_DIR=${LIB_DIR}
-DBUILD_STATIC_LIBS=${BUILD_STATIC_LIBS}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_INSTALL_PREFIX=${CMAKE_BUNDLE_INSTALL_PREFIX}
-DCMAKE_INSTALL_RPATH=${CMAKE_BUNDLE_INSTALL_PREFIX}/${LIB_DIR}
-DCMAKE_INSTALL_LIBDIR:PATH=${LIB_DIR}
-DASSIMP_BUILD_USE_CCACHE=OFF
-DASSIMP_BUILD_ASSIMP_TOOLS=OFF
-DASSIMP_BUILD_TESTS=OFF
-DASSIMP_BUILD_MINIZIP=ON
-DASSIMP_BUILD_ZLIB=OFF
-DASSIMP_INJECT_DEBUG_POSTFIX=OFF
-DASSIMP_INSTALL_PDB=OFF
DEPENDS ${ASSETIMPORT_DEPS}
LOG_CONFIGURE ${EXT_BUILD_QUIET}
LOG_BUILD ${EXT_BUILD_QUIET}
LOG_INSTALL ${EXT_BUILD_QUIET}
LOG_OUTPUT_ON_FAILURE ${EXT_BUILD_QUIET}
STEP_TARGETS install
)
TargetInstallDeps(ASSETIMPORT ASSETIMPORT_DEPENDS)
# Copy the license into position in CMAKE_BUNDLE_INSTALL_PREFIX
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/assimp/LICENSE
${DOC_LICENSE_DIR}/assetimport.txt
COPYONLY
)
endif (ENABLE_ASSETIMPORT)
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
+4
View File
@@ -0,0 +1,4 @@
PATCH
PUGIXML
ZLIB
+98
View File
@@ -0,0 +1,98 @@
--- assimp/CMakeLists.txt 2025-07-22 16:48:44.626337172 -0400
+++ ASSETIMPORT_BLD/CMakeLists.txt 2025-07-22 16:28:32.943270150 -0400
@@ -37,6 +37,7 @@
SET(CMAKE_POLICY_DEFAULT_CMP0012 NEW)
SET(CMAKE_POLICY_DEFAULT_CMP0074 NEW)
SET(CMAKE_POLICY_DEFAULT_CMP0092 NEW)
+SET(CMAKE_POLICY_DEFAULT_CMP0144 NEW)
CMAKE_MINIMUM_REQUIRED( VERSION 3.22 )
--- assimp/cmake-modules/assimp-plain-config.cmake.in 2025-07-22 16:48:43.776340530 -0400
+++ ASSETIMPORT_BLD/cmake-modules/assimp-plain-config.cmake.in 2025-07-22 16:28:33.458267904 -0400
@@ -1,5 +1,7 @@
@PACKAGE_INIT@
+find_package(ZLIB MODULE REQUIRED)
+
include("${CMAKE_CURRENT_LIST_DIR}/@TARGETS_EXPORT_NAME@.cmake")
set(ASSIMP_ROOT_DIR ${PACKAGE_PREFIX_DIR})
diff -Naur assimp/code/CMakeLists.txt ASSETIMPORT_BLD/code/CMakeLists.txt
--- assimp/code/CMakeLists.txt 2026-02-04 16:56:22.592686074 -0500
+++ ASSETIMPORT_BLD/code/CMakeLists.txt 2026-02-04 16:55:19.040925630 -0500
@@ -1113,18 +1113,19 @@
ENDIF() # IF (ASSIMP_BUILD_USD_IMPORTER)
# pugixml
-IF(ASSIMP_HUNTER_ENABLED)
- hunter_add_package(pugixml)
- find_package(pugixml CONFIG REQUIRED)
-ELSEIF(NOT TARGET pugixml::pugixml)
- SET( Pugixml_SRCS
- ../contrib/pugixml/src/pugiconfig.hpp
- ../contrib/pugixml/src/pugixml.cpp
- ../contrib/pugixml/src/pugixml.hpp
- )
- INCLUDE_DIRECTORIES("../contrib/pugixml/src")
- SOURCE_GROUP( Contrib\\Pugixml FILES ${Pugixml_SRCS})
-ENDIF()
+#IF(ASSIMP_HUNTER_ENABLED)
+# hunter_add_package(pugixml)
+# find_package(pugixml CONFIG REQUIRED)
+#ELSEIF(NOT TARGET pugixml::pugixml)
+# SET( Pugixml_SRCS
+# ../contrib/pugixml/src/pugiconfig.hpp
+# ../contrib/pugixml/src/pugixml.cpp
+# ../contrib/pugixml/src/pugixml.hpp
+# )
+# INCLUDE_DIRECTORIES("../contrib/pugixml/src")
+# SOURCE_GROUP( Contrib\\Pugixml FILES ${Pugixml_SRCS})
+#ENDIF()
+find_package(pugixml REQUIRED)
# utf8
IF(ASSIMP_HUNTER_ENABLED)
@@ -1414,6 +1415,10 @@
$<INSTALL_INTERFACE:${ASSIMP_INCLUDE_INSTALL_DIR}>
)
+if (TARGET pugixml)
+ set(PUGIXML_LIBRARIES pugixml)
+endif (TARGET pugixml)
+
IF(ASSIMP_HUNTER_ENABLED)
TARGET_LINK_LIBRARIES(assimp
PUBLIC
@@ -1435,7 +1440,8 @@
target_link_libraries(assimp PRIVATE ${draco_LIBRARIES})
endif()
ELSE()
- TARGET_LINK_LIBRARIES(assimp ${ZLIB_LIBRARIES} ${OPENDDL_PARSER_LIBRARIES})
+ find_package(ZLIB MODULE REQUIRED)
+ TARGET_LINK_LIBRARIES(assimp ZLIB::ZLIB ${PUGIXML_LIBRARIES} ${OPENDDL_PARSER_LIBRARIES})
if (ASSIMP_BUILD_DRACO)
target_link_libraries(assimp ${draco_LIBRARIES})
endif()
@@ -1453,6 +1459,7 @@
TARGET_LINK_LIBRARIES(assimp ${C4D_EXTRA_LIBRARIES})
ENDIF ()
+if(0)
if( MSVC )
# in order to prevent DLL hell, each of the DLLs have to be suffixed with the major version and msvc prefix
# CMake 3.12 added a variable for this
@@ -1499,11 +1506,12 @@
target_compile_definitions(assimp PUBLIC WindowsStore)
TARGET_LINK_LIBRARIES(assimp advapi32)
endif()
+endif(0)
SET_TARGET_PROPERTIES( assimp PROPERTIES
VERSION ${ASSIMP_VERSION}
SOVERSION ${ASSIMP_SOVERSION} # use full version
- OUTPUT_NAME assimp${LIBRARY_SUFFIX}
+ #OUTPUT_NAME assimp${LIBRARY_SUFFIX}
)
if (APPLE)
+12
View File
@@ -0,0 +1,12 @@
diff -Naur assimp/contrib/stb/stb_image.h ASSETIMPORT_BLD/contrib/stb/stb_image.h
--- assimp/contrib/stb/stb_image.h 2026-02-05 14:22:20.343920277 -0500
+++ ASSETIMPORT_BLD/contrib/stb/stb_image.h 2026-02-05 14:24:43.112400148 -0500
@@ -5079,7 +5079,7 @@
{
stbi_uc palette[1024], pal_img_n=0;
stbi_uc has_trans=0, tc[3]={0};
- stbi__uint16 tc16[3];
+ stbi__uint16 tc16[3]={0};
stbi__uint32 ioff=0, idata_limit=0, i, pal_len=0;
int first=1,k,interlace=0, color=0, is_iphone=0;
stbi__context *s = z->s;
Submodule assetimport/assimp added at cfc14a26d2
+55
View File
@@ -0,0 +1,55 @@
# Astyle is not bundled with BRL-CAD - it is a source code formatting tool,
# optionally used during compilation to validate our style guidelines.
bext_enable_all_default(ASTYLE astyle)
if (NOT ENABLE_ASTYLE)
find_program(ASTYLE_EXECUTABLE astyle)
mark_as_advanced(ASTYLE_EXECUTABLE)
if (NOT ASTYLE_EXECUTABLE AND NOT DEFINED ENABLE_ASTYLE)
set(ENABLE_ASTYLE "ON" CACHE BOOL "Enable astyle build")
endif (NOT ASTYLE_EXECUTABLE AND NOT DEFINED ENABLE_ASTYLE)
endif (NOT ENABLE_ASTYLE)
set(ENABLE_ASTYLE "${ENABLE_ASTYLE}" CACHE BOOL "Enable astyle build")
if (ENABLE_ASTYLE)
git_submodule_init(astyle CMakeLists.txt)
RegisterDeps(ASTYLE)
ExternalProject_Add(ASTYLE_BLD
URL "${CMAKE_CURRENT_SOURCE_DIR}/astyle"
BUILD_ALWAYS ${EXT_BUILD_ALWAYS} ${LOG_OPTS}
PATCH_COMMAND ${PATCH_EXECUTABLE};-E;-p1;${PATCH_OPTIONS};-i;${CMAKE_CURRENT_SOURCE_DIR}/astyle.patch
CMAKE_ARGS
${BUILD_TYPE_SPECIFIER}
-DBIN_DIR=${BIN_DIR}
-DLIB_DIR=${LIB_DIR}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_INSTALL_PREFIX=${CMAKE_NOBUNDLE_INSTALL_PREFIX}
-DCMAKE_INSTALL_LIBDIR:PATH=${LIB_DIR}
-DCMAKE_INSTALL_RPATH=${CMAKE_NOBUNDLE_INSTALL_PREFIX}/${LIB_DIR}
-DBUILD_SHARED_LIBS=OFF
-DBUILD_STATIC_LIBS=OFF
-DBUILD_JAVA_LIBS=OFF
LOG_CONFIGURE ${EXT_BUILD_QUIET}
LOG_BUILD ${EXT_BUILD_QUIET}
LOG_INSTALL ${EXT_BUILD_QUIET}
LOG_OUTPUT_ON_FAILURE ${EXT_BUILD_QUIET}
STEP_TARGETS install
)
TargetInstallDeps(ASTYLE ASTYLE_DEPENDS)
endif (ENABLE_ASTYLE)
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
Submodule
+1
Submodule astyle/astyle added at 848edc8206
+2
View File
@@ -0,0 +1,2 @@
PATCH
+173
View File
@@ -0,0 +1,173 @@
diff -Naur astyle/CMakeLists.txt ASTYLE_BLD/CMakeLists.txt
--- astyle/CMakeLists.txt 2026-09-09 09:23:57.197122193 -0400
+++ ASTYLE_BLD/CMakeLists.txt 2026-09-09 09:17:33.423173910 -0400
@@ -17,6 +17,8 @@
endif()
set(CMAKE_CXX_STANDARD 17)
+set(CMAKE_CXX_EXTENSIONS OFF)
+set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Linux Soname Version
set(MAJORVER 3)
@@ -72,151 +74,13 @@
target_compile_options(astyle PRIVATE /utf-8)
endif()
-# Set build-specific compile options
-if(BUILD_SHARED_LIBS OR BUILD_STATIC_LIBS)
- if(BUILD_JAVA_LIBS)
- find_package(JNI)
- if (NOT JNI_FOUND)
- set(err_jni "Use '-DJAVA_HOME=<JNI Directory>' to define the Java path")
- message(FATAL_ERROR ${err_jni})
- endif()
- target_compile_options(astyle PRIVATE -DASTYLE_JNI)
- target_include_directories(astyle PRIVATE ${JNI_INCLUDE_DIRS})
- else()
- target_compile_options(astyle PRIVATE -DASTYLE_LIB)
- endif()
- # Windows DLL exports removed
- set_property(TARGET astyle PROPERTY DEFINE_SYMBOL "")
- # Linux solib version added
- set_property(TARGET astyle PROPERTY VERSION ${SOLIBVER})
- set_property(TARGET astyle PROPERTY SOVERSION ${MAJORVER})
-endif()
-
-
-# Linker options:
-
-# Strip release builds
-if(CMAKE_BUILD_TYPE STREQUAL "Release" OR CMAKE_BUILD_TYPE STREQUAL "MinSizeRel")
- if(NOT BUILD_STATIC_LIBS AND NOT BORLAND AND NOT MSVC)
- add_custom_command(TARGET astyle POST_BUILD
- COMMAND ${CMAKE_STRIP} $<TARGET_FILE_NAME:astyle>)
- endif()
-endif()
-# Shared library options
-if(BUILD_SHARED_LIBS)
- set(CMAKE_SHARED_LIBRARY_LINK_CXX_FLAGS "") # remove -rdynamic
- if(${CMAKE_CXX_COMPILER_ID} STREQUAL "Intel")
- # need static linking because cannot find the intel libraries at runtime
- set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -static-intel")
- elseif(MINGW)
- # minGW dlls don't work
- # tdm-gcc dlls work with everything except python
- set(CMAKE_SHARED_LINKER_FLAGS
- "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--add-stdcall-alias -Wl,--dll")
- elseif(BORLAND)
- # use a development environment to compile Borland dlls
- endif()
-endif()
-
-
-# Installation options:
-
-# Define install directories
-# To uninstall 'xargs rm < install_manifest.txt'
-# Default linux install prefix is /usr/local"
-# This may be modified by -DCMAKE_INSTALL_PREFIX=
-# Default Win32 install prefix is not used (C:/Program Files (x86))
-
-option(INSTALL_DOC ON)
-
-if(BUILD_SHARED_LIBS OR BUILD_STATIC_LIBS)
- if(NOT WIN32)
- install(TARGETS astyle DESTINATION lib)
- endif()
-else()
- if(SKBUILD)
- install(TARGETS astyle DESTINATION "${SKBUILD_SCRIPTS_DIR}")
- if(INSTALL_DOC)
- install(FILES ${DOCS} DESTINATION "${SKBUILD_DATA_DIR}/share/doc/astyle/html")
- install(FILES ${MAN} DESTINATION "${SKBUILD_DATA_DIR}/share/man/man1")
- endif()
- elseif(WIN32)
- set(pf86 "PROGRAMFILES(x86)")
- set(prog_files $ENV{${pf86}})
- if(NOT ${prog_files})
- set(prog_files $ENV{PROGRAMFILES})
- endif()
- install(TARGETS astyle DESTINATION "${prog_files}/AStyle")
- install(FILES ${DOCS} DESTINATION "${prog_files}/AStyle/doc")
- elseif(APPLE)
- # install to the default /usr/local/bin because of SIP restrictions
- install(TARGETS astyle DESTINATION "${CMAKE_INSTALL_PREFIX}/bin")
- if(INSTALL_DOC)
- install(FILES ${DOCS} DESTINATION "${CMAKE_INSTALL_PREFIX}/share/doc/astyle/html")
- endif()
- else()
- # change default to /usr/bin, the same as package installs
- if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT)
- set(CMAKE_INSTALL_PREFIX "/usr")
- endif()
- install(TARGETS astyle DESTINATION "${CMAKE_INSTALL_PREFIX}/bin")
- if(INSTALL_DOC)
- install(FILES ${DOCS} DESTINATION "${CMAKE_INSTALL_PREFIX}/share/doc/astyle/html")
- install(FILES ${MAN} DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man1")
- endif()
- endif()
-endif()
-
-
-# output files:
+install(TARGETS astyle
+ LIBRARY DESTINATION lib
+ ARCHIVE DESTINATION lib
+ RUNTIME DESTINATION bin
+ )
+install(FILES ${DOCS} DESTINATION share/doc/astyle/html)
+if (MAN)
+ INSTALL(FILES ${MAN} DESTINATION man/man1)
+endif (MAN)
-# Set output file names if different than 'astyle'
-if(BUILD_JAVA_LIBS)
- if(WIN32)
- set_property(TARGET astyle PROPERTY OUTPUT_NAME AStyle32j)
- set_property(TARGET astyle PROPERTY PREFIX "")
- else()
- set_property(TARGET astyle PROPERTY OUTPUT_NAME astylej)
- endif()
-elseif(BUILD_SHARED_LIBS)
- if(WIN32)
- set_property(TARGET astyle PROPERTY OUTPUT_NAME AStyle32)
- set_property(TARGET astyle PROPERTY PREFIX "")
- endif()
-elseif(BUILD_STATIC_LIBS)
- if(WIN32)
- set_property(TARGET astyle PROPERTY OUTPUT_NAME AStyleLib)
- set_property(TARGET astyle PROPERTY PREFIX "")
- endif()
-else()
- if(WIN32)
- set_property(TARGET astyle PROPERTY OUTPUT_NAME AStyle)
- endif()
-endif()
-
-
-# print info:
-
-if(BUILD_JAVA_LIBS)
- SET(ASTYLE_BUILD_TYPE "Java Shared Library")
-elseif(BUILD_SHARED_LIBS)
- SET(ASTYLE_BUILD_TYPE "Shared Library")
-elseif(BUILD_STATIC_LIBS)
- SET(ASTYLE_BUILD_TYPE "Static Library")
-else()
- SET(ASTYLE_BUILD_TYPE "Executable")
-endif()
-
-# Display build information
-
-message( STATUS "---------- General Configuration ----------" )
-message( STATUS )
-message( STATUS "CMake Generator: ${CMAKE_GENERATOR}" )
-message( STATUS "CMake Compiler: ${CMAKE_CXX_COMPILER_ID}" )
-message( STATUS "AStyle Build: ${ASTYLE_BUILD_TYPE}" )
-message( STATUS "AStyle Configuration: ${CMAKE_BUILD_TYPE}" )
-if( BUILD_JAVA_LIBS )
- message( STATUS "Java Include Path: ${JAVA_INCLUDE_PATH}" )
-endif()
-message( STATUS )
-message( STATUS "-------------------------------------------" )
+61
View File
@@ -0,0 +1,61 @@
bext_enable(Boost)
if (ENABLE_BOOST)
git_submodule_init(boost CMakeLists.txt)
RegisterDeps(BOOST)
if (TARGET ZLIB_BLD)
set(Z_PREFIX_STR "brl_")
endif (TARGET ZLIB_BLD)
ExternalProject_Add(BOOST_BLD
URL "${CMAKE_CURRENT_SOURCE_DIR}/boost"
BUILD_ALWAYS ${EXT_BUILD_ALWAYS} ${LOG_OPTS}
PATCH_COMMAND ${PATCH_EXECUTABLE};-E;-p1;${PATCH_OPTIONS};-i;${CMAKE_CURRENT_SOURCE_DIR}/boost_cmake.patch
COMMAND ${CMAKE_COMMAND};-E;copy;${PROJECT_SOURCE_DIR}/CMake/FindZLIB.cmake;<SOURCE_DIR>/libs/iostreams/cmake/FindZLIB.cmake
COMMAND ${CMAKE_COMMAND};-E;copy;${PROJECT_SOURCE_DIR}/boost/FindICU.cmake;<SOURCE_DIR>/libs/locale/cmake/FindICU.cmake
CMAKE_ARGS
${BUILD_TYPE_SPECIFIER}
$<$<BOOL:${ZLIB_TARGET}>:-DZ_PREFIX=ON>
$<$<BOOL:${ZLIB_TARGET}>:-DZ_PREFIX_STR=${Z_PREFIX_STR}>
-DZLIB_ROOT=$<$<BOOL:${ZLIB_TARGET}>:${CMAKE_BUNDLE_INSTALL_PREFIX}>
-DICU_ROOT=$<$<BOOL:${ICU_TARGET}>:${CMAKE_BUNDLE_INSTALL_PREFIX}>
-DZSTD_ROOT=$<$<BOOL:${ZSTD_TARGET}>:${CMAKE_BUNDLE_INSTALL_PREFIX}>
-DBOOST_IOSTREAMS_ENABLE_BZIP2=OFF
-DBOOST_IOSTREAMS_ENABLE_LZMA=OFF
-DBIN_DIR=${BIN_DIR}
-DLIB_DIR=${LIB_DIR}
-DBUILD_SHARED_LIBS=ON
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_INSTALL_PREFIX=${CMAKE_BUNDLE_INSTALL_PREFIX}
-DCMAKE_INSTALL_RPATH=${CMAKE_BUNDLE_INSTALL_PREFIX}/${LIB_DIR}
-DCMAKE_INSTALL_LIBDIR:PATH=${LIB_DIR}
LOG_CONFIGURE ${EXT_BUILD_QUIET}
LOG_BUILD ${EXT_BUILD_QUIET}
LOG_INSTALL ${EXT_BUILD_QUIET}
LOG_OUTPUT_ON_FAILURE ${EXT_BUILD_QUIET}
STEP_TARGETS install
)
TargetInstallDeps(BOOST BOOST_DEPENDS)
# Copy the license into position in CMAKE_BUNDLE_INSTALL_PREFIX
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/boost/LICENSE_1_0.txt
${DOC_LICENSE_DIR}/boost.txt
COPYONLY
)
endif (ENABLE_BOOST)
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
+437
View File
@@ -0,0 +1,437 @@
# Distributed under the OSI-approved BSD 3-Clause License. See accompanying
# file Copyright.txt or https://cmake.org/licensing for details.
#[=======================================================================[.rst:
FindICU
-------
.. versionadded:: 3.7
Find the International Components for Unicode (ICU) libraries and
programs.
This module supports multiple components.
Components can include any of: ``data``, ``i18n``, ``io``, ``le``,
``lx``, ``test``, ``tu`` and ``uc``.
Note that on Windows ``data`` is named ``dt`` and ``i18n`` is named
``in``; any of the names may be used, and the appropriate
platform-specific library name will be automatically selected.
.. versionadded:: 3.11
Added support for static libraries on Windows.
This module reports information about the ICU installation in
several variables. General variables::
ICU_VERSION - ICU release version
ICU_FOUND - true if the main programs and libraries were found
ICU_LIBRARIES - component libraries to be linked
ICU_INCLUDE_DIRS - the directories containing the ICU headers
Imported targets::
ICU::<C>
Where ``<C>`` is the name of an ICU component, for example
``ICU::i18n``; ``<C>`` is lower-case.
ICU programs are reported in::
ICU_GENCNVAL_EXECUTABLE - path to gencnval executable
ICU_ICUINFO_EXECUTABLE - path to icuinfo executable
ICU_GENBRK_EXECUTABLE - path to genbrk executable
ICU_ICU-CONFIG_EXECUTABLE - path to icu-config executable
ICU_GENRB_EXECUTABLE - path to genrb executable
ICU_GENDICT_EXECUTABLE - path to gendict executable
ICU_DERB_EXECUTABLE - path to derb executable
ICU_PKGDATA_EXECUTABLE - path to pkgdata executable
ICU_UCONV_EXECUTABLE - path to uconv executable
ICU_GENCFU_EXECUTABLE - path to gencfu executable
ICU_MAKECONV_EXECUTABLE - path to makeconv executable
ICU_GENNORM2_EXECUTABLE - path to gennorm2 executable
ICU_GENCCODE_EXECUTABLE - path to genccode executable
ICU_GENSPREP_EXECUTABLE - path to gensprep executable
ICU_ICUPKG_EXECUTABLE - path to icupkg executable
ICU_GENCMN_EXECUTABLE - path to gencmn executable
ICU component libraries are reported in::
ICU_<C>_FOUND - ON if component was found; ``<C>`` is upper-case.
ICU_<C>_LIBRARIES - libraries for component; ``<C>`` is upper-case.
ICU datafiles are reported in::
ICU_MAKEFILE_INC - Makefile.inc
ICU_PKGDATA_INC - pkgdata.inc
This module reads hints about search results from::
ICU_ROOT - the root of the ICU installation
The environment variable ``ICU_ROOT`` may also be used; the
ICU_ROOT variable takes precedence.
The following cache variables may also be set::
ICU_<P>_EXECUTABLE - the path to executable <P>; ``<P>`` is upper-case.
ICU_INCLUDE_DIR - the directory containing the ICU headers
ICU_<C>_LIBRARY - the library for component <C>; ``<C>`` is upper-case.
.. note::
In most cases none of the above variables will require setting,
unless multiple ICU versions are available and a specific version
is required.
Other variables one may set to control this module are::
ICU_DEBUG - Set to ON to enable debug output from FindICU.
#]=======================================================================]
# Written by Roger Leigh <rleigh@codelibre.net>
set(icu_programs
gencnval
icuinfo
genbrk
icu-config
genrb
gendict
derb
pkgdata
uconv
gencfu
makeconv
gennorm2
genccode
gensprep
icupkg
gencmn)
set(icu_data
Makefile.inc
pkgdata.inc)
# The ICU checks are contained in a function due to the large number
# of temporary variables needed.
function(_ICU_FIND)
# Set up search paths, taking compiler into account. Search ICU_ROOT,
# with ICU_ROOT in the environment as a fallback if unset.
if(ICU_ROOT)
list(APPEND icu_roots "${ICU_ROOT}")
else()
if(NOT "$ENV{ICU_ROOT}" STREQUAL "")
file(TO_CMAKE_PATH "$ENV{ICU_ROOT}" NATIVE_PATH)
list(APPEND icu_roots "${NATIVE_PATH}")
set(ICU_ROOT "${NATIVE_PATH}"
CACHE PATH "Location of the ICU installation" FORCE)
endif()
endif()
# Find include directory
list(APPEND icu_include_suffixes "include")
find_path(ICU_INCLUDE_DIR
NAMES "unicode/utypes.h"
HINTS ${icu_roots}
PATH_SUFFIXES ${icu_include_suffixes}
DOC "ICU include directory")
set(ICU_INCLUDE_DIR "${ICU_INCLUDE_DIR}" PARENT_SCOPE)
# Get version
if(ICU_INCLUDE_DIR AND EXISTS "${ICU_INCLUDE_DIR}/unicode/uvernum.h")
file(STRINGS "${ICU_INCLUDE_DIR}/unicode/uvernum.h" icu_header_str
REGEX "^#define[\t ]+U_ICU_VERSION[\t ]+\".*\".*")
string(REGEX REPLACE "^#define[\t ]+U_ICU_VERSION[\t ]+\"([^ \\n]*)\".*"
"\\1" icu_version_string "${icu_header_str}")
set(ICU_VERSION "${icu_version_string}")
set(ICU_VERSION "${icu_version_string}" PARENT_SCOPE)
unset(icu_header_str)
unset(icu_version_string)
endif()
if(CMAKE_SIZEOF_VOID_P EQUAL 8)
# 64-bit binary directory
set(_bin64 "bin64")
# 64-bit library directory
set(_lib64 "lib64")
endif()
# Find all ICU programs
list(APPEND icu_binary_suffixes "${_bin64}" "bin" "sbin")
foreach(program ${icu_programs})
string(TOUPPER "${program}" program_upcase)
set(cache_var "ICU_${program_upcase}_EXECUTABLE")
set(program_var "ICU_${program_upcase}_EXECUTABLE")
find_program("${cache_var}"
NAMES "${program}"
HINTS ${icu_roots}
PATH_SUFFIXES ${icu_binary_suffixes}
DOC "ICU ${program} executable"
NO_PACKAGE_ROOT_PATH
)
mark_as_advanced("${cache_var}")
set("${program_var}" "${${cache_var}}" PARENT_SCOPE)
endforeach()
# Find all ICU libraries
list(APPEND icu_library_suffixes "${_lib64}" "lib")
set(ICU_REQUIRED_LIBS_FOUND ON)
set(static_prefix )
# static icu libraries compiled with MSVC have the prefix 's'
if(MSVC)
set(static_prefix "s")
endif()
foreach(component ${ICU_FIND_COMPONENTS})
string(TOUPPER "${component}" component_upcase)
set(component_cache "ICU_${component_upcase}_LIBRARY")
set(component_cache_release "${component_cache}_RELEASE")
set(component_cache_debug "${component_cache}_DEBUG")
set(component_found "ICU_${component_upcase}_FOUND")
set(component_found_compat "${component_upcase}_FOUND")
set(component_libnames "icu${component}")
set(component_debug_libnames "icu${component}d")
# Special case deliberate library naming mismatches between Unix
# and Windows builds
unset(component_libnames)
unset(component_debug_libnames)
list(APPEND component_libnames "icu${component}")
list(APPEND component_debug_libnames "icu${component}d")
if(component STREQUAL "data")
list(APPEND component_libnames "icudt")
# Note there is no debug variant at present
list(APPEND component_debug_libnames "icudtd")
endif()
if(component STREQUAL "dt")
list(APPEND component_libnames "icudata")
# Note there is no debug variant at present
list(APPEND component_debug_libnames "icudatad")
endif()
if(component STREQUAL "i18n")
list(APPEND component_libnames "icuin")
list(APPEND component_debug_libnames "icuind")
endif()
if(component STREQUAL "in")
list(APPEND component_libnames "icui18n")
list(APPEND component_debug_libnames "icui18nd")
endif()
if(static_prefix)
unset(static_component_libnames)
unset(static_component_debug_libnames)
foreach(component_libname ${component_libnames})
list(APPEND static_component_libnames
${static_prefix}${component_libname})
endforeach()
foreach(component_libname ${component_debug_libnames})
list(APPEND static_component_debug_libnames
${static_prefix}${component_libname})
endforeach()
list(APPEND component_libnames ${static_component_libnames})
list(APPEND component_debug_libnames ${static_component_debug_libnames})
endif()
find_library("${component_cache_release}"
NAMES ${component_libnames}
HINTS ${icu_roots}
PATH_SUFFIXES ${icu_library_suffixes}
DOC "ICU ${component} library (release)"
NO_PACKAGE_ROOT_PATH
)
find_library("${component_cache_debug}"
NAMES ${component_debug_libnames}
HINTS ${icu_roots}
PATH_SUFFIXES ${icu_library_suffixes}
DOC "ICU ${component} library (debug)"
NO_PACKAGE_ROOT_PATH
)
include(SelectLibraryConfigurations)
select_library_configurations(ICU_${component_upcase})
mark_as_advanced("${component_cache_release}" "${component_cache_debug}")
if(${component_cache})
set("${component_found}" ON)
set("${component_found_compat}" ON)
list(APPEND ICU_LIBRARY "${${component_cache}}")
if (ICU_FIND_REQUIRED_${component})
list(APPEND ICU_LIBS_FOUND "${component} (required): ${${component_cache}}")
else()
list(APPEND ICU_LIBS_FOUND "${component} (optional): ${${component_cache}}")
endif()
else()
if (ICU_FIND_REQUIRED_${component})
set(ICU_REQUIRED_LIBS_FOUND OFF)
list(APPEND ICU_LIBS_NOTFOUND "${component} (required)")
else()
list(APPEND ICU_LIBS_NOTFOUND "${component} (optional)")
endif()
endif()
mark_as_advanced("${component_found}")
mark_as_advanced("${component_found_compat}")
set("${component_cache}" "${${component_cache}}" PARENT_SCOPE)
set("${component_found}" "${${component_found}}" PARENT_SCOPE)
set("${component_found_compat}" "${${component_found_compat}}" PARENT_SCOPE)
endforeach()
set(_ICU_REQUIRED_LIBS_FOUND "${ICU_REQUIRED_LIBS_FOUND}" PARENT_SCOPE)
set(ICU_LIBRARY "${ICU_LIBRARY}" PARENT_SCOPE)
# Find all ICU data files
if(CMAKE_LIBRARY_ARCHITECTURE)
list(APPEND icu_data_suffixes
"${_lib64}/${CMAKE_LIBRARY_ARCHITECTURE}/icu/${ICU_VERSION}"
"lib/${CMAKE_LIBRARY_ARCHITECTURE}/icu/${ICU_VERSION}"
"${_lib64}/${CMAKE_LIBRARY_ARCHITECTURE}/icu"
"lib/${CMAKE_LIBRARY_ARCHITECTURE}/icu")
endif()
list(APPEND icu_data_suffixes
"${_lib64}/icu/${ICU_VERSION}"
"lib/icu/${ICU_VERSION}"
"${_lib64}/icu"
"lib/icu")
foreach(data ${icu_data})
string(TOUPPER "${data}" data_upcase)
string(REPLACE "." "_" data_upcase "${data_upcase}")
set(cache_var "ICU_${data_upcase}")
set(data_var "ICU_${data_upcase}")
find_file("${cache_var}"
NAMES "${data}"
HINTS ${icu_roots}
PATH_SUFFIXES ${icu_data_suffixes}
DOC "ICU ${data} data file")
mark_as_advanced("${cache_var}")
set("${data_var}" "${${cache_var}}" PARENT_SCOPE)
endforeach()
if(NOT ICU_FIND_QUIETLY)
if(ICU_LIBS_FOUND)
message(STATUS "Found the following ICU libraries:")
foreach(found ${ICU_LIBS_FOUND})
message(STATUS " ${found}")
endforeach()
endif()
if(ICU_LIBS_NOTFOUND)
message(STATUS "The following ICU libraries were not found:")
foreach(notfound ${ICU_LIBS_NOTFOUND})
message(STATUS " ${notfound}")
endforeach()
endif()
endif()
if(ICU_DEBUG)
message(STATUS "--------FindICU.cmake search debug--------")
message(STATUS "ICU binary path search order: ${icu_roots}")
message(STATUS "ICU include path search order: ${icu_roots}")
message(STATUS "ICU library path search order: ${icu_roots}")
message(STATUS "----------------")
endif()
endfunction()
_ICU_FIND()
include(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(ICU
FOUND_VAR ICU_FOUND
REQUIRED_VARS ICU_INCLUDE_DIR
ICU_LIBRARY
_ICU_REQUIRED_LIBS_FOUND
VERSION_VAR ICU_VERSION
FAIL_MESSAGE "Failed to find all ICU components")
unset(_ICU_REQUIRED_LIBS_FOUND)
if(ICU_FOUND)
set(ICU_INCLUDE_DIRS "${ICU_INCLUDE_DIR}")
set(ICU_LIBRARIES "${ICU_LIBRARY}")
foreach(_ICU_component ${ICU_FIND_COMPONENTS})
string(TOUPPER "${_ICU_component}" _ICU_component_upcase)
set(_ICU_component_cache "ICU_${_ICU_component_upcase}_LIBRARY")
set(_ICU_component_cache_release "ICU_${_ICU_component_upcase}_LIBRARY_RELEASE")
set(_ICU_component_cache_debug "ICU_${_ICU_component_upcase}_LIBRARY_DEBUG")
set(_ICU_component_lib "ICU_${_ICU_component_upcase}_LIBRARIES")
set(_ICU_component_found "ICU_${_ICU_component_upcase}_FOUND")
set(_ICU_imported_target "ICU::${_ICU_component}")
if(${_ICU_component_found})
set("${_ICU_component_lib}" "${${_ICU_component_cache}}")
if(NOT TARGET ${_ICU_imported_target})
add_library(${_ICU_imported_target} UNKNOWN IMPORTED)
if(ICU_INCLUDE_DIR)
set_target_properties(${_ICU_imported_target} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${ICU_INCLUDE_DIR}")
endif()
if(EXISTS "${${_ICU_component_cache}}")
set_target_properties(${_ICU_imported_target} PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES "CXX"
IMPORTED_LOCATION "${${_ICU_component_cache}}")
endif()
if(EXISTS "${${_ICU_component_cache_release}}")
set_property(TARGET ${_ICU_imported_target} APPEND PROPERTY
IMPORTED_CONFIGURATIONS RELEASE)
set_target_properties(${_ICU_imported_target} PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES_RELEASE "CXX"
IMPORTED_LOCATION_RELEASE "${${_ICU_component_cache_release}}")
endif()
if(EXISTS "${${_ICU_component_cache_debug}}")
set_property(TARGET ${_ICU_imported_target} APPEND PROPERTY
IMPORTED_CONFIGURATIONS DEBUG)
set_target_properties(${_ICU_imported_target} PROPERTIES
IMPORTED_LINK_INTERFACE_LANGUAGES_DEBUG "CXX"
IMPORTED_LOCATION_DEBUG "${${_ICU_component_cache_debug}}")
endif()
if(CMAKE_DL_LIBS AND _ICU_component STREQUAL "uc")
set_target_properties(${_ICU_imported_target} PROPERTIES
INTERFACE_LINK_LIBRARIES "${CMAKE_DL_LIBS}")
endif()
endif()
endif()
unset(_ICU_component_upcase)
unset(_ICU_component_cache)
unset(_ICU_component_lib)
unset(_ICU_component_found)
unset(_ICU_imported_target)
endforeach()
endif()
if(ICU_DEBUG)
message(STATUS "--------FindICU.cmake results debug--------")
message(STATUS "ICU found: ${ICU_FOUND}")
message(STATUS "ICU_VERSION number: ${ICU_VERSION}")
message(STATUS "ICU_ROOT directory: ${ICU_ROOT}")
message(STATUS "ICU_INCLUDE_DIR directory: ${ICU_INCLUDE_DIR}")
message(STATUS "ICU_LIBRARIES: ${ICU_LIBRARIES}")
foreach(program IN LISTS icu_programs)
string(TOUPPER "${program}" program_upcase)
set(program_lib "ICU_${program_upcase}_EXECUTABLE")
message(STATUS "${program} program: ${program_lib}=${${program_lib}}")
unset(program_upcase)
unset(program_lib)
endforeach()
foreach(data IN LISTS icu_data)
string(TOUPPER "${data}" data_upcase)
string(REPLACE "." "_" data_upcase "${data_upcase}")
set(data_lib "ICU_${data_upcase}")
message(STATUS "${data} data: ${data_lib}=${${data_lib}}")
unset(data_upcase)
unset(data_lib)
endforeach()
foreach(component IN LISTS ICU_FIND_COMPONENTS)
string(TOUPPER "${component}" component_upcase)
set(component_lib "ICU_${component_upcase}_LIBRARIES")
set(component_found "ICU_${component_upcase}_FOUND")
set(component_found_compat "${component_upcase}_FOUND")
message(STATUS "${component} library found: ${component_found}=${${component_found}}")
message(STATUS "${component} library found (compat name): ${component_found_compat}=${${component_found_compat}}")
message(STATUS "${component} library: ${component_lib}=${${component_lib}}")
unset(component_upcase)
unset(component_lib)
unset(component_found)
unset(component_found_compat)
endforeach()
message(STATUS "----------------")
endif()
unset(icu_programs)
+54
View File
@@ -0,0 +1,54 @@
The upstream boost repository we are using itself uses submodules (a LOT of
them). For our fork to reference them, we'd also have to folk all (100+)
submodules in the BRL-CAD project. In this case the main point is to have a
CMake build of boost someone else is maintaining, so we need to work around the
submodule issue.
In the BRL-CAD fork, the RELEASE branch we made has been modified to remove the
submodules and instead check in a set of fully populated clones from the
upstream boostorg/boost repository. The procedure was roughly:
Prepare the upstream repository:
git clone https://github.com/boostorg/boost.git
mv boost boost_upstream
cd boost_upstream
git co boost-1.83.0
git submodule update --init --recursive --depth=1
For all the submodules (found by using "find . -name .git", excluding the top level .git folder)
rm -rf <path_to_submodule>/.git
cd ..
Check out the BRL-CAD fork (referenced the procedure at
https://gist.github.com/myusuf3/7f645819ded92bda6677 for part ofof this:)
git clone https://github.com/boostorg/boost.git
cd boost
git co boost-1.83.0
git switch -c RELEASE
git rm .gitmodules
For all the submodules (found by using "find . -name .git", excluding the top level .git folder)
git rm --cached <path_to_submodule>
git commit -m "Remove submodules"
cp -r ../boost_upstream/* .
git add -A
git commit -m "Populate repository with full copies of submodules"
For the next Boost release bump, in the release branch we'll merge the new tag,
prepare another copy of boostorg/boost.git the same way we did above, remove the
current files from the working copy of RELEASE (without committing), and copy in
the new boostorg/boost contents. This will let us make a fully populated tree of
the next release.
Once the upstream RELEASE branch is ready, we bump the submodule reference in this repository
with:
git submodule update --remote boost (TODO - do we also need the --merge option here?)
Test the build. If everything works:
git add boost
git commit -m "Update boost dependency to v<new version>"
git push
Submodule
+1
Submodule boost/boost added at 2d59a4b188
+5
View File
@@ -0,0 +1,5 @@
ICU
PATCH
ZLIB
ZSTD
+26
View File
@@ -0,0 +1,26 @@
diff --git a/libs/iostreams/CMakeLists.txt b/libs/iostreams/CMakeLists.txt
index 1d8352f5..11f8e584 100644
--- a/libs/iostreams/CMakeLists.txt
+++ b/libs/iostreams/CMakeLists.txt
@@ -6,6 +6,8 @@ cmake_minimum_required(VERSION 3.5...3.16)
project(boost_iostreams VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX)
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+
add_library(boost_iostreams
src/file_descriptor.cpp
src/mapped_file.cpp
diff --git a/libs/locale/CMakeLists.txt b/libs/locale/CMakeLists.txt
index f47ad394..21956d88 100644
--- a/libs/locale/CMakeLists.txt
+++ b/libs/locale/CMakeLists.txt
@@ -6,6 +6,8 @@ cmake_minimum_required(VERSION 3.11...3.20)
project(boost_locale VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX)
+list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake")
+
# Using glob here is ok as it is only for headers
file(GLOB_RECURSE headers include/*.hpp)
+78
View File
@@ -0,0 +1,78 @@
# Decide if we're using Bullet
cad_enable(BULLET "libged")
bext_enable(Bullet)
# Decision made, start processing if we are enabled
if (ENABLE_BULLET)
git_submodule_init(bullet3 CMakeLists.txt)
RegisterDeps(BULLET)
set(BULLET_CMAKE_ARGS
${BUILD_TYPE_SPECIFIER}
-DBIN_DIR=${BIN_DIR}
-DLIB_DIR=${LIB_DIR}
-DBUILD_STATIC_LIBS=${BUILD_STATIC_LIBS}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_INSTALL_PREFIX=${CMAKE_BUNDLE_INSTALL_PREFIX}
-DCMAKE_INSTALL_LIBDIR:PATH=${LIB_DIR}
-DCMAKE_INSTALL_RPATH=${CMAKE_BUNDLE_INSTALL_PREFIX}/${LIB_DIR}
-DINSTALL_LIBS=ON
-DUSE_DOUBLE_PRECISION=ON
-DUSE_GRAPHICAL_BENCHMARK=OFF
-DBUILD_BULLET3=OFF
-DBUILD_EXTRAS=OFF
-DENABLE_VHACD=OFF
-DBUILD_CPU_DEMOS=OFF
-DUSE_GLUT=OFF
-DBUILD_ENET=OFF
-DBUILD_CLSOCKET=OFF
-DBUILD_EGL=OFF
-DBUILD_OPENGL3_DEMOS=OFF
-DBUILD_BULLET2_DEMOS=OFF
-DBUILD_UNIT_TESTS=OFF
)
if(MSVC)
list(APPEND BULLET_CMAKE_ARGS
-DUSE_MSVC_RUNTIME_LIBRARY_DLL=ON
-DCMAKE_MSVC_RUNTIME_LIBRARY=MultiThreaded$<$<CONFIG:Debug>:Debug>DLL
)
endif()
ExternalProject_Add(BULLET_BLD
URL "${CMAKE_CURRENT_SOURCE_DIR}/bullet3"
BUILD_ALWAYS ${EXT_BUILD_ALWAYS} ${LOG_OPTS}
PATCH_COMMAND ${PATCH_EXECUTABLE};-E;-p1;${PATCH_OPTIONS};-i;${CMAKE_CURRENT_SOURCE_DIR}/bullet_cmake.patch
COMMAND ${PATCH_EXECUTABLE};-E;-p1;${PATCH_OPTIONS};-i;${CMAKE_CURRENT_SOURCE_DIR}/bullet_wdocumentation.patch
CMAKE_ARGS ${BULLET_CMAKE_ARGS}
-DBUILD_UNIT_TESTS=OFF
LOG_CONFIGURE ${EXT_BUILD_QUIET}
LOG_BUILD ${EXT_BUILD_QUIET}
LOG_INSTALL ${EXT_BUILD_QUIET}
LOG_OUTPUT_ON_FAILURE ${EXT_BUILD_QUIET}
STEP_TARGETS install
)
TargetInstallDeps(BULLET BULLET_DEPENDS)
# Copy the license into position in CMAKE_BUNDLE_INSTALL_PREFIX
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/bullet3/LICENSE.txt
${DOC_LICENSE_DIR}/bullet.txt
COPYONLY
)
endif (ENABLE_BULLET)
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
+2
View File
@@ -0,0 +1,2 @@
PATCH
+1
Submodule bullet/bullet3 added at 63c4d67e33
+12
View File
@@ -0,0 +1,12 @@
diff -Naur bullet3/CMakeLists.txt BULLET_BLD/CMakeLists.txt
--- bullet3/CMakeLists.txt 2026-03-18 12:04:48.152344880 -0400
+++ BULLET_BLD/CMakeLists.txt 2026-03-18 09:52:07.100507175 -0400
@@ -23,6 +23,8 @@
SET(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -D_DEBUG")
#MESSAGE("CMAKE_CXX_FLAGS_DEBUG="+${CMAKE_CXX_FLAGS_DEBUG})
+set(CMAKE_POSITION_INDEPENDENT_CODE ON)
+
OPTION(USE_DOUBLE_PRECISION "Use double precision" OFF)
SET(CLAMP_VELOCITIES "0" CACHE STRING "Clamp rigid bodies' velocity to this value, if larger than zero. Useful to prevent floating point errors or in general runaway velocities in complex scenarios")
OPTION(USE_GRAPHICAL_BENCHMARK "Use Graphical Benchmark" ON)
+197
View File
@@ -0,0 +1,197 @@
diff --git a/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h b/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h
index 1febc2b..e2b550c 100644
--- a/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h
+++ b/src/BulletDynamics/ConstraintSolver/btGeneric6DofConstraint.h
@@ -240,7 +240,7 @@ This is accessible through btGeneric6DofConstraint.getLimitMotor method,
This brings support for limit parameters and motors. </li>
<li> Angulars limits have these possible ranges:
-<table border=1 >
+<table border="1" >
<tr>
<td><b>AXIS</b></td>
<td><b>MIN ANGLE</b></td>
diff --git a/src/LinearMath/btMatrix3x3.h b/src/LinearMath/btMatrix3x3.h
index 4391a52..d43d51c 100644
--- a/src/LinearMath/btMatrix3x3.h
+++ b/src/LinearMath/btMatrix3x3.h
@@ -708,7 +708,7 @@ public:
* @param rot stores the rotation from the coordinate system in which the matrix is diagonal to the original
* coordinate system, i.e., old_this = rot * new_this * rot^T.
* @param threshold See iteration
- * @param iteration The iteration stops when all off-diagonal elements are less than the threshold multiplied
+ * @param maxSteps The iteration stops when all off-diagonal elements are less than the threshold multiplied
* by the sum of the absolute values of the diagonal, or when maxSteps have been executed.
*
* Note that this matrix is assumed to be symmetric.
@@ -794,8 +794,8 @@ public:
/**@brief Calculate the matrix cofactor
* @param r1 The first row to use for calculating the cofactor
* @param c1 The first column to use for calculating the cofactor
- * @param r1 The second row to use for calculating the cofactor
- * @param c1 The second column to use for calculating the cofactor
+ * @param r2 The second row to use for calculating the cofactor
+ * @param c2 The second column to use for calculating the cofactor
* See http://en.wikipedia.org/wiki/Cofactor_(linear_algebra) for more details
*/
btScalar cofac(int r1, int c1, int r2, int c2) const
diff --git a/src/LinearMath/btQuadWord.h b/src/LinearMath/btQuadWord.h
index 851596b..682a13c 100644
--- a/src/LinearMath/btQuadWord.h
+++ b/src/LinearMath/btQuadWord.h
@@ -142,9 +142,9 @@ public:
}
/**@brief Set x,y,z and zero w
- * @param x Value of x
- * @param y Value of y
- * @param z Value of z
+ * @param _x Value of x
+ * @param _y Value of y
+ * @param _z Value of z
*/
SIMD_FORCE_INLINE void setValue(const btScalar& _x, const btScalar& _y, const btScalar& _z)
{
@@ -162,10 +162,10 @@ public:
}
*/
/**@brief Set the values
- * @param x Value of x
- * @param y Value of y
- * @param z Value of z
- * @param w Value of w
+ * @param _x Value of x
+ * @param _y Value of y
+ * @param _z Value of z
+ * @param _w Value of w
*/
SIMD_FORCE_INLINE void setValue(const btScalar& _x, const btScalar& _y, const btScalar& _z, const btScalar& _w)
{
@@ -181,9 +181,9 @@ public:
}
/**@brief Three argument constructor (zeros w)
- * @param x Value of x
- * @param y Value of y
- * @param z Value of z
+ * @param _x Value of x
+ * @param _y Value of y
+ * @param _z Value of z
*/
SIMD_FORCE_INLINE btQuadWord(const btScalar& _x, const btScalar& _y, const btScalar& _z)
{
@@ -191,10 +191,10 @@ public:
}
/**@brief Initializing constructor
- * @param x Value of x
- * @param y Value of y
- * @param z Value of z
- * @param w Value of w
+ * @param _x Value of x
+ * @param _y Value of y
+ * @param _z Value of z
+ * @param _w Value of w
*/
SIMD_FORCE_INLINE btQuadWord(const btScalar& _x, const btScalar& _y, const btScalar& _z, const btScalar& _w)
{
diff --git a/src/LinearMath/btQuaternion.h b/src/LinearMath/btQuaternion.h
index 40d6e14..6c68fae 100644
--- a/src/LinearMath/btQuaternion.h
+++ b/src/LinearMath/btQuaternion.h
@@ -84,8 +84,8 @@ public:
{
}
/**@brief Axis angle Constructor
- * @param axis The axis which the rotation is around
- * @param angle The magnitude of the rotation around the angle (Radians) */
+ * @param _axis The axis which the rotation is around
+ * @param _angle The magnitude of the rotation around the angle (Radians) */
btQuaternion(const btVector3& _axis, const btScalar& _angle)
{
setRotation(_axis, _angle);
@@ -104,7 +104,7 @@ public:
}
/**@brief Set the rotation using axis angle notation
* @param axis The axis around which to rotate
- * @param angle The magnitude of the rotation in Radians */
+ * @param _angle The magnitude of the rotation in Radians */
void setRotation(const btVector3& axis, const btScalar& _angle)
{
btScalar d = axis.length();
@@ -134,9 +134,9 @@ public:
cosRoll * cosPitch * cosYaw + sinRoll * sinPitch * sinYaw);
}
/**@brief Set the quaternion using euler angles
- * @param yaw Angle around Z
- * @param pitch Angle around Y
- * @param roll Angle around X */
+ * @param yawZ Angle around Z
+ * @param pitchY Angle around Y
+ * @param rollX Angle around X */
void setEulerZYX(const btScalar& yawZ, const btScalar& pitchY, const btScalar& rollX)
{
btScalar halfYaw = btScalar(yawZ) * btScalar(0.5);
@@ -155,9 +155,9 @@ public:
}
/**@brief Get the euler angles from this quaternion
- * @param yaw Angle around Z
- * @param pitch Angle around Y
- * @param roll Angle around X */
+ * @param yawZ Angle around Z
+ * @param pitchY Angle around Y
+ * @param rollX Angle around X */
void getEulerZYX(btScalar& yawZ, btScalar& pitchY, btScalar& rollX) const
{
btScalar squ;
diff --git a/src/LinearMath/btVector3.h b/src/LinearMath/btVector3.h
index 9da1627..942f1a0 100644
--- a/src/LinearMath/btVector3.h
+++ b/src/LinearMath/btVector3.h
@@ -119,9 +119,9 @@ public:
}
/**@brief Constructor from scalars
- * @param x X value
- * @param y Y value
- * @param z Z value
+ * @param _x X value
+ * @param _y Y value
+ * @param _z Z value
*/
SIMD_FORCE_INLINE btVector3(const btScalar& _x, const btScalar& _y, const btScalar& _z)
{
@@ -155,7 +155,7 @@ public:
#endif // #if defined (BT_USE_SSE_IN_API) || defined (BT_USE_NEON)
/**@brief Add a vector to this one
- * @param The vector to add to this one */
+ * @param v The vector to add to this one */
SIMD_FORCE_INLINE btVector3& operator+=(const btVector3& v)
{
#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
@@ -171,7 +171,7 @@ public:
}
/**@brief Subtract a vector from this one
- * @param The vector to subtract */
+ * @param v The vector to subtract */
SIMD_FORCE_INLINE btVector3& operator-=(const btVector3& v)
{
#if defined(BT_USE_SSE_IN_API) && defined(BT_USE_SSE)
@@ -1190,10 +1190,10 @@ public:
}
*/
/**@brief Set the values
- * @param x Value of x
- * @param y Value of y
- * @param z Value of z
- * @param w Value of w
+ * @param _x Value of x
+ * @param _y Value of y
+ * @param _z Value of z
+ * @param _w Value of w
*/
SIMD_FORCE_INLINE void setValue(const btScalar& _x, const btScalar& _y, const btScalar& _z, const btScalar& _w)
{
+58
View File
@@ -0,0 +1,58 @@
# Decide if we're using clipper2
cad_enable(CLIPPER2 "libbg;librt")
bext_enable(CLIPPER2)
# Decision made
if (ENABLE_CLIPPER2)
git_submodule_init(Clipper2 README.md)
RegisterDeps(CLIPPER2)
ExternalProject_Add(CLIPPER2_BLD
URL "${CMAKE_CURRENT_SOURCE_DIR}/Clipper2/CPP"
BUILD_ALWAYS ${EXT_BUILD_ALWAYS} ${LOG_OPTS}
PATCH_COMMAND ${PATCH_EXECUTABLE};-E;-p1;${PATCH_OPTIONS};-i;${CMAKE_CURRENT_SOURCE_DIR}/clipper2.patch
CMAKE_ARGS
${BUILD_TYPE_SPECIFIER}
-DCLIPPER2_UTILS=OFF
-DCLIPPER2_EXAMPLES=OFF
-DCLIPPER2_TESTS=OFF
-DCLIPPER2_USINGZ=OFF
-DBIN_DIR=${BIN_DIR}
-DLIB_DIR=${LIB_DIR}
-DBUILD_SHARED_LIBS=ON
-DBUILD_STATIC_LIBS=${BUILD_STATIC_LIBS}
-DCMAKE_WINDOWS_EXPORT_ALL_SYMBOLS=ON
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_INSTALL_PREFIX=${CMAKE_BUNDLE_INSTALL_PREFIX}
-DCMAKE_INSTALL_LIBDIR:PATH=${LIB_DIR}
-DCMAKE_INSTALL_RPATH=${CMAKE_BUNDLE_INSTALL_PREFIX}/${LIB_DIR}
LOG_CONFIGURE ${EXT_BUILD_QUIET}
LOG_BUILD ${EXT_BUILD_QUIET}
LOG_INSTALL ${EXT_BUILD_QUIET}
LOG_OUTPUT_ON_FAILURE ${EXT_BUILD_QUIET}
STEP_TARGETS install
)
TargetInstallDeps(CLIPPER2 CLIPPER2_DEPENDS)
# Copy the license into position in CMAKE_BUNDLE_INSTALL_PREFIX
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/Clipper2/LICENSE
${DOC_LICENSE_DIR}/clipper2.txt
COPYONLY
)
endif (ENABLE_CLIPPER2)
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
+1
Submodule clipper2/Clipper2 added at ef88ee97c0
+2
View File
@@ -0,0 +1,2 @@
PATCH
+80
View File
@@ -0,0 +1,80 @@
diff -Naur CLIPPER2_BLD/CMakeLists.txt CLIPPER2/CMakeLists.txt
--- CLIPPER2_BLD/CMakeLists.txt 2026-04-30 12:34:52.299493949 -0400
+++ CLIPPER2/CMakeLists.txt 2026-04-30 12:38:11.412869621 -0400
@@ -18,6 +18,7 @@
option(USE_EXTERNAL_GTEST "Use system-wide installed GoogleTest" OFF)
option(USE_EXTERNAL_GBENCHMARK "Use the googlebenchmark" OFF)
option(BUILD_SHARED_LIBS "Build shared libs" OFF)
+option(BUILD_STATIC_LIBS "Also build static library archives (Clipper2-static / Clipper2Z-static) alongside the primary libraries" OFF)
set(CLIPPER2_USINGZ "ON" CACHE STRING "Build Clipper2Z, either \"ON\" or \"OFF\" or \"ONLY\"")
# CLIPPER2_MAX_DECIMAL_PRECISION: maximum decimal precision when scaling PathsD to Paths64.
@@ -78,6 +79,68 @@
endif()
endif()
+# -----------------------------------------------------------------------
+# Optional static library targets (meaningful when BUILD_SHARED_LIBS=ON)
+# -----------------------------------------------------------------------
+if(BUILD_STATIC_LIBS)
+ set(CLIPPER2_STATIC_LIBS "")
+
+ if (NOT (CLIPPER2_USINGZ STREQUAL "ONLY"))
+ list(APPEND CLIPPER2_STATIC_LIBS Clipper2_static)
+ add_library(Clipper2_static STATIC ${CLIPPER2_INC} ${CLIPPER2_SRC})
+
+ set_target_properties(Clipper2_static PROPERTIES
+ OUTPUT_NAME Clipper2-static
+ EXPORT_NAME Clipper2-static
+ )
+
+ target_compile_definitions(Clipper2_static PUBLIC
+ CLIPPER2_MAX_DECIMAL_PRECISION=${CLIPPER2_MAX_DECIMAL_PRECISION}
+ $<$<BOOL:${CLIPPER2_HI_PRECISION}>:CLIPPER2_HI_PRECISION>
+ )
+
+ target_include_directories(Clipper2_static PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Clipper2Lib/include>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+ )
+
+ if (NOT MSVC)
+ target_link_libraries(Clipper2_static PUBLIC m)
+ endif()
+ endif()
+
+ if (NOT (CLIPPER2_USINGZ STREQUAL "OFF"))
+ list(APPEND CLIPPER2_STATIC_LIBS Clipper2Z_static)
+ add_library(Clipper2Z_static STATIC ${CLIPPER2_INC} ${CLIPPER2_SRC})
+
+ set_target_properties(Clipper2Z_static PROPERTIES
+ OUTPUT_NAME Clipper2Z-static
+ EXPORT_NAME Clipper2Z-static
+ )
+
+ target_compile_definitions(Clipper2Z_static PUBLIC
+ USINGZ
+ CLIPPER2_MAX_DECIMAL_PRECISION=${CLIPPER2_MAX_DECIMAL_PRECISION}
+ $<$<BOOL:${CLIPPER2_HI_PRECISION}>:CLIPPER2_HI_PRECISION>
+ )
+
+ target_include_directories(Clipper2Z_static PUBLIC
+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/Clipper2Lib/include>
+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>
+ )
+
+ if (NOT MSVC)
+ target_link_libraries(Clipper2Z_static PUBLIC m)
+ endif()
+ endif()
+
+ install(TARGETS ${CLIPPER2_STATIC_LIBS} EXPORT Clipper2-targets
+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR}
+ INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+ )
+endif()
+
+
# secondary Clipper2 library with USINGZ defined (if required)
if (NOT (CLIPPER2_USINGZ STREQUAL "OFF"))
list(APPEND CLIPPER2_LIBS Clipper2Z)
+48
View File
@@ -0,0 +1,48 @@
bext_enable(DEFLATE)
if (ENABLE_DEFLATE)
git_submodule_init(libdeflate CMakeLists.txt)
RegisterDeps(DEFLATE)
ExternalProject_Add(DEFLATE_BLD
URL "${CMAKE_CURRENT_SOURCE_DIR}/libdeflate"
BUILD_ALWAYS ${EXT_BUILD_ALWAYS} ${LOG_OPTS}
CMAKE_ARGS
${BUILD_TYPE_SPECIFIER}
-DDEFLATE_BUILD_CLI=OFF
-DBIN_DIR=${BIN_DIR}
-DLIB_DIR=${LIB_DIR}
-DBUILD_STATIC_LIBS=${BUILD_STATIC_LIBS}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_INSTALL_PREFIX=${CMAKE_BUNDLE_INSTALL_PREFIX}
-DCMAKE_INSTALL_LIBDIR:PATH=${LIB_DIR}
-DCMAKE_INSTALL_RPATH=${CMAKE_BUNDLE_INSTALL_PREFIX}/${LIB_DIR}
LOG_CONFIGURE ${EXT_BUILD_QUIET}
LOG_BUILD ${EXT_BUILD_QUIET}
LOG_INSTALL ${EXT_BUILD_QUIET}
LOG_OUTPUT_ON_FAILURE ${EXT_BUILD_QUIET}
STEP_TARGETS install
)
TargetInstallDeps(DEFLATE DEFLATE_DEPENDS)
# Copy the license into position in CMAKE_BUNDLE_INSTALL_PREFIX
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/libdeflate/COPYING
${DOC_LICENSE_DIR}/deflate.txt
COPYONLY
)
endif (ENABLE_DEFLATE)
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
+2
View File
@@ -0,0 +1,2 @@
PATCH
Submodule deflate/libdeflate added at 275aa5141d
+89
View File
@@ -0,0 +1,89 @@
# Decide if we're using Eigen
cad_enable(EIGEN "libbg;libbn;librt")
unset(EIGEN_BUNDLED CACHE)
if (NOT ENABLE_EIGEN AND NOT DISABLE_EIGEN)
# https://eigen.tuxfamily.org/dox/TopicCMakeGuide.html
find_package(Eigen3 NO_MODULE)
if (NOT TARGET Eigen3::Eigen)
set(ENABLE_EIGEN "ON" CACHE BOOL "Enable Eigen build")
endif (NOT TARGET Eigen3::Eigen)
endif (NOT ENABLE_EIGEN AND NOT DISABLE_EIGEN)
set(ENABLE_EIGEN "${ENABLE_EIGEN}" CACHE BOOL "Enable Eigen build")
# Decision made
if (ENABLE_EIGEN)
git_submodule_init(eigen CMakeLists.txt)
RegisterDeps(EIGEN)
set(EIGEN_PATCH_FILES "${CMAKE_CURRENT_SOURCE_DIR}/eigen_common.patch")
if (APPLE)
list(APPEND EIGEN_PATCH_FILES
"${CMAKE_CURRENT_SOURCE_DIR}/eigen_macos.patch")
endif (APPLE)
if (MSVC)
list(APPEND EIGEN_PATCH_FILES
"${CMAKE_CURRENT_SOURCE_DIR}/eigen_msvc.patch")
endif (MSVC)
set(EIGEN_PATCH_COMMAND)
foreach(EIGEN_PATCH_FILE IN LISTS EIGEN_PATCH_FILES)
if (NOT EIGEN_PATCH_COMMAND)
set(EIGEN_PATCH_COMMAND
${PATCH_EXECUTABLE} -E -p1 ${PATCH_OPTIONS} -i ${EIGEN_PATCH_FILE}
)
else ()
list(APPEND EIGEN_PATCH_COMMAND
COMMAND ${PATCH_EXECUTABLE} -E -p1 ${PATCH_OPTIONS}
-i ${EIGEN_PATCH_FILE}
)
endif ()
endforeach ()
unset(EIGEN_PATCH_FILE)
unset(EIGEN_PATCH_FILES)
ExternalProject_Add(EIGEN_BLD
URL "${CMAKE_CURRENT_SOURCE_DIR}/eigen"
BUILD_ALWAYS ${EXT_BUILD_ALWAYS} ${LOG_OPTS}
PATCH_COMMAND ${EIGEN_PATCH_COMMAND}
CMAKE_ARGS
-DBUILD_TESTING=OFF
-DEIGEN_BUILD_DOC=OFF
-DEIGEN_BUILD_PKGCONFIG=OFF
${BUILD_TYPE_SPECIFIER}
-DBIN_DIR=${BIN_DIR}
-DLIB_DIR=${LIB_DIR}
-DBUILD_STATIC_LIBS=${BUILD_STATIC_LIBS}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_Fortran_COMPILER=OFF
-DCMAKE_INSTALL_PREFIX=${CMAKE_NOBUNDLE_INSTALL_PREFIX}
-DCMAKE_INSTALL_LIBDIR:PATH=${LIB_DIR}
-DCMAKE_INSTALL_RPATH=${CMAKE_BUNDLE_INSTALL_PREFIX}/${LIB_DIR}
LOG_CONFIGURE ${EXT_BUILD_QUIET}
LOG_BUILD ${EXT_BUILD_QUIET}
LOG_INSTALL ${EXT_BUILD_QUIET}
LOG_OUTPUT_ON_FAILURE ${EXT_BUILD_QUIET}
STEP_TARGETS install
)
TargetInstallDeps(EIGEN EIGEN_DEPENDS)
set(EIGEN_BUNDLED TRUE CACHE BOOL "Eigen bundle flag")
endif (ENABLE_EIGEN)
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
Submodule
+1
Submodule eigen/eigen added at bc3b39870e
+2
View File
@@ -0,0 +1,2 @@
PATCH
+11
View File
@@ -0,0 +1,11 @@
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -260,7 +260,7 @@
export (TARGETS eigen NAMESPACE Eigen3:: FILE Eigen3Targets.cmake)
# Export Eigen3 package to CMake registry such that it can be easily found by
# CMake even if it has not been installed to a standard directory.
- export (PACKAGE Eigen3)
+ #export (PACKAGE Eigen3)
install (EXPORT Eigen3Targets NAMESPACE Eigen3:: DESTINATION ${CMAKEPACKAGE_INSTALL_DIR})
+12
View File
@@ -0,0 +1,12 @@
--- a/Eigen/src/Core/util/Memory.h
+++ b/Eigen/src/Core/util/Memory.h
@@ -647,6 +647,9 @@
// to the appropriate stack allocation function
#if !defined EIGEN_ALLOCA && !defined EIGEN_GPU_COMPILE_PHASE
#if EIGEN_OS_LINUX || EIGEN_OS_MAC || (defined alloca)
+#if EIGEN_OS_MAC
+# include <alloca.h>
+#endif
#define EIGEN_ALLOCA alloca
#elif EIGEN_COMP_MSVC
#define EIGEN_ALLOCA _alloca
+15
View File
@@ -0,0 +1,15 @@
--- a/lapack/CMakeLists.txt
+++ b/lapack/CMakeLists.txt
@@ -20,6 +20,12 @@
add_custom_target(lapack)
include_directories(../blas)
+
+# Eigen's template-heavy complex LAPACK sources can exceed the default COFF
+# section limit when compiled with MSVC, particularly in debug builds.
+if(MSVC)
+ set_property(SOURCE complex_single.cpp complex_double.cpp APPEND PROPERTY COMPILE_OPTIONS "/bigobj")
+endif()
set(EigenLapack_SRCS
dsecnd_INT_CPU_TIME.cpp second_INT_CPU_TIME.cpp single.cpp double.cpp complex_single.cpp complex_double.cpp
+62
View File
@@ -0,0 +1,62 @@
bext_enable(EMBREE)
if (ENABLE_EMBREE)
git_submodule_init(embree CMakeLists.txt)
RegisterDeps(EMBREE)
if (TARGET ZLIB_BLD)
set(Z_PREFIX_STR "brl_")
endif (TARGET ZLIB_BLD)
ExternalProject_Add(EMBREE_BLD
URL "${CMAKE_CURRENT_SOURCE_DIR}/embree"
BUILD_ALWAYS ${EXT_BUILD_ALWAYS} ${LOG_OPTS}
PATCH_COMMAND ${PATCH_EXECUTABLE};-E;-p1;${PATCH_OPTIONS};-i;${CMAKE_CURRENT_SOURCE_DIR}/embree.patch
CMAKE_ARGS
-DCMAKE_FIND_PACKAGE_PREFER_CONFIG=ON
${BUILD_TYPE_SPECIFIER}
$<$<BOOL:${ZLIB_TARGET}>:-DZ_PREFIX=ON>
$<$<BOOL:${ZLIB_TARGET}>:-DZ_PREFIX_STR=${Z_PREFIX_STR}>
$<$<BOOL:${ONETBB_TARGET}>:-DTBB_ROOT=${CMAKE_BUNDLE_INSTALL_PREFIX}>
-DISPC_ROOT=$<$<BOOL:${ISPC_TARGET}>:${CMAKE_BUNDLE_INSTALL_PREFIX}>
-DZLIB_ROOT=$<$<BOOL:${ZLIB_TARGET}>:${CMAKE_BUNDLE_INSTALL_PREFIX}>
-DEMBREE_TUTORIALS=OFF
$<$<BOOL:${USE_OSPRAY}>:-DEMBREE_ISPC_SUPPORT=ON>
-DBIN_DIR=${BIN_DIR}
-DLIB_DIR=${LIB_DIR}
-DBUILD_STATIC_LIBS=${BUILD_STATIC_LIBS}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_INSTALL_PREFIX=${CMAKE_BUNDLE_INSTALL_PREFIX}
-DCMAKE_INSTALL_LIBDIR:PATH=${LIB_DIR}
-DCMAKE_INSTALL_RPATH=${CMAKE_BUNDLE_INSTALL_PREFIX}/${LIB_DIR}
LOG_CONFIGURE ${EXT_BUILD_QUIET}
LOG_BUILD ${EXT_BUILD_QUIET}
LOG_INSTALL ${EXT_BUILD_QUIET}
LOG_OUTPUT_ON_FAILURE ${EXT_BUILD_QUIET}
STEP_TARGETS install
)
TargetInstallDeps(EMBREE EMBREE_DEPENDS)
# ISPC use is conditional so it's not (currently) part of the deps file
if (USE_OSPRAY AND TARGET ISPC_BLD)
ExternalProject_Add_stepdependencies(EMBREE_BLD configure ISPC_BLD-install)
endif (USE_OSPRAY AND TARGET ISPC_BLD)
# Copy the license into position in CMAKE_BUNDLE_INSTALL_PREFIX
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/embree/LICENSE.txt
${DOC_LICENSE_DIR}/embree.txt
COPYONLY
)
endif (ENABLE_EMBREE)
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
Submodule
+1
Submodule embree/embree added at f590db83ef
+5
View File
@@ -0,0 +1,5 @@
BOOST
ONETBB
PATCH
ZLIB
+20
View File
@@ -0,0 +1,20 @@
--- embree/common/cmake/package.cmake 2024-06-25 19:45:03.229489407 -0400
+++ EMBREE_BLD/common/cmake/package.cmake 2024-06-25 19:42:33.118981564 -0400
@@ -178,13 +178,13 @@
ELSEIF(APPLE)
CONFIGURE_FILE("${PROJECT_SOURCE_DIR}/scripts/install_macosx/embree-vars.sh" embree-vars.sh @ONLY)
CONFIGURE_FILE("${PROJECT_SOURCE_DIR}/scripts/install_macosx/embree-vars.csh" embree-vars.csh @ONLY)
- INSTALL(FILES "${PROJECT_BINARY_DIR}/embree-vars.sh" DESTINATION "." COMPONENT lib)
- INSTALL(FILES "${PROJECT_BINARY_DIR}/embree-vars.csh" DESTINATION "." COMPONENT lib)
+ INSTALL(FILES "${PROJECT_BINARY_DIR}/embree-vars.sh" DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT lib)
+ INSTALL(FILES "${PROJECT_BINARY_DIR}/embree-vars.csh" DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT lib)
ELSE()
CONFIGURE_FILE("${PROJECT_SOURCE_DIR}/scripts/install_linux/embree-vars.sh" embree-vars.sh @ONLY)
CONFIGURE_FILE("${PROJECT_SOURCE_DIR}/scripts/install_linux/embree-vars.csh" embree-vars.csh @ONLY)
- INSTALL(FILES "${PROJECT_BINARY_DIR}/embree-vars.sh" DESTINATION "." COMPONENT lib)
- INSTALL(FILES "${PROJECT_BINARY_DIR}/embree-vars.csh" DESTINATION "." COMPONENT lib)
+ INSTALL(FILES "${PROJECT_BINARY_DIR}/embree-vars.sh" DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT lib)
+ INSTALL(FILES "${PROJECT_BINARY_DIR}/embree-vars.csh" DESTINATION "${CMAKE_INSTALL_BINDIR}" COMPONENT lib)
ENDIF()
ENDIF()
+50
View File
@@ -0,0 +1,50 @@
bext_enable(EXPAT)
if (ENABLE_EXPAT)
git_submodule_init(libexpat expat/CMakeLists.txt)
RegisterDeps(EXPAT)
ExternalProject_Add(EXPAT_BLD
URL "${CMAKE_CURRENT_SOURCE_DIR}/libexpat"
SOURCE_SUBDIR expat
BUILD_ALWAYS ${EXT_BUILD_ALWAYS} ${LOG_OPTS}
PATCH_COMMAND ${PATCH_EXECUTABLE};-E;-p1;${PATCH_OPTIONS};-i;${CMAKE_CURRENT_SOURCE_DIR}/expat.patch
CMAKE_ARGS
${BUILD_TYPE_SPECIFIER}
-DEXPAT_SHARED_LIBS=ON
-DBIN_DIR=${BIN_DIR}
-DLIB_DIR=${LIB_DIR}
-DBUILD_STATIC_LIBS=${BUILD_STATIC_LIBS}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_INSTALL_PREFIX=${CMAKE_BUNDLE_INSTALL_PREFIX}
-DCMAKE_INSTALL_LIBDIR:PATH=${LIB_DIR}
-DCMAKE_INSTALL_RPATH=${CMAKE_BUNDLE_INSTALL_PREFIX}/${LIB_DIR}
LOG_CONFIGURE ${EXT_BUILD_QUIET}
LOG_BUILD ${EXT_BUILD_QUIET}
LOG_INSTALL ${EXT_BUILD_QUIET}
LOG_OUTPUT_ON_FAILURE ${EXT_BUILD_QUIET}
STEP_TARGETS install
)
TargetInstallDeps(EXPAT EXPAT_DEPENDS)
# Copy the license into position in CMAKE_BUNDLE_INSTALL_PREFIX
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/libexpat/COPYING
${DOC_LICENSE_DIR}/expat.txt
COPYONLY
)
endif (ENABLE_EXPAT)
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
+2
View File
@@ -0,0 +1,2 @@
PATCH
+12
View File
@@ -0,0 +1,12 @@
diff -Naur libexpat/expat/CMakeLists.txt EXPAT_BLD/expat/CMakeLists.txt
--- libexpat/expat/CMakeLists.txt 2024-06-24 20:14:05.745779978 -0400
+++ EXPAT_BLD/expat/CMakeLists.txt 2024-06-24 20:13:21.062107763 -0400
@@ -462,7 +462,7 @@
expat_shy_set(EXPAT_${build_type_upper}_POSTFIX "${_POSTFIX_WIDE}${_POSTFIX_DEBUG}${_POSTFIX_CRT}" CACHE STRING "Library filename postfix for build type ${build_type_upper}; yields filenames libexpat<postfix=[w][d][MD|MT]>.(dll|dylib|lib|so)")
mark_as_advanced(EXPAT_${build_type_upper}_POSTFIX)
- set_property(TARGET expat PROPERTY ${build_type_upper}_POSTFIX ${EXPAT_${build_type_upper}_POSTFIX})
+ #set_property(TARGET expat PROPERTY ${build_type_upper}_POSTFIX ${EXPAT_${build_type_upper}_POSTFIX})
endforeach()
set(LIBCURRENT 10) # sync
+1
Submodule expat/libexpat added at fa75b96546
+125
View File
@@ -0,0 +1,125 @@
if (WIN32)
# With winflexbison do all or nothing
if (ENABLE_FLEX OR ENABLE_BISON)
set(ENABLE_FLEX ON)
set(ENABLE_BISON ON)
endif (ENABLE_FLEX OR ENABLE_BISON)
endif (WIN32)
set(ENABLE_FLEX "${ENABLE_FLEX}" CACHE BOOL "Enable flex build")
set(ENABLE_BISON "${ENABLE_BISON}" CACHE BOOL "Enable GNU Bison build")
if (WIN32 AND ENABLE_FLEX)
git_submodule_init(winflexbison CMakeLists.txt)
set(FLEX_DEPENDS PATCH)
TargetVars(FLEX_DEPENDS)
# https://github.com/lexxmark/winflexbison
ExternalProject_Add(FLEX_BLD
URL "${CMAKE_CURRENT_SOURCE_DIR}/winflexbison"
BUILD_ALWAYS ${EXT_BUILD_ALWAYS} ${LOG_OPTS}
PATCH_COMMAND ${PATCH_EXECUTABLE};-E;-p1;${PATCH_OPTIONS};-i;${CMAKE_CURRENT_SOURCE_DIR}/winflexbison.patch
CMAKE_ARGS
${BUILD_TYPE_SPECIFIER}
-DBIN_DIR=${BIN_DIR}
-DLIB_DIR=${LIB_DIR}
-DBUILD_STATIC_LIBS=${BUILD_STATIC_LIBS}
-DCMAKE_CXX_COMPILER=${CMAKE_CXX_COMPILER}
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
-DCMAKE_INSTALL_PREFIX=${CMAKE_NOBUNDLE_INSTALL_PREFIX}
LOG_CONFIGURE ${EXT_BUILD_QUIET}
LOG_BUILD ${EXT_BUILD_QUIET}
LOG_INSTALL ${EXT_BUILD_QUIET}
LOG_OUTPUT_ON_FAILURE ${EXT_BUILD_QUIET}
STEP_TARGETS install
)
TargetInstallDeps(FLEX FLEX_DEPENDS)
endif (WIN32 AND ENABLE_FLEX)
if (NOT WIN32)
if (ENABLE_FLEX)
git_submodule_init(flex configure)
set(FLEX_DEPENDS PATCH)
TargetVars(FLEX_DEPENDS)
set(FLEX_SRC_DIR "${CMAKE_CURRENT_BINARY_DIR}/FLEX_BLD-prefix/src/FLEX_BLD")
ExternalProject_Add(FLEX_BLD
URL "${CMAKE_CURRENT_SOURCE_DIR}/flex"
BUILD_IN_SOURCE ON
BUILD_ALWAYS ${EXT_BUILD_ALWAYS} ${LOG_OPTS}
PATCH_COMMAND ${PATCH_EXECUTABLE};-E;-p1;${PATCH_OPTIONS};-i;${CMAKE_CURRENT_SOURCE_DIR}/flex.patch
CONFIGURE_COMMAND ${FLEX_SRC_DIR}/autogen.sh
COMMAND ${FLEX_SRC_DIR}/configure --prefix=${CMAKE_NOBUNDLE_INSTALL_PREFIX}
BUILD_COMMAND ${BEXT_MAKE_COMMAND} -j${pcnt}
INSTALL_COMMAND ${BEXT_MAKE_COMMAND} -j1 install
DEPENDS ${ZLIB_TARGET}
LOG_CONFIGURE ${EXT_BUILD_QUIET}
LOG_BUILD ${EXT_BUILD_QUIET}
LOG_INSTALL ${EXT_BUILD_QUIET}
LOG_OUTPUT_ON_FAILURE ${EXT_BUILD_QUIET}
STEP_TARGETS install
)
TargetInstallDeps(FLEX FLEX_DEPENDS)
endif (ENABLE_FLEX)
if (ENABLE_BISON)
git_submodule_init(bison configure)
set(BISON_DEPENDS)
TargetVars(BISON_DEPENDS)
set(BISON_SRC_DIR "${CMAKE_CURRENT_BINARY_DIR}/BISON_BLD-prefix/src/BISON_BLD")
set(BISON_CONFIGURE_ENV MAKEINFO=true)
if (APPLE)
# macOS 26 declares posix_spawn_file_actions_addchdir, but the symbol is
# unavailable when targeting older macOS releases. Bison 3.8.2's older
# gnulib consequently fails its link check and then redeclares the SDK
# function with an incompatible replacement type. The positive cache
# result makes gnulib select its rpl_ wrapper around the available _np
# function, avoiding both the new symbol and the conflicting declaration.
list(APPEND BISON_CONFIGURE_ENV ac_cv_func_posix_spawn_file_actions_addchdir=yes)
endif (APPLE)
ExternalProject_Add(BISON_BLD
URL "${CMAKE_CURRENT_SOURCE_DIR}/bison"
BUILD_IN_SOURCE ON
BUILD_ALWAYS ${EXT_BUILD_ALWAYS} ${LOG_OPTS}
# Preserve the shipped Autotools outputs when ExternalProject copies the
# source tree. This prevents make from requiring Autoconf, Autoheader,
# or Automake from the host.
CONFIGURE_COMMAND ${CMAKE_COMMAND};-E;touch_nocreate;${BISON_SRC_DIR}/configure;${BISON_SRC_DIR}/lib/config.in.h;${BISON_SRC_DIR}/Makefile.in
# The release checkout includes generated Info documentation. Do not
# require host Texinfo when staging changes file timestamp ordering.
COMMAND ${CMAKE_COMMAND} -E env ${BISON_CONFIGURE_ENV} ${BISON_SRC_DIR}/configure --prefix=${CMAKE_NOBUNDLE_INSTALL_PREFIX}
COMMAND ${CMAKE_COMMAND} -E touch_nocreate ${BISON_SRC_DIR}/doc/bison.info
BUILD_COMMAND ${BEXT_MAKE_COMMAND} -j${pcnt}
INSTALL_COMMAND ${BEXT_MAKE_COMMAND} -j1 install
DEPENDS ${ZLIB_TARGET}
LOG_CONFIGURE ${EXT_BUILD_QUIET}
LOG_BUILD ${EXT_BUILD_QUIET}
LOG_INSTALL ${EXT_BUILD_QUIET}
LOG_OUTPUT_ON_FAILURE ${EXT_BUILD_QUIET}
STEP_TARGETS install
)
TargetInstallDeps(BISON BISON_DEPENDS)
endif (ENABLE_BISON)
endif (NOT WIN32)
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8
+15
View File
@@ -0,0 +1,15 @@
The Flex lexer (https://github.com/westes/flex) and GNU Bison parser generator
tools (https://www.gnu.org/software/bison/) aren't targeted for WIN32
deployment by their original upstreams. Consequently, we also include the
winflexbison project from https://github.com/lexxmark/winflexbison to provide
these tools on that platform as well.
We patch the build files of both flex and bison(a vanilla build on Ubuntu
failed with both, during initial testing.) However, this means we also need to
regenerate the build files and require at least a minimal autotools chain for
successful building on platforms other than Windows.
NOTE: These are build-only tools, not intended to be bundled with BRL-CAD. In
particular, GNU Bison uses the GNU General Public License (GPLv3) and is not a
candidate for distribution with BRL-CAD.
+1
Submodule flexbison/bison added at 17479d234a
+1
Submodule flexbison/flex added at ab49343b08
+15
View File
@@ -0,0 +1,15 @@
diff -Naur flex-2.6.4/Makefile.am flex/Makefile.am
--- flex-2.6.4/Makefile.am 2017-05-03 16:16:37.000000000 -0400
+++ flex/Makefile.am 2023-09-14 10:54:03.506247328 -0400
@@ -43,10 +43,6 @@
SUBDIRS = \
src \
- doc \
- examples \
- po \
- tests \
tools
# Create the ChangeLog, but only if we're inside a git working directory

Some files were not shown because too many files have changed in this diff Show More