From 8d636b428c12e0994239782088a98311b32134f2 Mon Sep 17 00:00:00 2001 From: Giulio Romualdi Date: Wed, 22 Jul 2020 18:18:11 +0200 Subject: [PATCH 1/7] [CppAD] Add CppAD port --- ports/cppad/CONTROL | 4 ++ ports/cppad/portfile.cmake | 42 ++++++++++++++ ports/cppad/windows-fix.patch | 105 ++++++++++++++++++++++++++++++++++ 3 files changed, 151 insertions(+) create mode 100644 ports/cppad/CONTROL create mode 100644 ports/cppad/portfile.cmake create mode 100644 ports/cppad/windows-fix.patch diff --git a/ports/cppad/CONTROL b/ports/cppad/CONTROL new file mode 100644 index 00000000000000..fecc1434aabf89 --- /dev/null +++ b/ports/cppad/CONTROL @@ -0,0 +1,4 @@ +Source: cppad +Version: 20200000.3 +Homepage: https://github.com/coin-or/CppAD +Description: CppAD: A Package for Differentiation of C++ Algorithms diff --git a/ports/cppad/portfile.cmake b/ports/cppad/portfile.cmake new file mode 100644 index 00000000000000..2fa0c7d65d2f3d --- /dev/null +++ b/ports/cppad/portfile.cmake @@ -0,0 +1,42 @@ +include(vcpkg_common_functions) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO coin-or/CppAD + REF 20200000.3 + SHA512 4e980665a21c76cf355d1c5597c65fbfba7ac3e15c43a88ccfe3ba0267b85b4e9aa7c6e8a0ed7a728f8cf2c6e1424625d5cbcdd295a6c0a08b47b4b121572d13 + HEAD_REF master + PATCHES + windows-fix.patch +) + +vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH} + PREFER_NINJA + OPTIONS + -Dcppad_prefix=${CURRENT_PACKAGES_DIR} + OPTIONS_RELEASE + -Dcmake_install_libdirs=lib + -Dcppad_debug_which:STRING=debug_none + OPTIONS_DEBUG + -DCMAKE_DEBUG_POSTFIX=d + -Dcmake_install_libdirs=debug/lib +) + +vcpkg_install_cmake() + +# Install the pkgconfig file +if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") + file(COPY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/pkgconfig/cppad.pc DESTINATION ${CURRENT_PACKAGES_DIR}/lib/pkgconfig) +endif() +if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") + if(VCPKG_TARGET_IS_WINDOWS) + vcpkg_replace_string(${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/pkgconfig/cppad.pc "-lcppad_lib" "-lcppad_libd") + endif() + file(COPY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/pkgconfig/cppad.pc DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig) +endif() + +vcpkg_fixup_pkgconfig() + +# Add the copyright +file(INSTALL ${SOURCE_PATH}/COPYING DESTINATION ${CURRENT_PACKAGES_DIR}/share/${PORT} RENAME copyright) diff --git a/ports/cppad/windows-fix.patch b/ports/cppad/windows-fix.patch new file mode 100644 index 00000000000000..50c38ca12307e6 --- /dev/null +++ b/ports/cppad/windows-fix.patch @@ -0,0 +1,105 @@ +diff --git a/cppad_lib/cppad_colpack.cpp b/cppad_lib/cppad_colpack.cpp +index dc3327053..739363292 100644 +--- a/cppad_lib/cppad_colpack.cpp ++++ b/cppad_lib/cppad_colpack.cpp +@@ -17,7 +17,7 @@ in the Eclipse Public License, Version 2.0 are satisfied: + + # if CPPAD_HAS_COLPACK == 0 + namespace CppAD { namespace local { +- CPPAD_LIB_EXPORT void this_routine_should_never_get_called(void) ++ void this_routine_should_never_get_called(void) + { CPPAD_ASSERT_UNKNOWN(false); } + } } + # else // CPPAD_HAS_COLPACK +@@ -52,7 +52,7 @@ the entry with index (i, adolc_pattern[i][k]) is a non-zero + in the sparsity pattern for the matrix. + */ + // ---------------------------------------------------------------------- +-CPPAD_LIB_EXPORT void cppad_colpack_general( ++void cppad_colpack_general( + CppAD::vector& color , + size_t m , + size_t n , +@@ -164,7 +164,7 @@ For i = 0 , ... , m-1, and for k = 1, ... ,adolc_pattern[i][0], + the entry with index (i, adolc_pattern[i][k]) is + in the sparsity pattern for the symmetric matrix. + */ +-CPPAD_LIB_EXPORT void cppad_colpack_symmetric( ++void cppad_colpack_symmetric( + CppAD::vector& color , + size_t m , + const CppAD::vector& adolc_pattern ) +diff --git a/cppad_lib/json_parser.cpp b/cppad_lib/json_parser.cpp +index fac417d9f..ac0910cee 100644 +--- a/cppad_lib/json_parser.cpp ++++ b/cppad_lib/json_parser.cpp +@@ -20,7 +20,7 @@ in the Eclipse Public License, Version 2.0 are satisfied: + // documentation for this routine is in the file below + # include + +-CPPAD_LIB_EXPORT void CppAD::local::graph::json_parser( ++void CppAD::local::graph::json_parser( + const std::string& json , + cpp_graph& graph_obj ) + { using std::string; +diff --git a/cppad_lib/json_writer.cpp b/cppad_lib/json_writer.cpp +index 250345c6e..add4b20a9 100644 +--- a/cppad_lib/json_writer.cpp ++++ b/cppad_lib/json_writer.cpp +@@ -17,7 +17,7 @@ in the Eclipse Public License, Version 2.0 are satisfied: + // documentation for this routine is in the file below + # include + +-CPPAD_LIB_EXPORT void CppAD::local::graph::json_writer( ++void CppAD::local::graph::json_writer( + std::string& json , + const cpp_graph& graph_obj ) + { using std::string; +diff --git a/include/cppad/local/cppad_colpack.hpp b/include/cppad/local/cppad_colpack.hpp +index ee96ab5fe..6dd022180 100644 +--- a/include/cppad/local/cppad_colpack.hpp ++++ b/include/cppad/local/cppad_colpack.hpp +@@ -59,7 +59,7 @@ it is not the case that both + This routine tries to minimize, with respect to the choice of colors, + the number of colors. + */ +-extern void cppad_colpack_general( ++CPPAD_LIB_EXPORT void cppad_colpack_general( + CppAD::vector& color , + size_t m , + size_t n , +@@ -91,7 +91,7 @@ The properties of this coloring have not yet been determined; see + Efficient Computation of Sparse Hessians Using Coloring + and Automatic Differentiation (pdf/ad/gebemedhin14.pdf) + */ +-extern void cppad_colpack_symmetric( ++CPPAD_LIB_EXPORT void cppad_colpack_symmetric( + CppAD::vector& color , + size_t n , + const CppAD::vector& adolc_pattern +diff --git a/include/cppad/local/graph/json_parser.hpp b/include/cppad/local/graph/json_parser.hpp +index 17bcc7c7e..a28d2c045 100644 +--- a/include/cppad/local/graph/json_parser.hpp ++++ b/include/cppad/local/graph/json_parser.hpp +@@ -42,7 +42,7 @@ Upon return it is a $cref cpp_ad_graph$$ representation of this function. + $head Prototype$$ + $srccode%hpp% */ + namespace CppAD { namespace local { namespace graph { +- void json_parser( ++ CPPAD_LIB_EXPORT void json_parser( + const std::string& json , + cpp_graph& graph_obj + ); +diff --git a/include/cppad/local/graph/json_writer.hpp b/include/cppad/local/graph/json_writer.hpp +index 36a4cb39f..299c56cc0 100644 +--- a/include/cppad/local/graph/json_writer.hpp ++++ b/include/cppad/local/graph/json_writer.hpp +@@ -41,7 +41,7 @@ This is a $code cpp_graph$$ object. + $head Prototype$$ + $srccode%hpp% */ + namespace CppAD { namespace local { namespace graph { +- void json_writer( ++ CPPAD_LIB_EXPORT void json_writer( + std::string& json , + const cpp_graph& graph_obj + ); From f92ebdafd24b4d4c80c7dbbb19d314e395404245 Mon Sep 17 00:00:00 2001 From: Giulio Romualdi Date: Mon, 27 Jul 2020 11:50:18 +0200 Subject: [PATCH 2/7] [CppAD] Fix compilation on Linux --- ports/cppad/portfile.cmake | 38 ++++++++++++++++++++++++++------------ 1 file changed, 26 insertions(+), 12 deletions(-) diff --git a/ports/cppad/portfile.cmake b/ports/cppad/portfile.cmake index 2fa0c7d65d2f3d..8dec1b6a8c0efe 100644 --- a/ports/cppad/portfile.cmake +++ b/ports/cppad/portfile.cmake @@ -10,18 +10,32 @@ vcpkg_from_github( windows-fix.patch ) -vcpkg_configure_cmake( - SOURCE_PATH ${SOURCE_PATH} - PREFER_NINJA - OPTIONS - -Dcppad_prefix=${CURRENT_PACKAGES_DIR} - OPTIONS_RELEASE - -Dcmake_install_libdirs=lib - -Dcppad_debug_which:STRING=debug_none - OPTIONS_DEBUG - -DCMAKE_DEBUG_POSTFIX=d - -Dcmake_install_libdirs=debug/lib -) +if(VCPKG_TARGET_IS_WINDOWS) + vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH} + PREFER_NINJA + OPTIONS + -Dcppad_prefix=${CURRENT_PACKAGES_DIR} + OPTIONS_RELEASE + -Dcmake_install_libdirs=lib + -Dcppad_debug_which:STRING=debug_none + OPTIONS_DEBUG + -DCMAKE_DEBUG_POSTFIX=d + -Dcmake_install_libdirs=debug/lib + ) +else() + vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH} + PREFER_NINJA + OPTIONS + -Dcppad_prefix=${CURRENT_PACKAGES_DIR} + OPTIONS_RELEASE + -Dcmake_install_libdirs=lib + -Dcppad_debug_which:STRING=debug_none + OPTIONS_DEBUG + -Dcmake_install_libdirs=debug/lib + ) +endif() vcpkg_install_cmake() From 52c528ea9f80ae06f82c1f0cc93008481305cd75 Mon Sep 17 00:00:00 2001 From: Giulio Romualdi Date: Mon, 27 Jul 2020 11:53:28 +0200 Subject: [PATCH 3/7] [CppAD] Remove vcpkg_common_functions from portfile.cmake Co-authored-by: NancyLi1013 <46708020+NancyLi1013@users.noreply.github.com> --- ports/cppad/portfile.cmake | 1 - 1 file changed, 1 deletion(-) diff --git a/ports/cppad/portfile.cmake b/ports/cppad/portfile.cmake index 8dec1b6a8c0efe..de9c8b0972a991 100644 --- a/ports/cppad/portfile.cmake +++ b/ports/cppad/portfile.cmake @@ -1,4 +1,3 @@ -include(vcpkg_common_functions) vcpkg_from_github( OUT_SOURCE_PATH SOURCE_PATH From 7803ab5ef35b8e9437a9117904e53db7aafb2eb7 Mon Sep 17 00:00:00 2001 From: Giulio Romualdi Date: Tue, 28 Jul 2020 09:53:47 +0200 Subject: [PATCH 4/7] [CppAD] Avoid to add the postfix 'd' in the debug library --- ports/cppad/portfile.cmake | 41 ++++++++++---------------------------- 1 file changed, 11 insertions(+), 30 deletions(-) diff --git a/ports/cppad/portfile.cmake b/ports/cppad/portfile.cmake index de9c8b0972a991..4d79fa047e5041 100644 --- a/ports/cppad/portfile.cmake +++ b/ports/cppad/portfile.cmake @@ -1,4 +1,3 @@ - vcpkg_from_github( OUT_SOURCE_PATH SOURCE_PATH REPO coin-or/CppAD @@ -9,32 +8,17 @@ vcpkg_from_github( windows-fix.patch ) -if(VCPKG_TARGET_IS_WINDOWS) - vcpkg_configure_cmake( - SOURCE_PATH ${SOURCE_PATH} - PREFER_NINJA - OPTIONS - -Dcppad_prefix=${CURRENT_PACKAGES_DIR} - OPTIONS_RELEASE - -Dcmake_install_libdirs=lib - -Dcppad_debug_which:STRING=debug_none - OPTIONS_DEBUG - -DCMAKE_DEBUG_POSTFIX=d - -Dcmake_install_libdirs=debug/lib - ) -else() - vcpkg_configure_cmake( - SOURCE_PATH ${SOURCE_PATH} - PREFER_NINJA - OPTIONS - -Dcppad_prefix=${CURRENT_PACKAGES_DIR} - OPTIONS_RELEASE - -Dcmake_install_libdirs=lib - -Dcppad_debug_which:STRING=debug_none - OPTIONS_DEBUG - -Dcmake_install_libdirs=debug/lib - ) -endif() +vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH} + PREFER_NINJA + OPTIONS + -Dcppad_prefix=${CURRENT_PACKAGES_DIR} + OPTIONS_RELEASE + -Dcmake_install_libdirs=lib + -Dcppad_debug_which:STRING=debug_none + OPTIONS_DEBUG + -Dcmake_install_libdirs=debug/lib +) vcpkg_install_cmake() @@ -43,9 +27,6 @@ if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "release") file(COPY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/pkgconfig/cppad.pc DESTINATION ${CURRENT_PACKAGES_DIR}/lib/pkgconfig) endif() if(NOT DEFINED VCPKG_BUILD_TYPE OR VCPKG_BUILD_TYPE STREQUAL "debug") - if(VCPKG_TARGET_IS_WINDOWS) - vcpkg_replace_string(${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/pkgconfig/cppad.pc "-lcppad_lib" "-lcppad_libd") - endif() file(COPY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/pkgconfig/cppad.pc DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib/pkgconfig) endif() From 34ce3a742a55677729af0ceff24ca6594089b95a Mon Sep 17 00:00:00 2001 From: Giulio Romualdi Date: Thu, 30 Jul 2020 22:12:13 +0200 Subject: [PATCH 5/7] [CppAD] Patch the pkgconfig file generation --- ports/cppad/pkgconfig-fix.patch | 63 +++++++++++++++++++++++++++++++++ ports/cppad/portfile.cmake | 1 + 2 files changed, 64 insertions(+) create mode 100644 ports/cppad/pkgconfig-fix.patch diff --git a/ports/cppad/pkgconfig-fix.patch b/ports/cppad/pkgconfig-fix.patch new file mode 100644 index 00000000000000..6688fc9d7f90f1 --- /dev/null +++ b/ports/cppad/pkgconfig-fix.patch @@ -0,0 +1,63 @@ +diff --git a/pkgconfig/CMakeLists.txt b/pkgconfig/CMakeLists.txt +index db8b65902..b1224a01d 100644 +--- a/pkgconfig/CMakeLists.txt ++++ b/pkgconfig/CMakeLists.txt +@@ -42,8 +42,9 @@ ENDIF( cppad_has_ipopt ) + # cppad_pkgconfig_cflags + # cppad_pkgconfig_cflags_uninstalled + # +-SET(cppad_pkgconfig_cflags "-I${cppad_abs_includedir}" ) +-SET(cppad_pkgconfig_cflags_uninstalled "-I${cppad_SOURCE_DIR}" ) ++SET(cppad_pkgconfig_includedir "${cmake_install_includedirs}" ) ++SET(cppad_pkgconfig_cflags_uninstalled "-I${cppad_SOURCE_DIR}" ) ++SET(cppad_pkgconfig_libdir "${cmake_install_libdirs}" ) + # ---------------------------------------------------------------------------- + # cppad_pkgconfig_libs + # cppad_pkgconfig_libs_uninstalled +@@ -74,7 +75,7 @@ IF( "${libs}" STREQUAL "" ) + SET(cppad_pkgconfig_libs "") + SET(cppad_pkgconfig_libs_uninstalled "") + ELSE( "${libs}" STREQUAL "" ) +- SET(cppad_pkgconfig_libs "-L${cppad_abs_libdir} ${libs}") ++ SET(cppad_pkgconfig_libs "-L\${libdir} ${libs}") + SET(cppad_pkgconfig_libs_uninstalled "${uninstalled} ${libs}") + ENDIF( "${libs}" STREQUAL "" ) + # +@@ -84,10 +85,12 @@ ENDIF( "${libs}" STREQUAL "" ) + CONFIGURE_FILE( + ${CMAKE_CURRENT_SOURCE_DIR}/cppad.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/cppad.pc ++ @ONLY + ) + CONFIGURE_FILE( + ${CMAKE_CURRENT_SOURCE_DIR}/cppad-uninstalled.pc.in + ${CMAKE_CURRENT_BINARY_DIR}/cppad-uninstalled.pc ++ @ONLY + ) + # During install copy cppad.pc to datadir and libdir + INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/cppad.pc +diff --git a/pkgconfig/cppad.pc.in b/pkgconfig/cppad.pc.in +index a202e3fb3..1c34c1e08 100644 +--- a/pkgconfig/cppad.pc.in ++++ b/pkgconfig/cppad.pc.in +@@ -12,12 +12,19 @@ + # This file is used with pkg-config to include CppAD after it is installed + # + # Entries set by top source directory CMakeLists.txt file ++ ++prefix=${pcfiledir}/../.. ++exec_prefix=${prefix} ++libdir=${exec_prefix}/@cppad_pkgconfig_libdir@ ++includedir=${prefix}/@cppad_pkgconfig_includedir@ ++ + Name: cppad + Description: @cppad_description@ + Version: @cppad_version@ + URL: @cppad_url@ ++ + # + # Entries set by pkgconfig/CMakeLists.txt file +-Cflags: @cppad_pkgconfig_cflags@ ++Cflags: -I${includedir} + Libs: @cppad_pkgconfig_libs@ + Requires: @cppad_pkgconfig_requires@ diff --git a/ports/cppad/portfile.cmake b/ports/cppad/portfile.cmake index 4d79fa047e5041..4ceae522189cca 100644 --- a/ports/cppad/portfile.cmake +++ b/ports/cppad/portfile.cmake @@ -6,6 +6,7 @@ vcpkg_from_github( HEAD_REF master PATCHES windows-fix.patch + pkgconfig-fix.patch ) vcpkg_configure_cmake( From 1b94c82de3001c00cebd6940caffd3f85297b84a Mon Sep 17 00:00:00 2001 From: Giulio Romualdi Date: Tue, 4 Aug 2020 10:59:44 +0200 Subject: [PATCH 6/7] [CppAD] Remove the support for uwp and arm --- ports/cppad/CONTROL | 1 + ports/cppad/portfile.cmake | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/ports/cppad/CONTROL b/ports/cppad/CONTROL index fecc1434aabf89..f38cfd121b4da8 100644 --- a/ports/cppad/CONTROL +++ b/ports/cppad/CONTROL @@ -2,3 +2,4 @@ Source: cppad Version: 20200000.3 Homepage: https://github.com/coin-or/CppAD Description: CppAD: A Package for Differentiation of C++ Algorithms +Supports: !(arm|uwp) diff --git a/ports/cppad/portfile.cmake b/ports/cppad/portfile.cmake index 4ceae522189cca..16880b632151b6 100644 --- a/ports/cppad/portfile.cmake +++ b/ports/cppad/portfile.cmake @@ -1,3 +1,7 @@ +# the compilation fails on arm and uwp. Please check the related issue: +# https://github.com/microsoft/vcpkg/pull/12560#issuecomment-668412073 +vcpkg_fail_port_install(ON_TARGET "uwp" and "arm") + vcpkg_from_github( OUT_SOURCE_PATH SOURCE_PATH REPO coin-or/CppAD From 3edc2aa5a44217401edbfaf9d359bd15b2fc7ebf Mon Sep 17 00:00:00 2001 From: Giulio Romualdi Date: Tue, 4 Aug 2020 12:12:08 +0200 Subject: [PATCH 7/7] [CppAD] add DISABLE_PARALLEL_CONFIGURE as option of vcpkg_configure_cmake() command --- ports/cppad/portfile.cmake | 1 + 1 file changed, 1 insertion(+) diff --git a/ports/cppad/portfile.cmake b/ports/cppad/portfile.cmake index 16880b632151b6..1c9fc8ddf4e45e 100644 --- a/ports/cppad/portfile.cmake +++ b/ports/cppad/portfile.cmake @@ -16,6 +16,7 @@ vcpkg_from_github( vcpkg_configure_cmake( SOURCE_PATH ${SOURCE_PATH} PREFER_NINJA + DISABLE_PARALLEL_CONFIGURE OPTIONS -Dcppad_prefix=${CURRENT_PACKAGES_DIR} OPTIONS_RELEASE