Skip to content

Commit

Permalink
Reorder makefile sections (evaluate file names after target platform)
Browse files Browse the repository at this point in the history
This solves the issue where platform-dependent class inclusion
could not work (#61). Also it seems a more logical order of
evaluation in general because binary file extensions are platform-
dependent.
  • Loading branch information
katjav committed Mar 8, 2020
1 parent a10a5b5 commit a6975e9
Showing 1 changed file with 70 additions and 72 deletions.
142 changes: 70 additions & 72 deletions Makefile.pdlibbuilder
Original file line number Diff line number Diff line change
Expand Up @@ -369,78 +369,6 @@ externalsdir ?= ..
Makefile.pdlibbuilder = true


################################################################################
### variables: library name and version ########################################
################################################################################


# strip possibles spaces from lib.name, they mess up calculated file names
lib.name := $(strip $(lib.name))

# if meta file exists, check library version
metafile := $(wildcard $(lib.name)-meta.pd)

ifdef metafile
lib.version := $(shell sed -n \
's|^\#X text [0-9][0-9]* [0-9][0-9]* VERSION \(.*\);|\1|p' \
$(metafile))
endif


################################################################################
### variables: files ###########################################################
################################################################################


#=== sources ===================================================================


# (re)define <classname>.class.sources using file names in class.sources

define add-class-source
$(notdir $(basename $v)).class.sources += $v
endef

$(foreach v, $(class.sources), $(eval $(add-class-source)))

# derive class names from <classname>.class.sources variables
sourcevariables := $(filter %.class.sources, $(.VARIABLES))
classes := $(basename $(basename $(sourcevariables)))

# accumulate all source files specified in makefile
classes.sources := $(sort $(foreach v, $(sourcevariables), $($v)))
all.sources := $(classes.sources) $(lib.setup.sources) \
$(shared.sources) $(common.sources)


#=== object files ==============================================================


# construct object filenames from all C and C++ source file names
classes.objects := $(addsuffix .o, $(basename $(classes.sources)))
common.objects := $(addsuffix .o, $(basename $(common.sources)))
shared.objects := $(addsuffix .o, $(basename $(shared.sources)))
lib.setup.objects := $(addsuffix .o, $(basename $(lib.setup.sources)))
all.objects = $(classes.objects) $(common.objects) $(shared.objects) \
$(lib.setup.objects)


#=== executables ===============================================================


# use recursive variables here because executable extension is not yet known

# construct class executable names from class names
classes.executables = $(addsuffix .$(extension), $(classes))

# construct shared lib executable name if shared sources are defined
ifdef shared.sources
shared.lib = lib$(lib.name).$(shared.extension)
else
shared.lib =
endif


################################################################################
### target platform detection ##################################################
################################################################################
Expand Down Expand Up @@ -733,6 +661,76 @@ cxx.ldflags := $(cxx.ldflags) $(ldflags) $(LDFLAGS)
cxx.ldlibs := $(cxx.ldlibs) $(ldlibs)


################################################################################
### variables: library name and version ########################################
################################################################################


# strip possibles spaces from lib.name, they mess up calculated file names
lib.name := $(strip $(lib.name))

# if meta file exists, check library version
metafile := $(wildcard $(lib.name)-meta.pd)

ifdef metafile
lib.version := $(shell sed -n \
's|^\#X text [0-9][0-9]* [0-9][0-9]* VERSION \(.*\);|\1|p' \
$(metafile))
endif


################################################################################
### variables: files ###########################################################
################################################################################


#=== sources ===================================================================


# (re)define <classname>.class.sources using file names in class.sources

define add-class-source
$(notdir $(basename $v)).class.sources += $v
endef

$(foreach v, $(class.sources), $(eval $(add-class-source)))

# derive class names from <classname>.class.sources variables
sourcevariables := $(filter %.class.sources, $(.VARIABLES))
classes := $(basename $(basename $(sourcevariables)))

# accumulate all source files specified in makefile
classes.sources := $(sort $(foreach v, $(sourcevariables), $($v)))
all.sources := $(classes.sources) $(lib.setup.sources) \
$(shared.sources) $(common.sources)


#=== object files ==============================================================


# construct object filenames from all C and C++ source file names
classes.objects := $(addsuffix .o, $(basename $(classes.sources)))
common.objects := $(addsuffix .o, $(basename $(common.sources)))
shared.objects := $(addsuffix .o, $(basename $(shared.sources)))
lib.setup.objects := $(addsuffix .o, $(basename $(lib.setup.sources)))
all.objects = $(classes.objects) $(common.objects) $(shared.objects) \
$(lib.setup.objects)


#=== executables ===============================================================


# construct class executable names from class names
classes.executables := $(addsuffix .$(extension), $(classes))

# construct shared lib executable name if shared sources are defined
ifdef shared.sources
shared.lib := lib$(lib.name).$(shared.extension)
else
shared.lib :=
endif


################################################################################
### variables: tools ###########################################################
################################################################################
Expand Down

0 comments on commit a6975e9

Please sign in to comment.