1# Copyright (c) 2023 Huawei Device Co., Ltd.
2# Licensed under the Apache License, Version 2.0 (the "License");
3# you may not use this file except in compliance with the License.
4# You may obtain a copy of the License at
5#
6#     http://www.apache.org/licenses/LICENSE-2.0
7#
8# Unless required by applicable law or agreed to in writing, software
9# distributed under the License is distributed on an "AS IS" BASIS,
10# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11# See the License for the specific language governing permissions and
12# limitations under the License.
13
14import("//build/ohos.gni")
15import("./cups.gni")
16
17config_dir = "${target_gen_dir}"
18cups_code_dir = "${target_gen_dir}/cups-2.4.0"
19core_code_dir = "$cups_code_dir/cups/"
20filter_code_dir = "$cups_code_dir/filter"
21backend_code_dir = "$cups_code_dir/backend"
22ppdc_code_dir = "$cups_code_dir/ppdc"
23scheduler_code_dir = "$cups_code_dir/scheduler"
24
25SUBSYSTEM_NAME = "thirdparty"
26PART_NAME = "cups"
27
28cups_generated_sources = [
29  "$core_code_dir/adminutil.c",
30  "$core_code_dir/array.c",
31  "$core_code_dir/auth.c",
32  "$core_code_dir/backchannel.c",
33  "$core_code_dir/backend.c",
34  "$core_code_dir/debug.c",
35  "$core_code_dir/dest-job.c",
36  "$core_code_dir/dest-localization.c",
37  "$core_code_dir/dest-options.c",
38  "$core_code_dir/dest.c",
39  "$core_code_dir/dir.c",
40  "$core_code_dir/encode.c",
41  "$core_code_dir/file.c",
42  "$core_code_dir/getdevices.c",
43  "$core_code_dir/getifaddrs.c",
44  "$core_code_dir/getputfile.c",
45  "$core_code_dir/globals.c",
46  "$core_code_dir/hash.c",
47  "$core_code_dir/http-addr.c",
48  "$core_code_dir/http-addrlist.c",
49  "$core_code_dir/http-support.c",
50  "$core_code_dir/http.c",
51  "$core_code_dir/ipp-file.c",
52  "$core_code_dir/ipp-support.c",
53  "$core_code_dir/ipp-vars.c",
54  "$core_code_dir/ipp.c",
55  "$core_code_dir/langprintf.c",
56  "$core_code_dir/language.c",
57  "$core_code_dir/md5.c",
58  "$core_code_dir/md5passwd.c",
59  "$core_code_dir/notify.c",
60  "$core_code_dir/options.c",
61  "$core_code_dir/ppd-attr.c",
62  "$core_code_dir/ppd-cache.c",
63  "$core_code_dir/ppd-conflicts.c",
64  "$core_code_dir/ppd-custom.c",
65  "$core_code_dir/ppd-emit.c",
66  "$core_code_dir/ppd-localize.c",
67  "$core_code_dir/ppd-mark.c",
68  "$core_code_dir/ppd-page.c",
69  "$core_code_dir/ppd-util.c",
70  "$core_code_dir/ppd.c",
71  "$core_code_dir/pwg-media.c",
72  "$core_code_dir/raster-error.c",
73  "$core_code_dir/raster-interpret.c",
74  "$core_code_dir/raster-stream.c",
75  "$core_code_dir/request.c",
76  "$core_code_dir/sidechannel.c",
77  "$core_code_dir/snmp.c",
78  "$core_code_dir/snprintf.c",
79  "$core_code_dir/string.c",
80  "$core_code_dir/tempfile.c",
81  "$core_code_dir/thread.c",
82  "$core_code_dir/tls-openssl.c",
83  "$core_code_dir/tls.c",
84  "$core_code_dir/transcode.c",
85  "$core_code_dir/usersys.c",
86  "$core_code_dir/util.c",
87]
88
89scheduler_util_generated_sources = [ "$scheduler_code_dir/util.c" ]
90
91cups_deviced_generated_sources = [ "$scheduler_code_dir/cups-deviced.c" ]
92
93cups_driverd_generated_sources = [ "$scheduler_code_dir/cups-driverd.cxx" ]
94
95cups_exec_generated_sources = [ "$scheduler_code_dir/cups-exec.c" ]
96
97cupsd_generated_sources = [
98  "$scheduler_code_dir/auth.c",
99  "$scheduler_code_dir/banners.c",
100  "$scheduler_code_dir/cert.c",
101  "$scheduler_code_dir/classes.c",
102  "$scheduler_code_dir/client.c",
103  "$scheduler_code_dir/colorman.c",
104  "$scheduler_code_dir/conf.c",
105  "$scheduler_code_dir/dirsvc.c",
106  "$scheduler_code_dir/env.c",
107  "$scheduler_code_dir/file.c",
108  "$scheduler_code_dir/ipp.c",
109  "$scheduler_code_dir/job.c",
110  "$scheduler_code_dir/listen.c",
111  "$scheduler_code_dir/log.c",
112  "$scheduler_code_dir/main.c",
113  "$scheduler_code_dir/network.c",
114  "$scheduler_code_dir/policy.c",
115  "$scheduler_code_dir/printers.c",
116  "$scheduler_code_dir/process.c",
117  "$scheduler_code_dir/quotas.c",
118  "$scheduler_code_dir/select.c",
119  "$scheduler_code_dir/server.c",
120  "$scheduler_code_dir/statbuf.c",
121  "$scheduler_code_dir/subscriptions.c",
122  "$scheduler_code_dir/sysman.c",
123]
124
125cupsfilter_generated_sources = [ "$scheduler_code_dir/cupsfilter.c" ]
126
127ipp_generated_sources = [ "$backend_code_dir/ipp.c" ]
128
129usb_generated_sources = [
130  "$backend_code_dir/usb.c",
131  "$backend_code_dir/usb_manager.cxx",
132]
133
134lp_generated_sources = [ "$cups_code_dir/systemv/lp.c" ]
135
136lpadmin_generated_sources = [ "$cups_code_dir/systemv/lpadmin.c" ]
137
138lpinfo_generated_sources = [ "$cups_code_dir/systemv/lpinfo.c" ]
139
140rastertopwg_generated_sources = [ "$filter_code_dir/rastertopwg.c" ]
141
142cupsmime_generated_sources = [
143  "$scheduler_code_dir/filter.c",
144  "$scheduler_code_dir/mime.c",
145  "$scheduler_code_dir/type.c",
146]
147
148cupsimage_generated_sources = [
149  "$core_code_dir/raster-interstub.c",
150  "$core_code_dir/raster-stubs.c",
151]
152
153backend_generated_sources = [
154  "$backend_code_dir/ieee1284.c",
155  "$backend_code_dir/network.c",
156  "$backend_code_dir/runloop.c",
157  "$backend_code_dir/snmp-supplies.c",
158]
159
160cupsppdc_generated_sources = [
161  "$ppdc_code_dir/ppdc-array.cxx",
162  "$ppdc_code_dir/ppdc-attr.cxx",
163  "$ppdc_code_dir/ppdc-catalog.cxx",
164  "$ppdc_code_dir/ppdc-choice.cxx",
165  "$ppdc_code_dir/ppdc-constraint.cxx",
166  "$ppdc_code_dir/ppdc-driver.cxx",
167  "$ppdc_code_dir/ppdc-file.cxx",
168  "$ppdc_code_dir/ppdc-filter.cxx",
169  "$ppdc_code_dir/ppdc-font.cxx",
170  "$ppdc_code_dir/ppdc-group.cxx",
171  "$ppdc_code_dir/ppdc-import.cxx",
172  "$ppdc_code_dir/ppdc-mediasize.cxx",
173  "$ppdc_code_dir/ppdc-message.cxx",
174  "$ppdc_code_dir/ppdc-option.cxx",
175  "$ppdc_code_dir/ppdc-profile.cxx",
176  "$ppdc_code_dir/ppdc-shared.cxx",
177  "$ppdc_code_dir/ppdc-source.cxx",
178  "$ppdc_code_dir/ppdc-string.cxx",
179  "$ppdc_code_dir/ppdc-variable.cxx",
180]
181
182ppdc_generated_sources = [ "$ppdc_code_dir/ppdc.cxx" ]
183
184mime_convs_generated_source = "$cups_code_dir/conf/mime.convs"
185mime_types_generated_source = "$cups_code_dir/conf/mime.types"
186
187action("cups_action") {
188  print("cups_action is exec")
189  script = "//third_party/cups/install.py"
190  outputs = []
191  outputs += cups_generated_sources
192  outputs += cups_deviced_generated_sources
193  outputs += cups_driverd_generated_sources
194  outputs += cups_exec_generated_sources
195  outputs += cupsd_generated_sources
196  outputs += cupsfilter_generated_sources
197  outputs += ipp_generated_sources
198  outputs += usb_generated_sources
199  outputs += lp_generated_sources
200  outputs += lpadmin_generated_sources
201  outputs += lpinfo_generated_sources
202  outputs += rastertopwg_generated_sources
203  outputs += cupsmime_generated_sources
204  outputs += cupsimage_generated_sources
205  outputs += backend_generated_sources
206  outputs += cupsppdc_generated_sources
207  outputs += ppdc_generated_sources
208  outputs += scheduler_util_generated_sources
209  outputs += [ mime_convs_generated_source ]
210  outputs += [ mime_types_generated_source ]
211
212  inputs = [ "//third_party/cups/cups-2.4.0-source.tar.gz" ]
213  cups_path = rebase_path("${target_gen_dir}", root_build_dir)
214  cups_source_path = rebase_path("//third_party/cups", root_build_dir)
215  args = [
216    "--gen-dir",
217    "$cups_path",
218    "--source-dir",
219    "$cups_source_path",
220  ]
221}
222
223group("third_party_cups") {
224  public_deps = [ ":cups" ]
225  deps = [
226    ":cups-deviced",
227    ":cups-driverd",
228    ":cups-exec",
229    ":cupsd",
230    ":cupsfilter",
231    ":cupsimage",
232    ":ipp",
233    ":mime.convs",
234    ":mime.types",
235    ":rastertopwg",
236    ":usb",
237  ]
238}
239
240config("cups_config") {
241  defines = cups_defines
242  include_dirs = [
243    "$config_dir",
244    "$cups_code_dir",
245    "$core_code_dir",
246    "//third_party/libusb",
247    "//third_party/openssl/include",
248    get_label_info(":cups_action", "target_gen_dir") + "/cups-2.4.0",
249  ]
250
251  cflags = [
252    "-Wno-unused-function",
253    "-Wno-unused-value",
254    "-Wno-implicit-function-declaration",
255    "-Wno-int-conversion",
256    "-D_FORTIFY_SOURCE=2",
257    "-fstack-protector-all",
258    "-fdata-sections",
259    "-ffunction-sections",
260    "-fno-asynchronous-unwind-tables",
261    "-fno-unwind-tables",
262    "-Os",
263  ]
264}
265
266ohos_shared_library("cups") {
267  sources = cups_generated_sources
268  sources += cupsimage_generated_sources
269  deps = [
270    ":cups_action",
271    "//third_party/openssl:libcrypto_shared",
272    "//third_party/openssl:libssl_shared",
273    "//third_party/zlib:libz",
274  ]
275  public_configs = [ ":cups_config" ]
276  subsystem_name = "$SUBSYSTEM_NAME"
277  part_name = "$PART_NAME"
278}
279
280ohos_shared_library("cupsimage") {
281  sources = cupsimage_generated_sources
282  deps = [
283    ":cups_action",
284    "//third_party/cups:cups",
285  ]
286  public_configs = [ ":cups_config" ]
287  subsystem_name = "$SUBSYSTEM_NAME"
288  part_name = "$PART_NAME"
289}
290
291ohos_executable("rastertopwg") {
292  sources = rastertopwg_generated_sources
293  deps = [
294    ":cups_action",
295    "//third_party/cups:cups",
296  ]
297  install_enable = true
298  module_install_dir = "$cups_serverbin_dir/filter"
299  public_configs = [ ":cups_config" ]
300  subsystem_name = "$SUBSYSTEM_NAME"
301  part_name = "$PART_NAME"
302}
303
304ohos_shared_library("backend") {
305  sources = backend_generated_sources
306  deps = [
307    ":cups_action",
308    "//third_party/cups:cups",
309  ]
310  public_configs = [ ":cups_config" ]
311  subsystem_name = "$SUBSYSTEM_NAME"
312  part_name = "$PART_NAME"
313}
314
315ohos_executable("ipp") {
316  sources = ipp_generated_sources
317  deps = [
318    ":cups_action",
319    "//third_party/cups:backend",
320    "//third_party/cups:cups",
321  ]
322  install_enable = true
323  module_install_dir = "$cups_serverbin_dir/backend"
324  public_configs = [ ":cups_config" ]
325  subsystem_name = "$SUBSYSTEM_NAME"
326  part_name = "$PART_NAME"
327}
328
329ohos_executable("usb") {
330  sources = usb_generated_sources
331  deps = [
332    ":cups_action",
333    "//third_party/cups:backend",
334    "//third_party/cups:cups",
335    "//third_party/libusb:libusb",
336  ]
337  external_deps = [
338    "c_utils:utils",
339    "drivers_interface_usb:libusb_proxy_1.0",
340    "hilog:libhilog",
341    "usb_manager:usbsrv_client",
342  ]
343  install_enable = true
344  module_install_dir = "$cups_serverbin_dir/backend"
345  public_configs = [ ":cups_config" ]
346  subsystem_name = "$SUBSYSTEM_NAME"
347  part_name = "$PART_NAME"
348}
349
350#end of backend
351
352ohos_executable("lpadmin") {
353  sources = lpadmin_generated_sources
354  deps = [
355    ":cups_action",
356    "//third_party/cups:cups",
357  ]
358  install_enable = true
359  public_configs = [ ":cups_config" ]
360  subsystem_name = "$SUBSYSTEM_NAME"
361  part_name = "$PART_NAME"
362}
363
364ohos_executable("lpinfo") {
365  sources = lpinfo_generated_sources
366  deps = [
367    ":cups_action",
368    "//third_party/cups:cups",
369  ]
370  install_enable = true
371  public_configs = [ ":cups_config" ]
372  subsystem_name = "$SUBSYSTEM_NAME"
373  part_name = "$PART_NAME"
374}
375
376ohos_executable("lp") {
377  sources = lp_generated_sources
378  deps = [
379    ":cups_action",
380    "//third_party/cups:cups",
381  ]
382  install_enable = true
383  public_configs = [ ":cups_config" ]
384  subsystem_name = "$SUBSYSTEM_NAME"
385  part_name = "$PART_NAME"
386}
387
388#ppdc
389ohos_shared_library("cupsppdc") {
390  sources = cupsppdc_generated_sources
391  deps = [
392    ":cups_action",
393    "//third_party/cups:cups",
394  ]
395  public_configs = [ ":cups_config" ]
396  subsystem_name = "$SUBSYSTEM_NAME"
397  part_name = "$PART_NAME"
398}
399
400ohos_executable("ppdc") {
401  sources = ppdc_generated_sources
402  deps = [
403    ":cups_action",
404    "//third_party/cups:cups",
405    "//third_party/cups:cupsppdc",
406  ]
407  install_enable = true
408  public_configs = [ ":cups_config" ]
409  subsystem_name = "$SUBSYSTEM_NAME"
410  part_name = "$PART_NAME"
411}
412
413#end of ppdc
414
415#scheduler
416ohos_shared_library("cupsmime") {
417  sources = cupsmime_generated_sources
418  deps = [
419    ":cups_action",
420    "//third_party/cups:cups",
421  ]
422  public_configs = [ ":cups_config" ]
423  subsystem_name = "$SUBSYSTEM_NAME"
424  part_name = "$PART_NAME"
425}
426
427ohos_executable("cupsd") {
428  sources = cupsd_generated_sources
429  deps = [
430    ":cups_action",
431    "//third_party/cups:cups",
432    "//third_party/cups:cupsmime",
433  ]
434  install_enable = true
435  public_configs = [ ":cups_config" ]
436  subsystem_name = "$SUBSYSTEM_NAME"
437  part_name = "$PART_NAME"
438}
439
440ohos_executable("cupsfilter") {
441  sources = cupsfilter_generated_sources
442  deps = [
443    ":cups_action",
444    "//third_party/cups:cups",
445    "//third_party/cups:cupsmime",
446  ]
447  install_enable = true
448  public_configs = [ ":cups_config" ]
449  subsystem_name = "$SUBSYSTEM_NAME"
450  part_name = "$PART_NAME"
451}
452
453ohos_executable("cups-deviced") {
454  sources = cups_deviced_generated_sources
455  sources += scheduler_util_generated_sources
456  deps = [
457    ":cups_action",
458    "//third_party/cups:cups",
459    "//third_party/cups:cupsmime",
460  ]
461  install_enable = true
462  module_install_dir = "$cups_serverbin_dir/daemon"
463  public_configs = [ ":cups_config" ]
464  subsystem_name = "$SUBSYSTEM_NAME"
465  part_name = "$PART_NAME"
466}
467
468ohos_executable("cups-driverd") {
469  sources = cups_driverd_generated_sources
470  sources += scheduler_util_generated_sources
471  deps = [
472    ":cups_action",
473    "//third_party/cups:cups",
474    "//third_party/cups:cupsppdc",
475  ]
476  install_enable = true
477  module_install_dir = "$cups_serverbin_dir/daemon"
478  public_configs = [ ":cups_config" ]
479  subsystem_name = "$SUBSYSTEM_NAME"
480  part_name = "$PART_NAME"
481}
482
483ohos_executable("cups-exec") {
484  sources = cups_exec_generated_sources
485  deps = [ ":cups_action" ]
486  install_enable = true
487  module_install_dir = "$cups_serverbin_dir/daemon"
488  public_configs = [ ":cups_config" ]
489  subsystem_name = "$SUBSYSTEM_NAME"
490  part_name = "$PART_NAME"
491}
492
493ohos_prebuilt_etc("mime.convs") {
494  source = mime_convs_generated_source
495  deps = [ ":cups_action" ]
496  relative_install_dir = "cups/share/mime"
497  subsystem_name = "$SUBSYSTEM_NAME"
498  part_name = "$PART_NAME"
499}
500
501ohos_prebuilt_etc("mime.types") {
502  source = mime_types_generated_source
503  deps = [ ":cups_action" ]
504  relative_install_dir = "cups/share/mime"
505  subsystem_name = "$SUBSYSTEM_NAME"
506  part_name = "$PART_NAME"
507}
508