FreeRADIUS / freeradius-server

FreeRADIUS - A multi-protocol policy server.
http://freeradius.org
GNU General Public License v2.0
2.12k stars 1.08k forks source link

Parallel make install fails #2730

Closed geaaru closed 5 years ago

geaaru commented 5 years ago

From v. 3.0.2 as reported in Gentoo Bug tracking system a lot of users receive errors on parallel installation.

It seems that this still is present also in the last v.3.0.19 and after migration to jlibtool.

In my case it happens with -j9:

>>> Install freeradius-3.0.19-r1 into /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image category net-dialup
make -j9 Q= ECHO=true LOCAL_CERT_PRODUCTS= R=/var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image install 
INSTALL dictionary.brocade
INSTALL dictionary.garderos
INSTALL dictionary.navini
INSTALL dictionary.xylan
INSTALL dictionary.usr.illegal
INSTALL dictionary.dante
INSTALL dictionary.cisco.bbsm
INSTALL dictionary.vqp
INSTALL dictionary.telebit
mkdir: cannot create directory ‘/var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr’: File exists
mkdir: cannot create directory ‘/var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/share’: File exists
mkdir: cannot create directory ‘/var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/share’: File exists
mkdir: cannot create directory ‘/var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/share/freeradius’: File exists
mkdir: cannot create directory ‘/var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/share/freeradius’: File exists
mkdir: cannot create directory ‘/var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/share/freeradius’: File exists
INSTALL dictionary.acme
INSTALL dictionary.sonicwall
INSTALL dictionary.travelping
INSTALL dictionary.rfc5090
INSTALL dictionary.hillstone
INSTALL dictionary.yubico
INSTALL dictionary.bluecoat
INSTALL dictionary.nortel
INSTALL dictionary.roaringpenguin
INSTALL dictionary.rfc6677
INSTALL dictionary.wispr
INSTALL dictionary.camiant
INSTALL dictionary.freedhcp
INSTALL dictionary.wimax.alvarion
INSTALL dictionary.ruckus
INSTALL dictionary.checkpoint
INSTALL dictionary.extreme
INSTALL dictionary.zeus
INSTALL dictionary.rfc6930
INSTALL dictionary.rfc2869
INSTALL dictionary.rfc4849
INSTALL dictionary.quiconnect
INSTALL dictionary.audiocodes
INSTALL dictionary.alcatel.esam
INSTALL dictionary.bt
INSTALL dictionary.dlink
INSTALL dictionary.rfc6929
INSTALL dictionary.foundry
INSTALL dictionary.citrix
INSTALL dictionary.quintum
INSTALL dictionary.openser
INSTALL dictionary.rfc4675
INSTALL dictionary.symbol
INSTALL dictionary.compat
INSTALL dictionary.rfc4818
INSTALL dictionary.microsemi
INSTALL dictionary.proxim
INSTALL dictionary.rfc8559
INSTALL dictionary.h3c
INSTALL dictionary.alvarion
INSTALL dictionary.karlnet
INSTALL dictionary.freeswitch
INSTALL dictionary.3gpp
INSTALL dictionary.3com
INSTALL dictionary.rfc5904
INSTALL dictionary.nokia
INSTALL dictionary.utstarcom
INSTALL dictionary.pfsense
INSTALL dictionary.rfc3162
INSTALL dictionary.issanni
INSTALL dictionary.slipstream
INSTALL dictionary.apc
INSTALL dictionary.aptilo
INSTALL dictionary.rfc2867
INSTALL dictionary.freeradius
INSTALL dictionary.infonet
INSTALL dictionary.cablelabs
INSTALL dictionary.xedia
INSTALL dictionary.compatible
INSTALL dictionary.lantronix
INSTALL dictionary.wimax
INSTALL dictionary.shiva
INSTALL dictionary.wichorus
INSTALL dictionary.cisco.asa
INSTALL dictionary.prosoft
INSTALL dictionary.rfc5607
INSTALL dictionary.tropos
INSTALL dictionary.terena
INSTALL dictionary.gandalf
INSTALL dictionary.fdxtended
INSTALL dictionary.dhcp
INSTALL dictionary.riverstone
INSTALL dictionary.netscreen
INSTALL dictionary.rfc2865
INSTALL dictionary.rfc4603
INSTALL dictionary.digium
INSTALL dictionary.packeteer
INSTALL dictionary.ipunplugged
INSTALL dictionary.sangoma
INSTALL dictionary.meru
INSTALL dictionary.softbank
INSTALL dictionary.motorola
INSTALL dictionary.cisco.vpn3000
INSTALL dictionary.broadsoft
INSTALL dictionary.riverbed
INSTALL dictionary.fortinet
INSTALL dictionary.acc
INSTALL dictionary.iea
INSTALL dictionary.nexans
INSTALL dictionary.lucent
INSTALL dictionary.avaya
INSTALL dictionary.rfc4072
INSTALL dictionary.rfc6572
INSTALL dictionary.hp
INSTALL dictionary.zte
INSTALL dictionary.arbor
INSTALL dictionary.rfc7055
INSTALL dictionary.starent
INSTALL dictionary.waverider
INSTALL dictionary.asn
INSTALL dictionary.rfc4679
INSTALL dictionary.rfc5580
INSTALL dictionary.actelis
INSTALL dictionary.adtran
INSTALL dictionary.telkom
INSTALL dictionary.erx
INSTALL dictionary.cisco.vpn5000
INSTALL dictionary.merit
INSTALL dictionary.propel
INSTALL dictionary.cabletron
INSTALL dictionary.microsoft
INSTALL dictionary.rfc4372
INSTALL dictionary.aptis
INSTALL dictionary.versanet
INSTALL dictionary.ntua
INSTALL dictionary.itk
INSTALL dictionary.alcatel.sr
INSTALL dictionary.cisco
INSTALL dictionary.motorola.illegal
INSTALL dictionary.surfnet
INSTALL dictionary.networkphysics
INSTALL dictionary.alcatel-lucent.aaa
INSTALL dictionary.3gpp2
INSTALL dictionary.aerohive
INSTALL dictionary.ruggedcom
INSTALL dictionary.lancom
INSTALL dictionary.infoblox
INSTALL dictionary.huawei
INSTALL dictionary.rfc6911
INSTALL dictionary.rfc3580
INSTALL dictionary.patton
INSTALL dictionary.juniper
INSTALL dictionary.nokia.conflict
INSTALL dictionary.rfc2868
INSTALL dictionary.alvarion.wimax.v2_2
INSTALL dictionary.dellemc
INSTALL dictionary.rfc2866
INSTALL dictionary.cnergee
INSTALL dictionary.rfc5176
INSTALL dictionary.perle
INSTALL dictionary.usr
INSTALL dictionary.mimosa
INSTALL dictionary.bintec
INSTALL dictionary.zyxel
INSTALL dictionary.efficientip
INSTALL dictionary.ascend
INSTALL dictionary.rfc8045
INSTALL dictionary.siemens
INSTALL dictionary.gemtek
INSTALL dictionary.sg
INSTALL dictionary.azaire
INSTALL dictionary.bay
INSTALL dictionary.manzara
INSTALL dictionary.starent.vsa1
INSTALL dictionary.colubris
INSTALL dictionary.wifialliance
INSTALL dictionary.meinberg
INSTALL dictionary.redcreek
INSTALL dictionary.rfc7499
INSTALL dictionary.sofaware
INSTALL dictionary.chillispot
INSTALL dictionary.ericsson.ab
INSTALL dictionary.rfc6519
INSTALL dictionary.unix
INSTALL dictionary.boingo
INSTALL dictionary.airespace
INSTALL dictionary.shasta
INSTALL dictionary.clavister
INSTALL dictionary.ericsson
INSTALL dictionary.freeradius.internal
INSTALL dictionary.columbia_university
INSTALL dictionary.rfc7155
INSTALL dictionary.meraki
INSTALL dictionary.kineto
INSTALL dictionary.alcatel
INSTALL dictionary.rfc7268
INSTALL dictionary.rfc5447
INSTALL dictionary.altiga
INSTALL dictionary
INSTALL dictionary.eltex
INSTALL dictionary.bskyb
INSTALL dictionary.ascend.illegal
INSTALL dictionary.f5
INSTALL dictionary.dragonwave
INSTALL dictionary.walabi
INSTALL dictionary.bristol
INSTALL dictionary.ukerna
INSTALL dictionary.trapeze
INSTALL dictionary.nomadix
INSTALL dictionary.rfc3576
INSTALL dictionary.aruba
INSTALL dictionary.paloalto
INSTALL dictionary.valemount
INSTALL dictionary.infinera
INSTALL dictionary.motorola.wimax
INSTALL dictionary.purewave
INSTALL dictionary.livingston
INSTALL dictionary.ericsson.packet.core.networks
INSTALL dictionary.localweb
INSTALL dictionary.rfc7930
INSTALL dictionary.arista
INSTALL dictionary.bigswitch
INSTALL dictionary.wimax.wichorus
INSTALL dictionary.iana
INSTALL dictionary.epygi
INSTALL dictionary.cosine
INSTALL dictionary.verizon
INSTALL dictionary.alteon
INSTALL dictionary.springtide
INSTALL dictionary.equallogic
INSTALL dictionary.mikrotik
INSTALL dictionary.t_systems_nova
INSTALL smbencrypt.1
INSTALL radzap.1
INSTALL rad_counter.1
INSTALL dhcpclient.1
INSTALL radeapclient.1
INSTALL radclient.1
INSTALL radtest.1
mkdir: cannot create directory ‘/var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/share/man/man1’: File exists
INSTALL radlast.1
INSTALL radwho.1
INSTALL rlm_realm.5
INSTALL rlm_files.5
INSTALL rlm_always.5
INSTALL rlm_idn.5
INSTALL rlm_attr_filter.5
INSTALL rlm_unix.5
INSTALL rlm_sql.5
INSTALL radiusd.conf.5
INSTALL dictionary.5
mkdir: cannot create directory ‘/var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/share/man/man5’: File exists
INSTALL rlm_passwd.5
INSTALL rlm_counter.5
INSTALL checkrad.5
INSTALL unlang.5
INSTALL rlm_mschap.5
INSTALL rlm_digest.5
INSTALL users.5
INSTALL rlm_chap.5
INSTALL rlm_detail.5
INSTALL rlm_pap.5
INSTALL rlm_expr.5
INSTALL clients.conf.5
INSTALL radrelay.conf.5
INSTALL radsqlrelay.8
INSTALL radrelay.8
INSTALL radcrypt.8
INSTALL raddebug.8
INSTALL radmin.8
mkdir: cannot create directory ‘/var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/share/man/man8’: File exists
INSTALL radiusd.8
mkdir: cannot create directory ‘/var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/share/man/man8’: File exists
INSTALL radsniff.8
build/make/jlibtool --mode=install /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/work/freeradius-server-3.0.19/install-sh -c -d -m 755 /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/lib64
Executing: /bin/sh -c /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/work/freeradius-server-3.0.19/install-sh -c -d -m 755 /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/lib64  
build/make/jlibtool --mode=install /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/work/freeradius-server-3.0.19/install-sh -c -d -m 755 /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/bin
build/make/jlibtool --mode=install /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/work/freeradius-server-3.0.19/install-sh -c -d -m 755 /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/share/man/man5
Executing: /bin/sh -c /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/work/freeradius-server-3.0.19/install-sh -c -d -m 755 /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/bin  
Executing: /bin/sh -c /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/work/freeradius-server-3.0.19/install-sh -c -d -m 755 /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/share/man/man5  
build/make/jlibtool --mode=install /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/work/freeradius-server-3.0.19/install-sh -c -d -m 755 /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/share/man/man8
Executing: /bin/sh -c /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/work/freeradius-server-3.0.19/install-sh -c -d -m 755 /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/share/man/man8  
build/make/jlibtool --mode=install /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/work/freeradius-server-3.0.19/install-sh -c -d -m 755 /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/sbin
Executing: /bin/sh -c /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/work/freeradius-server-3.0.19/install-sh -c -d -m 755 /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/sbin  
build/make/jlibtool --mode=install /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/work/freeradius-server-3.0.19/install-sh -c -c -m 755 -rpath /usr/lib64 build/lib/libfreeradius-server.la /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/lib64/
Executing: /bin/sh -c /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/work/freeradius-server-3.0.19/install-sh -c -c -m 755 build/lib/libfreeradius-server.la /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/lib64/  
INSTALL doc/concepts
INSTALL doc/configuration
INSTALL doc/deployment
INSTALL doc/developer
mkdir: cannot create directory ‘/var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/share/doc/freeradius-3.0.19-r1’: File exists
INSTALL doc/modules
INSTALL doc/rfc
Executing: /bin/sh -c /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/work/freeradius-server-3.0.19/install-sh -c -c -m 755 build/lib/.libs/libfreeradius-server.so /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/lib64/  
INSTALL doc/schemas
INSTALL doc/schemas/ldap
INSTALL doc/schemas/ldap/edir
INSTALL doc/schemas/ldap/iplanet
INSTALL doc/schemas/ldap/openldap
INSTALL doc/schemas/ldap/samba
INSTALL doc/schemas/logstash
INSTALL doc/vendor
mkdir: cannot create directory ‘/var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/share/doc/freeradius-3.0.19-r1/schemas’: File exists
mkdir: mkdir: cannot create directory ‘/var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/share/doc/freeradius-3.0.19-r1/schemas/ldap’: File exists
cannot create directory ‘/var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/share/doc/freeradius-3.0.19-r1/schemas/ldap’: File exists
make: *** [doc/all.mk:12: /var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image/usr/share/doc/freeradius-3.0.19-r1/schemas/ldap] Error 1
make: *** Waiting for unfinished jobs....
geaaru commented 5 years ago

As reported in bugzilla if I force -j1 this doesn't happen.

jpereira commented 5 years ago

@geaaru I am pretty sure that code isn't the same as can be found in our repo.

e.g:

  1. Latest revision in https://github.com/FreeRADIUS/freeradius-server/tree/release_3_0_19

    [root@docker-freeradius-ubuntu16 freeradius-server-v3.0.x.git]# git log -1
    commit ab4c767099f263a7cd4109bcdca80ee74210a769
    Author: Matthew Newton <matthew-git@newtoncomputing.co.uk>
    Date:   Wed Apr 10 10:11:23 2019 +0100
    
    fix incorrectly named variable
    [root@docker-freeradius-ubuntu16 freeradius-server-v3.0.x.git]# 
  2. Using the same command as you showed.

[root@docker-freeradius-ubuntu16 freeradius-server-v3.0.x.git]# (./configure  && make -j9 && make -j9 Q= ECHO=true LOCAL_CERT_PRODUCTS= R=/tmp/test/image install) 1> /dev/null 2>&1 
[root@docker-freeradius-ubuntu16 freeradius-server-v3.0.x.git]# echo $?
0
[root@docker-freeradius-ubuntu16 freeradius-server-v3.0.x.git]#

Conclusion: Probably is NOT the same codebase.

ps: My make/gcc versions.

[root@docker-freeradius-ubuntu16 freeradius-server-v3.0.x.git]# make --version | head -1
GNU Make 4.1
[root@docker-freeradius-ubuntu16 freeradius-server-v3.0.x.git]# gcc --version | head -1
gcc (Ubuntu 5.4.0-6ubuntu1~16.04.11) 5.4.0 20160609
[root@docker-freeradius-ubuntu16 freeradius-server-v3.0.x.git]#
geaaru commented 5 years ago

@jpereira the sources are the same (3.0.19 is not yet in gentoo official portage but i will push it soon):

https://github.com/geaaru/geaaru_overlay/blob/master/net-dialup/freeradius/freeradius-3.0.19-r1.ebuild#L12

This is directly from Gentoo portage: https://github.com/gentoo/gentoo/blob/master/net-dialup/freeradius/freeradius-3.0.18.ebuild#L12

About gcc and make ... it's not so easy, different users could have a different version of GCC and make. I only can say that currently in my machine I have this:

# make --version
GNU Make 4.2.1
Built for x86_64-pc-linux-gnu

# gcc --version
gcc (Gentoo Hardened 7.3.0-r3 p1.4) 7.3.0
Copyright (C) 2017 Free Software Foundation, Inc.

But I'm sure that this is a problem that happened in the past also with previous versions. The main problem is that is not always reproducible. I will try to investigate this, but for now it fine that there is a trace of this Gentoo users issue also here.

jpereira commented 5 years ago

@geaaru Okay, remember that in fact Gentoo always calls the wrapper emake instead of make. so, it could be a clue to figure out what is going on there. either way, good luck.

geaaru commented 5 years ago

Normally, emake call make as you can see at the begin of the attached log:

make -j9 Q= ECHO=true LOCAL_CERT_PRODUCTS= R=/var/tmp/portage/net-dialup/freeradius-3.0.19-r1/image install 

However, i will investigate this.

arr2036 commented 5 years ago

Yes, please, @geaaru if you can figure out what's going on then it would definitely be a benefit across all platforms. It'd also help you get familiar with boilermake. Maybe when @alandekok comes back from vacation in a couple of weeks he could look at it too. But I don't think anyone really has much time to spare for this currently.

alandekok commented 5 years ago

The issue is likely that each “install” rule tried to do “mkdir”. Instead, each rule that requires a directory should depend on a rule which makes that directory

But the issue could also be in “make”

On Jun 6, 2019, at 2:57 AM, Arran Cudbard-Bell notifications@github.com wrote:

Yes, please, @geaaru if you can figure out what's going on then it would definitely be a benefit across all platforms. It'd also help you get familiar with boilermake. Maybe when @alandekok comes back from vacation in a couple of weeks he could look at it too. But I don't think anyone really has much time to spare for this currently.

— You are receiving this because you were mentioned. Reply to this email directly, view it on GitHub, or mute the thread.

geaaru commented 5 years ago

mmm, I'm not sure that it's strictly related to make but how Makefiles are been done in FreeRadius. I dunno if with a "pure" autotools tree (with Makefile.am, etc.), Makefiles created by automake tool maybe tries to create all directories before executing the final install commands.

Maybe a solution could be that the creation of all directories could be done before execute install commands.

I will do some tests. However, very low priority.

geaaru commented 5 years ago

I think that depends on the number of cores available.

Just, I can reproduce it that follow jpereira example:

$# for ((i=0;i<50;i++)); do make clean ; rm -rf /tmp/radius || true ;  (./configure --prefix=/tmp/radius  && make -j9 && make -j9 Q= ECHO=true R=/tmp/radius LOCAL_CERT_PRODUCTS=  install) 1> /dev/null 2>&1 ; echo "RESULT $?" ; done
RESULT 2
RESULT 2
RESULT 0
RESULT 2
RESULT 0
RESULT 2
RESULT 2
RESULT 0
RESULT 2
RESULT 2
RESULT 2
RESULT 2
RESULT 2
RESULT 2
RESULT 2
RESULT 2
RESULT 0
RESULT 2
RESULT 2
RESULT 2
RESULT 2
RESULT 2
RESULT 2
RESULT 2
RESULT 2
RESULT 2
RESULT 2
RESULT 2
RESULT 0
RESULT 2
RESULT 2
RESULT 0
RESULT 2
RESULT 2
RESULT 2
RESULT 0
RESULT 2
RESULT 2
RESULT 2
RESULT 0
RESULT 2
RESULT 2
RESULT 0
RESULT 0
RESULT 2
RESULT 2
RESULT 2
RESULT 2
RESULT 2
RESULT 2
alandekok commented 5 years ago

What is normally done for a directory is something like this:

.PHONY: dir
dir:
    @mkdir -p $@

dir/foo: foo | dir

This lets GNU make know that it should create dir before running the dir/foo rule. This works well in most places.

However, our Makefile rules create directories from "wildcard" rules. Which means that there are no rules specific to one directory.

I've added some rules which may help.

alandekok commented 5 years ago

Did the recent changes help?

geaaru commented 5 years ago

I will test soon and I will report feedback. Thanks

geaaru commented 5 years ago

Not yet at least in my env.

$# for ((i=0;i<50;i++)); do make clean ; rm -rf /tmp/radius || true ;  (./configure --prefix=/tmp/radius  && make -j9 && make -j9 Q= ECHO=true R=/tmp/radius LOCAL_CERT_PRODUCTS=  install) 1> /dev/null 2>&1 ; echo "RESULT $?" ; done
RESULT 2
RESULT 0
RESULT 0
RESULT 2
RESULT 2
RESULT 2
RESULT 2
RESULT 2
RESULT 2
RESULT 2
RESULT 2
RESULT 2
RESULT 2

$# cat doc/all.mk | grep 'dir $@'
$(R)$(docdir)/%: doc/% | $(dir $@)

$# bc334d1b3c (HEAD -> v3.0.x, upstream/v3.0.x, origin/v3.0.x) Avoid daemonize radiusd with systemd and drop PIDFile

Just an extract of an error after your patch:

mkdir: cannot create directory ‘/tmp/radius/tmp/radius/share/doc/freeradius/schemas’: File exists
mkdir: cannot create directory ‘/tmp/radius/tmp/radius/share/doc/freeradius/schemas/ldap’: File exists
mkdir: cannot create directory ‘/tmp/radius/tmp/radius/share/doc/freeradius/schemas/ldap’: File exists
make: *** [/home/geaaru/Projects/freeradius-server/doc/all.mk:13: /tmp/radius/tmp/radius/share/doc/freeradius/schemas] Error 1
make: *** Waiting for unfinished jobs....
make: *** [/home/geaaru/Projects/freeradius-server/doc/all.mk:13: /tmp/radius/tmp/radius/share/doc/freeradius/schemas/ldap] Error 1
alandekok commented 5 years ago

Hmm... this looks like it's going to be difficult to fix, then.

geaaru commented 5 years ago

Yeah, not easy to fix. It's needed to see make documentation if there is a way to limit parallelization in some conditions. I saw a lot of projects move away from autotools for problems of performance and parallelization.

Have you ever think to integrate meson, ninja and or other tools?

alandekok commented 5 years ago

@geaaru We've looked at other tools. They're almost all worse. "ninja" is a simple rule parser, and still needs something to generate the rules. Meson requires python, which means learning that. Cmake is just terrible by all measurements.

The system we're using is in scripts/boiler.make. It's pretty horrific to create the gnu makefile magic, but the resulting all.mk files are pretty trivial. Which is what we need.

I've pushed fixes to the master branch which mostly fix this, along with comments as to what to do next. I think for now we can leave v3 alone.