Mercurial > hg > graal-jvmci-8
comparison mxtool/mx.py @ 18147:31ad929e1afd
factored out _netbeansinit_project function
author | Doug Simon <doug.simon@oracle.com> |
---|---|
date | Wed, 22 Oct 2014 20:20:42 +0200 |
parents | 1700d12ba0ad |
children | c88ab4f1f04a |
comparison
equal
deleted
inserted
replaced
18146:9db0af368bb4 | 18147:31ad929e1afd |
---|---|
4095 """(re)generate NetBeans project configurations""" | 4095 """(re)generate NetBeans project configurations""" |
4096 | 4096 |
4097 for suite in suites(True): | 4097 for suite in suites(True): |
4098 _netbeansinit_suite(args, suite, refreshOnly, buildProcessorJars) | 4098 _netbeansinit_suite(args, suite, refreshOnly, buildProcessorJars) |
4099 | 4099 |
4100 def _netbeansinit_suite(args, suite, refreshOnly=False, buildProcessorJars=True): | 4100 def _netbeansinit_project(p, jdks=None, files=None, libFiles=None): |
4101 configZip = TimeStampFile(join(suite.mxDir, 'netbeans-config.zip')) | 4101 if not exists(join(p.dir, 'nbproject')): |
4102 configLibsZip = join(suite.mxDir, 'eclipse-config-libs.zip') | 4102 os.makedirs(join(p.dir, 'nbproject')) |
4103 if refreshOnly and not configZip.exists(): | 4103 |
4104 return | 4104 jdk = java(p.javaCompliance) |
4105 | 4105 assert jdk |
4106 if _check_ide_timestamp(suite, configZip, 'netbeans'): | 4106 |
4107 logv('[NetBeans configurations are up to date - skipping]') | 4107 if jdks: |
4108 return | 4108 jdks.add(jdk) |
4109 | 4109 |
4110 updated = False | 4110 out = XMLDoc() |
4111 files = [] | 4111 out.open('project', {'name' : p.name, 'default' : 'default', 'basedir' : '.'}) |
4112 libFiles = [] | 4112 out.element('description', data='Builds, tests, and runs the project ' + p.name + '.') |
4113 jdks = set() | 4113 out.element('import', {'file' : 'nbproject/build-impl.xml'}) |
4114 for p in suite.projects: | 4114 out.open('target', {'name' : '-post-compile'}) |
4115 if p.native: | 4115 out.open('exec', {'executable' : sys.executable}) |
4116 out.element('env', {'key' : 'JAVA_HOME', 'value' : jdk.jdk}) | |
4117 out.element('arg', {'value' : os.path.abspath(__file__)}) | |
4118 out.element('arg', {'value' : 'archive'}) | |
4119 out.element('arg', {'value' : '@GRAAL'}) | |
4120 out.close('exec') | |
4121 out.close('target') | |
4122 out.close('project') | |
4123 update_file(join(p.dir, 'build.xml'), out.xml(indent='\t', newl='\n')) | |
4124 if files: | |
4125 files.append(join(p.dir, 'build.xml')) | |
4126 | |
4127 out = XMLDoc() | |
4128 out.open('project', {'xmlns' : 'http://www.netbeans.org/ns/project/1'}) | |
4129 out.element('type', data='org.netbeans.modules.java.j2seproject') | |
4130 out.open('configuration') | |
4131 out.open('data', {'xmlns' : 'http://www.netbeans.org/ns/j2se-project/3'}) | |
4132 out.element('name', data=p.name) | |
4133 out.element('explicit-platform', {'explicit-source-supported' : 'true'}) | |
4134 out.open('source-roots') | |
4135 out.element('root', {'id' : 'src.dir'}) | |
4136 if len(p.annotation_processors()) > 0: | |
4137 out.element('root', {'id' : 'src.ap-source-output.dir', 'name' : 'Generated Packages'}) | |
4138 out.close('source-roots') | |
4139 out.open('test-roots') | |
4140 out.close('test-roots') | |
4141 out.close('data') | |
4142 | |
4143 firstDep = True | |
4144 for dep in p.all_deps([], includeLibs=False, includeAnnotationProcessors=True): | |
4145 if dep == p: | |
4116 continue | 4146 continue |
4117 | 4147 |
4118 if exists(join(p.dir, 'plugin.xml')): # eclipse plugin project | 4148 if dep.isProject(): |
4119 continue | 4149 n = dep.name.replace('.', '_') |
4120 | 4150 if firstDep: |
4121 if not exists(join(p.dir, 'nbproject')): | 4151 out.open('references', {'xmlns' : 'http://www.netbeans.org/ns/ant-project-references/1'}) |
4122 os.makedirs(join(p.dir, 'nbproject')) | 4152 firstDep = False |
4123 | 4153 |
4124 jdk = java(p.javaCompliance) | 4154 out.open('reference') |
4125 assert jdk | 4155 out.element('foreign-project', data=n) |
4126 | 4156 out.element('artifact-type', data='jar') |
4127 jdks.add(jdk) | 4157 out.element('script', data='build.xml') |
4128 | 4158 out.element('target', data='jar') |
4129 out = XMLDoc() | 4159 out.element('clean-target', data='clean') |
4130 out.open('project', {'name' : p.name, 'default' : 'default', 'basedir' : '.'}) | 4160 out.element('id', data='jar') |
4131 out.element('description', data='Builds, tests, and runs the project ' + p.name + '.') | 4161 out.close('reference') |
4132 out.element('import', {'file' : 'nbproject/build-impl.xml'}) | 4162 |
4133 out.open('target', {'name' : '-post-compile'}) | 4163 if not firstDep: |
4134 out.open('exec', {'executable' : sys.executable}) | 4164 out.close('references') |
4135 out.element('env', {'key' : 'JAVA_HOME', 'value' : jdk.jdk}) | 4165 |
4136 out.element('arg', {'value' : os.path.abspath(__file__)}) | 4166 out.close('configuration') |
4137 out.element('arg', {'value' : 'archive'}) | 4167 out.close('project') |
4138 out.element('arg', {'value' : '@GRAAL'}) | 4168 update_file(join(p.dir, 'nbproject', 'project.xml'), out.xml(indent=' ', newl='\n')) |
4139 out.close('exec') | 4169 if files: |
4140 out.close('target') | |
4141 out.close('project') | |
4142 updated = update_file(join(p.dir, 'build.xml'), out.xml(indent='\t', newl='\n')) or updated | |
4143 files.append(join(p.dir, 'build.xml')) | |
4144 | |
4145 out = XMLDoc() | |
4146 out.open('project', {'xmlns' : 'http://www.netbeans.org/ns/project/1'}) | |
4147 out.element('type', data='org.netbeans.modules.java.j2seproject') | |
4148 out.open('configuration') | |
4149 out.open('data', {'xmlns' : 'http://www.netbeans.org/ns/j2se-project/3'}) | |
4150 out.element('name', data=p.name) | |
4151 out.element('explicit-platform', {'explicit-source-supported' : 'true'}) | |
4152 out.open('source-roots') | |
4153 out.element('root', {'id' : 'src.dir'}) | |
4154 if len(p.annotation_processors()) > 0: | |
4155 out.element('root', {'id' : 'src.ap-source-output.dir', 'name' : 'Generated Packages'}) | |
4156 out.close('source-roots') | |
4157 out.open('test-roots') | |
4158 out.close('test-roots') | |
4159 out.close('data') | |
4160 | |
4161 firstDep = True | |
4162 for dep in p.all_deps([], includeLibs=False, includeAnnotationProcessors=True): | |
4163 if dep == p: | |
4164 continue | |
4165 | |
4166 if dep.isProject(): | |
4167 n = dep.name.replace('.', '_') | |
4168 if firstDep: | |
4169 out.open('references', {'xmlns' : 'http://www.netbeans.org/ns/ant-project-references/1'}) | |
4170 firstDep = False | |
4171 | |
4172 out.open('reference') | |
4173 out.element('foreign-project', data=n) | |
4174 out.element('artifact-type', data='jar') | |
4175 out.element('script', data='build.xml') | |
4176 out.element('target', data='jar') | |
4177 out.element('clean-target', data='clean') | |
4178 out.element('id', data='jar') | |
4179 out.close('reference') | |
4180 | |
4181 if not firstDep: | |
4182 out.close('references') | |
4183 | |
4184 out.close('configuration') | |
4185 out.close('project') | |
4186 updated = update_file(join(p.dir, 'nbproject', 'project.xml'), out.xml(indent=' ', newl='\n')) or updated | |
4187 files.append(join(p.dir, 'nbproject', 'project.xml')) | 4170 files.append(join(p.dir, 'nbproject', 'project.xml')) |
4188 | 4171 |
4189 out = StringIO.StringIO() | 4172 out = StringIO.StringIO() |
4190 jdkPlatform = 'JDK_' + str(jdk.version) | 4173 jdkPlatform = 'JDK_' + str(jdk.version) |
4191 | 4174 |
4192 annotationProcessorEnabled = "false" | 4175 annotationProcessorEnabled = "false" |
4193 annotationProcessorReferences = "" | 4176 annotationProcessorSrcFolder = "" |
4194 annotationProcessorSrcFolder = "" | 4177 if len(p.annotation_processors()) > 0: |
4195 if len(p.annotation_processors()) > 0: | 4178 annotationProcessorEnabled = "true" |
4196 annotationProcessorEnabled = "true" | 4179 genSrcDir = p.source_gen_dir() |
4197 genSrcDir = p.source_gen_dir() | 4180 if not exists(genSrcDir): |
4198 if not exists(genSrcDir): | 4181 os.makedirs(genSrcDir) |
4199 os.makedirs(genSrcDir) | 4182 annotationProcessorSrcFolder = "src.ap-source-output.dir=" + genSrcDir |
4200 annotationProcessorSrcFolder = "src.ap-source-output.dir=" + genSrcDir | 4183 |
4201 | 4184 content = """ |
4202 content = """ | |
4203 annotation.processing.enabled=""" + annotationProcessorEnabled + """ | 4185 annotation.processing.enabled=""" + annotationProcessorEnabled + """ |
4204 annotation.processing.enabled.in.editor=""" + annotationProcessorEnabled + """ | 4186 annotation.processing.enabled.in.editor=""" + annotationProcessorEnabled + """ |
4205 annotation.processing.processors.list= | 4187 annotation.processing.processors.list= |
4206 annotation.processing.run.all.processors=true | 4188 annotation.processing.run.all.processors=true |
4207 application.title=""" + p.name + """ | 4189 application.title=""" + p.name + """ |
4216 build.test.classes.dir=${build.dir}/test/classes | 4198 build.test.classes.dir=${build.dir}/test/classes |
4217 build.test.results.dir=${build.dir}/test/results | 4199 build.test.results.dir=${build.dir}/test/results |
4218 # Uncomment to specify the preferred debugger connection transport: | 4200 # Uncomment to specify the preferred debugger connection transport: |
4219 #debug.transport=dt_socket | 4201 #debug.transport=dt_socket |
4220 debug.classpath=\\ | 4202 debug.classpath=\\ |
4221 ${run.classpath} | 4203 ${run.classpath} |
4222 debug.test.classpath=\\ | 4204 debug.test.classpath=\\ |
4223 ${run.test.classpath} | 4205 ${run.test.classpath} |
4224 # This directory is removed when the project is cleaned: | 4206 # This directory is removed when the project is cleaned: |
4225 dist.dir=dist | 4207 dist.dir=dist |
4226 dist.jar=${dist.dir}/""" + p.name + """.jar | 4208 dist.jar=${dist.dir}/""" + p.name + """.jar |
4227 dist.javadoc.dir=${dist.dir}/javadoc | 4209 dist.javadoc.dir=${dist.dir}/javadoc |
4228 endorsed.classpath= | 4210 endorsed.classpath= |
4233 javac.compilerargs=-XDignore.symbol.file | 4215 javac.compilerargs=-XDignore.symbol.file |
4234 javac.deprecation=false | 4216 javac.deprecation=false |
4235 javac.source=""" + str(p.javaCompliance) + """ | 4217 javac.source=""" + str(p.javaCompliance) + """ |
4236 javac.target=""" + str(p.javaCompliance) + """ | 4218 javac.target=""" + str(p.javaCompliance) + """ |
4237 javac.test.classpath=\\ | 4219 javac.test.classpath=\\ |
4238 ${javac.classpath}:\\ | 4220 ${javac.classpath}:\\ |
4239 ${build.classes.dir} | 4221 ${build.classes.dir} |
4240 javadoc.additionalparam= | 4222 javadoc.additionalparam= |
4241 javadoc.author=false | 4223 javadoc.author=false |
4242 javadoc.encoding=${source.encoding} | 4224 javadoc.encoding=${source.encoding} |
4243 javadoc.noindex=false | 4225 javadoc.noindex=false |
4244 javadoc.nonavbar=false | 4226 javadoc.nonavbar=false |
4253 meta.inf.dir=${src.dir}/META-INF | 4235 meta.inf.dir=${src.dir}/META-INF |
4254 mkdist.disabled=false | 4236 mkdist.disabled=false |
4255 platforms.""" + jdkPlatform + """.home=""" + jdk.jdk + """ | 4237 platforms.""" + jdkPlatform + """.home=""" + jdk.jdk + """ |
4256 platform.active=""" + jdkPlatform + """ | 4238 platform.active=""" + jdkPlatform + """ |
4257 run.classpath=\\ | 4239 run.classpath=\\ |
4258 ${javac.classpath}:\\ | 4240 ${javac.classpath}:\\ |
4259 ${build.classes.dir} | 4241 ${build.classes.dir} |
4260 # Space-separated list of JVM arguments used when running the project | 4242 # Space-separated list of JVM arguments used when running the project |
4261 # (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value | 4243 # (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value |
4262 # or test-sys-prop.name=value to set system properties for unit tests): | 4244 # or test-sys-prop.name=value to set system properties for unit tests): |
4263 run.jvmargs= | 4245 run.jvmargs= |
4264 run.test.classpath=\\ | 4246 run.test.classpath=\\ |
4265 ${javac.test.classpath}:\\ | 4247 ${javac.test.classpath}:\\ |
4266 ${build.test.classes.dir} | 4248 ${build.test.classes.dir} |
4267 test.src.dir=./test | 4249 test.src.dir=./test |
4268 """ + annotationProcessorSrcFolder + """ | 4250 """ + annotationProcessorSrcFolder + """ |
4269 source.encoding=UTF-8""".replace(':', os.pathsep).replace('/', os.sep) | 4251 source.encoding=UTF-8""".replace(':', os.pathsep).replace('/', os.sep) |
4270 print >> out, content | 4252 print >> out, content |
4271 | 4253 |
4272 mainSrc = True | 4254 mainSrc = True |
4273 for src in p.srcDirs: | 4255 for src in p.srcDirs: |
4274 srcDir = join(p.dir, src) | 4256 srcDir = join(p.dir, src) |
4275 if not exists(srcDir): | 4257 if not exists(srcDir): |
4276 os.mkdir(srcDir) | 4258 os.mkdir(srcDir) |
4277 ref = 'file.reference.' + p.name + '-' + src | 4259 ref = 'file.reference.' + p.name + '-' + src |
4278 print >> out, ref + '=' + src | 4260 print >> out, ref + '=' + src |
4279 if mainSrc: | 4261 if mainSrc: |
4280 print >> out, 'src.dir=${' + ref + '}' | 4262 print >> out, 'src.dir=${' + ref + '}' |
4281 mainSrc = False | 4263 mainSrc = False |
4282 else: | 4264 else: |
4283 print >> out, 'src.' + src + '.dir=${' + ref + '}' | 4265 print >> out, 'src.' + src + '.dir=${' + ref + '}' |
4284 | 4266 |
4285 javacClasspath = [] | 4267 javacClasspath = [] |
4286 | 4268 |
4287 deps = p.all_deps([], True) | 4269 deps = p.all_deps([], True) |
4288 annotationProcessorOnlyDeps = [] | 4270 annotationProcessorOnlyDeps = [] |
4289 if len(p.annotation_processors()) > 0: | 4271 if len(p.annotation_processors()) > 0: |
4290 for ap in p.annotation_processors(): | 4272 for ap in p.annotation_processors(): |
4291 apDep = dependency(ap) | 4273 apDep = dependency(ap) |
4292 if not apDep in deps: | 4274 if not apDep in deps: |
4293 deps.append(apDep) | 4275 deps.append(apDep) |
4294 annotationProcessorOnlyDeps.append(apDep) | 4276 annotationProcessorOnlyDeps.append(apDep) |
4295 | 4277 |
4296 annotationProcessorReferences = [] | 4278 annotationProcessorReferences = [] |
4297 | 4279 |
4298 for dep in deps: | 4280 for dep in deps: |
4299 if dep == p: | 4281 if dep == p: |
4300 continue | 4282 continue |
4301 | 4283 |
4302 if dep.isLibrary(): | 4284 if dep.isLibrary(): |
4303 path = dep.get_path(resolve=True) | 4285 path = dep.get_path(resolve=True) |
4304 if path: | 4286 if path: |
4305 if os.sep == '\\': | 4287 if os.sep == '\\': |
4306 path = path.replace('\\', '\\\\') | 4288 path = path.replace('\\', '\\\\') |
4307 ref = 'file.reference.' + dep.name + '-bin' | 4289 ref = 'file.reference.' + dep.name + '-bin' |
4308 print >> out, ref + '=' + path | 4290 print >> out, ref + '=' + path |
4291 if libFiles: | |
4309 libFiles.append(path) | 4292 libFiles.append(path) |
4310 | 4293 |
4311 elif dep.isProject(): | 4294 elif dep.isProject(): |
4312 n = dep.name.replace('.', '_') | 4295 n = dep.name.replace('.', '_') |
4313 relDepPath = os.path.relpath(dep.dir, p.dir).replace(os.sep, '/') | 4296 relDepPath = os.path.relpath(dep.dir, p.dir).replace(os.sep, '/') |
4314 ref = 'reference.' + n + '.jar' | 4297 ref = 'reference.' + n + '.jar' |
4315 print >> out, 'project.' + n + '=' + relDepPath | 4298 print >> out, 'project.' + n + '=' + relDepPath |
4316 print >> out, ref + '=${project.' + n + '}/dist/' + dep.name + '.jar' | 4299 print >> out, ref + '=${project.' + n + '}/dist/' + dep.name + '.jar' |
4317 | 4300 |
4318 if not dep in annotationProcessorOnlyDeps: | 4301 if not dep in annotationProcessorOnlyDeps: |
4319 javacClasspath.append('${' + ref + '}') | 4302 javacClasspath.append('${' + ref + '}') |
4320 else: | 4303 else: |
4321 annotationProcessorReferences.append('${' + ref + '}') | 4304 annotationProcessorReferences.append('${' + ref + '}') |
4322 | 4305 |
4323 print >> out, 'javac.classpath=\\\n ' + (os.pathsep + '\\\n ').join(javacClasspath) | 4306 print >> out, 'javac.classpath=\\\n ' + (os.pathsep + '\\\n ').join(javacClasspath) |
4324 print >> out, 'javac.processorpath=' + (os.pathsep + '\\\n ').join(['${javac.classpath}'] + annotationProcessorReferences) | 4307 print >> out, 'javac.processorpath=' + (os.pathsep + '\\\n ').join(['${javac.classpath}'] + annotationProcessorReferences) |
4325 print >> out, 'javac.test.processorpath=' + (os.pathsep + '\\\n ').join(['${javac.test.classpath}'] + annotationProcessorReferences) | 4308 print >> out, 'javac.test.processorpath=' + (os.pathsep + '\\\n ').join(['${javac.test.classpath}'] + annotationProcessorReferences) |
4326 | 4309 |
4327 updated = update_file(join(p.dir, 'nbproject', 'project.properties'), out.getvalue()) or updated | 4310 update_file(join(p.dir, 'nbproject', 'project.properties'), out.getvalue()) |
4328 out.close() | 4311 out.close() |
4312 if files: | |
4329 files.append(join(p.dir, 'nbproject', 'project.properties')) | 4313 files.append(join(p.dir, 'nbproject', 'project.properties')) |
4330 | 4314 |
4331 if updated: | 4315 def _netbeansinit_suite(args, suite, refreshOnly=False, buildProcessorJars=True): |
4332 log('If using NetBeans:') | 4316 configZip = TimeStampFile(join(suite.mxDir, 'netbeans-config.zip')) |
4333 # http://stackoverflow.com/questions/24720665/cant-resolve-jdk-internal-package | 4317 configLibsZip = join(suite.mxDir, 'eclipse-config-libs.zip') |
4334 log(' 1. Edit etc/netbeans.conf in your NetBeans installation and modify netbeans_default_options variable to include "-J-DCachingArchiveProvider.disableCtSym=true"') | 4318 if refreshOnly and not configZip.exists(): |
4335 log(' 2. Ensure that the following platform(s) are defined (Tools -> Java Platforms):') | 4319 return |
4336 for jdk in jdks: | 4320 |
4337 log(' JDK_' + str(jdk.version)) | 4321 if _check_ide_timestamp(suite, configZip, 'netbeans'): |
4338 log(' 3. Open/create a Project Group for the directory containing the projects (File -> Project Group -> New Group... -> Folder of Projects)') | 4322 logv('[NetBeans configurations are up to date - skipping]') |
4323 return | |
4324 | |
4325 files = [] | |
4326 libFiles = [] | |
4327 jdks = set() | |
4328 for p in suite.projects: | |
4329 if p.native: | |
4330 continue | |
4331 | |
4332 if exists(join(p.dir, 'plugin.xml')): # eclipse plugin project | |
4333 continue | |
4334 | |
4335 _netbeansinit_project(p, jdks, files, libFiles) | |
4336 | |
4337 log('If using NetBeans:') | |
4338 # http://stackoverflow.com/questions/24720665/cant-resolve-jdk-internal-package | |
4339 log(' 1. Edit etc/netbeans.conf in your NetBeans installation and modify netbeans_default_options variable to include "-J-DCachingArchiveProvider.disableCtSym=true"') | |
4340 log(' 2. Ensure that the following platform(s) are defined (Tools -> Java Platforms):') | |
4341 for jdk in jdks: | |
4342 log(' JDK_' + str(jdk.version)) | |
4343 log(' 3. Open/create a Project Group for the directory containing the projects (File -> Project Group -> New Group... -> Folder of Projects)') | |
4339 | 4344 |
4340 _zip_files(files, suite.dir, configZip.path) | 4345 _zip_files(files, suite.dir, configZip.path) |
4341 _zip_files(libFiles, suite.dir, configLibsZip) | 4346 _zip_files(libFiles, suite.dir, configLibsZip) |
4342 | 4347 |
4343 def intellijinit(args, refreshOnly=False): | 4348 def intellijinit(args, refreshOnly=False): |