Skip to content

find_package not works in emcmake #13310

@lwyj123

Description

@lwyj123

I am using Cmake for build large project and want to migrate to WebAssembly and the project have some dependencies. When I build the project using my CMakeLists.txt, I just got some errors of find_package

-- Could NOT find PIXMAN, try to set the path to PIXMAN root folder in the system variable PIXMAN (missing: PIXMAN_LIBRARIES PIXMAN_INCLUDE_DIRS) 
-- Could NOT find ZLIB (missing: ZLIB_LIBRARY ZLIB_INCLUDE_DIR) 
CMake Error at /usr/local/Cellar/cmake/3.19.2/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:218 (message):
  Could NOT find PNG (missing: PNG_LIBRARY PNG_PNG_INCLUDE_DIR)
Call Stack (most recent call first):
  /usr/local/Cellar/cmake/3.19.2/share/cmake/Modules/FindPackageHandleStandardArgs.cmake:582 (_FPHSA_FAILURE_MESSAGE)
  /usr/local/Cellar/cmake/3.19.2/share/cmake/Modules/FindPNG.cmake:156 (find_package_handle_standard_args)
  external/cairo/CMakeLists.txt:7 (find_package)

Here is the cairo CMakeLists.txt

project(cairo)
cmake_minimum_required(VERSION 2.9)

set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")

find_package(Pixman REQUIRED)
find_package(PNG REQUIRED)
find_package(ZLIB REQUIRED)
find_package(Freetype)
find_package(Threads)
find_package(Fontconfig)


include(Configure_config.cmake)
include(Configure_features.cmake)
include_directories(${CMAKE_BINARY_DIR})

if(CAIRO_HAS_PTHREAD)
	list(APPEND CAIRO_LIBS -lpthread)
endif()

if (WIN32)
    set(CAIRO_LIBS gdi32 msimg32 user32 winmm)
endif()

include_directories(${PIXMAN_INCLUDE_DIR} ${PNG_INCLUDE_DIR} ${ZLIB_INCLUDE_DIR})
list(APPEND CAIRO_LIBS  ${PIXMAN_LIBRARY} ${PNG_LIBRARY} ${ZLIB_LIBRARY})

if(FONTCONFIG_FOUND)
    list(APPEND CAIRO_LIBS ${FONTCONFIG_LIBRARY})
endif()

if(FREETYPE_FOUND)
    find_package(BZip2)
    include_directories(${FREETYPE_INCLUDE_DIRS})
    include_directories(${BZIP2_INCLUDE_DIR})
    list(APPEND CAIRO_LIBS ${FREETYPE_LIBRARIES} ${BZIP2_LIBRARIES})
endif()

include_directories(src)
add_subdirectory(src)

cmake_policy (SET CMP0072 NEW)

And some cmake file like FindPixman is

# - Try to find PIXMAN
# Once done this will define
#
#  PIXMAN_ROOT_DIR - Set this variable to the root installation of PIXMAN
#  PIXMAN_FOUND - system has PIXMAN
#  PIXMAN_INCLUDE_DIRS - the PIXMAN include directory
#  PIXMAN_LIBRARIES - Link these to use PIXMAN
#
#  Copyright (c) 2008 Joshua L. Blocher <verbalshadow at gmail dot com>
#  Copyright (c) 2011 Ralf Habacker, <ralf dot habacker at freenet dot de>
#  Copyright (c) 2012 Dmitry Baryshnikov <polimax at mail dot ru>
#  Copyright (c) 2015 Mikhail Paulyshka <pavlyshko-m at yandex dot by>
#
# Distributed under the OSI-approved BSD License
#
if (NOT WIN32)
    find_package(PkgConfig)
    if (PKG_CONFIG_FOUND)
        pkg_check_modules(_PIXMAN pixman)
        SET(PIXMAN_VERSION ${_PIXMAN_VERSION})
    endif (PKG_CONFIG_FOUND)
endif (NOT WIN32)

SET(_PIXMAN_ROOT_HINTS
    $ENV{PIXMAN}
    ${CMAKE_FIND_ROOT_PATH}
    ${PIXMAN_ROOT_DIR}
) 

SET(_PIXMAN_ROOT_PATHS
    $ENV{PIXMAN}/src
    /usr
    /usr/local
)

SET(_PIXMAN_ROOT_HINTS_AND_PATHS
    HINTS ${_PIXMAN_ROOT_HINTS}
    PATHS ${_PIXMAN_ROOT_PATHS}
)

FIND_PATH(PIXMAN_INCLUDE_DIR
    NAMES
        "pixman.h"
    HINTS
        ${_PIXMAN_INCLUDEDIR}
        ${_PIXMAN_ROOT_HINTS_AND_PATHS}
    PATH_SUFFIXES
        include
        "include/pixman-1"
)  

FIND_LIBRARY(PIXMAN_LIBRARY
    NAMES
        pixman-1 
        pixman-1d
        pixman-1_static
        pixman-1_staticd 
    HINTS
        ${_PIXMAN_LIBDIR}
        ${_PIXMAN_ROOT_HINTS_AND_PATHS}
    PATH_SUFFIXES
        "lib"
        "local/lib"
) 

SET(PIXMAN_LIBRARIES 
    ${PIXMAN_LIBRARY}
)

SET(PIXMAN_INCLUDE_DIRS
    ${PIXMAN_INCLUDE_DIR}
)

if (NOT PIXMAN_VERSION)
    if (EXISTS "${PIXMAN_INCLUDE_DIRS}/pixman-version.h")
        file(READ "${PIXMAN_INCLUDE_DIRS}/pixman-version.h" PIXMAN_VERSION_CONTENT)

        string(REGEX MATCH "#define +PIXMAN_VERSION_MAJOR +([0-9]+)" _dummy "${PIXMAN_VERSION_CONTENT}")
        set(PIXMAN_VERSION_MAJOR "${CMAKE_MATCH_1}")

        string(REGEX MATCH "#define +PIXMAN_VERSION_MINOR +([0-9]+)" _dummy "${PIXMAN_VERSION_CONTENT}")
        set(PIXMAN_VERSION_MINOR "${CMAKE_MATCH_1}")

        string(REGEX MATCH "#define +PIXMAN_VERSION_MICRO +([0-9]+)" _dummy "${PIXMAN_VERSION_CONTENT}")
        set(PIXMAN_VERSION_MICRO "${CMAKE_MATCH_1}")

        set(PIXMAN_VERSION "${PIXMAN_VERSION_MAJOR}.${PIXMAN_VERSION_MINOR}.${PIXMAN_VERSION_MICRO}")
    endif (EXISTS "${PIXMAN_INCLUDE_DIRS}/pixman-version.h")
endif(NOT PIXMAN_VERSION)

include(FindPackageHandleStandardArgs)
find_package_handle_standard_args(PIXMAN
    REQUIRED_VARS PIXMAN_LIBRARIES PIXMAN_INCLUDE_DIRS
    VERSION_VAR PIXMAN_VERSION
    FAIL_MESSAGE "Could NOT find PIXMAN, try to set the path to PIXMAN root folder in the system variable PIXMAN"
)

MARK_AS_ADVANCED(PIXMAN_CONFIG_INCLUDE_DIR PIXMAN_INCLUDE_DIR PIXMAN_INCLUDE_DIRS PIXMAN_LIBRARY PIXMAN_LIBRARIES)

But It works when I just used cmake to build.

What's the solution for that?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions