aboutsummaryrefslogtreecommitdiff
path: root/vcpkg/ports/fmilib
diff options
context:
space:
mode:
Diffstat (limited to 'vcpkg/ports/fmilib')
-rw-r--r--vcpkg/ports/fmilib/devendor-sublibs.diff54
-rw-r--r--vcpkg/ports/fmilib/fix-mergestaticlibs.diff20
-rw-r--r--vcpkg/ports/fmilib/minizip.patch52
-rw-r--r--vcpkg/ports/fmilib/portfile.cmake56
-rw-r--r--vcpkg/ports/fmilib/unofficial-export.diff23
-rw-r--r--vcpkg/ports/fmilib/unofficial-fmilib-config.cmake4
-rw-r--r--vcpkg/ports/fmilib/vcpkg.json21
7 files changed, 230 insertions, 0 deletions
diff --git a/vcpkg/ports/fmilib/devendor-sublibs.diff b/vcpkg/ports/fmilib/devendor-sublibs.diff
new file mode 100644
index 0000000..8845c35
--- /dev/null
+++ b/vcpkg/ports/fmilib/devendor-sublibs.diff
@@ -0,0 +1,54 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 690ee5f..2816987 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -230,7 +230,7 @@ configure_file (
+ "${FMILibrary_BINARY_DIR}/fmilib_config.h"
+ )
+
+-set(FMILIB_SHARED_SUBLIBS ${FMIXML_LIBRARIES} ${FMIZIP_LIBRARIES} ${FMICAPI_LIBRARIES} expat minizip zlib c99snprintf)
++set(FMILIB_SHARED_SUBLIBS ${FMIXML_LIBRARIES} ${FMIZIP_LIBRARIES} ${FMICAPI_LIBRARIES} minizip c99snprintf)
+ set(FMILIB_SUBLIBS ${FMIIMPORT_LIBRARIES} ${JMUTIL_LIBRARIES} ${FMILIB_SHARED_SUBLIBS})
+ set(FMILIB_SHARED_SRC ${FMIIMPORTSOURCE} ${JMUTILSOURCE} ${FMIIMPORTHEADERS})
+
+diff --git a/Config.cmake/fmixml.cmake b/Config.cmake/fmixml.cmake
+index ddd3c1f..3bafac3 100644
+--- a/Config.cmake/fmixml.cmake
++++ b/Config.cmake/fmixml.cmake
+@@ -137,6 +137,7 @@ set(FMIXMLSOURCE
+ src/FMI2/fmi2_xml_variable.c
+ )
+
++if(0)
+ include(ExternalProject)
+
+ # The *_POSTFIX variables are set because it makes it easier to determine the name of
+@@ -211,7 +212,10 @@ if(FMILIB_INSTALL_SUBLIBS)
+ DESTINATION lib)
+ endif()
+
++endif(0)
+ set(EXPAT_INCLUDE_DIRS ${CMAKE_BINARY_DIR}/ExpatEx/install/include)
++find_package(expat CONFIG REQUIRED)
++add_library(expat ALIAS expat::expat)
+
+ include_directories("${EXPAT_INCLUDE_DIRS}" "${FMILIB_THIRDPARTYLIBS}/FMI/" "${FMIXMLGENDIR}/FMI1" "${FMIXMLGENDIR}/FMI2")
+
+diff --git a/Config.cmake/fmizip.cmake b/Config.cmake/fmizip.cmake
+index c046d47..50e82b3 100644
+--- a/Config.cmake/fmizip.cmake
++++ b/Config.cmake/fmizip.cmake
+@@ -20,7 +20,12 @@ if(NOT FMIZIPDIR)
+
+ set(FMIZIP_LIBRARIES fmizip)
+
+- add_subdirectory(Config.cmake/Minizip)
++ add_library(minizip OBJECT
++ "${FMILIB_THIRDPARTYLIBS}/Minizip/minizip/miniunz.c"
++ "${FMILIB_THIRDPARTYLIBS}/Minizip/minizip/minizip.c"
++ )
++ find_package(unofficial-minizip CONFIG REQUIRED)
++ target_link_libraries(minizip PRIVATE unofficial::minizip::minizip)
+
+ include_directories("${FMIZIPDIR}/include" "${FMILIB_THIRDPARTYLIBS}/Minizip/minizip" "${FMILIB_THIRDPARTYLIBS}/FMI" "${FMILIB_THIRDPARTYLIBS}/Zlib/zlib-1.2.6" "${FMILibrary_BINARY_DIR}/zlib")
+
diff --git a/vcpkg/ports/fmilib/fix-mergestaticlibs.diff b/vcpkg/ports/fmilib/fix-mergestaticlibs.diff
new file mode 100644
index 0000000..05fbcc4
--- /dev/null
+++ b/vcpkg/ports/fmilib/fix-mergestaticlibs.diff
@@ -0,0 +1,20 @@
+diff --git a/Config.cmake/mergestaticlibs.cmake b/Config.cmake/mergestaticlibs.cmake
+index 858a026..67eccb7 100644
+--- a/Config.cmake/mergestaticlibs.cmake
++++ b/Config.cmake/mergestaticlibs.cmake
+@@ -21,6 +21,15 @@ function(merge_static_libs outlib )
+ file(WRITE ${dummyfile} "const char * dummy = \"${dummyfile}\";")
+
+ add_library(${outlib} STATIC ${dummyfile})
++ foreach(lib IN LISTS libs)
++ target_sources(${outlib} PRIVATE "$<TARGET_OBJECTS:${lib}>")
++ get_target_property(link_libs ${lib} INTERFACE_LINK_LIBRARIES)
++ if(link_libs)
++ list(REMOVE_ITEM link_libs ${libs})
++ target_link_libraries(${outlib} ${link_libs})
++ endif()
++ endforeach()
++ return()
+
+ if("${CMAKE_CFG_INTDIR}" STREQUAL ".")
+ set(multiconfig FALSE)
diff --git a/vcpkg/ports/fmilib/minizip.patch b/vcpkg/ports/fmilib/minizip.patch
new file mode 100644
index 0000000..abd3ec1
--- /dev/null
+++ b/vcpkg/ports/fmilib/minizip.patch
@@ -0,0 +1,52 @@
+diff --git a/ThirdParty/Minizip/minizip/miniunz.c b/ThirdParty/Minizip/minizip/miniunz.c
+index 1931161..d7a8be1 100644
+--- a/ThirdParty/Minizip/minizip/miniunz.c
++++ b/ThirdParty/Minizip/minizip/miniunz.c
+@@ -45,6 +45,7 @@
+ #include <time.h>
+ #include <errno.h>
+ #include <fcntl.h>
++#include <sys/stat.h>
+ #include <stdarg.h>
+
+ #ifdef _WIN32
+@@ -107,7 +108,7 @@ void change_file_date(filename,dosdate,tmu_date)
+ SetFileTime(hFile,&ftm,&ftLastAcc,&ftm);
+ CloseHandle(hFile);
+ #else
+-#ifdef unix || __APPLE__
++#if defined(unix) || defined(__APPLE__)
+ struct utimbuf ut;
+ struct tm newdate;
+ newdate.tm_sec = tmu_date.tm_sec;
+@@ -137,7 +138,7 @@ int mymkdir(dirname)
+ int ret=0;
+ #ifdef _WIN32
+ ret = _mkdir(dirname);
+-#elif unix
++#elif 1
+ ret = mkdir (dirname,0775);
+ #elif __APPLE__
+ ret = mkdir (dirname,0775);
+diff --git a/ThirdParty/Minizip/minizip/minizip.c b/ThirdParty/Minizip/minizip/minizip.c
+index e22f80d..548b6ca 100644
+--- a/ThirdParty/Minizip/minizip/minizip.c
++++ b/ThirdParty/Minizip/minizip/minizip.c
+@@ -101,7 +101,7 @@ uLong filetime(f, tmzip, dt)
+ return ret;
+ }
+ #else
+-#ifdef unix || __APPLE__
++#if defined(unix) || defined(__APPLE__)
+ uLong filetime(f, tmzip, dt)
+ char *f; /* name of file to get info on */
+ tm_zip *tmzip; /* return value: access, modific. and creation times */
+@@ -453,7 +453,7 @@ int minizip(argc,argv)
+ }
+ if( lastslash != NULL )
+ {
+- savefilenameinzip = lastslash+1; // base filename follows last slash.
++ savefilenameinzip = lastslash+1;
+ }
+ }
+
diff --git a/vcpkg/ports/fmilib/portfile.cmake b/vcpkg/ports/fmilib/portfile.cmake
new file mode 100644
index 0000000..7556110
--- /dev/null
+++ b/vcpkg/ports/fmilib/portfile.cmake
@@ -0,0 +1,56 @@
+vcpkg_check_linkage(ONLY_STATIC_LIBRARY)
+
+vcpkg_from_github(
+ OUT_SOURCE_PATH SOURCE_PATH
+ REPO modelon-community/fmi-library
+ REF "${VERSION}"
+ SHA512 65c2dc11116737e4e2ee91a4ec58d2cf24003774fd6d9b8b1d6521f046be9e8f8a963ebedb50a161ad264927062f41ce757c84563cfe628d47614910e8730349
+ HEAD_REF master
+ PATCHES
+ devendor-sublibs.diff
+ minizip.patch
+ fix-mergestaticlibs.diff
+ unofficial-export.diff
+)
+
+file(GLOB vendored_minizip "${SOURCE_PATH}/ThirdParty/Minizip/minizip/*")
+list(FILTER vendored_minizip EXCLUDE REGEX "/minizip.[ch]\$|/miniunz.[ch]\$")
+file(REMOVE_RECURSE
+ ${vendored_minizip}
+ "${SOURCE_PATH}/ThirdParty/Expat"
+ "${SOURCE_PATH}/ThirdParty/Zlib"
+)
+
+string(COMPARE EQUAL "${VCPKG_CRT_LINKAGE}" "static" FMILIB_BUILD_WITH_STATIC_RTLIB)
+string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "static" BUILD_STATIC)
+string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "dynamic" BUILD_SHARED)
+
+vcpkg_cmake_configure(
+ SOURCE_PATH "${SOURCE_PATH}"
+ OPTIONS
+ -Wno-dev
+ -DFMILIB_BUILD_TESTS=OFF
+ -DFMILIB_BUILD_STATIC_LIB=${BUILD_STATIC}
+ -DFMILIB_BUILD_SHARED_LIB=${BUILD_SHARED}
+ -DFMILIB_BUILD_WITH_STATIC_RTLIB=${FMILIB_BUILD_WITH_STATIC_RTLIB}
+ -DFMILIB_GENERATE_DOXYGEN_DOC=OFF
+ OPTIONS_DEBUG
+ "-DFMILIB_INSTALL_PREFIX=${CURRENT_PACKAGES_DIR}/debug"
+ OPTIONS_RELEASE
+ "-DFMILIB_INSTALL_PREFIX=${CURRENT_PACKAGES_DIR}"
+ MAYBE_UNUSED_VARIABLES
+ FMILIB_BUILD_WITH_STATIC_RTLIB
+)
+
+vcpkg_cmake_install()
+vcpkg_copy_pdbs()
+file(INSTALL "${CMAKE_CURRENT_LIST_DIR}/unofficial-fmilib-config.cmake" DESTINATION "${CURRENT_PACKAGES_DIR}/share/unofficial-fmilib")
+vcpkg_cmake_config_fixup(PACKAGE_NAME unofficial-fmilib)
+
+file(REMOVE_RECURSE
+ "${CURRENT_PACKAGES_DIR}/debug/include"
+ "${CURRENT_PACKAGES_DIR}/debug/doc"
+ "${CURRENT_PACKAGES_DIR}/doc"
+)
+
+vcpkg_install_copyright(FILE_LIST "${SOURCE_PATH}/LICENSE.md")
diff --git a/vcpkg/ports/fmilib/unofficial-export.diff b/vcpkg/ports/fmilib/unofficial-export.diff
new file mode 100644
index 0000000..f621e18
--- /dev/null
+++ b/vcpkg/ports/fmilib/unofficial-export.diff
@@ -0,0 +1,23 @@
+diff --git a/CMakeLists.txt b/CMakeLists.txt
+index 583e15b..0319e3a 100644
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -300,10 +300,17 @@ endif()
+
+ file(COPY "${FMILIBRARYHOME}/Config.cmake/fmilib.h" DESTINATION "${FMILibrary_BINARY_DIR}")
+
++target_include_directories(${FMILIB_TARGETS} INTERFACE $<INSTALL_INTERFACE:include>)
+ install(TARGETS ${FMILIB_TARGETS}
++ EXPORT unofficial-fmilib-targets
+ ARCHIVE DESTINATION lib
+ LIBRARY DESTINATION lib
+- RUNTIME DESTINATION lib
++ RUNTIME DESTINATION bin
++)
++install(EXPORT unofficial-fmilib-targets
++ FILE unofficial-fmilib-targets.cmake
++ NAMESPACE unofficial::fmilib::
++ DESTINATION share/unofficial-fmilib
+ )
+ install(FILES
+ "${FMILIBRARYHOME}/FMILIB_Readme.txt"
diff --git a/vcpkg/ports/fmilib/unofficial-fmilib-config.cmake b/vcpkg/ports/fmilib/unofficial-fmilib-config.cmake
new file mode 100644
index 0000000..3ad246e
--- /dev/null
+++ b/vcpkg/ports/fmilib/unofficial-fmilib-config.cmake
@@ -0,0 +1,4 @@
+include(CMakeFindDependencyMacro)
+find_dependency(expat CONFIG)
+find_dependency(unofficial-minizip CONFIG)
+include("${CMAKE_CURRENT_LIST_DIR}/unofficial-fmilib-targets.cmake")
diff --git a/vcpkg/ports/fmilib/vcpkg.json b/vcpkg/ports/fmilib/vcpkg.json
new file mode 100644
index 0000000..55a9744
--- /dev/null
+++ b/vcpkg/ports/fmilib/vcpkg.json
@@ -0,0 +1,21 @@
+{
+ "name": "fmilib",
+ "version": "2.4.1",
+ "port-version": 2,
+ "description": "FMI library is intended as a foundation for applications interfacing FMUs (Functional Mockup Units) that follow FMI Standard. This version of the library supports FMI 1.0 and FMI2.0.",
+ "homepage": "https://www.fmi-standard.org/",
+ "license": "BSD-3-Clause",
+ "supports": "!uwp",
+ "dependencies": [
+ "expat",
+ "minizip",
+ {
+ "name": "vcpkg-cmake",
+ "host": true
+ },
+ {
+ "name": "vcpkg-cmake-config",
+ "host": true
+ }
+ ]
+}