diff --git a/ports/blend2d/CONTROL b/ports/blend2d/CONTROL new file mode 100644 index 00000000000000..ef22b526416e14 --- /dev/null +++ b/ports/blend2d/CONTROL @@ -0,0 +1,10 @@ +Source: blend2d +Version: beta_2019-04-30 +Description: Beta 2D Vector Graphics Powered by a JIT Compiler +Default-Features: jit, logging + +Feature: jit +Description: asmjit is used to jit compile pipelines + +Feature: logging +Description: enables logging diff --git a/ports/blend2d/portfile.cmake b/ports/blend2d/portfile.cmake new file mode 100644 index 00000000000000..c23c90afd5cf16 --- /dev/null +++ b/ports/blend2d/portfile.cmake @@ -0,0 +1,60 @@ +include(vcpkg_common_functions) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO blend2d/blend2d + REF 69141350b5a654f328c8529ae301aa1e6bad5342 + SHA512 d9bdd234f443c0ef8793dba1a76cc567bab3f9cf32d835d9e285f7ad946a56e0bc03eab30f61bbce51318e18a74ecfcfc965ac94e1ff6cef21e9b3ccc6a42120 + HEAD_REF master +) + +string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "static" BLEND2D_BUILD_STATIC) + +if(NOT ("jit" IN_LIST FEATURES)) + set(BLEND2D_BUILD_NO_JIT TRUE) +endif() +if(NOT ("logging" IN_LIST FEATURES)) + set(BLEND2D_BUILD_NO_LOGGING TRUE) +endif() + + +if(NOT BLEND2D_BUILD_NO_JIT) + vcpkg_from_github( + OUT_SOURCE_PATH ASMJIT_SOURCE_PATH + REPO asmjit/asmjit + REF f4e685cef003c40ad0d348d0c9eb2a1fe63d8521 + SHA512 77981fc32e746fc88f5707b4a8e8557283261b2657248f0d4900f47bd500de4efe47619a53f32413ea3c6f116e084cac6fdb48b6b92d75e824585d94c785d2b1 + HEAD_REF next-wip + ) + + file(REMOVE_RECURSE ${SOURCE_PATH}/3rdparty/asmjit) + + get_filename_component(ASMJIT_SOURCE_DIR_NAME ${ASMJIT_SOURCE_PATH} NAME) + file(COPY ${ASMJIT_SOURCE_PATH} DESTINATION ${SOURCE_PATH}/3rdparty) + file(RENAME ${SOURCE_PATH}/3rdparty/${ASMJIT_SOURCE_DIR_NAME} ${SOURCE_PATH}/3rdparty/asmjit) +endif() + +vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH} + PREFER_NINJA + OPTIONS + -DBLEND2D_BUILD_STATIC=${BLEND2D_BUILD_STATIC} + -DBLEND2D_BUILD_NO_JIT=${BLEND2D_BUILD_NO_JIT} + -DBLEND2D_BUILD_NO_LOGGING=${BLEND2D_BUILD_NO_LOGGING} +) + + +vcpkg_install_cmake() +vcpkg_copy_pdbs() + +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include) + + +if(BLEND2D_BUILD_STATIC) + file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/bin ${CURRENT_PACKAGES_DIR}/debug/bin) +endif() + + + +# Handle copyright +file(INSTALL ${SOURCE_PATH}/LICENSE.md DESTINATION ${CURRENT_PACKAGES_DIR}/share/blend2d RENAME copyright) diff --git a/ports/duilib/CMakeLists.txt b/ports/duilib/CMakeLists.txt deleted file mode 100644 index 63429eb56ae585..00000000000000 --- a/ports/duilib/CMakeLists.txt +++ /dev/null @@ -1,18 +0,0 @@ -aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR} Root_src) -aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/Control Control_src) -aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/Core Core_src) -aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/Layout Layout_src) -aux_source_directory(${CMAKE_CURRENT_SOURCE_DIR}/Utils Utils_src) - -include_directories(${CMAKE_CURRENT_SOURCE_DIR}) -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Control) -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Core) -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Layout) -include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Utils) - -set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) -add_library(duilib STATIC ${Control_src} ${Core_src} ${Layout_src} ${Utils_src} ${Root_src}) - -add_definitions(-DUILIB_EXPORTS) -target_link_libraries(duilib comctl32) -set_target_properties(duilib PROPERTIES OUTPUT_NAME "duilib") \ No newline at end of file diff --git a/ports/duilib/CONTROL b/ports/duilib/CONTROL index d95cb0f58a3907..9154664ea1dd1b 100644 --- a/ports/duilib/CONTROL +++ b/ports/duilib/CONTROL @@ -1,3 +1,3 @@ Source: duilib -Version: 2019-4-28 -Description: Duilib is a free open source DirectUI interface library under Windows. It is widely accepted by major Internet companies due to its simple and easy to expand design and stable and efficient implementation. It is widely used in IM, video client, stock market software, navigation software, and mobile phone assistive software. Duilib is still evolving, and will continue to improve in many aspects such as documentation, examples, animations, and rendering engines. \ No newline at end of file +Version: 2019-4-28-1 +Description: Duilib is a free open source DirectUI interface library under Windows. It is widely accepted by major Internet companies due to its simple and easy to expand design and stable and efficient implementation. It is widely used in IM, video client, stock market software, navigation software, and mobile phone assistive software. Duilib is still evolving, and will continue to improve in many aspects such as documentation, examples, animations, and rendering engines. diff --git a/ports/duilib/enable-static.patch b/ports/duilib/enable-static.patch new file mode 100644 index 00000000000000..6f069d4a796cd8 --- /dev/null +++ b/ports/duilib/enable-static.patch @@ -0,0 +1,20 @@ +diff --git a/DuiLib/CMakeLists.txt b/DuiLib/CMakeLists.txt +index 96b8fe4..99dc314 100644 +--- a/DuiLib/CMakeLists.txt ++++ b/DuiLib/CMakeLists.txt +@@ -19,8 +19,14 @@ if (MSVC) + SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /source-charset:.936") + endif() + ++if (BUILD_SHARED_LIBS STREQUAL ON) ++ SET(LINKAGE SHARED) ++else() ++ SET(LINKAGE STATIC) ++endif() ++ + set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) +-add_library(duilib SHARED ${Control_src} ${Core_src} ${Layout_src} ${Utils_src} ${Root_src}) ++add_library(duilib ${LINKAGE} ${Control_src} ${Core_src} ${Layout_src} ${Utils_src} ${Root_src}) + + add_definitions(-DUILIB_EXPORTS) + target_link_libraries(duilib comctl32 gdi32 user32) diff --git a/ports/duilib/fix-arm-build.patch b/ports/duilib/fix-arm-build.patch new file mode 100644 index 00000000000000..c4dbd902ec7d71 --- /dev/null +++ b/ports/duilib/fix-arm-build.patch @@ -0,0 +1,11 @@ +diff --git a/DuiLib/CMakeLists.txt b/DuiLib/CMakeLists.txt +index 6a4da5a..4961174 100644 +--- a/DuiLib/CMakeLists.txt ++++ b/DuiLib/CMakeLists.txt +@@ -18,5 +18,5 @@ set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) + add_library(duilib SHARED ${Control_src} ${Core_src} ${Layout_src} ${Utils_src} ${Root_src}) + + add_definitions(-DUILIB_EXPORTS) +-target_link_libraries(duilib comctl32) ++target_link_libraries(duilib comctl32 gdi32 user32) + set_target_properties(duilib PROPERTIES OUTPUT_NAME "duilib") diff --git a/ports/duilib/fix-encoding.patch b/ports/duilib/fix-encoding.patch index 82d90664e9bed5..cf0947e77e9e81 100644 --- a/ports/duilib/fix-encoding.patch +++ b/ports/duilib/fix-encoding.patch @@ -1,374 +1,28 @@ -diff --git a/DuiLib/Control/UIGifAnim-patch.cpp b/DuiLib/Control/UIGifAnim-patch.cpp -new file mode 100644 -index 0000000..61aa32f ---- /dev/null -+++ b/DuiLib/Control/UIGifAnim-patch.cpp -@@ -0,0 +1,368 @@ -+#include "StdAfx.h" -+#include "UIGifAnim.h" -+ -+/////////////////////////////////////////////////////////////////////////////////////// -+DECLARE_HANDLE(HZIP); // An HZIP identifies a zip file that has been opened -+typedef DWORD ZRESULT; -+typedef struct -+{ -+ int index; // index of this file within the zip -+ char name[MAX_PATH]; // filename within the zip -+ DWORD attr; // attributes, as in GetFileAttributes. -+ FILETIME atime,ctime,mtime;// access, create, modify filetimes -+ long comp_size; // sizes of item, compressed and uncompressed. These -+ long unc_size; // may be -1 if not yet known (e.g. being streamed in) -+} ZIPENTRY; -+typedef struct -+{ -+ int index; // index of this file within the zip -+ TCHAR name[MAX_PATH]; // filename within the zip -+ DWORD attr; // attributes, as in GetFileAttributes. -+ FILETIME atime,ctime,mtime;// access, create, modify filetimes -+ long comp_size; // sizes of item, compressed and uncompressed. These -+ long unc_size; // may be -1 if not yet known (e.g. being streamed in) -+} ZIPENTRYW; -+#define OpenZip OpenZipU -+#define CloseZip(hz) CloseZipU(hz) -+extern HZIP OpenZipU(void *z,unsigned int len,DWORD flags); -+extern ZRESULT CloseZipU(HZIP hz); -+#ifdef _UNICODE -+#define ZIPENTRY ZIPENTRYW -+#define GetZipItem GetZipItemW -+#define FindZipItem FindZipItemW -+#else -+#define GetZipItem GetZipItemA -+#define FindZipItem FindZipItemA -+#endif -+extern ZRESULT GetZipItemA(HZIP hz, int index, ZIPENTRY *ze); -+extern ZRESULT GetZipItemW(HZIP hz, int index, ZIPENTRYW *ze); -+extern ZRESULT FindZipItemA(HZIP hz, const TCHAR *name, bool ic, int *index, ZIPENTRY *ze); -+extern ZRESULT FindZipItemW(HZIP hz, const TCHAR *name, bool ic, int *index, ZIPENTRYW *ze); -+extern ZRESULT UnzipItem(HZIP hz, int index, void *dst, unsigned int len, DWORD flags); -+/////////////////////////////////////////////////////////////////////////////////////// -+ -+namespace DuiLib -+{ -+ -+ CGifAnimUI::CGifAnimUI(void) -+ { -+ m_pGifImage = NULL; -+ m_pPropertyItem = NULL; -+ m_nFrameCount = 0; -+ m_nFramePosition = 0; -+ m_bIsAutoPlay = true; -+ m_bIsAutoSize = false; -+ m_bIsPlaying = false; -+ m_pStream = NULL; -+ } -+ -+ -+ CGifAnimUI::~CGifAnimUI(void) -+ { -+ DeleteGif(); -+ m_pManager->KillTimer( this, EVENT_TIEM_ID ); -+ -+ } -+ -+ LPCTSTR CGifAnimUI::GetClass() const -+ { -+ return DUI_CTR_GIFANIM; -+ } -+ -+ LPVOID CGifAnimUI::GetInterface( LPCTSTR pstrName ) -+ { -+ if( _tcscmp(pstrName, DUI_CTR_GIFANIM) == 0 ) return static_cast(this); -+ return CControlUI::GetInterface(pstrName); -+ } -+ -+ void CGifAnimUI::DoInit() -+ { -+ InitGifImage(); -+ } -+ -+ bool CGifAnimUI::DoPaint(HDC hDC, const RECT& rcPaint, CControlUI* pStopControl) -+ { -+ if ( NULL == m_pGifImage ) -+ { -+ InitGifImage(); -+ } -+ DrawFrame( hDC ); -+ return true; -+ } -+ -+ void CGifAnimUI::DoEvent( TEventUI& event ) -+ { -+ if( event.Type == UIEVENT_TIMER ) -+ OnTimer( (UINT_PTR)event.wParam ); -+ } -+ -+ void CGifAnimUI::SetVisible(bool bVisible /* = true */) -+ { -+ CControlUI::SetVisible(bVisible); -+ if (bVisible) -+ PlayGif(); -+ else -+ StopGif(); -+ } -+ -+ void CGifAnimUI::SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue) -+ { -+ if( _tcscmp(pstrName, _T("bkimage")) == 0 ) SetBkImage(pstrValue); -+ else if( _tcscmp(pstrName, _T("autoplay")) == 0 ) { -+ SetAutoPlay(_tcscmp(pstrValue, _T("true")) == 0); -+ } -+ else if( _tcscmp(pstrName, _T("autosize")) == 0 ) { -+ SetAutoSize(_tcscmp(pstrValue, _T("true")) == 0); -+ } -+ else -+ CControlUI::SetAttribute(pstrName, pstrValue); -+ } -+ -+ void CGifAnimUI::SetBkImage(LPCTSTR pStrImage) -+ { -+ if( m_sBkImage == pStrImage || NULL == pStrImage) return; -+ -+ m_sBkImage = pStrImage; -+ -+ StopGif(); -+ DeleteGif(); -+ -+ Invalidate(); -+ -+ } -+ -+ LPCTSTR CGifAnimUI::GetBkImage() -+ { -+ return m_sBkImage.GetData(); -+ } -+ -+ void CGifAnimUI::SetAutoPlay(bool bIsAuto) -+ { -+ m_bIsAutoPlay = bIsAuto; -+ } -+ -+ bool CGifAnimUI::IsAutoPlay() const -+ { -+ return m_bIsAutoPlay; -+ } -+ -+ void CGifAnimUI::SetAutoSize(bool bIsAuto) -+ { -+ m_bIsAutoSize = bIsAuto; -+ } -+ -+ bool CGifAnimUI::IsAutoSize() const -+ { -+ return m_bIsAutoSize; -+ } -+ -+ void CGifAnimUI::PlayGif() -+ { -+ if (m_bIsPlaying || m_pGifImage == NULL) -+ { -+ return; -+ } -+ -+ long lPause = ((long*) m_pPropertyItem->value)[m_nFramePosition] * 10; -+ if ( lPause == 0 ) lPause = 100; -+ m_pManager->SetTimer( this, EVENT_TIEM_ID, lPause ); -+ -+ m_bIsPlaying = true; -+ } -+ -+ void CGifAnimUI::PauseGif() -+ { -+ if (!m_bIsPlaying || m_pGifImage == NULL) -+ { -+ return; -+ } -+ -+ m_pManager->KillTimer(this, EVENT_TIEM_ID); -+ this->Invalidate(); -+ m_bIsPlaying = false; -+ } -+ -+ void CGifAnimUI::StopGif() -+ { -+ if (!m_bIsPlaying) -+ { -+ return; -+ } -+ -+ m_pManager->KillTimer(this, EVENT_TIEM_ID); -+ m_nFramePosition = 0; -+ this->Invalidate(); -+ m_bIsPlaying = false; -+ } -+ -+ void CGifAnimUI::InitGifImage() -+ { -+ m_pGifImage = LoadGifFromFile(GetBkImage()); -+ if ( NULL == m_pGifImage ) return; -+ UINT nCount = 0; -+ nCount = m_pGifImage->GetFrameDimensionsCount(); -+ GUID* pDimensionIDs = new GUID[ nCount ]; -+ m_pGifImage->GetFrameDimensionsList( pDimensionIDs, nCount ); -+ m_nFrameCount = m_pGifImage->GetFrameCount( &pDimensionIDs[0] ); -+ int nSize = m_pGifImage->GetPropertyItemSize( PropertyTagFrameDelay ); -+ m_pPropertyItem = (Gdiplus::PropertyItem*) malloc( nSize ); -+ m_pGifImage->GetPropertyItem( PropertyTagFrameDelay, nSize, m_pPropertyItem ); -+ delete[] pDimensionIDs; -+ pDimensionIDs = NULL; -+ -+ if (m_bIsAutoSize) -+ { -+ SetFixedWidth(m_pGifImage->GetWidth()); -+ SetFixedHeight(m_pGifImage->GetHeight()); -+ } -+ if (m_bIsAutoPlay && nSize > 0) -+ { -+ PlayGif(); -+ } -+ } -+ -+ void CGifAnimUI::DeleteGif() -+ { -+ if (m_pStream != NULL ) -+ { -+ m_pStream->Release(); -+ m_pStream = NULL; -+ } -+ if ( m_pGifImage != NULL ) -+ { -+ delete m_pGifImage; -+ m_pGifImage = NULL; -+ } -+ -+ if ( m_pPropertyItem != NULL ) -+ { -+ free( m_pPropertyItem ); -+ m_pPropertyItem = NULL; -+ } -+ m_nFrameCount = 0; -+ m_nFramePosition = 0; -+ } -+ -+ void CGifAnimUI::OnTimer( UINT_PTR idEvent ) -+ { -+ if ( idEvent != EVENT_TIEM_ID ) -+ return; -+ m_pManager->KillTimer( this, EVENT_TIEM_ID ); -+ this->Invalidate(); -+ -+ m_nFramePosition = (++m_nFramePosition) % m_nFrameCount; -+ -+ long lPause = ((long*) m_pPropertyItem->value)[m_nFramePosition] * 10; -+ if ( lPause == 0 ) lPause = 100; -+ m_pManager->SetTimer( this, EVENT_TIEM_ID, lPause ); -+ } -+ -+ void CGifAnimUI::DrawFrame( HDC hDC ) -+ { -+ if ( NULL == hDC || NULL == m_pGifImage ) return; -+ GUID pageGuid = Gdiplus::FrameDimensionTime; -+ Gdiplus::Graphics graphics( hDC ); -+ graphics.DrawImage( m_pGifImage, m_rcItem.left, m_rcItem.top, m_rcItem.right-m_rcItem.left, m_rcItem.bottom-m_rcItem.top ); -+ m_pGifImage->SelectActiveFrame( &pageGuid, m_nFramePosition ); -+ } -+ -+ Gdiplus::Image* CGifAnimUI::LoadGifFromFile(LPCTSTR pstrGifPath) -+ { -+ LPBYTE pData = NULL; -+ DWORD dwSize = 0; -+ -+ do -+ { -+ CDuiString sFile = CPaintManagerUI::GetResourcePath(); -+ if( CPaintManagerUI::GetResourceZip().IsEmpty() ) { -+ sFile += pstrGifPath; -+ HANDLE hFile = ::CreateFile(sFile.GetData(), GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, \ -+ FILE_ATTRIBUTE_NORMAL, NULL); -+ if( hFile == INVALID_HANDLE_VALUE ) break; -+ dwSize = ::GetFileSize(hFile, NULL); -+ if( dwSize == 0 ) break; -+ -+ DWORD dwRead = 0; -+ pData = new BYTE[ dwSize ]; -+ ::ReadFile( hFile, pData, dwSize, &dwRead, NULL ); -+ ::CloseHandle( hFile ); -+ -+ if( dwRead != dwSize ) { -+ delete[] pData; -+ pData = NULL; -+ break; -+ } -+ } -+ else { -+ sFile += CPaintManagerUI::GetResourceZip(); -+ HZIP hz = NULL; -+ if( CPaintManagerUI::IsCachedResourceZip() ) hz = (HZIP)CPaintManagerUI::GetResourceZipHandle(); -+ else hz = OpenZip((void*)sFile.GetData(), 0, 2); -+ if( hz == NULL ) break; -+ ZIPENTRY ze; -+ int i; -+ if( FindZipItem(hz, pstrGifPath, true, &i, &ze) != 0 ) break; -+ dwSize = ze.unc_size; -+ if( dwSize == 0 ) break; -+ pData = new BYTE[ dwSize ]; -+ int res = UnzipItem(hz, i, pData, dwSize, 3); -+ if( res != 0x00000000 && res != 0x00000600) { -+ delete[] pData; -+ pData = NULL; -+ if( !CPaintManagerUI::IsCachedResourceZip() ) CloseZip(hz); -+ break; -+ } -+ if( !CPaintManagerUI::IsCachedResourceZip() ) CloseZip(hz); -+ } -+ -+ } while (0); -+ -+ while (!pData) -+ { -+ HANDLE hFile = ::CreateFile(pstrGifPath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, \ -+ FILE_ATTRIBUTE_NORMAL, NULL); -+ if( hFile == INVALID_HANDLE_VALUE ) break; -+ dwSize = ::GetFileSize(hFile, NULL); -+ if( dwSize == 0 ) break; -+ -+ DWORD dwRead = 0; -+ pData = new BYTE[ dwSize ]; -+ ::ReadFile( hFile, pData, dwSize, &dwRead, NULL ); -+ ::CloseHandle( hFile ); -+ -+ if( dwRead != dwSize ) { -+ delete[] pData; -+ pData = NULL; -+ } -+ break; -+ } -+ if (!pData) -+ { -+ return NULL; -+ } -+ -+ Gdiplus::Image* pImage = LoadGifFromMemory(pData, dwSize); -+ delete[] pData; -+ return pImage; -+ } -+ -+ Gdiplus::Image* CGifAnimUI::LoadGifFromMemory( LPVOID pBuf,size_t dwSize ) -+ { -+ HGLOBAL hMem = ::GlobalAlloc(GMEM_MOVEABLE, dwSize); -+ BYTE* pMem = (BYTE*)::GlobalLock(hMem); -+ -+ memcpy(pMem, pBuf, dwSize); -+ ::GlobalUnlock(hMem); -+ -+ ::CreateStreamOnHGlobal(hMem, TRUE, &m_pStream); -+ Gdiplus::Image *pImg = Gdiplus::Image::FromStream(m_pStream); -+ if(!pImg || pImg->GetLastStatus() != Gdiplus::Ok) -+ { -+ m_pStream->Release(); -+ m_pStream = NULL; -+ return 0; -+ } -+ return pImg; -+ } -+ -+} +diff --git a/DuiLib/CMakeLists.txt b/DuiLib/CMakeLists.txt +index 4961174..96b8fe4 100644 +--- a/DuiLib/CMakeLists.txt ++++ b/DuiLib/CMakeLists.txt +@@ -14,6 +14,11 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Core) + include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Layout) + include_directories(${CMAKE_CURRENT_SOURCE_DIR}/Utils) + ++if (MSVC) ++ SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /source-charset:.936") ++ SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /source-charset:.936") ++endif() ++ + set(LIBRARY_OUTPUT_PATH ${PROJECT_BINARY_DIR}/lib) + add_library(duilib SHARED ${Control_src} ${Core_src} ${Layout_src} ${Utils_src} ${Root_src}) + +diff --git a/DuiLib/Control/UIGifAnim.cpp b/DuiLib/Control/UIGifAnim.cpp +index 870c9da..61aa32f 100644 +--- a/DuiLib/Control/UIGifAnim.cpp ++++ b/DuiLib/Control/UIGifAnim.cpp +@@ -319,7 +319,6 @@ namespace DuiLib + + while (!pData) + { +- //读不到图片, 则直接去读取bitmap.m_lpstr指向的路径 + HANDLE hFile = ::CreateFile(pstrGifPath, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, \ + FILE_ATTRIBUTE_NORMAL, NULL); + if( hFile == INVALID_HANDLE_VALUE ) break; diff --git a/ports/duilib/fix-post-build-errors.patch b/ports/duilib/fix-post-build-errors.patch new file mode 100644 index 00000000000000..35fa5cc89ac885 --- /dev/null +++ b/ports/duilib/fix-post-build-errors.patch @@ -0,0 +1,11 @@ +diff --git a/DuiLib/CMakeLists.txt b/DuiLib/CMakeLists.txt +index 835d430..6a4da5a 100644 +--- a/DuiLib/CMakeLists.txt ++++ b/DuiLib/CMakeLists.txt +@@ -20,6 +20,3 @@ add_library(duilib SHARED ${Control_src} ${Core_src} ${Layout_src} ${Utils_src} + add_definitions(-DUILIB_EXPORTS) + target_link_libraries(duilib comctl32) + set_target_properties(duilib PROPERTIES OUTPUT_NAME "duilib") +-add_custom_command(TARGET duilib POST_BUILD +- COMMAND ${CMAKE_COMMAND} -E copy_if_different +- ${PROJECT_BINARY_DIR}/lib/duilib.dll ${PROJECT_SOURCE_DIR}/bin/duilib.dll) diff --git a/ports/duilib/portfile.cmake b/ports/duilib/portfile.cmake index c62c5dd2f90890..7e30c99406c6a9 100644 --- a/ports/duilib/portfile.cmake +++ b/ports/duilib/portfile.cmake @@ -6,19 +6,13 @@ vcpkg_from_github( REF d7f3a331a0fc6ba48429cd9e5c427570cc73bc35 SHA512 6381cac467d42e4811859411a5fa620e52075622e8fbec38a6ab320c33bc7d6fdddc809c150d6a10cc40c55a651345bda9387432898d24957b6ab0f5c4b5391c HEAD_REF master - PATCHES "fix-encoding.patch" + PATCHES + "fix-post-build-errors.patch" + "fix-arm-build.patch" + "fix-encoding.patch" + "enable-static.patch" ) -file(REMOVE ${SOURCE_PATH}/DuiLib/Control/UIGifAnim.cpp) -file(RENAME ${SOURCE_PATH}/DuiLib/Control/UIGifAnim-patch.cpp ${SOURCE_PATH}/DuiLib/Control/UIGifAnim.cpp) - -file(INSTALL ${SOURCE_PATH}/DuiLib DESTINATION ${CURRENT_PACKAGES_DIR}/include FILES_MATCHING PATTERN *.h) - -if(VCPKG_LIBRARY_LINKAGE STREQUAL static) - file(REMOVE ${SOURCE_PATH}/DuiLib/CMakeLists.txt) - file(COPY ${CMAKE_CURRENT_LIST_DIR}/CMakeLists.txt DESTINATION ${SOURCE_PATH}/DuiLib) -endif() - vcpkg_configure_cmake( SOURCE_PATH ${SOURCE_PATH}/DuiLib PREFER_NINJA @@ -26,6 +20,8 @@ vcpkg_configure_cmake( vcpkg_build_cmake() +file(INSTALL ${SOURCE_PATH}/DuiLib DESTINATION ${CURRENT_PACKAGES_DIR}/include FILES_MATCHING PATTERN *.h) + if(VCPKG_LIBRARY_LINKAGE STREQUAL static) file(INSTALL ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel/lib/duilib.lib DESTINATION ${CURRENT_PACKAGES_DIR}/lib) file(INSTALL ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg/lib/duilib.lib DESTINATION ${CURRENT_PACKAGES_DIR}/debug/lib) @@ -39,4 +35,3 @@ else() endif() file(INSTALL ${SOURCE_PATH}/LICENSE DESTINATION ${CURRENT_PACKAGES_DIR}/share/duilib RENAME copyright) -file(REMOVE_RECURSE ${SOURCE_PATH}) diff --git a/ports/numactl/CONTROL b/ports/numactl/CONTROL new file mode 100644 index 00000000000000..4c5c03687e98e1 --- /dev/null +++ b/ports/numactl/CONTROL @@ -0,0 +1,3 @@ +Source: numactl +Version: 2.0.12 +Description: NUMA support for Linux diff --git a/ports/numactl/portfile.cmake b/ports/numactl/portfile.cmake new file mode 100644 index 00000000000000..3319d282f72d7b --- /dev/null +++ b/ports/numactl/portfile.cmake @@ -0,0 +1,73 @@ +include(vcpkg_common_functions) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO numactl/numactl + REF v2.0.12 + SHA512 3814efd924d1c9152a30f6ae5b665afc20648226cd475d72b933c0ec4f30249af4e25110de17f144734b787ed765644dca09a657219806ab5c9c550abd45bf8e + HEAD_REF master +) + +if(NOT VCPKG_CMAKE_SYSTEM_NAME STREQUAL "Linux") + message(FATAL_ERROR "Package only supports linux platform.") +endif() + +message( +"numactl currently requires the following libraries from the system package manager: + autoconf libtool +These can be installed on Ubuntu systems via sudo apt install autoconf libtool" +) + +if(VCPKG_LIBRARY_LINKAGE STREQUAL "static") + set(SHARED_STATIC --enable-static --disable-shared) +else() + set(SHARED_STATIC --disable-static --enable-shared) +endif() + +set(OPTIONS ${SHARED_STATIC}) +vcpkg_execute_required_process( + COMMAND ${SOURCE_PATH}/autogen.sh + WORKING_DIRECTORY ${SOURCE_PATH} + LOGNAME setup-${TARGET_TRIPLET} +) + +file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg) +file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg) +message(STATUS "Configuring ${TARGET_TRIPLET}-dbg") +set(CFLAGS "${VCPKG_C_FLAGS} ${VCPKG_C_FLAGS_DEBUG} -fPIC -O0 -g -I${SOURCE_PATH}/include") +set(LDFLAGS "${VCPKG_LINKER_FLAGS}") +vcpkg_execute_required_process( + COMMAND ${SOURCE_PATH}/configure --prefix=${CURRENT_PACKAGES_DIR}/debug ${OPTIONS} --with-sysroot=${CURRENT_INSTALLED_DIR}/debug + WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg + LOGNAME configure-${TARGET_TRIPLET}-dbg +) +message(STATUS "Building ${TARGET_TRIPLET}-dbg") +vcpkg_execute_required_process( + COMMAND make -j install "CFLAGS=${CFLAGS}" "LDFLAGS=${LDFLAGS}" + WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-dbg + LOGNAME install-${TARGET_TRIPLET}-dbg +) + +file(REMOVE_RECURSE ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel) +file(MAKE_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel) +message(STATUS "Configuring ${TARGET_TRIPLET}-rel") +set(CFLAGS "${VCPKG_C_FLAGS} ${VCPKG_C_FLAGS_RELEASE} -fPIC -O3 -I${SOURCE_PATH}/include") +set(LDFLAGS "${VCPKG_LINKER_FLAGS}") +vcpkg_execute_required_process( + COMMAND ${SOURCE_PATH}/configure --prefix=${CURRENT_PACKAGES_DIR} ${OPTIONS} --with-sysroot=${CURRENT_INSTALLED_DIR} + WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel + LOGNAME configure-${TARGET_TRIPLET}-rel +) +message(STATUS "Building ${TARGET_TRIPLET}-rel") +vcpkg_execute_required_process( + COMMAND make -j install "CFLAGS=${CFLAGS}" "LDFLAGS=${LDFLAGS}" + WORKING_DIRECTORY ${CURRENT_BUILDTREES_DIR}/${TARGET_TRIPLET}-rel + LOGNAME install-${TARGET_TRIPLET}-rel +) + +if(VCPKG_LIBRARY_LINKAGE STREQUAL static) + file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/bin ${CURRENT_PACKAGES_DIR}/debug/bin) +endif() + +file(REMOVE_RECURSE ${CURRENT_PACKAGES_DIR}/debug/include ${CURRENT_PACKAGES_DIR}/debug/share) +configure_file(${SOURCE_PATH}/README.md ${CURRENT_PACKAGES_DIR}/share/numactl/copyright COPYONLY) diff --git a/ports/raylib/CONTROL b/ports/raylib/CONTROL new file mode 100644 index 00000000000000..3be7c5eac42d4e --- /dev/null +++ b/ports/raylib/CONTROL @@ -0,0 +1,7 @@ +Source: raylib +Version: 2019-04-27-2 +Description: A simple and easy-to-use library to enjoy videogames programming +#Build-Depends: glfw3 + +Feature: non-audio +Description: Build raylib without audio module diff --git a/ports/raylib/portfile.cmake b/ports/raylib/portfile.cmake new file mode 100644 index 00000000000000..82c79a44c801af --- /dev/null +++ b/ports/raylib/portfile.cmake @@ -0,0 +1,89 @@ +# https://github.com/raysan5/raylib/issues/388 +if(TARGET_TRIPLET MATCHES "^arm" OR TARGET_TRIPLET MATCHES "uwp$") + message(FATAL_ERROR "raylib doesn't support ARM or UWP.") +endif() + +if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" OR CMAKE_SYSTEM_NAME STREQUAL "Linux") + message( + "raylib currently requires the following libraries from the system package manager: + libgl1-mesa-dev + libx11-dev + libxcursor-dev + libxinerama-dev + libxrandr-dev +These can be installed on Ubuntu systems via sudo apt install libgl1-mesa-dev libx11-dev libxcursor-dev libxinerama-dev libxrandr-dev" + ) +endif() + +include(vcpkg_common_functions) + +vcpkg_from_github( + OUT_SOURCE_PATH SOURCE_PATH + REPO raysan5/raylib + REF f37e55a77bd6177dbaea4d7f484961c09104e104 + SHA512 57146ebc7ab22a4e60c1d9eecd4c7a8f1930d6709f45761af809da9ea4f161e9fd450fa1042252a80bd7952ed9571a5d8dee4d454c8903a778e3e1328300b2bd + HEAD_REF master +) + +string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "dynamic" SHARED) +string(COMPARE EQUAL "${VCPKG_LIBRARY_LINKAGE}" "static" STATIC) + +if("non-audio" IN_LIST FEATURES) + set(USE_AUDIO OFF) +else() + set(USE_AUDIO ON) +endif() + +vcpkg_configure_cmake( + SOURCE_PATH ${SOURCE_PATH} + PREFER_NINJA + OPTIONS + -DBUILD_EXAMPLES=OFF + -DBUILD_GAMES=OFF + -DSHARED=${SHARED} + -DSTATIC=${STATIC} + -DUSE_AUDIO=${USE_AUDIO} + -DUSE_EXTERNAL_GLFW=OFF # externl glfw3 causes build errors on Windows + OPTIONS_DEBUG + -DENABLE_ASAN=ON + -DENABLE_UBSAN=ON + -DENABLE_MSAN=OFF + OPTIONS_RELEASE + -DENABLE_ASAN=OFF + -DENABLE_UBSAN=OFF + -DENABLE_MSAN=OFF +) + +vcpkg_install_cmake() + +vcpkg_copy_pdbs() + +vcpkg_fixup_cmake_targets(CONFIG_PATH lib/cmake/${PORT}) + +configure_file( + ${CMAKE_CURRENT_LIST_DIR}/vcpkg-cmake-wrapper.cmake + ${CURRENT_PACKAGES_DIR}/share/${PORT}/vcpkg-cmake-wrapper.cmake + @ONLY +) + +file(REMOVE_RECURSE + ${CURRENT_PACKAGES_DIR}/debug/include + ${CURRENT_PACKAGES_DIR}/debug/share +) + +if(VCPKG_LIBRARY_LINKAGE STREQUAL dynamic) + vcpkg_replace_string( + ${CURRENT_PACKAGES_DIR}/include/raylib.h + "defined(USE_LIBTYPE_SHARED)" + "1 // defined(USE_LIBTYPE_SHARED)" + ) +endif() + +# Install usage +configure_file(${CMAKE_CURRENT_LIST_DIR}/usage ${CURRENT_PACKAGES_DIR}/share/${PORT}/usage @ONLY) + +# Handle copyright +configure_file(${SOURCE_PATH}/LICENSE.md ${CURRENT_PACKAGES_DIR}/share/${PORT}/copyright COPYONLY) + +# CMake integration test +#vcpkg_test_cmake(PACKAGE_NAME ${PORT}) diff --git a/ports/raylib/usage b/ports/raylib/usage new file mode 100644 index 00000000000000..936b74f502a845 --- /dev/null +++ b/ports/raylib/usage @@ -0,0 +1,5 @@ +The package @PORT@:@TARGET_TRIPLET@ provides CMake targets: + + find_package(@PORT@ CONFIG REQUIRED) + target_include_directories(main PRIVATE ${raylib_INCLUDE_DIRS}) + target_link_libraries(main PRIVATE ${raylib_LIBRARIES}) diff --git a/ports/raylib/vcpkg-cmake-wrapper.cmake b/ports/raylib/vcpkg-cmake-wrapper.cmake new file mode 100644 index 00000000000000..1efda7c9e58240 --- /dev/null +++ b/ports/raylib/vcpkg-cmake-wrapper.cmake @@ -0,0 +1,14 @@ +set(raylib_USE_STATIC_LIBS @STATIC@) + +_find_package(${ARGS}) + +if(raylib_FOUND) + get_filename_component(_raylib_lib_name ${raylib_LIBRARY} NAME) + + set(raylib_LIBRARY + debug ${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/debug/lib/${_raylib_lib_name} + optimized ${_VCPKG_INSTALLED_DIR}/${VCPKG_TARGET_TRIPLET}/lib/${_raylib_lib_name} + ) + + set(raylib_LIBRARIES ${raylib_LIBRARY}) +endif()