aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGiulio Romualdi <giulio.romualdi@gmail.com>2020-08-07 20:49:36 +0200
committerGitHub <noreply@github.com>2020-08-07 11:49:36 -0700
commit222c35e3bcb8f28cd63fc526e591bb4ef6b99e4f (patch)
tree1cd17340ba292552baad7d180edb3c12407b1630
parent025447ae0e2278cc73dc073b8dae8cb9f3022c50 (diff)
downloadvcpkg-222c35e3bcb8f28cd63fc526e591bb4ef6b99e4f.tar.gz
vcpkg-222c35e3bcb8f28cd63fc526e591bb4ef6b99e4f.zip
[CppAD] Add CppAD port (#12560)
* [CppAD] Add CppAD port * [CppAD] Fix compilation on Linux * [CppAD] Remove vcpkg_common_functions from portfile.cmake Co-authored-by: NancyLi1013 <46708020+NancyLi1013@users.noreply.github.com> * [CppAD] Avoid to add the postfix 'd' in the debug library * [CppAD] Patch the pkgconfig file generation * [CppAD] Remove the support for uwp and arm * [CppAD] add DISABLE_PARALLEL_CONFIGURE as option of vcpkg_configure_cmake() command Co-authored-by: NancyLi1013 <46708020+NancyLi1013@users.noreply.github.com>
-rw-r--r--ports/cppad/CONTROL5
-rw-r--r--ports/cppad/pkgconfig-fix.patch63
-rw-r--r--ports/cppad/portfile.cmake42
-rw-r--r--ports/cppad/windows-fix.patch105
4 files changed, 215 insertions, 0 deletions
diff --git a/ports/cppad/CONTROL b/ports/cppad/CONTROL
new file mode 100644
index 000000000..f38cfd121
--- /dev/null
+++ b/ports/cppad/CONTROL
@@ -0,0 +1,5 @@
+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/pkgconfig-fix.patch b/ports/cppad/pkgconfig-fix.patch
new file mode 100644
index 000000000..6688fc9d7
--- /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
new file mode 100644
index 000000000..1c9fc8ddf
--- /dev/null
+++ b/ports/cppad/portfile.cmake
@@ -0,0 +1,42 @@
+# 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
+ REF 20200000.3
+ SHA512 4e980665a21c76cf355d1c5597c65fbfba7ac3e15c43a88ccfe3ba0267b85b4e9aa7c6e8a0ed7a728f8cf2c6e1424625d5cbcdd295a6c0a08b47b4b121572d13
+ HEAD_REF master
+ PATCHES
+ windows-fix.patch
+ pkgconfig-fix.patch
+)
+
+vcpkg_configure_cmake(
+ SOURCE_PATH ${SOURCE_PATH}
+ PREFER_NINJA
+ DISABLE_PARALLEL_CONFIGURE
+ 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()
+
+# 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")
+ 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 000000000..50c38ca12
--- /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<size_t>& 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<size_t>& color ,
+ size_t m ,
+ const CppAD::vector<unsigned int*>& 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/local/graph/json_parser.hpp>
+
+-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/local/graph/json_writer.hpp>
+
+-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<size_t>& 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<size_t>& color ,
+ size_t n ,
+ const CppAD::vector<unsigned int*>& 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
+ );