VirtualBox

source: vbox/trunk/src/VBox/Runtime/testcase/Makefile.kmk@ 32970

Last change on this file since 32970 was 32949, checked in by vboxsync, 14 years ago

tstSemEvent -> tstRTSemEventMulti; removed tstSems.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 13.1 KB
Line 
1# $Id: Makefile.kmk 32949 2010-10-06 14:39:02Z vboxsync $
2## @file
3# Sub-Makefile for the IPRT testcases.
4#
5
6#
7# Copyright (C) 2006-2010 Oracle Corporation
8#
9# This file is part of VirtualBox Open Source Edition (OSE), as
10# available from http://www.virtualbox.org. This file is free software;
11# you can redistribute it and/or modify it under the terms of the GNU
12# General Public License (GPL) as published by the Free Software
13# Foundation, in version 2 as it comes in the "COPYING" file of the
14# VirtualBox OSE distribution. VirtualBox OSE is distributed in the
15# hope that it will be useful, but WITHOUT ANY WARRANTY of any kind.
16#
17# The contents of this file may alternatively be used under the terms
18# of the Common Development and Distribution License Version 1.0
19# (CDDL) only, as it comes in the "COPYING.CDDL" file of the
20# VirtualBox OSE distribution, in which case the provisions of the
21# CDDL are applicable instead of those of the GPL.
22#
23# You may elect to license modified versions of this file under the
24# terms and conditions of either the GPL or the CDDL or both.
25#
26
27SUB_DEPTH = ../../../..
28include $(KBUILD_PATH)/subheader.kmk
29
30ifdef VBOX_WITH_TESTCASES
31
32#
33# Globals
34#
35# WARNING: Careful with this wrt to the other sub-makefiles this joins.
36#
37TEMPLATE = VBOXR3TSTEXE
38
39# Defined by the parent makefile as well (for errmsgdata.h).
40IPRT_OUT_DIR ?= $(PATH_TARGET)/Runtime
41
42
43#
44# Target lists
45#
46PROGRAMS += \
47 tstRTAssertCompile \
48 tstRTAvl \
49 tstRTBase64 \
50 tstRTBitOperations \
51 tstRTCidr \
52 tstRTCritSect \
53 tstRTDigest \
54 tstDir \
55 tstDir-2 \
56 tstDir-3 \
57 tstEnv \
58 tstErrUnique \
59 tstFile \
60 tstRTFileAio \
61 tstRTFileAppend-1 \
62 tstFileLock \
63 tstFork \
64 tstRTGetOpt \
65 tstRTGetOptArgv \
66 tstHandleTable \
67 tstRTHeapOffset \
68 tstRTHeapSimple \
69 tstInlineAsm \
70 tstLdr \
71 tstLdrLoad \
72 tstRTList \
73 tstRTLockValidator \
74 tstLog \
75 tstMemAutoPtr \
76 tstRTMemEf \
77 tstRTMemCache \
78 tstRTMemPool \
79 tstMove \
80 tstMp-1 \
81 tstOnce \
82 tstRTPath \
83 tstRTPipe \
84 tstRTPoll \
85 tstRTPrfIO \
86 tstRTProcCreateEx \
87 tstPrfRT \
88 tstRand \
89 tstRTFsQueries \
90 tstRTSemEventMulti \
91 tstSemMutex \
92 tstSemPingPong \
93 tstRTSemRW \
94 tstRTSemXRoads \
95 tstRTSort \
96 tstRTStrAlloc \
97 tstRTStrCache \
98 tstRTStrFormat \
99 tstStrSimplePattern \
100 tstStrToNum \
101 tstRTStrVersion \
102 tstRTSystemQueryDmi \
103 tstRTSystemQueryOsInfo \
104 tstRTTcp-1 \
105 tstRTTemp \
106 tstTermCallbacks \
107 tstThread-1 \
108 tstTime \
109 tstTime-2 \
110 tstTime-3 \
111 tstTime-4 \
112 tstTimer \
113 tstTimerLR \
114 tstRTTimeSpec \
115 tstUtf8 \
116 tstRTUuid
117
118PROGRAMS.win += \
119 tstRTProcWait \
120 tstRTCritSectW32 \
121 tstFileAppendWin-1 \
122 ntGetTimerResolution
123PROGRAMS.linux += \
124 tstRTProcWait \
125 tstRTProcIsRunningByName \
126 tstRTBitOperationsPIC3 \
127 tstInlineAsmPIC \
128 tstInlineAsmPIC3
129PROGRAMS.solaris += \
130 tstRTCoreDump
131PROGRAMS.l4 += \
132 tstIoCtl
133PROGRAMS.darwin += \
134 tstDarwinSched
135ifdef VBOX_WITH_LIBCURL
136 PROGRAMS += \
137 tstRTS3
138endif
139if1of ($(KBUILD_TARGET_ARCH), amd64 x86)
140 PROGRAMS += \
141 tstLdr-2 \
142 tstLdr-3 \
143 tstLdr-4 \
144 tstNoCrt-1 \
145 tstRTR0MemUserKernelDriver \
146 tstRTR0SemMutexDriver \
147 tstRTR0TimerDriver \
148 tstR0ThreadPreemptionDriver \
149 tstTSC
150 SYSMODS += \
151 tstLdrObjR0 \
152 tstRTR0MemUserKernel \
153 tstRTR0SemMutex \
154 tstRTR0Timer \
155 tstR0ThreadPreemption
156 ifdef VBOX_WITH_RAW_MODE
157 SYSMODS += tstLdrObj
158 endif
159endif
160if1of ($(VBOX_LDR_FMT)), lx pe)
161 LIBRARIES += \
162 tstLdr-4Imp
163endif
164
165
166#
167# Target configs in almost alphabetical order.
168#
169
170tstRTAssertCompile_TEMPLATE = VBOXR3TSTEXE
171tstRTAssertCompile_NOINST = true
172tstRTAssertCompile_SOURCES = tstRTAssertCompile.cpp
173
174tstRTAvl_TEMPLATE = VBOXR3TSTEXE
175tstRTAvl_SOURCES = tstRTAvl.cpp
176
177tstRTBase64_TEMPLATE = VBOXR3TSTEXE
178tstRTBase64_SOURCES = tstRTBase64.cpp
179
180tstRTBitOperations_TEMPLATE = VBOXR3TSTEXE
181tstRTBitOperations_SOURCES = tstRTBitOperations.cpp
182
183tstRTBitOperationsPIC3_TEMPLATE = VBOXR3TSTEXE
184tstRTBitOperationsPIC3_SOURCES = tstRTBitOperations.cpp
185tstRTBitOperationsPIC3_CXXFLAGS = -fPIC -fomit-frame-pointer -O3
186tstRTBitOperationsPIC3_DEFS = PIC
187
188tstRTCidr_TEMPLATE = VBOXR3TSTEXE
189tstRTCidr_SOURCES = tstRTCidr.cpp
190
191tstRTCritSect_TEMPLATE = VBOXR3TSTEXE
192tstRTCritSect_SOURCES = tstRTCritSect.cpp
193
194tstRTCritSectW32_TEMPLATE = VBOXR3TSTEXE
195tstRTCritSectW32_SOURCES = tstRTCritSect.cpp
196tstRTCritSectW32_DEFS = TRY_WIN32_CRIT
197
198tstRTDigest_SOURCES = tstRTDigest.cpp
199
200tstDir_SOURCES = tstDir.cpp
201
202tstDir-2_SOURCES = tstDir-2.cpp
203
204tstDir-3_SOURCES = tstDir-3.cpp
205
206tstEnv_SOURCES = tstEnv.cpp
207
208# Note: tstErrUnique.cpp depends on a header generated by the makefile above us.
209tstErrUnique_SOURCES = tstErrUnique.cpp
210tstErrUnique_INCS = $(IPRT_OUT_DIR)/
211tstErrUnique.cpp_DEPS = $(IPRT_OUT_DIR)/errmsgdata.h
212
213tstFile_SOURCES = tstFile.cpp
214
215tstRTFileAio_SOURCES = VBOXR3TSTEXE
216tstRTFileAio_SOURCES = tstRTFileAio.cpp
217
218tstRTFileAppend-1_TEMPLATE = VBOXR3TSTEXE
219tstRTFileAppend-1_SOURCES = tstRTFileAppend-1.cpp
220
221tstFileAppendWin-1_SOURCES = tstFileAppendWin-1.cpp
222
223tstFileLock_SOURCES = tstFileLock.cpp
224
225tstFork_SOURCES = tstFork.cpp
226
227tstRTGetOpt_TEMPLATE = VBOXR3TSTEXE
228tstRTGetOpt_SOURCES = tstRTGetOpt.cpp
229
230tstRTGetOptArgv_TEMPLATE = VBOXR3TSTEXE
231tstRTGetOptArgv_SOURCES = tstRTGetOptArgv.cpp
232
233tstHandleTable_SOURCES = tstHandleTable.cpp
234
235tstRTHeapOffset_TEMPLATE = VBOXR3TSTEXE
236tstRTHeapOffset_SOURCES = tstRTHeapOffset.cpp
237
238tstRTHeapSimple_TEMPLATE = VBOXR3TSTEXE
239tstRTHeapSimple_SOURCES = tstRTHeapSimple.cpp
240
241tstIoCtl_SOURCES = tstIoCtl.cpp
242
243tstInlineAsm_SOURCES = tstInlineAsm.cpp
244
245tstInlineAsmPIC_SOURCES = tstInlineAsm.cpp
246tstInlineAsmPIC_CXXFLAGS = -fPIC
247tstInlineAsmPIC_DEFS = PIC
248
249tstInlineAsmPIC3_SOURCES = tstInlineAsm.cpp
250tstInlineAsmPIC3_CXXFLAGS = -fPIC -fomit-frame-pointer -O3
251tstInlineAsmPIC3_DEFS = PIC
252
253tstLdr_SOURCES = tstLdr.cpp
254
255tstLdr-2_SOURCES = tstLdr-2.cpp
256tstLdr-2_DEFS = IN_DIS
257tstLdr-2_LIBS = \
258 $(PATH_LIB)/DisasmR3$(VBOX_SUFF_LIB)
259
260ifdef VBOX_WITH_RAW_MODE
261 tstLdrObj_TEMPLATE = VBoxRc
262 tstLdrObj_INST = $(INST_TESTCASE)
263 tstLdrObj_SYSSUFF = .gc
264 tstLdrObj_SOURCES = tstLdrObj.cpp
265 tstLdrObj_DEFS = IN_DIS IN_RT_RC DIS_CORE_ONLY
266 ifeq ($(VBOX_LDR_FMT32),elf)
267 tstLdrObj_DEFS += VBOX_SOME_IMPORT_FUNCTION
268 endif
269 tstLdrObj_LIBS = \
270 $(PATH_LIB)/DisasmRC$(VBOX_SUFF_LIB) \
271 $(PATH_LIB)/RuntimeRC$(VBOX_SUFF_LIB)
272 ifeq ($(VBOX_LDR_FMT32),pe)
273 tstLdrObj_LIBS += \
274 $(PATH_LIB)/VMMGCBuiltin$(VBOX_SUFF_LIB)
275 endif # PE
276 ifeq ($(VBOX_LDR_FMT32),elf)
277 tstLdrObj_LDFLAGS = -e Entrypoint
278 endif
279 ifeq ($(VBOX_LDR_FMT32),lx)
280 tstLdrObj_LIBS += \
281 $(PATH_LIB)/VMMGCBuiltin$(VBOX_SUFF_LIB)
282 endif
283endif # VBOX_WITH_RAW_MODE
284
285tstLdr-3_SOURCES = tstLdr-3.cpp
286tstLdr-3_DEFS = IN_DIS
287tstLdr-3_LIBS = \
288 $(PATH_LIB)/DisasmR3$(VBOX_SUFF_LIB)
289
290tstLdr-4Imp_TEMPLATE = VBoxR0
291ifeq ($(VBOX_LDR_FMT),lx)
292 tstLdr-4Imp_SOURCES = tstLdr-4Imp-os2.def
293else ifeq ($(VBOX_LDR_FMT),pe)
294 tstLdr-4Imp_SOURCES.win = tstLdr-4Imp-win.def
295endif
296
297tstLdrObjR0_TEMPLATE = VBoxR0
298tstLdrObjR0_INST = $(INST_TESTCASE)
299tstLdrObjR0_SYSSUFF = .r0
300tstLdrObjR0_SOURCES = tstLdrObjR0.cpp tstLdrDisasmTest.cpp
301tstLdrObjR0_DEFS = IN_DIS IN_RT_R0 DIS_CORE_ONLY
302ifeq ($(VBOX_LDR_FMT32),elf)
303 tstLdrObjR0_DEFS += VBOX_SOME_IMPORT_FUNCTION
304endif
305ifn1of ($(KBUILD_TARGET), win)
306 tstLdrObjR0_CXXFLAGS = $(VBOX_GCC_Wno-array_bounds)
307endif
308tstLdrObjR0_LIBS = \
309 $(PATH_LIB)/DisasmR0$(VBOX_SUFF_LIB) \
310 $(PATH_LIB)/RuntimeR0$(VBOX_SUFF_LIB)
311ifeq ($(VBOX_LDR_FMT),pe)
312 tstLdrObjR0_LIBS += \
313 $(PATH_LIB)/SUPR0$(VBOX_SUFF_LIB) \
314 $(TARGET_tstLdr-4Imp)
315endif
316ifeq ($(VBOX_LDR_FMT),elf)
317 tstLdrObjR0_LDFLAGS = -e Entrypoint
318endif
319ifeq ($(VBOX_LDR_FMT),lx)
320 tstLdrObjR0_LIBS += \
321 $(PATH_LIB)/SUPR0$(VBOX_SUFF_LIB) \
322 $(TARGET_tstLdr-4Imp)
323endif
324
325tstLdr-4_SOURCES = tstLdr-4.cpp tstLdrDisasmTest.cpp
326tstLdr-4_DEFS = IN_DIS
327tstLdr-4_LIBS = \
328 $(PATH_LIB)/DisasmR3$(VBOX_SUFF_LIB)
329
330tstLdrLoad_SOURCES = tstLdrLoad.cpp
331
332tstRTList_TEMPLATE = VBOXR3TSTEXE
333tstRTList_SOURCES = tstRTList.cpp
334
335tstRTLockValidator_TEMPLATE = VBOXR3TSTEXE
336tstRTLockValidator_SOURCES = tstRTLockValidator.cpp
337
338tstLog_SOURCES = tstLog.cpp
339
340tstMemAutoPtr_SOURCES = tstMemAutoPtr.cpp
341
342tstRTMemEf_TEMPLATE = VBOXR3TSTEXE
343tstRTMemEf_SOURCES = tstRTMemEf.cpp
344
345tstRTMemCache_TEMPLATE = VBOXR3TSTEXE
346tstRTMemCache_SOURCES = tstRTMemCache.cpp
347
348tstRTMemPool_TEMPLATE = VBOXR3TSTEXE
349tstRTMemPool_SOURCES = tstRTMemPool.cpp
350
351tstMove_SOURCES = tstMove.cpp
352
353tstMp-1_SOURCES = tstMp-1.cpp
354
355tstNoCrt-1_DEFS = RT_WITHOUT_NOCRT_WRAPPER_ALIASES
356tstNoCrt-1_SOURCES = \
357 tstNoCrt-1.cpp \
358 ../common/string/memcpy.asm \
359 ../common/string/mempcpy.asm \
360 ../common/string/memmove.asm \
361 ../common/string/memset.asm \
362 ../common/string/memchr.asm \
363 ../common/string/memcmp.asm \
364 ../common/string/strchr.asm \
365 ../common/string/strcmp.asm \
366 ../common/string/strcpy.asm \
367 ../common/string/strlen.asm
368
369tstOnce_SOURCES = tstOnce.cpp
370
371tstRTPath_TEMPLATE = VBOXR3TSTEXE
372tstRTPath_SOURCES = tstRTPath.cpp
373
374tstRTPipe_TEMPLATE = VBOXR3TSTEXE
375tstRTPipe_SOURCES = tstRTPipe.cpp
376
377tstRTPoll_TEMPLATE = VBOXR3TSTEXE
378tstRTPoll_SOURCES = tstRTPoll.cpp
379
380tstPrfRT_SOURCES = tstPrfRT.cpp
381
382tstRand_SOURCES = tstRand.cpp
383
384tstRTFsQueries_SOURCES = tstRTFsQueries.cpp
385
386tstRTPrfIO_TEMPLATE = VBOXR3TSTEXE
387tstRTPrfIO_SOURCES = tstRTPrfIO.cpp
388
389tstRTProcCreateEx_TEMPLATE = VBOXR3TSTEXE
390tstRTProcCreateEx_SOURCES = tstRTProcCreateEx.cpp
391
392tstRTProcWait_SOURCES = tstRTProcWait.cpp
393
394tstRTProcIsRunningByName_SOURCES = tstRTProcIsRunningByName.cpp
395
396tstRTS3_SOURCES = tstRTS3.cpp
397
398tstSemMutex_SOURCES = tstSemMutex.cpp
399
400tstRTSemEventMulti_TEMPLATE = VBOXR3TSTEXE
401tstRTSemEventMulti_SOURCES = tstRTSemEventMulti.cpp
402
403tstRTSemRW_TEMPLATE = VBOXR3TSTEXE
404tstRTSemRW_SOURCES = tstRTSemRW.cpp
405
406tstSemPingPong_SOURCES = tstSemPingPong.cpp
407
408tstRTSemXRoads_TEMPLATE = VBOXR3TSTEXE
409tstRTSemXRoads_SOURCES = tstRTSemXRoads.cpp
410
411tstRTSort_TEMPLATE = VBOXR3TSTEXE
412tstRTSort_SOURCES = tstRTSort.cpp
413
414tstRTStrAlloc_TEMPLATE = VBOXR3TSTEXE
415tstRTStrAlloc_SOURCES = tstRTStrAlloc.cpp
416
417tstRTStrCache_TEMPLATE = VBOXR3TSTEXE
418tstRTStrCache_SOURCES = tstRTStrCache.cpp
419
420tstRTStrFormat_SOURCES = tstRTStrFormat.cpp
421
422tstStrSimplePattern_SOURCES = tstStrSimplePattern.cpp
423
424tstStrToNum_SOURCES = tstStrToNum.cpp
425
426tstRTStrVersion_TEMPLATE = VBOXR3TSTEXE
427tstRTStrVersion_SOURCES = tstRTStrVersion.cpp
428
429tstRTSystemQueryDmi_TEMPLATE = VBOXR3TSTEXE
430tstRTSystemQueryDmi_SOURCES = tstRTSystemQueryDmi.cpp
431
432tstRTSystemQueryOsInfo_TEMPLATE = VBOXR3TSTEXE
433tstRTSystemQueryOsInfo_SOURCES = tstRTSystemQueryOsInfo.cpp
434
435tstRTTcp-1_TEMPLATE = VBOXR3TSTEXE
436tstRTTcp-1_SOURCES = tstRTTcp-1.cpp
437
438tstRTTemp_TEMPLATE = VBOXR3TSTEXE
439tstRTTemp_SOURCES = tstRTTemp.cpp
440
441tstTermCallbacks_SOURCES = tstTermCallbacks.cpp
442
443tstThread-1_SOURCES = tstThread-1.cpp
444
445tstTime_SOURCES = tstTime.cpp
446
447tstTime-2_SOURCES = tstTime-2.cpp
448
449tstTime-3_SOURCES = tstTime-3.cpp
450
451tstTime-4_SOURCES = tstTime-4.cpp
452
453tstTimer_SOURCES = tstTimer.cpp
454
455tstTimerLR_SOURCES = tstTimerLR.cpp
456
457tstRTTimeSpec_TEMPLATE = VBOXR3TSTEXE
458tstRTTimeSpec_SOURCES = tstRTTimeSpec.cpp
459
460tstTSC_SOURCES = tstTSC.cpp
461tstTSC_CXXFLAGS.linux += -O3
462
463tstRTUuid_TEMPLATE = VBOXR3TSTEXE
464tstRTUuid_SOURCES = tstRTUuid.cpp
465
466tstUtf8_SOURCES = tstUtf8.cpp
467
468tstRTCoreDump_TEMPLACE = VBOXR3TSTEXE
469tstRTCoreDump_SOURCES = tstRTCoreDump.cpp
470
471
472#
473# Ring-0 testcases.
474#
475
476## @todo create a template for compiling the ring-0 part.
477tstRTR0MemUserKernel_TEMPLATE = VBoxR0
478tstRTR0MemUserKernel_INST = $(INST_TESTCASE)
479tstRTR0MemUserKernel_DEFS = IN_RT_R0
480tstRTR0MemUserKernel_SYSSUFF = .r0
481tstRTR0MemUserKernel_SOURCES = tstRTR0MemUserKernel.cpp
482tstRTR0MemUserKernel_LIBS = $(PATH_LIB)/RuntimeR0$(VBOX_SUFF_LIB)
483if1of ($(VBOX_LDR_FMT), pe lx)
484 tstRTR0MemUserKernel_LIBS += $(PATH_LIB)/SUPR0$(VBOX_SUFF_LIB)
485endif
486tstRTR0MemUserKernelDriver_TEMPLATE = VBOXR3TSTEXE
487tstRTR0MemUserKernelDriver_SOURCES = tstRTR0MemUserKernelDriver.cpp
488
489
490tstRTR0SemMutex_TEMPLATE = VBoxR0
491tstRTR0SemMutex_INST = $(INST_TESTCASE)
492tstRTR0SemMutex_DEFS = IN_RT_R0
493tstRTR0SemMutex_SYSSUFF = .r0
494tstRTR0SemMutex_SOURCES = tstRTR0SemMutex.cpp
495tstRTR0SemMutex_LIBS = $(PATH_LIB)/RuntimeR0$(VBOX_SUFF_LIB)
496if1of ($(VBOX_LDR_FMT), pe lx)
497 tstRTR0SemMutex_LIBS += $(PATH_LIB)/SUPR0$(VBOX_SUFF_LIB)
498endif
499tstRTR0SemMutexDriver_TEMPLATE = VBOXR3TSTEXE
500tstRTR0SemMutexDriver_SOURCES = tstRTR0SemMutexDriver.cpp
501
502
503tstRTR0Timer_TEMPLATE = VBoxR0
504tstRTR0Timer_INST = $(INST_TESTCASE)
505tstRTR0Timer_DEFS = IN_RT_R0
506tstRTR0Timer_SYSSUFF = .r0
507tstRTR0Timer_SOURCES = tstRTR0Timer.cpp
508tstRTR0Timer_LIBS = $(PATH_LIB)/RuntimeR0$(VBOX_SUFF_LIB)
509if1of ($(VBOX_LDR_FMT), pe lx)
510 tstRTR0Timer_LIBS += $(PATH_LIB)/SUPR0$(VBOX_SUFF_LIB)
511endif
512tstRTR0TimerDriver_TEMPLATE = VBOXR3TSTEXE
513tstRTR0TimerDriver_SOURCES = tstRTR0TimerDriver.cpp
514
515
516tstR0ThreadPreemption_TEMPLATE = VBoxR0
517tstR0ThreadPreemption_INST = $(INST_TESTCASE)
518tstR0ThreadPreemption_DEFS = IN_RT_R0
519tstR0ThreadPreemption_SYSSUFF = .r0
520tstR0ThreadPreemption_SOURCES = tstR0ThreadPreemption.cpp
521tstR0ThreadPreemption_LIBS = $(PATH_LIB)/RuntimeR0$(VBOX_SUFF_LIB)
522if1of ($(VBOX_LDR_FMT), pe lx)
523 tstR0ThreadPreemption_LIBS += $(PATH_LIB)/SUPR0$(VBOX_SUFF_LIB)
524endif
525tstR0ThreadPreemptionDriver_TEMPLATE = VBOXR3TSTEXE
526tstR0ThreadPreemptionDriver_SOURCES = tstR0ThreadPreemptionDriver.cpp
527
528
529#
530# Odds and ends.
531#
532
533tstDarwinSched_SOURCES = tstDarwinSched.cpp
534
535ntGetTimerResolution_SOURCES = ntGetTimerResolution.cpp
536ntGetTimerResolution_SDKS.win = WINPSDK W2K3DDK VBOX_NTDLL
537
538endif # VBOX_WITH_TESTCASES
539
540
541#
542# Various useful tools
543#
544
545# RTLdrFlt is similar to c++filt, except that it's for VMMR0.r0 stacks.
546PROGRAMS += RTLdrFlt
547RTLdrFlt_TEMPLATE = VBOXR3TSTEXE
548RTLdrFlt_SOURCES = RTLdrFlt.cpp
549
550
551
552include $(KBUILD_PATH)/subfooter.kmk
553
Note: See TracBrowser for help on using the repository browser.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette