osmith has uploaded this change for review.

View Change

gen_makefile: split gen_make into more functions

Add separate functions for each rule (autoconf, configure, build,
install, reinstall, clean, distclean). This is in preparation for
supporting open5gs (meson).

Change-Id: Id7acfec7f5dd0d3d1a080b3c9d15005e51863e66
---
M gen_makefile.py
1 file changed, 122 insertions(+), 63 deletions(-)

git pull ssh://gerrit.osmocom.org:29418/osmo-dev refs/changes/13/35113/1
diff --git a/gen_makefile.py b/gen_makefile.py
index 7fc2bd2..82ebef0 100755
--- a/gen_makefile.py
+++ b/gen_makefile.py
@@ -214,14 +214,88 @@
touch $@
'''

+def gen_makefile_autoconf(proj, src_proj, distclean_cond):
+ return f'''
+.make.{proj}.autoconf: .make.{proj}.clone {src_proj}/configure.ac
+ if {distclean_cond}; then $(MAKE) {proj}-distclean; fi
+ @echo -e "\\n\\n\\n===== $@\\n"
+ -rm -f {src_proj}/.version
+ cd {src_proj}; autoreconf -fi
+ sync
+ touch $@
+ '''
+
+def gen_makefile_configure(proj, deps_installed, distclean_cond, build_proj,
+ cflags, docker_cmd, build_to_src, configure_opts):
+ return f'''
+.make.{proj}.configure: .make.{proj}.autoconf {deps_installed} $({proj}_configure_files)
+ if {distclean_cond}; then $(MAKE) {proj}-distclean .make.{proj}.autoconf; fi
+ @echo -e "\\n\\n\\n===== $@\\n"
+ -chmod -R ug+w {build_proj}
+ -rm -rf {build_proj}
+ mkdir -p {build_proj}
+ cd {build_proj}; {cflags}{docker_cmd}{build_to_src}/configure {configure_opts}
+ sync
+ touch $@
+ '''
+
+def gen_makefile_build(proj, distclean_cond, build_proj, docker_cmd, jobs,
+ check):
+ return f'''
+.make.{proj}.build: .make.{proj}.configure $({proj}_files)
+ if {distclean_cond}; then $(MAKE) {proj}-distclean .make.{proj}.configure; fi
+ @echo -e "\\n\\n\\n===== $@\\n"
+ {docker_cmd}$(MAKE) -C {build_proj} -j {jobs} {check}
+ sync
+ touch $@
+ '''
+
+def gen_makefile_install(proj, docker_cmd, sudo_make_install, build_proj,
+ no_ldconfig, sudo_ldconfig):
+ return f'''
+.make.{proj}.install: .make.{proj}.build
+ @echo -e "\\n\\n\\n===== $@\\n"
+ {docker_cmd}{sudo_make_install}$(MAKE) -C {build_proj} install
+ {no_ldconfig}{sudo_ldconfig}ldconfig
+ sync
+ touch $@
+ '''
+
+def gen_makefile_reinstall(proj, deps_reinstall, sudo_make_install,
+ build_proj):
+ return f'''
+.PHONY: {proj}-reinstall
+{proj}-reinstall: {deps_reinstall}
+ {sudo_make_install}$(MAKE) -C {build_proj} install
+ '''
+
+def gen_makefile_clean(proj, build_proj):
+ return f'''
+.PHONY: {proj}-clean
+{proj}-clean:
+ @echo -e "\\n\\n\\n===== $@\\n"
+ -chmod -R ug+w {build_proj}
+ -rm -rf {build_proj}
+ -rm -rf .make.{proj}.*
+ '''
+
+def gen_makefile_distclean(proj, src_proj):
+ return f'''
+.PHONY: {proj}-distclean
+{proj}-distclean: {proj}-clean
+ @echo -e "\\n\\n\\n===== $@\\n"
+ $(MAKE) -C {src_proj} distclean
+ '''
+
def gen_make(proj, deps, configure_opts, jobs, make_dir, src_dir, build_dir, url, push_url, sudo_make_install, no_ldconfig, ldconfig_without_sudo, make_check):
src_proj = os.path.join(src_dir, proj)
if proj == 'openbsc':
src_proj = os.path.join(src_proj, 'openbsc')
- build_proj = os.path.join(build_dir, proj)

- make_to_build_proj = os.path.relpath(build_proj, make_dir)
+ build_proj = os.path.join(build_dir, proj)
build_to_src = os.path.relpath(src_proj, build_proj)
+ build_proj = os.path.relpath(build_proj, make_dir)
+
src = os.path.relpath(src_dir, make_dir)
src_proj = os.path.relpath(src_proj, make_dir)
push_url = push_url or url
@@ -231,6 +305,16 @@
else:
configure_opts_str = ''

+ distclean_cond = f'[ -e {src_proj}/config.status ]' if args.auto_distclean else 'false'
+ deps_installed = ' '.join(['.make.%s.install' % d for d in deps])
+ deps_reinstall = ' '.join(['%s-reinstall' %d for d in deps])
+ cflags = 'CFLAGS=-g ' if args.build_debug else ''
+ docker_cmd = f'{args.docker_cmd} ' if args.docker_cmd else ''
+ check = 'check' if make_check else ''
+ no_ldconfig = '#' if no_ldconfig else ''
+ sudo_ldconfig = '' if ldconfig_without_sudo else 'sudo '
+ sudo_make_install = 'sudo ' if sudo_make_install else ''
+
return r'''
### {proj} ###

@@ -251,77 +335,39 @@

{clone_rule}

-.make.{proj}.autoconf: .make.{proj}.clone {src_proj}/configure.ac
- if {distclean_cond}; then $(MAKE) {proj}-distclean; fi
- @echo -e "\n\n\n===== $@\n"
- -rm -f {src_proj}/.version
- cd {src_proj}; autoreconf -fi
- sync
- touch $@
-
-.make.{proj}.configure: .make.{proj}.autoconf {deps_installed} $({proj}_configure_files)
- if {distclean_cond}; then $(MAKE) {proj}-distclean .make.{proj}.autoconf; fi
- @echo -e "\n\n\n===== $@\n"
- -chmod -R ug+w {build_proj}
- -rm -rf {build_proj}
- mkdir -p {build_proj}
- cd {build_proj}; {cflags}{docker_cmd}{build_to_src}/configure {configure_opts}
- sync
- touch $@
+{autoconf_rule}

-.make.{proj}.build: .make.{proj}.configure $({proj}_files)
- if {distclean_cond}; then $(MAKE) {proj}-distclean .make.{proj}.configure; fi
- @echo -e "\n\n\n===== $@\n"
- {docker_cmd}$(MAKE) -C {build_proj} -j {jobs} {check}
- sync
- touch $@
+{configure_rule}

-.make.{proj}.install: .make.{proj}.build
- @echo -e "\n\n\n===== $@\n"
- {docker_cmd}{sudo_make_install}$(MAKE) -C {build_proj} install
- {no_ldconfig}{sudo_ldconfig}ldconfig
- sync
- touch $@
+{build_rule}
+
+{install_rule}
+
+{reinstall_rule}
+
+{clean_rule}
+
+{distclean_rule}

.PHONY: {proj}
{proj}: .make.{proj}.install

-.PHONY: {proj}-reinstall
-{proj}-reinstall: {deps_reinstall}
- {sudo_make_install}$(MAKE) -C {build_proj} install
-
-.PHONY: {proj}-clean
-{proj}-clean:
- @echo -e "\n\n\n===== $@\n"
- -chmod -R ug+w {build_proj}
- -rm -rf {build_proj}
- -rm -rf .make.{proj}.*
-
-.PHONY: {proj}-distclean
-{proj}-distclean: {proj}-clean
- @echo -e "\n\n\n===== $@\n"
- $(MAKE) -C {src_proj} distclean
-
'''.format(
- url=url,
- push_url=push_url,
proj=proj,
- jobs=jobs,
- src=src,
src_proj=src_proj,
- build_proj=make_to_build_proj,
- build_to_src=build_to_src,
clone_rule=gen_makefile_clone(proj, src, src_proj, url, push_url),
- deps_installed=' '.join(['.make.%s.install' % d for d in deps]),
- deps_reinstall=' '.join(['%s-reinstall' %d for d in deps]),
- configure_opts=configure_opts_str,
- sudo_make_install='sudo ' if sudo_make_install else '',
- no_ldconfig='#' if no_ldconfig else '',
- sudo_ldconfig='' if ldconfig_without_sudo else 'sudo ',
- check='check' if make_check else '',
- docker_cmd=f'{args.docker_cmd} ' if args.docker_cmd else '',
- cflags='CFLAGS=-g ' if args.build_debug else '',
- distclean_cond=f'[ -e {src_proj}/config.status ]' if args.auto_distclean else 'false'
+ autoconf_rule=gen_makefile_autoconf(proj, src_proj, distclean_cond),
+ configure_rule=gen_makefile_configure(proj, deps_installed, distclean_cond,
+ build_proj, cflags, docker_cmd,
+ build_to_src, configure_opts_str),
+ build_rule=gen_makefile_build(proj, distclean_cond, build_proj, docker_cmd,
+ jobs, check),
+ install_rule=gen_makefile_install(proj, docker_cmd, sudo_make_install,
+ build_proj, no_ldconfig, sudo_ldconfig),
+ reinstall_rule=gen_makefile_reinstall(proj, deps_reinstall,
+ sudo_make_install, build_proj),
+ clean_rule=gen_makefile_clean(proj, build_proj),
+ distclean_rule=gen_makefile_distclean(proj, src_proj),
)



To view, visit change 35113. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: osmo-dev
Gerrit-Branch: master
Gerrit-Change-Id: Id7acfec7f5dd0d3d1a080b3c9d15005e51863e66
Gerrit-Change-Number: 35113
Gerrit-PatchSet: 1
Gerrit-Owner: osmith <osmith@sysmocom.de>
Gerrit-MessageType: newchange