#* © 2016 and later: Unicode, Inc. and others.
#* License & terms of use: http://www.unicode.org/copyright.html#License
#*******************************************************************************
#* Copyright (C) 2009-2014, International Business Machines Corporation and    *
#* others. All Rights Reserved.                                                *
#*******************************************************************************
shared.dir = ${workspace_loc:/icu4j-shared}

icu4j.core.dir = ${workspace_loc:/icu4j-core}
icu4j.charset.dir = ${workspace_loc:/icu4j-charset}
icu4j.collate.dir = ${workspace_loc:/icu4j-collate}
icu4j.currdata.dir = ${workspace_loc:/icu4j-currdata}
icu4j.langdata.dir = ${workspace_loc:/icu4j-langdata}
icu4j.localespi.dir = ${workspace_loc:/icu4j-localespi}
icu4j.regiondata.dir = ${workspace_loc:/icu4j-regiondata}
icu4j.translit.dir = ${workspace_loc:/icu4j-translit}

icu4j.test-framework.dir = ${workspace_loc:/icu4j-test-framework}
icu4j.core-tests.dir = ${workspace_loc:/icu4j-core-tests}
icu4j.collate-tests.dir = ${workspace_loc:/icu4j-collate-tests}
icu4j.charset-tests.dir = ${workspace_loc:/icu4j-charset-tests}
icu4j.localespi-tests.dir = ${workspace_loc:/icu4j-localespi-tests}
icu4j.packaging-tests.dir = ${workspace_loc:/icu4j-packaging-tests}
icu4j.translit-tests.dir = ${workspace_loc:/icu4j-translit-tests}
icu4j.testall.dir = ${workspace_loc:/icu4j-testall}

icu4j.build-tools.dir = ${workspace_loc:/icu4j-build-tools}
icu4j.tools.dir = ${workspace_loc:/icu4j-tools}

icu4j.demos.dir = ${workspace_loc:/icu4j-demos}
icu4j.samples.dir = ${workspace_loc:/icu4j-samples}

icu4j.perf-tests.dir = ${workspace_loc:/icu4j-perf-tests}
