include (CheckCXXSourceCompiles)

if(MSVC OR (WIN32 AND "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel"))
    check_cxx_source_compiles("int main() { __asm { pxor mm0, mm0 }; }" HAVE_X86_MMX)
    check_cxx_source_compiles("int main() { __asm { xorps xmm0, xmm0 }; }" HAVE_X86_SSE)
    check_cxx_source_compiles("int main() { __asm { xorpd xmm0, xmm0 }; }" HAVE_X86_SSE2)
    check_cxx_source_compiles("int main() { __asm { femms }; }" HAVE_X86_3DNOW)
else()
    check_cxx_source_compiles("	    #ifdef __SUNPRO_CC
                                            #define __asm__ asm
                                    #endif
                    int main() { __asm__(\"pxor %mm0, %mm0\") ; }" HAVE_X86_MMX)
    check_cxx_source_compiles("     #ifdef __SUNPRO_CC
                                            #define __asm__ asm
                                    #endif
                    int main() { __asm__(\"xorps %xmm0, %xmm0\"); }" HAVE_X86_SSE)
    check_cxx_source_compiles("     #ifdef __SUNPRO_CC
                                            #define __asm__ asm
                                    #endif
                    int main() { __asm__(\"xorpd %xmm0, %xmm0\"); }" HAVE_X86_SSE2)
    check_cxx_source_compiles("     #ifdef __SUNPRO_CC
                                            #define __asm__ asm
                                    #endif
                    int main() { __asm__(\"femms\"); }" HAVE_X86_3DNOW)
endif()
check_cxx_source_compiles("     #ifdef __SUNPRO_CC
                                        #define __asm__ asm
                                #endif
				int main() { __asm__(\"mtspr 256, %0; vand %%v0, %%v0, %%v0\" : : \"r\"(-1) ); }" HAVE_PPC_ALTIVEC)

configure_file(config-processor.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-processor.h )



########### next target ###############

file(MAKE_DIRECTORY
   ${CMAKE_CURRENT_BINARY_DIR}/backends/fakehw
   ${CMAKE_CURRENT_BINARY_DIR}/backends/hal
   ${CMAKE_CURRENT_BINARY_DIR}/backends/udev
   ${CMAKE_CURRENT_BINARY_DIR}/backends/wmi
   ${CMAKE_CURRENT_BINARY_DIR}/backends/win
)

if(WIN32)
    add_definitions(-DYY_NO_UNISTD_H)
endif()

if(WIN32)
   set(solid_LIB_SRCS networking_win.cpp)
else()
   set(solid_LIB_SRCS networking.cpp)
endif()

set(solid_LIB_SRCS
   ${solid_LIB_SRCS}
   solidnamespace.cpp
   managerbase.cpp
   device.cpp
   devicemanager.cpp
   deviceinterface.cpp
   genericinterface.cpp
   processor.cpp
   block.cpp
   storagedrive.cpp
   opticaldrive.cpp
   storagevolume.cpp
   opticaldisc.cpp
   storageaccess.cpp
   camera.cpp
   portablemediaplayer.cpp
   networkinterface.cpp
   networkshare.cpp
   serialinterface.cpp
   acadapter.cpp
   battery.cpp
   button.cpp
   keyboard.cpp
   pointingdevice.cpp
   audiointerface.cpp
   dvbinterface.cpp
   predicate.cpp
   predicateparse.cpp
   predicate_lexer.c
   predicate_parser.c
   powermanagement.cpp
   video.cpp
   smartcardreader.cpp
   internetgateway.cpp

   ifaces/acadapter.cpp
   ifaces/audiointerface.cpp
   ifaces/battery.cpp
   ifaces/block.cpp
   ifaces/button.cpp
   ifaces/keyboard.cpp
   ifaces/pointingdevice.cpp
   ifaces/camera.cpp
   ifaces/opticaldrive.cpp
   ifaces/device.cpp
   ifaces/deviceinterface.cpp
   ifaces/devicemanager.cpp
   ifaces/dvbinterface.cpp
   ifaces/genericinterface.cpp
   ifaces/networkinterface.cpp
   ifaces/networkshare.cpp
   ifaces/serialinterface.cpp
   ifaces/opticaldisc.cpp
   ifaces/portablemediaplayer.cpp
   ifaces/processor.cpp
   ifaces/storagedrive.cpp
   ifaces/storagevolume.cpp
   ifaces/storageaccess.cpp
   ifaces/video.cpp
   ifaces/smartcardreader.cpp
   ifaces/internetgateway.cpp

   backends/fakehw/fakeacadapter.cpp
   backends/fakehw/fakeaudiointerface.cpp
   backends/fakehw/fakebattery.cpp
   backends/fakehw/fakeblock.cpp
   backends/fakehw/fakebutton.cpp
   backends/fakehw/fakekeyboard.cpp
   backends/fakehw/fakepointingdevice.cpp
   backends/fakehw/fakecamera.cpp
   backends/fakehw/fakecdrom.cpp
   backends/fakehw/fakedevice.cpp
   backends/fakehw/fakedeviceinterface.cpp
   backends/fakehw/fakedvbinterface.cpp
   backends/fakehw/fakegenericinterface.cpp
   backends/fakehw/fakemanager.cpp
   backends/fakehw/fakenetworkshare.cpp
   backends/fakehw/fakenetworkinterface.cpp
   backends/fakehw/fakeopticaldisc.cpp
   backends/fakehw/fakeportablemediaplayer.cpp
   backends/fakehw/fakeprocessor.cpp
   backends/fakehw/fakestorage.cpp
   backends/fakehw/fakestorageaccess.cpp
   backends/fakehw/fakevideo.cpp
   backends/fakehw/fakevolume.cpp
   backends/fakehw/fakesmartcardreader.cpp

   backends/shared/rootdevice.cpp
   backends/shared/cpufeatures.cpp
)

if(NOT APPLE)
  set(HUPNP_ENABLED FALSE CACHE BOOL "explicitly enable the compilation of the hupnp backend")
  if (HUPNP_ENABLED AND HUPNP_FOUND AND ((HUPNP_VERSION_MAJOR EQUAL 0 AND HUPNP_VERSION_MINOR EQUAL 9) OR (HUPNP_VERSION_MAJOR EQUAL 1)))
    include_directories( ${HUPNP_INCLUDE_DIR} )
    message(STATUS "Building Solid UPnP backend." )
    set(solid_LIB_SRCS ${solid_LIB_SRCS}
       backends/upnp/upnpdevice.cpp
       backends/upnp/upnpdevicemanager.cpp
       backends/upnp/upnpdeviceinterface.cpp
       backends/upnp/upnpmediaserver.cpp
       backends/upnp/upnpinternetgateway.cpp
       backends/upnp/upnpcontrolpoint.cpp
    )
  else ()
    if(NOT HUPNP_ENABLED)
        message(STATUS "To have UPnP support, explicitly enable HUPNP_ENABLED in the cmake cache")
    endif()
    set(HUPNP_FOUND false)
  endif ()
endif()

if(NOT WIN32 AND NOT APPLE)
#   message(STATUS "Building Solid KUPnP backend." )
#   set(solid_LIB_SRCS ${solid_LIB_SRCS}

#   backends/kupnp/cagibidbuscodec.cpp
#   backends/kupnp/cagibidevice.cpp
#   backends/kupnp/kupnpstorageaccess.cpp
#   backends/kupnp/kupnpdeviceinterface.cpp
#   backends/kupnp/mediaserver1.cpp
#   backends/kupnp/mediaserver2.cpp
#   backends/kupnp/mediaserver3.cpp
#   backends/kupnp/internetgatewaydevice1.cpp
#   backends/kupnp/kupnpdevice.cpp
#   backends/kupnp/kupnprootdevice.cpp
#   backends/kupnp/kupnpmanager.cpp

#   )

   if ( UDEV_FOUND )
      message(STATUS "Building Solid UDev backend." )
      set(solid_LIB_SRCS ${solid_LIB_SRCS}
      backends/udev/utils.cpp
      backends/udev/udevdevice.cpp
      backends/udev/udevmanager.cpp
      backends/udev/udevdeviceinterface.cpp
      backends/udev/udevgenericinterface.cpp
      backends/udev/cpuinfo.cpp
      backends/udev/udevprocessor.cpp
      backends/udev/udevcamera.cpp
      backends/udev/udevvideo.cpp
      backends/udev/udevaudiointerface.cpp
      backends/udev/udevnetworkinterface.cpp
      backends/udev/udevserialinterface.cpp
      backends/udev/udevaudiointerface_p.cpp
      backends/udev/udevportablemediaplayer.cpp
      backends/udev/udevdvbinterface.cpp
      backends/udev/udevblock.cpp
      backends/udev/udevbutton.cpp
      backends/udev/udevkeyboard.cpp
      backends/udev/udevpointingdevice.cpp
      backends/shared/udevqtclient.cpp
      backends/shared/udevqtdevice.cpp
      )
      set(UDEV_DETAILED_OUTPUT OFF CACHE BOOL "provide extended output regarding udev events")
      if(UDEV_DETAILED_OUTPUT)
         add_definitions(-DUDEV_DETAILED_OUTPUT)
      endif()

      # check for media-player-info (runtime-only optional dependency)
      find_package(MediaPlayerInfo)
      set_package_properties(MediaPlayerInfo PROPERTIES
         DESCRIPTION "Enables identification and querying of portable media players"
         PURPOSE "Runtime-only dependency of the udev solid backend. Support for m-p-i is included even if not found during build"
         URL "http://www.freedesktop.org/wiki/Software/media-player-info"
         TYPE RUNTIME
      )
   endif()


   message(STATUS "Building Solid HAL backend." )
   set(solid_LIB_SRCS ${solid_LIB_SRCS}
      backends/hal/halacadapter.cpp
      backends/hal/halaudiointerface.cpp
      backends/hal/halbattery.cpp
      backends/hal/halblock.cpp
      backends/hal/halbutton.cpp
      backends/hal/halcamera.cpp
      backends/hal/halcdrom.cpp
      backends/hal/haldeviceinterface.cpp
      backends/hal/haldvbinterface.cpp
      backends/hal/halfstabhandling.cpp
      backends/hal/halgenericinterface.cpp
      backends/hal/haldevice.cpp
      backends/hal/halmanager.cpp
      backends/hal/halnetworkinterface.cpp
      backends/hal/halserialinterface.cpp
      backends/hal/halopticaldisc.cpp
      backends/hal/halportablemediaplayer.cpp
      backends/hal/halprocessor.cpp
      backends/hal/halstorageaccess.cpp
      backends/hal/halstorage.cpp
      backends/hal/halvideo.cpp
      backends/hal/halvolume.cpp
      backends/hal/halsmartcardreader.cpp
   )

   message(STATUS "Building Solid UPower backend." )
   set(solid_LIB_SRCS ${solid_LIB_SRCS}
      backends/upower/upowermanager.cpp
      backends/upower/upowerdevice.cpp
      backends/upower/upowerbattery.cpp
      backends/upower/upoweracadapter.cpp
      backends/upower/upowerdeviceinterface.cpp
      backends/upower/upowergenericinterface.cpp
   )

   # FIXME: this should work on more Unix systems
   if (CMAKE_SYSTEM_NAME MATCHES Linux AND UDEV_FOUND)
       if ( WITH_SOLID_UDISKS2 )
           message(STATUS "Building Solid UDisks2 backend." )
           add_definitions(-DWITH_SOLID_UDISKS2)
           set(solid_LIB_SRCS ${solid_LIB_SRCS}
           backends/udisks2/udisksmanager.cpp
           backends/udisks2/udisksdevice.cpp
           backends/udisks2/udisksdevicebackend.cpp
           backends/udisks2/udisksblock.cpp
           backends/udisks2/udisksstoragevolume.cpp
           backends/udisks2/udisksdeviceinterface.cpp
           backends/udisks2/udisksopticaldisc.cpp
           backends/udisks2/udisksopticaldrive.cpp
           backends/udisks2/udisksstoragedrive.cpp
           backends/udisks2/udisksstorageaccess.cpp
           backends/udisks2/udisksgenericinterface.cpp
           backends/udisks2/dbus/manager.cpp
           )
       else ()
           message(STATUS "Building Solid UDisks backend." )
           set(solid_LIB_SRCS ${solid_LIB_SRCS}
           backends/udisks/udisksmanager.cpp
           backends/udisks/udisksdevice.cpp
           backends/udisks/udisksblock.cpp
           backends/udisks/udisksstoragevolume.cpp
           backends/udisks/udisksdeviceinterface.cpp
           backends/udisks/udisksopticaldisc.cpp
           backends/udisks/udisksopticaldrive.cpp
           backends/udisks/udisksstoragedrive.cpp
           backends/udisks/udisksstorageaccess.cpp
           backends/udisks/udisksgenericinterface.cpp
          )
       endif ()
   endif ()

   message(STATUS "Building Solid fstab backend." )
   set(solid_LIB_SRCS ${solid_LIB_SRCS}
      backends/fstab/fstabmanager.cpp
      backends/fstab/fstabdevice.cpp
      backends/fstab/fstabnetworkshare.cpp
      backends/fstab/fstabstorageaccess.cpp
      backends/fstab/fstabhandling.cpp
      backends/fstab/fstabwatcher.cpp
   )

endif()

include(CheckIncludeFiles)
include(CheckFunctionExists)
include(CheckCXXSourceCompiles)

check_include_files(mntent.h      HAVE_MNTENT_H)
check_include_files(sys/types.h   HAVE_SYS_TYPES_H)
check_include_files(sys/param.h   HAVE_SYS_PARAM_H)
check_include_files("stdio.h;sys/mnttab.h"  HAVE_SYS_MNTTAB_H)
check_include_files("sys/param.h;sys/mount.h"  HAVE_SYS_MOUNT_H)

check_function_exists(getmntinfo HAVE_GETMNTINFO)

check_function_exists(setmntent  HAVE_SETMNTENT)

check_cxx_source_compiles("
  #include <sys/types.h>
  #include <sys/statvfs.h>
  int main(){
    struct statvfs *mntbufp;
    int flags;
    return getmntinfo(&mntbufp, flags);
  }
" GETMNTINFO_USES_STATVFS )

configure_file( config-solid.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config-solid.h )

if(APPLE)
   find_package(IOKit REQUIRED)

   message(STATUS "-- Building Solid IOKit backend." )
   set(solid_LIB_SRCS ${solid_LIB_SRCS}
      backends/iokit/iokitmanager.cpp
      backends/iokit/iokitdevice.cpp
      backends/iokit/cfhelper.cpp
      backends/iokit/iokitdeviceinterface.cpp
      backends/iokit/iokitgenericinterface.cpp
      backends/iokit/iokitprocessor.cpp
      backends/iokit/iokitnetworkinterface.cpp
      backends/iokit/iokitserialinterface.cpp
      backends/iokit/iokitbattery.cpp
   )
endif()

if(WIN32)

    if(WITH_SOLID_WMI)
       include(CheckIncludeFileCXX)
       check_include_file_cxx(wbemidl.h HAVE_WBEM)
       FIND_LIBRARY(WBEM_LIBRARIES NAMES wbemuuid wbemuuidd)
       if(HAVE_WBEM AND WBEM_LIBRARIES)
          set(HAVE_WBEM True)
          message(STATUS "Found wbemuuid library: ${WBEM_LIBRARIES}")
       else()
          set(HAVE_WBEM False)
          set(WITH_SOLID_WMI False)
      endif()
   endif()
   if(WITH_SOLID_WMI)
       add_definitions(-DWITH_SOLID_WMI)
       message(STATUS "-- Building Solid WMI backend." )

       set(solid_LIB_SRCS ${solid_LIB_SRCS}
          backends/wmi/wmiacadapter.cpp
          backends/wmi/wmiaudiointerface.cpp
          backends/wmi/wmibattery.cpp
          backends/wmi/wmiblock.cpp
          backends/wmi/wmibutton.cpp
          backends/wmi/wmicamera.cpp
          backends/wmi/wmicdrom.cpp
          backends/wmi/wmideviceinterface.cpp
          backends/wmi/wmidvbinterface.cpp
          backends/wmi/wmigenericinterface.cpp
          backends/wmi/wmidevice.cpp
          backends/wmi/wmimanager.cpp
          backends/wmi/wminetworkinterface.cpp
          backends/wmi/wmiopticaldisc.cpp
          backends/wmi/wmiportablemediaplayer.cpp
          backends/wmi/wmiprocessor.cpp
          backends/wmi/wmiquery.cpp
          backends/wmi/wmistorageaccess.cpp
          backends/wmi/wmistorage.cpp
          backends/wmi/wmivideo.cpp
          backends/wmi/wmivolume.cpp
       )
    else()
       message(STATUS "-- Building Solid Windows backend." )
       set(solid_LIB_SRCS ${solid_LIB_SRCS}
       backends/win/winblock.cpp
       backends/win/winopticaldrive.cpp
       backends/win/wininterface.cpp
       backends/win/wingenericinterface.cpp
       backends/win/windevice.cpp
       backends/win/windevicemanager.cpp
       backends/win/winopticaldisc.cpp
       backends/win/winprocessor.cpp
       #backends/win/wmiportablemediaplayer.cpp
       backends/win/winstorageaccess.cpp
       backends/win/winstoragedrive.cpp
       backends/win/winstoragevolume.cpp
       backends/win/winbattery.cpp
       backends/win/winacadapter.cpp
       )
    endif()
endif()

set_source_files_properties( org.freedesktop.PowerManagement.xml
                             org.freedesktop.PowerManagement.Inhibit.xml
                             org.kde.Solid.PowerManagement.PolicyAgent.xml
                             PROPERTIES NO_NAMESPACE TRUE)

qt5_add_dbus_interfaces(solid_LIB_SRCS org.freedesktop.PowerManagement.xml
                        org.freedesktop.PowerManagement.Inhibit.xml
                        org.kde.Solid.PowerManagement.PolicyAgent.xml)

qt5_add_dbus_interface(solid_LIB_SRCS org.kde.Solid.Networking.Client.xml
                       org_kde_solid_networking_client)

set(solid_OPTIONAL_LIBS)

if(WIN32)
   set(solid_OPTIONAL_LIBS ${solid_OPTIONAL_LIBS} Qt5::Network)
   if(WITH_SOLID_WMI)
      set(solid_OPTIONAL_LIBS ${solid_OPTIONAL_LIBS} ${WBEM_LIBRARIES})
   else()
      set(solid_OPTIONAL_LIBS ${solid_OPTIONAL_LIBS} setupapi)
   endif()
endif()

if(APPLE)
   set(solid_OPTIONAL_LIBS ${IOKIT_LIBRARY})
endif()

if ( HUPNP_FOUND )
   set(solid_OPTIONAL_LIBS ${solid_OPTIONAL_LIBS} ${HUPNP_LIBS})
endif()

if ( UDEV_FOUND )
   set(solid_OPTIONAL_LIBS ${solid_OPTIONAL_LIBS} ${UDEV_LIBS})
endif ()

add_library(KF5Solid  ${solid_LIB_SRCS})
target_include_directories(KF5Solid PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..;${CMAKE_CURRENT_BINARY_DIR}/..>")
generate_export_header(KF5Solid BASE_NAME Solid)
add_library(KF5::Solid ALIAS KF5Solid)

# Apps must include <Solid/File> or <solid/file.h>
target_include_directories(KF5Solid INTERFACE "$<INSTALL_INTERFACE:${INCLUDE_INSTALL_DIR}>/Solid")

target_link_libraries(KF5Solid PUBLIC Qt5::Core
                               PRIVATE Qt5::DBus
                                       Qt5::Xml
                                       Qt5::Widgets
                                       ${solid_OPTIONAL_LIBS}
 )

set_target_properties(KF5Solid PROPERTIES  VERSION ${SOLID_VERSION_STRING}
                                           SOVERSION ${SOLID_SOVERSION}
                                           EXPORT_NAME Solid
)

ecm_generate_headers(
  Device
  DeviceNotifier
  DeviceInterface
  GenericInterface
  Processor
  Block
  StorageAccess
  StorageDrive
  OpticalDrive
  StorageVolume
  OpticalDisc
  Camera
  PortableMediaPlayer
  PowerManagement
  Networking
  NetworkInterface
  AcAdapter
  Battery
  Button
  AudioInterface
  DvbInterface
  Predicate
  Video
  SerialInterface
  SmartCardReader
  InternetGateway
  NetworkShare
  Keyboard
  PointingDevice

  MODULE_NAME Solid
  REQUIRED_HEADERS Solid_HEADERS
  PREFIX Solid
)
install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/Solid DESTINATION ${INCLUDE_INSTALL_DIR} COMPONENT Devel)

install(TARGETS KF5Solid EXPORT KF5SolidTargets ${INSTALL_TARGETS_DEFAULT_ARGS})

install(FILES org.kde.Solid.Networking.Client.xml
        DESTINATION ${DBUS_INTERFACES_INSTALL_DIR}
        RENAME kf5_org.kde.Solid.Networking.Client.xml)
install(FILES org.kde.Solid.PowerManagement.PolicyAgent.xml
        DESTINATION ${DBUS_INTERFACES_INSTALL_DIR}
        RENAME kf5_org.kde.Solid.PowerManagement.PolicyAgent.xml)
install(FILES org.freedesktop.PowerManagement.xml
        DESTINATION ${DBUS_INTERFACES_INSTALL_DIR}
        RENAME kf5_org.freedesktop.PowerManagement.xml)
install(FILES org.freedesktop.PowerManagement.Inhibit.xml
        DESTINATION ${DBUS_INTERFACES_INSTALL_DIR}
        RENAME kf5_org.freedesktop.PowerManagement.Inhibit.xml)

########### static lib for tests  ###############

add_library(KF5Solid_static STATIC ${solid_LIB_SRCS})
set_target_properties(KF5Solid_static PROPERTIES COMPILE_FLAGS -DSOLID_STATIC_DEFINE=1)

target_link_libraries(KF5Solid_static PUBLIC Qt5::Core)
target_link_libraries(KF5Solid_static PRIVATE Qt5::DBus Qt5::Xml Qt5::Widgets ${solid_OPTIONAL_LIBS})
target_include_directories(KF5Solid_static PUBLIC "$<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/..;${CMAKE_CURRENT_BINARY_DIR}/..>")

########### install files ###############

install(FILES
  ${CMAKE_CURRENT_BINARY_DIR}/solid_export.h
  ${Solid_HEADERS}
  solidnamespace.h
  DESTINATION ${INCLUDE_INSTALL_DIR}/Solid/solid COMPONENT Devel
)

########### parser build ###############

set(lexer_FILE predicate_lexer)
set(parser_FILE predicate_parser)

find_package(FLEX)
set_package_properties(FLEX PROPERTIES DESCRIPTION "Allows the Solid predicate parser to be updated"
                       URL "http://flex.sourceforge.net"
                       TYPE OPTIONAL
                       PURPOSE "Required by the UpdateSolidPredicateParser target (mainly useful for developers)"
                      )

find_package(BISON)
set_package_properties(BISON PROPERTIES
    URL "http://www.gnu.org/software/bison"
    DESCRIPTION "Allows the Solid predicate parser to be updated"
    TYPE OPTIONAL
    PURPOSE "Required by the UpdateSolidPredicateParser target (mainly useful for developers)"
  )

if (FLEX_FOUND AND BISON_FOUND)

   add_custom_target(UpdateSolidPredicateParser
                     COMMAND ${FLEX_EXECUTABLE} -P Solid -o${lexer_FILE}.c ${lexer_FILE}.l
                     COMMAND ${BISON_EXECUTABLE} -p Solid -d -b ${parser_FILE} ${parser_FILE}.y
                     COMMAND ${CMAKE_COMMAND} -E copy ${parser_FILE}.tab.c ${CMAKE_CURRENT_SOURCE_DIR}/${parser_FILE}.c
                     COMMAND ${CMAKE_COMMAND} -E copy ${parser_FILE}.tab.h ${CMAKE_CURRENT_SOURCE_DIR}/${parser_FILE}.h
                     COMMAND ${CMAKE_COMMAND} -E remove ${parser_FILE}.tab.c ${parser_FILE}.tab.h
                     WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR})

else ()
   add_custom_target(UpdateSolidPredicateParser
                     COMMAND echo "flex and/or bison not found, so target UpdateSolidPredicateParser inactive")
endif ()

include(ECMGeneratePriFile)
ecm_generate_pri_file(BASE_NAME Solid LIB_NAME KF5Solid DEPS "core" FILENAME_VAR PRI_FILENAME)
install(FILES ${PRI_FILENAME} DESTINATION ${ECM_MKSPECS_INSTALL_DIR})
