Skip to content

Commit

Permalink
[CppAD] Add CppAD port (#12560)
Browse files Browse the repository at this point in the history
* [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>
  • Loading branch information
GiulioRomualdi and NancyLi1013 committed Aug 7, 2020
1 parent 025447a commit 222c35e
Show file tree
Hide file tree
Showing 4 changed files with 215 additions and 0 deletions.
5 changes: 5 additions & 0 deletions ports/cppad/CONTROL
Original file line number Diff line number Diff line change
@@ -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)
63 changes: 63 additions & 0 deletions ports/cppad/pkgconfig-fix.patch
Original file line number Diff line number Diff line change
@@ -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@
42 changes: 42 additions & 0 deletions ports/cppad/portfile.cmake
Original file line number Diff line number Diff line change
@@ -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)
105 changes: 105 additions & 0 deletions ports/cppad/windows-fix.patch
Original file line number Diff line number Diff line change
@@ -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
);

0 comments on commit 222c35e

Please sign in to comment.