Correct build when nss/nspr do not provide pkg-config files
[evolution.git] / cmake / modules / FindSMIME.cmake
blob25371198255c34acbd98d56af2ec8a6990763357
1 # FindSMIME.cmake
3 # Searches for Mozilla's NSS and NSPR libraries, unless -DENABLE_SMIME=OFF is used
5 # The output is:
6 #    mozilla_nspr - if non-empty, then a pkg-config package name for nspr
7 #    mozilla_nss - if non-empty, then a pkg-config package name for nss
8 #    MANUAL_NSPR_INCLUDES - if non-empty, then contains manual nspr include directory, used for target_include_directories() and similar commands
9 #    MANUAL_NSPR_LIBS - if non-empty, then contains manual nspr libraries, used for target_link_libraries() and similar commands
10 #    MANUAL_NSS_INCLUDES - if non-empty, then contains manual nss include directory, used for target_include_directories() and similar commands
11 #    MANUAL_NSS_LIBS - if non-empty, then contains manual nss libraries, used for target_link_libraries() and similar commands
12 #    MOZILLA_NSS_LIB_DIR - a lib directory where Mozilla stores its libraries
14 include(CheckIncludeFiles)
15 include(CheckCSourceCompiles)
16 include(PrintableOptions)
17 include(PkgConfigEx)
19 add_printable_option(ENABLE_SMIME "Enable SMIME support through Mozilla nss" ON)
20 add_printable_variable_path(WITH_NSPR_INCLUDES "Prefix of Mozilla nspr4 includes" "")
21 add_printable_variable_path(WITH_NSPR_LIBS "Prefix of Mozilla nspr4 libs" "")
22 add_printable_variable_path(WITH_NSS_INCLUDES "Prefix of Mozilla nss3 includes" "")
23 add_printable_variable_path(WITH_NSS_LIBS "Prefix of Mozilla nss3 libs" "")
25 if(NOT ENABLE_SMIME)
26         return()
27 endif(NOT ENABLE_SMIME)
29 set(mozilla_nspr "")
30 set(mozilla_nss "")
31 set(MOZILLA_NSS_LIB_DIR "")
33 # Use pkg-config when none is specified
34 if((WITH_NSPR_INCLUDES STREQUAL "") AND (WITH_NSPR_LIBS STREQUAL "") AND (WITH_NSS_INCLUDES STREQUAL "") AND (WITH_NSS_LIBS STREQUAL ""))
35         foreach(pkg nspr mozilla-nspr firefox-nspr xulrunner-nspr seamonkey-nspr)
36                 pkg_check_exists(_have_pkg ${pkg})
37                 if(_have_pkg)
38                         set(mozilla_nspr ${pkg})
39                         break()
40                 endif(_have_pkg)
41         endforeach(pkg)
43         foreach(pkg nss mozilla-nss firefox-nss xulrunner-nss seamonkey-nss)
44                 pkg_check_exists(_have_pkg ${pkg})
45                 if(_have_pkg)
46                         set(mozilla_nss ${pkg})
47                         break()
48                 endif(_have_pkg)
49         endforeach(pkg)
51         if((NOT (mozilla_nspr STREQUAL "")) AND (NOT (mozilla_nss STREQUAL "")))
52                 pkg_check_variable(_nss_libdir ${mozilla_nss} libdir)
54                 set(MANUAL_NSPR_INCLUDES "")
55                 set(MANUAL_NSPR_LIBS "")
56                 set(MANUAL_NSS_INCLUDES "")
57                 set(MANUAL_NSS_LIBS "")
58                 set(MOZILLA_NSS_LIB_DIR "${_nss_libdir}")
59                 return()
60         endif((NOT (mozilla_nspr STREQUAL "")) AND (NOT (mozilla_nss STREQUAL "")))
61 endif()
63 # Manual search, even when pkg-config failed
65 # ******************
66 # Check for NSPR 4
67 # ******************
69 if(NOT (WITH_NSPR_INCLUDES STREQUAL ""))
70         set(CMAKE_REQUIRED_INCLUDES ${WITH_NSPR_INCLUDES})
71 endif(NOT (WITH_NSPR_INCLUDES STREQUAL ""))
73 unset(_have_headers CACHE)
75 CHECK_INCLUDE_FILES("nspr.h;prio.h" _have_headers)
77 unset(CMAKE_REQUIRED_INCLUDES)
79 if(NOT _have_headers)
80         message(FATAL_ERROR "NSPR headers not found. Use -DWITH_NSPR_INCLUDES=/path/to/nspr to specify the include dir of NSPR.")
81 endif(NOT _have_headers)
83 set(MANUAL_NSPR_INCLUDES "${WITH_NSPR_INCLUDES}")
84 string(STRIP ${MANUAL_NSPR_INCLUDES} MANUAL_NSPR_INCLUDES)
86 set(nsprlibs "-lplc4 -lplds4 -lnspr4")
88 set(CMAKE_REQUIRED_INCLUDES ${MANUAL_NSPR_INCLUDES})
89 set(CMAKE_REQUIRED_LIBRARIES ${nsprlibs})
90 unset(_nsprlibs_okay CACHE)
91 CHECK_C_SOURCE_COMPILES("#include <prinit.h>
92                         int main(void) { PR_Initialized(); return 0; }" _nsprlibs_okay)
93 unset(CMAKE_REQUIRED_INCLUDES)
94 unset(CMAKE_REQUIRED_LIBRARIES)
96 if(NOT _nsprlibs_okay)
97         message(FATAL_ERROR "NSPR libs not found. Use -DWITH_NSPR_LIBS=/path/to/libs to specify the libdir of NSPR")
98 endif(NOT _nsprlibs_okay)
100 set(MANUAL_NSPR_LIBS "")
102 if(NOT (WITH_NSPR_LIBS STREQUAL ""))
103         set(MANUAL_NSPR_LIBS "-L${WITH_NSPR_LIBS}")
104 endif(NOT (WITH_NSPR_LIBS STREQUAL ""))
106 set(MANUAL_NSPR_LIBS "${MANUAL_NSPR_LIBS} ${nsprlibs}")
107 string(STRIP ${MANUAL_NSPR_LIBS} MANUAL_NSPR_LIBS)
109 # *****************
110 # Check for NSS 3
111 # *****************
113 if(NOT (WITH_NSS_INCLUDES STREQUAL ""))
114         set(CMAKE_REQUIRED_INCLUDES ${WITH_NSS_INCLUDES})
115 endif(NOT (WITH_NSS_INCLUDES STREQUAL ""))
117 if(NOT (WITH_NSPR_INCLUDES STREQUAL ""))
118         list(APPEND CMAKE_REQUIRED_INCLUDES ${WITH_NSPR_INCLUDES})
119 endif(NOT (WITH_NSPR_INCLUDES STREQUAL ""))
121 unset(_have_headers CACHE)
123 CHECK_INCLUDE_FILES("nss.h;ssl.h;smime.h" _have_headers)
125 unset(CMAKE_REQUIRED_INCLUDES)
127 if(NOT _have_headers)
128         message(FATAL_ERROR "NSS headers not found. Use -DWITH_NSS_INCLUDES=/path/to/nss to specify the include dir of NSS.")
129 endif(NOT _have_headers)
131 set(MANUAL_NSS_INCLUDES "${WITH_NSS_INCLUDES}")
132 string(STRIP ${MANUAL_NSS_INCLUDES} MANUAL_NSS_INCLUDES)
134 set(nsslibs "-lssl3 -lsmime3 -lnss3")
136 set(CMAKE_REQUIRED_INCLUDES ${MANUAL_NSS_INCLUDES} ${MANUAL_NSPR_INCLUDES})
137 set(CMAKE_REQUIRED_LIBRARIES ${nsslibs} ${nsprlibs})
138 unset(_nsslibs_okay CACHE)
139 CHECK_C_SOURCE_COMPILES("#include <nss.h>
140                         int main(void) { NSS_Init(\"\"); return 0; }" _nsslibs_okay)
141 unset(CMAKE_REQUIRED_INCLUDES)
142 unset(CMAKE_REQUIRED_LIBRARIES)
144 if(NOT _nsslibs_okay)
145         message(FATAL_ERROR "NSS libs not found. Use -DWITH_NSS_LIBS=/path/to/libs to specify the libdir of NSS")
146 endif(NOT _nsslibs_okay)
148 set(MANUAL_NSS_LIBS "")
150 if(NOT (WITH_NSS_LIBS STREQUAL ""))
151         set(MANUAL_NSS_LIBS "-L${WITH_NSS_LIBS}")
152         set(MOZILLA_NSS_LIB_DIR "${WITH_NSS_LIBS}")
153 endif(NOT (WITH_NSS_LIBS STREQUAL ""))
155 set(MANUAL_NSS_LIBS "${MANUAL_NSS_LIBS} ${nsslibs} ${MANUAL_NSPR_LIBS}")
156 string(STRIP ${MANUAL_NSS_LIBS} MANUAL_NSS_LIBS)
158 if(MOZILLA_NSS_LIB_DIR STREQUAL "")
159         set(MOZILLA_NSS_LIB_DIR "${LIB_INSTALL_DIR}")
160 endif(MOZILLA_NSS_LIB_DIR STREQUAL "")