vcpkg/ports/ngspice/portfile.cmake
Marek Roszko 7c4323099b
[ngspice] fix win32 codemodel glob (#16131)
* [ngspice] Fix 32-bit code models not being globbed correctly

* [ngspice] update x-add-version
2021-02-11 00:06:01 -08:00

94 lines
3.5 KiB
CMake

vcpkg_fail_port_install(ON_TARGET "Linux" "OSX" "UWP" ON_ARCH "arm" "arm64")
vcpkg_check_linkage(ONLY_DYNAMIC_LIBRARY)
# ngspice produces self-contained DLLs
set(VCPKG_CRT_LINKAGE static)
vcpkg_from_sourceforge(
OUT_SOURCE_PATH SOURCE_PATH
REPO ngspice/ng-spice-rework
REF 34
FILENAME "ngspice-34.tar.gz"
SHA512 5e90727f3f6b8675b83f71e1961d33cd498081a7f3bea5d081521f12ecb3979775159f083f84a5856233529505262c399f75d305758af51894a1245603476cf8
PATCHES
use-winbison-sharedspice.patch
use-winbison-vngspice.patch
)
vcpkg_find_acquire_program(BISON)
get_filename_component(BISON_DIR "${BISON}" DIRECTORY)
vcpkg_add_to_path(PREPEND "${BISON_DIR}")
# Sadly, vcpkg globs .libs inside install_msbuild and whines that the 47 year old SPICE format isn't a MSVC lib ;)
# We need to kill them off first before the source tree is copied to a tmp location by install_msbuild
file(REMOVE_RECURSE ${SOURCE_PATH}/contrib)
file(REMOVE_RECURSE ${SOURCE_PATH}/examples)
file(REMOVE_RECURSE ${SOURCE_PATH}/man)
file(REMOVE_RECURSE ${SOURCE_PATH}/tests)
# this builds the main dll
vcpkg_install_msbuild(
SOURCE_PATH ${SOURCE_PATH}
INCLUDES_SUBPATH /src/include
LICENSE_SUBPATH COPYING
# install_msbuild swaps x86 for win32(bad) if we dont force our own setting
PLATFORM ${TRIPLET_SYSTEM_ARCH}
PROJECT_SUBPATH visualc/sharedspice.sln
TARGET Build
)
if("codemodels" IN_LIST FEATURES)
# vngspice generates "codemodels" to enhance simulation capabilities
# we cannot use install_msbuild as they output with ".cm" extensions on purpose
set(BUILDTREE_PATH ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET})
file(REMOVE_RECURSE ${BUILDTREE_PATH})
file(COPY ${SOURCE_PATH}/ DESTINATION ${BUILDTREE_PATH})
vcpkg_build_msbuild(
PROJECT_PATH ${BUILDTREE_PATH}/visualc/vngspice.sln
INCLUDES_SUBPATH /src/include
LICENSE_SUBPATH COPYING
# build_msbuild swaps x86 for win32(bad) if we dont force our own setting
PLATFORM ${TRIPLET_SYSTEM_ARCH}
TARGET Build
)
# ngspice oddly has solution configs of x64 and x86 but
# output folders of x64 and win32
if(VCPKG_TARGET_ARCHITECTURE STREQUAL x64)
set(OUT_ARCH x64)
elseif(VCPKG_TARGET_ARCHITECTURE STREQUAL x86)
set(OUT_ARCH Win32)
else()
message(FATAL_ERROR "Unsupported target architecture")
endif()
#put the code models in the intended location
file(GLOB NGSPICE_CODEMODELS_DEBUG
${BUILDTREE_PATH}/visualc/codemodels/${OUT_ARCH}/Debug/*.cm
)
file(COPY ${NGSPICE_CODEMODELS_DEBUG} DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib/ngspice)
file(GLOB NGSPICE_CODEMODELS_RELEASE
${BUILDTREE_PATH}/visualc/codemodels/${OUT_ARCH}/Release/*.cm
)
file(COPY ${NGSPICE_CODEMODELS_RELEASE} DESTINATION ${CURRENT_PACKAGES_DIR}/lib/ngspice)
# copy over spinit (spice init)
file(RENAME ${BUILDTREE_PATH}/visualc/spinit_all ${BUILDTREE_PATH}/visualc/spinit)
file(COPY ${BUILDTREE_PATH}/visualc/spinit DESTINATION ${CURRENT_PACKAGES_DIR}/share/ngspice)
endif()
vcpkg_copy_pdbs()
# Unforunately install_msbuild isn't able to dual include directories that effectively layer
file(GLOB NGSPICE_INCLUDES ${SOURCE_PATH}/visualc/src/include/ngspice/*)
file(COPY ${NGSPICE_INCLUDES} DESTINATION ${CURRENT_PACKAGES_DIR}/include/ngspice)
# This gets copied by install_msbuild but should not be shared
file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/include/cppduals)