Compare commits

..
870 Commits
Author SHA1 Message Date
Nathan Moinvaziri e1aad8c445 Version 2.3.1. 2018-05-09 19:48:55 -07:00
Nathan Moinvaziri b5fb12503d Fixed more warnings. #263 2018-05-09 09:52:43 -07:00
Nathan Moinvaziri bd2f162009 Fixed more warnings. #263 2018-05-09 09:45:15 -07:00
Nathan Moinvaziri 408940f16c Fixed more warnings. #263 2018-05-09 09:42:31 -07:00
Nathan Moinvaziri a710bd714a Fixed reported warnings. #263 2018-05-09 00:46:47 -07:00
Nathan Moinvaziri 7a3b698578 Fixed more mac warnings. #263 2018-05-09 00:45:02 -07:00
Nathan Moinvaziri e275fcf017 Removed ZIP_UNUSED. #263 2018-05-09 00:34:16 -07:00
Nathan Moinvaziri 0e2e1a0b05 Fixed compiler warnings on mac. #263 2018-05-09 00:31:25 -07:00
Nathan Moinvaziri 3431a6635b Fixed more compiler warnings. #263 2018-05-06 16:59:31 -07:00
Nathan Moinvaziri 521a42a4c3 Fixed some compiler warnings. #263 2018-05-06 16:32:46 -07:00
Nathan Moinvaziri a4b83e8e95 Version 2.3.0. 2018-05-03 17:59:04 -07:00
Nathan Moinvaziri 121e088a7d Add back auto detection of zip64. #258 2018-05-03 17:57:20 -07:00
Nathan Moinvaziri 46f714348e Simplification & fixed formatting. #258 2018-05-03 17:24:32 -07:00
Nathan Moinvaziri a56a08cf79 Allow configuration of zip64 support. #258 2018-05-03 09:35:37 -07:00
Nathan Moinvaziri 8a50b4b5df Merge pull request #261 from vszakats/ws2
whitespace fixes
2018-05-02 20:09:48 -07:00
Nathan Moinvaziri 37ceb026db Merge branch 'dev' into ws2 2018-05-02 20:09:25 -07:00
Nathan Moinvaziri 586300a787 Use MZ_UNUSED where applicable. #262 2018-05-02 20:07:45 -07:00
Nathan Moinvaziri 92c8d77cfb Merge pull request #262 from vszakats/warn2
silence various warnings
2018-05-02 20:04:57 -07:00
Nathan Moinvaziri c546a57f90 Fixed wrong defined MZ_ALLOC and MZ_FREE. #249 2018-05-02 20:02:30 -07:00
Nathan Moinvaziri 5244fc00c4 Added MZ_UNUSED #262
Added #define for malloc and free. #249
2018-05-02 20:01:35 -07:00
Viktor Szakats 4c76400cce silence various warnings
- unused parameters
- trivial const stripping cases
- missing NULL initializers from vtbls
- missing static scope for vtbls

Missing newlines at EOF addressed in a separate PR.
It's be nice to replace `ZIP_UNUSED var` and `(void)var`
with a global and non-gcc-specific solution, such as:
   #define MZ_UNUSED(symbol)  (void)symbol
2018-05-02 21:40:29 +00:00
Nathan Moinvaziri 240b3b6709 Added comment for slash appending for dirs. 2018-05-02 13:38:14 -07:00
Nathan Moinvaziri e54582384a Remove any existing slash at the end of filename. 2018-05-02 13:07:03 -07:00
Nathan Moinvaziri 3ad1a92279 Append slash to directories for compatibility. #257 2018-05-02 13:04:41 -07:00
Viktor Szakats 447dd06750 whitespace fixes
- remove line-ending spaces
- always have a file-ending newline
- remove duplicate file-ending newlines
2018-05-02 19:59:38 +00:00
Nathan Moinvaziri 4827f71a08 Fixed formatting. 2018-05-02 10:50:47 -07:00
Nathan Moinvaziri bb3b75bc09 Fixed directory compression method.
Move zip attribute detection to mz_zip. #257
2018-05-02 10:48:51 -07:00
Nathan Moinvaziri b7bd0421c5 Merge branch 'dev' of https://github.com/nmoinvaz/minizip into dev 2018-05-02 09:55:15 -07:00
Nathan Moinvaziri 9a3ae75a48 Fixed print out of directories. #257 2018-05-02 09:54:44 -07:00
Nathan Moinvaziri 120bea1a6f Merge pull request #260 from vszakats/castwarn
fix cast warning (seen with LLVM/Clang)
2018-05-02 09:26:21 -07:00
Nathan Moinvaziri 4a41245099 Added msdos host system and dir detection. 2018-05-02 09:24:09 -07:00
Viktor Szakats 0f0535fcaa fix cast warning (seen with LLVM/Clang)
```
mz_compat.c:390:62: warning: passing 'uint32_t *' (aka 'unsigned int *') to parameter of type
      'int32_t *' (aka 'int *') converts between pointers to integer types with different sign [-Wpointer-sign]
        err = mz_zip_get_disk_number_with_cd(compat->handle, &pglobal_info->number_disk_with_CD);
                                                             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
mz_zip.h:112:70: note: passing argument to parameter 'disk_number_with_cd' here
extern int32_t mz_zip_get_disk_number_with_cd(void *handle, int32_t *disk_number_with_cd);
                                                                     ^
```
2018-05-02 13:15:58 +00:00
Nathan Moinvaziri 8d8deb4e5d Added listing of attributes. 2018-05-01 21:54:15 -07:00
Nathan Moinvaziri 83bce6e82a Allow version_needed to be less than customized. #258 2018-05-01 18:10:17 -07:00
Nathan Moinvaziri 739f03f951 Updated comment. 2018-05-01 13:57:28 -07:00
Nathan Moinvaziri 7583be518c Fixed is directory check on linux. 2018-05-01 13:55:28 -07:00
Nathan Moinvaziri 0619c3e6c4 Merge branch 'dev' of https://github.com/nmoinvaz/minizip into dev 2018-05-01 13:51:13 -07:00
Nathan Moinvaziri e33916b608 Added support for directory entries in minizip. #257
Added support for file attributes.
2018-05-01 13:45:08 -07:00
Nathan Moinvaziri 596f19f79e Merge pull request #256 from vszakats/rawlzmaflag
fix to set MZ_ZIP_FLAG_LZMA_EOS_MARKER flag in raw mode
2018-04-30 09:34:30 -07:00
Viktor Szakats 2884e67a1a fix to set MZ_ZIP_FLAG_LZMA_EOS_MARKER flag in raw mode
in function mz_zip_entry_write_open()

Fixes https://github.com/nmoinvaz/minizip/issues/255
2018-04-30 08:16:09 +00:00
Nathan Moinvaziri ae5740b19c Merge pull request #253 from vszakats/eolws
remove whitespace @ eol
2018-04-24 08:50:47 -07:00
Nathan Moinvaziri b14ded7d01 Merge pull request #254 from vszakats/patch-1
README.md: switch an URL to use HTTPS
2018-04-24 08:49:48 -07:00
Viktor Szakats 914049d19c README.md: switch an URL to use HTTPS 2018-04-24 14:20:35 +02:00
Viktor Szakats 915b82e95b remove whitespace @ eol 2018-04-24 10:02:39 +00:00
Nathan Moinvaziri 0f09a00810 Fixed formatting. 2018-04-23 18:48:30 -07:00
Nathan Moinvaziri f5f23217b3 Fixed formatting. 2018-04-23 18:46:09 -07:00
Nathan Moinvaziri 5d362f43eb Merge pull request #252 from vszakats/fixes
improve compatibility with original minizip
2018-04-23 18:31:31 -07:00
Viktor Szakats ce26dba5ba improve compatibility with original minizip
* Fix NULL pointer dereference when calling zipOpen*()
  or unzOpen2*() with NULL filefunc table.
* Rename dos_date to dosDate in zip/unzip structures to
  be compatible with original minizip.
* Add tm struct timestamps to zip/unzip structures and
  populate them with the dosDate value for unzip and
  use the value passed into it on zip, if dosDate is
  zero (mimicing original minizip behaviour.)
* Change zipWriteInFileInZip() return value to be a
  status code (ZIP_OK or ZIP_ERRNO) instead of the
  number of bytes written. This way it's minizip
  compatible.
* Add zipCloseFileInZipRaw64() compatibility wrapper.
* Add these compatibility functions:
  unzGetOffset()
  unzGetOffset64()
  unzSetOffset()
  unzSetOffset64()
* Add stub for compatibility: unzGetLocalExtrafield()
  It will always return zero for now.
* Add original minizip types for compatiblity:
  tm_unz, tm_zip, ZPOS64_T
* Add these minizip (non-compatiblity) APIs:
  mz_zip_get_entry()
  mz_zip_goto_entry()
* zipOpenNewFileInZip*() to use the default filename of
  "-" if filename parameter was NULL. For minizip
  compatibility.
* Fix mz_zip_entry_open_int() and mz_zip_entry_read_open()
  failing with MZ_PARAM_ERROR in raw mode
* Add/cleanup some date-related comments
* mz_zip_time_t_to_tm() to clear the `tm` structure in
  case localtime() call failed.
* Fix mz_zip_tm_to_dosdate() to do the date validation
  on the normalized date (the year in particular), not on
  the raw value passed by the caller. This makes it work
  correctly when year is passed as-is, such as 1990.

The reference minizip was the version that comes with
the latest zlib, currently at 1.2.11.
2018-04-23 22:38:05 +00:00
Nathan Moinvaziri ad8e3dd4b1 Version 2.2.9. 2018-04-18 20:54:52 -07:00
Nathan Moinvaziri 53e1d650e5 Fixed append mode does not work under linux. #250 2018-04-18 20:51:00 -07:00
Nathan Moinvaziri bcd64ca3b8 Merge branch 'dev' 2018-03-27 20:44:10 -07:00
Nathan Moinvaziri 078f20290f Don't add gitignore. 2018-03-27 20:41:18 -07:00
Nathan Moinvaziri 9c98a6b180 Don't use z_crc_t typedef. 2018-03-27 20:40:21 -07:00
Nathan Moinvaziri a30ff41e9d Remove unnecessary aes files. 2018-03-27 20:39:54 -07:00
Nathan Moinvaziri a43eb98099 Remove src directory. 2018-03-27 20:37:53 -07:00
Nathan Moinvaziri 8d8a987eea Fixed overflow when getting the disk number with cd. #248 2018-03-19 18:23:13 -07:00
Nathan Moinvaziri c5f0063c75 Version 2.2.8. 2018-03-15 11:14:11 -07:00
Nathan Moinvaziri d57eb5de40 Merge branch 'master' into dev 2018-03-15 11:12:35 -07:00
Nathan Moinvaziri 672dc834f1 Merge pull request #240 from juanii/fix_233
Fixes #233
2018-03-15 10:43:52 -07:00
Nathan Moinvaziri 5e8f4d7d88 Fixed formatting. 2018-03-15 10:43:18 -07:00
Nathan Moinvaziri 68a48aa20e Merge pull request #247 from tonytheodore/master
Minor fixes for mingw cross-compilation
2018-03-13 14:54:55 -07:00
Tony Theodore b5ac94fd24 Use Requires: zlib to fix pkg-config ordering of static libs 2018-03-13 20:14:45 +11:00
Tony Theodore b4020169b7 Fix naming with automatic lib prefix on mingw shared build 2018-03-13 20:11:13 +11:00
Nathan Moinvaziri b8f38540c2 Define HAVE_ZLIB #244 2018-03-09 01:19:48 -08:00
Nathan Moinvaziri d65cd2ea9d Merge pull request #246 from jthorniley/pkgconfig-linux-only
Make pkg-config build dependency linux only
2018-03-05 19:12:32 -08:00
James Thorniley 6cd3054608 Make pkg-config build dependency linux only 2018-03-05 10:51:11 +00:00
Nathan Moinvaziri f44494aad2 Merge pull request #243 from jhudsonWA/master
Fix Unknown type name 'z_crc_t' in minizip 2.x
2018-02-21 18:49:48 -08:00
Nathan Moinvaziri 7c5ccae39c Fixed formatting. 2018-02-21 18:49:20 -08:00
Joshua Hudson 82df346497 Update mz_strm_crypt.c
fix Unknown type name 'z_crc_t'
2018-02-21 17:18:09 -08:00
Nathan Moinvaziri 225c627f7d Update README.md 2018-02-16 23:11:45 -08:00
Nathan Moinvaziri db8158a5cc Merge pull request #242 from juanii/master
Fix compat layer's unzGetGlobalInfo() for archives without global com…
2018-02-14 17:30:27 -08:00
juanii 62090966b1 Removed unnecessary assignment to size_comment. 2018-02-14 22:27:08 -03:00
juanii dec6a65a64 Merge remote-tracking branch 'upstream/master' 2018-02-14 15:37:29 -03:00
juanii 7d7b1c9554 Fix compat layer's unzGetGlobalInfo() for archives without global comment. 2018-02-14 15:30:31 -03:00
Nathan Moinvaziri a4a4a1c665 Merge pull request #241 from juanii/fix_237
Fixes #237
2018-02-13 20:01:26 -08:00
juanii b8887e9179 Fixes #237 2018-02-14 00:51:05 -03:00
Nathan Moinvaziri c0cc7df743 Merge pull request #236 from juanii/master
Fix: unzGetGlobalInfo failed with MZ_EXIST_ERROR if there was no comment in ZIP file.
2018-02-13 17:23:37 -08:00
Nathan Moinvaziri c5e2d27028 Initialize values to zero when retrieving global info 2018-02-13 17:05:04 -08:00
Nathan Moinvaziri bb7b62fcb4 Merge pull request #238 from juanii/fix_ntfs_extra_field
Fix ntfs extra field
2018-02-13 15:31:48 -08:00
Nathan Moinvaziri e56962c624 Fixed formatting 2018-02-13 15:31:15 -08:00
Nathan Moinvaziri d9e159a395 Fixed formatting 2018-02-13 15:30:30 -08:00
juanii 4578b9dd33 Remove unnecessary assignment. 2018-02-12 15:18:26 -03:00
Nathan Moinvaziri b44f9c07b8 Merge pull request #239 from juanii/fix_disk_number
Fix: Field disk_number is 16bit, will never contain UINT32_MAX.
2018-02-12 07:21:23 -08:00
juanii 55bcdaf3c4 Fixes #233 2018-02-11 20:55:57 -03:00
juanii 8f6f2ad5fb mz_compat: Init file_info struct to zeroes 2018-02-11 14:39:57 -03:00
juanii 7063b0e2e9 Read NTFS extra field only if all (modify, access, creation) timestamps are present. 2018-02-11 14:39:57 -03:00
juanii 3679a3dcdc Add NTFS extra field only if all (modified, accessed, creation) timestamps are present. 2018-02-11 14:39:57 -03:00
juanii 4ae7992c2e Fix: Field disk_number is 16bit, will never contain UINT32_MAX. 2018-02-11 14:29:36 -03:00
juanii 566b978768 Fix: unzGetGlobalInfo failed with MZ_EXIST_ERROR if there was no comment in ZIP file. 2018-02-10 15:08:21 -03:00
Nathan Moinvaziri 7a3820c539 Merge pull request #234 from juanii/master
ZIP64 format is required if number of entries in archive is greater than 65535.
2018-02-09 17:36:53 -08:00
Nathan Moinvaziri bca5f2761d Fixed formatting. 2018-02-09 17:33:49 -08:00
Nathan Moinvaziri f7d49e2d7c Merge pull request #235 from rip-nsk/fix_zipOpenNewFileInZip5
fix zipOpenNewFileInZip5
2018-02-08 19:59:53 -08:00
Nathan Moinvaziri f8b3d67c67 Fixed formatting 2018-02-08 19:59:33 -08:00
rip.nsk 2043f834b0 fix zipOpenNewFileInZip5 2018-02-08 14:08:06 -08:00
juanii c65486db27 Proper value for "total number of disk" field in ZIP64 CD locator 2018-02-08 17:07:07 -03:00
juanii 30589b5419 Host system must be placed in high byte of "version made by" field. ZIP version in lower byte. 2018-02-08 14:43:02 -03:00
juanii 3f59ffc209 ZIP64 format is required if number of entries in archive is greater than 65535. 2018-02-08 12:44:17 -03:00
Nathan Moinvaziri d487d78b30 Merge pull request #232 from rip-nsk/Use_Z_PREFIX_if_needed
Check zlib is compiled with zprefix and use Z_PREFIX if needed.
2018-02-05 17:56:40 -08:00
Nathan Moinvaziri 1d5b57bd9b Merge pull request #231 from rip-nsk/keep_FILE_SHARE_READ_if_MZ_OPEN_MODE_READ
keep FILE_SHARE_READ if MZ_OPEN_MODE_READ
2018-02-05 17:51:21 -08:00
rip.nsk 9e89bb1ee0 Check zlib is compiled with zprefix and use Z_PREFIX if needed. 2018-02-05 12:42:03 -08:00
rip.nsk 6c717b6558 keep FILE_SHARE_READ if MZ_OPEN_MODE_READ 2018-02-05 12:33:30 -08:00
Nathan Moinvaziri 5c3dd5c27e Version 2.2.7. 2018-01-30 12:27:22 -08:00
Nathan Moinvaziri ceca477ed4 Fixed segmentation fault when trying to close posix stream. #225 2018-01-30 12:19:36 -08:00
Nathan Moinvaziri 34eff624c4 Fixed missing include. 2018-01-22 09:25:15 -08:00
Nathan Moinvaziri 930f9188a5 Fixed casting and 16-bit zlib limitation. 2018-01-22 08:51:07 -08:00
Nathan Moinvaziri 397d2d5ab3 Merge pull request #228 from evanmiller/dev
Support reading 65kb+ entries on most machines.
2018-01-22 08:46:39 -08:00
Evan Miller 3064a0e551 Support reading 65kb+ entries on most machines. 2018-01-21 20:32:26 -05:00
Nathan Moinvaziri d22a27a9c3 Merge branch 'master' into dev 2018-01-07 10:30:35 -08:00
Nathan Moinvaziri 98cd93d3a7 Merge pull request #223 from chenxiaolong/x86-features
cmake: Enable x86 optimizations only if supported
2018-01-07 10:24:52 -08:00
Nathan Moinvaziri d52e453488 Merge pull request #222 from chenxiaolong/pic
cmake: Use POSITION_INDEPENDENT_CODE property instead of setting -fPIC
2018-01-07 10:23:57 -08:00
Nathan Moinvaziri 61a4b59216 Merge pull request #221 from chenxiaolong/android-lfs
cmake: Don't define LFS macros on Android API < 24
2018-01-07 10:23:21 -08:00
Andrew Gunnerson 7443318057 cmake: Enable x86 optimizations only if supported
Previously, these optimizations would get enabled when building for
non-x86 architectures using Clang, which would cause a warning to be
output.

Signed-off-by: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
2018-01-06 20:20:39 -05:00
Andrew Gunnerson e474a61e86 cmake: Use POSITION_INDEPENDENT_CODE property instead of setting -fPIC
CMake will figure out the right compiler arguments to use for enabling
PIC on the target platform.

Signed-off-by: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
2018-01-06 19:28:35 -05:00
Andrew Gunnerson 5e67eb720a cmake: Don't define LFS macros on Android API < 24
Android APIs < 24 don't have support for the POSIX LFS API and will
fail at link time if the macros are defined.

Signed-off-by: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
2018-01-06 19:24:38 -05:00
Nathan Moinvaziri d18e09d5b0 Merge branch 'dev' 2018-01-06 08:52:58 -08:00
Nathan Moinvaziri 7855c3efd0 Version 2.2.6. 2018-01-06 08:51:18 -08:00
Nathan Moinvaziri c689d51f79 Merge branch 'dev' of https://github.com/nmoinvaz/minizip into dev 2018-01-06 08:49:08 -08:00
Nathan Moinvaziri fee885a931 Updated copyright years. 2018-01-06 08:49:03 -08:00
Nathan Moinvaziri a1e78c5fc4 Merge pull request #220 from chenxiaolong/fix-data-descriptor
mz_zip.c: Fix incorrect size of data descriptor fields
2018-01-06 08:46:46 -08:00
Andrew Gunnerson 3c52d21ba9 mz_zip.c: Fix incorrect size of data descriptor fields
Previously, the conditions for writing 32-bit vs 64-bit data descriptor
fields were swapped. If the size was smaller than UINT32_MAX, a 64-bit
integer would be written, and if the size was larger, then a truncated
32-bit integer would be written. This prevented programs that don't have
support for the central directory (like busybox) from reading files
created by minizip.

Signed-off-by: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
2018-01-05 22:28:12 -05:00
Nathan Moinvaziri a6e3b69a3b Merge pull request #219 from mikecrowe/cmake-fixes
Cmake fixes
2018-01-04 10:13:36 -08:00
Mike Crowe 0fbdb2298e CMakeLists.txt: Use customisable installation directory for cmake configuration
The existing CMakeLists.txt installed the minizip cmake configuration files
in PREFIX/cmake which doesn't match where other packages install such
files.

Let's add a INSTALL_CMAKE_DIR so that the destination can be specified, and
then default to installing in the standard ${CMAKE_INSTALL_LIBDIR}/cmake
location which should end up being the right place.

Tested with OpenEmbedded and on Debian GNU/Linux 9.3.
2018-01-04 12:46:48 +00:00
Mike Crowe 7df69ea96e CMakeLists: Use GNUInstallDirs to specify default install directories
CMake's GNUInstallDirs knows where particular Linux architectures and
distributions want to have their libraries installed. In particular,
Debian-derived "multi-arch" distributions keep their libraries in triplet
sudirectories under /lib. Other "bi-arch" distributions keep 64-bit
libraries in /lib64.

Including GNUInstallDirs and using CMAKE_INSTALL_ variables means that
minizip's libraries and header files are installed in the correct
locations.

For GNUInstallDirs to work, CMAKE_SYSTEM_NAME needs to be set which only
appears to be the case after the project command so this must be moved
earlier.

Also, since minizip is compiled, its pkgconfig file should be in the
architecture-specific "lib" rather than the architecture-independent
"share" directory.

Tested with OpenEmbedded and on Debian GNU/Linux 9.3 (the special naming
only applies when installing in /usr.)
2018-01-04 12:46:41 +00:00
Nathan Moinvaziri fc746532d8 Change bzip stream code so it is similar to zlib stream code. 2018-01-03 10:24:18 -08:00
Nathan Moinvaziri d60c6d20af Turn off debugging. 2018-01-03 10:14:25 -08:00
Nathan Moinvaziri 55e4fe414e Version 2.2.5. 2018-01-03 10:13:28 -08:00
Nathan Moinvaziri 5bb372d495 Fixed zlib stream not writing all flush/finish bytes. 2018-01-03 10:08:34 -08:00
Nathan Moinvaziri a86a4355da Fixed bug reading entries with 0 size. #217 2018-01-02 13:12:07 -08:00
Nathan Moinvaziri c9fd8d4df0 Uncomment debug statement. 2018-01-02 13:10:04 -08:00
Nathan Moinvaziri 02123b82d5 Fixed bugs in buffered stream. #216
Added buffered stream support to minizip app.
Added unit tests for buffered io.
2018-01-02 09:22:38 -08:00
Nathan Moinvaziri 7140c588c6 Fixed writing raw data to zip file in compatibility layer. 2018-01-02 08:16:40 -08:00
Nathan Moinvaziri f60a99bd90 Merge pull request #215 from chenxiaolong/cmake-global
CMakeLists.txt: Use add_compile_options() instead of modifying CMAKE_C_FLAGS
2018-01-02 07:43:46 -08:00
Nathan Moinvaziri 50fd547660 Merge pull request #214 from chenxiaolong/posix-error-checking
mz_strm_posix: Fix return value checking for POSIX stdio functions
2018-01-02 07:43:01 -08:00
Andrew Gunnerson 2fa05a7264 CMakeLists.txt: Use add_compile_options() instead of modifying CMAKE_C_FLAGS
This allows a parent project to use minizip via:

    add_subdirectory(path/to/minizip)

without the compiler flags of the parent project being affected.

Signed-off-by: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
2018-01-01 15:51:40 -05:00
Andrew Gunnerson 1a20b75c46 CMakeLists.txt: Fix typo: _FILE_OFFSET_BIT -> _FILE_OFFSET_BITS
Signed-off-by: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
2018-01-01 15:45:24 -05:00
Andrew Gunnerson dab094fc31 mz_strm_posix: Fix return value checking for POSIX stdio functions
Signed-off-by: Andrew Gunnerson <chenxiaolong@cxl.epac.to>
2018-01-01 15:41:32 -05:00
Nathan Moinvaziri 13a12e32ab Fixed missing prototypes warning. #213 2017-12-26 12:40:30 -08:00
Nathan Moinvaziri 73418b7e05 Fixed unused variables. #212 2017-12-26 12:29:21 -08:00
Nathan Moinvaziri 3f7de8e289 Simplify cleaning up of resources. 2017-12-11 21:09:52 -08:00
Nathan Moinvaziri 18a30653b1 Verify decrypted header to detect wrong password for Traditional PKZIP. 2017-12-07 06:59:53 -08:00
Nathan Moinvaziri b73887478a Wait for CI for 30 minutes. 2017-12-04 08:33:51 -08:00
Nathan Moinvaziri 51fb0afc82 Fixed casting warning. 2017-12-04 05:42:11 -08:00
Nathan Moinvaziri a45fa6b8a0 Merge pull request #209 from GerbilSoft/bugfix/libbsd-requirements
Mark libbsd as REQUIRED on Linux.
2017-12-03 23:08:51 -08:00
Nathan Moinvaziri 6c6700d2f4 Removed arc4random_buf shim. 2017-12-03 23:07:38 -08:00
Nathan Moinvaziri 0574424b05 Fixed formatting 2017-12-03 23:06:36 -08:00
Nathan Moinvaziri 919d837abf Fixed potential mismatch of calling conventions. #208 2017-12-03 22:59:26 -08:00
David Korth 12db0fc415 mz_strm_split.c: snprintf() isn't defined before MSVC 2015.
_snprintf() is available, so use that instead.
2017-11-26 13:43:38 -05:00
David Korth e4bd6d3191 Removed the executable bit from .c and .h files. 2017-11-26 13:42:31 -05:00
David Korth f9749af452 mz_os_posix.c: Implement arc4random_buf() for Mac OS X earlier than 10.7.
10.6 and earlier has arc4random(), but not arc4random_buf().
2017-11-18 16:51:28 -05:00
David Korth 02a516944d CMakeLists.txt: libbsd is required for Linux builds.
mz_os_posix.c: #include <bsd/stdlib.h> on Linux and <stdlib.h> on other
platforms.
2017-11-18 16:48:52 -05:00
Nathan Moinvaziri 0d4ae83bd2 Update README.md 2017-11-15 22:01:36 -08:00
Nathan Moinvaziri d15b013734 Merge branch 'master' of https://github.com/nmoinvaz/minizip 2017-11-15 22:00:04 -08:00
Nathan Moinvaziri 7e49256146 Version 2.2.4. 2017-11-15 21:57:52 -08:00
Nathan Moinvaziri 97a759a14b Merged fcrypt since it has limited support. Allows for easy AES library drop-in replacement for products that implement their own aes library. 2017-11-15 21:55:59 -08:00
Nathan Moinvaziri a3dc63a17f Merge pull request #207 from GerbilSoft/bugfix/mz_compat.fix-wrapper-functions
mz_compat.c: Fix zipOpen(), zipOpen64(), and unzOpen64().
2017-11-12 12:35:42 -08:00
David Korth be85b3b4cd mz_compat.c: Fix zipOpen(), zipOpen64(), and unzOpen64().
The previous bugfixes fixed the functions that took a
zlib_filefunc_def* parameter, but they inadvertently broke the
functions that didn't. The fix is to store the filefunc pointer
locally, then pass a pointer to the pointer.
2017-11-12 11:32:40 -05:00
Nathan Moinvaziri 3da621e118 Fixed formatting. 2017-11-11 14:29:25 -08:00
Nathan Moinvaziri 211f14074a Merge pull request #206 from GerbilSoft/bugfix/fix-mz_compat-2.2.3.v2
Fixes for the mz_compat layer.
2017-11-11 14:25:59 -08:00
David Korth 819d0d56f0 test.c: Use "%u" for printing uint32_t, not "%d".
Found using cppcheck-1.81.
2017-11-11 08:16:32 -05:00
David Korth fa7fadebfa minizip.c: Check for 'k' and 'K', not 'k' and 'k'.
Found using cppcheck-1.81.
2017-11-11 08:16:32 -05:00
David Korth a6e7d468e3 mz_compat.c: unzOpen2_64(): Go to the first file immediately.
MiniZip 1.x does this.

TODO: MiniZip 1.x also goes to the first disk when opening a Zip file
for write. Not sure if we should (or can) do that too...
2017-11-11 08:16:32 -05:00
David Korth b8f7cf0fa7 mz_compat.c: unzGetCurrentFileInfo64(): Make sure filename and comment are NULL-terminated.
MiniZip 1.x always NULL-terminated these fields, but MiniZip 2.x does
not. This may break some programs that expect NULL-terminated fields
instead of using the explicit length.

Add a NULL terminator if there's enough space in the buffers.
2017-11-11 08:16:32 -05:00
David Korth 886df95632 mz_compat.c: unzClose(): Close the stream before destroying it.
Otherwise, we end up leaking the file handle. On Windows, the file is
opened with exclusive (non-shared) access, which prevents us from
opening the file again until the program exits.
2017-11-11 08:16:32 -05:00
David Korth 80c2d56436 mz_compat.c: Correctly dereference pzlib_filefunc_def.
In the fill_*() functions, not dereferencing `pzlib_filefunc_def`
results in the functions acting like nops.

In zipOpen2_64(), not dereferencing `pzlib_filefunc_def` causes it
to use the wrong pointer as the vtbl.
2017-11-11 08:16:32 -05:00
Nathan Moinvaziri 4f6a0e3fc1 Add ability to compile without zlib for LZMA support only. 2017-11-10 08:45:14 -08:00
Nathan Moinvaziri 91a76f61c9 Write bits 1 and 2 of general purpose bit based on compression method.
Remove zlib.h include from mz_zip.
2017-11-10 07:39:06 -08:00
Nathan Moinvaziri 0cdc6af8cd Added liblzma crc32 functions back in. 2017-11-10 07:34:02 -08:00
Nathan Moinvaziri 6186dd6dc6 Merge pull request #204 from tz-lom/patch-1
Fix compilation without encryption
2017-11-10 07:29:05 -08:00
Nathan Moinvaziri bf26d0e7f7 Merge pull request #205 from tz-lom/patch-2
Add missed function
2017-11-10 07:28:17 -08:00
tz-lom 2aa8ed38a2 Add missed function 2017-11-10 15:04:39 +03:00
tz-lom b1b25804fc Fix compilation without encryption 2017-11-10 15:03:02 +03:00
Nathan Moinvaziri 053d00c451 Fixed forgot to uncomment out code. 2017-11-06 09:20:36 -08:00
Nathan Moinvaziri b579191d9f Fixed file handle not closed in win32. (Issue #203) 2017-11-06 06:35:44 -08:00
Nathan Moinvaziri db8df5bd96 Version 2.2.3. 2017-10-27 21:23:50 -07:00
Nathan Moinvaziri 507074781d Only check if disk exists when reading disk part. 2017-10-26 21:09:49 -07:00
Nathan Moinvaziri 62e7e2b0b9 Fixed bug not being able read across split disks properly. 2017-10-26 20:10:02 -07:00
Nathan Moinvaziri f2b096a82e Fixed code that accidentally got removed. 2017-10-26 18:13:13 -07:00
Nathan Moinvaziri ec6d4535ab Fixed bug reading directories in windows.
Fixed compiler warning in mz_get_file_crc.
2017-10-26 17:52:36 -07:00
Nathan Moinvaziri 83a886f154 Updated version numbers. 2017-10-26 17:07:14 -07:00
Nathan Moinvaziri 8d2ce022c1 Remove more unused files. 2017-10-26 17:05:32 -07:00
Nathan Moinvaziri d42bff7e8f Merge branch 'dev' of https://github.com/nmoinvaz/minizip into dev 2017-10-26 16:48:18 -07:00
Nathan Moinvaziri 80fa033e18 Remove more unused liblzma files. 2017-10-26 16:46:34 -07:00
Nathan Moinvaziri bd247ee400 Upgraded to liblzma 5.2.3.
Remove a bunch of unused files from liblzma.
2017-10-26 15:41:21 -07:00
Nathan Moinvaziri 76c44d530d Update README.md 2017-10-26 11:52:06 -07:00
Nathan Moinvaziri 1d82e28fd6 Fixed open flag in readme. 2017-10-26 11:50:20 -07:00
Nathan Moinvaziri 1250e1ea6a Fixed version number not being updated. 2017-10-26 10:48:02 -07:00
Nathan Moinvaziri ddc57abe50 Version 2.2.2. 2017-10-26 10:26:58 -07:00
Nathan Moinvaziri fdc695be86 Added zip memory test. 2017-10-26 10:21:21 -07:00
Nathan Moinvaziri 17cdaec2f7 Fixed don't save modified date if it is zero. 2017-10-26 10:18:41 -07:00
Nathan Moinvaziri 51f7250ce2 Fixed not uncompressing stream properly. 2017-10-26 10:15:21 -07:00
Nathan Moinvaziri 17fcdcdcb0 Check for null return value from localtime. 2017-10-26 08:13:13 -07:00
Nathan Moinvaziri a9002ab444 Fixed printing of error code when listing zip. 2017-10-26 08:07:16 -07:00
Nathan Moinvaziri 28155e2ac6 Merge pull request #198 from rusdevops/patch-4
For C++ projects
2017-10-25 17:40:20 -04:00
Nathan Moinvaziri 088bfe65ec Also rename the callbacks. 2017-10-25 14:27:26 -07:00
Nathan Moinvaziri f3d7fa8b81 Merge pull request #196 from rusdevops/patch-2
Update CMakeLists.txt
2017-10-25 15:26:35 -04:00
Nathan Moinvaziri c51ebaf1be Merge pull request #197 from rusdevops/patch-3
Update README.md
2017-10-25 15:24:37 -04:00
rusdevops a039e4468a Update mz_strm.c 2017-10-25 11:12:03 -07:00
rusdevops 3c305cfff3 Update mz_strm.h 2017-10-25 11:10:54 -07:00
rusdevops b3a31e0e0a Update README.md 2017-10-25 11:06:55 -07:00
rusdevops 2ee84e0ff4 Update CMakeLists.txt
For the automatic including of the headers
2017-10-25 10:56:06 -07:00
Nathan Moinvaziri fcc2dd8329 Merge pull request #195 from rusdevops/patch-2
Update mz_os_posix.h
2017-10-25 10:33:55 -04:00
Nathan Moinvaziri 750ad260f0 Update mz_os_posix.h 2017-10-25 07:33:29 -07:00
rusdevops 682a3213c3 Update CMakeLists.txt 2017-10-25 06:09:01 -07:00
rusdevops ff6d1d5914 Update mz_os_posix.h 2017-10-25 05:50:39 -07:00
Nathan Moinvaziri 28cc486e44 Remove unused bzip2 file. 2017-10-23 22:43:25 -07:00
Nathan Moinvaziri 0bdd283fab Sync with zlib changes to WinRT detection. 2017-10-23 22:42:57 -07:00
Nathan Moinvaziri a02103c062 Fixed compatibility #defines to point to correct functions. 2017-10-23 22:19:49 -07:00
Nathan Moinvaziri 21e872525e Fixed formatting and attribution.
Fixed attribution.
2017-10-23 22:17:03 -07:00
Nathan Moinvaziri 70d41f6479 Moved get file crc to os functions. 2017-10-23 22:12:07 -07:00
Nathan Moinvaziri a45b34f35e Fixed order of #defines. 2017-10-23 21:54:47 -07:00
Nathan Moinvaziri 1b337b26db Removed duplicate code.
Fixed header.
2017-10-23 21:25:07 -07:00
Nathan Moinvaziri c785549c30 Fixed warnings on linux for string printf. 2017-10-23 18:58:56 -07:00
Nathan Moinvaziri 91fd6ab60d Make #define names consistent.
Fixed arcrandom_buf warning on linux.
2017-10-23 18:45:29 -07:00
Nathan Moinvaziri 70e3dc300d Fixed warnings on linux. 2017-10-23 18:38:43 -07:00
Nathan Moinvaziri 0d465a97f5 Fixed function return types. 2017-10-23 18:35:17 -07:00
Nathan Moinvaziri 2ca582f350 Fixed function name. 2017-10-23 18:32:53 -07:00
Nathan Moinvaziri b5a7b1fc45 Removed unused include.
Fixed bad function names.
2017-10-23 18:29:52 -07:00
Nathan Moinvaziri 0ebb9f0a00 Moved get file size and file exists function into platform.
Fixed #define for dosdate_to_tm.
2017-10-23 18:27:18 -07:00
Nathan Moinvaziri 44d2079466 Version 2.2.1. 2017-10-23 17:35:22 -07:00
Nathan Moinvaziri 748ecf25ba Fixed file exists check in win32. 2017-10-23 17:30:45 -07:00
Nathan Moinvaziri 79ac3385f1 Fixed appending zip to executable and added unit test.
Renamed MZ_STREAM_OPEN_* to MZ_OPEN_MODE_*.
Renamed MZ_STREAM_SEEK_* to MZ_SEEK_*.
2017-10-23 17:22:36 -07:00
Nathan Moinvaziri bf1b974388 Removed unused #defines. 2017-10-23 11:12:38 -07:00
Nathan Moinvaziri 0b784281a8 Merge branch 'dev' of https://github.com/nmoinvaz/minizip into dev 2017-10-22 14:50:46 -07:00
Nathan Moinvaziri cbc8c816e7 Version 2.2.0. 2017-10-22 14:50:43 -07:00
Nathan Moinvaziri 7dbeffa490 Update README.md 2017-10-22 14:49:56 -07:00
Nathan Moinvaziri 898e4adf8c Update README.md 2017-10-22 14:49:26 -07:00
Nathan Moinvaziri fd039e3d71 Rename some variables for consistency. 2017-10-22 14:40:39 -07:00
Nathan Moinvaziri 9eab88e771 Added support for NTFS timestamps. #140
Fixed reading cd while in write mode can cause cd to be prematurely written.
2017-10-22 14:32:37 -07:00
Nathan Moinvaziri a994e3f8c0 Version 2.1.1. 2017-10-21 09:43:40 -07:00
Nathan Moinvaziri d52d916a36 Merge branch 'dev' of https://github.com/nmoinvaz/minizip into dev 2017-10-21 09:37:24 -07:00
Nathan Moinvaziri cda3600384 Modifications so you can read the entries when in write mode. 2017-10-21 09:37:18 -07:00
Nathan Moinvaziri 8543222ef7 Update README.md 2017-10-20 17:56:57 -07:00
Nathan Moinvaziri 51bf64a65c Force compression method to RAW when compression level is set to 0. 2017-10-20 14:23:37 -07:00
Nathan Moinvaziri 110ce661b3 Merge branch 'master' of https://github.com/nmoinvaz/minizip 2017-10-20 09:03:38 -07:00
Nathan Moinvaziri 674b91eb5b Updated readme. 2017-10-20 09:01:39 -07:00
Nathan Moinvaziri 57ae26f6c7 Version 2.1.0. 2017-10-20 08:55:42 -07:00
Nathan Moinvaziri 903b73d5da Fixed force opening of zip with raw. 2017-10-20 08:47:19 -07:00
Nathan Moinvaziri caf54683a5 Move raw stream back to zlib. 2017-10-20 08:37:58 -07:00
Nathan Moinvaziri e220ac2679 Updated readme.
Moved raw stream to mz_strm.
2017-10-20 08:06:50 -07:00
Nathan Moinvaziri 5f9e5d3aee Move version_madeby out of the zip close function.
Removed need for zip64 value in mz_file_info.
Fixed bug reading local header filename and extrafield.
Code cleanup and fixed warnings.
2017-10-20 07:59:39 -07:00
Nathan Moinvaziri 6e21e868fa Removed global_info structure and added accessors for global comment and number entries. 2017-10-19 09:57:54 -07:00
Nathan Moinvaziri a66cc31fac Merged miniunz into minizip.
Renamed passthru stream to raw stream.
Removed zlib extra compression parameters, so now all streams have the same basic parameter, which is compression level. And so got rid of mz_zip_compress and mz_zip_crypt structures.
Fixed issues using the disk splitting stream when the disk size was 0.
Changed return value of mz_file_exists to be consistent with all other functions.
Updated test harness and added empty zip test.
2017-10-18 16:51:10 -07:00
Nathan Moinvaziri 68fae9970c Fixed more bugs reading lzma, bzip2, and zlib streams. 2017-10-18 15:46:06 -07:00
Nathan Moinvaziri 1892617eeb Removed unused options from zlib stream and other cleanup. 2017-10-18 11:36:35 -07:00
Nathan Moinvaziri 489eea4e6d Fixed bzip2 not returning read = 0 on next call after end of stream.
Fixed lzma trying to decode uncompressed size which isn't used in zip format.
2017-10-18 11:35:53 -07:00
Nathan Moinvaziri b192609758 Merge pull request #193 from timothytylee/mz_compat
"mz_error.h" no longer exists
2017-10-18 02:24:57 -04:00
Nathan Moinvaziri 323ecf7fe7 Merge pull request #192 from vszakats/zipcharpc
mz_compat.h: add type zipcharpc for compatibility
2017-10-18 02:24:15 -04:00
Nathan Moinvaziri 397393d2c8 Merge pull request #194 from timothytylee/win32_errno
Include "errno.h" to define EEXIST
2017-10-18 02:23:35 -04:00
Nathan Moinvaziri 8f67ff9b16 Merged unzip and zip classes into one zip class and reduce a lot of redundant code between the two. 2017-10-17 23:22:29 -07:00
Nathan Moinvaziri 9781d0aa80 Fixed total_in value for lzma, bzip2, zlib streams.
Fixed read functions for lzma, bzip2, and zlib not returning error.
2017-10-17 23:20:14 -07:00
Timothy Lee c190935729 Include "errno.h" to define EEXIST 2017-10-18 09:00:18 +11:00
Timothy Lee 2e51484669 "mz_error.h" no longer exists 2017-10-18 08:58:12 +11:00
Viktor Szakats 8a2fedadbd mz_compat.h: add type zipcharpc for compatibility
with original zlib/contrib/minizip API
2017-10-17 17:13:33 +00:00
Nathan Moinvaziri c25856d8e8 Update README.md 2017-10-17 08:41:30 -07:00
Nathan Moinvaziri b1c516ed2d Fixed reading whole buffer to workaround incorrect headers. #171 2017-10-17 08:27:01 -07:00
Nathan Moinvaziri a566dc6250 Version 2.0.1 2017-10-16 20:59:17 -07:00
Nathan Moinvaziri 1cd6c0dca1 Fixed wrong name in comments. 2017-10-16 20:58:10 -07:00
Nathan Moinvaziri 5d5de43d38 Merge branch 'dev' of https://github.com/nmoinvaz/minizip into dev 2017-10-16 20:57:10 -07:00
Nathan Moinvaziri 6903fd65d9 Fixed comments. 2017-10-16 20:57:04 -07:00
Nathan Moinvaziri 0d72a9838a Update README.md 2017-10-16 20:54:05 -07:00
Nathan Moinvaziri 7d22a2279b Merge branch 'dev' of https://github.com/nmoinvaz/minizip into dev 2017-10-16 20:52:37 -07:00
Nathan Moinvaziri 37a32e19a6 Uncomment build test lines. 2017-10-16 20:51:30 -07:00
Nathan Moinvaziri 685eaa63e7 Update README.md 2017-10-16 20:49:13 -07:00
Nathan Moinvaziri fca9e5d751 Update README.md 2017-10-16 20:39:40 -07:00
Nathan Moinvaziri 63c205a9f9 Merge branch 'master' of https://github.com/nmoinvaz/minizip 2017-10-16 20:35:29 -07:00
Nathan Moinvaziri 1aa5e324be Rename IOWIN32_USING_WINRT_API to MZ_USING_WINRT_API
Added MZ_USING_WINRT_API check to mz_os_win32.c.
2017-10-16 20:34:01 -07:00
Nathan Moinvaziri 8a68512044 Merge pull request #191 from nmoinvaz/dev
Update README.md
2017-10-16 23:28:51 -04:00
Nathan Moinvaziri 2a5a9ff56e Update README.md 2017-10-16 20:27:40 -07:00
Nathan Moinvaziri 11679d669c Version 2.0.1 2017-10-16 20:15:35 -07:00
Nathan Moinvaziri 1151fb79a3 Merge branch 'dev' 2017-10-16 19:35:29 -07:00
Nathan Moinvaziri 84bae188b6 Move rest of source files to src dir. 2017-10-16 19:31:24 -07:00
Nathan Moinvaziri 24ef270bbe Move source files to src directory. 2017-10-16 19:30:24 -07:00
Nathan Moinvaziri a8f2f2951a Remove deleting print statement due to travis ci log length. 2017-10-16 19:03:55 -07:00
Nathan Moinvaziri 7482c1e277 Rename exit to sys.exit. 2017-10-16 19:02:31 -07:00
Nathan Moinvaziri 8e095476ec Remove use of random. 2017-10-16 18:59:15 -07:00
Nathan Moinvaziri da06ac82f7 Fixed dir check in linux. 2017-10-16 18:50:32 -07:00
Nathan Moinvaziri e617b750a1 Specify version of python. 2017-10-16 18:46:18 -07:00
Nathan Moinvaziri afd0400ed0 Attempt to fix ci. 2017-10-16 18:37:59 -07:00
Nathan Moinvaziri 8430b02c25 Fixed compilation if no encryption is used. #189 2017-10-16 18:29:03 -07:00
Nathan Moinvaziri 3cc104b962 Fixed tests so build fails if they fail.
Added random file generation tests.
Added disk spanning tests.
2017-10-16 15:59:06 -07:00
Nathan Moinvaziri 77008c6344 Fixed problems extracting to a directory after change_dir was removed.
Consolidated all the path building to use mz_path_combine.
Fixed bug in minizip when using mz_zip_write_entry.
Created structs in minizip and miniunz for keeping all options together.
Fixed bug reading end of zip when using split stream.
Fixed large file support in win32.
2017-10-16 14:50:31 -07:00
Nathan Moinvaziri 2f7b0bdac1 Remove .png from test script. 2017-10-16 07:56:04 -07:00
Nathan Moinvaziri 9ab31ba129 Fixed reference to mz_error.h
Cleaned up searching for cd functions.
2017-10-16 07:51:09 -07:00
Nathan Moinvaziri 00cca9f511 Made PKWARE traditional encryption optional.
Added support for disk splitting into the minizip and miniunz sample apps.
Removed change_dir function from os helpers since it is no longer needed and changing dir causes problems when trying to find the next split archive.
Cleaned up #defines and pushed more into mz.h which was previously named mz.h
Removed NOUNCRYPT and NOCRYPT and instead implemented HAVE_CRYPT which can be configured via CMake USE_CRYPT.
Fixed issues unzipping non-split archives.
Fixed return value on mz_zip_entry_write.
2017-10-16 07:37:11 -07:00
Nathan Moinvaziri 887020d50c Update README.md 2017-10-16 06:15:47 -07:00
Nathan Moinvaziri 99fe057281 Fixed headers not showing up in generated projects.
Implement pkgconfig correctly. #185
2017-10-15 22:46:52 -07:00
Nathan Moinvaziri f7f1312bd0 Reduce the size of the buffers. 2017-10-15 22:22:19 -07:00
Nathan Moinvaziri 11e823ec52 Don't rely on number_entry in global info for enumerating entries. #186 2017-10-15 22:15:23 -07:00
Nathan Moinvaziri 0e58cf23b3 Fixed unable to locate file correctly. #188. 2017-10-15 20:51:34 -07:00
Nathan Moinvaziri 4e7fb98d02 Added pkgconfig. #185 2017-10-15 20:45:42 -07:00
Nathan Moinvaziri e8d0ed7bb0 Update README.md 2017-10-10 21:00:04 -07:00
Nathan Moinvaziri 27ed11485c Update README.md 2017-10-10 19:40:44 -07:00
Nathan Moinvaziri 26ac4f94f4 Merge remote-tracking branch 'origin/dev' 2017-10-10 19:39:08 -07:00
Nathan Moinvaziri c7051b58b0 Updated readme. 2017-10-10 19:27:57 -07:00
Nathan Moinvaziri ba1538d5fb Updated readme. 2017-10-10 19:22:43 -07:00
Nathan Moinvaziri 41f658b29f Updated readme for disk splitting. 2017-10-10 19:21:56 -07:00
Nathan Moinvaziri 05e99930c9 Finished work on disk spanning stream. 2017-10-10 19:18:05 -07:00
Nathan Moinvaziri e6d7c567f7 Merge branch 'dev' of https://github.com/nmoinvaz/minizip into dev 2017-10-10 18:24:08 -07:00
Nathan Moinvaziri f6e81cde77 Fixed searching for central dir in zip and unzip. 2017-10-10 18:24:03 -07:00
Nathan Moinvaziri fe3b578d16 Changed better finding of libbsd on unix. 2017-10-10 16:01:20 -07:00
Nathan Moinvaziri b2e601a7f1 Removed osx since travis takes forever to build with it. 2017-10-10 16:00:59 -07:00
Nathan Moinvaziri bf2e3850e6 Install libbsd on linux. 2017-10-10 13:54:49 -07:00
Nathan Moinvaziri ed894fb175 Fixed target_link_libraries. 2017-10-10 13:35:10 -07:00
Nathan Moinvaziri 890057b3e6 Fixed project name. 2017-10-10 13:32:26 -07:00
Nathan Moinvaziri 2f5c63277a Linked to bsd library on systems that don't have it for arc4random. 2017-10-10 13:28:26 -07:00
Nathan Moinvaziri eeda2d769a Merge branch 'dev' of https://github.com/nmoinvaz/minizip into dev 2017-10-10 13:16:03 -07:00
Nathan Moinvaziri 0c5e8a4a1a Fixed os matrix. 2017-10-10 13:15:58 -07:00
Nathan Moinvaziri dac37702b3 Use arc4random_buf. (Issue: #175) 2017-10-10 13:07:02 -07:00
Nathan Moinvaziri ff019428da Use arc4random_buf. (Issue: #175) 2017-10-10 13:06:10 -07:00
Nathan Moinvaziri 33ee4a88ff Merge pull request #179 from Coeur/empty_zip
compatibility with empty zip files
2017-10-10 12:48:24 -07:00
Nathan Moinvaziri 3a0fb55091 Add compatibility with empty zip files. #179. 2017-10-10 12:47:48 -07:00
Nathan Moinvaziri 0df2b04a15 Removed def for win32 for snprintf. 2017-10-10 12:10:27 -07:00
Nathan Moinvaziri 97f2054290 Added mz_strm_posix back to libminizip on windows. 2017-10-10 12:05:16 -07:00
Nathan Moinvaziri 869dc30652 Fixed compiler warnings on mac.
Cleaned up includes.
2017-10-10 11:59:09 -07:00
Nathan Moinvaziri 8ada9d0409 Fixed cmake building on mac. 2017-10-10 10:55:50 -07:00
Nathan Moinvaziri af2daca4a1 Fixed issues with zip64 not being written in local header.
Modified split writing to stop creating disks after central dir.
Renamed method #defines.
2017-10-10 10:05:20 -07:00
Nathan Moinvaziri 11b489c949 Updated readme. 2017-10-09 23:39:01 -07:00
Nathan Moinvaziri 016ad474e3 Fixed problems flushing zlib, lzma, and bzip2 streams.
Added generic property cb for getting/setting int values in streams.
Added support for disk splitting (write-only at the moment)
2017-10-09 23:36:30 -07:00
Nathan Moinvaziri 0d87c2f215 Merge branch 'dev' of https://github.com/nmoinvaz/minizip into dev 2017-10-09 19:03:11 -07:00
Nathan Moinvaziri 4ca84731d0 Removed unnecessary test file. 2017-10-09 19:03:05 -07:00
Nathan Moinvaziri 60f7ca0f28 Update README.md 2017-10-09 19:01:23 -07:00
Nathan Moinvaziri 158ea756f9 Update README.md 2017-10-09 19:00:49 -07:00
Nathan Moinvaziri 9925e427f9 Update README.md 2017-10-09 19:00:18 -07:00
Nathan Moinvaziri 9809ec76fb Updated readme. 2017-10-09 18:59:23 -07:00
Nathan Moinvaziri 562299dda7 Removed windows, linux, and mac projects in favor of cmake. 2017-10-09 18:58:00 -07:00
Nathan Moinvaziri 1a99ad9abe Added back some cmake guru. 2017-10-09 18:53:04 -07:00
Nathan Moinvaziri 5f05fccf57 Merged all the projects into libminizip and conditionally create the projects based on what features people want. 2017-10-09 18:49:21 -07:00
Nathan Moinvaziri b962a3d8af Moved bzip2 library into its own project. 2017-10-09 11:08:13 -07:00
Nathan Moinvaziri fcc07c3038 Fixed crc32 stream base not being set in get_file_crc. 2017-10-09 01:06:42 -07:00
Nathan Moinvaziri 8320914c13 Merge pull request #182 from Coeur/simple_optional_aes
allowing AES to be optional at runtime
2017-10-09 00:56:12 -07:00
Nathan Moinvaziri 984c25ecac Merge branch 'dev' of https://github.com/nmoinvaz/minizip into dev 2017-10-09 00:41:01 -07:00
Nathan Moinvaziri d83efdc614 Added back function to recursively create dirs.
Fixed issue extracting files that have dirs in them.
Added unit test for directory zipping/unzipping.
2017-10-09 00:40:53 -07:00
Nathan Moinvaziri 21356b1426 Merge pull request #181 from Coeur/close_before_delete
close before delete
2017-10-09 00:35:10 -07:00
Nathan Moinvaziri 616e22a00a Merge branch 'dev' of https://github.com/nmoinvaz/minizip into dev 2017-10-08 23:55:31 -07:00
Nathan Moinvaziri 449305b3bb Rename bzip2 library in CMake. 2017-10-08 23:55:23 -07:00
Nathan Moinvaziri 52cbc746a8 Update README.md 2017-10-08 23:53:36 -07:00
Nathan Moinvaziri 29d61ce33a Added contents table 2017-10-08 23:49:57 -07:00
Nathan Moinvaziri cb96b1e06c Fixed compiler errors on posix stream. 2017-10-08 23:39:26 -07:00
Nathan Moinvaziri 3e529a6d54 Added testing of compiling on osx. 2017-10-08 23:36:09 -07:00
Nathan Moinvaziri f95664a4e2 Fixed compiler error with missing param. 2017-10-08 23:35:46 -07:00
Nathan Moinvaziri 8db28c9afe Added back compatibility layer.
Fixed compiler warnings and errors.
2017-10-08 23:26:17 -07:00
Nathan Moinvaziri 1e3300f758 Allow retrievable of interfaces for help for compatibility layer. 2017-10-08 21:48:28 -07:00
Antoine Cœur 46695d2c00 allowing AES to be optional at runtime 2017-10-07 19:28:36 +08:00
Antoine Cœur b41e56102e close before delete 2017-10-07 17:51:48 +08:00
Nathan Moinvaziri 7d9f250ed0 Specify c99 in cmake. 2017-10-06 15:20:04 -07:00
Nathan Moinvaziri 9a8a2e1b7a Add cflags. 2017-10-06 15:13:34 -07:00
Nathan Moinvaziri 2d2266c060 Updated travis.yml. 2017-10-06 15:02:29 -07:00
Nathan Moinvaziri a3d47046d5 Merge branch 'dev' of https://github.com/nmoinvaz/minizip into dev 2017-10-06 14:59:01 -07:00
Nathan Moinvaziri bc2a8fc501 Fixed gcc compilation. 2017-10-06 14:58:53 -07:00
Antoine Cœur c6abfa4b8a compatibility with empty zip files 2017-10-07 03:47:50 +08:00
Nathan Moinvaziri 2e79954715 Merge pull request #177 from Coeur/include_mz_strm
mz_strm.h is uncorrelated to ioapi.h
2017-10-06 09:36:48 -07:00
Antoine Cœur d082035071 mz_strm.h is uncorrelated to ioapi.h 2017-10-06 23:40:32 +08:00
Nathan Moinvaziri fd83d0d4a3 Added platform defined version_madeby values. 2017-10-06 00:20:05 -07:00
Nathan Moinvaziri 40df94bafb Merge pull request #172 from Coeur/guard_path
guarding from missing path
2017-10-06 00:12:34 -07:00
Nathan Moinvaziri 9a43924dc4 Fixed formatting. 2017-10-06 00:09:30 -07:00
Nathan Moinvaziri fce8e4c2fd Fixed compilation errors on Windows. 2017-10-06 00:08:29 -07:00
Nathan Moinvaziri 0c9660b83f Fixed compilation on mac. 2017-10-06 00:02:28 -07:00
Nathan Moinvaziri 4f697ee0de Fixed incorrect function return value for readdir. 2017-10-05 23:55:59 -07:00
Nathan Moinvaziri 653aa32975 Fixed wrong files being compiled under linux. 2017-10-05 23:35:37 -07:00
Nathan Moinvaziri aa323f508d Added ability for minizip cmd tool to add directories to zip files.
Split out os specific functions into their own files instead of as part of stream.
2017-10-05 23:32:57 -07:00
Nathan Moinvaziri 0ff051f4d2 Merge branch 'dev' of https://github.com/nmoinvaz/minizip into dev 2017-10-05 21:26:40 -07:00
Nathan Moinvaziri eb5d73037a Normalize integer types. 2017-10-05 21:26:34 -07:00
Nathan Moinvaziri b6b3fd8033 Merge pull request #174 from Coeur/macOS
Naming for macOS and Xcode
2017-10-05 21:11:57 -07:00
Nathan Moinvaziri c143d01036 Shorten description of library. 2017-10-05 21:11:41 -07:00
Nathan Moinvaziri 40631427ba Update .travis.yml 2017-10-05 21:09:13 -07:00
Nathan Moinvaziri f0a5827baf Merge pull request #173 from Coeur/lzma_doc
lzma doc fix
2017-10-05 21:06:09 -07:00
Nathan Moinvaziri fb862a8740 Merge branch 'dev' of https://github.com/nmoinvaz/minizip into dev 2017-10-05 21:04:32 -07:00
Nathan Moinvaziri 65c1a55bdf Turn BUILD_TEST off by default. 2017-10-05 21:04:26 -07:00
Antoine Cœur 32577b0bf8 naming 2017-10-06 12:03:17 +08:00
Nathan Moinvaziri 9145c949cc Fixed mac compiler errors and warnings. 2017-10-05 21:02:36 -07:00
Antoine Cœur 748499768a lzma doc fix 2017-10-06 11:44:21 +08:00
Antoine Cœur 3ffbf2f6bc guarding from missing path 2017-10-06 11:43:21 +08:00
Nathan Moinvaziri 91cd23d633 Fixes to mac project. 2017-10-05 19:30:15 -07:00
Nathan Moinvaziri 4893ae14e7 Removed test source files from libminizip. 2017-10-05 19:24:46 -07:00
Nathan Moinvaziri d3ae6f7670 Update README.md 2017-10-05 19:21:01 -07:00
Nathan Moinvaziri 25f7f0a25a Update README.md 2017-10-05 19:17:36 -07:00
Nathan Moinvaziri 370990f293 Update .travis.yml 2017-10-05 19:17:15 -07:00
Nathan Moinvaziri 955482e184 Update .travis.yml 2017-10-05 19:15:43 -07:00
Nathan Moinvaziri cedd590151 Update .travis.yml 2017-10-05 19:12:14 -07:00
Nathan Moinvaziri fb85619d6b Update .travis.yml 2017-10-05 19:08:04 -07:00
Nathan Moinvaziri c4ead3d152 Update .travis.yml 2017-10-05 19:05:57 -07:00
Nathan Moinvaziri bfb67e5718 Merge branch 'dev' of https://github.com/nmoinvaz/minizip into dev 2017-10-05 19:04:03 -07:00
Nathan Moinvaziri cf2844dc22 Fixed building liblzma on linux. 2017-10-05 19:03:24 -07:00
Nathan Moinvaziri 09739636fd Update .travis.yml 2017-10-05 18:58:09 -07:00
Nathan Moinvaziri 2291701cb6 Update .travis.yml 2017-10-05 18:55:07 -07:00
Nathan Moinvaziri 77fcdb3b31 Added test script and files.
Updated travis yaml.
2017-10-05 18:51:48 -07:00
Nathan Moinvaziri e5dfc9f215 Updated travis yaml. 2017-10-05 18:49:13 -07:00
Nathan Moinvaziri 8a2a3d3fbb Merge branch 'dev' of https://github.com/nmoinvaz/minizip into dev 2017-10-05 18:45:31 -07:00
Nathan Moinvaziri 973457dac8 Added LZMA, BZIP2, and AES command line params to zip cmd tool.
Clean up some logic in the zip cmd tool.
Fixed zipping to non-existant directory.
Fixed passthru stream shouldn't open or close base streams.
Changed make_dir functions to succeed if dir exists.
Fixed compression method check for zip open functions.
Fixed wrong level being passed to bzip2.
Removed unused price_tablegen.c.
Updated CMakeLists.
Added travis yml.
2017-10-05 18:45:23 -07:00
Nathan Moinvaziri 1115cb299d Merge pull request #170 from Coeur/spelling
Spelling
2017-10-05 10:57:37 -07:00
Antoine Cœur 91a859329e spelling 2017-10-06 00:59:06 +08:00
Nathan Moinvaziri 056eecc691 Added missing version numbers to header. 2017-10-05 08:38:23 -07:00
Nathan Moinvaziri e3d541c5ff Fixed error handling in posix stream. (Issue #169) 2017-10-05 08:33:29 -07:00
Nathan Moinvaziri 583a8b5894 Merge branch 'dev' of https://github.com/nmoinvaz/minizip into dev 2017-10-05 08:27:06 -07:00
Nathan Moinvaziri c48c15314e Fixed zip64 not being written if no values used where it should be.
Fixed wrong compressed size for lzma.
2017-10-05 08:26:59 -07:00
Nathan Moinvaziri 174118af5a Merge pull request #167 from Coeur/doc
Doc
2017-10-05 07:55:08 -07:00
Nathan Moinvaziri 524286d116 Fixed double opening of zip in unzipping. (Issue #166) 2017-10-05 07:41:22 -07:00
Nathan Moinvaziri c1203c4734 Fixed dereference of null pointer. (Issue #166) 2017-10-05 07:39:35 -07:00
Nathan Moinvaziri b4e14bede3 Fixed unused path parameter. (Issue #166) 2017-10-05 07:38:13 -07:00
Nathan Moinvaziri 65e6f9af1a Updated version number. 2017-10-05 07:37:47 -07:00
Nathan Moinvaziri 99f24a0868 Updated readme. 2017-10-05 07:35:54 -07:00
Nathan Moinvaziri 45837b5cef Added version information to header comments. 2017-10-05 07:34:59 -07:00
Nathan Moinvaziri e1ad5ebfd3 Merge pull request #164 from Coeur/podspec
Podspec for 1.3.0
2017-10-05 07:32:46 -07:00
Nathan Moinvaziri 543aa2cc72 Merge pull request #165 from Coeur/paths
fix the group paths
2017-10-05 07:29:55 -07:00
Antoine Cœur 07571433a2 fix doc issue 2017-10-05 21:46:14 +08:00
Antoine Cœur 5fbb07618f fix duplicate command 2017-10-05 21:20:38 +08:00
Antoine Cœur a04070748d fix the group paths 2017-10-05 20:09:38 +08:00
Antoine Cœur cf61728385 updated source files for minizip 1.3.0 2017-10-05 18:46:44 +08:00
Nathan Moinvaziri 9b756f3357 Merge pull request #162 from Coeur/devlinefeeds
Unix Line Feeds
2017-10-05 00:35:41 -07:00
Nathan Moinvaziri 6a569b7278 Removed old/unused crc for crypting. 2017-10-05 00:33:22 -07:00
Nathan Moinvaziri 2db6420dc6 Removed unused open mode flags. 2017-10-05 00:32:23 -07:00
Antoine Cœur 0c2fceb79d Unix Line Feeds 2017-10-05 15:30:37 +08:00
Nathan Moinvaziri 5c4567ef32 Merge pull request #161 from Coeur/linefeeds
Unix Line Feeds
2017-10-05 00:29:26 -07:00
Antoine Cœur 75b651a208 Unix Line Feeds 2017-10-05 15:26:05 +08:00
Nathan Moinvaziri 7b0ee26d2d Fixed append mode in fopen. 2017-10-05 00:25:34 -07:00
Nathan Moinvaziri 92185bc351 Added comment separators. 2017-10-05 00:21:27 -07:00
Nathan Moinvaziri 0bb5afeb0d Merge pull request #147 from Timac/fix_unused_parameter_warnings
Fix unused parameter warnings generated by -Wunused-parameter
2017-10-05 00:14:11 -07:00
Nathan Moinvaziri 1d8757bdcf Updated readme. 2017-10-05 00:11:03 -07:00
Nathan Moinvaziri a9b27965b1 Updated readme. 2017-10-05 00:10:40 -07:00
Nathan Moinvaziri 63acff5b64 Updated readme. 2017-10-05 00:07:09 -07:00
Nathan Moinvaziri 32efd9bb5f Fixed compiler errors and warnings on mac.
Added liblzma project for mac.
2017-10-05 00:02:07 -07:00
Nathan Moinvaziri d8684909df Updated readme. 2017-10-04 22:50:55 -07:00
Nathan Moinvaziri 3f1b363cb4 Fixed date in some headers.
Updated readme.
2017-10-04 22:50:20 -07:00
Nathan Moinvaziri 9a075e5150 Updated readme. 2017-10-04 22:49:32 -07:00
Nathan Moinvaziri f2bf045e3d Updated readme. 2017-10-04 22:46:49 -07:00
Nathan Moinvaziri ab7c8c05d7 Updated readme. 2017-10-04 22:45:52 -07:00
Nathan Moinvaziri b351e5422a Updated readme. 2017-10-04 22:43:57 -07:00
Nathan Moinvaziri 6bc0ce0f2a Updated readme. 2017-10-04 22:40:58 -07:00
Nathan Moinvaziri 85d1608df2 Updated readme. 2017-10-04 22:37:57 -07:00
Nathan Moinvaziri 4166027081 Removed path param from open functions.
Removed mode parameter from zip open function.
Updated buffered io example in readme.
Removed compatibility layer.
2017-10-04 22:36:29 -07:00
Nathan Moinvaziri 41cfdcb45f Fixed includes. 2017-10-04 22:10:11 -07:00
Nathan Moinvaziri b436625e4e Forgot to add posix files. 2017-10-04 22:06:33 -07:00
Nathan Moinvaziri 8a6bc73ce3 Rename files. 2017-10-04 22:06:15 -07:00
Nathan Moinvaziri 4d71955a77 Rename files. 2017-10-04 22:00:54 -07:00
Nathan Moinvaziri a9b8cd886c Moved stream opening/closing outside of zip and unzip classes.
Fixed issues when password required for zip.
Added more checks for invalid params.
2017-10-04 21:59:39 -07:00
Nathan Moinvaziri 0a9cff3a1a Updated readme. 2017-10-04 20:58:31 -07:00
Nathan Moinvaziri a3226e081f Only set max total in when using encryption. 2017-10-04 20:12:10 -07:00
Nathan Moinvaziri 900129bc1c Added LZMA compression.
Cleaned up minizip app.
Removed prng from aes since our random generator should be cryptographically secure.
Removed old change log - it is in the git history now.
Added bzip2 license.
2017-10-04 20:06:25 -07:00
Nathan Moinvaziri 5ef60a2b39 Get rid of shared file moved all the code to mzstrm.
Converted miniunz to use new library changes.
2017-10-03 23:19:37 -07:00
Nathan Moinvaziri 4138ca5144 Refactored unzip functionality. 2017-10-03 21:56:07 -07:00
Nathan Moinvaziri 2b17f11cbd Merge pull request #156 from Coeur/c99
compilation fix when using c99 or c11
2017-10-03 08:28:45 -07:00
Nathan Moinvaziri b1badee350 Cleanup and fix formatting. 2017-10-03 00:44:18 -07:00
Nathan Moinvaziri 1477a61ef8 Remove need for min/max definitions. 2017-10-02 22:17:35 -07:00
Nathan Moinvaziri 0a592082d0 Added bzip2 compression back in.
Added test stream functions.
Refactored zip library.
2017-10-02 22:11:03 -07:00
Nathan Moinvaziri 3624400b08 Started using streams in zip.c. 2017-10-02 00:44:51 -07:00
Nathan Moinvaziri d2a1a12ac5 Rename files.
Clean up includes and comments.
2017-10-01 22:42:35 -07:00
Nathan Moinvaziri 42801b8fb0 Rename functions and definitions. 2017-10-01 21:43:24 -07:00
Nathan Moinvaziri bf028d70df Added aes stream.
Added bzip2 library.
2017-10-01 21:12:12 -07:00
Nathan Moinvaziri 74f8c7a6b1 Added traditional encryption stream.
Broke out random encryption code into platform specific stream code.
Cleanup other streams.
2017-10-01 20:33:01 -07:00
Antoine Cœur 8a92ca6767 compilation fix when using c99 or c11 2017-10-02 02:31:39 +08:00
Nathan Moinvaziri a4f2ea02ed Modified crc stream to not open or close base stream. 2017-09-29 21:15:08 -07:00
Nathan Moinvaziri 94611f11d4 Rework the streams. 2017-09-29 21:02:09 -07:00
Nathan Moinvaziri 428dc00237 Merge pull request #155 from Coeur/size_filename
ignoring size_filename to avoid failing unzipping
2017-09-29 09:48:36 -07:00
Antoine Cœur f05ae266b3 ignoring size_filename to avoid failing unzipping 2017-09-29 20:00:07 +08:00
Nathan Moinvaziri c83763a157 Merge pull request #150 from Timac/avoid_warning_tm_struct
Fix warning when initializing the tm struct
2017-09-27 11:02:29 -07:00
Nathan Moinvaziri 5f60d291db Cleanup 2017-09-27 11:02:10 -07:00
Alexandre Colucci d4de1c0eba Fix warning when initializing the tm struct 2017-09-27 09:32:08 +02:00
Nathan Moinvaziri e906983909 Code cleanup. 2017-09-26 22:10:03 -07:00
Nathan Moinvaziri f5a316a78b Revert windows specific changes to ioapi due to recent merge. 2017-09-26 21:53:50 -07:00
Nathan Moinvaziri 2251c1517e Merge pull request #146 from Timac/windows_support_utf8_paths
Add support for non-ASCII characters in paths on Windows
2017-09-26 21:46:15 -07:00
Alexandre Colucci 23de911f0f Fix all the unused parameter warnings generated by -Wunused-parameter on macOS with Xcode 9. 2017-09-26 09:28:22 +02:00
Alexandre Colucci 8fbb7656ca On Windows, paths containing non ASCII characters were not supported. The reason is that fopen on Windows only supports ASCII characters in paths.
This change adds a define WINDOWS_SUPPORT_UNICODE_PATH which uses _wfopen instead of fopen64 on Windows. Tested on Windows 10.
2017-09-26 09:00:05 +02:00
Nathan Moinvaziri 3bbadfdb6a Renamed structure to be consistent with zip.c. 2017-09-25 22:47:35 -07:00
Nathan Moinvaziri 8ab3c639ad Merge branch 'master' of https://github.com/nmoinvaz/minizip 2017-09-25 22:43:43 -07:00
Nathan Moinvaziri 376f8214a2 Code cleanup. 2017-09-25 22:43:37 -07:00
Nathan Moinvaziri 214302d8e5 Updated readme. 2017-09-25 22:04:36 -07:00
Nathan Moinvaziri e07e141475 Merge pull request #145 from jarheadSLO/clang_unknown_pragma
Define GCC pragmas only for GCC compiler
2017-09-24 23:33:49 -07:00
Klemen Kozjek d8c613726f Remove whitespaces 2017-09-25 11:20:01 +09:00
Klemen Kozjek 616815fc8e Define GCC pragmas only for GCC compiler 2017-09-25 10:49:17 +09:00
Nathan Moinvaziri c73d9c87b6 Merge pull request #143 from Coeur/patch-1
fix tm_to_dosdate
2017-09-18 23:16:05 -07:00
Antoine Cœur c6fb8cec17 fix tm_to_dosdate 2017-09-18 22:38:00 -05:00
Nathan Moinvaziri 51860a44ae Fixed formatting. 2017-09-17 19:55:47 -07:00
Nathan Moinvaziri 4b30403470 Modified dosdate_to_raw_tm to return correct year. 2017-09-17 19:54:32 -07:00
Nathan Moinvaziri 2f3ae59903 Merge pull request #139 from Coeur/dosdate_to_time_t
fix miniunz files date for non-WIN32 and adding helper dosdate_to_time_t
2017-09-17 19:36:44 -07:00
Nathan Moinvaziri 98a47cc975 Fixed formatting. 2017-09-17 17:11:26 -07:00
Nathan Moinvaziri 0792c0d86d Merge pull request #126 from Coeur/unused_crc_for_crypting
__attribute__((__unused__)) for crc_for_crypting
2017-09-17 17:10:16 -07:00
Nathan Moinvaziri b904c1a839 Update copyright info and make consistent. 2017-09-17 16:52:02 -07:00
Nathan Moinvaziri 0bbbe68eeb Merge pull request #125 from Coeur/minizip_info
updating minizip info
2017-09-17 16:46:45 -07:00
Antoine Cœur 390bd67c40 fix change_file_date for non WIN32 platforms 2017-09-17 18:55:41 +08:00
Antoine Cœur 98af367c1a adding helper dosdate_to_time_t 2017-09-17 18:41:13 +08:00
Antoine Cœur 4fb9706f7d updated copyright and version 2017-09-16 17:35:23 +08:00
Antoine Cœur 46aaa79601 updated copyright and version 2017-09-16 13:25:02 +08:00
Nathan Moinvaziri 5083bef59f Merge pull request #138 from Coeur/android
android support
2017-09-15 20:39:09 -07:00
Antoine Cœur a5288bc991 simplified Android support
use USE_FILE32API for 32 bit support
2017-09-16 10:35:24 +08:00
Nathan Moinvaziri 1274987b93 Merge pull request #136 from Coeur/crypt
fix Unknown type name 'z_crc_t'
2017-09-15 09:37:18 -07:00
Nathan Moinvaziri ef73feb0cf Merge pull request #134 from jarheadSLO/pnacl
Add a support for PNaCl platform
2017-09-15 09:31:50 -07:00
Nathan Moinvaziri f3e2b2cc5e Merge pull request #135 from Coeur/xcode
fix displayed paths
2017-09-15 09:31:10 -07:00
Antoine Cœur 2232dc5261 android support 2017-09-15 21:21:23 +08:00
Antoine Cœur e3abb1a0b6 fix Unknown type name 'z_crc_t' 2017-09-13 00:41:55 +08:00
Antoine Cœur c36ad6b3d1 fix displayed paths 2017-09-12 20:21:20 +08:00
Nathan Moinvaziri 37700159f5 Fixed unable to extract zero byte aes encrypted archives. (Issue #127) 2017-09-04 22:40:47 -07:00
Nathan Moinvaziri d5821efc19 Added x64 project configurations. 2017-09-04 22:40:06 -07:00
Klemen Kozjek 76e6726885 Add a support for PNaCl platform 2017-09-05 11:44:30 +09:00
Nathan Moinvaziri b3713abe77 Merge pull request #131 from asmaloney/fix/unused_var_warnings
Move declarations to avoid unused warnings
2017-08-28 09:18:26 -07:00
Nathan Moinvaziri b8bcb3a658 Merge pull request #132 from asmaloney/fix/use_memset
Clear the stat struct properly to avoid compiler warning
2017-08-28 09:18:08 -07:00
Andy Maloney e5e7ceffe7 Clear the stat struct properly to avoid compiler warning
The original code only initializes the first field which causes clang to spit out "missing field 'st_mode' initializer".
2017-08-23 20:09:55 -04:00
Andy Maloney 103d74f7fd Move declarations to avoid unused warnings when some #ifdefs are undefined 2017-08-23 19:59:16 -04:00
Nathan Moinvaziri 70e3fdad60 Merge pull request #129 from GerbilSoft/bugfix/unzip-msvc-2010
unzip.c: Removed an extra ';' that caused compile errors on MSVC 2010.
2017-08-07 14:21:39 -07:00
David Korth e246747897 unzip.c: Removed an extra ';' that caused compile errors on MSVC 2010.
MSVC didn't properly support C99 until MSVC 2015, so the extra ';' makes
MSVC think that we've started adding statements. Hence, it fails because
there are still some variable declarations after it.
2017-08-04 21:04:56 -04:00
Antoine Cœur eff942af89 __attribute__((__unused__)) for crc_for_crypting 2017-07-25 15:11:34 +08:00
Antoine Cœur c99950325e updating minizip info 2017-07-25 12:37:14 +08:00
Nathan Moinvaziri d507f2e7e8 Merge pull request #124 from Coeur/patch-3
avoid unnecessary cast
2017-07-24 10:36:34 -07:00
Antoine Cœur f2d0b9e755 avoid unnecessary cast
pcrc_32_tab is `const z_crc_t *` (aka 'const unsigned long *')
get_crc_table is `const z_crc_t FAR *` (aka 'const unsigned long *')
2017-07-24 19:16:05 +08:00
Nathan Moinvaziri 0743c2c3d3 Fixed function definition for crypthead. 2017-07-23 23:07:41 -07:00
Nathan Moinvaziri 0bbf1fecd7 Added support for InfoZip's modification to ZipCrypto format when using data descriptors. 2017-07-23 21:36:08 -07:00
Nathan Moinvaziri df5940449a Added support for InfoZip's modification to ZipCrypto format when using data descriptors. (Issue #123) 2017-07-23 21:28:14 -07:00
Nathan Moinvaziri c6d04f9c64 Merge pull request #122 from Coeur/patch-2
Fix minishared subspec
2017-06-25 09:25:24 -07:00
Antoine Cœur 9c8b5ff77b fix minishared subspec 2017-06-25 15:28:11 +08:00
Nathan Moinvaziri 36089398a3 Updated project to remove via ace header. 2017-06-21 12:58:17 -07:00
Nathan Moinvaziri 26e8c1b545 Merge pull request #121 from Coeur/patch-2
turning off VIA ACE as non-maintainable
2017-06-21 12:40:52 -07:00
Antoine Cœur bc07538d3c removing aes_via_ace.h 2017-06-22 03:36:42 +08:00
Antoine Cœur cbd4f08a2b turning off VIA ACE as non-maintainable
https://github.com/BrianGladman/aes/issues/24
2017-06-22 00:24:37 +08:00
Nathan Moinvaziri ea0e569187 Merge pull request #119 from Coeur/unused_zipReadValueFromMemory
Unused function 'zipReadValueFromMemory'
2017-06-20 23:03:04 -07:00
Antoine Cœur 4d3815d15e Unused function 'zipReadValueFromMemory' 2017-06-21 09:55:08 +08:00
Nathan Moinvaziri 2fa8d18186 Updated readme. 2017-06-09 15:04:00 -07:00
Nathan Moinvaziri 1faaef2b5f Updated readme. 2017-06-09 15:03:19 -07:00
Nathan Moinvaziri 6d915f2fc8 Merge pull request #117 from Coeur/patch-1
Credit to the original author and to the top fork
2017-06-09 09:08:44 -07:00
Nathan Moinvaziri 432fb6c0c4 Merge pull request #116 from Coeur/minishared.subspec
including minishared as an optional dependency
2017-06-09 08:46:03 -07:00
Antoine Cœur 2eda1159c3 credit to the original and to the top fork 2017-06-09 17:16:32 +08:00
Antoine Cœur d4beb3dd28 including minishared as an optional dependency 2017-06-09 16:44:43 +08:00
Nathan Moinvaziri 73416c947b Fixed dead store of err from zipFlushWriteBuffer. (Issue #115) 2017-06-08 12:52:34 -07:00
Nathan Moinvaziri 6a61132ee8 Merge pull request #113 from Coeur/zipGetDiskSizeAvailable
zipGetDiskSizeAvailable always return OK
2017-06-06 21:13:35 -07:00
Nathan Moinvaziri d309bc1a4a Merge pull request #114 from Coeur/pcrc_32_tab
pcrc_32_tab should be a z_crc_t
2017-06-06 21:12:45 -07:00
Antoine Cœur 5a03a3f1ce pcrc_32_tab should be a z_crc_t 2017-06-07 11:25:37 +08:00
Antoine Cœur 8d2f13f6fe zipGetDiskSizeAvailable always return OK 2017-06-07 11:23:28 +08:00
Nathan Moinvaziri 1712a4adbf Fixed return value of call to zipFlushWriteBuffer. 2017-06-06 15:29:31 -07:00
Nathan Moinvaziri 44a6f43640 Merge pull request #84 from Coeur/valueStoredIsNeverRead
Value stored is never read
2017-06-06 15:17:17 -07:00
Nathan Moinvaziri 02d137a455 Merge pull request #110 from Coeur/xcode_warnings
More aggressive warnings
2017-06-05 10:02:01 -07:00
Nathan Moinvaziri 10a502f350 Merge pull request #112 from Coeur/MemoryErrorWithAES
Fixed memory leak with AES
2017-06-05 09:58:50 -07:00
Antoine Cœur cfbb46c443 spelling 2017-06-05 15:36:29 +08:00
Antoine Cœur 42b6b0af53 fix Memory Error with AES 2017-06-05 14:53:27 +08:00
Antoine Cœur 124e1b0011 headers 2017-06-05 13:36:52 +08:00
Antoine Cœur f4a75a76b6 Value stored is never read 2017-06-05 13:24:47 +08:00
Antoine Cœur 87e9d3aab8 more agressive warnings 2017-06-05 12:26:20 +08:00
Nathan Moinvaziri dc3ad01e3d Removed linux #defines that should be defined in the project. 2017-04-24 15:59:07 -07:00
Nathan Moinvaziri f5fb00d3cf Added additional defines for linux. 2017-04-23 08:33:20 -07:00
Nathan Moinvaziri a708a411c4 Merge branch 'master' of https://github.com/nmoinvaz/minizip 2017-04-20 07:35:06 -07:00
Nathan Moinvaziri bf2dd9ef03 Remove old Makefile, use cmake instead. 2017-04-20 07:34:59 -07:00
Nathan Moinvaziri 34dacf6982 Added AES source files to qbs.
Modified to use only cmake now.
Fixed build issues with aes on linux. (Issue #104)
2017-04-18 11:19:20 -07:00
Nathan Moinvaziri edf591bfdb Added qbs projects. (Issue #105)
Fixed warnings on linux.
2017-04-18 10:59:42 -07:00
Nathan Moinvaziri c13faac976 Fixed bug in setting crc and uncompressed size for zipCloseFileInZipRaw. (Issue #107) 2017-04-18 07:37:23 -07:00
Nathan Moinvaziri a11cab1d13 Used correct value for uncompressed size. 2017-04-17 20:51:46 -07:00
Nathan Moinvaziri ba7e7fa8a4 Added back zipCloseFileInZipRaw and updated comments. (Issue #106) 2017-04-17 19:56:28 -07:00
Nathan Moinvaziri 83074f59bb Cleanup. 2017-04-10 23:26:30 -07:00
Nathan Moinvaziri 0d298b0e74 Updated readme. 2017-04-10 23:19:29 -07:00
Nathan Moinvaziri c2caefaaf6 Updated readme. 2017-04-10 23:18:19 -07:00
Nathan Moinvaziri 9241a1173b Updated readme. 2017-04-10 23:16:20 -07:00
Nathan Moinvaziri 01eaa3ef8c Updated readme. 2017-04-10 23:15:14 -07:00
Nathan Moinvaziri 3b5374a606 Cleanup. 2017-04-10 23:07:17 -07:00
Nathan Moinvaziri 9e7f7913ee Allocate buf on stack. 2017-04-10 22:40:43 -07:00
Nathan Moinvaziri 44abbdefdb Fixed traditional encryption for mac. 2017-04-10 13:34:18 -07:00
Nathan Moinvaziri 49d26327ad Fixed warnings on OS X. (Pull request #102) 2017-04-04 22:36:09 -07:00
Nathan Moinvaziri 0f25e5b394 Updated project filter. 2017-04-04 22:36:09 -07:00
Nathan Moinvaziri ed542d5ef9 Added ioapi buf and mem to libminizip project. 2017-04-04 22:23:00 -07:00
Nathan Moinvaziri eb37786c83 Rename directory to windows. 2017-04-04 22:22:00 -07:00
Nathan Moinvaziri bd33fae233 Updated readme. 2017-04-04 22:20:58 -07:00
Nathan Moinvaziri 821e1efd5a Upgraded to Visual Studio 2015.
Added library project.
2017-04-04 22:20:10 -07:00
Nathan Moinvaziri b068112e63 Rename miniunzip to minunz. 2017-04-04 22:01:04 -07:00
Nathan Moinvaziri db4953a929 Moved visualc projects to win directory. 2017-04-04 21:59:18 -07:00
Nathan Moinvaziri 84548c55a4 Rename folder to mac. 2017-04-04 21:58:14 -07:00
Nathan Moinvaziri c14db669fe Removed project user data. 2017-04-04 21:56:40 -07:00
Nathan Moinvaziri dccdec84e5 Rename targets. 2017-04-04 21:56:10 -07:00
Nathan Moinvaziri e81b1b7c4e Merge pull request #101 from MacGritsch/master
Added Xcode project with 3 targets (libminizip, mini-zip, mini-unzip).
2017-04-04 21:46:01 -07:00
Nathan Moinvaziri fdebd358ea Merge pull request #103 from MinnieTheMoocher/master
Add missing #include
2017-04-03 07:35:21 -07:00
S.Lohse 64276eeda5 add missing #include
cf. https://msdn.microsoft.com/en-us/library/windows/desktop/aa382471(v=vs.85).aspx

Change-Id: I9898deac5c4b48abac49bae01db218d06206430b
2017-04-03 14:16:52 +02:00
Gabriel Gritsch a250ca7231 Merge branch 'master' of https://github.com/MacGritsch/minizip 2017-04-02 11:41:24 +02:00
Gabriel Gritsch fff1996687 Changed paths. 2017-04-02 11:40:48 +02:00
Gabriel Gritsch 8dac330400 Enabled AES. 2017-04-02 11:22:34 +02:00
Gabriel Gritsch eece546a44 Added flag to not warn about unused function in static library. 2017-04-02 11:22:19 +02:00
Gabriel Gritsch 2fc1c180ea Added Xcode project with 3 targets (libminizip, mini-zip, mini-unzip). 2017-04-02 09:43:06 +02:00
Nathan Moinvaziri b532e6c472 Removed unzGetCurrentFileZStreamPos64. 2017-03-31 11:07:25 -07:00
Nathan Moinvaziri c798d49c52 Removed zipCloseFileInZipRaw and zipCloseFileInZipRaw64 since they are no longer necessary.
Use zip64 if pos_local_header is greater than UINT32_MAX.
Use data descriptor exclusively and write it correctly with Zip64 format.
Don't write zip64 local extra info since we use data descriptor instead.
Write data descriptor signature.
Cleaned up some logic.
2017-03-31 10:47:14 -07:00
Nathan Moinvaziri 5de384ba7d Removed duplicate entry. 2017-03-29 21:13:06 -07:00
Nathan Moinvaziri 07f9fa085d Merge pull request #99 from catlan/master
Replace ZPOS64_T with uint64_t in libcompression code branch
2017-03-29 21:06:56 -07:00
Christopher Atlan 5ea2040c1c replace ZPOS64_T with uint64_t 2017-03-28 10:32:27 +02:00
Christopher Atlan 2e497aa5e4 initial try of adding libcompression support 2017-03-28 09:35:46 +02:00
Nathan Moinvaziri 5eedfa4e84 Fallback if unable to fill all bytes. 2017-03-22 09:56:48 -07:00
Nathan Moinvaziri 727fd09af1 Revert removal of old auto config file. 2017-03-20 12:01:38 -07:00
Nathan Moinvaziri 712f9074dc Remove old auto config file. 2017-03-20 11:59:34 -07:00
Nathan Moinvaziri 2e215e9ea7 Added fallback for generating random bytes. 2017-03-20 11:52:33 -07:00
Nathan Moinvaziri 1a8c2f1eb5 Added missing files. 2017-03-20 09:53:53 -07:00
Nathan Moinvaziri 6a18a63f22 Code cleanup. 2017-03-20 09:51:31 -07:00
Nathan Moinvaziri 1f4a90b433 Moved #define for __APPLE__ compatibility. 2017-03-20 09:51:00 -07:00
Nathan Moinvaziri bbf79ac334 Fixed unused variable. 2017-03-20 09:50:32 -07:00
Nathan Moinvaziri 4730697f47 Merge pull request #94 from Coeur/darwin
Compatibility with __APPLE__
2017-03-20 09:22:35 -07:00
Antoine Cœur 46aaea6e5c compatibility with __APPLE__ 2017-03-20 17:53:08 +08:00
Nathan Moinvaziri 687c497676 Merge pull request #87 from Coeur/zip64local_putValue_inmemory_andMoveP
Factoring zip64local_putValue_inmemory_andMoveP
2017-03-19 21:59:31 -07:00
Nathan Moinvaziri 243131f49a Split adding zip functionality into its own function. 2017-03-18 17:07:05 -07:00
Nathan Moinvaziri 1775fafa9a Updated readme. 2017-03-18 16:34:08 -07:00
Nathan Moinvaziri eac67eadf4 Fixed formatting. 2017-03-18 16:32:30 -07:00
Nathan Moinvaziri e24ed8db12 Code cleanup. 2017-03-18 16:16:06 -07:00
Nathan Moinvaziri 1a62a716da Removed unnecessary config file. 2017-03-18 15:14:35 -07:00
Nathan Moinvaziri 5ec1a1ee82 Updated Visual Studio projects. 2017-03-18 15:13:02 -07:00
Nathan Moinvaziri 9df3810b04 Moved entry functions into crypt code.
Use entropy functions for crypthead.
2017-03-18 15:11:08 -07:00
Nathan Moinvaziri d9a932437c Updated aes and sha1 libraries. 2017-03-18 15:00:31 -07:00
Nathan Moinvaziri 0ec3c00ec5 Use UINT16_MAX for buffer size like in zip and unzip. 2017-03-04 10:06:24 -08:00
Nathan Moinvaziri a65468976f Removed unnecessary preprocessor macros. 2017-03-04 10:01:10 -08:00
Nathan Moinvaziri ef4ea587e8 Removed duplicate code already defined in ioapi.h. 2017-03-04 09:47:22 -08:00
Nathan Moinvaziri 68f88c8413 Fix dereference of null pointer if flagBase & 1 and password is NULL. (ID: #85) 2017-03-03 19:24:23 -08:00
Nathan Moinvaziri 12643576a8 Fixed dereference of null pointer if flag & 1 and no password. (Issue #85) 2017-03-02 17:31:05 -08:00
Nathan Moinvaziri fac878383c Fixed bug unzipping with too large a buffer. Zlib supports UINT16_MAX buffer size worst case. 2017-03-02 17:30:05 -08:00
Nathan Moinvaziri 7914ff3cb7 Merge pull request #90 from mati865/makepkg
Fixed Makefile.am
2017-02-20 09:45:33 -08:00
Mateusz Mikula a2a2a0e260 fix Makefile.am 2017-02-20 18:13:21 +01:00
Nathan Moinvaziri a447950d5d Added minishared to project files. 2017-02-14 14:06:07 -08:00
Nathan Moinvaziri 1815fc76af Clean up last check-in. 2017-02-14 14:04:56 -08:00
Nathan Moinvaziri 4f9546b33d Merge pull request #86 from Coeur/unz64local_ReadField
Factoring unz64local_ReadField
2017-02-14 13:53:13 -08:00
Nathan Moinvaziri 53301bc455 Merge pull request #89 from emvivre/master
Fix typo error in get_file_date()
2017-02-14 13:52:24 -08:00
emvivre 5b75394b7e fix typo error in get_file_date() 2017-02-14 14:55:13 +01:00
Antoine Cœur cac4774f06 factoring zipWriteValueToMemoryAndMoveP 2017-02-12 21:22:14 +08:00
Antoine Cœur 624fe77338 factoring unz_local_ReadField 2017-02-12 20:11:57 +08:00
Nathan Moinvaziri 8b7ded9331 Merge pull request #88 from zett42/zipEndlessLoop
Fix endless loop in zipFlushWriteBuffer()
2017-02-07 18:18:45 -08:00
zett42 f03fade2d9 fix endless loop in zipFlushWriteBuffer() - loop control variable 'write' never changed because 'written' was no longer assigned 2017-02-08 00:02:09 +01:00
Nathan Moinvaziri 4f00a62794 Merge branch 'master' of https://github.com/nmoinvaz/minizip into dev 2017-01-28 22:22:59 -08:00
Nathan Moinvaziri f63d73b0cc Change conditional directive so it is easier to read. (Issue #83) 2017-01-27 09:54:31 -08:00
Nathan Moinvaziri b706325e08 Added Apple libcompression support from Christopher Atlan. (Issue #81) 2017-01-27 09:48:02 -08:00
Nathan Moinvaziri d6aed934e6 Fixed crash when AES is needed for decryption but no password is passed. (Issue #76) 2017-01-27 09:21:45 -08:00
Nathan Moinvaziri 5036898d24 Fixed opening for read while zip locked by opening to write. (Issue #59) 2017-01-27 09:17:24 -08:00
Nathan Moinvaziri c942ae353e Fixed bug read compression method.
Fixed warning messages on linux.
2017-01-27 08:59:49 -08:00
Nathan Moinvaziri 2a1724a29d Fixed casting warning in string print. 2017-01-23 18:03:16 -08:00
Nathan Moinvaziri 7b8e226c49 Merge pull request #78 from inequation/master
Fix error C2664 on MSVC 2015
2016-11-14 13:08:18 -08:00
Leszek Godlewski 53bbf0fe79 Fix error C2664 on MSVC 2015
I'll let the compiler speak for itself:
ioapi.c(201): error C2664: 'char *strncpy(char *,const char *,std::size_t)': cannot convert argument 2 from 'void *' to 'const char *'
ioapi.c(201): note: Conversion from 'void*' to pointer to non-'void' requires an explicit cast
A trivial fix, this is.
2016-11-07 11:22:48 +01:00
Nathan Moinvaziri 4790ea8d4f Cleanup. 2016-10-10 00:26:42 -07:00
Nathan Moinvaziri dab3512b19 Cleanup. 2016-10-10 00:18:56 -07:00
Nathan Moinvaziri 2148f3ff68 Removed need for MAXFILENAME. 2016-10-10 00:18:04 -07:00
Nathan Moinvaziri 7e5f2c7f9c Fixed MAXFILENAME compiler error. 2016-10-09 21:37:56 -07:00
Nathan Moinvaziri 28ad5bf4fb Moved shared minizip/miniunz functionality into minishared. (#57)
Moved dos time/date conversion functionality out of zip.c and unzip.c.
2016-10-09 21:34:17 -07:00
Nathan Moinvaziri 2bb7d0922b Fixed casting. 2016-10-09 20:20:41 -07:00
Nathan Moinvaziri 236bd7a23d Fix casting errors. 2016-10-09 20:16:34 -07:00
Nathan Moinvaziri aa4758baea Implement standard integer types.
Remove old OF() define.
2016-10-09 20:09:50 -07:00
Nathan Moinvaziri 2e61772262 Fixed return error in case of invalid compression format. #70 2016-10-09 15:36:15 -07:00
Nathan Moinvaziri 244c3fef45 Merge branch 'master' of https://github.com/nmoinvaz/minizip 2016-10-09 15:18:35 -07:00
Nathan Moinvaziri 2090a423be Ensure string_method is initialized. (zlib #150) 2016-10-09 15:18:28 -07:00
Nathan Moinvaziri c6ac2ff8a4 Merge pull request #68 from Gauleiter/master
Some issues fixed for Apple LLVM Compiler (Xcode default compiler)
2016-09-29 11:05:34 -07:00
Denis Vasilevsky 306694e594 Some issues fixed for Apple LLVM Compiler (Xcode default compiler) 2016-09-28 18:13:22 +03:00
Nathan Moinvaziri dc41b3bfdc Merge pull request #58 from Coeur/podspec
Adding a podspec
2016-08-28 21:28:19 -07:00
Nathan Moinvaziri 7f381970ef Merge pull request #63 from jlawton/password_verify
Check password verification bytes.
2016-08-28 21:22:19 -07:00
Nathan Moinvaziri f964185eeb Merge pull request #65 from TermeHansen/master
Changed compiler flag "HAVE_AES" to be platform independent
2016-08-16 06:59:16 -07:00
Rasmus 5fae26028d Changed compiler flag "HAVE_AES" to be set by platform independent add_definitions
Added "-D_CRT_SECURE_NO_DEPRECATE" to WIN32 compiler and fPIC to gcc compiler
2016-08-16 10:47:40 +02:00
Nathan Moinvaziri 3711ae796c Merge branch 'master' of https://github.com/nmoinvaz/minizip 2016-08-10 09:49:52 -07:00
Nathan Moinvaziri 7e7be9ed47 Modified entropy to use /dev/urandom. (Issue #62) 2016-08-10 09:48:51 -07:00
James Lawton f315b87892 Check password verification bytes. 2016-07-28 23:51:39 -07:00
Nathan Moinvaziri bcf489c6d8 Merge pull request #61 from mschmieder/cmake_link_zlib
Added missing link library for minzip target
2016-06-20 21:49:10 -07:00
Matthias Schmieder 7a9bf7cead added missing link library for minzip target
fixed naming of export files
2016-06-08 22:06:10 +02:00
Antoine Cœur 872091f3eb simplified podspec 2016-04-27 22:29:53 +08:00
Antoine Cœur 614bfb6178 adding a podspec 2016-04-24 23:26:21 +08:00
Gilles Vollant 5f56dd81d9 Typo in a comment (and the first commit of the original creator in this repository :-) 2016-04-20 14:01:03 +02:00
Nathan Moinvaziri 005eb76a3f Merge pull request #56 from EosPengwern/master
Added ability to specify ZLIB_ROOT when using CMAKE
2016-04-12 23:46:21 -07:00
EosPengwern 64264aeab5 Resolved conflict 2016-04-12 23:26:54 +01:00
Nathan Moinvaziri 6d1e2bd4bc Merge pull request #55 from DigitalGlobe/master
Fixed ZLIB headers not being found
2016-04-12 08:16:59 -07:00
EosPengwern 2aa0919ee0 Added ability to specify ZLIB_ROOT when using CMAKE 2016-04-09 23:11:15 +01:00
Aleksey Vitebskiy 294ab0e2a7 Fixed ZLIB headers not being found if it's not in a default include location 2016-04-08 19:58:24 -04:00
Nathan Moinvaziri c9e5b6823f Merge pull request #54 from mschmieder/cmake_shared_build_support
added cmake support for shared build and fixed some typos. Added expo…
2016-04-03 08:25:08 -07:00
Matthias Schmieder 13d8da9476 added cmake support for shared build and fixed some typos. Added export targets for simple import in thirdparty environments 2016-04-02 11:14:20 +02:00
Nathan Moinvaziri 5c39e662fd Merge pull request #53 from matthew1471/master
Fix Build Error
2016-03-26 08:21:49 -07:00
Matthew 4101c8afae Merge pull request #1 from nmoinvaz/master
Merge Upstream Patches
2016-03-26 12:26:08 +00:00
Matthew 04197b99ed Tabs to Spaces
Tabs to spaces.
2016-03-26 12:20:40 +00:00
Nathan Moinvaziri e10957b1a4 Merge pull request #52 from mschmieder/cmake_config
added CMakeConfiguration for minizip project
2016-03-25 16:08:16 -07:00
Matthew 7fbf904bb6 Fix Build Error
Build fails when NOUNCRYPT is set.
2016-03-25 16:00:35 +00:00
Matthias Schmieder d383a5f2fc added CMakeConfiguration for minizip project 2016-03-25 08:18:46 +01:00
Nathan Moinvaziri 375433262f Merge pull request #51 from nadeemahd/patch-3
Fix parameter signatures
2016-03-16 08:19:06 -07:00
Nadeem 1212073786 Fix parameter signatures
Signatures of certain parameters of crctables and pkeys were changed during the recent fix to support 64bit builds for archives with "PKWARE" password, but these changes were not reflected across all cases. The current changes would take care of any "assignment from incompatible pointer type" errors when built on other platforms.
2016-03-16 10:17:35 -04:00
Nathan Moinvaziri a0a38dbb14 Merge pull request #49 from nadeemahd/patch-1
Assignment from incompatible pointer type
2016-03-15 15:04:26 -07:00
Nadeem c3d495b2b3 Assignment from incompatible pointer type
Fix the error "assignment from incompatible pointer type" when built on Linux platform.
2016-03-15 16:19:26 -04:00
Nathan Moinvaziri 24b1a756e6 Merge pull request #48 from senn412/patch-1
eliminate unused parameter to decrypt_byte
2016-03-14 09:22:56 -07:00
senn412 49002c88f1 eliminate unused parameter to decrypt_byte 2016-03-14 08:17:21 -04:00
Nathan Moinvaziri b5c4eda178 Fixed formatting. 2016-03-11 10:01:49 -08:00
Nathan Moinvaziri 3ec8abf081 Merge pull request #47 from luciocosmo/master
Fix 64bit archives with password
2016-03-11 09:59:33 -08:00
luciocosmo 58921f6b96 fix 64bit archives with password
Fixed bug in 64bit builds in pkware password archive extractions. Types around crc32 and pkeys reference tables have to be unsigned int not long.
2016-03-09 08:11:18 +01:00
Nathan Moinvaziri ece2638831 Merge pull request #34 from juanii/master
Honor "version made by" set by user. Allow to set "version made by" in Zip64 end of central directory.
2016-02-19 09:14:35 -07:00
Nathan Moinvaziri 9abb5a851b Changed to always look for zip64 eocd header. (Issue #44) 2016-02-19 09:11:13 -07:00
juani 1b21233dcd Merge remote-tracking branch 'upstream/master'
# Conflicts:
#	zip.c
2016-01-30 12:47:00 -03:00
Nathan Moinvaziri 16455205a7 Fixed casting when project in Unicode charset. 2016-01-13 14:03:43 -07:00
Nathan Moinvaziri 5fc64b0e05 Use HAVE_STDINT_H instead of HAS_STDINT_H. (Issue: #42) 2016-01-11 16:22:33 -07:00
Nathan Moinvaziri 028e35d8d7 Fixed formatting. 2015-12-22 17:48:32 -07:00
Nathan Moinvaziri af8bb25908 Updated changelog. 2015-12-12 02:08:14 -07:00
Nathan Moinvaziri 7c6ec3d1b2 Updated readme. 2015-12-12 02:06:37 -07:00
Nathan Moinvaziri 8905345287 Updated readme. 2015-12-12 02:03:38 -07:00
Nathan Moinvaziri 39c3be2de3 Fix formatting. 2015-12-12 01:56:38 -07:00
Nathan Moinvaziri 63334f8c7c Fix formatting. 2015-12-12 01:45:29 -07:00
Nathan Moinvaziri d83ae0124e Remove unnecessary variable. 2015-12-02 22:50:24 -07:00
Nathan Moinvaziri bb955afe06 Merge pull request #30 from woutervd/master
Added unzseek to be able to seek in zip files that have the storage c…
2015-12-01 16:56:51 -07:00
wvandongen 43c7f90081 Added seeking origin. Wanted to use z_off64_t instead of ZPOS64_T because seeking offset may be negative. But it unfortunately was not available in the scope, and ZPOS64_T is used as the offset type in the library in other places as well. 2015-11-28 15:49:57 +01:00
Nathan Moinvaziri 4e059b510f Revert changes to solution file. 2015-11-25 01:40:57 -07:00
Nathan Moinvaziri 103752aa20 Merge branch 'master' of github.com:nmoinvaz/minizip 2015-11-25 01:35:58 -07:00
Nathan Moinvaziri 82d826c496 Normalize line endings. 2015-11-25 01:35:03 -07:00
Nathan Moinvaziri 977afb2296 Merge pull request #40 from ABaumgaertner/master
Fixed missing semi-colon.
2015-11-22 19:12:05 -07:00
ABaumgaertner 572bec4fad missing ; in unzip.c 2015-11-22 15:54:17 +01:00
Nathan Moinvaziri 8932005192 Remove #defines from previous check-in. 2015-11-20 12:08:49 -07:00
Nathan Moinvaziri 9468cccbf8 Merge pull request #38 from franiu/master
Fixed an arithmetic overflow leading to unzipping failure in 64bit mode
2015-11-20 12:05:50 -07:00
Nathan Moinvaziri f69819d924 Merge pull request #24 from LindleyF/master
Fix use-of-uninitialized-value warning.
2015-11-20 11:57:01 -07:00
Nathan Moinvaziri 2adc181228 Fixed unzReadCurrentFile crashes if passed NULL as parameter. (Issue #32) 2015-11-20 11:47:48 -07:00
Nathan Moinvaziri de19d49737 Fixed compiler warning on iOS 9. (Issue #37) 2015-11-20 11:34:50 -07:00
Nathan Moinvaziri 253dd963ea Fixed entropy.c compilation for OSX 10.11. (Issue #39) 2015-11-20 10:53:45 -07:00
Franiu 97f3b2c0cf Fixed an arithmetic overflow leading to unzipping failure in 64bit mode 2015-10-17 00:36:06 -04:00
juani 65a215b5da zipClose2_64 function allows to set "version made by".
A couple of ZIP64 versions of zipClose, which allows the user to set the "version made by" field  in Zip64 end of central directory record.
2015-09-10 18:21:24 -03:00
juani ad93fda09c Honor "version made by" field set by user.
When changing the "version made by" field for a ZIP64 archive with a version value of 4.5 honor the "file compatibility attribute" byte, possibly set by the user with zipOpenNewFileInZip4_64.
2015-09-10 18:12:01 -03:00
Nathan Moinvaziri 0b46a2b4ca Merge branch 'master' of https://github.com/nmoinvaz/minizip 2015-06-17 13:11:30 -07:00
Nathan Moinvaziri 46a45fdcd3 Fixed bug in command line parsing. (Issue #23) 2015-06-17 13:11:04 -07:00
Nathan Moinvaziri b922e4b537 Merge pull request #31 from asmaloney/fix/range_comparison_oops
Revert range comparison "fix"
2015-06-17 13:07:31 -07:00
Andy Maloney 0ae4412169 Revert range comparison "fix" 2015-06-17 00:20:42 -04:00
Lindley French 76b4c7e881 Merge remote-tracking branch 'upstream/master' 2015-06-16 12:39:52 -07:00
Nathan Moinvaziri fac97616a2 Added AES makefile
Fixed includes for unix systems.
2015-06-16 10:14:07 -07:00
Nathan Moinvaziri 7baad39186 Merge branch 'master' of https://github.com/nmoinvaz/minizip 2015-06-16 10:01:35 -07:00
Nathan Moinvaziri 4f55da0a3b Fixed incorrect types. 2015-06-16 09:59:19 -07:00
Nathan Moinvaziri 0c89c5964d Merge pull request #28 from asmaloney/fix/range_compare_errors
Fix incorrect range comparisons
2015-06-16 09:56:45 -07:00
Andy Maloney ea5160a018 Fix incorrect range comparisons 2015-06-16 05:32:51 -04:00
Nathan Moinvaziri d670c39b1f Merge branch 'fix/range_compare_errors' of https://github.com/asmaloney/minizip 2015-06-15 22:14:30 -07:00
Nathan Moinvaziri 9bccc22efb Remove unused is64bitOpenFunction parameter from unzOpenInternal. 2015-06-15 22:08:59 -07:00
Nathan Moinvaziri ecc140ebca Merge pull request #27 from asmaloney/fix/incorrect_comparison
Should be comparing size of the comment, not pointer.
2015-06-15 22:02:28 -07:00
Nathan Moinvaziri 031a8ceda8 Remove unused is64bitOpenFunction parameter from unzOpenInternal. 2015-06-15 21:59:19 -07:00
Andy Maloney e05be9e9c6 Fix incorrect range comparisons 2015-06-15 22:27:45 -04:00
Andy Maloney d587f7fbbc Should be comparing size of the comment, not pointer 2015-06-15 22:22:13 -04:00
Lindley French db42f0258a UNZ_EOF and UNZ_OK are both zero, so the caller of unzlocal_getByte has no way to know whether or not pi points to data or garbage. This change makes it point to zero in the EOF case. While it might be better to indicate an error immediately, that is a more significant change. The library ought to be just as good at handling an erroneous zero byte as anything else; and this way dynamic analysis tools won't complain about use-of-uninitialized-value when reading a malformed file. 2015-06-15 15:55:27 -07:00
Nathan Moinvaziri f5d3d04272 Update link 2015-05-17 09:46:08 -07:00
Nathan Moinvaziri c42c2abba9 Merge pull request #21 from kant/patch-1
Update link
2015-05-17 09:42:56 -07:00
Nathan Moinvaziri 0627b3de5c Merge pull request #20 from 0-wiz-0/master
Fix linking on NetBSD and DragonFly BSD.
2015-05-17 09:42:43 -07:00
Thomas Klausner 01b5dca31c Fix linking on NetBSD, OpenBSD, and DragonFly BSD.
On these operating systems fopen, fseek, and ftello are 64-bit
filesize safe.

Signed-off-by: Thomas Klausner <wiz@NetBSD.org>
2015-05-10 13:21:56 +02:00
Darío Hereñú 54444c5ba3 Update link? 2015-04-19 12:51:52 -03:00
woutervd fce020b26b Added unzseek to be able to seek in zip files that have the storage compression method 2015-03-22 12:58:29 +01:00
Nathan Moinvaziri 6fc8567e99 Fixed offset not being set properly. 2015-01-06 17:11:49 -07:00
Nathan Moinvaziri 1f38dffc39 Fixed IOWIN32_USING_WINRT_API definition (see zlib issue #49). 2014-10-12 20:19:51 -07:00
Nathan Moinvaziri f5c1fc18d8 Fixed formatting. 2014-10-08 12:12:17 -07:00
Nathan Moinvaziri 7e877c3592 Fixed wrong encryption flag being set. 2014-10-08 12:11:56 -07:00
Nathan Moinvaziri b4b4a8d7dd Use general purpose encrypted flag when using password. 2014-10-07 21:23:42 -07:00
Nathan Moinvaziri d71932f416 Add back some variables for debugging. 2014-10-07 21:14:33 -07:00
Nathan Moinvaziri 9db48063f6 Merge pull request #16 from asmaloney/cleanup
Unused var cleanup & fix memory leaks
2014-10-07 21:11:57 -07:00
Andy Maloney 713f8f9354 - remove unused variables
- fix two potential memory leaks
2014-08-30 14:34:55 -04:00
Lubomir I. Ivanov 56e7329660 Add extern "C" to ioapi_buf.h and ioapi_mem.h
This is needed if you are going to link a C compiled minizip
library with a C++ application.

Signed-off-by: Lubomir I. Ivanov <neolit123@gmail.com>
2014-07-24 12:15:38 -07:00
Nathan Moinvaziri d27f7eb246 Simplify AES version 1 CRC check 2014-03-10 23:09:33 -07:00
Nathan Moinvaziri a93acb477a Merge pull request #14 from StevenChristy/master
Small fixes for Unzip to be compatible AES versions 1 and 2
2014-03-10 22:53:56 -07:00
Nathan Moinvaziri 083e3dad37 Merge pull request #13 from wangp/master
Add header guards and avoid C++ style comments.
2014-03-10 22:45:47 -07:00
Steven Christy 283e64a053 Update ChangeLog 2014-03-07 13:56:15 -06:00
Steven Christy 9f8274cf65 Added support for Zip AE-2 and fixed AE-1
AE-1 was not checking the CRC32.
2014-03-07 13:53:29 -06:00
Peter Wang b109b1c936 Avoid non-C90 comments in some sources.
In case you need to compile with gcc -pedantic or similar.
2014-03-07 10:59:19 +11:00
Peter Wang b067d0bafe Avoid non-C90 comments in header. 2014-03-07 10:55:32 +11:00
Peter Wang 3ab3bf1af1 Add header guards. 2014-03-07 10:55:32 +11:00
Nathan Moinvaziri bb05c753a6 Updated readme 2014-01-12 14:20:43 -07:00
Nathan Moinvaziri fed25db1cf Added additional information about zipping to memory 2014-01-12 14:20:04 -07:00
Nathan Moinvaziri 0256e3a403 Updated readme with zip memory example 2014-01-12 14:18:01 -07:00
Nathan Moinvaziri c680ad315c Cleaned up source header comments
Fixed indentation of preprocessor statements
2014-01-12 14:04:54 -07:00
Nathan Moinvaziri 0947ea8a2c Update and rename license file 2014-01-11 12:59:11 -07:00
Nathan Moinvaziri 1dd0b15a7d Added bzip2 and winrt info 2014-01-07 20:22:10 -07:00
Nathan Moinvaziri 5d468b7eb7 Added i/o memory example 2014-01-07 20:19:34 -07:00
Nathan Moinvaziri 783245097e Fix formatting 2014-01-07 20:11:35 -07:00
Nathan Moinvaziri a8392b4d47 Merge change logs 2014-01-07 20:08:22 -07:00
Nathan Moinvaziri c5e3969207 Added functionality to zip to memory 2014-01-07 19:57:18 -07:00
Nathan Moinvaziri 8e5eb69e0b Fix formatting 2014-01-07 19:55:59 -07:00
Nathan Moinvaziri 614ff26c89 Fixed bug adding comment when adding file greater than 4gb 2014-01-07 19:39:39 -07:00
Nathan Moinvaziri aea0ac41b7 Fix formatting of preprocessor defines 2014-01-07 19:13:14 -07:00
Nathan Moinvaziri 8e60f1fbf9 Don't auto-detect Windows RT 2014-01-07 18:58:43 -07:00
Nathan Moinvaziri 42241b9f8d Moved _CRT_SECURE_NO_WARNINGS to vcprojs 2014-01-07 18:28:33 -07:00
Nathan Moinvaziri 7636b5400a Remove references to non-existent file 2014-01-07 09:24:09 -07:00
Nathan Moinvaziri 50b2387bdd Fixed call to SetFilePointer dwMoveMethod 2014-01-07 09:12:37 -07:00
Nathan Moinvaziri 36f6ce0454 Use INVALID_SET_FILE_POINTER to check return value from SetFilePointer 2014-01-04 22:28:11 -07:00
Nathan Moinvaziri fd293e867b Windows RT changes from zlib 2014-01-04 22:23:51 -07:00
Nathan Moinvaziri be42d17476 Fixed compiler error with time sanitation changes 2014-01-04 22:21:01 -07:00
Nathan Moinvaziri cde1848dc8 Updated readme 2014-01-04 22:00:13 -07:00
Nathan Moinvaziri 4c608fde5a Merge branch 'master' of https://github.com/nmoinvaz/minizip 2014-01-04 21:52:47 -07:00
Nathan Moinvaziri 4561c51138 Updated file name in change log 2014-01-04 21:51:57 -07:00
Nathan Moinvaziri 76b0b1c65b Fix whitespace 2013-12-20 14:02:40 -07:00
Nathan Moinvaziri 64ba7525f3 Fix whitespace 2013-12-20 13:59:33 -07:00
Nathan Moinvaziri 44fc17a262 Remove binaries 2013-12-20 13:55:34 -07:00
Nathan Moinvaziri 1d84281f1f Merge pull request #8 from joaoe/master
Timestamp sanitization and test fixing
2013-12-20 12:47:25 -08:00
João Eiras 8cc3b286ec Make smoke test better
Did not run successfully, and output was not clear.
2013-12-18 15:58:30 +01:00
João Eiras ae95a6b69d Added file date and time sanitization.
zip64local_TmzDateToDosDate now ignores invalid dates. This was specially
problematic when handling of range values.

unz64local_DosDateToTmuDate now returns an empty date when the date in the zip
file is not valid.
2013-12-18 15:51:40 +01:00
João Eiras ff62d718ca Fix compile issues
And whitespace.
2013-12-18 14:55:41 +01:00
João Eiras b61a5a821f Removed trailing whitespace.
(commit contains only whitespace changes)
2013-12-18 14:55:38 +01:00
Nathan Moinvaziri adc5c27460 Revert "Remove unused aes files"
This reverts commit fe701528ac.
2013-10-30 19:36:40 -07:00
Nathan Moinvaziri 83908cecd5 Merge pull request #6 from Kallidus/master
Fix iOS simulator crash, reorder defined
2013-08-06 10:30:51 -07:00
Dale Jefferson d63aa151d8 Fix iOS simulator crash, reorder defined 2013-08-06 13:08:48 +01:00
Nathan Moinvaziri 91c243ed54 Remove comment about AES encryption 2013-06-28 03:41:40 -07:00
Nathan Moinvaziri 8f555e1116 Remove file 2013-06-26 01:46:18 -07:00
Nathan Moinvaziri 0638e23043 Added commented hack for zips that don't respect zip64
Fixed formatting
2013-06-26 01:38:19 -07:00
Nathan Moinvaziri 8402ebabe5 Remove references to non-existent MiniZip_info.txt 2013-06-26 01:31:57 -07:00
Nathan Moinvaziri d618d6e21c Updated binaries 2013-06-24 23:57:29 -07:00
Nathan Moinvaziri c0e32e46b9 Enable string pooling 2013-06-24 23:57:12 -07:00
Nathan Moinvaziri 13814a63ca Fixed minor memory leak when failing to open zip (thanks to Gianluca Bertani) 2013-06-24 23:51:26 -07:00
Nathan Moinvaziri 6b1e4dbcb6 Zlib 1.2.8 2013-06-20 12:47:35 -07:00
Nathan Moinvaziri accf2f4d62 Fixed bug not being able to zip using no compression 2013-06-20 12:43:56 -07:00
Nathan Moinvaziri 472fc13a69 Fixed bug in flushing buffer on certain boundaries 2013-06-20 12:31:59 -07:00
Nathan Moinvaziri 8a773e4803 Capture err from switching disks 2013-06-20 12:31:24 -07:00
Nathan Moinvaziri 5401924cc7 Fixed bug in flushing buffer on certain boundaries 2013-06-20 12:30:57 -07:00
Nathan Moinvaziri fe701528ac Remove unused aes files 2013-05-30 12:29:35 -07:00
Nathan Moinvaziri 20a45d8c79 Fixed bug where miniunz would not list or extract all files 2013-05-02 18:53:16 -07:00
Nathan Moinvaziri 2a179adac2 Cleanup formatting 2013-03-13 19:39:36 -07:00
Nathan Moinvaziri 94ea360cd3 fixed include paths on ios/xcode 2013-02-12 20:57:06 -07:00
Nathan Moinvaziri 887bf5f676 change aes include paths to work with xcode (thx dale jefferson)
fixed via ace is not possible on apple and causes a crash (thx dale jefferson)
moved entropy function into aes library with untested entropy function for linux/apple
added aes files to miniunz.vcproj and minizip.vcproj
2013-02-11 23:22:08 -07:00
Nathan Moinvaziri 8628204eaf fixed over-read when extracting encrypted zip 2012-12-20 13:22:45 -07:00
Nathan Moinvaziri 7b10250f4f added binaries 2012-10-25 02:37:24 -07:00
Nathan Moinvaziri a6bcf28dfb removed mztools reference 2012-10-25 02:28:19 -07:00
Nathan Moinvaziri bccaee737a fixed formatting 2012-10-25 02:27:24 -07:00
Nathan Moinvaziri 76368b3a60 not going to support mztools 2012-10-25 02:25:55 -07:00
Nathan Moinvaziri b2c7e7d3c1 not going to support this 2012-10-25 02:20:34 -07:00
Nathan Moinvaziri af25ea7e67 fixed formatting 2012-10-25 02:19:11 -07:00
Nathan Moinvaziri 591e1002d0 fixed formatting 2012-10-25 02:07:40 -07:00
Nathan Moinvaziri 826b94d829 fixed formatting 2012-10-25 02:07:21 -07:00
Nathan Moinvaziri d09d3b39a4 fixed formatting 2012-10-25 02:06:28 -07:00
Nathan Moinvaziri af83d7eb4b fixed formatting 2012-10-25 02:06:11 -07:00
Nathan Moinvaziri 2f1c42ada5 fixed formatting 2012-10-25 02:05:49 -07:00
Nathan Moinvaziri 4475203a3c more cleanup and simplification 2012-10-25 01:49:35 -07:00
Nathan Moinvaziri e60f1a22e4 fix formatting 2012-10-25 01:48:11 -07:00
Nathan Moinvaziri 4e89330a21 simplified and cleaned up example 2012-10-25 01:40:29 -07:00
Nathan Moinvaziri bbdfdf497f updated project files 2012-10-25 00:43:02 -07:00
Nathan Moinvaziri 4d98689c0e fix use of opt_overwrite 2012-10-25 00:40:28 -07:00
Nathan Moinvaziri 12fd286f20 fixed bug in logic for skipping command line options
print errors
more cleanup
2012-10-25 00:36:46 -07:00
Nathan Moinvaziri c2780b8e51 more simplification and cleanup 2012-10-25 00:29:35 -07:00
Nathan Moinvaziri 0deccb8070 cleanup and simplify zip example 2012-10-25 00:21:50 -07:00
Nathan Moinvaziri 469d204ffb updated readme 2012-10-21 15:33:18 -07:00
Nathan Moinvaziri 03b1f410a1 updated readme 2012-10-21 15:32:11 -07:00
Nathan Moinvaziri f427edba15 compilation changes 2012-10-21 15:20:13 -07:00
Nathan Moinvaziri 3daf6bbb30 updated readme 2012-10-21 15:13:32 -07:00
Nathan Moinvaziri 4427578831 updated readme 2012-08-09 10:47:31 -07:00
Nathan Moinvaziri 795edef9f0 updated readme 2012-08-08 18:44:26 -07:00
Nathan Moinvaziri 77945788ff updated readme 2012-08-08 18:43:39 -07:00
Nathan Moinvaziri 355d05a9f6 updated readme 2012-08-08 18:42:40 -07:00
Nathan Moinvaziri 11c941d078 added readme 2012-08-08 18:32:33 -07:00
Nathan Moinvaziri 41ed02bebc rename files 2012-08-08 18:32:03 -07:00
Nathan Moinvaziri 5cfecdfb1f fix mac compilation errors 2012-08-06 18:17:36 -07:00
Nathan Moinvaziri 0200b0a12a fixed unused variables 2012-08-06 17:53:01 -07:00
Nathan Moinvaziri 9c60c998f8 fix bug in calculating bytes not read 2012-08-06 17:06:49 -07:00
Nathan Moinvaziri ed425e548a fix whitespace 2012-08-06 16:58:04 -07:00
Nathan Moinvaziri f6c73a08c5 Rename makefile 2012-07-15 16:06:34 -07:00
Nathan Moinvaziri 059c47c9d9 Rename makefile 2012-07-15 16:05:59 -07:00
Nathan Moinvaziri 6cbc581111 fix comment 2012-07-14 17:19:28 -07:00
Nathan Moinvaziri 3a8fb8674a fix formatting 2012-07-14 17:17:53 -07:00
Nathan Moinvaziri 36572010bb cleanup comments 2012-07-14 17:09:47 -07:00
Nathan Moinvaziri 50665d2d59 cleanup unzip and zip 2012-07-14 16:55:17 -07:00
Nathan Moinvaziri f847640a60 added visual studio 2008 solution and projects 2012-07-14 16:46:17 -07:00
Nathan Moinvaziri 8979390ca7 fixed warnings 2012-07-14 16:45:49 -07:00
Nathan Moinvaziri e49858e877 fix formatting 2012-07-14 16:32:10 -07:00
Nathan Moinvaziri 558819dbb0 changelog cleanup 2012-07-14 16:31:44 -07:00
Nathan Moinvaziri 754fa14f0e cleanup, moved seek definitions to ioapi.c 2012-07-14 16:31:22 -07:00
Nathan Moinvaziri 3a2005c3ab fixed append to zip file not working with i/o buffering
fixed file not found not failing properly with i/o buffering
2012-07-14 16:30:48 -07:00
Nathan Moinvaziri 217ca8e5a9 remove readme 2012-07-09 10:32:27 -07:00
Nathan Moinvaziri a9a9591296 cleanup/logic simplification 2012-07-09 01:36:14 -07:00
Nathan Moinvaziri f9a81c7b74 fixed bug when can't open file in i/o buffer layer 2012-07-09 01:13:40 -07:00
Nathan Moinvaziri 12d5b85dd7 fixed bug in opening of second stream for non-spanned zip files 2012-07-08 12:04:24 -07:00
Nathan Moinvaziri b9be238542 added unzGoToFirstFile2 and unzGoToNextFile2 to reduce backward disk seeking
added opening of second stream to zip for non-spanned zip files so there isn't constant seeking between the CD and the content
2012-06-29 00:08:22 -07:00
Nathan Moinvaziri cc50072ee2 added disk switching comments 2012-06-29 00:03:26 -07:00
Nathan Moinvaziri 1e00f0ecac fixed write buffering when seeking to current position 2012-06-29 00:00:50 -07:00
Nathan Moinvaziri 6cae70f507 many improvements to i/o buffering 2012-06-28 02:02:57 -07:00
Nathan Moinvaziri 81f60da735 fixed zip64 central directory not loading when using spanning 2012-06-28 01:58:36 -07:00
Nathan Moinvaziri 4287793fd9 fixed disk spanning bug where local file header would be written incorrectly across disk boundaries 2012-06-28 01:55:44 -07:00
Nathan Moinvaziri 866cf155ce fixed disk switching when already on expected disk 2012-06-27 22:45:19 -07:00
Nathan Moinvaziri f736321e0d fixed opening zip files with > 100k files in it cause by last check-in 2012-06-27 04:24:09 -07:00
Nathan Moinvaziri a39d6dfa81 implement i/o improvements when searching for the central directory (http://mail.madler.net/pipermail/zlib-devel_madler.net/2012-February/002760.html) 2012-06-27 01:35:12 -07:00
Nathan Moinvaziri 76d6131670 added write buffer seeking for improved i/o performance on files < 64kb (IOBUF_BUFFERSIZE) 2012-06-25 23:42:27 -07:00
Nathan Moinvaziri e8b02cd2f2 code simplification and formatting cleanup 2012-06-25 23:32:55 -07:00
Nathan Moinvaziri a19cd79332 code simplification and formatting cleanup 2012-06-25 23:32:07 -07:00
Nathan Moinvaziri b2c85b1ec2 updated aes library 2012-06-25 23:28:32 -07:00
Nathan Moinvaziri a4a8f8c737 aes 9-12-2011 2012-06-03 22:29:13 -07:00
Nathan Moinvaziri be225ec364 updated readme 2012-05-10 16:02:59 -07:00
Nathan Moinvaziri 5cdf2ca001 fixed compilation warnings on osx 2012-05-10 15:59:36 -07:00
Nathan Moinvaziri 5a61e8a850 zlib 1.2.7 2012-05-07 14:11:56 -07:00
Nathan Moinvaziri 52ba03285d zlib 1.2.7 2012-05-07 14:10:50 -07:00
Nathan Moinvaziri 6bbc4c7da4 fix inconsistent whitespace 2012-05-07 09:50:15 -07:00
Nathan Moinvaziri 0b262c6b2f fix io buf seek bug 2012-05-07 00:39:30 -07:00
Nathan Moinvaziri 5507aa75ab fix Z_AES #define 2012-05-07 00:04:44 -07:00
Nathan Moinvaziri 623f45d2bb add AES encryption support 2012-05-06 23:55:08 -07:00
Nathan Moinvaziri 358e00baa6 fixed seek bugs in io buffer support 2012-05-06 23:52:22 -07:00
Nathan Moinvaziri 6aaab7317c added support for io buffering 2012-05-06 13:04:17 -07:00
Nathan Moinvaziri 82def1052a updated readme 2012-02-25 23:40:01 -07:00
Nathan Moinvaziri 2b165cc438 updated readme 2012-02-25 23:34:45 -07:00
Nathan Moinvaziri e42c1f8594 fix zip64 w/extra field backwards seek bug 2012-02-25 23:33:58 -07:00
Nathan Moinvaziri 7c6d216816 zlib 1.2.6.1 2012-02-25 23:28:28 -07:00
Nathan Moinvaziri fae75991c1 updated readme 2012-01-21 15:15:17 -07:00
Nathan Moinvaziri d2368718ee latest changes from gvollant 2012-01-21 15:12:36 -07:00
Nathan Moinvaziri 6d35b6b884 added pkware disk spanning support 2012-01-21 15:10:18 -07:00
Nathan Moinvaziri 35c6102e21 zlib 1.2.5 2012-01-21 14:53:44 -07:00
Nathan Moinvaziri 4fa2e689f3 Added readme 2012-01-21 12:27:27 -07:00
501 changed files with 33821 additions and 39474 deletions
-1
View File
@@ -1 +0,0 @@
*.patch -whitespace
-214
View File
@@ -1,214 +0,0 @@
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-14
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-14-${{ 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-14-${{ runner.arch }}-release-${{ github.sha }}
path: ${{ runner.temp }}/bext-macos-14-${{ 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-14)-(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
@@ -1,256 +0,0 @@
# 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
@@ -1,56 +0,0 @@
# 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
-25
View File
@@ -1,25 +0,0 @@
# Common build directories used in the source tree
/build
/.build
/*_build
/*-build
/out
# 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
-370
View File
@@ -1,370 +0,0 @@
[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 "itcl3/itcl"]
path = itcl/itcl
url = https://github.com/BRL-CAD/itcl
branch = RELEASE
ignore = dirty
shallow = true
[submodule "itk3/itk"]
path = itk/itk
url = https://github.com/BRL-CAD/itk
branch = RELEASE
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
@@ -0,0 +1,26 @@
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
- travis_wait 30 python test.py --exe_dir=../build
-91
View File
@@ -1,91 +0,0 @@
set(bext_root "${CMAKE_CURRENT_LIST_DIR}/..")
get_filename_component(bext_root "${bext_root}" ABSOLUTE)
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)
set(git_args submodule update --init --recursive --jobs 8)
if (GIT_SHALLOW_CLONE)
list(APPEND git_args --recommend-shallow)
endif (GIT_SHALLOW_CLONE)
list(APPEND git_args -- ${project_paths})
if (WIN32)
list(PREPEND git_args -c core.longpaths=true)
endif (WIN32)
execute_process(
COMMAND ${GIT_EXECUTABLE} ${git_args}
WORKING_DIRECTORY ${bext_root}
COMMAND_ERROR_IS_FATAL ANY
)
message(STATUS "Bootstrap complete for profile ${profile}")
-220
View File
@@ -1,220 +0,0 @@
# 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()
-85
View File
@@ -1,85 +0,0 @@
# 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
@@ -1,451 +0,0 @@
# 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
@@ -1,100 +0,0 @@
#
# 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
@@ -1,82 +0,0 @@
# 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
@@ -1,268 +0,0 @@
#
# - 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
@@ -1,80 +0,0 @@
#.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
@@ -1,94 +0,0 @@
# 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
@@ -1,94 +0,0 @@
# 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
@@ -1,102 +0,0 @@
# 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
@@ -1,103 +0,0 @@
# 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
@@ -1,94 +0,0 @@
# 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
@@ -1,292 +0,0 @@
#
# - 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
@@ -1,199 +0,0 @@
# 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
@@ -1,40 +0,0 @@
# 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
@@ -1,80 +0,0 @@
###############################################################################
# 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
@@ -1,167 +0,0 @@
# 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
@@ -1,84 +0,0 @@
#.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
@@ -1,85 +0,0 @@
# 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
@@ -1,160 +0,0 @@
# 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
@@ -1,554 +0,0 @@
# 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
@@ -1,522 +0,0 @@
# 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
@@ -1,72 +0,0 @@
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
@@ -1,541 +0,0 @@
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
@@ -1,115 +0,0 @@
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
@@ -1,163 +0,0 @@
# 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
@@ -1,75 +0,0 @@
# 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
@@ -1,43 +0,0 @@
/* 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
@@ -1,246 +0,0 @@
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}")
-478
View File
@@ -1,478 +0,0 @@
# 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.
#
###
###############################################################################
# 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})
find_program(GIT_EXECUTABLE git)
if (NOT GIT_EXECUTABLE)
message(FATAL_ERROR "Need to populate Git submodule, but unable to find git executable")
endif (NOT GIT_EXECUTABLE)
set(git_args submodule update --init --recursive)
if (GIT_SHALLOW_CLONE)
list(APPEND git_args --recommend-shallow)
endif (GIT_SHALLOW_CLONE)
if (WIN32)
list(PREPEND git_args -c core.longpaths=true)
endif (WIN32)
execute_process(
COMMAND ${GIT_EXECUTABLE} ${git_args} ${path}
WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND_ERROR_IS_FATAL ANY
)
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 (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${path}/${checkfile})
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 (NOT EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/${path}/${checkfile})
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
+325 -852
View File
File diff suppressed because it is too large Load Diff
-165
View File
@@ -1,165 +0,0 @@
{
"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"]
}
]
}
-172
View File
@@ -1,172 +0,0 @@
# 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) |
| `itcl` | `USE_TCL` | `install` | `patch`, `tcl` | [repository](https://github.com/BRL-CAD/itcl) |
| `itk` | `USE_TCL` | `install` | `patch`, `tcl`, `tk`, `itcl` | [repository](https://github.com/BRL-CAD/itk) |
| `iwidgets` | `USE_TCL` | `install` | `patch`, `itcl`, `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).
-115
View File
@@ -1,115 +0,0 @@
# 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.
# 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
@@ -0,0 +1,17 @@
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
@@ -0,0 +1,37 @@
Pod::Spec.new do |s|
s.name = 'Minizip'
s.version = '2.3.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 splitting
It also has the latest bug fixes that having been found all over the internet.
DESC
s.homepage = 'https://github.com/nmoinvaz/minizip'
s.authors = 'Nathan Moinvaziri', 'Gilles Vollant'
s.source = { :git => 'https://github.com/nmoinvaz/minizip.git' }
s.libraries = 'z'
s.subspec 'Core' do |sp|
sp.source_files = '{mz_os,mz_compat,mz_strm,mz_strm_mem,mz_strm_buf,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
@@ -1,902 +0,0 @@
# 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.)
+165 -221
View File
@@ -1,221 +1,165 @@
# 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.
# 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.
## Xmin-backed bundled toolkits
An installed Xmin SDK can provide the X11 and OpenGL surface for bext's
bundled Tk and Qt. 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.
# 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
# Minizip 2.3.1
This library is a refactoring of the minizip contribution found in the zlib distribution and is supported on Windows, macOS, and Linux. The motivation for this work has been the inclusion of advanced features, improvements in code maintainability and readability, and the reduction of duplicate code. 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 my older fork of this library checkout the [1.2](https://github.com/nmoinvaz/minizip/tree/1.2) branch.
For the original work maintained by Mark Adler checkout the zlib minizip [contrib](https://github.com/madler/zlib/tree/master/contrib/minizip).
## 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 |
|:- |:-|:-:|
| minizip.c | Sample application | No |
| mz_compat.\* | Minizip 1.0 compatibility layer | No |
| mz.h | Error codes and flags | Yes |
| mz_os\* | OS specific helper functions | Encryption, Disk Splitting |
| 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 | zlib or liblzma |
| 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 | zlib or liblzma |
| mz_zip.\* | Zip functionality | Yes |
## Features
### 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](https://www.winzip.com/aes_info.htm)
+ Requires ``cmake . -DUSE_AES=ON`` or ``#define HAVE_AES``
+ Requires Brian Gladman's [AES](https://github.com/BrianGladman/aes) and [SHA](https://github.com/BrianGladman/sha) libraries
When zipping with a password it will always use AES 256-bit encryption.
When unzipping it will use AES decryption only if necessary.
#### Disabling All Encryption
To disable encryption use the following cmake commands:
```
cmake . -DUSE_AES=OFF
cmake . -DUSE_CRYPT=OFF
```
### NTFS Timestamps
Support has been added for UTC last modified, last accessed, and creation dates.
### Streams
This library has been refactored around streams.
#### Memory Streaming
To unzip from a zip file in memory pass the memory stream to the open function.
```
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_OPEN_MODE_READ);
void *zip_handle = mz_zip_open(mem_stream, MZ_OPEN_MODE_READ);
// 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 open function.
```
void *mem_stream = NULL;
mz_stream_mem_create(&mem_stream);
mz_stream_mem_set_grow_size(mem_stream, (128 * 1024));
mz_stream_open(mem_stream, NULL, MZ_OPEN_MODE_CREATE);
void *zip_handle = mz_zip_open(mem_stream, MZ_OPEN_MODE_WRITE);
// do unzip operations
mz_stream_mem_delete(&mem_stream);
```
For a complete example, see test_zip_mem() in [test.c](https://github.com/nmoinvaz/minizip/blob/master/test/test.c).
#### 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_OPEN_MODE_READ);
mz_stream_buffered_set_base(buf_stream, stream);
void *zip_handle = mz_zip_open(buf_stream, MZ_OPEN_MODE_READ);
```
#### Disk Splitting Stream
To create an archive with multiple disks use the disk splitting stream and 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..
void *zip_handle = mz_zip_open(split_stream, MZ_OPEN_MODE_WRITE);
```
### Windows RT
+ Requires ``#define MZ_USE_WINRT_API``
## Limitations
+ Archives are required to have a central directory.
+ Central directory header values should be correct and it is necessary for the compressed size to be accurate for AES encryption.
+ Central directory encryption is not supported due to licensing restrictions mentioned by PKWARE in their zip appnote.
+ Central directory is the only data stored on the last disk of a split-disk archive and doesn't follow disk size restrictions.
-20
View File
@@ -1,20 +0,0 @@
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.
-108
View File
@@ -1,108 +0,0 @@
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
-17
View File
@@ -1,17 +0,0 @@
BOOST
EIGEN
EMBREE
JPEG
LLVM
LZ4
ONETBB
OPENCOLORIO
OPENEXR
OPENIMAGEIO
OSL
PATCH
PNG
TIFF
XERCES_C
ZLIB
-152
View File
@@ -1,152 +0,0 @@
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
@@ -1,72 +0,0 @@
# 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
@@ -1,4 +0,0 @@
PATCH
PUGIXML
ZLIB
-98
View File
@@ -1,98 +0,0 @@
--- 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
@@ -1,12 +0,0 @@
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;
-55
View File
@@ -1,55 +0,0 @@
# 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 astyle/astyle deleted from 848edc8206
-2
View File
@@ -1,2 +0,0 @@
PATCH
-173
View File
@@ -1,173 +0,0 @@
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
@@ -1,61 +0,0 @@
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
@@ -1,437 +0,0 @@
# 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
@@ -1,54 +0,0 @@
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 boost/boost deleted from 2d59a4b188
-5
View File
@@ -1,5 +0,0 @@
ICU
PATCH
ZLIB
ZSTD
-26
View File
@@ -1,26 +0,0 @@
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
@@ -1,78 +0,0 @@
# 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
@@ -1,2 +0,0 @@
PATCH
Submodule bullet/bullet3 deleted from 63c4d67e33
-12
View File
@@ -1,12 +0,0 @@
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
@@ -1,197 +0,0 @@
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
@@ -1,58 +0,0 @@
# 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
-2
View File
@@ -1,2 +0,0 @@
PATCH
-80
View File
@@ -1,80 +0,0 @@
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
@@ -1,48 +0,0 @@
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
@@ -1,2 +0,0 @@
PATCH
-89
View File
@@ -1,89 +0,0 @@
# 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 eigen/eigen deleted from bc3b39870e
-2
View File
@@ -1,2 +0,0 @@
PATCH
-11
View File
@@ -1,11 +0,0 @@
--- 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
@@ -1,12 +0,0 @@
--- 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
@@ -1,15 +0,0 @@
--- 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
@@ -1,62 +0,0 @@
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 embree/embree deleted from f590db83ef
-5
View File
@@ -1,5 +0,0 @@
BOOST
ONETBB
PATCH
ZLIB
-20
View File
@@ -1,20 +0,0 @@
--- 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
@@ -1,50 +0,0 @@
bext_enable(EXPAT)
if (ENABLE_EXPAT)
git_submodule_init(libexpat 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
@@ -1,2 +0,0 @@
PATCH
-12
View File
@@ -1,12 +0,0 @@
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
Submodule expat/libexpat deleted from fa75b96546
-125
View File
@@ -1,125 +0,0 @@
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
@@ -1,15 +0,0 @@
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.
Submodule flexbison/bison deleted from 17479d234a
Submodule flexbison/flex deleted from ab49343b08
-15
View File
@@ -1,15 +0,0 @@
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
-35
View File
@@ -1,35 +0,0 @@
diff -Naur winflexbison-2.5.25/CMakeLists.txt winflexbison/CMakeLists.txt
--- winflexbison-2.5.25/CMakeLists.txt 2022-01-09 23:47:26.000000000 -0500
+++ winflexbison/CMakeLists.txt 2023-09-14 13:19:51.353807462 -0400
@@ -66,16 +66,16 @@
if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
# CPACK
if(CMAKE_BUILD_TYPE STREQUAL "Debug")
- install(DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG}/" DESTINATION "./")
+ install(DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_DEBUG}/" DESTINATION "bin/")
else()
- install(DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE}/" DESTINATION "./")
+ install(DIRECTORY "${CMAKE_RUNTIME_OUTPUT_DIRECTORY_RELEASE}/" DESTINATION "bin/")
endif()
- install(DIRECTORY "custom_build_rules/" DESTINATION "./custom_build_rules/")
- install(DIRECTORY "bison/data/" DESTINATION "./data/")
- install(FILES "flex/src/FlexLexer.h" DESTINATION "./")
- install(FILES "changelog.md" DESTINATION "./")
- install(FILES "README.md" DESTINATION "./")
+ install(DIRECTORY "custom_build_rules/" DESTINATION "share/custom_build_rules/")
+ install(DIRECTORY "bison/data/" DESTINATION "share/data/")
+ install(FILES "flex/src/FlexLexer.h" DESTINATION "include/winflexbison/")
+ install(FILES "changelog.md" DESTINATION "share/winflexbison")
+ install(FILES "README.md" DESTINATION "share/winflexbison")
set(PACKAGE_GENERATORS_DEFAULT ZIP)
@@ -96,4 +96,5 @@
set(CPACK_PACKAGE_FILE_NAME "win_flex_bison-${CPACK_PACKAGE_VERSION}")
include(CPack)
-endif()
\ No newline at end of file
+endif()
+
-49
View File
@@ -1,49 +0,0 @@
bext_enable(FMT)
if (ENABLE_FMT)
git_submodule_init(fmt CMakeLists.txt)
RegisterDeps(FMT)
ExternalProject_Add(FMT_BLD
URL "${CMAKE_CURRENT_SOURCE_DIR}/fmt"
BUILD_ALWAYS ${EXT_BUILD_ALWAYS} ${LOG_OPTS}
CMAKE_ARGS
-DFMT_DOC=OFF
-DFMT_TEST=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_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(FMT FMT_DEPENDS)
# Copy the license into position in CMAKE_BUNDLE_INSTALL_PREFIX
configure_file(
${CMAKE_CURRENT_SOURCE_DIR}/fmt/LICENSE
${DOC_LICENSE_DIR}/fmt.txt
COPYONLY
)
endif (ENABLE_FMT)
# Local Variables:
# tab-width: 8
# mode: cmake
# indent-tabs-mode: t
# End:
# ex: shiftwidth=2 tabstop=8

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