@@ -150,7 +150,10 @@ def build_dir(self):
150
150
return join ("$BUILD_DIR" , "lib" , basename (self .path ))
151
151
152
152
def get_inc_dirs (self ):
153
- return [self .src_dir ]
153
+ items = [self .src_dir ]
154
+ if all ([isdir (join (self .path , d )) for d in ("inc" , "src" )]):
155
+ items .append (join (self .path , "inc" ))
156
+ return items
154
157
155
158
@property
156
159
def build_flags (self ):
@@ -383,70 +386,33 @@ def build(self):
383
386
for lb in self ._circular_deps :
384
387
self .env .AppendUnique (CPPPATH = lb .get_inc_dirs ())
385
388
386
- if not self ._is_built :
387
- self .env .AppendUnique (CPPPATH = self .get_inc_dirs ())
389
+ if self ._is_built :
390
+ return libs
391
+ self ._is_built = True
388
392
389
- if self .lib_ldf_mode == "off" :
390
- for lb in self .envorigin .GetLibBuilders ():
391
- if self == lb or not lb .is_built :
392
- continue
393
- for key in ("CPPPATH" , "LIBPATH" , "LIBS" , "LINKFLAGS" ):
394
- self .env .AppendUnique (** {key : lb .env .get (key )})
393
+ self .env .AppendUnique (CPPPATH = self .get_inc_dirs ())
395
394
396
- if self .lib_archive :
397
- libs .append (
398
- self .env .BuildLibrary (self .build_dir , self .src_dir ,
399
- self .src_filter ))
400
- else :
401
- self .env .BuildSources (self .build_dir , self .src_dir ,
402
- self .src_filter )
403
- self ._is_built = True
395
+ if self .lib_ldf_mode == "off" :
396
+ for lb in self .envorigin .GetLibBuilders ():
397
+ if self == lb or not lb .is_built :
398
+ continue
399
+ for key in ("CPPPATH" , "LIBPATH" , "LIBS" , "LINKFLAGS" ):
400
+ self .env .AppendUnique (** {key : lb .env .get (key )})
401
+
402
+ if self .lib_archive :
403
+ libs .append (
404
+ self .env .BuildLibrary (self .build_dir , self .src_dir ,
405
+ self .src_filter ))
406
+ else :
407
+ self .env .BuildSources (self .build_dir , self .src_dir ,
408
+ self .src_filter )
404
409
return libs
405
410
406
411
407
412
class UnknownLibBuilder (LibBuilderBase ):
408
413
pass
409
414
410
415
411
- class ProjectAsLibBuilder (LibBuilderBase ):
412
-
413
- def __init__ (self , * args , ** kwargs ):
414
- LibBuilderBase .__init__ (self , * args , ** kwargs )
415
- self ._is_built = True
416
-
417
- @property
418
- def src_dir (self ):
419
- return self .env .subst ("$PROJECTSRC_DIR" )
420
-
421
- @property
422
- def lib_ldf_mode (self ):
423
- mode = LibBuilderBase .lib_ldf_mode .fget (self )
424
- if not mode .startswith ("chain" ):
425
- return mode
426
- # parse all project files
427
- return "deep+" if "+" in mode else "deep"
428
-
429
- @property
430
- def src_filter (self ):
431
- return self .env .get ("SRC_FILTER" , LibBuilderBase .src_filter .fget (self ))
432
-
433
- def process_extra_options (self ):
434
- # skip for project, options are already processed
435
- pass
436
-
437
- def search_deps_recursive (self , search_paths = None ):
438
- for dep in self .env .get ("LIB_DEPS" , []):
439
- for token in ("@" , "=" ):
440
- if token in dep :
441
- dep , _ = dep .split (token , 1 )
442
- for lb in self .envorigin .GetLibBuilders ():
443
- if lb .name == dep :
444
- if lb not in self .depbuilders :
445
- self .depend_recursive (lb )
446
- break
447
- return LibBuilderBase .search_deps_recursive (self , search_paths )
448
-
449
-
450
416
class ArduinoLibBuilder (LibBuilderBase ):
451
417
452
418
def load_manifest (self ):
@@ -598,6 +564,46 @@ def get_inc_dirs(self):
598
564
return inc_dirs
599
565
600
566
567
+ class ProjectAsLibBuilder (LibBuilderBase ):
568
+
569
+ @property
570
+ def src_dir (self ):
571
+ return self .env .subst ("$PROJECTSRC_DIR" )
572
+
573
+ @property
574
+ def lib_ldf_mode (self ):
575
+ mode = LibBuilderBase .lib_ldf_mode .fget (self )
576
+ if not mode .startswith ("chain" ):
577
+ return mode
578
+ # parse all project files
579
+ return "deep+" if "+" in mode else "deep"
580
+
581
+ @property
582
+ def src_filter (self ):
583
+ return self .env .get ("SRC_FILTER" , LibBuilderBase .src_filter .fget (self ))
584
+
585
+ def process_extra_options (self ):
586
+ # skip for project, options are already processed
587
+ pass
588
+
589
+ def search_deps_recursive (self , search_paths = None ):
590
+ for dep in self .env .get ("LIB_DEPS" , []):
591
+ for token in ("@" , "=" ):
592
+ if token in dep :
593
+ dep , _ = dep .split (token , 1 )
594
+ for lb in self .envorigin .GetLibBuilders ():
595
+ if lb .name == dep :
596
+ if lb not in self .depbuilders :
597
+ self .depend_recursive (lb )
598
+ break
599
+ return LibBuilderBase .search_deps_recursive (self , search_paths )
600
+
601
+ def build (self ):
602
+ self ._is_built = True # do not build Project now
603
+ self .env .AppendUnique (CPPPATH = self .get_inc_dirs ())
604
+ return LibBuilderBase .build (self )
605
+
606
+
601
607
def GetLibBuilders (env ): # pylint: disable=too-many-branches
602
608
603
609
if "__PIO_LIB_BUILDERS" in DefaultEnvironment ():
@@ -664,7 +670,7 @@ def _check_lib_builder(lb):
664
670
return items
665
671
666
672
667
- def BuildDependentLibraries (env , src_dir ):
673
+ def BuildProjectLibraries (env ):
668
674
lib_builders = env .GetLibBuilders ()
669
675
670
676
def correct_found_libs ():
@@ -693,7 +699,7 @@ def print_deps_tree(root, level=0):
693
699
print "Collected %d compatible libraries" % len (lib_builders )
694
700
print "Looking for dependencies..."
695
701
696
- project = ProjectAsLibBuilder (env , src_dir )
702
+ project = ProjectAsLibBuilder (env , "$PROJECT_DIR" )
697
703
project .env = env
698
704
project .search_deps_recursive ()
699
705
@@ -717,5 +723,5 @@ def exists(_):
717
723
718
724
def generate (env ):
719
725
env .AddMethod (GetLibBuilders )
720
- env .AddMethod (BuildDependentLibraries )
726
+ env .AddMethod (BuildProjectLibraries )
721
727
return env
0 commit comments