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(Solid_CamelCase_HEADERS
  HEADER_NAMES
  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

  REQUIRED_HEADERS Solid_HEADERS
  PREFIX Solid
)
install(FILES ${Solid_CamelCase_HEADERS} DESTINATION ${INCLUDE_INSTALL_DIR}/Solid/Solid 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})
